home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
DOS/V Power Report 2001 December (DVD)
/
VPR0112A.ISO
/
OLS
/
TCL230JA95
/
tcl230ja95.lzh
/
source.lzh
/
exe
/
pagealarm.c
< prev
next >
Wrap
C/C++ Source or Header
|
2001-02-17
|
16KB
|
603 lines
/*-------------------------------------------
pagealarm.c
「アラーム」プロパティページ
KAZUBON 1997-1998
---------------------------------------------*/
#include "tclock.h"
static void OnInit(HWND hDlg);
static void OnApply(HWND hDlg);
static void OnDestroy(HWND hDlg);
static void ReadAlarmFromReg(PALARMSTRUCT pAS, int num);
static void SaveAlarmToReg(PALARMSTRUCT pAS, int num);
static void GetAlarmFromDlg(HWND hDlg, PALARMSTRUCT pAS);
static void SetAlarmToDlg(HWND hDlg, PALARMSTRUCT pAS);
static void OnChangeAlarm(HWND hDlg);
static void OnDropDownAlarm(HWND hDlg);
static void OnDay(HWND hDlg);
static void OnAlermJihou(HWND hDlg, WORD id);
static void OnSanshoAlarm(HWND hDlg, WORD id);
static void On12Hour(HWND hDlg);
static void OnDelAlarm(HWND hDlg);
static void OnFileChange(HWND hDlg, WORD id);
static void OnTest(HWND hDlg, WORD id);
static int curAlarm;
static BOOL bPlaying = FALSE;
#define SendPSChanged(hDlg) SendMessage(GetParent(hDlg),PSM_CHANGED,(WPARAM)(hDlg),0)
/*------------------------------------------------
「アラーム」ページ用ダイアログプロシージャ
--------------------------------------------------*/
BOOL CALLBACK PageAlarmProc(HWND hDlg, UINT message,
WPARAM wParam, LPARAM lParam)
{
switch(message)
{
case WM_INITDIALOG:
OnInit(hDlg);
return TRUE;
case WM_COMMAND:
{
WORD id, code;
id = LOWORD(wParam); code = HIWORD(wParam);
// a combo-box to select alarm name
if(id == IDC_COMBOALARM)
{
if(code == CBN_SELCHANGE)
OnChangeAlarm(hDlg);
else if(code == CBN_DROPDOWN)
OnDropDownAlarm(hDlg);
}
//「アラームを鳴らす」「時報を鳴らす」
else if(id == IDC_ALARM || id == IDC_JIHOU)
OnAlermJihou(hDlg, id);
// 時、分テキストボックス
else if((id == IDC_HOURALARM || id == IDC_MINUTEALARM)
&& code == EN_CHANGE)
SendPSChanged(hDlg);
else if(id == IDC_ALARMDAY) // Day...
{
OnDay(hDlg);
}
// 「サウンド」テキストボックス
else if((id == IDC_FILEALARM || id == IDC_FILEJIHOU)
&& code == EN_CHANGE)
{
OnFileChange(hDlg, id);
SendPSChanged(hDlg);
}
// 「...」
else if(id == IDC_SANSHOALARM || id == IDC_SANSHOJIHOU)
{
OnSanshoAlarm(hDlg, id);
OnFileChange(hDlg, (WORD)(id - 1));
SendPSChanged(hDlg);
}
// 「12時間制」
else if(id == IDC_12HOURALARM)
On12Hour(hDlg);
// 「繰り返す」「点滅する」
else if(id == IDC_REPEATALARM || id == IDC_REPEATJIHOU ||
id == IDC_BLINKALARM || id == IDC_BLINKJIHOU)
SendPSChanged(hDlg);
// 「×」
else if(id == IDC_DELALARM)
OnDelAlarm(hDlg);
// サウンドのテスト
else if(id == IDC_TESTALARM || id == IDC_TESTJIHOU)
OnTest(hDlg, id);
return TRUE;
}
case WM_NOTIFY:
switch(((NMHDR *)lParam)->code)
{
case PSN_APPLY: OnApply(hDlg); break;
case PSN_HELP: MyHelp(GetParent(hDlg), 3); break;
}
return TRUE;
case WM_DESTROY:
OnDestroy(hDlg);
if(bPlaying) StopFile(); bPlaying = FALSE;
break;
case MM_MCINOTIFY:
case MM_WOM_DONE:
StopFile(); bPlaying = FALSE;
SendDlgItemMessage(hDlg, IDC_TESTALARM, BM_SETIMAGE, IMAGE_ICON,
(LPARAM)g_hIconPlay);
SendDlgItemMessage(hDlg, IDC_TESTJIHOU, BM_SETIMAGE, IMAGE_ICON,
(LPARAM)g_hIconPlay);
return TRUE;
}
return FALSE;
}
/*------------------------------------------------
initialize
--------------------------------------------------*/
void OnInit(HWND hDlg)
{
char s[1024];
int i, count, index;
HFONT hfont;
hfont = (HFONT)GetStockObject(DEFAULT_GUI_FONT);
if(hfont)
{
SendDlgItemMessage(hDlg, IDC_COMBOALARM,
WM_SETFONT, (WPARAM)hfont, 0);
SendDlgItemMessage(hDlg, IDC_FILEALARM,
WM_SETFONT, (WPARAM)hfont, 0);
SendDlgItemMessage(hDlg, IDC_FILEJIHOU,
WM_SETFONT, (WPARAM)hfont, 0);
}
index = CBAddString(hDlg, IDC_COMBOALARM, (LPARAM)MyString(IDS_ADDALARM));
CBSetItemData(hDlg, IDC_COMBOALARM, index, 0);
count = GetMyRegLong("", "AlarmNum", 0);
if(count < 1) count = 0;
for(i = 0; i < count; i++)
{
PALARMSTRUCT pAS;
pAS = malloc(sizeof(ALARMSTRUCT));
ReadAlarmFromReg(pAS, i);
index = CBAddString(hDlg, IDC_COMBOALARM, (LPARAM)pAS->name);
CBSetItemData(hDlg, IDC_COMBOALARM, index, (LPARAM)pAS);
if(i == 0) SetAlarmToDlg(hDlg, pAS);
}
if(count > 0)
{
CBSetCurSel(hDlg, IDC_COMBOALARM, 1);
curAlarm = 1;
}
else
{
ALARMSTRUCT as;
CBSetCurSel(hDlg, IDC_COMBOALARM, 0);
curAlarm = -1;
memset(&as, 0, sizeof(as));
as.hour = 12;
as.days = 0x7f;
SetAlarmToDlg(hDlg, &as);
}
CheckDlgButton(hDlg, IDC_JIHOU,
GetMyRegLong("", "Jihou", FALSE));
GetMyRegStr("", "JihouFile", s, 1024, "");
SetDlgItemText(hDlg, IDC_FILEJIHOU, s);
CheckDlgButton(hDlg, IDC_REPEATJIHOU,
GetMyRegLong("", "JihouRepeat", FALSE));
CheckDlgButton(hDlg, IDC_BLINKJIHOU,
GetMyRegLong("", "JihouBlink", FALSE));
OnAlermJihou(hDlg, IDC_JIHOU);
SendDlgItemMessage(hDlg, IDC_TESTALARM, BM_SETIMAGE, IMAGE_ICON,
(LPARAM)g_hIconPlay);
OnFileChange(hDlg, IDC_FILEALARM);
SendDlgItemMessage(hDlg, IDC_TESTJIHOU, BM_SETIMAGE, IMAGE_ICON,
(LPARAM)g_hIconPlay);
OnFileChange(hDlg, IDC_FILEJIHOU);
SendDlgItemMessage(hDlg, IDC_DELALARM, BM_SETIMAGE, IMAGE_ICON,
(LPARAM)g_hIconDel);
bPlaying = FALSE;
}
/*------------------------------------------------
apply - save settings
--------------------------------------------------*/
void OnApply(HWND hDlg)
{
char s[1024];
int i, count, n_alarm;
PALARMSTRUCT pAS;
n_alarm = 0;
if(curAlarm < 0)
{
char name[40];
GetDlgItemText(hDlg, IDC_COMBOALARM, name, 40);
if(name[0] && IsDlgButtonChecked(hDlg, IDC_ALARM))
{
pAS = malloc(sizeof(ALARMSTRUCT));
if(pAS)
{
int index;
GetAlarmFromDlg(hDlg, pAS);
index = CBAddString(hDlg, IDC_COMBOALARM, (LPARAM)pAS->name);
CBSetItemData(hDlg, IDC_COMBOALARM, index, (LPARAM)pAS);
curAlarm = index;
CBSetCurSel(hDlg, IDC_COMBOALARM, index);
EnableDlgItem(hDlg, IDC_DELALARM, TRUE);
}
}
}
else
{
pAS = (PALARMSTRUCT)CBGetItemData(hDlg, IDC_COMBOALARM, curAlarm);
if(pAS)
GetAlarmFromDlg(hDlg, pAS);
}
count = CBGetCount(hDlg, IDC_COMBOALARM);
for(i = 0; i < count; i++)
{
PALARMSTRUCT pAS;
pAS = (PALARMSTRUCT)CBGetItemData(hDlg, IDC_COMBOALARM, i);
if(pAS)
{
SaveAlarmToReg(pAS, n_alarm);
n_alarm++;
}
}
for(i = n_alarm; ; i++)
{
char subkey[20];
wsprintf(subkey, "Alarm%d", i + 1);
if(!DelMyRegKey(subkey)) break;
}
SetMyRegLong("", "AlarmNum", n_alarm);
SetMyRegLong("", "Jihou",
IsDlgButtonChecked(hDlg, IDC_JIHOU));
GetDlgItemText(hDlg, IDC_FILEJIHOU, s, 1024);
SetMyRegStr("", "JihouFile", s);
SetMyRegLong("", "JihouRepeat",
IsDlgButtonChecked(hDlg, IDC_REPEATJIHOU));
SetMyRegLong("", "JihouBlink",
IsDlgButtonChecked(hDlg, IDC_BLINKJIHOU));
InitAlarm(); // alarm.c
}
/*------------------------------------------------
free memories associated with combo box.
--------------------------------------------------*/
void OnDestroy(HWND hDlg)
{
int i, count;
count = CBGetCount(hDlg, IDC_COMBOALARM);
for(i = 0; i < count; i++)
{
PALARMSTRUCT pAS;
pAS = (PALARMSTRUCT)CBGetItemData(hDlg, IDC_COMBOALARM, i);
if(pAS) free(pAS);
}
}
void ReadAlarmFromReg(PALARMSTRUCT pAS, int num)
{
char subkey[20];
wsprintf(subkey, "Alarm%d", num + 1);
GetMyRegStr(subkey, "Name", pAS->name, 40, "");
pAS->bAlarm = GetMyRegLong(subkey, "Alarm", FALSE);
pAS->hour = GetMyRegLong(subkey, "Hour", 12);
pAS->minute = GetMyRegLong(subkey, "Minute", 0);
GetMyRegStr(subkey, "File", pAS->fname, 1024, "");
pAS->bHour12 = GetMyRegLong(subkey, "Hour12", TRUE);
pAS->bRepeat = GetMyRegLong(subkey, "Repeat", FALSE);
pAS->bBlink = GetMyRegLong(subkey, "Blink", FALSE);
pAS->days = GetMyRegLong(subkey, "Days", 0x7f);
if(pAS->name[0] == 0)
wsprintf(pAS->name, "%02d:%02d", pAS->hour, pAS->minute);
}
void SaveAlarmToReg(PALARMSTRUCT pAS, int num)
{
char subkey[20];
wsprintf(subkey, "Alarm%d", num + 1);
SetMyRegStr(subkey, "Name", pAS->name);
SetMyRegLong(subkey, "Alarm", pAS->bAlarm);
SetMyRegLong(subkey, "Hour", pAS->hour);
SetMyRegLong(subkey, "Minute", pAS->minute);
SetMyRegStr(subkey, "File", pAS->fname);
SetMyRegLong(subkey, "Hour12", pAS->bHour12);
SetMyRegLong(subkey, "Repeat", pAS->bRepeat);
SetMyRegLong(subkey, "Blink", pAS->bBlink);
SetMyRegLong(subkey, "Days", pAS->days);
}
void GetAlarmFromDlg(HWND hDlg, PALARMSTRUCT pAS)
{
GetDlgItemText(hDlg, IDC_COMBOALARM, pAS->name, 40);
pAS->bAlarm = IsDlgButtonChecked(hDlg, IDC_ALARM);
pAS->hour =
SendDlgItemMessage(hDlg, IDC_SPINHOUR, UDM_GETPOS, 0, 0);
pAS->minute =
SendDlgItemMessage(hDlg, IDC_SPINMINUTE, UDM_GETPOS, 0, 0);
GetDlgItemText(hDlg, IDC_FILEALARM, pAS->fname, MAX_PATH);
pAS->bHour12 = IsDlgButtonChecked(hDlg, IDC_12HOURALARM);
pAS->bRepeat = IsDlgButtonChecked(hDlg, IDC_REPEATALARM);
pAS->bBlink = IsDlgButtonChecked(hDlg, IDC_BLINKALARM);
pAS->days = GetDlgItemInt(hDlg, IDC_HIDDENALARMDAY, NULL, FALSE);
}
void SetAlarmToDlg(HWND hDlg, PALARMSTRUCT pAS)
{
SetDlgItemText(hDlg, IDC_COMBOALARM, pAS->name);
CheckDlgButton(hDlg, IDC_ALARM, pAS->bAlarm);
SendDlgItemMessage(hDlg, IDC_SPINHOUR, UDM_SETRANGE, 0,
MAKELONG(23, 0));
SendDlgItemMessage(hDlg, IDC_SPINHOUR, UDM_SETPOS, 0,
pAS->hour);
SendDlgItemMessage(hDlg, IDC_SPINMINUTE, UDM_SETRANGE, 0,
MAKELONG(59, 0));
SendDlgItemMessage(hDlg, IDC_SPINMINUTE, UDM_SETPOS, 0,
pAS->minute);
SetDlgItemText(hDlg, IDC_FILEALARM, pAS->fname);
CheckDlgButton(hDlg, IDC_12HOURALARM, pAS->bHour12);
CheckDlgButton(hDlg, IDC_REPEATALARM, pAS->bRepeat);
CheckDlgButton(hDlg, IDC_BLINKALARM, pAS->bBlink);
SetDlgItemInt(hDlg, IDC_HIDDENALARMDAY, pAS->days, FALSE);
On12Hour(hDlg);
OnFileChange(hDlg, IDC_FILEALARM);
OnAlermJihou(hDlg, IDC_ALARM);
}
/*------------------------------------------------
selected alarm by combobox
--------------------------------------------------*/
void OnChangeAlarm(HWND hDlg)
{
PALARMSTRUCT pAS;
int index;
index = CBGetCurSel(hDlg, IDC_COMBOALARM);
if(curAlarm >= 0 && index == curAlarm) return;
if(curAlarm < 0)
{
char name[40];
GetDlgItemText(hDlg, IDC_COMBOALARM, name, 40);
if(name[0] && IsDlgButtonChecked(hDlg, IDC_ALARM))
{
pAS = malloc(sizeof(ALARMSTRUCT));
if(pAS)
{
int index;
GetAlarmFromDlg(hDlg, pAS);
index = CBAddString(hDlg, IDC_COMBOALARM, (LPARAM)pAS->name);
CBSetItemData(hDlg, IDC_COMBOALARM, index, (LPARAM)pAS);
curAlarm = index;
}
}
}
else
{
pAS = (PALARMSTRUCT)CBGetItemData(hDlg, IDC_COMBOALARM, curAlarm);
if(pAS) GetAlarmFromDlg(hDlg, pAS);
}
pAS = (PALARMSTRUCT)CBGetItemData(hDlg, IDC_COMBOALARM, index);
if(pAS)
{
SetAlarmToDlg(hDlg, pAS);
EnableDlgItem(hDlg, IDC_DELALARM, TRUE);
curAlarm = index;
}
else
{
ALARMSTRUCT as;
memset(&as, 0, sizeof(as));
as.hour = 12;
as.days = 0x7f;
SetAlarmToDlg(hDlg, &as);
EnableDlgItem(hDlg, IDC_DELALARM, FALSE);
curAlarm = -1;
}
}
/*------------------------------------------------
combo box is about to be made visible
--------------------------------------------------*/
void OnDropDownAlarm(HWND hDlg)
{
PALARMSTRUCT pAS;
char name[40];
int index;
if(curAlarm < 0) return;
pAS = (PALARMSTRUCT)CBGetItemData(hDlg, IDC_COMBOALARM, curAlarm);
if(pAS == 0) return;
GetDlgItemText(hDlg, IDC_COMBOALARM, name, 40);
if(strcmp(name, pAS->name) != 0)
{
strcpy(pAS->name, name);
CBDeleteString(hDlg, IDC_COMBOALARM, curAlarm);
index = CBInsertString(hDlg, IDC_COMBOALARM, curAlarm, name);
CBSetItemData(hDlg, IDC_COMBOALARM, index, (LPARAM)pAS);
CBSetCurSel(hDlg, IDC_COMBOALARM, index);
curAlarm = index;
}
}
/*------------------------------------------------
"Day..."
--------------------------------------------------*/
void OnDay(HWND hDlg)
{
int nOld, nNew;
nOld = GetDlgItemInt(hDlg, IDC_HIDDENALARMDAY, NULL, FALSE);
nNew = SetAlarmDay(hDlg, nOld);
if(nNew != nOld)
{
SetDlgItemInt(hDlg, IDC_HIDDENALARMDAY, nNew, FALSE);
SendPSChanged(hDlg);
}
}
/*------------------------------------------------
「アラームを鳴らす」「時報を鳴らす」
--------------------------------------------------*/
void OnAlermJihou(HWND hDlg, WORD id)
{
int s, e, i;
BOOL b;
if(id == IDC_ALARM)
{
s = IDC_LABTIMEALARM; e = IDC_BLINKALARM;
}
else
{
s = IDC_LABSOUNDJIHOU; e = IDC_BLINKJIHOU;
}
b = IsDlgButtonChecked(hDlg, id);
for(i = s; i <= e; i++) EnableDlgItem(hDlg, i, b);
if(id == IDC_ALARM)
OnFileChange(hDlg, IDC_FILEALARM);
else
OnFileChange(hDlg, IDC_FILEJIHOU);
if(b && id == IDC_ALARM)
{
char name[40];
GetDlgItemText(hDlg, IDC_COMBOALARM, name, 40);
if(strcmp(name, MyString(IDS_ADDALARM)) == 0)
SetDlgItemText(hDlg, IDC_COMBOALARM, "");
}
SendPSChanged(hDlg);
}
/*------------------------------------------------
browse sound file
--------------------------------------------------*/
void OnSanshoAlarm(HWND hDlg, WORD id)
{
char deffile[MAX_PATH], fname[MAX_PATH];
GetDlgItemText(hDlg, id - 1, deffile, MAX_PATH);
if(!BrowseSoundFile(hDlg, deffile, fname)) // soundselect.c
return;
SetDlgItemText(hDlg, id - 1, fname);
PostMessage(hDlg, WM_NEXTDLGCTL, 1, FALSE);
}
/*------------------------------------------------
「12時間制」
--------------------------------------------------*/
void On12Hour(HWND hDlg)
{
WORD h, u, l;
h = (WORD)SendDlgItemMessage(hDlg, IDC_SPINHOUR, UDM_GETPOS, 0, 0);
if(h > 23) h = 23;
if(h < 0) h = 0;
//スピンボタンコントロールの最大値と最小値の設定
u = 23; l = 0;
if(IsDlgButtonChecked(hDlg, IDC_12HOURALARM))
{
if(h > 12) h -= 12;
if(h == 0) h = 12;
u = 12; l = 1;
}
SendDlgItemMessage(hDlg, IDC_SPINHOUR, UDM_SETPOS, 0, h);
SendDlgItemMessage(hDlg, IDC_SPINHOUR, UDM_SETRANGE, 0,
MAKELONG(u, l));
SendPSChanged(hDlg);
}
/*------------------------------------------------
アラーム削除
--------------------------------------------------*/
void OnDelAlarm(HWND hDlg)
{
PALARMSTRUCT pAS;
if(curAlarm < 0) return;
pAS = (PALARMSTRUCT)CBGetItemData(hDlg, IDC_COMBOALARM, curAlarm);
if(pAS)
{
PostMessage(hDlg, WM_NEXTDLGCTL, 1, FALSE);
CBDeleteString(hDlg, IDC_COMBOALARM, curAlarm);
free(pAS);
if(curAlarm > 0) curAlarm--;
CBSetCurSel(hDlg, IDC_COMBOALARM, curAlarm);
pAS = (PALARMSTRUCT)CBGetItemData(hDlg, IDC_COMBOALARM, curAlarm);
if(pAS) SetAlarmToDlg(hDlg, pAS);
else
{
ALARMSTRUCT as;
memset(&as, 0, sizeof(as));
as.hour = 14;
as.days = 0x7f;
SetAlarmToDlg(hDlg, &as);
EnableDlgItem(hDlg, IDC_DELALARM, FALSE);
curAlarm = -1;
}
}
}
/*------------------------------------------------
PLAY/STOPボタンの有効/無効化
--------------------------------------------------*/
void OnFileChange(HWND hDlg, WORD id)
{
char fname[MAX_PATH];
BOOL b = FALSE;
GetDlgItemText(hDlg, id, fname, MAX_PATH);
if(IsWindowEnabled(GetDlgItem(hDlg, id)))
b = TRUE;
EnableDlgItem(hDlg, id + 3, b);
EnableDlgItem(hDlg,
(id==IDC_FILEALARM)?IDC_REPEATALARM:IDC_REPEATJIHOU,
b?IsMMFile(fname):FALSE);
}
/*------------------------------------------------
サウンドのPLAY/STOP
--------------------------------------------------*/
void OnTest(HWND hDlg, WORD id)
{
char fname[MAX_PATH];
GetDlgItemText(hDlg, id - 3, fname, MAX_PATH);
if(fname[0] == 0) return;
if((HICON)SendDlgItemMessage(hDlg, id, BM_GETIMAGE, IMAGE_ICON, 0)
== g_hIconPlay)
{
if(PlayFile(hDlg, fname, 0))
{
SendDlgItemMessage(hDlg, id, BM_SETIMAGE, IMAGE_ICON,
(LPARAM)g_hIconStop);
InvalidateRect(GetDlgItem(hDlg, id), NULL, FALSE);
bPlaying = TRUE;
}
}
else
{
StopFile();
bPlaying = FALSE;
}
}