summaryrefslogtreecommitdiff
path: root/yapp/options.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'yapp/options.cpp')
-rw-r--r--yapp/options.cpp135
1 files changed, 126 insertions, 9 deletions
diff --git a/yapp/options.cpp b/yapp/options.cpp
index ed77921..fa8426d 100644
--- a/yapp/options.cpp
+++ b/yapp/options.cpp
@@ -4,6 +4,7 @@
#include "popwin.h"
#include <commctrl.h>
#include "str_utils.h"
+#include "services.h"
Options options;
@@ -352,27 +353,143 @@ static BOOL CALLBACK DlgProcOpts1(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM
return 0;
}
-int OptInit(WPARAM wParam, LPARAM lParam) {
-#define OPTIONPAGE_OLD_SIZE2 60
+POPUPCLASS *newclasses = 0;
+static BOOL CALLBACK DlgProcOptsClasses(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) {
+ switch ( msg ) {
+ case WM_INITDIALOG:
+ TranslateDialogDefault( hwndDlg );
+ {
+ if(num_classes) {
+ newclasses = (POPUPCLASS *)malloc(num_classes * sizeof(POPUPCLASS));
+ memcpy(newclasses, classes, num_classes * sizeof(POPUPCLASS));
+
+ POPUPCLASS *pc;
+ int index;
+ for(int i = 0; i < num_classes; i++) {
+ pc = &newclasses[i];
+ if(pc->flags & PCF_UNICODE) {
+ index = SendDlgItemMessageW(hwndDlg, IDC_LST_CLASSES, LB_ADDSTRING, 0, (LPARAM)pc->pwszDescription);
+ } else {
+ index = SendDlgItemMessageA(hwndDlg, IDC_LST_CLASSES, LB_ADDSTRING, 0, (LPARAM)pc->pszDescription);
+ }
+ SendDlgItemMessage(hwndDlg, IDC_LST_CLASSES, LB_SETITEMDATA, index, i);
+ }
+ }
+ }
+ return FALSE;
+ case WM_COMMAND:
+ if ( LOWORD(wParam) == IDC_LST_CLASSES && HIWORD( wParam ) == LBN_SELCHANGE) {
+ int index = SendDlgItemMessage(hwndDlg, IDC_LST_CLASSES, LB_GETCURSEL, 0, 0);
+ EnableWindow(GetDlgItem(hwndDlg, IDC_BTN_PREVIEW), index != -1);
+ EnableWindow(GetDlgItem(hwndDlg, IDC_COL_TEXT), index != -1);
+ EnableWindow(GetDlgItem(hwndDlg, IDC_COL_BG), index != -1);
+ EnableWindow(GetDlgItem(hwndDlg, IDC_CHK_TIMEOUT), index != -1);
+ if(index != -1) {
+ int i = SendDlgItemMessage(hwndDlg, IDC_LST_CLASSES, LB_GETITEMDATA, index, 0);
+ SendDlgItemMessage(hwndDlg, IDC_COL_TEXT, CPM_SETCOLOUR, 0, (LPARAM)newclasses[i].colorText);
+ SendDlgItemMessage(hwndDlg, IDC_COL_BG, CPM_SETCOLOUR, 0, (LPARAM)newclasses[i].colorBack);
+ CheckDlgButton(hwndDlg, IDC_CHK_TIMEOUT, newclasses[i].iSeconds != -1);
+ SetDlgItemInt(hwndDlg, IDC_ED_TIMEOUT, newclasses[i].iSeconds, TRUE);
+ }
+ EnableWindow(GetDlgItem(hwndDlg, IDC_ED_TIMEOUT), index != -1 && IsDlgButtonChecked(hwndDlg, IDC_CHK_TIMEOUT));
+ return TRUE;
+ } else if ( HIWORD( wParam ) == EN_CHANGE && ( HWND )lParam == GetFocus()) {
+ int index = SendDlgItemMessage(hwndDlg, IDC_LST_CLASSES, LB_GETCURSEL, 0, 0);
+ if(index != -1) {
+ int i = SendDlgItemMessage(hwndDlg, IDC_LST_CLASSES, LB_GETITEMDATA, index, 0);
+ BOOL tr;
+ int t = GetDlgItemInt(hwndDlg, IDC_ED_TIMEOUT, &tr, FALSE);
+ newclasses[i].iSeconds = t;
+
+ SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
+ }
+ } else {
+ int index = SendDlgItemMessage(hwndDlg, IDC_LST_CLASSES, LB_GETCURSEL, 0, 0);
+ if(index != -1) {
+ int i = SendDlgItemMessage(hwndDlg, IDC_LST_CLASSES, LB_GETITEMDATA, index, 0);
+ switch(LOWORD(wParam)) {
+ case IDC_CHK_TIMEOUT:
+ {
+ BOOL isChecked = IsDlgButtonChecked(hwndDlg, IDC_CHK_TIMEOUT);
+ EnableWindow(GetDlgItem(hwndDlg, IDC_ED_TIMEOUT), isChecked);
+ if(isChecked) newclasses[i].iSeconds = 0;
+ else newclasses[i].iSeconds = -1;
+ SetDlgItemInt(hwndDlg, IDC_ED_TIMEOUT, newclasses[i].iSeconds, TRUE);
+ }
+ SendMessage( GetParent( hwndDlg ), PSM_CHANGED, 0, 0 );
+ break;
+ case IDC_COL_TEXT:
+ newclasses[i].colorText = SendDlgItemMessage(hwndDlg, IDC_COL_TEXT, CPM_GETCOLOUR, 0, 0);
+ SendMessage( GetParent( hwndDlg ), PSM_CHANGED, 0, 0 );
+ break;
+ case IDC_COL_BG:
+ newclasses[i].colorBack = SendDlgItemMessage(hwndDlg, IDC_COL_BG, CPM_GETCOLOUR, 0, 0);
+ SendMessage( GetParent( hwndDlg ), PSM_CHANGED, 0, 0 );
+ break;
+ case IDC_BTN_PREVIEW:
+ if(newclasses[i].flags & PCF_UNICODE) {
+ POPUPCLASS pc = newclasses[i];
+ pc.PluginWindowProc = 0;
+ POPUPDATACLASS d = {sizeof(d), pc.pszName};
+ d.pwszTitle = L"Preview";
+ d.pwszText = L"The quick brown fox jumps over the lazy dog.";
+ CallService(MS_POPUP_ADDPOPUPCLASS, (WPARAM)&pc, (LPARAM)&d);
+ } else {
+ POPUPCLASS pc = newclasses[i];
+ pc.PluginWindowProc = 0;
+ POPUPDATACLASS d = {sizeof(d), pc.pszName};
+ d.pszTitle = "Preview";
+ d.pszText = "The quick brown fox jumps over the lazy dog.";
+ CallService(MS_POPUP_ADDPOPUPCLASS, (WPARAM)&pc, (LPARAM)&d);
+ }
+ break;
+ }
+ }
+ }
+ break;
+ case WM_NOTIFY:
+ if (((LPNMHDR)lParam)->code == (unsigned)PSN_APPLY ) {
+ memcpy(classes, newclasses, num_classes * sizeof(POPUPCLASS));
+ char setting[256];
+ for(int i = 0; i < num_classes; i++) {
+ mir_snprintf(setting, 256, "%s/Timeout", classes[i].pszName);
+ DBWriteContactSettingWord(0, MODULE, setting, classes[i].iSeconds);
+ mir_snprintf(setting, 256, "%s/TextCol", classes[i].pszName);
+ DBWriteContactSettingDword(0, MODULE, setting, (DWORD)classes[i].colorText);
+ mir_snprintf(setting, 256, "%s/BgCol", classes[i].pszName);
+ DBWriteContactSettingDword(0, MODULE, setting, (DWORD)classes[i].colorBack);
+ }
+ return TRUE;
+ }
+ break;
+ case WM_DESTROY:
+ if(newclasses) free(newclasses);
+ break;
+ }
+ return 0;
+}
+int OptInit(WPARAM wParam, LPARAM lParam) {
OPTIONSDIALOGPAGE odp = { 0 };
- //odp.cbSize = sizeof(odp);
- odp.cbSize = OPTIONPAGE_OLD_SIZE2;
+ odp.cbSize = sizeof(odp);
odp.flags = ODPF_BOLDGROUPS;
//odp.flags |= ODPF_UNICODE;
odp.position = -790000000;
odp.hInstance = hInst;
+ odp.pszTitle = Translate("PopUps");
odp.pszTemplate = MAKEINTRESOURCEA(IDD_OPT1);
- odp.pszTitle = Translate("PopUps");
- //odp.pszTitle = Translate("General");
- //odp.pszGroup = Translate("PopUps");
- //odp.ptszTitle = TranslateT("Updater");
- //odp.ptszGroup = TranslateT("Plugins");
+ odp.pszTab = Translate("Settings");
odp.nIDBottomSimpleControl = 0;
odp.pfnDlgProc = DlgProcOpts1;
CallService( MS_OPT_ADDPAGE, wParam,( LPARAM )&odp );
+ odp.pszTemplate = MAKEINTRESOURCEA(IDD_CLASSES);
+ odp.pszTab = Translate("Classes");
+ odp.nIDBottomSimpleControl = 0;
+ odp.pfnDlgProc = DlgProcOptsClasses;
+ CallService( MS_OPT_ADDPAGE, wParam,( LPARAM )&odp );
+
return 0;
}