From 03dab2efa522cb0fc82051d4a8ba65f509f6b930 Mon Sep 17 00:00:00 2001 From: sje Date: Tue, 10 Jul 2007 06:05:33 +0000 Subject: added API and UI for classes git-svn-id: https://server.scottellis.com.au/svn/mim_plugs@263 4f64403b-2f21-0410-a795-97e2b3489a10 --- yapp/options.cpp | 135 +++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 126 insertions(+), 9 deletions(-) (limited to 'yapp/options.cpp') 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 #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; } -- cgit v1.2.3