diff options
author | George Hazan <ghazan@miranda.im> | 2022-07-29 12:31:16 +0300 |
---|---|---|
committer | George Hazan <ghazan@miranda.im> | 2022-07-29 12:31:16 +0300 |
commit | be8933b41671a50da5ae699df960aecf2a47e911 (patch) | |
tree | 2090b71db7f06354644fb260f8b3bbc3d91d20e8 /plugins/TabSRMM/src | |
parent | 055b1f31f252018f197841eb8dbabf58beff4fec (diff) |
fixes #3126 (tabSRMM: "Colorize nickames in member list" chat option)
Diffstat (limited to 'plugins/TabSRMM/src')
-rw-r--r-- | plugins/TabSRMM/src/container.cpp | 75 | ||||
-rw-r--r-- | plugins/TabSRMM/src/containeroptions.cpp | 17 | ||||
-rw-r--r-- | plugins/TabSRMM/src/globals.cpp | 2 | ||||
-rw-r--r-- | plugins/TabSRMM/src/msgs.h | 6 | ||||
-rw-r--r-- | plugins/TabSRMM/src/utils.cpp | 68 | ||||
-rw-r--r-- | plugins/TabSRMM/src/utils.h | 16 | ||||
-rw-r--r-- | plugins/TabSRMM/src/version.h | 2 |
7 files changed, 92 insertions, 94 deletions
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 <stdver.h>
|