INT_PTR CALLBACK DlgProcPopupAdvOpts(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { TCHAR tstr[64]; static bool bDlgInit = false; //some controls send WM_COMMAND before or during WM_INITDIALOG UINT idCtrl; switch (msg) { case WM_INITDIALOG: //Create preview box: { hwndBox = CreateWindowEx( WS_EX_TOOLWINDOW|WS_EX_TOPMOST, // dwStyleEx _T(BOXPREVIEW_WNDCLASS), // Class name NULL, // Title DS_SETFONT|DS_FIXEDSYS|WS_POPUP, // dwStyle CW_USEDEFAULT, // x CW_USEDEFAULT, // y CW_USEDEFAULT, // Width CW_USEDEFAULT, // Height HWND_DESKTOP, // Parent NULL, // menu handle hInst, // Instance (LPVOID)0); ShowWindow(hwndBox, SW_HIDE); } //Group: History { CheckDlgButton(hwnd, IDC_ENABLE_HISTORY, PopupOptions.EnableHistory); SetDlgItemInt (hwnd, IDC_HISTORYSIZE, PopupOptions.HistorySize, FALSE); CheckDlgButton(hwnd, IDC_HPPLOG, PopupOptions.UseHppHistoryLog); HWND hCtrl = GetDlgItem(hwnd, IDC_SHOWHISTORY); SendMessage(hCtrl, BUTTONSETASFLATBTN, TRUE, 0); SendMessage(hCtrl, BUTTONADDTOOLTIP, (WPARAM)Translate("Popup History"), 0); SendMessage(hCtrl, BM_SETIMAGE, IMAGE_ICON, (LPARAM)IcoLib_GetIcon(ICO_HISTORY,0)); EnableWindow(GetDlgItem(hwnd, IDC_HISTORY_STATIC1), PopupOptions.EnableHistory); EnableWindow(GetDlgItem(hwnd, IDC_HISTORYSIZE), PopupOptions.EnableHistory); EnableWindow(GetDlgItem(hwnd, IDC_HISTORY_STATIC2), PopupOptions.EnableHistory); EnableWindow(GetDlgItem(hwnd, IDC_SHOWHISTORY), PopupOptions.EnableHistory); EnableWindow(GetDlgItem(hwnd, IDC_HPPLOG), PopupOptions.EnableHistory && gbHppInstalled); } //Group: Avatars { //Borders CheckDlgButton(hwnd, IDC_AVT_BORDER, PopupOptions.avatarBorders); CheckDlgButton(hwnd, IDC_AVT_PNGBORDER, PopupOptions.avatarPNGBorders); EnableWindow(GetDlgItem(hwnd, IDC_AVT_PNGBORDER), PopupOptions.avatarBorders); //Radius SetDlgItemInt(hwnd, IDC_AVT_RADIUS, PopupOptions.avatarRadius, FALSE); SendDlgItemMessage(hwnd, IDC_AVT_RADIUS_SPIN,UDM_SETRANGE, 0, (LPARAM)MAKELONG((PopupOptions.avatarSize / 2),0)); //Size mir_subclassWindow(GetDlgItem(hwnd, IDC_AVT_SIZE_SLIDE), AvatarTrackBarWndProc); SendDlgItemMessage(hwnd, IDC_AVT_SIZE_SLIDE, TBM_SETRANGE,FALSE, MAKELONG(SETTING_AVTSIZE_MIN, SETTING_AVTSIZE_MAX)); SendDlgItemMessage(hwnd, IDC_AVT_SIZE_SLIDE, TBM_SETPOS, TRUE, max(PopupOptions.avatarSize, SETTING_AVTSIZE_MIN)); SetDlgItemInt(hwnd, IDC_AVT_SIZE, PopupOptions.avatarSize, FALSE); //Request avatars CheckDlgButton(hwnd, IDC_AVT_REQUEST, PopupOptions.EnableAvatarUpdates); } //Group: Monitor { BOOL bMonitor = 0; bMonitor = GetSystemMetrics(SM_CMONITORS)>1; CheckDlgButton(hwnd, IDC_MIRANDAWND, bMonitor ? (PopupOptions.Monitor == MN_MIRANDA) : TRUE); CheckDlgButton(hwnd, IDC_ACTIVEWND, bMonitor ? (PopupOptions.Monitor == MN_ACTIVE) : FALSE); EnableWindow(GetDlgItem(hwnd, IDC_GRP_MULTIMONITOR), bMonitor); EnableWindow(GetDlgItem(hwnd, IDC_MULTIMONITOR_DESC), bMonitor); EnableWindow(GetDlgItem(hwnd, IDC_MIRANDAWND), bMonitor); EnableWindow(GetDlgItem(hwnd, IDC_ACTIVEWND), bMonitor); } //Group: Transparency { //win2k+ CheckDlgButton(hwnd, IDC_TRANS, PopupOptions.UseTransparency); SendDlgItemMessage(hwnd, IDC_TRANS_SLIDER, TBM_SETRANGE, FALSE, MAKELONG(1,255)); SendDlgItemMessage(hwnd, IDC_TRANS_SLIDER, TBM_SETPOS, TRUE, PopupOptions.Alpha); mir_subclassWindow(GetDlgItem(hwnd, IDC_TRANS_SLIDER), AlphaTrackBarWndProc); mir_sntprintf(tstr, SIZEOF(tstr), _T("%d%%"), Byte2Percentile(PopupOptions.Alpha)); SetDlgItemText(hwnd, IDC_TRANS_PERCENT, tstr); CheckDlgButton(hwnd, IDC_TRANS_OPAQUEONHOVER, PopupOptions.OpaqueOnHover); { BOOL how = TRUE; EnableWindow(GetDlgItem(hwnd, IDC_TRANS), how); EnableWindow(GetDlgItem(hwnd, IDC_TRANS_TXT1), how && PopupOptions.UseTransparency); EnableWindow(GetDlgItem(hwnd, IDC_TRANS_SLIDER), how && PopupOptions.UseTransparency); EnableWindow(GetDlgItem(hwnd, IDC_TRANS_PERCENT), how && PopupOptions.UseTransparency); EnableWindow(GetDlgItem(hwnd, IDC_TRANS_OPAQUEONHOVER), how && PopupOptions.UseTransparency); } ShowWindow(GetDlgItem(hwnd, IDC_TRANS), SW_SHOW); } //Group: Effects { //Use Animations CheckDlgButton(hwnd, IDC_USEANIMATIONS, PopupOptions.UseAnimations); //Fade SetDlgItemInt (hwnd, IDC_FADEIN, PopupOptions.FadeIn, FALSE); SetDlgItemInt (hwnd, IDC_FADEOUT,PopupOptions.FadeOut,FALSE); UDACCEL aAccels[] = {{0,50},{1,100},{3,500}}; SendDlgItemMessage(hwnd, IDC_FADEIN_SPIN, UDM_SETRANGE, 0, (LPARAM)MAKELONG(SETTING_FADEINTIME_MAX, SETTING_FADEINTIME_MIN)); SendDlgItemMessage(hwnd, IDC_FADEIN_SPIN, UDM_SETACCEL, (WPARAM)SIZEOF(aAccels), (LPARAM)&aAccels); SendDlgItemMessage(hwnd, IDC_FADEOUT_SPIN,UDM_SETRANGE, 0, (LPARAM)MAKELONG(SETTING_FADEOUTTIME_MAX,SETTING_FADEOUTTIME_MIN)); SendDlgItemMessage(hwnd, IDC_FADEOUT_SPIN,UDM_SETACCEL, (WPARAM)SIZEOF(aAccels), (LPARAM)&aAccels); BOOL how = PopupOptions.UseAnimations || PopupOptions.UseEffect; EnableWindow(GetDlgItem(hwnd, IDC_FADEIN_TXT1), how); EnableWindow(GetDlgItem(hwnd, IDC_FADEIN), how); EnableWindow(GetDlgItem(hwnd, IDC_FADEIN_SPIN), how); EnableWindow(GetDlgItem(hwnd, IDC_FADEIN_TXT2), how); EnableWindow(GetDlgItem(hwnd, IDC_FADEOUT_TXT1), how); EnableWindow(GetDlgItem(hwnd, IDC_FADEOUT), how); EnableWindow(GetDlgItem(hwnd, IDC_FADEOUT_SPIN), how); EnableWindow(GetDlgItem(hwnd, IDC_FADEOUT_TXT2), how); //effects drop down { DWORD dwItem, dwActiveItem = 0; BOOL how = TRUE; EnableWindow(GetDlgItem(hwnd, IDC_EFFECT), how); EnableWindow(GetDlgItem(hwnd, IDC_EFFECT_TXT), how); HWND hCtrl = GetDlgItem(hwnd, IDC_EFFECT); ComboBox_SetItemData(hCtrl, ComboBox_AddString(hCtrl, TranslateT("No effect")) ,-2); ComboBox_SetItemData(hCtrl, ComboBox_AddString(hCtrl, TranslateT("Fade in/out")) ,-1); dwActiveItem = (DWORD)PopupOptions.UseEffect; for (int i=0; i < g_lstPopupVfx.getCount(); ++i) { dwItem = ComboBox_AddString(hCtrl, TranslateTS(g_lstPopupVfx[i])); ComboBox_SetItemData(hCtrl, dwItem, i); if (PopupOptions.UseEffect && !lstrcmp(g_lstPopupVfx[i], PopupOptions.Effect)) dwActiveItem = dwItem; } SendDlgItemMessage(hwnd, IDC_EFFECT, CB_SETCURSEL, dwActiveItem, 0); } } //later check stuff SetDlgItemInt(hwnd, IDC_MAXPOPUPS, PopupOptions.MaxPopups, FALSE); TranslateDialogDefault(hwnd); //do it on end of WM_INITDIALOG bDlgInit = true; return TRUE; case WM_HSCROLL: switch (idCtrl = GetDlgCtrlID((HWND)lParam)) { case IDC_AVT_SIZE_SLIDE: PopupOptions.avatarSize = SendDlgItemMessage(hwnd,IDC_AVT_SIZE_SLIDE, TBM_GETPOS,0,0); SetDlgItemInt(hwnd, IDC_AVT_SIZE ,PopupOptions.avatarSize,FALSE); SendDlgItemMessage(hwnd, IDC_AVT_RADIUS_SPIN,UDM_SETRANGE, 0, (LPARAM)MAKELONG((PopupOptions.avatarSize / 2),0)); SendMessage(GetParent(hwnd), PSM_CHANGED, 0, 0); break; case IDC_TRANS_SLIDER: PopupOptions.Alpha = (BYTE)SendDlgItemMessage(hwnd,IDC_TRANS_SLIDER, TBM_GETPOS, 0,0); mir_sntprintf(tstr, SIZEOF(tstr), TranslateT("%d%%"), Byte2Percentile(PopupOptions.Alpha)); SetDlgItemText(hwnd, IDC_TRANS_PERCENT, tstr); SendMessage(GetParent(hwnd), PSM_CHANGED, 0, 0); break; } break; case WM_COMMAND: idCtrl = LOWORD(wParam); switch (HIWORD(wParam)) { case BN_CLICKED: //Button controls switch(idCtrl) { case IDC_ENABLE_HISTORY: PopupOptions.EnableHistory = !PopupOptions.EnableHistory; EnableWindow(GetDlgItem(hwnd, IDC_HISTORY_STATIC1), PopupOptions.EnableHistory); EnableWindow(GetDlgItem(hwnd, IDC_HISTORYSIZE), PopupOptions.EnableHistory); EnableWindow(GetDlgItem(hwnd, IDC_HISTORY_STATIC2), PopupOptions.EnableHistory); EnableWindow(GetDlgItem(hwnd, IDC_SHOWHISTORY), PopupOptions.EnableHistory); EnableWindow(GetDlgItem(hwnd, IDC_HPPLOG), PopupOptions.EnableHistory && gbHppInstalled); SendMessage(GetParent(hwnd), PSM_CHANGED,0,0); break; case IDC_SHOWHISTORY: PopupHistoryShow(); break; case IDC_HPPLOG: PopupOptions.UseHppHistoryLog = !PopupOptions.UseHppHistoryLog; SendMessage(GetParent(hwnd), PSM_CHANGED,0,0); break; case IDC_AVT_BORDER: PopupOptions.avatarBorders = !PopupOptions.avatarBorders; EnableWindow(GetDlgItem(hwnd, IDC_AVT_PNGBORDER), PopupOptions.avatarBorders); SendMessage(GetParent(hwnd), PSM_CHANGED,0,0); break; case IDC_AVT_PNGBORDER: PopupOptions.avatarPNGBorders = !PopupOptions.avatarPNGBorders; SendMessage(GetParent(hwnd), PSM_CHANGED,0,0); break; case IDC_AVT_REQUEST: PopupOptions.EnableAvatarUpdates = !PopupOptions.EnableAvatarUpdates; SendMessage(GetParent(hwnd), PSM_CHANGED,0,0); break; case IDC_MIRANDAWND: PopupOptions.Monitor = MN_MIRANDA; SendMessage(GetParent(hwnd), PSM_CHANGED,0,0); break; case IDC_ACTIVEWND: PopupOptions.Monitor = MN_ACTIVE; SendMessage(GetParent(hwnd), PSM_CHANGED,0,0); break; case IDC_TRANS: PopupOptions.UseTransparency = !PopupOptions.UseTransparency; { BOOL how = TRUE; EnableWindow(GetDlgItem(hwnd, IDC_TRANS_TXT1) ,how && PopupOptions.UseTransparency); EnableWindow(GetDlgItem(hwnd, IDC_TRANS_SLIDER) ,how && PopupOptions.UseTransparency); EnableWindow(GetDlgItem(hwnd, IDC_TRANS_PERCENT) ,how && PopupOptions.UseTransparency); EnableWindow(GetDlgItem(hwnd, IDC_TRANS_OPAQUEONHOVER) ,how && PopupOptions.UseTransparency); SendMessage(GetParent(hwnd), PSM_CHANGED, 0, 0); } break; case IDC_TRANS_OPAQUEONHOVER: PopupOptions.OpaqueOnHover = !PopupOptions.OpaqueOnHover; SendMessage(GetParent(hwnd), PSM_CHANGED, 0, 0); break; case IDC_USEANIMATIONS: PopupOptions.UseAnimations = !PopupOptions.UseAnimations; { BOOL enable = PopupOptions.UseAnimations || PopupOptions.UseEffect; EnableWindow(GetDlgItem(hwnd, IDC_FADEIN_TXT1), enable); EnableWindow(GetDlgItem(hwnd, IDC_FADEIN), enable); EnableWindow(GetDlgItem(hwnd, IDC_FADEIN_SPIN), enable); EnableWindow(GetDlgItem(hwnd, IDC_FADEIN_TXT2), enable); EnableWindow(GetDlgItem(hwnd, IDC_FADEOUT_TXT1), enable); EnableWindow(GetDlgItem(hwnd, IDC_FADEOUT), enable); EnableWindow(GetDlgItem(hwnd, IDC_FADEOUT_SPIN), enable); EnableWindow(GetDlgItem(hwnd, IDC_FADEOUT_TXT2), enable); SendMessage(GetParent(hwnd), PSM_CHANGED, 0, 0); } break; case IDC_PREVIEW: PopupPreview(); break; } break; case CBN_SELCHANGE: //lParam = Handle to the control switch(idCtrl) { case IDC_EFFECT: { int iEffect = ComboBox_GetItemData((HWND)lParam, ComboBox_GetCurSel((HWND)lParam)); PopupOptions.UseEffect = (iEffect != -2) ? TRUE : FALSE; mir_free(PopupOptions.Effect); PopupOptions.Effect = mir_tstrdup((iEffect >= 0) ? g_lstPopupVfx[iEffect] : _T("")); BOOL enable = PopupOptions.UseAnimations || PopupOptions.UseEffect; EnableWindow(GetDlgItem(hwnd, IDC_FADEIN_TXT1), enable); EnableWindow(GetDlgItem(hwnd, IDC_FADEIN), enable); EnableWindow(GetDlgItem(hwnd, IDC_FADEIN_SPIN), enable); EnableWindow(GetDlgItem(hwnd, IDC_FADEIN_TXT2), enable); EnableWindow(GetDlgItem(hwnd, IDC_FADEOUT_TXT1), enable); EnableWindow(GetDlgItem(hwnd, IDC_FADEOUT), enable); EnableWindow(GetDlgItem(hwnd, IDC_FADEOUT_SPIN), enable); EnableWindow(GetDlgItem(hwnd, IDC_FADEOUT_TXT2), enable); SendMessage(GetParent(hwnd), PSM_CHANGED, 0, 0); } break; } break; case EN_CHANGE: //Edit controls change if (!bDlgInit) break; //lParam = Handle to the control switch(idCtrl) { case IDC_MAXPOPUPS: { int maxPop = GetDlgItemInt(hwnd, idCtrl, NULL, FALSE); if (maxPop > 0){ PopupOptions.MaxPopups = maxPop; SendMessage(GetParent(hwnd), PSM_CHANGED, 0, 0); } } break; case IDC_HISTORYSIZE: { int histSize = GetDlgItemInt(hwnd, idCtrl, NULL, FALSE); if ( histSize > 0 && histSize <= SETTING_HISTORYSIZE_MAX){ PopupOptions.HistorySize = histSize; SendMessage(GetParent(hwnd), PSM_CHANGED, 0, 0); } } break; case IDC_AVT_RADIUS: { int avtRadius = GetDlgItemInt(hwnd, idCtrl, NULL, FALSE); if ( avtRadius <= SETTING_AVTSIZE_MAX / 2 ) { PopupOptions.avatarRadius = avtRadius; SendMessage(GetParent(hwnd), PSM_CHANGED, 0, 0); } } break; case IDC_FADEIN: { int fadeIn = GetDlgItemInt(hwnd, idCtrl, NULL, FALSE); if ( fadeIn >= SETTING_FADEINTIME_MIN && fadeIn <= SETTING_FADEINTIME_MAX ) { PopupOptions.FadeIn = fadeIn; SendMessage(GetParent(hwnd), PSM_CHANGED, 0, 0); } } break; case IDC_FADEOUT: { int fadeOut = GetDlgItemInt(hwnd, idCtrl, NULL, FALSE); if ( fadeOut >= SETTING_FADEOUTTIME_MIN && fadeOut <= SETTING_FADEOUTTIME_MAX){ PopupOptions.FadeOut = fadeOut; SendMessage(GetParent(hwnd), PSM_CHANGED, 0, 0); } } break; } break; case EN_KILLFOCUS: //Edit controls lost fokus //lParam = Handle to the control switch(idCtrl) { case IDC_MAXPOPUPS: { int maxPop = GetDlgItemInt(hwnd, idCtrl, NULL, FALSE); if (maxPop <= 0) PopupOptions.MaxPopups = 20; if (maxPop != PopupOptions.MaxPopups) { SetDlgItemInt(hwnd, idCtrl, PopupOptions.MaxPopups, FALSE); //ErrorMSG(1); SetFocus((HWND)lParam); } } break; case IDC_HISTORYSIZE: { int histSize = GetDlgItemInt(hwnd, idCtrl, NULL, FALSE); if (histSize <= 0) PopupOptions.HistorySize = SETTING_HISTORYSIZE_DEFAULT; else if (histSize > SETTING_HISTORYSIZE_MAX) PopupOptions.HistorySize = SETTING_HISTORYSIZE_MAX; if (histSize != PopupOptions.HistorySize) { SetDlgItemInt(hwnd, idCtrl, PopupOptions.HistorySize, FALSE); ErrorMSG(1, SETTING_HISTORYSIZE_MAX); SetFocus((HWND)lParam); } } break; case IDC_AVT_RADIUS: { int avtRadius = GetDlgItemInt(hwnd, idCtrl, NULL, FALSE); if (avtRadius > SETTING_AVTSIZE_MAX / 2) PopupOptions.avatarRadius = SETTING_AVTSIZE_MAX / 2; if (avtRadius != PopupOptions.avatarRadius) { SetDlgItemInt(hwnd, idCtrl, PopupOptions.avatarRadius, FALSE); ErrorMSG(0, SETTING_AVTSIZE_MAX / 2); SetFocus((HWND)lParam); } } break; case IDC_FADEIN: { int fade = GetDlgItemInt(hwnd, idCtrl, NULL, FALSE); if (fade < SETTING_FADEINTIME_MIN) PopupOptions.FadeIn = SETTING_FADEINTIME_MIN; else if (fade > SETTING_FADEINTIME_MAX) PopupOptions.FadeIn = SETTING_FADEINTIME_MAX; if (fade != PopupOptions.FadeIn) { SetDlgItemInt(hwnd, idCtrl, PopupOptions.FadeIn, FALSE); ErrorMSG(SETTING_FADEINTIME_MIN, SETTING_FADEINTIME_MAX); SetFocus((HWND)lParam); } } break; case IDC_FADEOUT: { int fade = GetDlgItemInt(hwnd, idCtrl, NULL, FALSE); if (fade < SETTING_FADEOUTTIME_MIN) PopupOptions.FadeOut = SETTING_FADEOUTTIME_MIN; else if (fade > SETTING_FADEOUTTIME_MAX) PopupOptions.FadeOut = SETTING_FADEOUTTIME_MAX; if (fade != PopupOptions.FadeOut) { SetDlgItemInt(hwnd, idCtrl, PopupOptions.FadeOut, FALSE); ErrorMSG(SETTING_FADEOUTTIME_MIN, SETTING_FADEOUTTIME_MAX); SetFocus((HWND)lParam); } } } } break; case WM_NOTIFY: switch(((LPNMHDR)lParam)->idFrom) { case 0: switch (((LPNMHDR)lParam)->code) { case PSN_RESET: LoadOption_AdvOpts(); return TRUE; case PSN_APPLY: //History db_set_b(NULL, MODULNAME, "EnableHistory", (BYTE)PopupOptions.EnableHistory); db_set_w(NULL, MODULNAME, "HistorySize", PopupOptions.HistorySize); PopupHistoryResize(); db_set_b(NULL, MODULNAME, "UseHppHistoryLog", PopupOptions.UseHppHistoryLog); //Avatars db_set_b(NULL, MODULNAME, "AvatarBorders", PopupOptions.avatarBorders); db_set_b(NULL, MODULNAME, "AvatarPNGBorders", PopupOptions.avatarPNGBorders); db_set_b(NULL, MODULNAME, "AvatarRadius", PopupOptions.avatarRadius); db_set_w(NULL, MODULNAME, "AvatarSize", PopupOptions.avatarSize); db_set_b(NULL, MODULNAME, "EnableAvatarUpdates", PopupOptions.EnableAvatarUpdates); //Monitor db_set_b(NULL, MODULNAME, "Monitor", PopupOptions.Monitor); //Transparency db_set_b(NULL, MODULNAME, "UseTransparency", PopupOptions.UseTransparency); db_set_b(NULL, MODULNAME, "Alpha", PopupOptions.Alpha); db_set_b(NULL, MODULNAME, "OpaqueOnHover", PopupOptions.OpaqueOnHover); //Effects db_set_b(NULL, MODULNAME, "UseAnimations", PopupOptions.UseAnimations); db_set_b(NULL, MODULNAME, "Fade", PopupOptions.UseEffect); db_set_ts(NULL, MODULNAME, "Effect", PopupOptions.Effect); db_set_dw(NULL, MODULNAME, "FadeInTime", PopupOptions.FadeIn); db_set_dw(NULL, MODULNAME, "FadeOutTime", PopupOptions.FadeOut); //other old stuff db_set_w(NULL, MODULNAME, "MaxPopups", (BYTE)PopupOptions.MaxPopups); } return TRUE; } break; case WM_DESTROY: bDlgInit = false; break; } return FALSE; }
static INT_PTR CALLBACK OptionsDlgProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_INITDIALOG: TranslateDialogDefault(hWnd); //make dialog represent the current options bWmNotify = TRUE; SendDlgItemMessage(hWnd, IDC_COLBACK_MESSAGE, CPM_SETCOLOUR, 0, options->colBackMsg); SendDlgItemMessage(hWnd, IDC_COLTEXT_MESSAGE, CPM_SETCOLOUR, 0, options->colTextMsg); SendDlgItemMessage(hWnd, IDC_COLBACK_URL, CPM_SETCOLOUR, 0, options->colBackUrl); SendDlgItemMessage(hWnd, IDC_COLTEXT_URL, CPM_SETCOLOUR, 0, options->colTextUrl); SendDlgItemMessage(hWnd, IDC_COLBACK_FILE, CPM_SETCOLOUR, 0, options->colBackFile); SendDlgItemMessage(hWnd, IDC_COLTEXT_FILE, CPM_SETCOLOUR, 0, options->colTextFile); SendDlgItemMessage(hWnd, IDC_COLBACK_OTHERS, CPM_SETCOLOUR, 0, options->colBackOthers); SendDlgItemMessage(hWnd, IDC_COLTEXT_OTHERS, CPM_SETCOLOUR, 0, options->colTextOthers); SetCheckBoxState(hWnd, IDC_CHKDEFAULTCOL_MESSAGE, options->bDefaultColorMsg); SetCheckBoxState(hWnd, IDC_CHKDEFAULTCOL_URL, options->bDefaultColorUrl); SetCheckBoxState(hWnd, IDC_CHKDEFAULTCOL_FILE, options->bDefaultColorFile); SetCheckBoxState(hWnd, IDC_CHKDEFAULTCOL_OTHERS, options->bDefaultColorOthers); SetCheckBoxState(hWnd, IDC_CHKMENUITEM, options->bMenuitem); SetCheckBoxState(hWnd, IDC_CHKDISABLE, options->bDisable); SetCheckBoxState(hWnd, IDC_CHKPREVIEW, options->bPreview); SetCheckBoxState(hWnd, IDC_CHKMERGEPOPUP, options->bMergePopup); SetCheckBoxState(hWnd, IDC_CHKNOTIFY_MESSAGE, options->maskNotify & MASK_MESSAGE); SetCheckBoxState(hWnd, IDC_CHKNOTIFY_URL, options->maskNotify & MASK_URL); SetCheckBoxState(hWnd, IDC_CHKNOTIFY_FILE, options->maskNotify & MASK_FILE); SetCheckBoxState(hWnd, IDC_CHKNOTIFY_OTHER, options->maskNotify & MASK_OTHER); SetCheckBoxState(hWnd, IDC_CHKACTL_DISMISS, options->maskActL & MASK_DISMISS); SetCheckBoxState(hWnd, IDC_CHKACTL_OPEN, options->maskActL & MASK_OPEN); SetCheckBoxState(hWnd, IDC_CHKACTL_REMOVE, options->maskActL & MASK_REMOVE); SetCheckBoxState(hWnd, IDC_CHKACTR_DISMISS, options->maskActR & MASK_DISMISS); SetCheckBoxState(hWnd, IDC_CHKACTR_OPEN, options->maskActR & MASK_OPEN); SetCheckBoxState(hWnd, IDC_CHKACTR_REMOVE, options->maskActR & MASK_REMOVE); SetCheckBoxState(hWnd, IDC_CHKACTTE_DISMISS, options->maskActTE & MASK_DISMISS); SetCheckBoxState(hWnd, IDC_CHKACTTE_OPEN, options->maskActTE & MASK_OPEN); SetCheckBoxState(hWnd, IDC_CHKACTTE_REMOVE, options->maskActTE & MASK_REMOVE); SetCheckBoxState(hWnd, IDC_CHKWINDOWCHECK, options->bMsgWindowCheck); SetCheckBoxState(hWnd, IDC_CHKREPLYWINDOW, options->bMsgReplyWindow); SetCheckBoxState(hWnd, IDC_CHKSHOWDATE, options->bShowDate); SetCheckBoxState(hWnd, IDC_CHKSHOWTIME, options->bShowTime); SetCheckBoxState(hWnd, IDC_CHKSHOWHEADERS, options->bShowHeaders); SetCheckBoxState(hWnd, IDC_RDNEW, !options->bShowON); SetCheckBoxState(hWnd, IDC_RDOLD, options->bShowON); SetCheckBoxState(hWnd, IDC_CHKHIDESEND, options->bHideSend); SetCheckBoxState(hWnd, IDC_SUPRESSRSS, options->bNoRSS); SetCheckBoxState(hWnd, IDC_READCHECK, options->bReadCheck); SetCheckBoxState(hWnd, IDC_CHKINFINITE_MESSAGE, options->iDelayMsg == -1); SetCheckBoxState(hWnd, IDC_CHKINFINITE_URL, options->iDelayUrl == -1); SetCheckBoxState(hWnd, IDC_CHKINFINITE_FILE, options->iDelayFile == -1); SetCheckBoxState(hWnd, IDC_CHKINFINITE_OTHERS, options->iDelayOthers == -1); SetDlgItemInt(hWnd, IDC_DELAY_MESSAGE, options->iDelayMsg != -1 ? options->iDelayMsg : 0, TRUE); SetDlgItemInt(hWnd, IDC_DELAY_URL, options->iDelayUrl != -1 ? options->iDelayUrl : 0, TRUE); SetDlgItemInt(hWnd, IDC_DELAY_FILE, options->iDelayFile != -1 ? options->iDelayFile : 0, TRUE); SetDlgItemInt(hWnd, IDC_DELAY_OTHERS, options->iDelayOthers != -1 ? options->iDelayOthers : 0, TRUE); SetDlgItemInt(hWnd, IDC_NUMBERMSG, options->iNumberMsg, FALSE); //update items' states UpdateOptionsDlgItemsState(hWnd); bWmNotify = FALSE; return TRUE; case WM_COMMAND: if (!bWmNotify) { switch (LOWORD(wParam)) { case IDC_PREVIEW: PopupPreview(options); break; default: //update options options->maskNotify = (IsDlgButtonChecked(hWnd, IDC_CHKNOTIFY_MESSAGE) ? MASK_MESSAGE : 0) | (IsDlgButtonChecked(hWnd, IDC_CHKNOTIFY_URL) ? MASK_URL : 0) | (IsDlgButtonChecked(hWnd, IDC_CHKNOTIFY_FILE) ? MASK_FILE : 0) | (IsDlgButtonChecked(hWnd, IDC_CHKNOTIFY_OTHER) ? MASK_OTHER : 0); options->maskActL = (IsDlgButtonChecked(hWnd, IDC_CHKACTL_DISMISS) ? MASK_DISMISS : 0) | (IsDlgButtonChecked(hWnd, IDC_CHKACTL_OPEN) ? MASK_OPEN : 0) | (IsDlgButtonChecked(hWnd, IDC_CHKACTL_REMOVE) ? MASK_REMOVE : 0); options->maskActR = (IsDlgButtonChecked(hWnd, IDC_CHKACTR_DISMISS) ? MASK_DISMISS : 0) | (IsDlgButtonChecked(hWnd, IDC_CHKACTR_OPEN) ? MASK_OPEN : 0) | (IsDlgButtonChecked(hWnd, IDC_CHKACTR_REMOVE) ? MASK_REMOVE : 0); options->maskActTE = (IsDlgButtonChecked(hWnd, IDC_CHKACTTE_DISMISS) ? MASK_DISMISS : 0) | (IsDlgButtonChecked(hWnd, IDC_CHKACTTE_OPEN) ? MASK_OPEN : 0) | (IsDlgButtonChecked(hWnd, IDC_CHKACTTE_REMOVE) ? MASK_REMOVE : 0); options->bDefaultColorMsg = IsDlgButtonChecked(hWnd, IDC_CHKDEFAULTCOL_MESSAGE); options->bDefaultColorUrl = IsDlgButtonChecked(hWnd, IDC_CHKDEFAULTCOL_URL); options->bDefaultColorFile = IsDlgButtonChecked(hWnd, IDC_CHKDEFAULTCOL_FILE); options->bDefaultColorOthers = IsDlgButtonChecked(hWnd, IDC_CHKDEFAULTCOL_OTHERS); options->bMenuitem = IsDlgButtonChecked(hWnd, IDC_CHKMENUITEM); options->bDisable = IsDlgButtonChecked(hWnd, IDC_CHKDISABLE); options->bPreview = IsDlgButtonChecked(hWnd, IDC_CHKPREVIEW); options->iDelayMsg = IsDlgButtonChecked(hWnd, IDC_CHKINFINITE_MESSAGE) ? -1 : (DWORD)GetDlgItemInt(hWnd, IDC_DELAY_MESSAGE, NULL, FALSE); options->iDelayUrl = IsDlgButtonChecked(hWnd, IDC_CHKINFINITE_URL) ? -1 : (DWORD)GetDlgItemInt(hWnd, IDC_DELAY_URL, NULL, FALSE); options->iDelayFile = IsDlgButtonChecked(hWnd, IDC_CHKINFINITE_FILE) ? -1 : (DWORD)GetDlgItemInt(hWnd, IDC_DELAY_FILE, NULL, FALSE); options->iDelayOthers = IsDlgButtonChecked(hWnd, IDC_CHKINFINITE_OTHERS) ? -1 : (DWORD)GetDlgItemInt(hWnd, IDC_DELAY_OTHERS, NULL, FALSE); options->bMergePopup = IsDlgButtonChecked(hWnd, IDC_CHKMERGEPOPUP); options->bMsgWindowCheck = IsDlgButtonChecked(hWnd, IDC_CHKWINDOWCHECK); options->bMsgReplyWindow = IsDlgButtonChecked(hWnd, IDC_CHKREPLYWINDOW); options->bShowDate = IsDlgButtonChecked(hWnd, IDC_CHKSHOWDATE); options->bShowTime = IsDlgButtonChecked(hWnd, IDC_CHKSHOWTIME); options->bShowHeaders = IsDlgButtonChecked(hWnd, IDC_CHKSHOWHEADERS); options->bShowON = IsDlgButtonChecked(hWnd, IDC_RDOLD); options->bShowON = BST_UNCHECKED == IsDlgButtonChecked(hWnd, IDC_RDNEW); options->bHideSend = IsDlgButtonChecked(hWnd, IDC_CHKHIDESEND); options->iNumberMsg = GetDlgItemInt(hWnd, IDC_NUMBERMSG, NULL, FALSE); options->bNoRSS = IsDlgButtonChecked(hWnd, IDC_SUPRESSRSS); options->bReadCheck = IsDlgButtonChecked(hWnd, IDC_READCHECK); //update items' states UpdateOptionsDlgItemsState(hWnd); if (HIWORD(wParam) == CPN_COLOURCHANGED) { options->colBackMsg = SendDlgItemMessage(hWnd, IDC_COLBACK_MESSAGE, CPM_GETCOLOUR, 0, 0); options->colTextMsg = SendDlgItemMessage(hWnd, IDC_COLTEXT_MESSAGE, CPM_GETCOLOUR, 0, 0); options->colBackUrl = SendDlgItemMessage(hWnd, IDC_COLBACK_URL, CPM_GETCOLOUR, 0, 0); options->colTextUrl = SendDlgItemMessage(hWnd, IDC_COLTEXT_URL, CPM_GETCOLOUR, 0, 0); options->colBackFile = SendDlgItemMessage(hWnd, IDC_COLBACK_FILE, CPM_GETCOLOUR, 0, 0); options->colTextFile = SendDlgItemMessage(hWnd, IDC_COLTEXT_FILE, CPM_GETCOLOUR, 0, 0); options->colBackOthers = SendDlgItemMessage(hWnd, IDC_COLBACK_OTHERS, CPM_GETCOLOUR, 0, 0); options->colTextOthers = SendDlgItemMessage(hWnd, IDC_COLTEXT_OTHERS, CPM_GETCOLOUR, 0, 0); } //send changes to mi MenuitemUpdate(!options->bDisable); //enable "Apply" button SendMessage(GetParent(hWnd), PSM_CHANGED, 0, 0); break; } } break; case WM_NOTIFY: switch (((LPNMHDR)lParam)->code) { case PSN_APPLY: OptionsWrite(); break; case PSN_RESET: OptionsRead(); //maybe something changed with the mi MenuitemUpdate(!options->bDisable); break; } break; } return FALSE; }
INT_PTR CALLBACK DlgProcPopupGeneral(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { static bool bDlgInit = false; //some controls send WM_COMMAND before or during WM_INITDIALOG static OPTTREE_OPTION *statusOptions = NULL; static int statusOptionsCount = 0; if (statusOptions) { int index; if (OptTree_ProcessMessage(hwnd, msg, wParam, lParam, &index, IDC_STATUSES, statusOptions, statusOptionsCount)) return TRUE; } switch (msg) { case WM_INITDIALOG: //Seconds of delay CheckDlgButton(hwnd, IDC_INFINITEDELAY, PopupOptions.InfiniteDelay); CheckDlgButton(hwnd, IDC_LEAVEHOVERED, PopupOptions.LeaveHovered); EnableWindow(GetDlgItem(hwnd, IDC_SECONDS), !PopupOptions.InfiniteDelay); EnableWindow(GetDlgItem(hwnd, IDC_SECONDS_STATIC1), !PopupOptions.InfiniteDelay); EnableWindow(GetDlgItem(hwnd, IDC_SECONDS_STATIC2), !PopupOptions.InfiniteDelay); EnableWindow(GetDlgItem(hwnd, IDC_LEAVEHOVERED), !PopupOptions.InfiniteDelay); SetDlgItemInt(hwnd, IDC_SECONDS, PopupOptions.Seconds, FALSE); SendDlgItemMessage(hwnd, IDC_SECONDS_SPIN, UDM_SETRANGE, 0, (LPARAM)MAKELONG(SETTING_LIFETIME_MAX, SETTING_LIFETIME_MIN)); //Dynamic Resize CheckDlgButton(hwnd, IDC_DYNAMICRESIZE, PopupOptions.DynamicResize); SetDlgItemText(hwnd, IDC_USEMAXIMUMWIDTH, PopupOptions.DynamicResize ? LPGENT("Maximum width") : LPGENT("Width")); //Minimum Width CheckDlgButton(hwnd, IDC_USEMINIMUMWIDTH, PopupOptions.UseMinimumWidth); SendDlgItemMessage(hwnd, IDC_MINIMUMWIDTH_SPIN, UDM_SETRANGE, 0, (LPARAM)MAKELONG(SETTING_MAXIMUMWIDTH_MAX, SETTING_MINIMUMWIDTH_MIN)); SetDlgItemInt(hwnd, IDC_MINIMUMWIDTH, PopupOptions.MinimumWidth, FALSE); //Maximum Width PopupOptions.UseMaximumWidth = PopupOptions.DynamicResize ? PopupOptions.UseMaximumWidth : TRUE; CheckDlgButton(hwnd, IDC_USEMAXIMUMWIDTH, PopupOptions.UseMaximumWidth); SendDlgItemMessage(hwnd, IDC_MAXIMUMWIDTH_SPIN, UDM_SETRANGE, 0, (LPARAM)MAKELONG(SETTING_MAXIMUMWIDTH_MAX, SETTING_MINIMUMWIDTH_MIN)); SetDlgItemInt(hwnd, IDC_MAXIMUMWIDTH, PopupOptions.MaximumWidth, FALSE); //And finally let's enable/disable them. EnableWindow(GetDlgItem(hwnd, IDC_USEMINIMUMWIDTH), PopupOptions.DynamicResize); EnableWindow(GetDlgItem(hwnd, IDC_MINIMUMWIDTH), PopupOptions.DynamicResize && PopupOptions.UseMinimumWidth); EnableWindow(GetDlgItem(hwnd, IDC_MINIMUMWIDTH_SPIN), PopupOptions.DynamicResize && PopupOptions.UseMinimumWidth); EnableWindow(GetDlgItem(hwnd, IDC_MAXIMUMWIDTH), PopupOptions.UseMaximumWidth); EnableWindow(GetDlgItem(hwnd, IDC_MAXIMUMWIDTH_SPIN), PopupOptions.UseMaximumWidth); //Position combobox. { HWND hCtrl = GetDlgItem(hwnd, IDC_WHERE); ComboBox_SetItemData(hCtrl, ComboBox_AddString(hCtrl, TranslateT("Upper left corner")), POS_UPPERLEFT); ComboBox_SetItemData(hCtrl, ComboBox_AddString(hCtrl, TranslateT("Lower left corner")), POS_LOWERLEFT); ComboBox_SetItemData(hCtrl, ComboBox_AddString(hCtrl, TranslateT("Lower right corner")), POS_LOWERRIGHT); ComboBox_SetItemData(hCtrl, ComboBox_AddString(hCtrl, TranslateT("Upper right corner")), POS_UPPERRIGHT); SendDlgItemMessage(hwnd, IDC_WHERE, CB_SETCURSEL, PopupOptions.Position, 0); } //Configure popup area { HWND hCtrl = GetDlgItem(hwnd, IDC_CUSTOMPOS); SendMessage(hCtrl, BUTTONSETASFLATBTN, TRUE, 0); SendMessage(hCtrl, BUTTONADDTOOLTIP, (WPARAM)_T("Popup area"), BATF_TCHAR); SendMessage(hCtrl, BM_SETIMAGE, IMAGE_ICON, (LPARAM)IcoLib_GetIcon(ICO_OPT_RESIZE, 0)); } //Spreading combobox { HWND hCtrl = GetDlgItem(hwnd, IDC_LAYOUT); ComboBox_SetItemData(hCtrl, ComboBox_AddString(hCtrl, TranslateT("Horizontal")), SPREADING_HORIZONTAL); ComboBox_SetItemData(hCtrl, ComboBox_AddString(hCtrl, TranslateT("Vertical")), SPREADING_VERTICAL); SendDlgItemMessage(hwnd, IDC_LAYOUT, CB_SETCURSEL, PopupOptions.Spreading, 0); } //miscellaneous CheckDlgButton(hwnd, IDC_REORDERPOPUPS, PopupOptions.ReorderPopups); //Popup enabled CheckDlgButton(hwnd, IDC_POPUPENABLED, PopupOptions.ModuleIsEnabled ? BST_UNCHECKED : BST_CHECKED); CheckDlgButton(hwnd, IDC_DISABLEINFS, PopupOptions.DisableWhenFullscreen); EnableWindow(GetDlgItem(hwnd, IDC_DISABLEINFS), PopupOptions.ModuleIsEnabled); EnableWindow(GetDlgItem(hwnd, IDC_STATUSES), PopupOptions.ModuleIsEnabled); //new status options { int protocolCount = 0; PROTOACCOUNT **protocols; ProtoEnumAccounts(&protocolCount, &protocols); DWORD globalFlags = 0; for (int i = 0; i < protocolCount; ++i) { DWORD protoFlags = CallProtoService(protocols[i]->szModuleName, PS_GETCAPS, PFLAGNUM_2, 0); globalFlags |= protoFlags; statusOptionsCount += CountStatusModes(protoFlags); } statusOptionsCount += CountStatusModes(globalFlags); statusOptions = new OPTTREE_OPTION[statusOptionsCount]; int pos = AddStatusModes(statusOptions, 0, LPGENT("Global Status"), globalFlags); for (int i = 0; i < protocolCount; ++i) { DWORD protoFlags = CallProtoService(protocols[i]->szModuleName, PS_GETCAPS, PFLAGNUM_2, 0); if (!CountStatusModes(protoFlags)) continue; TCHAR prefix[128]; mir_sntprintf(prefix, SIZEOF(prefix), LPGENT("Protocol Status")_T("/%s"), protocols[i]->tszAccountName); pos = AddStatusModes(statusOptions, pos, prefix, protoFlags); } int index; OptTree_ProcessMessage(hwnd, msg, wParam, lParam, &index, IDC_STATUSES, statusOptions, statusOptionsCount); for (int i = 0; i < protocolCount; ++i) { DWORD protoFlags = CallProtoService(protocols[i]->szModuleName, PS_GETCAPS, PFLAGNUM_2, 0); if (!CountStatusModes(protoFlags)) continue; char prefix[128]; mir_snprintf(prefix, sizeof(prefix), "Protocol Status/%s", protocols[i]->szModuleName); TCHAR pszSettingName[256]; mir_sntprintf(pszSettingName, SIZEOF(pszSettingName), LPGENT("Protocol Status")_T("/%s"), protocols[i]->tszAccountName); OptTree_SetOptions(hwnd, IDC_STATUSES, statusOptions, statusOptionsCount, db_get_dw(NULL, MODULNAME, prefix, 0), pszSettingName); } OptTree_SetOptions(hwnd, IDC_STATUSES, statusOptions, statusOptionsCount, db_get_dw(NULL, MODULNAME, "Global Status", 0), LPGENT("Global Status")); } TranslateDialogDefault(hwnd); //do it on end of WM_INITDIALOG bDlgInit = true; return TRUE; case WM_COMMAND: switch (HIWORD(wParam)) { case BN_CLICKED: //Button controls switch (LOWORD(wParam)) { case IDC_INFINITEDELAY: PopupOptions.InfiniteDelay = !PopupOptions.InfiniteDelay; EnableWindow(GetDlgItem(hwnd, IDC_SECONDS), !PopupOptions.InfiniteDelay); EnableWindow(GetDlgItem(hwnd, IDC_SECONDS_STATIC1), !PopupOptions.InfiniteDelay); EnableWindow(GetDlgItem(hwnd, IDC_SECONDS_STATIC2), !PopupOptions.InfiniteDelay); EnableWindow(GetDlgItem(hwnd, IDC_LEAVEHOVERED), !PopupOptions.InfiniteDelay); SendMessage(GetParent(hwnd), PSM_CHANGED, 0, 0); break; case IDC_LEAVEHOVERED: PopupOptions.LeaveHovered = !PopupOptions.LeaveHovered; SendMessage(GetParent(hwnd), PSM_CHANGED, 0, 0); break; case IDC_DYNAMICRESIZE: PopupOptions.DynamicResize = !PopupOptions.DynamicResize; EnableWindow(GetDlgItem(hwnd, IDC_USEMINIMUMWIDTH), PopupOptions.DynamicResize); EnableWindow(GetDlgItem(hwnd, IDC_MINIMUMWIDTH), PopupOptions.DynamicResize && PopupOptions.UseMinimumWidth); EnableWindow(GetDlgItem(hwnd, IDC_MINIMUMWIDTH_SPIN), PopupOptions.DynamicResize && PopupOptions.UseMinimumWidth); SetDlgItemText(hwnd, IDC_USEMAXIMUMWIDTH, PopupOptions.DynamicResize ? TranslateT("Maximum width") : TranslateT("Width")); if (!PopupOptions.DynamicResize) { PopupOptions.UseMaximumWidth = TRUE; CheckDlgButton(hwnd, IDC_USEMAXIMUMWIDTH, BST_CHECKED); EnableWindow(GetDlgItem(hwnd, IDC_USEMAXIMUMWIDTH), TRUE); EnableWindow(GetDlgItem(hwnd, IDC_MAXIMUMWIDTH), TRUE); EnableWindow(GetDlgItem(hwnd, IDC_MAXIMUMWIDTH_SPIN), TRUE); } SendMessage(GetParent(hwnd), PSM_CHANGED, 0, 0); break; case IDC_USEMINIMUMWIDTH: PopupOptions.UseMinimumWidth = !PopupOptions.UseMinimumWidth; EnableWindow(GetDlgItem(hwnd, IDC_MINIMUMWIDTH), PopupOptions.UseMinimumWidth); EnableWindow(GetDlgItem(hwnd, IDC_MINIMUMWIDTH_SPIN), PopupOptions.UseMinimumWidth); SendMessage(GetParent(hwnd), PSM_CHANGED, 0, 0); break; case IDC_USEMAXIMUMWIDTH: PopupOptions.UseMaximumWidth = Button_GetCheck((HWND)lParam); if (!PopupOptions.DynamicResize) { //ugly - set always on if DynamicResize = off CheckDlgButton(hwnd, LOWORD(wParam), BST_CHECKED); PopupOptions.UseMaximumWidth = TRUE; } EnableWindow(GetDlgItem(hwnd, IDC_MAXIMUMWIDTH), PopupOptions.UseMaximumWidth); EnableWindow(GetDlgItem(hwnd, IDC_MAXIMUMWIDTH_SPIN), PopupOptions.UseMaximumWidth); SendMessage(GetParent(hwnd), PSM_CHANGED, 0, 0); break; case IDC_CUSTOMPOS: { RECT rcButton, rcBox; HWND hwndBox = CreateDialog(hInst, MAKEINTRESOURCE(IDD_POSITION), NULL, PositionBoxDlgProc); GetWindowRect((HWND)lParam, &rcButton); GetWindowRect(hwndBox, &rcBox); MoveWindow(hwndBox, rcButton.right - (rcBox.right - rcBox.left) + 15, rcButton.bottom + 3, rcBox.right - rcBox.left, rcBox.bottom - rcBox.top, FALSE); SetWindowLongPtr(hwndBox, GWL_EXSTYLE, GetWindowLongPtr(hwndBox, GWL_EXSTYLE) | WS_EX_LAYERED); SetLayeredWindowAttributes(hwndBox, NULL, 0, LWA_ALPHA); ShowWindow(hwndBox, SW_SHOW); for (int i = 0; i <= 255; i += 15) { SetLayeredWindowAttributes(hwndBox, NULL, i, LWA_ALPHA); UpdateWindow(hwndBox); Sleep(1); } SetWindowLongPtr(hwndBox, GWL_EXSTYLE, GetWindowLongPtr(hwndBox, GWL_EXSTYLE) & ~WS_EX_LAYERED); ShowWindow(hwndBox, SW_SHOW); SendMessage(GetParent(hwnd), PSM_CHANGED, 0, 0); } break; case IDC_REORDERPOPUPS: { PopupOptions.ReorderPopups = !PopupOptions.ReorderPopups; PopupOptions.ReorderPopupsWarning = PopupOptions.ReorderPopups ? db_get_b(NULL, MODULNAME, "ReorderPopupsWarning", TRUE) : TRUE; SendMessage(GetParent(hwnd), PSM_CHANGED, 0, 0); } break; case IDC_POPUPENABLED: { int chk = IsDlgButtonChecked(hwnd, IDC_POPUPENABLED); if (PopupOptions.ModuleIsEnabled&&chk || !PopupOptions.ModuleIsEnabled && !chk) svcEnableDisableMenuCommand(0, 0); EnableWindow(GetDlgItem(hwnd, IDC_STATUSES), PopupOptions.ModuleIsEnabled); EnableWindow(GetDlgItem(hwnd, IDC_DISABLEINFS), PopupOptions.ModuleIsEnabled); } break; case IDC_DISABLEINFS: PopupOptions.DisableWhenFullscreen = !PopupOptions.DisableWhenFullscreen; SendMessage(GetParent(hwnd), PSM_CHANGED, 0, 0); break; case IDC_PREVIEW: PopupPreview(); break; } break; case CBN_SELCHANGE: //ComboBox controls switch (LOWORD(wParam)) { //lParam = Handle to the control case IDC_WHERE: PopupOptions.Position = ComboBox_GetItemData((HWND)lParam, ComboBox_GetCurSel((HWND)lParam)); SendMessage(GetParent(hwnd), PSM_CHANGED, 0, 0); break; case IDC_LAYOUT: PopupOptions.Spreading = ComboBox_GetItemData((HWND)lParam, ComboBox_GetCurSel((HWND)lParam)); SendMessage(GetParent(hwnd), PSM_CHANGED, 0, 0); break; } break; case EN_CHANGE: //Edit controls change if (!bDlgInit) break; switch (LOWORD(wParam)) { //lParam = Handle to the control case IDC_SECONDS: { int seconds = GetDlgItemInt(hwnd, LOWORD(wParam), NULL, FALSE); if (seconds >= SETTING_LIFETIME_MIN && seconds <= SETTING_LIFETIME_MAX && seconds != PopupOptions.Seconds) { PopupOptions.Seconds = seconds; SendMessage(GetParent(hwnd), PSM_CHANGED, 0, 0); } } break; case IDC_MINIMUMWIDTH: { int temp = GetDlgItemInt(hwnd, IDC_MINIMUMWIDTH, NULL, FALSE); if (temp >= SETTING_MINIMUMWIDTH_MIN && temp <= SETTING_MAXIMUMWIDTH_MAX && temp != PopupOptions.MinimumWidth) { PopupOptions.MinimumWidth = temp; SendMessage(GetParent(hwnd), PSM_CHANGED, 0, 0); } } break; case IDC_MAXIMUMWIDTH: { int temp = GetDlgItemInt(hwnd, IDC_MAXIMUMWIDTH, NULL, FALSE); if (temp >= SETTING_MINIMUMWIDTH_MIN && temp <= SETTING_MAXIMUMWIDTH_MAX && temp != PopupOptions.MaximumWidth) { PopupOptions.MaximumWidth = temp; SendMessage(GetParent(hwnd), PSM_CHANGED, 0, 0); } } break; }//end switch(idCtrl) break; case EN_KILLFOCUS: //Edit controls lost fokus switch (LOWORD(wParam)) { //lParam = Handle to the control case IDC_SECONDS: { int seconds = GetDlgItemInt(hwnd, LOWORD(wParam), NULL, FALSE); if (seconds > SETTING_LIFETIME_MAX) PopupOptions.Seconds = SETTING_LIFETIME_MAX; else if (seconds < SETTING_LIFETIME_MIN) PopupOptions.Seconds = SETTING_LIFETIME_MIN; if (seconds != PopupOptions.Seconds) { SetDlgItemInt(hwnd, LOWORD(wParam), PopupOptions.Seconds, FALSE); ErrorMSG(SETTING_LIFETIME_MIN, SETTING_LIFETIME_MAX); SetFocus((HWND)lParam); } } break; case IDC_MINIMUMWIDTH: { int temp = GetDlgItemInt(hwnd, LOWORD(wParam), NULL, FALSE); if (temp < SETTING_MINIMUMWIDTH_MIN) PopupOptions.MinimumWidth = SETTING_MINIMUMWIDTH_MIN; else if (temp > SETTING_MAXIMUMWIDTH_MAX) PopupOptions.MinimumWidth = SETTING_MAXIMUMWIDTH_MAX; if (temp != PopupOptions.MinimumWidth) { SetDlgItemInt(hwnd, LOWORD(wParam), PopupOptions.MinimumWidth, FALSE); ErrorMSG(SETTING_MINIMUMWIDTH_MIN, SETTING_MAXIMUMWIDTH_MAX); SetFocus((HWND)lParam); break; } if (temp > PopupOptions.MaximumWidth) { PopupOptions.MaximumWidth = min(temp, SETTING_MAXIMUMWIDTH_MAX); SetDlgItemInt(hwnd, IDC_MAXIMUMWIDTH, PopupOptions.MaximumWidth, FALSE); } } break; case IDC_MAXIMUMWIDTH: { int temp = GetDlgItemInt(hwnd, LOWORD(wParam), NULL, FALSE); if (temp >= SETTING_MAXIMUMWIDTH_MAX) PopupOptions.MaximumWidth = SETTING_MAXIMUMWIDTH_MAX; else if (temp < SETTING_MINIMUMWIDTH_MIN) PopupOptions.MaximumWidth = SETTING_MINIMUMWIDTH_MIN; if (temp != PopupOptions.MaximumWidth) { SetDlgItemInt(hwnd, LOWORD(wParam), PopupOptions.MaximumWidth, FALSE); ErrorMSG(SETTING_MINIMUMWIDTH_MIN, SETTING_MAXIMUMWIDTH_MAX); SetFocus((HWND)lParam); break; } if (temp < PopupOptions.MinimumWidth) { PopupOptions.MinimumWidth = max(temp, SETTING_MINIMUMWIDTH_MIN); SetDlgItemInt(hwnd, IDC_MINIMUMWIDTH, PopupOptions.MinimumWidth, FALSE); } } break; } break; } break; case WM_NOTIFY: switch (((LPNMHDR)lParam)->idFrom) { case 0: switch (((LPNMHDR)lParam)->code) { case PSN_RESET: LoadOption_General(); return TRUE; case PSN_APPLY: //Seconds db_set_b(NULL, MODULNAME, "InfiniteDelay", PopupOptions.InfiniteDelay); db_set_w(NULL, MODULNAME, "Seconds", (WORD)PopupOptions.Seconds); db_set_b(NULL, MODULNAME, "LeaveHovered", PopupOptions.LeaveHovered); //Dynamic Resize db_set_b(NULL, MODULNAME, "DynamicResize", PopupOptions.DynamicResize); db_set_b(NULL, MODULNAME, "UseMinimumWidth", PopupOptions.UseMinimumWidth); db_set_w(NULL, MODULNAME, "MinimumWidth", PopupOptions.MinimumWidth); db_set_b(NULL, MODULNAME, "UseMaximumWidth", PopupOptions.UseMaximumWidth); db_set_w(NULL, MODULNAME, "MaximumWidth", PopupOptions.MaximumWidth); //Position db_set_b(NULL, MODULNAME, "Position", (BYTE)PopupOptions.Position); //Configure popup area db_set_w(NULL, MODULNAME, "gapTop", (WORD)PopupOptions.gapTop); db_set_w(NULL, MODULNAME, "gapBottom", (WORD)PopupOptions.gapBottom); db_set_w(NULL, MODULNAME, "gapLeft", (WORD)PopupOptions.gapLeft); db_set_w(NULL, MODULNAME, "gapRight", (WORD)PopupOptions.gapRight); db_set_w(NULL, MODULNAME, "spacing", (WORD)PopupOptions.spacing); //Spreading db_set_b(NULL, MODULNAME, "Spreading", (BYTE)PopupOptions.Spreading); //miscellaneous Check_ReorderPopups(hwnd); //this save also PopupOptions.ReorderPopups //disable When db_set_b(NULL, MODULNAME, "DisableWhenFullscreen", PopupOptions.DisableWhenFullscreen); //new status options { int protocolCount; PROTOACCOUNT **protocols; ProtoEnumAccounts(&protocolCount, &protocols); for (int i = 0; i < protocolCount; ++i) { char prefix[128]; mir_snprintf(prefix, SIZEOF(prefix), "Protocol Status/%s", protocols[i]->szModuleName); TCHAR pszSettingName[256]; mir_sntprintf(pszSettingName, SIZEOF(pszSettingName), _T("Protocol Status/%s"), protocols[i]->tszAccountName); db_set_dw(NULL, MODULNAME, prefix, OptTree_GetOptions(hwnd, IDC_STATUSES, statusOptions, statusOptionsCount, pszSettingName)); } db_set_dw(NULL, MODULNAME, "Global Status", OptTree_GetOptions(hwnd, IDC_STATUSES, statusOptions, statusOptionsCount, _T("Global Status"))); } return TRUE; } break; case IDC_MINIMUMWIDTH_SPIN: { LPNMUPDOWN lpnmud = (LPNMUPDOWN)lParam; int temp = lpnmud->iPos + lpnmud->iDelta; if (temp > PopupOptions.MaximumWidth) { PopupOptions.MaximumWidth = min(temp, SETTING_MAXIMUMWIDTH_MAX); SetDlgItemInt(hwnd, IDC_MAXIMUMWIDTH, PopupOptions.MaximumWidth, FALSE); } } break; case IDC_MAXIMUMWIDTH_SPIN: { LPNMUPDOWN lpnmud = (LPNMUPDOWN)lParam; int temp = lpnmud->iPos + lpnmud->iDelta; if (temp < PopupOptions.MinimumWidth) { PopupOptions.MinimumWidth = max(temp, SETTING_MINIMUMWIDTH_MIN); SetDlgItemInt(hwnd, IDC_MINIMUMWIDTH, PopupOptions.MinimumWidth, FALSE); } } } break; case WM_DESTROY: if (statusOptions) { for (int i = 0; i < statusOptionsCount; ++i) { mir_free(statusOptions[i].pszOptionName); mir_free(statusOptions[i].pszSettingName); } delete [] statusOptions; statusOptions = NULL; statusOptionsCount = 0; bDlgInit = false; } break; } return FALSE; }
INT_PTR CALLBACK DlgProcPopSkinsOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) { static bool bDlgInit = false; //some controls send WM_COMMAND before or during WM_INITDIALOG static HANDLE hhkFontsReload = 0; static OPTTREE_OPTION *skinOptions = NULL; static int skinOptionsCount = 0; if (skinOptions) { int index = -1; OptTree_ProcessMessage(hwndDlg, msg, wParam, lParam, &index, IDC_SKIN_LIST_OPT, skinOptions, skinOptionsCount); if (index != -1) { if (lstrcmp(skinOptions[index].pszSettingName, _T("Skin options")) == 0) { const PopupSkin *skin = 0; if (skin = skins.getSkin(PopupOptions.SkinPack)) { skin->setFlag(skinOptions[index].Data, skinOptions[index].bState ? true : false); } } else if (lstrcmp(skinOptions[index].pszSettingName, _T("Global settings")) == 0) { switch (skinOptions[index].dwFlag) { case (1 << 0): PopupOptions.DisplayTime = skinOptions[index].bState; break; case (1 << 1): PopupOptions.DropShadow = skinOptions[index].bState; break; case (1 << 2): PopupOptions.EnableFreeformShadows = skinOptions[index].bState; break; case (1 << 3): PopupOptions.EnableAeroGlass = skinOptions[index].bState; break; case (1 << 4): PopupOptions.UseWinColors = skinOptions[index].bState; break; case (1 << 5): PopupOptions.UseMText = skinOptions[index].bState; break; } } updatePreviewImage(GetDlgItem(hwndDlg, IDC_PREVIEWBOX)); return FALSE; } } switch (msg) { case WM_INITDIALOG: { HWND hCtrl = NULL; DWORD dwIndex = 0; //Skin List hCtrl = GetDlgItem(hwndDlg, IDC_SKINLIST); ListBox_ResetContent(hCtrl); LPTSTR Temp = NULL; for (const Skins::SKINLIST *sl = skins.getSkinList(); sl; sl = sl->next) { dwIndex = ListBox_AddString(hCtrl, sl->name); ListBox_SetItemData(hCtrl, dwIndex, sl->name); } ListBox_SetCurSel(hCtrl, ListBox_FindString(hCtrl, 0, PopupOptions.SkinPack)); //Skin List reload button SendMessage(GetDlgItem(hwndDlg, IDC_BTN_RELOAD), BUTTONSETASFLATBTN, TRUE, 0); SendMessage(GetDlgItem(hwndDlg, IDC_BTN_RELOAD), BM_SETIMAGE, IMAGE_ICON, (LPARAM)IcoLib_GetIcon(ICO_OPT_RELOAD,0)); SendMessage(GetDlgItem(hwndDlg, IDC_BTN_RELOAD), BUTTONADDTOOLTIP, (WPARAM)Translate("Refresh List"), 0); //Skin Option List SkinOptionList_Update (skinOptions, &skinOptionsCount, hwndDlg); //PreviewBox mir_subclassWindow(GetDlgItem(hwndDlg, IDC_PREVIEWBOX), WndProcPreviewBox); updatePreviewImage(GetDlgItem(hwndDlg, IDC_PREVIEWBOX)); //hooks hhkFontsReload = HookEventMessage(ME_FONT_RELOAD, hwndDlg, WM_USER); TranslateDialogDefault(hwndDlg); bDlgInit = true; } return TRUE; case WM_USER: updatePreviewImage(GetDlgItem(hwndDlg, IDC_PREVIEWBOX)); return TRUE; case WM_COMMAND: { HWND hCtrl = NULL; UINT idCtrl = LOWORD(wParam); switch (HIWORD(wParam)) { case BN_KILLFOCUS: //Button controls case BN_SETFOCUS: //Button controls return TRUE; break; case BN_CLICKED: //Button controls switch(idCtrl) { case IDC_PREVIEW: PopupPreview(); break; case IDC_BTN_RELOAD: { LPTSTR Temp = NULL; DWORD dwIndex = 0; TCHAR szNewSkin[128]; LPTSTR pszOldSkin = mir_tstrdup(PopupOptions.SkinPack); skins.load(_T("")); hCtrl = GetDlgItem(hwndDlg, IDC_SKINLIST); ListBox_ResetContent(hCtrl); for (const Skins::SKINLIST *sl = skins.getSkinList(); sl; sl = sl->next) { dwIndex = ListBox_AddString(hCtrl, sl->name); ListBox_SetItemData(hCtrl, dwIndex, sl->name); } ListBox_SetCurSel(hCtrl, ListBox_FindString(hCtrl, 0, PopupOptions.SkinPack)); //make shure we have select skin (ListBox_SetCurSel may be fail) ListBox_GetText(hCtrl, ListBox_GetCurSel(hCtrl), &szNewSkin); if (lstrcmp(pszOldSkin, szNewSkin) != 0) { mir_free(PopupOptions.SkinPack); PopupOptions.SkinPack = mir_tstrdup(szNewSkin); } mir_free(pszOldSkin); const PopupSkin *skin = 0; if (skin = skins.getSkin(PopupOptions.SkinPack)) { //update Skin Option List from reload SkinPack bDlgInit = false; bDlgInit = SkinOptionList_Update (skinOptions, &skinOptionsCount, hwndDlg); } SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); }//end IDC_BTN_RELOAD: break; case IDC_GETSKINS: CallService(MS_UTILS_OPENURL,0,(LPARAM)"http://miranda-ng.org/"); break; }//end switch(idCtrl) updatePreviewImage(GetDlgItem(hwndDlg, IDC_PREVIEWBOX)); break; case CBN_SELCHANGE: //combo box controls switch(idCtrl) { case IDC_SKINLIST: { //Skin list change mir_free(PopupOptions.SkinPack); PopupOptions.SkinPack = mir_tstrdup((TCHAR *)SendDlgItemMessage( hwndDlg, IDC_SKINLIST, LB_GETITEMDATA, (WPARAM)SendDlgItemMessage(hwndDlg, IDC_SKINLIST, LB_GETCURSEL,0,0), 0)); const PopupSkin *skin = 0; if (skin = skins.getSkin(PopupOptions.SkinPack)) { mir_free(PopupOptions.SkinPack); PopupOptions.SkinPack = mir_tstrdup(skin->getName()); //update Skin Option List bDlgInit = false; bDlgInit = SkinOptionList_Update (skinOptions, &skinOptionsCount, hwndDlg); } updatePreviewImage(GetDlgItem(hwndDlg, IDC_PREVIEWBOX)); } SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); break; }//end switch(idCtrl) break; }//end switch (HIWORD(wParam)) break; }// end WM_COMMAND return FALSE; case WM_NOTIFY: if (!bDlgInit) return FALSE; switch (((LPNMHDR)lParam)->idFrom) { case 0: switch (((LPNMHDR)lParam)->code) { case PSN_RESET: LoadOption_Skins(); return TRUE; case PSN_APPLY: { //skin pack db_set_ts(NULL, MODULNAME, "SkinPack", PopupOptions.SkinPack); //skin options const PopupSkin *skin = 0; if (skin = skins.getSkin(PopupOptions.SkinPack)) skin->saveOpts(); skins.freeAllButActive(); //more Skin options db_set_b(NULL, MODULNAME, "DisplayTime", PopupOptions.DisplayTime); db_set_b(NULL, MODULNAME, "DropShadow", PopupOptions.DropShadow); db_set_b(NULL, MODULNAME, "EnableShadowRegion", PopupOptions.EnableFreeformShadows); db_set_b(NULL, MODULNAME, "EnableAeroGlass", PopupOptions.EnableAeroGlass); db_set_b(NULL, MODULNAME, "UseMText", PopupOptions.UseMText); }//end PSN_APPLY: return TRUE; }//switch (((LPNMHDR)lParam)->code) break; }//end switch (((LPNMHDR)lParam)->idFrom) return FALSE; case WM_DESTROY: if (wndPreview) { delete wndPreview; wndPreview = NULL; gPreviewOk = false; } if (hhkFontsReload) UnhookEvent(hhkFontsReload); if (skinOptions) { for (int i=0; i < skinOptionsCount; ++i) { mir_free(skinOptions[i].pszOptionName); mir_free(skinOptions[i].pszSettingName); } mir_free(skinOptions); skinOptions = NULL; skinOptionsCount = 0; } return TRUE; }//end switch (msg) return FALSE; }
INT_PTR CALLBACK DlgProcPopupActions(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { static bool windowInitialized = false; int i; switch (msg) { case WM_INITDIALOG: windowInitialized = false; TranslateDialogDefault(hwnd); SendMessage(GetDlgItem(hwnd, IDC_ICO_INFO), STM_SETICON, (WPARAM)IcoLib_GetIcon(ICO_MISC_NOTIFY, 0), 0); CheckDlgButton(hwnd, IDC_CHK_ENABLEACTIONS, PopupOptions.actions & ACT_ENABLE ? TRUE : FALSE); CheckDlgButton(hwnd, IDC_CHK_IMCONTACTSONLY, PopupOptions.actions & ACT_DEF_IMONLY ? TRUE : FALSE); CheckDlgButton(hwnd, IDC_CHK_CONTACTSONLY, PopupOptions.actions & ACT_DEF_NOGLOBAL ? TRUE : FALSE); CheckDlgButton(hwnd, IDC_CHK_DONTCLOSE, PopupOptions.actions & ACT_DEF_KEEPWND ? TRUE : FALSE); CheckDlgButton(hwnd, IDC_CHK_LARGEICONS, PopupOptions.actions & ACT_LARGE ? TRUE : FALSE); CheckDlgButton(hwnd, IDC_RD_TEXT, PopupOptions.actions & ACT_TEXT ? TRUE : FALSE); CheckDlgButton(hwnd, IDC_RD_LEFTICONS, PopupOptions.actions & ACT_LEFTICONS ? TRUE : FALSE); CheckDlgButton(hwnd, IDC_RD_RIGHTICONS, PopupOptions.actions & ACT_RIGHTICONS ? TRUE : FALSE); { DWORD dwActiveItem = 0; HWND hCombo = GetDlgItem(hwnd, IDC_CB_LEFT); dwActiveItem = MouseOverride(hCombo, PopupOptions.overrideLeft); SendDlgItemMessage(hwnd, IDC_CB_LEFT, CB_SETCURSEL, dwActiveItem, 0); dwActiveItem = 0; hCombo = GetDlgItem(hwnd, IDC_CB_MIDDLE); dwActiveItem = MouseOverride(hCombo, PopupOptions.overrideMiddle); SendDlgItemMessage(hwnd, IDC_CB_MIDDLE, CB_SETCURSEL, dwActiveItem, 0); dwActiveItem = 0; hCombo = GetDlgItem(hwnd, IDC_CB_RIGHT); dwActiveItem = MouseOverride(hCombo, PopupOptions.overrideRight); SendDlgItemMessage(hwnd, IDC_CB_RIGHT, CB_SETCURSEL, dwActiveItem, 0); HWND hwndList = GetDlgItem(hwnd, IDC_ACTIONS); ListView_SetExtendedListViewStyleEx(hwndList, 0, LVS_EX_CHECKBOXES | LVS_EX_LABELTIP); HIMAGELIST hImgList = ImageList_Create(16, 16, ILC_MASK | ILC_COLOR32, 10, 1); ListView_SetImageList(hwndList, hImgList, LVSIL_SMALL); LVCOLUMN column = {0}; column.mask = LVCF_TEXT | LVCF_WIDTH; column.pszText = TranslateT("Action"); column.cx = 175; ListView_InsertColumn(hwndList, 0, &column); ListView_EnableGroupView(hwndList, TRUE); LIST<char> groups(1, strcmp); for (i = 0; i < gActions.getCount(); ++i) { char szGroup[64]; char *szName = strchr(gActions[i]->lpzTitle, '/'); if (!szName) szName = gActions[i]->lpzTitle; else ++szName; lstrcpynA(szGroup, gActions[i]->lpzTitle, szName - gActions[i]->lpzTitle); int grpId = 0; if ((grpId = groups.getIndex(szGroup)) < 0) { LVGROUP group = {0}; group.cbSize = sizeof(group); group.mask = LVGF_HEADER | LVGF_GROUPID; LPTSTR wszGroup = mir_a2t(szGroup); group.pszHeader = TranslateTS(wszGroup); group.cchHeader = lstrlen(wszGroup); grpId = group.iGroupId = groups.getCount(); int grpId = ListView_InsertGroup(hwndList, -1, &group); mir_free(wszGroup); groups.insert(mir_strdup(szGroup), groups.getCount()); } LVITEM item = {0}; item.mask = LVIF_IMAGE | LVIF_PARAM | LVIF_TEXT | LVIF_STATE | LVIF_INDENT; item.iItem = i; ptrT tszName(mir_a2t(szName)); item.pszText = TranslateTS(tszName); item.iImage = ImageList_AddIcon(hImgList, gActions[i]->lchIcon); item.lParam = i; item.mask |= LVIF_GROUPID; item.iGroupId = grpId; item.iIndent = 0; ListView_InsertItem(hwndList, &item); ListView_SetItemState(hwndList, i, (gActions[i]->flags & PAF_ENABLED) ? 0x2000 : 0x1000, LVIS_STATEIMAGEMASK); } BOOL enabled = (PopupOptions.actions & ACT_ENABLE) ? TRUE : FALSE; for (i = 0; i < SIZEOF(controls); ++i) EnableWindow(GetDlgItem(hwnd, controls[i]), enabled); } windowInitialized = true; break; case WM_COMMAND: switch (LOWORD(wParam)) { case IDC_CHK_ENABLEACTIONS: PopupOptions.actions &= ~ACT_ENABLE; PopupOptions.actions |= IsDlgButtonChecked(hwnd, IDC_CHK_ENABLEACTIONS) ? ACT_ENABLE : 0; SendMessage(GetParent(hwnd), PSM_CHANGED, 0, 0); { BOOL enabled = (PopupOptions.actions & ACT_ENABLE) ? TRUE : FALSE; for (i = 0; i < SIZEOF(controls); ++i) EnableWindow(GetDlgItem(hwnd, controls[i]), enabled); } break; case IDC_CHK_IMCONTACTSONLY: PopupOptions.actions &= ~ACT_DEF_IMONLY; PopupOptions.actions |= IsDlgButtonChecked(hwnd, IDC_CHK_IMCONTACTSONLY) ? ACT_DEF_IMONLY : 0; SendMessage(GetParent(hwnd), PSM_CHANGED, 0, 0); break; case IDC_CHK_CONTACTSONLY: PopupOptions.actions &= ~ACT_DEF_NOGLOBAL; PopupOptions.actions |= IsDlgButtonChecked(hwnd, IDC_CHK_CONTACTSONLY) ? ACT_DEF_NOGLOBAL : 0; SendMessage(GetParent(hwnd), PSM_CHANGED, 0, 0); break; case IDC_CHK_DONTCLOSE: PopupOptions.actions &= ~ACT_DEF_KEEPWND; PopupOptions.actions |= IsDlgButtonChecked(hwnd, IDC_CHK_DONTCLOSE) ? ACT_DEF_KEEPWND : 0; SendMessage(GetParent(hwnd), PSM_CHANGED, 0, 0); break; case IDC_CHK_LARGEICONS: PopupOptions.actions &= ~ACT_LARGE; PopupOptions.actions |= IsDlgButtonChecked(hwnd, IDC_CHK_LARGEICONS) ? ACT_LARGE : 0; SendMessage(GetParent(hwnd), PSM_CHANGED, 0, 0); break; case IDC_RD_TEXT: PopupOptions.actions &= ~(ACT_TEXT | ACT_LEFTICONS | ACT_RIGHTICONS); PopupOptions.actions |= IsDlgButtonChecked(hwnd, IDC_CHK_ENABLEACTIONS) ? ACT_TEXT : 0; SendMessage(GetParent(hwnd), PSM_CHANGED, 0, 0); break; case IDC_RD_LEFTICONS: PopupOptions.actions &= ~(ACT_TEXT | ACT_LEFTICONS | ACT_RIGHTICONS); PopupOptions.actions |= IsDlgButtonChecked(hwnd, IDC_RD_LEFTICONS) ? ACT_LEFTICONS : 0; SendMessage(GetParent(hwnd), PSM_CHANGED, 0, 0); break; case IDC_RD_RIGHTICONS: PopupOptions.actions &= ~(ACT_TEXT | ACT_LEFTICONS | ACT_RIGHTICONS); PopupOptions.actions |= IsDlgButtonChecked(hwnd, IDC_RD_RIGHTICONS) ? ACT_RIGHTICONS : 0; SendMessage(GetParent(hwnd), PSM_CHANGED, 0, 0); break; case IDC_PREVIEW: PopupPreview(); break; case IDC_CB_LEFT: case IDC_CB_MIDDLE: case IDC_CB_RIGHT: PopupOptions.overrideLeft = SendDlgItemMessage(hwnd, IDC_CB_LEFT, CB_GETITEMDATA, SendDlgItemMessage(hwnd, IDC_CB_LEFT, CB_GETCURSEL, 0, 0), 0); PopupOptions.overrideMiddle = SendDlgItemMessage(hwnd, IDC_CB_MIDDLE, CB_GETITEMDATA, SendDlgItemMessage(hwnd, IDC_CB_MIDDLE, CB_GETCURSEL, 0, 0), 0); PopupOptions.overrideRight = SendDlgItemMessage(hwnd, IDC_CB_RIGHT, CB_GETITEMDATA, SendDlgItemMessage(hwnd, IDC_CB_RIGHT, CB_GETCURSEL, 0, 0), 0); if (HIWORD(wParam) == CBN_SELCHANGE) SendMessage(GetParent(hwnd), PSM_CHANGED, 0, 0); } break; case WM_NOTIFY: switch (((LPNMHDR)lParam)->idFrom) { case 0: switch (((LPNMHDR)lParam)->code) { case PSN_RESET: LoadOption_Actions(); break; case PSN_APPLY: db_set_dw(NULL, MODULNAME, "Actions", PopupOptions.actions); HWND hwndList = GetDlgItem(hwnd, IDC_ACTIONS); for (i = 0; i < gActions.getCount(); ++i) { gActions[i]->flags = (ListView_GetItemState(hwndList, i, LVIS_STATEIMAGEMASK) == 0x2000) ? PAF_ENABLED : 0; db_set_b(NULL, "PopupActions", gActions[i]->lpzTitle, (gActions[i]->flags & PAF_ENABLED) ? 1 : 0); } //overrideActions db_set_dw(NULL, MODULNAME, "OverrideLeft", PopupOptions.overrideLeft); db_set_dw(NULL, MODULNAME, "OverrideMiddle", PopupOptions.overrideMiddle); db_set_dw(NULL, MODULNAME, "OverrideRight", PopupOptions.overrideRight); } break; case IDC_ACTIONS: NMLISTVIEW *nmlv = (NMLISTVIEW *)lParam; if (windowInitialized && nmlv && nmlv->hdr.code == LVN_ITEMCHANGED && nmlv->uOldState != 0 && (nmlv->uNewState == 0x1000 || nmlv->uNewState == 0x2000)) SendMessage(GetParent(hwnd), PSM_CHANGED, 0, 0); } } return FALSE; }