summaryrefslogtreecommitdiff
path: root/protocols/Tlen/tlen_czaty/src/Options.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'protocols/Tlen/tlen_czaty/src/Options.cpp')
-rw-r--r--protocols/Tlen/tlen_czaty/src/Options.cpp789
1 files changed, 789 insertions, 0 deletions
diff --git a/protocols/Tlen/tlen_czaty/src/Options.cpp b/protocols/Tlen/tlen_czaty/src/Options.cpp
new file mode 100644
index 0000000000..0ab39dd9b0
--- /dev/null
+++ b/protocols/Tlen/tlen_czaty/src/Options.cpp
@@ -0,0 +1,789 @@
+/*
+
+MUCC Group Chat GUI Plugin for Miranda NG
+Copyright (C) 2004 Piotr Piastucki
+
+This program is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 2
+of the License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+*/
+
+#include "mucc.h"
+#include "Options.h"
+#include "ChatWindow.h"
+#include "Utils.h"
+#include "resource.h"
+#include <commctrl.h>
+#include "m_ieview.h"
+
+static INT_PTR CALLBACK MUCCOptDlgProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam);
+//static INT_PTR CALLBACK MUCCLogOptDlgProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam);
+//static INT_PTR CALLBACK MUCCPopupsDlgProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam);
+
+
+COLORREF Options::colorListBg, Options::colorInputBg, Options::colorLogBg, Options::chatWindowFontColor;
+HBRUSH Options::brushListBg=NULL, Options::brushInputBg=NULL, Options::brushLogBg=NULL;
+int Options::logLimit, Options::chatWindowOptions, Options::chatContainerOptions;
+int Options::chatWindowFont, Options::chatWindowFontSize, Options::chatWindowFontStyle;
+
+void Options::setListBgColor(COLORREF c) {
+ colorListBg = c;
+ if (brushListBg != NULL) {
+ DeleteObject(brushListBg);
+ }
+ brushListBg = CreateSolidBrush(colorListBg);
+}
+
+void Options::setInputBgColor(COLORREF c) {
+ colorInputBg = c;
+ if (brushInputBg != NULL) {
+ DeleteObject(brushInputBg);
+ }
+ brushInputBg = CreateSolidBrush(colorInputBg);
+}
+
+void Options::setLogBgColor(COLORREF c) {
+ colorLogBg = c;
+ if (brushLogBg != NULL) {
+ DeleteObject(brushLogBg);
+ }
+ brushLogBg = CreateSolidBrush(colorLogBg);
+}
+
+COLORREF Options::getListBgColor() {
+ return colorListBg;
+}
+
+COLORREF Options::getInputBgColor() {
+ return colorInputBg;
+}
+
+COLORREF Options::getLogBgColor() {
+ return colorLogBg;
+}
+
+HBRUSH Options::getListBgBrush() {
+ return brushListBg;
+}
+
+HBRUSH Options::getInputBgBrush() {
+ return brushInputBg;
+}
+
+HBRUSH Options::getLogBgBrush() {
+ return brushLogBg;
+}
+
+void Options::setLogLimit(int l) {
+ logLimit = l;
+}
+
+int Options::getLogLimit() {
+ return logLimit;
+}
+
+void Options::setChatWindowFont(int o) {
+ chatWindowFont = o;
+}
+
+int Options::getChatWindowFont() {
+ return chatWindowFont;
+}
+
+void Options::setChatWindowFontSize(int o) {
+ chatWindowFontSize = o;
+}
+
+int Options::getChatWindowFontSize() {
+ return chatWindowFontSize;
+}
+
+void Options::setChatWindowFontStyle(int o) {
+ chatWindowFontStyle = o;
+}
+
+int Options::getChatWindowFontStyle() {
+ return chatWindowFontStyle;
+}
+
+void Options::setChatWindowFontColor(COLORREF o) {
+ chatWindowFontColor = o;
+}
+
+COLORREF Options::getChatWindowFontColor() {
+ return chatWindowFontColor;
+}
+
+void Options::setChatWindowOptions(int o) {
+ chatWindowOptions = o;
+}
+
+int Options::getChatWindowOptions() {
+ return chatWindowOptions;
+}
+
+void Options::setChatContainerOptions(int o) {
+ chatContainerOptions = o;
+}
+
+int Options::getChatContainerOptions() {
+ return chatContainerOptions;
+}
+
+void Options::setExpandFlags(int o) {
+ DBWriteContactSettingDword(NULL, muccModuleName, "ExpandFlags", o);
+}
+
+int Options::getExpandFlags() {
+ return DBGetContactSettingDword(NULL, muccModuleName, "ExpandFlags", 0xFFFFFFFF);
+}
+
+void Options::loadSettings() {
+ FontList::loadSettings();
+ setLogBgColor((COLORREF)DBGetContactSettingDword(NULL, muccModuleName, "BackgroundLog", 0xFFFFFF));
+ setListBgColor((COLORREF)DBGetContactSettingDword(NULL, muccModuleName, "BackgroundList", 0xFFFFFF));
+ setInputBgColor((COLORREF)DBGetContactSettingDword(NULL, muccModuleName, "BackgroundTyping", 0xFFFFFF));
+ setLogLimit(DBGetContactSettingDword(NULL, muccModuleName, "LogSizeLimit", 100));
+ setChatContainerOptions(DBGetContactSettingDword(NULL, muccModuleName, "ChatContainerOptions", ChatContainer::getDefaultOptions()));
+ setChatWindowOptions(DBGetContactSettingDword(NULL, muccModuleName, "ChatWindowOptions", ChatWindow::getDefaultOptions()));
+ setChatWindowFont(DBGetContactSettingDword(NULL, muccModuleName, "ChatWindowFont", 0));
+ setChatWindowFontSize(DBGetContactSettingDword(NULL, muccModuleName, "ChatWindowFontSize", 5));
+ setChatWindowFontStyle(DBGetContactSettingDword(NULL, muccModuleName, "ChatWindowFontStyle", 0));
+ setChatWindowFontColor(DBGetContactSettingDword(NULL, muccModuleName, "ChatWindowFontColor", 0));
+}
+
+void Options::saveSettings() {
+ FontList::saveSettings();
+ DBWriteContactSettingDword(NULL, muccModuleName, "BackgroundLog", colorLogBg);
+ DBWriteContactSettingDword(NULL, muccModuleName, "BackgroundList", colorListBg);
+ DBWriteContactSettingDword(NULL, muccModuleName, "BackgroundTyping", colorInputBg);
+ DBWriteContactSettingDword(NULL, muccModuleName, "LogSizeLimit", logLimit);
+ DBWriteContactSettingDword(NULL, muccModuleName, "ChatContainerOptions", chatContainerOptions);
+ DBWriteContactSettingDword(NULL, muccModuleName, "ChatWindowOptions", chatWindowOptions);
+ DBWriteContactSettingDword(NULL, muccModuleName, "ChatWindowFont", chatWindowFont);
+ DBWriteContactSettingDword(NULL, muccModuleName, "ChatWindowFontSize", chatWindowFontSize);
+ DBWriteContactSettingDword(NULL, muccModuleName, "ChatWindowFontStyle", chatWindowFontStyle);
+ DBWriteContactSettingDword(NULL, muccModuleName, "ChatWindowFontColor", chatWindowFontColor);
+}
+
+void Options::init()
+{
+ FontList::init();
+ loadSettings();
+}
+
+int MUCCOptInit(WPARAM wParam, LPARAM lParam)
+{
+ OPTIONSDIALOGPAGE odp;
+
+ ZeroMemory(&odp, sizeof(odp));
+ odp.cbSize = sizeof(odp);
+ odp.position = 0;
+ odp.hInstance = hInst;
+ odp.pszGroup = LPGEN("Network");
+ odp.pszTemplate = MAKEINTRESOURCEA(IDD_OPTIONS);
+// odp.pszTitle = muccModuleName;
+ odp.pszTitle = LPGEN("Tlen czaty");
+ odp.flags = ODPF_BOLDGROUPS;
+ odp.pfnDlgProc = MUCCOptDlgProc;
+ odp.nIDBottomSimpleControl = 0;
+ Options_AddPage(wParam, &odp);
+
+ /*
+ odp.pszTemplate = MAKEINTRESOURCE(IDD_OPTIONS_LOG);
+ _snprintf(str, sizeof(str), "%s %s", muccModuleName, Translate("Log"));
+ str[sizeof(str)-1] = '\0';
+ odp.pszTitle = str;
+ odp.pfnDlgProc = MUCCLLogOptDlgProc;
+ odp.flags = ODPF_BOLDGROUPS|ODPF_EXPERTONLY;
+ odp.nIDBottomSimpleControl = 0;
+ Options_AddPage(wParam, &odp);
+ if (ServiceExists(MS_POPUP_ADDPOPUP)) {
+ ZeroMemory(&odp,sizeof(odp));
+ odp.cbSize = sizeof(odp);
+ odp.position = 100000000;
+ odp.hInstance = hInst;
+ odp.pszGroup = LPGEN("PopUps");
+ odp.pszTemplate = MAKEINTRESOURCE(IDD_OPTIONS_POPUPS);
+ odp.pszTitle = jabberModuleName;
+ odp.flags=ODPF_BOLDGROUPS;
+ odp.pfnDlgProc = TlenPopupsDlgProc;
+ odp.nIDBottomSimpleControl = 0;
+ Options_AddPage(wParam, &odp);
+ }
+
+*/
+ return 0;
+}
+
+
+static int getOptions(HWND hTreeControl, HTREEITEM hItem, int flags) {
+ TVITEM tvi = {0};
+ tvi.mask = TVIF_HANDLE | TVIF_STATE | TVIF_PARAM;
+ tvi.stateMask = TVIS_STATEIMAGEMASK;
+ tvi.hItem = hItem;
+ TreeView_GetItem(hTreeControl, &tvi);
+ if ((tvi.state>>12) == 2) {
+ flags |= tvi.lParam;
+ } else {
+ flags &= ~tvi.lParam;
+ }
+ tvi.hItem = TreeView_GetChild(hTreeControl, hItem);
+ if (tvi.hItem != NULL) {
+ flags = getOptions(hTreeControl, tvi.hItem, flags);
+ }
+ tvi.hItem=TreeView_GetNextSibling(hTreeControl, hItem);
+ if (tvi.hItem != NULL) {
+ flags = getOptions(hTreeControl, tvi.hItem, flags);
+ }
+ return flags;
+
+}
+
+static int getExpandFlags(HWND hTreeControl) {
+ TVITEM tvi = {0};
+ int flags =0, mask = 1;
+ tvi.mask = TVIF_HANDLE | TVIF_STATE;
+ tvi.stateMask = TVIS_EXPANDED;
+ tvi.hItem = TreeView_GetRoot(hTreeControl);
+ while (tvi.hItem != NULL) {
+ TreeView_GetItem(hTreeControl, &tvi);
+ if (tvi.state & TVIS_EXPANDED) {
+ flags |= mask;
+ }
+ mask <<= 1;
+ tvi.hItem=TreeView_GetNextSibling(hTreeControl, tvi.hItem);
+ }
+ return flags;
+}
+
+
+static int addOption(HWND hTreeControl, HTREEITEM hParent, const char *text, int flag) {
+ TVINSERTSTRUCT tvis;
+ tvis.hInsertAfter = TVI_LAST;
+ tvis.hParent = hParent;
+ tvis.item.mask = TVIF_TEXT | TVIF_STATE | TVIF_PARAM;
+ char* textA = Translate(text);
+ LPTSTR textT = Utils::mucc_mir_a2t(textA);
+ tvis.item.pszText = textT;
+ tvis.item.lParam = flag;
+ tvis.item.stateMask = TVIS_STATEIMAGEMASK;
+ tvis.item.state = Options::getChatWindowOptions() & flag ? INDEXTOSTATEIMAGEMASK(2) : INDEXTOSTATEIMAGEMASK(1);
+ TreeView_InsertItem(hTreeControl, &tvis);
+ Utils::mucc_mir_free(textT);
+ return (Options::getChatWindowOptions() & flag) != 0;
+
+}
+
+static INT_PTR CALLBACK MUCCOptDlgProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
+{
+ int i;
+ char *pszText;
+ switch (msg) {
+ case WM_INITDIALOG:
+ {
+ TVINSERTSTRUCT tvis;
+ TVITEM tvi;
+ HWND hTreeControl;
+ HTREEITEM hItem;
+ int bCheckParent, expandFlags;
+
+ TranslateDialogDefault(hwndDlg);
+ Options::loadSettings();
+ for (i=0;i<Options::getFontNum();i++) {
+ SendDlgItemMessage(hwndDlg, IDC_FONTLIST, LB_ADDSTRING, 0, i + 1);
+ }
+
+ SendDlgItemMessage(hwndDlg, IDC_FONTLIST, LB_SETSEL, TRUE, 0);
+ SendDlgItemMessage(hwndDlg, IDC_COLORTXT, CPM_SETCOLOUR, 0, Options::getFontSettings(0)->getColor());
+ SendDlgItemMessage(hwndDlg, IDC_COLORBKG, CPM_SETCOLOUR, 0, Options::getLogBgColor());
+ SendDlgItemMessage(hwndDlg, IDC_COLORLIST, CPM_SETCOLOUR, 0, Options::getListBgColor());
+ SendDlgItemMessage(hwndDlg, IDC_COLORINPUT, CPM_SETCOLOUR, 0, Options::getInputBgColor());
+ SendDlgItemMessage(hwndDlg, IDC_LOGLIMITSPIN, UDM_SETRANGE, 0, MAKELONG(1000,20));
+ SendDlgItemMessage(hwndDlg, IDC_LOGLIMITSPIN, UDM_SETPOS, 0, MAKELONG(Options::getLogLimit(), 0));
+
+ SetWindowLong(GetDlgItem(hwndDlg,IDC_TREELIST),GWL_STYLE,GetWindowLong(GetDlgItem(hwndDlg,IDC_TREELIST),GWL_STYLE)|TVS_NOHSCROLL|TVS_CHECKBOXES);
+
+
+ hTreeControl = GetDlgItem(hwndDlg, IDC_TREELIST);
+ expandFlags = Options::getExpandFlags();
+ tvis.hInsertAfter = TVI_LAST;
+ tvis.item.mask = TVIF_TEXT | TVIF_PARAM;
+ tvis.hParent = NULL;
+ tvis.item.lParam = 0;
+
+ tvi.mask = TVIF_HANDLE | TVIF_STATE;
+ tvi.stateMask = TVIS_STATEIMAGEMASK;
+
+ tvis.item.pszText = TranslateT("Default Log Appearence");
+ hItem = TreeView_InsertItem(hTreeControl, &tvis);
+ bCheckParent = 1;
+ bCheckParent &= addOption(hTreeControl, hItem, "Show nicknames", ChatWindow::FLAG_SHOW_NICKNAMES);
+ bCheckParent &= addOption(hTreeControl, hItem, "Show message on a new line", ChatWindow::FLAG_MSGINNEWLINE);
+ tvi.state = (bCheckParent ? INDEXTOSTATEIMAGEMASK(2) : INDEXTOSTATEIMAGEMASK(1));
+ tvi.hItem = hItem;
+ TreeView_SetItem(hTreeControl, &tvi);
+ if (expandFlags & 1) {
+ TreeView_Expand(hTreeControl, hItem, TVE_EXPAND);
+ }
+
+ tvis.item.pszText = TranslateT("Default Timestamp Settings");
+ hItem = TreeView_InsertItem(hTreeControl, &tvis);
+ bCheckParent = 1;
+ bCheckParent &= addOption(hTreeControl, hItem, "Show date", ChatWindow::FLAG_SHOW_DATE);
+ bCheckParent &= addOption(hTreeControl, hItem, "Show timestamp", ChatWindow::FLAG_SHOW_TIMESTAMP);
+ bCheckParent &= addOption(hTreeControl, hItem, "Show seconds", ChatWindow::FLAG_SHOW_SECONDS);
+ bCheckParent &= addOption(hTreeControl, hItem, "Use long date format", ChatWindow::FLAG_LONG_DATE);
+ tvi.state = (bCheckParent ? INDEXTOSTATEIMAGEMASK(2) : INDEXTOSTATEIMAGEMASK(1));
+ tvi.hItem = hItem;
+ TreeView_SetItem(hTreeControl, &tvi);
+ if (expandFlags & 2) {
+ TreeView_Expand(hTreeControl, hItem, TVE_EXPAND);
+ }
+
+ tvis.item.pszText = TranslateT("Default Text Formatting Filter");
+ hItem = TreeView_InsertItem(hTreeControl, &tvis);
+ bCheckParent = 1;
+ bCheckParent &= addOption(hTreeControl, hItem, "Font name", ChatWindow::FLAG_FORMAT_FONT);
+ bCheckParent &= addOption(hTreeControl, hItem, "Font size", ChatWindow::FLAG_FORMAT_SIZE);
+ bCheckParent &= addOption(hTreeControl, hItem, "Font style", ChatWindow::FLAG_FORMAT_STYLE);
+ bCheckParent &= addOption(hTreeControl, hItem, "Font color", ChatWindow::FLAG_FORMAT_COLOR);
+ tvi.state = (bCheckParent ? INDEXTOSTATEIMAGEMASK(2) : INDEXTOSTATEIMAGEMASK(1));
+ tvi.hItem = hItem;
+ TreeView_SetItem(hTreeControl, &tvi);
+ if (expandFlags & 4) {
+ TreeView_Expand(hTreeControl, hItem, TVE_EXPAND);
+ }
+
+ tvis.item.pszText = TranslateT("Default Event Filter");
+ hItem = TreeView_InsertItem(hTreeControl, &tvis);
+ bCheckParent = 1;
+ bCheckParent &= addOption(hTreeControl, hItem, "Messages", ChatWindow::FLAG_LOG_MESSAGES);
+ bCheckParent &= addOption(hTreeControl, hItem, "User has joined", ChatWindow::FLAG_LOG_JOINED);
+ bCheckParent &= addOption(hTreeControl, hItem, "User has left", ChatWindow::FLAG_LOG_LEFT);
+ bCheckParent &= addOption(hTreeControl, hItem, "Topic changes", ChatWindow::FLAG_LOG_TOPIC);
+ tvi.state = (bCheckParent ? INDEXTOSTATEIMAGEMASK(2) : INDEXTOSTATEIMAGEMASK(1));
+ tvi.hItem = hItem;
+ TreeView_SetItem(hTreeControl, &tvi);
+ if (expandFlags & 8) {
+ TreeView_Expand(hTreeControl, hItem, TVE_EXPAND);
+ }
+
+ tvis.item.pszText = TranslateT("Default Window Flashing");
+ hItem = TreeView_InsertItem(hTreeControl, &tvis);
+ bCheckParent = 1;
+ bCheckParent &= addOption(hTreeControl, hItem, "Messages", ChatWindow::FLAG_FLASH_MESSAGES);
+ bCheckParent &= addOption(hTreeControl, hItem, "User has joined", ChatWindow::FLAG_FLASH_JOINED);
+ bCheckParent &= addOption(hTreeControl, hItem, "User has left", ChatWindow::FLAG_FLASH_LEFT);
+ bCheckParent &= addOption(hTreeControl, hItem, "Topic changes", ChatWindow::FLAG_FLASH_TOPIC);
+ tvi.state = (bCheckParent ? INDEXTOSTATEIMAGEMASK(2) : INDEXTOSTATEIMAGEMASK(1));
+ tvi.hItem = hItem;
+ TreeView_SetItem(hTreeControl, &tvi);
+ if (expandFlags & 16) {
+ TreeView_Expand(hTreeControl, hItem, TVE_EXPAND);
+ }
+
+ CheckDlgButton(hwndDlg, IDC_SENDONENTER, Options::getChatWindowOptions() & ChatWindow::FLAG_OPT_SENDONENTER);
+ CheckDlgButton(hwndDlg, IDC_ENABLEIEVIEW, Options::getChatWindowOptions() & ChatWindow::FLAG_OPT_ENABLEIEVIEW);
+ if (!ServiceExists(MS_IEVIEW_WINDOW)) {
+ EnableWindow(GetDlgItem(hwndDlg, IDC_ENABLEIEVIEW), FALSE);
+ }
+ CheckDlgButton(hwndDlg, IDC_USETABS, Options::getChatContainerOptions() & ChatContainer::FLAG_USE_TABS);
+
+ }
+ case WM_MEASUREITEM:
+ if (wParam == IDC_FONTLIST) {
+ MEASUREITEMSTRUCT *lpMis = (MEASUREITEMSTRUCT *) lParam;
+ HFONT hFont, hoFont;
+ HDC hDC;
+ SIZE fontSize;
+ int iItem = lpMis->itemData - 1;
+ Font *font = Options::getFontSettings(iItem);
+ if (font != NULL) {
+
+ LPTSTR lps1 = Utils::mucc_mir_a2t(font->getFace());
+ hFont = CreateFont(font->getSize(), 0, 0, 0,
+ font->getStyle() & Font::BOLD ? FW_BOLD : FW_NORMAL,
+ font->getStyle() & Font::ITALIC ? 1 : 0, 0, 0,
+ font->getCharSet(),
+ OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, lps1);
+ Utils::mucc_mir_free(lps1);
+
+ hDC = GetDC(GetDlgItem(hwndDlg, lpMis->CtlID));
+ hoFont = (HFONT) SelectObject(hDC, hFont);
+ pszText = Translate(Options::getFontSettings(iItem)->getName());
+ LPTSTR pszTextT1 = Utils::mucc_mir_a2t(pszText);
+ GetTextExtentPoint32(hDC, pszTextT1, lstrlen(pszTextT1), &fontSize);
+ Utils::mucc_mir_free(pszTextT1);
+ SelectObject(hDC, hoFont);
+ ReleaseDC(GetDlgItem(hwndDlg, lpMis->CtlID), hDC);
+ DeleteObject(hFont);
+ lpMis->itemWidth = fontSize.cx;
+ lpMis->itemHeight = fontSize.cy;
+ return TRUE;
+ }
+ break;
+ }
+ case WM_DRAWITEM:
+ if (wParam == IDC_FONTLIST) {
+ DRAWITEMSTRUCT *lpDis = (DRAWITEMSTRUCT *) lParam;
+ HFONT hFont;
+ HBRUSH hBrush;
+ int iItem = lpDis->itemData - 1;
+ Font *font = Options::getFontSettings(iItem);
+ if (font != NULL) {
+ COLORREF color = (COLORREF) SendDlgItemMessage(hwndDlg, IDC_COLORBKG, CPM_GETCOLOUR, 0, 0);
+ if (iItem == Options::FONT_USERLIST || iItem == Options::FONT_USERLISTGROUP) {
+ color = (COLORREF) SendDlgItemMessage(hwndDlg, IDC_COLORLIST, CPM_GETCOLOUR, 0, 0);
+ } else if (iItem == Options::FONT_TYPING) {
+ color = (COLORREF) SendDlgItemMessage(hwndDlg, IDC_COLORINPUT, CPM_GETCOLOUR, 0, 0);
+ }
+ hBrush = CreateSolidBrush(color);
+
+ LPTSTR lps2 = Utils::mucc_mir_a2t(font->getFace());
+ hFont = CreateFont(font->getSize(), 0, 0, 0,
+ font->getStyle() & Font::BOLD ? FW_BOLD : FW_NORMAL,
+ font->getStyle() & Font::ITALIC ? 1 : 0,
+ font->getStyle() & Font::UNDERLINE ? 1 : 0, 0,
+ font->getCharSet(),
+ OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE,
+ lps2);
+ Utils::mucc_mir_free(lps2);
+
+ hFont = (HFONT) SelectObject(lpDis->hDC, hFont);
+ SetBkMode(lpDis->hDC, TRANSPARENT);
+ FillRect(lpDis->hDC, &lpDis->rcItem, hBrush);
+ if (lpDis->itemState & ODS_SELECTED) {
+ FrameRect(lpDis->hDC, &lpDis->rcItem, GetSysColorBrush(COLOR_HIGHLIGHT));
+ }
+ SetTextColor(lpDis->hDC, font->getColor());
+ pszText = Translate(font->getName());
+ LPTSTR pszTextT2 = Utils::mucc_mir_a2t(pszText);
+ TextOut(lpDis->hDC, lpDis->rcItem.left, lpDis->rcItem.top, pszTextT2, lstrlen(pszTextT2));
+ Utils::mucc_mir_free(pszTextT2);
+ hFont = (HFONT) SelectObject(lpDis->hDC, hFont);
+ DeleteObject(hBrush);
+ DeleteObject(hFont);
+ }
+ return TRUE;
+ }
+ case WM_COMMAND:
+ switch (LOWORD(wParam)) {
+ case IDC_COLORTXT:
+ {
+ int totalCount = SendDlgItemMessage(hwndDlg, IDC_FONTLIST, LB_GETCOUNT, 0, 0);
+ int *selItems= new int[totalCount];
+ int selCount = SendDlgItemMessage(hwndDlg, IDC_FONTLIST, LB_GETSELITEMS, totalCount, (LPARAM) selItems);
+ COLORREF color = (COLORREF) SendDlgItemMessage(hwndDlg, IDC_COLORTXT, CPM_GETCOLOUR, 0, 0);
+ for (int i=0; i<selCount; i++) {
+ int iItem = SendDlgItemMessage(hwndDlg, IDC_FONTLIST, LB_GETITEMDATA, selItems[i], 0) - 1;
+ Font *font = Options::getFontSettings(iItem);
+ if (font != NULL) {
+ font->setColor(color);
+ }
+ }
+ delete selItems;
+ InvalidateRect(GetDlgItem(hwndDlg, IDC_FONTLIST), NULL, FALSE);
+ SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
+ break;
+ }
+ break;
+ case IDC_LOGLIMIT:
+ if (HIWORD(wParam) == EN_CHANGE && (HWND)lParam == GetFocus()) {
+ i = GetDlgItemInt(hwndDlg, IDC_LOGLIMIT, NULL, FALSE);
+ // if (i>1000) {
+ // i = 1000;
+ // SetDlgItemInt(hwndDlg, IDC_LOGLIMIT, i, FALSE);
+ // }
+ if (i != Options::getLogLimit()) {
+ SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
+ }
+ }
+ break;
+ case IDC_COLORBKG:
+ case IDC_COLORLIST:
+ case IDC_COLORINPUT:
+ InvalidateRect(GetDlgItem(hwndDlg, IDC_FONTLIST), NULL, FALSE);
+ case IDC_SENDONENTER:
+ case IDC_USETABS:
+ case IDC_ENABLEIEVIEW:
+ SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
+ break;
+ case IDC_FONTLIST:
+ if (HIWORD(wParam) == LBN_SELCHANGE) {
+ if (SendDlgItemMessage(hwndDlg, IDC_FONTLIST, LB_GETSELCOUNT, 0, 0) > 1) {
+ SendDlgItemMessage(hwndDlg, IDC_COLORTXT, CPM_SETCOLOUR, 0, GetSysColor(COLOR_3DFACE));
+ SendDlgItemMessage(hwndDlg, IDC_COLORTXT, CPM_SETDEFAULTCOLOUR, 0, GetSysColor(COLOR_WINDOWTEXT));
+ }
+ else {
+ int iItem = SendDlgItemMessage(hwndDlg, IDC_FONTLIST, LB_GETITEMDATA,
+ SendDlgItemMessage(hwndDlg, IDC_FONTLIST, LB_GETCURSEL, 0, 0), 0) - 1;
+ Font *font = Options::getFontSettings(iItem);
+ if (font != NULL) {
+ SendDlgItemMessage(hwndDlg, IDC_COLORTXT, CPM_SETCOLOUR, 0, font->getColor());
+ SendDlgItemMessage(hwndDlg, IDC_COLORTXT, CPM_SETDEFAULTCOLOUR, 0, font->getColor());
+ }
+ }
+ }
+ if (HIWORD(wParam) != LBN_DBLCLK) {
+ return TRUE;
+ }
+ case IDC_CHOOSEFONT:
+ {
+ CHOOSEFONT cf;
+ LOGFONT lf;
+ int iItem = SendDlgItemMessage(hwndDlg, IDC_FONTLIST, LB_GETITEMDATA, SendDlgItemMessage(hwndDlg, IDC_FONTLIST, LB_GETCURSEL, 0, 0), 0) - 1;
+ ZeroMemory(&cf, sizeof(cf));
+ ZeroMemory(&lf, sizeof(lf));
+ Font *font = Options::getFontSettings(iItem);
+ if (font != NULL) {
+ lf.lfHeight = font->getSize();
+ lf.lfWeight = font->getStyle() & Font::BOLD ? FW_BOLD : FW_NORMAL;
+ lf.lfItalic = font->getStyle() & Font::ITALIC ? 1 : 0;
+ lf.lfCharSet = DEFAULT_CHARSET;
+ lf.lfOutPrecision = OUT_DEFAULT_PRECIS;
+ lf.lfClipPrecision = CLIP_DEFAULT_PRECIS;
+ lf.lfQuality = DEFAULT_QUALITY;
+ lf.lfPitchAndFamily = DEFAULT_PITCH | FF_DONTCARE;
+ LPTSTR lps3 = Utils::mucc_mir_a2t(font->getFace());
+ lstrcpy(lf.lfFaceName, lps3);
+ Utils::mucc_mir_free(lps3);
+ cf.lStructSize = sizeof(cf);
+ cf.hwndOwner = hwndDlg;
+ cf.lpLogFont = &lf;
+ cf.Flags = CF_FORCEFONTEXIST | CF_INITTOLOGFONTSTRUCT | CF_SCREENFONTS;
+ if (ChooseFont(&cf)) {
+ int totalCount = SendDlgItemMessage(hwndDlg, IDC_FONTLIST, LB_GETCOUNT, 0, 0);
+ int *selItems= new int[totalCount];
+ int selCount = SendDlgItemMessage(hwndDlg, IDC_FONTLIST, LB_GETSELITEMS, totalCount, (LPARAM) selItems);
+ for (int i=0; i<selCount; i++) {
+ int iItem = SendDlgItemMessage(hwndDlg, IDC_FONTLIST, LB_GETITEMDATA, selItems[i], 0) - 1;
+ Font *font2 = Options::getFontSettings(iItem);
+ if (font2 != NULL) {
+ font2->setStyle((lf.lfWeight >= FW_BOLD ? Font::BOLD : 0) | (lf.lfItalic ? Font::ITALIC : 0));
+ font2->setCharSet(lf.lfCharSet);
+ font2->setSize(lf.lfHeight);
+ char* lps4 = Utils::mucc_mir_t2a(lf.lfFaceName);
+ font2->setFace(lps4);
+ Utils::mucc_mir_free(lps4);
+ MEASUREITEMSTRUCT mis;
+ ZeroMemory(&mis, sizeof(mis));
+ mis.CtlID = IDC_FONTLIST;
+ mis.itemData = iItem + 1;
+ SendMessage(hwndDlg, WM_MEASUREITEM, (WPARAM)IDC_FONTLIST, (LPARAM) & mis);
+ SendDlgItemMessage(hwndDlg, IDC_FONTLIST, LB_SETITEMHEIGHT, selItems[i], mis.itemHeight);
+ }
+ }
+ delete selItems;
+ InvalidateRect(GetDlgItem(hwndDlg, IDC_FONTLIST), NULL, TRUE);
+ SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
+ break;
+ }
+ }
+ return TRUE;
+ }
+ break;
+ }
+ break;
+ case WM_DESTROY:
+ Options::setExpandFlags(getExpandFlags(GetDlgItem(hwndDlg, IDC_TREELIST)));
+ break;
+ case WM_NOTIFY:
+ {
+ switch (((LPNMHDR) lParam)->code) {
+ case PSN_APPLY:
+ COLORREF color;
+ color = (COLORREF) SendDlgItemMessage(hwndDlg, IDC_COLORLIST, CPM_GETCOLOUR, 0, 0);
+ Options::setListBgColor(color);
+ color = (COLORREF) SendDlgItemMessage(hwndDlg, IDC_COLORINPUT, CPM_GETCOLOUR, 0, 0);
+ Options::setInputBgColor(color);
+ color = (COLORREF) SendDlgItemMessage(hwndDlg, IDC_COLORBKG, CPM_GETCOLOUR, 0, 0);
+ Options::setLogBgColor(color);
+ Options::setLogLimit(SendDlgItemMessage(hwndDlg, IDC_LOGLIMITSPIN, UDM_GETPOS, 0, 0));
+ Options::setChatWindowOptions(getOptions(GetDlgItem(hwndDlg, IDC_TREELIST), TreeView_GetRoot(GetDlgItem(hwndDlg, IDC_TREELIST)), 0));
+ Options::setChatWindowOptions(Options::getChatWindowOptions() | (IsDlgButtonChecked(hwndDlg, IDC_SENDONENTER) ? ChatWindow::FLAG_OPT_SENDONENTER : 0));
+ Options::setChatWindowOptions(Options::getChatWindowOptions() | (IsDlgButtonChecked(hwndDlg, IDC_ENABLEIEVIEW) ? ChatWindow::FLAG_OPT_ENABLEIEVIEW : 0));
+ Options::setChatContainerOptions(IsDlgButtonChecked(hwndDlg, IDC_USETABS) ? ChatContainer::FLAG_USE_TABS : 0);
+ Options::saveSettings();
+ ChatWindow::refreshSettings(1);
+ break;
+ case NM_CLICK:
+ /* Handle checking/unchecking options here - update children and parent appropriately */
+ if (((LPNMHDR)lParam)->idFrom == IDC_TREELIST) {
+ TVHITTESTINFO hti;
+ hti.pt.x = (short)LOWORD(GetMessagePos());
+ hti.pt.y = (short)HIWORD(GetMessagePos());
+ ScreenToClient(((LPNMHDR)lParam)->hwndFrom, &hti.pt);
+ if (TreeView_HitTest(((LPNMHDR)lParam)->hwndFrom, &hti)) {
+ if (hti.flags&TVHT_ONITEMSTATEICON) {
+ TVITEM tvi = {0};
+ tvi.mask = TVIF_HANDLE | TVIF_STATE;
+ tvi.stateMask = TVIS_STATEIMAGEMASK;
+ tvi.hItem = hti.hItem;
+ TreeView_GetItem(((LPNMHDR)lParam)->hwndFrom, &tvi);
+ tvi.state ^= INDEXTOSTATEIMAGEMASK(3);
+ tvi.hItem = TreeView_GetChild(((LPNMHDR)lParam)->hwndFrom, hti.hItem);
+ if (tvi.hItem != NULL) {
+ while (tvi.hItem != NULL) {
+ TreeView_SetItem(((LPNMHDR)lParam)->hwndFrom, &tvi);
+ tvi.hItem=TreeView_GetNextSibling(((LPNMHDR)lParam)->hwndFrom, tvi.hItem);
+ }
+ } else {
+ HTREEITEM hParent = TreeView_GetParent(((LPNMHDR)lParam)->hwndFrom, hti.hItem);
+ if (hParent != NULL) {
+ if ((tvi.state>>12) == 2) {
+ tvi.hItem = TreeView_GetNextSibling(((LPNMHDR)lParam)->hwndFrom, hti.hItem);
+ while (tvi.hItem != NULL) {
+ TreeView_GetItem(((LPNMHDR)lParam)->hwndFrom, &tvi);
+ if ((tvi.state>>12) != 2) {
+ break;
+ }
+ tvi.hItem = TreeView_GetNextSibling(((LPNMHDR)lParam)->hwndFrom, tvi.hItem);
+ }
+ if ((tvi.state>>12) == 2) {
+ tvi.hItem = TreeView_GetPrevSibling(((LPNMHDR)lParam)->hwndFrom, hti.hItem);
+ while (tvi.hItem != NULL) {
+ TreeView_GetItem(((LPNMHDR)lParam)->hwndFrom, &tvi);
+ if ((tvi.state>>12) != 2) {
+ break;
+ }
+ tvi.hItem = TreeView_GetPrevSibling(((LPNMHDR)lParam)->hwndFrom, tvi.hItem);
+ }
+ }
+ }
+ tvi.hItem = hParent;
+ TreeView_SetItem(((LPNMHDR)lParam)->hwndFrom, &tvi);
+ }
+ }
+ SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
+ }
+ }
+ }
+ break;
+ }
+ }
+ break;
+ }
+ return FALSE;
+}
+
+/*
+#define POPUP_DEFAULT_COLORBKG 0xDCBDA5
+#define POPUP_DEFAULT_COLORTXT 0x000000
+static void MailPopupPreview(DWORD colorBack, DWORD colorText, char *title, char *emailInfo, int delay)
+{
+ POPUPDATAEX ppd;
+ char * lpzContactName;
+ char * lpzText;
+
+ lpzContactName = title;
+ lpzText = emailInfo;
+ ZeroMemory(&ppd, sizeof(ppd));
+ ppd.lchContact = NULL;
+ ppd.lchIcon = LoadIcon(hInst, MAKEINTRESOURCE(IDI_MAIL));
+ lstrcpy(ppd.lpzContactName, lpzContactName);
+ lstrcpy(ppd.lpzText, lpzText);
+ ppd.colorBack = colorBack;
+ ppd.colorText = colorText;
+ ppd.PluginWindowProc = NULL;
+ ppd.PluginData=NULL;
+ if ( ServiceExists( MS_POPUP_ADDPOPUPEX )) {
+ ppd.iSeconds = delay;
+ CallService(MS_POPUP_ADDPOPUPEX, (WPARAM)&ppd, 0);
+
+ }
+ else if ( ServiceExists( MS_POPUP_ADDPOPUP )) {
+ CallService(MS_POPUP_ADDPOPUP, (WPARAM)&ppd, 0);
+ }
+}
+*/
+//static INT_PTR CALLBACK MUCCPopupsDlgProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
+//{
+ /*
+ switch (msg) {
+ case WM_INITDIALOG:
+ {
+ BYTE delayMode;
+ CheckDlgButton(hwndDlg, IDC_ENABLEPOPUP, DBGetContactSettingByte(NULL, jabberProtoName, "MailPopupEnabled", TRUE));
+ SendDlgItemMessage(hwndDlg, IDC_COLORBKG, CPM_SETCOLOUR, 0, DBGetContactSettingDword(NULL, jabberProtoName, "MailPopupBack", POPUP_DEFAULT_COLORBKG));
+ SendDlgItemMessage(hwndDlg, IDC_COLORTXT, CPM_SETCOLOUR, 0, DBGetContactSettingDword(NULL, jabberProtoName, "MailPopupText", POPUP_DEFAULT_COLORTXT));
+ SetDlgItemInt(hwndDlg, IDC_DELAY, DBGetContactSettingDword(NULL, jabberProtoName, "MailPopupDelay", 4), FALSE);
+ delayMode = DBGetContactSettingByte(NULL, jabberProtoName, "MailPopupDelayMode", 0);
+ if (delayMode == 1) {
+ CheckDlgButton(hwndDlg, IDC_DELAY_CUSTOM, TRUE);
+ } else if (delayMode == 2) {
+ CheckDlgButton(hwndDlg, IDC_DELAY_PERMANENT, TRUE);
+ } else {
+ CheckDlgButton(hwndDlg, IDC_DELAY_POPUP, TRUE);
+ }
+ return TRUE;
+ }
+ case WM_COMMAND:
+ switch (LOWORD(wParam)) {
+ case IDC_COLORTXT:
+ case IDC_COLORBKG:
+ case IDC_ENABLEPOPUP:
+ case IDC_DELAY:
+ case IDC_DELAY_POPUP:
+ case IDC_DELAY_CUSTOM:
+ case IDC_DELAY_PERMANENT:
+ SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
+ break;
+ case IDC_PREVIEW:
+ {
+ int delay;
+ if (IsDlgButtonChecked(hwndDlg, IDC_DELAY_POPUP)) {
+ delay=0;
+ } else if (IsDlgButtonChecked(hwndDlg, IDC_DELAY_PERMANENT)) {
+ delay=-1;
+ } else {
+ delay=GetDlgItemInt(hwndDlg, IDC_DELAY, NULL, FALSE);
+ }
+ MailPopupPreview((DWORD) SendDlgItemMessage(hwndDlg,IDC_COLORBKG,CPM_GETCOLOUR,0,0),
+ (DWORD) SendDlgItemMessage(hwndDlg,IDC_COLORTXT,CPM_GETCOLOUR,0,0),
+ "New mail",
+ "From: test@test.test\nSubject: test",
+ delay);
+ }
+
+ }
+ break;
+
+
+ case WM_NOTIFY:
+ switch (((LPNMHDR) lParam)->code) {
+ case PSN_APPLY:
+ {
+ BYTE delayMode;
+ DBWriteContactSettingByte(NULL, jabberProtoName, "MailPopupEnabled", (BYTE) IsDlgButtonChecked(hwndDlg, IDC_ENABLEPOPUP));
+ DBWriteContactSettingDword(NULL, jabberProtoName, "MailPopupBack", (DWORD) SendDlgItemMessage(hwndDlg,IDC_COLORBKG,CPM_GETCOLOUR,0,0));
+ DBWriteContactSettingDword(NULL, jabberProtoName, "MailPopupText", (DWORD) SendDlgItemMessage(hwndDlg,IDC_COLORTXT,CPM_GETCOLOUR,0,0));
+ DBWriteContactSettingDword(NULL, jabberProtoName, "MailPopupDelay", (DWORD) GetDlgItemInt(hwndDlg,IDC_DELAY, NULL, FALSE));
+ delayMode=0;
+ if (IsDlgButtonChecked(hwndDlg, IDC_DELAY_CUSTOM)) {
+ delayMode=1;
+ } else if (IsDlgButtonChecked(hwndDlg, IDC_DELAY_PERMANENT)) {
+ delayMode=2;
+
+ }
+ DBWriteContactSettingByte(NULL, jabberProtoName, "MailPopupDelayMode", delayMode);
+ return TRUE;
+ }
+ }
+ break;
+
+ }*/
+// return FALSE;
+//}
+