From be8933b41671a50da5ae699df960aecf2a47e911 Mon Sep 17 00:00:00 2001 From: George Hazan Date: Fri, 29 Jul 2022 12:31:16 +0300 Subject: fixes #3126 (tabSRMM: "Colorize nickames in member list" chat option) --- plugins/TabSRMM/src/container.cpp | 75 +++++++++++++++++++++++++++++--- plugins/TabSRMM/src/containeroptions.cpp | 17 +++----- plugins/TabSRMM/src/globals.cpp | 2 +- plugins/TabSRMM/src/msgs.h | 6 +++ plugins/TabSRMM/src/utils.cpp | 68 +---------------------------- plugins/TabSRMM/src/utils.h | 16 +++---- plugins/TabSRMM/src/version.h | 2 +- 7 files changed, 92 insertions(+), 94 deletions(-) (limited to 'plugins/TabSRMM/src') diff --git a/plugins/TabSRMM/src/container.cpp b/plugins/TabSRMM/src/container.cpp index 8841ae5d43..5ac39b8402 100644 --- a/plugins/TabSRMM/src/container.cpp +++ b/plugins/TabSRMM/src/container.cpp @@ -31,7 +31,6 @@ #define CONTAINER_KEY "TAB_ContainersW" #define CONTAINER_SUBKEY "containerW" -#define CONTAINER_PREFIX "CNTW_" static bool fForceOverlayIcons = false; @@ -57,7 +56,7 @@ static TContainerData *AppendToContainerList(TContainerData *pContainer) return p; } -static TContainerData *RemoveContainerFromList(TContainerData *pContainer) +static TContainerData* RemoveContainerFromList(TContainerData *pContainer) { if (pContainer == pFirstContainer) { if (pContainer->pNext != nullptr) @@ -306,6 +305,14 @@ void TContainerData::Configure() BroadCastContainer(DM_CONFIGURETOOLBAR, 0, 1); } +void TContainerData::ContainerToSettings() +{ + m_pSettings->flags = m_flags; + m_pSettings->flagsEx = m_flagsEx; + m_pSettings->avatarMode = m_avatarMode; + m_pSettings->ownAvatarMode = m_ownAvatarMode; +} + ///////////////////////////////////////////////////////////////////////////////////////// // flashes the container // iMode != 0: turn on flashing @@ -549,6 +556,56 @@ void TContainerData::QueryPending() } } +///////////////////////////////////////////////////////////////////////////////////////// +// read settings for a container with private settings enabled. +// +// @param pContainer container window info struct +// @param fForce true -> force them private, even if they were not marked as private in the db + +void TContainerData::ReadPrivateSettings(bool fForce) +{ + char szCname[50]; + TContainerSettings csTemp; + memcpy(&csTemp, &PluginConfig.globalContainerSettings, sizeof(csTemp)); + + mir_snprintf(szCname, "%s%d", CNT_BASEKEYNAME, m_iContainerIndex); + Utils::ReadContainerSettingsFromDB(0, &csTemp, szCname); + if (csTemp.fPrivate || fForce) { + if (m_pSettings == nullptr || m_pSettings == &PluginConfig.globalContainerSettings) + m_pSettings = (TContainerSettings *)mir_alloc(sizeof(csTemp)); + memcpy(m_pSettings, &csTemp, sizeof(csTemp)); + m_pSettings->fPrivate = true; + } + else m_pSettings = &PluginConfig.globalContainerSettings; +} + +void TContainerData::SaveSettings(const char *szSetting) +{ + char szCName[50]; + + auto &f = m_flags; + f.m_bDeferredConfigure = f.m_bCreateMinimized = f.m_bDeferredResize = f.m_bCreateCloned = false; + + if (m_pSettings->fPrivate) { + mir_snprintf(szCName, "%s%d", szSetting, m_iContainerIndex); + Utils::WriteContainerSettingsToDB(0, m_pSettings, szCName); + } + else Utils::WriteContainerSettingsToDB(0, m_pSettings, nullptr); + + mir_snprintf(szCName, "%s%d_theme", szSetting, m_iContainerIndex); + if (mir_wstrlen(m_szRelThemeFile) > 1) { + if (m_fPrivateThemeChanged == TRUE) { + PathToRelativeW(m_szRelThemeFile, m_szAbsThemeFile, M.getDataPath()); + db_set_ws(0, SRMSGMOD_T, szCName, m_szAbsThemeFile); + m_fPrivateThemeChanged = FALSE; + } + } + else { + ::db_unset(0, SRMSGMOD_T, szCName); + m_fPrivateThemeChanged = FALSE; + } +} + void TContainerData::ReflashContainer() { if (IsActive()) // dont care about active windows @@ -864,6 +921,14 @@ void TContainerData::SetIcon(CMsgDialog *pDlg, HICON hIcon) m_hIcon = (hIcon == hIconMsg) ? STICK_ICON_MSG : 0; } +void TContainerData::SettingsToContainer() +{ + m_flags = m_pSettings->flags; + m_flagsEx = m_pSettings->flagsEx; + m_avatarMode = m_pSettings->avatarMode; + m_ownAvatarMode = m_pSettings->ownAvatarMode; +} + void TContainerData::UpdateTabs() { int nTabs = TabCtrl_GetItemCount(m_hwndTabs); @@ -1937,14 +2002,14 @@ panel_found: szThemeName = dbv.pwszVal; } else { - Utils::ReadPrivateContainerSettings(pContainer); + pContainer->ReadPrivateSettings(false); if (szThemeName == nullptr) { mir_snprintf(szCname, "%s%d_theme", CONTAINER_PREFIX, pContainer->m_iContainerIndex); if (!db_get_ws(0, SRMSGMOD_T, szCname, &dbv)) szThemeName = dbv.pwszVal; } } - Utils::SettingsToContainer(pContainer); + pContainer->SettingsToContainer(); if (szThemeName != nullptr) { PathToAbsoluteW(szThemeName, pContainer->m_szAbsThemeFile, M.getDataPath()); @@ -2127,7 +2192,7 @@ panel_found: } } } - else Utils::SaveContainerSettings(pContainer, CONTAINER_PREFIX); + else pContainer->SaveSettings(CONTAINER_PREFIX); DestroyWindow(hwndDlg); } } diff --git a/plugins/TabSRMM/src/containeroptions.cpp b/plugins/TabSRMM/src/containeroptions.cpp index 959818fc10..67bf374183 100644 --- a/plugins/TabSRMM/src/containeroptions.cpp +++ b/plugins/TabSRMM/src/containeroptions.cpp @@ -37,7 +37,7 @@ static void ReloadGlobalContainerSettings(bool fForceReconfig) { for (TContainerData *p = pFirstContainer; p; p = p->pNext) { if (!p->m_pSettings->fPrivate) { - Utils::SettingsToContainer(p); + p->SettingsToContainer(); if (fForceReconfig) p->Configure(); else @@ -52,7 +52,7 @@ static void ReloadGlobalContainerSettings(bool fForceReconfig) void TContainerData::ApplySetting(bool fForceResize) { - Utils::ContainerToSettings(this); + ContainerToSettings(); if (m_pSettings->fPrivate) Configure(); @@ -203,7 +203,7 @@ static INT_PTR CALLBACK DlgProcContainerOptions(HWND hwndDlg, UINT msg, WPARAM w switch (LOWORD(wParam)) { case IDC_CNTPRIVATE: if (IsDlgButtonChecked(hwndDlg, IDC_CNTPRIVATE)) { - Utils::ReadPrivateContainerSettings(pContainer, true); + pContainer->ReadPrivateSettings(true); pContainer->m_pSettings->fPrivate = true; } else { @@ -302,23 +302,20 @@ static INT_PTR CALLBACK DlgProcContainerOptions(HWND hwndDlg, UINT msg, WPARAM w pContainer->m_fPrivateThemeChanged = TRUE; } - Utils::SettingsToContainer(pContainer); + pContainer->SettingsToContainer(); if (BST_UNCHECKED == IsDlgButtonChecked(hwndDlg, IDC_CNTPRIVATE)) { ReloadGlobalContainerSettings(true); - Utils::WriteContainerSettingsToDB(0, &PluginConfig.globalContainerSettings, nullptr); - } - else { - char *szSetting = "CNTW_"; - Utils::SaveContainerSettings(pContainer, szSetting); + Utils::WriteContainerSettingsToDB(0, &PluginConfig.globalContainerSettings); } + else pContainer->SaveSettings(CONTAINER_PREFIX); pContainer->Configure(); pContainer->BroadCastContainer(DM_SETINFOPANEL, 0, 0); ShowWindow(pContainer->m_hwnd, SW_HIDE); { - RECT rc; + RECT rc; GetWindowRect(pContainer->m_hwnd, &rc); SetWindowPos(pContainer->m_hwnd, nullptr, rc.left, rc.top, (rc.right - rc.left) - 1, (rc.bottom - rc.top) - 1, SWP_NOZORDER | SWP_DRAWFRAME | SWP_FRAMECHANGED); SetWindowPos(pContainer->m_hwnd, nullptr, rc.left, rc.top, (rc.right - rc.left), (rc.bottom - rc.top), SWP_NOZORDER | SWP_DRAWFRAME | SWP_SHOWWINDOW); diff --git a/plugins/TabSRMM/src/globals.cpp b/plugins/TabSRMM/src/globals.cpp index 75e9d6d680..679fb63f7b 100644 --- a/plugins/TabSRMM/src/globals.cpp +++ b/plugins/TabSRMM/src/globals.cpp @@ -430,7 +430,7 @@ int CGlobals::OkToExit(WPARAM, LPARAM) CMimAPI::m_shutDown = true; PluginConfig.globalContainerSettings.fPrivate = false; - Utils::WriteContainerSettingsToDB(0, &PluginConfig.globalContainerSettings, nullptr); + Utils::WriteContainerSettingsToDB(0, &PluginConfig.globalContainerSettings); return 0; } diff --git a/plugins/TabSRMM/src/msgs.h b/plugins/TabSRMM/src/msgs.h index 4ededb3d19..b2b09973bb 100644 --- a/plugins/TabSRMM/src/msgs.h +++ b/plugins/TabSRMM/src/msgs.h @@ -184,6 +184,8 @@ class CThumbBase; #define STICK_ICON_MSG 10 +#define CONTAINER_PREFIX "CNTW_" + struct TLogTheme { COLORREF inbg, outbg, bg, oldinbg, oldoutbg, statbg, inputbg; @@ -343,6 +345,7 @@ struct TContainerData : public MZeroedObject void BroadCastContainer(UINT message, WPARAM wParam, LPARAM lParam) const; void CloseTabByMouse(POINT *); void Configure(); + void ContainerToSettings(); void FlashContainer(int iMode, int iCount); void InitDialog(HWND); void InitRedraw(void); @@ -351,12 +354,15 @@ struct TContainerData : public MZeroedObject void OptionsDialog(void); void QueryClientArea(RECT &rc); void QueryPending(void); + void ReadPrivateSettings(bool fForce); void ReflashContainer(void); void Resize(bool, int newWidth); void RestoreWindowPos(void); + void SaveSettings(const char *szSetting); void SelectTab(int iCommand, int idx = 0); void SetAeroMargins(void); void SetIcon(CMsgDialog *pDlg, HICON hIcon); + void SettingsToContainer(); void UpdateTabs(void); void UpdateTitle(MCONTACT, CMsgDialog* = nullptr); diff --git a/plugins/TabSRMM/src/utils.cpp b/plugins/TabSRMM/src/utils.cpp index dc40e9da88..0984e88794 100644 --- a/plugins/TabSRMM/src/utils.cpp +++ b/plugins/TabSRMM/src/utils.cpp @@ -494,8 +494,6 @@ int Utils::ReadContainerSettingsFromDB(const MCONTACT hContact, TContainerSettin cs->flagsEx.dw = oldBin.dwFlagsEx; cs->dwTransparency = oldBin.dwTransparency; cs->panelheight = oldBin.panelheight; - if (szKey == nullptr) - cs->iSplitterX = db_get_dw(0, CHAT_MODULE, "SplitterX", 150); cs->iSplitterY = oldBin.iSplitterY; cs->iSplitterX = 35; wcsncpy_s(cs->szTitleFormat, oldBin.szTitleFormat, _TRUNCATE); @@ -503,7 +501,7 @@ int Utils::ReadContainerSettingsFromDB(const MCONTACT hContact, TContainerSettin cs->ownAvatarMode = oldBin.ownAvatarMode; cs->autoCloseSeconds = oldBin.autoCloseSeconds; cs->fPrivate = oldBin.fPrivate != 0; - WriteContainerSettingsToDB(hContact, cs, szKey); + Utils::WriteContainerSettingsToDB(hContact, cs, szKey); db_unset(hContact, SRMSGMOD_T, szSetting); ::db_free(&dbv); return 0; @@ -545,70 +543,6 @@ int Utils::WriteContainerSettingsToDB(const MCONTACT hContact, TContainerSetting return 0; } -void Utils::SettingsToContainer(TContainerData *pContainer) -{ - pContainer->m_flags = pContainer->m_pSettings->flags; - pContainer->m_flagsEx = pContainer->m_pSettings->flagsEx; - pContainer->m_avatarMode = pContainer->m_pSettings->avatarMode; - pContainer->m_ownAvatarMode = pContainer->m_pSettings->ownAvatarMode; -} - -void Utils::ContainerToSettings(TContainerData *pContainer) -{ - pContainer->m_pSettings->flags = pContainer->m_flags; - pContainer->m_pSettings->flagsEx = pContainer->m_flagsEx; - pContainer->m_pSettings->avatarMode = pContainer->m_avatarMode; - pContainer->m_pSettings->ownAvatarMode = pContainer->m_ownAvatarMode; -} - -///////////////////////////////////////////////////////////////////////////////////////// -// read settings for a container with private settings enabled. -// -// @param pContainer container window info struct -// @param fForce true -> force them private, even if they were not marked as private in the db - -void Utils::ReadPrivateContainerSettings(TContainerData *pContainer, bool fForce) -{ - char szCname[50]; - TContainerSettings csTemp; - memcpy(&csTemp, &PluginConfig.globalContainerSettings, sizeof(csTemp)); - - mir_snprintf(szCname, "%s%d", CNT_BASEKEYNAME, pContainer->m_iContainerIndex); - Utils::ReadContainerSettingsFromDB(0, &csTemp, szCname); - if (csTemp.fPrivate || fForce) { - if (pContainer->m_pSettings == nullptr || pContainer->m_pSettings == &PluginConfig.globalContainerSettings) - pContainer->m_pSettings = (TContainerSettings *)mir_alloc(sizeof(csTemp)); - memcpy(pContainer->m_pSettings, &csTemp, sizeof(csTemp)); - pContainer->m_pSettings->fPrivate = true; - } - else pContainer->m_pSettings = &PluginConfig.globalContainerSettings; -} - -void Utils::SaveContainerSettings(TContainerData *pContainer, const char *szSetting) -{ - char szCName[50]; - - auto &f = pContainer->m_flags; - f.m_bDeferredConfigure = f.m_bCreateMinimized = f.m_bDeferredResize = f.m_bCreateCloned = false; - - if (pContainer->m_pSettings->fPrivate) { - mir_snprintf(szCName, "%s%d", szSetting, pContainer->m_iContainerIndex); - WriteContainerSettingsToDB(0, pContainer->m_pSettings, szCName); - } - mir_snprintf(szCName, "%s%d_theme", szSetting, pContainer->m_iContainerIndex); - if (mir_wstrlen(pContainer->m_szRelThemeFile) > 1) { - if (pContainer->m_fPrivateThemeChanged == TRUE) { - PathToRelativeW(pContainer->m_szRelThemeFile, pContainer->m_szAbsThemeFile, M.getDataPath()); - db_set_ws(0, SRMSGMOD_T, szCName, pContainer->m_szAbsThemeFile); - pContainer->m_fPrivateThemeChanged = FALSE; - } - } - else { - ::db_unset(0, SRMSGMOD_T, szCName); - pContainer->m_fPrivateThemeChanged = FALSE; - } -} - ///////////////////////////////////////////////////////////////////////////////////////// // calculate new width and height values for a user picture (avatar) // diff --git a/plugins/TabSRMM/src/utils.h b/plugins/TabSRMM/src/utils.h index aa8f2df324..f2c96ab7a0 100644 --- a/plugins/TabSRMM/src/utils.h +++ b/plugins/TabSRMM/src/utils.h @@ -58,12 +58,8 @@ namespace Utils void RTF_ColorAdd(const wchar_t *tszColname); int ReadContainerSettingsFromDB(const MCONTACT hContact, TContainerSettings *cs, const char *szKey = nullptr); int WriteContainerSettingsToDB(const MCONTACT hContact, TContainerSettings *cs, const char *szKey = nullptr); - void SettingsToContainer(TContainerData *pContainer); - void ContainerToSettings(TContainerData *pContainer); - void ReadPrivateContainerSettings(TContainerData *pContainer, bool fForce = false); - void SaveContainerSettings(TContainerData *pContainer, const char *szSetting); - uint32_t CALLBACK StreamOut(DWORD_PTR dwCookie, LPBYTE pbBuff, LONG cb, LONG * pcb); + uint32_t CALLBACK StreamOut(DWORD_PTR dwCookie, LPBYTE pbBuff, LONG cb, LONG * pcb); void addMenuItem(const HMENU& m, MENUITEMINFO& mii, HICON hIcon, const wchar_t *szText, UINT uID, UINT pos); void enableDlgControl(const HWND hwnd, UINT id, bool fEnable = true); @@ -153,12 +149,12 @@ public: LRESULT ShowDialog() const; private: - ptrW m_szTitle, m_szText; - UINT m_uId; - HFONT m_hFontCaption; + ptrW m_szTitle, m_szText; + UINT m_uId; + HFONT m_hFontCaption; uint32_t m_dwFlags; - HWND m_hwnd = nullptr; - bool m_fIsModal; + HWND m_hwnd = nullptr; + bool m_fIsModal; INT_PTR CALLBACK dlgProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam); static INT_PTR CALLBACK stubDlgProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam); diff --git a/plugins/TabSRMM/src/version.h b/plugins/TabSRMM/src/version.h index 9746933cd4..c81b057487 100644 --- a/plugins/TabSRMM/src/version.h +++ b/plugins/TabSRMM/src/version.h @@ -1,7 +1,7 @@ #define __MAJOR_VERSION 3 #define __MINOR_VERSION 6 #define __RELEASE_NUM 2 -#define __BUILD_NUM 3 +#define __BUILD_NUM 4 #include -- cgit v1.2.3