From d57f2ea09e25902230cf2f6ef5c49abc31e95db2 Mon Sep 17 00:00:00 2001 From: George Hazan Date: Fri, 13 Sep 2019 14:06:52 +0300 Subject: tabSRMM: - two constructors for CMsgDialog introduced - fixes for minor glitches --- plugins/TabSRMM/src/chat_window.cpp | 2 +- plugins/TabSRMM/src/msgdialog.cpp | 74 +++++++++++++++++++++++-------------- plugins/TabSRMM/src/msgdlgother.cpp | 2 +- plugins/TabSRMM/src/msgs.cpp | 3 +- plugins/TabSRMM/src/msgs.h | 32 ++++++++-------- plugins/TabSRMM/src/templates.cpp | 2 +- 6 files changed, 68 insertions(+), 47 deletions(-) diff --git a/plugins/TabSRMM/src/chat_window.cpp b/plugins/TabSRMM/src/chat_window.cpp index 1b2c830b33..c5e98ffe32 100644 --- a/plugins/TabSRMM/src/chat_window.cpp +++ b/plugins/TabSRMM/src/chat_window.cpp @@ -597,7 +597,7 @@ void ShowRoom(TContainerData *pContainer, SESSION_INFO *si) TabCtrl_SetCurSel(hwndTab, iTabId); pContainer->m_iChilds++; - CMsgDialog *pDlg = new CMsgDialog(IDD_CHANNEL, si); + CMsgDialog *pDlg = new CMsgDialog(si); pDlg->m_iTabID = iTabId; pDlg->m_pContainer = pContainer; pDlg->SetParent(hwndTab); diff --git a/plugins/TabSRMM/src/msgdialog.cpp b/plugins/TabSRMM/src/msgdialog.cpp index 84c7db6689..c43ab064c8 100644 --- a/plugins/TabSRMM/src/msgdialog.cpp +++ b/plugins/TabSRMM/src/msgdialog.cpp @@ -325,30 +325,49 @@ LRESULT CALLBACK SplitterSubclassProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM ///////////////////////////////////////////////////////////////////////////////////////// -CMsgDialog::CMsgDialog(int iDlgId, SESSION_INFO *si) : - CSuper(g_plugin, iDlgId, si), +CMsgDialog::CMsgDialog(int iDlgId, MCONTACT hContact) : + CSuper(g_plugin, iDlgId), m_pPanel(this), - m_dwFlags(MWF_INITMODE), m_btnOk(this, IDOK), m_btnAdd(this, IDC_ADD), m_btnQuote(this, IDC_QUOTE), m_btnCancelAdd(this, IDC_CANCELADD) { - m_autoClose = CLOSE_ON_CANCEL; - m_forceResizable = true; - - m_szProto = GetContactProto(m_hContact); - m_bFilterEnabled = db_get_b(m_hContact, CHAT_MODULE, "FilterEnabled", m_bFilterEnabled) != 0; + m_hContact = hContact; - m_btnOk.OnClick = Callback(this, &CMsgDialog::onClick_Ok); m_btnAdd.OnClick = Callback(this, &CMsgDialog::onClick_Add); + m_btnQuote.OnClick = Callback(this, &CMsgDialog::onClick_Quote); + m_btnCancelAdd.OnClick = Callback(this, &CMsgDialog::onClick_CancelAdd); + + Init(); +} + +CMsgDialog::CMsgDialog(SESSION_INFO *si) : + CSuper(g_plugin, IDD_CHANNEL, si), + m_pPanel(this), + m_btnOk(this, IDOK), + m_btnAdd(this, IDC_ADD), + m_btnQuote(this, IDC_QUOTE), + m_btnCancelAdd(this, IDC_CANCELADD) +{ m_btnQuote.OnClick = Callback(this, &CMsgDialog::onClick_Quote); m_btnFilter.OnClick = Callback(this, &CMsgDialog::onClick_Filter); m_btnNickList.OnClick = Callback(this, &CMsgDialog::onClick_ShowNickList); - m_btnCancelAdd.OnClick = Callback(this, &CMsgDialog::onClick_CancelAdd); m_nickList.OnDblClick = Callback(this, &CMsgDialog::onDblClick_List); + Init(); +} + +void CMsgDialog::Init() +{ + m_szProto = GetContactProto(m_hContact); + m_autoClose = CLOSE_ON_CANCEL; + m_forceResizable = true; + m_bFilterEnabled = db_get_b(m_hContact, CHAT_MODULE, "FilterEnabled", m_bFilterEnabled) != 0; + + m_btnOk.OnClick = Callback(this, &CMsgDialog::onClick_Ok); + m_message.OnChange = Callback(this, &CMsgDialog::onChange_Message); } @@ -403,9 +422,9 @@ bool CMsgDialog::OnInitDialog() if (m_si) { m_si->pDlg = this; Chat_SetFilters(m_si); - - m_pPanel.getVisibility(); - m_pPanel.Configure(); + + m_pPanel.getVisibility(); + m_pPanel.Configure(); for (auto &it : btnControls) ShowWindow(GetDlgItem(m_hwnd,it), SW_HIDE); @@ -2041,21 +2060,22 @@ LRESULT CMsgDialog::WndProc_Log(UINT msg, WPARAM wParam, LPARAM lParam) return CSkin::DrawRichEditFrame(m_log.GetHwnd(), this, ID_EXTBKHISTORY, msg, wParam, lParam, stubLogProc); case WM_CONTEXTMENU: - POINT pt; + if (!isChat()) { + POINT pt; + if (lParam == 0xFFFFFFFF) { + CHARRANGE sel; + m_log.SendMsg(EM_EXGETSEL, 0, (LPARAM)& sel); + m_log.SendMsg(EM_POSFROMCHAR, (WPARAM)& pt, (LPARAM)sel.cpMax); + ClientToScreen(m_log.GetHwnd(), &pt); + } + else { + pt.x = GET_X_LPARAM(lParam); + pt.y = GET_Y_LPARAM(lParam); + } - if (lParam == 0xFFFFFFFF) { - CHARRANGE sel; - m_log.SendMsg(EM_EXGETSEL, 0, (LPARAM)&sel); - m_log.SendMsg(EM_POSFROMCHAR, (WPARAM)&pt, (LPARAM)sel.cpMax); - ClientToScreen(m_log.GetHwnd(), &pt); - } - else { - pt.x = GET_X_LPARAM(lParam); - pt.y = GET_Y_LPARAM(lParam); + ShowPopupMenu(m_log, pt); + return TRUE; } - - ShowPopupMenu(m_log, pt); - return TRUE; } return CSuper::WndProc_Log(msg, wParam, lParam); @@ -3221,7 +3241,7 @@ INT_PTR CMsgDialog::DlgProc(UINT uMsg, WPARAM wParam, LPARAM lParam) return TRUE; } } - break; + return MsgWindowDrawHandler((DRAWITEMSTRUCT *)lParam); case WM_NCHITTEST: SendMessage(m_pContainer->m_hwnd, WM_NCHITTEST, wParam, lParam); diff --git a/plugins/TabSRMM/src/msgdlgother.cpp b/plugins/TabSRMM/src/msgdlgother.cpp index 7a24071d4d..bd25248102 100644 --- a/plugins/TabSRMM/src/msgdlgother.cpp +++ b/plugins/TabSRMM/src/msgdlgother.cpp @@ -867,8 +867,8 @@ void CMsgDialog::LoadSplitter() int CMsgDialog::MsgWindowDrawHandler(DRAWITEMSTRUCT *dis) { - HBITMAP hbmAvatar = m_ace ? m_ace->hbmPic : PluginConfig.g_hbmUnknown; if ((dis->hwndItem == GetDlgItem(m_hwnd, IDC_CONTACTPIC) && m_bShowAvatar) || (dis->hwndItem == m_hwnd && m_pPanel.isActive())) { + HBITMAP hbmAvatar = m_ace ? m_ace->hbmPic : PluginConfig.g_hbmUnknown; if (hbmAvatar == nullptr) return TRUE; diff --git a/plugins/TabSRMM/src/msgs.cpp b/plugins/TabSRMM/src/msgs.cpp index 565b0bbfa7..401b4d2563 100644 --- a/plugins/TabSRMM/src/msgs.cpp +++ b/plugins/TabSRMM/src/msgs.cpp @@ -429,8 +429,7 @@ HWND TSAPI CreateNewTabForContact(TContainerData *pContainer, MCONTACT hContact, if (bActivateTab) TabCtrl_SetCurSel(hwndTab, iTabId); - CMsgDialog *pWindow = new CMsgDialog(IDD_MSGSPLITNEW); - pWindow->m_hContact = hContact; + CMsgDialog *pWindow = new CMsgDialog(IDD_MSGSPLITNEW, hContact); pWindow->m_iTabID = iTabId; pWindow->m_pContainer = pContainer; pContainer->m_iChilds++; diff --git a/plugins/TabSRMM/src/msgs.h b/plugins/TabSRMM/src/msgs.h index 27e7ba9d38..1ff67b180a 100644 --- a/plugins/TabSRMM/src/msgs.h +++ b/plugins/TabSRMM/src/msgs.h @@ -244,27 +244,28 @@ class CMsgDialog : public CSrmmBaseDialog typedef CSrmmBaseDialog CSuper; friend class CInfoPanel; - void DM_AddDivider(); + void DM_AddDivider(void); void DM_DismissTip(const POINT& pt); void DM_ErrorDetected(int type, int flag); bool DM_GenericHotkeysCheck(MSG *message); int DM_SplitterGlobalEvent(WPARAM wParam, LPARAM lParam); - void DM_UpdateLastMessage() const; - - void DetermineMinHeight(); - void FindFirstEvent(); - int FindRTLLocale(); - void GetSendFormat(); - bool IsAutoSplitEnabled() const; - void LoadContactAvatar(); - void LoadOwnAvatar(); + void DM_UpdateLastMessage(void) const; + + void DetermineMinHeight(void); + void FindFirstEvent(void); + int FindRTLLocale(void); + void GetSendFormat(void); + void Init(void); + bool IsAutoSplitEnabled(void) const; + void LoadContactAvatar(void); + void LoadOwnAvatar(void); void MsgWindowUpdateState(UINT msg); void ReplaceIcons(LONG startAt, int fAppend, BOOL isSent); - void ReplayQueue(); - void ResizeIeView(); + void ReplayQueue(void); + void ResizeIeView(void); void SaveAvatarToFile(HBITMAP hbm, int isOwnPic); void ShowPopupMenu(const CCtrlBase&, POINT pt); - void VerifyProxy(); + void VerifyProxy(void); LRESULT WMCopyHandler(UINT uMsg, WPARAM wParam, LPARAM lParam); WORD m_wStatus, m_wOldStatus; @@ -334,7 +335,7 @@ public: HKL m_hkl; // keyboard layout identifier DWORD m_isAutoRTL; DWORD m_idle; - DWORD m_dwFlags, m_dwFlagsEx; + DWORD m_dwFlags = MWF_INITMODE, m_dwFlagsEx; DWORD m_dwUnread; HANDLE m_hTheme, m_hThemeIP, m_hThemeToolbar; HWND m_hwndIEView, m_hwndIWebBrowserControl, m_hwndHPP; @@ -385,7 +386,8 @@ public: CCtrlButton m_btnOk, m_btnAdd, m_btnQuote, m_btnCancelAdd; public: - CMsgDialog(int dlgId, SESSION_INFO* = nullptr); + CMsgDialog(int dlgId, MCONTACT hContact); + CMsgDialog(SESSION_INFO *si); ~CMsgDialog(); void onClick_Ok(CCtrlButton *); diff --git a/plugins/TabSRMM/src/templates.cpp b/plugins/TabSRMM/src/templates.cpp index 48433b5192..52c5ca98b9 100644 --- a/plugins/TabSRMM/src/templates.cpp +++ b/plugins/TabSRMM/src/templates.cpp @@ -114,7 +114,7 @@ void LoadDefaultTemplates() } CTemplateEditDlg::CTemplateEditDlg(BOOL _rtl, HWND hwndParent) : - CSuper(IDD_TEMPLATEEDIT), + CSuper(IDD_TEMPLATEEDIT, 0), rtl(_rtl), edtText(this, IDC_EDITTEMPLATE), urlHelp(this, IDC_VARIABLESHELP, "https://wiki.miranda-ng.org/index.php?title=Plugin:TabSRMM/en/Templates"), -- cgit v1.2.3