#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,DBGetContactSettingByte(NULL,protocolname,KEY_ENABLED,1)==1); SetDlgItemInt(hwndDlg,IDC_INTERVAL,DBGetContactSettingWord(NULL,protocolname,KEY_REPEATINTERVAL,300)/60,FALSE); if (!DBGetContactSettingTString(NULL,protocolname,KEY_HEADING,&dbv)) { SetDlgItemText(hwndDlg,IDC_HEADING,dbv.ptszVal); DBFreeVariant(&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 == 40072 || c == 40077 || c == 40078) continue; else { SendDlgItemMessage(hwndDlg,IDC_STATUSMODE,CB_ADDSTRING,0,(LPARAM)pszStatus); if (!DBGetContactSettingTString(NULL, protocolname, tszStatus, &dbv)) { if (c < 40077) ptszMessage[c-ID_STATUS_ONLINE-1] = _tcsdup(dbv.ptszVal); else if (c > 40078) ptszMessage[c-ID_STATUS_ONLINE-3] = _tcsdup(dbv.ptszVal); DBFreeVariant(&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: { INT size; TCHAR ptszText[1024]; char szStatus[6]={0}; BOOL translated; fEnabled=IsDlgButtonChecked(hwndDlg,IDC_ENABLEREPLIER)==1; DBWriteContactSettingByte(NULL,protocolname,KEY_ENABLED,(BYTE)fEnabled); GetDlgItemText(hwndDlg,IDC_HEADING,ptszText,SIZEOF(ptszText)); DBWriteContactSettingTString(NULL,protocolname,KEY_HEADING,ptszText); size=GetDlgItemInt(hwndDlg,IDC_INTERVAL,&translated,FALSE); if (translated) interval=size*60; DBWriteContactSettingWord(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; c40078 && ptszMessage[c-ID_STATUS_ONLINE-3]) DBWriteContactSettingTString(NULL,protocolname,szStatus,ptszMessage[c-ID_STATUS_ONLINE-3]); else DBDeleteContactSetting(NULL,protocolname,szStatus); } } return TRUE; } } break; case WM_DESTROY: for (int c=ID_STATUS_ONLINE; c40078) 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("Plugins"); odp.flags = ODPF_BOLDGROUPS; odp.pfnDlgProc = DlgProcOpts; Options_AddPage(wParam, &odp); return 0; }