From d39ba175b0e193525f140622a6a241408c2062dd Mon Sep 17 00:00:00 2001 From: George Hazan Date: Mon, 2 Sep 2019 17:19:25 +0300 Subject: StdMsg: merge began --- src/core/stdmsg/src/chat_manager.cpp | 21 ----- src/core/stdmsg/src/chat_window.cpp | 38 ++------- src/core/stdmsg/src/msgdialog.cpp | 156 +++++++++++++++++++++++------------ src/core/stdmsg/src/msgs.cpp | 86 ++++--------------- src/core/stdmsg/src/msgs.h | 14 +--- src/core/stdmsg/src/stdafx.h | 7 +- src/core/stdmsg/src/tabs.cpp | 2 +- 7 files changed, 135 insertions(+), 189 deletions(-) (limited to 'src/core/stdmsg') diff --git a/src/core/stdmsg/src/chat_manager.cpp b/src/core/stdmsg/src/chat_manager.cpp index 86dc4aa572..56f2e5aa28 100644 --- a/src/core/stdmsg/src/chat_manager.cpp +++ b/src/core/stdmsg/src/chat_manager.cpp @@ -64,25 +64,6 @@ static MODULEINFO* MM_CreateModule() return new MODULEINFO(); } -static void OnDestroyModule(MODULEINFO *mi) -{ - if (mi->hOnlineIcon) - DestroyIcon(mi->hOnlineIcon); - if (mi->hOfflineIcon) - DestroyIcon(mi->hOfflineIcon); -} - -static void OnCreateModule(MODULEINFO *mi) -{ - OnDestroyModule(mi); - - mi->OnlineIconIndex = g_clistApi.pfnIconFromStatusMode(mi->pszModule, ID_STATUS_ONLINE, 0); - mi->hOnlineIcon = ImageList_GetIcon(Clist_GetImageList(), mi->OnlineIconIndex, ILD_TRANSPARENT); - - mi->OfflineIconIndex = g_clistApi.pfnIconFromStatusMode(mi->pszModule, ID_STATUS_OFFLINE, 0); - mi->hOfflineIcon = ImageList_GetIcon(Clist_GetImageList(), mi->OfflineIconIndex, ILD_TRANSPARENT); -} - static void OnReplaceSession(SESSION_INFO *si) { if (si->pDlg) @@ -236,8 +217,6 @@ void Load_ChatModule() Chat_CustomizeApi(&data); g_chatApi.MM_CreateModule = MM_CreateModule; - g_chatApi.OnCreateModule = OnCreateModule; - g_chatApi.OnDestroyModule = OnDestroyModule; g_chatApi.OnReplaceSession = OnReplaceSession; g_chatApi.OnLoadSettings = OnLoadSettings; diff --git a/src/core/stdmsg/src/chat_window.cpp b/src/core/stdmsg/src/chat_window.cpp index 02662b6d9a..f7aac47d3c 100644 --- a/src/core/stdmsg/src/chat_window.cpp +++ b/src/core/stdmsg/src/chat_window.cpp @@ -35,6 +35,8 @@ CChatRoomDlg::CChatRoomDlg(CTabbedWindow *pOwner, SESSION_INFO *si) : m_splitterX(this, IDC_SPLITTERX), m_splitterY(this, IDC_SPLITTERY) { + m_szProto = si->pszModule; + m_btnOk.OnClick = Callback(this, &CChatRoomDlg::onClick_Ok); m_btnFilter.OnClick = Callback(this, &CChatRoomDlg::onClick_Filter); @@ -192,14 +194,6 @@ void CChatRoomDlg::onSplitterY(CSplitter *pSplitter) ///////////////////////////////////////////////////////////////////////////////////////// -int CChatRoomDlg::GetImageId() const -{ - if ((m_si->wState & GC_EVENT_HIGHLIGHT) && (m_nFlash & 1)) - return 0; - - return (m_si->wStatus == ID_STATUS_ONLINE) ? m_si->pMI->OnlineIconIndex : m_si->pMI->OfflineIconIndex; -} - void CChatRoomDlg::LoadSettings() { m_clrInputBG = db_get_dw(0, CHAT_MODULE, "ColorMessageBG", GetSysColor(COLOR_WINDOW)); @@ -240,16 +234,6 @@ void CChatRoomDlg::RedrawLog() ///////////////////////////////////////////////////////////////////////////////////////// -void CChatRoomDlg::ScrollToBottom() -{ - if (GetWindowLongPtr(m_log.GetHwnd(), GWL_STYLE) & WS_VSCROLL) { - int len = GetWindowTextLength(m_log.GetHwnd()) - 1; - m_log.SendMsg(EM_SETSEL, len, len); - - PostMessage(m_log.GetHwnd(), WM_VSCROLL, MAKEWPARAM(SB_BOTTOM, 0), 0); - } -} - void CChatRoomDlg::ShowFilterMenu() { HWND hwnd = CreateDialogParam(g_plugin.getInst(), MAKEINTRESOURCE(IDD_FILTER), m_hwnd, FilterWndProc, (LPARAM)this); @@ -283,13 +267,9 @@ void CChatRoomDlg::UpdateOptions() if (m_si->iType == GCW_CHATROOM) EnableWindow(m_btnChannelMgr.GetHwnd(), mi->bChanMgr); - HICON hIcon = (m_si->wStatus == ID_STATUS_ONLINE) ? mi->hOnlineIcon : mi->hOfflineIcon; - if (!hIcon) { - g_chatApi.MM_IconsChanged(); - hIcon = (m_si->wStatus == ID_STATUS_ONLINE) ? mi->hOnlineIcon : mi->hOfflineIcon; - } - + HICON hIcon = ImageList_GetIcon(Clist_GetImageList(), GetImageId(), ILD_TRANSPARENT); SendMessage(m_pOwner->m_hwndStatus, SB_SETICON, 0, (LPARAM)hIcon); + DestroyIcon(hIcon); Window_SetIcon_IcoLib(m_pOwner->GetHwnd(), g_plugin.getIconHandle(IDI_CHANMGR)); @@ -332,14 +312,10 @@ void CChatRoomDlg::UpdateStatusBar() int iStatusbarParts[2] = { x, -1 }; SendMessage(m_pOwner->m_hwndStatus, SB_SETPARTS, 2, (LPARAM)&iStatusbarParts); - // stupid hack to make icons show. I dunno why this is needed currently - HICON hIcon = m_si->wStatus == ID_STATUS_ONLINE ? m_si->pMI->hOnlineIcon : m_si->pMI->hOfflineIcon; - if (!hIcon) { - g_chatApi.MM_IconsChanged(); - hIcon = m_si->wStatus == ID_STATUS_ONLINE ? m_si->pMI->hOnlineIcon : m_si->pMI->hOfflineIcon; - } - + HICON hIcon = ImageList_GetIcon(Clist_GetImageList(), GetImageId(), ILD_TRANSPARENT); SendMessage(m_pOwner->m_hwndStatus, SB_SETICON, 0, (LPARAM)hIcon); + DestroyIcon(hIcon); + SendMessage(m_pOwner->m_hwndStatus, SB_SETTEXT, 0, (LPARAM)ptszDispName); SendMessage(m_pOwner->m_hwndStatus, SB_SETTEXT, 1, (LPARAM)(m_si->ptszStatusbarText ? m_si->ptszStatusbarText : L"")); SendMessage(m_pOwner->m_hwndStatus, SB_SETTIPTEXT, 1, (LPARAM)(m_si->ptszStatusbarText ? m_si->ptszStatusbarText : L"")); diff --git a/src/core/stdmsg/src/msgdialog.cpp b/src/core/stdmsg/src/msgdialog.cpp index 3702f21c0c..396c0aa422 100644 --- a/src/core/stdmsg/src/msgdialog.cpp +++ b/src/core/stdmsg/src/msgdialog.cpp @@ -33,30 +33,11 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #define ENTERCLICKTIME 1000 //max time in ms during which a double-tap on enter will cause a send -int SendMessageDirect(const wchar_t *szMsg, MCONTACT hContact) -{ - if (hContact == 0) - return 0; - - int flags = 0; - if (Utils_IsRtl(szMsg)) - flags |= PREF_RTL; - - T2Utf sendBuffer(szMsg); - if (!mir_strlen(sendBuffer)) - return 0; - - if (db_mc_isMeta(hContact)) - hContact = db_mc_getSrmmSub(hContact); - - int sendId = ProtoChainSend(hContact, PSS_MESSAGE, flags, (LPARAM)sendBuffer); - msgQueue_add(hContact, sendId, sendBuffer.detach(), flags); - return sendId; -} +///////////////////////////////////////////////////////////////////////////////////////// -static void AddToFileList(wchar_t ***pppFiles, int *totalCount, const wchar_t* szFilename) +static void AddToFileList(wchar_t ***pppFiles, int *totalCount, const wchar_t *szFilename) { - *pppFiles = (wchar_t**)mir_realloc(*pppFiles, (++*totalCount + 1)*sizeof(wchar_t*)); + *pppFiles = (wchar_t **)mir_realloc(*pppFiles, (++ * totalCount + 1) * sizeof(wchar_t *)); (*pppFiles)[*totalCount] = nullptr; (*pppFiles)[*totalCount - 1] = mir_wstrdup(szFilename); @@ -76,7 +57,7 @@ static void AddToFileList(wchar_t ***pppFiles, int *totalCount, const wchar_t* s } } -static void SetEditorText(HWND hwnd, const wchar_t* txt) +static void SetEditorText(HWND hwnd, const wchar_t *txt) { SetWindowText(hwnd, txt); SendMessage(hwnd, EM_SETSEL, -1, -1); @@ -84,6 +65,100 @@ static void SetEditorText(HWND hwnd, const wchar_t* txt) ///////////////////////////////////////////////////////////////////////////////////////// +CMsgDialog::CMsgDialog(CTabbedWindow *pOwner, int iDialogId, SESSION_INFO *si) : + CSuper(g_plugin, iDialogId, si), + m_btnOk(this, IDOK), + m_pOwner(pOwner) +{ + m_autoClose = 0; + m_forceResizable = true; +} + +void CMsgDialog::CloseTab() +{ + if (g_Settings.bTabsEnable) { + SendMessage(GetParent(m_hwndParent), GC_REMOVETAB, 0, (LPARAM)this); + Close(); + } + else SendMessage(m_hwndParent, WM_CLOSE, 0, 0); +} + +INT_PTR CMsgDialog::DlgProc(UINT uMsg, WPARAM wParam, LPARAM lParam) +{ + switch (uMsg) { + case WM_ACTIVATE: + if (LOWORD(wParam) != WA_ACTIVE) + break; + + SetFocus(m_message.GetHwnd()); + __fallthrough; + + case WM_MOUSEACTIVATE: + OnActivate(); + break; + + case WM_TIMER: + if (wParam == TIMERID_FLASHWND) { + m_pOwner->FixTabIcons(this); + if (!g_dat.nFlashMax || m_nFlash < 2 * g_dat.nFlashMax) + FlashWindow(m_pOwner->GetHwnd(), TRUE); + m_nFlash++; + } + break; + } + + return CSuper::DlgProc(uMsg, wParam, lParam); +} + +int CMsgDialog::GetImageId() const +{ + if (m_nFlash & 1) + return 0; + + return g_clistApi.pfnIconFromStatusMode(m_szProto, GetStatus(), m_hContact); +} + +bool CMsgDialog::IsActive() const +{ + bool bRes = m_pOwner->IsActive(); + if (g_Settings.bTabsEnable && bRes) + bRes &= m_pOwner->m_tab.GetActivePage() == this; + + return bRes; +} + +void CMsgDialog::ScrollToBottom() +{ + if (GetWindowLongPtr(m_log.GetHwnd(), GWL_STYLE) & WS_VSCROLL) { + SCROLLINFO si = {}; + si.cbSize = sizeof(si); + si.fMask = SIF_PAGE | SIF_RANGE; + GetScrollInfo(m_log.GetHwnd(), SB_VERT, &si); + + si.fMask = SIF_POS; + si.nPos = si.nMax - si.nPage; + SetScrollInfo(m_log.GetHwnd(), SB_VERT, &si, TRUE); + m_log.SendMsg(WM_VSCROLL, MAKEWPARAM(SB_BOTTOM, 0), 0); + } +} + +void CMsgDialog::StartFlash() +{ + ::SetTimer(m_hwnd, TIMERID_FLASHWND, 900, nullptr); +} + +void CMsgDialog::StopFlash() +{ + if (::KillTimer(m_hwnd, TIMERID_FLASHWND)) { + ::FlashWindow(m_pOwner->GetHwnd(), FALSE); + + m_nFlash = 0; + m_pOwner->FixTabIcons(this); + } +} + +///////////////////////////////////////////////////////////////////////////////////////// + CSrmmWindow::CSrmmWindow(CTabbedWindow *pOwner, MCONTACT hContact) : CSuper(pOwner, IDD_MSG), m_splitter(this, IDC_SPLITTERY), @@ -451,14 +526,6 @@ void CSrmmWindow::OnSplitterMoved(CSplitter *pSplitter) ///////////////////////////////////////////////////////////////////////////////////////// -int CSrmmWindow::GetImageId() const -{ - if (m_nFlash & 1) - return 0; - - return (WORD)g_clistApi.pfnIconFromStatusMode(m_szProto, m_wStatus, m_hContact); -} - void CSrmmWindow::NotifyTyping(int mode) { if (!m_hContact) @@ -506,34 +573,21 @@ void CSrmmWindow::ProcessFileDrop(HDROP hDrop) if (m_wStatus == ID_STATUS_OFFLINE) return; if (m_hContact != 0) { wchar_t szFilename[MAX_PATH]; - int fileCount = DragQueryFile(hDrop, -1, nullptr, 0), totalCount = 0, i; + int fileCount = DragQueryFile(hDrop, -1, nullptr, 0), totalCount = 0; wchar_t **ppFiles = nullptr; - for (i = 0; i < fileCount; i++) { + for (int i = 0; i < fileCount; i++) { DragQueryFile(hDrop, i, szFilename, _countof(szFilename)); AddToFileList(&ppFiles, &totalCount, szFilename); } CallServiceSync(MS_FILE_SENDSPECIFICFILEST, m_hContact, (LPARAM)ppFiles); - for (i = 0; ppFiles[i]; i++) - mir_free(ppFiles[i]); - mir_free(ppFiles); + if (ppFiles) { + for (int i = 0; ppFiles[i]; i++) + mir_free(ppFiles[i]); + mir_free(ppFiles); + } } } -void CSrmmWindow::ScrollToBottom() -{ - if (!(GetWindowLongPtr(m_log.GetHwnd(), GWL_STYLE) & WS_VSCROLL)) - return; - - SCROLLINFO si = {}; - si.cbSize = sizeof(si); - si.fMask = SIF_PAGE | SIF_RANGE; - GetScrollInfo(m_log.GetHwnd(), SB_VERT, &si); - si.fMask = SIF_POS; - si.nPos = si.nMax - si.nPage; - SetScrollInfo(m_log.GetHwnd(), SB_VERT, &si, TRUE); - m_log.SendMsg(WM_VSCROLL, MAKEWPARAM(SB_BOTTOM, 0), 0); -} - void CSrmmWindow::ShowAvatar() { if (g_dat.bShowAvatar) { diff --git a/src/core/stdmsg/src/msgs.cpp b/src/core/stdmsg/src/msgs.cpp index 3647e86176..e58a812e6b 100644 --- a/src/core/stdmsg/src/msgs.cpp +++ b/src/core/stdmsg/src/msgs.cpp @@ -22,84 +22,34 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include "stdafx.h" #include "statusicon.h" -///////////////////////////////////////////////////////////////////////////////////////// - -CMsgDialog::CMsgDialog(CTabbedWindow *pOwner, int iDialogId, SESSION_INFO *si) : - CSuper(g_plugin, iDialogId, si), - m_btnOk(this, IDOK), - m_pOwner(pOwner) -{ - m_autoClose = 0; - m_forceResizable = true; -} +static HGENMENU hMsgMenuItem; +static HMODULE hMsftEdit; -void CMsgDialog::CloseTab() -{ - if (g_Settings.bTabsEnable) { - SendMessage(GetParent(m_hwndParent), GC_REMOVETAB, 0, (LPARAM)this); - Close(); - } - else SendMessage(m_hwndParent, WM_CLOSE, 0, 0); -} - -INT_PTR CMsgDialog::DlgProc(UINT uMsg, WPARAM wParam, LPARAM lParam) -{ - switch (uMsg) { - case WM_ACTIVATE: - if (LOWORD(wParam) != WA_ACTIVE) - break; - - SetFocus(m_message.GetHwnd()); - __fallthrough; - - case WM_MOUSEACTIVATE: - OnActivate(); - break; - - case WM_TIMER: - if (wParam == TIMERID_FLASHWND) { - m_pOwner->FixTabIcons(this); - if (!g_dat.nFlashMax || m_nFlash < 2 * g_dat.nFlashMax) - FlashWindow(m_pOwner->GetHwnd(), TRUE); - m_nFlash++; - } - break; - } +int OnCheckPlugins(WPARAM, LPARAM); - return CSuper::DlgProc(uMsg, wParam, lParam); -} +///////////////////////////////////////////////////////////////////////////////////////// -bool CMsgDialog::IsActive() const +int SendMessageDirect(const wchar_t *szMsg, MCONTACT hContact) { - bool bRes = m_pOwner->IsActive(); - if (g_Settings.bTabsEnable && bRes) - bRes &= m_pOwner->m_tab.GetActivePage() == this; + if (hContact == 0) + return 0; - return bRes; -} + int flags = 0; + if (Utils_IsRtl(szMsg)) + flags |= PREF_RTL; -void CMsgDialog::StartFlash() -{ - ::SetTimer(m_hwnd, TIMERID_FLASHWND, 900, nullptr); -} + T2Utf sendBuffer(szMsg); + if (!mir_strlen(sendBuffer)) + return 0; -void CMsgDialog::StopFlash() -{ - if (::KillTimer(m_hwnd, TIMERID_FLASHWND)) { - ::FlashWindow(m_pOwner->GetHwnd(), FALSE); + if (db_mc_isMeta(hContact)) + hContact = db_mc_getSrmmSub(hContact); - m_nFlash = 0; - m_pOwner->FixTabIcons(this); - } + int sendId = ProtoChainSend(hContact, PSS_MESSAGE, flags, (LPARAM)sendBuffer); + msgQueue_add(hContact, sendId, sendBuffer.detach(), flags); + return sendId; } -///////////////////////////////////////////////////////////////////////////////////////// - -int OnCheckPlugins(WPARAM, LPARAM); - -HGENMENU hMsgMenuItem; -HMODULE hMsftEdit; - static int SRMMStatusToPf2(int status) { switch (status) { diff --git a/src/core/stdmsg/src/msgs.h b/src/core/stdmsg/src/msgs.h index a5a5afed36..ef724a153c 100644 --- a/src/core/stdmsg/src/msgs.h +++ b/src/core/stdmsg/src/msgs.h @@ -51,10 +51,10 @@ protected: CCtrlButton m_btnOk; CTabbedWindow *m_pOwner; DWORD m_nFlash = 0; + char *m_szProto; CMsgDialog(CTabbedWindow *pOwner, int idDialog, SESSION_INFO *si = nullptr); - virtual const char* GetProto() const PURE; virtual int GetStatus() const PURE; virtual void OnActivate() PURE; @@ -62,15 +62,14 @@ protected: INT_PTR DlgProc(UINT msg, WPARAM wParam, LPARAM lParam) override; public: - virtual int GetImageId() const PURE; + int GetImageId() const; void CloseTab() override; bool IsActive() const override; + void ScrollToBottom() override; void StartFlash(); void StopFlash(); - - __forceinline SESSION_INFO* getChat() const { return m_si; } }; class CSrmmWindow : public CMsgDialog @@ -92,7 +91,6 @@ class CSrmmWindow : public CMsgDialog void UpdateIcon(WPARAM wParam); void UpdateLastMessage(void); - char *m_szProto; HICON m_hStatusIcon = nullptr; HFONT m_hFont = nullptr; HBRUSH m_hBkgBrush = nullptr; @@ -133,12 +131,9 @@ public: INT_PTR DlgProc(UINT msg, WPARAM wParam, LPARAM lParam) override; int Resizer(UTILRESIZECONTROL *urc) override; - virtual const char* GetProto() const { return m_szProto; } virtual int GetStatus() const { return m_wStatus; } - int GetImageId() const override; void LoadSettings() override {} - void ScrollToBottom() override; void SetStatusText(const wchar_t*, HICON) override; void UpdateTitle() override; @@ -190,14 +185,11 @@ public: INT_PTR DlgProc(UINT msg, WPARAM wParam, LPARAM lParam) override; int Resizer(UTILRESIZECONTROL *urc) override; - virtual const char* GetProto() const { return m_si->pszModule; } virtual int GetStatus() const { return m_si->wStatus; } - int GetImageId() const override; void LoadSettings() override; void RedrawLog() override; void StreamInEvents(LOGINFO *lin, bool bRedraw) override; - void ScrollToBottom() override; void ShowFilterMenu() override; void UpdateNickList() override; void UpdateOptions() override; diff --git a/src/core/stdmsg/src/stdafx.h b/src/core/stdmsg/src/stdafx.h index 2801630482..fcd2edc8d0 100644 --- a/src/core/stdmsg/src/stdafx.h +++ b/src/core/stdmsg/src/stdafx.h @@ -72,12 +72,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ///////////////////////////////////////////////////////////////////////////////////////// -struct MODULEINFO : public GCModuleInfoBase -{ - HICON hOnlineIcon, hOfflineIcon; - int OnlineIconIndex, OfflineIconIndex; -}; - +struct MODULEINFO : public GCModuleInfoBase {}; struct SESSION_INFO : public GCSessionInfoBase {}; struct LOGSTREAMDATA : public GCLogStreamDataBase {}; diff --git a/src/core/stdmsg/src/tabs.cpp b/src/core/stdmsg/src/tabs.cpp index 008f51d506..d743ce5243 100644 --- a/src/core/stdmsg/src/tabs.cpp +++ b/src/core/stdmsg/src/tabs.cpp @@ -280,7 +280,7 @@ void CTabbedWindow::FixTabIcons(CMsgDialog *pDlg) if (pDlg == CurrPage()) { Window_FreeIcon_IcoLib(m_hwnd); if (g_dat.bUseStatusWinIcon) - Window_SetProtoIcon_IcoLib(m_hwnd, pDlg->GetProto(), pDlg->GetStatus()); + Window_SetProtoIcon_IcoLib(m_hwnd, pDlg->m_szProto, pDlg->GetStatus()); else if (pDlg->isChat()) Window_SetIcon_IcoLib(m_hwnd, g_plugin.getIconHandle(IDI_CHANMGR)); else -- cgit v1.2.3