summaryrefslogtreecommitdiff
path: root/plugins/Scriver/src/chat_window.cpp
diff options
context:
space:
mode:
authorGeorge Hazan <ghazan@miranda.im>2019-09-08 21:28:48 +0300
committerGeorge Hazan <ghazan@miranda.im>2019-09-08 21:28:48 +0300
commit941ff9f0edad23f8f81523b35b022d8bd5d5033a (patch)
treef58c8cf064d2739c78e045f93f3a2aae121d51a3 /plugins/Scriver/src/chat_window.cpp
parent0f6458567c38d7c6827161e0f18c115229660a7a (diff)
.
Diffstat (limited to 'plugins/Scriver/src/chat_window.cpp')
-rw-r--r--plugins/Scriver/src/chat_window.cpp637
1 files changed, 0 insertions, 637 deletions
diff --git a/plugins/Scriver/src/chat_window.cpp b/plugins/Scriver/src/chat_window.cpp
index 1e61766683..b36284b504 100644
--- a/plugins/Scriver/src/chat_window.cpp
+++ b/plugins/Scriver/src/chat_window.cpp
@@ -130,218 +130,6 @@ void CMsgDialog::FixTabIcons()
/////////////////////////////////////////////////////////////////////////////////////////
-void CMsgDialog::MessageDialogResize(int w, int h)
-{
- bool bNick = m_si->iType != GCW_SERVER && m_bNicklistEnabled;
- bool bToolbar = SendMessage(m_hwndParent, CM_GETTOOLBARSTATUS, 0, 0) != 0;
- int hSplitterMinTop = TOOLBAR_HEIGHT + m_minLogBoxHeight, hSplitterMinBottom = m_minEditBoxHeight;
- int toolbarHeight = bToolbar ? TOOLBAR_HEIGHT : 0;
-
- if (h - m_pParent->iSplitterY < hSplitterMinTop)
- m_pParent->iSplitterY = h - hSplitterMinTop;
- if (m_pParent->iSplitterY < hSplitterMinBottom)
- m_pParent->iSplitterY = hSplitterMinBottom;
-
- m_splitterX.Show(bNick);
- if (m_si->iType != GCW_SERVER)
- m_nickList.Show(m_bNicklistEnabled);
- else
- m_nickList.Hide();
-
- if (m_si->iType == GCW_SERVER) {
- m_btnNickList.Enable(false);
- m_btnFilter.Enable(false);
- m_btnChannelMgr.Enable(false);
- }
- else {
- m_btnNickList.Enable(true);
- m_btnFilter.Enable(true);
- if (m_si->iType == GCW_CHATROOM)
- m_btnChannelMgr.Enable(m_si->pMI->bChanMgr);
- }
-
- int toolbarTopY = bToolbar ? h - m_pParent->iSplitterY - toolbarHeight : h - m_pParent->iSplitterY;
- int logBottom = (m_hwndIeview != nullptr) ? toolbarTopY / 2 : toolbarTopY;
-
- HDWP hdwp = BeginDeferWindowPos(5);
- hdwp = DeferWindowPos(hdwp, m_log.GetHwnd(), nullptr, 1, 0, bNick ? w - m_pParent->iSplitterX - 1 : w - 2, logBottom, SWP_NOZORDER);
- hdwp = DeferWindowPos(hdwp, m_nickList.GetHwnd(), nullptr, w - m_pParent->iSplitterX + 2, 0, m_pParent->iSplitterX - 3, toolbarTopY, SWP_NOZORDER);
- hdwp = DeferWindowPos(hdwp, m_splitterX.GetHwnd(), nullptr, w - m_pParent->iSplitterX, 1, 2, toolbarTopY - 1, SWP_NOZORDER);
- hdwp = DeferWindowPos(hdwp, m_splitterY.GetHwnd(), nullptr, 0, h - m_pParent->iSplitterY, w, SPLITTER_HEIGHT, SWP_NOZORDER);
- hdwp = DeferWindowPos(hdwp, m_message.GetHwnd(), nullptr, 1, h - m_pParent->iSplitterY + SPLITTER_HEIGHT, w - 2, m_pParent->iSplitterY - SPLITTER_HEIGHT - 1, SWP_NOZORDER);
- EndDeferWindowPos(hdwp);
-
- SetButtonsPos(m_hwnd, m_hContact, bToolbar);
-
- if (m_hwndIeview != nullptr) {
- IEVIEWWINDOW ieWindow;
- ieWindow.cbSize = sizeof(IEVIEWWINDOW);
- ieWindow.iType = IEW_SETPOS;
- ieWindow.parent = m_hwnd;
- ieWindow.hwnd = m_hwndIeview;
- ieWindow.x = 0;
- ieWindow.y = logBottom + 1;
- ieWindow.cx = bNick ? w - m_pParent->iSplitterX : w;
- ieWindow.cy = logBottom;
- CallService(MS_IEVIEW_WINDOW, 0, (LPARAM)&ieWindow);
- }
- else RedrawWindow(m_log.GetHwnd(), nullptr, nullptr, RDW_INVALIDATE);
-
- RedrawWindow(m_nickList.GetHwnd(), nullptr, nullptr, RDW_INVALIDATE);
- RedrawWindow(m_message.GetHwnd(), nullptr, nullptr, RDW_INVALIDATE);
-}
-
-CMsgDialog::CMsgDialog(SESSION_INFO *si)
- : CScriverWindow(IDD_CHANNEL, si),
- m_splitterX(this, IDC_SPLITTERX),
- m_splitterY(this, IDC_SPLITTERY),
- m_btnOk(this, IDOK)
-{
- m_btnOk.OnClick = Callback(this, &CMsgDialog::onClick_Ok);
- m_btnFilter.OnClick = Callback(this, &CMsgDialog::onClick_Filter);
- m_btnNickList.OnClick = Callback(this, &CMsgDialog::onClick_ShowList);
-
- m_message.OnChange = Callback(this, &CMsgDialog::onChange_Message);
-
- m_splitterX.OnChange = Callback(this, &CMsgDialog::OnSplitterX);
- m_splitterY.OnChange = Callback(this, &CMsgDialog::OnSplitterY);
-}
-
-bool CMsgDialog::OnInitDialog()
-{
- CSuper::OnInitDialog();
- m_si->pDlg = this;
-
- NotifyEvent(MSG_WINDOW_EVT_OPENING);
-
- m_pParent = (ParentWindowData *)GetWindowLongPtr(m_hwndParent, GWLP_USERDATA);
-
- RECT rc;
- GetWindowRect(m_message.GetHwnd(), &rc);
- m_minLogBoxHeight = m_minEditBoxHeight = rc.bottom - rc.top;
- if (m_pParent->iSplitterY == -1)
- m_pParent->iSplitterY = m_minEditBoxHeight;
-
- if (m_pParent->iSplitterX == -1) {
- GetWindowRect(m_nickList.GetHwnd(), &rc);
- m_pParent->iSplitterX = rc.right - rc.left;
- }
-
- SetMinSize(350, m_minLogBoxHeight + TOOLBAR_HEIGHT + m_minEditBoxHeight + 5);
-
- m_message.SendMsg(EM_SUBCLASSED, 0, 0);
- m_message.SendMsg(EM_SETEVENTMASK, 0, ENM_MOUSEEVENTS | ENM_KEYEVENTS | ENM_CHANGE | ENM_REQUESTRESIZE);
-
- int mask = (int)m_log.SendMsg(EM_GETEVENTMASK, 0, 0);
- m_log.SendMsg(EM_SETEVENTMASK, 0, mask | ENM_LINK | ENM_MOUSEEVENTS);
- m_log.SendMsg(EM_LIMITTEXT, sizeof(wchar_t) * 0x7FFFFFFF, 0);
- m_log.SendMsg(EM_AUTOURLDETECT, 1, 0);
-
- if (db_get_b(0, CHAT_MODULE, "UseIEView", 0)) {
- IEVIEWWINDOW ieWindow = { sizeof(ieWindow) };
- ieWindow.iType = IEW_CREATE;
- ieWindow.dwMode = IEWM_CHAT;
- ieWindow.parent = m_hwnd;
- ieWindow.cx = 200;
- ieWindow.cy = 300;
- CallService(MS_IEVIEW_WINDOW, 0, (LPARAM)&ieWindow);
-
- m_hwndIeview = ieWindow.hwnd;
-
- IEVIEWEVENT iee = { sizeof(iee) };
- iee.iType = IEE_CLEAR_LOG;
- iee.hwnd = m_hwndIeview;
- iee.hContact = m_hContact;
- iee.pszProto = m_si->pszModule;
- CallService(MS_IEVIEW_EVENT, 0, (LPARAM)&iee);
- }
-
- m_log.SendMsg(EM_HIDESELECTION, TRUE, 0);
-
- UpdateOptions();
- UpdateStatusBar();
- UpdateTitle();
-
- SendMessage(m_hwndParent, CM_ADDCHILD, (WPARAM)this, 0);
- UpdateNickList();
- NotifyEvent(MSG_WINDOW_EVT_OPEN);
- return true;
-}
-
-void CMsgDialog::OnDestroy()
-{
- NotifyEvent(MSG_WINDOW_EVT_CLOSING);
-
- m_si->pDlg = nullptr;
-
- SendMessage(m_hwndParent, CM_REMOVECHILD, 0, (LPARAM)m_hwnd);
- if (m_hwndIeview != nullptr) {
- IEVIEWWINDOW ieWindow;
- ieWindow.cbSize = sizeof(IEVIEWWINDOW);
- ieWindow.iType = IEW_DESTROY;
- ieWindow.hwnd = m_hwndIeview;
- CallService(MS_IEVIEW_WINDOW, 0, (LPARAM)&ieWindow);
- }
-
- NotifyEvent(MSG_WINDOW_EVT_CLOSE);
-
- CSuper::OnDestroy();
-}
-
-void CMsgDialog::OnSplitterX(CSplitter *pSplitter)
-{
- RECT rc;
- GetClientRect(m_hwnd, &rc);
-
- m_pParent->iSplitterX = rc.right - pSplitter->GetPos() + 1;
- if (m_pParent->iSplitterX < 35)
- m_pParent->iSplitterX = 35;
- if (m_pParent->iSplitterX > rc.right - rc.left - 35)
- m_pParent->iSplitterX = rc.right - rc.left - 35;
-}
-
-void CMsgDialog::OnSplitterY(CSplitter *pSplitter)
-{
- RECT rc;
- GetClientRect(m_hwnd, &rc);
- m_pParent->iSplitterY = rc.bottom - pSplitter->GetPos();
-}
-
-void CMsgDialog::onClick_Ok(CCtrlButton *pButton)
-{
- if (!pButton->Enabled())
- return;
-
- char *pszRtf = m_message.GetRichTextRtf();
- if (pszRtf == nullptr)
- return;
-
- TCmdList *cmdListNew = tcmdlist_last(cmdList);
- while (cmdListNew != nullptr && cmdListNew->temporary) {
- cmdList = tcmdlist_remove(cmdList, cmdListNew);
- cmdListNew = tcmdlist_last(cmdList);
- }
-
- // takes pszRtf to a queue, no leak here
- cmdList = tcmdlist_append(cmdList, pszRtf, 20, FALSE);
-
- CMStringW ptszText(ptrW(mir_utf8decodeW(pszRtf)));
- g_chatApi.DoRtfToTags(ptszText, 0, nullptr);
- ptszText.Trim();
- ptszText.Replace(L"%", L"%%");
-
- if (m_si->pMI->bAckMsg) {
- EnableWindow(m_message.GetHwnd(), FALSE);
- m_message.SendMsg(EM_SETREADONLY, TRUE, 0);
- }
- else m_message.SetText(L"");
-
- EnableWindow(m_btnOk.GetHwnd(), FALSE);
-
- Chat_DoEventHook(m_si, GC_USER_MESSAGE, nullptr, ptszText, 0);
- SetFocus(m_message.GetHwnd());
-}
-
void CMsgDialog::onClick_ShowList(CCtrlButton *pButton)
{
if (!pButton->Enabled() || m_si->iType == GCW_SERVER)
@@ -366,12 +154,6 @@ void CMsgDialog::onClick_Filter(CCtrlButton *pButton)
RedrawLog();
}
-void CMsgDialog::onChange_Message(CCtrlEdit*)
-{
- cmdListCurrent = nullptr;
- m_btnOk.Enable(m_message.GetRichTextLength() != 0);
-}
-
/////////////////////////////////////////////////////////////////////////////////////////
static void __cdecl phase2(SESSION_INFO *si)
@@ -406,21 +188,6 @@ void CMsgDialog::RedrawLog()
else ClearLog();
}
-void CMsgDialog::ScrollToBottom()
-{
- if (GetWindowLongPtr(m_log.GetHwnd(), GWL_STYLE) & WS_VSCROLL) {
- SCROLLINFO si = { sizeof(si) };
- si.fMask = SIF_PAGE | SIF_RANGE | SIF_POS;
- if (GetScrollInfo(m_log.GetHwnd(), SB_VERT, &si)) {
- si.fMask = SIF_POS;
- si.nPos = si.nMax - si.nPage + 1;
- SetScrollInfo(m_log.GetHwnd(), SB_VERT, &si, TRUE);
-
- PostMessage(m_log.GetHwnd(), WM_VSCROLL, MAKEWPARAM(SB_BOTTOM, 0), 0);
- }
- }
-}
-
void CMsgDialog::ShowFilterMenu()
{
HWND hwnd = CreateDialogParam(g_plugin.getInst(), MAKEINTRESOURCE(IDD_FILTER), m_hwnd, FilterWndProc, (LPARAM)this);
@@ -500,57 +267,6 @@ void CMsgDialog::UpdateOptions()
RedrawLog2();
}
-void CMsgDialog::UpdateStatusBar()
-{
- wchar_t szTemp[512];
- mir_snwprintf(szTemp, L"%s : %s", m_si->pMI->ptszModDispName, m_si->ptszStatusbarText ? m_si->ptszStatusbarText : L"");
-
- StatusBarData sbd;
- sbd.iItem = 0;
- sbd.iFlags = SBDF_TEXT | SBDF_ICON;
- sbd.hIcon = m_si->wStatus == ID_STATUS_ONLINE ? m_si->pMI->hOnlineIcon : m_si->pMI->hOfflineIcon;
- sbd.pszText = szTemp;
- SendMessage(m_hwndParent, CM_UPDATESTATUSBAR, (WPARAM)&sbd, (LPARAM)m_hwnd);
-
- sbd.iItem = 1;
- sbd.hIcon = nullptr;
- sbd.pszText = L"";
- SendMessage(m_hwndParent, CM_UPDATESTATUSBAR, (WPARAM)&sbd, (LPARAM)m_hwnd);
-
- Srmm_SetIconFlags(m_hContact, SRMM_MODULE, 0, 0);
-}
-
-void CMsgDialog::UpdateTitle()
-{
- TitleBarData tbd = {};
- tbd.hIcon = (m_si->wStatus == ID_STATUS_ONLINE) ? m_si->pMI->hOnlineIcon : m_si->pMI->hOfflineIcon;
- tbd.hIconBig = (m_si->wStatus == ID_STATUS_ONLINE) ? m_si->pMI->hOnlineIconBig : m_si->pMI->hOfflineIconBig;
- tbd.hIconNot = (m_si->wState & (GC_EVENT_HIGHLIGHT | STATE_TALK)) ? g_plugin.getIcon(IDI_OVERLAY) : nullptr;
-
- int nUsers = m_si->getUserList().getCount();
- wchar_t szTemp[512];
- switch (m_si->iType) {
- case GCW_CHATROOM:
- mir_snwprintf(szTemp,
- (nUsers == 1) ? TranslateT("%s: chat room (%u user)") : TranslateT("%s: chat room (%u users)"),
- m_si->ptszName, nUsers);
- break;
- case GCW_PRIVMESS:
- mir_snwprintf(szTemp,
- (nUsers == 1) ? TranslateT("%s: message session") : TranslateT("%s: message session (%u users)"),
- m_si->ptszName, nUsers);
- break;
- case GCW_SERVER:
- mir_snwprintf(szTemp, L"%s: Server", m_si->ptszName);
- break;
- }
- tbd.iFlags = TBDF_TEXT | TBDF_ICON;
- tbd.pszText = szTemp;
- SendMessage(m_hwndParent, CM_UPDATETITLEBAR, (WPARAM)&tbd, (LPARAM)m_hwnd);
-
- SendMessage(m_hwnd, DM_UPDATETABCONTROL, 0, 0);
-}
-
/////////////////////////////////////////////////////////////////////////////////////////
INT_PTR CALLBACK CMsgDialog::FilterWndProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
@@ -625,149 +341,6 @@ INT_PTR CALLBACK CMsgDialog::FilterWndProc(HWND hwndDlg, UINT uMsg, WPARAM wPara
/////////////////////////////////////////////////////////////////////////////////////////
-LRESULT CMsgDialog::WndProc_Message(UINT msg, WPARAM wParam, LPARAM lParam)
-{
- bool isShift = (GetKeyState(VK_SHIFT) & 0x8000) != 0;
- bool isCtrl = (GetKeyState(VK_CONTROL) & 0x8000) != 0;
- bool isAlt = (GetKeyState(VK_MENU) & 0x8000) != 0;
-
- int result = InputAreaShortcuts(m_message.GetHwnd(), msg, wParam, lParam);
- if (result != -1)
- return result;
-
- switch (msg) {
- case WM_MOUSEWHEEL:
- if ((GetWindowLongPtr(m_message.GetHwnd(), GWL_STYLE) & WS_VSCROLL) == 0)
- m_log.SendMsg(WM_MOUSEWHEEL, wParam, lParam);
-
- m_iLastEnterTime = 0;
- return TRUE;
-
- case EM_REPLACESEL:
- PostMessage(m_message.GetHwnd(), EM_ACTIVATE, 0, 0);
- break;
-
- case EM_ACTIVATE:
- SetActiveWindow(m_hwnd);
- break;
-
- case WM_KEYDOWN:
- if (wParam == VK_RETURN) {
- if (CheckSend())
- return 0;
- }
- else m_iLastEnterTime = 0;
-
- if (wParam == VK_TAB && isShift && !isCtrl) { // SHIFT-TAB (go to nick list)
- SetFocus(m_nickList.GetHwnd());
- return TRUE;
- }
-
- if (wParam == VK_TAB && !isCtrl && !isShift) { //tab-autocomplete
- m_message.SendMsg(WM_SETREDRAW, FALSE, 0);
- TabAutoComplete();
- m_message.SendMsg(WM_SETREDRAW, TRUE, 0);
- RedrawWindow(m_nickList.GetHwnd(), nullptr, nullptr, RDW_INVALIDATE);
- return 0;
- }
- if (wParam != VK_RIGHT && wParam != VK_LEFT) {
- mir_free(m_wszSearchQuery);
- m_wszSearchQuery = nullptr;
- mir_free(m_wszSearchResult);
- m_wszSearchResult = nullptr;
- }
-
- if (ProcessHotkeys(wParam, isShift, isCtrl, isAlt))
- return TRUE;
-
- if (wParam == 0x4e && isCtrl && !isAlt) { // ctrl-n (nicklist)
- if (m_btnNickList.Enabled())
- m_btnNickList.Click();
- return TRUE;
- }
-
- if (wParam == 0x48 && isCtrl && !isAlt) { // ctrl-h (history)
- m_btnHistory.Click();
- return TRUE;
- }
-
- if (wParam == 0x4f && isCtrl && !isAlt) { // ctrl-o (options)
- if (m_btnChannelMgr.Enabled())
- m_btnChannelMgr.Click();
- return TRUE;
- }
-
- if (((wParam == VK_INSERT && isShift) || (wParam == 'V' && isCtrl)) && !isAlt) { // ctrl-v (paste clean text)
- m_message.SendMsg(EM_PASTESPECIAL, CF_UNICODETEXT, 0);
- return TRUE;
- }
-
- if (wParam == VK_NEXT || wParam == VK_PRIOR) {
- m_log.SendMsg(msg, wParam, lParam);
- return TRUE;
- }
- break;
-
- case WM_LBUTTONDOWN:
- case WM_MBUTTONDOWN:
- case WM_KILLFOCUS:
- m_iLastEnterTime = 0;
- break;
-
- case WM_CONTEXTMENU:
- InputAreaContextMenu(m_message.GetHwnd(), wParam, lParam, m_hContact);
- return TRUE;
-
- case WM_KEYUP:
- case WM_LBUTTONUP:
- case WM_RBUTTONUP:
- case WM_MBUTTONUP:
- RefreshButtonStatus();
- break;
-
- case WM_DESTROY:
- mir_free(m_wszSearchQuery);
- mir_free(m_wszSearchResult);
- return 0;
- }
-
- return CSuper::WndProc_Message(msg, wParam, lParam);
-}
-
-/////////////////////////////////////////////////////////////////////////////////////////
-
-LRESULT CMsgDialog::WndProc_Log(UINT msg, WPARAM wParam, LPARAM lParam)
-{
- int result = InputAreaShortcuts(m_log.GetHwnd(), msg, wParam, lParam);
- if (result != -1)
- return result;
-
- CHARRANGE sel;
-
- switch (msg) {
- case WM_MEASUREITEM:
- MeasureMenuItem(wParam, lParam);
- return TRUE;
-
- case WM_DRAWITEM:
- return DrawMenuItem(wParam, lParam);
-
- case WM_LBUTTONUP:
- SendMessage(m_log.GetHwnd(), EM_EXGETSEL, 0, (LPARAM)&sel);
- if (sel.cpMin != sel.cpMax) {
- SendMessage(m_log.GetHwnd(), WM_COPY, 0, 0);
- sel.cpMin = sel.cpMax;
- SendMessage(m_log.GetHwnd(), EM_EXSETSEL, 0, (LPARAM)&sel);
- }
- SetFocus(m_message.GetHwnd());
- break;
- }
-
- return CSuper::WndProc_Log(msg, wParam, lParam);
-}
-
-/////////////////////////////////////////////////////////////////////////////////////////
-
LRESULT CMsgDialog::WndProc_Nicklist(UINT msg, WPARAM wParam, LPARAM lParam)
{
int result = InputAreaShortcuts(m_nickList.GetHwnd(), msg, wParam, lParam);
@@ -854,212 +427,6 @@ LRESULT CMsgDialog::WndProc_Nicklist(UINT msg, WPARAM wParam, LPARAM lParam)
/////////////////////////////////////////////////////////////////////////////////////////
-INT_PTR CMsgDialog::DlgProc(UINT uMsg, WPARAM wParam, LPARAM lParam)
-{
- RECT rc;
- POINT pt;
- HICON hIcon;
- TabControlData tcd;
-
- switch (uMsg) {
- case DM_SWITCHINFOBAR:
- case DM_SWITCHTOOLBAR:
- Resize();
- break;
-
- case WM_SIZE:
- if (wParam == SIZE_MAXIMIZED)
- ScrollToBottom();
-
- if (IsIconic(m_hwnd)) break;
-
- if (wParam == SIZE_RESTORED || wParam == SIZE_MAXIMIZED) {
- GetClientRect(m_hwnd, &rc);
- if (rc.right && rc.bottom)
- MessageDialogResize(rc.right, rc.bottom);
- }
- break;
-
- case DM_UPDATETABCONTROL:
- tcd.iFlags = TCDF_TEXT;
- tcd.pszText = m_si->ptszName;
- SendMessage(m_hwndParent, CM_UPDATETABCONTROL, (WPARAM)&tcd, (LPARAM)m_hwnd);
- __fallthrough;
-
- case DM_ACTIVATE:
- if (m_si->wState & STATE_TALK) {
- m_si->wState &= ~STATE_TALK;
- db_set_w(m_hContact, m_si->pszModule, "ApparentMode", 0);
- }
-
- if (m_si->wState & GC_EVENT_HIGHLIGHT) {
- m_si->wState &= ~GC_EVENT_HIGHLIGHT;
-
- if (g_clistApi.pfnGetEvent(m_hContact, 0))
- g_clistApi.pfnRemoveEvent(m_hContact, GC_FAKE_EVENT);
- }
-
- FixTabIcons();
- if (!m_si->pDlg) {
- ShowRoom(m_si);
- SendMessage(m_hwnd, WM_MOUSEACTIVATE, 0, 0);
- }
- break;
-
- case WM_CTLCOLORLISTBOX:
- SetBkColor((HDC)wParam, g_Settings.crUserListBGColor);
- return (INT_PTR)g_chatApi.hListBkgBrush;
-
- case WM_MEASUREITEM:
- if (!MeasureMenuItem(wParam, lParam)) {
- MEASUREITEMSTRUCT *mis = (MEASUREITEMSTRUCT *)lParam;
- if (mis->CtlType == ODT_MENU)
- return Menu_MeasureItem(lParam);
-
- int ih = Chat_GetTextPixelSize(L"AQGgl'", g_Settings.UserListFont, false);
- int ih2 = Chat_GetTextPixelSize(L"AQGg'", g_Settings.UserListHeadingsFont, false);
- int font = ih > ih2 ? ih : ih2;
- int height = db_get_b(0, CHAT_MODULE, "NicklistRowDist", 12);
- // make sure we have space for icon!
- if (db_get_b(0, CHAT_MODULE, "ShowContactStatus", 0))
- font = font > 16 ? font : 16;
- mis->itemHeight = height > font ? height : font;
- }
- return TRUE;
-
- case WM_DRAWITEM:
- if (!DrawMenuItem(wParam, lParam)) {
- DRAWITEMSTRUCT *dis = (DRAWITEMSTRUCT *)lParam;
- if (dis->CtlType == ODT_MENU)
- return Menu_DrawItem(lParam);
-
- if (dis->CtlID == IDC_SRMM_NICKLIST) {
- int index = dis->itemID;
- USERINFO *ui = g_chatApi.SM_GetUserFromIndex(m_si->ptszID, m_si->pszModule, index);
- if (ui) {
- int x_offset = 2;
-
- int height = dis->rcItem.bottom - dis->rcItem.top;
- if (height & 1)
- height++;
-
- int offset = (height == 10) ? 0 : height / 2 - 5;
- HFONT hFont = (ui->iStatusEx == 0) ? g_Settings.UserListFont : g_Settings.UserListHeadingsFont;
- HFONT hOldFont = (HFONT)SelectObject(dis->hDC, hFont);
- SetBkMode(dis->hDC, TRANSPARENT);
-
- if (dis->itemAction == ODA_FOCUS && dis->itemState & ODS_SELECTED)
- FillRect(dis->hDC, &dis->rcItem, g_chatApi.hListSelectedBkgBrush);
- else //if (dis->itemState & ODS_INACTIVE)
- FillRect(dis->hDC, &dis->rcItem, g_chatApi.hListBkgBrush);
-
- if (g_Settings.bShowContactStatus && g_Settings.bContactStatusFirst && ui->ContactStatus) {
- hIcon = Skin_LoadProtoIcon(m_si->pszModule, ui->ContactStatus);
- DrawIconEx(dis->hDC, x_offset, dis->rcItem.top + offset - 3, hIcon, 16, 16, 0, nullptr, DI_NORMAL);
- IcoLib_ReleaseIcon(hIcon);
- x_offset += 18;
- }
- DrawIconEx(dis->hDC, x_offset, dis->rcItem.top + offset, g_chatApi.SM_GetStatusIcon(m_si, ui), 10, 10, 0, nullptr, DI_NORMAL);
- x_offset += 12;
- if (g_Settings.bShowContactStatus && !g_Settings.bContactStatusFirst && ui->ContactStatus) {
- hIcon = Skin_LoadProtoIcon(m_si->pszModule, ui->ContactStatus);
- DrawIconEx(dis->hDC, x_offset, dis->rcItem.top + offset - 3, hIcon, 16, 16, 0, nullptr, DI_NORMAL);
- IcoLib_ReleaseIcon(hIcon);
- x_offset += 18;
- }
-
- SetTextColor(dis->hDC, ui->iStatusEx == 0 ? g_Settings.crUserListColor : g_Settings.crUserListHeadingsColor);
- TextOut(dis->hDC, dis->rcItem.left + x_offset, dis->rcItem.top, ui->pszNick, (int)mir_wstrlen(ui->pszNick));
- SelectObject(dis->hDC, hOldFont);
- }
- return TRUE;
- }
- }
- break;
-
- case WM_ACTIVATE:
- if (LOWORD(wParam) != WA_ACTIVE)
- break;
-
- __fallthrough;
- case WM_MOUSEACTIVATE:
- if (uMsg != WM_ACTIVATE)
- SetFocus(m_message.GetHwnd());
-
- g_chatApi.SetActiveSession(m_si);
-
- if (db_get_w(m_hContact, m_si->pszModule, "ApparentMode", 0) != 0)
- db_set_w(m_hContact, m_si->pszModule, "ApparentMode", 0);
- if (g_clistApi.pfnGetEvent(m_hContact, 0))
- g_clistApi.pfnRemoveEvent(m_hContact, GC_FAKE_EVENT);
- break;
-
- case WM_NOTIFY:
- {
- LPNMHDR pNmhdr = (LPNMHDR)lParam;
- switch (pNmhdr->code) {
- case EN_MSGFILTER:
- if (pNmhdr->idFrom == IDC_SRMM_LOG && ((MSGFILTER *)lParam)->msg == WM_RBUTTONUP) {
- SetWindowLongPtr(m_hwnd, DWLP_MSGRESULT, TRUE);
- return TRUE;
- }
- break;
-
- case TTN_NEEDTEXT:
- if (pNmhdr->idFrom == (UINT_PTR)m_nickList.GetHwnd()) {
- LPNMTTDISPINFO lpttd = (LPNMTTDISPINFO)lParam;
- SESSION_INFO* parentdat = (SESSION_INFO*)GetWindowLongPtr(m_hwnd, GWLP_USERDATA);
-
- POINT p;
- GetCursorPos(&p);
- ScreenToClient(m_nickList.GetHwnd(), &p);
- int item = LOWORD(m_nickList.SendMsg(LB_ITEMFROMPOINT, 0, MAKELPARAM(p.x, p.y)));
- USERINFO *ui = g_chatApi.SM_GetUserFromIndex(parentdat->ptszID, parentdat->pszModule, item);
- if (ui != nullptr) {
- static wchar_t ptszBuf[1024];
- mir_snwprintf(ptszBuf, L"%s: %s\r\n%s: %s\r\n%s: %s",
- TranslateT("Nickname"), ui->pszNick,
- TranslateT("Unique ID"), ui->pszUID,
- TranslateT("Status"), g_chatApi.TM_WordToString(parentdat->pStatuses, ui->Status));
- lpttd->lpszText = ptszBuf;
- }
- }
- break;
- }
- }
- break;
-
- case WM_KEYDOWN:
- SetFocus(m_message.GetHwnd());
- break;
-
- case WM_LBUTTONDBLCLK:
- if (LOWORD(lParam) < 30)
- ScrollToBottom();
- else
- SendMessage(m_hwndParent, WM_SYSCOMMAND, SC_MINIMIZE, 0);
- break;
-
- case WM_LBUTTONDOWN:
- SendMessage(m_hwndParent, WM_LBUTTONDOWN, wParam, lParam);
- return TRUE;
-
- case DM_GETCONTEXTMENU:
- SetWindowLongPtr(m_hwnd, DWLP_MSGRESULT, (LPARAM)Menu_BuildContactMenu(m_hContact));
- return TRUE;
-
- case WM_CONTEXTMENU:
- if (m_hwndParent == (HWND)wParam) {
- HMENU hMenu = Menu_BuildContactMenu(m_hContact);
- GetCursorPos(&pt);
- TrackPopupMenu(hMenu, 0, pt.x, pt.y, 0, m_hwnd, nullptr);
- DestroyMenu(hMenu);
- }
- break;
- }
- return CSuper::DlgProc(uMsg, wParam, lParam);
-}
-
void ShowRoom(SESSION_INFO *si)
{
if (si == nullptr)
@@ -1068,13 +435,9 @@ void ShowRoom(SESSION_INFO *si)
// Do we need to create a window?
CMsgDialog *pDlg;
if (si->pDlg == nullptr) {
- HWND hParent = GetParentWindow(si->hContact, true);
-
pDlg = new CMsgDialog(si);
- pDlg->SetParent(hParent);
pDlg->Show();
- pDlg->m_pParent = (ParentWindowData*)GetWindowLongPtr(hParent, GWLP_USERDATA);
si->pDlg = pDlg;
}
else pDlg = si->pDlg;