INT_PTR CALLBACK DlgProcOptionsPage(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch(uMsg) { case WM_INITDIALOG: { char key[64]; int count = 0; CMString replies; TranslateDialogDefault(hwndDlg); variables_skin_helpbutton(hwndDlg, IDC_VARIABLES); ShowWindow(GetDlgItem(hwndDlg, IDC_VARIABLES_HINT), ServiceExists(MS_VARS_FORMATSTRING)); mir_subclassWindow(GetDlgItem(hwndDlg, IDC_REPLIES), MessageEditSubclassProc); mir_snprintf(key, _countof(key), "ImmediatelySend_%x", iNumber); CheckDlgButton(hwndDlg, IDC_IMMEDIATELY, db_get_w(NULL, MODULE, key, 1) ? BST_CHECKED : BST_UNCHECKED); mir_snprintf(key, _countof(key), "RepliesCount_%x", iNumber); count = db_get_w(NULL, MODULE, key, 0); for (int i = 0; i < count; i++) { mir_snprintf(key, _countof(key), "Reply_%x_%x", iNumber, i); wchar_t *value = db_get_wsa(NULL, MODULE, key); if (value) { replies.Append(value); replies.Append(_T("\r\n")); } mir_free(value); } SetDlgItemText(hwndDlg, IDC_REPLIES, replies.GetBuffer()); } return TRUE; case WM_COMMAND: if (HIWORD(wParam) == BN_CLICKED) { switch(LOWORD(wParam)) { case IDC_VARIABLES: variables_showhelp(hwndDlg, IDC_REPLIES, VHF_SIMPLEDLG, NULL, NULL); break; case IDC_IMMEDIATELY: SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); break; } } break; case WM_NOTIFY: { NMHDR *p = ((LPNMHDR)lParam); switch (p->code) { case PSN_APPLY: { char key[64]; int count = 0; wchar_t *tszReplies; mir_snprintf(key, _countof(key), "RepliesCount_%x", iNumber); count = db_get_b(NULL, MODULE, key, 0); for (int i = 0; i < count; i++) { mir_snprintf(key, _countof(key), "Reply_%x_%x", iNumber, i); db_unset(NULL, MODULE, key); } int length = SendDlgItemMessage(hwndDlg, IDC_REPLIES, WM_GETTEXTLENGTH, 0, 0); tszReplies = (wchar_t*)mir_alloc(sizeof(wchar_t)* (length + 1)); GetDlgItemText(hwndDlg, IDC_REPLIES, tszReplies, length + 1); tszReplies[length] = '\0'; { CMString replies = tszReplies; if (replies.Right(2) != _T("\r\n")) replies.Append(_T("\r\n")); count = 0; int pos = -1, prev = 0; while ((pos = replies.Find(_T("\r\n"), prev)) != -1) { mir_snprintf(key, _countof(key), "Reply_%x_%x", iNumber, count++); db_set_ws(NULL, MODULE, key, replies.Mid(prev, pos - prev).GetBuffer()); prev = pos + 2; } } mir_free(tszReplies); mir_snprintf(key, _countof(key), "RepliesCount_%x", iNumber); db_set_w(NULL, MODULE, key, count); mir_snprintf(key, _countof(key), "ImmediatelySend_%x", iNumber); db_set_b(NULL, MODULE, key, (BYTE)IsDlgButtonChecked(hwndDlg, IDC_IMMEDIATELY)); return TRUE; } break; } } break; } if (HIWORD(wParam) == EN_CHANGE && GetFocus() == (HWND)lParam) SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); return FALSE; }
INT_PTR CALLBACK MainOptDlg(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) { static bool s_fRedraw; switch (msg) { case WM_INITDIALOG: TranslateDialogDefault(hwndDlg); { g_fOptionsOpen = true; s_fRedraw = false; // set icon and tooltip for variables help button variables_skin_helpbutton(hwndDlg, IDC_MAINOPT_VARHELP); SendDlgItemMessage(hwndDlg, IDC_MAINOPT_PASS, EM_LIMITTEXT, MAXPASSLEN, 0); // limit password length DBVARIANT dbVar; if (!db_get_s(NULL, MOD_NAME, "password", &dbVar)) { SetDlgItemTextA(hwndDlg, IDC_MAINOPT_PASS, dbVar.pszVal); db_free(&dbVar); } CheckDlgButton(hwndDlg, IDC_MAINOPT_SETONLINEBACK, (g_wMask & OPT_SETONLINEBACK) ? BST_CHECKED : BST_UNCHECKED); CheckDlgButton(hwndDlg, IDC_MAINOPT_CHANGESTATUSBOX, (g_wMask & OPT_CHANGESTATUS) ? BST_CHECKED : BST_UNCHECKED); CheckDlgButton(hwndDlg, IDC_MAINOPT_DISABLESNDS, (g_wMask & OPT_DISABLESNDS) ? BST_CHECKED : BST_UNCHECKED); CheckDlgButton(hwndDlg, IDC_MAINOPT_REQPASS, (g_wMask & OPT_REQPASS) ? BST_CHECKED : BST_UNCHECKED); CheckDlgButton(hwndDlg, IDC_MAINOPT_ONLINEONLY, (g_wMask & OPT_ONLINEONLY) ? BST_CHECKED : BST_UNCHECKED); CheckDlgButton(hwndDlg, IDC_MAINOPT_USEDEFMSG, (g_wMask & OPT_USEDEFMSG) ? BST_CHECKED : BST_UNCHECKED); CheckDlgButton(hwndDlg, IDC_MAINOPT_TRAYICON, (g_wMask & OPT_TRAYICON) ? BST_CHECKED : BST_UNCHECKED); for (int i = ID_STATUS_OFFLINE; i <= ID_STATUS_OUTTOLUNCH; i++) SendDlgItemMessage(hwndDlg, IDC_MAINOPT_CHGSTS, CB_INSERTSTRING, -1, (LPARAM)pcli->pfnGetStatusModeDescription(i, 0)); SendDlgItemMessage(hwndDlg, IDC_MAINOPT_CHGSTS, CB_SETCURSEL, db_get_b(NULL, MOD_NAME, "stattype", 2), 0); SendMessage(hwndDlg, WM_USER + 60, 0, 0); SendMessage(hwndDlg, WM_USER + 50, 0, 0); s_fRedraw = true; } return true; case WM_NOTIFY: switch (((NMHDR*)lParam)->code) { case PSN_APPLY: WORD wMask = 0; // we apply changes here // this plugin ain't that big, no need for a seperate routine // write down status type if (IsDlgButtonChecked(hwndDlg, IDC_MAINOPT_CHANGESTATUSBOX) == BST_CHECKED) { db_set_b(NULL, MOD_NAME, "stattype", (BYTE)SendDlgItemMessage(hwndDlg, IDC_MAINOPT_CHGSTS, CB_GETCURSEL, 0, 0)); // status msg, if needed if (IsWindowEnabled(GetDlgItem(hwndDlg, IDC_MAINOPT_STATMSG))) { // meaning we should save it TCHAR tszMsg[1025]; GetDlgItemText(hwndDlg, IDC_MAINOPT_STATMSG, tszMsg, _countof(tszMsg)); if (tszMsg[0] != 0) db_set_ts(NULL, MOD_NAME, "statmsg", tszMsg); else // delete current setting db_unset(NULL, MOD_NAME, "statmsg"); } wMask |= OPT_CHANGESTATUS; } // checkbox if (IsDlgButtonChecked(hwndDlg, IDC_MAINOPT_REQPASS) == BST_CHECKED) { char szPass[MAXPASSLEN + 1]; GetDlgItemTextA(hwndDlg, IDC_MAINOPT_PASS, szPass, _countof(szPass)); if (szPass[0] != 0){ db_set_s(NULL, MOD_NAME, "password", szPass); wMask |= OPT_REQPASS; } } if (IsDlgButtonChecked(hwndDlg, IDC_MAINOPT_SETONLINEBACK) == BST_CHECKED) wMask |= OPT_SETONLINEBACK; if (IsDlgButtonChecked(hwndDlg, IDC_MAINOPT_DISABLESNDS) == BST_CHECKED) wMask |= OPT_DISABLESNDS; if (IsDlgButtonChecked(hwndDlg, IDC_MAINOPT_ONLINEONLY) == BST_CHECKED) wMask |= OPT_ONLINEONLY; if (IsDlgButtonChecked(hwndDlg, IDC_MAINOPT_USEDEFMSG) == BST_CHECKED) wMask |= OPT_USEDEFMSG; if (IsDlgButtonChecked(hwndDlg, IDC_MAINOPT_TRAYICON) == BST_CHECKED) wMask |= OPT_TRAYICON; db_set_w(NULL, MOD_NAME, "optsmask", wMask); g_wMask = wMask; return true; } break; case WM_USER + 50: // we're told to checkout the selection state of the combobox, and enable/disable accordingly { BYTE bSelection = (BYTE)SendDlgItemMessage(hwndDlg, IDC_MAINOPT_CHGSTS, CB_GETCURSEL, 0, 0); WORD wMode = STATUS_ARR_TO_ID[bSelection]; if (IsDlgButtonChecked(hwndDlg, IDC_MAINOPT_USEDEFMSG) == BST_CHECKED) { TCHAR *ptszDefMsg = GetDefStatusMsg(wMode, 0); SetDlgItemText(hwndDlg, IDC_MAINOPT_STATMSG, ptszDefMsg); if (ptszDefMsg) mir_free(ptszDefMsg); } else { DBVARIANT dbVar; SendDlgItemMessage(hwndDlg, IDC_MAINOPT_STATMSG, EM_LIMITTEXT, 1024, 0); if (!db_get_ts(NULL, MOD_NAME, "statmsg", &dbVar)) { SetDlgItemText(hwndDlg, IDC_MAINOPT_STATMSG, dbVar.ptszVal); db_free(&dbVar); } } EnableWindow(GetDlgItem(hwndDlg, IDC_MAINOPT_STATMSG), (IsDlgButtonChecked(hwndDlg, IDC_MAINOPT_CHANGESTATUSBOX) == BST_CHECKED) && (IsDlgButtonChecked(hwndDlg, IDC_MAINOPT_USEDEFMSG) != BST_CHECKED)); ShowWindow(GetDlgItem(hwndDlg, IDC_MAINOPT_VARHELP), IsWindowEnabled(GetDlgItem(hwndDlg, IDC_MAINOPT_STATMSG)) && ServiceExists(MS_VARS_FORMATSTRING)); } return true; case WM_USER + 60: { bool fEnable = IsDlgButtonChecked(hwndDlg, IDC_MAINOPT_CHANGESTATUSBOX) == BST_CHECKED; EnableWindow(GetDlgItem(hwndDlg, IDC_MAINOPT_CHGSTS), fEnable); EnableWindow(GetDlgItem(hwndDlg, IDC_MAINOPT_SETONLINEBACK), fEnable); EnableWindow(GetDlgItem(hwndDlg, IDC_MAINOPT_ONLINEONLY), fEnable); EnableWindow(GetDlgItem(hwndDlg, IDC_MAINOPT_USEDEFMSG), fEnable); EnableWindow(GetDlgItem(hwndDlg, IDC_MAINOPT_PASS), IsDlgButtonChecked(hwndDlg, IDC_MAINOPT_REQPASS) == BST_CHECKED); } return true; case WM_COMMAND: switch (HIWORD(wParam)) { case CBN_SELCHANGE: if (LOWORD(wParam) == IDC_MAINOPT_CHGSTS) SendMessage(hwndDlg, WM_USER + 50, 0, 0); SendMessage(GetParent(hwndDlg), PSM_CHANGED, (WPARAM)hwndDlg, 0); return 0; case BN_CLICKED: switch (LOWORD(wParam)) { case IDC_MAINOPT_DISABLESNDS: case IDC_MAINOPT_SETONLINEBACK: case IDC_MAINOPT_ONLINEONLY: case IDC_MAINOPT_TRAYICON: SendMessage(GetParent(hwndDlg), PSM_CHANGED, (WPARAM)hwndDlg, 0); return true; case IDC_MAINOPT_USEDEFMSG: SendMessage(hwndDlg, WM_USER + 50, 0, 0); SendMessage(GetParent(hwndDlg), PSM_CHANGED, (WPARAM)hwndDlg, 0); return true; case IDC_MAINOPT_CHANGESTATUSBOX: SendMessage(hwndDlg, WM_USER + 60, 0, 0); SendMessage(hwndDlg, WM_USER + 50, 0, 0); SendMessage(GetParent(hwndDlg), PSM_CHANGED, (WPARAM)hwndDlg, 0); return true; case IDC_MAINOPT_REQPASS: SendMessage(hwndDlg, WM_USER + 60, 0, 0); SendMessage(GetParent(hwndDlg), PSM_CHANGED, (WPARAM)hwndDlg, 0); return true; case IDC_MAINOPT_VARHELP: variables_showhelp(hwndDlg, IDC_MAINOPT_STATMSG, VHF_INPUT | VHF_HELP, 0, 0); SendMessage(GetParent(hwndDlg), PSM_CHANGED, (WPARAM)hwndDlg, 0); return true; case IDC_MAINOPT_LNK_HOTKEY: OPENOPTIONSDIALOG ood = { 0 }; ood.cbSize = sizeof(ood); ood.pszGroup = "Customize"; ood.pszPage = "Hotkeys"; Options_Open(&ood); return (true); } return 0; case EN_UPDATE: switch (LOWORD(wParam)) { case IDC_MAINOPT_STATMSG: case IDC_MAINOPT_PASS: if (s_fRedraw) SendMessage(GetParent(hwndDlg), PSM_CHANGED, (WPARAM)hwndDlg, 0); } } break; case WM_DESTROY: g_fOptionsOpen = false; return 0; } return(false); }
static INT_PTR CALLBACK AddReplacementDlgProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) { switch (msg) { case WM_INITDIALOG: TranslateDialogDefault(hwndDlg); { Data *data = (Data *)lParam; SetWindowLongPtr(hwndDlg, GWLP_USERDATA, (LONG_PTR)data); SetWindowLongPtr(GetDlgItem(hwndDlg, IDC_OLD), GWLP_USERDATA, (LONG_PTR)data); mir_subclassWindow(GetDlgItem(hwndDlg, IDC_OLD), OnlyCharsEditProc); HICON hIcon = Skin_GetIcon("spellchecker_enabled"); SendMessage(hwndDlg, WM_SETICON, ICON_BIG, (LPARAM)hIcon); Skin_ReleaseIcon(hIcon); SendDlgItemMessage(hwndDlg, IDC_OLD, EM_LIMITTEXT, 256, 0); SendDlgItemMessage(hwndDlg, IDC_NEW, EM_LIMITTEXT, 256, 0); if (!data->find.empty()) { scoped_free<TCHAR> tmp = data->dict->autoReplace->filterText(data->find.c_str()); SetDlgItemText(hwndDlg, IDC_OLD, tmp); } if (!data->replace.empty()) SetDlgItemText(hwndDlg, IDC_NEW, data->replace.c_str()); CheckDlgButton(hwndDlg, IDC_VARIABLES, data->useVariables ? BST_CHECKED : BST_UNCHECKED); if (data->findReadOnly) { SendDlgItemMessage(hwndDlg, IDC_OLD, EM_SETREADONLY, TRUE, 0); EnableWindow(GetDlgItem(hwndDlg, IDC_OLD_PS), FALSE); } if (!variables_enabled) { ShowWindow(GetDlgItem(hwndDlg, IDC_VARIABLES), FALSE); ShowWindow(GetDlgItem(hwndDlg, IDC_VAR_HELP), FALSE); RECT rc_old; GetWindowRect(GetDlgItem(hwndDlg, IDC_OLD), &rc_old); RECT rc_new; GetWindowRect(GetDlgItem(hwndDlg, IDC_NEW), &rc_new); rc_new.right = rc_old.right; SetWindowPos(GetDlgItem(hwndDlg, IDC_NEW), NULL, 0, 0, rc_new.right - rc_new.left, rc_new.bottom - rc_new.top, SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOOWNERZORDER | SWP_NOREDRAW | SWP_NOZORDER); } else { variables_skin_helpbutton(hwndDlg, IDC_VAR_HELP); EnableWindow(GetDlgItem(hwndDlg, IDC_VAR_HELP), IsDlgButtonChecked(hwndDlg, IDC_VARIABLES)); } CenterParent(hwndDlg); } return TRUE; case WM_COMMAND: switch (wParam) { case IDOK: { Data *data = (Data *)GetWindowLongPtr(hwndDlg, GWLP_USERDATA); TCHAR find[256]; if (data->findReadOnly) lstrcpyn(find, data->find.c_str(), SIZEOF(find)); else { GetDlgItemText(hwndDlg, IDC_OLD, find, SIZEOF(find)); lstrtrim(find); } TCHAR replace[256]; GetDlgItemText(hwndDlg, IDC_NEW, replace, SIZEOF(replace)); lstrtrim(replace); if (!data->findReadOnly && find[0] == 0) MessageBox(hwndDlg, TranslateT("The wrong word can't be empty!"), TranslateT("Wrong Correction"), MB_OK | MB_ICONERROR); else if (replace[0] == 0) MessageBox(hwndDlg, TranslateT("The correction can't be empty!"), TranslateT("Wrong Correction"), MB_OK | MB_ICONERROR); else if (_tcscmp(find, replace) == 0) MessageBox(hwndDlg, TranslateT("The correction can't be equal to the wrong word!"), TranslateT("Wrong Correction"), MB_OK | MB_ICONERROR); else { data->callback(FALSE, data->dict, find, replace, IsDlgButtonChecked(hwndDlg, IDC_VARIABLES), data->find.c_str(), data->param); Close(hwndDlg, 1); } } break; case IDCANCEL: Close(hwndDlg, 0); break; case IDC_VARIABLES: EnableWindow(GetDlgItem(hwndDlg, IDC_VAR_HELP), IsDlgButtonChecked(hwndDlg, IDC_VARIABLES)); break; case IDC_VAR_HELP: variables_showhelp(hwndDlg, IDC_NEW, VHF_FULLDLG, NULL, "The wrong word typed by the user"); break; } break; case WM_CLOSE: Close(hwndDlg, 0); break; } return FALSE; }
INT_PTR CALLBACK DlgProcOptsStringChange(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) { switch (msg) { case WM_INITDIALOG: { DBVARIANT dbv; DWORD triggerID; TranslateDialogDefault(hwndDlg); triggerID = (DWORD)lParam; if (!DBGetTriggerSetting(triggerID, NULL, MODULENAME, SETTING_TRIGGERTEXT, &dbv)) { SetDlgItemTextA(hwndDlg, IDC_FORMATTEXT, dbv.pszVal); DBFreeVariant(&dbv); } variables_skin_helpbutton(hwndDlg, IDC_SHOWHELP); break; } case WM_COMMAND: switch (LOWORD(wParam)) { case IDC_SHOWHELP: { variables_showhelp(hwndDlg, IDC_FORMATTEXT, VHF_FULLDLG|VHF_SETLASTSUBJECT, NULL, NULL); break; } } break; case TM_ADDTRIGGER: { // wParam = trigger ID // lParam = (TRIGGERREGISTER *) DWORD triggerID; TCHAR *tszFormatText; triggerID = (DWORD)wParam; tszFormatText = Hlp_GetDlgItemText(hwndDlg, IDC_FORMATTEXT); if (tszFormatText != NULL) { DBWriteTriggerSettingTString(triggerID, NULL, MODULENAME, SETTING_TRIGGERTEXT, tszFormatText); free(tszFormatText); } addToCache(triggerID); break; } case TM_DELTRIGGER: { // wParam = triggerID // lParam = (TRIGGEREGISTER *) may be 0 DWORD triggerID; REMOVETRIGGERSETTINGS rts; triggerID = (DWORD)wParam; removeFromCache(triggerID); rts.cbSize = sizeof(REMOVETRIGGERSETTINGS); rts.prefix = PREFIX_TRIGGERID; rts.id = triggerID; rts.hContact = NULL; rts.szModule = MODULENAME; CallService(MS_TRIGGER_REMOVESETTINGS, 0, (LPARAM)&rts); break; } } return FALSE; }
INT_PTR CALLBACK MainOptDlg(HWND hwndDlg,UINT msg,WPARAM wParam,LPARAM lParam) { static bool s_fRedraw; switch (msg) { case WM_INITDIALOG: { TranslateDialogDefault(hwndDlg); g_fOptionsOpen = true; s_fRedraw = false; extern PWTSRegisterSessionNotification wtsRegisterSessionNotification; if (wtsRegisterSessionNotification == 0) EnableWindow(GetDlgItem(hwndDlg, IDC_MAINOPT_HIDEIFLOCK), SW_HIDE); // set icon and tooltip for variables help button if (ServiceExists(MS_VARS_GETSKINITEM)) { HICON hIcon = (HICON)CallService(MS_VARS_GETSKINITEM, 0, (LPARAM)VSI_HELPICON); if (hIcon != NULL) SendMessage(GetDlgItem(hwndDlg, IDC_MAINOPT_VARHELP), BM_SETIMAGE, (WPARAM)IMAGE_ICON, (LPARAM)hIcon); SendMessage(GetDlgItem(hwndDlg, IDC_MAINOPT_VARHELP), BUTTONADDTOOLTIP, (WPARAM)TranslateT("Open String Formatting Help"), BATF_TCHAR); SendDlgItemMessage(hwndDlg, IDC_MAINOPT_VARHELP, BUTTONSETASFLATBTN, 0, 0); } SendDlgItemMessage(hwndDlg,IDC_MAINOPT_PASS,EM_LIMITTEXT,MAXPASSLEN,0); // limit password length DBVARIANT dbVar; if (!DBGetContactSettingString(NULL,MOD_NAME,"password",&dbVar)) { CallService( MS_DB_CRYPT_DECODESTRING, strlen( dbVar.pszVal )+1, ( LPARAM )dbVar.pszVal ); SetDlgItemTextA(hwndDlg,IDC_MAINOPT_PASS,dbVar.pszVal); DBFreeVariant(&dbVar); } CheckDlgButton(hwndDlg,IDC_MAINOPT_SETONLINEBACK,(g_wMask & OPT_SETONLINEBACK) ? (BST_CHECKED) : (BST_UNCHECKED)); CheckDlgButton(hwndDlg,IDC_MAINOPT_CHANGESTATUSBOX,(g_wMask & OPT_CHANGESTATUS) ? (BST_CHECKED) : (BST_UNCHECKED)); CheckDlgButton(hwndDlg,IDC_MAINOPT_DISABLESNDS,(g_wMask & OPT_DISABLESNDS) ? (BST_CHECKED) : (BST_UNCHECKED)); CheckDlgButton(hwndDlg,IDC_MAINOPT_REQPASS,(g_wMask & OPT_REQPASS) ? (BST_CHECKED) : (BST_UNCHECKED)); CheckDlgButton(hwndDlg,IDC_MAINOPT_ONLINEONLY,(g_wMask & OPT_ONLINEONLY) ? (BST_CHECKED) : (BST_UNCHECKED)); CheckDlgButton(hwndDlg,IDC_MAINOPT_USEDEFMSG,(g_wMask & OPT_USEDEFMSG) ? (BST_CHECKED) : (BST_UNCHECKED)); CheckDlgButton(hwndDlg,IDC_MAINOPT_TRAYICON,(g_wMask & OPT_TRAYICON) ? (BST_CHECKED) : (BST_UNCHECKED)); const TCHAR *STATUS_ARR_TO_NAME[8] = { _T("Offline"), _T("Online"), _T("Away"), _T("NA"), _T("Occupied"), _T("DND"), _T("Free for chat"), _T("Invisible") }; for (BYTE i = 0;i < 8; i++) SendDlgItemMessage(hwndDlg,IDC_MAINOPT_CHGSTS,CB_INSERTSTRING,-1,(LPARAM)TranslateTS(STATUS_ARR_TO_NAME[i])); SendDlgItemMessage(hwndDlg,IDC_MAINOPT_CHGSTS,CB_SETCURSEL,DBGetContactSettingByte(NULL,MOD_NAME,"stattype",4),0); SendMessage(hwndDlg,WM_USER + 60,0,0); SendMessage(hwndDlg,WM_USER + 50,0,0); s_fRedraw = true; return(true); } break; case WM_NOTIFY: { NMHDR* nmhdr = (NMHDR*)lParam; switch (nmhdr->code) { case PSN_APPLY: { WORD wMask = 0; // we apply changes here // this plugin ain't that big, no need for a seperate routine // write down status type if (IsDlgButtonChecked(hwndDlg,IDC_MAINOPT_CHANGESTATUSBOX) == BST_CHECKED) { DBWriteContactSettingByte(NULL,MOD_NAME,"stattype",(BYTE)SendDlgItemMessage(hwndDlg,IDC_MAINOPT_CHGSTS,CB_GETCURSEL,0,0)); // status msg, if needed if (IsWindowEnabled(GetDlgItem(hwndDlg,IDC_MAINOPT_STATMSG))) // meaning we should save it { TCHAR tszMsg[1025]; GetDlgItemText(hwndDlg,IDC_MAINOPT_STATMSG,tszMsg,1024); if (lstrlen(tszMsg) != 0) DBWriteContactSettingTString(NULL,MOD_NAME,"statmsg",tszMsg); else // delete current setting DBDeleteContactSetting(NULL,MOD_NAME,"statmsg"); } wMask |= OPT_CHANGESTATUS; } // checkbox if (IsDlgButtonChecked(hwndDlg,IDC_MAINOPT_REQPASS) == BST_CHECKED) { char szPass[MAXPASSLEN+1]; GetDlgItemTextA(hwndDlg,IDC_MAINOPT_PASS,szPass,MAXPASSLEN+1); if (strlen(szPass) != 0){ CallService( MS_DB_CRYPT_ENCODESTRING, MAXPASSLEN+1, ( LPARAM )szPass ); DBWriteContactSettingString(NULL,MOD_NAME,"password",szPass); wMask |= OPT_REQPASS; } } if (IsDlgButtonChecked(hwndDlg,IDC_MAINOPT_SETONLINEBACK) == BST_CHECKED) wMask |= OPT_SETONLINEBACK; if (IsDlgButtonChecked(hwndDlg,IDC_MAINOPT_DISABLESNDS) == BST_CHECKED) wMask |= OPT_DISABLESNDS; if (IsDlgButtonChecked(hwndDlg,IDC_MAINOPT_ONLINEONLY) == BST_CHECKED) wMask |= OPT_ONLINEONLY; if (IsDlgButtonChecked(hwndDlg,IDC_MAINOPT_USEDEFMSG) == BST_CHECKED) wMask |= OPT_USEDEFMSG; if (IsDlgButtonChecked(hwndDlg,IDC_MAINOPT_TRAYICON) == BST_CHECKED) wMask |= OPT_TRAYICON; DBWriteContactSettingWord(NULL,MOD_NAME,"optsmask",wMask); g_wMask = wMask; return(true); } break; } } break; case WM_USER+50: // we're told to checkout the selection state of the combobox, and enable/disable accordingly { BYTE bSelection = (BYTE)SendDlgItemMessage(hwndDlg,IDC_MAINOPT_CHGSTS,CB_GETCURSEL,0,0); WORD wMode = STATUS_ARR_TO_ID[bSelection]; if (IsDlgButtonChecked(hwndDlg,IDC_MAINOPT_USEDEFMSG) == BST_CHECKED) { TCHAR *ptszDefMsg = GetDefStatusMsg(wMode, 0); SetDlgItemText(hwndDlg, IDC_MAINOPT_STATMSG, ptszDefMsg); if(ptszDefMsg) mir_free(ptszDefMsg); } else { DBVARIANT dbVar; SendDlgItemMessage(hwndDlg,IDC_MAINOPT_STATMSG,EM_LIMITTEXT,1024,0); if (!DBGetContactSettingTString(NULL,MOD_NAME,"statmsg",&dbVar)) { SetDlgItemText(hwndDlg,IDC_MAINOPT_STATMSG,dbVar.ptszVal); DBFreeVariant(&dbVar); } } EnableWindow(GetDlgItem(hwndDlg,IDC_MAINOPT_STATMSG),(IsDlgButtonChecked(hwndDlg,IDC_MAINOPT_CHANGESTATUSBOX) == BST_CHECKED) && (IsDlgButtonChecked(hwndDlg,IDC_MAINOPT_USEDEFMSG) != BST_CHECKED)); ShowWindow(GetDlgItem(hwndDlg, IDC_MAINOPT_VARHELP), IsWindowEnabled(GetDlgItem(hwndDlg,IDC_MAINOPT_STATMSG)) && ServiceExists(MS_VARS_FORMATSTRING)); return(true); } break; case WM_USER+60: { bool fEnable = IsDlgButtonChecked(hwndDlg,IDC_MAINOPT_CHANGESTATUSBOX) == BST_CHECKED; EnableWindow(GetDlgItem(hwndDlg,IDC_MAINOPT_CHGSTS),fEnable); EnableWindow(GetDlgItem(hwndDlg,IDC_MAINOPT_SETONLINEBACK),fEnable); EnableWindow(GetDlgItem(hwndDlg,IDC_MAINOPT_ONLINEONLY),fEnable); EnableWindow(GetDlgItem(hwndDlg,IDC_MAINOPT_USEDEFMSG),fEnable); EnableWindow(GetDlgItem(hwndDlg,IDC_MAINOPT_PASS),IsDlgButtonChecked(hwndDlg,IDC_MAINOPT_REQPASS) == BST_CHECKED); return(true); } break; case WM_COMMAND: { switch (HIWORD(wParam)) { case CBN_SELCHANGE: { // check the type // if type doesn't require a msg, we don't use one if (LOWORD(wParam) == IDC_MAINOPT_CHGSTS) { SendMessage(hwndDlg,WM_USER + 50,0,0); } SendMessage(GetParent(hwndDlg),PSM_CHANGED,(WPARAM)hwndDlg,0); return(0); } break; case BN_CLICKED: { switch(LOWORD(wParam)) { case IDC_MAINOPT_DISABLESNDS: case IDC_MAINOPT_SETONLINEBACK: case IDC_MAINOPT_ONLINEONLY: case IDC_MAINOPT_TRAYICON: { SendMessage(GetParent(hwndDlg),PSM_CHANGED,(WPARAM)hwndDlg,0); return(true); } break; case IDC_MAINOPT_USEDEFMSG: { SendMessage(hwndDlg,WM_USER + 50,0,0); SendMessage(GetParent(hwndDlg),PSM_CHANGED,(WPARAM)hwndDlg,0); return(true); } break; case IDC_MAINOPT_CHANGESTATUSBOX: { SendMessage(hwndDlg,WM_USER + 60,0,0); SendMessage(hwndDlg,WM_USER + 50,0,0); SendMessage(GetParent(hwndDlg),PSM_CHANGED,(WPARAM)hwndDlg,0); return(true); } break; case IDC_MAINOPT_REQPASS: { SendMessage(hwndDlg,WM_USER + 60,0,0); SendMessage(GetParent(hwndDlg),PSM_CHANGED,(WPARAM)hwndDlg,0); return(true); } break; case IDC_MAINOPT_VARHELP: { variables_showhelp(hwndDlg, IDC_MAINOPT_STATMSG, VHF_INPUT|VHF_HELP, 0, 0); SendMessage(GetParent(hwndDlg),PSM_CHANGED,(WPARAM)hwndDlg,0); return(true); } break; case IDC_MAINOPT_LNK_HOTKEY: { OPENOPTIONSDIALOG ood = {0}; ood.cbSize = sizeof(ood); ood.pszGroup = "Customize"; ood.pszPage = "Hotkeys"; CallService( MS_OPT_OPENOPTIONS, 0, (LPARAM)&ood ); return (true); } break; } return(0); } break; case EN_UPDATE: { switch( LOWORD( wParam )) { case IDC_MAINOPT_STATMSG: case IDC_MAINOPT_PASS: if (s_fRedraw) SendMessage(GetParent(hwndDlg),PSM_CHANGED,(WPARAM)hwndDlg,0); } } break; default:break; } } break; case WM_DESTROY: { g_fOptionsOpen = false; return(0); } break; } return(false); }