void InitMainMenuItem() { CMenuItem mi(g_plugin); SET_UID(mi, 0x22b7b4db, 0xa9a1, 0x4d43, 0x88, 0x80, 0x4c, 0x23, 0x20, 0x31, 0xc6, 0xa0); mi.flags = CMIF_UNICODE; if (ServiceExists(MS_POPUP_ADDPOPUPT)) mi.root = g_plugin.addRootMenu(MO_MAIN, LPGENW("Popups"), 0); mi.pszService = MS_STATUSCHANGE_MENUCOMMAND; hEnableDisableMenu = Menu_AddMainMenuItem(&mi); opt.TempDisabled = !opt.TempDisabled; EnableDisableMenuCommand(0, 0); }
static INT_PTR CALLBACK DlgProcOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) { int i; switch (msg) { case WM_INITDIALOG: TranslateDialogDefault(hwndDlg); if (ColorMode == COLOR_WINDOWS) { CheckDlgButton(hwndDlg, IDC_USEWINCOLORS, BST_CHECKED); Utils::enableDlgControl(hwndDlg, IDC_USEPOPUPCOLORS, FALSE); Utils::enableDlgControl(hwndDlg, IDC_USEWINCOLORS, TRUE); CheckDlgButton(hwndDlg, IDC_USEPOPUPCOLORS, BST_UNCHECKED); } else if (ColorMode == COLOR_POPUP) { CheckDlgButton(hwndDlg, IDC_USEWINCOLORS, BST_UNCHECKED); Utils::enableDlgControl(hwndDlg, IDC_USEWINCOLORS, FALSE); Utils::enableDlgControl(hwndDlg, IDC_USEPOPUPCOLORS, TRUE); CheckDlgButton(hwndDlg, IDC_USEPOPUPCOLORS, BST_CHECKED); } for (i = 0; i < _countof(colorPicker); i++) { SendDlgItemMessage(hwndDlg, colorPicker[i].res, CPM_SETCOLOUR, 0, colorPicker[i].color); Utils::enableDlgControl(hwndDlg, colorPicker[i].res, (ColorMode == COLOR_OWN)); } CheckDlgButton(hwndDlg, IDC_TIMEOUT_PERMANENT, (TimeoutMode == TIMEOUT_PERMANENT) ? BST_CHECKED : BST_UNCHECKED); CheckDlgButton(hwndDlg, IDC_TIMEOUT_POPUP, (TimeoutMode == TIMEOUT_POPUP) ? BST_CHECKED : BST_UNCHECKED); CheckDlgButton(hwndDlg, IDC_TIMEOUT_PROTO, (TimeoutMode == TIMEOUT_PROTO) ? BST_CHECKED : BST_UNCHECKED); CheckDlgButton(hwndDlg, IDC_TIMEOUT_CUSTOM, (TimeoutMode == TIMEOUT_CUSTOM) ? BST_CHECKED : BST_UNCHECKED); SetDlgItemInt(hwndDlg, IDC_TIMEOUT_VALUE, Timeout, 0); Utils::enableDlgControl(hwndDlg, IDC_TIMEOUT_VALUE, TimeoutMode == TIMEOUT_CUSTOM); CheckDlgButton(hwndDlg, IDC_TIMEOUT_PERMANENT2, (TimeoutMode2 == TIMEOUT_PERMANENT) ? BST_CHECKED : BST_UNCHECKED); CheckDlgButton(hwndDlg, IDC_TIMEOUT_POPUP2, (TimeoutMode2 == TIMEOUT_POPUP) ? BST_CHECKED : BST_UNCHECKED); CheckDlgButton(hwndDlg, IDC_TIMEOUT_CUSTOM2, (TimeoutMode2 == TIMEOUT_CUSTOM) ? BST_CHECKED : BST_UNCHECKED); SetDlgItemInt(hwndDlg, IDC_TIMEOUT_VALUE2, Timeout2, 0); Utils::enableDlgControl(hwndDlg, IDC_TIMEOUT_VALUE2, TimeoutMode2 == TIMEOUT_CUSTOM); CheckDlgButton(hwndDlg, IDC_START, (StartDisabled) ? BST_UNCHECKED : BST_CHECKED); CheckDlgButton(hwndDlg, IDC_STOP, (StopDisabled) ? BST_UNCHECKED : BST_CHECKED); CheckDlgButton(hwndDlg, IDC_ONEPOPUP, (OnePopup) ? BST_CHECKED : BST_UNCHECKED); CheckDlgButton(hwndDlg, IDC_SHOWMENU, (ShowMenu) ? BST_CHECKED : BST_UNCHECKED); Utils::enableDlgControl(hwndDlg, IDC_ONEPOPUP, PluginConfig.g_bPopupAvail); Utils::enableDlgControl(hwndDlg, IDC_SHOWMENU, PluginConfig.g_bPopupAvail); Utils::enableDlgControl(hwndDlg, IDC_PREVIEW, PluginConfig.g_bPopupAvail); newTimeout = Timeout; newTimeoutMode = TimeoutMode; newTimeout2 = Timeout2; newTimeoutMode2 = TimeoutMode2; newColorMode = ColorMode; break; case WM_COMMAND: { WORD idCtrl = LOWORD(wParam), wNotifyCode = HIWORD(wParam); if (wNotifyCode == CPN_COLOURCHANGED) { SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); return TRUE; } switch (idCtrl) { case IDC_USEWINCOLORS: if (wNotifyCode == BN_CLICKED) { bool bEnableOthers; if (IsDlgButtonChecked(hwndDlg, IDC_USEWINCOLORS)) { newColorMode = COLOR_WINDOWS; bEnableOthers = false; } else { newColorMode = COLOR_OWN; bEnableOthers = true; } for (i = 0; i < _countof(colorPicker); i++) Utils::enableDlgControl(hwndDlg, colorPicker[i].res, bEnableOthers); Utils::enableDlgControl(hwndDlg, IDC_USEPOPUPCOLORS, bEnableOthers); SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); } break; case IDC_USEPOPUPCOLORS: if (wNotifyCode == BN_CLICKED) { bool bEnableOthers; if (IsDlgButtonChecked(hwndDlg, IDC_USEPOPUPCOLORS)) { newColorMode = COLOR_POPUP; bEnableOthers = false; } else { newColorMode = COLOR_OWN; bEnableOthers = true; } for (i = 0; i < sizeof(colorPicker) / sizeof(colorPicker[0]); i++) Utils::enableDlgControl(hwndDlg, colorPicker[i].res, bEnableOthers); Utils::enableDlgControl(hwndDlg, IDC_USEWINCOLORS, bEnableOthers); SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); } break; case IDC_ONEPOPUP: case IDC_CLIST: case IDC_DISABLED: case IDC_SHOWMENU: case IDC_START: case IDC_STOP: case IDC_WOCL: if (wNotifyCode == BN_CLICKED) SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); break; case IDC_PREVIEW: if (PluginConfig.g_bPopupAvail) { POPUPDATAT ppd = { 0 }; for (i = 0; i < 2; i++) { int notyping; if (i == PROTOTYPE_CONTACTTYPING_OFF) { _tcsncpy_s(ppd.lptzContactName, TranslateT("Contact"), _TRUNCATE); _tcsncpy_s(ppd.lptzText, szStop, _TRUNCATE); notyping = 1; } else { _tcsncpy_s(ppd.lptzContactName, TranslateT("Contact"), _TRUNCATE); _tcsncpy_s(ppd.lptzText, szStart, _TRUNCATE); notyping = 0; } switch (newColorMode) { case COLOR_OWN: ppd.colorText = SendDlgItemMessage(hwndDlg, colorPicker[2 * notyping + 1].res, CPM_GETCOLOUR, 0, 0); ppd.colorBack = SendDlgItemMessage(hwndDlg, colorPicker[2 * notyping].res, CPM_GETCOLOUR, 0, 0); break; case COLOR_WINDOWS: ppd.colorBack = GetSysColor(COLOR_BTNFACE); ppd.colorText = GetSysColor(COLOR_WINDOWTEXT); break; case COLOR_POPUP: default: ppd.colorBack = ppd.colorText = 0; break; } if (notyping) switch (newTimeoutMode2) { case TIMEOUT_CUSTOM: ppd.iSeconds = newTimeout2; break; case TIMEOUT_PERMANENT: ppd.iSeconds = -1; break; case TIMEOUT_POPUP: default: ppd.iSeconds = 0; break; } else switch (newTimeoutMode) { case TIMEOUT_CUSTOM: ppd.iSeconds = newTimeout; break; case TIMEOUT_PROTO: ppd.iSeconds = 10; break; case TIMEOUT_PERMANENT: ppd.iSeconds = -1; break; case TIMEOUT_POPUP: default: ppd.iSeconds = 0; break; } ppd.lchIcon = PluginConfig.g_buttonBarIcons[ICON_DEFAULT_TYPING]; ppd.lchContact = wParam; ppd.PluginWindowProc = NULL; ppd.PluginData = NULL; PUAddPopupT(&ppd); } } break; case IDC_TIMEOUT_POPUP2: if (wNotifyCode != BN_CLICKED) break; newTimeoutMode2 = TIMEOUT_POPUP; Utils::enableDlgControl(hwndDlg, IDC_TIMEOUT_VALUE2, 0); SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); break; case IDC_TIMEOUT_CUSTOM2: if (wNotifyCode != BN_CLICKED) break; newTimeoutMode2 = TIMEOUT_CUSTOM; Utils::enableDlgControl(hwndDlg, IDC_TIMEOUT_VALUE2, 1); SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); break; case IDC_TIMEOUT_POPUP: if (wNotifyCode != BN_CLICKED) break; newTimeoutMode = TIMEOUT_POPUP; Utils::enableDlgControl(hwndDlg, IDC_TIMEOUT_VALUE, 0); SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); break; case IDC_TIMEOUT_PERMANENT: if (wNotifyCode != BN_CLICKED) break; newTimeoutMode = TIMEOUT_PERMANENT; Utils::enableDlgControl(hwndDlg, IDC_TIMEOUT_VALUE, 0); SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); break; case IDC_TIMEOUT_PERMANENT2: if (wNotifyCode != BN_CLICKED) break; newTimeoutMode2 = TIMEOUT_PERMANENT; Utils::enableDlgControl(hwndDlg, IDC_TIMEOUT_VALUE2, 0); SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); break; case IDC_TIMEOUT_CUSTOM: if (wNotifyCode != BN_CLICKED) break; newTimeoutMode = TIMEOUT_CUSTOM; Utils::enableDlgControl(hwndDlg, IDC_TIMEOUT_VALUE, 1); SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); break; case IDC_TIMEOUT_PROTO: if (wNotifyCode != BN_CLICKED) break; newTimeoutMode = TIMEOUT_PROTO; Utils::enableDlgControl(hwndDlg, IDC_TIMEOUT_VALUE, 0); SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); break; case IDC_TIMEOUT_VALUE: case IDC_TIMEOUT_VALUE2: int newValue = GetDlgItemInt(hwndDlg, idCtrl, NULL, 0); if (wNotifyCode == EN_KILLFOCUS) { int oldValue; if (idCtrl == IDC_TIMEOUT_VALUE) oldValue = newTimeout; else oldValue = newTimeout2; if (newValue != oldValue) SetDlgItemInt(hwndDlg, idCtrl, oldValue, 0); return TRUE; } if (wNotifyCode != EN_CHANGE || (HWND)lParam != GetFocus()) return TRUE; if (newValue > TIMEOUT_MAXVALUE) newValue = TIMEOUT_MAXVALUE; else if (newValue < TIMEOUT_MINVALUE) newValue = TIMEOUT_MINVALUE; if (idCtrl == IDC_TIMEOUT_VALUE) newTimeout = newValue; else newTimeout2 = newValue; SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); } } break; case WM_NOTIFY: switch (((LPNMHDR)lParam)->idFrom) { case 0: switch (((LPNMHDR)lParam)->code) { case PSN_APPLY: for (i = 0; i < sizeof(colorPicker) / sizeof(colorPicker[0]); i++) { colorPicker[i].color = SendDlgItemMessage(hwndDlg, colorPicker[i].res, CPM_GETCOLOUR, 0, 0); db_set_dw(0, Module, colorPicker[i].desc, colorPicker[i].color); } Timeout = newTimeout; TimeoutMode = newTimeoutMode; Timeout2 = newTimeout2; TimeoutMode2 = newTimeoutMode2; ColorMode = newColorMode; if (Disabled != IsDlgButtonChecked(hwndDlg, IDC_DISABLED)) EnableDisableMenuCommand(0, 0); StartDisabled = IsDlgButtonChecked(hwndDlg, IDC_START) ? 0 : 2; StopDisabled = IsDlgButtonChecked(hwndDlg, IDC_STOP) ? 0 : 4; OnePopup = IsDlgButtonChecked(hwndDlg, IDC_ONEPOPUP); ShowMenu = IsDlgButtonChecked(hwndDlg, IDC_SHOWMENU); db_set_b(0, Module, SET_ONEPOPUP, OnePopup); db_set_b(0, Module, SET_SHOWDISABLEMENU, ShowMenu); db_set_b(0, Module, SET_DISABLED, (BYTE)(StartDisabled | StopDisabled)); db_set_b(0, Module, SET_COLOR_MODE, ColorMode); db_set_b(0, Module, SET_TIMEOUT_MODE, TimeoutMode); db_set_b(0, Module, SET_TIMEOUT, (BYTE)Timeout); db_set_b(0, Module, SET_TIMEOUT_MODE2, TimeoutMode2); db_set_b(0, Module, SET_TIMEOUT2, (BYTE)Timeout2); return TRUE; } } break; } return FALSE; }