#include "Common.h" TCHAR* ptszMessage[6]={0}; INT lastIndex=-1; INT_PTR CALLBACK DlgProcOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) { switch (msg) { case WM_INITDIALOG: { DBVARIANT dbv; TranslateDialogDefault(hwndDlg); TCHAR* pszStatus; char tszStatus[6]={0}; CheckDlgButton(hwndDlg,IDC_ENABLEREPLIER,db_get_b(NULL,protocolname,KEY_ENABLED,1)==1); SetDlgItemInt(hwndDlg,IDC_INTERVAL,db_get_w(NULL,protocolname,KEY_REPEATINTERVAL,300)/60,FALSE); if (!db_get_ts(NULL,protocolname,KEY_HEADING,&dbv)) { SetDlgItemText(hwndDlg,IDC_HEADING,dbv.ptszVal); db_free(&dbv); } for (INT c = ID_STATUS_ONLINE; c < ID_STATUS_IDLE; c++) { mir_snprintf(tszStatus, SIZEOF(tszStatus), "%d", c); pszStatus=(TCHAR*)CallService(MS_CLIST_GETSTATUSMODEDESCRIPTION,(WPARAM)c,GSMDF_TCHAR); if (c == ID_STATUS_ONLINE || c == ID_STATUS_FREECHAT || c == ID_STATUS_INVISIBLE) continue; else { SendDlgItemMessage(hwndDlg,IDC_STATUSMODE,CB_ADDSTRING,0,(LPARAM)pszStatus); if (!db_get_ts(NULL, protocolname, tszStatus, &dbv)) { if (c < ID_STATUS_FREECHAT) ptszMessage[c-ID_STATUS_ONLINE-1] = _tcsdup(dbv.ptszVal); else if (c > ID_STATUS_INVISIBLE) ptszMessage[c-ID_STATUS_ONLINE-3] = _tcsdup(dbv.ptszVal); db_free(&dbv); } } } SendDlgItemMessage(hwndDlg,IDC_STATUSMODE,CB_SETCURSEL,0,0); lastIndex=0; SetDlgItemText(hwndDlg,IDC_MESSAGE,ptszMessage[lastIndex]); return TRUE; } case WM_COMMAND: switch (LOWORD(wParam)) { case IDC_ENABLEREPLIER: SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); break; case IDC_STATUSMODE: // First, save last, then load current if (lastIndex>-1) { INT size=SendDlgItemMessage(hwndDlg,IDC_MESSAGE,WM_GETTEXTLENGTH,0,0)+1; GetDlgItemText(hwndDlg,IDC_MESSAGE,ptszMessage[lastIndex],size); } lastIndex=SendDlgItemMessage(hwndDlg,IDC_STATUSMODE,CB_GETCURSEL,0,0); SetDlgItemText(hwndDlg,IDC_MESSAGE,ptszMessage[lastIndex]); SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); break; case IDC_DEFAULT: SetDlgItemText(hwndDlg,IDC_MESSAGE,TranslateTS(ptszDefaultMsg[lastIndex])); SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); break; case IDC_INTERVAL: case IDC_HEADING: case IDC_MESSAGE: if ((HIWORD(wParam) == BN_CLICKED || HIWORD(wParam) == EN_CHANGE) && (HWND)lParam == GetFocus()) SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); break; } break; case WM_NOTIFY: switch (((LPNMHDR)lParam)->code) { case PSN_APPLY: { TCHAR ptszText[1024]; BOOL translated; BOOL fEnabled = IsDlgButtonChecked(hwndDlg, IDC_ENABLEREPLIER) == 1; db_set_b(NULL, protocolname, KEY_ENABLED, (BYTE)fEnabled); CLISTMENUITEM mi = { sizeof(mi) }; mi.flags = CMIM_NAME | CMIM_ICON | CMIF_TCHAR; mi.ptszName = fEnabled ? LPGENT("Disable Auto&reply") : LPGENT("Enable Auto&reply"); mi.icolibItem = fEnabled ? iconList[0].hIcolib : iconList[1].hIcolib; Menu_ModifyItem(hEnableMenu, &mi); GetDlgItemText(hwndDlg, IDC_HEADING, ptszText, SIZEOF(ptszText)); db_set_ts(NULL, protocolname, KEY_HEADING, ptszText); INT size = GetDlgItemInt(hwndDlg, IDC_INTERVAL, &translated, FALSE); if (translated) interval=size*60; db_set_w(NULL,protocolname,KEY_REPEATINTERVAL,interval); size=SendDlgItemMessage(hwndDlg,IDC_MESSAGE,WM_GETTEXTLENGTH,0,0)+1; GetDlgItemText(hwndDlg,IDC_MESSAGE,ptszMessage[lastIndex],size); for (int c=ID_STATUS_ONLINE; cID_STATUS_INVISIBLE && ptszMessage[c-ID_STATUS_ONLINE-3]) db_set_ts(NULL,protocolname,szStatus,ptszMessage[c-ID_STATUS_ONLINE-3]); else db_unset(NULL,protocolname,szStatus); } } return TRUE; } } break; case WM_DESTROY: for (int c=ID_STATUS_ONLINE; cID_STATUS_INVISIBLE) ptszMessage[c-ID_STATUS_ONLINE-3]=NULL; } } break; } return FALSE; } INT OptInit(WPARAM wParam,LPARAM lParam) { OPTIONSDIALOGPAGE odp = { 0 }; odp.cbSize = sizeof(odp); odp.position = -790000000; odp.hInstance = hinstance; odp.pszTemplate = MAKEINTRESOURCEA(IDD_OPTION); odp.pszTitle = LPGEN("Simple Auto Replier"); odp.pszGroup = LPGEN("Message Sessions"); odp.flags = ODPF_BOLDGROUPS; odp.pfnDlgProc = DlgProcOpts; Options_AddPage(wParam, &odp); return 0; }