From 48540940b6c28bb4378abfeb500ec45a625b37b6 Mon Sep 17 00:00:00 2001 From: Vadim Dashevskiy Date: Tue, 15 May 2012 10:38:20 +0000 Subject: initial commit git-svn-id: http://svn.miranda-ng.org/main/trunk@2 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- plugins/tabsrmm/src/themeio.cpp | 474 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 474 insertions(+) create mode 100644 plugins/tabsrmm/src/themeio.cpp (limited to 'plugins/tabsrmm/src/themeio.cpp') diff --git a/plugins/tabsrmm/src/themeio.cpp b/plugins/tabsrmm/src/themeio.cpp new file mode 100644 index 0000000000..a331d921c1 --- /dev/null +++ b/plugins/tabsrmm/src/themeio.cpp @@ -0,0 +1,474 @@ +/* + * astyle --force-indent=tab=4 --brackets=linux --indent-switches + * --pad=oper --one-line=keep-blocks --unpad=paren + * + * Miranda IM: the free IM client for Microsoft* Windows* + * + * Copyright 2000-2009 Miranda ICQ/IM project, + * all portions of this codebase are copyrighted to the people + * listed in contributors.txt. + * + * 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. + * + * part of tabSRMM messaging plugin for Miranda. + * + * (C) 2005-2010 by silvercircle _at_ gmail _dot_ com and contributors + * + * $Id: themeio.cpp 13412 2011-03-08 19:13:11Z george.hazan $ + * + * Import and export theme settings between files and the database + * + */ + +#include "commonheaders.h" +#pragma hdrstop + +#define CURRENT_THEME_VERSION 5 +#define THEME_COOKIE 25099837 + +extern char *TemplateNames[]; +extern TTemplateSet LTR_Active, RTL_Active; + + +static struct _tagExtSettings { + char* szIniSection; + char* szIniName; + char* szDbModule; + char* szDbSetting; + DWORD dwDef; +} _extSettings[12] = { + "Message Log", "BackgroundColor", FONTMODULE, SRMSGSET_BKGCOLOUR, SRMSGDEFSET_BKGCOLOUR, + "Message Log", "IncomingBG", FONTMODULE, "inbg", SRMSGDEFSET_BKGINCOLOUR, + "Message Log", "OutgoingBG", FONTMODULE, "outbg", SRMSGDEFSET_BKGOUTCOLOUR, + "Message Log", "OldIncomingBG", FONTMODULE, "oldinbg", SRMSGDEFSET_BKGINCOLOUR, + "Message Log", "OldOutgoingBG", FONTMODULE, "oldoutbg", SRMSGDEFSET_BKGOUTCOLOUR, + "Message Log", "StatusBG", FONTMODULE, "statbg", SRMSGDEFSET_BKGCOLOUR, + "Message Log", "InputBG", FONTMODULE, "inputbg", SRMSGDEFSET_BKGCOLOUR, + "Message Log", "HgridColor", FONTMODULE, "hgrid", SRMSGDEFSET_BKGCOLOUR, + "Message Log", "DWFlags", SRMSGMOD_T, "mwflags", MWF_LOG_DEFAULT, + "Chat", "UserListBG", "Chat", "ColorNicklistBG", SRMSGDEFSET_BKGCOLOUR, + "Message Log", "LeftIndent", SRMSGMOD_T, "IndentAmount", 20, + "Message Log", "RightIndent", SRMSGMOD_T, "RightIndent", 20, +}; + +/** + * new in TabSRMM3 / theme version 5 + * don't read these values from themes with version < 5 + */ +static struct _tagExtSettings_v5 { + char* szIniSection; + char* szIniName; + char* szDbModule; + char* szDbSetting; + DWORD dwDef; +} _extSettings_v5[18] = { + "CommonClrs", "IP_High", FONTMODULE, "ipfieldsbgHigh", 0xf0f0f0, + "CommonClrs", "IP_Low", FONTMODULE, "ipfieldsbg", 0x62caff, + "CommonClrs", "TB_High", FONTMODULE, "tbBgHigh", 0, + "CommonClrs", "TB_Low", FONTMODULE, "tbBgLow", 0, + "CommonClrs", "FillColor", FONTMODULE, "fillColor", 0, + "CommonClrs", "RichBorders", FONTMODULE, "cRichBorders", 0, + "CommonClrs", "GenericTxt", FONTMODULE, "genericTxtClr", RGB(20, 20, 20), + "AeroMode", "Style", SRMSGMOD_T, "aerostyle", CSkin::AERO_EFFECT_MILK, + "AeroMode", "AeroGlowColor", FONTMODULE, "aeroGlow", RGB(40, 40, 255), + + "Colored Tabs", "NormalText", SRMSGMOD_T, "tab_txt_normal", RGB(1, 1, 1), + "Colored Tabs", "ActiveText", SRMSGMOD_T, "tab_txt_active", RGB(1, 1, 1), + "Colored Tabs", "HottrackText", SRMSGMOD_T, "tab_txt_hottrack", RGB(1, 1, 1), + "Colored Tabs", "UnreadText", SRMSGMOD_T, "tab_txt_unread", RGB(1, 1, 1), + + "Colored Tabs", "NormalBG", SRMSGMOD_T, "tab_bg_normal", 0xf0f0f0, + "Colored Tabs", "ActiveBG", SRMSGMOD_T, "tab_bg_active", 0xf0f0f0, + "Colored Tabs", "HottrackBG", SRMSGMOD_T, "tab_bg_hottrack", 0xf0f0f0, + "Colored Tabs", "UnreadBG", SRMSGMOD_T, "tab_bg_unread", 0xf0f0f0, + "Chat", "Background", FONTMODULE, SRMSGSET_BKGCOLOUR_MUC, SRMSGDEFSET_BKGCOLOUR +}; + +/* + * this loads a font definition from an INI file. + * i = font number + * szKey = ini section (e.g. [Font10]) + * *lf = pointer to a LOGFONT structure which will receive the font definition + * *colour = pointer to a COLORREF which will receive the color of the font definition +*/ +static void TSAPI LoadLogfontFromINI(int i, char *szKey, LOGFONTA *lf, COLORREF *colour, const char *szIniFilename) +{ + int style; + char bSize; + + if (colour) + *colour = GetPrivateProfileIntA(szKey, "Color", 0, szIniFilename); + + if (lf) { + HDC hdc = GetDC(NULL); + if (i == H_MSGFONTID_DIVIDERS) + lf->lfHeight = 5; + else { + bSize = (char)GetPrivateProfileIntA(szKey, "Size", -12, szIniFilename); + if (bSize > 0) + lf->lfHeight = -MulDiv(bSize, GetDeviceCaps(hdc, LOGPIXELSY), 72); + else + lf->lfHeight = bSize; + } + + ReleaseDC(NULL, hdc); + + lf->lfWidth = 0; + lf->lfEscapement = 0; + lf->lfOrientation = 0; + style = (int)GetPrivateProfileIntA(szKey, "Style", 0, szIniFilename); + lf->lfWeight = style & FONTF_BOLD ? FW_BOLD : FW_NORMAL; + lf->lfItalic = style & FONTF_ITALIC ? 1 : 0; + lf->lfUnderline = style & FONTF_UNDERLINE ? 1 : 0; + lf->lfStrikeOut = 0; + if (i == MSGFONTID_SYMBOLS_IN || i == MSGFONTID_SYMBOLS_OUT) + lf->lfCharSet = SYMBOL_CHARSET; + else + lf->lfCharSet = (BYTE)GetPrivateProfileIntA(szKey, "Set", DEFAULT_CHARSET, szIniFilename); + lf->lfOutPrecision = OUT_DEFAULT_PRECIS; + lf->lfClipPrecision = CLIP_DEFAULT_PRECIS; + lf->lfQuality = DEFAULT_QUALITY; + lf->lfPitchAndFamily = DEFAULT_PITCH | FF_DONTCARE; + if (i == MSGFONTID_SYMBOLS_IN || i == MSGFONTID_SYMBOLS_OUT) { + lstrcpynA(lf->lfFaceName, "Webdings", LF_FACESIZE); + lf->lfCharSet = SYMBOL_CHARSET; + } else + GetPrivateProfileStringA(szKey, "Face", "Tahoma", lf->lfFaceName, LF_FACESIZE - 1, szIniFilename); + + /* + * filter out font attributes from the message input area font + * (can be disabled by db tweak) + */ + if(!strcmp(szKey, "Font16") && M->GetByte(0, SRMSGMOD_T, "inputFontFix", 1) == 1) { + lf->lfWeight = FW_NORMAL; + lf->lfItalic = 0; + lf->lfUnderline = 0; + lf->lfStrikeOut = 0; + } + } +} + +static struct _tagFontBlocks { + char *szModule; + int iFirst; + int iCount; + char *szIniTemp; + char *szBLockname; +} fontBlocks[] = { + FONTMODULE, 0, MSGDLGFONTCOUNT, "Font%d", "StdFonts", + FONTMODULE, 100, IPFONTCOUNT, "IPFont%d", "MiscFonts", + CHAT_FONTMODULE, 0, CHATFONTCOUNT, "ChatFont%d", "ChatFonts", + NULL, 0, 0, NULL +}; + +int TSAPI CheckThemeVersion(const TCHAR *szIniFilename) +{ + int cookie = GetPrivateProfileInt(_T("TabSRMM Theme"), _T("Cookie"), 0, szIniFilename); + int version = GetPrivateProfileInt(_T("TabSRMM Theme"), _T("Version"), 0, szIniFilename); + + if (version >= CURRENT_THEME_VERSION && cookie == THEME_COOKIE) + return 1; + return 0; +} + +void TSAPI WriteThemeToINI(const TCHAR *szIniFilenameT, struct TWindowData *dat) +{ + int i, n = 0; + DBVARIANT dbv; + char szBuf[100], szTemp[100], szAppname[100]; + COLORREF def; + char *szIniFilename = mir_u2a(szIniFilenameT); + + WritePrivateProfileStringA("TabSRMM Theme", "Version", _itoa(CURRENT_THEME_VERSION, szBuf, 10), szIniFilename); + WritePrivateProfileStringA("TabSRMM Theme", "Cookie", _itoa(THEME_COOKIE, szBuf, 10), szIniFilename); + + while (fontBlocks[n].szModule) { + int firstIndex = fontBlocks[n].iFirst; + char *szModule = fontBlocks[n].szModule; + WritePrivateProfileStringA(fontBlocks[n].szBLockname, "Valid", "1", szIniFilename); + for (i = 0; i < fontBlocks[n].iCount; i++) { + sprintf(szTemp, "Font%d", firstIndex + i); + sprintf(szAppname, fontBlocks[n].szIniTemp, firstIndex + i); + if (!DBGetContactSettingString(NULL, szModule, szTemp, &dbv)) { + WritePrivateProfileStringA(szAppname, "Face", dbv.pszVal, szIniFilename); + DBFreeVariant(&dbv); + } + sprintf(szTemp, "Font%dCol", firstIndex + i); + WritePrivateProfileStringA(szAppname, "Color", _itoa(M->GetDword(szModule, szTemp, 0), szBuf, 10), szIniFilename); + sprintf(szTemp, "Font%dSty", firstIndex + i); + WritePrivateProfileStringA(szAppname, "Style", _itoa(M->GetByte(szModule, szTemp, 0), szBuf, 10), szIniFilename); + sprintf(szTemp, "Font%dSize", firstIndex + i); + WritePrivateProfileStringA(szAppname, "Size", _itoa(M->GetByte(szModule, szTemp, 0), szBuf, 10), szIniFilename); + sprintf(szTemp, "Font%dSet", firstIndex + i); + WritePrivateProfileStringA(szAppname, "Set", _itoa(M->GetByte(szModule, szTemp, 0), szBuf, 10), szIniFilename); + } + n++; + } + def = SRMSGDEFSET_BKGCOLOUR; + + for(i = 0; i < safe_sizeof(_extSettings); i++) { + WritePrivateProfileStringA(_extSettings[i].szIniSection, _extSettings[i].szIniName, + _itoa(M->GetDword(_extSettings[i].szDbModule, _extSettings[i].szDbSetting, _extSettings[i].dwDef), szBuf, 10), szIniFilename); + } + + for(i = 0; i < safe_sizeof(_extSettings_v5); i++) { + WritePrivateProfileStringA(_extSettings_v5[i].szIniSection, _extSettings_v5[i].szIniName, + _itoa(M->GetDword(_extSettings_v5[i].szDbModule, _extSettings_v5[i].szDbSetting, _extSettings_v5[i].dwDef), szBuf, 10), szIniFilename); + } + + WritePrivateProfileStringA("Message Log", "VGrid", _itoa(M->GetByte("wantvgrid", 0), szBuf, 10), szIniFilename); + WritePrivateProfileStringA("Message Log", "ExtraMicroLF", _itoa(M->GetByte("extramicrolf", 0), szBuf, 10), szIniFilename); + + for (i = 0; i <= TMPL_ERRMSG; i++) { + char *encoded; + if (dat == 0) + encoded = M->utf8_encodeW(LTR_Active.szTemplates[i]); + else + encoded = M->utf8_encodeW(dat->pContainer->ltr_templates->szTemplates[i]); + WritePrivateProfileStringA("Templates", TemplateNames[i], encoded, szIniFilename); + mir_free(encoded); + if (dat == 0) + encoded = M->utf8_encodeW(RTL_Active.szTemplates[i]); + else + encoded = M->utf8_encodeW(dat->pContainer->rtl_templates->szTemplates[i]); + WritePrivateProfileStringA("RTLTemplates", TemplateNames[i], encoded, szIniFilename); + mir_free(encoded); + } + for (i = 0; i < CUSTOM_COLORS; i++) { + sprintf(szTemp, "cc%d", i + 1); + if (dat == 0) + WritePrivateProfileStringA("Custom Colors", szTemp, _itoa(M->GetDword(szTemp, 0), szBuf, 10), szIniFilename); + else + WritePrivateProfileStringA("Custom Colors", szTemp, _itoa(dat->pContainer->theme.custom_colors[i], szBuf, 10), szIniFilename); + } + for (i = 0; i <= 7; i++) + WritePrivateProfileStringA("Nick Colors", _itoa(i, szBuf, 10), _itoa(g_Settings.nickColors[i], szTemp, 10), szIniFilename); + + mir_free(szIniFilename); +} + +void TSAPI ReadThemeFromINI(const TCHAR *szIniFilenameT, TContainerData *dat, int noAdvanced, DWORD dwFlags) +{ + char szBuf[512], szTemp[100], szAppname[100]; + int i, n = 0; + int version; + COLORREF def; + char *szIniFilename = mir_u2a(szIniFilenameT); + char szTemplateBuffer[TEMPLATE_LENGTH * 3 + 2]; + char bSize = 0; + HDC hdc; + int charset; + + if ((version = GetPrivateProfileIntA("TabSRMM Theme", "Version", 0, szIniFilename)) == 0) // no version number.. assume 1 + version = 1; + + if (dat == 0) { + hdc = GetDC(NULL); + + while (fontBlocks[n].szModule && (dwFlags & THEME_READ_FONTS)) { + char *szModule = fontBlocks[n].szModule; + int firstIndex = fontBlocks[n].iFirst; + + if (n != 1 && !(dwFlags & THEME_READ_FONTS)) { + n++; + continue; + } + if (GetPrivateProfileIntA(fontBlocks[n].szBLockname, "Valid", 0, szIniFilename) == 0 && n != 0) { + n++; + continue; + } + for (i = 0; i < fontBlocks[n].iCount; i++) { + sprintf(szTemp, "Font%d", firstIndex + i); + sprintf(szAppname, fontBlocks[n].szIniTemp, firstIndex + i); + if (GetPrivateProfileStringA(szAppname, "Face", "Verdana", szBuf, sizeof(szBuf), szIniFilename) != 0) { + if (i == MSGFONTID_SYMBOLS_IN || i == MSGFONTID_SYMBOLS_OUT) + lstrcpynA(szBuf, "Arial", sizeof(szBuf)); + DBWriteContactSettingString(NULL, szModule, szTemp, szBuf); + } + + sprintf(szTemp, "Font%dCol", firstIndex + i); + M->WriteDword(szModule, szTemp, GetPrivateProfileIntA(szAppname, "Color", GetSysColor(COLOR_WINDOWTEXT), szIniFilename)); + + sprintf(szTemp, "Font%dSty", firstIndex + i); + M->WriteByte(szModule, szTemp, (BYTE)(GetPrivateProfileIntA(szAppname, "Style", 0, szIniFilename))); + + sprintf(szTemp, "Font%dSize", firstIndex + i); + bSize = (char)GetPrivateProfileIntA(szAppname, "Size", -10, szIniFilename); + if (bSize > 0) + bSize = -MulDiv(bSize, GetDeviceCaps(hdc, LOGPIXELSY), 72); + M->WriteByte(szModule, szTemp, bSize); + + sprintf(szTemp, "Font%dSet", firstIndex + i); + charset = GetPrivateProfileIntA(szAppname, "Set", 0, szIniFilename); + if (i == MSGFONTID_SYMBOLS_IN || i == MSGFONTID_SYMBOLS_OUT) + charset = 0; + M->WriteByte(szModule, szTemp, (BYTE)charset); + } + n++; + } + def = SRMSGDEFSET_BKGCOLOUR; + ReleaseDC(NULL, hdc); + + if (dwFlags & THEME_READ_FONTS) { + COLORREF defclr; + + for(i = 0; i < safe_sizeof(_extSettings); i++) { + M->WriteDword(_extSettings[i].szDbModule, _extSettings[i].szDbSetting, + GetPrivateProfileIntA(_extSettings[i].szIniSection, _extSettings[i].szIniName, _extSettings[i].dwDef, szIniFilename)); + } + + if(version >= 5) { + for(i = 0; i < safe_sizeof(_extSettings_v5); i++) { + M->WriteDword(_extSettings_v5[i].szDbModule, _extSettings_v5[i].szDbSetting, + GetPrivateProfileIntA(_extSettings_v5[i].szIniSection, _extSettings_v5[i].szIniName, _extSettings_v5[i].dwDef, szIniFilename)); + } + } + + M->WriteByte(SRMSGMOD_T, "wantvgrid", (BYTE)(GetPrivateProfileIntA("Message Log", "VGrid", 0, szIniFilename))); + M->WriteByte(SRMSGMOD_T, "extramicrolf", (BYTE)(GetPrivateProfileIntA("Message Log", "ExtraMicroLF", 0, szIniFilename))); + + for (i = 0; i < CUSTOM_COLORS; i++) { + sprintf(szTemp, "cc%d", i + 1); + if (dat == 0) + M->WriteDword(SRMSGMOD_T, szTemp, GetPrivateProfileIntA("Custom Colors", szTemp, RGB(224, 224, 224), szIniFilename)); + else + dat->theme.custom_colors[i] = GetPrivateProfileIntA("Custom Colors", szTemp, RGB(224, 224, 224), szIniFilename); + } + for (i = 0; i <= 7; i++) { + if (i == 5) + defclr = GetSysColor(COLOR_HIGHLIGHT); + else if (i == 6) + defclr = GetSysColor(COLOR_HIGHLIGHTTEXT); + else + defclr = g_Settings.crUserListColor; + g_Settings.nickColors[i] = GetPrivateProfileIntA("Nick Colors", _itoa(i, szTemp, 10), defclr, szIniFilename); + sprintf(szTemp, "NickColor%d", i); + M->WriteDword("Chat", szTemp, g_Settings.nickColors[i]); + } + } + } else { + HDC hdc = GetDC(NULL); + int SY = GetDeviceCaps(hdc, LOGPIXELSY); + ReleaseDC(NULL, hdc); + if (!noAdvanced) { + for (i = 0; i < MSGDLGFONTCOUNT; i++) { + _snprintf(szTemp, 20, "Font%d", i); + LoadLogfontFromINI(i, szTemp, &dat->theme.logFonts[i], &dat->theme.fontColors[i], szIniFilename); + wsprintfA(dat->theme.rtfFonts + (i * RTFCACHELINESIZE), "\\f%u\\cf%u\\b%d\\i%d\\ul%d\\fs%u", i, i, dat->theme.logFonts[i].lfWeight >= FW_BOLD ? 1 : 0, dat->theme.logFonts[i].lfItalic, dat->theme.logFonts[i].lfUnderline, 2 * abs(dat->theme.logFonts[i].lfHeight) * 74 / SY); + } + wsprintfA(dat->theme.rtfFonts + (MSGDLGFONTCOUNT * RTFCACHELINESIZE), "\\f%u\\cf%u\\b%d\\i%d\\ul%d\\fs%u", MSGDLGFONTCOUNT, MSGDLGFONTCOUNT, 0, 0, 0, 0); + } + dat->theme.bg = GetPrivateProfileIntA("Message Log", "BackgroundColor", RGB(224, 224, 224), szIniFilename); + dat->theme.inbg = GetPrivateProfileIntA("Message Log", "IncomingBG", RGB(224, 224, 224), szIniFilename); + dat->theme.outbg = GetPrivateProfileIntA("Message Log", "OutgoingBG", RGB(224, 224, 224), szIniFilename); + + dat->theme.oldinbg = GetPrivateProfileIntA("Message Log", "OldIncomingBG", RGB(224, 224, 224), szIniFilename); + dat->theme.oldoutbg = GetPrivateProfileIntA("Message Log", "OldOutgoingBG", RGB(224, 224, 224), szIniFilename); + dat->theme.statbg = GetPrivateProfileIntA("Message Log", "StatusBG", RGB(224, 224, 224), szIniFilename); + + dat->theme.inputbg = GetPrivateProfileIntA("Message Log", "InputBG", RGB(224, 224, 224), szIniFilename); + dat->theme.hgrid = GetPrivateProfileIntA("Message Log", "HgridColor", RGB(224, 224, 224), szIniFilename); + dat->theme.dwFlags = GetPrivateProfileIntA("Message Log", "DWFlags", MWF_LOG_DEFAULT, szIniFilename); + M->WriteByte(SRMSGMOD_T, "wantvgrid", (BYTE)(GetPrivateProfileIntA("Message Log", "VGrid", 0, szIniFilename))); + M->WriteByte(SRMSGMOD_T, "extramicrolf", (BYTE)(GetPrivateProfileIntA("Message Log", "ExtraMicroLF", 0, szIniFilename))); + + dat->theme.left_indent = GetPrivateProfileIntA("Message Log", "LeftIndent", 0, szIniFilename); + dat->theme.right_indent = GetPrivateProfileIntA("Message Log", "RightIndent", 0, szIniFilename); + + for (i = 0; i < CUSTOM_COLORS; i++) { + sprintf(szTemp, "cc%d", i + 1); + if (dat == 0) + M->WriteDword(SRMSGMOD_T, szTemp, GetPrivateProfileIntA("Custom Colors", szTemp, RGB(224, 224, 224), szIniFilename)); + else + dat->theme.custom_colors[i] = GetPrivateProfileIntA("Custom Colors", szTemp, RGB(224, 224, 224), szIniFilename); + } + } + + if (version >= 3) { + if (!noAdvanced && dwFlags & THEME_READ_TEMPLATES) { + for (i = 0; i <= TMPL_ERRMSG; i++) { + wchar_t *decoded = 0; + + GetPrivateProfileStringA("Templates", TemplateNames[i], "[undef]", szTemplateBuffer, TEMPLATE_LENGTH * 3, szIniFilename); + + if (strcmp(szTemplateBuffer, "[undef]")) { + if (dat == 0) + DBWriteContactSettingStringUtf(NULL, TEMPLATES_MODULE, TemplateNames[i], szTemplateBuffer); + decoded = M->utf8_decodeW(szTemplateBuffer); + if (dat == 0) + mir_sntprintf(LTR_Active.szTemplates[i], TEMPLATE_LENGTH, L"%s", decoded); + else + mir_sntprintf(dat->ltr_templates->szTemplates[i], TEMPLATE_LENGTH, L"%s", decoded); + mir_free(decoded); + } + + GetPrivateProfileStringA("RTLTemplates", TemplateNames[i], "[undef]", szTemplateBuffer, TEMPLATE_LENGTH * 3, szIniFilename); + + if (strcmp(szTemplateBuffer, "[undef]")) { + if (dat == 0) + DBWriteContactSettingStringUtf(NULL, RTLTEMPLATES_MODULE, TemplateNames[i], szTemplateBuffer); + decoded = M->utf8_decodeW(szTemplateBuffer); + if (dat == 0) + mir_sntprintf(RTL_Active.szTemplates[i], TEMPLATE_LENGTH, L"%s", decoded); + else + mir_sntprintf(dat->rtl_templates->szTemplates[i], TEMPLATE_LENGTH, L"%s", decoded); + mir_free(decoded); + } + } + } + } + if (PluginConfig.m_chat_enabled) + LoadGlobalSettings(); + mir_free(szIniFilename); +} + +/* + * iMode = 0 - GetOpenFilename, otherwise, GetSaveAs... + */ + +const TCHAR* TSAPI GetThemeFileName(int iMode) +{ + static TCHAR szFilename[MAX_PATH]; + OPENFILENAME ofn = {0}; + TCHAR szInitialDir[MAX_PATH]; + + mir_sntprintf(szInitialDir, MAX_PATH, _T("%s"), M->getSkinPath()); + + szFilename[0] = 0; + + TCHAR filter[MAX_PATH]; + mir_sntprintf(filter, SIZEOF(filter), _T("%s%c*.tabsrmm%c%c"), TranslateT("tabSRMM themes"), 0, 0, 0); + ofn.lpstrFilter = filter; + ofn.lStructSize = OPENFILENAME_SIZE_VERSION_400; + ofn.hwndOwner = 0; + ofn.lpstrFile = szFilename; + ofn.lpstrInitialDir = szInitialDir; + ofn.nMaxFile = MAX_PATH; + ofn.nMaxFileTitle = MAX_PATH; + ofn.Flags = OFN_HIDEREADONLY | OFN_DONTADDTORECENT; + ofn.lpstrDefExt = _T("tabsrmm"); + if (!iMode) { + if (GetOpenFileName(&ofn)) + return szFilename; + else + return NULL; + } else { + if (GetSaveFileName(&ofn)) + return szFilename; + else + return NULL; + } +} + -- cgit v1.2.3