summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--plugins/TabSRMM/res/chat.rc5
-rw-r--r--plugins/TabSRMM/src/TSButton.cpp8
-rw-r--r--plugins/TabSRMM/src/buttonbar.h11
-rw-r--r--plugins/TabSRMM/src/buttonsbar.cpp88
-rw-r--r--plugins/TabSRMM/src/chat/chat.h12
-rw-r--r--plugins/TabSRMM/src/chat/chat_resource.h4
-rw-r--r--plugins/TabSRMM/src/chat/log.cpp13
-rw-r--r--plugins/TabSRMM/src/chat/main.cpp4
-rw-r--r--plugins/TabSRMM/src/chat/services.cpp17
-rw-r--r--plugins/TabSRMM/src/chat/tools.cpp14
-rw-r--r--plugins/TabSRMM/src/chat/window.cpp1358
-rw-r--r--plugins/TabSRMM/src/contactcache.cpp4
-rw-r--r--plugins/TabSRMM/src/contactcache.h8
-rw-r--r--plugins/TabSRMM/src/container.cpp70
-rw-r--r--plugins/TabSRMM/src/controls.cpp32
-rw-r--r--plugins/TabSRMM/src/eventpopups.cpp10
-rw-r--r--plugins/TabSRMM/src/functions.h19
-rw-r--r--plugins/TabSRMM/src/generic_msghandlers.cpp504
-rw-r--r--plugins/TabSRMM/src/generic_msghandlers.h41
-rw-r--r--plugins/TabSRMM/src/globals.cpp6
-rw-r--r--plugins/TabSRMM/src/globals.h2
-rw-r--r--plugins/TabSRMM/src/hotkeyhandler.cpp18
-rw-r--r--plugins/TabSRMM/src/infopanel.cpp328
-rw-r--r--plugins/TabSRMM/src/infopanel.h8
-rw-r--r--plugins/TabSRMM/src/mim.cpp4
-rw-r--r--plugins/TabSRMM/src/msgdialog.cpp2391
-rw-r--r--plugins/TabSRMM/src/msgdlgutils.cpp852
-rw-r--r--plugins/TabSRMM/src/msgdlgutils.h42
-rw-r--r--plugins/TabSRMM/src/msglog.cpp81
-rw-r--r--plugins/TabSRMM/src/msgs.cpp57
-rw-r--r--plugins/TabSRMM/src/msgs.h178
-rw-r--r--plugins/TabSRMM/src/selectcontainer.cpp2
-rw-r--r--plugins/TabSRMM/src/sendqueue.cpp108
-rw-r--r--plugins/TabSRMM/src/sendqueue.h28
-rw-r--r--plugins/TabSRMM/src/sidebar.cpp66
-rw-r--r--plugins/TabSRMM/src/sidebar.h24
-rw-r--r--plugins/TabSRMM/src/stdafx.h4
-rw-r--r--plugins/TabSRMM/src/tabctrl.cpp46
-rw-r--r--plugins/TabSRMM/src/taskbar.cpp30
-rw-r--r--plugins/TabSRMM/src/taskbar.h12
-rw-r--r--plugins/TabSRMM/src/templates.cpp20
-rw-r--r--plugins/TabSRMM/src/themeio.cpp2
-rw-r--r--plugins/TabSRMM/src/themes.cpp176
-rw-r--r--plugins/TabSRMM/src/themes.h18
-rw-r--r--plugins/TabSRMM/src/userprefs.cpp67
-rw-r--r--plugins/TabSRMM/src/utils.cpp32
-rw-r--r--plugins/TabSRMM/src/utils.h12
-rw-r--r--plugins/TabSRMM/src/version.h6
48 files changed, 3346 insertions, 3496 deletions
diff --git a/plugins/TabSRMM/res/chat.rc b/plugins/TabSRMM/res/chat.rc
index 83d84cb11e..b19880376f 100644
--- a/plugins/TabSRMM/res/chat.rc
+++ b/plugins/TabSRMM/res/chat.rc
@@ -1,6 +1,7 @@
// Microsoft Visual C++ generated resource script.
//
#include "..\src\chat\chat_resource.h"
+#include "..\src\resource.h"
#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
@@ -30,8 +31,8 @@ FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGIN
CONTROL "",IDC_SPLITTERX,"Static",SS_ENHMETAFILE,172,23,10,73
CONTROL "",IDC_SPLITTERY,"Static",SS_ENHMETAFILE,0,132,251,6
- CONTROL "",IDC_CHAT_MESSAGE,"RichEdit50W",WS_VSCROLL | WS_TABSTOP | 0x1144,0,128,127,12,WS_EX_STATICEDGE
- CONTROL "",IDC_CHAT_LOG,"RichEdit50W",WS_VSCROLL | 0x844,8,23,164,72,WS_EX_STATICEDGE
+ CONTROL "",IDC_MESSAGE,"RichEdit50W",WS_VSCROLL | WS_TABSTOP | 0x1144,0,128,127,12,WS_EX_STATICEDGE
+ CONTROL "",IDC_LOG,"RichEdit50W",WS_VSCROLL | 0x844,8,23,164,72,WS_EX_STATICEDGE
LISTBOX IDC_LIST,182,23,69,73,LBS_MULTIPLESEL | LBS_OWNERDRAWFIXED | LBS_NOINTEGRALHEIGHT | LBS_EXTENDEDSEL | LBS_NODATA | NOT WS_BORDER | WS_VSCROLL | WS_TABSTOP,WS_EX_STATICEDGE
CONTROL "",IDC_PANELSPLITTER,"Static",SS_ENHMETAFILE,0,32,252,1,WS_EX_TRANSPARENT
END
diff --git a/plugins/TabSRMM/src/TSButton.cpp b/plugins/TabSRMM/src/TSButton.cpp
index 8a0825003b..c43e67ece5 100644
--- a/plugins/TabSRMM/src/TSButton.cpp
+++ b/plugins/TabSRMM/src/TSButton.cpp
@@ -97,7 +97,7 @@ static void PaintWorker(TSButtonCtrl *ctl, HDC hdcPaint)
if (ctl == NULL || hdcPaint == NULL)
return;
- TWindowData *dat = (TWindowData*)GetWindowLongPtr(GetParent(ctl->hwnd), GWLP_USERDATA);
+ CSrmmWindow *dat = (CSrmmWindow*)GetWindowLongPtr(GetParent(ctl->hwnd), GWLP_USERDATA);
if (dat == NULL)
return;
@@ -154,7 +154,7 @@ static void PaintWorker(TSButtonCtrl *ctl, HDC hdcPaint)
GetWindowRect(ctl->hwnd, &rcWin);
POINT pt;
pt.x = rcWin.left;
- ScreenToClient(dat->hwnd, &pt);
+ ScreenToClient(dat->GetHwnd(), &pt);
BitBlt(hdcMem, 0, 0, rcClient.right - rcClient.left, rcClient.bottom - rcClient.top,
dat->pContainer->cachedToolbarDC, pt.x, 1, SRCCOPY);
}
@@ -420,7 +420,7 @@ static LRESULT CALLBACK TSButtonWndProc(HWND hwndDlg, UINT msg, WPARAM wParam, L
case WM_MBUTTONUP:
if (bct->sitem)
if (bct->sitem->getDat())
- SendMessage(bct->sitem->getDat()->hwnd, WM_CLOSE, 1, 0);
+ SendMessage(bct->sitem->getDat()->GetHwnd(), WM_CLOSE, 1, 0);
break;
case WM_LBUTTONDOWN:
@@ -451,7 +451,7 @@ static LRESULT CALLBACK TSButtonWndProc(HWND hwndDlg, UINT msg, WPARAM wParam, L
case WM_LBUTTONUP:
if (bct->sitem) {
if (bct->sitem->testCloseButton() != -1) {
- SendMessage(bct->sitem->getDat()->hwnd, WM_CLOSE, 1, 0);
+ SendMessage(bct->sitem->getDat()->GetHwnd(), WM_CLOSE, 1, 0);
return TRUE;
}
}
diff --git a/plugins/TabSRMM/src/buttonbar.h b/plugins/TabSRMM/src/buttonbar.h
index b29538554e..d0863d6b65 100644
--- a/plugins/TabSRMM/src/buttonbar.h
+++ b/plugins/TabSRMM/src/buttonbar.h
@@ -1,17 +1,6 @@
#ifndef _BUTTONSBAR_H
#define _BUTTONSBAR_H
-struct TWindowData;
-
void CB_InitCustomButtons();
-void BB_InitDlgButtons(TWindowData *dat);
-void BB_RefreshTheme(const TWindowData *dat);
-BOOL BB_SetButtonsPos(TWindowData *dat);
-void BB_RedrawButtons(TWindowData *dat);
-
-void CB_DestroyAllButtons(HWND hwndDlg);
-void CB_DestroyButton(HWND hwndDlg, TWindowData *dat, DWORD dwButtonCID, DWORD dwFlags);
-void CB_ChangeButton(HWND hwndDlg, TWindowData *dat, CustomButtonData *cbd);
-
#endif
diff --git a/plugins/TabSRMM/src/buttonsbar.cpp b/plugins/TabSRMM/src/buttonsbar.cpp
index 0c9c79ba8f..8af676e0e0 100644
--- a/plugins/TabSRMM/src/buttonsbar.cpp
+++ b/plugins/TabSRMM/src/buttonsbar.cpp
@@ -140,42 +140,36 @@ static int CB_InitDefaultButtons(WPARAM, LPARAM)
return 0;
}
-void BB_InitDlgButtons(TWindowData *dat)
+void CTabBaseDlg::BB_InitDlgButtons()
{
- if (dat == 0)
- return;
- HWND hdlg = dat->hwnd;
- if (hdlg == 0)
- return;
-
BYTE gap = DPISCALEX_S(db_get_b(NULL, SRMSGMOD, "ButtonsBarGap", 1));
RECT rcSplitter;
- GetWindowRect(GetDlgItem(hdlg, (dat->bType == SESSIONTYPE_IM) ? IDC_SPLITTER : IDC_SPLITTERY), &rcSplitter);
+ GetWindowRect(GetDlgItem(m_hwnd, (bType == SESSIONTYPE_IM) ? IDC_SPLITTER : IDC_SPLITTERY), &rcSplitter);
POINT ptSplitter = { 0, rcSplitter.top };
- ScreenToClient(hdlg, &ptSplitter);
+ ScreenToClient(m_hwnd, &ptSplitter);
RECT rect;
- GetClientRect(hdlg, &rect);
+ GetClientRect(m_hwnd, &rect);
- dat->bbLSideWidth = dat->bbRSideWidth = 0;
+ bbLSideWidth = bbRSideWidth = 0;
- Srmm_CreateToolbarIcons(hdlg, (dat->bType == SESSIONTYPE_IM) ? BBBF_ISIMBUTTON : BBBF_ISCHATBUTTON);
+ Srmm_CreateToolbarIcons(m_hwnd, (bType == SESSIONTYPE_IM) ? BBBF_ISIMBUTTON : BBBF_ISCHATBUTTON);
CustomButtonData *cbd;
for (int i = 0; cbd = Srmm_GetNthButton(i); i++) {
- HWND hwndButton = GetDlgItem(hdlg, cbd->m_dwButtonCID);
+ HWND hwndButton = GetDlgItem(m_hwnd, cbd->m_dwButtonCID);
if (hwndButton == NULL)
continue;
if (!cbd->m_bHidden) {
if (cbd->m_bRSided)
- dat->bbRSideWidth += cbd->m_iButtonWidth + gap;
+ bbRSideWidth += cbd->m_iButtonWidth + gap;
else
- dat->bbLSideWidth += cbd->m_iButtonWidth + gap;
+ bbLSideWidth += cbd->m_iButtonWidth + gap;
}
if (!cbd->m_bHidden && !cbd->m_bCanBeHidden)
- dat->iButtonBarReallyNeeds += cbd->m_iButtonWidth + gap;
+ iButtonBarReallyNeeds += cbd->m_iButtonWidth + gap;
if (cbd->m_bSeparator)
continue;
@@ -186,47 +180,47 @@ void BB_InitDlgButtons(TWindowData *dat)
SendMessage(hwndButton, BUTTONSETARROW, (cbd->m_dwButtonCID == IDOK) ? IDC_SENDMENU : cbd->m_dwArrowCID, 0);
SendMessage(hwndButton, BUTTONSETASTHEMEDBTN, CSkin::IsThemed(), 0);
- SendMessage(hwndButton, BUTTONSETCONTAINER, (LPARAM)dat->pContainer, 0);
+ SendMessage(hwndButton, BUTTONSETCONTAINER, (LPARAM)pContainer, 0);
SendMessage(hwndButton, BUTTONSETASTOOLBARBUTTON, TRUE, 0);
}
}
-void BB_RedrawButtons(TWindowData *dat)
+void CTabBaseDlg::BB_RedrawButtons()
{
- Srmm_RedrawToolbarIcons(dat->hwnd);
+ Srmm_RedrawToolbarIcons(m_hwnd);
- HWND hwndToggleSideBar = GetDlgItem(dat->hwnd, IDC_TOGGLESIDEBAR);
+ HWND hwndToggleSideBar = GetDlgItem(m_hwnd, IDC_TOGGLESIDEBAR);
if (hwndToggleSideBar && IsWindow(hwndToggleSideBar))
InvalidateRect(hwndToggleSideBar, 0, TRUE);
}
-void BB_RefreshTheme(const TWindowData *dat)
+void CTabBaseDlg::BB_RefreshTheme()
{
CustomButtonData *cbd;
for (int i = 0; cbd = Srmm_GetNthButton(i); i++)
- SendDlgItemMessage(dat->hwnd, cbd->m_dwButtonCID, WM_THEMECHANGED, 0, 0);
+ SendDlgItemMessage(m_hwnd, cbd->m_dwButtonCID, WM_THEMECHANGED, 0, 0);
}
-BOOL BB_SetButtonsPos(TWindowData *dat)
+BOOL CTabBaseDlg::BB_SetButtonsPos()
{
- if (!dat || !IsWindowVisible(dat->hwnd))
+ if (!m_hwnd || !IsWindowVisible(m_hwnd))
return 0;
- HWND hwnd = dat->hwnd;
+ HWND hwnd = m_hwnd;
RECT rect;
HWND hwndButton = 0;
BYTE gap = DPISCALEX_S(db_get_b(NULL, SRMSGMOD, "ButtonsBarGap", 1));
- bool showToolbar = !(dat->pContainer->dwFlags & CNT_HIDETOOLBAR);
- bool bBottomToolbar = (dat->pContainer->dwFlags & CNT_BOTTOMTOOLBAR) != 0;
+ bool showToolbar = !(pContainer->dwFlags & CNT_HIDETOOLBAR);
+ bool bBottomToolbar = (pContainer->dwFlags & CNT_BOTTOMTOOLBAR) != 0;
HWND hwndToggleSideBar = GetDlgItem(hwnd, IDC_TOGGLESIDEBAR);
- ShowWindow(hwndToggleSideBar, (showToolbar && dat->pContainer->SideBar->isActive()) ? SW_SHOW : SW_HIDE);
+ ShowWindow(hwndToggleSideBar, (showToolbar && pContainer->SideBar->isActive()) ? SW_SHOW : SW_HIDE);
HDWP hdwp = BeginDeferWindowPos(Srmm_GetButtonCount() + 1);
RECT rcSplitter;
- GetWindowRect(GetDlgItem(hwnd, (dat->bType == SESSIONTYPE_IM) ? IDC_SPLITTER : IDC_SPLITTERY), &rcSplitter);
+ GetWindowRect(GetDlgItem(hwnd, (bType == SESSIONTYPE_IM) ? IDC_SPLITTER : IDC_SPLITTERY), &rcSplitter);
POINT ptSplitter = { 0, rcSplitter.top };
ScreenToClient(hwnd, &ptSplitter);
@@ -234,15 +228,15 @@ BOOL BB_SetButtonsPos(TWindowData *dat)
GetClientRect(hwnd, &rect);
int splitterY = (!bBottomToolbar) ? ptSplitter.y - DPISCALEY_S(1) : rect.bottom;
- int tempL = dat->bbLSideWidth, tempR = dat->bbRSideWidth;
+ int tempL = bbLSideWidth, tempR = bbRSideWidth;
int lwidth = 0, rwidth = 0;
- int iOff = DPISCALEY_S((PluginConfig.m_DPIscaleY > 1.0) ? (dat->bType == SESSIONTYPE_IM ? 22 : 23) : 22);
+ int iOff = DPISCALEY_S((PluginConfig.m_DPIscaleY > 1.0) ? (bType == SESSIONTYPE_IM ? 22 : 23) : 22);
int foravatar = 0;
- if ((rect.bottom - ptSplitter.y - (rcSplitter.bottom - rcSplitter.top) /*- DPISCALEY(2)*/ - (bBottomToolbar ? DPISCALEY_S(24) : 0) < dat->pic.cy - DPISCALEY_S(2)) && dat->bShowAvatar && !PluginConfig.m_bAlwaysFullToolbarWidth)
- foravatar = dat->pic.cx + gap;
+ if ((rect.bottom - ptSplitter.y - (rcSplitter.bottom - rcSplitter.top) /*- DPISCALEY(2)*/ - (bBottomToolbar ? DPISCALEY_S(24) : 0) < pic.cy - DPISCALEY_S(2)) && bShowAvatar && !PluginConfig.m_bAlwaysFullToolbarWidth)
+ foravatar = pic.cx + gap;
- if ((dat->pContainer->dwFlags & CNT_SIDEBAR) && (dat->pContainer->SideBar->getFlags() & CSideBar::SIDEBARORIENTATION_LEFT)) {
+ if ((pContainer->dwFlags & CNT_SIDEBAR) && (pContainer->SideBar->getFlags() & CSideBar::SIDEBARORIENTATION_LEFT)) {
if (NULL != hwndToggleSideBar) /* Wine fix. */
hdwp = DeferWindowPos(hdwp, hwndToggleSideBar, NULL, 4, 2 + splitterY - iOff, 0, 0, SWP_NOZORDER | SWP_NOSIZE);
lwidth += 10;
@@ -254,7 +248,7 @@ BOOL BB_SetButtonsPos(TWindowData *dat)
if (cbd->m_bRSided) // filter only left buttons
continue;
- if (((dat->bType == SESSIONTYPE_IM) && cbd->m_bIMButton) || ((dat->bType == SESSIONTYPE_CHAT) && cbd->m_bChatButton)) {
+ if (((bType == SESSIONTYPE_IM) && cbd->m_bIMButton) || ((bType == SESSIONTYPE_CHAT) && cbd->m_bChatButton)) {
hwndButton = GetDlgItem(hwnd, cbd->m_dwButtonCID);
if (!showToolbar) {
@@ -293,7 +287,7 @@ BOOL BB_SetButtonsPos(TWindowData *dat)
}
}
- if ((dat->pContainer->dwFlags & CNT_SIDEBAR) && (dat->pContainer->SideBar->getFlags() & CSideBar::SIDEBARORIENTATION_RIGHT)) {
+ if ((pContainer->dwFlags & CNT_SIDEBAR) && (pContainer->SideBar->getFlags() & CSideBar::SIDEBARORIENTATION_RIGHT)) {
if (NULL != hwndToggleSideBar) /* Wine fix. */
hdwp = DeferWindowPos(hdwp, hwndToggleSideBar, NULL, rect.right - foravatar - 10, 2 + splitterY - iOff, 0, 0, SWP_NOZORDER | SWP_NOSIZE);
rwidth += 12;
@@ -304,7 +298,7 @@ BOOL BB_SetButtonsPos(TWindowData *dat)
if (!cbd->m_bRSided) // filter only right buttons
continue;
- if (((dat->bType == SESSIONTYPE_IM) && cbd->m_bIMButton) || ((dat->bType == SESSIONTYPE_CHAT) && cbd->m_bChatButton)) {
+ if (((bType == SESSIONTYPE_IM) && cbd->m_bIMButton) || ((bType == SESSIONTYPE_CHAT) && cbd->m_bChatButton)) {
hwndButton = GetDlgItem(hwnd, cbd->m_dwButtonCID);
if (!showToolbar) {
@@ -346,36 +340,36 @@ BOOL BB_SetButtonsPos(TWindowData *dat)
return EndDeferWindowPos(hdwp);
}
-void CB_DestroyAllButtons(HWND hwndDlg)
+void CTabBaseDlg::CB_DestroyAllButtons()
{
CustomButtonData *cbd;
for (int i = 0; cbd = Srmm_GetNthButton(i); i++) {
- HWND hwndButton = GetDlgItem(hwndDlg, cbd->m_dwButtonCID);
+ HWND hwndButton = GetDlgItem(m_hwnd, cbd->m_dwButtonCID);
if (hwndButton)
DestroyWindow(hwndButton);
}
}
-void CB_DestroyButton(HWND hwndDlg, TWindowData *dat, DWORD dwButtonCID, DWORD dwFlags)
+void CTabBaseDlg::CB_DestroyButton(DWORD dwButtonCID, DWORD dwFlags)
{
- HWND hwndButton = GetDlgItem(hwndDlg, dwButtonCID);
+ HWND hwndButton = GetDlgItem(m_hwnd, dwButtonCID);
if (hwndButton == NULL)
return;
RECT rc = { 0 };
GetClientRect(hwndButton, &rc);
if (dwFlags & BBBF_ISRSIDEBUTTON)
- dat->bbRSideWidth -= rc.right;
+ bbRSideWidth -= rc.right;
else
- dat->bbLSideWidth -= rc.right;
+ bbLSideWidth -= rc.right;
DestroyWindow(hwndButton);
- BB_SetButtonsPos(dat);
+ BB_SetButtonsPos();
}
-void CB_ChangeButton(HWND hwndDlg, TWindowData *dat, CustomButtonData *cbd)
+void CTabBaseDlg::CB_ChangeButton(CustomButtonData *cbd)
{
- HWND hwndButton = GetDlgItem(hwndDlg, cbd->m_dwButtonCID);
+ HWND hwndButton = GetDlgItem(m_hwnd, cbd->m_dwButtonCID);
if (hwndButton == NULL)
return;
@@ -383,7 +377,7 @@ void CB_ChangeButton(HWND hwndDlg, TWindowData *dat, CustomButtonData *cbd)
SendMessage(hwndButton, BM_SETIMAGE, IMAGE_ICON, (LPARAM)IcoLib_GetIconByHandle(cbd->m_hIcon));
if (cbd->m_pwszTooltip)
SendMessage(hwndButton, BUTTONADDTOOLTIP, (WPARAM)cbd->m_pwszTooltip, BATF_UNICODE);
- SendMessage(hwndButton, BUTTONSETCONTAINER, (LPARAM)dat->pContainer, 0);
+ SendMessage(hwndButton, BUTTONSETCONTAINER, (LPARAM)pContainer, 0);
SetWindowTextA(hwndButton, cbd->m_pszModuleName);
}
diff --git a/plugins/TabSRMM/src/chat/chat.h b/plugins/TabSRMM/src/chat/chat.h
index f4ef815a72..e38ee9c643 100644
--- a/plugins/TabSRMM/src/chat/chat.h
+++ b/plugins/TabSRMM/src/chat/chat.h
@@ -46,7 +46,7 @@ typedef struct {
class CMUCHighlight;
-//structs
+// structs
struct MODULEINFO : public GCModuleInfoBase
{
@@ -57,7 +57,7 @@ struct MODULEINFO : public GCModuleInfoBase
struct SESSION_INFO : public GCSessionInfoBase
{
- TWindowData *dat;
+ CChatRoomDlg *dat;
TContainerData *pContainer;
int iLogTrayFlags, iLogPopupFlags, iDiskLogFlags;
@@ -67,8 +67,8 @@ struct SESSION_INFO : public GCSessionInfoBase
struct LOGSTREAMDATA : public GCLogStreamDataBase
{
- int crCount;
- TWindowData *dat;
+ int crCount;
+ CChatRoomDlg *dat;
};
struct TMUCSettings : public GlobalLogSettingsBase
@@ -111,11 +111,9 @@ extern CHAT_MANAGER saveCI;
//////////////////////////////////////////////////////////////////////////////////
// log.c
-void Log_StreamInEvent(HWND hwndDlg, LOGINFO* lin, SESSION_INFO *si, bool bRedraw);
-char* Log_CreateRtfHeader(MODULEINFO *mi);
+char* Log_CreateRtfHeader(MODULEINFO *mi);
// window.c
-INT_PTR CALLBACK RoomWndProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
int GetTextPixelSize(wchar_t* pszText, HFONT hFont, bool bWidth);
// options.c
diff --git a/plugins/TabSRMM/src/chat/chat_resource.h b/plugins/TabSRMM/src/chat/chat_resource.h
index 07916d6f51..79207f3db8 100644
--- a/plugins/TabSRMM/src/chat/chat_resource.h
+++ b/plugins/TabSRMM/src/chat/chat_resource.h
@@ -11,11 +11,8 @@
#define IDD_OPTIONS3 407
#define IDD_OPTIONS4 408
#define IDD_ADDHIGHLIGHT 409
-#define IDC_CHAT_LOG 1005
-#define IDC_SPLITTERX 1006
#define IDC_SMILEY 1007
#define IDC_SPLITTERY 1008
-#define IDC_CHAT_MESSAGE 1009
#define IDC_FILTER 1013
#define IDC_CHANMGR 1014
#define IDC_SHOWNICKLIST 1015
@@ -39,6 +36,7 @@
#define IDC_LIMIT 1050
#define IDC_LOGTIMESTAMP 1051
#define IDC_GROUP 1057
+#define IDC_SPLITTERX 1058
#define IDC_CHAT_RADIO1 1061
#define IDC_RADIO2 1062
#define IDC_RADIO3 1063
diff --git a/plugins/TabSRMM/src/chat/log.cpp b/plugins/TabSRMM/src/chat/log.cpp
index 8ecb13e423..ace05686ba 100644
--- a/plugins/TabSRMM/src/chat/log.cpp
+++ b/plugins/TabSRMM/src/chat/log.cpp
@@ -260,7 +260,7 @@ static void LogEventIEView(LOGSTREAMDATA *streamData, wchar_t *ptszNick)
event.cbSize = sizeof(event);
event.dwFlags = 0;
event.hwnd = streamData->dat->hwndIEView ? streamData->dat->hwndIEView : streamData->dat->hwndHPP;
- event.hContact = streamData->dat->hContact;
+ event.hContact = streamData->dat->m_hContact;
event.codepage = streamData->dat->codePage;
event.pszProto = streamData->si->pszModule;
event.iType = IEE_LOG_MEM_EVENTS;
@@ -857,16 +857,15 @@ static DWORD CALLBACK Log_StreamCallback(DWORD_PTR dwCookie, LPBYTE pbBuff, LONG
return 0;
}
-void Log_StreamInEvent(HWND hwndDlg, LOGINFO* lin, SESSION_INFO *si, bool bRedraw)
+void CChatRoomDlg::StreamInEvents(LOGINFO* lin, SESSION_INFO *si, bool bRedraw)
{
CHARRANGE oldsel, sel, newsel;
POINT point = { 0 };
- TWindowData *dat = (TWindowData*)GetWindowLongPtr(hwndDlg, GWLP_USERDATA);
- if (hwndDlg == 0 || lin == 0 || si == 0 || dat == 0)
+ if (m_hwnd == 0 || lin == 0 || si == 0)
return;
- HWND hwndRich = GetDlgItem(hwndDlg, IDC_CHAT_LOG);
+ HWND hwndRich = GetDlgItem(m_hwnd, IDC_LOG);
LOGSTREAMDATA streamData;
memset(&streamData, 0, sizeof(streamData));
@@ -874,7 +873,7 @@ void Log_StreamInEvent(HWND hwndDlg, LOGINFO* lin, SESSION_INFO *si, bool bRedra
streamData.si = si;
streamData.lin = lin;
streamData.bStripFormat = FALSE;
- streamData.dat = dat;
+ streamData.dat = this;
if (!bRedraw && (si->iType == GCW_CHATROOM || si->iType == GCW_PRIVMESS) && si->bFilterEnabled && (si->iLogFilterFlags & lin->iType) == 0)
return;
@@ -888,7 +887,7 @@ void Log_StreamInEvent(HWND hwndDlg, LOGINFO* lin, SESSION_INFO *si, bool bRedra
SCROLLINFO scroll = { 0 };
scroll.cbSize = sizeof(SCROLLINFO);
scroll.fMask = SIF_RANGE | SIF_POS | SIF_PAGE;
- GetScrollInfo(GetDlgItem(hwndDlg, IDC_CHAT_LOG), SB_VERT, &scroll);
+ GetScrollInfo(GetDlgItem(m_hwnd, IDC_LOG), SB_VERT, &scroll);
SendMessage(hwndRich, EM_GETSCROLLPOS, 0, (LPARAM)&point);
// do not scroll to bottom if there is a selection
diff --git a/plugins/TabSRMM/src/chat/main.cpp b/plugins/TabSRMM/src/chat/main.cpp
index 072337c2cc..f34f5d18ad 100644
--- a/plugins/TabSRMM/src/chat/main.cpp
+++ b/plugins/TabSRMM/src/chat/main.cpp
@@ -64,7 +64,7 @@ static void OnNewUser(SESSION_INFO *si, USERINFO*)
if (si->hWnd) {
SendMessage(si->hWnd, GC_UPDATENICKLIST, 0, 0);
if (si->dat)
- GetMyNick(si->dat);
+ si->dat->GetMyNick();
}
}
@@ -72,7 +72,7 @@ static void OnChangeNick(SESSION_INFO *si)
{
if (si->hWnd) {
if (si->dat)
- GetMyNick(si->dat);
+ si->dat->GetMyNick();
SendMessage(si->hWnd, GC_UPDATESTATUSBAR, 0, 0);
}
}
diff --git a/plugins/TabSRMM/src/chat/services.cpp b/plugins/TabSRMM/src/chat/services.cpp
index 0ddb66652c..c5735a6a8d 100644
--- a/plugins/TabSRMM/src/chat/services.cpp
+++ b/plugins/TabSRMM/src/chat/services.cpp
@@ -45,8 +45,6 @@ HWND CreateNewRoom(TContainerData *pContainer, SESSION_INFO *si, BOOL bActivateT
TNewWindowData newData = { 0 };
newData.hContact = hContact;
- newData.isWchar = 0;
- newData.szInitialText = NULL;
memset(&newData.item, 0, sizeof(newData.item));
wchar_t *contactName = pcli->pfnGetContactDisplayName(newData.hContact, 0);
@@ -65,7 +63,7 @@ HWND CreateNewRoom(TContainerData *pContainer, SESSION_INFO *si, BOOL bActivateT
newData.item.mask = TCIF_TEXT | TCIF_IMAGE | TCIF_PARAM;
newData.item.iImage = 0;
- HWND hwndTab = GetDlgItem(pContainer->hwnd, 1159);
+ HWND hwndTab = GetDlgItem(pContainer->hwnd, IDC_MSGTABS);
// hide the active tab
if (pContainer->hwndActive && bActivateTab)
@@ -81,9 +79,9 @@ HWND CreateNewRoom(TContainerData *pContainer, SESSION_INFO *si, BOOL bActivateT
item.mask = TCIF_PARAM;
TabCtrl_GetItem(hwndTab, i, &item);
HWND hwnd = (HWND)item.lParam;
- TWindowData *dat = (TWindowData*)GetWindowLongPtr(hwnd, GWLP_USERDATA);
+ CSrmmWindow *dat = (CSrmmWindow*)GetWindowLongPtr(hwnd, GWLP_USERDATA);
if (dat) {
- int relPos = M.GetDword(dat->hContact, "tabindex", i * 100);
+ int relPos = M.GetDword(dat->m_hContact, "tabindex", i * 100);
if (iTabIndex_wanted <= relPos)
pContainer->iTabIndex = i;
}
@@ -101,9 +99,14 @@ HWND CreateNewRoom(TContainerData *pContainer, SESSION_INFO *si, BOOL bActivateT
pContainer->iChilds++;
newData.bWantPopup = bWantPopup;
newData.si = si;
- HWND hwndNew = CreateDialogParam(g_hInst, MAKEINTRESOURCE(IDD_CHANNEL), GetDlgItem(pContainer->hwnd, 1159), RoomWndProc, (LPARAM)&newData);
+
+ CChatRoomDlg *pDlg = new CChatRoomDlg(&newData);
+ pDlg->SetParent(GetDlgItem(pContainer->hwnd, IDC_MSGTABS));
+ pDlg->Show();
+
+ HWND hwndNew = pDlg->GetHwnd();
if (pContainer->dwFlags & CNT_SIDEBAR) {
- TWindowData *dat = (TWindowData*)GetWindowLongPtr(hwndNew, GWLP_USERDATA);
+ CSrmmWindow *dat = (CSrmmWindow*)GetWindowLongPtr(hwndNew, GWLP_USERDATA);
if (dat)
pContainer->SideBar->addSession(dat, pContainer->iTabIndex);
}
diff --git a/plugins/TabSRMM/src/chat/tools.cpp b/plugins/TabSRMM/src/chat/tools.cpp
index 9be9b80567..566d506377 100644
--- a/plugins/TabSRMM/src/chat/tools.cpp
+++ b/plugins/TabSRMM/src/chat/tools.cpp
@@ -141,7 +141,7 @@ BOOL DoPopup(SESSION_INFO *si, GCEVENT *gce)
if (si == NULL || !(iEvent & si->iLogPopupFlags))
return true;
- TWindowData *dat = si->dat;
+ CTabBaseDlg *dat = si->dat;
TContainerData *pContainer = dat ? dat->pContainer : NULL;
wchar_t *bbStart, *bbEnd;
@@ -215,7 +215,7 @@ void DoFlashAndSoundWorker(FLASH_PARAMS* p)
if (si == 0)
return;
- TWindowData *dat = 0;
+ CTabBaseDlg *dat = 0;
if (si->hWnd) {
dat = si->dat;
if (dat) {
@@ -240,7 +240,7 @@ void DoFlashAndSoundWorker(FLASH_PARAMS* p)
if (dat->iFlashIcon != pci->hIcons[ICON_HIGHLIGHT] && dat->iFlashIcon != pci->hIcons[ICON_MESSAGE])
dat->iFlashIcon = p->hNotifyIcon;
}
- dat->mayFlashTab = TRUE;
+ dat->m_bCanFlashTab = TRUE;
SetTimer(si->hWnd, TIMERID_FLASHWND, TIMEOUT_FLASHWND, NULL);
}
}
@@ -257,7 +257,7 @@ void DoFlashAndSoundWorker(FLASH_PARAMS* p)
TabCtrl_SetCurSel(hwndTab, iItem);
ShowWindow(dat->pContainer->hwndActive, SW_HIDE);
dat->pContainer->hwndActive = si->hWnd;
- SendMessage(dat->pContainer->hwnd, DM_UPDATETITLE, dat->hContact, 0);
+ SendMessage(dat->pContainer->hwnd, DM_UPDATETITLE, dat->m_hContact, 0);
dat->pContainer->dwFlags |= CNT_DEFERREDTABSELECT;
}
}
@@ -299,7 +299,7 @@ BOOL DoSoundsFlashPopupTrayStuff(SESSION_INFO *si, GCEVENT *gce, BOOL bHighlight
if (gce == 0 || si == 0 || gce->bIsMe || si->iType == GCW_SERVER)
return FALSE;
- TWindowData *dat = NULL;
+ CTabBaseDlg *dat = NULL;
FLASH_PARAMS *params = (FLASH_PARAMS*)mir_calloc(sizeof(FLASH_PARAMS));
params->hContact = si->hContact;
params->bInactive = TRUE;
@@ -328,7 +328,7 @@ BOOL DoSoundsFlashPopupTrayStuff(SESSION_INFO *si, GCEVENT *gce, BOOL bHighlight
if (dat && g_Settings.bAnnoyingHighlight && params->bInactive && dat->pContainer->hwnd != GetForegroundWindow()) {
wParamForHighLight = 2;
- params->hWnd = dat->hwnd;
+ params->hWnd = dat->GetHwnd();
}
if (dat || !nen_options.iMUCDisable)
@@ -518,7 +518,7 @@ UINT CreateGCMenu(HWND hwndDlg, HMENU *hMenu, int iIndex, POINT pt, SESSION_INFO
gcmi.pszUID = pszUID;
if (iIndex == 1) {
- int i = GetRichTextLength(GetDlgItem(hwndDlg, IDC_CHAT_LOG));
+ int i = GetRichTextLength(GetDlgItem(hwndDlg, IDC_LOG));
EnableMenuItem(*hMenu, ID_CLEARLOG, MF_ENABLED);
EnableMenuItem(*hMenu, ID_COPYALL, MF_ENABLED);
diff --git a/plugins/TabSRMM/src/chat/window.cpp b/plugins/TabSRMM/src/chat/window.cpp
index 3d932bcf5d..c0873157fa 100644
--- a/plugins/TabSRMM/src/chat/window.cpp
+++ b/plugins/TabSRMM/src/chat/window.cpp
@@ -118,14 +118,14 @@ static BOOL CheckCustomLink(HWND hwndDlg, POINT *ptClient, UINT uMsg, WPARAM wPa
if (bIsCustomLink) {
ENLINK enlink = { 0 };
enlink.nmhdr.hwndFrom = hwndDlg;
- enlink.nmhdr.idFrom = IDC_CHAT_LOG;
+ enlink.nmhdr.idFrom = IDC_LOG;
enlink.nmhdr.code = EN_LINK;
enlink.msg = uMsg;
enlink.wParam = wParam;
enlink.lParam = lParam;
enlink.chrg.cpMin = cpMin;
enlink.chrg.cpMax = cpMax;
- SendMessage(GetParent(hwndDlg), WM_NOTIFY, IDC_CHAT_LOG, (LPARAM)&enlink);
+ SendMessage(GetParent(hwndDlg), WM_NOTIFY, IDC_LOG, (LPARAM)&enlink);
}
return bIsCustomLink;
}
@@ -148,22 +148,18 @@ bool IsStringValidLink(wchar_t *pszText)
// called whenever a group chat tab becomes active(either by switching tabs or activating a
// container window
-static void Chat_UpdateWindowState(TWindowData *dat, UINT msg)
+void CChatRoomDlg::UpdateWindowState(UINT msg)
{
- if (dat == NULL)
- return;
-
- SESSION_INFO *si = dat->si;
if (si == NULL)
return;
- HWND hwndDlg = dat->hwnd;
+ HWND hwndDlg = GetHwnd();
HWND hwndTab = GetParent(hwndDlg);
if (msg == WM_ACTIVATE) {
- if (dat->pContainer->dwFlags & CNT_TRANSPARENCY) {
- DWORD trans = LOWORD(dat->pContainer->settings->dwTransparency);
- SetLayeredWindowAttributes(dat->pContainer->hwnd, CSkin::m_ContainerColorKey, (BYTE)trans, (dat->pContainer->dwFlags & CNT_TRANSPARENCY ? LWA_ALPHA : 0));
+ if (pContainer->dwFlags & CNT_TRANSPARENCY) {
+ DWORD trans = LOWORD(pContainer->settings->dwTransparency);
+ SetLayeredWindowAttributes(pContainer->hwnd, CSkin::m_ContainerColorKey, (BYTE)trans, (pContainer->dwFlags & CNT_TRANSPARENCY ? LWA_ALPHA : 0));
}
}
@@ -179,78 +175,78 @@ static void Chat_UpdateWindowState(TWindowData *dat, UINT msg)
}
}
- if (dat->bIsAutosizingInput && dat->iInputAreaHeight == -1) {
- dat->iInputAreaHeight = 0;
- SendDlgItemMessage(hwndDlg, IDC_CHAT_MESSAGE, EM_REQUESTRESIZE, 0, 0);
+ if (bIsAutosizingInput && iInputAreaHeight == -1) {
+ iInputAreaHeight = 0;
+ SendDlgItemMessage(hwndDlg, IDC_MESSAGE, EM_REQUESTRESIZE, 0, 0);
}
- dat->Panel->dismissConfig();
- dat->dwUnread = 0;
- if (dat->pWnd) {
- dat->pWnd->activateTab();
- dat->pWnd->setOverlayIcon(0, true);
+ Panel->dismissConfig();
+ dwUnread = 0;
+ if (pWnd) {
+ pWnd->activateTab();
+ pWnd->setOverlayIcon(0, true);
}
- if (dat->pContainer->hwndSaved == hwndDlg || dat->bWasDeleted)
+ if (pContainer->hwndSaved == hwndDlg || m_bWasDeleted)
return;
- dat->pContainer->hwndSaved = hwndDlg;
+ pContainer->hwndSaved = hwndDlg;
pci->SetActiveSession(si->ptszID, si->pszModule);
- dat->hTabIcon = dat->hTabStatusIcon;
+ hTabIcon = hTabStatusIcon;
- if (dat->iTabID >= 0) {
+ if (iTabID >= 0) {
if (db_get_w(si->hContact, si->pszModule, "ApparentMode", 0) != 0)
db_set_w(si->hContact, si->pszModule, "ApparentMode", 0);
if (pcli->pfnGetEvent(si->hContact, 0))
pcli->pfnRemoveEvent(si->hContact, GC_FAKE_EVENT);
SendMessage(hwndDlg, GC_UPDATETITLE, 0, 1);
- dat->dwTickLastEvent = 0;
- dat->dwFlags &= ~MWF_DIVIDERSET;
- if (KillTimer(hwndDlg, TIMERID_FLASHWND) || dat->iFlashIcon) {
- FlashTab(dat, hwndTab, dat->iTabID, &dat->bTabFlash, FALSE, dat->hTabIcon);
- dat->mayFlashTab = FALSE;
- dat->iFlashIcon = 0;
+ dwTickLastEvent = 0;
+ dwFlags &= ~MWF_DIVIDERSET;
+ if (KillTimer(hwndDlg, TIMERID_FLASHWND) || iFlashIcon) {
+ FlashTab(false);
+ m_bCanFlashTab = FALSE;
+ iFlashIcon = 0;
}
- if (dat->pContainer->dwFlashingStarted != 0) {
- FlashContainer(dat->pContainer, 0, 0);
- dat->pContainer->dwFlashingStarted = 0;
+ if (pContainer->dwFlashingStarted != 0) {
+ FlashContainer(pContainer, 0, 0);
+ pContainer->dwFlashingStarted = 0;
}
- dat->pContainer->dwFlags &= ~CNT_NEED_UPDATETITLE;
+ pContainer->dwFlags &= ~CNT_NEED_UPDATETITLE;
- if (dat->dwFlags & MWF_NEEDCHECKSIZE)
+ if (dwFlags & MWF_NEEDCHECKSIZE)
PostMessage(hwndDlg, DM_SAVESIZE, 0, 0);
if (PluginConfig.m_bAutoLocaleSupport) {
- if (dat->hkl == 0)
- DM_LoadLocale(dat);
+ if (hkl == 0)
+ DM_LoadLocale(this);
else
SendMessage(hwndDlg, DM_SETLOCALE, 0, 0);
}
- SetFocus(GetDlgItem(hwndDlg, IDC_CHAT_MESSAGE));
- dat->dwLastActivity = GetTickCount();
- dat->pContainer->dwLastActivity = dat->dwLastActivity;
- dat->pContainer->MenuBar->configureMenu();
- UpdateTrayMenuState(dat, FALSE);
- DM_SetDBButtonStates(hwndDlg, dat);
-
- if (dat->dwFlagsEx & MWF_EX_DELAYEDSPLITTER) {
- dat->dwFlagsEx &= ~MWF_EX_DELAYEDSPLITTER;
- ShowWindow(dat->pContainer->hwnd, SW_RESTORE);
- PostMessage(hwndDlg, DM_SPLITTERGLOBALEVENT, dat->wParam, dat->lParam);
+ SetFocus(GetDlgItem(hwndDlg, IDC_MESSAGE));
+ dwLastActivity = GetTickCount();
+ pContainer->dwLastActivity = dwLastActivity;
+ pContainer->MenuBar->configureMenu();
+ UpdateTrayMenuState(this, FALSE);
+ DM_SetDBButtonStates();
+
+ if (dwFlagsEx & MWF_EX_DELAYEDSPLITTER) {
+ dwFlagsEx &= ~MWF_EX_DELAYEDSPLITTER;
+ ShowWindow(pContainer->hwnd, SW_RESTORE);
+ PostMessage(hwndDlg, DM_SPLITTERGLOBALEVENT, wParam, lParam);
PostMessage(hwndDlg, WM_SIZE, 0, 0);
- dat->wParam = dat->lParam = 0;
+ wParam = lParam = 0;
}
}
- BB_SetButtonsPos(dat);
+ BB_SetButtonsPos();
if (M.isAero())
InvalidateRect(hwndTab, NULL, FALSE);
- if (dat->pContainer->dwFlags & CNT_SIDEBAR)
- dat->pContainer->SideBar->setActiveItem(dat);
+ if (pContainer->dwFlags & CNT_SIDEBAR)
+ pContainer->SideBar->setActiveItem(this);
- if (dat->pWnd)
- dat->pWnd->Invalidate();
+ if (pWnd)
+ pWnd->Invalidate();
}
/////////////////////////////////////////////////////////////////////////////////////////
@@ -270,73 +266,45 @@ static void InitButtons(HWND hwndDlg, SESSION_INFO *si)
}
}
-static void Chat_ResizeIeView(const TWindowData *dat)
-{
- int iMode = dat->hwndIEView ? 1 : 2;
- HWND hwndDlg = dat->hwnd;
-
- RECT rcRichEdit;
- GetWindowRect(GetDlgItem(hwndDlg, IDC_CHAT_LOG), &rcRichEdit);
-
- POINT pt = { rcRichEdit.left, rcRichEdit.top };
- ScreenToClient(hwndDlg, &pt);
-
- IEVIEWWINDOW ieWindow = { sizeof(ieWindow) };
- ieWindow.iType = IEW_SETPOS;
- ieWindow.parent = hwndDlg;
- ieWindow.hwnd = iMode == 1 ? dat->hwndIEView : dat->hwndHPP;
- ieWindow.x = pt.x;
- ieWindow.y = pt.y;
- ieWindow.cx = rcRichEdit.right - rcRichEdit.left;
- ieWindow.cy = rcRichEdit.bottom - rcRichEdit.top;
- if (ieWindow.cx != 0 && ieWindow.cy != 0)
- CallService(iMode == 1 ? MS_IEVIEW_WINDOW : MS_HPP_EG_WINDOW, 0, (LPARAM)&ieWindow);
-}
-
/////////////////////////////////////////////////////////////////////////////////////////
// resizer callback for the group chat session window.Called from Mirandas dialog
// resizing service
-static int RoomWndResize(HWND hwndDlg, LPARAM lParam, UTILRESIZECONTROL *urc)
+int CChatRoomDlg::Resizer(UTILRESIZECONTROL *urc)
{
- RECT rc, rcTabs;
- SESSION_INFO *si = (SESSION_INFO*)lParam;
- TWindowData *dat = (TWindowData*)GetWindowLongPtr(hwndDlg, GWLP_USERDATA);
-
- bool bToolbar = !(dat->pContainer->dwFlags & CNT_HIDETOOLBAR);
- bool bBottomToolbar = dat->pContainer->dwFlags & CNT_BOTTOMTOOLBAR ? 1 : 0;
+ bool bToolbar = !(pContainer->dwFlags & CNT_HIDETOOLBAR);
+ bool bBottomToolbar = pContainer->dwFlags & CNT_BOTTOMTOOLBAR ? 1 : 0;
bool bNick = si->iType != GCW_SERVER && si->bNicklistEnabled;
- bool bInfoPanel = dat->Panel->isActive();
- int panelHeight = dat->Panel->getHeight() + 1;
-
- rc.bottom = rc.top = rc.left = rc.right = 0;
+ bool bInfoPanel = Panel->isActive();
+ int panelHeight = Panel->getHeight() + 1;
- GetClientRect(hwndDlg, &rcTabs);
+ RECT rcTabs;
+ GetClientRect(m_hwnd, &rcTabs);
- if (dat->bIsAutosizingInput)
- Utils::showDlgControl(hwndDlg, IDC_SPLITTERY, SW_HIDE);
+ if (bIsAutosizingInput)
+ Utils::showDlgControl(m_hwnd, IDC_SPLITTERY, SW_HIDE);
if (si->iType != GCW_SERVER) {
- Utils::showDlgControl(hwndDlg, IDC_LIST, si->bNicklistEnabled ? SW_SHOW : SW_HIDE);
- Utils::showDlgControl(hwndDlg, IDC_SPLITTERX, si->bNicklistEnabled ? SW_SHOW : SW_HIDE);
+ Utils::showDlgControl(m_hwnd, IDC_LIST, si->bNicklistEnabled ? SW_SHOW : SW_HIDE);
+ Utils::showDlgControl(m_hwnd, IDC_SPLITTERX, si->bNicklistEnabled ? SW_SHOW : SW_HIDE);
- Utils::enableDlgControl(hwndDlg, IDC_SHOWNICKLIST, true);
- Utils::enableDlgControl(hwndDlg, IDC_FILTER, true);
+ Utils::enableDlgControl(m_hwnd, IDC_SHOWNICKLIST, true);
+ Utils::enableDlgControl(m_hwnd, IDC_FILTER, true);
if (si->iType == GCW_CHATROOM) {
MODULEINFO* tmp = pci->MM_FindModule(si->pszModule);
if (tmp)
- Utils::enableDlgControl(hwndDlg, IDC_CHANMGR, tmp->bChanMgr);
+ Utils::enableDlgControl(m_hwnd, IDC_CHANMGR, tmp->bChanMgr);
}
}
else {
- Utils::showDlgControl(hwndDlg, IDC_LIST, SW_HIDE);
- Utils::showDlgControl(hwndDlg, IDC_SPLITTERX, SW_HIDE);
+ Utils::showDlgControl(m_hwnd, IDC_LIST, SW_HIDE);
+ Utils::showDlgControl(m_hwnd, IDC_SPLITTERX, SW_HIDE);
}
if (si->iType == GCW_SERVER) {
- Utils::enableDlgControl(hwndDlg, IDC_SHOWNICKLIST, false);
- Utils::enableDlgControl(hwndDlg, IDC_FILTER, false);
- Utils::enableDlgControl(hwndDlg, IDC_CHANMGR, false);
+ Utils::enableDlgControl(m_hwnd, IDC_SHOWNICKLIST, false);
+ Utils::enableDlgControl(m_hwnd, IDC_FILTER, false);
+ Utils::enableDlgControl(m_hwnd, IDC_CHANMGR, false);
}
switch (urc->wId) {
@@ -345,7 +313,7 @@ static int RoomWndResize(HWND hwndDlg, LPARAM lParam, UTILRESIZECONTROL *urc)
urc->rcItem.top = panelHeight - 2;
return RD_ANCHORX_WIDTH | RD_ANCHORY_TOP;
- case IDC_CHAT_LOG:
+ case IDC_LOG:
urc->rcItem.top = 0;
urc->rcItem.left = 0;
urc->rcItem.right = bNick ? urc->dlgNewSize.cx - si->iSplitterX : urc->dlgNewSize.cx;
@@ -399,12 +367,12 @@ static int RoomWndResize(HWND hwndDlg, LPARAM lParam, UTILRESIZECONTROL *urc)
urc->rcItem.top++;
return RD_ANCHORX_CUSTOM | RD_ANCHORY_CUSTOM;
- case IDC_CHAT_MESSAGE:
+ case IDC_MESSAGE:
urc->rcItem.right = urc->dlgNewSize.cx;
urc->rcItem.top = urc->dlgNewSize.cy - si->iSplitterY + 3;
urc->rcItem.bottom = urc->dlgNewSize.cy; // - 1 ;
- if (dat->bIsAutosizingInput)
+ if (bIsAutosizingInput)
urc->rcItem.top -= DPISCALEY_S(1);
if (bBottomToolbar && bToolbar)
@@ -517,18 +485,17 @@ LBL_SkipEnd:
static LRESULT CALLBACK MessageSubclassProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
HWND hwndParent = GetParent(hwnd);
- TWindowData *mwdat = (TWindowData*)GetWindowLongPtr(hwndParent, GWLP_USERDATA);
-
+ CTabBaseDlg *mwdat = (CTabBaseDlg*)GetWindowLongPtr(hwndParent, GWLP_USERDATA);
MESSAGESUBDATA *dat = (MESSAGESUBDATA*)GetWindowLongPtr(hwnd, GWLP_USERDATA);
- if (mwdat->fkeyProcessed && (msg == WM_KEYUP)) {
- GetKeyboardState(mwdat->kstate);
- if (!(mwdat->kstate[VK_CONTROL] & 0x80) && !(mwdat->kstate[VK_SHIFT] & 0x80))
- mwdat->fkeyProcessed = false;
- return 0;
- }
+ if (mwdat != nullptr)
+ if (mwdat->fkeyProcessed && (msg == WM_KEYUP)) {
+ GetKeyboardState(mwdat->kstate);
+ if (!(mwdat->kstate[VK_CONTROL] & 0x80) && !(mwdat->kstate[VK_SHIFT] & 0x80))
+ mwdat->fkeyProcessed = false;
+ return 0;
+ }
- SESSION_INFO *si = (SESSION_INFO*)mwdat->si;
switch (msg) {
case WM_NCCALCSIZE:
return CSkin::NcCalcRichEditFrame(hwnd, mwdat, ID_EXTBKINPUTAREA, msg, wParam, lParam, MessageSubclassProc);
@@ -551,7 +518,7 @@ static LRESULT CALLBACK MessageSubclassProc(HWND hwnd, UINT msg, WPARAM wParam,
RemoveMenu(hSubMenu, 8, MF_BYPOSITION);
RemoveMenu(hSubMenu, 4, MF_BYPOSITION);
- MODULEINFO *mi = pci->MM_FindModule(si->pszModule);
+ MODULEINFO *mi = pci->MM_FindModule(mwdat->si->pszModule);
EnableMenuItem(hSubMenu, IDM_PASTEFORMATTED, MF_BYCOMMAND | ((mi && mi->bBold) ? MF_ENABLED : MF_GRAYED));
TranslateMenu(hSubMenu);
@@ -565,7 +532,7 @@ static LRESULT CALLBACK MessageSubclassProc(HWND hwnd, UINT msg, WPARAM wParam,
MessageWindowPopupData mwpd = { sizeof(mwpd) };
mwpd.uType = MSG_WINDOWPOPUP_SHOWING;
mwpd.uFlags = MSG_WINDOWPOPUP_INPUT;
- mwpd.hContact = mwdat->hContact;
+ mwpd.hContact = mwdat->m_hContact;
mwpd.hwnd = hwnd;
mwpd.hMenu = hSubMenu;
mwpd.pt = pt;
@@ -610,14 +577,14 @@ static LRESULT CALLBACK MessageSubclassProc(HWND hwnd, UINT msg, WPARAM wParam,
case WM_SYSKEYUP:
if (wParam == VK_MENU) {
- ProcessHotkeysByMsgFilter(hwnd, msg, wParam, lParam, IDC_CHAT_MESSAGE);
+ ProcessHotkeysByMsgFilter(hwnd, msg, wParam, lParam, IDC_MESSAGE);
return 0;
}
break;
case WM_SYSKEYDOWN:
mwdat->fkeyProcessed = false;
- if (ProcessHotkeysByMsgFilter(hwnd, msg, wParam, lParam, IDC_CHAT_MESSAGE)) {
+ if (ProcessHotkeysByMsgFilter(hwnd, msg, wParam, lParam, IDC_MESSAGE)) {
mwdat->fkeyProcessed = true;
return 0;
}
@@ -638,14 +605,14 @@ static LRESULT CALLBACK MessageSubclassProc(HWND hwnd, UINT msg, WPARAM wParam,
break;
case WM_CHAR:
- BOOL isShift, isAlt, isCtrl;
- KbdState(mwdat, isShift, isCtrl, isAlt);
+ bool isShift, isAlt, isCtrl;
+ mwdat->KbdState(isShift, isCtrl, isAlt);
if (PluginConfig.m_bSoundOnTyping && !isAlt &&!isCtrl&&!(mwdat->pContainer->dwFlags&CNT_NOSOUND) && wParam != VK_ESCAPE&&!(wParam == VK_TAB&&PluginConfig.m_bAllowTab))
SkinPlaySound("SoundOnTyping");
if (isCtrl && !isAlt && !isShift) {
- MODULEINFO *mi = pci->MM_FindModule(si->pszModule);
+ MODULEINFO *mi = pci->MM_FindModule(mwdat->si->pszModule);
if (mi == NULL)
return 0;
@@ -702,7 +669,7 @@ static LRESULT CALLBACK MessageSubclassProc(HWND hwnd, UINT msg, WPARAM wParam,
break;
case WM_KEYDOWN:
- KbdState(mwdat, isShift, isCtrl, isAlt);
+ mwdat->KbdState(isShift, isCtrl, isAlt);
// sound on typing..
if (PluginConfig.m_bSoundOnTyping && !isAlt && wParam == VK_DELETE)
@@ -740,7 +707,7 @@ static LRESULT CALLBACK MessageSubclassProc(HWND hwnd, UINT msg, WPARAM wParam,
else if (wParam == VK_DOWN)
wp = MAKEWPARAM(SB_LINEDOWN, 0);
- SendDlgItemMessage(hwndParent, IDC_CHAT_LOG, WM_VSCROLL, wp, 0);
+ SendDlgItemMessage(hwndParent, IDC_LOG, WM_VSCROLL, wp, 0);
return 0;
}
}
@@ -789,14 +756,14 @@ static LRESULT CALLBACK MessageSubclassProc(HWND hwnd, UINT msg, WPARAM wParam,
}
if (wParam == VK_TAB && !isCtrl && !isShift) { //tab-autocomplete
SendMessage(hwnd, WM_SETREDRAW, FALSE, 0);
- bool fCompleted = TabAutoComplete(hwnd, dat, si);
+ bool fCompleted = TabAutoComplete(hwnd, dat, mwdat->si);
SendMessage(hwnd, WM_SETREDRAW, TRUE, 0);
RedrawWindow(hwnd, NULL, NULL, RDW_INVALIDATE);
if (!fCompleted && !PluginConfig.m_bAllowTab) {
- if ((GetSendButtonState(mwdat->hwnd) != PBS_DISABLED))
- SetFocus(GetDlgItem(mwdat->hwnd, IDOK));
+ if ((GetSendButtonState(mwdat->GetHwnd()) != PBS_DISABLED))
+ SetFocus(GetDlgItem(mwdat->GetHwnd(), IDOK));
else
- SetFocus(GetDlgItem(mwdat->hwnd, IDC_CHAT_LOG));
+ SetFocus(GetDlgItem(mwdat->GetHwnd(), IDC_LOG));
}
return 0;
}
@@ -814,15 +781,15 @@ static LRESULT CALLBACK MessageSubclassProc(HWND hwnd, UINT msg, WPARAM wParam,
if (wParam == VK_NEXT || wParam == VK_PRIOR) {
HWND htemp = hwndParent;
- SendDlgItemMessage(htemp, IDC_CHAT_LOG, msg, wParam, lParam);
+ SendDlgItemMessage(htemp, IDC_LOG, msg, wParam, lParam);
dat->lastEnterTime = 0;
return 0;
}
if (wParam == VK_UP && isCtrl && !isAlt) {
- char *lpPrevCmd = pci->SM_GetPrevCommand(si->ptszID, si->pszModule);
+ char *lpPrevCmd = pci->SM_GetPrevCommand(mwdat->si->ptszID, mwdat->si->pszModule);
- if (!si->lpCurrentCommand || !si->lpCurrentCommand->last) {
+ if (!mwdat->si->lpCurrentCommand || !mwdat->si->lpCurrentCommand->last) {
// Next command is not defined. It means currently entered text is not saved in the history and it
// need to be saved in the window context.
char *enteredText = Message_GetFromStream(hwndParent);
@@ -864,7 +831,7 @@ static LRESULT CALLBACK MessageSubclassProc(HWND hwnd, UINT msg, WPARAM wParam,
ste.flags = ST_DEFAULT;
ste.codepage = CP_ACP;
- char *lpPrevCmd = pci->SM_GetNextCommand(si->ptszID, si->pszModule);
+ char *lpPrevCmd = pci->SM_GetNextCommand(mwdat->si->ptszID, mwdat->si->pszModule);
if (lpPrevCmd)
SendMessage(hwnd, EM_SETTEXTEX, (WPARAM)&ste, (LPARAM)lpPrevCmd);
else if (mwdat->enteredText) {
@@ -906,17 +873,17 @@ static LRESULT CALLBACK MessageSubclassProc(HWND hwnd, UINT msg, WPARAM wParam,
cf.dwEffects = 0;
SendMessage(hwnd, EM_GETCHARFORMAT, SCF_SELECTION, (LPARAM)&cf);
{
- MODULEINFO *mi = pci->MM_FindModule(si->pszModule);
+ MODULEINFO *mi = pci->MM_FindModule(mwdat->si->pszModule);
if (mi == NULL)
break;
if (mi->bColor) {
- int index = Chat_GetColorIndex(si->pszModule, cf.crTextColor);
+ int index = Chat_GetColorIndex(mwdat->si->pszModule, cf.crTextColor);
UINT u = IsDlgButtonChecked(GetParent(hwnd), IDC_COLOR);
if (index >= 0) {
- si->bFGSet = TRUE;
- si->iFG = index;
+ mwdat->si->bFGSet = TRUE;
+ mwdat->si->iFG = index;
}
if (u == BST_UNCHECKED && cf.crTextColor != cr)
@@ -926,13 +893,13 @@ static LRESULT CALLBACK MessageSubclassProc(HWND hwnd, UINT msg, WPARAM wParam,
}
if (mi->bBkgColor) {
- int index = Chat_GetColorIndex(si->pszModule, cf.crBackColor);
+ int index = Chat_GetColorIndex(mwdat->si->pszModule, cf.crBackColor);
COLORREF crB = (COLORREF)M.GetDword(FONTMODULE, "inputbg", SRMSGDEFSET_BKGCOLOUR);
UINT u = IsDlgButtonChecked(hwndParent, IDC_BKGCOLOR);
if (index >= 0) {
- si->bBGSet = TRUE;
- si->iBG = index;
+ mwdat->si->bBGSet = TRUE;
+ mwdat->si->iBG = index;
}
if (u == BST_UNCHECKED && cf.crBackColor != crB)
@@ -1158,7 +1125,7 @@ static LRESULT CALLBACK ButtonSubclassProc(HWND hwnd, UINT msg, WPARAM wParam, L
static LRESULT CALLBACK LogSubclassProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
HWND hwndParent = GetParent(hwnd);
- TWindowData *mwdat = (TWindowData*)GetWindowLongPtr(hwndParent, GWLP_USERDATA);
+ CSrmmWindow *mwdat = (CSrmmWindow*)GetWindowLongPtr(hwndParent, GWLP_USERDATA);
switch (msg) {
case WM_NCCALCSIZE:
@@ -1202,7 +1169,7 @@ static LRESULT CALLBACK LogSubclassProc(HWND hwnd, UINT msg, WPARAM wParam, LPAR
SendMessage(hwnd, WM_COPY, 0, 0);
sel.cpMin = sel.cpMax;
SendMessage(hwnd, EM_EXSETSEL, 0, (LPARAM)&sel);
- SetFocus(GetDlgItem(hwndParent, IDC_CHAT_MESSAGE));
+ SetFocus(GetDlgItem(hwndParent, IDC_MESSAGE));
}
}
break;
@@ -1218,14 +1185,14 @@ static LRESULT CALLBACK LogSubclassProc(HWND hwnd, UINT msg, WPARAM wParam, LPAR
case WM_SYSKEYUP:
if (wParam == VK_MENU) {
- ProcessHotkeysByMsgFilter(hwnd, msg, wParam, lParam, IDC_CHAT_LOG);
+ ProcessHotkeysByMsgFilter(hwnd, msg, wParam, lParam, IDC_LOG);
return 0;
}
break;
case WM_SYSKEYDOWN:
mwdat->fkeyProcessed = false;
- if (ProcessHotkeysByMsgFilter(hwnd, msg, wParam, lParam, IDC_CHAT_LOG)) {
+ if (ProcessHotkeysByMsgFilter(hwnd, msg, wParam, lParam, IDC_LOG)) {
mwdat->fkeyProcessed = true;
return 0;
}
@@ -1250,13 +1217,13 @@ static LRESULT CALLBACK LogSubclassProc(HWND hwnd, UINT msg, WPARAM wParam, LPAR
break;
case WM_CHAR:
- BOOL isCtrl, isShift, isAlt;
- KbdState(mwdat, isShift, isCtrl, isAlt);
+ bool isCtrl, isShift, isAlt;
+ mwdat->KbdState(isShift, isCtrl, isAlt);
if (wParam == 0x03 && isCtrl) // Ctrl+C
return DM_WMCopyHandler(hwnd, LogSubclassProc, msg, wParam, lParam);
- SetFocus(GetDlgItem(hwndParent, IDC_CHAT_MESSAGE));
- SendDlgItemMessage(hwndParent, IDC_CHAT_MESSAGE, WM_CHAR, wParam, lParam);
+ SetFocus(GetDlgItem(hwndParent, IDC_MESSAGE));
+ SendDlgItemMessage(hwndParent, IDC_MESSAGE, WM_CHAR, wParam, lParam);
break;
}
@@ -1269,7 +1236,7 @@ static LRESULT CALLBACK LogSubclassProc(HWND hwnd, UINT msg, WPARAM wParam, LPAR
static LRESULT CALLBACK NicklistSubclassProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
HWND hwndParent = GetParent(hwnd);
- TWindowData *dat = (TWindowData*)GetWindowLongPtr(hwndParent, GWLP_USERDATA);
+ CSrmmWindow *dat = (CSrmmWindow*)GetWindowLongPtr(hwndParent, GWLP_USERDATA);
switch (msg) {
case WM_NCCALCSIZE:
@@ -1569,175 +1536,239 @@ static void __cdecl phase2(void * lParam)
// the actual group chat session window procedure.Handles the entire chat session window
// which is usually a (tabbed) child of a container class window.
-INT_PTR CALLBACK RoomWndProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
+CChatRoomDlg::CChatRoomDlg(TNewWindowData *pData)
+ : CTabBaseDlg(pData, IDD_CHANNEL)
{
- SESSION_INFO *si = NULL;
- HWND hwndTab = GetParent(hwndDlg);
- TWindowData *dat = (TWindowData*)GetWindowLongPtr(hwndDlg, GWLP_USERDATA);
- if (dat)
- si = dat->si;
+ bType = SESSIONTYPE_CHAT;
+ Panel = new CInfoPanel(this);
+}
- if (dat == NULL && (uMsg == WM_ACTIVATE || uMsg == WM_SETFOCUS))
- return 0;
+void CChatRoomDlg::OnInitDialog()
+{
+ SetWindowLongPtr(m_hwnd, GWLP_USERDATA, (LONG_PTR)this);
+
+ si = newData->si;
+ m_hContact = si->hContact;
+ szProto = GetContactProto(si->hContact);
+
+ cache = CContactCache::getContactCache(m_hContact);
+ cache->updateNick();
+ cache->updateUIN();
+ newData->item.lParam = (LPARAM)m_hwnd;
+ TabCtrl_SetItem(m_hwndParent, newData->iTabID, &newData->item);
+ iTabID = newData->iTabID;
+ pContainer = newData->pContainer;
+ si->pContainer = newData->pContainer;
+ si->hWnd = m_hwnd;
+ si->dat = this;
+ bIsAutosizingInput = IsAutoSplitEnabled();
+ fLimitedUpdate = false;
+ iInputAreaHeight = -1;
+ if (!pContainer->settings->fPrivate)
+ si->iSplitterY = g_Settings.iSplitterY;
+ else {
+ if (M.GetByte(CHAT_MODULE, "SyncSplitter", 0))
+ si->iSplitterY = pContainer->settings->splitterPos - DPISCALEY_S(23);
+ else
+ si->iSplitterY = g_Settings.iSplitterY;
+ }
+
+ if (bIsAutosizingInput)
+ si->iSplitterY = GetDefaultMinimumInputHeight();
+
+ CProxyWindow::add(this);
+
+ // Typing support for GCW_PRIVMESS sessions
+ if (si->iType == GCW_PRIVMESS) {
+ nTypeMode = PROTOTYPE_SELFTYPING_OFF;
+ SetTimer(m_hwnd, TIMERID_TYPE, 1000, NULL);
+ }
+
+ Panel->getVisibility();
+ Panel->Configure();
+ M.AddWindow(m_hwnd, m_hContact);
+ BroadCastContainer(pContainer, DM_REFRESHTABINDEX, 0, 0);
+
+ SendDlgItemMessage(m_hwnd, IDC_LOG, EM_SETOLECALLBACK, 0, (LPARAM)&reOleCallback);
+ SendDlgItemMessage(m_hwnd, IDC_LOG, EM_AUTOURLDETECT, 1, 0);
+ SetWindowLongPtr(GetDlgItem(m_hwnd, IDC_PANELSPLITTER), GWLP_WNDPROC, (LONG_PTR)SplitterSubclassProc);
+ TABSRMM_FireEvent(m_hContact, m_hwnd, MSG_WINDOW_EVT_OPENING, 0);
+
+ int mask = (int)SendDlgItemMessage(m_hwnd, IDC_LOG, EM_GETEVENTMASK, 0, 0);
+ SendDlgItemMessage(m_hwnd, IDC_LOG, EM_SETEVENTMASK, 0, mask | ENM_LINK | ENM_MOUSEEVENTS | ENM_KEYEVENTS);
+ SendDlgItemMessage(m_hwnd, IDC_MESSAGE, EM_SETEVENTMASK, 0, ENM_REQUESTRESIZE | ENM_MOUSEEVENTS | ENM_SCROLL | ENM_KEYEVENTS | ENM_CHANGE);
+ SendDlgItemMessage(m_hwnd, IDC_LOG, EM_LIMITTEXT, 0x7FFFFFFF, 0);
+ SendDlgItemMessage(m_hwnd, IDC_MESSAGE, EM_SETMARGINS, EC_LEFTMARGIN | EC_RIGHTMARGIN, MAKELONG(3, 3));
+ SendDlgItemMessage(m_hwnd, IDC_LOG, EM_SETMARGINS, EC_LEFTMARGIN | EC_RIGHTMARGIN, MAKELONG(3, 3));
+ Panel->loadHeight();
+
+ if (PluginConfig.g_hMenuTrayUnread != 0 && m_hContact != 0 && szProto != NULL)
+ UpdateTrayMenu(0, wStatus, szProto, szStatus, m_hContact, FALSE);
+
+ DM_ThemeChanged();
+ SendDlgItemMessage(m_hwnd, IDC_LOG, EM_HIDESELECTION, TRUE, 0);
+
+ GetMYUIN();
+ GetMyNick();
+
+ HWND hwndBtn = CreateWindowEx(0, L"MButtonClass", L"", WS_CHILD | WS_VISIBLE | WS_TABSTOP, 0, 0, 6, DPISCALEY_S(20), m_hwnd, (HMENU)IDC_TOGGLESIDEBAR, g_hInst, NULL);
+ CustomizeButton(hwndBtn);
+ SendMessage(hwndBtn, BUTTONSETASTHEMEDBTN, 1, 0);
+ SendMessage(hwndBtn, BUTTONSETCONTAINER, (LPARAM)pContainer, 0);
+ SendMessage(hwndBtn, BUTTONSETASFLATBTN, FALSE, 0);
+ SendMessage(hwndBtn, BUTTONSETASTOOLBARBUTTON, TRUE, 0);
+ SendMessage(hwndBtn, BUTTONADDTOOLTIP, (WPARAM)TranslateT("Expand or collapse the side bar"), BATF_UNICODE);
+
+ DM_InitTip();
+ BB_InitDlgButtons();
+ SendMessage(m_hwnd, WM_CBD_LOADICONS, 0, 0);
+
+ mir_subclassWindow(GetDlgItem(m_hwnd, IDC_SPLITTERX), SplitterSubclassProc);
+ mir_subclassWindow(GetDlgItem(m_hwnd, IDC_SPLITTERY), SplitterSubclassProc);
+ mir_subclassWindow(GetDlgItem(m_hwnd, IDC_LIST), NicklistSubclassProc);
+ mir_subclassWindow(m_log.GetHwnd(), LogSubclassProc);
+ mir_subclassWindow(GetDlgItem(m_hwnd, IDC_FILTER), ButtonSubclassProc);
+ mir_subclassWindow(GetDlgItem(m_hwnd, IDC_COLOR), ButtonSubclassProc);
+ mir_subclassWindow(GetDlgItem(m_hwnd, IDC_BKGCOLOR), ButtonSubclassProc);
+
+ mir_subclassWindow(GetDlgItem(m_hwnd, IDC_MESSAGE), MessageSubclassProc);
+ SendDlgItemMessage(m_hwnd, IDC_MESSAGE, EM_SUBCLASSED, 0, 0);
+
+ SendMessage(m_hwnd, GC_SETWNDPROPS, 0, 0);
+ SendMessage(m_hwnd, GC_UPDATESTATUSBAR, 0, 0);
+ SendMessage(m_hwnd, GC_UPDATETITLE, 0, 1);
- CHARFORMAT2 cf;
- POINT pt, tmp, cur;
RECT rc;
+ SendMessage(pContainer->hwnd, DM_QUERYCLIENTAREA, 0, (LPARAM)&rc);
+ SetWindowPos(m_hwnd, HWND_TOP, rc.left, rc.top, (rc.right - rc.left), (rc.bottom - rc.top), 0);
+ ShowWindow(m_hwnd, SW_SHOW);
+ PostMessage(m_hwnd, GC_UPDATENICKLIST, 0, 0);
+ pContainer->hwndActive = m_hwnd;
+ TABSRMM_FireEvent(m_hContact, m_hwnd, MSG_WINDOW_EVT_OPEN, 0);
+}
- switch (uMsg) {
- case WM_INITDIALOG:
- dat = (TWindowData*)mir_calloc(sizeof(TWindowData));
- SetWindowLongPtr(hwndDlg, GWLP_USERDATA, (LONG_PTR)dat);
- {
- TNewWindowData *newData = (TNewWindowData*)lParam;
- dat->si = si = newData->si;
- dat->hContact = si->hContact;
- dat->szProto = GetContactProto(si->hContact);
- dat->bType = SESSIONTYPE_CHAT;
- dat->Panel = new CInfoPanel(dat);
-
- dat->cache = CContactCache::getContactCache(dat->hContact);
- dat->cache->updateNick();
- dat->cache->updateUIN();
- newData->item.lParam = (LPARAM)hwndDlg;
- TabCtrl_SetItem(hwndTab, newData->iTabID, &newData->item);
- dat->iTabID = newData->iTabID;
- dat->pContainer = newData->pContainer;
- si->pContainer = newData->pContainer;
- dat->hwnd = hwndDlg;
- si->hWnd = hwndDlg;
- si->dat = dat;
- dat->bIsAutosizingInput = IsAutoSplitEnabled(dat);
- dat->fLimitedUpdate = false;
- dat->iInputAreaHeight = -1;
- if (!dat->pContainer->settings->fPrivate)
- si->iSplitterY = g_Settings.iSplitterY;
- else {
- if (M.GetByte(CHAT_MODULE, "SyncSplitter", 0))
- si->iSplitterY = dat->pContainer->settings->splitterPos - DPISCALEY_S(23);
- else
- si->iSplitterY = g_Settings.iSplitterY;
- }
+void CChatRoomDlg::OnDestroy()
+{
+ // Typing support for GCW_PRIVMESS sessions
+ if (si->iType == GCW_PRIVMESS)
+ if (nTypeMode == PROTOTYPE_SELFTYPING_ON)
+ DM_NotifyTyping(PROTOTYPE_SELFTYPING_OFF);
- if (dat->bIsAutosizingInput)
- si->iSplitterY = GetDefaultMinimumInputHeight(dat);
+ if (pcli->pfnGetEvent(si->hContact, 0))
+ pcli->pfnRemoveEvent(si->hContact, GC_FAKE_EVENT);
+ si->wState &= ~STATE_TALK;
+ si->hWnd = NULL;
+ si->dat = NULL;
+ si->pContainer = NULL;
+ si = NULL;
- CProxyWindow::add(dat);
+ TABSRMM_FireEvent(m_hContact, m_hwnd, MSG_WINDOW_EVT_CLOSING, 0);
- // Typing support for GCW_PRIVMESS sessions
- if (si->iType == GCW_PRIVMESS) {
- dat->nTypeMode = PROTOTYPE_SELFTYPING_OFF;
- SetTimer(hwndDlg, TIMERID_TYPE, 1000, NULL);
- }
+ if (!bIsAutosizingInput)
+ db_set_w(NULL, CHAT_MODULE, "SplitterX", (WORD)g_Settings.iSplitterX);
+
+ if (pContainer->settings->fPrivate && !IsAutoSplitEnabled())
+ db_set_w(NULL, CHAT_MODULE, "splitY", (WORD)g_Settings.iSplitterY);
- dat->Panel->getVisibility();
- dat->Panel->Configure();
- M.AddWindow(hwndDlg, dat->hContact);
- BroadCastContainer(dat->pContainer, DM_REFRESHTABINDEX, 0, 0);
+ DM_FreeTheme();
- SendDlgItemMessage(hwndDlg, IDC_CHAT_LOG, EM_SETOLECALLBACK, 0, (LPARAM)&reOleCallback);
- SendDlgItemMessage(hwndDlg, IDC_CHAT_LOG, EM_AUTOURLDETECT, 1, 0);
- SetWindowLongPtr(GetDlgItem(hwndDlg, IDC_PANELSPLITTER), GWLP_WNDPROC, (LONG_PTR)SplitterSubclassProc);
- TABSRMM_FireEvent(dat->hContact, hwndDlg, MSG_WINDOW_EVT_OPENING, 0);
+ UpdateTrayMenuState(this, FALSE); // remove me from the tray menu (if still there)
+ if (PluginConfig.g_hMenuTrayUnread)
+ DeleteMenu(PluginConfig.g_hMenuTrayUnread, (UINT_PTR)m_hContact, MF_BYCOMMAND);
- int mask = (int)SendDlgItemMessage(hwndDlg, IDC_CHAT_LOG, EM_GETEVENTMASK, 0, 0);
- SendDlgItemMessage(hwndDlg, IDC_CHAT_LOG, EM_SETEVENTMASK, 0, mask | ENM_LINK | ENM_MOUSEEVENTS | ENM_KEYEVENTS);
- SendDlgItemMessage(hwndDlg, IDC_CHAT_MESSAGE, EM_SETEVENTMASK, 0, ENM_REQUESTRESIZE | ENM_MOUSEEVENTS | ENM_SCROLL | ENM_KEYEVENTS | ENM_CHANGE);
- SendDlgItemMessage(hwndDlg, IDC_CHAT_LOG, EM_LIMITTEXT, 0x7FFFFFFF, 0);
- SendDlgItemMessage(hwndDlg, IDC_CHAT_MESSAGE, EM_SETMARGINS, EC_LEFTMARGIN | EC_RIGHTMARGIN, MAKELONG(3, 3));
- SendDlgItemMessage(hwndDlg, IDC_CHAT_LOG, EM_SETMARGINS, EC_LEFTMARGIN | EC_RIGHTMARGIN, MAKELONG(3, 3));
- dat->Panel->loadHeight();
+ if (hSmileyIcon)
+ DestroyIcon(hSmileyIcon);
- if (PluginConfig.g_hMenuTrayUnread != 0 && dat->hContact != 0 && dat->szProto != NULL)
- UpdateTrayMenu(0, dat->wStatus, dat->szProto, dat->szStatus, dat->hContact, FALSE);
+ if (hwndTip)
+ DestroyWindow(hwndTip);
- DM_ThemeChanged(dat);
- SendDlgItemMessage(hwndDlg, IDC_CHAT_LOG, EM_HIDESELECTION, TRUE, 0);
+ if (hCurHyperlinkHand)
+ DestroyCursor(hCurHyperlinkHand);
+
+ int i = GetTabIndexFromHWND(m_hwndParent, m_hwnd);
+ if (i >= 0) {
+ SendMessage(m_hwndParent, WM_USER + 100, 0, 0); // clean up tooltip
+ TabCtrl_DeleteItem(m_hwndParent, i);
+ BroadCastContainer(pContainer, DM_REFRESHTABINDEX, 0, 0);
+ iTabID = -1;
+ }
+ if (pWnd) {
+ delete pWnd;
+ pWnd = 0;
+ }
+ if (sbCustom) {
+ delete sbCustom;
+ sbCustom = 0;
+ }
- GetMYUIN(dat);
- GetMyNick(dat);
+ M.RemoveWindow(m_hwnd);
- HWND hwndBtn = CreateWindowEx(0, L"MButtonClass", L"", WS_CHILD | WS_VISIBLE | WS_TABSTOP, 0, 0, 6, DPISCALEY_S(20), hwndDlg, (HMENU)IDC_TOGGLESIDEBAR, g_hInst, NULL);
- CustomizeButton(hwndBtn);
- SendMessage(hwndBtn, BUTTONSETASTHEMEDBTN, 1, 0);
- SendMessage(hwndBtn, BUTTONSETCONTAINER, (LPARAM)dat->pContainer, 0);
- SendMessage(hwndBtn, BUTTONSETASFLATBTN, FALSE, 0);
- SendMessage(hwndBtn, BUTTONSETASTOOLBARBUTTON, TRUE, 0);
- SendMessage(hwndBtn, BUTTONADDTOOLTIP, (WPARAM)TranslateT("Expand or collapse the side bar"), BATF_UNICODE);
+ TABSRMM_FireEvent(m_hContact, m_hwnd, MSG_WINDOW_EVT_CLOSE, 0);
- DM_InitTip(dat);
- BB_InitDlgButtons(dat);
- SendMessage(hwndDlg, WM_CBD_LOADICONS, 0, 0);
+ memset((void*)&pContainer->mOld, -1000, sizeof(MARGINS));
+ PostMessage(pContainer->hwnd, WM_SIZE, 0, 1);
- mir_subclassWindow(GetDlgItem(hwndDlg, IDC_SPLITTERX), SplitterSubclassProc);
- mir_subclassWindow(GetDlgItem(hwndDlg, IDC_SPLITTERY), SplitterSubclassProc);
- mir_subclassWindow(GetDlgItem(hwndDlg, IDC_LIST), NicklistSubclassProc);
- mir_subclassWindow(GetDlgItem(hwndDlg, IDC_CHAT_LOG), LogSubclassProc);
- mir_subclassWindow(GetDlgItem(hwndDlg, IDC_FILTER), ButtonSubclassProc);
- mir_subclassWindow(GetDlgItem(hwndDlg, IDC_COLOR), ButtonSubclassProc);
- mir_subclassWindow(GetDlgItem(hwndDlg, IDC_BKGCOLOR), ButtonSubclassProc);
+ delete Panel;
- mir_subclassWindow(GetDlgItem(hwndDlg, IDC_CHAT_MESSAGE), MessageSubclassProc);
- SendDlgItemMessage(hwndDlg, IDC_CHAT_MESSAGE, EM_SUBCLASSED, 0, 0);
+ if (pContainer->dwFlags & CNT_SIDEBAR)
+ pContainer->SideBar->removeSession(this);
+ mir_free(enteredText);
+ SetWindowLongPtr(m_hwnd, GWLP_USERDATA, 0);
+}
- SendMessage(hwndDlg, GC_SETWNDPROPS, 0, 0);
- SendMessage(hwndDlg, GC_UPDATESTATUSBAR, 0, 0);
- SendMessage(hwndDlg, GC_UPDATETITLE, 0, 1);
+INT_PTR CChatRoomDlg::DlgProc(UINT uMsg, WPARAM wParam, LPARAM lParam)
+{
+ if (si == NULL && (uMsg == WM_ACTIVATE || uMsg == WM_SETFOCUS))
+ return 0;
- SendMessage(dat->pContainer->hwnd, DM_QUERYCLIENTAREA, 0, (LPARAM)&rc);
- SetWindowPos(hwndDlg, HWND_TOP, rc.left, rc.top, (rc.right - rc.left), (rc.bottom - rc.top), 0);
- ShowWindow(hwndDlg, SW_SHOW);
- PostMessage(hwndDlg, GC_UPDATENICKLIST, 0, 0);
- dat->pContainer->hwndActive = hwndDlg;
- TABSRMM_FireEvent(dat->hContact, hwndDlg, MSG_WINDOW_EVT_OPEN, 0);
- }
- break;
+ CHARFORMAT2 cf;
+ POINT pt, tmp, cur;
+ RECT rc;
+ switch (uMsg) {
case WM_SETFOCUS:
if (CMimAPI::m_shutDown)
break;
- Chat_UpdateWindowState(dat, WM_SETFOCUS);
- SetFocus(GetDlgItem(hwndDlg, IDC_CHAT_MESSAGE));
+ UpdateWindowState(WM_SETFOCUS);
+ SetFocus(GetDlgItem(m_hwnd, IDC_MESSAGE));
return 1;
case WM_TIMECHANGE:
- PostMessage(hwndDlg, GC_REDRAWLOG, 0, 0);
+ PostMessage(m_hwnd, GC_REDRAWLOG, 0, 0);
break;
case WM_CBD_LOADICONS:
- Srmm_UpdateToolbarIcons(hwndDlg);
+ Srmm_UpdateToolbarIcons(m_hwnd);
return 0;
case GC_SETWNDPROPS:
- InitButtons(hwndDlg, si);
- SendDlgItemMessage(hwndDlg, IDC_CHAT_LOG, EM_SETBKGNDCOLOR, 0, M.GetDword(FONTMODULE, SRMSGSET_BKGCOLOUR, SRMSGDEFSET_BKGCOLOUR));
+ InitButtons(m_hwnd, si);
+ SendDlgItemMessage(m_hwnd, IDC_LOG, EM_SETBKGNDCOLOR, 0, M.GetDword(FONTMODULE, SRMSGSET_BKGCOLOUR, SRMSGDEFSET_BKGCOLOUR));
- DM_InitRichEdit(dat);
- SendDlgItemMessage(hwndDlg, IDOK, BUTTONSETASNORMAL, TRUE, 0);
+ DM_InitRichEdit(this);
+ SendDlgItemMessage(m_hwnd, IDOK, BUTTONSETASNORMAL, TRUE, 0);
- SendDlgItemMessage(hwndDlg, IDC_LIST, LB_SETITEMHEIGHT, 0, (LPARAM)g_Settings.iNickListFontHeight);
- InvalidateRect(GetDlgItem(hwndDlg, IDC_LIST), NULL, TRUE);
+ SendDlgItemMessage(m_hwnd, IDC_LIST, LB_SETITEMHEIGHT, 0, (LPARAM)g_Settings.iNickListFontHeight);
+ InvalidateRect(GetDlgItem(m_hwnd, IDC_LIST), NULL, TRUE);
- SendDlgItemMessage(hwndDlg, IDC_FILTER, BUTTONSETOVERLAYICON,
+ SendDlgItemMessage(m_hwnd, IDC_FILTER, BUTTONSETOVERLAYICON,
(LPARAM)(si->bFilterEnabled ? PluginConfig.g_iconOverlayEnabled : PluginConfig.g_iconOverlayDisabled), 0);
- SendMessage(hwndDlg, WM_SIZE, 0, 0);
- SendMessage(hwndDlg, GC_REDRAWLOG2, 0, 0);
+ SendMessage(m_hwnd, WM_SIZE, 0, 0);
+ SendMessage(m_hwnd, GC_REDRAWLOG2, 0, 0);
break;
case DM_UPDATETITLE:
- return SendMessage(hwndDlg, GC_UPDATETITLE, wParam, lParam);
-
case GC_UPDATETITLE:
- if (!dat->bWasDeleted) {
- dat->wStatus = si->wStatus;
+ if (!m_bWasDeleted) {
+ wStatus = si->wStatus;
- const wchar_t *szNick = dat->cache->getNick();
+ const wchar_t *szNick = cache->getNick();
if (mir_wstrlen(szNick) > 0) {
if (M.GetByte("cuttitle", 0))
- CutContactName(szNick, dat->newtitle, _countof(dat->newtitle));
+ CutContactName(szNick, newtitle, _countof(newtitle));
else
- wcsncpy_s(dat->newtitle, szNick, _TRUNCATE);
+ wcsncpy_s(newtitle, szNick, _TRUNCATE);
}
wchar_t szTemp[100];
@@ -1745,13 +1776,13 @@ INT_PTR CALLBACK RoomWndProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPar
switch (si->iType) {
case GCW_CHATROOM:
- hIcon = Skin_LoadProtoIcon(si->pszModule, (dat->wStatus <= ID_STATUS_OFFLINE) ? ID_STATUS_OFFLINE : dat->wStatus);
+ hIcon = Skin_LoadProtoIcon(si->pszModule, (wStatus <= ID_STATUS_OFFLINE) ? ID_STATUS_OFFLINE : wStatus);
mir_snwprintf(szTemp,
(si->nUsersInNicklist == 1) ? TranslateT("%s: chat room (%u user%s)") : TranslateT("%s: chat room (%u users%s)"),
szNick, si->nUsersInNicklist, si->bFilterEnabled ? TranslateT(", event filter active") : L"");
break;
case GCW_PRIVMESS:
- hIcon = Skin_LoadProtoIcon(si->pszModule, (dat->wStatus <= ID_STATUS_OFFLINE) ? ID_STATUS_OFFLINE : dat->wStatus);
+ hIcon = Skin_LoadProtoIcon(si->pszModule, (wStatus <= ID_STATUS_OFFLINE) ? ID_STATUS_OFFLINE : wStatus);
if (si->nUsersInNicklist == 1)
mir_snwprintf(szTemp, TranslateT("%s: message session"), szNick);
else
@@ -1763,36 +1794,36 @@ INT_PTR CALLBACK RoomWndProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPar
break;
}
- if (dat->pWnd) {
- dat->pWnd->updateTitle(dat->newtitle);
- dat->pWnd->updateIcon(hIcon);
+ if (pWnd) {
+ pWnd->updateTitle(newtitle);
+ pWnd->updateIcon(hIcon);
}
- dat->hTabStatusIcon = hIcon;
+ hTabStatusIcon = hIcon;
if (lParam)
- dat->hTabIcon = dat->hTabStatusIcon;
+ hTabIcon = hTabStatusIcon;
- if (dat->cache->getStatus() != dat->cache->getOldStatus()) {
- wcsncpy_s(dat->szStatus, pcli->pfnGetStatusModeDescription(dat->wStatus, 0), _TRUNCATE);
+ if (cache->getStatus() != cache->getOldStatus()) {
+ wcsncpy_s(szStatus, pcli->pfnGetStatusModeDescription(wStatus, 0), _TRUNCATE);
TCITEM item = { 0 };
item.mask = TCIF_TEXT;
- item.pszText = dat->newtitle;
- TabCtrl_SetItem(hwndTab, dat->iTabID, &item);
+ item.pszText = newtitle;
+ TabCtrl_SetItem(m_hwndParent, iTabID, &item);
}
- SetWindowText(hwndDlg, szTemp);
- if (dat->pContainer->hwndActive == hwndDlg) {
- SendMessage(dat->pContainer->hwnd, DM_UPDATETITLE, (WPARAM)hwndDlg, 1);
- SendMessage(hwndDlg, GC_UPDATESTATUSBAR, 0, 0);
+ SetWindowText(m_hwnd, szTemp);
+ if (pContainer->hwndActive == m_hwnd) {
+ SendMessage(pContainer->hwnd, DM_UPDATETITLE, (WPARAM)m_hwnd, 1);
+ SendMessage(m_hwnd, GC_UPDATESTATUSBAR, 0, 0);
}
}
break;
case GC_UPDATESTATUSBAR:
- if (dat->bWasDeleted)
+ if (m_bWasDeleted)
return 0;
- if (dat->pContainer->hwndActive != hwndDlg || dat->pContainer->hwndStatus == 0 || CMimAPI::m_shutDown || dat->szStatusBar[0])
+ if (pContainer->hwndActive != m_hwnd || pContainer->hwndStatus == 0 || CMimAPI::m_shutDown || szStatusBar[0])
break;
if (si->pszModule != NULL) {
@@ -1807,10 +1838,10 @@ INT_PTR CALLBACK RoomWndProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPar
break;
int x = 12;
- x += GetTextPixelSize(mi->ptszModDispName, (HFONT)SendMessage(dat->pContainer->hwndStatus, WM_GETFONT, 0, 0), TRUE);
+ x += GetTextPixelSize(mi->ptszModDispName, (HFONT)SendMessage(pContainer->hwndStatus, WM_GETFONT, 0, 0), TRUE);
x += GetSystemMetrics(SM_CXSMICON);
- if (dat->Panel->isActive()) {
+ if (Panel->isActive()) {
time_t now = time(0);
DWORD diff = (now - mi->idleTimeStamp) / 60;
@@ -1827,7 +1858,7 @@ INT_PTR CALLBACK RoomWndProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPar
}
else mir_snwprintf(mi->tszIdleMsg, TranslateT(", %d %s idle"), diff, diff > 1 ? TranslateT("minutes") : TranslateT("minute"));
}
- mir_snwprintf(szFinalStatusBarText, TranslateT("%s on %s%s"), dat->szMyNickname, mi->ptszModDispName, mi->tszIdleMsg);
+ mir_snwprintf(szFinalStatusBarText, TranslateT("%s on %s%s"), szMyNickname, mi->ptszModDispName, mi->tszIdleMsg);
}
else {
if (si->ptszStatusbarText)
@@ -1835,52 +1866,52 @@ INT_PTR CALLBACK RoomWndProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPar
else
wcsncpy_s(szFinalStatusBarText, mi->ptszModDispName, _TRUNCATE);
}
- SendMessage(dat->pContainer->hwndStatus, SB_SETTEXT, 0, (LPARAM)szFinalStatusBarText);
- UpdateStatusBar(dat);
- dat->Panel->Invalidate();
- if (dat->pWnd)
- dat->pWnd->Invalidate();
+ SendMessage(pContainer->hwndStatus, SB_SETTEXT, 0, (LPARAM)szFinalStatusBarText);
+ UpdateStatusBar();
+ Panel->Invalidate();
+ if (pWnd)
+ pWnd->Invalidate();
return TRUE;
}
break;
case WM_SIZE:
- if (dat->ipFieldHeight == 0)
- dat->ipFieldHeight = CInfoPanel::m_ipConfig.height1;
+ if (ipFieldHeight == 0)
+ ipFieldHeight = CInfoPanel::m_ipConfig.height1;
if (wParam == SIZE_MAXIMIZED)
- PostMessage(hwndDlg, GC_SCROLLTOBOTTOM, 0, 0);
+ PostMessage(m_hwnd, GC_SCROLLTOBOTTOM, 0, 0);
- if (!IsIconic(hwndDlg)) {
- int panelHeight = dat->Panel->getHeight() + 1;
+ if (!IsIconic(m_hwnd)) {
+ int panelHeight = Panel->getHeight() + 1;
- GetClientRect(hwndDlg, &rc);
+ GetClientRect(m_hwnd, &rc);
int cx = rc.right;
- Utils_ResizeDialog(hwndDlg, g_hInst, MAKEINTRESOURCEA(IDD_CHANNEL), RoomWndResize, (LPARAM)si);
+ CTabBaseDlg::DlgProc(uMsg, 0, 0); // call basic window resizer
- BB_SetButtonsPos(dat);
+ BB_SetButtonsPos();
rc.left = panelHeight <= CInfoPanel::LEFT_OFFSET_LOGO ? panelHeight : CInfoPanel::LEFT_OFFSET_LOGO;
rc.right = cx;
rc.top = 1;
- rc.bottom = (panelHeight > CInfoPanel::DEGRADE_THRESHOLD ? rc.top + dat->ipFieldHeight - 2 : panelHeight - 1);
- dat->rcNick = rc;
+ rc.bottom = (panelHeight > CInfoPanel::DEGRADE_THRESHOLD ? rc.top + ipFieldHeight - 2 : panelHeight - 1);
+ rcNick = rc;
rc.left = panelHeight <= CInfoPanel::LEFT_OFFSET_LOGO ? panelHeight : CInfoPanel::LEFT_OFFSET_LOGO;
rc.right = cx;
rc.bottom = panelHeight - 2;
- rc.top = dat->rcNick.bottom + 1;
- dat->rcUIN = rc;
+ rc.top = rcNick.bottom + 1;
+ rcUIN = rc;
- if (dat->hwndIEView || dat->hwndHPP)
- Chat_ResizeIeView(dat);
- DetermineMinHeight(dat);
+ if (hwndIEView || hwndHPP)
+ ResizeIeView();
+ DetermineMinHeight();
}
- break;
+ return 0;
case GC_REDRAWWINDOW:
- InvalidateRect(hwndDlg, NULL, TRUE);
+ InvalidateRect(m_hwnd, NULL, TRUE);
break;
case GC_REDRAWLOG:
@@ -1896,49 +1927,49 @@ INT_PTR CALLBACK RoomWndProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPar
if ((si->iType != GCW_CHATROOM && si->iType != GCW_PRIVMESS) || !si->bFilterEnabled || (si->iLogFilterFlags&pLog->iType) != 0)
index++;
}
- Log_StreamInEvent(hwndDlg, pLog, si, TRUE);
+ StreamInEvents(pLog, si, TRUE);
mir_forkthread(phase2, si);
}
- else Log_StreamInEvent(hwndDlg, si->pLogEnd, si, TRUE);
+ else StreamInEvents(si->pLogEnd, si, TRUE);
}
- else SendMessage(hwndDlg, GC_CONTROL_MSG, WINDOW_CLEARLOG, 0);
+ else SendMessage(m_hwnd, GC_CONTROL_MSG, WINDOW_CLEARLOG, 0);
break;
case GC_REDRAWLOG2:
si->LastTime = 0;
if (si->pLog)
- Log_StreamInEvent(hwndDlg, si->pLogEnd, si, TRUE);
+ StreamInEvents(si->pLogEnd, si, TRUE);
break;
case GC_ADDLOG:
if (g_Settings.bUseDividers && g_Settings.bDividersUsePopupConfig) {
- if (!MessageWindowOpened(0, (LPARAM)hwndDlg))
- SendMessage(hwndDlg, DM_ADDDIVIDER, 0, 0);
+ if (!MessageWindowOpened(0, (LPARAM)m_hwnd))
+ SendMessage(m_hwnd, DM_ADDDIVIDER, 0, 0);
}
else if (g_Settings.bUseDividers) {
- bool bInactive = (GetForegroundWindow() != dat->pContainer->hwnd || GetActiveWindow() != dat->pContainer->hwnd);
+ bool bInactive = (GetForegroundWindow() != pContainer->hwnd || GetActiveWindow() != pContainer->hwnd);
if (bInactive)
- SendMessage(hwndDlg, DM_ADDDIVIDER, 0, 0);
- else if (dat->pContainer->hwndActive != hwndDlg)
- SendMessage(hwndDlg, DM_ADDDIVIDER, 0, 0);
+ SendMessage(m_hwnd, DM_ADDDIVIDER, 0, 0);
+ else if (pContainer->hwndActive != m_hwnd)
+ SendMessage(m_hwnd, DM_ADDDIVIDER, 0, 0);
}
if (si->pLogEnd)
- Log_StreamInEvent(hwndDlg, si->pLog, si, FALSE);
+ StreamInEvents(si->pLog, si, FALSE);
else
- SendMessage(hwndDlg, GC_CONTROL_MSG, WINDOW_CLEARLOG, 0);
+ SendMessage(m_hwnd, GC_CONTROL_MSG, WINDOW_CLEARLOG, 0);
break;
case DM_TYPING:
// Typing support for GCW_PRIVMESS sessions
if (si->iType == GCW_PRIVMESS) {
- int preTyping = dat->nTypeSecs != 0;
- dat->nTypeSecs = (int)lParam > 0 ? (int)lParam : 0;
+ int preTyping = nTypeSecs != 0;
+ nTypeSecs = (int)lParam > 0 ? (int)lParam : 0;
- if (dat->nTypeSecs)
- dat->bShowTyping = 0;
+ if (nTypeSecs)
+ bShowTyping = 0;
- SetWindowLongPtr(hwndDlg, DWLP_MSGRESULT, preTyping);
+ SetWindowLongPtr(m_hwnd, DWLP_MSGRESULT, preTyping);
}
return TRUE;
@@ -1950,7 +1981,7 @@ INT_PTR CALLBACK RoomWndProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPar
{
MEASUREITEMSTRUCT *mis = (MEASUREITEMSTRUCT *)lParam;
if (mis->CtlType == ODT_MENU) {
- if (dat->Panel->isHovered()) {
+ if (Panel->isHovered()) {
mis->itemHeight = 0;
mis->itemWidth = 6;
return TRUE;
@@ -1965,7 +1996,7 @@ INT_PTR CALLBACK RoomWndProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPar
{
DRAWITEMSTRUCT *dis = (DRAWITEMSTRUCT *)lParam;
if (dis->CtlType == ODT_MENU) {
- if (dat->Panel->isHovered()) {
+ if (Panel->isHovered()) {
DrawMenuItem(dis, (HICON)dis->itemData, 0);
return TRUE;
}
@@ -2066,36 +2097,36 @@ INT_PTR CALLBACK RoomWndProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPar
{
DWORD idFrom = GetDlgCtrlID((HWND)wParam);
if (idFrom >= MIN_CBUTTONID && idFrom <= MAX_CBUTTONID)
- Srmm_ClickToolbarIcon(dat->hContact, idFrom, (HWND)wParam, 1);
+ Srmm_ClickToolbarIcon(m_hContact, idFrom, (HWND)wParam, 1);
}
break;
case GC_UPDATENICKLIST:
{
- int i = SendDlgItemMessage(hwndDlg, IDC_LIST, LB_GETTOPINDEX, 0, 0);
- SendDlgItemMessage(hwndDlg, IDC_LIST, LB_SETCOUNT, si->nUsersInNicklist, 0);
- SendDlgItemMessage(hwndDlg, IDC_LIST, LB_SETTOPINDEX, i, 0);
- SendMessage(hwndDlg, GC_UPDATETITLE, 0, 0);
+ int i = SendDlgItemMessage(m_hwnd, IDC_LIST, LB_GETTOPINDEX, 0, 0);
+ SendDlgItemMessage(m_hwnd, IDC_LIST, LB_SETCOUNT, si->nUsersInNicklist, 0);
+ SendDlgItemMessage(m_hwnd, IDC_LIST, LB_SETTOPINDEX, i, 0);
+ SendMessage(m_hwnd, GC_UPDATETITLE, 0, 0);
}
break;
case GC_CONTROL_MSG:
switch (wParam) {
case SESSION_OFFLINE:
- SendMessage(hwndDlg, GC_UPDATESTATUSBAR, 0, 0);
+ SendMessage(m_hwnd, GC_UPDATESTATUSBAR, 0, 0);
SendMessage(si->hWnd, GC_UPDATENICKLIST, 0, 0);
return TRUE;
case SESSION_ONLINE:
- SendMessage(hwndDlg, GC_UPDATESTATUSBAR, 0, 0);
+ SendMessage(m_hwnd, GC_UPDATESTATUSBAR, 0, 0);
return TRUE;
case WINDOW_HIDDEN:
- SendMessage(hwndDlg, GC_CLOSEWINDOW, 0, 1);
+ SendMessage(m_hwnd, GC_CLOSEWINDOW, 0, 1);
return TRUE;
case WINDOW_CLEARLOG:
- SetDlgItemText(hwndDlg, IDC_CHAT_LOG, L"");
+ SetDlgItemText(m_hwnd, IDC_LOG, L"");
return TRUE;
case SESSION_TERMINATE:
@@ -2103,25 +2134,25 @@ INT_PTR CALLBACK RoomWndProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPar
pcli->pfnRemoveEvent(si->hContact, GC_FAKE_EVENT);
si->wState &= ~STATE_TALK;
- dat->bWasDeleted = 1;
+ m_bWasDeleted = true;
db_set_w(si->hContact, si->pszModule, "ApparentMode", 0);
- SendMessage(hwndDlg, GC_CLOSEWINDOW, 0, lParam == 2 ? lParam : 1);
+ SendMessage(m_hwnd, GC_CLOSEWINDOW, 0, lParam == 2 ? lParam : 1);
return TRUE;
case WINDOW_MINIMIZE:
- ShowWindow(hwndDlg, SW_MINIMIZE);
+ ShowWindow(m_hwnd, SW_MINIMIZE);
LABEL_SHOWWINDOW:
- SendMessage(hwndDlg, WM_SIZE, 0, 0);
- SendMessage(hwndDlg, GC_REDRAWLOG, 0, 0);
- SendMessage(hwndDlg, GC_UPDATENICKLIST, 0, 0);
- SendMessage(hwndDlg, GC_UPDATESTATUSBAR, 0, 0);
- ShowWindow(hwndDlg, SW_SHOW);
- SendMessage(hwndDlg, WM_SIZE, 0, 0);
- SetForegroundWindow(hwndDlg);
+ SendMessage(m_hwnd, WM_SIZE, 0, 0);
+ SendMessage(m_hwnd, GC_REDRAWLOG, 0, 0);
+ SendMessage(m_hwnd, GC_UPDATENICKLIST, 0, 0);
+ SendMessage(m_hwnd, GC_UPDATESTATUSBAR, 0, 0);
+ ShowWindow(m_hwnd, SW_SHOW);
+ SendMessage(m_hwnd, WM_SIZE, 0, 0);
+ SetForegroundWindow(m_hwnd);
return TRUE;
case WINDOW_MAXIMIZE:
- ShowWindow(hwndDlg, SW_MAXIMIZE);
+ ShowWindow(m_hwnd, SW_MAXIMIZE);
goto LABEL_SHOWWINDOW;
case SESSION_INITDONE:
@@ -2130,8 +2161,8 @@ LABEL_SHOWWINDOW:
// fall through
case WINDOW_VISIBLE:
- if (IsIconic(hwndDlg))
- ShowWindow(hwndDlg, SW_NORMAL);
+ if (IsIconic(m_hwnd))
+ ShowWindow(m_hwnd, SW_NORMAL);
goto LABEL_SHOWWINDOW;
}
break;
@@ -2139,11 +2170,11 @@ LABEL_SHOWWINDOW:
case DM_SPLITTERMOVED:
RECT rcLog;
{
- GetWindowRect(GetDlgItem(hwndDlg, IDC_CHAT_LOG), &rcLog);
- if ((HWND)lParam == GetDlgItem(hwndDlg, IDC_SPLITTERX)) {
- GetClientRect(hwndDlg, &rc);
+ GetWindowRect(m_log.GetHwnd(), &rcLog);
+ if ((HWND)lParam == GetDlgItem(m_hwnd, IDC_SPLITTERX)) {
+ GetClientRect(m_hwnd, &rc);
pt.x = wParam, pt.y = 0;
- ScreenToClient(hwndDlg, &pt);
+ ScreenToClient(m_hwnd, &pt);
si->iSplitterX = rc.right - pt.x + 1;
if (si->iSplitterX < 35)
@@ -2151,13 +2182,13 @@ LABEL_SHOWWINDOW:
if (si->iSplitterX > rc.right - rc.left - 35)
si->iSplitterX = rc.right - rc.left - 35;
g_Settings.iSplitterX = si->iSplitterX;
- SendMessage(dat->hwnd, WM_SIZE, 0, 0);
+ SendMessage(GetHwnd(), WM_SIZE, 0, 0);
}
- else if ((HWND)lParam == GetDlgItem(hwndDlg, IDC_SPLITTERY) || lParam == -1) {
- GetClientRect(hwndDlg, &rc);
- rc.top += (dat->Panel->isActive() ? dat->Panel->getHeight() + 40 : 30);
+ else if ((HWND)lParam == GetDlgItem(m_hwnd, IDC_SPLITTERY) || lParam == -1) {
+ GetClientRect(m_hwnd, &rc);
+ rc.top += (Panel->isActive() ? Panel->getHeight() + 40 : 30);
pt.x = 0, pt.y = wParam;
- ScreenToClient(hwndDlg, &pt);
+ ScreenToClient(m_hwnd, &pt);
si->iSplitterY = rc.bottom - pt.y + DPISCALEY_S(1);
if (si->iSplitterY < DPISCALEY_S(23))
@@ -2165,19 +2196,19 @@ LABEL_SHOWWINDOW:
if (si->iSplitterY > rc.bottom - rc.top - DPISCALEY_S(40))
si->iSplitterY = rc.bottom - rc.top - DPISCALEY_S(40);
g_Settings.iSplitterY = si->iSplitterY;
- CSkin::UpdateToolbarBG(dat);
- SendMessage(dat->hwnd, WM_SIZE, 0, 0);
+ UpdateToolbarBG();
+ SendMessage(GetHwnd(), WM_SIZE, 0, 0);
}
- else if ((HWND)lParam == GetDlgItem(hwndDlg, IDC_PANELSPLITTER)) {
+ else if ((HWND)lParam == GetDlgItem(m_hwnd, IDC_PANELSPLITTER)) {
pt.x = 0, pt.y = wParam;
- ScreenToClient(hwndDlg, &pt);
- GetClientRect(GetDlgItem(hwndDlg, IDC_CHAT_LOG), &rc);
+ ScreenToClient(m_hwnd, &pt);
+ GetClientRect(m_log.GetHwnd(), &rc);
if ((pt.y + 2 >= MIN_PANELHEIGHT + 2) && (pt.y + 2 < 100) && (pt.y + 2 < rc.bottom - 30))
- dat->Panel->setHeight(pt.y + 2);
- RedrawWindow(hwndDlg, NULL, NULL, RDW_INVALIDATE | RDW_UPDATENOW | RDW_ERASE);
+ Panel->setHeight(pt.y + 2);
+ RedrawWindow(m_hwnd, NULL, NULL, RDW_INVALIDATE | RDW_UPDATENOW | RDW_ERASE);
if (M.isAero())
- InvalidateRect(GetParent(hwndDlg), NULL, FALSE);
- SendMessage(hwndDlg, WM_SIZE, DM_SPLITTERMOVED, 0);
+ InvalidateRect(m_hwndParent, NULL, FALSE);
+ SendMessage(m_hwnd, WM_SIZE, DM_SPLITTERMOVED, 0);
break;
}
}
@@ -2200,143 +2231,143 @@ LABEL_SHOWWINDOW:
case GC_CHANGEFILTERFLAG:
if (si->iLogFilterFlags == 0 && si->bFilterEnabled)
- SendMessage(hwndDlg, WM_COMMAND, IDC_FILTER, 0);
+ SendMessage(m_hwnd, WM_COMMAND, IDC_FILTER, 0);
break;
case GC_SHOWFILTERMENU:
- si->hwndStatus = CreateDialogParam(g_hInst, MAKEINTRESOURCE(IDD_FILTER), dat->pContainer->hwnd, FilterWndProc, (LPARAM)si);
+ si->hwndStatus = CreateDialogParam(g_hInst, MAKEINTRESOURCE(IDD_FILTER), pContainer->hwnd, FilterWndProc, (LPARAM)si);
TranslateDialogDefault(si->hwndStatus);
RECT rcFilter;
GetClientRect(si->hwndStatus, &rcFilter);
- GetWindowRect(GetDlgItem(hwndDlg, IDC_CHAT_LOG), &rcLog);
+ GetWindowRect(m_log.GetHwnd(), &rcLog);
pt.x = rcLog.right; pt.y = rcLog.bottom;
- ScreenToClient(dat->pContainer->hwnd, &pt);
+ ScreenToClient(pContainer->hwnd, &pt);
SetWindowPos(si->hwndStatus, HWND_TOP, pt.x - rcFilter.right, pt.y - rcFilter.bottom, 0, 0, SWP_NOSIZE | SWP_SHOWWINDOW);
break;
case DM_SPLITTERGLOBALEVENT:
- DM_SplitterGlobalEvent(dat, wParam, lParam);
+ DM_SplitterGlobalEvent(this, wParam, lParam);
return 0;
case GC_SHOWCOLORCHOOSER:
- pci->ColorChooser(si, lParam == IDC_COLOR, hwndDlg, GetDlgItem(hwndDlg, IDC_CHAT_MESSAGE), GetDlgItem(hwndDlg, lParam));
+ pci->ColorChooser(si, lParam == IDC_COLOR, m_hwnd, GetDlgItem(m_hwnd, IDC_MESSAGE), GetDlgItem(m_hwnd, lParam));
break;
case GC_SCROLLTOBOTTOM:
- DM_ScrollToBottom(dat, wParam, lParam);
+ DM_ScrollToBottom(this, wParam, lParam);
return 0;
case WM_TIMER:
if (wParam == TIMERID_FLASHWND)
- if (dat->mayFlashTab)
- FlashTab(dat, hwndTab, dat->iTabID, &dat->bTabFlash, TRUE, dat->hTabIcon);
+ if (m_bCanFlashTab)
+ FlashTab(true);
// Typing support for GCW_PRIVMESS sessions
if (si->iType == GCW_PRIVMESS && wParam == TIMERID_TYPE)
- DM_Typing(dat);
+ DM_Typing(this);
break;
case WM_ACTIVATE:
if (LOWORD(wParam) != WA_ACTIVE) {
- dat->pContainer->hwndSaved = 0;
+ pContainer->hwndSaved = 0;
break;
}
// fall through
case WM_MOUSEACTIVATE:
- Chat_UpdateWindowState(dat, WM_ACTIVATE);
+ UpdateWindowState(WM_ACTIVATE);
return 1;
case WM_NOTIFY:
switch (((LPNMHDR)lParam)->code) {
case EN_MSGFILTER:
- BOOL isShift, isCtrl, isMenu;
+ bool isShift, isCtrl, isMenu;
{
UINT msg = ((MSGFILTER *)lParam)->msg;
WPARAM wp = ((MSGFILTER *)lParam)->wParam;
LPARAM lp = ((MSGFILTER *)lParam)->lParam;
- KbdState(dat, isShift, isCtrl, isMenu);
+ KbdState(isShift, isCtrl, isMenu);
MSG message;
- message.hwnd = hwndDlg;
+ message.hwnd = m_hwnd;
message.message = msg;
message.lParam = lp;
message.wParam = wp;
if (msg == WM_SYSKEYUP) {
if (wp == VK_MENU)
- if (!dat->fkeyProcessed && !(GetKeyState(VK_CONTROL) & 0x8000) && !(GetKeyState(VK_SHIFT) & 0x8000) && !(lp & (1 << 24)))
- dat->pContainer->MenuBar->autoShow();
+ if (!fkeyProcessed && !(GetKeyState(VK_CONTROL) & 0x8000) && !(GetKeyState(VK_SHIFT) & 0x8000) && !(lp & (1 << 24)))
+ pContainer->MenuBar->autoShow();
- return _dlgReturn(hwndDlg, 0);
+ return _dlgReturn(m_hwnd, 0);
}
if (msg == WM_MOUSEMOVE) {
GetCursorPos(&pt);
- DM_DismissTip(dat, pt);
- dat->Panel->trackMouse(pt);
+ DM_DismissTip(this, pt);
+ Panel->trackMouse(pt);
break;
}
if (msg == WM_KEYDOWN) {
if ((wp == VK_INSERT && isShift && !isCtrl && !isMenu) || (wp == 'V' && !isShift && !isMenu && isCtrl)) {
- SendDlgItemMessage(hwndDlg, IDC_CHAT_MESSAGE, EM_PASTESPECIAL, CF_UNICODETEXT, 0);
+ SendDlgItemMessage(m_hwnd, IDC_MESSAGE, EM_PASTESPECIAL, CF_UNICODETEXT, 0);
((MSGFILTER*)lParam)->msg = WM_NULL;
((MSGFILTER*)lParam)->wParam = 0;
((MSGFILTER*)lParam)->lParam = 0;
- return _dlgReturn(hwndDlg, 1);
+ return _dlgReturn(m_hwnd, 1);
}
}
if (msg == WM_LBUTTONDOWN || msg == WM_RBUTTONDOWN || msg == WM_MBUTTONDOWN)
- dat->pContainer->MenuBar->Cancel();
+ pContainer->MenuBar->Cancel();
if ((msg == WM_KEYDOWN || msg == WM_SYSKEYDOWN) && !(GetKeyState(VK_RMENU) & 0x8000)) {
- if (DM_GenericHotkeysCheck(&message, dat)) {
- dat->fkeyProcessed = true;
- return _dlgReturn(hwndDlg, 1);
+ if (DM_GenericHotkeysCheck(&message, this)) {
+ fkeyProcessed = true;
+ return _dlgReturn(m_hwnd, 1);
}
LRESULT mim_hotkey_check = CallService(MS_HOTKEY_CHECK, (WPARAM)&message, (LPARAM)(TABSRMM_HK_SECTION_GC));
if (mim_hotkey_check)
- dat->fkeyProcessed = true;
+ fkeyProcessed = true;
switch (mim_hotkey_check) {
case TABSRMM_HK_CHANNELMGR:
- SendMessage(hwndDlg, WM_COMMAND, MAKEWPARAM(IDC_CHANMGR, BN_CLICKED), 0);
- return _dlgReturn(hwndDlg, 1);
+ SendMessage(m_hwnd, WM_COMMAND, MAKEWPARAM(IDC_CHANMGR, BN_CLICKED), 0);
+ return _dlgReturn(m_hwnd, 1);
case TABSRMM_HK_FILTERTOGGLE:
- SendMessage(hwndDlg, WM_COMMAND, MAKEWPARAM(IDC_FILTER, BN_CLICKED), 0);
- InvalidateRect(GetDlgItem(hwndDlg, IDC_FILTER), NULL, TRUE);
- return _dlgReturn(hwndDlg, 1);
+ SendMessage(m_hwnd, WM_COMMAND, MAKEWPARAM(IDC_FILTER, BN_CLICKED), 0);
+ InvalidateRect(GetDlgItem(m_hwnd, IDC_FILTER), NULL, TRUE);
+ return _dlgReturn(m_hwnd, 1);
case TABSRMM_HK_LISTTOGGLE:
- SendMessage(hwndDlg, WM_COMMAND, MAKEWPARAM(IDC_SHOWNICKLIST, BN_CLICKED), 0);
- return _dlgReturn(hwndDlg, 1);
+ SendMessage(m_hwnd, WM_COMMAND, MAKEWPARAM(IDC_SHOWNICKLIST, BN_CLICKED), 0);
+ return _dlgReturn(m_hwnd, 1);
case TABSRMM_HK_MUC_SHOWSERVER:
if (si->iType != GCW_SERVER)
- pci->DoEventHookAsync(hwndDlg, si->ptszID, si->pszModule, GC_USER_MESSAGE, NULL, L"/servershow", 0);
- return _dlgReturn(hwndDlg, 1);
+ pci->DoEventHookAsync(m_hwnd, si->ptszID, si->pszModule, GC_USER_MESSAGE, NULL, L"/servershow", 0);
+ return _dlgReturn(m_hwnd, 1);
}
}
- if (msg == WM_KEYDOWN && ((NMHDR*)lParam)->idFrom != IDC_CHAT_MESSAGE) {
+ if (msg == WM_KEYDOWN && ((NMHDR*)lParam)->idFrom != IDC_MESSAGE) {
if ((wp == VK_NEXT && isCtrl && !isShift) || (wp == VK_TAB && isCtrl && !isShift)) // CTRL-TAB (switch tab/window)
- SendMessage(dat->pContainer->hwnd, DM_SELECTTAB, DM_SELECT_NEXT, 0);
+ SendMessage(pContainer->hwnd, DM_SELECTTAB, DM_SELECT_NEXT, 0);
else if ((wp == VK_PRIOR && isCtrl && !isShift) || (wp == VK_TAB && isCtrl && isShift)) // CTRL_SHIFT-TAB (switch tab/window)
- SendMessage(dat->pContainer->hwnd, DM_SELECTTAB, DM_SELECT_PREV, 0);
+ SendMessage(pContainer->hwnd, DM_SELECTTAB, DM_SELECT_PREV, 0);
}
if (msg == WM_KEYDOWN && wp == VK_TAB) {
- if (((NMHDR*)lParam)->idFrom == IDC_CHAT_LOG) {
- SetFocus(GetDlgItem(hwndDlg, IDC_CHAT_MESSAGE));
- return _dlgReturn(hwndDlg, 1);
+ if (((NMHDR*)lParam)->idFrom == IDC_LOG) {
+ SetFocus(GetDlgItem(m_hwnd, IDC_MESSAGE));
+ return _dlgReturn(m_hwnd, 1);
}
}
- if (((LPNMHDR)lParam)->idFrom == IDC_CHAT_LOG && ((MSGFILTER *)lParam)->msg == WM_RBUTTONUP) {
+ if (((LPNMHDR)lParam)->idFrom == IDC_LOG && ((MSGFILTER *)lParam)->msg == WM_RBUTTONUP) {
CHARRANGE sel, all = { 0, -1 };
pt.x = LOWORD(((ENLINK*)lParam)->lParam), pt.y = HIWORD(((ENLINK*)lParam)->lParam);
@@ -2346,13 +2377,13 @@ LABEL_SHOWWINDOW:
wchar_t *pszWord = (wchar_t*)_alloca(8192);
pszWord[0] = '\0';
POINTL ptl = { pt.x, pt.y };
- ScreenToClient(GetDlgItem(hwndDlg, IDC_CHAT_LOG), (LPPOINT)&ptl);
- int iCharIndex = SendDlgItemMessage(hwndDlg, IDC_CHAT_LOG, EM_CHARFROMPOS, 0, (LPARAM)&ptl);
+ ScreenToClient(m_log.GetHwnd(), (LPPOINT)&ptl);
+ int iCharIndex = SendDlgItemMessage(m_hwnd, IDC_LOG, EM_CHARFROMPOS, 0, (LPARAM)&ptl);
if (iCharIndex < 0)
break;
- int start = SendDlgItemMessage(hwndDlg, IDC_CHAT_LOG, EM_FINDWORDBREAK, WB_LEFT, iCharIndex);
- int end = SendDlgItemMessage(hwndDlg, IDC_CHAT_LOG, EM_FINDWORDBREAK, WB_RIGHT, iCharIndex);
+ int start = SendDlgItemMessage(m_hwnd, IDC_LOG, EM_FINDWORDBREAK, WB_LEFT, iCharIndex);
+ int end = SendDlgItemMessage(m_hwnd, IDC_LOG, EM_FINDWORDBREAK, WB_RIGHT, iCharIndex);
if (end - start > 0) {
static char szTrimString[] = ":;,.!?\'\"><()[]- \r\n";
@@ -2364,7 +2395,7 @@ LABEL_SHOWWINDOW:
TEXTRANGE tr = { 0 };
tr.chrg = cr;
tr.lpstrText = (wchar_t*)pszWord;
- int iRes = SendDlgItemMessage(hwndDlg, IDC_CHAT_LOG, EM_GETTEXTRANGE, 0, (LPARAM)&tr);
+ int iRes = SendDlgItemMessage(m_hwnd, IDC_LOG, EM_GETTEXTRANGE, 0, (LPARAM)&tr);
if (iRes > 0) {
size_t iLen = mir_wstrlen(pszWord) - 1;
@@ -2376,10 +2407,10 @@ LABEL_SHOWWINDOW:
}
HMENU hMenu = 0;
- UINT uID = CreateGCMenu(hwndDlg, &hMenu, 1, pt, si, NULL, pszWord);
+ UINT uID = CreateGCMenu(m_hwnd, &hMenu, 1, pt, si, NULL, pszWord);
switch (uID) {
case 0:
- PostMessage(hwndDlg, WM_MOUSEACTIVATE, 0, 0);
+ PostMessage(m_hwnd, WM_MOUSEACTIVATE, 0, 0);
break;
case ID_COPYALL:
@@ -2387,30 +2418,30 @@ LABEL_SHOWWINDOW:
SendMessage(((LPNMHDR)lParam)->hwndFrom, EM_EXSETSEL, 0, (LPARAM)&all);
SendMessage(((LPNMHDR)lParam)->hwndFrom, WM_COPY, 0, 0);
SendMessage(((LPNMHDR)lParam)->hwndFrom, EM_EXSETSEL, 0, (LPARAM)&sel);
- PostMessage(hwndDlg, WM_MOUSEACTIVATE, 0, 0);
+ PostMessage(m_hwnd, WM_MOUSEACTIVATE, 0, 0);
break;
case ID_CLEARLOG:
- ClearLog(dat);
+ ClearLog();
break;
case ID_SEARCH_GOOGLE:
if (pszWord[0])
Utils_OpenUrlW(CMStringW(FORMAT, L"http://www.google.com/search?q=%s", pszWord));
- PostMessage(hwndDlg, WM_MOUSEACTIVATE, 0, 0);
+ PostMessage(m_hwnd, WM_MOUSEACTIVATE, 0, 0);
break;
case ID_SEARCH_WIKIPEDIA:
if (pszWord[0])
Utils_OpenUrlW(CMStringW(FORMAT, L"http://en.wikipedia.org/wiki/%s", pszWord));
- PostMessage(hwndDlg, WM_MOUSEACTIVATE, 0, 0);
+ PostMessage(m_hwnd, WM_MOUSEACTIVATE, 0, 0);
break;
default:
- PostMessage(hwndDlg, WM_MOUSEACTIVATE, 0, 0);
- pci->DoEventHookAsync(hwndDlg, si->ptszID, si->pszModule, GC_USER_LOGMENU, NULL, NULL, (LPARAM)uID);
+ PostMessage(m_hwnd, WM_MOUSEACTIVATE, 0, 0);
+ pci->DoEventHookAsync(m_hwnd, si->ptszID, si->pszModule, GC_USER_LOGMENU, NULL, NULL, (LPARAM)uID);
break;
}
@@ -2420,12 +2451,12 @@ LABEL_SHOWWINDOW:
break;
case EN_REQUESTRESIZE:
- if (((LPNMHDR)lParam)->idFrom == IDC_CHAT_MESSAGE)
- DM_HandleAutoSizeRequest(dat, (REQRESIZE *)lParam);
+ if (((LPNMHDR)lParam)->idFrom == IDC_MESSAGE)
+ DM_HandleAutoSizeRequest(this, (REQRESIZE *)lParam);
break;
case EN_LINK:
- if (((LPNMHDR)lParam)->idFrom == IDC_CHAT_LOG) {
+ if (((LPNMHDR)lParam)->idFrom == IDC_LOG) {
switch (((ENLINK*)lParam)->msg) {
case WM_SETCURSOR:
if (g_Settings.bClickableNicks) {
@@ -2444,7 +2475,7 @@ LABEL_SHOWWINDOW:
SendMessage(((LPNMHDR)lParam)->hwndFrom, EM_EXGETSEL, 0, (LPARAM)&sel);
if (sel.cpMin == sel.cpMax) {
UINT msg = ((ENLINK*)lParam)->msg;
- dat->pContainer->MenuBar->Cancel();
+ pContainer->MenuBar->Cancel();
TEXTRANGE tr;
tr.lpstrText = NULL;
@@ -2460,7 +2491,7 @@ LABEL_SHOWWINDOW:
pt.x = (short)LOWORD(((ENLINK*)lParam)->lParam);
pt.y = (short)HIWORD(((ENLINK*)lParam)->lParam);
ClientToScreen(((NMHDR*)lParam)->hwndFrom, &pt);
- switch (TrackPopupMenu(hSubMenu, TPM_RETURNCMD, pt.x, pt.y, 0, hwndDlg, NULL)) {
+ switch (TrackPopupMenu(hSubMenu, TPM_RETURNCMD, pt.x, pt.y, 0, m_hwnd, NULL)) {
case ID_NEW:
Utils_OpenUrlW(tr.lpstrText);
break;
@@ -2468,8 +2499,8 @@ LABEL_SHOWWINDOW:
Utils_OpenUrlW(tr.lpstrText,false);
break;
case ID_COPY:
- Utils::CopyToClipBoard(tr.lpstrText, hwndDlg);
- SetFocus(GetDlgItem(hwndDlg, IDC_CHAT_MESSAGE));
+ Utils::CopyToClipBoard(tr.lpstrText, m_hwnd);
+ SetFocus(GetDlgItem(m_hwnd, IDC_MESSAGE));
break;
}
mir_free(tr.lpstrText);
@@ -2477,7 +2508,7 @@ LABEL_SHOWWINDOW:
}
if (((ENLINK*)lParam)->msg == WM_LBUTTONUP) {
Utils_OpenUrlW(tr.lpstrText);
- SetFocus(GetDlgItem(hwndDlg, IDC_CHAT_MESSAGE));
+ SetFocus(GetDlgItem(m_hwnd, IDC_MESSAGE));
mir_free(tr.lpstrText);
return TRUE;
}
@@ -2494,17 +2525,17 @@ LABEL_SHOWWINDOW:
pt.y = (short)HIWORD(((ENLINK*)lParam)->lParam);
ClientToScreen(((NMHDR*)lParam)->hwndFrom, &pt);
memcpy(&uiNew, ui, sizeof(USERINFO));
- UINT uID = CreateGCMenu(hwndDlg, &hMenu, 0, pt, si, uiNew.pszUID, uiNew.pszNick);
+ UINT uID = CreateGCMenu(m_hwnd, &hMenu, 0, pt, si, uiNew.pszUID, uiNew.pszNick);
switch (uID) {
case 0:
break;
case ID_MESS:
- pci->DoEventHookAsync(hwndDlg, si->ptszID, si->pszModule, GC_USER_PRIVMESS, ui, NULL, 0);
+ pci->DoEventHookAsync(m_hwnd, si->ptszID, si->pszModule, GC_USER_PRIVMESS, ui, NULL, 0);
break;
default:
- pci->DoEventHookAsync(hwndDlg, si->ptszID, si->pszModule, GC_USER_NICKLISTMENU, ui, NULL, (LPARAM)uID);
+ pci->DoEventHookAsync(m_hwnd, si->ptszID, si->pszModule, GC_USER_NICKLISTMENU, ui, NULL, (LPARAM)uID);
break;
}
DestroyGCMenu(&hMenu, 1);
@@ -2514,7 +2545,7 @@ LABEL_SHOWWINDOW:
}
else if (msg == WM_LBUTTONUP) {
CHARRANGE chr;
- SendDlgItemMessage(hwndDlg, IDC_CHAT_MESSAGE, EM_EXGETSEL, 0, (LPARAM)&chr);
+ SendDlgItemMessage(m_hwnd, IDC_MESSAGE, EM_EXGETSEL, 0, (LPARAM)&chr);
wchar_t tszAplTmpl[] = L"%s:";
size_t bufSize = mir_wstrlen(tr.lpstrText) + mir_wstrlen(tszAplTmpl) + 3;
@@ -2526,7 +2557,7 @@ LABEL_SHOWWINDOW:
// prepend nick with space if needed
tr2.chrg.cpMin = chr.cpMin - 1;
tr2.chrg.cpMax = chr.cpMin;
- SendDlgItemMessage(hwndDlg, IDC_CHAT_MESSAGE, EM_GETTEXTRANGE, 0, (LPARAM)&tr2);
+ SendDlgItemMessage(m_hwnd, IDC_MESSAGE, EM_GETTEXTRANGE, 0, (LPARAM)&tr2);
if (!iswspace(*tr2.lpstrText))
*tszTmp++ = ' ';
mir_wstrcpy(tszTmp, tr.lpstrText);
@@ -2540,7 +2571,7 @@ LABEL_SHOWWINDOW:
tr2.chrg.cpMax = chr.cpMax + 1;
// if there is no space after selection,
// or there is nothing after selection at all...
- if (!SendDlgItemMessage(hwndDlg, IDC_CHAT_MESSAGE, EM_GETTEXTRANGE, 0, (LPARAM)&tr2) || !iswspace(*tr2.lpstrText)) {
+ if (!SendDlgItemMessage(m_hwnd, IDC_MESSAGE, EM_GETTEXTRANGE, 0, (LPARAM)&tr2) || !iswspace(*tr2.lpstrText)) {
tszAppeal[st++] = ' ';
tszAppeal[st++] = '\0';
}
@@ -2549,12 +2580,12 @@ LABEL_SHOWWINDOW:
tszAppeal[st++] = ' ';
tszAppeal[st++] = '\0';
}
- SendDlgItemMessage(hwndDlg, IDC_CHAT_MESSAGE, EM_REPLACESEL, FALSE, (LPARAM)tszAppeal);
+ SendDlgItemMessage(m_hwnd, IDC_MESSAGE, EM_REPLACESEL, FALSE, (LPARAM)tszAppeal);
mir_free((void*)tr2.lpstrText);
mir_free((void*)tszAppeal);
}
}
- SetFocus(GetDlgItem(hwndDlg, IDC_CHAT_MESSAGE));
+ SetFocus(GetDlgItem(m_hwnd, IDC_MESSAGE));
mir_free(tr.lpstrText);
return TRUE;
}
@@ -2567,35 +2598,35 @@ LABEL_SHOWWINDOW:
case WM_LBUTTONDOWN:
GetCursorPos(&tmp);
- if (!dat->Panel->isHovered()) {
+ if (!Panel->isHovered()) {
cur.x = (SHORT)tmp.x;
cur.y = (SHORT)tmp.y;
- SendMessage(dat->pContainer->hwnd, WM_NCLBUTTONDOWN, HTCAPTION, *((LPARAM*)(&cur)));
+ SendMessage(pContainer->hwnd, WM_NCLBUTTONDOWN, HTCAPTION, *((LPARAM*)(&cur)));
}
break;
case WM_LBUTTONUP:
GetCursorPos(&tmp);
- if (dat->Panel->isHovered())
- dat->Panel->handleClick(tmp);
+ if (Panel->isHovered())
+ Panel->handleClick(tmp);
else {
cur.x = (SHORT)tmp.x;
cur.y = (SHORT)tmp.y;
- SendMessage(dat->pContainer->hwnd, WM_NCLBUTTONUP, HTCAPTION, *((LPARAM*)(&cur)));
+ SendMessage(pContainer->hwnd, WM_NCLBUTTONUP, HTCAPTION, *((LPARAM*)(&cur)));
}
break;
case WM_MOUSEMOVE:
GetCursorPos(&pt);
- DM_DismissTip(dat, pt);
- dat->Panel->trackMouse(pt);
+ DM_DismissTip(this, pt);
+ Panel->trackMouse(pt);
break;
case WM_APPCOMMAND:
{
DWORD cmd = GET_APPCOMMAND_LPARAM(lParam);
if (cmd == APPCOMMAND_BROWSER_BACKWARD || cmd == APPCOMMAND_BROWSER_FORWARD) {
- SendMessage(dat->pContainer->hwnd, DM_SELECTTAB, cmd == APPCOMMAND_BROWSER_BACKWARD ? DM_SELECT_PREV : DM_SELECT_NEXT, 0);
+ SendMessage(pContainer->hwnd, DM_SELECTTAB, cmd == APPCOMMAND_BROWSER_BACKWARD ? DM_SELECT_PREV : DM_SELECT_NEXT, 0);
return 1;
}
}
@@ -2603,7 +2634,7 @@ LABEL_SHOWWINDOW:
case WM_COMMAND:
if (LOWORD(wParam) >= MIN_CBUTTONID && LOWORD(wParam) <= MAX_CBUTTONID){
- Srmm_ClickToolbarIcon(dat->hContact, LOWORD(wParam), GetDlgItem(hwndDlg, LOWORD(wParam)), 0);
+ Srmm_ClickToolbarIcon(m_hContact, LOWORD(wParam), GetDlgItem(m_hwnd, LOWORD(wParam)), 0);
break;
}
@@ -2613,13 +2644,13 @@ LABEL_SHOWWINDOW:
TVHITTESTINFO hti;
hti.pt.x = (short)LOWORD(GetMessagePos());
hti.pt.y = (short)HIWORD(GetMessagePos());
- ScreenToClient(GetDlgItem(hwndDlg, IDC_LIST), &hti.pt);
+ ScreenToClient(GetDlgItem(m_hwnd, IDC_LIST), &hti.pt);
- int item = LOWORD(SendDlgItemMessage(hwndDlg, IDC_LIST, LB_ITEMFROMPOINT, 0, MAKELPARAM(hti.pt.x, hti.pt.y)));
+ int item = LOWORD(SendDlgItemMessage(m_hwnd, IDC_LIST, LB_ITEMFROMPOINT, 0, MAKELPARAM(hti.pt.x, hti.pt.y)));
USERINFO *ui = pci->UM_FindUserFromIndex(si->pUsers, item);
if (ui) {
if (g_Settings.bDoubleClick4Privat ? GetKeyState(VK_SHIFT) & 0x8000 : !(GetKeyState(VK_SHIFT) & 0x8000)) {
- LRESULT lResult = (LRESULT)SendDlgItemMessage(hwndDlg, IDC_CHAT_MESSAGE, EM_GETSEL, 0, 0);
+ LRESULT lResult = (LRESULT)SendDlgItemMessage(m_hwnd, IDC_MESSAGE, EM_GETSEL, 0, 0);
int start = LOWORD(lResult);
CMStringW tszName;
if (start == 0)
@@ -2627,113 +2658,113 @@ LABEL_SHOWWINDOW:
else
tszName.Format(L"%s ", ui->pszNick);
- SendDlgItemMessage(hwndDlg, IDC_CHAT_MESSAGE, EM_REPLACESEL, FALSE, (LPARAM)tszName.GetString());
- PostMessage(hwndDlg, WM_MOUSEACTIVATE, 0, 0);
- SetFocus(GetDlgItem(hwndDlg, IDC_CHAT_MESSAGE));
+ SendDlgItemMessage(m_hwnd, IDC_MESSAGE, EM_REPLACESEL, FALSE, (LPARAM)tszName.GetString());
+ PostMessage(m_hwnd, WM_MOUSEACTIVATE, 0, 0);
+ SetFocus(GetDlgItem(m_hwnd, IDC_MESSAGE));
}
- else pci->DoEventHookAsync(hwndDlg, si->ptszID, si->pszModule, GC_USER_PRIVMESS, ui, NULL, 0);
+ else pci->DoEventHookAsync(m_hwnd, si->ptszID, si->pszModule, GC_USER_PRIVMESS, ui, NULL, 0);
}
return TRUE;
}
if (HIWORD(wParam) == LBN_KILLFOCUS)
- RedrawWindow(GetDlgItem(hwndDlg, IDC_LIST), NULL, NULL, RDW_INVALIDATE);
+ RedrawWindow(GetDlgItem(m_hwnd, IDC_LIST), NULL, NULL, RDW_INVALIDATE);
break;
case IDC_TOGGLESIDEBAR:
- SendMessage(dat->pContainer->hwnd, WM_COMMAND, IDC_TOGGLESIDEBAR, 0);
+ SendMessage(pContainer->hwnd, WM_COMMAND, IDC_TOGGLESIDEBAR, 0);
break;
case IDCANCEL:
- ShowWindow(dat->pContainer->hwnd, SW_MINIMIZE);
+ ShowWindow(pContainer->hwnd, SW_MINIMIZE);
return FALSE;
case IDOK:
- if (GetSendButtonState(hwndDlg) != PBS_DISABLED) {
+ if (GetSendButtonState(m_hwnd) != PBS_DISABLED) {
MODULEINFO *mi = pci->MM_FindModule(si->pszModule);
if (mi == NULL)
break;
- ptrA pszRtf(Message_GetFromStream(GetDlgItem(hwndDlg, IDC_CHAT_MESSAGE)));
+ ptrA pszRtf(Message_GetFromStream(GetDlgItem(m_hwnd, IDC_MESSAGE)));
pci->SM_AddCommand(si->ptszID, si->pszModule, pszRtf);
CMStringW ptszText(ptrW(mir_utf8decodeW(pszRtf)));
if (ptszText.IsEmpty())
break;
- DoRtfToTags(si->dat, ptszText, mi->nColorCount, mi->crColors);
+ si->dat->DoRtfToTags(ptszText, mi->nColorCount, mi->crColors);
ptszText.Trim();
ptszText.Replace(L"%", L"%%");
if (mi->bAckMsg) {
- Utils::enableDlgControl(hwndDlg, IDC_CHAT_MESSAGE, false);
- SendDlgItemMessage(hwndDlg, IDC_CHAT_MESSAGE, EM_SETREADONLY, TRUE, 0);
+ Utils::enableDlgControl(m_hwnd, IDC_MESSAGE, false);
+ SendDlgItemMessage(m_hwnd, IDC_MESSAGE, EM_SETREADONLY, TRUE, 0);
}
- else SetDlgItemText(hwndDlg, IDC_CHAT_MESSAGE, L"");
+ else SetDlgItemText(m_hwnd, IDC_MESSAGE, L"");
- Utils::enableDlgControl(hwndDlg, IDOK, false);
+ Utils::enableDlgControl(m_hwnd, IDOK, false);
// Typing support for GCW_PRIVMESS sessions
if (si->iType == GCW_PRIVMESS)
- if (dat->nTypeMode == PROTOTYPE_SELFTYPING_ON)
- DM_NotifyTyping(dat, PROTOTYPE_SELFTYPING_OFF);
+ if (nTypeMode == PROTOTYPE_SELFTYPING_ON)
+ DM_NotifyTyping(PROTOTYPE_SELFTYPING_OFF);
bool fSound = true;
if (ptszText[0] == '/' || si->iType == GCW_SERVER)
fSound = false;
- pci->DoEventHookAsync(hwndDlg, si->ptszID, si->pszModule, GC_USER_MESSAGE, NULL, ptszText, 0);
+ pci->DoEventHookAsync(m_hwnd, si->ptszID, si->pszModule, GC_USER_MESSAGE, NULL, ptszText, 0);
mi->idleTimeStamp = time(0);
mi->lastIdleCheck = 0;
pci->SM_BroadcastMessage(si->pszModule, GC_UPDATESTATUSBAR, 0, 1, TRUE);
- if (dat->pContainer)
- if (fSound && !nen_options.iNoSounds && !(dat->pContainer->dwFlags & CNT_NOSOUND))
+ if (pContainer)
+ if (fSound && !nen_options.iNoSounds && !(pContainer->dwFlags & CNT_NOSOUND))
SkinPlaySound("ChatSent");
- SetFocus(GetDlgItem(hwndDlg, IDC_CHAT_MESSAGE));
+ SetFocus(GetDlgItem(m_hwnd, IDC_MESSAGE));
}
break;
case IDC_SHOWNICKLIST:
- if (!IsWindowEnabled(GetDlgItem(hwndDlg, IDC_SHOWNICKLIST)))
+ if (!IsWindowEnabled(GetDlgItem(m_hwnd, IDC_SHOWNICKLIST)))
break;
if (si->iType == GCW_SERVER)
break;
si->bNicklistEnabled = !si->bNicklistEnabled;
- SendMessage(hwndDlg, WM_SIZE, 0, 0);
+ SendMessage(m_hwnd, WM_SIZE, 0, 0);
if (CSkin::m_skinEnabled)
- InvalidateRect(hwndDlg, NULL, TRUE);
- PostMessage(hwndDlg, GC_SCROLLTOBOTTOM, 0, 0);
+ InvalidateRect(m_hwnd, NULL, TRUE);
+ PostMessage(m_hwnd, GC_SCROLLTOBOTTOM, 0, 0);
break;
- case IDC_CHAT_MESSAGE:
+ case IDC_MESSAGE:
if (HIWORD(wParam) == EN_CHANGE) {
- if (dat->pContainer->hwndActive == hwndDlg)
- UpdateReadChars(dat);
- dat->dwLastActivity = GetTickCount();
- dat->pContainer->dwLastActivity = dat->dwLastActivity;
- SendDlgItemMessage(hwndDlg, IDOK, BUTTONSETASNORMAL, GetRichTextLength(GetDlgItem(hwndDlg, IDC_CHAT_MESSAGE)) != 0, 0);
- Utils::enableDlgControl(hwndDlg, IDOK, GetRichTextLength(GetDlgItem(hwndDlg, IDC_CHAT_MESSAGE)) != 0);
+ if (pContainer->hwndActive == m_hwnd)
+ UpdateReadChars();
+ dwLastActivity = GetTickCount();
+ pContainer->dwLastActivity = dwLastActivity;
+ SendDlgItemMessage(m_hwnd, IDOK, BUTTONSETASNORMAL, GetRichTextLength(GetDlgItem(m_hwnd, IDC_MESSAGE)) != 0, 0);
+ Utils::enableDlgControl(m_hwnd, IDOK, GetRichTextLength(GetDlgItem(m_hwnd, IDC_MESSAGE)) != 0);
// Typing support for GCW_PRIVMESS sessions
if (si->iType == GCW_PRIVMESS) {
if (!(GetKeyState(VK_CONTROL) & 0x8000)) {
- dat->nLastTyping = GetTickCount();
- if (GetWindowTextLength(GetDlgItem(hwndDlg, IDC_CHAT_MESSAGE))) {
- if (dat->nTypeMode == PROTOTYPE_SELFTYPING_OFF) {
- if (!(dat->dwFlags & MWF_INITMODE))
- DM_NotifyTyping(dat, PROTOTYPE_SELFTYPING_ON);
+ nLastTyping = GetTickCount();
+ if (GetWindowTextLength(GetDlgItem(m_hwnd, IDC_MESSAGE))) {
+ if (nTypeMode == PROTOTYPE_SELFTYPING_OFF) {
+ if (!(dwFlags & MWF_INITMODE))
+ DM_NotifyTyping(PROTOTYPE_SELFTYPING_ON);
}
}
- else if (dat->nTypeMode == PROTOTYPE_SELFTYPING_ON)
- DM_NotifyTyping(dat, PROTOTYPE_SELFTYPING_OFF);
+ else if (nTypeMode == PROTOTYPE_SELFTYPING_ON)
+ DM_NotifyTyping(PROTOTYPE_SELFTYPING_OFF);
}
}
}
break;
case IDC_CHAT_HISTORY:
- if (IsWindowEnabled(GetDlgItem(hwndDlg, IDC_CHAT_HISTORY))) {
+ if (IsWindowEnabled(GetDlgItem(m_hwnd, IDC_CHAT_HISTORY))) {
MODULEINFO *pInfo = pci->MM_FindModule(si->pszModule);
if (ServiceExists("MSP/HTMLlog/ViewLog") && strstr(si->pszModule, "IRC")) {
char szName[MAX_PATH];
@@ -2742,22 +2773,22 @@ LABEL_SHOWWINDOW:
CallService("MSP/HTMLlog/ViewLog", (WPARAM)si->pszModule, (LPARAM)szName);
}
else if (pInfo)
- ShellExecute(hwndDlg, NULL, pci->GetChatLogsFilename(si, 0), NULL, NULL, SW_SHOW);
+ ShellExecute(m_hwnd, NULL, pci->GetChatLogsFilename(si, 0), NULL, NULL, SW_SHOW);
}
break;
case IDC_CHAT_CLOSE:
- SendMessage(hwndDlg, WM_CLOSE, 0, 1);
+ SendMessage(m_hwnd, WM_CLOSE, 0, 1);
break;
case IDC_CHANMGR:
- if (!IsWindowEnabled(GetDlgItem(hwndDlg, IDC_CHANMGR)))
+ if (!IsWindowEnabled(GetDlgItem(m_hwnd, IDC_CHANMGR)))
break;
- pci->DoEventHookAsync(hwndDlg, si->ptszID, si->pszModule, GC_USER_CHANMGR, NULL, NULL, 0);
+ pci->DoEventHookAsync(m_hwnd, si->ptszID, si->pszModule, GC_USER_CHANMGR, NULL, NULL, 0);
break;
case IDC_FILTER:
- if (!IsWindowEnabled(GetDlgItem(hwndDlg, IDC_FILTER)))
+ if (!IsWindowEnabled(GetDlgItem(m_hwnd, IDC_FILTER)))
break;
if (si->iLogFilterFlags == 0 && !si->bFilterEnabled) {
@@ -2766,15 +2797,15 @@ LABEL_SHOWWINDOW:
}
else si->bFilterEnabled = !si->bFilterEnabled;
- SendDlgItemMessage(hwndDlg, IDC_FILTER, BUTTONSETOVERLAYICON,
+ SendDlgItemMessage(m_hwnd, IDC_FILTER, BUTTONSETOVERLAYICON,
(LPARAM)(si->bFilterEnabled ? PluginConfig.g_iconOverlayEnabled : PluginConfig.g_iconOverlayDisabled), 0);
if (si->bFilterEnabled && M.GetByte(CHAT_MODULE, "RightClickFilter", 0) == 0) {
- SendMessage(hwndDlg, GC_SHOWFILTERMENU, 0, 0);
+ SendMessage(m_hwnd, GC_SHOWFILTERMENU, 0, 0);
break;
}
- SendMessage(hwndDlg, GC_REDRAWLOG, 0, 0);
- SendMessage(hwndDlg, GC_UPDATETITLE, 0, 0);
+ SendMessage(m_hwnd, GC_REDRAWLOG, 0, 0);
+ SendMessage(m_hwnd, GC_UPDATETITLE, 0, 0);
db_set_b(si->hContact, CHAT_MODULE, "FilterEnabled", (BYTE)si->bFilterEnabled);
break;
@@ -2782,22 +2813,22 @@ LABEL_SHOWWINDOW:
cf.cbSize = sizeof(CHARFORMAT2);
cf.dwEffects = 0;
- if (!IsWindowEnabled(GetDlgItem(hwndDlg, IDC_BKGCOLOR)))
+ if (!IsWindowEnabled(GetDlgItem(m_hwnd, IDC_BKGCOLOR)))
break;
- if (IsDlgButtonChecked(hwndDlg, IDC_BKGCOLOR)) {
+ if (IsDlgButtonChecked(m_hwnd, IDC_BKGCOLOR)) {
if (M.GetByte(CHAT_MODULE, "RightClickFilter", 0) == 0)
- SendMessage(hwndDlg, GC_SHOWCOLORCHOOSER, 0, IDC_BKGCOLOR);
+ SendMessage(m_hwnd, GC_SHOWCOLORCHOOSER, 0, IDC_BKGCOLOR);
else if (si->bBGSet) {
cf.dwMask = CFM_BACKCOLOR;
cf.crBackColor = pci->MM_FindModule(si->pszModule)->crColors[si->iBG];
- SendDlgItemMessage(hwndDlg, IDC_CHAT_MESSAGE, EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM)&cf);
+ SendDlgItemMessage(m_hwnd, IDC_MESSAGE, EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM)&cf);
}
}
else {
cf.dwMask = CFM_BACKCOLOR;
cf.crBackColor = (COLORREF)M.GetDword(FONTMODULE, "inputbg", SRMSGDEFSET_BKGCOLOUR);
- SendDlgItemMessage(hwndDlg, IDC_CHAT_MESSAGE, EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM)&cf);
+ SendDlgItemMessage(m_hwnd, IDC_MESSAGE, EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM)&cf);
}
break;
@@ -2805,16 +2836,16 @@ LABEL_SHOWWINDOW:
cf.cbSize = sizeof(CHARFORMAT2);
cf.dwEffects = 0;
- if (!IsWindowEnabled(GetDlgItem(hwndDlg, IDC_COLOR)))
+ if (!IsWindowEnabled(GetDlgItem(m_hwnd, IDC_COLOR)))
break;
- if (IsDlgButtonChecked(hwndDlg, IDC_COLOR)) {
+ if (IsDlgButtonChecked(m_hwnd, IDC_COLOR)) {
if (M.GetByte(CHAT_MODULE, "RightClickFilter", 0) == 0)
- SendMessage(hwndDlg, GC_SHOWCOLORCHOOSER, 0, IDC_COLOR);
+ SendMessage(m_hwnd, GC_SHOWCOLORCHOOSER, 0, IDC_COLOR);
else if (si->bFGSet) {
cf.dwMask = CFM_COLOR;
cf.crTextColor = pci->MM_FindModule(si->pszModule)->crColors[si->iFG];
- SendDlgItemMessage(hwndDlg, IDC_CHAT_MESSAGE, EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM)&cf);
+ SendDlgItemMessage(m_hwnd, IDC_MESSAGE, EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM)&cf);
}
}
else {
@@ -2822,7 +2853,7 @@ LABEL_SHOWWINDOW:
LoadLogfont(MSGFONTID_MESSAGEAREA, NULL, &cr, FONTMODULE);
cf.dwMask = CFM_COLOR;
cf.crTextColor = cr;
- SendDlgItemMessage(hwndDlg, IDC_CHAT_MESSAGE, EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM)&cf);
+ SendDlgItemMessage(m_hwnd, IDC_MESSAGE, EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM)&cf);
}
break;
@@ -2833,33 +2864,33 @@ LABEL_SHOWWINDOW:
cf.dwMask = CFM_BOLD | CFM_ITALIC | CFM_UNDERLINE;
cf.dwEffects = 0;
- if (LOWORD(wParam) == IDC_CHAT_BOLD && !IsWindowEnabled(GetDlgItem(hwndDlg, IDC_CHAT_BOLD)))
+ if (LOWORD(wParam) == IDC_CHAT_BOLD && !IsWindowEnabled(GetDlgItem(m_hwnd, IDC_CHAT_BOLD)))
break;
- if (LOWORD(wParam) == IDC_ITALICS && !IsWindowEnabled(GetDlgItem(hwndDlg, IDC_ITALICS)))
+ if (LOWORD(wParam) == IDC_ITALICS && !IsWindowEnabled(GetDlgItem(m_hwnd, IDC_ITALICS)))
break;
- if (LOWORD(wParam) == IDC_CHAT_UNDERLINE && !IsWindowEnabled(GetDlgItem(hwndDlg, IDC_CHAT_UNDERLINE)))
+ if (LOWORD(wParam) == IDC_CHAT_UNDERLINE && !IsWindowEnabled(GetDlgItem(m_hwnd, IDC_CHAT_UNDERLINE)))
break;
- if (IsDlgButtonChecked(hwndDlg, IDC_CHAT_BOLD))
+ if (IsDlgButtonChecked(m_hwnd, IDC_CHAT_BOLD))
cf.dwEffects |= CFE_BOLD;
- if (IsDlgButtonChecked(hwndDlg, IDC_ITALICS))
+ if (IsDlgButtonChecked(m_hwnd, IDC_ITALICS))
cf.dwEffects |= CFE_ITALIC;
- if (IsDlgButtonChecked(hwndDlg, IDC_CHAT_UNDERLINE))
+ if (IsDlgButtonChecked(m_hwnd, IDC_CHAT_UNDERLINE))
cf.dwEffects |= CFE_UNDERLINE;
- SendDlgItemMessage(hwndDlg, IDC_CHAT_MESSAGE, EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM)&cf);
+ SendDlgItemMessage(m_hwnd, IDC_MESSAGE, EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM)&cf);
break;
case IDC_SELFTYPING:
// Typing support for GCW_PRIVMESS sessions
if (si->iType == GCW_PRIVMESS) {
- if (dat->hContact) {
- int iCurrentTypingMode = db_get_b(dat->hContact, SRMSGMOD, SRMSGSET_TYPING, M.GetByte(SRMSGMOD, SRMSGSET_TYPINGNEW, SRMSGDEFSET_TYPINGNEW));
+ if (m_hContact) {
+ int iCurrentTypingMode = db_get_b(m_hContact, SRMSGMOD, SRMSGSET_TYPING, M.GetByte(SRMSGMOD, SRMSGSET_TYPINGNEW, SRMSGDEFSET_TYPINGNEW));
- if (dat->nTypeMode == PROTOTYPE_SELFTYPING_ON && iCurrentTypingMode) {
- DM_NotifyTyping(dat, PROTOTYPE_SELFTYPING_OFF);
- dat->nTypeMode = PROTOTYPE_SELFTYPING_OFF;
+ if (nTypeMode == PROTOTYPE_SELFTYPING_ON && iCurrentTypingMode) {
+ DM_NotifyTyping(PROTOTYPE_SELFTYPING_OFF);
+ nTypeMode = PROTOTYPE_SELFTYPING_OFF;
}
- db_set_b(dat->hContact, SRMSGMOD, SRMSGSET_TYPING, (BYTE)!iCurrentTypingMode);
+ db_set_b(m_hContact, SRMSGMOD, SRMSGSET_TYPING, (BYTE)!iCurrentTypingMode);
}
}
break;
@@ -2867,7 +2898,7 @@ LABEL_SHOWWINDOW:
break;
case WM_KEYDOWN:
- SetFocus(GetDlgItem(hwndDlg, IDC_CHAT_MESSAGE));
+ SetFocus(GetDlgItem(m_hwnd, IDC_MESSAGE));
break;
case WM_MOVE:
@@ -2878,12 +2909,12 @@ LABEL_SHOWWINDOW:
{
HDC hdc = (HDC)wParam;
UINT item_ids[3] = { ID_EXTBKUSERLIST, ID_EXTBKHISTORY, ID_EXTBKINPUTAREA };
- UINT ctl_ids[3] = { IDC_LIST, IDC_CHAT_LOG, IDC_CHAT_MESSAGE };
+ UINT ctl_ids[3] = { IDC_LIST, IDC_LOG, IDC_MESSAGE };
HANDLE hbp = 0;
HDC hdcMem = 0;
HBITMAP hbm, hbmOld;
- GetClientRect(hwndDlg, &rcClient);
+ GetClientRect(m_hwnd, &rcClient);
LONG cx = rcClient.right - rcClient.left;
LONG cy = rcClient.bottom - rcClient.top;
@@ -2898,14 +2929,14 @@ LABEL_SHOWWINDOW:
}
if (CSkin::m_skinEnabled && !M.isAero()) {
- CSkin::SkinDrawBG(hwndDlg, dat->pContainer->hwnd, dat->pContainer, &rcClient, hdcMem);
+ CSkin::SkinDrawBG(m_hwnd, pContainer->hwnd, pContainer, &rcClient, hdcMem);
for (int i = 0; i < 3; i++) {
CSkinItem *item = &SkinItems[item_ids[i]];
if (!item->IGNORED) {
- GetWindowRect(GetDlgItem(hwndDlg, ctl_ids[i]), &rcWindow);
+ GetWindowRect(GetDlgItem(m_hwnd, ctl_ids[i]), &rcWindow);
pt.x = rcWindow.left;
pt.y = rcWindow.top;
- ScreenToClient(hwndDlg, &pt);
+ ScreenToClient(m_hwnd, &pt);
rc.left = pt.x - item->MARGIN_LEFT;
rc.top = pt.y - item->MARGIN_TOP;
rc.right = rc.left + item->MARGIN_RIGHT + (rcWindow.right - rcWindow.left) + item->MARGIN_LEFT;
@@ -2919,18 +2950,18 @@ LABEL_SHOWWINDOW:
if (M.isAero()) {
LONG temp = rcClient.bottom;
- rcClient.bottom = dat->Panel->isActive() ? dat->Panel->getHeight() + 5 : 5;
+ rcClient.bottom = Panel->isActive() ? Panel->getHeight() + 5 : 5;
FillRect(hdcMem, &rcClient, (HBRUSH)GetStockObject(BLACK_BRUSH));
rcClient.bottom = temp;
}
}
- GetClientRect(hwndDlg, &rc);
- dat->Panel->renderBG(hdcMem, rc, &SkinItems[ID_EXTBKINFOPANELBG], M.isAero());
- dat->Panel->renderContent(hdcMem);
+ GetClientRect(m_hwnd, &rc);
+ Panel->renderBG(hdcMem, rc, &SkinItems[ID_EXTBKINFOPANELBG], M.isAero());
+ Panel->renderContent(hdcMem);
if (!CSkin::m_skinEnabled)
- CSkin::RenderToolbarBG(dat, hdcMem, rcClient);
+ RenderToolbarBG(hdcMem, rcClient);
if (hbp)
CSkin::FinalizeBufferedPaint(hbp, &rcClient);
@@ -2940,8 +2971,8 @@ LABEL_SHOWWINDOW:
DeleteObject(hbm);
DeleteDC(hdcMem);
}
- if (!dat->fLimitedUpdate)
- SetAeroMargins(dat->pContainer);
+ if (!fLimitedUpdate)
+ SetAeroMargins(pContainer);
}
return TRUE;
@@ -2952,27 +2983,27 @@ LABEL_SHOWWINDOW:
case WM_PAINT:
PAINTSTRUCT ps;
- BeginPaint(hwndDlg, &ps);
- EndPaint(hwndDlg, &ps);
+ BeginPaint(m_hwnd, &ps);
+ EndPaint(m_hwnd, &ps);
return 0;
case DM_SETINFOPANEL:
- CInfoPanel::setPanelHandler(dat, wParam, lParam);
+ CInfoPanel::setPanelHandler(this, wParam, lParam);
return 0;
case DM_INVALIDATEPANEL:
- if (dat->Panel)
- dat->Panel->Invalidate(true);
+ if (Panel)
+ Panel->Invalidate(true);
return 0;
case WM_RBUTTONUP:
GetCursorPos(&pt);
- if (!dat->Panel->invokeConfigDialog(pt)) {
+ if (!Panel->invokeConfigDialog(pt)) {
HMENU subMenu = GetSubMenu(PluginConfig.g_hMenuContext, 0);
- MsgWindowUpdateMenu(dat, subMenu, MENU_TABCONTEXT);
+ MsgWindowUpdateMenu(subMenu, MENU_TABCONTEXT);
- int iSelection = TrackPopupMenu(subMenu, TPM_RETURNCMD, pt.x, pt.y, 0, hwndDlg, NULL);
+ int iSelection = TrackPopupMenu(subMenu, TPM_RETURNCMD, pt.x, pt.y, 0, m_hwnd, NULL);
if (iSelection >= IDM_CONTAINERMENU) {
DBVARIANT dbv = { 0 };
char szIndex[10];
@@ -2980,34 +3011,36 @@ LABEL_SHOWWINDOW:
mir_snprintf(szIndex, "%d", iSelection - IDM_CONTAINERMENU);
if (iSelection - IDM_CONTAINERMENU >= 0) {
if (!db_get_ws(NULL, szKey, szIndex, &dbv)) {
- SendMessage(hwndDlg, DM_CONTAINERSELECTED, 0, (LPARAM)dbv.ptszVal);
+ SendMessage(m_hwnd, DM_CONTAINERSELECTED, 0, (LPARAM)dbv.ptszVal);
db_free(&dbv);
}
}
break;
}
- MsgWindowMenuHandler(dat, iSelection, MENU_TABCONTEXT);
+ MsgWindowMenuHandler(iSelection, MENU_TABCONTEXT);
}
break;
case WM_LBUTTONDBLCLK:
if (LOWORD(lParam) < 30)
- PostMessage(hwndDlg, GC_SCROLLTOBOTTOM, 0, 0);
+ PostMessage(m_hwnd, GC_SCROLLTOBOTTOM, 0, 0);
break;
case WM_CLOSE:
if (wParam == 0 && lParam == 0) {
if (PluginConfig.m_EscapeCloses == 1) {
- SendMessage(dat->pContainer->hwnd, WM_SYSCOMMAND, SC_MINIMIZE, 0);
+ SendMessage(pContainer->hwnd, WM_SYSCOMMAND, SC_MINIMIZE, 0);
return TRUE;
}
if (PluginConfig.m_bHideOnClose && PluginConfig.m_EscapeCloses == 2) {
- ShowWindow(dat->pContainer->hwnd, SW_HIDE);
+ ShowWindow(pContainer->hwnd, SW_HIDE);
return TRUE;
}
- _dlgReturn(hwndDlg, TRUE);
+ _dlgReturn(m_hwnd, TRUE);
}
- SendMessage(hwndDlg, GC_CLOSEWINDOW, 0, 1);
+ SendMessage(m_hwnd, GC_CLOSEWINDOW, 0, 1);
+ if (lParam) // forced close not to be handled by the core
+ return 0;
break;
case DM_CONTAINERSELECTED:
@@ -3015,17 +3048,17 @@ LABEL_SHOWWINDOW:
wchar_t *szNewName = (wchar_t*)lParam;
if (!mir_wstrcmp(szNewName, TranslateT("Default container")))
szNewName = CGlobals::m_default_container_name;
- int iOldItems = TabCtrl_GetItemCount(hwndTab);
- if (!wcsncmp(dat->pContainer->szName, szNewName, CONTAINER_NAMELEN))
+ int iOldItems = TabCtrl_GetItemCount(m_hwndParent);
+ if (!wcsncmp(pContainer->szName, szNewName, CONTAINER_NAMELEN))
break;
TContainerData *pNewContainer = FindContainerByName(szNewName);
if (pNewContainer == NULL)
- if ((pNewContainer = CreateContainer(szNewName, FALSE, dat->hContact)) == NULL)
+ if ((pNewContainer = CreateContainer(szNewName, FALSE, m_hContact)) == NULL)
break;
- db_set_ws(dat->hContact, SRMSGMOD_T, "containerW", szNewName);
- PostMessage(PluginConfig.g_hwndHotkeyHandler, DM_DOCREATETAB_CHAT, (WPARAM)pNewContainer, (LPARAM)hwndDlg);
+ db_set_ws(m_hContact, SRMSGMOD_T, "containerW", szNewName);
+ PostMessage(PluginConfig.g_hwndHotkeyHandler, DM_DOCREATETAB_CHAT, (WPARAM)pNewContainer, (LPARAM)m_hwnd);
if (iOldItems > 1) // there were more than 1 tab, container is still valid
- SendMessage(dat->pContainer->hwndActive, WM_SIZE, 0, 0);
+ SendMessage(pContainer->hwndActive, WM_SIZE, 0, 0);
SetForegroundWindow(pNewContainer->hwnd);
SetActiveWindow(pNewContainer->hwnd);
}
@@ -3034,262 +3067,185 @@ LABEL_SHOWWINDOW:
// container API support functions
case DM_QUERYCONTAINER:
if (lParam)
- *(TContainerData**)lParam = dat->pContainer;
+ *(TContainerData**)lParam = pContainer;
return 0;
case DM_QUERYHCONTACT:
if (lParam)
- *(MCONTACT*)lParam = dat->hContact;
+ *(MCONTACT*)lParam = m_hContact;
return 0;
case GC_CLOSEWINDOW:
{
- TContainerData *pContainer = dat->pContainer;
bool bForced = (lParam == 2);
- int iTabs = TabCtrl_GetItemCount(hwndTab);
+ int iTabs = TabCtrl_GetItemCount(m_hwndParent);
if (iTabs == 1 && CMimAPI::m_shutDown == 0) {
- SendMessage(GetParent(GetParent(hwndDlg)), WM_CLOSE, 0, 1);
+ SendMessage(GetParent(m_hwndParent), WM_CLOSE, 0, 1);
return 1;
}
- dat->pContainer->iChilds--;
- int i = GetTabIndexFromHWND(hwndTab, hwndDlg);
+ pContainer->iChilds--;
+ int i = GetTabIndexFromHWND(m_hwndParent, m_hwnd);
// after closing a tab, we need to activate the tab to the left side of
// the previously open tab.
// normally, this tab has the same index after the deletion of the formerly active tab
// unless, of course, we closed the last (rightmost) tab.
- if (!dat->pContainer->bDontSmartClose && iTabs > 1 && !bForced) {
+ if (!pContainer->bDontSmartClose && iTabs > 1 && !bForced) {
if (i == iTabs - 1)
i--;
else
i++;
- TabCtrl_SetCurSel(hwndTab, i);
+ TabCtrl_SetCurSel(m_hwndParent, i);
TCITEM item = { 0 };
item.mask = TCIF_PARAM;
- TabCtrl_GetItem(hwndTab, i, &item); // retrieve dialog hwnd for the now active tab...
- dat->pContainer->hwndActive = (HWND)item.lParam;
+ TabCtrl_GetItem(m_hwndParent, i, &item); // retrieve dialog hwnd for the now active tab...
+ pContainer->hwndActive = (HWND)item.lParam;
- SendMessage(dat->pContainer->hwnd, DM_QUERYCLIENTAREA, 0, (LPARAM)&rc);
- SetWindowPos(dat->pContainer->hwndActive, HWND_TOP, rc.left, rc.top, (rc.right - rc.left), (rc.bottom - rc.top), SWP_SHOWWINDOW);
+ SendMessage(pContainer->hwnd, DM_QUERYCLIENTAREA, 0, (LPARAM)&rc);
+ SetWindowPos(pContainer->hwndActive, HWND_TOP, rc.left, rc.top, (rc.right - rc.left), (rc.bottom - rc.top), SWP_SHOWWINDOW);
ShowWindow((HWND)item.lParam, SW_SHOW);
- SetForegroundWindow(dat->pContainer->hwndActive);
- SetFocus(dat->pContainer->hwndActive);
- SendMessage(dat->pContainer->hwnd, WM_SIZE, 0, 0);
+ SetForegroundWindow(pContainer->hwndActive);
+ SetFocus(pContainer->hwndActive);
+ SendMessage(pContainer->hwnd, WM_SIZE, 0, 0);
}
if (iTabs == 1)
- SendMessage(GetParent(GetParent(hwndDlg)), WM_CLOSE, 0, 1);
+ SendMessage(GetParent(m_hwndParent), WM_CLOSE, 0, 1);
else {
PostMessage(pContainer->hwnd, WM_SIZE, 0, 0);
- DestroyWindow(hwndDlg);
+ Close();
}
}
return 0;
case DM_SETLOCALE:
- if (dat->dwFlags & MWF_WASBACKGROUNDCREATE)
+ if (dwFlags & MWF_WASBACKGROUNDCREATE)
break;
- if (dat->pContainer->hwndActive == hwndDlg && PluginConfig.m_bAutoLocaleSupport && dat->hContact != 0 && dat->pContainer->hwnd == GetForegroundWindow() && dat->pContainer->hwnd == GetActiveWindow()) {
+ if (pContainer->hwndActive == m_hwnd && PluginConfig.m_bAutoLocaleSupport && m_hContact != 0 && pContainer->hwnd == GetForegroundWindow() && pContainer->hwnd == GetActiveWindow()) {
if (lParam)
- dat->hkl = (HKL)lParam;
+ hkl = (HKL)lParam;
- if (dat->hkl)
- ActivateKeyboardLayout(dat->hkl, 0);
+ if (hkl)
+ ActivateKeyboardLayout(hkl, 0);
}
return 0;
case DM_SAVESIZE:
- if (dat->dwFlags & MWF_NEEDCHECKSIZE)
+ if (dwFlags & MWF_NEEDCHECKSIZE)
lParam = 0;
- dat->dwFlags &= ~MWF_NEEDCHECKSIZE;
- if (dat->dwFlags & MWF_WASBACKGROUNDCREATE)
- dat->dwFlags &= ~MWF_INITMODE;
+ dwFlags &= ~MWF_NEEDCHECKSIZE;
+ if (dwFlags & MWF_WASBACKGROUNDCREATE)
+ dwFlags &= ~MWF_INITMODE;
- SendMessage(dat->pContainer->hwnd, DM_QUERYCLIENTAREA, 0, (LPARAM)&rcClient);
- MoveWindow(hwndDlg, rcClient.left, rcClient.top, (rcClient.right - rcClient.left), (rcClient.bottom - rcClient.top), TRUE);
+ SendMessage(pContainer->hwnd, DM_QUERYCLIENTAREA, 0, (LPARAM)&rcClient);
+ MoveWindow(m_hwnd, rcClient.left, rcClient.top, (rcClient.right - rcClient.left), (rcClient.bottom - rcClient.top), TRUE);
- if (dat->dwFlags & MWF_WASBACKGROUNDCREATE) {
- dat->dwFlags &= ~MWF_WASBACKGROUNDCREATE;
- SendMessage(hwndDlg, WM_SIZE, 0, 0);
+ if (dwFlags & MWF_WASBACKGROUNDCREATE) {
+ dwFlags &= ~MWF_WASBACKGROUNDCREATE;
+ SendMessage(m_hwnd, WM_SIZE, 0, 0);
pt.x = pt.y = 0;
- SendDlgItemMessage(hwndDlg, IDC_CHAT_LOG, EM_SETSCROLLPOS, 0, (LPARAM)&pt);
+ SendDlgItemMessage(m_hwnd, IDC_LOG, EM_SETSCROLLPOS, 0, (LPARAM)&pt);
if (PluginConfig.m_bAutoLocaleSupport) {
- if (dat->hkl == 0)
- DM_LoadLocale(dat);
+ if (hkl == 0)
+ DM_LoadLocale(this);
else
- PostMessage(hwndDlg, DM_SETLOCALE, 0, 0);
+ PostMessage(m_hwnd, DM_SETLOCALE, 0, 0);
}
}
else {
- SendMessage(hwndDlg, WM_SIZE, 0, 0);
+ SendMessage(m_hwnd, WM_SIZE, 0, 0);
if (lParam == 0)
- PostMessage(hwndDlg, GC_SCROLLTOBOTTOM, 1, 1);
+ PostMessage(m_hwnd, GC_SCROLLTOBOTTOM, 1, 1);
}
return 0;
case DM_GETWINDOWSTATE:
{
UINT state = MSG_WINDOW_STATE_EXISTS;
- if (IsWindowVisible(hwndDlg))
+ if (IsWindowVisible(m_hwnd))
state |= MSG_WINDOW_STATE_VISIBLE;
- if (GetForegroundWindow() == dat->pContainer->hwnd)
+ if (GetForegroundWindow() == pContainer->hwnd)
state |= MSG_WINDOW_STATE_FOCUS;
- if (IsIconic(dat->pContainer->hwnd))
+ if (IsIconic(pContainer->hwnd))
state |= MSG_WINDOW_STATE_ICONIC;
- SetWindowLongPtr(hwndDlg, DWLP_MSGRESULT, state);
+ SetWindowLongPtr(m_hwnd, DWLP_MSGRESULT, state);
}
return TRUE;
case DM_ADDDIVIDER:
- if (!(dat->dwFlags & MWF_DIVIDERSET) && g_Settings.bUseDividers) {
- if (GetWindowTextLength(GetDlgItem(hwndDlg, IDC_CHAT_LOG)) > 0) {
- dat->dwFlags |= MWF_DIVIDERWANTED;
- dat->dwFlags |= MWF_DIVIDERSET;
- }
- }
+ if (!(dwFlags & MWF_DIVIDERSET) && g_Settings.bUseDividers)
+ if (GetWindowTextLength(m_log.GetHwnd()) > 0)
+ dwFlags |= MWF_DIVIDERWANTED | MWF_DIVIDERSET;
return 0;
case DM_CHECKSIZE:
- dat->dwFlags |= MWF_NEEDCHECKSIZE;
+ dwFlags |= MWF_NEEDCHECKSIZE;
return 0;
case DM_REFRESHTABINDEX:
- dat->iTabID = GetTabIndexFromHWND(GetParent(hwndDlg), hwndDlg);
+ iTabID = GetTabIndexFromHWND(m_hwndParent, m_hwnd);
return 0;
case DM_STATUSBARCHANGED:
- UpdateStatusBar(dat);
+ UpdateStatusBar();
break;
case WM_CBD_UPDATED:
if (lParam)
- CB_ChangeButton(hwndDlg, dat, (CustomButtonData*)lParam);
+ CB_ChangeButton((CustomButtonData*)lParam);
else
- BB_InitDlgButtons(dat);
+ BB_InitDlgButtons();
- BB_SetButtonsPos(dat);
+ BB_SetButtonsPos();
return 0;
case WM_CBD_REMOVED:
if (lParam)
- CB_DestroyButton(hwndDlg, dat, (DWORD)wParam, (DWORD)lParam);
+ CB_DestroyButton((DWORD)wParam, (DWORD)lParam);
else
- CB_DestroyAllButtons(hwndDlg);
+ CB_DestroyAllButtons();
break;
case DM_CONFIGURETOOLBAR:
- SendMessage(hwndDlg, WM_SIZE, 0, 0);
+ SendMessage(m_hwnd, WM_SIZE, 0, 0);
break;
case DM_SMILEYOPTIONSCHANGED:
- SendMessage(hwndDlg, GC_REDRAWLOG, 0, 1);
+ SendMessage(m_hwnd, GC_REDRAWLOG, 0, 1);
break;
case EM_THEMECHANGED:
- DM_FreeTheme(dat);
- return DM_ThemeChanged(dat);
+ DM_FreeTheme();
+ DM_ThemeChanged();
+ return 0;
case WM_DWMCOMPOSITIONCHANGED:
- BB_RefreshTheme(dat);
- memset((void*)&dat->pContainer->mOld, -1000, sizeof(MARGINS));
- CProxyWindow::verify(dat);
+ BB_RefreshTheme();
+ memset(&pContainer->mOld, -1000, sizeof(MARGINS));
+ CProxyWindow::verify(this);
break;
case DM_ACTIVATEME:
- ActivateExistingTab(dat->pContainer, hwndDlg);
+ ActivateExistingTab(pContainer, m_hwnd);
return 0;
case DM_ACTIVATETOOLTIP:
- if (!IsIconic(dat->pContainer->hwnd) && dat->pContainer->hwndActive == hwndDlg)
- dat->Panel->showTip(wParam, lParam);
+ if (!IsIconic(pContainer->hwnd) && pContainer->hwndActive == m_hwnd)
+ Panel->showTip(wParam, lParam);
break;
case DM_SAVEMESSAGELOG:
- DM_SaveLogAsRTF(dat);
+ DM_SaveLogAsRTF(this);
return 0;
case DM_CHECKAUTOHIDE:
- DM_CheckAutoHide(dat, wParam, lParam);
+ DM_CheckAutoHide(this, wParam, lParam);
return 0;
-
- case WM_NCDESTROY:
- if (dat) {
- memset((void*)&dat->pContainer->mOld, -1000, sizeof(MARGINS));
- PostMessage(dat->pContainer->hwnd, WM_SIZE, 0, 1);
- delete dat->Panel;
- if (dat->pContainer->dwFlags & CNT_SIDEBAR)
- dat->pContainer->SideBar->removeSession(dat);
- mir_free(dat->enteredText);
- mir_free(dat);
- SetWindowLongPtr(hwndDlg, GWLP_USERDATA, 0);
- }
- break;
-
- case WM_DESTROY:
- if (si == NULL)
- break;
-
- if (pcli->pfnGetEvent(si->hContact, 0))
- pcli->pfnRemoveEvent(si->hContact, GC_FAKE_EVENT);
- si->wState &= ~STATE_TALK;
- si->hWnd = NULL;
- si->dat = NULL;
- si->pContainer = NULL;
- dat->si = NULL;
-
- TABSRMM_FireEvent(dat->hContact, hwndDlg, MSG_WINDOW_EVT_CLOSING, 0);
-
- if (!dat->bIsAutosizingInput)
- db_set_w(NULL, CHAT_MODULE, "SplitterX", (WORD)g_Settings.iSplitterX);
-
- if (dat->pContainer->settings->fPrivate && !IsAutoSplitEnabled(dat))
- db_set_w(NULL, CHAT_MODULE, "splitY", (WORD)g_Settings.iSplitterY);
-
- // Typing support for GCW_PRIVMESS sessions
- if (si->iType == GCW_PRIVMESS)
- if (dat->nTypeMode == PROTOTYPE_SELFTYPING_ON)
- DM_NotifyTyping(dat, PROTOTYPE_SELFTYPING_OFF);
-
- DM_FreeTheme(dat);
-
- UpdateTrayMenuState(dat, FALSE); // remove me from the tray menu (if still there)
- if (PluginConfig.g_hMenuTrayUnread)
- DeleteMenu(PluginConfig.g_hMenuTrayUnread, (UINT_PTR)dat->hContact, MF_BYCOMMAND);
-
- if (dat->hSmileyIcon)
- DestroyIcon(dat->hSmileyIcon);
-
- if (dat->hwndTip)
- DestroyWindow(dat->hwndTip);
-
- if (hCurHyperlinkHand)
- DestroyCursor(hCurHyperlinkHand);
-
- int i = GetTabIndexFromHWND(hwndTab, hwndDlg);
- if (i >= 0) {
- SendMessage(hwndTab, WM_USER + 100, 0, 0); // clean up tooltip
- TabCtrl_DeleteItem(hwndTab, i);
- BroadCastContainer(dat->pContainer, DM_REFRESHTABINDEX, 0, 0);
- dat->iTabID = -1;
- }
- if (dat->pWnd) {
- delete dat->pWnd;
- dat->pWnd = 0;
- }
- if (dat->sbCustom) {
- delete dat->sbCustom;
- dat->sbCustom = 0;
- }
-
- M.RemoveWindow(hwndDlg);
-
- TABSRMM_FireEvent(dat->hContact, hwndDlg, MSG_WINDOW_EVT_CLOSE, 0);
- break;
}
- return FALSE;
+ return CTabBaseDlg::DlgProc(uMsg, wParam, lParam);
}
diff --git a/plugins/TabSRMM/src/contactcache.cpp b/plugins/TabSRMM/src/contactcache.cpp
index 62a490d9dd..0728b81e00 100644
--- a/plugins/TabSRMM/src/contactcache.cpp
+++ b/plugins/TabSRMM/src/contactcache.cpp
@@ -209,7 +209,7 @@ void CContactCache::allocStats()
* @param hwnd: window handle
* @param dat: _MessageWindowData - window data structure
*/
-void CContactCache::setWindowData(const HWND hwnd, TWindowData *dat)
+void CContactCache::setWindowData(const HWND hwnd, CSrmmWindow *dat)
{
m_hwnd = hwnd;
m_dat = dat;
@@ -535,7 +535,7 @@ HICON CContactCache::getIcon(int &iSize) const
if (m_dat->dwFlags & MWF_ERRORSTATE)
return PluginConfig.g_iconErr;
- if (m_dat->mayFlashTab)
+ if (m_dat->m_bCanFlashTab)
return m_dat->iFlashIcon;
if (m_dat->si && m_dat->iFlashIcon) {
diff --git a/plugins/TabSRMM/src/contactcache.h b/plugins/TabSRMM/src/contactcache.h
index 2dfa05670d..d1f7e2ddb2 100644
--- a/plugins/TabSRMM/src/contactcache.h
+++ b/plugins/TabSRMM/src/contactcache.h
@@ -84,13 +84,13 @@ struct CContactCache : public MZeroedObject
__forceinline LPCWSTR getXStatusMsg() const { return m_xStatusMsg; }
__forceinline LPCWSTR getListeningInfo() const { return m_ListeningInfo; }
__forceinline BYTE getXStatusId() const { return m_xStatus; }
- __forceinline HWND getWindowData(TWindowData*& dat) const { dat = m_dat; return m_hwnd; }
+ __forceinline HWND getWindowData(CSrmmWindow* &dat) const { dat = m_dat; return m_hwnd; }
__forceinline HWND getHwnd() const { return m_hwnd; }
__forceinline DWORD getSessionStart() const { return m_stats->started; }
__forceinline int getSessionMsgCount() const { return (int)m_stats->messageCount; }
- __forceinline TWindowData* getDat() const { return m_dat; }
+ __forceinline CSrmmWindow* getDat() const { return m_dat; }
int getStatus(void) const
{
@@ -107,7 +107,7 @@ struct CContactCache : public MZeroedObject
void updateMeta();
bool updateUIN();
void updateStatusMsg(const char *szKey = 0);
- void setWindowData(const HWND hwnd = 0, TWindowData *dat = 0);
+ void setWindowData(const HWND hwnd = 0, CSrmmWindow *dat = 0);
void resetMeta();
void closeWindow();
void deletedHandler();
@@ -146,7 +146,7 @@ private:
int m_nMax;
int m_iHistoryCurrent, m_iHistoryTop, m_iHistorySize;
- TWindowData *m_dat;
+ CSrmmWindow *m_dat;
TSessionStats *m_stats;
TInputHistory *m_history;
DBCachedContact *cc;
diff --git a/plugins/TabSRMM/src/container.cpp b/plugins/TabSRMM/src/container.cpp
index 744f053d2c..910266fc49 100644
--- a/plugins/TabSRMM/src/container.cpp
+++ b/plugins/TabSRMM/src/container.cpp
@@ -55,22 +55,22 @@ void TSAPI SetAeroMargins(TContainerData *pContainer)
return;
}
- TWindowData *dat = (TWindowData*)GetWindowLongPtr(pContainer->hwndActive, GWLP_USERDATA);
+ CSrmmWindow *dat = (CSrmmWindow*)GetWindowLongPtr(pContainer->hwndActive, GWLP_USERDATA);
if (!dat)
return;
RECT rcWnd;
if (dat->bType == SESSIONTYPE_IM) {
if (dat->Panel->isActive())
- GetWindowRect(GetDlgItem(dat->hwnd, IDC_LOG), &rcWnd);
+ GetWindowRect(GetDlgItem(dat->GetHwnd(), IDC_LOG), &rcWnd);
else
- GetWindowRect(dat->hwnd, &rcWnd);
+ GetWindowRect(dat->GetHwnd(), &rcWnd);
}
else {
if (dat->Panel->isActive())
- GetWindowRect(GetDlgItem(dat->hwnd, IDC_CHAT_LOG), &rcWnd);
+ GetWindowRect(GetDlgItem(dat->GetHwnd(), IDC_LOG), &rcWnd);
else
- GetWindowRect(dat->hwnd, &rcWnd);
+ GetWindowRect(dat->GetHwnd(), &rcWnd);
}
POINT pt = { rcWnd.left, rcWnd.top };
@@ -81,7 +81,7 @@ void TSAPI SetAeroMargins(TContainerData *pContainer)
pContainer->MenuBar->setAero(true);
// bottom part
- GetWindowRect(dat->hwnd, &rcWnd);
+ GetWindowRect(dat->GetHwnd(), &rcWnd);
pt.x = rcWnd.left;
LONG sbar_left, sbar_right;
@@ -447,7 +447,7 @@ static INT_PTR CALLBACK DlgProcContainer(HWND hwndDlg, UINT msg, WPARAM wParam,
RECT rc;
POINT pt;
MCONTACT hContact;
- TWindowData *dat;
+ CTabBaseDlg *dat;
TContainerData *pContainer = (TContainerData*)GetWindowLongPtr(hwndDlg, GWLP_USERDATA);
BOOL bSkinned = CSkin::m_skinEnabled ? TRUE : FALSE;
@@ -612,7 +612,7 @@ static INT_PTR CALLBACK DlgProcContainer(HWND hwndDlg, UINT msg, WPARAM wParam,
pContainer->MenuBar->getClientRect();
if (pContainer->hwndStatus) {
- dat = (TWindowData*)GetWindowLongPtr(pContainer->hwndActive, GWLP_USERDATA);
+ dat = (CSrmmWindow*)GetWindowLongPtr(pContainer->hwndActive, GWLP_USERDATA);
SendMessage(pContainer->hwndStatus, WM_USER + 101, 0, (LPARAM)dat);
RECT rcs;
@@ -664,7 +664,7 @@ static INT_PTR CALLBACK DlgProcContainer(HWND hwndDlg, UINT msg, WPARAM wParam,
SetWindowPos((HWND)tci.lParam, 0, rcClient.left, rcClient.top, (rcClient.right - rcClient.left), (rcClient.bottom - rcClient.top),
SWP_NOSENDCHANGING | SWP_NOACTIVATE/*|SWP_NOCOPYBITS*/);
if (!pContainer->bSizingLoop && sizeChanged) {
- dat = (TWindowData*)GetWindowLongPtr(pContainer->hwndActive, GWLP_USERDATA);
+ dat = (CSrmmWindow*)GetWindowLongPtr(pContainer->hwndActive, GWLP_USERDATA);
DM_ScrollToBottom(dat, 0, 1);
}
}
@@ -728,7 +728,7 @@ static INT_PTR CALLBACK DlgProcContainer(HWND hwndDlg, UINT msg, WPARAM wParam,
else nPanel = nm->dwItemSpec;
panel_found:
if (nPanel == 2) {
- dat = (TWindowData*)GetWindowLongPtr(pContainer->hwndActive, GWLP_USERDATA);
+ dat = (CSrmmWindow*)GetWindowLongPtr(pContainer->hwndActive, GWLP_USERDATA);
SendMessage(pContainer->hwndStatus, SB_GETRECT, nPanel, (LPARAM)&rc);
if (dat)
CheckStatusIconClick(dat, nm->pt, rc, 2, ((LPNMHDR)lParam)->code);
@@ -786,17 +786,17 @@ panel_found:
tci.mask = TCIF_PARAM;
TabCtrl_GetItem(hwndTab, iItem, &tci);
if (tci.lParam && IsWindow((HWND)tci.lParam))
- dat = (TWindowData*)GetWindowLongPtr((HWND)tci.lParam, GWLP_USERDATA);
+ dat = (CSrmmWindow*)GetWindowLongPtr((HWND)tci.lParam, GWLP_USERDATA);
}
// sent from a sidebar button (RMB click) instead of the tab control
else if (((LPNMHDR)lParam)->idFrom == 5000) {
TSideBarNotify* n = reinterpret_cast<TSideBarNotify *>(lParam);
- dat = const_cast<TWindowData *>(n->dat);
+ dat = const_cast<CTabBaseDlg*>(n->dat);
fFromSidebar = true;
}
if (dat)
- MsgWindowUpdateMenu(dat, subMenu, MENU_TABCONTEXT);
+ dat->MsgWindowUpdateMenu(subMenu, MENU_TABCONTEXT);
int iSelection = TrackPopupMenu(subMenu, TPM_RETURNCMD, pt.x, pt.y, 0, hwndDlg, NULL);
if (iSelection >= IDM_CONTAINERMENU) {
@@ -812,7 +812,7 @@ panel_found:
switch (iSelection) {
case ID_TABMENU_CLOSETAB:
if (fFromSidebar)
- SendMessage(dat->hwnd, WM_CLOSE, 1, 0);
+ SendMessage(dat->GetHwnd(), WM_CLOSE, 1, 0);
else
SendMessage(hwndDlg, DM_CLOSETABATMOUSE, 0, (LPARAM)&pt);
break;
@@ -820,18 +820,18 @@ panel_found:
CloseOtherTabs(hwndTab, *dat);
break;
case ID_TABMENU_SAVETABPOSITION:
- db_set_dw(dat->hContact, SRMSGMOD_T, "tabindex", dat->iTabID * 100);
+ db_set_dw(dat->m_hContact, SRMSGMOD_T, "tabindex", dat->iTabID * 100);
break;
case ID_TABMENU_CLEARSAVEDTABPOSITION:
- db_unset(dat->hContact, SRMSGMOD_T, "tabindex");
+ db_unset(dat->m_hContact, SRMSGMOD_T, "tabindex");
break;
case ID_TABMENU_LEAVECHATROOM:
if (dat && dat->bType == SESSIONTYPE_CHAT) {
SESSION_INFO *si = dat->si;
- if (si && dat->hContact) {
- char *szProto = GetContactProto(dat->hContact);
+ if (si && dat->m_hContact) {
+ char *szProto = GetContactProto(dat->m_hContact);
if (szProto)
- CallProtoService(szProto, PS_LEAVECHAT, dat->hContact, 0);
+ CallProtoService(szProto, PS_LEAVECHAT, dat->m_hContact, 0);
}
}
break;
@@ -862,15 +862,15 @@ panel_found:
bool fProcessMainMenu = pContainer->MenuBar->isMainMenu();
pContainer->MenuBar->Cancel();
- dat = (TWindowData*)GetWindowLongPtr(pContainer->hwndActive, GWLP_USERDATA);
+ dat = (CSrmmWindow*)GetWindowLongPtr(pContainer->hwndActive, GWLP_USERDATA);
DWORD dwOldFlags = pContainer->dwFlags;
if (dat) {
if (fProcessContactMenu)
- return Clist_MenuProcessCommand(LOWORD(wParam), MPCF_CONTACTMENU, dat->hContact);
+ return Clist_MenuProcessCommand(LOWORD(wParam), MPCF_CONTACTMENU, dat->m_hContact);
if (fProcessMainMenu)
return Clist_MenuProcessCommand(LOWORD(wParam), MPCF_MAINMENU, 0);
- if (MsgWindowMenuHandler(dat, LOWORD(wParam), MENU_PICMENU) == 1)
+ if (dat->MsgWindowMenuHandler(LOWORD(wParam), MENU_PICMENU) == 1)
break;
}
SendMessage(pContainer->hwndActive, DM_QUERYHCONTACT, 0, (LPARAM)&hContact);
@@ -931,7 +931,7 @@ panel_found:
case WM_EXITSIZEMOVE:
GetClientRect(hwndTab, &rc);
if (!((rc.right - rc.left) == pContainer->oldSize.cx && (rc.bottom - rc.top) == pContainer->oldSize.cy)) {
- dat = (TWindowData*)GetWindowLongPtr(pContainer->hwndActive, GWLP_USERDATA);
+ dat = (CSrmmWindow*)GetWindowLongPtr(pContainer->hwndActive, GWLP_USERDATA);
DM_ScrollToBottom(dat, 0, 0);
SendMessage(pContainer->hwndActive, WM_SIZE, 0, 0);
}
@@ -1006,7 +1006,7 @@ panel_found:
if (lParam) { // lParam != 0 means sent by a chat window
wchar_t szText[512];
- dat = (TWindowData*)GetWindowLongPtr((HWND)wParam, GWLP_USERDATA);
+ dat = (CSrmmWindow*)GetWindowLongPtr((HWND)wParam, GWLP_USERDATA);
GetWindowText((HWND)wParam, szText, _countof(szText));
szText[_countof(szText) - 1] = 0;
SetWindowText(hwndDlg, szText);
@@ -1019,7 +1019,7 @@ panel_found:
SendMessage(pContainer->hwndActive, DM_QUERYHCONTACT, 0, (LPARAM)&hContact);
else
break;
- dat = (TWindowData*)GetWindowLongPtr(pContainer->hwndActive, GWLP_USERDATA);
+ dat = (CSrmmWindow*)GetWindowLongPtr(pContainer->hwndActive, GWLP_USERDATA);
}
else {
HWND hwnd = M.FindWindow(wParam);
@@ -1032,7 +1032,7 @@ panel_found:
}
hContact = wParam;
if (hwnd && hContact)
- dat = (TWindowData*)GetWindowLongPtr(hwnd, GWLP_USERDATA);
+ dat = (CSrmmWindow*)GetWindowLongPtr(hwnd, GWLP_USERDATA);
}
if (dat) {
SendMessage(hwndDlg, DM_SETICON, (WPARAM)dat, (LPARAM)(dat->hXStatusIcon ? dat->hXStatusIcon : dat->hTabStatusIcon));
@@ -1052,13 +1052,13 @@ panel_found:
PostMessage(hwndDlg, WM_CLOSE, 1, 0);
}
- dat = (TWindowData*)GetWindowLongPtr(pContainer->hwndActive, GWLP_USERDATA);
+ dat = (CSrmmWindow*)GetWindowLongPtr(pContainer->hwndActive, GWLP_USERDATA);
if (dat && dat->bType == SESSIONTYPE_IM) {
if (dat->idle && pContainer->hwndActive && IsWindow(pContainer->hwndActive))
dat->Panel->Invalidate(TRUE);
}
else if (dat)
- SendMessage(dat->hwnd, GC_UPDATESTATUSBAR, 0, 0);
+ SendMessage(dat->GetHwnd(), GC_UPDATESTATUSBAR, 0, 0);
}
break;
@@ -1090,7 +1090,7 @@ panel_found:
memset((void*)&pContainer->mOld, -1000, sizeof(MARGINS));
break;
case SC_MINIMIZE:
- dat = reinterpret_cast<TWindowData *>(GetWindowLongPtr(pContainer->hwndActive, GWLP_USERDATA));
+ dat = reinterpret_cast<CSrmmWindow *>(GetWindowLongPtr(pContainer->hwndActive, GWLP_USERDATA));
if (dat) {
GetWindowRect(pContainer->hwndActive, &pContainer->rcLogSaved);
pContainer->ptLogSaved.x = pContainer->rcLogSaved.left;
@@ -1397,7 +1397,7 @@ panel_found:
SetWindowPos(hwndDlg, 0, rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top, SWP_NOACTIVATE | SWP_FRAMECHANGED | SWP_NOCOPYBITS);
RedrawWindow(hwndDlg, NULL, NULL, RDW_INVALIDATE | RDW_FRAME | RDW_UPDATENOW);
if (pContainer->hwndActive != 0) {
- dat = (TWindowData*)GetWindowLongPtr(pContainer->hwndActive, GWLP_USERDATA);
+ dat = (CSrmmWindow*)GetWindowLongPtr(pContainer->hwndActive, GWLP_USERDATA);
DM_ScrollToBottom(dat, 0, 0);
}
}
@@ -1497,7 +1497,7 @@ panel_found:
case DM_SETICON:
{
- dat = (TWindowData*)wParam;
+ dat = (CSrmmWindow*)wParam;
HICON hIconMsg = PluginConfig.g_IconMsgEvent;
HICON hIconBig = (dat && dat->cache) ? Skin_LoadProtoIcon(dat->cache->getProto(), dat->cache->getStatus(), true) : 0;
@@ -1567,7 +1567,7 @@ panel_found:
{
DRAWITEMSTRUCT *dis = (DRAWITEMSTRUCT *)lParam;
if (dis->hwndItem == pContainer->hwndStatus && !(pContainer->dwFlags & CNT_NOSTATUSBAR)) {
- dat = (TWindowData*)GetWindowLongPtr(pContainer->hwndActive, GWLP_USERDATA);
+ dat = (CSrmmWindow*)GetWindowLongPtr(pContainer->hwndActive, GWLP_USERDATA);
if (dat)
DrawStatusIcons(dat, dis->hDC, dis->rcItem, 2);
return TRUE;
@@ -1854,11 +1854,11 @@ int TSAPI ActivateTabFromHWND(HWND hwndTab, HWND hwnd)
}
// enumerates tabs and closes all of them, but the one in dat
-void TSAPI CloseOtherTabs(HWND hwndTab, TWindowData &dat)
+void TSAPI CloseOtherTabs(HWND hwndTab, CTabBaseDlg &dat)
{
for (int idxt = 0; idxt < dat.pContainer->iChilds;) {
HWND otherTab = GetHWNDFromTabIndex(hwndTab, idxt);
- if (otherTab != NULL && otherTab != dat.hwnd)
+ if (otherTab != NULL && otherTab != dat.GetHwnd())
SendMessage(otherTab, WM_CLOSE, 1, 0);
else
++idxt;
@@ -2193,7 +2193,7 @@ void TSAPI BroadCastContainer(const TContainerData *pContainer, UINT message, WP
if (bType == SESSIONTYPE_ANY)
SendMessage((HWND)item.lParam, message, wParam, lParam);
else {
- TWindowData *dat = (TWindowData*)GetWindowLongPtr((HWND)item.lParam, GWLP_USERDATA);
+ CSrmmWindow *dat = (CSrmmWindow*)GetWindowLongPtr((HWND)item.lParam, GWLP_USERDATA);
if (dat && dat->bType == bType)
SendMessage((HWND)item.lParam, message, wParam, lParam);
}
diff --git a/plugins/TabSRMM/src/controls.cpp b/plugins/TabSRMM/src/controls.cpp
index f72b9ea871..369ed45b21 100644
--- a/plugins/TabSRMM/src/controls.cpp
+++ b/plugins/TabSRMM/src/controls.cpp
@@ -384,9 +384,9 @@ void CMenuBar::invoke(const int id)
m_isContactMenu = m_isMainMenu = false;
- TWindowData *dat = (TWindowData*)GetWindowLongPtr(m_pContainer->hwndActive, GWLP_USERDATA);
+ CSrmmWindow *dat = (CSrmmWindow*)GetWindowLongPtr(m_pContainer->hwndActive, GWLP_USERDATA);
- MCONTACT hContact = dat ? dat->hContact : 0;
+ MCONTACT hContact = dat ? dat->m_hContact : 0;
if (index == 3 && hContact != 0) {
hMenu = Menu_BuildContactMenu(hContact);
@@ -438,7 +438,7 @@ void CMenuBar::Cancel(void)
void CMenuBar::updateState(const HMENU hMenu) const
{
- TWindowData *dat = (TWindowData*)GetWindowLongPtr(m_pContainer->hwndActive, GWLP_USERDATA);
+ CSrmmWindow *dat = (CSrmmWindow*)GetWindowLongPtr(m_pContainer->hwndActive, GWLP_USERDATA);
if (dat) {
::CheckMenuItem(hMenu, ID_VIEW_SHOWMENUBAR, MF_BYCOMMAND | m_pContainer->dwFlags & CNT_NOMENUBAR ? MF_UNCHECKED : MF_CHECKED);
::CheckMenuItem(hMenu, ID_VIEW_SHOWSTATUSBAR, MF_BYCOMMAND | m_pContainer->dwFlags & CNT_NOSTATUSBAR ? MF_UNCHECKED : MF_CHECKED);
@@ -477,7 +477,7 @@ void CMenuBar::updateState(const HMENU hMenu) const
void CMenuBar::configureMenu() const
{
- TWindowData *dat = (TWindowData*)::GetWindowLongPtr(m_pContainer->hwndActive, GWLP_USERDATA);
+ CSrmmWindow *dat = (CSrmmWindow*)::GetWindowLongPtr(m_pContainer->hwndActive, GWLP_USERDATA);
if (dat) {
bool fChat = (dat->bType == SESSIONTYPE_CHAT);
@@ -486,7 +486,7 @@ void CMenuBar::configureMenu() const
::SendMessage(m_hwndToolbar, TB_SETSTATE, 105, fChat ? TBSTATE_HIDDEN : TBSTATE_ENABLED);
if (dat->bType == SESSIONTYPE_IM)
- ::EnableWindow(GetDlgItem(dat->hwnd, IDC_TIME), TRUE);
+ ::EnableWindow(GetDlgItem(dat->GetHwnd(), IDC_TIME), TRUE);
}
}
@@ -673,7 +673,7 @@ RECT rcLastStatusBarClick; // remembers click (down event) point for status b
LONG_PTR CALLBACK StatusBarSubclassProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
TContainerData *pContainer = (TContainerData*)GetWindowLongPtr(GetParent(hWnd), GWLP_USERDATA);
- TWindowData *dat = NULL;
+ CSrmmWindow *dat = NULL;
POINT pt;
if (OldStatusBarproc == 0) {
@@ -732,7 +732,7 @@ LONG_PTR CALLBACK StatusBarSubclassProc(HWND hWnd, UINT msg, WPARAM wParam, LPAR
HANDLE hTheme = bAero ? OpenThemeData(hWnd, L"ButtonStyle") : 0;
if (pContainer)
- dat = (TWindowData*)GetWindowLongPtr(pContainer->hwndActive, GWLP_USERDATA);
+ dat = (CSrmmWindow*)GetWindowLongPtr(pContainer->hwndActive, GWLP_USERDATA);
RECT rcClient;
GetClientRect(hWnd, &rcClient);
@@ -837,7 +837,7 @@ LONG_PTR CALLBACK StatusBarSubclassProc(HWND hWnd, UINT msg, WPARAM wParam, LPAR
wchar_t szText[1024]; szText[0] = 0;
LRESULT result = SendMessage(hWnd, SB_GETTEXT, i, (LPARAM)szText);
if (i == 2 && pContainer) {
- TWindowData *pDat = (TWindowData*)GetWindowLongPtr(pContainer->hwndActive, GWLP_USERDATA);
+ CSrmmWindow *pDat = (CSrmmWindow*)GetWindowLongPtr(pContainer->hwndActive, GWLP_USERDATA);
if (pDat)
DrawStatusIcons(pDat, hdcMem, itemRect, 2);
}
@@ -885,9 +885,9 @@ LONG_PTR CALLBACK StatusBarSubclassProc(HWND hWnd, UINT msg, WPARAM wParam, LPAR
case WM_USER + 101:
{
int list_icons = 0;
- dat = (TWindowData*)lParam;
+ dat = (CSrmmWindow*)lParam;
if (dat)
- while (Srmm_GetNthIcon(dat->hContact, list_icons))
+ while (Srmm_GetNthIcon(dat->m_hContact, list_icons))
list_icons++;
SendMessage(hWnd, WM_SIZE, 0, 0);
@@ -948,7 +948,7 @@ LONG_PTR CALLBACK StatusBarSubclassProc(HWND hWnd, UINT msg, WPARAM wParam, LPAR
GetCursorPos(&pt);
if (pt.x != ptMouse.x || pt.y != ptMouse.y)
break;
- dat = (TWindowData*)GetWindowLongPtr(pContainer->hwndActive, GWLP_USERDATA);
+ dat = (CSrmmWindow*)GetWindowLongPtr(pContainer->hwndActive, GWLP_USERDATA);
if (dat != NULL) {
RECT rc;
SIZE size;
@@ -960,7 +960,7 @@ LONG_PTR CALLBACK StatusBarSubclassProc(HWND hWnd, UINT msg, WPARAM wParam, LPAR
SendMessage(hWnd, SB_GETRECT, 2, (LPARAM)&rc);
if (PtInRect(&rc, pt)) {
unsigned int iconNum = (pt.x - rc.left) / (PluginConfig.m_smcxicon + 2);
- StatusIconData *sid = Srmm_GetNthIcon(dat->hContact, iconNum);
+ StatusIconData *sid = Srmm_GetNthIcon(dat->m_hContact, iconNum);
if (sid == NULL)
break;
@@ -970,7 +970,7 @@ LONG_PTR CALLBACK StatusBarSubclassProc(HWND hWnd, UINT msg, WPARAM wParam, LPAR
pContainer->dwFlags & CNT_NOSOUND ? TranslateT("disabled") : TranslateT("enabled"));
else if (sid->dwId == MSG_ICON_UTN && (dat->bType == SESSIONTYPE_IM || dat->si->iType == GCW_PRIVMESS)) {
- int mtnStatus = db_get_b(dat->hContact, SRMSGMOD, SRMSGSET_TYPING, M.GetByte(SRMSGMOD, SRMSGSET_TYPINGNEW, SRMSGDEFSET_TYPINGNEW));
+ int mtnStatus = db_get_b(dat->m_hContact, SRMSGMOD, SRMSGSET_TYPING, M.GetByte(SRMSGMOD, SRMSGSET_TYPINGNEW, SRMSGDEFSET_TYPINGNEW));
mir_snwprintf(wBuf, TranslateT("Sending typing notifications is %s."),
mtnStatus ? TranslateT("enabled") : TranslateT("disabled"));
}
@@ -989,10 +989,10 @@ LONG_PTR CALLBACK StatusBarSubclassProc(HWND hWnd, UINT msg, WPARAM wParam, LPAR
if (PtInRect(&rc, pt)) {
int iLength = 0;
GETTEXTLENGTHEX gtxl = { 0 };
- int iQueued = db_get_dw(dat->hContact, "SendLater", "count", 0);
+ int iQueued = db_get_dw(dat->m_hContact, "SendLater", "count", 0);
gtxl.codepage = CP_UTF8;
gtxl.flags = GTL_DEFAULT | GTL_PRECISE | GTL_NUMBYTES;
- iLength = SendDlgItemMessage(dat->hwnd, dat->bType == SESSIONTYPE_IM ? IDC_MESSAGE : IDC_CHAT_MESSAGE, EM_GETTEXTLENGTHEX, (WPARAM)&gtxl, 0);
+ iLength = SendDlgItemMessage(dat->GetHwnd(), dat->bType == SESSIONTYPE_IM ? IDC_MESSAGE : IDC_MESSAGE, EM_GETTEXTLENGTHEX, (WPARAM)&gtxl, 0);
tooltip_active = TRUE;
const wchar_t *szFormat = TranslateT("There are %d pending send jobs. Message length: %d bytes, message length limit: %d bytes\n\n%d messages are queued for later delivery");
@@ -1010,7 +1010,7 @@ LONG_PTR CALLBACK StatusBarSubclassProc(HWND hWnd, UINT msg, WPARAM wParam, LPAR
if (PtInRect(&rc, pt) && ((rc.right - rc.left) < size.cx)) {
if (dat->bType == SESSIONTYPE_CHAT) {
- ptrW tszTopic(db_get_wsa(dat->hContact, dat->szProto, "Topic"));
+ ptrW tszTopic(db_get_wsa(dat->m_hContact, dat->szProto, "Topic"));
if (tszTopic != NULL) {
tooltip_active = TRUE;
CallService("mToolTip/ShowTipW", tszTopic, (LPARAM)&ti);
diff --git a/plugins/TabSRMM/src/eventpopups.cpp b/plugins/TabSRMM/src/eventpopups.cpp
index dca01dc9c6..45b446550f 100644
--- a/plugins/TabSRMM/src/eventpopups.cpp
+++ b/plugins/TabSRMM/src/eventpopups.cpp
@@ -653,9 +653,9 @@ static int TSAPI PopupPreview(NEN_OPTIONS *pluginOptions)
// updates the menu entry...
// bForced is used to only update the status, nickname etc. and does NOT update the unread count
-void TSAPI UpdateTrayMenuState(TWindowData *dat, BOOL bForced)
+void TSAPI UpdateTrayMenuState(CTabBaseDlg *dat, BOOL bForced)
{
- if (PluginConfig.g_hMenuTrayUnread == 0 || dat->hContact == NULL)
+ if (PluginConfig.g_hMenuTrayUnread == 0 || dat->m_hContact == NULL)
return;
MENUITEMINFO mii = { 0 };
@@ -665,7 +665,7 @@ void TSAPI UpdateTrayMenuState(TWindowData *dat, BOOL bForced)
const wchar_t *tszProto = dat->cache->getRealAccount();
assert(tszProto != 0);
- GetMenuItemInfo(PluginConfig.g_hMenuTrayUnread, (UINT_PTR)dat->hContact, FALSE, &mii);
+ GetMenuItemInfo(PluginConfig.g_hMenuTrayUnread, (UINT_PTR)dat->m_hContact, FALSE, &mii);
if (!bForced)
PluginConfig.m_UnreadInTray -= (mii.dwItemData & 0x0000ffff);
if (mii.dwItemData > 0 || bForced) {
@@ -680,11 +680,11 @@ void TSAPI UpdateTrayMenuState(TWindowData *dat, BOOL bForced)
mii.cch = (int)mir_wstrlen(szMenuEntry) + 1;
}
mii.hbmpItem = HBMMENU_CALLBACK;
- SetMenuItemInfo(PluginConfig.g_hMenuTrayUnread, (UINT_PTR)dat->hContact, FALSE, &mii);
+ SetMenuItemInfo(PluginConfig.g_hMenuTrayUnread, (UINT_PTR)dat->m_hContact, FALSE, &mii);
}
// if we want tray support, add the contact to the list of unread sessions in the tray menu
-int TSAPI UpdateTrayMenu(const TWindowData *dat, WORD wStatus, const char *szProto, const wchar_t *szStatus, MCONTACT hContact, DWORD fromEvent)
+int TSAPI UpdateTrayMenu(const CTabBaseDlg *dat, WORD wStatus, const char *szProto, const wchar_t *szStatus, MCONTACT hContact, DWORD fromEvent)
{
if (!PluginConfig.g_hMenuTrayUnread || hContact == 0 || szProto == NULL)
return 0;
diff --git a/plugins/TabSRMM/src/functions.h b/plugins/TabSRMM/src/functions.h
index dd3532fbdb..631ad8de83 100644
--- a/plugins/TabSRMM/src/functions.h
+++ b/plugins/TabSRMM/src/functions.h
@@ -50,7 +50,7 @@ LONG_PTR CALLBACK HotkeyHandlerDlgProc(HWND hwndDlg, UINT msg, WPARAM wParam, LP
int TSAPI NEN_ReadOptions(NEN_OPTIONS *options);
int TSAPI NEN_WriteOptions(NEN_OPTIONS *options);
-int TSAPI UpdateTrayMenu(const TWindowData *dat, WORD wStatus, const char *szProto, const wchar_t *szStatus, MCONTACT hContact, DWORD fromEvent);
+int TSAPI UpdateTrayMenu(const CTabBaseDlg *dat, WORD wStatus, const char *szProto, const wchar_t *szStatus, MCONTACT hContact, DWORD fromEvent);
void TSAPI DeletePopupsForContact(MCONTACT hContact, DWORD dwMask);
/*
@@ -59,7 +59,7 @@ void TSAPI DeletePopupsForContact(MCONTACT hContact, DWORD dwMask);
void TSAPI CreateSystrayIcon(int create);
void TSAPI FlashTrayIcon(HICON hIcon);
-void TSAPI UpdateTrayMenuState(TWindowData *dat, BOOL bForced);
+void TSAPI UpdateTrayMenuState(CTabBaseDlg *dat, BOOL bForced);
void TSAPI LoadFavoritesAndRecent();
void TSAPI AddContactToFavorites(MCONTACT hContact, const wchar_t *szNickname, const char *szProto, wchar_t *szStatus,
WORD wStatus, HICON hIcon, BOOL mode, HMENU hMenu);
@@ -83,7 +83,7 @@ TContainerData* TSAPI FindContainerByName(const wchar_t *name);
int TSAPI GetTabIndexFromHWND(HWND hwndTab, HWND hwnd);
HWND TSAPI GetHWNDFromTabIndex(HWND hwndTab, int idx);
int TSAPI GetTabItemFromMouse(HWND hwndTab, POINT *pt);
-void TSAPI CloseOtherTabs(HWND hwndTab, TWindowData &dat);
+void TSAPI CloseOtherTabs(HWND hwndTab, CTabBaseDlg &dat);
int TSAPI ActivateTabFromHWND(HWND hwndTab, HWND hwnd);
void TSAPI AdjustTabClientRect(TContainerData *pContainer, RECT *rc);
void TSAPI ReflashContainer(TContainerData *pContainer);
@@ -117,13 +117,10 @@ void TSAPI CacheLogFonts();
void TSAPI LoadIconTheme();
void TSAPI RTF_CTableInit();
-INT_PTR CALLBACK DlgProcMessage(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam);
-
int DbEventIsForMsgWindow(DBEVENTINFO *dbei);
int TSAPI InitOptions(void);
int TSAPI DbEventIsShown(DBEVENTINFO *dbei);
-void TSAPI StreamInEvents(HWND hwndDlg, MEVENT hDbEventFirst, int count, int fAppend, DBEVENTINFO *dbei_s);
void TSAPI LoadLogfont(int i, LOGFONTA *lf, COLORREF *colour, char *szModule);
// custom tab control
@@ -143,20 +140,16 @@ int TSAPI UnloadTSButtonModule();
int _DebugTraceW(const wchar_t *fmt, ...);
#endif
int _DebugPopup(MCONTACT hContact, const wchar_t *fmt, ...);
-int _DebugMessage(HWND hwndDlg, TWindowData *dat, const char *fmt, ...);
+int _DebugMessage(HWND hwndDlg, CSrmmWindow *dat, const char *fmt, ...);
// themes
const wchar_t* TSAPI GetThemeFileName(int iMode);
int TSAPI CheckThemeVersion(const wchar_t *szIniFilename);
-void TSAPI WriteThemeToINI(const wchar_t *szIniFilename, TWindowData *dat);
+void TSAPI WriteThemeToINI(const wchar_t *szIniFilename, CSrmmWindow *dat);
void TSAPI ReadThemeFromINI(const wchar_t *szIniFilename, TContainerData *dat, int noAdvanced, DWORD dwFlags);
-// user prefs
-
-int TSAPI LoadLocalFlags(TWindowData *dat);
-
-//TypingNotify
+// TypingNotify
int TN_ModuleInit();
int TN_OptionsInitialize(WPARAM wParam, LPARAM lParam);
int TN_ModuleDeInit();
diff --git a/plugins/TabSRMM/src/generic_msghandlers.cpp b/plugins/TabSRMM/src/generic_msghandlers.cpp
index 1df30b4efd..81a2ec967d 100644
--- a/plugins/TabSRMM/src/generic_msghandlers.cpp
+++ b/plugins/TabSRMM/src/generic_msghandlers.cpp
@@ -33,12 +33,12 @@
/////////////////////////////////////////////////////////////////////////////////////////
// Save message log for given session as RTF document
-void TSAPI DM_SaveLogAsRTF(const TWindowData *dat)
+void TSAPI DM_SaveLogAsRTF(const CTabBaseDlg *dat)
{
if (dat && dat->hwndIEView != 0) {
IEVIEWEVENT event = { sizeof(event) };
event.hwnd = dat->hwndIEView;
- event.hContact = dat->hContact;
+ event.hContact = dat->m_hContact;
event.iType = IEE_SAVE_DOCUMENT;
CallService(MS_IEVIEW_EVENT, 0, (LPARAM)&event);
}
@@ -55,7 +55,7 @@ void TSAPI DM_SaveLogAsRTF(const TWindowData *dat)
OPENFILENAME ofn = { 0 };
ofn.lStructSize = sizeof(ofn);
- ofn.hwndOwner = dat->hwnd;
+ ofn.hwndOwner = dat->GetHwnd();
ofn.lpstrFile = szFilename;
ofn.lpstrFilter = szFilter;
ofn.lpstrInitialDir = szInitialDir;
@@ -67,7 +67,7 @@ void TSAPI DM_SaveLogAsRTF(const TWindowData *dat)
stream.dwCookie = (DWORD_PTR)szFilename;
stream.dwError = 0;
stream.pfnCallback = Utils::StreamOut;
- SendDlgItemMessage(dat->hwnd, dat->bType == SESSIONTYPE_IM ? IDC_LOG : IDC_CHAT_LOG, EM_STREAMOUT, SF_RTF | SF_USECODEPAGE, (LPARAM)&stream);
+ SendDlgItemMessage(dat->GetHwnd(), dat->bType == SESSIONTYPE_IM ? IDC_LOG : IDC_LOG, EM_STREAMOUT, SF_RTF | SF_USECODEPAGE, (LPARAM)&stream);
}
}
}
@@ -82,12 +82,12 @@ void TSAPI DM_SaveLogAsRTF(const TWindowData *dat)
//
// If no session in the container disagrees, the container will be hidden.
-void TSAPI DM_CheckAutoHide(const TWindowData *dat, WPARAM wParam, LPARAM lParam)
+void TSAPI DM_CheckAutoHide(const CTabBaseDlg *dat, WPARAM wParam, LPARAM lParam)
{
if (dat && lParam) {
BOOL *fResult = (BOOL*)lParam;
- if (GetWindowTextLength(GetDlgItem(dat->hwnd, dat->bType == SESSIONTYPE_IM ? IDC_MESSAGE : IDC_CHAT_MESSAGE)) > 0) {
+ if (GetWindowTextLength(GetDlgItem(dat->GetHwnd(), dat->bType == SESSIONTYPE_IM ? IDC_MESSAGE : IDC_MESSAGE)) > 0) {
*fResult = FALSE;
return; // text entered in the input area -> prevent autohide/cose
}
@@ -103,7 +103,7 @@ void TSAPI DM_CheckAutoHide(const TWindowData *dat, WPARAM wParam, LPARAM lParam
/////////////////////////////////////////////////////////////////////////////////////////
// checks if the balloon tooltip can be dismissed (usually called by WM_MOUSEMOVE events)
-void TSAPI DM_DismissTip(TWindowData *dat, const POINT& pt)
+void TSAPI DM_DismissTip(CTabBaseDlg *dat, const POINT& pt)
{
if (!IsWindowVisible(dat->hwndTip))
return;
@@ -122,21 +122,21 @@ void TSAPI DM_DismissTip(TWindowData *dat, const POINT& pt)
/////////////////////////////////////////////////////////////////////////////////////////
// initialize the balloon tooltip for message window notifications
-void TSAPI DM_InitTip(TWindowData *dat)
+void CTabBaseDlg::DM_InitTip()
{
- dat->hwndTip = CreateWindowEx(0, TOOLTIPS_CLASS, NULL, WS_POPUP | TTS_NOPREFIX | TTS_BALLOON, CW_USEDEFAULT, CW_USEDEFAULT,
- CW_USEDEFAULT, CW_USEDEFAULT, dat->hwnd, NULL, g_hInst, (LPVOID)NULL);
-
- memset(&dat->ti, 0, sizeof(dat->ti));
- dat->ti.cbSize = sizeof(dat->ti);
- dat->ti.lpszText = TranslateT("No status message");
- dat->ti.hinst = g_hInst;
- dat->ti.hwnd = dat->hwnd;
- dat->ti.uFlags = TTF_TRACK | TTF_IDISHWND | TTF_TRANSPARENT;
- dat->ti.uId = (UINT_PTR)dat->hwnd;
- SendMessage(dat->hwndTip, TTM_ADDTOOL, 0, (LPARAM)&dat->ti);
-
- SetWindowPos(dat->hwndTip, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE | SWP_NOZORDER);
+ hwndTip = CreateWindowEx(0, TOOLTIPS_CLASS, NULL, WS_POPUP | TTS_NOPREFIX | TTS_BALLOON, CW_USEDEFAULT, CW_USEDEFAULT,
+ CW_USEDEFAULT, CW_USEDEFAULT, m_hwnd, NULL, g_hInst, (LPVOID)NULL);
+
+ memset(&ti, 0, sizeof(ti));
+ ti.cbSize = sizeof(ti);
+ ti.lpszText = TranslateT("No status message");
+ ti.hinst = g_hInst;
+ ti.hwnd = m_hwnd;
+ ti.uFlags = TTF_TRACK | TTF_IDISHWND | TTF_TRANSPARENT;
+ ti.uId = (UINT_PTR)m_hwnd;
+ SendMessage(hwndTip, TTM_ADDTOOL, 0, (LPARAM)&ti);
+
+ SetWindowPos(hwndTip, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE | SWP_NOZORDER);
}
/////////////////////////////////////////////////////////////////////////////////////////
@@ -144,14 +144,14 @@ void TSAPI DM_InitTip(TWindowData *dat)
//
// returns 1 for handled hotkeys, 0 otherwise.
-LRESULT TSAPI DM_GenericHotkeysCheck(MSG *message, TWindowData *dat)
+LRESULT TSAPI DM_GenericHotkeysCheck(MSG *message, CTabBaseDlg *dat)
{
LRESULT mim_hotkey_check = CallService(MS_HOTKEY_CHECK, (WPARAM)message, (LPARAM)TABSRMM_HK_SECTION_GENERIC);
- HWND hwndDlg = dat->hwnd;
+ HWND hwndDlg = dat->GetHwnd();
switch (mim_hotkey_check) {
case TABSRMM_HK_PASTEANDSEND:
- HandlePasteAndSend(dat);
+ dat->HandlePasteAndSend();
return 1;
case TABSRMM_HK_HISTORY:
SendMessage(hwndDlg, WM_COMMAND, IDC_HISTORY, 0);
@@ -175,7 +175,7 @@ LRESULT TSAPI DM_GenericHotkeysCheck(MSG *message, TWindowData *dat)
SendMessage(hwndDlg, WM_COMMAND, IDC_TOGGLETOOLBAR, 0);
return 1;
case TABSRMM_HK_CLEARLOG:
- ClearLog(dat);
+ dat->ClearLog();
return 1;
case TABSRMM_HK_TOGGLESIDEBAR:
if (dat->pContainer->SideBar->isActive())
@@ -188,7 +188,7 @@ LRESULT TSAPI DM_GenericHotkeysCheck(MSG *message, TWindowData *dat)
return 0;
}
-LRESULT TSAPI DM_MsgWindowCmdHandler(HWND hwndDlg, TContainerData *pContainer, TWindowData *dat, UINT cmd, WPARAM wParam, LPARAM lParam)
+LRESULT TSAPI DM_MsgWindowCmdHandler(HWND hwndDlg, TContainerData *pContainer, CTabBaseDlg *dat, UINT cmd, WPARAM wParam, LPARAM lParam)
{
RECT rc;
HWND hwndContainer = pContainer->hwnd;
@@ -261,23 +261,23 @@ LRESULT TSAPI DM_MsgWindowCmdHandler(HWND hwndDlg, TContainerData *pContainer, T
break;
case IDC_HISTORY:
- CallService(MS_HISTORY_SHOWCONTACTHISTORY, dat->hContact, 0);
+ CallService(MS_HISTORY_SHOWCONTACTHISTORY, dat->m_hContact, 0);
break;
case IDC_TIME:
submenu = GetSubMenu(PluginConfig.g_hMenuContext, 2);
- MsgWindowUpdateMenu(dat, submenu, MENU_LOGMENU);
+ dat->MsgWindowUpdateMenu(submenu, MENU_LOGMENU);
GetWindowRect(GetDlgItem(hwndDlg, IDC_TIME), &rc);
iSelection = TrackPopupMenu(submenu, TPM_RETURNCMD, rc.left, rc.bottom, 0, hwndDlg, NULL);
- return MsgWindowMenuHandler(dat, iSelection, MENU_LOGMENU);
+ return dat->MsgWindowMenuHandler(iSelection, MENU_LOGMENU);
case IDC_PROTOMENU:
- if (dat->hContact) {
+ if (dat->m_hContact) {
submenu = GetSubMenu(PluginConfig.g_hMenuContext, 4);
int iOldGlobalSendFormat = PluginConfig.m_SendFormat;
- int iLocalFormat = M.GetDword(dat->hContact, "sendformat", 0);
+ int iLocalFormat = M.GetDword(dat->m_hContact, "sendformat", 0);
int iNewLocalFormat = iLocalFormat;
GetWindowRect(GetDlgItem(hwndDlg, IDC_PROTOCOL), &rc);
@@ -297,18 +297,18 @@ LRESULT TSAPI DM_MsgWindowCmdHandler(HWND hwndDlg, TContainerData *pContainer, T
switch (iSelection) {
case ID_MODE_GLOBAL:
dat->dwFlagsEx &= ~(MWF_SHOW_SPLITTEROVERRIDE);
- db_set_b(dat->hContact, SRMSGMOD_T, "splitoverride", 0);
- LoadSplitter(dat);
- AdjustBottomAvatarDisplay(dat);
- DM_RecalcPictureSize(dat);
+ db_set_b(dat->m_hContact, SRMSGMOD_T, "splitoverride", 0);
+ dat->LoadSplitter();
+ dat->AdjustBottomAvatarDisplay();
+ dat->DM_RecalcPictureSize();
SendMessage(hwndDlg, WM_SIZE, 0, 0);
break;
case ID_MODE_PRIVATE:
dat->dwFlagsEx |= MWF_SHOW_SPLITTEROVERRIDE;
- db_set_b(dat->hContact, SRMSGMOD_T, "splitoverride", 1);
- LoadSplitter(dat);
- AdjustBottomAvatarDisplay(dat);
- DM_RecalcPictureSize(dat);
+ db_set_b(dat->m_hContact, SRMSGMOD_T, "splitoverride", 1);
+ dat->LoadSplitter();
+ dat->AdjustBottomAvatarDisplay();
+ dat->DM_RecalcPictureSize();
SendMessage(hwndDlg, WM_SIZE, 0, 0);
break;
case ID_GLOBAL_BBCODE:
@@ -328,14 +328,14 @@ LRESULT TSAPI DM_MsgWindowCmdHandler(HWND hwndDlg, TContainerData *pContainer, T
break;
}
if (iNewLocalFormat == 0)
- db_unset(dat->hContact, SRMSGMOD_T, "sendformat");
+ db_unset(dat->m_hContact, SRMSGMOD_T, "sendformat");
else if (iNewLocalFormat != iLocalFormat)
- db_set_dw(dat->hContact, SRMSGMOD_T, "sendformat", iNewLocalFormat);
+ db_set_dw(dat->m_hContact, SRMSGMOD_T, "sendformat", iNewLocalFormat);
if (PluginConfig.m_SendFormat != iOldGlobalSendFormat)
db_set_b(0, SRMSGMOD_T, "sendformat", (BYTE)PluginConfig.m_SendFormat);
if (iNewLocalFormat != iLocalFormat || PluginConfig.m_SendFormat != iOldGlobalSendFormat) {
- dat->SendFormat = M.GetDword(dat->hContact, "sendformat", PluginConfig.m_SendFormat);
+ dat->SendFormat = M.GetDword(dat->m_hContact, "sendformat", PluginConfig.m_SendFormat);
if (dat->SendFormat == -1) // per contact override to disable it..
dat->SendFormat = 0;
M.BroadcastMessage(DM_CONFIGURETOOLBAR, 0, 1);
@@ -361,12 +361,12 @@ LRESULT TSAPI DM_MsgWindowCmdHandler(HWND hwndDlg, TContainerData *pContainer, T
switch (iSelection) {
case ID_FAVORITES_ADDCONTACTTOFAVORITES:
- db_set_b(dat->hContact, SRMSGMOD_T, "isFavorite", 1);
- AddContactToFavorites(dat->hContact, dat->cache->getNick(), dat->cache->getProto(), dat->szStatus, dat->wStatus, Skin_LoadProtoIcon(dat->cache->getProto(), dat->cache->getStatus()), 1, PluginConfig.g_hMenuFavorites);
+ db_set_b(dat->m_hContact, SRMSGMOD_T, "isFavorite", 1);
+ AddContactToFavorites(dat->m_hContact, dat->cache->getNick(), dat->cache->getProto(), dat->szStatus, dat->wStatus, Skin_LoadProtoIcon(dat->cache->getProto(), dat->cache->getStatus()), 1, PluginConfig.g_hMenuFavorites);
break;
case ID_FAVORITES_REMOVECONTACTFROMFAVORITES:
- db_set_b(dat->hContact, SRMSGMOD_T, "isFavorite", 0);
- DeleteMenu(PluginConfig.g_hMenuFavorites, (UINT_PTR)dat->hContact, MF_BYCOMMAND);
+ db_set_b(dat->m_hContact, SRMSGMOD_T, "isFavorite", 0);
+ DeleteMenu(PluginConfig.g_hMenuFavorites, (UINT_PTR)dat->m_hContact, MF_BYCOMMAND);
break;
}
dat->cache->updateFavorite();
@@ -393,12 +393,12 @@ LRESULT TSAPI DM_MsgWindowCmdHandler(HWND hwndDlg, TContainerData *pContainer, T
case ID_SENDMENU_SENDTOMULTIPLEUSERS:
dat->sendMode ^= SMODE_MULTIPLE;
if (dat->sendMode & SMODE_MULTIPLE)
- DM_CreateClist(dat);
+ dat->DM_CreateClist();
else if (IsWindow(GetDlgItem(hwndDlg, IDC_CLIST)))
DestroyWindow(GetDlgItem(hwndDlg, IDC_CLIST));
break;
case ID_SENDMENU_SENDNUDGE:
- SendNudge(dat);
+ dat->SendNudge();
break;
case ID_SENDMENU_SENDDEFAULT:
dat->sendMode = 0;
@@ -416,12 +416,12 @@ LRESULT TSAPI DM_MsgWindowCmdHandler(HWND hwndDlg, TContainerData *pContainer, T
case ID_SENDMENU_SENDWITHOUTTIMEOUTS:
dat->sendMode ^= SMODE_NOACK;
if (dat->sendMode & SMODE_NOACK)
- db_set_b(dat->hContact, SRMSGMOD_T, "no_ack", 1);
+ db_set_b(dat->m_hContact, SRMSGMOD_T, "no_ack", 1);
else
- db_unset(dat->hContact, SRMSGMOD_T, "no_ack");
+ db_unset(dat->m_hContact, SRMSGMOD_T, "no_ack");
break;
}
- db_set_b(dat->hContact, SRMSGMOD_T, "no_ack", (BYTE)(dat->sendMode & SMODE_NOACK ? 1 : 0));
+ db_set_b(dat->m_hContact, SRMSGMOD_T, "no_ack", (BYTE)(dat->sendMode & SMODE_NOACK ? 1 : 0));
SetWindowPos(GetDlgItem(hwndDlg, IDC_MESSAGE), 0, 0, 0, 0, 0, SWP_FRAMECHANGED | SWP_NOSIZE | SWP_NOMOVE);
if (dat->sendMode & SMODE_MULTIPLE || dat->sendMode & SMODE_CONTAINER) {
SetWindowPos(GetDlgItem(hwndDlg, IDC_MESSAGE), 0, 0, 0, 0, 0, SWP_DRAWFRAME | SWP_FRAMECHANGED | SWP_NOZORDER |
@@ -466,7 +466,7 @@ LRESULT TSAPI DM_MsgWindowCmdHandler(HWND hwndDlg, TContainerData *pContainer, T
DBVARIANT dbv = { 0 };
- if (0 == db_get_ws(dat->hContact, "UserInfo", "MyNotes", &dbv)) {
+ if (0 == db_get_ws(dat->m_hContact, "UserInfo", "MyNotes", &dbv)) {
SetDlgItemText(hwndDlg, IDC_MESSAGE, dbv.ptszVal);
mir_free(dbv.ptszVal);
}
@@ -476,7 +476,7 @@ LRESULT TSAPI DM_MsgWindowCmdHandler(HWND hwndDlg, TContainerData *pContainer, T
wchar_t *buf = (wchar_t*)mir_alloc((iLen + 2) * sizeof(wchar_t));
GetDlgItemText(hwndDlg, IDC_MESSAGE, buf, iLen + 1);
- db_set_ws(dat->hContact, "UserInfo", "MyNotes", buf);
+ db_set_ws(dat->m_hContact, "UserInfo", "MyNotes", buf);
SetDlgItemText(hwndDlg, IDC_MESSAGE, L"");
if (!dat->bIsAutosizingInput) {
@@ -494,11 +494,11 @@ LRESULT TSAPI DM_MsgWindowCmdHandler(HWND hwndDlg, TContainerData *pContainer, T
break;
case IDM_CLEAR:
- ClearLog(dat);
+ dat->ClearLog();
break;
case IDC_PROTOCOL:
- submenu = Menu_BuildContactMenu(dat->hContact);
+ submenu = Menu_BuildContactMenu(dat->m_hContact);
if (lParam == 0)
GetWindowRect(GetDlgItem(hwndDlg, IDC_PROTOCOL), &rc);
else
@@ -506,7 +506,7 @@ LRESULT TSAPI DM_MsgWindowCmdHandler(HWND hwndDlg, TContainerData *pContainer, T
iSelection = TrackPopupMenu(submenu, TPM_RETURNCMD, rc.left, rc.bottom, 0, hwndDlg, NULL);
if (iSelection)
- Clist_MenuProcessCommand(LOWORD(iSelection), MPCF_CONTACTMENU, dat->hContact);
+ Clist_MenuProcessCommand(LOWORD(iSelection), MPCF_CONTACTMENU, dat->m_hContact);
DestroyMenu(submenu);
break;
@@ -525,14 +525,14 @@ LRESULT TSAPI DM_MsgWindowCmdHandler(HWND hwndDlg, TContainerData *pContainer, T
break;
case IDC_SELFTYPING:
- if (dat->hContact) {
- int iCurrentTypingMode = db_get_b(dat->hContact, SRMSGMOD, SRMSGSET_TYPING, M.GetByte(SRMSGMOD, SRMSGSET_TYPINGNEW, SRMSGDEFSET_TYPINGNEW));
+ if (dat->m_hContact) {
+ int iCurrentTypingMode = db_get_b(dat->m_hContact, SRMSGMOD, SRMSGSET_TYPING, M.GetByte(SRMSGMOD, SRMSGSET_TYPINGNEW, SRMSGDEFSET_TYPINGNEW));
if (dat->nTypeMode == PROTOTYPE_SELFTYPING_ON && iCurrentTypingMode) {
- DM_NotifyTyping(dat, PROTOTYPE_SELFTYPING_OFF);
+ dat->DM_NotifyTyping(PROTOTYPE_SELFTYPING_OFF);
dat->nTypeMode = PROTOTYPE_SELFTYPING_OFF;
}
- db_set_b(dat->hContact, SRMSGMOD, SRMSGSET_TYPING, (BYTE)!iCurrentTypingMode);
+ db_set_b(dat->m_hContact, SRMSGMOD, SRMSGSET_TYPING, (BYTE)!iCurrentTypingMode);
}
break;
@@ -587,7 +587,7 @@ LRESULT TSAPI DM_ContainerCmdHandler(TContainerData *pContainer, UINT cmd, WPARA
return 0;
HWND hwndDlg = pContainer->hwnd;
- TWindowData *dat = (TWindowData*)GetWindowLongPtr(pContainer->hwndActive, GWLP_USERDATA);
+ CTabBaseDlg *dat = (CTabBaseDlg*)GetWindowLongPtr(pContainer->hwndActive, GWLP_USERDATA);
switch (cmd) {
case IDC_CLOSE:
@@ -698,7 +698,7 @@ LRESULT TSAPI DM_ContainerCmdHandler(TContainerData *pContainer, UINT cmd, WPARA
case ID_MESSAGELOGSETTINGS_FORTHISCONTACT:
case ID_MESSAGELOGSETTINGS_GLOBAL:
if (dat) {
- MsgWindowMenuHandler(dat, (int)LOWORD(wParam), MENU_LOGMENU);
+ dat->MsgWindowMenuHandler((int)LOWORD(wParam), MENU_LOGMENU);
return 1;
}
break;
@@ -717,12 +717,12 @@ LRESULT TSAPI DM_ContainerCmdHandler(TContainerData *pContainer, UINT cmd, WPARA
// initialize rich edit control (log and edit control) for both MUC and
// standard IM session windows.
-void TSAPI DM_InitRichEdit(TWindowData *dat)
+void TSAPI DM_InitRichEdit(CTabBaseDlg *dat)
{
bool fIsChat = ((dat->bType == SESSIONTYPE_CHAT) ? true : false);
- HWND hwndLog = GetDlgItem(dat->hwnd, !fIsChat ? IDC_LOG : IDC_CHAT_LOG);
- HWND hwndEdit = GetDlgItem(dat->hwnd, !fIsChat ? IDC_MESSAGE : IDC_CHAT_MESSAGE);
- HWND hwndDlg = dat->hwnd;
+ HWND hwndLog = GetDlgItem(dat->GetHwnd(), !fIsChat ? IDC_LOG : IDC_LOG);
+ HWND hwndEdit = GetDlgItem(dat->GetHwnd(), !fIsChat ? IDC_MESSAGE : IDC_MESSAGE);
+ HWND hwndDlg = dat->GetHwnd();
dat->inputbg = fIsChat ? M.GetDword(FONTMODULE, "inputbg", SRMSGDEFSET_BKGCOLOUR) : dat->pContainer->theme.inputbg;
COLORREF colour = fIsChat ? g_Settings.crLogBackground : dat->pContainer->theme.bg;
@@ -824,17 +824,17 @@ void TSAPI DM_InitRichEdit(TWindowData *dat)
/////////////////////////////////////////////////////////////////////////////////////////
// set the states of defined database action buttons(only if button is a toggle)
-void TSAPI DM_SetDBButtonStates(HWND hwndChild, TWindowData *dat)
+void CTabBaseDlg::DM_SetDBButtonStates()
{
- ButtonItem *buttonItem = dat->pContainer->buttonItems;
- MCONTACT hContact = dat->hContact, hFinalContact = 0;
- HWND hwndContainer = dat->pContainer->hwnd;
+ ButtonItem *buttonItem = pContainer->buttonItems;
+ MCONTACT hFinalContact = 0;
+ HWND hwndContainer = pContainer->hwnd;
while (buttonItem) {
HWND hWnd = GetDlgItem(hwndContainer, buttonItem->uId);
if (buttonItem->pfnCallback)
- buttonItem->pfnCallback(buttonItem, hwndChild, dat, hWnd);
+ buttonItem->pfnCallback(buttonItem, m_hwnd, this, hWnd);
if (!(buttonItem->dwFlags & BUTTON_ISTOGGLE && buttonItem->dwFlags & BUTTON_ISDBACTION)) {
buttonItem = buttonItem->nextItem;
@@ -845,14 +845,14 @@ void TSAPI DM_SetDBButtonStates(HWND hwndChild, TWindowData *dat)
char *szModule = buttonItem->szModule;
char *szSetting = buttonItem->szSetting;
if (buttonItem->dwFlags & BUTTON_DBACTIONONCONTACT || buttonItem->dwFlags & BUTTON_ISCONTACTDBACTION) {
- if (hContact == 0) {
+ if (m_hContact == 0) {
SendMessage(hWnd, BM_SETCHECK, BST_UNCHECKED, 0);
buttonItem = buttonItem->nextItem;
continue;
}
if (buttonItem->dwFlags & BUTTON_ISCONTACTDBACTION)
- szModule = GetContactProto(hContact);
- hFinalContact = hContact;
+ szModule = GetContactProto(m_hContact);
+ hFinalContact = m_hContact;
}
else hFinalContact = 0;
@@ -877,7 +877,7 @@ void TSAPI DM_SetDBButtonStates(HWND hwndChild, TWindowData *dat)
}
}
-void TSAPI DM_ScrollToBottom(TWindowData *dat, WPARAM wParam, LPARAM lParam)
+void TSAPI DM_ScrollToBottom(CTabBaseDlg *dat, WPARAM wParam, LPARAM lParam)
{
if (dat == NULL)
return;
@@ -889,15 +889,15 @@ void TSAPI DM_ScrollToBottom(TWindowData *dat, WPARAM wParam, LPARAM lParam)
dat->dwFlags |= MWF_DEFERREDSCROLL;
if (dat->hwndIEView) {
- PostMessage(dat->hwnd, DM_SCROLLIEVIEW, 0, 0);
+ PostMessage(dat->GetHwnd(), DM_SCROLLIEVIEW, 0, 0);
return;
}
if (dat->hwndHPP) {
- SendMessage(dat->hwnd, DM_SCROLLIEVIEW, 0, 0);
+ SendMessage(dat->GetHwnd(), DM_SCROLLIEVIEW, 0, 0);
return;
}
- HWND hwnd = GetDlgItem(dat->hwnd, dat->bType == SESSIONTYPE_IM ? IDC_LOG : IDC_CHAT_LOG);
+ HWND hwnd = GetDlgItem(dat->GetHwnd(), dat->bType == SESSIONTYPE_IM ? IDC_LOG : IDC_LOG);
if (lParam)
SendMessage(hwnd, WM_SIZE, 0, 0);
@@ -927,7 +927,7 @@ static void LoadKLThread(LPVOID _param)
}
}
-void TSAPI DM_LoadLocale(TWindowData *dat)
+void TSAPI DM_LoadLocale(CTabBaseDlg *dat)
{
if (dat == NULL || !PluginConfig.m_bAutoLocaleSupport)
return;
@@ -936,7 +936,7 @@ void TSAPI DM_LoadLocale(TWindowData *dat)
return;
DBVARIANT dbv;
- if (!db_get_ws(dat->hContact, SRMSGMOD_T, "locale", &dbv))
+ if (!db_get_ws(dat->m_hContact, SRMSGMOD_T, "locale", &dbv))
db_free(&dbv);
else {
wchar_t szKLName[KL_NAMELENGTH + 1];
@@ -944,38 +944,35 @@ void TSAPI DM_LoadLocale(TWindowData *dat)
wchar_t szBuf[20];
GetLocaleInfo(LOCALE_SYSTEM_DEFAULT, LOCALE_ILANGUAGE, szBuf, 20);
mir_snwprintf(szKLName, L"0000%s", szBuf);
- db_set_ws(dat->hContact, SRMSGMOD_T, "locale", szKLName);
+ db_set_ws(dat->m_hContact, SRMSGMOD_T, "locale", szKLName);
}
else {
GetKeyboardLayoutName(szKLName);
- db_set_ws(dat->hContact, SRMSGMOD_T, "locale", szKLName);
+ db_set_ws(dat->m_hContact, SRMSGMOD_T, "locale", szKLName);
}
}
- mir_forkthread(LoadKLThread, (void*)dat->hContact);
+ mir_forkthread(LoadKLThread, (void*)dat->m_hContact);
}
-LRESULT TSAPI DM_RecalcPictureSize(TWindowData *dat)
+void CTabBaseDlg::DM_RecalcPictureSize()
{
- if (dat) {
- HBITMAP hbm = ((dat->Panel->isActive()) && dat->pContainer->avatarMode != 3) ? dat->hOwnPic : (dat->ace ? dat->ace->hbmPic : PluginConfig.g_hbmUnknown);
- if (hbm) {
- BITMAP bminfo;
- GetObject(hbm, sizeof(bminfo), &bminfo);
- CalcDynamicAvatarSize(dat, &bminfo);
- SendMessage(dat->hwnd, WM_SIZE, 0, 0);
- }
- else dat->pic.cy = dat->pic.cx = 60;
+ HBITMAP hbm = ((Panel->isActive()) && pContainer->avatarMode != 3) ? hOwnPic : (ace ? ace->hbmPic : PluginConfig.g_hbmUnknown);
+ if (hbm) {
+ BITMAP bminfo;
+ GetObject(hbm, sizeof(bminfo), &bminfo);
+ CalcDynamicAvatarSize(&bminfo);
+ SendMessage(m_hwnd, WM_SIZE, 0, 0);
}
- return 0;
+ else pic.cy = pic.cx = 60;
}
-void TSAPI DM_UpdateLastMessage(const TWindowData *dat)
+void TSAPI DM_UpdateLastMessage(const CTabBaseDlg *dat)
{
if (dat == NULL)
return;
- if (dat->pContainer->hwndStatus == 0 || dat->pContainer->hwndActive != dat->hwnd)
+ if (dat->pContainer->hwndStatus == 0 || dat->pContainer->hwndActive != dat->GetHwnd())
return;
wchar_t szBuf[100];
@@ -1010,20 +1007,20 @@ void TSAPI DM_UpdateLastMessage(const TWindowData *dat)
/////////////////////////////////////////////////////////////////////////////////////////
// save current keyboard layout for the given contact
-void TSAPI DM_SaveLocale(TWindowData *dat, WPARAM, LPARAM lParam)
+void TSAPI DM_SaveLocale(CTabBaseDlg *dat, WPARAM, LPARAM lParam)
{
if (dat == NULL)
return;
- if (PluginConfig.m_bAutoLocaleSupport && dat->hContact && dat->pContainer->hwndActive == dat->hwnd) {
+ if (PluginConfig.m_bAutoLocaleSupport && dat->m_hContact && dat->pContainer->hwndActive == dat->GetHwnd()) {
wchar_t szKLName[KL_NAMELENGTH + 1];
if ((HKL)lParam != dat->hkl) {
dat->hkl = (HKL)lParam;
ActivateKeyboardLayout(dat->hkl, 0);
GetKeyboardLayoutName(szKLName);
- db_set_ws(dat->hContact, SRMSGMOD_T, "locale", szKLName);
- GetLocaleID(dat, szKLName);
- UpdateReadChars(dat);
+ db_set_ws(dat->m_hContact, SRMSGMOD_T, "locale", szKLName);
+ dat->GetLocaleID(szKLName);
+ dat->UpdateReadChars();
}
}
}
@@ -1052,18 +1049,17 @@ LRESULT TSAPI DM_WMCopyHandler(HWND hwnd, WNDPROC oldWndProc, UINT msg, WPARAM w
/////////////////////////////////////////////////////////////////////////////////////////
// create embedded contact list control
-HWND TSAPI DM_CreateClist(TWindowData *dat)
+HWND CTabBaseDlg::DM_CreateClist()
{
if (!sendLater->isAvail()) {
CWarning::show(CWarning::WARN_NO_SENDLATER, MB_OK | MB_ICONINFORMATION, TranslateT("Configuration issue|The unattended send feature is disabled. The \\b1 send later\\b0 and \\b1 send to multiple contacts\\b0 features depend on it.\n\nYou must enable it under \\b1Options -> Message sessions -> Advanced tweaks\\b0. Changing this option requires a restart."));
- dat->sendMode &= ~SMODE_MULTIPLE;
+ sendMode &= ~SMODE_MULTIPLE;
return 0;
}
- HWND hwndClist = CreateWindowExA(0, "CListControl", "", WS_TABSTOP | WS_VISIBLE | WS_CHILD | 0x248,
- 184, 0, 30, 30, dat->hwnd, (HMENU)IDC_CLIST, g_hInst, NULL);
+ HWND hwndClist = CreateWindowExA(0, "CListControl", "", WS_TABSTOP | WS_VISIBLE | WS_CHILD | 0x248, 184, 0, 30, 30, m_hwnd, (HMENU)IDC_CLIST, g_hInst, NULL);
SendMessage(hwndClist, WM_TIMER, 14, 0);
- HANDLE hItem = (HANDLE)SendMessage(hwndClist, CLM_FINDCONTACT, dat->hContact, 0);
+ HANDLE hItem = (HANDLE)SendMessage(hwndClist, CLM_FINDCONTACT, m_hContact, 0);
SetWindowLongPtr(hwndClist, GWL_EXSTYLE, GetWindowLongPtr(hwndClist, GWL_EXSTYLE) & ~CLS_EX_TRACKSELECT);
SetWindowLongPtr(hwndClist, GWL_EXSTYLE, GetWindowLongPtr(hwndClist, GWL_EXSTYLE) | (CLS_EX_NOSMOOTHSCROLLING | CLS_EX_NOTRANSLUCENTSEL));
@@ -1083,10 +1079,10 @@ HWND TSAPI DM_CreateClist(TWindowData *dat)
return hwndClist;
}
-LRESULT TSAPI DM_MouseWheelHandler(HWND hwnd, HWND hwndParent, TWindowData *mwdat, WPARAM wParam, LPARAM lParam)
+LRESULT TSAPI DM_MouseWheelHandler(HWND hwnd, HWND hwndParent, CTabBaseDlg *mwdat, WPARAM wParam, LPARAM lParam)
{
- UINT uID = mwdat->bType == SESSIONTYPE_IM ? IDC_LOG : IDC_CHAT_LOG;
- UINT uIDMsg = mwdat->bType == SESSIONTYPE_IM ? IDC_MESSAGE : IDC_CHAT_MESSAGE;
+ UINT uID = mwdat->bType == SESSIONTYPE_IM ? IDC_LOG : IDC_LOG;
+ UINT uIDMsg = mwdat->bType == SESSIONTYPE_IM ? IDC_MESSAGE : IDC_MESSAGE;
POINT pt;
GetCursorPos(&pt);
@@ -1108,9 +1104,9 @@ LRESULT TSAPI DM_MouseWheelHandler(HWND hwnd, HWND hwndParent, TWindowData *mwda
}
if (mwdat->bType == SESSIONTYPE_CHAT) { // scroll nick list by just hovering it
RECT rcNicklist;
- GetWindowRect(GetDlgItem(mwdat->hwnd, IDC_LIST), &rcNicklist);
+ GetWindowRect(GetDlgItem(mwdat->GetHwnd(), IDC_LIST), &rcNicklist);
if (PtInRect(&rcNicklist, pt)) {
- SendDlgItemMessage(mwdat->hwnd, IDC_LIST, WM_MOUSEWHEEL, wParam, lParam);
+ SendDlgItemMessage(mwdat->GetHwnd(), IDC_LIST, WM_MOUSEWHEEL, wParam, lParam);
return 0;
}
}
@@ -1145,70 +1141,63 @@ LRESULT TSAPI DM_MouseWheelHandler(HWND hwnd, HWND hwndParent, TWindowData *mwda
return 1;
}
-void TSAPI DM_FreeTheme(TWindowData *dat)
+void CTabBaseDlg::DM_FreeTheme()
{
- if (dat == NULL)
- return;
-
- if (dat->hTheme) {
- CloseThemeData(dat->hTheme);
- dat->hTheme = 0;
+ if (hTheme) {
+ CloseThemeData(hTheme);
+ hTheme = 0;
}
- if (dat->hThemeIP) {
- CloseThemeData(dat->hThemeIP);
- dat->hThemeIP = 0;
+ if (hThemeIP) {
+ CloseThemeData(hThemeIP);
+ hThemeIP = 0;
}
- if (dat->hThemeToolbar) {
- CloseThemeData(dat->hThemeToolbar);
- dat->hThemeToolbar = 0;
+ if (hThemeToolbar) {
+ CloseThemeData(hThemeToolbar);
+ hThemeToolbar = 0;
}
}
-LRESULT TSAPI DM_ThemeChanged(TWindowData *dat)
+void CTabBaseDlg::DM_ThemeChanged()
{
CSkinItem *item_log = &SkinItems[ID_EXTBKHISTORY];
CSkinItem *item_msg = &SkinItems[ID_EXTBKINPUTAREA];
- HWND hwnd = dat->hwnd;
-
- dat->hTheme = OpenThemeData(hwnd, L"EDIT");
+ hTheme = OpenThemeData(m_hwnd, L"EDIT");
- if (dat->bType == SESSIONTYPE_IM) {
- if (dat->hTheme != 0 || (CSkin::m_skinEnabled && !item_log->IGNORED))
- SetWindowLongPtr(GetDlgItem(hwnd, IDC_LOG), GWL_EXSTYLE, GetWindowLongPtr(GetDlgItem(hwnd, IDC_LOG), GWL_EXSTYLE) & ~WS_EX_STATICEDGE);
- if (dat->hTheme != 0 || (CSkin::m_skinEnabled && !item_msg->IGNORED))
- SetWindowLongPtr(GetDlgItem(hwnd, IDC_MESSAGE), GWL_EXSTYLE, GetWindowLongPtr(GetDlgItem(hwnd, IDC_MESSAGE), GWL_EXSTYLE) & ~WS_EX_STATICEDGE);
+ if (bType == SESSIONTYPE_IM) {
+ if (hTheme != 0 || (CSkin::m_skinEnabled && !item_log->IGNORED))
+ SetWindowLongPtr(GetDlgItem(m_hwnd, IDC_LOG), GWL_EXSTYLE, GetWindowLongPtr(GetDlgItem(m_hwnd, IDC_LOG), GWL_EXSTYLE) & ~WS_EX_STATICEDGE);
+ if (hTheme != 0 || (CSkin::m_skinEnabled && !item_msg->IGNORED))
+ SetWindowLongPtr(GetDlgItem(m_hwnd, IDC_MESSAGE), GWL_EXSTYLE, GetWindowLongPtr(GetDlgItem(m_hwnd, IDC_MESSAGE), GWL_EXSTYLE) & ~WS_EX_STATICEDGE);
}
else {
- if (dat->hTheme != 0 || (CSkin::m_skinEnabled && !item_log->IGNORED)) {
- SetWindowLongPtr(GetDlgItem(hwnd, IDC_CHAT_LOG), GWL_EXSTYLE, GetWindowLongPtr(GetDlgItem(hwnd, IDC_CHAT_LOG), GWL_EXSTYLE) & ~WS_EX_STATICEDGE);
- SetWindowLongPtr(GetDlgItem(hwnd, IDC_LIST), GWL_EXSTYLE, GetWindowLongPtr(GetDlgItem(hwnd, IDC_LIST), GWL_EXSTYLE) & ~(WS_EX_CLIENTEDGE | WS_EX_STATICEDGE));
+ if (hTheme != 0 || (CSkin::m_skinEnabled && !item_log->IGNORED)) {
+ SetWindowLongPtr(GetDlgItem(m_hwnd, IDC_LOG), GWL_EXSTYLE, GetWindowLongPtr(GetDlgItem(m_hwnd, IDC_LOG), GWL_EXSTYLE) & ~WS_EX_STATICEDGE);
+ SetWindowLongPtr(GetDlgItem(m_hwnd, IDC_LIST), GWL_EXSTYLE, GetWindowLongPtr(GetDlgItem(m_hwnd, IDC_LIST), GWL_EXSTYLE) & ~(WS_EX_CLIENTEDGE | WS_EX_STATICEDGE));
}
- if (dat->hTheme != 0 || (CSkin::m_skinEnabled && !item_msg->IGNORED))
- SetWindowLongPtr(GetDlgItem(hwnd, IDC_CHAT_MESSAGE), GWL_EXSTYLE, GetWindowLongPtr(GetDlgItem(hwnd, IDC_CHAT_MESSAGE), GWL_EXSTYLE) & ~WS_EX_STATICEDGE);
+ if (hTheme != 0 || (CSkin::m_skinEnabled && !item_msg->IGNORED))
+ SetWindowLongPtr(GetDlgItem(m_hwnd, IDC_MESSAGE), GWL_EXSTYLE, GetWindowLongPtr(GetDlgItem(m_hwnd, IDC_MESSAGE), GWL_EXSTYLE) & ~WS_EX_STATICEDGE);
}
- dat->hThemeIP = M.isAero() ? OpenThemeData(hwnd, L"ButtonStyle") : 0;
- dat->hThemeToolbar = (M.isAero() || (!CSkin::m_skinEnabled && M.isVSThemed())) ? OpenThemeData(hwnd, L"REBAR") : 0;
-
- return 0;
+ hThemeIP = M.isAero() ? OpenThemeData(m_hwnd, L"ButtonStyle") : 0;
+ hThemeToolbar = (M.isAero() || (!CSkin::m_skinEnabled && M.isVSThemed())) ? OpenThemeData(m_hwnd, L"REBAR") : 0;
}
/////////////////////////////////////////////////////////////////////////////////////////
// send out message typing notifications (MTN) when the
// user is typing/editing text in the message input area.
-void TSAPI DM_NotifyTyping(TWindowData *dat, int mode)
+void CTabBaseDlg::DM_NotifyTyping(int mode)
{
- if (dat == NULL || !dat->hContact)
+ if (!m_hContact)
return;
- DeletePopupsForContact(dat->hContact, PU_REMOVE_ON_TYPE);
+ DeletePopupsForContact(m_hContact, PU_REMOVE_ON_TYPE);
- const char *szProto = dat->cache->getActiveProto();
- MCONTACT hContact = dat->cache->getActiveContact();
+ const char *szProto = cache->getActiveProto();
+ MCONTACT hContact = cache->getActiveContact();
// editing user notes or preparing a message for queued delivery -> don't send MTN
- if (dat->fEditNotesActive || dat->sendMode & SMODE_SENDLATER)
+ if (fEditNotesActive || (sendMode & SMODE_SENDLATER))
return;
// allow supression of sending out TN for the contact (NOTE: for metacontacts, do NOT use the subcontact handle)
@@ -1238,72 +1227,66 @@ void TSAPI DM_NotifyTyping(TWindowData *dat, int mode)
// don't send to contacts which are not permanently added to the contact list,
// unless the option to ignore added status is set.
- if (db_get_b(dat->hContact, "CList", "NotOnList", 0) && !M.GetByte(SRMSGMOD, SRMSGSET_TYPINGUNKNOWN, SRMSGDEFSET_TYPINGUNKNOWN))
+ if (db_get_b(m_hContact, "CList", "NotOnList", 0) && !M.GetByte(SRMSGMOD, SRMSGSET_TYPINGUNKNOWN, SRMSGDEFSET_TYPINGUNKNOWN))
return;
// End user check
- dat->nTypeMode = mode;
- CallService(MS_PROTO_SELFISTYPING, hContact, dat->nTypeMode);
+ nTypeMode = mode;
+ CallService(MS_PROTO_SELFISTYPING, hContact, nTypeMode);
}
-void TSAPI DM_OptionsApplied(TWindowData *dat, WPARAM, LPARAM lParam)
+void CSrmmWindow::DM_OptionsApplied(WPARAM, LPARAM lParam)
{
- if (dat == NULL)
- return;
-
- HWND hwndDlg = dat->hwnd;
- TContainerData *pContainer = dat->pContainer;
-
- dat->szMicroLf[0] = 0;
- if (!(dat->pContainer->theme.isPrivate)) {
- LoadThemeDefaults(dat->pContainer);
- dat->dwFlags = dat->pContainer->theme.dwFlags;
+ szMicroLf[0] = 0;
+ if (!(pContainer->theme.isPrivate)) {
+ LoadThemeDefaults(pContainer);
+ dwFlags = pContainer->theme.dwFlags;
}
- LoadLocalFlags(dat);
- LoadTimeZone(dat);
+ LoadLocalFlags();
+ hTimeZone = TimeZone_CreateByContact(m_hContact, 0, TZF_KNOWNONLY);
- dat->bShowUIElements = (pContainer->dwFlags & CNT_HIDETOOLBAR) == 0;
+ bShowUIElements = (pContainer->dwFlags & CNT_HIDETOOLBAR) == 0;
- dat->dwFlagsEx = M.GetByte(dat->hContact, "splitoverride", 0) ? MWF_SHOW_SPLITTEROVERRIDE : 0;
- dat->Panel->getVisibility();
+ dwFlagsEx = M.GetByte(m_hContact, "splitoverride", 0) ? MWF_SHOW_SPLITTEROVERRIDE : 0;
+ Panel->getVisibility();
// small inner margins (padding) for the text areas
- SendDlgItemMessage(hwndDlg, IDC_LOG, EM_SETMARGINS, EC_LEFTMARGIN | EC_RIGHTMARGIN, MAKELONG(0, 0));
- SendDlgItemMessage(hwndDlg, IDC_MESSAGE, EM_SETMARGINS, EC_LEFTMARGIN | EC_RIGHTMARGIN, MAKELONG(3, 3));
+ m_log.SendMsg(EM_SETMARGINS, EC_LEFTMARGIN | EC_RIGHTMARGIN, MAKELONG(0, 0));
+ m_message.SendMsg(EM_SETMARGINS, EC_LEFTMARGIN | EC_RIGHTMARGIN, MAKELONG(3, 3));
- GetSendFormat(dat);
- SetDialogToType(hwndDlg);
- SendMessage(hwndDlg, DM_CONFIGURETOOLBAR, 0, 0);
+ GetSendFormat();
+ SetDialogToType(m_hwnd);
+ SendMessage(m_hwnd, DM_CONFIGURETOOLBAR, 0, 0);
- DM_InitRichEdit(dat);
- if (hwndDlg == pContainer->hwndActive)
+ DM_InitRichEdit(this);
+ if (m_hwnd == pContainer->hwndActive)
SendMessage(pContainer->hwnd, WM_SIZE, 0, 0);
- InvalidateRect(GetDlgItem(hwndDlg, IDC_MESSAGE), NULL, FALSE);
+ InvalidateRect(GetDlgItem(m_hwnd, IDC_MESSAGE), NULL, FALSE);
if (!lParam) {
if (IsIconic(pContainer->hwnd))
- dat->dwFlags |= MWF_DEFERREDREMAKELOG;
+ dwFlags |= MWF_DEFERREDREMAKELOG;
else
- SendMessage(hwndDlg, DM_REMAKELOG, 0, 0);
+ SendMessage(m_hwnd, DM_REMAKELOG, 0, 0);
}
- ShowWindow(dat->hwndPanelPicParent, SW_SHOW);
- EnableWindow(dat->hwndPanelPicParent, TRUE);
+ ShowWindow(hwndPanelPicParent, SW_SHOW);
+ EnableWindow(hwndPanelPicParent, TRUE);
- SendMessage(hwndDlg, DM_UPDATEWINICON, 0, 0);
+ SendMessage(m_hwnd, DM_UPDATEWINICON, 0, 0);
}
-
-void TSAPI DM_Typing(TWindowData *dat, bool fForceOff)
+
+void TSAPI DM_Typing(CTabBaseDlg *dat, bool fForceOff)
{
if (dat == NULL)
return;
- HWND hwndDlg = dat->hwnd;
+ HWND hwndDlg = dat->GetHwnd();
HWND hwndContainer = dat->pContainer->hwnd;
HWND hwndStatus = dat->pContainer->hwndStatus;
if (dat->nTypeMode == PROTOTYPE_SELFTYPING_ON && GetTickCount() - dat->nLastTyping > TIMEOUT_TYPEOFF)
- DM_NotifyTyping(dat, PROTOTYPE_SELFTYPING_OFF);
+ dat->DM_NotifyTyping(PROTOTYPE_SELFTYPING_OFF);
if (dat->bShowTyping == 1) {
if (dat->nTypeSecs > 0) {
@@ -1322,7 +1305,7 @@ void TSAPI DM_Typing(TWindowData *dat, bool fForceOff)
}
SendMessage(hwndDlg, DM_UPDATEWINICON, 0, 0);
HandleIconFeedback(dat, (HICON)-1);
- TWindowData *dat_active = (TWindowData*)GetWindowLongPtr(dat->pContainer->hwndActive, GWLP_USERDATA);
+ CTabBaseDlg *dat_active = (CTabBaseDlg*)GetWindowLongPtr(dat->pContainer->hwndActive, GWLP_USERDATA);
if (dat_active && dat_active->bType == SESSIONTYPE_IM)
SendMessage(hwndContainer, DM_UPDATETITLE, 0, 0);
else
@@ -1338,7 +1321,7 @@ void TSAPI DM_Typing(TWindowData *dat, bool fForceOff)
dat->szStatusBar[0] = 0;
dat->bShowTyping = 0;
}
- UpdateStatusBar(dat);
+ dat->UpdateStatusBar();
}
else if (dat->nTypeSecs > 0) {
mir_snwprintf(dat->szStatusBar, TranslateT("%s is typing a message"), dat->cache->getNick());
@@ -1356,7 +1339,7 @@ void TSAPI DM_Typing(TWindowData *dat, bool fForceOff)
}
if (dat->pContainer->hwndActive != hwndDlg) {
- if (dat->mayFlashTab)
+ if (dat->m_bCanFlashTab)
dat->iFlashIcon = PluginConfig.g_IconTypingEvent;
HandleIconFeedback(dat, PluginConfig.g_IconTypingEvent);
}
@@ -1378,9 +1361,9 @@ void TSAPI DM_Typing(TWindowData *dat, bool fForceOff)
// This cares about private / per container / MUC <> IM splitter syncing and everything.
// called from IM and MUC windows via DM_SPLITTERGLOBALEVENT
-int TSAPI DM_SplitterGlobalEvent(TWindowData *dat, WPARAM wParam, LPARAM lParam)
+int TSAPI DM_SplitterGlobalEvent(CTabBaseDlg *dat, WPARAM wParam, LPARAM lParam)
{
- TWindowData *srcDat = PluginConfig.lastSPlitterPos.pSrcDat;
+ CTabBaseDlg *srcDat = PluginConfig.lastSPlitterPos.pSrcDat;
TContainerData *srcCnt = PluginConfig.lastSPlitterPos.pSrcContainer;
bool fCntGlobal = (!dat->pContainer->settings->fPrivate ? true : false);
@@ -1388,7 +1371,7 @@ int TSAPI DM_SplitterGlobalEvent(TWindowData *dat, WPARAM wParam, LPARAM lParam)
return 0;
RECT rcWin;
- GetWindowRect(dat->hwnd, &rcWin);
+ GetWindowRect(dat->GetHwnd(), &rcWin);
LONG newPos;
if (wParam == 0 && lParam == 0) {
@@ -1408,7 +1391,7 @@ int TSAPI DM_SplitterGlobalEvent(TWindowData *dat, WPARAM wParam, LPARAM lParam)
if (dat->bType == SESSIONTYPE_IM) {
dat->pContainer->settings->splitterPos = dat->splitterY;
if (fCntGlobal) {
- SaveSplitter(dat);
+ dat->SaveSplitter();
if (PluginConfig.lastSPlitterPos.bSync)
g_Settings.iSplitterY = dat->splitterY - DPISCALEY_S(23);
}
@@ -1437,7 +1420,7 @@ int TSAPI DM_SplitterGlobalEvent(TWindowData *dat, WPARAM wParam, LPARAM lParam)
// for inactive sessions, delay the splitter repositioning until they become
// active (faster, avoid redraw/resize problems for minimized windows)
- if (IsIconic(dat->pContainer->hwnd) || dat->pContainer->hwndActive != dat->hwnd) {
+ if (IsIconic(dat->pContainer->hwnd) || dat->pContainer->hwndActive != dat->GetHwnd()) {
dat->dwFlagsEx |= MWF_EX_DELAYEDSPLITTER;
dat->wParam = newPos;
dat->lParam = PluginConfig.lastSPlitterPos.lParam;
@@ -1447,19 +1430,19 @@ int TSAPI DM_SplitterGlobalEvent(TWindowData *dat, WPARAM wParam, LPARAM lParam)
else newPos = wParam;
if (dat->bType == SESSIONTYPE_IM) {
- LoadSplitter(dat);
- AdjustBottomAvatarDisplay(dat);
- DM_RecalcPictureSize(dat);
- SendMessage(dat->hwnd, WM_SIZE, 0, 0);
+ dat->LoadSplitter();
+ dat->AdjustBottomAvatarDisplay();
+ dat->DM_RecalcPictureSize();
+ SendMessage(dat->GetHwnd(), WM_SIZE, 0, 0);
DM_ScrollToBottom(dat, 1, 1);
if (dat != srcDat)
- CSkin::UpdateToolbarBG(dat);
+ dat->UpdateToolbarBG();
}
else {
SESSION_INFO *si = dat->si;
if (si) {
si->iSplitterY = g_Settings.iSplitterY;
- SendMessage(dat->hwnd, WM_SIZE, 0, 0);
+ SendMessage(dat->GetHwnd(), WM_SIZE, 0, 0);
}
}
return 0;
@@ -1468,10 +1451,10 @@ int TSAPI DM_SplitterGlobalEvent(TWindowData *dat, WPARAM wParam, LPARAM lParam)
/////////////////////////////////////////////////////////////////////////////////////////
// incoming event handler
-void TSAPI DM_EventAdded(TWindowData *dat, WPARAM hContact, LPARAM lParam)
+void TSAPI DM_EventAdded(CTabBaseDlg *dat, WPARAM hContact, LPARAM lParam)
{
TContainerData *pContainer = dat->pContainer;
- HWND hwndDlg = dat->hwnd, hwndContainer = pContainer->hwnd, hwndTab = GetParent(dat->hwnd);
+ HWND hwndDlg = dat->GetHwnd(), hwndContainer = pContainer->hwnd, hwndTab = GetParent(dat->GetHwnd());
MEVENT hDbEvent = (MEVENT)lParam;
DBEVENTINFO dbei = {};
@@ -1502,7 +1485,7 @@ void TSAPI DM_EventAdded(TWindowData *dat, WPARAM hContact, LPARAM lParam)
// been minimized or in the background.
if (!(dbei.flags & DBEF_SENT) && !bIsStatusChangeEvent) {
if (PluginConfig.m_bDividersUsePopupConfig && PluginConfig.m_bUseDividers) {
- if (!MessageWindowOpened(dat->hContact, 0))
+ if (!MessageWindowOpened(dat->m_hContact, 0))
SendMessage(hwndDlg, DM_ADDDIVIDER, 0, 0);
}
else if (PluginConfig.m_bUseDividers) {
@@ -1552,12 +1535,12 @@ void TSAPI DM_EventAdded(TWindowData *dat, WPARAM hContact, LPARAM lParam)
break;
}
SetTimer(hwndDlg, TIMERID_FLASHWND, TIMEOUT_FLASHWND, NULL);
- dat->mayFlashTab = TRUE;
+ dat->m_bCanFlashTab = true;
}
// try to flash the contact list...
if (!bDisableNotify)
- FlashOnClist(hwndDlg, dat, hDbEvent, &dbei);
+ dat->FlashOnClist(hDbEvent, &dbei);
// autoswitch tab if option is set AND container is minimized (otherwise, we never autoswitch)
// never switch for status changes...
@@ -1569,7 +1552,7 @@ void TSAPI DM_EventAdded(TWindowData *dat, WPARAM hContact, LPARAM lParam)
TabCtrl_SetCurSel(GetParent(hwndDlg), iItem);
ShowWindow(pContainer->hwndActive, SW_HIDE);
pContainer->hwndActive = hwndDlg;
- SendMessage(hwndContainer, DM_UPDATETITLE, dat->hContact, 0);
+ SendMessage(hwndContainer, DM_UPDATETITLE, dat->m_hContact, 0);
pContainer->dwFlags |= CNT_DEFERREDTABSELECT;
}
}
@@ -1593,7 +1576,7 @@ void TSAPI DM_EventAdded(TWindowData *dat, WPARAM hContact, LPARAM lParam)
dat->pWnd->Invalidate();
}
-void TSAPI DM_HandleAutoSizeRequest(TWindowData *dat, REQRESIZE* rr)
+void TSAPI DM_HandleAutoSizeRequest(CTabBaseDlg *dat, REQRESIZE* rr)
{
if (dat == NULL || rr == NULL || GetForegroundWindow() != dat->pContainer->hwnd)
return;
@@ -1614,7 +1597,7 @@ void TSAPI DM_HandleAutoSizeRequest(TWindowData *dat, REQRESIZE* rr)
return;
RECT rc;
- GetClientRect(dat->hwnd, &rc);
+ GetClientRect(dat->GetHwnd(), &rc);
LONG cy = rc.bottom - rc.top;
LONG panelHeight = (dat->Panel->isActive() ? dat->Panel->getHeight() : 0);
@@ -1626,49 +1609,46 @@ void TSAPI DM_HandleAutoSizeRequest(TWindowData *dat, REQRESIZE* rr)
if (dat->pContainer->dwFlags & CNT_BOTTOMTOOLBAR)
dat->dynaSplitter += DPISCALEY_S(22);
dat->splitterY = dat->dynaSplitter + DPISCALEY_S(34);
- DM_RecalcPictureSize(dat);
+ dat->DM_RecalcPictureSize();
}
else if (dat->si) {
dat->si->iSplitterY = (rc.bottom - (rc.bottom - iNewHeight + DPISCALEY_S(3))) + DPISCALEY_S(34);
if (!(dat->pContainer->dwFlags & CNT_BOTTOMTOOLBAR))
dat->si->iSplitterY -= DPISCALEY_S(22);
- SendMessage(dat->hwnd, WM_SIZE, 0, 0);
+ SendMessage(dat->GetHwnd(), WM_SIZE, 0, 0);
}
dat->iInputAreaHeight = iNewHeight;
- CSkin::UpdateToolbarBG(dat);
+ dat->UpdateToolbarBG();
DM_ScrollToBottom(dat, 1, 0);
}
-void TSAPI DM_UpdateTitle(TWindowData *dat, WPARAM, LPARAM lParam)
+void CTabBaseDlg::DM_UpdateTitle(WPARAM, LPARAM lParam)
{
wchar_t newtitle[128];
- DWORD dwOldIdle = dat->idle;
+ DWORD dwOldIdle = idle;
const char *szActProto = 0;
- HWND hwndDlg = dat->hwnd;
- HWND hwndTab = GetParent(hwndDlg);
- HWND hwndContainer = dat->pContainer->hwnd;
- TContainerData *pContainer = dat->pContainer;
+ HWND hwndContainer = pContainer->hwnd;
- dat->szStatus[0] = 0;
+ szStatus[0] = 0;
- if (dat->iTabID == -1)
+ if (iTabID == -1)
return;
TCITEM item = { 0 };
- if (dat->hContact) {
- const wchar_t *szNick = dat->cache->getNick();
+ if (m_hContact) {
+ const wchar_t *szNick = cache->getNick();
- if (dat->szProto) {
- szActProto = dat->cache->getProto();
+ if (szProto) {
+ szActProto = cache->getProto();
- bool bHasName = (dat->cache->getUIN()[0] != 0);
- dat->idle = dat->cache->getIdleTS();
- dat->dwFlagsEx = dat->idle ? dat->dwFlagsEx | MWF_SHOW_ISIDLE : dat->dwFlagsEx & ~MWF_SHOW_ISIDLE;
+ bool bHasName = (cache->getUIN()[0] != 0);
+ idle = cache->getIdleTS();
+ dwFlagsEx = idle ? dwFlagsEx | MWF_SHOW_ISIDLE : dwFlagsEx & ~MWF_SHOW_ISIDLE;
- dat->wStatus = dat->cache->getStatus();
- wcsncpy_s(dat->szStatus, pcli->pfnGetStatusModeDescription(dat->szProto == NULL ? ID_STATUS_OFFLINE : dat->wStatus, 0), _TRUNCATE);
+ wStatus = cache->getStatus();
+ wcsncpy_s(szStatus, pcli->pfnGetStatusModeDescription(szProto == NULL ? ID_STATUS_OFFLINE : wStatus, 0), _TRUNCATE);
if (lParam != 0) {
wchar_t newcontactname[128]; newcontactname[0] = 0;
@@ -1681,7 +1661,7 @@ void TSAPI DM_UpdateTitle(TWindowData *dat, WPARAM, LPARAM lParam)
if (newcontactname[0] != 0) {
if (PluginConfig.m_bStatusOnTabs)
- mir_snwprintf(newtitle, L"%s (%s)", newcontactname, dat->szStatus);
+ mir_snwprintf(newtitle, L"%s (%s)", newcontactname, szStatus);
else
wcsncpy_s(newtitle, newcontactname, _TRUNCATE);
}
@@ -1689,59 +1669,59 @@ void TSAPI DM_UpdateTitle(TWindowData *dat, WPARAM, LPARAM lParam)
item.mask |= TCIF_TEXT;
}
- SendMessage(hwndDlg, DM_UPDATEWINICON, 0, 0);
+ SendMessage(m_hwnd, DM_UPDATEWINICON, 0, 0);
wchar_t fulluin[256];
- if (dat->bIsMeta)
+ if (bIsMeta)
mir_snwprintf(fulluin,
TranslateT("UID: %s (SHIFT click -> copy to clipboard)\nClick for user's details\nRight click for metacontact control\nClick dropdown to add or remove user from your favorites."),
- bHasName ? dat->cache->getUIN() : TranslateT("No UID"));
+ bHasName ? cache->getUIN() : TranslateT("No UID"));
else
mir_snwprintf(fulluin,
TranslateT("UID: %s (SHIFT click -> copy to clipboard)\nClick for user's details\nClick dropdown to change this contact's favorite status."),
- bHasName ? dat->cache->getUIN() : TranslateT("No UID"));
+ bHasName ? cache->getUIN() : TranslateT("No UID"));
- SendDlgItemMessage(hwndDlg, IDC_NAME, BUTTONADDTOOLTIP, (WPARAM)fulluin, BATF_UNICODE);
+ SendDlgItemMessage(m_hwnd, IDC_NAME, BUTTONADDTOOLTIP, (WPARAM)fulluin, BATF_UNICODE);
}
}
else wcsncpy_s(newtitle, L"Message Session", _TRUNCATE);
- if (dat->idle != dwOldIdle || lParam != 0) {
+ if (idle != dwOldIdle || lParam != 0) {
if (item.mask & TCIF_TEXT) {
item.pszText = newtitle;
- wcsncpy(dat->newtitle, newtitle, _countof(dat->newtitle));
- dat->newtitle[127] = 0;
- if (dat->pWnd)
- dat->pWnd->updateTitle(dat->cache->getNick());
+ wcsncpy(newtitle, newtitle, _countof(newtitle));
+ newtitle[127] = 0;
+ if (pWnd)
+ pWnd->updateTitle(cache->getNick());
}
- if (dat->iTabID >= 0) {
- TabCtrl_SetItem(hwndTab, dat->iTabID, &item);
+ if (iTabID >= 0) {
+ TabCtrl_SetItem(m_hwndParent, iTabID, &item);
if (pContainer->dwFlags & CNT_SIDEBAR)
- pContainer->SideBar->updateSession(dat);
+ pContainer->SideBar->updateSession(this);
}
- if (pContainer->hwndActive == hwndDlg && lParam)
- SendMessage(hwndContainer, DM_UPDATETITLE, dat->hContact, 0);
+ if (pContainer->hwndActive == m_hwnd && lParam)
+ SendMessage(hwndContainer, DM_UPDATETITLE, m_hContact, 0);
- UpdateTrayMenuState(dat, TRUE);
- if (dat->cache->isFavorite())
- AddContactToFavorites(dat->hContact, dat->cache->getNick(), szActProto, dat->szStatus, dat->wStatus,
- Skin_LoadProtoIcon(dat->cache->getProto(), dat->cache->getStatus()), 0, PluginConfig.g_hMenuFavorites);
+ UpdateTrayMenuState(this, TRUE);
+ if (cache->isFavorite())
+ AddContactToFavorites(m_hContact, cache->getNick(), szActProto, szStatus, wStatus,
+ Skin_LoadProtoIcon(cache->getProto(), cache->getStatus()), 0, PluginConfig.g_hMenuFavorites);
- if (dat->cache->isRecent())
- AddContactToFavorites(dat->hContact, dat->cache->getNick(), szActProto, dat->szStatus, dat->wStatus,
- Skin_LoadProtoIcon(dat->cache->getProto(), dat->cache->getStatus()), 0, PluginConfig.g_hMenuRecent);
+ if (cache->isRecent())
+ AddContactToFavorites(m_hContact, cache->getNick(), szActProto, szStatus, wStatus,
+ Skin_LoadProtoIcon(cache->getProto(), cache->getStatus()), 0, PluginConfig.g_hMenuRecent);
- dat->Panel->Invalidate();
- if (dat->pWnd)
- dat->pWnd->Invalidate();
+ Panel->Invalidate();
+ if (pWnd)
+ pWnd->Invalidate();
}
// care about MetaContacts and update the statusbar icon with the currently "most online" contact...
- if (dat->bIsMeta) {
- PostMessage(hwndDlg, DM_UPDATEMETACONTACTINFO, 0, 0);
- PostMessage(hwndDlg, DM_OWNNICKCHANGED, 0, 0);
+ if (bIsMeta) {
+ PostMessage(m_hwnd, DM_UPDATEMETACONTACTINFO, 0, 0);
+ PostMessage(m_hwnd, DM_OWNNICKCHANGED, 0, 0);
if (pContainer->dwFlags & CNT_UINSTATUSBAR)
- DM_UpdateLastMessage(dat);
+ DM_UpdateLastMessage(this);
}
}
@@ -1763,7 +1743,7 @@ static int OnSrmmIconChanged(WPARAM hContact, LPARAM)
return 0;
}
-void DrawStatusIcons(TWindowData *dat, HDC hDC, const RECT &rc, int gap)
+void DrawStatusIcons(CTabBaseDlg *dat, HDC hDC, const RECT &rc, int gap)
{
int x = rc.left;
int y = (rc.top + rc.bottom - PluginConfig.m_smcxicon) >> 1;
@@ -1771,7 +1751,7 @@ void DrawStatusIcons(TWindowData *dat, HDC hDC, const RECT &rc, int gap)
SetBkMode(hDC, TRANSPARENT);
int nIcon = 0;
- while (StatusIconData *si = Srmm_GetNthIcon(dat->hContact, nIcon++)) {
+ while (StatusIconData *si = Srmm_GetNthIcon(dat->m_hContact, nIcon++)) {
if (!mir_strcmp(si->szModule, MSG_ICON_MODULE)) {
if (si->dwId == MSG_ICON_SOUND) {
DrawIconEx(hDC, x, y, PluginConfig.g_buttonBarIcons[ICON_DEFAULT_SOUNDS],
@@ -1785,7 +1765,7 @@ void DrawStatusIcons(TWindowData *dat, HDC hDC, const RECT &rc, int gap)
if (dat->bType == SESSIONTYPE_IM || dat->si->iType == GCW_PRIVMESS) {
DrawIconEx(hDC, x, y, PluginConfig.g_buttonBarIcons[ICON_DEFAULT_TYPING], PluginConfig.m_smcxicon, PluginConfig.m_smcyicon, 0, NULL, DI_NORMAL);
- DrawIconEx(hDC, x, y, db_get_b(dat->hContact, SRMSGMOD, SRMSGSET_TYPING, M.GetByte(SRMSGMOD, SRMSGSET_TYPINGNEW, SRMSGDEFSET_TYPINGNEW)) ?
+ DrawIconEx(hDC, x, y, db_get_b(dat->m_hContact, SRMSGMOD, SRMSGSET_TYPING, M.GetByte(SRMSGMOD, SRMSGSET_TYPINGNEW, SRMSGDEFSET_TYPINGNEW)) ?
PluginConfig.g_iconOverlayEnabled : PluginConfig.g_iconOverlayDisabled, PluginConfig.m_smcxicon, PluginConfig.m_smcyicon, 0, NULL, DI_NORMAL);
}
else CSkin::DrawDimmedIcon(hDC, x, y, PluginConfig.m_smcxicon, PluginConfig.m_smcyicon, PluginConfig.g_buttonBarIcons[ICON_DEFAULT_TYPING], 50);
@@ -1811,7 +1791,7 @@ void DrawStatusIcons(TWindowData *dat, HDC hDC, const RECT &rc, int gap)
}
}
-void CheckStatusIconClick(TWindowData *dat, POINT pt, const RECT &rc, int gap, int code)
+void CheckStatusIconClick(CTabBaseDlg *dat, POINT pt, const RECT &rc, int gap, int code)
{
if (dat && (code == NM_CLICK || code == NM_RCLICK)) {
POINT ptScreen;
@@ -1824,7 +1804,7 @@ void CheckStatusIconClick(TWindowData *dat, POINT pt, const RECT &rc, int gap, i
if (dat == NULL)
return;
- StatusIconData *si = Srmm_GetNthIcon(dat->hContact, iconNum);
+ StatusIconData *si = Srmm_GetNthIcon(dat->m_hContact, iconNum);
if (si == NULL)
return;
@@ -1858,7 +1838,7 @@ void CheckStatusIconClick(TWindowData *dat, POINT pt, const RECT &rc, int gap, i
sicd.dwId = si->dwId;
sicd.szModule = si->szModule;
sicd.flags = (code == NM_RCLICK ? MBCF_RIGHTBUTTON : 0);
- NotifyEventHooks(hHookIconPressedEvt, dat->hContact, (LPARAM)&sicd);
+ NotifyEventHooks(hHookIconPressedEvt, dat->m_hContact, (LPARAM)&sicd);
InvalidateRect(dat->pContainer->hwndStatus, NULL, TRUE);
}
}
diff --git a/plugins/TabSRMM/src/generic_msghandlers.h b/plugins/TabSRMM/src/generic_msghandlers.h
index 63a024e2d4..c499a3722b 100644
--- a/plugins/TabSRMM/src/generic_msghandlers.h
+++ b/plugins/TabSRMM/src/generic_msghandlers.h
@@ -26,32 +26,21 @@
//
// prototypes from generic_msghandlers.c
-void TSAPI DM_SetDBButtonStates(HWND hwndChild, TWindowData *dat);
-HWND TSAPI DM_CreateClist(TWindowData *dat);
-
-void TSAPI DM_OptionsApplied(TWindowData *dat, WPARAM wParam, LPARAM lParam);
-void TSAPI DM_UpdateTitle(TWindowData *dat, WPARAM wParam, LPARAM lParam);
-void TSAPI DM_ScrollToBottom(TWindowData *dat, WPARAM wParam, LPARAM lParam);
-void TSAPI DM_LoadLocale(TWindowData *dat);
-void TSAPI DM_SaveLocale(TWindowData *dat, WPARAM wParam, LPARAM lParam);
-void TSAPI DM_UpdateLastMessage(const TWindowData *dat);
+void TSAPI DM_ScrollToBottom(CTabBaseDlg *dat, WPARAM wParam, LPARAM lParam);
+void TSAPI DM_LoadLocale(CTabBaseDlg *dat);
+void TSAPI DM_SaveLocale(CTabBaseDlg *dat, WPARAM wParam, LPARAM lParam);
+void TSAPI DM_UpdateLastMessage(const CTabBaseDlg *dat);
LRESULT TSAPI DM_WMCopyHandler(HWND hwnd, WNDPROC oldWndProc, UINT uMsg, WPARAM wParam, LPARAM lParam);
-LRESULT TSAPI DM_MouseWheelHandler(HWND hwnd, HWND hwndParent, TWindowData *mwdat, WPARAM wParam, LPARAM lParam);
-LRESULT TSAPI DM_ThemeChanged(TWindowData *dat);
-void TSAPI DM_Typing(TWindowData *dat, bool fForceOff = false);
-void TSAPI DM_FreeTheme(TWindowData *dat);
-void TSAPI DM_NotifyTyping(TWindowData *dat, int mode);
-int TSAPI DM_SplitterGlobalEvent(TWindowData *dat, WPARAM wParam, LPARAM lParam);
+LRESULT TSAPI DM_MouseWheelHandler(HWND hwnd, HWND hwndParent, CTabBaseDlg *mwdat, WPARAM wParam, LPARAM lParam);
+void TSAPI DM_Typing(CTabBaseDlg *dat, bool fForceOff = false);
+int TSAPI DM_SplitterGlobalEvent(CTabBaseDlg *dat, WPARAM wParam, LPARAM lParam);
-void TSAPI DM_EventAdded(TWindowData *dat, WPARAM wParam, LPARAM lParam);
-void TSAPI DM_InitRichEdit(TWindowData *dat);
+void TSAPI DM_EventAdded(CTabBaseDlg *dat, WPARAM wParam, LPARAM lParam);
+void TSAPI DM_InitRichEdit(CTabBaseDlg *dat);
LRESULT TSAPI DM_ContainerCmdHandler(TContainerData *pContainer, UINT cmd, WPARAM wParam, LPARAM lParam);
-LRESULT TSAPI DM_MsgWindowCmdHandler(HWND hwndDlg, TContainerData *pContainer, TWindowData *dat, UINT cmd, WPARAM wParam, LPARAM lParam);
-LRESULT TSAPI DM_GenericHotkeysCheck(MSG *message, TWindowData *dat);
-void TSAPI DM_DismissTip(TWindowData *dat, const POINT& pt);
-void TSAPI DM_InitTip(TWindowData *dat);
-void TSAPI DM_HandleAutoSizeRequest(TWindowData *dat, REQRESIZE* rr);
-void TSAPI DM_SaveLogAsRTF(const TWindowData *dat);
-void TSAPI DM_CheckAutoHide(const TWindowData *dat, WPARAM wParam, LPARAM lParam);
-
-LRESULT __stdcall DM_RecalcPictureSize(TWindowData *dat);
+LRESULT TSAPI DM_MsgWindowCmdHandler(HWND hwndDlg, TContainerData *pContainer, CTabBaseDlg *dat, UINT cmd, WPARAM wParam, LPARAM lParam);
+LRESULT TSAPI DM_GenericHotkeysCheck(MSG *message, CTabBaseDlg *dat);
+void TSAPI DM_DismissTip(CTabBaseDlg *dat, const POINT& pt);
+void TSAPI DM_HandleAutoSizeRequest(CTabBaseDlg *dat, REQRESIZE* rr);
+void TSAPI DM_SaveLogAsRTF(const CTabBaseDlg *dat);
+void TSAPI DM_CheckAutoHide(const CTabBaseDlg *dat, WPARAM wParam, LPARAM lParam);
diff --git a/plugins/TabSRMM/src/globals.cpp b/plugins/TabSRMM/src/globals.cpp
index 5706e0d843..7d07841c50 100644
--- a/plugins/TabSRMM/src/globals.cpp
+++ b/plugins/TabSRMM/src/globals.cpp
@@ -413,7 +413,7 @@ int CGlobals::DBSettingChanged(WPARAM hContact, LPARAM lParam)
PostMessage(hwnd, DM_UPDATESTATUSMSG, 0, 0);
if (fChanged) {
if (c->getStatus() == ID_STATUS_OFFLINE) { // clear typing notification in the status bar when contact goes offline
- TWindowData *dat = c->getDat();
+ CTabBaseDlg *dat = c->getDat();
if (dat) {
dat->nTypeSecs = 0;
dat->bShowTyping = 0;
@@ -557,7 +557,7 @@ void CGlobals::logStatusChange(WPARAM wParam, const CContactCache *c)
if (c == 0)
return;
- TWindowData *dat = c->getDat();
+ CSrmmWindow *dat = c->getDat();
if (dat == NULL || !c->isValid())
return;
@@ -595,7 +595,7 @@ void CGlobals::logStatusChange(WPARAM wParam, const CContactCache *c)
dbei.eventType = EVENTTYPE_STATUSCHANGE;
dbei.timestamp = time(NULL);
dbei.szModule = (char*)c->getProto();
- StreamInEvents(dat->hwnd, NULL, 1, 1, &dbei);
+ dat->StreamInEvents(NULL, 1, 1, &dbei);
}
/////////////////////////////////////////////////////////////////////////////////////////
diff --git a/plugins/TabSRMM/src/globals.h b/plugins/TabSRMM/src/globals.h
index 9e03963b29..1e2d89dd5e 100644
--- a/plugins/TabSRMM/src/globals.h
+++ b/plugins/TabSRMM/src/globals.h
@@ -32,7 +32,7 @@
struct TSplitterBroadCast {
TContainerData *pSrcContainer;
- TWindowData *pSrcDat;
+ CSrmmWindow *pSrcDat;
LONG pos, pos_chat;
LONG off_chat, off_im;
LPARAM lParam;
diff --git a/plugins/TabSRMM/src/hotkeyhandler.cpp b/plugins/TabSRMM/src/hotkeyhandler.cpp
index fe31a8c2c6..e62ac00c15 100644
--- a/plugins/TabSRMM/src/hotkeyhandler.cpp
+++ b/plugins/TabSRMM/src/hotkeyhandler.cpp
@@ -117,7 +117,7 @@ void TSAPI HandleMenuEntryFromhContact(MCONTACT hContact)
ActivateExistingTab(pContainer, si->hWnd);
if (GetForegroundWindow() != pContainer->hwnd)
SetForegroundWindow(pContainer->hwnd);
- SetFocus(GetDlgItem(pContainer->hwndActive, IDC_CHAT_MESSAGE));
+ SetFocus(GetDlgItem(pContainer->hwndActive, IDC_MESSAGE));
return;
}
}
@@ -202,9 +202,9 @@ LONG_PTR CALLBACK HotkeyHandlerDlgProc(HWND hwndDlg, UINT msg, WPARAM wParam, LP
hWnd = si ? si->hWnd : 0;
}
- TWindowData *dat = 0;
+ CSrmmWindow *dat = 0;
if (hWnd)
- dat = (TWindowData*)GetWindowLongPtr(hWnd, GWLP_USERDATA);
+ dat = (CSrmmWindow*)GetWindowLongPtr(hWnd, GWLP_USERDATA);
{
HICON hIcon;
@@ -212,7 +212,7 @@ LONG_PTR CALLBACK HotkeyHandlerDlgProc(HWND hwndDlg, UINT msg, WPARAM wParam, LP
if (dis->itemData > 0)
hIcon = (dis->itemData & 0x10000000) ? pci->hIcons[ICON_HIGHLIGHT] : PluginConfig.g_IconMsgEvent;
else if (dat != NULL) {
- hIcon = MY_GetContactIcon(dat, 0);
+ hIcon = dat->GetMyContactIcon(0);
idle = dat->idle;
}
else hIcon = PluginConfig.g_iconContainer;
@@ -394,7 +394,7 @@ LONG_PTR CALLBACK HotkeyHandlerDlgProc(HWND hwndDlg, UINT msg, WPARAM wParam, LP
TContainerData *pContainer = 0;
SendMessage(si->hWnd, DM_QUERYCONTAINER, 0, (LPARAM)&pContainer);
if (pContainer) {
- int iTabs = TabCtrl_GetItemCount(GetDlgItem(pContainer->hwnd, 1159));
+ int iTabs = TabCtrl_GetItemCount(GetDlgItem(pContainer->hwnd, IDC_MSGTABS));
if (iTabs == 1)
SendMessage(pContainer->hwnd, WM_CLOSE, 0, 1);
else
@@ -431,18 +431,18 @@ LONG_PTR CALLBACK HotkeyHandlerDlgProc(HWND hwndDlg, UINT msg, WPARAM wParam, LP
HWND hWnd = M.FindWindow(hContact);
if (hWnd) {
- TWindowData *dat = (TWindowData*)GetWindowLongPtr(hWnd, GWLP_USERDATA);
+ CSrmmWindow *dat = (CSrmmWindow*)GetWindowLongPtr(hWnd, GWLP_USERDATA);
if (dat) {
if (hkl) {
dat->hkl = hkl;
- PostMessage(dat->hwnd, DM_SETLOCALE, 0, 0);
+ PostMessage(dat->GetHwnd(), DM_SETLOCALE, 0, 0);
}
DBVARIANT dbv;
if (0 == db_get_ws(hContact, SRMSGMOD_T, "locale", &dbv)) {
- GetLocaleID(dat, dbv.ptszVal);
+ dat->GetLocaleID(dbv.ptszVal);
db_free(&dbv);
- UpdateReadChars(dat);
+ dat->UpdateReadChars();
}
}
}
diff --git a/plugins/TabSRMM/src/infopanel.cpp b/plugins/TabSRMM/src/infopanel.cpp
index d41d55a27d..52c64e0c53 100644
--- a/plugins/TabSRMM/src/infopanel.cpp
+++ b/plugins/TabSRMM/src/infopanel.cpp
@@ -40,7 +40,7 @@ wchar_t *xStatusDescr[] =
TInfoPanelConfig CInfoPanel::m_ipConfig = { 0 };
-int CInfoPanel::setPanelHandler(TWindowData *dat, WPARAM wParam, LPARAM lParam)
+int CInfoPanel::setPanelHandler(CTabBaseDlg *dat, WPARAM wParam, LPARAM lParam)
{
if (wParam == 0 && lParam == 0) {
dat->Panel->getVisibility();
@@ -48,7 +48,7 @@ int CInfoPanel::setPanelHandler(TWindowData *dat, WPARAM wParam, LPARAM lParam)
dat->Panel->showHide();
}
else {
- TWindowData *srcDat = (TWindowData*)wParam;
+ CTabBaseDlg *srcDat = (CTabBaseDlg*)wParam;
if (lParam == 0)
dat->Panel->loadHeight();
else {
@@ -62,7 +62,7 @@ int CInfoPanel::setPanelHandler(TWindowData *dat, WPARAM wParam, LPARAM lParam)
dat->Panel->setHeight((LONG)lParam);
}
}
- SendMessage(dat->hwnd, WM_SIZE, 0, 0);
+ SendMessage(dat->GetHwnd(), WM_SIZE, 0, 0);
}
return 0;
}
@@ -79,7 +79,7 @@ void CInfoPanel::loadHeight()
{
BYTE bSync = M.GetByte("syncAllPanels", 0); // sync muc <> im panels
- m_height = M.GetDword(m_dat->hContact, "panelheight", -1);
+ m_height = M.GetDword(m_dat->m_hContact, "panelheight", -1);
if (m_height == -1 || HIWORD(m_height) == 0) {
if (m_dat->pContainer->settings->fPrivate)
@@ -129,7 +129,7 @@ void CInfoPanel::saveHeight(bool fFlush)
}
}
}
- else db_set_dw(m_dat->hContact, SRMSGMOD_T, "panelheight", MAKELONG(m_height, 0xffff));
+ else db_set_dw(m_dat->m_hContact, SRMSGMOD_T, "panelheight", MAKELONG(m_height, 0xffff));
}
}
@@ -161,13 +161,13 @@ void CInfoPanel::setHeight(LONG newHeight, bool fBroadcast)
void CInfoPanel::Configure() const
{
- Utils::showDlgControl(m_dat->hwnd, IDC_PANELSPLITTER, m_active ? SW_SHOW : SW_HIDE);
+ Utils::showDlgControl(m_dat->GetHwnd(), IDC_PANELSPLITTER, m_active ? SW_SHOW : SW_HIDE);
}
void CInfoPanel::showHide() const
{
HBITMAP hbm = (m_active && m_dat->pContainer->avatarMode != 3) ? m_dat->hOwnPic : (m_dat->ace ? m_dat->ace->hbmPic : PluginConfig.g_hbmUnknown);
- HWND hwndDlg = m_dat->hwnd;
+ HWND hwndDlg = m_dat->GetHwnd();
if (!m_isChat) {
::ShowWindow(m_dat->hwndPanelPicParent, (m_active) ? SW_SHOW : SW_HIDE);
@@ -178,18 +178,18 @@ void CInfoPanel::showHide() const
}
m_dat->iRealAvatarHeight = 0;
- ::AdjustBottomAvatarDisplay(m_dat);
+ m_dat->AdjustBottomAvatarDisplay();
BITMAP bm;
::GetObject(hbm, sizeof(bm), &bm);
- ::CalcDynamicAvatarSize(m_dat, &bm);
+ m_dat->CalcDynamicAvatarSize(&bm);
if (m_active) {
if (m_dat->hwndContactPic) {
::DestroyWindow(m_dat->hwndContactPic);
m_dat->hwndContactPic = NULL;
}
- ::GetAvatarVisibility(hwndDlg, m_dat);
+ m_dat->GetAvatarVisibility();
Configure();
InvalidateRect(hwndDlg, NULL, FALSE);
}
@@ -225,13 +225,13 @@ void CInfoPanel::showHide() const
bool CInfoPanel::getVisibility()
{
- if (m_dat->hContact == 0) {
+ if (m_dat->m_hContact == 0) {
setActive(false); // no info panel, if no hcontact
return false;
}
BYTE bDefault = (m_dat->pContainer->dwFlags & CNT_INFOPANEL) ? 1 : 0;
- BYTE bContact = M.GetByte(m_dat->hContact, "infopanel", 0);
+ BYTE bContact = M.GetByte(m_dat->m_hContact, "infopanel", 0);
BYTE visible = (bContact == 0 ? bDefault : (bContact == (BYTE)-1 ? 0 : 1));
setActive(visible);
@@ -301,7 +301,7 @@ void CInfoPanel::renderBG(const HDC hdc, RECT& rc, CSkinItem *item, bool bAero,
if (CSkin::m_skinEnabled) {
rc.bottom -= 2;
- CSkin::SkinDrawBG(m_dat->hwnd, m_dat->pContainer->hwnd, m_dat->pContainer, &rc, hdc);
+ CSkin::SkinDrawBG(m_dat->GetHwnd(), m_dat->pContainer->hwnd, m_dat->pContainer, &rc, hdc);
item = &SkinItems[ID_EXTBKINFOPANELBG];
// if new (= tabsrmm 3.x) skin item is not defined, use the old info panel
@@ -335,10 +335,10 @@ void CInfoPanel::renderContent(const HDC hdc)
DRAWITEMSTRUCT dis = { 0 };
dis.rcItem = m_dat->rcPic;
dis.hDC = hdc;
- dis.hwndItem = m_dat->hwnd;
- if (::MsgWindowDrawHandler(0, (LPARAM)&dis, m_dat) == 0) {
- ::PostMessage(m_dat->hwnd, WM_SIZE, 0, 1);
- ::PostMessage(m_dat->hwnd, DM_FORCEREDRAW, 0, 0);
+ dis.hwndItem = m_dat->GetHwnd();
+ if (m_dat->MsgWindowDrawHandler(0, (LPARAM)&dis) == 0) {
+ ::PostMessage(m_dat->GetHwnd(), WM_SIZE, 0, 1);
+ ::PostMessage(m_dat->GetHwnd(), DM_FORCEREDRAW, 0, 0);
}
RECT rc = m_dat->rcNick;
@@ -400,7 +400,7 @@ void CInfoPanel::RenderIPNickname(const HDC hdc, RECT &rcItem)
rcItem.left += 2;
if (szTextToShow[0]) {
- HICON xIcon = ::GetXStatusIcon(m_dat);
+ HICON xIcon = m_dat->GetXStatusIcon();
if (xIcon) {
::DrawIconEx(hdc, rcItem.left, (rcItem.bottom + rcItem.top - PluginConfig.m_smcyicon) / 2, xIcon, PluginConfig.m_smcxicon, PluginConfig.m_smcyicon, 0, 0, DI_NORMAL | DI_COMPAT);
::DestroyIcon(xIcon);
@@ -550,7 +550,7 @@ void CInfoPanel::RenderIPStatus(const HDC hdc, RECT& rcItem)
m_dat->panelStatusCX = 3 + sStatus.cx + sProto.cx + 14 + (m_dat->hClientIcon ? 20 : 0) + sTime.cx + 13;
if (m_dat->panelStatusCX != oldPanelStatusCX) {
- SendMessage(m_dat->hwnd, WM_SIZE, 0, 0);
+ SendMessage(m_dat->GetHwnd(), WM_SIZE, 0, 0);
rcItem = m_dat->rcStatus;
}
@@ -696,9 +696,9 @@ void CInfoPanel::Invalidate(BOOL fErase) const
{
if (m_active) {
RECT rc;
- ::GetClientRect(m_dat->hwnd, &rc);
+ ::GetClientRect(m_dat->GetHwnd(), &rc);
rc.bottom = m_height;
- ::InvalidateRect(m_dat->hwnd, &rc, fErase);
+ ::InvalidateRect(m_dat->GetHwnd(), &rc, fErase);
}
}
@@ -750,11 +750,11 @@ LRESULT CInfoPanel::cmdHandler(UINT cmd)
switch (cmd) {
case CMD_IP_COPY:
if (m_hoverFlags & HOVER_NICK) {
- Utils::CopyToClipBoard(m_dat->cache->getNick(), m_dat->hwnd);
+ Utils::CopyToClipBoard(m_dat->cache->getNick(), m_dat->GetHwnd());
return(S_OK);
}
if (m_hoverFlags & HOVER_UIN) {
- Utils::CopyToClipBoard(m_isChat ? m_dat->si->ptszTopic : m_dat->cache->getUIN(), m_dat->hwnd);
+ Utils::CopyToClipBoard(m_isChat ? m_dat->si->ptszTopic : m_dat->cache->getUIN(), m_dat->GetHwnd());
return(S_OK);
}
break;
@@ -762,7 +762,7 @@ LRESULT CInfoPanel::cmdHandler(UINT cmd)
case IDC_CHAT_HISTORY:
case IDC_CHANMGR:
if (m_isChat) {
- SendMessage(m_dat->hwnd, WM_COMMAND, cmd, 0);
+ SendMessage(m_dat->GetHwnd(), WM_COMMAND, cmd, 0);
return(S_OK);
}
break;
@@ -781,16 +781,16 @@ void CInfoPanel::handleClick(const POINT& pt)
return;
if (!m_isChat) {
- ::KillTimer(m_dat->hwnd, TIMERID_AWAYMSG);
+ ::KillTimer(m_dat->GetHwnd(), TIMERID_AWAYMSG);
m_dat->dwFlagsEx &= ~MWF_SHOW_AWAYMSGTIMER;
}
HMENU m = constructContextualMenu();
if (m) {
- LRESULT r = ::TrackPopupMenu(m, TPM_RETURNCMD, pt.x, pt.y, 0, m_dat->hwnd, NULL);
+ LRESULT r = ::TrackPopupMenu(m, TPM_RETURNCMD, pt.x, pt.y, 0, m_dat->GetHwnd(), NULL);
::DestroyMenu(m);
if (S_OK != cmdHandler(r))
- Utils::CmdDispatcher(Utils::CMD_INFOPANEL, m_dat->hwnd, r, 0, 0, m_dat, m_dat->pContainer);
+ Utils::CmdDispatcher(Utils::CMD_INFOPANEL, m_dat->GetHwnd(), r, 0, 0, m_dat, m_dat->pContainer);
}
m_hoverFlags = 0;
Invalidate(TRUE);
@@ -805,7 +805,7 @@ void CInfoPanel::handleClick(const POINT& pt)
int CInfoPanel::hitTest(POINT pt)
{
- ::ScreenToClient(m_dat->hwnd, &pt);
+ ::ScreenToClient(m_dat->GetHwnd(), &pt);
if (!m_isChat && ::PtInRect(&m_rcStatus, pt))
return(HTSTATUS);
@@ -852,7 +852,7 @@ void CInfoPanel::trackMouse(POINT &pt)
if (m_hoverFlags) {
if (!(m_dat->dwFlagsEx & MWF_SHOW_AWAYMSGTIMER)) {
- ::SetTimer(m_dat->hwnd, TIMERID_AWAYMSG, 1000, 0);
+ ::SetTimer(m_dat->GetHwnd(), TIMERID_AWAYMSG, 1000, 0);
m_dat->dwFlagsEx |= MWF_SHOW_AWAYMSGTIMER;
}
}
@@ -872,7 +872,7 @@ void CInfoPanel::showTip(UINT ctrlId, const LPARAM lParam)
if (!m_active || !m_dat->hwndTip)
return;
- HWND hwndDlg = m_dat->hwnd;
+ HWND hwndDlg = m_dat->GetHwnd();
{
RECT rc;
::GetWindowRect(GetDlgItem(hwndDlg, ctrlId), &rc);
@@ -922,7 +922,7 @@ void CInfoPanel::showTip(UINT ctrlId, const LPARAM lParam)
POINT pt;
RECT rc = { 0, 0, 400, 600 };
GetCursorPos(&pt);
- m_tip = new CTip(m_dat->hwnd, m_dat->hContact, str, this);
+ m_tip = new CTip(m_dat->GetHwnd(), m_dat->m_hContact, str, this);
m_tip->show(rc, pt, m_dat->hTabIcon, m_dat->szStatus);
return;
}
@@ -968,7 +968,7 @@ LRESULT CALLBACK CInfoPanel::avatarParentSubclass(HWND hwnd, UINT msg, WPARAM wP
case WM_ERASEBKGND:
// parent window of the infopanel ACC control
RECT rc, rcItem;
- TWindowData *dat = (TWindowData*)GetWindowLongPtr(GetParent(hwnd), GWLP_USERDATA);
+ CSrmmWindow *dat = (CSrmmWindow*)GetWindowLongPtr(GetParent(hwnd), GWLP_USERDATA);
if (dat == 0)
break;
@@ -1059,168 +1059,168 @@ INT_PTR CALLBACK CInfoPanel::ConfigDlgProc(HWND hwnd, UINT msg, WPARAM wParam, L
{
switch (msg) {
case WM_INITDIALOG:
- {
- wchar_t tszTitle[100];
- mir_snwprintf(tszTitle, TranslateT("Set panel visibility for this %s"),
- m_isChat ? TranslateT("chat room") : TranslateT("contact"));
- ::SetDlgItemText(hwnd, IDC_STATIC_VISIBILTY, tszTitle);
+ {
+ wchar_t tszTitle[100];
+ mir_snwprintf(tszTitle, TranslateT("Set panel visibility for this %s"),
+ m_isChat ? TranslateT("chat room") : TranslateT("contact"));
+ ::SetDlgItemText(hwnd, IDC_STATIC_VISIBILTY, tszTitle);
- mir_snwprintf(tszTitle, m_isChat ? TranslateT("Do not synchronize the panel height with IM windows") :
- TranslateT("Do not synchronize the panel height with group chat windows"));
+ mir_snwprintf(tszTitle, m_isChat ? TranslateT("Do not synchronize the panel height with IM windows") :
+ TranslateT("Do not synchronize the panel height with group chat windows"));
- ::SetDlgItemText(hwnd, IDC_NOSYNC, tszTitle);
+ ::SetDlgItemText(hwnd, IDC_NOSYNC, tszTitle);
- ::SendDlgItemMessage(hwnd, IDC_PANELVISIBILITY, CB_INSERTSTRING, -1, (LPARAM)TranslateT("Inherit from container setting"));
- ::SendDlgItemMessage(hwnd, IDC_PANELVISIBILITY, CB_INSERTSTRING, -1, (LPARAM)TranslateT("Always off"));
- ::SendDlgItemMessage(hwnd, IDC_PANELVISIBILITY, CB_INSERTSTRING, -1, (LPARAM)TranslateT("Always on"));
+ ::SendDlgItemMessage(hwnd, IDC_PANELVISIBILITY, CB_INSERTSTRING, -1, (LPARAM)TranslateT("Inherit from container setting"));
+ ::SendDlgItemMessage(hwnd, IDC_PANELVISIBILITY, CB_INSERTSTRING, -1, (LPARAM)TranslateT("Always off"));
+ ::SendDlgItemMessage(hwnd, IDC_PANELVISIBILITY, CB_INSERTSTRING, -1, (LPARAM)TranslateT("Always on"));
- BYTE v = M.GetByte(m_dat->hContact, "infopanel", 0);
- ::SendDlgItemMessage(hwnd, IDC_PANELVISIBILITY, CB_SETCURSEL, (WPARAM)(v == 0 ? 0 : (v == (BYTE)-1 ? 1 : 2)), 0);
+ BYTE v = M.GetByte(m_dat->m_hContact, "infopanel", 0);
+ ::SendDlgItemMessage(hwnd, IDC_PANELVISIBILITY, CB_SETCURSEL, (WPARAM)(v == 0 ? 0 : (v == (BYTE)-1 ? 1 : 2)), 0);
- ::SendDlgItemMessage(hwnd, IDC_PANELSIZE, CB_INSERTSTRING, -1, (LPARAM)TranslateT("Use default size"));
- ::SendDlgItemMessage(hwnd, IDC_PANELSIZE, CB_INSERTSTRING, -1, (LPARAM)TranslateT("Use private size"));
+ ::SendDlgItemMessage(hwnd, IDC_PANELSIZE, CB_INSERTSTRING, -1, (LPARAM)TranslateT("Use default size"));
+ ::SendDlgItemMessage(hwnd, IDC_PANELSIZE, CB_INSERTSTRING, -1, (LPARAM)TranslateT("Use private size"));
- ::SendDlgItemMessage(hwnd, IDC_PANELSIZE, CB_SETCURSEL, (WPARAM)(m_fPrivateHeight ? 1 : 0), 0);
+ ::SendDlgItemMessage(hwnd, IDC_PANELSIZE, CB_SETCURSEL, (WPARAM)(m_fPrivateHeight ? 1 : 0), 0);
- ::CheckDlgButton(hwnd, IDC_NOSYNC, M.GetByte("syncAllPanels", 0) ? BST_UNCHECKED : BST_CHECKED);
+ ::CheckDlgButton(hwnd, IDC_NOSYNC, M.GetByte("syncAllPanels", 0) ? BST_UNCHECKED : BST_CHECKED);
- Utils::showDlgControl(hwnd, IDC_IPCONFIG_PRIVATECONTAINER, m_dat->pContainer->settings->fPrivate ? SW_SHOW : SW_HIDE);
+ Utils::showDlgControl(hwnd, IDC_IPCONFIG_PRIVATECONTAINER, m_dat->pContainer->settings->fPrivate ? SW_SHOW : SW_HIDE);
- if (!m_isChat) {
- v = db_get_b(m_dat->hContact, SRMSGMOD_T, "hideavatar", -1);
- ::SendDlgItemMessage(hwnd, IDC_PANELPICTUREVIS, CB_INSERTSTRING, -1, (LPARAM)TranslateT("Use global setting"));
- ::SendDlgItemMessage(hwnd, IDC_PANELPICTUREVIS, CB_INSERTSTRING, -1, (LPARAM)TranslateT("Show always (if present)"));
- ::SendDlgItemMessage(hwnd, IDC_PANELPICTUREVIS, CB_INSERTSTRING, -1, (LPARAM)TranslateT("Never show it at all"));
- ::SendDlgItemMessage(hwnd, IDC_PANELPICTUREVIS, CB_SETCURSEL, (v == (BYTE)-1 ? 0 : (v == 1 ? 1 : 2)), 0);
+ if (!m_isChat) {
+ v = db_get_b(m_dat->m_hContact, SRMSGMOD_T, "hideavatar", -1);
+ ::SendDlgItemMessage(hwnd, IDC_PANELPICTUREVIS, CB_INSERTSTRING, -1, (LPARAM)TranslateT("Use global setting"));
+ ::SendDlgItemMessage(hwnd, IDC_PANELPICTUREVIS, CB_INSERTSTRING, -1, (LPARAM)TranslateT("Show always (if present)"));
+ ::SendDlgItemMessage(hwnd, IDC_PANELPICTUREVIS, CB_INSERTSTRING, -1, (LPARAM)TranslateT("Never show it at all"));
+ ::SendDlgItemMessage(hwnd, IDC_PANELPICTUREVIS, CB_SETCURSEL, (v == (BYTE)-1 ? 0 : (v == 1 ? 1 : 2)), 0);
+ }
+ else Utils::enableDlgControl(hwnd, IDC_PANELPICTUREVIS, false);
}
- else Utils::enableDlgControl(hwnd, IDC_PANELPICTUREVIS, false);
- }
- return FALSE;
+ return FALSE;
case WM_CTLCOLOREDIT:
case WM_CTLCOLORSTATIC:
- {
- HWND hwndChild = (HWND)lParam;
- UINT id = ::GetDlgCtrlID(hwndChild);
+ {
+ HWND hwndChild = (HWND)lParam;
+ UINT id = ::GetDlgCtrlID(hwndChild);
- if (m_configDlgFont == 0) {
- HFONT hFont = (HFONT)::SendDlgItemMessage(hwnd, IDC_IPCONFIG_TITLE, WM_GETFONT, 0, 0);
- LOGFONT lf = { 0 };
+ if (m_configDlgFont == 0) {
+ HFONT hFont = (HFONT)::SendDlgItemMessage(hwnd, IDC_IPCONFIG_TITLE, WM_GETFONT, 0, 0);
+ LOGFONT lf = { 0 };
- ::GetObject(hFont, sizeof(lf), &lf);
- lf.lfWeight = FW_BOLD;
- m_configDlgBoldFont = ::CreateFontIndirect(&lf);
+ ::GetObject(hFont, sizeof(lf), &lf);
+ lf.lfWeight = FW_BOLD;
+ m_configDlgBoldFont = ::CreateFontIndirect(&lf);
- lf.lfHeight = (int)(lf.lfHeight * 1.2);
- m_configDlgFont = ::CreateFontIndirect(&lf);
- ::SendDlgItemMessage(hwnd, IDC_IPCONFIG_TITLE, WM_SETFONT, (WPARAM)m_configDlgFont, FALSE);
- }
+ lf.lfHeight = (int)(lf.lfHeight * 1.2);
+ m_configDlgFont = ::CreateFontIndirect(&lf);
+ ::SendDlgItemMessage(hwnd, IDC_IPCONFIG_TITLE, WM_SETFONT, (WPARAM)m_configDlgFont, FALSE);
+ }
- if (hwndChild == ::GetDlgItem(hwnd, IDC_IPCONFIG_TITLE)) {
- ::SetTextColor((HDC)wParam, RGB(60, 60, 150));
- ::SendMessage(hwndChild, WM_SETFONT, (WPARAM)m_configDlgFont, FALSE);
- }
- else if (id == IDC_IPCONFIG_FOOTER || id == IDC_SIZE_TIP || id == IDC_IPCONFIG_PRIVATECONTAINER)
- ::SetTextColor((HDC)wParam, RGB(160, 50, 50));
- else if (id == IDC_GROUP_SIZE || id == IDC_GROUP_SCOPE || id == IDC_GROUP_OTHER)
- ::SendMessage(hwndChild, WM_SETFONT, (WPARAM)m_configDlgBoldFont, FALSE);
+ if (hwndChild == ::GetDlgItem(hwnd, IDC_IPCONFIG_TITLE)) {
+ ::SetTextColor((HDC)wParam, RGB(60, 60, 150));
+ ::SendMessage(hwndChild, WM_SETFONT, (WPARAM)m_configDlgFont, FALSE);
+ }
+ else if (id == IDC_IPCONFIG_FOOTER || id == IDC_SIZE_TIP || id == IDC_IPCONFIG_PRIVATECONTAINER)
+ ::SetTextColor((HDC)wParam, RGB(160, 50, 50));
+ else if (id == IDC_GROUP_SIZE || id == IDC_GROUP_SCOPE || id == IDC_GROUP_OTHER)
+ ::SendMessage(hwndChild, WM_SETFONT, (WPARAM)m_configDlgBoldFont, FALSE);
- ::SetBkColor((HDC)wParam, ::GetSysColor(COLOR_WINDOW));
+ ::SetBkColor((HDC)wParam, ::GetSysColor(COLOR_WINDOW));
+ }
return reinterpret_cast<INT_PTR>(::GetSysColorBrush(COLOR_WINDOW));
- }
case WM_COMMAND:
- {
- LONG lOldHeight = m_height;
- switch (LOWORD(wParam)) {
- case IDC_PANELSIZE:
{
- LRESULT iResult = ::SendDlgItemMessage(hwnd, IDC_PANELSIZE, CB_GETCURSEL, 0, 0);
- if (iResult == 0) {
- if (m_fPrivateHeight) {
- db_set_dw(m_dat->hContact, SRMSGMOD_T, "panelheight", m_height);
- loadHeight();
+ LONG lOldHeight = m_height;
+ switch (LOWORD(wParam)) {
+ case IDC_PANELSIZE:
+ {
+ LRESULT iResult = ::SendDlgItemMessage(hwnd, IDC_PANELSIZE, CB_GETCURSEL, 0, 0);
+ if (iResult == 0) {
+ if (m_fPrivateHeight) {
+ db_set_dw(m_dat->m_hContact, SRMSGMOD_T, "panelheight", m_height);
+ loadHeight();
+ }
+ }
+ else if (iResult == 1) {
+ db_set_dw(m_dat->m_hContact, SRMSGMOD_T, "panelheight",
+ MAKELONG(M.GetDword(m_dat->m_hContact, "panelheight", m_height), 0xffff));
+ loadHeight();
+ }
}
- }
- else if (iResult == 1) {
- db_set_dw(m_dat->hContact, SRMSGMOD_T, "panelheight",
- MAKELONG(M.GetDword(m_dat->hContact, "panelheight", m_height), 0xffff));
- loadHeight();
- }
- }
- break;
+ break;
- case IDC_PANELPICTUREVIS:
- {
- BYTE vOld = db_get_b(m_dat->hContact, SRMSGMOD_T, "hideavatar", -1);
- LRESULT iResult = ::SendDlgItemMessage(hwnd, IDC_PANELPICTUREVIS, CB_GETCURSEL, 0, 0);
-
- BYTE vNew = (iResult == 0 ? (BYTE)-1 : (iResult == 1 ? 1 : 0));
- if (vNew != vOld) {
- if (vNew == (BYTE)-1)
- db_unset(m_dat->hContact, SRMSGMOD_T, "hideavatar");
- else
- db_set_b(m_dat->hContact, SRMSGMOD_T, "hideavatar", vNew);
-
- ::ShowPicture(m_dat, FALSE);
- ::SendMessage(m_dat->hwnd, WM_SIZE, 0, 0);
- ::DM_ScrollToBottom(m_dat, 0, 1);
- }
- }
- break;
+ case IDC_PANELPICTUREVIS:
+ {
+ BYTE vOld = db_get_b(m_dat->m_hContact, SRMSGMOD_T, "hideavatar", -1);
+ LRESULT iResult = ::SendDlgItemMessage(hwnd, IDC_PANELPICTUREVIS, CB_GETCURSEL, 0, 0);
+
+ BYTE vNew = (iResult == 0 ? (BYTE)-1 : (iResult == 1 ? 1 : 0));
+ if (vNew != vOld) {
+ if (vNew == (BYTE)-1)
+ db_unset(m_dat->m_hContact, SRMSGMOD_T, "hideavatar");
+ else
+ db_set_b(m_dat->m_hContact, SRMSGMOD_T, "hideavatar", vNew);
+
+ m_dat->ShowPicture(false);
+ ::SendMessage(m_dat->GetHwnd(), WM_SIZE, 0, 0);
+ ::DM_ScrollToBottom(m_dat, 0, 1);
+ }
+ }
+ break;
- case IDC_PANELVISIBILITY:
- {
- BYTE vOld = db_get_b(m_dat->hContact, SRMSGMOD_T, "infopanel", 0);
- LRESULT iResult = ::SendDlgItemMessage(hwnd, IDC_PANELVISIBILITY, CB_GETCURSEL, 0, 0);
-
- BYTE vNew = (iResult == 0 ? 0 : (iResult == 1 ? (BYTE)-1 : 1));
- if (vNew != vOld) {
- db_set_b(m_dat->hContact, SRMSGMOD_T, "infopanel", vNew);
- getVisibility();
- showHide();
- }
- }
- break;
+ case IDC_PANELVISIBILITY:
+ {
+ BYTE vOld = db_get_b(m_dat->m_hContact, SRMSGMOD_T, "infopanel", 0);
+ LRESULT iResult = ::SendDlgItemMessage(hwnd, IDC_PANELVISIBILITY, CB_GETCURSEL, 0, 0);
+
+ BYTE vNew = (iResult == 0 ? 0 : (iResult == 1 ? (BYTE)-1 : 1));
+ if (vNew != vOld) {
+ db_set_b(m_dat->m_hContact, SRMSGMOD_T, "infopanel", vNew);
+ getVisibility();
+ showHide();
+ }
+ }
+ break;
- case IDC_SIZECOMPACT:
- setHeight(MIN_PANELHEIGHT + 2, true);
- break;
+ case IDC_SIZECOMPACT:
+ setHeight(MIN_PANELHEIGHT + 2, true);
+ break;
- case IDC_SIZENORMAL:
- setHeight(DEGRADE_THRESHOLD, true);
- break;
+ case IDC_SIZENORMAL:
+ setHeight(DEGRADE_THRESHOLD, true);
+ break;
- case IDC_SIZELARGE:
- setHeight(51, true);
- break;
+ case IDC_SIZELARGE:
+ setHeight(51, true);
+ break;
- case IDC_NOSYNC:
- db_set_b(0, SRMSGMOD_T, "syncAllPanels", ::IsDlgButtonChecked(hwnd, IDC_NOSYNC) ? 0 : 1);
- if (BST_UNCHECKED == IsDlgButtonChecked(hwnd, IDC_NOSYNC)) {
- loadHeight();
- if (!m_dat->pContainer->settings->fPrivate)
- M.BroadcastMessage(DM_SETINFOPANEL, (WPARAM)m_dat, (LPARAM)m_defaultHeight);
- else
- ::BroadCastContainer(m_dat->pContainer, DM_SETINFOPANEL, (WPARAM)m_dat, (LPARAM)m_defaultHeight);
- }
- else {
- if (!m_dat->pContainer->settings->fPrivate)
- M.BroadcastMessage(DM_SETINFOPANEL, (WPARAM)m_dat, 0);
- else
- ::BroadCastContainer(m_dat->pContainer, DM_SETINFOPANEL, (WPARAM)m_dat, 0);
+ case IDC_NOSYNC:
+ db_set_b(0, SRMSGMOD_T, "syncAllPanels", ::IsDlgButtonChecked(hwnd, IDC_NOSYNC) ? 0 : 1);
+ if (BST_UNCHECKED == IsDlgButtonChecked(hwnd, IDC_NOSYNC)) {
+ loadHeight();
+ if (!m_dat->pContainer->settings->fPrivate)
+ M.BroadcastMessage(DM_SETINFOPANEL, (WPARAM)m_dat, (LPARAM)m_defaultHeight);
+ else
+ ::BroadCastContainer(m_dat->pContainer, DM_SETINFOPANEL, (WPARAM)m_dat, (LPARAM)m_defaultHeight);
+ }
+ else {
+ if (!m_dat->pContainer->settings->fPrivate)
+ M.BroadcastMessage(DM_SETINFOPANEL, (WPARAM)m_dat, 0);
+ else
+ ::BroadCastContainer(m_dat->pContainer, DM_SETINFOPANEL, (WPARAM)m_dat, 0);
+ }
+ break;
}
- break;
- }
- if (m_height != lOldHeight) {
- ::SendMessage(m_dat->hwnd, WM_SIZE, 0, 0);
- ::SetAeroMargins(m_dat->pContainer);
- ::RedrawWindow(m_dat->hwnd, NULL, NULL, RDW_INVALIDATE | RDW_UPDATENOW);
- ::RedrawWindow(GetParent(m_dat->hwnd), NULL, NULL, RDW_INVALIDATE | RDW_UPDATENOW);
+ if (m_height != lOldHeight) {
+ ::SendMessage(m_dat->GetHwnd(), WM_SIZE, 0, 0);
+ ::SetAeroMargins(m_dat->pContainer);
+ ::RedrawWindow(m_dat->GetHwnd(), NULL, NULL, RDW_INVALIDATE | RDW_UPDATENOW);
+ ::RedrawWindow(GetParent(m_dat->GetHwnd()), NULL, NULL, RDW_INVALIDATE | RDW_UPDATENOW);
+ }
}
- }
- break;
+ break;
case WM_CLOSE:
if (wParam == 1 && lParam == 1)
@@ -1249,7 +1249,7 @@ int CInfoPanel::invokeConfigDialog(const POINT &pt)
return 0;
RECT rc;
- ::GetWindowRect(m_dat->hwnd, &rc);
+ ::GetWindowRect(m_dat->GetHwnd(), &rc);
rc.bottom = rc.top + m_height;
rc.right -= m_dat->iPanelAvatarX;
@@ -1267,7 +1267,7 @@ int CInfoPanel::invokeConfigDialog(const POINT &pt)
::GetClientRect(m_hwndConfig, &rc);
RECT rcLog;
- ::GetWindowRect(GetDlgItem(m_dat->hwnd, m_isChat ? IDC_CHAT_LOG : IDC_LOG), &rcLog);
+ ::GetWindowRect(GetDlgItem(m_dat->GetHwnd(), m_isChat ? IDC_LOG : IDC_LOG), &rcLog);
m_fDialogCreated = true;
::SetWindowPos(m_hwndConfig, HWND_TOP, rcLog.left + 10, rcLog.top - (m_active ? 10 : 0), 0, 0, SWP_NOSIZE | SWP_SHOWWINDOW);
diff --git a/plugins/TabSRMM/src/infopanel.h b/plugins/TabSRMM/src/infopanel.h
index 8ee1f4e304..ff31b61045 100644
--- a/plugins/TabSRMM/src/infopanel.h
+++ b/plugins/TabSRMM/src/infopanel.h
@@ -125,7 +125,7 @@ public:
HTNIRVANA = 0
};
- CInfoPanel(TWindowData *dat)
+ CInfoPanel(CTabBaseDlg *dat)
{
if (dat) {
m_dat = dat;
@@ -149,7 +149,7 @@ public:
__forceinline bool isActive() const { return m_active; }
__forceinline bool isPrivateHeight() const { return m_fPrivateHeight; }
__forceinline DWORD isHovered() const { return m_active ? m_hoverFlags : 0; }
- __forceinline const TWindowData* getDat() const { return m_dat; }
+ __forceinline const CTabBaseDlg* getDat() const { return m_dat; }
void setHeight(LONG newHeight, bool fBroadcast = false);
void setActive(const int newActive);
@@ -172,7 +172,7 @@ public:
public:
static TInfoPanelConfig m_ipConfig;
- static int setPanelHandler(TWindowData *dat, WPARAM wParam, LPARAM lParam);
+ static int setPanelHandler(CTabBaseDlg *dat, WPARAM wParam, LPARAM lParam);
static LRESULT CALLBACK avatarParentSubclass(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
private:
@@ -194,7 +194,7 @@ private:
bool m_active; // panel active and visible
bool m_fPrivateHeight;
bool m_fDialogCreated;
- TWindowData *m_dat; // this one OWNS us...
+ CTabBaseDlg *m_dat; // this one OWNS us...
LONG m_height; // height (determined by position of IDC_PANELSPLITTER)
LONG m_defaultHeight,
m_defaultMUCHeight; // global values for the info bar height
diff --git a/plugins/TabSRMM/src/mim.cpp b/plugins/TabSRMM/src/mim.cpp
index c5999eee9f..b85e7ac1e8 100644
--- a/plugins/TabSRMM/src/mim.cpp
+++ b/plugins/TabSRMM/src/mim.cpp
@@ -337,12 +337,12 @@ int CMimAPI::ProtoAck(WPARAM, LPARAM lParam)
for (int j = 0; j < SendQueue::NR_SENDJOBS; j++) {
SendJob &p = jobs[j];
if (pAck->hProcess == p.hSendId && pAck->hContact == p.hContact) {
- TWindowData *dat = p.hOwnerWnd ? (TWindowData*)GetWindowLongPtr(p.hOwnerWnd, GWLP_USERDATA) : NULL;
+ CSrmmWindow *dat = p.hOwnerWnd ? (CSrmmWindow*)GetWindowLongPtr(p.hOwnerWnd, GWLP_USERDATA) : NULL;
if (dat == NULL) {
sendQueue->ackMessage(NULL, (WPARAM)MAKELONG(j, i), lParam);
return 0;
}
- if (dat->hContact == p.hContact || dat->hContact == hMeta) {
+ if (dat->m_hContact == p.hContact || dat->m_hContact == hMeta) {
iFound = j;
break;
}
diff --git a/plugins/TabSRMM/src/msgdialog.cpp b/plugins/TabSRMM/src/msgdialog.cpp
index 40cfee8e07..368d492a44 100644
--- a/plugins/TabSRMM/src/msgdialog.cpp
+++ b/plugins/TabSRMM/src/msgdialog.cpp
@@ -80,10 +80,10 @@ static void _clrMsgFilter(LPARAM lParam)
// @param hwndFrom src window handle
// @param pt mouse pointer position
-static void ShowPopupMenu(TWindowData *dat, int idFrom, HWND hwndFrom, POINT pt)
+static void ShowPopupMenu(CSrmmWindow *dat, int idFrom, HWND hwndFrom, POINT pt)
{
CHARRANGE sel, all = { 0, -1 };
- HWND hwndDlg = dat->hwnd;
+ HWND hwndDlg = dat->GetHwnd();
HMENU hSubMenu, hMenu = LoadMenu(g_hInst, MAKEINTRESOURCE(IDR_CONTEXT));
if (idFrom == IDC_LOG)
@@ -115,7 +115,7 @@ static void ShowPopupMenu(TWindowData *dat, int idFrom, HWND hwndFrom, POINT pt)
mwpd.cbSize = sizeof(mwpd);
mwpd.uType = MSG_WINDOWPOPUP_SHOWING;
mwpd.uFlags = (idFrom == IDC_LOG ? MSG_WINDOWPOPUP_LOG : MSG_WINDOWPOPUP_INPUT);
- mwpd.hContact = dat->hContact;
+ mwpd.hContact = dat->m_hContact;
mwpd.hwnd = hwndFrom;
mwpd.hMenu = hSubMenu;
mwpd.selection = 0;
@@ -156,7 +156,7 @@ static void ShowPopupMenu(TWindowData *dat, int idFrom, HWND hwndFrom, POINT pt)
SendMessage(hwndFrom, EM_EXSETSEL, 0, (LPARAM)&all);
break;
case IDM_CLEAR:
- ClearLog(dat);
+ dat->ClearLog();
break;
case ID_LOG_FREEZELOG:
SendDlgItemMessage(hwndDlg, IDC_LOG, WM_KEYDOWN, VK_F12, 0);
@@ -170,7 +170,7 @@ static void ShowPopupMenu(TWindowData *dat, int idFrom, HWND hwndFrom, POINT pt)
RedrawWindow(dat->pContainer->hwndStatus, 0, 0, RDW_INVALIDATE | RDW_UPDATENOW);
break;
case ID_EDITOR_PASTEANDSENDIMMEDIATELY:
- HandlePasteAndSend(dat);
+ dat->HandlePasteAndSend();
break;
}
@@ -179,29 +179,29 @@ static void ShowPopupMenu(TWindowData *dat, int idFrom, HWND hwndFrom, POINT pt)
DestroyMenu(hMenu);
}
-static void ResizeIeView(const TWindowData *dat)
+void CTabBaseDlg::ResizeIeView()
{
RECT rcRichEdit;
- GetWindowRect(GetDlgItem(dat->hwnd, IDC_LOG), &rcRichEdit);
+ GetWindowRect(m_log.GetHwnd(), &rcRichEdit);
POINT pt = { rcRichEdit.left, rcRichEdit.top };
- ScreenToClient(dat->hwnd, &pt);
+ ScreenToClient(m_hwnd, &pt);
IEVIEWWINDOW ieWindow = { sizeof(ieWindow) };
ieWindow.iType = IEW_SETPOS;
- ieWindow.parent = dat->hwnd;
- ieWindow.hwnd = dat->hwndIEView ? dat->hwndIEView : dat->hwndHPP;
+ ieWindow.parent = m_hwnd;
+ ieWindow.hwnd = hwndIEView ? hwndIEView : hwndHPP;
ieWindow.x = pt.x;
ieWindow.y = pt.y;
ieWindow.cx = rcRichEdit.right - rcRichEdit.left;
ieWindow.cy = rcRichEdit.bottom - rcRichEdit.top;
if (ieWindow.cx != 0 && ieWindow.cy != 0)
- CallService(dat->hwndIEView ? MS_IEVIEW_WINDOW : MS_HPP_EG_WINDOW, 0, (LPARAM)&ieWindow);
+ CallService(hwndIEView ? MS_IEVIEW_WINDOW : MS_HPP_EG_WINDOW, 0, (LPARAM)&ieWindow);
}
LRESULT CALLBACK IEViewSubclassProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
- TWindowData *mwdat = (TWindowData*)GetWindowLongPtr(GetParent(hwnd), GWLP_USERDATA);
+ CSrmmWindow *mwdat = (CSrmmWindow*)GetWindowLongPtr(GetParent(hwnd), GWLP_USERDATA);
switch (msg) {
case WM_NCCALCSIZE:
@@ -217,10 +217,10 @@ LRESULT CALLBACK IEViewSubclassProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM l
LRESULT CALLBACK HPPKFSubclassProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
- TWindowData *mwdat = (TWindowData*)GetWindowLongPtr(GetParent(hwnd), GWLP_USERDATA);
+ CSrmmWindow *mwdat = (CSrmmWindow*)GetWindowLongPtr(GetParent(hwnd), GWLP_USERDATA);
if (mwdat) {
- BOOL isCtrl, isShift, isAlt;
- KbdState(mwdat, isShift, isCtrl, isAlt);
+ bool isCtrl, isShift, isAlt;
+ mwdat->KbdState(isShift, isCtrl, isAlt);
switch (msg) {
case WM_NCCALCSIZE:
@@ -234,7 +234,7 @@ LRESULT CALLBACK HPPKFSubclassProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lP
wParam != VK_MENU && wParam != VK_END && wParam != VK_HOME &&
wParam != VK_UP && wParam != VK_DOWN && wParam != VK_LEFT &&
wParam != VK_RIGHT && wParam != VK_TAB && wParam != VK_SPACE) {
- SetFocus(GetDlgItem(mwdat->hwnd, IDC_MESSAGE));
+ SetFocus(GetDlgItem(mwdat->GetHwnd(), IDC_MESSAGE));
keybd_event((BYTE)wParam, (BYTE)MapVirtualKey(wParam, 0), KEYEVENTF_EXTENDEDKEY | 0, 0);
return 0;
}
@@ -253,127 +253,124 @@ LRESULT CALLBACK HPPKFSubclassProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lP
// it protects itself from being called more than once per session activation and is valid for
// normal IM sessions *only*. Group chat sessions have their own activation handler (see chat/window.c)
-static void MsgWindowUpdateState(TWindowData *dat, UINT msg)
+void CSrmmWindow::MsgWindowUpdateState(UINT msg)
{
- if (dat == NULL || dat->iTabID < 0)
+ if (iTabID < 0)
return;
- HWND hwndDlg = dat->hwnd;
- HWND hwndTab = GetParent(hwndDlg);
-
if (msg == WM_ACTIVATE) {
- if (dat->pContainer->dwFlags & CNT_TRANSPARENCY) {
- DWORD trans = LOWORD(dat->pContainer->settings->dwTransparency);
- SetLayeredWindowAttributes(dat->pContainer->hwnd, 0, (BYTE)trans, (dat->pContainer->dwFlags & CNT_TRANSPARENCY ? LWA_ALPHA : 0));
+ if (pContainer->dwFlags & CNT_TRANSPARENCY) {
+ DWORD trans = LOWORD(pContainer->settings->dwTransparency);
+ SetLayeredWindowAttributes(pContainer->hwnd, 0, (BYTE)trans, (pContainer->dwFlags & CNT_TRANSPARENCY ? LWA_ALPHA : 0));
}
}
- if (dat->bIsAutosizingInput && dat->iInputAreaHeight == -1) {
- dat->iInputAreaHeight = 0;
- SendDlgItemMessage(hwndDlg, IDC_MESSAGE, EM_REQUESTRESIZE, 0, 0);
+ if (bIsAutosizingInput && iInputAreaHeight == -1) {
+ iInputAreaHeight = 0;
+ SendDlgItemMessage(m_hwnd, IDC_MESSAGE, EM_REQUESTRESIZE, 0, 0);
}
- if (dat->pWnd)
- dat->pWnd->activateTab();
- dat->Panel->dismissConfig();
- dat->dwUnread = 0;
- if (dat->pContainer->hwndSaved == hwndDlg)
+ if (pWnd)
+ pWnd->activateTab();
+ Panel->dismissConfig();
+ dwUnread = 0;
+ if (pContainer->hwndSaved == m_hwnd)
return;
- dat->pContainer->hwndSaved = hwndDlg;
+ pContainer->hwndSaved = m_hwnd;
- dat->dwTickLastEvent = 0;
- dat->dwFlags &= ~MWF_DIVIDERSET;
- if (KillTimer(hwndDlg, TIMERID_FLASHWND)) {
- FlashTab(dat, hwndTab, dat->iTabID, &dat->bTabFlash, FALSE, dat->hTabIcon);
- dat->mayFlashTab = FALSE;
+ dwTickLastEvent = 0;
+ dwFlags &= ~MWF_DIVIDERSET;
+ if (KillTimer(m_hwnd, TIMERID_FLASHWND)) {
+ FlashTab(false);
+ m_bCanFlashTab = false;
}
- if (dat->pContainer->dwFlashingStarted != 0) {
- FlashContainer(dat->pContainer, 0, 0);
- dat->pContainer->dwFlashingStarted = 0;
+ if (pContainer->dwFlashingStarted != 0) {
+ FlashContainer(pContainer, 0, 0);
+ pContainer->dwFlashingStarted = 0;
}
- if (dat->dwFlagsEx & MWF_SHOW_FLASHCLIST) {
- dat->dwFlagsEx &= ~MWF_SHOW_FLASHCLIST;
- if (dat->hFlashingEvent != 0)
- pcli->pfnRemoveEvent(dat->hContact, dat->hFlashingEvent);
- dat->hFlashingEvent = 0;
+ if (dwFlagsEx & MWF_SHOW_FLASHCLIST) {
+ dwFlagsEx &= ~MWF_SHOW_FLASHCLIST;
+ if (hFlashingEvent != 0)
+ pcli->pfnRemoveEvent(m_hContact, hFlashingEvent);
+ hFlashingEvent = 0;
}
- dat->pContainer->dwFlags &= ~CNT_NEED_UPDATETITLE;
+ pContainer->dwFlags &= ~CNT_NEED_UPDATETITLE;
- if ((dat->dwFlags & MWF_DEFERREDREMAKELOG) && !IsIconic(dat->pContainer->hwnd)) {
- SendMessage(hwndDlg, DM_REMAKELOG, 0, 0);
- dat->dwFlags &= ~MWF_DEFERREDREMAKELOG;
+ if ((dwFlags & MWF_DEFERREDREMAKELOG) && !IsIconic(pContainer->hwnd)) {
+ SendMessage(m_hwnd, DM_REMAKELOG, 0, 0);
+ dwFlags &= ~MWF_DEFERREDREMAKELOG;
}
- if (dat->dwFlags & MWF_NEEDCHECKSIZE)
- PostMessage(hwndDlg, DM_SAVESIZE, 0, 0);
+ if (dwFlags & MWF_NEEDCHECKSIZE)
+ PostMessage(m_hwnd, DM_SAVESIZE, 0, 0);
if (PluginConfig.m_bAutoLocaleSupport) {
- if (dat->hkl == 0)
- DM_LoadLocale(dat);
+ if (hkl == 0)
+ DM_LoadLocale(this);
else
- SendMessage(hwndDlg, DM_SETLOCALE, 0, 0);
+ SendMessage(m_hwnd, DM_SETLOCALE, 0, 0);
}
- dat->pContainer->hIconTaskbarOverlay = 0;
- SendMessage(dat->pContainer->hwnd, DM_UPDATETITLE, dat->hContact, 0);
+ pContainer->hIconTaskbarOverlay = 0;
+ SendMessage(pContainer->hwnd, DM_UPDATETITLE, m_hContact, 0);
- UpdateStatusBar(dat);
- dat->dwLastActivity = GetTickCount();
- dat->pContainer->dwLastActivity = dat->dwLastActivity;
+ UpdateStatusBar();
+ dwLastActivity = GetTickCount();
+ pContainer->dwLastActivity = dwLastActivity;
- dat->pContainer->MenuBar->configureMenu();
- UpdateTrayMenuState(dat, FALSE);
+ pContainer->MenuBar->configureMenu();
+ UpdateTrayMenuState(this, FALSE);
- if (dat->pContainer->hwndActive == hwndDlg)
- PostMessage(hwndDlg, DM_REMOVEPOPUPS, PU_REMOVE_ON_FOCUS, 0);
+ if (pContainer->hwndActive == m_hwnd)
+ PostMessage(m_hwnd, DM_REMOVEPOPUPS, PU_REMOVE_ON_FOCUS, 0);
- dat->Panel->Invalidate();
+ Panel->Invalidate();
- if (dat->dwFlags & MWF_DEFERREDSCROLL && dat->hwndIEView == 0 && dat->hwndHPP == 0) {
- dat->dwFlags &= ~MWF_DEFERREDSCROLL;
- DM_ScrollToBottom(dat, 0, 1);
+ if (dwFlags & MWF_DEFERREDSCROLL && hwndIEView == 0 && hwndHPP == 0) {
+ dwFlags &= ~MWF_DEFERREDSCROLL;
+ DM_ScrollToBottom(this, 0, 1);
}
- DM_SetDBButtonStates(hwndDlg, dat);
+ DM_SetDBButtonStates();
- if (dat->hwndIEView) {
+ if (hwndIEView) {
RECT rcRTF;
POINT pt;
- GetWindowRect(GetDlgItem(hwndDlg, IDC_LOG), &rcRTF);
+ GetWindowRect(GetDlgItem(m_hwnd, IDC_LOG), &rcRTF);
rcRTF.left += 20;
rcRTF.top += 20;
pt.x = rcRTF.left;
pt.y = rcRTF.top;
- if (dat->hwndIEView) {
+ if (hwndIEView) {
if (M.GetByte("subclassIEView", 0)) {
- mir_subclassWindow(dat->hwndIEView, IEViewSubclassProc);
- SetWindowPos(dat->hwndIEView, 0, 0, 0, 0, 0, SWP_FRAMECHANGED | SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_DRAWFRAME);
- RedrawWindow(dat->hwndIEView, 0, 0, RDW_FRAME | RDW_INVALIDATE | RDW_UPDATENOW);
+ mir_subclassWindow(hwndIEView, IEViewSubclassProc);
+ SetWindowPos(hwndIEView, 0, 0, 0, 0, 0, SWP_FRAMECHANGED | SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_DRAWFRAME);
+ RedrawWindow(hwndIEView, 0, 0, RDW_FRAME | RDW_INVALIDATE | RDW_UPDATENOW);
}
}
- dat->hwndIWebBrowserControl = WindowFromPoint(pt);
+ hwndIWebBrowserControl = WindowFromPoint(pt);
}
- if (dat->dwFlagsEx & MWF_EX_DELAYEDSPLITTER) {
- dat->dwFlagsEx &= ~MWF_EX_DELAYEDSPLITTER;
- ShowWindow(dat->pContainer->hwnd, SW_RESTORE);
- PostMessage(hwndDlg, DM_SPLITTERGLOBALEVENT, dat->wParam, dat->lParam);
- dat->wParam = dat->lParam = 0;
+ if (dwFlagsEx & MWF_EX_DELAYEDSPLITTER) {
+ dwFlagsEx &= ~MWF_EX_DELAYEDSPLITTER;
+ ShowWindow(pContainer->hwnd, SW_RESTORE);
+ PostMessage(m_hwnd, DM_SPLITTERGLOBALEVENT, wParam, lParam);
+ wParam = lParam = 0;
}
- if (dat->dwFlagsEx & MWF_EX_AVATARCHANGED) {
- dat->dwFlagsEx &= ~MWF_EX_AVATARCHANGED;
- PostMessage(hwndDlg, DM_UPDATEPICLAYOUT, 0, 0);
+ if (dwFlagsEx & MWF_EX_AVATARCHANGED) {
+ dwFlagsEx &= ~MWF_EX_AVATARCHANGED;
+ PostMessage(m_hwnd, DM_UPDATEPICLAYOUT, 0, 0);
}
- BB_SetButtonsPos(dat);
+ BB_SetButtonsPos();
if (M.isAero())
- InvalidateRect(hwndTab, NULL, FALSE);
- if (dat->pContainer->dwFlags & CNT_SIDEBAR)
- dat->pContainer->SideBar->setActiveItem(dat);
+ InvalidateRect(m_hwndParent, NULL, FALSE);
+ if (pContainer->dwFlags & CNT_SIDEBAR)
+ pContainer->SideBar->setActiveItem(this);
- if (dat->pWnd)
- dat->pWnd->Invalidate();
+ if (pWnd)
+ pWnd->Invalidate();
}
void TSAPI ShowMultipleControls(HWND hwndDlg, const UINT *controls, int cControls, int state)
@@ -384,9 +381,9 @@ void TSAPI ShowMultipleControls(HWND hwndDlg, const UINT *controls, int cControl
void TSAPI SetDialogToType(HWND hwndDlg)
{
- TWindowData *dat = (TWindowData*)GetWindowLongPtr(hwndDlg, GWLP_USERDATA);
- if (dat->hContact) {
- if (db_get_b(dat->hContact, "CList", "NotOnList", 0)) {
+ CSrmmWindow *dat = (CSrmmWindow*)GetWindowLongPtr(hwndDlg, GWLP_USERDATA);
+ if (dat->m_hContact) {
+ if (db_get_b(dat->m_hContact, "CList", "NotOnList", 0)) {
dat->bNotOnList = TRUE;
ShowMultipleControls(hwndDlg, addControls, _countof(addControls), SW_SHOW);
Utils::showDlgControl(hwndDlg, IDC_LOGFROZENTEXT, SW_SHOW);
@@ -414,18 +411,18 @@ void TSAPI SetDialogToType(HWND hwndDlg)
ShowMultipleControls(hwndDlg, formatControls, _countof(formatControls), SW_HIDE);
if (dat->pContainer->hwndActive == hwndDlg)
- UpdateReadChars(dat);
+ dat->UpdateReadChars();
SetDlgItemText(hwndDlg, IDC_STATICTEXT, TranslateT("A message failed to send successfully."));
- DM_RecalcPictureSize(dat);
- GetAvatarVisibility(hwndDlg, dat);
+ dat->DM_RecalcPictureSize();
+ dat->GetAvatarVisibility();
Utils::showDlgControl(hwndDlg, IDC_CONTACTPIC, dat->bShowAvatar ? SW_SHOW : SW_HIDE);
Utils::showDlgControl(hwndDlg, IDC_SPLITTER, dat->bIsAutosizingInput ? SW_HIDE : SW_SHOW);
Utils::showDlgControl(hwndDlg, IDC_MULTISPLITTER, (dat->sendMode & SMODE_MULTIPLE) ? SW_SHOW : SW_HIDE);
- EnableSendButton(dat, GetWindowTextLength(GetDlgItem(hwndDlg, IDC_MESSAGE)) != 0);
+ dat->EnableSendButton(GetWindowTextLength(GetDlgItem(hwndDlg, IDC_MESSAGE)) != 0);
SendMessage(hwndDlg, DM_UPDATETITLE, 0, 1);
SendMessage(hwndDlg, WM_SIZE, 0, 0);
@@ -437,9 +434,9 @@ void TSAPI SetDialogToType(HWND hwndDlg)
static LRESULT CALLBACK MessageLogSubclassProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
HWND hwndParent = GetParent(hwnd);
- TWindowData *mwdat = (TWindowData*)GetWindowLongPtr(hwndParent, GWLP_USERDATA);
- BOOL isCtrl, isShift, isAlt;
- KbdState(mwdat, isShift, isCtrl, isAlt);
+ CSrmmWindow *mwdat = (CSrmmWindow*)GetWindowLongPtr(hwndParent, GWLP_USERDATA);
+ bool isCtrl, isShift, isAlt;
+ mwdat->KbdState(isShift, isCtrl, isAlt);
switch (msg) {
case WM_KILLFOCUS:
@@ -457,7 +454,7 @@ static LRESULT CALLBACK MessageLogSubclassProc(HWND hwnd, UINT msg, WPARAM wPara
if (wParam == 0x03 && isCtrl) // Ctrl+C
return DM_WMCopyHandler(hwnd, MessageLogSubclassProc, msg, wParam, lParam);
if (wParam == 0x11 && isCtrl)
- SendMessage(mwdat->hwnd, WM_COMMAND, IDC_QUOTE, 0);
+ SendMessage(mwdat->GetHwnd(), WM_COMMAND, IDC_QUOTE, 0);
break;
case WM_SYSKEYUP:
@@ -519,9 +516,9 @@ static LRESULT CALLBACK MessageLogSubclassProc(HWND hwnd, UINT msg, WPARAM wPara
static LRESULT CALLBACK MessageEditSubclassProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
- BOOL isCtrl, isShift, isAlt;
+ bool isCtrl, isShift, isAlt;
HWND hwndParent = GetParent(hwnd);
- TWindowData *mwdat = (TWindowData*)GetWindowLongPtr(hwndParent, GWLP_USERDATA);
+ CSrmmWindow *mwdat = (CSrmmWindow*)GetWindowLongPtr(hwndParent, GWLP_USERDATA);
if (mwdat == NULL)
return 0;
@@ -548,7 +545,7 @@ static LRESULT CALLBACK MessageEditSubclassProc(HWND hwnd, UINT msg, WPARAM wPar
return 0;
case WM_CHAR:
- KbdState(mwdat, isShift, isCtrl, isAlt);
+ mwdat->KbdState(isShift, isCtrl, isAlt);
if (PluginConfig.m_bSoundOnTyping && !isAlt && !isCtrl && !(mwdat->pContainer->dwFlags & CNT_NOSOUND) && wParam != VK_ESCAPE && !(wParam == VK_TAB && PluginConfig.m_bAllowTab))
SkinPlaySound("SoundOnTyping");
@@ -594,14 +591,14 @@ static LRESULT CALLBACK MessageEditSubclassProc(HWND hwnd, UINT msg, WPARAM wPar
}
}
else if (hClip = GetClipboardData(CF_BITMAP))
- SendHBitmapAsFile(mwdat, (HBITMAP)hClip);
+ mwdat->SendHBitmapAsFile((HBITMAP)hClip);
CloseClipboard();
}
break;
case WM_KEYDOWN:
- KbdState(mwdat, isShift, isCtrl, isAlt);
+ mwdat->KbdState(isShift, isCtrl, isAlt);
if (PluginConfig.m_bSoundOnTyping && !isAlt && !(mwdat->pContainer->dwFlags & CNT_NOSOUND) && wParam == VK_DELETE)
SkinPlaySound("SoundOnTyping");
@@ -716,7 +713,7 @@ static LRESULT CALLBACK MessageEditSubclassProc(HWND hwnd, UINT msg, WPARAM wPar
return 0;
}
- KbdState(mwdat, isShift, isCtrl, isAlt);
+ mwdat->KbdState(isShift, isCtrl, isAlt);
if ((wParam >= '0' && wParam <= '9') && isAlt) { // ALT-1 -> ALT-0 direct tab selection
BYTE bChar = (BYTE)wParam;
int iIndex;
@@ -790,7 +787,7 @@ LRESULT CALLBACK SplitterSubclassProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM
{
RECT rc;
HWND hwndParent = GetParent(hwnd);
- TWindowData *dat = (TWindowData*)GetWindowLongPtr(hwndParent, GWLP_USERDATA);
+ CSrmmWindow *dat = (CSrmmWindow*)GetWindowLongPtr(hwndParent, GWLP_USERDATA);
switch (msg) {
case WM_NCHITTEST:
@@ -877,14 +874,14 @@ LRESULT CALLBACK SplitterSubclassProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM
switch (selection) {
case ID_SPLITTERCONTEXT_SAVEFORTHISCONTACTONLY:
dat->dwFlagsEx |= MWF_SHOW_SPLITTEROVERRIDE;
- db_set_b(dat->hContact, SRMSGMOD_T, "splitoverride", 1);
+ db_set_b(dat->m_hContact, SRMSGMOD_T, "splitoverride", 1);
if (dat->bType == SESSIONTYPE_IM)
- SaveSplitter(dat);
+ dat->SaveSplitter();
break;
case ID_SPLITTERCONTEXT_SETPOSITIONFORTHISSESSION:
if (dat->bIsAutosizingInput) {
- GetWindowRect(GetDlgItem(dat->hwnd, IDC_MESSAGE), &rc);
+ GetWindowRect(GetDlgItem(dat->GetHwnd(), IDC_MESSAGE), &rc);
dat->iInputAreaHeight = 0;
}
break;
@@ -908,7 +905,7 @@ LRESULT CALLBACK SplitterSubclassProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM
PluginConfig.lastSPlitterPos.off_chat = dwOff_CHAT;
PluginConfig.lastSPlitterPos.off_im = dwOff_IM;
PluginConfig.lastSPlitterPos.bSync = bSync;
- SendMessage(dat->hwnd, DM_SPLITTERGLOBALEVENT, 0, 0);
+ SendMessage(dat->GetHwnd(), DM_SPLITTERGLOBALEVENT, 0, 0);
M.BroadcastMessage(DM_SPLITTERGLOBALEVENT, 0, 0);
}
break;
@@ -916,13 +913,13 @@ LRESULT CALLBACK SplitterSubclassProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM
default:
dat->splitterY = dat->savedSplitY;
dat->dynaSplitter = dat->savedDynaSplit;
- DM_RecalcPictureSize(dat);
+ dat->DM_RecalcPictureSize();
if (dat->bType == SESSIONTYPE_CHAT) {
SESSION_INFO *si = dat->si;
si->iSplitterY = dat->savedSplitY;
dat->splitterY = si->iSplitterY + DPISCALEY_S(22);
}
- CSkin::UpdateToolbarBG(dat);
+ dat->UpdateToolbarBG();
SendMessage(hwndParent, WM_SIZE, 0, 0);
DM_ScrollToBottom(dat, 0, 1);
break;
@@ -934,30 +931,446 @@ LRESULT CALLBACK SplitterSubclassProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM
}
/////////////////////////////////////////////////////////////////////////////////////////
-// resizer proc for the "new" layout.
-static int MessageDialogResize(HWND hwndDlg, LPARAM lParam, UTILRESIZECONTROL * urc)
+CSrmmWindow::CSrmmWindow(TNewWindowData *pNewData)
+ : CTabBaseDlg(pNewData, IDD_MSGSPLITNEW)
{
- TWindowData *dat = (TWindowData*)lParam;
- RECT rc, rcButton;
- static int uinWidth, msgTop = 0, msgBottom = 0;
+ m_pLog = &m_log;
+ m_pEntry = &m_message;
+ m_autoClose = 0;
+
+ dwFlags = MWF_INITMODE;
+ bType = SESSIONTYPE_IM;
+ Panel = new CInfoPanel(this);
+}
+
+void CSrmmWindow::OnInitDialog()
+{
+ pContainer = newData->pContainer;
+ SetWindowLongPtr(m_hwnd, GWLP_USERDATA, (LONG_PTR)this);
+
+ if (Utils::rtf_ctable == 0)
+ Utils::RTF_CTableInit();
+
+ newData->item.lParam = (LPARAM)m_hwnd;
+ TabCtrl_SetItem(m_hwndParent, newData->iTabID, &newData->item);
+ iTabID = newData->iTabID;
+
+ DM_ThemeChanged();
+
+ pszIDCSAVE_close = TranslateT("Close session");
+ pszIDCSAVE_save = TranslateT("Save and close session");
+
+ m_hContact = newData->hContact;
+ cache = CContactCache::getContactCache(m_hContact);
+ cache->updateNick();
+ cache->setWindowData(m_hwnd, this);
+ M.AddWindow(m_hwnd, m_hContact);
+ BroadCastContainer(pContainer, DM_REFRESHTABINDEX, 0, 0);
+ CProxyWindow::add(this);
+ szProto = const_cast<char *>(cache->getProto());
+ bIsMeta = cache->isMeta();
+ if (bIsMeta)
+ cache->updateMeta();
+
+ cache->updateUIN();
+
+ if (m_hContact && szProto != NULL) {
+ wStatus = db_get_w(m_hContact, szProto, "Status", ID_STATUS_OFFLINE);
+ wcsncpy_s(szStatus, pcli->pfnGetStatusModeDescription(szProto == NULL ? ID_STATUS_OFFLINE : wStatus, 0), _TRUNCATE);
+ }
+ else wStatus = ID_STATUS_OFFLINE;
+
+ for (int i = 0; i < _countof(btnControls); i++)
+ CustomizeButton(GetDlgItem(m_hwnd, btnControls[i]));
+
+ GetMYUIN();
+ GetClientIcon();
+
+ CustomizeButton(CreateWindowEx(0, L"MButtonClass", L"", WS_CHILD | WS_VISIBLE | WS_TABSTOP, 0, 0, 6, DPISCALEY_S(20),
+ m_hwnd, (HMENU)IDC_TOGGLESIDEBAR, g_hInst, NULL));
+ hwndPanelPicParent = CreateWindowEx(WS_EX_TOPMOST, L"Static", L"", SS_OWNERDRAW | WS_VISIBLE | WS_CHILD, 1, 1, 1, 1, m_hwnd, (HMENU)6000, NULL, NULL);
+ mir_subclassWindow(hwndPanelPicParent, CInfoPanel::avatarParentSubclass);
+
+ bShowUIElements = (pContainer->dwFlags & CNT_HIDETOOLBAR) == 0;
+ sendMode |= m_hContact == 0 ? SMODE_MULTIPLE : 0;
+ sendMode |= M.GetByte(m_hContact, "no_ack", 0) ? SMODE_NOACK : 0;
+
+ hQueuedEvents = (MEVENT*)mir_calloc(sizeof(MEVENT)* EVENT_QUEUE_SIZE);
+ iEventQueueSize = EVENT_QUEUE_SIZE;
+ iCurrentQueueError = -1;
+
+ // message history limit
+ // hHistoryEvents holds up to n event handles
+ maxHistory = M.GetDword(m_hContact, "maxhist", M.GetDword("maxhist", 0));
+ curHistory = 0;
+ if (maxHistory)
+ hHistoryEvents = (MEVENT*)mir_alloc(maxHistory * sizeof(MEVENT));
+ else
+ hHistoryEvents = NULL;
+
+ if (bIsMeta)
+ SendMessage(m_hwnd, DM_UPDATEMETACONTACTINFO, 0, 0);
+ else
+ SendMessage(m_hwnd, DM_UPDATEWINICON, 0, 0);
+
+ GetMyNick();
+
+ multiSplitterX = (int)M.GetDword(SRMSGMOD, "multisplit", 150);
+ nTypeMode = PROTOTYPE_SELFTYPING_OFF;
+ SetTimer(m_hwnd, TIMERID_TYPE, 1000, NULL);
+ iLastEventType = 0xffffffff;
+
+ // load log option flags...
+ dwFlags = pContainer->theme.dwFlags;
+
+ // consider per-contact message setting overrides
+ if (m_hContact && M.GetDword(m_hContact, "mwmask", 0))
+ LoadLocalFlags();
+
+ DM_InitTip();
+ Panel->getVisibility();
+
+ dwFlagsEx |= M.GetByte(m_hContact, "splitoverride", 0) ? MWF_SHOW_SPLITTEROVERRIDE : 0;
+ bIsAutosizingInput = IsAutoSplitEnabled();
+ iInputAreaHeight = -1;
+ SetMessageLog();
+ if (m_hContact)
+ Panel->loadHeight();
+
+ bShowAvatar = GetAvatarVisibility();
+
+ Utils::showDlgControl(m_hwnd, IDC_MULTISPLITTER, SW_HIDE);
+
+ RECT rc;
+ GetWindowRect(GetDlgItem(m_hwnd, IDC_SPLITTER), &rc);
+
+ POINT pt;
+ pt.y = (rc.top + rc.bottom) / 2;
+ pt.x = 0;
+ ScreenToClient(m_hwnd, &pt);
+ originalSplitterY = pt.y;
+ if (splitterY == -1)
+ splitterY = originalSplitterY + 60;
+
+ GetWindowRect(m_message.GetHwnd(), &rc);
+ minEditBoxSize.cx = rc.right - rc.left;
+ minEditBoxSize.cy = rc.bottom - rc.top;
+
+ BB_InitDlgButtons();
+ SendMessage(m_hwnd, WM_CBD_LOADICONS, 0, 0);
+
+ SendDlgItemMessage(m_hwnd, IDC_ADD, BUTTONSETASFLATBTN, TRUE, 0);
+ SendDlgItemMessage(m_hwnd, IDC_CANCELADD, BUTTONSETASFLATBTN, TRUE, 0);
+
+ SendDlgItemMessage(m_hwnd, IDC_TOGGLESIDEBAR, BUTTONSETASFLATBTN, TRUE, 0);
+ SendDlgItemMessage(m_hwnd, IDC_TOGGLESIDEBAR, BUTTONSETASTHEMEDBTN, CSkin::IsThemed(), 0);
+ SendDlgItemMessage(m_hwnd, IDC_TOGGLESIDEBAR, BUTTONSETCONTAINER, (LPARAM)pContainer, 0);
+ SendDlgItemMessage(m_hwnd, IDC_TOGGLESIDEBAR, BUTTONSETASTOOLBARBUTTON, TRUE, 0);
+
+ TABSRMM_FireEvent(m_hContact, m_hwnd, MSG_WINDOW_EVT_OPENING, 0);
+
+ for (int i = 0; i < _countof(tooltips); i++)
+ SendDlgItemMessage(m_hwnd, tooltips[i].id, BUTTONADDTOOLTIP, (WPARAM)TranslateW(tooltips[i].text), BATF_UNICODE);
+
+ SetDlgItemText(m_hwnd, IDC_LOGFROZENTEXT, bNotOnList ? TranslateT("Contact not on list. You may add it...") :
+ TranslateT("Auto scrolling is disabled (press F12 to enable it)"));
+
+ SendDlgItemMessage(m_hwnd, IDC_SAVE, BUTTONADDTOOLTIP, (WPARAM)pszIDCSAVE_close, BATF_UNICODE);
+ SendDlgItemMessage(m_hwnd, IDC_PROTOCOL, BUTTONADDTOOLTIP, (WPARAM)TranslateT("Click for contact menu\nClick dropdown for window settings"), BATF_UNICODE);
+
+ SetDlgItemText(m_hwnd, IDC_RETRY, TranslateT("Retry"));
+ {
+ UINT _ctrls[] = { IDC_RETRY, IDC_CANCELSEND, IDC_MSGSENDLATER };
+ for (int i = 0; i < _countof(_ctrls); i++) {
+ SendDlgItemMessage(m_hwnd, _ctrls[i], BUTTONSETASPUSHBTN, TRUE, 0);
+ SendDlgItemMessage(m_hwnd, _ctrls[i], BUTTONSETASFLATBTN, FALSE, 0);
+ SendDlgItemMessage(m_hwnd, _ctrls[i], BUTTONSETASTHEMEDBTN, TRUE, 0);
+ }
+ }
+
+ SetDlgItemText(m_hwnd, IDC_CANCELSEND, TranslateT("Cancel"));
+ SetDlgItemText(m_hwnd, IDC_MSGSENDLATER, TranslateT("Send later"));
+
+ m_log.SendMsg(EM_SETUNDOLIMIT, 0, 0);
+ m_log.SendMsg(EM_SETEVENTMASK, 0, ENM_MOUSEEVENTS | ENM_KEYEVENTS | ENM_LINK);
+ m_log.SendMsg(EM_SETOLECALLBACK, 0, (LPARAM)&reOleCallback);
+
+ m_message.SendMsg(EM_SETEVENTMASK, 0, ENM_REQUESTRESIZE | ENM_MOUSEEVENTS | ENM_SCROLL | ENM_KEYEVENTS | ENM_CHANGE);
+ m_message.SendMsg(EM_SETOLECALLBACK, 0, (LPARAM)&reOleCallback2);
- int showToolbar = dat->pContainer->dwFlags & CNT_HIDETOOLBAR ? 0 : 1;
- BOOL bBottomToolbar = dat->pContainer->dwFlags & CNT_BOTTOMTOOLBAR ? 1 : 0;
- static LONG rcLogBottom;
+ bActualHistory = M.GetByte(m_hContact, "ActualHistory", 0);
- int panelHeight = dat->Panel->getHeight() + 1;
- int s_offset = 0;
- bool bInfoPanel = dat->Panel->isActive();
- bool fErrorState = (dat->dwFlags & MWF_ERRORSTATE) ? true : false;
+ /* OnO: higligh lines to their end */
+ m_log.SendMsg(EM_SETEDITSTYLE, SES_EXTENDBACKCOLOR, SES_EXTENDBACKCOLOR);
- GetClientRect(GetDlgItem(hwndDlg, IDC_LOG), &rc);
- GetClientRect(GetDlgItem(hwndDlg, IDC_PROTOCOL), &rcButton);
+ m_log.SendMsg(EM_SETLANGOPTIONS, 0, m_log.SendMsg(EM_GETLANGOPTIONS, 0, 0) & ~IMF_AUTOFONTSIZEADJUST);
- if (dat->panelStatusCX == 0)
- dat->panelStatusCX = 80;
+ // add us to the tray list (if it exists)
+ if (PluginConfig.g_hMenuTrayUnread != 0 && m_hContact != 0 && szProto != NULL)
+ UpdateTrayMenu(0, wStatus, szProto, szStatus, m_hContact, FALSE);
- s_offset = 1;
+ m_log.SendMsg(EM_AUTOURLDETECT, TRUE, 0);
+ m_log.SendMsg(EM_EXLIMITTEXT, 0, 0x80000000);
+
+ // subclassing stuff
+ mir_subclassWindow(m_message.GetHwnd(), MessageEditSubclassProc);
+ mir_subclassWindow(GetDlgItem(m_hwnd, IDC_CONTACTPIC), AvatarSubclassProc);
+ mir_subclassWindow(GetDlgItem(m_hwnd, IDC_SPLITTER), SplitterSubclassProc);
+ mir_subclassWindow(GetDlgItem(m_hwnd, IDC_MULTISPLITTER), SplitterSubclassProc);
+ mir_subclassWindow(GetDlgItem(m_hwnd, IDC_PANELSPLITTER), SplitterSubclassProc);
+
+ // load old messages from history (if wanted...)
+ cache->updateStats(TSessionStats::INIT_TIMER);
+ if (m_hContact) {
+ FindFirstEvent();
+ nMax = (int)cache->getMaxMessageLength();
+ }
+ LoadContactAvatar();
+ SendMessage(m_hwnd, DM_OPTIONSAPPLIED, 0, 0);
+ LoadOwnAvatar();
+
+ // restore saved msg if any...
+ if (m_hContact) {
+ ptrW tszSavedMsg(db_get_wsa(m_hContact, SRMSGMOD, "SavedMsg"));
+ if (tszSavedMsg != 0) {
+ SETTEXTEX stx = { ST_DEFAULT, 1200 };
+ m_message.SendMsg(EM_SETTEXTEX, (WPARAM)&stx, tszSavedMsg);
+ SendQueue::UpdateSaveAndSendButton(this);
+ if (pContainer->hwndActive == m_hwnd)
+ UpdateReadChars();
+ }
+ }
+ if (newData->szInitialText) {
+ if (newData->isWchar)
+ SetDlgItemTextW(m_hwnd, IDC_MESSAGE, (wchar_t*)newData->szInitialText);
+ else
+ SetDlgItemTextA(m_hwnd, IDC_MESSAGE, newData->szInitialText);
+ int len = GetWindowTextLength(m_message.GetHwnd());
+ PostMessage(m_message.GetHwnd(), EM_SETSEL, len, len);
+ if (len)
+ EnableSendButton(true);
+ }
+
+ for (MEVENT hdbEvent = db_event_last(m_hContact); hdbEvent; hdbEvent = db_event_prev(m_hContact, hdbEvent)) {
+ DBEVENTINFO dbei = {};
+ db_event_get(hdbEvent, &dbei);
+ if (dbei.eventType == EVENTTYPE_MESSAGE && !(dbei.flags & DBEF_SENT)) {
+ lastMessage = dbei.timestamp;
+ DM_UpdateLastMessage(this);
+ break;
+ }
+ }
+
+ SendMessage(pContainer->hwnd, DM_QUERYCLIENTAREA, 0, (LPARAM)&rc);
+ {
+ WNDCLASS wndClass = { 0 };
+ GetClassInfo(g_hInst, L"RICHEDIT50W", &wndClass);
+ mir_subclassWindowFull(m_log.GetHwnd(), MessageLogSubclassProc, wndClass.lpfnWndProc);
+ }
+
+ SetWindowPos(m_hwnd, 0, rc.left, rc.top, (rc.right - rc.left), (rc.bottom - rc.top), newData->iActivate ? 0 : SWP_NOZORDER | SWP_NOACTIVATE);
+ LoadSplitter();
+ ShowPicture(true);
+
+ if (pContainer->dwFlags & CNT_CREATE_MINIMIZED || !newData->iActivate || pContainer->dwFlags & CNT_DEFERREDTABSELECT) {
+ iFlashIcon = PluginConfig.g_IconMsgEvent;
+ SetTimer(m_hwnd, TIMERID_FLASHWND, TIMEOUT_FLASHWND, NULL);
+ m_bCanFlashTab = true;
+
+ DBEVENTINFO dbei = { 0 };
+ dbei.eventType = EVENTTYPE_MESSAGE;
+ FlashOnClist(hDbEventFirst, &dbei);
+
+ SendMessage(pContainer->hwnd, DM_SETICON, (WPARAM)this, (LPARAM)Skin_LoadIcon(SKINICON_EVENT_MESSAGE));
+ pContainer->dwFlags |= CNT_NEED_UPDATETITLE;
+ dwFlags |= MWF_NEEDCHECKSIZE | MWF_WASBACKGROUNDCREATE | MWF_DEFERREDSCROLL;
+ }
+
+ if (newData->iActivate) {
+ pContainer->hwndActive = m_hwnd;
+ ShowWindow(m_hwnd, SW_SHOW);
+ SetActiveWindow(m_hwnd);
+ SetForegroundWindow(m_hwnd);
+ }
+ else if (pContainer->dwFlags & CNT_CREATE_MINIMIZED) {
+ dwFlags |= MWF_DEFERREDSCROLL;
+ ShowWindow(m_hwnd, SW_SHOWNOACTIVATE);
+ pContainer->hwndActive = m_hwnd;
+ pContainer->dwFlags |= CNT_DEFERREDCONFIGURE;
+ }
+ PostMessage(pContainer->hwnd, DM_UPDATETITLE, m_hContact, 0);
+
+ DM_RecalcPictureSize();
+ dwLastActivity = GetTickCount() - 1000;
+ pContainer->dwLastActivity = dwLastActivity;
+
+ if (hwndHPP)
+ mir_subclassWindow(hwndHPP, HPPKFSubclassProc);
+
+ dwFlags &= ~MWF_INITMODE;
+ TABSRMM_FireEvent(m_hContact, m_hwnd, MSG_WINDOW_EVT_OPEN, 0);
+
+ // show a popup if wanted...
+ if (newData->bWantPopup) {
+ DBEVENTINFO dbei = {};
+ newData->bWantPopup = FALSE;
+ db_event_get(newData->hdbEvent, &dbei);
+ tabSRMM_ShowPopup(m_hContact, newData->hdbEvent, dbei.eventType, 0, 0, m_hwnd, cache->getActiveProto());
+ }
+
+ if (pContainer->dwFlags & CNT_CREATE_MINIMIZED) {
+ pContainer->dwFlags &= ~CNT_CREATE_MINIMIZED;
+ pContainer->hwndActive = m_hwnd;
+ }
+}
+
+void CSrmmWindow::OnDestroy()
+{
+ memset((void*)&pContainer->mOld, -1000, sizeof(MARGINS));
+ PostMessage(pContainer->hwnd, WM_SIZE, 0, 1);
+ if (pContainer->dwFlags & CNT_SIDEBAR)
+ pContainer->SideBar->removeSession(this);
+ cache->setWindowData();
+ if (cache->isValid() && !fIsReattach && m_hContact && M.GetByte("deletetemp", 0))
+ if (db_get_b(m_hContact, "CList", "NotOnList", 0))
+ db_delete_contact(m_hContact);
+
+ delete Panel;
+
+ if (hwndContactPic)
+ DestroyWindow(hwndContactPic);
+
+ if (hwndPanelPic)
+ DestroyWindow(hwndPanelPic);
+
+ if (hClientIcon)
+ DestroyIcon(hClientIcon);
+
+ if (hwndPanelPicParent)
+ DestroyWindow(hwndPanelPicParent);
+
+ if (cache->isValid()) { // not valid means the contact was deleted
+ TABSRMM_FireEvent(m_hContact, m_hwnd, MSG_WINDOW_EVT_CLOSING, 0);
+ AddContactToFavorites(m_hContact, cache->getNick(), cache->getActiveProto(), szStatus, wStatus,
+ Skin_LoadProtoIcon(cache->getActiveProto(), cache->getActiveStatus()), 1, PluginConfig.g_hMenuRecent);
+ if (m_hContact) {
+ if (!fEditNotesActive) {
+ char *msg = Message_GetFromStream(m_message.GetHwnd(), SF_TEXT);
+ if (msg) {
+ db_set_utf(m_hContact, SRMSGMOD, "SavedMsg", msg);
+ mir_free(msg);
+ }
+ else db_unset(m_hContact, SRMSGMOD, "SavedMsg");
+ }
+ else SendMessage(m_hwnd, WM_COMMAND, IDC_PIC, 0);
+ }
+ }
+
+ if (nTypeMode == PROTOTYPE_SELFTYPING_ON)
+ DM_NotifyTyping(PROTOTYPE_SELFTYPING_OFF);
+
+ DM_FreeTheme();
+
+ mir_free(sendBuffer);
+ mir_free(hHistoryEvents);
+
+ // search the sendqueue for unfinished send jobs and mir_free them. Leave unsent
+ // messages in the queue as they can be acked later
+ {
+ SendJob *jobs = sendQueue->getJobByIndex(0);
+
+ for (int i = 0; i < SendQueue::NR_SENDJOBS; i++) {
+ if (jobs[i].hContact == m_hContact) {
+ if (jobs[i].iStatus >(unsigned)SendQueue::SQ_INPROGRESS)
+ sendQueue->clearJob(i);
+
+ // unfinished jobs which did not yet return anything are kept in the queue.
+ // the hwndOwner is set to 0 because the window handle is now no longer valid.
+ // Response for such a job is still silently handled by AckMessage() (sendqueue.c)
+ if (jobs[i].iStatus == (unsigned)SendQueue::SQ_INPROGRESS)
+ jobs[i].hOwnerWnd = 0;
+ }
+ }
+ }
+
+ mir_free(hQueuedEvents);
+
+ if (hSmileyIcon)
+ DestroyIcon(hSmileyIcon);
+
+ if (hXStatusIcon)
+ DestroyIcon(hXStatusIcon);
+
+ if (hwndTip)
+ DestroyWindow(hwndTip);
+
+ if (hTaskbarIcon)
+ DestroyIcon(hTaskbarIcon);
+
+ UpdateTrayMenuState(this, FALSE); // remove me from the tray menu (if still there)
+ if (PluginConfig.g_hMenuTrayUnread)
+ DeleteMenu(PluginConfig.g_hMenuTrayUnread, m_hContact, MF_BYCOMMAND);
+ M.RemoveWindow(m_hwnd);
+
+ if (cache->isValid())
+ db_set_dw(0, SRMSGMOD, "multisplit", multiSplitterX);
+
+ {
+ int i = GetTabIndexFromHWND(m_hwndParent, m_hwnd);
+ if (i >= 0) {
+ SendMessage(m_hwndParent, WM_USER + 100, 0, 0); // remove tooltip
+ TabCtrl_DeleteItem(m_hwndParent, i);
+ BroadCastContainer(pContainer, DM_REFRESHTABINDEX, 0, 0);
+ iTabID = -1;
+ }
+ }
+
+ TABSRMM_FireEvent(m_hContact, m_hwnd, MSG_WINDOW_EVT_CLOSE, 0);
+
+ // clean up IEView and H++ log windows
+ if (hwndIEView != 0) {
+ IEVIEWWINDOW ieWindow;
+ ieWindow.cbSize = sizeof(IEVIEWWINDOW);
+ ieWindow.iType = IEW_DESTROY;
+ ieWindow.hwnd = hwndIEView;
+ CallService(MS_IEVIEW_WINDOW, 0, (LPARAM)&ieWindow);
+ }
+ if (hwndHPP) {
+ IEVIEWWINDOW ieWindow;
+ ieWindow.cbSize = sizeof(IEVIEWWINDOW);
+ ieWindow.iType = IEW_DESTROY;
+ ieWindow.hwnd = hwndHPP;
+ CallService(MS_HPP_EG_WINDOW, 0, (LPARAM)&ieWindow);
+ }
+ if (pWnd) {
+ delete pWnd;
+ pWnd = 0;
+ }
+ if (sbCustom) {
+ delete sbCustom;
+ sbCustom = 0;
+ }
+}
+
+/////////////////////////////////////////////////////////////////////////////////////////
+// resizer proc for the "new" layout.
+
+int CSrmmWindow::Resizer(UTILRESIZECONTROL *urc)
+{
+ int panelHeight = Panel->getHeight() + 1;
+
+ bool bInfoPanel = Panel->isActive();
+ bool bErrorState = (dwFlags & MWF_ERRORSTATE) != 0;
+ bool bShowToolbar = (pContainer->dwFlags & CNT_HIDETOOLBAR) == 0;
+ bool bBottomToolbar = (pContainer->dwFlags & CNT_BOTTOMTOOLBAR) != 0;
+
+ RECT rc, rcButton;
+ GetClientRect(m_log.GetHwnd(), &rc);
+ GetClientRect(GetDlgItem(m_hwnd, IDC_PROTOCOL), &rcButton);
+
+ if (panelStatusCX == 0)
+ panelStatusCX = 80;
switch (urc->wId) {
case IDC_PANELSPLITTER:
@@ -966,14 +1379,14 @@ static int MessageDialogResize(HWND hwndDlg, LPARAM lParam, UTILRESIZECONTROL *
return RD_ANCHORX_WIDTH | RD_ANCHORY_TOP;
case IDC_LOG:
- if (dat->dwFlags & MWF_ERRORSTATE)
+ if (dwFlags & MWF_ERRORSTATE)
urc->rcItem.bottom -= ERRORPANEL_HEIGHT;
- if (dat->dwFlagsEx & MWF_SHOW_SCROLLINGDISABLED || dat->bNotOnList)
+ if (dwFlagsEx & MWF_SHOW_SCROLLINGDISABLED || bNotOnList)
urc->rcItem.bottom -= 20;
- if (dat->sendMode & SMODE_MULTIPLE)
- urc->rcItem.right -= (dat->multiSplitterX + 3);
- urc->rcItem.bottom -= dat->splitterY - dat->originalSplitterY;
- if (!showToolbar || bBottomToolbar)
+ if (sendMode & SMODE_MULTIPLE)
+ urc->rcItem.right -= (multiSplitterX + 3);
+ urc->rcItem.bottom -= splitterY - originalSplitterY;
+ if (!bShowToolbar || bBottomToolbar)
urc->rcItem.bottom += 21;
if (bInfoPanel)
urc->rcItem.top += panelHeight;
@@ -991,53 +1404,52 @@ static int MessageDialogResize(HWND hwndDlg, LPARAM lParam, UTILRESIZECONTROL *
return RD_ANCHORX_WIDTH | RD_ANCHORY_HEIGHT;
case IDC_CONTACTPIC:
- GetClientRect(GetDlgItem(hwndDlg, IDC_MESSAGE), &rc);
- urc->rcItem.top -= dat->splitterY - dat->originalSplitterY;
- urc->rcItem.left = urc->rcItem.right - (dat->pic.cx + 2);
- if ((urc->rcItem.bottom - urc->rcItem.top) < (dat->pic.cy/* + 2*/) && dat->bShowAvatar) {
- urc->rcItem.top = urc->rcItem.bottom - dat->pic.cy;
- dat->bUseOffset = true;
+ GetClientRect(GetDlgItem(m_hwnd, IDC_MESSAGE), &rc);
+ urc->rcItem.top -= splitterY - originalSplitterY;
+ urc->rcItem.left = urc->rcItem.right - (pic.cx + 2);
+ if ((urc->rcItem.bottom - urc->rcItem.top) < (pic.cy/* + 2*/) && bShowAvatar) {
+ urc->rcItem.top = urc->rcItem.bottom - pic.cy;
+ bUseOffset = true;
}
- else dat->bUseOffset = false;
+ else bUseOffset = false;
- if (showToolbar && bBottomToolbar && (PluginConfig.m_bAlwaysFullToolbarWidth || ((dat->pic.cy - DPISCALEY_S(6)) < rc.bottom))) {
+ if (bShowToolbar && bBottomToolbar && (PluginConfig.m_bAlwaysFullToolbarWidth || ((pic.cy - DPISCALEY_S(6)) < rc.bottom))) {
urc->rcItem.bottom -= DPISCALEY_S(22);
- if (dat->bIsAutosizingInput) {
+ if (bIsAutosizingInput) {
urc->rcItem.left--;
urc->rcItem.top--;
}
}
- if (dat->hwndContactPic) //if Panel control was created?
- SetWindowPos(dat->hwndContactPic, HWND_TOP, 1, ((urc->rcItem.bottom - urc->rcItem.top) - (dat->pic.cy)) / 2 + 1, //resizes it
- dat->pic.cx - 2, dat->pic.cy - 2, SWP_SHOWWINDOW);
+ if (hwndContactPic) //if Panel control was created?
+ SetWindowPos(hwndContactPic, HWND_TOP, 1, ((urc->rcItem.bottom - urc->rcItem.top) - (pic.cy)) / 2 + 1, //resizes it
+ pic.cx - 2, pic.cy - 2, SWP_SHOWWINDOW);
return RD_ANCHORX_RIGHT | RD_ANCHORY_BOTTOM;
case IDC_SPLITTER:
urc->rcItem.right = urc->dlgNewSize.cx;
- urc->rcItem.top -= dat->splitterY - dat->originalSplitterY;
+ urc->rcItem.top -= splitterY - originalSplitterY;
urc->rcItem.bottom = urc->rcItem.top + 2;
OffsetRect(&urc->rcItem, 0, 1);
urc->rcItem.left = 0;
- if (dat->bUseOffset)
- urc->rcItem.right -= (dat->pic.cx); // + DPISCALEX(2));
+ if (bUseOffset)
+ urc->rcItem.right -= (pic.cx); // + DPISCALEX(2));
return RD_ANCHORX_CUSTOM | RD_ANCHORY_BOTTOM;
case IDC_MESSAGE:
urc->rcItem.right = urc->dlgNewSize.cx;
- if (dat->bShowAvatar)
- urc->rcItem.right -= dat->pic.cx + 2;
- urc->rcItem.top -= dat->splitterY - dat->originalSplitterY;
- if (bBottomToolbar&&showToolbar)
+ if (bShowAvatar)
+ urc->rcItem.right -= pic.cx + 2;
+ urc->rcItem.top -= splitterY - originalSplitterY;
+ if (bBottomToolbar && bShowToolbar)
urc->rcItem.bottom -= DPISCALEY_S(22);
- if (dat->bIsAutosizingInput)
+ if (bIsAutosizingInput)
urc->rcItem.top -= DPISCALEY_S(1);
msgTop = urc->rcItem.top;
- msgBottom = urc->rcItem.bottom;
if (CSkin::m_skinEnabled) {
CSkinItem *item = &SkinItems[ID_EXTBKINPUTAREA];
if (!item->IGNORED) {
@@ -1052,8 +1464,8 @@ static int MessageDialogResize(HWND hwndDlg, LPARAM lParam, UTILRESIZECONTROL *
case IDC_MULTISPLITTER:
if (bInfoPanel)
urc->rcItem.top += panelHeight;
- urc->rcItem.left -= dat->multiSplitterX;
- urc->rcItem.right -= dat->multiSplitterX;
+ urc->rcItem.left -= multiSplitterX;
+ urc->rcItem.right -= multiSplitterX;
urc->rcItem.bottom = rcLogBottom;
return RD_ANCHORX_RIGHT | RD_ANCHORY_HEIGHT;
@@ -1061,7 +1473,7 @@ static int MessageDialogResize(HWND hwndDlg, LPARAM lParam, UTILRESIZECONTROL *
urc->rcItem.right = urc->dlgNewSize.cx - 50;
urc->rcItem.bottom = msgTop - (bBottomToolbar ? 0 : 28);
urc->rcItem.top = msgTop - 16 - (bBottomToolbar ? 0 : 28);
- if (!showToolbar && !bBottomToolbar) {
+ if (!bShowToolbar && !bBottomToolbar) {
urc->rcItem.bottom += 21;
urc->rcItem.top += 21;
}
@@ -1072,7 +1484,7 @@ static int MessageDialogResize(HWND hwndDlg, LPARAM lParam, UTILRESIZECONTROL *
urc->rcItem.top = msgTop - 18 - (bBottomToolbar ? 0 : 28);
urc->rcItem.right = urc->dlgNewSize.cx - 28;
urc->rcItem.left = urc->rcItem.right - 20;
- if (!showToolbar && !bBottomToolbar) {
+ if (!bShowToolbar && !bBottomToolbar) {
urc->rcItem.bottom += 21;
urc->rcItem.top += 21;
}
@@ -1083,7 +1495,7 @@ static int MessageDialogResize(HWND hwndDlg, LPARAM lParam, UTILRESIZECONTROL *
urc->rcItem.top = msgTop - 18 - (bBottomToolbar ? 0 : 28);
urc->rcItem.right = urc->dlgNewSize.cx - 4;
urc->rcItem.left = urc->rcItem.right - 20;
- if (!showToolbar && !bBottomToolbar) {
+ if (!bShowToolbar && !bBottomToolbar) {
urc->rcItem.bottom += 21;
urc->rcItem.top += 21;
}
@@ -1095,11 +1507,11 @@ static int MessageDialogResize(HWND hwndDlg, LPARAM lParam, UTILRESIZECONTROL *
case IDC_RETRY:
case IDC_CANCELSEND:
case IDC_MSGSENDLATER:
- if (fErrorState) {
- urc->rcItem.bottom = msgTop - 5 - (bBottomToolbar ? 0 : 28) - ((dat->bNotOnList || dat->dwFlagsEx & MWF_SHOW_SCROLLINGDISABLED) ? 20 : 0);
- urc->rcItem.top = msgTop - 25 - (bBottomToolbar ? 0 : 28) - ((dat->bNotOnList || dat->dwFlagsEx & MWF_SHOW_SCROLLINGDISABLED) ? 20 : 0);
+ if (bErrorState) {
+ urc->rcItem.bottom = msgTop - 5 - (bBottomToolbar ? 0 : 28) - ((bNotOnList || dwFlagsEx & MWF_SHOW_SCROLLINGDISABLED) ? 20 : 0);
+ urc->rcItem.top = msgTop - 25 - (bBottomToolbar ? 0 : 28) - ((bNotOnList || dwFlagsEx & MWF_SHOW_SCROLLINGDISABLED) ? 20 : 0);
}
- if (!showToolbar && !bBottomToolbar) {
+ if (!bShowToolbar && !bBottomToolbar) {
urc->rcItem.bottom += 21;
urc->rcItem.top += 21;
}
@@ -1107,11 +1519,11 @@ static int MessageDialogResize(HWND hwndDlg, LPARAM lParam, UTILRESIZECONTROL *
case IDC_STATICTEXT:
case IDC_STATICERRORICON:
- if (fErrorState) {
- urc->rcItem.bottom = msgTop - 28 - (bBottomToolbar ? 0 : 28) - ((dat->bNotOnList || dat->dwFlagsEx & MWF_SHOW_SCROLLINGDISABLED) ? 20 : 0);
- urc->rcItem.top = msgTop - 45 - (bBottomToolbar ? 0 : 28) - ((dat->bNotOnList || dat->dwFlagsEx & MWF_SHOW_SCROLLINGDISABLED) ? 20 : 0);
+ if (bErrorState) {
+ urc->rcItem.bottom = msgTop - 28 - (bBottomToolbar ? 0 : 28) - ((bNotOnList || dwFlagsEx & MWF_SHOW_SCROLLINGDISABLED) ? 20 : 0);
+ urc->rcItem.top = msgTop - 45 - (bBottomToolbar ? 0 : 28) - ((bNotOnList || dwFlagsEx & MWF_SHOW_SCROLLINGDISABLED) ? 20 : 0);
}
- if (!showToolbar && !bBottomToolbar) {
+ if (!bShowToolbar && !bBottomToolbar) {
urc->rcItem.bottom += 21;
urc->rcItem.top += 21;
}
@@ -1120,319 +1532,15 @@ static int MessageDialogResize(HWND hwndDlg, LPARAM lParam, UTILRESIZECONTROL *
return RD_ANCHORX_LEFT | RD_ANCHORY_BOTTOM;
}
-INT_PTR CALLBACK DlgProcMessage(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
+/////////////////////////////////////////////////////////////////////////////////////////
+// dialog procedure
+
+INT_PTR CSrmmWindow::DlgProc(UINT uMsg, WPARAM wParam, LPARAM lParam)
{
- TContainerData *m_pContainer = 0;
- TWindowData *dat = (TWindowData*)GetWindowLongPtr(hwndDlg, GWLP_USERDATA);
- HWND hwndTab = GetParent(hwndDlg), hwndContainer;
POINT pt, tmp, cur;
RECT rc;
- TNewWindowData *newData;
-
- if (dat == 0) {
- if (uMsg == WM_ACTIVATE || uMsg == WM_SETFOCUS)
- return 0;
- hwndContainer = NULL;
- }
- else {
- m_pContainer = dat->pContainer;
- hwndContainer = m_pContainer->hwnd;
- }
switch (uMsg) {
- case WM_INITDIALOG:
- TranslateDialogDefault(hwndDlg);
- newData = (TNewWindowData*)lParam;
-
- dat = (TWindowData*)mir_calloc(sizeof(TWindowData));
- if (newData->iTabID >= 0) {
- dat->pContainer = newData->pContainer;
- m_pContainer = dat->pContainer;
- hwndContainer = m_pContainer->hwnd;
- }
- SetWindowLongPtr(hwndDlg, GWLP_USERDATA, (LONG_PTR)dat);
-
- if (Utils::rtf_ctable == 0)
- Utils::RTF_CTableInit();
-
- dat->dwFlags |= MWF_INITMODE;
- dat->bType = SESSIONTYPE_IM;
- dat->fInsertMode = FALSE;
- dat->fLimitedUpdate = false;
- dat->Panel = new CInfoPanel(dat);
-
- newData->item.lParam = (LPARAM)hwndDlg;
- TabCtrl_SetItem(hwndTab, newData->iTabID, &newData->item);
- dat->iTabID = newData->iTabID;
- dat->hwnd = hwndDlg;
-
- DM_ThemeChanged(dat);
-
- pszIDCSAVE_close = TranslateT("Close session");
- pszIDCSAVE_save = TranslateT("Save and close session");
-
- dat->hContact = newData->hContact;
- dat->cache = CContactCache::getContactCache(dat->hContact);
- dat->cache->updateNick();
- dat->cache->setWindowData(hwndDlg, dat);
- M.AddWindow(hwndDlg, dat->hContact);
- BroadCastContainer(m_pContainer, DM_REFRESHTABINDEX, 0, 0);
- CProxyWindow::add(dat);
- dat->szProto = const_cast<char *>(dat->cache->getProto());
- dat->bIsMeta = dat->cache->isMeta();
- if (dat->bIsMeta)
- dat->cache->updateMeta();
-
- dat->cache->updateUIN();
-
- if (dat->hContact && dat->szProto != NULL) {
- dat->wStatus = db_get_w(dat->hContact, dat->szProto, "Status", ID_STATUS_OFFLINE);
- wcsncpy_s(dat->szStatus, pcli->pfnGetStatusModeDescription(dat->szProto == NULL ? ID_STATUS_OFFLINE : dat->wStatus, 0), _TRUNCATE);
- }
- else dat->wStatus = ID_STATUS_OFFLINE;
-
- for (int i = 0; i < _countof(btnControls); i++)
- CustomizeButton(GetDlgItem(hwndDlg, btnControls[i]));
-
- GetMYUIN(dat);
- GetClientIcon(dat);
-
- CustomizeButton(CreateWindowEx(0, L"MButtonClass", L"", WS_CHILD | WS_VISIBLE | WS_TABSTOP, 0, 0, 6, DPISCALEY_S(20),
- hwndDlg, (HMENU)IDC_TOGGLESIDEBAR, g_hInst, NULL));
- dat->hwndPanelPicParent = CreateWindowEx(WS_EX_TOPMOST, L"Static", L"", SS_OWNERDRAW | WS_VISIBLE | WS_CHILD, 1, 1, 1, 1, hwndDlg, (HMENU)6000, NULL, NULL);
- mir_subclassWindow(dat->hwndPanelPicParent, CInfoPanel::avatarParentSubclass);
-
- dat->bShowUIElements = (m_pContainer->dwFlags & CNT_HIDETOOLBAR) == 0;
- dat->sendMode |= dat->hContact == 0 ? SMODE_MULTIPLE : 0;
- dat->sendMode |= M.GetByte(dat->hContact, "no_ack", 0) ? SMODE_NOACK : 0;
-
- dat->hQueuedEvents = (MEVENT*)mir_calloc(sizeof(MEVENT)* EVENT_QUEUE_SIZE);
- dat->iEventQueueSize = EVENT_QUEUE_SIZE;
- dat->iCurrentQueueError = -1;
-
- // message history limit
- // hHistoryEvents holds up to n event handles
- dat->maxHistory = M.GetDword(dat->hContact, "maxhist", M.GetDword("maxhist", 0));
- dat->curHistory = 0;
- if (dat->maxHistory)
- dat->hHistoryEvents = (MEVENT*)mir_alloc(dat->maxHistory * sizeof(MEVENT));
- else
- dat->hHistoryEvents = NULL;
-
- if (dat->bIsMeta)
- SendMessage(hwndDlg, DM_UPDATEMETACONTACTINFO, 0, 0);
- else
- SendMessage(hwndDlg, DM_UPDATEWINICON, 0, 0);
- dat->bTabFlash = FALSE;
- dat->mayFlashTab = FALSE;
- GetMyNick(dat);
-
- dat->multiSplitterX = (int)M.GetDword(SRMSGMOD, "multisplit", 150);
- dat->nTypeMode = PROTOTYPE_SELFTYPING_OFF;
- SetTimer(hwndDlg, TIMERID_TYPE, 1000, NULL);
- dat->iLastEventType = 0xffffffff;
-
- // load log option flags...
- dat->dwFlags = dat->pContainer->theme.dwFlags;
-
- // consider per-contact message setting overrides
- if (dat->hContact && M.GetDword(dat->hContact, "mwmask", 0))
- LoadLocalFlags(dat);
-
- DM_InitTip(dat);
- dat->Panel->getVisibility();
-
- dat->dwFlagsEx |= M.GetByte(dat->hContact, "splitoverride", 0) ? MWF_SHOW_SPLITTEROVERRIDE : 0;
- dat->bIsAutosizingInput = IsAutoSplitEnabled(dat);
- dat->iInputAreaHeight = -1;
- SetMessageLog(dat);
- if (dat->hContact)
- dat->Panel->loadHeight();
-
- dat->bShowAvatar = GetAvatarVisibility(hwndDlg, dat);
-
- Utils::showDlgControl(hwndDlg, IDC_MULTISPLITTER, SW_HIDE);
-
- GetWindowRect(GetDlgItem(hwndDlg, IDC_SPLITTER), &rc);
- pt.y = (rc.top + rc.bottom) / 2;
- pt.x = 0;
- ScreenToClient(hwndDlg, &pt);
- dat->originalSplitterY = pt.y;
- if (dat->splitterY == -1)
- dat->splitterY = dat->originalSplitterY + 60;
-
- GetWindowRect(GetDlgItem(hwndDlg, IDC_MESSAGE), &rc);
- dat->minEditBoxSize.cx = rc.right - rc.left;
- dat->minEditBoxSize.cy = rc.bottom - rc.top;
-
- BB_InitDlgButtons(dat);
- SendMessage(hwndDlg, WM_CBD_LOADICONS, 0, 0);
-
- SendDlgItemMessage(hwndDlg, IDC_ADD, BUTTONSETASFLATBTN, TRUE, 0);
- SendDlgItemMessage(hwndDlg, IDC_CANCELADD, BUTTONSETASFLATBTN, TRUE, 0);
-
- SendDlgItemMessage(hwndDlg, IDC_TOGGLESIDEBAR, BUTTONSETASFLATBTN, TRUE, 0);
- SendDlgItemMessage(hwndDlg, IDC_TOGGLESIDEBAR, BUTTONSETASTHEMEDBTN, CSkin::IsThemed(), 0);
- SendDlgItemMessage(hwndDlg, IDC_TOGGLESIDEBAR, BUTTONSETCONTAINER, (LPARAM)m_pContainer, 0);
- SendDlgItemMessage(hwndDlg, IDC_TOGGLESIDEBAR, BUTTONSETASTOOLBARBUTTON, TRUE, 0);
-
- TABSRMM_FireEvent(dat->hContact, hwndDlg, MSG_WINDOW_EVT_OPENING, 0);
-
- for (int i = 0; i < _countof(tooltips); i++)
- SendDlgItemMessage(hwndDlg, tooltips[i].id, BUTTONADDTOOLTIP, (WPARAM)TranslateW(tooltips[i].text), BATF_UNICODE);
-
- SetDlgItemText(hwndDlg, IDC_LOGFROZENTEXT, dat->bNotOnList ? TranslateT("Contact not on list. You may add it...") :
- TranslateT("Auto scrolling is disabled (press F12 to enable it)"));
-
- SendDlgItemMessage(hwndDlg, IDC_SAVE, BUTTONADDTOOLTIP, (WPARAM)pszIDCSAVE_close, BATF_UNICODE);
- SendDlgItemMessage(hwndDlg, IDC_PROTOCOL, BUTTONADDTOOLTIP, (WPARAM)TranslateT("Click for contact menu\nClick dropdown for window settings"), BATF_UNICODE);
-
- SetDlgItemText(hwndDlg, IDC_RETRY, TranslateT("Retry"));
- {
- UINT _ctrls[] = { IDC_RETRY, IDC_CANCELSEND, IDC_MSGSENDLATER };
- for (int i = 0; i < _countof(_ctrls); i++) {
- SendDlgItemMessage(hwndDlg, _ctrls[i], BUTTONSETASPUSHBTN, TRUE, 0);
- SendDlgItemMessage(hwndDlg, _ctrls[i], BUTTONSETASFLATBTN, FALSE, 0);
- SendDlgItemMessage(hwndDlg, _ctrls[i], BUTTONSETASTHEMEDBTN, TRUE, 0);
- }
- }
-
- SetDlgItemText(hwndDlg, IDC_CANCELSEND, TranslateT("Cancel"));
- SetDlgItemText(hwndDlg, IDC_MSGSENDLATER, TranslateT("Send later"));
-
- SendDlgItemMessage(hwndDlg, IDC_LOG, EM_SETUNDOLIMIT, 0, 0);
- SendDlgItemMessage(hwndDlg, IDC_LOG, EM_SETEVENTMASK, 0, ENM_MOUSEEVENTS | ENM_KEYEVENTS | ENM_LINK);
- SendDlgItemMessage(hwndDlg, IDC_LOG, EM_SETOLECALLBACK, 0, (LPARAM)&reOleCallback);
-
- SendDlgItemMessage(hwndDlg, IDC_MESSAGE, EM_SETEVENTMASK, 0, ENM_REQUESTRESIZE | ENM_MOUSEEVENTS | ENM_SCROLL | ENM_KEYEVENTS | ENM_CHANGE);
- SendDlgItemMessage(hwndDlg, IDC_MESSAGE, EM_SETOLECALLBACK, 0, (LPARAM)&reOleCallback2);
-
- dat->bActualHistory = M.GetByte(dat->hContact, "ActualHistory", 0);
-
- /* OnO: higligh lines to their end */
- SendDlgItemMessage(hwndDlg, IDC_LOG, EM_SETEDITSTYLE, SES_EXTENDBACKCOLOR, SES_EXTENDBACKCOLOR);
-
- SendDlgItemMessage(hwndDlg, IDC_LOG, EM_SETLANGOPTIONS, 0, SendDlgItemMessage(hwndDlg, IDC_LOG, EM_GETLANGOPTIONS, 0, 0) & ~IMF_AUTOFONTSIZEADJUST);
-
- // add us to the tray list (if it exists)
- if (PluginConfig.g_hMenuTrayUnread != 0 && dat->hContact != 0 && dat->szProto != NULL)
- UpdateTrayMenu(0, dat->wStatus, dat->szProto, dat->szStatus, dat->hContact, FALSE);
-
- SendDlgItemMessage(hwndDlg, IDC_LOG, EM_AUTOURLDETECT, TRUE, 0);
- SendDlgItemMessage(hwndDlg, IDC_LOG, EM_EXLIMITTEXT, 0, 0x80000000);
-
- // subclassing stuff
- mir_subclassWindow(GetDlgItem(hwndDlg, IDC_MESSAGE), MessageEditSubclassProc);
- mir_subclassWindow(GetDlgItem(hwndDlg, IDC_CONTACTPIC), AvatarSubclassProc);
- mir_subclassWindow(GetDlgItem(hwndDlg, IDC_SPLITTER), SplitterSubclassProc);
- mir_subclassWindow(GetDlgItem(hwndDlg, IDC_MULTISPLITTER), SplitterSubclassProc);
- mir_subclassWindow(GetDlgItem(hwndDlg, IDC_PANELSPLITTER), SplitterSubclassProc);
-
- // load old messages from history (if wanted...)
- dat->cache->updateStats(TSessionStats::INIT_TIMER);
- if (dat->hContact) {
- FindFirstEvent(dat);
- dat->nMax = (int)dat->cache->getMaxMessageLength();
- }
- LoadContactAvatar(dat);
- SendMessage(hwndDlg, DM_OPTIONSAPPLIED, 0, 0);
- LoadOwnAvatar(dat);
-
- // restore saved msg if any...
- if (dat->hContact) {
- ptrW tszSavedMsg(db_get_wsa(dat->hContact, SRMSGMOD, "SavedMsg"));
- if (tszSavedMsg != 0) {
- SETTEXTEX stx = { ST_DEFAULT, 1200 };
- SendDlgItemMessage(hwndDlg, IDC_MESSAGE, EM_SETTEXTEX, (WPARAM)&stx, tszSavedMsg);
- SendQueue::UpdateSaveAndSendButton(dat);
- if (m_pContainer->hwndActive == hwndDlg)
- UpdateReadChars(dat);
- }
- }
- if (newData->szInitialText) {
- if (newData->isWchar)
- SetDlgItemTextW(hwndDlg, IDC_MESSAGE, (wchar_t*)newData->szInitialText);
- else
- SetDlgItemTextA(hwndDlg, IDC_MESSAGE, newData->szInitialText);
- int len = GetWindowTextLength(GetDlgItem(hwndDlg, IDC_MESSAGE));
- PostMessage(GetDlgItem(hwndDlg, IDC_MESSAGE), EM_SETSEL, len, len);
- if (len)
- EnableSendButton(dat, TRUE);
- }
-
- for (MEVENT hdbEvent = db_event_last(dat->hContact); hdbEvent; hdbEvent = db_event_prev(dat->hContact, hdbEvent)) {
- DBEVENTINFO dbei = {};
- db_event_get(hdbEvent, &dbei);
- if (dbei.eventType == EVENTTYPE_MESSAGE && !(dbei.flags & DBEF_SENT)) {
- dat->lastMessage = dbei.timestamp;
- DM_UpdateLastMessage(dat);
- break;
- }
- }
-
- SendMessage(hwndContainer, DM_QUERYCLIENTAREA, 0, (LPARAM)&rc);
- {
- WNDCLASS wndClass = { 0 };
- GetClassInfo(g_hInst, L"RICHEDIT50W", &wndClass);
- mir_subclassWindowFull(GetDlgItem(hwndDlg, IDC_LOG), MessageLogSubclassProc, wndClass.lpfnWndProc);
- }
-
- SetWindowPos(hwndDlg, 0, rc.left, rc.top, (rc.right - rc.left), (rc.bottom - rc.top), newData->iActivate ? 0 : SWP_NOZORDER | SWP_NOACTIVATE);
- LoadSplitter(dat);
- ShowPicture(dat, TRUE);
-
- if (m_pContainer->dwFlags & CNT_CREATE_MINIMIZED || !newData->iActivate || m_pContainer->dwFlags & CNT_DEFERREDTABSELECT) {
- dat->iFlashIcon = PluginConfig.g_IconMsgEvent;
- SetTimer(hwndDlg, TIMERID_FLASHWND, TIMEOUT_FLASHWND, NULL);
- dat->mayFlashTab = true;
-
- DBEVENTINFO dbei = { 0 };
- dbei.eventType = EVENTTYPE_MESSAGE;
- FlashOnClist(hwndDlg, dat, dat->hDbEventFirst, &dbei);
-
- SendMessage(hwndContainer, DM_SETICON, (WPARAM)dat, (LPARAM)Skin_LoadIcon(SKINICON_EVENT_MESSAGE));
- m_pContainer->dwFlags |= CNT_NEED_UPDATETITLE;
- dat->dwFlags |= MWF_NEEDCHECKSIZE | MWF_WASBACKGROUNDCREATE | MWF_DEFERREDSCROLL;
- }
-
- if (newData->iActivate) {
- m_pContainer->hwndActive = hwndDlg;
- ShowWindow(hwndDlg, SW_SHOW);
- SetActiveWindow(hwndDlg);
- SetForegroundWindow(hwndDlg);
- }
- else if (m_pContainer->dwFlags & CNT_CREATE_MINIMIZED) {
- dat->dwFlags |= MWF_DEFERREDSCROLL;
- ShowWindow(hwndDlg, SW_SHOWNOACTIVATE);
- m_pContainer->hwndActive = hwndDlg;
- m_pContainer->dwFlags |= CNT_DEFERREDCONFIGURE;
- }
- PostMessage(hwndContainer, DM_UPDATETITLE, dat->hContact, 0);
-
- DM_RecalcPictureSize(dat);
- dat->dwLastActivity = GetTickCount() - 1000;
- m_pContainer->dwLastActivity = dat->dwLastActivity;
-
- if (dat->hwndHPP)
- mir_subclassWindow(dat->hwndHPP, HPPKFSubclassProc);
-
- dat->dwFlags &= ~MWF_INITMODE;
- TABSRMM_FireEvent(dat->hContact, hwndDlg, MSG_WINDOW_EVT_OPEN, 0);
-
- // show a popup if wanted...
- if (newData->bWantPopup) {
- DBEVENTINFO dbei = {};
- newData->bWantPopup = FALSE;
- db_event_get(newData->hdbEvent, &dbei);
- tabSRMM_ShowPopup(dat->hContact, newData->hdbEvent, dbei.eventType, 0, 0, hwndDlg, dat->cache->getActiveProto());
- }
- if (m_pContainer->dwFlags & CNT_CREATE_MINIMIZED) {
- m_pContainer->dwFlags &= ~CNT_CREATE_MINIMIZED;
- m_pContainer->hwndActive = hwndDlg;
- return FALSE;
- }
- return newData->iActivate != 0;
-
case WM_ERASEBKGND:
RECT rcClient, rcWindow;
{
@@ -1441,7 +1549,7 @@ INT_PTR CALLBACK DlgProcMessage(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM l
HBITMAP hbm, hbmOld;
HANDLE hpb = 0;
- GetClientRect(hwndDlg, &rcClient);
+ GetClientRect(m_hwnd, &rcClient);
DWORD cx = rcClient.right - rcClient.left;
DWORD cy = rcClient.bottom - rcClient.top;
@@ -1460,19 +1568,19 @@ INT_PTR CALLBACK DlgProcMessage(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM l
if (CSkin::m_skinEnabled) {
UINT item_ids[2] = { ID_EXTBKHISTORY, ID_EXTBKINPUTAREA };
UINT ctl_ids[2] = { IDC_LOG, IDC_MESSAGE };
- BOOL isEditNotesReason = dat->fEditNotesActive;
- BOOL isSendLaterReason = (dat->sendMode & SMODE_SENDLATER);
- BOOL isMultipleReason = (dat->sendMode & SMODE_MULTIPLE || dat->sendMode & SMODE_CONTAINER);
+ BOOL isEditNotesReason = fEditNotesActive;
+ BOOL isSendLaterReason = (sendMode & SMODE_SENDLATER);
+ BOOL isMultipleReason = (sendMode & SMODE_MULTIPLE || sendMode & SMODE_CONTAINER);
- CSkin::SkinDrawBG(hwndDlg, hwndContainer, m_pContainer, &rcClient, hdcMem);
+ CSkin::SkinDrawBG(m_hwnd, pContainer->hwnd, pContainer, &rcClient, hdcMem);
for (int i = 0; i < 2; i++) {
CSkinItem *item = &SkinItems[item_ids[i]];
if (!item->IGNORED) {
- GetWindowRect(GetDlgItem(hwndDlg, ctl_ids[i]), &rcWindow);
+ GetWindowRect(GetDlgItem(m_hwnd, ctl_ids[i]), &rcWindow);
pt.x = rcWindow.left;
pt.y = rcWindow.top;
- ScreenToClient(hwndDlg, &pt);
+ ScreenToClient(m_hwnd, &pt);
rc.left = pt.x - item->MARGIN_LEFT;
rc.top = pt.y - item->MARGIN_TOP;
rc.right = rc.left + item->MARGIN_RIGHT + (rcWindow.right - rcWindow.left) + item->MARGIN_LEFT;
@@ -1491,22 +1599,22 @@ INT_PTR CALLBACK DlgProcMessage(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM l
if (M.isAero()) {
LONG temp = rcClient.bottom;
- rcClient.bottom = dat->Panel->isActive() ? dat->Panel->getHeight() + 5 : 5;
+ rcClient.bottom = Panel->isActive() ? Panel->getHeight() + 5 : 5;
FillRect(hdcMem, &rcClient, (HBRUSH)GetStockObject(BLACK_BRUSH));
rcClient.bottom = temp;
}
}
// draw the (new) infopanel background. Use the gradient from the statusitem.
- GetClientRect(hwndDlg, &rc);
- dat->Panel->renderBG(hdcMem, rc, &SkinItems[ID_EXTBKINFOPANELBG], bAero);
+ GetClientRect(m_hwnd, &rc);
+ Panel->renderBG(hdcMem, rc, &SkinItems[ID_EXTBKINFOPANELBG], bAero);
// draw aero related stuff
if (!CSkin::m_skinEnabled)
- CSkin::RenderToolbarBG(dat, hdcMem, rcClient);
+ RenderToolbarBG(hdcMem, rcClient);
// render info panel fields
- dat->Panel->renderContent(hdcMem);
+ Panel->renderContent(hdcMem);
if (hpb)
CSkin::FinalizeBufferedPaint(hpb, &rcClient);
@@ -1516,125 +1624,114 @@ INT_PTR CALLBACK DlgProcMessage(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM l
DeleteObject(hbm);
DeleteDC(hdcMem);
}
- if (!dat->fLimitedUpdate)
- SetAeroMargins(dat->pContainer);
+ if (!fLimitedUpdate)
+ SetAeroMargins(pContainer);
}
return 1;
- case WM_NCPAINT:
- return 0;
-
- case WM_PAINT:
- // in skinned mode only, draw the background elements for the 2 richedit controls
- // this allows border-less textboxes to appear "skinned" and blended with the background
- PAINTSTRUCT ps;
- BeginPaint(hwndDlg, &ps);
- EndPaint(hwndDlg, &ps);
- return 0;
-
case WM_SIZE:
- if (!IsIconic(hwndDlg)) {
- if (dat->ipFieldHeight == 0)
- dat->ipFieldHeight = CInfoPanel::m_ipConfig.height2;
-
- if (dat->pContainer->uChildMinHeight > 0 && HIWORD(lParam) >= dat->pContainer->uChildMinHeight) {
- if (dat->splitterY > HIWORD(lParam) - DPISCALEY_S(MINLOGHEIGHT)) {
- dat->splitterY = HIWORD(lParam) - DPISCALEY_S(MINLOGHEIGHT);
- dat->dynaSplitter = dat->splitterY - DPISCALEY_S(34);
- DM_RecalcPictureSize(dat);
+ if (!IsIconic(m_hwnd)) {
+ if (ipFieldHeight == 0)
+ ipFieldHeight = CInfoPanel::m_ipConfig.height2;
+
+ if (pContainer->uChildMinHeight > 0 && HIWORD(lParam) >= pContainer->uChildMinHeight) {
+ if (splitterY > HIWORD(lParam) - DPISCALEY_S(MINLOGHEIGHT)) {
+ splitterY = HIWORD(lParam) - DPISCALEY_S(MINLOGHEIGHT);
+ dynaSplitter = splitterY - DPISCALEY_S(34);
+ DM_RecalcPictureSize();
}
- if (dat->splitterY < DPISCALEY_S(MINSPLITTERY))
- LoadSplitter(dat);
+ if (splitterY < DPISCALEY_S(MINSPLITTERY))
+ LoadSplitter();
}
- HBITMAP hbm = ((dat->Panel->isActive()) && m_pContainer->avatarMode != 3) ? dat->hOwnPic : (dat->ace ? dat->ace->hbmPic : PluginConfig.g_hbmUnknown);
+ HBITMAP hbm = ((Panel->isActive()) && pContainer->avatarMode != 3) ? hOwnPic : (ace ? ace->hbmPic : PluginConfig.g_hbmUnknown);
if (hbm != 0) {
BITMAP bminfo;
GetObject(hbm, sizeof(bminfo), &bminfo);
- CalcDynamicAvatarSize(dat, &bminfo);
+ CalcDynamicAvatarSize(&bminfo);
}
- GetClientRect(hwndDlg, &rc);
+ GetClientRect(m_hwnd, &rc);
- Utils_ResizeDialog(hwndDlg, g_hInst, MAKEINTRESOURCEA(IDD_MSGSPLITNEW), MessageDialogResize, (LPARAM)dat);
+ CTabBaseDlg::DlgProc(uMsg, 0, 0); // call basic window resizer
- BB_SetButtonsPos(dat);
+ BB_SetButtonsPos();
// size info panel fields
- if (dat->Panel->isActive()) {
+ if (Panel->isActive()) {
LONG cx = rc.right;
- LONG panelHeight = dat->Panel->getHeight();
+ LONG panelHeight = Panel->getHeight();
- hbm = (m_pContainer->avatarMode == 3) ? dat->hOwnPic : (dat->ace ? dat->ace->hbmPic : PluginConfig.g_hbmUnknown);
+ hbm = (pContainer->avatarMode == 3) ? hOwnPic : (ace ? ace->hbmPic : PluginConfig.g_hbmUnknown);
double dHeight = 0, dWidth = 0;
Utils::scaleAvatarHeightLimited(hbm, dWidth, dHeight, panelHeight - 2);
- dat->iPanelAvatarX = (int)dWidth;
- dat->iPanelAvatarY = (int)dHeight;
+ iPanelAvatarX = (int)dWidth;
+ iPanelAvatarY = (int)dHeight;
rc.top = 1;
- rc.left = cx - dat->iPanelAvatarX;
+ rc.left = cx - iPanelAvatarX;
rc.bottom = panelHeight - (CSkin::m_bAvatarBorderType ? 2 : 0);
rc.right = cx;
- dat->rcPic = rc;
+ rcPic = rc;
- if (dat->bShowInfoAvatar) {
- SetWindowPos(dat->hwndPanelPicParent, HWND_TOP, rc.left - 2, rc.top, rc.right - rc.left, rc.bottom - rc.top + 1, 0);
- ShowWindow(dat->hwndPanelPicParent, (dat->iPanelAvatarX == 0) || !dat->Panel->isActive() ? SW_HIDE : SW_SHOW);
+ if (bShowInfoAvatar) {
+ SetWindowPos(hwndPanelPicParent, HWND_TOP, rc.left - 2, rc.top, rc.right - rc.left, rc.bottom - rc.top + 1, 0);
+ ShowWindow(hwndPanelPicParent, (iPanelAvatarX == 0) || !Panel->isActive() ? SW_HIDE : SW_SHOW);
}
else {
- ShowWindow(dat->hwndPanelPicParent, SW_HIDE);
- dat->iPanelAvatarX = dat->iPanelAvatarY = 0;
+ ShowWindow(hwndPanelPicParent, SW_HIDE);
+ iPanelAvatarX = iPanelAvatarY = 0;
}
- rc.right = cx - dat->iPanelAvatarX;
- rc.left = rc.right - dat->panelStatusCX;
+ rc.right = cx - iPanelAvatarX;
+ rc.left = rc.right - panelStatusCX;
rc.bottom = panelHeight - 3;
- rc.top = rc.bottom - dat->ipFieldHeight;
- dat->rcStatus = rc;
+ rc.top = rc.bottom - ipFieldHeight;
+ rcStatus = rc;
rc.left = CInfoPanel::LEFT_OFFSET_LOGO;
- rc.right = cx - dat->iPanelAvatarX - (panelHeight < CInfoPanel::DEGRADE_THRESHOLD ? (dat->rcStatus.right - dat->rcStatus.left) + 3 : 0);
- rc.bottom = panelHeight - (panelHeight >= CInfoPanel::DEGRADE_THRESHOLD ? dat->ipFieldHeight : 0) - 1;
+ rc.right = cx - iPanelAvatarX - (panelHeight < CInfoPanel::DEGRADE_THRESHOLD ? (rcStatus.right - rcStatus.left) + 3 : 0);
+ rc.bottom = panelHeight - (panelHeight >= CInfoPanel::DEGRADE_THRESHOLD ? ipFieldHeight : 0) - 1;
rc.top = 1;
- dat->rcNick = rc;
+ rcNick = rc;
rc.left = CInfoPanel::LEFT_OFFSET_LOGO;
- rc.right = cx - (dat->iPanelAvatarX + 2) - dat->panelStatusCX;
+ rc.right = cx - (iPanelAvatarX + 2) - panelStatusCX;
rc.bottom = panelHeight - 3;
- rc.top = rc.bottom - dat->ipFieldHeight;
- dat->rcUIN = rc;
+ rc.top = rc.bottom - ipFieldHeight;
+ rcUIN = rc;
- dat->Panel->Invalidate();
+ Panel->Invalidate();
}
- if (GetDlgItem(hwndDlg, IDC_CLIST) != 0) {
+ if (GetDlgItem(m_hwnd, IDC_CLIST) != 0) {
RECT rcLog;
- GetClientRect(hwndDlg, &rcClient);
- GetClientRect(GetDlgItem(hwndDlg, IDC_LOG), &rcLog);
+ GetClientRect(m_hwnd, &rcClient);
+ GetClientRect(m_log.GetHwnd(), &rcLog);
rc.top = 0;
rc.right = rcClient.right;
- rc.left = rcClient.right - dat->multiSplitterX;
+ rc.left = rcClient.right - multiSplitterX;
rc.bottom = rcLog.bottom;
- if (dat->Panel->isActive())
- rc.top += (dat->Panel->getHeight() + 1);
- MoveWindow(GetDlgItem(hwndDlg, IDC_CLIST), rc.left, rc.top, rc.right - rc.left, rcLog.bottom - rcLog.top, FALSE);
+ if (Panel->isActive())
+ rc.top += (Panel->getHeight() + 1);
+ MoveWindow(GetDlgItem(m_hwnd, IDC_CLIST), rc.left, rc.top, rc.right - rc.left, rcLog.bottom - rcLog.top, FALSE);
}
- if (dat->hwndIEView || dat->hwndHPP)
- ResizeIeView(dat);
+ if (hwndIEView || hwndHPP)
+ ResizeIeView();
- DetermineMinHeight(dat);
+ DetermineMinHeight();
}
- break;
+ return 0;
case WM_TIMECHANGE:
- PostMessage(hwndDlg, DM_OPTIONSAPPLIED, 0, 0);
+ PostMessage(m_hwnd, DM_OPTIONSAPPLIED, 0, 0);
break;
case WM_NOTIFY:
- if (dat != 0 && ((NMHDR*)lParam)->hwndFrom == dat->hwndTip) {
+ if (this != 0 && ((NMHDR*)lParam)->hwndFrom == hwndTip) {
if (((NMHDR*)lParam)->code == NM_CLICK)
- SendMessage(dat->hwndTip, TTM_TRACKACTIVATE, FALSE, 0);
+ SendMessage(hwndTip, TTM_TRACKACTIVATE, FALSE, 0);
break;
}
@@ -1648,118 +1745,118 @@ INT_PTR CALLBACK DlgProcMessage(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM l
WPARAM wp = ((MSGFILTER *)lParam)->wParam;
LPARAM lp = ((MSGFILTER *)lParam)->lParam;
CHARFORMAT2 cf2;
- BOOL isCtrl, isShift, isAlt;
- KbdState(dat, isShift, isCtrl, isAlt);
+ bool isCtrl, isShift, isAlt;
+ KbdState(isShift, isCtrl, isAlt);
MSG message;
- message.hwnd = hwndDlg;
+ message.hwnd = m_hwnd;
message.message = msg;
message.lParam = lp;
message.wParam = wp;
if (msg == WM_SYSKEYUP) {
if (wp == VK_MENU)
- if (!dat->fkeyProcessed && !(GetKeyState(VK_CONTROL) & 0x8000) && !(GetKeyState(VK_SHIFT) & 0x8000) && !(lp & (1 << 24)))
- m_pContainer->MenuBar->autoShow();
+ if (!fkeyProcessed && !(GetKeyState(VK_CONTROL) & 0x8000) && !(GetKeyState(VK_SHIFT) & 0x8000) && !(lp & (1 << 24)))
+ pContainer->MenuBar->autoShow();
- return _dlgReturn(hwndDlg, 0);
+ return _dlgReturn(m_hwnd, 0);
}
if ((msg == WM_KEYDOWN || msg == WM_SYSKEYDOWN) && !(GetKeyState(VK_RMENU) & 0x8000)) {
LRESULT mim_hotkey_check = CallService(MS_HOTKEY_CHECK, (WPARAM)&message, (LPARAM)TABSRMM_HK_SECTION_IM);
if (mim_hotkey_check)
- dat->fkeyProcessed = true;
+ fkeyProcessed = true;
switch (mim_hotkey_check) {
case TABSRMM_HK_SETUSERPREFS:
- CallService(MS_TABMSG_SETUSERPREFS, dat->hContact, 0);
- return _dlgReturn(hwndDlg, 1);
+ CallService(MS_TABMSG_SETUSERPREFS, m_hContact, 0);
+ return _dlgReturn(m_hwnd, 1);
case TABSRMM_HK_NUDGE:
- SendNudge(dat);
- return _dlgReturn(hwndDlg, 1);
+ SendNudge();
+ return _dlgReturn(m_hwnd, 1);
case TABSRMM_HK_SENDFILE:
- CallService(MS_FILE_SENDFILE, dat->hContact, 0);
- return _dlgReturn(hwndDlg, 1);
+ CallService(MS_FILE_SENDFILE, m_hContact, 0);
+ return _dlgReturn(m_hwnd, 1);
case TABSRMM_HK_QUOTEMSG:
- SendMessage(hwndDlg, WM_COMMAND, IDC_QUOTE, 0);
- return _dlgReturn(hwndDlg, 1);
+ SendMessage(m_hwnd, WM_COMMAND, IDC_QUOTE, 0);
+ return _dlgReturn(m_hwnd, 1);
case TABSRMM_HK_USERMENU:
- SendMessage(hwndDlg, WM_COMMAND, IDC_PROTOCOL, 0);
- return _dlgReturn(hwndDlg, 1);
+ SendMessage(m_hwnd, WM_COMMAND, IDC_PROTOCOL, 0);
+ return _dlgReturn(m_hwnd, 1);
case TABSRMM_HK_SENDMENU:
- SendMessage(hwndDlg, WM_COMMAND, IDC_SENDMENU, IDC_SENDMENU);
- return _dlgReturn(hwndDlg, 1);
+ SendMessage(m_hwnd, WM_COMMAND, IDC_SENDMENU, IDC_SENDMENU);
+ return _dlgReturn(m_hwnd, 1);
case TABSRMM_HK_PROTOMENU:
- SendMessage(hwndDlg, WM_COMMAND, IDC_PROTOMENU, IDC_PROTOMENU);
- return _dlgReturn(hwndDlg, 1);
+ SendMessage(m_hwnd, WM_COMMAND, IDC_PROTOMENU, IDC_PROTOMENU);
+ return _dlgReturn(m_hwnd, 1);
case TABSRMM_HK_USERDETAILS:
- SendMessage(hwndDlg, WM_COMMAND, MAKELONG(IDC_NAME, BN_CLICKED), 0);
- return _dlgReturn(hwndDlg, 1);
+ SendMessage(m_hwnd, WM_COMMAND, MAKELONG(IDC_NAME, BN_CLICKED), 0);
+ return _dlgReturn(m_hwnd, 1);
case TABSRMM_HK_EDITNOTES:
- PostMessage(hwndDlg, WM_COMMAND, MAKELONG(IDC_PIC, BN_CLICKED), 0);
- return _dlgReturn(hwndDlg, 1);
+ PostMessage(m_hwnd, WM_COMMAND, MAKELONG(IDC_PIC, BN_CLICKED), 0);
+ return _dlgReturn(m_hwnd, 1);
case TABSRMM_HK_TOGGLESENDLATER:
if (sendLater->isAvail()) {
- dat->sendMode ^= SMODE_SENDLATER;
- SetWindowPos(GetDlgItem(hwndDlg, IDC_MESSAGE), 0, 0, 0, 0, 0, SWP_DRAWFRAME | SWP_FRAMECHANGED | SWP_NOZORDER |
+ sendMode ^= SMODE_SENDLATER;
+ SetWindowPos(m_message.GetHwnd(), 0, 0, 0, 0, 0, SWP_DRAWFRAME | SWP_FRAMECHANGED | SWP_NOZORDER |
SWP_NOMOVE | SWP_NOSIZE | SWP_NOCOPYBITS);
- RedrawWindow(hwndDlg, 0, 0, RDW_INVALIDATE | RDW_ERASE | RDW_UPDATENOW | RDW_ALLCHILDREN);
+ RedrawWindow(m_hwnd, 0, 0, RDW_INVALIDATE | RDW_ERASE | RDW_UPDATENOW | RDW_ALLCHILDREN);
}
else
CWarning::show(CWarning::WARN_NO_SENDLATER, MB_OK | MB_ICONINFORMATION, TranslateT("Configuration issue|The unattended send feature is disabled. The \\b1 send later\\b0 and \\b1 send to multiple contacts\\b0 features depend on it.\n\nYou must enable it under \\b1Options -> Message sessions -> Advanced tweaks\\b0. Changing this option requires a restart."));
- return _dlgReturn(hwndDlg, 1);
+ return _dlgReturn(m_hwnd, 1);
case TABSRMM_HK_TOGGLERTL:
- dat->dwFlags ^= MWF_LOG_RTL;
+ dwFlags ^= MWF_LOG_RTL;
{
DWORD dwGlobal = M.GetDword("mwflags", MWF_LOG_DEFAULT);
- DWORD dwMask = M.GetDword(dat->hContact, "mwmask", 0);
- DWORD dwFlags = M.GetDword(dat->hContact, "mwflags", 0);
+ DWORD dwMask = M.GetDword(m_hContact, "mwmask", 0);
+ DWORD dwFlags = M.GetDword(m_hContact, "mwflags", 0);
- if ((dwGlobal & MWF_LOG_RTL) != (dat->dwFlags & MWF_LOG_RTL)) {
+ if ((dwGlobal & MWF_LOG_RTL) != (dwFlags & MWF_LOG_RTL)) {
dwMask |= MWF_LOG_RTL;
- dwFlags |= (dat->dwFlags & MWF_LOG_RTL);
+ dwFlags |= (dwFlags & MWF_LOG_RTL);
}
else {
dwMask &= ~MWF_LOG_RTL;
dwFlags &= ~MWF_LOG_RTL;
}
if (dwMask) {
- db_set_dw(dat->hContact, SRMSGMOD_T, "mwmask", dwMask);
- db_set_dw(dat->hContact, SRMSGMOD_T, "mwflags", dwFlags);
+ db_set_dw(m_hContact, SRMSGMOD_T, "mwmask", dwMask);
+ db_set_dw(m_hContact, SRMSGMOD_T, "mwflags", dwFlags);
}
else {
- db_unset(dat->hContact, SRMSGMOD_T, "mwmask");
- db_unset(dat->hContact, SRMSGMOD_T, "mwflags");
+ db_unset(m_hContact, SRMSGMOD_T, "mwmask");
+ db_unset(m_hContact, SRMSGMOD_T, "mwflags");
}
- SendMessage(hwndDlg, DM_OPTIONSAPPLIED, 0, 0);
- SendMessage(hwndDlg, DM_DEFERREDREMAKELOG, (WPARAM)hwndDlg, 0);
+ SendMessage(m_hwnd, DM_OPTIONSAPPLIED, 0, 0);
+ SendMessage(m_hwnd, DM_DEFERREDREMAKELOG, (WPARAM)m_hwnd, 0);
}
- return _dlgReturn(hwndDlg, 1);
+ return _dlgReturn(m_hwnd, 1);
case TABSRMM_HK_TOGGLEMULTISEND:
- dat->sendMode ^= SMODE_MULTIPLE;
- if (dat->sendMode & SMODE_MULTIPLE)
- DM_CreateClist(dat);
- else if (IsWindow(GetDlgItem(hwndDlg, IDC_CLIST)))
- DestroyWindow(GetDlgItem(hwndDlg, IDC_CLIST));
+ sendMode ^= SMODE_MULTIPLE;
+ if (sendMode & SMODE_MULTIPLE)
+ DM_CreateClist();
+ else if (IsWindow(GetDlgItem(m_hwnd, IDC_CLIST)))
+ DestroyWindow(GetDlgItem(m_hwnd, IDC_CLIST));
- HWND hwndEdit = GetDlgItem(hwndDlg, IDC_MESSAGE);
+ HWND hwndEdit = m_message.GetHwnd();
SetWindowPos(hwndEdit, 0, 0, 0, 0, 0, SWP_FRAMECHANGED | SWP_NOSIZE | SWP_NOMOVE);
- SendMessage(hwndDlg, WM_SIZE, 0, 0);
+ SendMessage(m_hwnd, WM_SIZE, 0, 0);
RedrawWindow(hwndEdit, NULL, NULL, RDW_INVALIDATE | RDW_FRAME | RDW_UPDATENOW | RDW_ERASE);
- DM_ScrollToBottom(dat, 0, 0);
- Utils::showDlgControl(hwndDlg, IDC_MULTISPLITTER, (dat->sendMode & SMODE_MULTIPLE) ? SW_SHOW : SW_HIDE);
- Utils::showDlgControl(hwndDlg, IDC_CLIST, (dat->sendMode & SMODE_MULTIPLE) ? SW_SHOW : SW_HIDE);
- if (dat->sendMode & SMODE_MULTIPLE)
- SetFocus(GetDlgItem(hwndDlg, IDC_CLIST));
+ DM_ScrollToBottom(this, 0, 0);
+ Utils::showDlgControl(m_hwnd, IDC_MULTISPLITTER, (sendMode & SMODE_MULTIPLE) ? SW_SHOW : SW_HIDE);
+ Utils::showDlgControl(m_hwnd, IDC_CLIST, (sendMode & SMODE_MULTIPLE) ? SW_SHOW : SW_HIDE);
+ if (sendMode & SMODE_MULTIPLE)
+ SetFocus(GetDlgItem(m_hwnd, IDC_CLIST));
else
- SetFocus(GetDlgItem(hwndDlg, IDC_MESSAGE));
- RedrawWindow(hwndDlg, 0, 0, RDW_INVALIDATE | RDW_ERASE | RDW_UPDATENOW | RDW_ALLCHILDREN);
- return _dlgReturn(hwndDlg, 1);
+ SetFocus(m_message.GetHwnd());
+ RedrawWindow(m_hwnd, 0, 0, RDW_INVALIDATE | RDW_ERASE | RDW_UPDATENOW | RDW_ALLCHILDREN);
+ return _dlgReturn(m_hwnd, 1);
}
- if (DM_GenericHotkeysCheck(&message, dat)) {
- dat->fkeyProcessed = true;
- return _dlgReturn(hwndDlg, 1);
+ if (DM_GenericHotkeysCheck(&message, this)) {
+ fkeyProcessed = true;
+ return _dlgReturn(m_hwnd, 1);
}
}
if (wp == VK_BROWSER_BACK || wp == VK_BROWSER_FORWARD)
@@ -1769,10 +1866,10 @@ INT_PTR CALLBACK DlgProcMessage(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM l
if (isCtrl && !isShift && !isAlt) {
switch (wp) {
case 23: // ctrl - w
- PostMessage(hwndDlg, WM_CLOSE, 1, 0);
+ PostMessage(m_hwnd, WM_CLOSE, 1, 0);
break;
case 20: // ctrl - t
- PostMessage(hwndDlg, WM_COMMAND, IDC_TOGGLETOOLBAR, 1);
+ PostMessage(m_hwnd, WM_COMMAND, IDC_TOGGLETOOLBAR, 1);
break;
}
return 1;
@@ -1780,112 +1877,112 @@ INT_PTR CALLBACK DlgProcMessage(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM l
}
if (msg == WM_KEYDOWN) {
if ((wp == VK_INSERT && isShift && !isCtrl) || (wp == 'V' && isCtrl && !isShift && !isAlt)) {
- SendDlgItemMessage(hwndDlg, IDC_MESSAGE, EM_PASTESPECIAL, CF_UNICODETEXT, 0);
+ m_message.SendMsg(EM_PASTESPECIAL, CF_UNICODETEXT, 0);
_clrMsgFilter(lParam);
- return _dlgReturn(hwndDlg, 1);
+ return _dlgReturn(m_hwnd, 1);
}
if (isCtrl && isShift) {
if (wp == 0x9) { // ctrl-shift tab
- SendMessage(hwndDlg, DM_SELECTTAB, DM_SELECT_PREV, 0);
+ SendMessage(m_hwnd, DM_SELECTTAB, DM_SELECT_PREV, 0);
_clrMsgFilter(lParam);
- return _dlgReturn(hwndDlg, 1);
+ return _dlgReturn(m_hwnd, 1);
}
}
if (isCtrl && !isShift && !isAlt) {
if (wp == VK_TAB) {
- SendMessage(hwndDlg, DM_SELECTTAB, DM_SELECT_NEXT, 0);
+ SendMessage(m_hwnd, DM_SELECTTAB, DM_SELECT_NEXT, 0);
_clrMsgFilter(lParam);
- return _dlgReturn(hwndDlg, 1);
+ return _dlgReturn(m_hwnd, 1);
}
if (wp == VK_F4) {
- PostMessage(hwndDlg, WM_CLOSE, 1, 0);
- return _dlgReturn(hwndDlg, 1);
+ PostMessage(m_hwnd, WM_CLOSE, 1, 0);
+ return _dlgReturn(m_hwnd, 1);
}
if (wp == VK_PRIOR) {
- SendMessage(hwndDlg, DM_SELECTTAB, DM_SELECT_PREV, 0);
- return _dlgReturn(hwndDlg, 1);
+ SendMessage(m_hwnd, DM_SELECTTAB, DM_SELECT_PREV, 0);
+ return _dlgReturn(m_hwnd, 1);
}
if (wp == VK_NEXT) {
- SendMessage(hwndDlg, DM_SELECTTAB, DM_SELECT_NEXT, 0);
- return _dlgReturn(hwndDlg, 1);
+ SendMessage(m_hwnd, DM_SELECTTAB, DM_SELECT_NEXT, 0);
+ return _dlgReturn(m_hwnd, 1);
}
}
}
if (msg == WM_SYSKEYDOWN && isAlt) {
if (wp == 0x52) {
- SendMessage(hwndDlg, DM_QUERYPENDING, DM_QUERY_MOSTRECENT, 0);
- return _dlgReturn(hwndDlg, 1);
+ SendMessage(m_hwnd, DM_QUERYPENDING, DM_QUERY_MOSTRECENT, 0);
+ return _dlgReturn(m_hwnd, 1);
}
if (wp == VK_MULTIPLY) {
- SetFocus(GetDlgItem(hwndDlg, IDC_MESSAGE));
- return _dlgReturn(hwndDlg, 1);
+ SetFocus(m_message.GetHwnd());
+ return _dlgReturn(m_hwnd, 1);
}
if (wp == VK_DIVIDE) {
- SetFocus(GetDlgItem(hwndDlg, IDC_LOG));
- return _dlgReturn(hwndDlg, 1);
+ SetFocus(m_log.GetHwnd());
+ return _dlgReturn(m_hwnd, 1);
}
if (wp == VK_ADD) {
- SendMessage(hwndContainer, DM_SELECTTAB, DM_SELECT_NEXT, 0);
- return _dlgReturn(hwndDlg, 1);
+ SendMessage(pContainer->hwnd, DM_SELECTTAB, DM_SELECT_NEXT, 0);
+ return _dlgReturn(m_hwnd, 1);
}
if (wp == VK_SUBTRACT) {
- SendMessage(hwndContainer, DM_SELECTTAB, DM_SELECT_PREV, 0);
- return _dlgReturn(hwndDlg, 1);
+ SendMessage(pContainer->hwnd, DM_SELECTTAB, DM_SELECT_PREV, 0);
+ return _dlgReturn(m_hwnd, 1);
}
}
if (msg == WM_KEYDOWN && wp == VK_F12) {
if (isShift || isCtrl || isAlt)
- return _dlgReturn(hwndDlg, 1);
- if (dat->dwFlagsEx & MWF_SHOW_SCROLLINGDISABLED)
- SendMessage(hwndDlg, DM_REPLAYQUEUE, 0, 0);
- dat->dwFlagsEx ^= MWF_SHOW_SCROLLINGDISABLED;
- Utils::showDlgControl(hwndDlg, IDC_LOGFROZENTEXT, (dat->bNotOnList || dat->dwFlagsEx & MWF_SHOW_SCROLLINGDISABLED) ? SW_SHOW : SW_HIDE);
- if (!(dat->dwFlagsEx & MWF_SHOW_SCROLLINGDISABLED))
- SetDlgItemText(hwndDlg, IDC_LOGFROZENTEXT, TranslateT("Contact not on list. You may add it..."));
+ return _dlgReturn(m_hwnd, 1);
+ if (dwFlagsEx & MWF_SHOW_SCROLLINGDISABLED)
+ SendMessage(m_hwnd, DM_REPLAYQUEUE, 0, 0);
+ dwFlagsEx ^= MWF_SHOW_SCROLLINGDISABLED;
+ Utils::showDlgControl(m_hwnd, IDC_LOGFROZENTEXT, (bNotOnList || dwFlagsEx & MWF_SHOW_SCROLLINGDISABLED) ? SW_SHOW : SW_HIDE);
+ if (!(dwFlagsEx & MWF_SHOW_SCROLLINGDISABLED))
+ SetDlgItemText(m_hwnd, IDC_LOGFROZENTEXT, TranslateT("Contact not on list. You may add it..."));
else
- SetDlgItemText(hwndDlg, IDC_LOGFROZENTEXT, TranslateT("Auto scrolling is disabled (press F12 to enable it)"));
- SendMessage(hwndDlg, WM_SIZE, 0, 0);
- DM_ScrollToBottom(dat, 1, 1);
- return _dlgReturn(hwndDlg, 1);
+ SetDlgItemText(m_hwnd, IDC_LOGFROZENTEXT, TranslateT("Auto scrolling is disabled (press F12 to enable it)"));
+ SendMessage(m_hwnd, WM_SIZE, 0, 0);
+ DM_ScrollToBottom(this, 1, 1);
+ return _dlgReturn(m_hwnd, 1);
}
// tabulation mod
if (msg == WM_KEYDOWN && wp == VK_TAB) {
if (PluginConfig.m_bAllowTab) {
if (((NMHDR*)lParam)->idFrom == IDC_MESSAGE)
- SendDlgItemMessage(hwndDlg, IDC_MESSAGE, EM_REPLACESEL, FALSE, (LPARAM)"\t");
+ m_message.SendMsg(EM_REPLACESEL, FALSE, (LPARAM)"\t");
_clrMsgFilter(lParam);
if (((NMHDR*)lParam)->idFrom != IDC_MESSAGE)
- SetFocus(GetDlgItem(hwndDlg, IDC_MESSAGE));
- return _dlgReturn(hwndDlg, 1);
+ SetFocus(m_message.GetHwnd());
+ return _dlgReturn(m_hwnd, 1);
}
else {
if (((NMHDR*)lParam)->idFrom == IDC_MESSAGE) {
- if (GetSendButtonState(hwndDlg) != PBS_DISABLED && !(dat->pContainer->dwFlags & CNT_HIDETOOLBAR))
- SetFocus(GetDlgItem(hwndDlg, IDOK));
+ if (GetSendButtonState(m_hwnd) != PBS_DISABLED && !(pContainer->dwFlags & CNT_HIDETOOLBAR))
+ SetFocus(GetDlgItem(m_hwnd, IDOK));
else
- SetFocus(GetDlgItem(hwndDlg, IDC_LOG));
- return _dlgReturn(hwndDlg, 1);
+ SetFocus(m_log.GetHwnd());
+ return _dlgReturn(m_hwnd, 1);
}
if (((NMHDR*)lParam)->idFrom == IDC_LOG) {
- SetFocus(GetDlgItem(hwndDlg, IDC_MESSAGE));
- return _dlgReturn(hwndDlg, 1);
+ SetFocus(m_message.GetHwnd());
+ return _dlgReturn(m_hwnd, 1);
}
}
- return _dlgReturn(hwndDlg, 0);
+ return _dlgReturn(m_hwnd, 0);
}
if (msg == WM_MOUSEWHEEL && (((NMHDR*)lParam)->idFrom == IDC_LOG || ((NMHDR*)lParam)->idFrom == IDC_MESSAGE)) {
GetCursorPos(&pt);
- GetWindowRect(GetDlgItem(hwndDlg, IDC_LOG), &rc);
+ GetWindowRect(m_log.GetHwnd(), &rc);
if (PtInRect(&rc, pt)) {
short wDirection = (short)HIWORD(wp);
if (LOWORD(wp) & MK_SHIFT) {
if (wDirection < 0)
- SendDlgItemMessage(hwndDlg, IDC_LOG, WM_VSCROLL, MAKEWPARAM(SB_PAGEDOWN, 0), 0);
+ m_log.SendMsg(WM_VSCROLL, MAKEWPARAM(SB_PAGEDOWN, 0), 0);
else if (wDirection > 0)
- SendDlgItemMessage(hwndDlg, IDC_LOG, WM_VSCROLL, MAKEWPARAM(SB_PAGEUP, 0), 0);
+ m_log.SendMsg(WM_VSCROLL, MAKEWPARAM(SB_PAGEUP, 0), 0);
return 0;
}
return 0;
@@ -1895,56 +1992,56 @@ INT_PTR CALLBACK DlgProcMessage(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM l
if (msg == WM_CHAR && wp == 'c') {
if (isCtrl) {
- SendDlgItemMessage(hwndDlg, ((NMHDR*)lParam)->code, WM_COPY, 0, 0);
+ SendDlgItemMessage(m_hwnd, ((NMHDR*)lParam)->code, WM_COPY, 0, 0);
break;
}
}
if ((msg == WM_LBUTTONDOWN || msg == WM_KEYUP || msg == WM_LBUTTONUP) && ((NMHDR*)lParam)->idFrom == IDC_MESSAGE) {
- int bBold = IsDlgButtonChecked(hwndDlg, IDC_FONTBOLD);
- int bItalic = IsDlgButtonChecked(hwndDlg, IDC_FONTITALIC);
- int bUnder = IsDlgButtonChecked(hwndDlg, IDC_FONTUNDERLINE);
- int bStrikeout = IsDlgButtonChecked(hwndDlg, IDC_FONTSTRIKEOUT);
+ int bBold = IsDlgButtonChecked(m_hwnd, IDC_FONTBOLD);
+ int bItalic = IsDlgButtonChecked(m_hwnd, IDC_FONTITALIC);
+ int bUnder = IsDlgButtonChecked(m_hwnd, IDC_FONTUNDERLINE);
+ int bStrikeout = IsDlgButtonChecked(m_hwnd, IDC_FONTSTRIKEOUT);
cf2.cbSize = sizeof(CHARFORMAT2);
cf2.dwMask = CFM_BOLD | CFM_ITALIC | CFM_UNDERLINE | CFM_UNDERLINETYPE | CFM_STRIKEOUT;
cf2.dwEffects = 0;
- SendDlgItemMessage(hwndDlg, IDC_MESSAGE, EM_GETCHARFORMAT, SCF_SELECTION, (LPARAM)&cf2);
+ m_message.SendMsg(EM_GETCHARFORMAT, SCF_SELECTION, (LPARAM)&cf2);
if (cf2.dwEffects & CFE_BOLD) {
if (bBold == BST_UNCHECKED)
- CheckDlgButton(hwndDlg, IDC_FONTBOLD, BST_CHECKED);
+ CheckDlgButton(m_hwnd, IDC_FONTBOLD, BST_CHECKED);
}
else if (bBold == BST_CHECKED)
- CheckDlgButton(hwndDlg, IDC_FONTBOLD, BST_UNCHECKED);
+ CheckDlgButton(m_hwnd, IDC_FONTBOLD, BST_UNCHECKED);
if (cf2.dwEffects & CFE_ITALIC) {
if (bItalic == BST_UNCHECKED)
- CheckDlgButton(hwndDlg, IDC_FONTITALIC, BST_CHECKED);
+ CheckDlgButton(m_hwnd, IDC_FONTITALIC, BST_CHECKED);
}
else if (bItalic == BST_CHECKED)
- CheckDlgButton(hwndDlg, IDC_FONTITALIC, BST_UNCHECKED);
+ CheckDlgButton(m_hwnd, IDC_FONTITALIC, BST_UNCHECKED);
if (cf2.dwEffects & CFE_UNDERLINE && (cf2.bUnderlineType & CFU_UNDERLINE || cf2.bUnderlineType & CFU_UNDERLINEWORD)) {
if (bUnder == BST_UNCHECKED)
- CheckDlgButton(hwndDlg, IDC_FONTUNDERLINE, BST_CHECKED);
+ CheckDlgButton(m_hwnd, IDC_FONTUNDERLINE, BST_CHECKED);
}
else if (bUnder == BST_CHECKED)
- CheckDlgButton(hwndDlg, IDC_FONTUNDERLINE, BST_UNCHECKED);
+ CheckDlgButton(m_hwnd, IDC_FONTUNDERLINE, BST_UNCHECKED);
if (cf2.dwEffects & CFE_STRIKEOUT) {
if (bStrikeout == BST_UNCHECKED)
- CheckDlgButton(hwndDlg, IDC_FONTSTRIKEOUT, BST_CHECKED);
+ CheckDlgButton(m_hwnd, IDC_FONTSTRIKEOUT, BST_CHECKED);
}
else if (bStrikeout == BST_CHECKED)
- CheckDlgButton(hwndDlg, IDC_FONTSTRIKEOUT, BST_UNCHECKED);
+ CheckDlgButton(m_hwnd, IDC_FONTSTRIKEOUT, BST_UNCHECKED);
}
switch (msg) {
case WM_LBUTTONDOWN:
{
HCURSOR hCur = GetCursor();
- m_pContainer->MenuBar->Cancel();
+ pContainer->MenuBar->Cancel();
if (hCur == LoadCursor(NULL, IDC_SIZENS) || hCur == LoadCursor(NULL, IDC_SIZEWE)
|| hCur == LoadCursor(NULL, IDC_SIZENESW) || hCur == LoadCursor(NULL, IDC_SIZENWSE)) {
- SetWindowLongPtr(hwndDlg, DWLP_MSGRESULT, TRUE);
+ SetWindowLongPtr(m_hwnd, DWLP_MSGRESULT, TRUE);
return TRUE;
}
}
@@ -1958,7 +2055,7 @@ INT_PTR CALLBACK DlgProcMessage(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM l
case WM_LBUTTONUP:
if (((NMHDR*)lParam)->idFrom == IDC_LOG && M.GetByte("autocopy", 1)) {
CHARRANGE cr;
- SendDlgItemMessage(hwndDlg, IDC_LOG, EM_EXGETSEL, 0, (LPARAM)&cr);
+ m_log.SendMsg(EM_EXGETSEL, 0, (LPARAM)&cr);
if (cr.cpMax == cr.cpMin)
break;
cr.cpMin = cr.cpMax;
@@ -1966,32 +2063,32 @@ INT_PTR CALLBACK DlgProcMessage(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM l
SETTEXTEX stx = { ST_KEEPUNDO | ST_SELECTION, CP_UTF8 };
char *streamOut = NULL;
if (isAlt)
- streamOut = Message_GetFromStream(GetDlgItem(hwndDlg, IDC_LOG), SF_RTFNOOBJS | SFF_PLAINRTF | SFF_SELECTION);
+ streamOut = Message_GetFromStream(m_log.GetHwnd(), SF_RTFNOOBJS | SFF_PLAINRTF | SFF_SELECTION);
else
- streamOut = Message_GetFromStream(GetDlgItem(hwndDlg, IDC_LOG), SF_TEXT | SFF_SELECTION);
+ streamOut = Message_GetFromStream(m_log.GetHwnd(), SF_TEXT | SFF_SELECTION);
if (streamOut) {
Utils::FilterEventMarkers(streamOut);
- SendDlgItemMessage(hwndDlg, IDC_MESSAGE, EM_SETTEXTEX, (WPARAM)&stx, (LPARAM)streamOut);
+ m_message.SendMsg(EM_SETTEXTEX, (WPARAM)&stx, (LPARAM)streamOut);
mir_free(streamOut);
}
- SetFocus(GetDlgItem(hwndDlg, IDC_MESSAGE));
+ SetFocus(m_message.GetHwnd());
}
else if (!isShift) {
- SendDlgItemMessage(hwndDlg, IDC_LOG, WM_COPY, 0, 0);
- SetFocus(GetDlgItem(hwndDlg, IDC_MESSAGE));
- if (m_pContainer->hwndStatus)
- SendMessage(m_pContainer->hwndStatus, SB_SETTEXT, 0, (LPARAM)TranslateT("Selection copied to clipboard"));
+ m_log.SendMsg(WM_COPY, 0, 0);
+ SetFocus(m_message.GetHwnd());
+ if (pContainer->hwndStatus)
+ SendMessage(pContainer->hwndStatus, SB_SETTEXT, 0, (LPARAM)TranslateT("Selection copied to clipboard"));
}
}
break;
case WM_RBUTTONUP:
- return _dlgReturn(hwndDlg, 1);
+ return _dlgReturn(m_hwnd, 1);
case WM_MOUSEMOVE:
GetCursorPos(&pt);
- DM_DismissTip(dat, pt);
- dat->Panel->trackMouse(pt);
+ DM_DismissTip(this, pt);
+ Panel->trackMouse(pt);
HCURSOR hCur = GetCursor();
if (hCur == LoadCursor(NULL, IDC_SIZENS) || hCur == LoadCursor(NULL, IDC_SIZEWE) || hCur == LoadCursor(NULL, IDC_SIZENESW) || hCur == LoadCursor(NULL, IDC_SIZENWSE))
@@ -2002,146 +2099,103 @@ INT_PTR CALLBACK DlgProcMessage(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM l
break;
case EN_REQUESTRESIZE:
- DM_HandleAutoSizeRequest(dat, (REQRESIZE *)lParam);
+ DM_HandleAutoSizeRequest(this, (REQRESIZE *)lParam);
break;
-
- case EN_LINK:
- ENLINK *pLink = (ENLINK*)lParam;
- switch (pLink->msg) {
- case WM_SETCURSOR:
- SetCursor(PluginConfig.hCurHyperlinkHand);
- SetWindowLongPtr(hwndDlg, DWLP_MSGRESULT, TRUE);
- return TRUE;
-
- case WM_RBUTTONDOWN:
- case WM_LBUTTONUP:
- ptrW tszUrl(Utils::extractURLFromRichEdit((ENLINK*)lParam, GetDlgItem(hwndDlg, IDC_LOG)));
- if (!IsStringValidLink(tszUrl))
- break;
-
- if (pLink->msg != WM_RBUTTONDOWN) {
- Utils_OpenUrlW(tszUrl);
- SetFocus(GetDlgItem(hwndDlg, IDC_MESSAGE));
- break;
- }
- HMENU hMenu = LoadMenu(g_hInst, MAKEINTRESOURCE(IDR_CONTEXT));
- HMENU hSubMenu = GetSubMenu(hMenu, 1);
- TranslateMenu(hSubMenu);
- pt.x = (short)LOWORD(pLink->lParam);
- pt.y = (short)HIWORD(pLink->lParam);
- ClientToScreen(((NMHDR*)lParam)->hwndFrom, &pt);
- switch (TrackPopupMenu(hSubMenu, TPM_RETURNCMD, pt.x, pt.y, 0, hwndDlg, NULL)) {
- case IDM_OPENNEW:
- Utils_OpenUrlW(tszUrl);
- break;
-
- case IDM_OPENEXISTING:
- Utils_OpenUrlW(tszUrl, false);
- break;
-
- case IDM_COPYLINK:
- Utils::CopyToClipBoard(tszUrl, hwndDlg);
- break;
- }
- DestroyMenu(hMenu);
- SetWindowLongPtr(hwndDlg, DWLP_MSGRESULT, TRUE);
- return TRUE;
- }
}
}
break;
case DM_TYPING:
{
- int preTyping = dat->nTypeSecs != 0;
- dat->nTypeSecs = (int)lParam > 0 ? (int)lParam : 0;
+ int preTyping = nTypeSecs != 0;
+ nTypeSecs = (int)lParam > 0 ? (int)lParam : 0;
- if (dat->nTypeSecs)
- dat->bShowTyping = 0;
+ if (nTypeSecs)
+ bShowTyping = 0;
- SetWindowLongPtr(hwndDlg, DWLP_MSGRESULT, preTyping);
+ SetWindowLongPtr(m_hwnd, DWLP_MSGRESULT, preTyping);
}
return TRUE;
case DM_UPDATEWINICON:
- if (dat->hXStatusIcon) {
- DestroyIcon(dat->hXStatusIcon);
- dat->hXStatusIcon = 0;
+ if (hXStatusIcon) {
+ DestroyIcon(hXStatusIcon);
+ hXStatusIcon = 0;
}
- if (LPCSTR szProto = dat->cache->getProto()) {
- dat->hTabIcon = dat->hTabStatusIcon = MY_GetContactIcon(dat, "MetaiconTab");
+ if (LPCSTR szProto = cache->getProto()) {
+ hTabIcon = hTabStatusIcon = GetMyContactIcon("MetaiconTab");
if (M.GetByte("use_xicons", 1))
- dat->hXStatusIcon = GetXStatusIcon(dat);
+ hXStatusIcon = GetXStatusIcon();
- SendDlgItemMessage(hwndDlg, IDC_PROTOCOL, BUTTONSETASDIMMED, (dat->dwFlagsEx & MWF_SHOW_ISIDLE) != 0, 0);
- SendDlgItemMessage(hwndDlg, IDC_PROTOCOL, BM_SETIMAGE, IMAGE_ICON, (LPARAM)(dat->hXStatusIcon ? dat->hXStatusIcon : MY_GetContactIcon(dat, "MetaiconBar")));
+ SendDlgItemMessage(m_hwnd, IDC_PROTOCOL, BUTTONSETASDIMMED, (dwFlagsEx & MWF_SHOW_ISIDLE) != 0, 0);
+ SendDlgItemMessage(m_hwnd, IDC_PROTOCOL, BM_SETIMAGE, IMAGE_ICON, (LPARAM)(hXStatusIcon ? hXStatusIcon : GetMyContactIcon("MetaiconBar")));
- if (m_pContainer->hwndActive == hwndDlg)
- SendMessage(m_pContainer->hwnd, DM_SETICON, (WPARAM)dat, (LPARAM)(dat->hXStatusIcon ? dat->hXStatusIcon : dat->hTabIcon));
+ if (pContainer->hwndActive == m_hwnd)
+ SendMessage(pContainer->hwnd, DM_SETICON, (WPARAM)this, (LPARAM)(hXStatusIcon ? hXStatusIcon : hTabIcon));
- if (dat->pWnd)
- dat->pWnd->updateIcon(dat->hXStatusIcon ? dat->hXStatusIcon : dat->hTabIcon);
+ if (pWnd)
+ pWnd->updateIcon(hXStatusIcon ? hXStatusIcon : hTabIcon);
}
return 0;
// configures the toolbar only... if lParam != 0, then it also calls
// SetDialogToType() to reconfigure the message window
case DM_CONFIGURETOOLBAR:
- dat->bShowUIElements = m_pContainer->dwFlags & CNT_HIDETOOLBAR ? 0 : 1;
+ bShowUIElements = pContainer->dwFlags & CNT_HIDETOOLBAR ? 0 : 1;
- SetWindowLongPtr(GetDlgItem(hwndDlg, IDC_SPLITTER), GWL_EXSTYLE, GetWindowLongPtr(GetDlgItem(hwndDlg, IDC_SPLITTER), GWL_EXSTYLE) & ~WS_EX_STATICEDGE);
+ SetWindowLongPtr(GetDlgItem(m_hwnd, IDC_SPLITTER), GWL_EXSTYLE, GetWindowLongPtr(GetDlgItem(m_hwnd, IDC_SPLITTER), GWL_EXSTYLE) & ~WS_EX_STATICEDGE);
if (lParam == 1) {
- GetSendFormat(dat);
- SetDialogToType(hwndDlg);
+ GetSendFormat();
+ SetDialogToType(m_hwnd);
}
if (lParam == 1) {
- DM_RecalcPictureSize(dat);
- SendMessage(hwndDlg, WM_SIZE, 0, 0);
- DM_ScrollToBottom(dat, 0, 1);
+ DM_RecalcPictureSize();
+ SendMessage(m_hwnd, WM_SIZE, 0, 0);
+ DM_ScrollToBottom(this, 0, 1);
}
return 0;
case WM_CBD_LOADICONS:
for (int i = 0; i < _countof(buttonicons); i++) {
- SendDlgItemMessage(hwndDlg, buttonicons[i].id, BM_SETIMAGE, IMAGE_ICON, (LPARAM)*buttonicons[i].pIcon);
- SendDlgItemMessage(hwndDlg, buttonicons[i].id, BUTTONSETCONTAINER, (LPARAM)m_pContainer, 0);
+ SendDlgItemMessage(m_hwnd, buttonicons[i].id, BM_SETIMAGE, IMAGE_ICON, (LPARAM)*buttonicons[i].pIcon);
+ SendDlgItemMessage(m_hwnd, buttonicons[i].id, BUTTONSETCONTAINER, (LPARAM)pContainer, 0);
}
- Srmm_UpdateToolbarIcons(hwndDlg);
- SendMessage(hwndDlg, DM_UPDATEWINICON, 0, 0);
+ Srmm_UpdateToolbarIcons(m_hwnd);
+ SendMessage(m_hwnd, DM_UPDATEWINICON, 0, 0);
return 0;
case DM_OPTIONSAPPLIED:
- DM_OptionsApplied(dat, wParam, lParam);
+ DM_OptionsApplied(wParam, lParam);
return 0;
case DM_UPDATETITLE:
- DM_UpdateTitle(dat, wParam, lParam);
+ DM_UpdateTitle(wParam, lParam);
return 0;
case DM_UPDATESTATUSMSG:
- dat->Panel->Invalidate();
+ Panel->Invalidate();
return 0;
case DM_OWNNICKCHANGED:
- GetMyNick(dat);
+ GetMyNick();
return 0;
case DM_ADDDIVIDER:
- if (!(dat->dwFlags & MWF_DIVIDERSET) && PluginConfig.m_bUseDividers) {
- if (GetWindowTextLength(GetDlgItem(hwndDlg, IDC_LOG)) > 0) {
- dat->dwFlags |= MWF_DIVIDERWANTED;
- dat->dwFlags |= MWF_DIVIDERSET;
+ if (!(dwFlags & MWF_DIVIDERSET) && PluginConfig.m_bUseDividers) {
+ if (GetWindowTextLength(m_log.GetHwnd()) > 0) {
+ dwFlags |= MWF_DIVIDERWANTED;
+ dwFlags |= MWF_DIVIDERSET;
}
}
return 0;
case WM_SETFOCUS:
- MsgWindowUpdateState(dat, WM_SETFOCUS);
- SetFocus(GetDlgItem(hwndDlg, IDC_MESSAGE));
+ MsgWindowUpdateState(WM_SETFOCUS);
+ SetFocus(m_message.GetHwnd());
return 1;
case WM_ACTIVATE:
@@ -2150,79 +2204,79 @@ INT_PTR CALLBACK DlgProcMessage(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM l
//fall through
case WM_MOUSEACTIVATE:
- MsgWindowUpdateState(dat, WM_ACTIVATE);
+ MsgWindowUpdateState(WM_ACTIVATE);
return 1;
case DM_UPDATEPICLAYOUT:
- LoadContactAvatar(dat);
- SendMessage(hwndDlg, WM_SIZE, 0, 0);
+ LoadContactAvatar();
+ SendMessage(m_hwnd, WM_SIZE, 0, 0);
return 0;
case DM_SPLITTERGLOBALEVENT:
- DM_SplitterGlobalEvent(dat, wParam, lParam);
+ DM_SplitterGlobalEvent(this, wParam, lParam);
return 0;
case DM_SPLITTERMOVED:
- if ((HWND)lParam == GetDlgItem(hwndDlg, IDC_MULTISPLITTER)) {
- GetClientRect(hwndDlg, &rc);
+ if ((HWND)lParam == GetDlgItem(m_hwnd, IDC_MULTISPLITTER)) {
+ GetClientRect(m_hwnd, &rc);
pt.x = wParam;
pt.y = 0;
- ScreenToClient(hwndDlg, &pt);
- int oldSplitterX = dat->multiSplitterX;
- dat->multiSplitterX = rc.right - pt.x;
- if (dat->multiSplitterX < 25)
- dat->multiSplitterX = 25;
-
- if (dat->multiSplitterX > ((rc.right - rc.left) - 80))
- dat->multiSplitterX = oldSplitterX;
- SendMessage(dat->hwnd, WM_SIZE, 0, 0);
- }
- else if ((HWND)lParam == GetDlgItem(hwndDlg, IDC_SPLITTER)) {
- GetClientRect(hwndDlg, &rc);
- rc.top += (dat->Panel->isActive() ? dat->Panel->getHeight() + 40 : 30);
+ ScreenToClient(m_hwnd, &pt);
+ int oldSplitterX = multiSplitterX;
+ multiSplitterX = rc.right - pt.x;
+ if (multiSplitterX < 25)
+ multiSplitterX = 25;
+
+ if (multiSplitterX > ((rc.right - rc.left) - 80))
+ multiSplitterX = oldSplitterX;
+ SendMessage(m_hwnd, WM_SIZE, 0, 0);
+ }
+ else if ((HWND)lParam == GetDlgItem(m_hwnd, IDC_SPLITTER)) {
+ GetClientRect(m_hwnd, &rc);
+ rc.top += (Panel->isActive() ? Panel->getHeight() + 40 : 30);
pt.x = 0;
pt.y = wParam;
- ScreenToClient(hwndDlg, &pt);
+ ScreenToClient(m_hwnd, &pt);
- int oldSplitterY = dat->splitterY;
- int oldDynaSplitter = dat->dynaSplitter;
+ int oldSplitterY = splitterY;
+ int oldDynaSplitter = dynaSplitter;
- dat->splitterY = rc.bottom - pt.y + DPISCALEY_S(23);
+ splitterY = rc.bottom - pt.y + DPISCALEY_S(23);
// attempt to fix splitter troubles..
// hardcoded limits... better solution is possible, but this works for now
int bottomtoolbarH = 0;
- if (dat->pContainer->dwFlags & CNT_BOTTOMTOOLBAR)
+ if (pContainer->dwFlags & CNT_BOTTOMTOOLBAR)
bottomtoolbarH = 22;
- if (dat->splitterY < (DPISCALEY_S(MINSPLITTERY) + 5 + bottomtoolbarH)) { // min splitter size
- dat->splitterY = (DPISCALEY_S(MINSPLITTERY) + 5 + bottomtoolbarH);
- dat->dynaSplitter = dat->splitterY - DPISCALEY_S(34);
- DM_RecalcPictureSize(dat);
+ if (splitterY < (DPISCALEY_S(MINSPLITTERY) + 5 + bottomtoolbarH)) { // min splitter size
+ splitterY = (DPISCALEY_S(MINSPLITTERY) + 5 + bottomtoolbarH);
+ dynaSplitter = splitterY - DPISCALEY_S(34);
+ DM_RecalcPictureSize();
}
- else if (dat->splitterY >(rc.bottom - rc.top)) {
- dat->splitterY = oldSplitterY;
- dat->dynaSplitter = oldDynaSplitter;
- DM_RecalcPictureSize(dat);
+ else if (splitterY >(rc.bottom - rc.top)) {
+ splitterY = oldSplitterY;
+ dynaSplitter = oldDynaSplitter;
+ DM_RecalcPictureSize();
}
else {
- dat->dynaSplitter = (rc.bottom - pt.y) - DPISCALEY_S(11);
- DM_RecalcPictureSize(dat);
+ dynaSplitter = (rc.bottom - pt.y) - DPISCALEY_S(11);
+ DM_RecalcPictureSize();
}
- CSkin::UpdateToolbarBG(dat);
- SendMessage(dat->hwnd, WM_SIZE, 0, 0);
+ UpdateToolbarBG();
+ SendMessage(m_hwnd, WM_SIZE, 0, 0);
}
- else if ((HWND)lParam == GetDlgItem(hwndDlg, IDC_PANELSPLITTER)) {
- GetClientRect(GetDlgItem(hwndDlg, IDC_LOG), &rc);
+ else if ((HWND)lParam == GetDlgItem(m_hwnd, IDC_PANELSPLITTER)) {
+ GetClientRect(m_log.GetHwnd(), &rc);
POINT pnt = { 0, (int)wParam };
- ScreenToClient(hwndDlg, &pnt);
+ ScreenToClient(m_hwnd, &pnt);
if ((pnt.y + 2 >= MIN_PANELHEIGHT + 2) && (pnt.y + 2 < 100) && (pnt.y + 2 < rc.bottom - 30))
- dat->Panel->setHeight(pnt.y + 2, true);
+ Panel->setHeight(pnt.y + 2, true);
- RedrawWindow(hwndDlg, NULL, NULL, RDW_INVALIDATE | RDW_UPDATENOW | RDW_ERASE);
+ RedrawWindow(m_hwnd, NULL, NULL, RDW_INVALIDATE | RDW_UPDATENOW | RDW_ERASE);
if (M.isAero())
- InvalidateRect(GetParent(hwndDlg), NULL, FALSE);
+ InvalidateRect(GetParent(m_hwnd), NULL, FALSE);
}
break;
@@ -2231,54 +2285,54 @@ INT_PTR CALLBACK DlgProcMessage(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM l
// from ourself. otherwise, the dm_remakelog will be deferred until next window
// activation (focus)
case DM_DEFERREDREMAKELOG:
- if ((HWND)wParam == hwndDlg)
- SendMessage(hwndDlg, DM_REMAKELOG, 0, 0);
+ if ((HWND)wParam == m_hwnd)
+ SendMessage(m_hwnd, DM_REMAKELOG, 0, 0);
else {
- if (M.GetByte(dat->hContact, "mwoverride", 0) == 0) {
- dat->dwFlags &= ~(MWF_LOG_ALL);
- dat->dwFlags |= (lParam & MWF_LOG_ALL);
- dat->dwFlags |= MWF_DEFERREDREMAKELOG;
+ if (M.GetByte(m_hContact, "mwoverride", 0) == 0) {
+ dwFlags &= ~(MWF_LOG_ALL);
+ dwFlags |= (lParam & MWF_LOG_ALL);
+ dwFlags |= MWF_DEFERREDREMAKELOG;
}
}
return 0;
case DM_FORCEDREMAKELOG:
- if ((HWND)wParam == hwndDlg)
- SendMessage(hwndDlg, DM_REMAKELOG, 0, 0);
+ if ((HWND)wParam == m_hwnd)
+ SendMessage(m_hwnd, DM_REMAKELOG, 0, 0);
else {
- dat->dwFlags &= ~(MWF_LOG_ALL);
- dat->dwFlags |= (lParam & MWF_LOG_ALL);
- dat->dwFlags |= MWF_DEFERREDREMAKELOG;
+ dwFlags &= ~(MWF_LOG_ALL);
+ dwFlags |= (lParam & MWF_LOG_ALL);
+ dwFlags |= MWF_DEFERREDREMAKELOG;
}
return 0;
case DM_REMAKELOG:
- dat->szMicroLf[0] = 0;
- dat->lastEventTime = 0;
- dat->iLastEventType = -1;
- StreamInEvents(hwndDlg, dat->hDbEventFirst, -1, 0, NULL);
+ szMicroLf[0] = 0;
+ lastEventTime = 0;
+ iLastEventType = -1;
+ StreamInEvents(hDbEventFirst, -1, 0, NULL);
return 0;
case DM_APPENDMCEVENT:
- if (dat->hContact == db_mc_getMeta(wParam) && dat->hDbEventFirst == NULL) {
- dat->hDbEventFirst = lParam;
- SendMessage(dat->hwnd, DM_REMAKELOG, 0, 0);
+ if (m_hContact == db_mc_getMeta(wParam) && hDbEventFirst == NULL) {
+ hDbEventFirst = lParam;
+ SendMessage(m_hwnd, DM_REMAKELOG, 0, 0);
}
- else if (dat->hContact == wParam && db_mc_isSub(wParam) && db_event_getContact(lParam) != wParam)
- StreamInEvents(hwndDlg, lParam, 1, 1, NULL);
+ else if (m_hContact == wParam && db_mc_isSub(wParam) && db_event_getContact(lParam) != wParam)
+ StreamInEvents(lParam, 1, 1, NULL);
return 0;
case DM_APPENDTOLOG:
- StreamInEvents(hwndDlg, wParam, 1, 1, NULL);
+ StreamInEvents(wParam, 1, 1, NULL);
return 0;
case DM_REPLAYQUEUE: // replays queued events after the message log has been frozen for a while
- for (int i = 0; i < dat->iNextQueuedEvent; i++)
- if (dat->hQueuedEvents[i] != 0)
- StreamInEvents(hwndDlg, dat->hQueuedEvents[i], 1, 1, NULL);
+ for (int i = 0; i < iNextQueuedEvent; i++)
+ if (hQueuedEvents[i] != 0)
+ StreamInEvents(hQueuedEvents[i], 1, 1, NULL);
- dat->iNextQueuedEvent = 0;
- SetDlgItemText(hwndDlg, IDC_LOGFROZENTEXT, dat->bNotOnList ? TranslateT("Contact not on list. You may add it...") :
+ iNextQueuedEvent = 0;
+ SetDlgItemText(m_hwnd, IDC_LOGFROZENTEXT, bNotOnList ? TranslateT("Contact not on list. You may add it...") :
TranslateT("Auto scrolling is disabled (press F12 to enable it)"));
return 0;
@@ -2286,12 +2340,12 @@ INT_PTR CALLBACK DlgProcMessage(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM l
{
IEVIEWWINDOW iew = { sizeof(iew) };
iew.iType = IEW_SCROLLBOTTOM;
- if (dat->hwndIEView) {
- iew.hwnd = dat->hwndIEView;
+ if (hwndIEView) {
+ iew.hwnd = hwndIEView;
CallService(MS_IEVIEW_WINDOW, 0, (LPARAM)&iew);
}
- else if (dat->hwndHPP) {
- iew.hwnd = dat->hwndHPP;
+ else if (hwndHPP) {
+ iew.hwnd = hwndHPP;
CallService(MS_HPP_EG_WINDOW, 0, (LPARAM)&iew);
}
}
@@ -2300,20 +2354,20 @@ INT_PTR CALLBACK DlgProcMessage(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM l
case HM_DBEVENTADDED:
// this is called whenever a new event has been added to the database.
// this CAN be posted (some sanity checks required).
- if (dat && dat->hContact)
- DM_EventAdded(dat, dat->hContact, lParam);
+ if (this && m_hContact)
+ DM_EventAdded(this, m_hContact, lParam);
return 0;
case WM_TIMER:
// timer to control info panel hovering
if (wParam == TIMERID_AWAYMSG) {
- KillTimer(hwndDlg, wParam);
+ KillTimer(m_hwnd, wParam);
GetCursorPos(&pt);
- if (wParam == TIMERID_AWAYMSG && dat->Panel->hitTest(pt) != CInfoPanel::HTNIRVANA)
- SendMessage(hwndDlg, DM_ACTIVATETOOLTIP, 0, 0);
+ if (wParam == TIMERID_AWAYMSG && Panel->hitTest(pt) != CInfoPanel::HTNIRVANA)
+ SendMessage(m_hwnd, DM_ACTIVATETOOLTIP, 0, 0);
else
- dat->dwFlagsEx &= ~MWF_SHOW_AWAYMSGTIMER;
+ dwFlagsEx &= ~MWF_SHOW_AWAYMSGTIMER;
break;
}
@@ -2323,23 +2377,23 @@ INT_PTR CALLBACK DlgProcMessage(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM l
int iIndex = wParam - TIMERID_MSGSEND;
if (iIndex < SendQueue::NR_SENDJOBS) { // single sendjob timer
SendJob *job = sendQueue->getJobByIndex(iIndex);
- KillTimer(hwndDlg, wParam);
+ KillTimer(m_hwnd, wParam);
mir_snwprintf(job->szErrorMsg, TranslateT("Delivery failure: %s"), TranslateT("The message send timed out"));
job->iStatus = SendQueue::SQ_ERROR;
- if (!nen_options.iNoSounds && !(m_pContainer->dwFlags & CNT_NOSOUND))
+ if (!nen_options.iNoSounds && !(pContainer->dwFlags & CNT_NOSOUND))
SkinPlaySound("SendError");
- if (!(dat->dwFlags & MWF_ERRORSTATE))
- sendQueue->handleError(dat, iIndex);
+ if (!(dwFlags & MWF_ERRORSTATE))
+ sendQueue->handleError(this, iIndex);
break;
}
}
else if (wParam == TIMERID_FLASHWND) {
- if (dat->mayFlashTab)
- FlashTab(dat, hwndTab, dat->iTabID, &dat->bTabFlash, TRUE, dat->hTabIcon);
+ if (m_bCanFlashTab)
+ FlashTab(true);
break;
}
else if (wParam == TIMERID_TYPE) {
- DM_Typing(dat);
+ DM_Typing(this);
break;
}
break;
@@ -2348,32 +2402,32 @@ INT_PTR CALLBACK DlgProcMessage(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM l
switch (wParam) {
case MSGERROR_CANCEL:
case MSGERROR_SENDLATER:
- if (dat->dwFlags & MWF_ERRORSTATE) {
- dat->cache->saveHistory(0, 0);
+ if (dwFlags & MWF_ERRORSTATE) {
+ cache->saveHistory(0, 0);
if (wParam == MSGERROR_SENDLATER)
- sendQueue->doSendLater(dat->iCurrentQueueError, dat); // to be implemented at a later time
- dat->iOpenJobs--;
+ sendQueue->doSendLater(iCurrentQueueError, this); // to be implemented at a later time
+ iOpenJobs--;
sendQueue->dec();
- if (dat->iCurrentQueueError >= 0 && dat->iCurrentQueueError < SendQueue::NR_SENDJOBS)
- sendQueue->clearJob(dat->iCurrentQueueError);
- dat->iCurrentQueueError = -1;
- sendQueue->showErrorControls(dat, FALSE);
+ if (iCurrentQueueError >= 0 && iCurrentQueueError < SendQueue::NR_SENDJOBS)
+ sendQueue->clearJob(iCurrentQueueError);
+ iCurrentQueueError = -1;
+ sendQueue->showErrorControls(this, FALSE);
if (wParam != MSGERROR_CANCEL || (wParam == MSGERROR_CANCEL && lParam == 0))
- SetDlgItemText(hwndDlg, IDC_MESSAGE, L"");
- sendQueue->checkQueue(dat);
- int iNextFailed = sendQueue->findNextFailed(dat);
+ SetDlgItemText(m_hwnd, IDC_MESSAGE, L"");
+ sendQueue->checkQueue(this);
+ int iNextFailed = sendQueue->findNextFailed(this);
if (iNextFailed >= 0)
- sendQueue->handleError(dat, iNextFailed);
+ sendQueue->handleError(this, iNextFailed);
}
break;
case MSGERROR_RETRY:
- if (dat->dwFlags & MWF_ERRORSTATE) {
+ if (dwFlags & MWF_ERRORSTATE) {
int resent = 0;
- dat->cache->saveHistory(0, 0);
- if (dat->iCurrentQueueError >= 0 && dat->iCurrentQueueError < SendQueue::NR_SENDJOBS) {
- SendJob *job = sendQueue->getJobByIndex(dat->iCurrentQueueError);
+ cache->saveHistory(0, 0);
+ if (iCurrentQueueError >= 0 && iCurrentQueueError < SendQueue::NR_SENDJOBS) {
+ SendJob *job = sendQueue->getJobByIndex(iCurrentQueueError);
if (job->hSendId == 0 && job->hContact == 0)
break;
@@ -2382,36 +2436,36 @@ INT_PTR CALLBACK DlgProcMessage(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM l
}
if (resent) {
- SendJob *job = sendQueue->getJobByIndex(dat->iCurrentQueueError);
+ SendJob *job = sendQueue->getJobByIndex(iCurrentQueueError);
- SetTimer(hwndDlg, TIMERID_MSGSEND + dat->iCurrentQueueError, PluginConfig.m_MsgTimeout, NULL);
+ SetTimer(m_hwnd, TIMERID_MSGSEND + iCurrentQueueError, PluginConfig.m_MsgTimeout, NULL);
job->iStatus = SendQueue::SQ_INPROGRESS;
- dat->iCurrentQueueError = -1;
- sendQueue->showErrorControls(dat, FALSE);
- SetDlgItemText(hwndDlg, IDC_MESSAGE, L"");
- sendQueue->checkQueue(dat);
+ iCurrentQueueError = -1;
+ sendQueue->showErrorControls(this, FALSE);
+ SetDlgItemText(m_hwnd, IDC_MESSAGE, L"");
+ sendQueue->checkQueue(this);
- int iNextFailed = sendQueue->findNextFailed(dat);
+ int iNextFailed = sendQueue->findNextFailed(this);
if (iNextFailed >= 0)
- sendQueue->handleError(dat, iNextFailed);
+ sendQueue->handleError(this, iNextFailed);
}
}
}
break;
case DM_SELECTTAB:
- SendMessage(hwndContainer, DM_SELECTTAB, wParam, lParam); // pass the msg to our container
+ SendMessage(pContainer->hwnd, DM_SELECTTAB, wParam, lParam); // pass the msg to our container
return 0;
case DM_SETLOCALE:
- if (dat->dwFlags & MWF_WASBACKGROUNDCREATE)
+ if (dwFlags & MWF_WASBACKGROUNDCREATE)
break;
- if (m_pContainer->hwndActive == hwndDlg && PluginConfig.m_bAutoLocaleSupport && hwndContainer == GetForegroundWindow() && hwndContainer == GetActiveWindow()) {
+ if (pContainer->hwndActive == m_hwnd && PluginConfig.m_bAutoLocaleSupport && pContainer->hwnd == GetForegroundWindow() && pContainer->hwnd == GetActiveWindow()) {
if (lParam)
- dat->hkl = (HKL)lParam;
+ hkl = (HKL)lParam;
- if (dat->hkl)
- ActivateKeyboardLayout(dat->hkl, 0);
+ if (hkl)
+ ActivateKeyboardLayout(hkl, 0);
}
return 0;
@@ -2422,7 +2476,7 @@ INT_PTR CALLBACK DlgProcMessage(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM l
{
DWORD *pdw = (DWORD *)lParam;
if (pdw)
- *pdw = dat->dwTickLastEvent;
+ *pdw = dwTickLastEvent;
}
return 0;
@@ -2430,7 +2484,7 @@ INT_PTR CALLBACK DlgProcMessage(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM l
{
TContainerData **pc = (TContainerData **)lParam;
if (pc)
- *pc = m_pContainer;
+ *pc = pContainer;
}
return 0;
@@ -2438,74 +2492,74 @@ INT_PTR CALLBACK DlgProcMessage(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM l
{
MCONTACT *phContact = (MCONTACT*)lParam;
if (phContact)
- *phContact = dat->hContact;
+ *phContact = m_hContact;
}
return 0;
case DM_UPDATELASTMESSAGE:
- DM_UpdateLastMessage(dat);
+ DM_UpdateLastMessage(this);
return 0;
case DM_SAVESIZE:
- if (dat->dwFlags & MWF_NEEDCHECKSIZE)
+ if (dwFlags & MWF_NEEDCHECKSIZE)
lParam = 0;
- dat->dwFlags &= ~MWF_NEEDCHECKSIZE;
- if (dat->dwFlags & MWF_WASBACKGROUNDCREATE) {
- dat->dwFlags &= ~MWF_INITMODE;
- if (dat->lastMessage)
- DM_UpdateLastMessage(dat);
+ dwFlags &= ~MWF_NEEDCHECKSIZE;
+ if (dwFlags & MWF_WASBACKGROUNDCREATE) {
+ dwFlags &= ~MWF_INITMODE;
+ if (lastMessage)
+ DM_UpdateLastMessage(this);
}
- SendMessage(hwndContainer, DM_QUERYCLIENTAREA, 0, (LPARAM)&rcClient);
- MoveWindow(hwndDlg, rcClient.left, rcClient.top, (rcClient.right - rcClient.left), (rcClient.bottom - rcClient.top), TRUE);
- if (dat->dwFlags & MWF_WASBACKGROUNDCREATE) {
- dat->dwFlags &= ~MWF_WASBACKGROUNDCREATE;
- SendMessage(hwndDlg, WM_SIZE, 0, 0);
- PostMessage(hwndDlg, DM_UPDATEPICLAYOUT, 0, 0);
+ SendMessage(pContainer->hwnd, DM_QUERYCLIENTAREA, 0, (LPARAM)&rcClient);
+ MoveWindow(m_hwnd, rcClient.left, rcClient.top, (rcClient.right - rcClient.left), (rcClient.bottom - rcClient.top), TRUE);
+ if (dwFlags & MWF_WASBACKGROUNDCREATE) {
+ dwFlags &= ~MWF_WASBACKGROUNDCREATE;
+ SendMessage(m_hwnd, WM_SIZE, 0, 0);
+ PostMessage(m_hwnd, DM_UPDATEPICLAYOUT, 0, 0);
if (PluginConfig.m_bAutoLocaleSupport) {
- if (dat->hkl == 0)
- DM_LoadLocale(dat);
+ if (hkl == 0)
+ DM_LoadLocale(this);
else
- PostMessage(hwndDlg, DM_SETLOCALE, 0, 0);
+ PostMessage(m_hwnd, DM_SETLOCALE, 0, 0);
}
- if (dat->hwndIEView != 0)
- SetFocus(GetDlgItem(hwndDlg, IDC_MESSAGE));
- if (dat->pContainer->dwFlags & CNT_SIDEBAR)
- dat->pContainer->SideBar->Layout();
+ if (hwndIEView != 0)
+ SetFocus(m_message.GetHwnd());
+ if (pContainer->dwFlags & CNT_SIDEBAR)
+ pContainer->SideBar->Layout();
}
else {
- SendMessage(hwndDlg, WM_SIZE, 0, 0);
+ SendMessage(m_hwnd, WM_SIZE, 0, 0);
if (lParam == 0)
- DM_ScrollToBottom(dat, 0, 1);
+ DM_ScrollToBottom(this, 0, 1);
}
return 0;
case DM_CHECKSIZE:
- dat->dwFlags |= MWF_NEEDCHECKSIZE;
+ dwFlags |= MWF_NEEDCHECKSIZE;
return 0;
// sent by the message input area hotkeys. just pass it to our container
case DM_QUERYPENDING:
- SendMessage(hwndContainer, DM_QUERYPENDING, wParam, lParam);
+ SendMessage(pContainer->hwnd, DM_QUERYPENDING, wParam, lParam);
return 0;
case WM_LBUTTONDOWN:
GetCursorPos(&tmp);
cur.x = (SHORT)tmp.x;
cur.y = (SHORT)tmp.y;
- if (!dat->Panel->isHovered())
- SendMessage(hwndContainer, WM_NCLBUTTONDOWN, HTCAPTION, *((LPARAM*)(&cur)));
+ if (!Panel->isHovered())
+ SendMessage(pContainer->hwnd, WM_NCLBUTTONDOWN, HTCAPTION, *((LPARAM*)(&cur)));
break;
case WM_LBUTTONUP:
GetCursorPos(&tmp);
- if (dat->Panel->isHovered())
- dat->Panel->handleClick(tmp);
+ if (Panel->isHovered())
+ Panel->handleClick(tmp);
else {
cur.x = (SHORT)tmp.x;
cur.y = (SHORT)tmp.y;
- SendMessage(hwndContainer, WM_NCLBUTTONUP, HTCAPTION, *((LPARAM*)(&cur)));
+ SendMessage(pContainer->hwnd, WM_NCLBUTTONUP, HTCAPTION, *((LPARAM*)(&cur)));
}
break;
@@ -2514,29 +2568,30 @@ INT_PTR CALLBACK DlgProcMessage(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM l
RECT rcPicture, rcPanelNick = { 0 };
int menuID = 0;
- GetWindowRect(GetDlgItem(hwndDlg, IDC_CONTACTPIC), &rcPicture);
+ GetWindowRect(GetDlgItem(m_hwnd, IDC_CONTACTPIC), &rcPicture);
rcPanelNick.left = rcPanelNick.right - 30;
GetCursorPos(&pt);
- if (dat->Panel->invokeConfigDialog(pt))
+ if (Panel->invokeConfigDialog(pt))
break;
if (PtInRect(&rcPicture, pt))
menuID = MENU_PICMENU;
- if ((menuID == MENU_PICMENU && ((dat->ace ? dat->ace->hbmPic : PluginConfig.g_hbmUnknown) || dat->hOwnPic) && dat->bShowAvatar != 0)) {
+ if ((menuID == MENU_PICMENU && ((ace ? ace->hbmPic : PluginConfig.g_hbmUnknown) || hOwnPic) && bShowAvatar != 0)) {
HMENU submenu = GetSubMenu(PluginConfig.g_hMenuContext, 1);
GetCursorPos(&pt);
- MsgWindowUpdateMenu(dat, submenu, menuID);
- int iSelection = TrackPopupMenu(submenu, TPM_RETURNCMD, pt.x, pt.y, 0, hwndDlg, NULL);
- MsgWindowMenuHandler(dat, iSelection, menuID);
+ MsgWindowUpdateMenu(submenu, menuID);
+
+ int iSelection = TrackPopupMenu(submenu, TPM_RETURNCMD, pt.x, pt.y, 0, m_hwnd, NULL);
+ MsgWindowMenuHandler(iSelection, menuID);
break;
}
HMENU subMenu = GetSubMenu(PluginConfig.g_hMenuContext, 0);
- MsgWindowUpdateMenu(dat, subMenu, MENU_TABCONTEXT);
+ MsgWindowUpdateMenu(subMenu, MENU_TABCONTEXT);
- int iSelection = TrackPopupMenu(subMenu, TPM_RETURNCMD, pt.x, pt.y, 0, hwndDlg, NULL);
+ int iSelection = TrackPopupMenu(subMenu, TPM_RETURNCMD, pt.x, pt.y, 0, m_hwnd, NULL);
if (iSelection >= IDM_CONTAINERMENU) {
char szIndex[10];
char *szKey = "TAB_ContainersW";
@@ -2545,24 +2600,24 @@ INT_PTR CALLBACK DlgProcMessage(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM l
if (iSelection - IDM_CONTAINERMENU >= 0) {
ptrW val(db_get_wsa(NULL, szKey, szIndex));
if (val)
- SendMessage(hwndDlg, DM_CONTAINERSELECTED, 0, (LPARAM)val);
+ SendMessage(m_hwnd, DM_CONTAINERSELECTED, 0, (LPARAM)val);
}
break;
}
- MsgWindowMenuHandler(dat, iSelection, MENU_TABCONTEXT);
+ MsgWindowMenuHandler(iSelection, MENU_TABCONTEXT);
}
break;
case WM_MOUSEMOVE:
GetCursorPos(&pt);
- DM_DismissTip(dat, pt);
- dat->Panel->trackMouse(pt);
+ DM_DismissTip(this, pt);
+ Panel->trackMouse(pt);
break;
case WM_MEASUREITEM:
{
LPMEASUREITEMSTRUCT lpmi = (LPMEASUREITEMSTRUCT)lParam;
- if (dat->Panel->isHovered()) {
+ if (Panel->isHovered()) {
lpmi->itemHeight = 0;
lpmi->itemWidth = 6;
return TRUE;
@@ -2571,36 +2626,36 @@ INT_PTR CALLBACK DlgProcMessage(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM l
return Menu_MeasureItem(lParam);
case WM_NCHITTEST:
- SendMessage(hwndContainer, WM_NCHITTEST, wParam, lParam);
+ SendMessage(pContainer->hwnd, WM_NCHITTEST, wParam, lParam);
break;
case WM_DRAWITEM:
- return MsgWindowDrawHandler(wParam, lParam, dat);
+ return MsgWindowDrawHandler(wParam, lParam);
case WM_APPCOMMAND:
{
DWORD cmd = GET_APPCOMMAND_LPARAM(lParam);
if (cmd == APPCOMMAND_BROWSER_BACKWARD || cmd == APPCOMMAND_BROWSER_FORWARD) {
- SendMessage(hwndContainer, DM_SELECTTAB, cmd == APPCOMMAND_BROWSER_BACKWARD ? DM_SELECT_PREV : DM_SELECT_NEXT, 0);
+ SendMessage(pContainer->hwnd, DM_SELECTTAB, cmd == APPCOMMAND_BROWSER_BACKWARD ? DM_SELECT_PREV : DM_SELECT_NEXT, 0);
return 1;
}
}
break;
case WM_COMMAND:
- if (!dat)
+ if (!this)
break;
// custom button handling
if (LOWORD(wParam) >= MIN_CBUTTONID && LOWORD(wParam) <= MAX_CBUTTONID) {
- Srmm_ClickToolbarIcon(dat->hContact, LOWORD(wParam), GetDlgItem(hwndDlg, LOWORD(wParam)), 0);
+ Srmm_ClickToolbarIcon(m_hContact, LOWORD(wParam), GetDlgItem(m_hwnd, LOWORD(wParam)), 0);
break;
}
switch (LOWORD(wParam)) {
case IDOK:
- if (dat->fEditNotesActive) {
- SendMessage(hwndDlg, DM_ACTIVATETOOLTIP, IDC_PIC, (LPARAM)TranslateT("You are editing the user notes. Click the button again or use the hotkey (default: Alt-N) to save the notes and return to normal messaging mode"));
+ if (fEditNotesActive) {
+ SendMessage(m_hwnd, DM_ACTIVATETOOLTIP, IDC_PIC, (LPARAM)TranslateT("You are editing the user notes. Click the button again or use the hotkey (default: Alt-N) to save the notes and return to normal messaging mode"));
return 0;
}
else {
@@ -2610,14 +2665,14 @@ INT_PTR CALLBACK DlgProcMessage(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM l
fi.chrg.cpMin = 0;
fi.chrg.cpMax = -1;
fi.lpstrText = "{";
- int final_sendformat = SendDlgItemMessageA(hwndDlg, IDC_MESSAGE, EM_FINDTEXTEX, FR_DOWN, (LPARAM)&fi) == -1 ? dat->SendFormat : 0;
+ int final_sendformat = SendDlgItemMessageA(m_hwnd, IDC_MESSAGE, EM_FINDTEXTEX, FR_DOWN, (LPARAM)&fi) == -1 ? SendFormat : 0;
fi.lpstrText = "}";
- final_sendformat = SendDlgItemMessageA(hwndDlg, IDC_MESSAGE, EM_FINDTEXTEX, FR_DOWN, (LPARAM)&fi) == -1 ? final_sendformat : 0;
+ final_sendformat = SendDlgItemMessageA(m_hwnd, IDC_MESSAGE, EM_FINDTEXTEX, FR_DOWN, (LPARAM)&fi) == -1 ? final_sendformat : 0;
- if (GetSendButtonState(hwndDlg) == PBS_DISABLED)
+ if (GetSendButtonState(m_hwnd) == PBS_DISABLED)
break;
- ptrA streamOut(Message_GetFromStream(GetDlgItem(hwndDlg, IDC_MESSAGE), final_sendformat ? 0 : SF_TEXT));
+ ptrA streamOut(Message_GetFromStream(m_message.GetHwnd(), final_sendformat ? 0 : SF_TEXT));
if (streamOut == NULL)
break;
@@ -2626,14 +2681,14 @@ INT_PTR CALLBACK DlgProcMessage(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM l
break;
if (final_sendformat)
- DoRtfToTags(dat, decoded, _countof(rtfDefColors), rtfDefColors);
+ DoRtfToTags(decoded, _countof(rtfDefColors), rtfDefColors);
decoded.TrimRight();
T2Utf utfResult(decoded);
size_t memRequired = mir_strlen(utfResult) + 1;
// try to detect RTL
- HWND hwndEdit = GetDlgItem(hwndDlg, IDC_MESSAGE);
+ HWND hwndEdit = m_message.GetHwnd();
SendMessage(hwndEdit, WM_SETREDRAW, FALSE, 0);
PARAFORMAT2 pf2;
@@ -2652,29 +2707,29 @@ INT_PTR CALLBACK DlgProcMessage(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM l
SendMessage(hwndEdit, EM_SETSEL, -1, -1);
InvalidateRect(hwndEdit, NULL, FALSE);
- if (memRequired > dat->iSendBufferSize) {
- dat->sendBuffer = (char *)mir_realloc(dat->sendBuffer, memRequired);
- dat->iSendBufferSize = memRequired;
+ if (memRequired > iSendBufferSize) {
+ sendBuffer = (char *)mir_realloc(sendBuffer, memRequired);
+ iSendBufferSize = memRequired;
}
- memcpy(dat->sendBuffer, (char*)utfResult, memRequired);
+ memcpy(sendBuffer, (char*)utfResult, memRequired);
- if (memRequired == 0 || dat->sendBuffer[0] == 0)
+ if (memRequired == 0 || sendBuffer[0] == 0)
break;
- if (dat->sendMode & SMODE_CONTAINER && m_pContainer->hwndActive == hwndDlg && GetForegroundWindow() == hwndContainer) {
- int tabCount = TabCtrl_GetItemCount(hwndTab);
- ptrA szFromStream(Message_GetFromStream(GetDlgItem(hwndDlg, IDC_MESSAGE), dat->SendFormat ? 0 : SF_TEXT));
+ if (sendMode & SMODE_CONTAINER && pContainer->hwndActive == m_hwnd && GetForegroundWindow() == pContainer->hwnd) {
+ int tabCount = TabCtrl_GetItemCount(m_hwndParent);
+ ptrA szFromStream(Message_GetFromStream(m_message.GetHwnd(), SendFormat ? 0 : SF_TEXT));
TCITEM tci = { 0 };
tci.mask = TCIF_PARAM;
for (int i = 0; i < tabCount; i++) {
- TabCtrl_GetItem(hwndTab, i, &tci);
+ TabCtrl_GetItem(m_hwndParent, i, &tci);
// get the contact from the tabs lparam which hopefully is the tabs hwnd so we can get its userdata.... hopefully
HWND contacthwnd = (HWND)tci.lParam;
if (IsWindow(contacthwnd)) {
// if the contact hwnd is the current contact then ignore it and let the normal code deal with the msg
- if (contacthwnd != hwndDlg) {
+ if (contacthwnd != m_hwnd) {
SETTEXTEX stx = { ST_DEFAULT, CP_UTF8 };
// send the buffer to the contacts msg typing area
SendDlgItemMessage(contacthwnd, IDC_MESSAGE, EM_SETTEXTEX, (WPARAM)&stx, (LPARAM)szFromStream);
@@ -2684,16 +2739,16 @@ INT_PTR CALLBACK DlgProcMessage(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM l
}
}
// END /all /MOD
- if (dat->nTypeMode == PROTOTYPE_SELFTYPING_ON)
- DM_NotifyTyping(dat, PROTOTYPE_SELFTYPING_OFF);
+ if (nTypeMode == PROTOTYPE_SELFTYPING_ON)
+ DM_NotifyTyping(PROTOTYPE_SELFTYPING_OFF);
- DeletePopupsForContact(dat->hContact, PU_REMOVE_ON_SEND);
+ DeletePopupsForContact(m_hContact, PU_REMOVE_ON_SEND);
if (M.GetByte("allow_sendhook", 0)) {
- int result = TABSRMM_FireEvent(dat->hContact, hwndDlg, MSG_WINDOW_EVT_CUSTOM, MAKELONG(flags, tabMSG_WINDOW_EVT_CUSTOM_BEFORESEND));
+ int result = TABSRMM_FireEvent(m_hContact, m_hwnd, MSG_WINDOW_EVT_CUSTOM, MAKELONG(flags, tabMSG_WINDOW_EVT_CUSTOM_BEFORESEND));
if (result)
return TRUE;
}
- sendQueue->addTo(dat, memRequired, flags);
+ sendQueue->addTo(this, memRequired, flags);
}
return TRUE;
@@ -2703,40 +2758,40 @@ INT_PTR CALLBACK DlgProcMessage(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM l
SETTEXTEX stx = { ST_SELECTION, 1200 };
MEVENT hDBEvent = 0;
- if (dat->hwndIEView || dat->hwndHPP) { // IEView quoting support..
+ if (hwndIEView || hwndHPP) { // IEView quoting support..
wchar_t *selected = 0;
IEVIEWEVENT event = { sizeof(event) };
- event.hContact = dat->hContact;
+ event.hContact = m_hContact;
event.dwFlags = 0;
event.iType = IEE_GET_SELECTION;
- if (dat->hwndIEView) {
- event.hwnd = dat->hwndIEView;
+ if (hwndIEView) {
+ event.hwnd = hwndIEView;
selected = (wchar_t*)CallService(MS_IEVIEW_EVENT, 0, (LPARAM)&event);
}
else {
- event.hwnd = dat->hwndHPP;
+ event.hwnd = hwndHPP;
selected = (wchar_t*)CallService(MS_HPP_EG_EVENT, 0, (LPARAM)&event);
}
if (selected != NULL) {
ptrW szQuoted(QuoteText(selected));
- SendDlgItemMessage(hwndDlg, IDC_MESSAGE, EM_SETTEXTEX, (WPARAM)&stx, (LPARAM)szQuoted);
+ m_message.SendMsg(EM_SETTEXTEX, (WPARAM)&stx, (LPARAM)szQuoted);
break;
}
else {
- hDBEvent = db_event_last(dat->hContact);
+ hDBEvent = db_event_last(m_hContact);
goto quote_from_last;
}
}
- hDBEvent = dat->hDbEventLast;
+ hDBEvent = hDbEventLast;
quote_from_last:
if (hDBEvent == NULL)
break;
- SendDlgItemMessage(hwndDlg, IDC_LOG, EM_EXGETSEL, 0, (LPARAM)&sel);
+ m_log.SendMsg(EM_EXGETSEL, 0, (LPARAM)&sel);
if (sel.cpMin == sel.cpMax) {
DBEVENTINFO dbei = {};
dbei.cbBlob = db_event_getBlobSize(hDBEvent);
@@ -2772,72 +2827,72 @@ quote_from_last:
}
if (szConverted != NULL) {
ptrW szQuoted(QuoteText(szConverted));
- SendDlgItemMessage(hwndDlg, IDC_MESSAGE, EM_SETTEXTEX, (WPARAM)&stx, (LPARAM)szQuoted);
+ m_message.SendMsg(EM_SETTEXTEX, (WPARAM)&stx, (LPARAM)szQuoted);
}
mir_free(szText);
if (bNeedsFree)
mir_free(szConverted);
}
else {
- ptrA szFromStream(Message_GetFromStream(GetDlgItem(hwndDlg, IDC_LOG), SF_TEXT | SFF_SELECTION));
+ ptrA szFromStream(Message_GetFromStream(m_log.GetHwnd(), SF_TEXT | SFF_SELECTION));
ptrW converted(mir_utf8decodeW(szFromStream));
Utils::FilterEventMarkers(converted);
ptrW szQuoted(QuoteText(converted));
- SendDlgItemMessage(hwndDlg, IDC_MESSAGE, EM_SETTEXTEX, (WPARAM)&stx, (LPARAM)szQuoted);
+ m_message.SendMsg(EM_SETTEXTEX, (WPARAM)&stx, (LPARAM)szQuoted);
}
- SetFocus(GetDlgItem(hwndDlg, IDC_MESSAGE));
+ SetFocus(m_message.GetHwnd());
}
break;
case IDC_ADD:
{
ADDCONTACTSTRUCT acs = { 0 };
- acs.hContact = dat->hContact;
+ acs.hContact = m_hContact;
acs.handleType = HANDLE_CONTACT;
acs.szProto = 0;
- CallService(MS_ADDCONTACT_SHOW, (WPARAM)hwndDlg, (LPARAM)&acs);
- if (!db_get_b(dat->hContact, "CList", "NotOnList", 0)) {
- dat->bNotOnList = FALSE;
- ShowMultipleControls(hwndDlg, addControls, _countof(addControls), SW_HIDE);
- if (!(dat->dwFlagsEx & MWF_SHOW_SCROLLINGDISABLED))
- Utils::showDlgControl(hwndDlg, IDC_LOGFROZENTEXT, SW_HIDE);
- SendMessage(hwndDlg, WM_SIZE, 0, 0);
+ CallService(MS_ADDCONTACT_SHOW, (WPARAM)m_hwnd, (LPARAM)&acs);
+ if (!db_get_b(m_hContact, "CList", "NotOnList", 0)) {
+ bNotOnList = FALSE;
+ ShowMultipleControls(m_hwnd, addControls, _countof(addControls), SW_HIDE);
+ if (!(dwFlagsEx & MWF_SHOW_SCROLLINGDISABLED))
+ Utils::showDlgControl(m_hwnd, IDC_LOGFROZENTEXT, SW_HIDE);
+ SendMessage(m_hwnd, WM_SIZE, 0, 0);
}
}
break;
case IDC_CANCELADD:
- dat->bNotOnList = FALSE;
- ShowMultipleControls(hwndDlg, addControls, _countof(addControls), SW_HIDE);
- if (!(dat->dwFlagsEx & MWF_SHOW_SCROLLINGDISABLED))
- Utils::showDlgControl(hwndDlg, IDC_LOGFROZENTEXT, SW_HIDE);
- SendMessage(hwndDlg, WM_SIZE, 0, 0);
+ bNotOnList = FALSE;
+ ShowMultipleControls(m_hwnd, addControls, _countof(addControls), SW_HIDE);
+ if (!(dwFlagsEx & MWF_SHOW_SCROLLINGDISABLED))
+ Utils::showDlgControl(m_hwnd, IDC_LOGFROZENTEXT, SW_HIDE);
+ SendMessage(m_hwnd, WM_SIZE, 0, 0);
break;
case IDC_MESSAGE:
if (HIWORD(wParam) == EN_CHANGE) {
- if (m_pContainer->hwndActive == hwndDlg)
- UpdateReadChars(dat);
- dat->dwFlags |= MWF_NEEDHISTORYSAVE;
- dat->dwLastActivity = GetTickCount();
- m_pContainer->dwLastActivity = dat->dwLastActivity;
- SendQueue::UpdateSaveAndSendButton(dat);
+ if (pContainer->hwndActive == m_hwnd)
+ UpdateReadChars();
+ dwFlags |= MWF_NEEDHISTORYSAVE;
+ dwLastActivity = GetTickCount();
+ pContainer->dwLastActivity = dwLastActivity;
+ SendQueue::UpdateSaveAndSendButton(this);
if (!(GetKeyState(VK_CONTROL) & 0x8000)) {
- dat->nLastTyping = GetTickCount();
- if (GetWindowTextLength(GetDlgItem(hwndDlg, IDC_MESSAGE))) {
- if (dat->nTypeMode == PROTOTYPE_SELFTYPING_OFF) {
- if (!(dat->dwFlags & MWF_INITMODE))
- DM_NotifyTyping(dat, PROTOTYPE_SELFTYPING_ON);
+ nLastTyping = GetTickCount();
+ if (GetWindowTextLength(m_message.GetHwnd())) {
+ if (nTypeMode == PROTOTYPE_SELFTYPING_OFF) {
+ if (!(dwFlags & MWF_INITMODE))
+ DM_NotifyTyping(PROTOTYPE_SELFTYPING_ON);
}
}
- else if (dat->nTypeMode == PROTOTYPE_SELFTYPING_ON)
- DM_NotifyTyping(dat, PROTOTYPE_SELFTYPING_OFF);
+ else if (nTypeMode == PROTOTYPE_SELFTYPING_ON)
+ DM_NotifyTyping(PROTOTYPE_SELFTYPING_OFF);
}
}
break;
default:
- Utils::CmdDispatcher(Utils::CMD_MSGDIALOG, hwndDlg, LOWORD(wParam), wParam, lParam, dat, m_pContainer);
+ Utils::CmdDispatcher(Utils::CMD_MSGDIALOG, m_hwnd, LOWORD(wParam), wParam, lParam, this, pContainer);
break;
}
break;
@@ -2846,7 +2901,7 @@ quote_from_last:
{
DWORD idFrom = GetDlgCtrlID((HWND)wParam);
if (idFrom >= MIN_CBUTTONID && idFrom <= MAX_CBUTTONID) {
- Srmm_ClickToolbarIcon(dat->hContact, idFrom, (HWND)wParam, 1);
+ Srmm_ClickToolbarIcon(m_hContact, idFrom, (HWND)wParam, 1);
break;
}
}
@@ -2861,11 +2916,11 @@ quote_from_last:
// the "per message window" ACK hook is gone, the global ack handler cares about all types of ack's (currently
// *_MESSAGE and *_AVATAR and dispatches them to the owner windows).
case HM_EVENTSENT:
- sendQueue->ackMessage(dat, wParam, lParam);
+ sendQueue->ackMessage(this, wParam, lParam);
return 0;
case DM_ACTIVATEME:
- ActivateExistingTab(m_pContainer, hwndDlg);
+ ActivateExistingTab(pContainer, m_hwnd);
return 0;
// sent by the select container dialog box when a container was selected...
@@ -2876,168 +2931,167 @@ quote_from_last:
if (!mir_wstrcmp(szNewName, TranslateT("Default container")))
szNewName = CGlobals::m_default_container_name;
- int iOldItems = TabCtrl_GetItemCount(hwndTab);
- if (!wcsncmp(m_pContainer->szName, szNewName, CONTAINER_NAMELEN))
+ int iOldItems = TabCtrl_GetItemCount(m_hwndParent);
+ if (!wcsncmp(pContainer->szName, szNewName, CONTAINER_NAMELEN))
break;
TContainerData *pNewContainer = FindContainerByName(szNewName);
if (pNewContainer == NULL)
- if ((pNewContainer = CreateContainer(szNewName, FALSE, dat->hContact)) == NULL)
+ if ((pNewContainer = CreateContainer(szNewName, FALSE, m_hContact)) == NULL)
break;
- db_set_ws(dat->hContact, SRMSGMOD_T, "containerW", szNewName);
- dat->fIsReattach = TRUE;
- PostMessage(PluginConfig.g_hwndHotkeyHandler, DM_DOCREATETAB, (WPARAM)pNewContainer, dat->hContact);
+ db_set_ws(m_hContact, SRMSGMOD_T, "containerW", szNewName);
+ fIsReattach = TRUE;
+ PostMessage(PluginConfig.g_hwndHotkeyHandler, DM_DOCREATETAB, (WPARAM)pNewContainer, m_hContact);
if (iOldItems > 1) // there were more than 1 tab, container is still valid
- SendMessage(m_pContainer->hwndActive, WM_SIZE, 0, 0);
+ SendMessage(pContainer->hwndActive, WM_SIZE, 0, 0);
SetForegroundWindow(pNewContainer->hwnd);
SetActiveWindow(pNewContainer->hwnd);
}
break;
case DM_STATUSBARCHANGED:
- UpdateStatusBar(dat);
+ UpdateStatusBar();
return 0;
case DM_UINTOCLIPBOARD:
- Utils::CopyToClipBoard(dat->cache->getUIN(), hwndDlg);
+ Utils::CopyToClipBoard(cache->getUIN(), m_hwnd);
return 0;
// broadcasted when GLOBAL info panel setting changes
case DM_SETINFOPANEL:
- CInfoPanel::setPanelHandler(dat, wParam, lParam);
+ CInfoPanel::setPanelHandler(this, wParam, lParam);
return 0;
// show the balloon tooltip control.
// wParam == id of the "anchor" element, defaults to the panel status field (for away msg retrieval)
// lParam == new text to show
case DM_ACTIVATETOOLTIP:
- if (IsIconic(hwndContainer) || m_pContainer->hwndActive != hwndDlg)
+ if (IsIconic(pContainer->hwnd) || pContainer->hwndActive != m_hwnd)
break;
- dat->Panel->showTip(wParam, lParam);
+ Panel->showTip(wParam, lParam);
break;
case WM_NEXTDLGCTL:
- if (dat->dwFlags & MWF_WASBACKGROUNDCREATE)
+ if (dwFlags & MWF_WASBACKGROUNDCREATE)
return 1;
break;
// save the contents of the log as rtf file
case DM_SAVEMESSAGELOG:
- DM_SaveLogAsRTF(dat);
+ DM_SaveLogAsRTF(this);
return 0;
case DM_CHECKAUTOHIDE:
- DM_CheckAutoHide(dat, wParam, lParam);
+ DM_CheckAutoHide(this, wParam, lParam);
return 0;
case DM_IEVIEWOPTIONSCHANGED:
- if (dat->hwndIEView)
- SendMessage(hwndDlg, DM_REMAKELOG, 0, 0);
+ if (hwndIEView)
+ SendMessage(m_hwnd, DM_REMAKELOG, 0, 0);
break;
case DM_SMILEYOPTIONSCHANGED:
- SendMessage(hwndDlg, DM_REMAKELOG, 0, 0);
+ SendMessage(m_hwnd, DM_REMAKELOG, 0, 0);
break;
case DM_MYAVATARCHANGED:
{
- const char *szProto = dat->cache->getActiveProto();
+ const char *szProto = cache->getActiveProto();
if (!mir_strcmp((char *)wParam, szProto) && mir_strlen(szProto) == mir_strlen((char *)wParam))
- LoadOwnAvatar(dat);
+ LoadOwnAvatar();
}
break;
case DM_GETWINDOWSTATE:
{
UINT state = MSG_WINDOW_STATE_EXISTS;
- if (IsWindowVisible(hwndDlg))
+ if (IsWindowVisible(m_hwnd))
state |= MSG_WINDOW_STATE_VISIBLE;
- if (GetForegroundWindow() == hwndContainer)
+ if (GetForegroundWindow() == pContainer->hwnd)
state |= MSG_WINDOW_STATE_FOCUS;
- if (IsIconic(hwndContainer))
+ if (IsIconic(pContainer->hwnd))
state |= MSG_WINDOW_STATE_ICONIC;
- SetWindowLongPtr(hwndDlg, DWLP_MSGRESULT, state);
+ SetWindowLongPtr(m_hwnd, DWLP_MSGRESULT, state);
}
return TRUE;
case DM_CLIENTCHANGED:
- GetClientIcon(dat);
- if (dat->hClientIcon && dat->Panel->isActive())
- InvalidateRect(hwndDlg, NULL, TRUE);
+ GetClientIcon();
+ if (hClientIcon && Panel->isActive())
+ InvalidateRect(m_hwnd, NULL, TRUE);
return 0;
case DM_UPDATEUIN:
- if (dat->Panel->isActive())
- dat->Panel->Invalidate();
- if (dat->pContainer->dwFlags & CNT_UINSTATUSBAR)
- UpdateStatusBar(dat);
+ if (Panel->isActive())
+ Panel->Invalidate();
+ if (pContainer->dwFlags & CNT_UINSTATUSBAR)
+ UpdateStatusBar();
return 0;
case DM_REMOVEPOPUPS:
- DeletePopupsForContact(dat->hContact, (DWORD)wParam);
+ DeletePopupsForContact(m_hContact, (DWORD)wParam);
return 0;
case EM_THEMECHANGED:
- DM_FreeTheme(dat);
- return DM_ThemeChanged(dat);
+ DM_FreeTheme();
+ DM_ThemeChanged();
+ return 0;
case DM_PLAYINCOMINGSOUND:
- if (!dat)
- return 0;
- PlayIncomingSound(dat);
+ PlayIncomingSound();
return 0;
case DM_REFRESHTABINDEX:
- dat->iTabID = GetTabIndexFromHWND(GetParent(hwndDlg), hwndDlg);
+ iTabID = GetTabIndexFromHWND(GetParent(m_hwnd), m_hwnd);
return 0;
case DM_STATUSICONCHANGE:
- if (m_pContainer->hwndStatus) {
- SendMessage(dat->pContainer->hwnd, WM_SIZE, 0, 0);
- SendMessage(m_pContainer->hwndStatus, SB_SETTEXT, (WPARAM)(SBT_OWNERDRAW) | 2, 0);
- InvalidateRect(m_pContainer->hwndStatus, NULL, TRUE);
+ if (pContainer->hwndStatus) {
+ SendMessage(pContainer->hwnd, WM_SIZE, 0, 0);
+ SendMessage(pContainer->hwndStatus, SB_SETTEXT, (WPARAM)(SBT_OWNERDRAW) | 2, 0);
+ InvalidateRect(pContainer->hwndStatus, NULL, TRUE);
}
return 0;
case WM_CBD_UPDATED:
if (lParam)
- CB_ChangeButton(hwndDlg, dat, (CustomButtonData*)lParam);
+ CB_ChangeButton((CustomButtonData*)lParam);
else
- BB_InitDlgButtons(dat);
+ BB_InitDlgButtons();
- BB_SetButtonsPos(dat);
+ BB_SetButtonsPos();
return 0;
case WM_CBD_REMOVED:
if (lParam)
- CB_DestroyButton(hwndDlg, dat, (DWORD)wParam, (DWORD)lParam);
+ CB_DestroyButton((DWORD)wParam, (DWORD)lParam);
else
- CB_DestroyAllButtons(hwndDlg);
+ CB_DestroyAllButtons();
return 0;
case WM_DROPFILES:
{
BOOL not_sending = GetKeyState(VK_CONTROL) & 0x8000;
if (!not_sending) {
- const char *szProto = dat->cache->getActiveProto();
+ const char *szProto = cache->getActiveProto();
if (szProto == NULL)
break;
int pcaps = CallProtoService(szProto, PS_GETCAPS, PFLAGNUM_1, 0);
if (!(pcaps & PF1_FILESEND))
break;
- if (dat->wStatus == ID_STATUS_OFFLINE) {
+ if (wStatus == ID_STATUS_OFFLINE) {
pcaps = CallProtoService(szProto, PS_GETCAPS, PFLAGNUM_4, 0);
if (!(pcaps & PF4_OFFLINEFILES)) {
- SendMessage(hwndDlg, DM_ACTIVATETOOLTIP, IDC_MESSAGE, (LPARAM)TranslateT("Contact is offline and this protocol does not support sending files to offline users."));
+ SendMessage(m_hwnd, DM_ACTIVATETOOLTIP, IDC_MESSAGE, (LPARAM)TranslateT("Contact is offline and this protocol does not support sending files to offline users."));
break;
}
}
}
- if (dat->hContact != NULL) {
+ if (m_hContact != NULL) {
wchar_t szFilename[MAX_PATH];
HDROP hDrop = (HDROP)wParam;
int fileCount = DragQueryFile(hDrop, -1, NULL, 0), totalCount = 0, i;
@@ -3048,7 +3102,7 @@ quote_from_last:
}
if (!not_sending)
- CallService(MS_FILE_SENDSPECIFICFILEST, dat->hContact, (LPARAM)ppFiles);
+ CallService(MS_FILE_SENDSPECIFICFILEST, m_hContact, (LPARAM)ppFiles);
else {
if (ServiceExists(MS_HTTPSERVER_ADDFILENAME)) {
for (i = 0; i < totalCount; i++) {
@@ -3057,8 +3111,8 @@ quote_from_last:
mir_free(szFileName);
}
char *szHTTPText = "DEBUG";
- SendDlgItemMessageA(hwndDlg, IDC_MESSAGE, EM_REPLACESEL, TRUE, (LPARAM)szHTTPText);
- SetFocus(GetDlgItem(hwndDlg, IDC_MESSAGE));
+ SendDlgItemMessageA(m_hwnd, IDC_MESSAGE, EM_REPLACESEL, TRUE, (LPARAM)szHTTPText);
+ SetFocus(m_message.GetHwnd());
}
}
for (i = 0; ppFiles[i]; i++)
@@ -3072,233 +3126,96 @@ quote_from_last:
{
int *uOpen = (int*)lParam;
if (uOpen)
- *uOpen += dat->iOpenJobs;
+ *uOpen += iOpenJobs;
}
return 0;
case WM_CLOSE:
// esc handles error controls if we are in error state (error controls visible)
- if (wParam == 0 && lParam == 0 && dat->dwFlags & MWF_ERRORSTATE) {
- SendMessage(hwndDlg, DM_ERRORDECIDED, MSGERROR_CANCEL, 0);
+ if (wParam == 0 && lParam == 0 && dwFlags & MWF_ERRORSTATE) {
+ SendMessage(m_hwnd, DM_ERRORDECIDED, MSGERROR_CANCEL, 0);
return TRUE;
}
if (wParam == 0 && lParam == 0) {
if (PluginConfig.m_EscapeCloses == 1) {
- SendMessage(hwndContainer, WM_SYSCOMMAND, SC_MINIMIZE, 0);
+ SendMessage(pContainer->hwnd, WM_SYSCOMMAND, SC_MINIMIZE, 0);
return TRUE;
}
else if (PluginConfig.m_bHideOnClose && PluginConfig.m_EscapeCloses == 2) {
- ShowWindow(hwndContainer, SW_HIDE);
+ ShowWindow(pContainer->hwnd, SW_HIDE);
return TRUE;
}
- _dlgReturn(hwndDlg, TRUE);
+ _dlgReturn(m_hwnd, TRUE);
}
- if (dat) {
- TContainerData *pContainer = dat->pContainer;
- if (dat->iOpenJobs > 0 && lParam != 2) {
- if (dat->dwFlags & MWF_ERRORSTATE) {
- SendMessage(hwndDlg, DM_ERRORDECIDED, MSGERROR_CANCEL, 1);
- }
- else {
- if (dat->dwFlagsEx & MWF_EX_WARNCLOSE)
- return TRUE;
- dat->dwFlagsEx |= MWF_EX_WARNCLOSE;
- LRESULT result = SendQueue::WarnPendingJobs(0);
- dat->dwFlagsEx &= ~MWF_EX_WARNCLOSE;
- if (result == IDNO)
- return TRUE;
- }
+ if (iOpenJobs > 0 && lParam != 2) {
+ if (dwFlags & MWF_ERRORSTATE) {
+ SendMessage(m_hwnd, DM_ERRORDECIDED, MSGERROR_CANCEL, 1);
}
- int iTabs = TabCtrl_GetItemCount(hwndTab);
+ else {
+ if (dwFlagsEx & MWF_EX_WARNCLOSE)
+ return TRUE;
+
+ dwFlagsEx |= MWF_EX_WARNCLOSE;
+ LRESULT result = SendQueue::WarnPendingJobs(0);
+ dwFlagsEx &= ~MWF_EX_WARNCLOSE;
+ if (result == IDNO)
+ return TRUE;
+ }
+ }
+ {
+ int iTabs = TabCtrl_GetItemCount(m_hwndParent);
if (iTabs == 1) {
- PostMessage(hwndContainer, WM_CLOSE, 0, 1);
+ PostMessage(pContainer->hwnd, WM_CLOSE, 0, 1);
return 1;
}
- m_pContainer->iChilds--;
- int i = GetTabIndexFromHWND(hwndTab, hwndDlg);
+ pContainer->iChilds--;
// after closing a tab, we need to activate the tab to the left side of
// the previously open tab.
// normally, this tab has the same index after the deletion of the formerly active tab
// unless, of course, we closed the last (rightmost) tab.
- if (!m_pContainer->bDontSmartClose && iTabs > 1 && lParam != 3) {
+ if (!pContainer->bDontSmartClose && iTabs > 1 && lParam != 3) {
+ int i = GetTabIndexFromHWND(m_hwndParent, m_hwnd);
if (i == iTabs - 1)
i--;
else
i++;
- TabCtrl_SetCurSel(hwndTab, i);
+ TabCtrl_SetCurSel(m_hwndParent, i);
TCITEM item = { 0 };
item.mask = TCIF_PARAM;
- TabCtrl_GetItem(hwndTab, i, &item); // retrieve dialog hwnd for the now active tab...
+ TabCtrl_GetItem(m_hwndParent, i, &item); // retrieve dialog hwnd for the now active tab...
- m_pContainer->hwndActive = (HWND)item.lParam;
+ pContainer->hwndActive = (HWND)item.lParam;
- SendMessage(hwndContainer, DM_QUERYCLIENTAREA, 0, (LPARAM)&rc);
- SetWindowPos(m_pContainer->hwndActive, HWND_TOP, rc.left, rc.top, (rc.right - rc.left), (rc.bottom - rc.top), SWP_SHOWWINDOW);
+ SendMessage(pContainer->hwnd, DM_QUERYCLIENTAREA, 0, (LPARAM)&rc);
+ SetWindowPos(pContainer->hwndActive, HWND_TOP, rc.left, rc.top, (rc.right - rc.left), (rc.bottom - rc.top), SWP_SHOWWINDOW);
ShowWindow((HWND)item.lParam, SW_SHOW);
- SetForegroundWindow(m_pContainer->hwndActive);
- SetFocus(m_pContainer->hwndActive);
- SendMessage(hwndContainer, WM_SIZE, 0, 0);
- }
-
- DestroyWindow(hwndDlg);
- SendMessage(pContainer->hwnd, WM_SIZE, 0, 0);
- }
- break;
-
- case WM_DESTROY:
- if (!dat)
- break;
-
- if (dat->hwndContactPic)
- DestroyWindow(dat->hwndContactPic);
-
- if (dat->hwndPanelPic)
- DestroyWindow(dat->hwndPanelPic);
-
- if (dat->hClientIcon)
- DestroyIcon(dat->hClientIcon);
-
- if (dat->hwndPanelPicParent)
- DestroyWindow(dat->hwndPanelPicParent);
-
- if (dat->cache->isValid()) { // not valid means the contact was deleted
- TABSRMM_FireEvent(dat->hContact, hwndDlg, MSG_WINDOW_EVT_CLOSING, 0);
- AddContactToFavorites(dat->hContact, dat->cache->getNick(), dat->cache->getActiveProto(), dat->szStatus, dat->wStatus,
- Skin_LoadProtoIcon(dat->cache->getActiveProto(), dat->cache->getActiveStatus()), 1, PluginConfig.g_hMenuRecent);
- if (dat->hContact) {
- if (!dat->fEditNotesActive) {
- char *msg = Message_GetFromStream(GetDlgItem(hwndDlg, IDC_MESSAGE), SF_TEXT);
- if (msg) {
- db_set_utf(dat->hContact, SRMSGMOD, "SavedMsg", msg);
- mir_free(msg);
- }
- else db_unset(dat->hContact, SRMSGMOD, "SavedMsg");
- }
- else SendMessage(hwndDlg, WM_COMMAND, IDC_PIC, 0);
- }
- }
-
- if (dat->nTypeMode == PROTOTYPE_SELFTYPING_ON)
- DM_NotifyTyping(dat, PROTOTYPE_SELFTYPING_OFF);
-
- DM_FreeTheme(dat);
-
- mir_free(dat->sendBuffer);
- mir_free(dat->hHistoryEvents);
-
- // search the sendqueue for unfinished send jobs and mir_free them. Leave unsent
- // messages in the queue as they can be acked later
- {
- SendJob *jobs = sendQueue->getJobByIndex(0);
-
- for (int i = 0; i < SendQueue::NR_SENDJOBS; i++) {
- if (jobs[i].hContact == dat->hContact) {
- if (jobs[i].iStatus > (unsigned)SendQueue::SQ_INPROGRESS)
- sendQueue->clearJob(i);
-
- // unfinished jobs which did not yet return anything are kept in the queue.
- // the hwndOwner is set to 0 because the window handle is now no longer valid.
- // Response for such a job is still silently handled by AckMessage() (sendqueue.c)
- if (jobs[i].iStatus == (unsigned)SendQueue::SQ_INPROGRESS)
- jobs[i].hOwnerWnd = 0;
- }
+ SetForegroundWindow(pContainer->hwndActive);
+ SetFocus(pContainer->hwndActive);
}
}
- mir_free(dat->hQueuedEvents);
-
- if (dat->hSmileyIcon)
- DestroyIcon(dat->hSmileyIcon);
-
- if (dat->hXStatusIcon)
- DestroyIcon(dat->hXStatusIcon);
-
- if (dat->hwndTip)
- DestroyWindow(dat->hwndTip);
-
- if (dat->hTaskbarIcon)
- DestroyIcon(dat->hTaskbarIcon);
-
- UpdateTrayMenuState(dat, FALSE); // remove me from the tray menu (if still there)
- if (PluginConfig.g_hMenuTrayUnread)
- DeleteMenu(PluginConfig.g_hMenuTrayUnread, (UINT_PTR)dat->hContact, MF_BYCOMMAND);
- M.RemoveWindow(hwndDlg);
-
- if (dat->cache->isValid())
- db_set_dw(0, SRMSGMOD, "multisplit", dat->multiSplitterX);
-
- {
- int i = GetTabIndexFromHWND(hwndTab, hwndDlg);
- if (i >= 0) {
- SendMessage(hwndTab, WM_USER + 100, 0, 0); // remove tooltip
- TabCtrl_DeleteItem(hwndTab, i);
- BroadCastContainer(m_pContainer, DM_REFRESHTABINDEX, 0, 0);
- dat->iTabID = -1;
- }
- }
-
- TABSRMM_FireEvent(dat->hContact, hwndDlg, MSG_WINDOW_EVT_CLOSE, 0);
-
- // clean up IEView and H++ log windows
- if (dat->hwndIEView != 0) {
- IEVIEWWINDOW ieWindow;
- ieWindow.cbSize = sizeof(IEVIEWWINDOW);
- ieWindow.iType = IEW_DESTROY;
- ieWindow.hwnd = dat->hwndIEView;
- CallService(MS_IEVIEW_WINDOW, 0, (LPARAM)&ieWindow);
- }
- if (dat->hwndHPP) {
- IEVIEWWINDOW ieWindow;
- ieWindow.cbSize = sizeof(IEVIEWWINDOW);
- ieWindow.iType = IEW_DESTROY;
- ieWindow.hwnd = dat->hwndHPP;
- CallService(MS_HPP_EG_WINDOW, 0, (LPARAM)&ieWindow);
- }
- if (dat->pWnd) {
- delete dat->pWnd;
- dat->pWnd = 0;
- }
- if (dat->sbCustom) {
- delete dat->sbCustom;
- dat->sbCustom = 0;
- }
+ SendMessage(pContainer->hwnd, WM_SIZE, 0, 0);
break;
case WM_DWMCOMPOSITIONCHANGED:
- BB_RefreshTheme(dat);
- memset((void*)&dat->pContainer->mOld, -1000, sizeof(MARGINS));
- CProxyWindow::verify(dat);
+ BB_RefreshTheme();
+ memset((void*)&pContainer->mOld, -1000, sizeof(MARGINS));
+ CProxyWindow::verify(this);
break;
case DM_FORCEREDRAW:
- RedrawWindow(hwndDlg, NULL, NULL, RDW_INVALIDATE | RDW_ERASE | RDW_UPDATENOW);
+ RedrawWindow(m_hwnd, NULL, NULL, RDW_INVALIDATE | RDW_ERASE | RDW_UPDATENOW);
return 0;
case DM_CHECKINFOTIP:
- dat->Panel->hideTip(reinterpret_cast<HWND>(lParam));
+ Panel->hideTip(reinterpret_cast<HWND>(lParam));
return 0;
-
- case WM_NCDESTROY:
- if (dat) {
- memset((void*)&dat->pContainer->mOld, -1000, sizeof(MARGINS));
- PostMessage(dat->pContainer->hwnd, WM_SIZE, 0, 1);
- if (m_pContainer->dwFlags & CNT_SIDEBAR)
- m_pContainer->SideBar->removeSession(dat);
- dat->cache->setWindowData();
- if (dat->cache->isValid() && !dat->fIsReattach && dat->hContact && M.GetByte("deletetemp", 0))
- if (db_get_b(dat->hContact, "CList", "NotOnList", 0))
- db_delete_contact(dat->hContact);
-
- delete dat->Panel;
- mir_free(dat);
- }
- SetWindowLongPtr(hwndDlg, GWLP_USERDATA, 0);
- break;
}
- return FALSE;
+
+ return CTabBaseDlg::DlgProc(uMsg, wParam, lParam);
}
diff --git a/plugins/TabSRMM/src/msgdlgutils.cpp b/plugins/TabSRMM/src/msgdlgutils.cpp
index b34c26cd99..c24c71a8d8 100644
--- a/plugins/TabSRMM/src/msgdlgutils.cpp
+++ b/plugins/TabSRMM/src/msgdlgutils.cpp
@@ -71,7 +71,7 @@ bool TSAPI IsCustomEvent(int eventType)
// be saved to the contacts db record (if so, the container will try to open the tab
// at the saved position later)
-void TSAPI RearrangeTab(HWND hwndDlg, const TWindowData *dat, int iMode, BOOL fSavePos)
+void TSAPI RearrangeTab(HWND hwndDlg, const CTabBaseDlg *dat, int iMode, BOOL fSavePos)
{
if (dat == NULL || !IsWindow(hwndDlg))
return;
@@ -93,7 +93,7 @@ void TSAPI RearrangeTab(HWND hwndDlg, const TWindowData *dat, int iMode, BOOL fS
BroadCastContainer(dat->pContainer, DM_REFRESHTABINDEX, 0, 0);
ActivateTabFromHWND(hwndTab, hwndDlg);
if (fSavePos)
- db_set_dw(dat->hContact, SRMSGMOD_T, "tabindex", newIndex * 100);
+ db_set_dw(dat->m_hContact, SRMSGMOD_T, "tabindex", newIndex * 100);
}
}
@@ -127,7 +127,7 @@ static UINT_PTR CALLBACK OpenFileSubclass(HWND hwnd, UINT msg, WPARAM, LPARAM lP
// takes hbm (bitmap handle) and bool isOwnPic (1 == save the picture as your own avatar)
// requires AVS and ADVAIMG services (Miranda 0.7+)
-static void SaveAvatarToFile(TWindowData *dat, HBITMAP hbm, int isOwnPic)
+static void SaveAvatarToFile(CTabBaseDlg *dat, HBITMAP hbm, int isOwnPic)
{
wchar_t szFinalFilename[MAX_PATH];
time_t t = time(NULL);
@@ -195,74 +195,72 @@ static void SaveAvatarToFile(TWindowData *dat, HBITMAP hbm, int isOwnPic)
// flash a tab icon if mode = true, otherwise restore default icon
// store flashing state into bState
-void TSAPI FlashTab(TWindowData *dat, HWND hwndTab, int iTabindex, BOOL *bState, BOOL mode, HICON origImage)
+void CTabBaseDlg::FlashTab(bool bInvertMode)
{
- if (mode)
- *bState = !(*bState);
- else
- dat->hTabIcon = origImage;
+ if (bInvertMode)
+ m_bTabFlash = !m_bTabFlash;
TCITEM item = { 0 };
item.mask = TCIF_IMAGE;
- TabCtrl_SetItem(hwndTab, iTabindex, &item);
- if (dat->pContainer->dwFlags & CNT_SIDEBAR)
- dat->pContainer->SideBar->updateSession(dat);
+ TabCtrl_SetItem(m_hwndParent, iTabID, &item);
+ if (pContainer->dwFlags & CNT_SIDEBAR)
+ pContainer->SideBar->updateSession(this);
}
/////////////////////////////////////////////////////////////////////////////////////////
// calculates avatar layouting, based on splitter position to find the optimal size
// for the avatar w/o disturbing the toolbar too much.
-void TSAPI CalcDynamicAvatarSize(TWindowData *dat, BITMAP *bminfo)
+void CTabBaseDlg::CalcDynamicAvatarSize(BITMAP *bminfo)
{
- if (dat->dwFlags & MWF_WASBACKGROUNDCREATE || dat->pContainer->dwFlags & CNT_DEFERREDCONFIGURE || dat->pContainer->dwFlags & CNT_CREATE_MINIMIZED || IsIconic(dat->pContainer->hwnd))
+ if (dwFlags & MWF_WASBACKGROUNDCREATE || pContainer->dwFlags & CNT_DEFERREDCONFIGURE || pContainer->dwFlags & CNT_CREATE_MINIMIZED || IsIconic(pContainer->hwnd))
return; // at this stage, the layout is not yet ready...
RECT rc;
- GetClientRect(dat->hwnd, &rc);
+ GetClientRect(GetHwnd(), &rc);
- BOOL bBottomToolBar = dat->pContainer->dwFlags & CNT_BOTTOMTOOLBAR;
- BOOL bToolBar = dat->pContainer->dwFlags & CNT_HIDETOOLBAR ? 0 : 1;
- int iSplitOffset = dat->bIsAutosizingInput ? 1 : 0;
+ BOOL bBottomToolBar = pContainer->dwFlags & CNT_BOTTOMTOOLBAR;
+ BOOL bToolBar = pContainer->dwFlags & CNT_HIDETOOLBAR ? 0 : 1;
+ int iSplitOffset = bIsAutosizingInput ? 1 : 0;
double picAspect = (bminfo->bmWidth == 0 || bminfo->bmHeight == 0) ? 1.0 : (double)(bminfo->bmWidth / (double)bminfo->bmHeight);
- double picProjectedWidth = (double)((dat->dynaSplitter - ((bBottomToolBar && bToolBar) ? DPISCALEX_S(24) : 0) + ((dat->bShowUIElements) ? DPISCALEX_S(28) : DPISCALEX_S(2)))) * picAspect;
+ double picProjectedWidth = (double)((dynaSplitter - ((bBottomToolBar && bToolBar) ? DPISCALEX_S(24) : 0) + ((bShowUIElements) ? DPISCALEX_S(28) : DPISCALEX_S(2)))) * picAspect;
- if ((rc.right - (int)picProjectedWidth) > (dat->iButtonBarReallyNeeds) && !PluginConfig.m_bAlwaysFullToolbarWidth && bToolBar)
- dat->iRealAvatarHeight = dat->dynaSplitter + 3 + (dat->bShowUIElements ? DPISCALEY_S(28) : DPISCALEY_S(2));
+ if ((rc.right - (int)picProjectedWidth) > (iButtonBarReallyNeeds) && !PluginConfig.m_bAlwaysFullToolbarWidth && bToolBar)
+ iRealAvatarHeight = dynaSplitter + 3 + (bShowUIElements ? DPISCALEY_S(28) : DPISCALEY_S(2));
else
- dat->iRealAvatarHeight = dat->dynaSplitter + DPISCALEY_S(6) + DPISCALEY_S(iSplitOffset);
+ iRealAvatarHeight = dynaSplitter + DPISCALEY_S(6) + DPISCALEY_S(iSplitOffset);
- dat->iRealAvatarHeight -= ((bBottomToolBar&&bToolBar) ? DPISCALEY_S(22) : 0);
+ iRealAvatarHeight -= ((bBottomToolBar&&bToolBar) ? DPISCALEY_S(22) : 0);
if (PluginConfig.m_LimitStaticAvatarHeight > 0)
- dat->iRealAvatarHeight = min(dat->iRealAvatarHeight, PluginConfig.m_LimitStaticAvatarHeight);
+ iRealAvatarHeight = min(iRealAvatarHeight, PluginConfig.m_LimitStaticAvatarHeight);
- if (M.GetByte(dat->hContact, "dontscaleavatars", M.GetByte("dontscaleavatars", 0)))
- dat->iRealAvatarHeight = min(bminfo->bmHeight, dat->iRealAvatarHeight);
+ if (M.GetByte(m_hContact, "dontscaleavatars", M.GetByte("dontscaleavatars", 0)))
+ iRealAvatarHeight = min(bminfo->bmHeight, iRealAvatarHeight);
- double aspect = (bminfo->bmHeight != 0) ? (double)dat->iRealAvatarHeight / (double)bminfo->bmHeight : 1.0;
+ double aspect = (bminfo->bmHeight != 0) ? (double)iRealAvatarHeight / (double)bminfo->bmHeight : 1.0;
double newWidth = (double)bminfo->bmWidth * aspect;
if (newWidth > (double)(rc.right) * 0.8)
newWidth = (double)(rc.right) * 0.8;
- dat->pic.cy = dat->iRealAvatarHeight + 2;
- dat->pic.cx = (int)newWidth + 2;
+ pic.cy = iRealAvatarHeight + 2;
+ pic.cx = (int)newWidth + 2;
}
-int TSAPI MsgWindowUpdateMenu(TWindowData *dat, HMENU submenu, int menuID)
+int CTabBaseDlg::MsgWindowUpdateMenu(HMENU submenu, int menuID)
{
- bool bInfoPanel = dat->Panel->isActive();
+ bool bInfoPanel = Panel->isActive();
if (menuID == MENU_TABCONTEXT) {
- EnableMenuItem(submenu, ID_TABMENU_LEAVECHATROOM, (dat->bType == SESSIONTYPE_CHAT && ProtoServiceExists(dat->szProto, PS_LEAVECHAT)) ? MF_ENABLED : MF_DISABLED);
+ EnableMenuItem(submenu, ID_TABMENU_LEAVECHATROOM, (bType == SESSIONTYPE_CHAT && ProtoServiceExists(szProto, PS_LEAVECHAT)) ? MF_ENABLED : MF_DISABLED);
EnableMenuItem(submenu, ID_TABMENU_ATTACHTOCONTAINER, (M.GetByte("useclistgroups", 0) || M.GetByte("singlewinmode", 0)) ? MF_GRAYED : MF_ENABLED);
- EnableMenuItem(submenu, ID_TABMENU_CLEARSAVEDTABPOSITION, (M.GetDword(dat->hContact, "tabindex", -1) != -1) ? MF_ENABLED : MF_GRAYED);
+ EnableMenuItem(submenu, ID_TABMENU_CLEARSAVEDTABPOSITION, (M.GetDword(m_hContact, "tabindex", -1) != -1) ? MF_ENABLED : MF_GRAYED);
}
else if (menuID == MENU_PICMENU) {
wchar_t *szText = NULL;
- char avOverride = (char)M.GetByte(dat->hContact, "hideavatar", -1);
+ char avOverride = (char)M.GetByte(m_hContact, "hideavatar", -1);
HMENU visMenu = GetSubMenu(submenu, 0);
- BOOL picValid = bInfoPanel ? (dat->hOwnPic != 0) : (dat->ace && dat->ace->hbmPic && dat->ace->hbmPic != PluginConfig.g_hbmUnknown);
+ BOOL picValid = bInfoPanel ? (hOwnPic != 0) : (ace && ace->hbmPic && ace->hbmPic != PluginConfig.g_hbmUnknown);
MENUITEMINFO mii = { 0 };
mii.cbSize = sizeof(mii);
@@ -282,7 +280,7 @@ int TSAPI MsgWindowUpdateMenu(TWindowData *dat, HMENU submenu, int menuID)
}
else {
EnableMenuItem(submenu, 0, MF_BYPOSITION | MF_GRAYED);
- EnableMenuItem(submenu, ID_PICMENU_SETTINGS, MF_BYCOMMAND | ((ServiceExists(MS_AV_SETMYAVATARW) && CallService(MS_AV_CANSETMYAVATAR, (WPARAM)(dat->cache->getActiveProto()), 0)) ? MF_ENABLED : MF_GRAYED));
+ EnableMenuItem(submenu, ID_PICMENU_SETTINGS, MF_BYCOMMAND | ((ServiceExists(MS_AV_SETMYAVATARW) && CallService(MS_AV_CANSETMYAVATAR, (WPARAM)(cache->getActiveProto()), 0)) ? MF_ENABLED : MF_GRAYED));
szText = TranslateT("Set your avatar...");
}
mii.dwTypeData = szText;
@@ -291,53 +289,47 @@ int TSAPI MsgWindowUpdateMenu(TWindowData *dat, HMENU submenu, int menuID)
}
else if (menuID == MENU_PANELPICMENU) {
HMENU visMenu = GetSubMenu(submenu, 0);
- char avOverride = (char)M.GetByte(dat->hContact, "hideavatar", -1);
+ char avOverride = (char)M.GetByte(m_hContact, "hideavatar", -1);
CheckMenuItem(visMenu, ID_VISIBILITY_DEFAULT, MF_BYCOMMAND | (avOverride == -1 ? MF_CHECKED : MF_UNCHECKED));
CheckMenuItem(visMenu, ID_VISIBILITY_HIDDENFORTHISCONTACT, MF_BYCOMMAND | (avOverride == 0 ? MF_CHECKED : MF_UNCHECKED));
CheckMenuItem(visMenu, ID_VISIBILITY_VISIBLEFORTHISCONTACT, MF_BYCOMMAND | (avOverride == 1 ? MF_CHECKED : MF_UNCHECKED));
EnableMenuItem(submenu, ID_PICMENU_SETTINGS, MF_BYCOMMAND | (ServiceExists(MS_AV_GETAVATARBITMAP) ? MF_ENABLED : MF_GRAYED));
- EnableMenuItem(submenu, ID_PANELPICMENU_SAVETHISPICTUREAS, MF_BYCOMMAND | ((dat->ace && dat->ace->hbmPic && dat->ace->hbmPic != PluginConfig.g_hbmUnknown) ? MF_ENABLED : MF_GRAYED));
+ EnableMenuItem(submenu, ID_PANELPICMENU_SAVETHISPICTUREAS, MF_BYCOMMAND | ((ace && ace->hbmPic && ace->hbmPic != PluginConfig.g_hbmUnknown) ? MF_ENABLED : MF_GRAYED));
}
return 0;
}
-int TSAPI MsgWindowMenuHandler(TWindowData *dat, int selection, int menuId)
+int CTabBaseDlg::MsgWindowMenuHandler(int selection, int menuId)
{
- if (dat == 0)
- return 0;
-
- HWND hwndDlg = dat->hwnd;
-
if (menuId == MENU_PICMENU || menuId == MENU_PANELPICMENU || menuId == MENU_TABCONTEXT) {
switch (selection) {
case ID_TABMENU_ATTACHTOCONTAINER:
- CreateDialogParam(g_hInst, MAKEINTRESOURCE(IDD_SELECTCONTAINER), hwndDlg, SelectContainerDlgProc, (LPARAM)hwndDlg);
+ CreateDialogParam(g_hInst, MAKEINTRESOURCE(IDD_SELECTCONTAINER), m_hwnd, SelectContainerDlgProc, (LPARAM)m_hwnd);
return 1;
case ID_TABMENU_CONTAINEROPTIONS:
- if (dat->pContainer->hWndOptions == 0)
- CreateDialogParam(g_hInst, MAKEINTRESOURCE(IDD_CONTAINEROPTIONS), hwndDlg, DlgProcContainerOptions, (LPARAM)dat->pContainer);
+ if (pContainer->hWndOptions == 0)
+ CreateDialogParam(g_hInst, MAKEINTRESOURCE(IDD_CONTAINEROPTIONS), m_hwnd, DlgProcContainerOptions, (LPARAM)pContainer);
return 1;
case ID_TABMENU_CLOSECONTAINER:
- SendMessage(dat->pContainer->hwnd, WM_CLOSE, 0, 0);
+ SendMessage(pContainer->hwnd, WM_CLOSE, 0, 0);
return 1;
case ID_TABMENU_CLOSETAB:
- SendMessage(hwndDlg, WM_CLOSE, 1, 0);
+ SendMessage(m_hwnd, WM_CLOSE, 1, 0);
return 1;
case ID_TABMENU_SAVETABPOSITION:
- db_set_dw(dat->hContact, SRMSGMOD_T, "tabindex", dat->iTabID * 100);
+ db_set_dw(m_hContact, SRMSGMOD_T, "tabindex", iTabID * 100);
break;
case ID_TABMENU_CLEARSAVEDTABPOSITION:
- db_unset(dat->hContact, SRMSGMOD_T, "tabindex");
+ db_unset(m_hContact, SRMSGMOD_T, "tabindex");
break;
case ID_TABMENU_LEAVECHATROOM:
- if (dat && dat->bType == SESSIONTYPE_CHAT) {
- SESSION_INFO *si = dat->si;
- if (si != NULL && dat->hContact != NULL) {
- char *szProto = GetContactProto(dat->hContact);
+ if (bType == SESSIONTYPE_CHAT) {
+ if (si != NULL && m_hContact != NULL) {
+ char *szProto = GetContactProto(m_hContact);
if (szProto)
- CallProtoService(szProto, PS_LEAVECHAT, dat->hContact, 0);
+ CallProtoService(szProto, PS_LEAVECHAT, m_hContact, 0);
}
}
return 1;
@@ -353,12 +345,12 @@ int TSAPI MsgWindowMenuHandler(TWindowData *dat, int selection, int menuId)
avOverrideMode = 1;
else
avOverrideMode = 0;
- db_set_b(dat->hContact, SRMSGMOD_T, "hideavatar", avOverrideMode);
+ db_set_b(m_hContact, SRMSGMOD_T, "hideavatar", avOverrideMode);
}
- ShowPicture(dat, FALSE);
- SendMessage(hwndDlg, WM_SIZE, 0, 0);
- DM_ScrollToBottom(dat, 0, 1);
+ ShowPicture(false);
+ SendMessage(m_hwnd, WM_SIZE, 0, 0);
+ DM_ScrollToBottom(this, 0, 1);
return 1;
case ID_PICMENU_ALWAYSKEEPTHEBUTTONBARATFULLWIDTH:
@@ -368,31 +360,27 @@ int TSAPI MsgWindowMenuHandler(TWindowData *dat, int selection, int menuId)
break;
case ID_PICMENU_SAVETHISPICTUREAS:
- if (dat->Panel->isActive()) {
- if (dat)
- SaveAvatarToFile(dat, dat->hOwnPic, 1);
- }
- else {
- if (dat && dat->ace)
- SaveAvatarToFile(dat, dat->ace->hbmPic, 0);
- }
+ if (Panel->isActive())
+ SaveAvatarToFile(this, hOwnPic, 1);
+ else if (ace)
+ SaveAvatarToFile(this, ace->hbmPic, 0);
break;
case ID_PANELPICMENU_SAVETHISPICTUREAS:
- if (dat && dat->ace)
- SaveAvatarToFile(dat, dat->ace->hbmPic, 0);
+ if (ace)
+ SaveAvatarToFile(this, ace->hbmPic, 0);
break;
case ID_PICMENU_SETTINGS:
if (menuId == MENU_PANELPICMENU)
- CallService(MS_AV_CONTACTOPTIONS, dat->hContact, 0);
+ CallService(MS_AV_CONTACTOPTIONS, m_hContact, 0);
else if (menuId == MENU_PICMENU) {
- if (dat->Panel->isActive()) {
- if (ServiceExists(MS_AV_SETMYAVATARW) && CallService(MS_AV_CANSETMYAVATAR, (WPARAM)(dat->cache->getActiveProto()), 0))
- CallService(MS_AV_SETMYAVATARW, (WPARAM)(dat->cache->getActiveProto()), 0);
+ if (Panel->isActive()) {
+ if (ServiceExists(MS_AV_SETMYAVATARW) && CallService(MS_AV_CANSETMYAVATAR, (WPARAM)(cache->getActiveProto()), 0))
+ CallService(MS_AV_SETMYAVATARW, (WPARAM)(cache->getActiveProto()), 0);
}
else
- CallService(MS_AV_CONTACTOPTIONS, dat->hContact, 0);
+ CallService(MS_AV_CONTACTOPTIONS, m_hContact, 0);
}
return 1;
}
@@ -404,7 +392,7 @@ int TSAPI MsgWindowMenuHandler(TWindowData *dat, int selection, int menuId)
return 1;
case ID_MESSAGELOGSETTINGS_FORTHISCONTACT:
- CallService(MS_TABMSG_SETUSERPREFS, dat->hContact, 0);
+ CallService(MS_TABMSG_SETUSERPREFS, m_hContact, 0);
return 1;
}
}
@@ -415,73 +403,73 @@ int TSAPI MsgWindowMenuHandler(TWindowData *dat, int selection, int menuId)
// update the status bar field which displays the number of characters in the input area
// and various indicators (caps lock, num lock, insert mode).
-void TSAPI UpdateReadChars(const TWindowData *dat)
+void CTabBaseDlg::UpdateReadChars() const
{
- if (dat && (dat->pContainer->hwndStatus && dat->pContainer->hwndActive == dat->hwnd)) {
- wchar_t buf[128];
- int len;
-
- if (dat->bType == SESSIONTYPE_CHAT)
- len = GetWindowTextLength(GetDlgItem(dat->hwnd, IDC_CHAT_MESSAGE));
- else {
- // retrieve text length in UTF8 bytes, because this is the relevant length for most protocols
- GETTEXTLENGTHEX gtxl = { 0 };
- gtxl.codepage = CP_UTF8;
- gtxl.flags = GTL_DEFAULT | GTL_PRECISE | GTL_NUMBYTES;
+ if (!pContainer->hwndStatus || pContainer->hwndActive != m_hwnd)
+ return;
- len = SendDlgItemMessage(dat->hwnd, IDC_MESSAGE, EM_GETTEXTLENGTHEX, (WPARAM)&gtxl, 0);
- }
+ int len;
+ if (bType == SESSIONTYPE_CHAT)
+ len = GetWindowTextLength(m_message.GetHwnd());
+ else {
+ // retrieve text length in UTF8 bytes, because this is the relevant length for most protocols
+ GETTEXTLENGTHEX gtxl = { 0 };
+ gtxl.codepage = CP_UTF8;
+ gtxl.flags = GTL_DEFAULT | GTL_PRECISE | GTL_NUMBYTES;
- BOOL fCaps = (GetKeyState(VK_CAPITAL) & 1);
- BOOL fNum = (GetKeyState(VK_NUMLOCK) & 1);
-
- wchar_t szBuf[20]; szBuf[0] = 0;
- if (dat->fInsertMode)
- mir_wstrcat(szBuf, L"O");
- if (fCaps)
- mir_wstrcat(szBuf, L"C");
- if (fNum)
- mir_wstrcat(szBuf, L"N");
- if (dat->fInsertMode || fCaps || fNum)
- mir_wstrcat(szBuf, L" | ");
-
- mir_snwprintf(buf, L"%s%s %d/%d", szBuf, dat->lcID, dat->iOpenJobs, len);
- SendMessage(dat->pContainer->hwndStatus, SB_SETTEXT, 1, (LPARAM)buf);
- if (PluginConfig.m_visualMessageSizeIndicator)
- InvalidateRect(dat->pContainer->hwndStatus, NULL, FALSE);
+ len = m_message.SendMsg(EM_GETTEXTLENGTHEX, (WPARAM)&gtxl, 0);
}
+
+ BOOL fCaps = (GetKeyState(VK_CAPITAL) & 1);
+ BOOL fNum = (GetKeyState(VK_NUMLOCK) & 1);
+
+ wchar_t szBuf[20]; szBuf[0] = 0;
+ if (fInsertMode)
+ mir_wstrcat(szBuf, L"O");
+ if (fCaps)
+ mir_wstrcat(szBuf, L"C");
+ if (fNum)
+ mir_wstrcat(szBuf, L"N");
+ if (fInsertMode || fCaps || fNum)
+ mir_wstrcat(szBuf, L" | ");
+
+ wchar_t buf[128];
+ mir_snwprintf(buf, L"%s%s %d/%d", szBuf, lcID, iOpenJobs, len);
+ SendMessage(pContainer->hwndStatus, SB_SETTEXT, 1, (LPARAM)buf);
+ if (PluginConfig.m_visualMessageSizeIndicator)
+ InvalidateRect(pContainer->hwndStatus, NULL, FALSE);
}
/////////////////////////////////////////////////////////////////////////////////////////
// update all status bar fields and force a redraw of the status bar.
-void TSAPI UpdateStatusBar(const TWindowData *dat)
+void CTabBaseDlg::UpdateStatusBar() const
{
- if (dat && dat->pContainer->hwndStatus && dat->pContainer->hwndActive == dat->hwnd) {
- if (dat->bType == SESSIONTYPE_IM) {
- if (dat->szStatusBar[0]) {
- SendMessage(dat->pContainer->hwndStatus, SB_SETICON, 0, (LPARAM)PluginConfig.g_buttonBarIcons[ICON_DEFAULT_TYPING]);
- SendMessage(dat->pContainer->hwndStatus, SB_SETTEXT, 0, (LPARAM)dat->szStatusBar);
+ if (pContainer->hwndStatus && pContainer->hwndActive == m_hwnd) {
+ if (bType == SESSIONTYPE_IM) {
+ if (szStatusBar[0]) {
+ SendMessage(pContainer->hwndStatus, SB_SETICON, 0, (LPARAM)PluginConfig.g_buttonBarIcons[ICON_DEFAULT_TYPING]);
+ SendMessage(pContainer->hwndStatus, SB_SETTEXT, 0, (LPARAM)szStatusBar);
}
- else if (dat->sbCustom) {
- SendMessage(dat->pContainer->hwndStatus, SB_SETICON, 0, (LPARAM)dat->sbCustom->hIcon);
- SendMessage(dat->pContainer->hwndStatus, SB_SETTEXT, 0, (LPARAM)dat->sbCustom->tszText);
+ else if (sbCustom) {
+ SendMessage(pContainer->hwndStatus, SB_SETICON, 0, (LPARAM)sbCustom->hIcon);
+ SendMessage(pContainer->hwndStatus, SB_SETTEXT, 0, (LPARAM)sbCustom->tszText);
}
else {
- SendMessage(dat->pContainer->hwndStatus, SB_SETICON, 0, 0);
- DM_UpdateLastMessage(dat);
+ SendMessage(pContainer->hwndStatus, SB_SETICON, 0, 0);
+ DM_UpdateLastMessage(this);
}
}
else {
- if (dat->sbCustom) {
- SendMessage(dat->pContainer->hwndStatus, SB_SETICON, 0, (LPARAM)dat->sbCustom->hIcon);
- SendMessage(dat->pContainer->hwndStatus, SB_SETTEXT, 0, (LPARAM)dat->sbCustom->tszText);
+ if (sbCustom) {
+ SendMessage(pContainer->hwndStatus, SB_SETICON, 0, (LPARAM)sbCustom->hIcon);
+ SendMessage(pContainer->hwndStatus, SB_SETTEXT, 0, (LPARAM)sbCustom->tszText);
}
- else SendMessage(dat->pContainer->hwndStatus, SB_SETICON, 0, 0);
+ else SendMessage(pContainer->hwndStatus, SB_SETICON, 0, 0);
}
- UpdateReadChars(dat);
- InvalidateRect(dat->pContainer->hwndStatus, NULL, TRUE);
- SendMessage(dat->pContainer->hwndStatus, WM_USER + 101, 0, (LPARAM)dat);
+ UpdateReadChars();
+ InvalidateRect(pContainer->hwndStatus, NULL, TRUE);
+ SendMessage(pContainer->hwndStatus, WM_USER + 101, 0, (LPARAM)this);
}
}
@@ -492,7 +480,7 @@ void TSAPI UpdateStatusBar(const TWindowData *dat)
// NOT used for typing notification feedback as this is handled directly from the
// MTN handler.
-void TSAPI HandleIconFeedback(TWindowData *dat, HICON iIcon)
+void TSAPI HandleIconFeedback(CTabBaseDlg *dat, HICON iIcon)
{
TCITEM item = { 0 };
@@ -519,14 +507,14 @@ void TSAPI ProcessAvatarChange(HWND hwnd, LPARAM lParam)
{
if (((LPNMHDR)lParam)->code == NM_AVATAR_CHANGED) {
HWND hwndDlg = GetParent(hwnd);
- TWindowData *dat = (TWindowData*)GetWindowLongPtr(hwndDlg, GWLP_USERDATA);
+ CTabBaseDlg *dat = (CTabBaseDlg*)GetWindowLongPtr(hwndDlg, GWLP_USERDATA);
if (!dat)
return;
dat->ace = Utils::loadAvatarFromAVS(dat->cache->getActiveContact());
- GetAvatarVisibility(hwndDlg, dat);
- ShowPicture(dat, TRUE);
+ dat->GetAvatarVisibility();
+ dat->ShowPicture(true);
if (dat->Panel->isActive())
SendMessage(hwndDlg, WM_SIZE, 0, 0);
}
@@ -536,87 +524,87 @@ void TSAPI ProcessAvatarChange(HWND hwnd, LPARAM lParam)
// retrieve the visiblity of the avatar window, depending on the global setting
// and local mode
-bool TSAPI GetAvatarVisibility(HWND hwndDlg, TWindowData *dat)
+bool CTabBaseDlg::GetAvatarVisibility()
{
- BYTE bAvatarMode = dat->pContainer->avatarMode;
- BYTE bOwnAvatarMode = dat->pContainer->ownAvatarMode;
- char hideOverride = (char)M.GetByte(dat->hContact, "hideavatar", -1);
+ BYTE bAvatarMode = pContainer->avatarMode;
+ BYTE bOwnAvatarMode = pContainer->ownAvatarMode;
+ char hideOverride = (char)M.GetByte(m_hContact, "hideavatar", -1);
// infopanel visible, consider own avatar display
- dat->bShowAvatar = false;
+ bShowAvatar = false;
- if (dat->Panel->isActive() && bAvatarMode != 3) {
+ if (Panel->isActive() && bAvatarMode != 3) {
if (!bOwnAvatarMode) {
- dat->bShowAvatar = (dat->hOwnPic && dat->hOwnPic != PluginConfig.g_hbmUnknown);
- if (!dat->hwndContactPic)
- dat->hwndContactPic = CreateWindowEx(WS_EX_TOPMOST, AVATAR_CONTROL_CLASS, L"", WS_VISIBLE | WS_CHILD, 1, 1, 1, 1, GetDlgItem(hwndDlg, IDC_CONTACTPIC), (HMENU)0, NULL, NULL);
+ bShowAvatar = (hOwnPic && hOwnPic != PluginConfig.g_hbmUnknown);
+ if (!hwndContactPic)
+ hwndContactPic = CreateWindowEx(WS_EX_TOPMOST, AVATAR_CONTROL_CLASS, L"", WS_VISIBLE | WS_CHILD, 1, 1, 1, 1, GetDlgItem(m_hwnd, IDC_CONTACTPIC), (HMENU)0, NULL, NULL);
}
switch (bAvatarMode) {
case 2:
- dat->bShowInfoAvatar = false;
+ bShowInfoAvatar = false;
break;
case 0:
- dat->bShowInfoAvatar = true;
+ bShowInfoAvatar = true;
case 1:
- HBITMAP hbm = ((dat->ace && !(dat->ace->dwFlags & AVS_HIDEONCLIST)) ? dat->ace->hbmPic : 0);
+ HBITMAP hbm = ((ace && !(ace->dwFlags & AVS_HIDEONCLIST)) ? ace->hbmPic : 0);
if (hbm == NULL && !bAvatarMode) {
- dat->bShowInfoAvatar = false;
+ bShowInfoAvatar = false;
break;
}
- if (!dat->hwndPanelPic) {
- dat->hwndPanelPic = CreateWindowEx(WS_EX_TOPMOST, AVATAR_CONTROL_CLASS, L"", WS_VISIBLE | WS_CHILD, 1, 1, 1, 1, dat->hwndPanelPicParent, (HMENU)7000, NULL, NULL);
- if (dat->hwndPanelPic)
- SendMessage(dat->hwndPanelPic, AVATAR_SETAEROCOMPATDRAWING, 0, TRUE);
+ if (!hwndPanelPic) {
+ hwndPanelPic = CreateWindowEx(WS_EX_TOPMOST, AVATAR_CONTROL_CLASS, L"", WS_VISIBLE | WS_CHILD, 1, 1, 1, 1, hwndPanelPicParent, (HMENU)7000, NULL, NULL);
+ if (hwndPanelPic)
+ SendMessage(hwndPanelPic, AVATAR_SETAEROCOMPATDRAWING, 0, TRUE);
}
if (bAvatarMode != 0)
- dat->bShowInfoAvatar = (hbm && hbm != PluginConfig.g_hbmUnknown);
+ bShowInfoAvatar = (hbm && hbm != PluginConfig.g_hbmUnknown);
break;
}
- if (dat->bShowInfoAvatar)
- dat->bShowInfoAvatar = hideOverride == 0 ? false : dat->bShowInfoAvatar;
+ if (bShowInfoAvatar)
+ bShowInfoAvatar = hideOverride == 0 ? false : bShowInfoAvatar;
else
- dat->bShowInfoAvatar = hideOverride == 1 ? true : dat->bShowInfoAvatar;
+ bShowInfoAvatar = hideOverride == 1 ? true : bShowInfoAvatar;
- Utils::setAvatarContact(dat->hwndPanelPic, dat->hContact);
- SendMessage(dat->hwndContactPic, AVATAR_SETPROTOCOL, 0, (LPARAM)dat->cache->getActiveProto());
+ Utils::setAvatarContact(hwndPanelPic, m_hContact);
+ SendMessage(hwndContactPic, AVATAR_SETPROTOCOL, 0, (LPARAM)cache->getActiveProto());
}
else {
- dat->bShowInfoAvatar = false;
+ bShowInfoAvatar = false;
switch (bAvatarMode) {
case 0: // globally on
- dat->bShowAvatar = true;
+ bShowAvatar = true;
LBL_Check:
- if (!dat->hwndContactPic)
- dat->hwndContactPic = CreateWindowEx(WS_EX_TOPMOST, AVATAR_CONTROL_CLASS, L"", WS_VISIBLE | WS_CHILD, 1, 1, 1, 1, GetDlgItem(hwndDlg, IDC_CONTACTPIC), (HMENU)0, NULL, NULL);
+ if (!hwndContactPic)
+ hwndContactPic = CreateWindowEx(WS_EX_TOPMOST, AVATAR_CONTROL_CLASS, L"", WS_VISIBLE | WS_CHILD, 1, 1, 1, 1, GetDlgItem(m_hwnd, IDC_CONTACTPIC), (HMENU)0, NULL, NULL);
break;
case 2: // globally OFF
- dat->bShowAvatar = false;
+ bShowAvatar = false;
break;
case 3: // on, if present
case 1:
- HBITMAP hbm = (dat->ace && !(dat->ace->dwFlags & AVS_HIDEONCLIST)) ? dat->ace->hbmPic : 0;
- dat->bShowAvatar = (hbm && hbm != PluginConfig.g_hbmUnknown);
+ HBITMAP hbm = (ace && !(ace->dwFlags & AVS_HIDEONCLIST)) ? ace->hbmPic : 0;
+ bShowAvatar = (hbm && hbm != PluginConfig.g_hbmUnknown);
goto LBL_Check;
}
- if (dat->bShowAvatar)
- dat->bShowAvatar = hideOverride == 0 ? 0 : dat->bShowAvatar;
+ if (bShowAvatar)
+ bShowAvatar = hideOverride == 0 ? 0 : bShowAvatar;
else
- dat->bShowAvatar = hideOverride == 1 ? 1 : dat->bShowAvatar;
+ bShowAvatar = hideOverride == 1 ? 1 : bShowAvatar;
// reloads avatars
- if (dat->hwndPanelPic) { // shows contact or user picture, depending on panel visibility
- SendMessage(dat->hwndContactPic, AVATAR_SETPROTOCOL, 0, (LPARAM)dat->cache->getActiveProto());
- Utils::setAvatarContact(dat->hwndPanelPic, dat->hContact);
+ if (hwndPanelPic) { // shows contact or user picture, depending on panel visibility
+ SendMessage(hwndContactPic, AVATAR_SETPROTOCOL, 0, (LPARAM)cache->getActiveProto());
+ Utils::setAvatarContact(hwndPanelPic, m_hContact);
}
- else Utils::setAvatarContact(dat->hwndContactPic, dat->hContact);
+ else Utils::setAvatarContact(hwndContactPic, m_hContact);
}
- return dat->bShowAvatar;
+ return bShowAvatar;
}
/////////////////////////////////////////////////////////////////////////////////////////
@@ -691,71 +679,65 @@ wchar_t* TSAPI QuoteText(const wchar_t *text)
return strout;
}
-void TSAPI AdjustBottomAvatarDisplay(TWindowData *dat)
+void CTabBaseDlg::AdjustBottomAvatarDisplay()
{
- if (!dat)
- return;
-
- HWND hwndDlg = dat->hwnd;
- dat->bShowAvatar = GetAvatarVisibility(hwndDlg, dat);
+ GetAvatarVisibility();
- bool bInfoPanel = dat->Panel->isActive();
- HBITMAP hbm = (bInfoPanel && dat->pContainer->avatarMode != 3) ? dat->hOwnPic : (dat->ace ? dat->ace->hbmPic : PluginConfig.g_hbmUnknown);
+ bool bInfoPanel = Panel->isActive();
+ HBITMAP hbm = (bInfoPanel && pContainer->avatarMode != 3) ? hOwnPic : (ace ? ace->hbmPic : PluginConfig.g_hbmUnknown);
if (hbm) {
- if (dat->dynaSplitter == 0 || dat->splitterY == 0)
- LoadSplitter(dat);
- dat->dynaSplitter = dat->splitterY - DPISCALEY_S(34);
- DM_RecalcPictureSize(dat);
- Utils::showDlgControl(hwndDlg, IDC_CONTACTPIC, dat->bShowAvatar ? SW_SHOW : SW_HIDE);
- InvalidateRect(GetDlgItem(hwndDlg, IDC_CONTACTPIC), NULL, TRUE);
+ if (dynaSplitter == 0 || splitterY == 0)
+ LoadSplitter();
+ dynaSplitter = splitterY - DPISCALEY_S(34);
+ DM_RecalcPictureSize();
+ Utils::showDlgControl(m_hwnd, IDC_CONTACTPIC, bShowAvatar ? SW_SHOW : SW_HIDE);
+ InvalidateRect(GetDlgItem(m_hwnd, IDC_CONTACTPIC), NULL, TRUE);
}
else {
- Utils::showDlgControl(hwndDlg, IDC_CONTACTPIC, dat->bShowAvatar ? SW_SHOW : SW_HIDE);
- dat->pic.cy = dat->pic.cx = DPISCALEY_S(60);
- InvalidateRect(GetDlgItem(hwndDlg, IDC_CONTACTPIC), NULL, TRUE);
+ Utils::showDlgControl(m_hwnd, IDC_CONTACTPIC, bShowAvatar ? SW_SHOW : SW_HIDE);
+ pic.cy = pic.cx = DPISCALEY_S(60);
+ InvalidateRect(GetDlgItem(m_hwnd, IDC_CONTACTPIC), NULL, TRUE);
}
}
-void TSAPI ShowPicture(TWindowData *dat, BOOL showNewPic)
+void CTabBaseDlg::ShowPicture(bool showNewPic)
{
- HWND hwndDlg = dat->hwnd;
-
- if (!dat->Panel->isActive())
- dat->pic.cy = dat->pic.cx = DPISCALEY_S(60);
+ if (!Panel->isActive())
+ pic.cy = pic.cx = DPISCALEY_S(60);
if (showNewPic) {
- if (dat->Panel->isActive() && dat->pContainer->avatarMode != 3) {
- if (!dat->hwndPanelPic) {
- InvalidateRect(dat->hwnd, NULL, TRUE);
- UpdateWindow(dat->hwnd);
- SendMessage(dat->hwnd, WM_SIZE, 0, 0);
+ if (Panel->isActive() && pContainer->avatarMode != 3) {
+ if (!hwndPanelPic) {
+ InvalidateRect(m_hwnd, NULL, TRUE);
+ UpdateWindow(m_hwnd);
+ SendMessage(m_hwnd, WM_SIZE, 0, 0);
}
return;
}
- AdjustBottomAvatarDisplay(dat);
+ AdjustBottomAvatarDisplay();
}
else {
- dat->bShowAvatar = dat->bShowAvatar ? 0 : 1;
- db_set_b(dat->hContact, SRMSGMOD_T, "MOD_ShowPic", (BYTE)dat->bShowAvatar);
+ bShowAvatar = !bShowAvatar;
+ db_set_b(m_hContact, SRMSGMOD_T, "MOD_ShowPic", bShowAvatar);
}
RECT rc;
- GetWindowRect(GetDlgItem(hwndDlg, IDC_CONTACTPIC), &rc);
- if (dat->minEditBoxSize.cy + DPISCALEY_S(3) > dat->splitterY)
- SendMessage(hwndDlg, DM_SPLITTERMOVED, (WPARAM)rc.bottom - dat->minEditBoxSize.cy, (LPARAM)GetDlgItem(hwndDlg, IDC_SPLITTER));
+ GetWindowRect(GetDlgItem(m_hwnd, IDC_CONTACTPIC), &rc);
+ if (minEditBoxSize.cy + DPISCALEY_S(3) > splitterY)
+ SendMessage(m_hwnd, DM_SPLITTERMOVED, (WPARAM)rc.bottom - minEditBoxSize.cy, (LPARAM)GetDlgItem(m_hwnd, IDC_SPLITTER));
if (!showNewPic)
- SetDialogToType(hwndDlg);
+ SetDialogToType(m_hwnd);
else
- SendMessage(hwndDlg, WM_SIZE, 0, 0);
+ SendMessage(m_hwnd, WM_SIZE, 0, 0);
}
-void TSAPI FlashOnClist(HWND hwndDlg, TWindowData *dat, MEVENT hEvent, DBEVENTINFO *dbei)
+void CTabBaseDlg::FlashOnClist(MEVENT hEvent, DBEVENTINFO *dbei)
{
- dat->dwTickLastEvent = GetTickCount();
+ dwTickLastEvent = GetTickCount();
- if ((GetForegroundWindow() != dat->pContainer->hwnd || dat->pContainer->hwndActive != hwndDlg) && !(dbei->flags & DBEF_SENT) && dbei->eventType == EVENTTYPE_MESSAGE) {
- dat->dwUnread++;
- UpdateTrayMenu(dat, (WORD)(dat->cache->getActiveStatus()), dat->cache->getActiveProto(), dat->szStatus, dat->hContact, 0L);
+ if ((GetForegroundWindow() != pContainer->hwnd || pContainer->hwndActive != m_hwnd) && !(dbei->flags & DBEF_SENT) && dbei->eventType == EVENTTYPE_MESSAGE) {
+ dwUnread++;
+ UpdateTrayMenu(this, (WORD)(cache->getActiveStatus()), cache->getActiveProto(), szStatus, m_hContact, 0);
if (nen_options.bTraySupport)
return;
}
@@ -765,16 +747,16 @@ void TSAPI FlashOnClist(HWND hwndDlg, TWindowData *dat, MEVENT hEvent, DBEVENTIN
if (!PluginConfig.m_bFlashOnClist)
return;
- if ((GetForegroundWindow() != dat->pContainer->hwnd || dat->pContainer->hwndActive != hwndDlg) && !(dbei->flags & DBEF_SENT) && dbei->eventType == EVENTTYPE_MESSAGE && !(dat->dwFlagsEx & MWF_SHOW_FLASHCLIST)) {
+ if ((GetForegroundWindow() != pContainer->hwnd || pContainer->hwndActive != m_hwnd) && !(dbei->flags & DBEF_SENT) && dbei->eventType == EVENTTYPE_MESSAGE && !(dwFlagsEx & MWF_SHOW_FLASHCLIST)) {
CLISTEVENT cle = {};
- cle.hContact = (MCONTACT)dat->hContact;
+ cle.hContact = m_hContact;
cle.hDbEvent = hEvent;
cle.hIcon = Skin_LoadIcon(SKINICON_EVENT_MESSAGE);
cle.pszService = "SRMsg/ReadMessage";
pcli->pfnAddEvent(&cle);
- dat->dwFlagsEx |= MWF_SHOW_FLASHCLIST;
- dat->hFlashingEvent = hEvent;
+ dwFlagsEx |= MWF_SHOW_FLASHCLIST;
+ hFlashingEvent = hEvent;
}
}
@@ -875,13 +857,13 @@ static int GetRtfIndex(int iCol, int iCount, int *pIndex)
// convert rich edit code to bbcode (if wanted). Otherwise, strip all RTF formatting
// tags and return plain text
-BOOL TSAPI DoRtfToTags(const TWindowData *dat, CMStringW &pszText, int iNumColors, COLORREF *pColors)
+BOOL CTabBaseDlg::DoRtfToTags(CMStringW &pszText, int iNumColors, COLORREF *pColors) const
{
if (pszText.IsEmpty())
return FALSE;
// used to filter out attributes which are already set for the default message input area font
- LOGFONTA lf = dat->pContainer->theme.logFonts[MSGFONTID_MESSAGEAREA];
+ LOGFONTA lf = pContainer->theme.logFonts[MSGFONTID_MESSAGEAREA];
// create an index of colors in the module and map them to
// corresponding colors in the RTF color table
@@ -917,7 +899,7 @@ BOOL TSAPI DoRtfToTags(const TWindowData *dat, CMStringW &pszText, int iNumColor
int iCol = _wtoi(p + 3);
int iInd = GetRtfIndex(iCol, iNumColors, pIndex);
- if (iCol && dat->bType != SESSIONTYPE_CHAT)
+ if (iCol && bType != SESSIONTYPE_CHAT)
res.AppendFormat((iInd > 0) ? (bInsideColor ? L"[/color][color=%s]" : L"[color=%s]") : (bInsideColor ? L"[/color]" : L""), Utils::rtf_ctable[iInd - 1].szName);
bInsideColor = iInd > 0;
@@ -953,19 +935,19 @@ BOOL TSAPI DoRtfToTags(const TWindowData *dat, CMStringW &pszText, int iNumColor
}
else if (!wcsncmp(p, L"\\b", 2)) { //bold
if (!(lf.lfWeight == FW_BOLD)) // only allow bold if the font itself isn't a bold one, otherwise just strip it..
- if (dat->SendFormat)
+ if (SendFormat)
res.Append((p[2] != '0') ? L"[b]" : L"[/b]");
}
else if (!wcsncmp(p, L"\\i", 2)) { // italics
- if (!lf.lfItalic && dat->SendFormat)
+ if (!lf.lfItalic && SendFormat)
res.Append((p[2] != '0') ? L"[i]" : L"[/i]");
}
else if (!wcsncmp(p, L"\\strike", 7)) { // strike-out
- if (!lf.lfStrikeOut && dat->SendFormat)
+ if (!lf.lfStrikeOut && SendFormat)
res.Append((p[7] != '0') ? L"[s]" : L"[/s]");
}
else if (!wcsncmp(p, L"\\ul", 3)) { // underlined
- if (!lf.lfUnderline && dat->SendFormat) {
+ if (!lf.lfUnderline && SendFormat) {
if (p[3] == 0 || wcschr(tszRtfBreaks, p[3])) {
res.Append(L"[u]");
bInsideUl = true;
@@ -1016,7 +998,7 @@ BOOL TSAPI DoRtfToTags(const TWindowData *dat, CMStringW &pszText, int iNumColor
}
}
- if (bInsideColor && dat->bType != SESSIONTYPE_CHAT)
+ if (bInsideColor && bType != SESSIONTYPE_CHAT)
res.Append(L"[/color]");
if (bInsideUl)
res.Append(L"[/u]");
@@ -1029,15 +1011,17 @@ BOOL TSAPI DoRtfToTags(const TWindowData *dat, CMStringW &pszText, int iNumColor
// retrieve both buddys and my own UIN for a message session and store them in the message window *dat
// respects metacontacts and uses the current protocol if the contact is a MC
-void TSAPI GetMYUIN(TWindowData *dat)
+void CTabBaseDlg::GetMYUIN()
{
- ptrW uid(Contact_GetInfo(CNF_DISPLAYUID, NULL, dat->cache->getActiveProto()));
+ ptrW uid(Contact_GetInfo(CNF_DISPLAYUID, NULL, cache->getActiveProto()));
if (uid != NULL)
- wcsncpy_s(dat->myUin, uid, _TRUNCATE);
+ wcsncpy_s(myUin, uid, _TRUNCATE);
else
- dat->myUin[0] = 0;
+ myUin[0] = 0;
}
+/////////////////////////////////////////////////////////////////////////////////////////
+
static int g_IEViewAvail = -1;
static int g_HPPAvail = -1;
@@ -1063,12 +1047,13 @@ UINT TSAPI GetIEViewMode(MCONTACT hContact)
return iWantHPP ? WANT_HPP_LOG : (iWantIEView ? WANT_IEVIEW_LOG : 0);
}
-void TSAPI SetMessageLog(TWindowData *dat)
+/////////////////////////////////////////////////////////////////////////////////////////
+
+void CTabBaseDlg::SetMessageLog()
{
- HWND hwndDlg = dat->hwnd;
- unsigned int iLogMode = GetIEViewMode(dat->hContact);
+ unsigned int iLogMode = GetIEViewMode(m_hContact);
- if (iLogMode == WANT_IEVIEW_LOG && dat->hwndIEView == 0) {
+ if (iLogMode == WANT_IEVIEW_LOG && hwndIEView == 0) {
IEVIEWWINDOW ieWindow;
memset(&ieWindow, 0, sizeof(ieWindow));
@@ -1076,43 +1061,43 @@ void TSAPI SetMessageLog(TWindowData *dat)
ieWindow.iType = IEW_CREATE;
ieWindow.dwFlags = 0;
ieWindow.dwMode = IEWM_TABSRMM;
- ieWindow.parent = hwndDlg;
+ ieWindow.parent = m_hwnd;
ieWindow.x = 0;
ieWindow.y = 0;
ieWindow.cx = 200;
ieWindow.cy = 200;
CallService(MS_IEVIEW_WINDOW, 0, (LPARAM)&ieWindow);
- dat->hwndIEView = ieWindow.hwnd;
- Utils::showDlgControl(hwndDlg, IDC_LOG, SW_HIDE);
- Utils::enableDlgControl(hwndDlg, IDC_LOG, false);
+ hwndIEView = ieWindow.hwnd;
+ Utils::showDlgControl(m_hwnd, IDC_LOG, SW_HIDE);
+ Utils::enableDlgControl(m_hwnd, IDC_LOG, false);
}
- else if (iLogMode == WANT_HPP_LOG && dat->hwndHPP == 0) {
+ else if (iLogMode == WANT_HPP_LOG && hwndHPP == 0) {
IEVIEWWINDOW ieWindow;
ieWindow.cbSize = sizeof(IEVIEWWINDOW);
ieWindow.iType = IEW_CREATE;
ieWindow.dwFlags = 0;
ieWindow.dwMode = IEWM_TABSRMM;
- ieWindow.parent = hwndDlg;
+ ieWindow.parent = m_hwnd;
ieWindow.x = 0;
ieWindow.y = 0;
ieWindow.cx = 10;
ieWindow.cy = 10;
CallService(MS_HPP_EG_WINDOW, 0, (LPARAM)&ieWindow);
- dat->hwndHPP = ieWindow.hwnd;
- Utils::showDlgControl(hwndDlg, IDC_LOG, SW_HIDE);
- Utils::enableDlgControl(hwndDlg, IDC_LOG, false);
+ hwndHPP = ieWindow.hwnd;
+ Utils::showDlgControl(m_hwnd, IDC_LOG, SW_HIDE);
+ Utils::enableDlgControl(m_hwnd, IDC_LOG, false);
}
}
-void TSAPI FindFirstEvent(TWindowData *dat)
+void CTabBaseDlg::FindFirstEvent()
{
- int historyMode = db_get_b(dat->hContact, SRMSGMOD, SRMSGSET_LOADHISTORY, -1);
+ int historyMode = db_get_b(m_hContact, SRMSGMOD, SRMSGSET_LOADHISTORY, -1);
if (historyMode == -1)
historyMode = (int)M.GetByte(SRMSGMOD, SRMSGSET_LOADHISTORY, SRMSGDEFSET_LOADHISTORY);
- dat->hDbEventFirst = db_event_firstUnread(dat->hContact);
+ hDbEventFirst = db_event_firstUnread(m_hContact);
- if (dat->bActualHistory)
+ if (bActualHistory)
historyMode = LOADHISTORY_COUNT;
switch (historyMode) {
@@ -1122,21 +1107,21 @@ void TSAPI FindFirstEvent(TWindowData *dat)
{
DBEVENTINFO dbei = {};
// ability to load only current session's history
- if (dat->bActualHistory)
- i = dat->cache->getSessionMsgCount();
+ if (bActualHistory)
+ i = cache->getSessionMsgCount();
else
i = db_get_w(NULL, SRMSGMOD, SRMSGSET_LOADCOUNT, SRMSGDEFSET_LOADCOUNT);
for (; i > 0; i--) {
- if (dat->hDbEventFirst == NULL)
- hPrevEvent = db_event_last(dat->hContact);
+ if (hDbEventFirst == NULL)
+ hPrevEvent = db_event_last(m_hContact);
else
- hPrevEvent = db_event_prev(dat->hContact, dat->hDbEventFirst);
+ hPrevEvent = db_event_prev(m_hContact, hDbEventFirst);
if (hPrevEvent == NULL)
break;
dbei.cbBlob = 0;
- dat->hDbEventFirst = hPrevEvent;
- db_event_get(dat->hDbEventFirst, &dbei);
+ hDbEventFirst = hPrevEvent;
+ db_event_get(hDbEventFirst, &dbei);
if (!DbEventIsShown(&dbei))
i++;
}
@@ -1145,73 +1130,73 @@ void TSAPI FindFirstEvent(TWindowData *dat)
case LOADHISTORY_TIME:
DBEVENTINFO dbei = {};
- if (dat->hDbEventFirst == NULL)
+ if (hDbEventFirst == NULL)
dbei.timestamp = time(NULL);
else
- db_event_get(dat->hDbEventFirst, &dbei);
+ db_event_get(hDbEventFirst, &dbei);
DWORD firstTime = dbei.timestamp - 60 * db_get_w(NULL, SRMSGMOD, SRMSGSET_LOADTIME, SRMSGDEFSET_LOADTIME);
for (;;) {
- if (dat->hDbEventFirst == NULL)
- hPrevEvent = db_event_last(dat->hContact);
+ if (hDbEventFirst == NULL)
+ hPrevEvent = db_event_last(m_hContact);
else
- hPrevEvent = db_event_prev(dat->hContact, dat->hDbEventFirst);
+ hPrevEvent = db_event_prev(m_hContact, hDbEventFirst);
if (hPrevEvent == NULL)
break;
dbei.cbBlob = 0;
db_event_get(hPrevEvent, &dbei);
if (dbei.timestamp < firstTime)
break;
- dat->hDbEventFirst = hPrevEvent;
+ hDbEventFirst = hPrevEvent;
}
break;
}
}
-void TSAPI SaveSplitter(TWindowData *dat)
+void CTabBaseDlg::SaveSplitter()
{
// group chats save their normal splitter position independently
- if (dat->bType == SESSIONTYPE_CHAT || dat->bIsAutosizingInput)
+ if (bType == SESSIONTYPE_CHAT || bIsAutosizingInput)
return;
- if (dat->splitterY < DPISCALEY_S(MINSPLITTERY) || dat->splitterY < 0)
- dat->splitterY = DPISCALEY_S(MINSPLITTERY);
+ if (splitterY < DPISCALEY_S(MINSPLITTERY) || splitterY < 0)
+ splitterY = DPISCALEY_S(MINSPLITTERY);
- if (dat->dwFlagsEx & MWF_SHOW_SPLITTEROVERRIDE)
- db_set_dw(dat->hContact, SRMSGMOD_T, "splitsplity", dat->splitterY);
+ if (dwFlagsEx & MWF_SHOW_SPLITTEROVERRIDE)
+ db_set_dw(m_hContact, SRMSGMOD_T, "splitsplity", splitterY);
else {
- if (dat->pContainer->settings->fPrivate)
- dat->pContainer->settings->splitterPos = dat->splitterY;
+ if (pContainer->settings->fPrivate)
+ pContainer->settings->splitterPos = splitterY;
else
- db_set_dw(0, SRMSGMOD_T, "splitsplity", dat->splitterY);
+ db_set_dw(0, SRMSGMOD_T, "splitsplity", splitterY);
}
}
-void TSAPI LoadSplitter(TWindowData *dat)
+void CTabBaseDlg::LoadSplitter()
{
- if (dat->bIsAutosizingInput) {
- dat->splitterY = GetDefaultMinimumInputHeight(dat);
+ if (bIsAutosizingInput) {
+ splitterY = GetDefaultMinimumInputHeight();
return;
}
- if (!(dat->dwFlagsEx & MWF_SHOW_SPLITTEROVERRIDE))
- if (!dat->pContainer->settings->fPrivate)
- dat->splitterY = (int)M.GetDword("splitsplity", (DWORD)60);
+ if (!(dwFlagsEx & MWF_SHOW_SPLITTEROVERRIDE)) {
+ if (!pContainer->settings->fPrivate)
+ splitterY = (int)M.GetDword("splitsplity", (DWORD)60);
else
- dat->splitterY = dat->pContainer->settings->splitterPos;
- else
- dat->splitterY = (int)M.GetDword(dat->hContact, "splitsplity", M.GetDword("splitsplity", (DWORD)70));
+ splitterY = pContainer->settings->splitterPos;
+ }
+ else splitterY = (int)M.GetDword(m_hContact, "splitsplity", M.GetDword("splitsplity", (DWORD)70));
- if (dat->splitterY < MINSPLITTERY || dat->splitterY < 0)
- dat->splitterY = 150;
+ if (splitterY < MINSPLITTERY || splitterY < 0)
+ splitterY = 150;
}
-void TSAPI PlayIncomingSound(const TWindowData *dat)
+void CTabBaseDlg::PlayIncomingSound() const
{
- int iPlay = Utils::mustPlaySound(dat);
+ int iPlay = Utils::mustPlaySound(this);
if (iPlay) {
- if (GetForegroundWindow() == dat->pContainer->hwnd && dat->pContainer->hwndActive == dat->hwnd)
+ if (GetForegroundWindow() == pContainer->hwnd && pContainer->hwndActive == m_hwnd)
SkinPlaySound("RecvMsgActive");
else
SkinPlaySound("RecvMsgInactive");
@@ -1224,16 +1209,16 @@ void TSAPI PlayIncomingSound(const TWindowData *dat)
static UINT controls[] = { IDC_FONTBOLD, IDC_FONTITALIC, IDC_FONTUNDERLINE, IDC_FONTSTRIKEOUT };
-void TSAPI GetSendFormat(TWindowData *dat)
+void CTabBaseDlg::GetSendFormat()
{
- dat->SendFormat = M.GetDword(dat->hContact, "sendformat", PluginConfig.m_SendFormat);
- if (dat->SendFormat == -1) // per contact override to disable it..
- dat->SendFormat = 0;
- else if (dat->SendFormat == 0)
- dat->SendFormat = PluginConfig.m_SendFormat ? 1 : 0;
+ SendFormat = M.GetDword(m_hContact, "sendformat", PluginConfig.m_SendFormat);
+ if (SendFormat == -1) // per contact override to disable it..
+ SendFormat = 0;
+ else if (SendFormat == 0)
+ SendFormat = PluginConfig.m_SendFormat ? 1 : 0;
for (int i = 0; i < _countof(controls); i++)
- Utils::enableDlgControl(dat->hwnd, controls[i], dat->SendFormat != 0);
+ Utils::enableDlgControl(m_hwnd, controls[i], SendFormat != 0);
return;
}
@@ -1243,7 +1228,7 @@ void TSAPI GetSendFormat(TWindowData *dat)
//
// GetLocaleInfo() should no longer be used on Vista and later
-void TSAPI GetLocaleID(TWindowData *dat, const wchar_t *szKLName)
+void CTabBaseDlg::GetLocaleID(const wchar_t *szKLName)
{
wchar_t szLI[256], *stopped = NULL;
USHORT langID;
@@ -1256,7 +1241,7 @@ void TSAPI GetLocaleID(TWindowData *dat, const wchar_t *szKLName)
memset(&pf2, 0, sizeof(PARAFORMAT2));
langID = (USHORT)wcstol(szKLName, &stopped, 16);
- dat->lcid = MAKELCID(langID, 0);
+ lcid = MAKELCID(langID, 0);
/*
* Vista+: read ISO locale names from the registry
*/
@@ -1281,117 +1266,100 @@ void TSAPI GetLocaleID(TWindowData *dat, const wchar_t *szKLName)
szLI[1] = towupper(szLI[1]);
}
else {
- GetLocaleInfo(dat->lcid, LOCALE_SISO639LANGNAME, szLI, 10);
+ GetLocaleInfo(lcid, LOCALE_SISO639LANGNAME, szLI, 10);
wcsupr(szLI);
}
- fLocaleNotSet = (dat->lcID[0] == 0 && dat->lcID[1] == 0);
- mir_snwprintf(dat->lcID, szLI);
- GetStringTypeA(dat->lcid, CT_CTYPE2, (char*)szTest, 3, wCtype2);
+ fLocaleNotSet = (lcID[0] == 0 && lcID[1] == 0);
+ mir_snwprintf(lcID, szLI);
+ GetStringTypeA(lcid, CT_CTYPE2, (char*)szTest, 3, wCtype2);
pf2.cbSize = sizeof(pf2);
pf2.dwMask = PFM_RTLPARA;
- SendDlgItemMessage(dat->hwnd, IDC_MESSAGE, EM_GETPARAFORMAT, 0, (LPARAM)&pf2);
- if (Utils::FindRTLLocale(dat) && fLocaleNotSet) {
+ m_message.SendMsg(EM_GETPARAFORMAT, 0, (LPARAM)&pf2);
+ if (Utils::FindRTLLocale(this) && fLocaleNotSet) {
if (wCtype2[0] == C2_RIGHTTOLEFT || wCtype2[1] == C2_RIGHTTOLEFT || wCtype2[2] == C2_RIGHTTOLEFT) {
memset(&pf2, 0, sizeof(pf2));
pf2.dwMask = PFM_RTLPARA;
pf2.cbSize = sizeof(pf2);
pf2.wEffects = PFE_RTLPARA;
- SendDlgItemMessage(dat->hwnd, IDC_MESSAGE, EM_SETPARAFORMAT, 0, (LPARAM)&pf2);
+ m_message.SendMsg(EM_SETPARAFORMAT, 0, (LPARAM)&pf2);
}
else {
memset(&pf2, 0, sizeof(pf2));
pf2.dwMask = PFM_RTLPARA;
pf2.cbSize = sizeof(pf2);
pf2.wEffects = 0;
- SendDlgItemMessage(dat->hwnd, IDC_MESSAGE, EM_SETPARAFORMAT, 0, (LPARAM)&pf2);
+ m_message.SendMsg(EM_SETPARAFORMAT, 0, (LPARAM)&pf2);
}
- SendDlgItemMessage(dat->hwnd, IDC_MESSAGE, EM_SETLANGOPTIONS, 0, (LPARAM)SendDlgItemMessage(dat->hwnd, IDC_MESSAGE, EM_GETLANGOPTIONS, 0, 0) & ~IMF_AUTOKEYBOARD);
+ m_message.SendMsg(EM_SETLANGOPTIONS, 0, m_message.SendMsg(EM_GETLANGOPTIONS, 0, 0) & ~IMF_AUTOKEYBOARD);
}
}
-void TSAPI LoadContactAvatar(TWindowData *dat)
+void CTabBaseDlg::LoadContactAvatar()
{
- if (dat == NULL) return;
-
- dat->ace = Utils::loadAvatarFromAVS(dat->bIsMeta ? db_mc_getSrmmSub(dat->hContact) : dat->hContact);
+ ace = Utils::loadAvatarFromAVS(bIsMeta ? db_mc_getSrmmSub(m_hContact) : m_hContact);
BITMAP bm;
- if (dat->ace && dat->ace->hbmPic)
- GetObject(dat->ace->hbmPic, sizeof(bm), &bm);
- else if (dat->ace == NULL)
+ if (ace && ace->hbmPic)
+ GetObject(ace->hbmPic, sizeof(bm), &bm);
+ else if (ace == NULL)
GetObject(PluginConfig.g_hbmUnknown, sizeof(bm), &bm);
else
return;
- AdjustBottomAvatarDisplay(dat);
- CalcDynamicAvatarSize(dat, &bm);
+ AdjustBottomAvatarDisplay();
+ CalcDynamicAvatarSize(&bm);
- if (!dat->Panel->isActive() || dat->pContainer->avatarMode == 3) {
- dat->iRealAvatarHeight = 0;
- PostMessage(dat->hwnd, WM_SIZE, 0, 0);
+ if (!Panel->isActive() || pContainer->avatarMode == 3) {
+ iRealAvatarHeight = 0;
+ PostMessage(m_hwnd, WM_SIZE, 0, 0);
}
- else if (dat->Panel->isActive())
- GetAvatarVisibility(dat->hwnd, dat);
+ else if (Panel->isActive())
+ GetAvatarVisibility();
}
-void TSAPI LoadOwnAvatar(TWindowData *dat)
+void CTabBaseDlg::LoadOwnAvatar()
{
- AVATARCACHEENTRY *ace = NULL;
-
if (ServiceExists(MS_AV_GETMYAVATAR))
- ace = (AVATARCACHEENTRY *)CallService(MS_AV_GETMYAVATAR, 0, (LPARAM)(dat->cache->getActiveProto()));
+ ownAce = (AVATARCACHEENTRY *)CallService(MS_AV_GETMYAVATAR, 0, (LPARAM)(cache->getActiveProto()));
+ else
+ ownAce = nullptr;
- if (ace) {
- dat->hOwnPic = ace->hbmPic;
- dat->ownAce = ace;
- }
- else {
- dat->hOwnPic = PluginConfig.g_hbmUnknown;
- dat->ownAce = NULL;
- }
- if (dat->Panel->isActive() && dat->pContainer->avatarMode != 3) {
+ if (ownAce)
+ hOwnPic = ownAce->hbmPic;
+ else
+ hOwnPic = PluginConfig.g_hbmUnknown;
+
+ if (Panel->isActive() && pContainer->avatarMode != 3) {
BITMAP bm;
- dat->iRealAvatarHeight = 0;
- AdjustBottomAvatarDisplay(dat);
- GetObject(dat->hOwnPic, sizeof(bm), &bm);
- CalcDynamicAvatarSize(dat, &bm);
- SendMessage(dat->hwnd, WM_SIZE, 0, 0);
+ iRealAvatarHeight = 0;
+ AdjustBottomAvatarDisplay();
+ GetObject(hOwnPic, sizeof(bm), &bm);
+ CalcDynamicAvatarSize(&bm);
+ SendMessage(m_hwnd, WM_SIZE, 0, 0);
}
}
-void TSAPI LoadTimeZone(TWindowData *dat)
-{
- if (dat)
- dat->hTimeZone = TimeZone_CreateByContact(dat->hContact, 0, TZF_KNOWNONLY);
-}
-
// paste contents of the clipboard into the message input area and send it immediately
-void TSAPI HandlePasteAndSend(const TWindowData *dat)
+void CTabBaseDlg::HandlePasteAndSend()
{
- UINT ctrlID = dat->bType == SESSIONTYPE_IM ? IDC_MESSAGE : IDC_CHAT_MESSAGE;
-
+ // is feature disabled?
if (!PluginConfig.m_PasteAndSend) {
- SendMessage(dat->hwnd, DM_ACTIVATETOOLTIP, ctrlID, (LPARAM)TranslateT("The 'paste and send' feature is disabled. You can enable it on the 'General' options page in the 'Sending messages' section"));
- return; // feature disabled
+ SendMessage(m_hwnd, DM_ACTIVATETOOLTIP, IDC_MESSAGE, (LPARAM)TranslateT("The 'paste and send' feature is disabled. You can enable it on the 'General' options page in the 'Sending messages' section"));
+ return;
}
- SendDlgItemMessage(dat->hwnd, ctrlID, EM_PASTESPECIAL, CF_UNICODETEXT, 0);
- if (GetWindowTextLength(GetDlgItem(dat->hwnd, ctrlID)) > 0)
- SendMessage(dat->hwnd, WM_COMMAND, IDOK, 0);
+ m_message.SendMsg(EM_PASTESPECIAL, CF_UNICODETEXT, 0);
+ if (GetWindowTextLength(m_message.GetHwnd()) > 0)
+ SendMessage(m_hwnd, WM_COMMAND, IDOK, 0);
}
/////////////////////////////////////////////////////////////////////////////////////////
// draw various elements of the message window, like avatar(s), info panel fields
// and the color formatting menu
-int TSAPI MsgWindowDrawHandler(WPARAM, LPARAM lParam, TWindowData *dat)
+int CTabBaseDlg::MsgWindowDrawHandler(WPARAM, LPARAM lParam)
{
- if (!dat)
- return 0;
-
- HWND hwndDlg = dat->hwnd;
-
LPDRAWITEMSTRUCT dis = (LPDRAWITEMSTRUCT)lParam;
if (dis->CtlType == ODT_MENU && dis->hwndItem == (HWND)GetSubMenu(PluginConfig.g_hMenuContext, 7)) {
RECT rc = { 0 };
@@ -1441,19 +1409,19 @@ int TSAPI MsgWindowDrawHandler(WPARAM, LPARAM lParam, TWindowData *dat)
return TRUE;
}
- HBITMAP hbmAvatar = dat->ace ? dat->ace->hbmPic : PluginConfig.g_hbmUnknown;
- if ((dis->hwndItem == GetDlgItem(hwndDlg, IDC_CONTACTPIC) && dat->bShowAvatar) || (dis->hwndItem == hwndDlg && dat->Panel->isActive())) {
+ HBITMAP hbmAvatar = ace ? ace->hbmPic : PluginConfig.g_hbmUnknown;
+ if ((dis->hwndItem == GetDlgItem(m_hwnd, IDC_CONTACTPIC) && bShowAvatar) || (dis->hwndItem == m_hwnd && Panel->isActive())) {
if (hbmAvatar == NULL)
return TRUE;
int top, cx, cy;
RECT rcClient, rcFrame;
- bool bPanelPic = dis->hwndItem == hwndDlg;
- if (bPanelPic && !dat->bShowInfoAvatar)
+ bool bPanelPic = (dis->hwndItem == m_hwnd);
+ if (bPanelPic && !bShowInfoAvatar)
return TRUE;
RECT rc;
- GetClientRect(hwndDlg, &rc);
+ GetClientRect(m_hwnd, &rc);
if (bPanelPic) {
rcClient = dis->rcItem;
cx = (rcClient.right - rcClient.left);
@@ -1479,10 +1447,10 @@ int TSAPI MsgWindowDrawHandler(WPARAM, LPARAM lParam, TWindowData *dat)
rcFrame = rcClient;
if (!bPanelPic) {
- top = (cy - dat->pic.cy) / 2;
- RECT rcEdge = { 0, top, dat->pic.cx, top + dat->pic.cy };
+ top = (cy - pic.cy) / 2;
+ RECT rcEdge = { 0, top, pic.cx, top + pic.cy };
if (CSkin::m_skinEnabled)
- CSkin::SkinDrawBG(dis->hwndItem, dat->pContainer->hwnd, dat->pContainer, &dis->rcItem, hdcDraw);
+ CSkin::SkinDrawBG(dis->hwndItem, pContainer->hwnd, pContainer, &dis->rcItem, hdcDraw);
else if (PluginConfig.m_fillColor) {
HBRUSH br = CreateSolidBrush(PluginConfig.m_fillColor);
FillRect(hdcDraw, &rcFrame, br);
@@ -1522,22 +1490,22 @@ int TSAPI MsgWindowDrawHandler(WPARAM, LPARAM lParam, TWindowData *dat)
bool bBorder = (CSkin::m_bAvatarBorderType ? true : false);
int border_off = bBorder ? 1 : 0;
- int iMaxHeight = dat->iPanelAvatarY - (bBorder ? 2 : 0);
- int iMaxWidth = dat->iPanelAvatarX - (bBorder ? 2 : 0);
+ int iMaxHeight = iPanelAvatarY - (bBorder ? 2 : 0);
+ int iMaxWidth = iPanelAvatarX - (bBorder ? 2 : 0);
rcFrame.left = rcFrame.top = 0;
rcFrame.right = (rcClient.right - rcClient.left);
rcFrame.bottom = (rcClient.bottom - rcClient.top);
- rcFrame.left = rcFrame.right - (LONG)dat->iPanelAvatarX;
- rcFrame.bottom = (LONG)dat->iPanelAvatarY;
+ rcFrame.left = rcFrame.right - (LONG)iPanelAvatarX;
+ rcFrame.bottom = (LONG)iPanelAvatarY;
int height_off = (cy - iMaxHeight - (bBorder ? 2 : 0)) / 2;
rcFrame.top += height_off;
rcFrame.bottom += height_off;
- SendMessage(dat->hwndPanelPic, AVATAR_SETAEROCOMPATDRAWING, 0, bAero ? TRUE : FALSE);
- SetWindowPos(dat->hwndPanelPic, HWND_TOP, rcFrame.left + border_off, rcFrame.top + border_off,
+ SendMessage(hwndPanelPic, AVATAR_SETAEROCOMPATDRAWING, 0, bAero ? TRUE : FALSE);
+ SetWindowPos(hwndPanelPic, HWND_TOP, rcFrame.left + border_off, rcFrame.top + border_off,
iMaxWidth, iMaxHeight, SWP_SHOWWINDOW | SWP_ASYNCWINDOWPOS | SWP_DEFERERASE | SWP_NOSENDCHANGING);
}
@@ -1550,11 +1518,11 @@ int TSAPI MsgWindowDrawHandler(WPARAM, LPARAM lParam, TWindowData *dat)
return TRUE;
}
- if (dis->hwndItem == GetDlgItem(hwndDlg, IDC_STATICTEXT) || dis->hwndItem == GetDlgItem(hwndDlg, IDC_LOGFROZENTEXT)) {
+ if (dis->hwndItem == GetDlgItem(m_hwnd, IDC_STATICTEXT) || dis->hwndItem == GetDlgItem(m_hwnd, IDC_LOGFROZENTEXT)) {
wchar_t szWindowText[256];
if (CSkin::m_skinEnabled) {
SetTextColor(dis->hDC, CSkin::m_DefaultFontColor);
- CSkin::SkinDrawBG(dis->hwndItem, dat->pContainer->hwnd, dat->pContainer, &dis->rcItem, dis->hDC);
+ CSkin::SkinDrawBG(dis->hwndItem, pContainer->hwnd, pContainer, &dis->rcItem, dis->hDC);
}
else {
SetTextColor(dis->hDC, GetSysColor(COLOR_BTNTEXT));
@@ -1567,9 +1535,9 @@ int TSAPI MsgWindowDrawHandler(WPARAM, LPARAM lParam, TWindowData *dat)
return TRUE;
}
- if (dis->hwndItem == GetDlgItem(hwndDlg, IDC_STATICERRORICON)) {
+ if (dis->hwndItem == GetDlgItem(m_hwnd, IDC_STATICERRORICON)) {
if (CSkin::m_skinEnabled)
- CSkin::SkinDrawBG(dis->hwndItem, dat->pContainer->hwnd, dat->pContainer, &dis->rcItem, dis->hDC);
+ CSkin::SkinDrawBG(dis->hwndItem, pContainer->hwnd, pContainer, &dis->rcItem, dis->hDC);
else
CSkin::FillBack(dis->hDC, &dis->rcItem);
DrawIconEx(dis->hDC, (dis->rcItem.right - dis->rcItem.left) / 2 - 8, (dis->rcItem.bottom - dis->rcItem.top) / 2 - 8,
@@ -1577,7 +1545,7 @@ int TSAPI MsgWindowDrawHandler(WPARAM, LPARAM lParam, TWindowData *dat)
return TRUE;
}
- if (dis->CtlType == ODT_MENU && dat->Panel->isHovered()) {
+ if (dis->CtlType == ODT_MENU && Panel->isHovered()) {
DrawMenuItem(dis, (HICON)dis->itemData, 0);
return TRUE;
}
@@ -1652,16 +1620,16 @@ void TSAPI LoadOverrideTheme(TContainerData *pContainer)
LoadThemeDefaults(pContainer);
}
-HICON TSAPI GetXStatusIcon(const TWindowData *dat)
+HICON CTabBaseDlg::GetXStatusIcon() const
{
- BYTE xStatus = dat->cache->getXStatusId();
+ BYTE xStatus = cache->getXStatusId();
if (xStatus == 0)
return NULL;
- if (!ProtoServiceExists(dat->cache->getActiveProto(), PS_GETCUSTOMSTATUSICON))
+ if (!ProtoServiceExists(cache->getActiveProto(), PS_GETCUSTOMSTATUSICON))
return NULL;
- return (HICON)(CallProtoService(dat->cache->getActiveProto(), PS_GETCUSTOMSTATUSICON, xStatus, 0));
+ return (HICON)(CallProtoService(cache->getActiveProto(), PS_GETCUSTOMSTATUSICON, xStatus, 0));
}
LRESULT TSAPI GetSendButtonState(HWND hwnd)
@@ -1674,100 +1642,98 @@ LRESULT TSAPI GetSendButtonState(HWND hwnd)
return 0;
}
-void TSAPI EnableSendButton(const TWindowData *dat, int iMode)
+void CTabBaseDlg::EnableSendButton(bool bMode) const
{
- SendDlgItemMessage(dat->hwnd, IDOK, BUTTONSETASNORMAL, iMode, 0);
- SendDlgItemMessage(dat->hwnd, IDC_PIC, BUTTONSETASNORMAL, dat->fEditNotesActive ? TRUE : (!iMode && dat->iOpenJobs == 0) ? TRUE : FALSE, 0);
-
- HWND hwndOK = GetDlgItem(GetParent(GetParent(dat->hwnd)), IDOK);
+ SendDlgItemMessage(m_hwnd, IDOK, BUTTONSETASNORMAL, bMode, 0);
+ SendDlgItemMessage(m_hwnd, IDC_PIC, BUTTONSETASNORMAL, fEditNotesActive ? TRUE : (!bMode && iOpenJobs == 0) ? TRUE : FALSE, 0);
+ HWND hwndOK = GetDlgItem(GetParent(GetParent(m_hwnd)), IDOK);
if (IsWindow(hwndOK))
- SendMessage(hwndOK, BUTTONSETASNORMAL, iMode, 0);
+ SendMessage(hwndOK, BUTTONSETASNORMAL, bMode, 0);
}
-void TSAPI SendNudge(const TWindowData *dat)
+void CTabBaseDlg::SendNudge() const
{
- if (ProtoServiceExists(dat->cache->getActiveProto(), PS_SEND_NUDGE) && ServiceExists(MS_NUDGE_SEND))
- CallService(MS_NUDGE_SEND, (WPARAM)dat->cache->getActiveContact(), 0);
+ if (ProtoServiceExists(cache->getActiveProto(), PS_SEND_NUDGE) && ServiceExists(MS_NUDGE_SEND))
+ CallService(MS_NUDGE_SEND, cache->getActiveContact(), 0);
else
- SendMessage(dat->hwnd, DM_ACTIVATETOOLTIP, IDC_MESSAGE,
- (LPARAM)TranslateT("Either the nudge plugin is not installed or the contact's protocol does not support sending a nudge event."));
+ SendMessage(m_hwnd, DM_ACTIVATETOOLTIP, IDC_MESSAGE,
+ (LPARAM)TranslateT("Either the nudge plugin is not installed or the contact's protocol does not support sending a nudge event."));
}
-void TSAPI GetClientIcon(TWindowData *dat)
+void CTabBaseDlg::GetClientIcon()
{
- if (dat->hClientIcon)
- DestroyIcon(dat->hClientIcon);
+ if (hClientIcon)
+ DestroyIcon(hClientIcon);
- dat->hClientIcon = 0;
+ hClientIcon = nullptr;
if (ServiceExists(MS_FP_GETCLIENTICONT)) {
- ptrW tszMirver(db_get_wsa(dat->cache->getActiveContact(), dat->cache->getActiveProto(), "MirVer"));
+ ptrW tszMirver(db_get_wsa(cache->getActiveContact(), cache->getActiveProto(), "MirVer"));
if (tszMirver)
- dat->hClientIcon = Finger_GetClientIcon(tszMirver, 1);
+ hClientIcon = Finger_GetClientIcon(tszMirver, 1);
}
}
-void TSAPI GetMyNick(TWindowData *dat)
+void CTabBaseDlg::GetMyNick()
{
- ptrW tszNick(Contact_GetInfo(CNF_NICK, NULL, dat->cache->getActiveProto()));
+ ptrW tszNick(Contact_GetInfo(CNF_NICK, NULL, cache->getActiveProto()));
if (tszNick != NULL) {
if (mir_wstrlen(tszNick) == 0 || !mir_wstrcmp(tszNick, TranslateT("'(Unknown contact)'")))
- wcsncpy_s(dat->szMyNickname, (dat->myUin[0] ? dat->myUin : TranslateT("'(Unknown contact)'")), _TRUNCATE);
+ wcsncpy_s(szMyNickname, (myUin[0] ? myUin : TranslateT("'(Unknown contact)'")), _TRUNCATE);
else
- wcsncpy_s(dat->szMyNickname, tszNick, _TRUNCATE);
+ wcsncpy_s(szMyNickname, tszNick, _TRUNCATE);
}
- else wcsncpy_s(dat->szMyNickname, L"<undef>", _TRUNCATE); // same here
+ else wcsncpy_s(szMyNickname, L"<undef>", _TRUNCATE); // same here
}
-HICON TSAPI MY_GetContactIcon(const TWindowData *dat, LPCSTR szSetting)
+HICON CTabBaseDlg::GetMyContactIcon(LPCSTR szSetting)
{
int bUseMeta = (szSetting == NULL) ? false : M.GetByte(szSetting, mir_strcmp(szSetting, "MetaiconTab") == 0);
if (bUseMeta)
- return Skin_LoadProtoIcon(dat->cache->getProto(), dat->cache->getStatus());
- return Skin_LoadProtoIcon(dat->cache->getActiveProto(), dat->cache->getActiveStatus());
+ return Skin_LoadProtoIcon(cache->getProto(), cache->getStatus());
+ return Skin_LoadProtoIcon(cache->getActiveProto(), cache->getActiveStatus());
}
/////////////////////////////////////////////////////////////////////////////////////////
// read keyboard state and return the state of the modifier keys
-void TSAPI KbdState(TWindowData *dat, BOOL& isShift, BOOL& isControl, BOOL& isAlt)
+void CTabBaseDlg::KbdState(bool &isShift, bool &isControl, bool &isAlt)
{
- GetKeyboardState(dat->kstate);
- isShift = (dat->kstate[VK_SHIFT] & 0x80);
- isControl = (dat->kstate[VK_CONTROL] & 0x80);
- isAlt = (dat->kstate[VK_MENU] & 0x80);
+ GetKeyboardState(kstate);
+ isShift = (kstate[VK_SHIFT] & 0x80) != 0;
+ isControl = (kstate[VK_CONTROL] & 0x80) != 0;
+ isAlt = (kstate[VK_MENU] & 0x80) != 0;
}
/////////////////////////////////////////////////////////////////////////////////////////
// clear the message log
// code needs to distuingish between IM and MUC sessions.
-void TSAPI ClearLog(TWindowData *dat)
+void CTabBaseDlg::ClearLog()
{
- if (dat && dat->bType == SESSIONTYPE_IM) {
- if (dat->hwndIEView || dat->hwndHPP) {
+ if (bType == SESSIONTYPE_IM) {
+ if (hwndIEView || hwndHPP) {
IEVIEWEVENT event;
event.cbSize = sizeof(IEVIEWEVENT);
event.iType = IEE_CLEAR_LOG;
- event.dwFlags = (dat->dwFlags & MWF_LOG_RTL) ? IEEF_RTL : 0;
- event.hContact = dat->hContact;
- if (dat->hwndIEView) {
- event.hwnd = dat->hwndIEView;
+ event.dwFlags = (dwFlags & MWF_LOG_RTL) ? IEEF_RTL : 0;
+ event.hContact = m_hContact;
+ if (hwndIEView) {
+ event.hwnd = hwndIEView;
CallService(MS_IEVIEW_EVENT, 0, (LPARAM)&event);
}
else {
- event.hwnd = dat->hwndHPP;
+ event.hwnd = hwndHPP;
CallService(MS_HPP_EG_EVENT, 0, (LPARAM)&event);
}
}
- SetDlgItemText(dat->hwnd, IDC_LOG, L"");
- dat->hDbEventFirst = NULL;
+ m_log.SetText(L"");
+ hDbEventFirst = 0;
}
- else if (dat && dat->bType == SESSIONTYPE_CHAT && dat->si) {
- SESSION_INFO *si = dat->si;
- SESSION_INFO* s = pci->SM_FindSession(si->ptszID, si->pszModule);
+ else if (bType == SESSIONTYPE_CHAT && si) {
+ SESSION_INFO *s = pci->SM_FindSession(si->ptszID, si->pszModule);
if (s) {
- SetDlgItemText(dat->hwnd, IDC_CHAT_LOG, L"");
+ m_log.SetText(L"");
pci->LM_RemoveAll(&s->pLog, &s->pLogEnd);
s->iEventCount = 0;
s->LastTime = 0;
@@ -1775,7 +1741,7 @@ void TSAPI ClearLog(TWindowData *dat)
si->LastTime = 0;
si->pLog = s->pLog;
si->pLogEnd = s->pLogEnd;
- PostMessage(dat->hwnd, WM_MOUSEACTIVATE, 0, 0);
+ PostMessage(m_hwnd, WM_MOUSEACTIVATE, 0, 0);
}
}
}
@@ -1787,55 +1753,51 @@ void TSAPI ClearLog(TWindowData *dat)
// the container will use this in its WM_GETMINMAXINFO handler to set
// minimum tracking height.
-void TSAPI DetermineMinHeight(TWindowData *dat)
+void CTabBaseDlg::DetermineMinHeight()
{
- if (!dat)
- return;
-
RECT rc;
- LONG height = (dat->Panel->isActive() ? dat->Panel->getHeight() + 2 : 0);
- if (!(dat->pContainer->dwFlags & CNT_HIDETOOLBAR))
+ LONG height = (Panel->isActive() ? Panel->getHeight() + 2 : 0);
+ if (!(pContainer->dwFlags & CNT_HIDETOOLBAR))
height += DPISCALEY_S(24); // toolbar
- GetClientRect(GetDlgItem(dat->hwnd, dat->bType == SESSIONTYPE_IM ? IDC_MESSAGE : IDC_CHAT_MESSAGE), &rc);
+ GetClientRect(m_message.GetHwnd(), &rc);
height += rc.bottom; // input area
height += 40; // min space for log area and some padding
- dat->pContainer->uChildMinHeight = height;
+ pContainer->uChildMinHeight = height;
}
-bool TSAPI IsAutoSplitEnabled(const TWindowData *dat)
+bool CTabBaseDlg::IsAutoSplitEnabled() const
{
- return((dat && (dat->pContainer->dwFlags & CNT_AUTOSPLITTER) && !(dat->dwFlagsEx & MWF_SHOW_SPLITTEROVERRIDE)) ? true : false);
+ return (pContainer->dwFlags & CNT_AUTOSPLITTER) && !(dwFlagsEx & MWF_SHOW_SPLITTEROVERRIDE);
}
-LONG TSAPI GetDefaultMinimumInputHeight(const TWindowData *dat)
+LONG CTabBaseDlg::GetDefaultMinimumInputHeight() const
{
- LONG height = MINSPLITTERY;
+ LONG height;
- if (dat) {
- if (dat->bType == SESSIONTYPE_IM)
- height = ((dat->pContainer->dwFlags & CNT_BOTTOMTOOLBAR) ? DPISCALEY_S(46 + 22) : DPISCALEY_S(46));
- else
- height = ((dat->pContainer->dwFlags & CNT_BOTTOMTOOLBAR) ? DPISCALEY_S(22 + 46) : DPISCALEY_S(46)) - DPISCALEY_S(23);
+ if (bType == SESSIONTYPE_IM)
+ height = ((pContainer->dwFlags & CNT_BOTTOMTOOLBAR) ? DPISCALEY_S(46 + 22) : DPISCALEY_S(46));
+ else
+ height = ((pContainer->dwFlags & CNT_BOTTOMTOOLBAR) ? DPISCALEY_S(22 + 46) : DPISCALEY_S(46)) - DPISCALEY_S(23);
- if (CSkin::m_skinEnabled && !SkinItems[ID_EXTBKINPUTAREA].IGNORED)
- height += (SkinItems[ID_EXTBKINPUTAREA].MARGIN_BOTTOM + SkinItems[ID_EXTBKINPUTAREA].MARGIN_TOP - 2);
- }
- return(height);
+ if (CSkin::m_skinEnabled && !SkinItems[ID_EXTBKINPUTAREA].IGNORED)
+ height += (SkinItems[ID_EXTBKINPUTAREA].MARGIN_BOTTOM + SkinItems[ID_EXTBKINPUTAREA].MARGIN_TOP - 2);
+
+ return height;
}
static LIST<wchar_t> vTempFilenames(5);
// send a pasted bitmap by file transfer.
-void TSAPI SendHBitmapAsFile(const TWindowData *dat, HBITMAP hbmp)
+void CTabBaseDlg::SendHBitmapAsFile(HBITMAP hbmp) const
{
- const wchar_t* mirandatempdir = L"Miranda";
- const wchar_t* filenametemplate = L"\\clp-%Y%m%d-%H%M%S0.jpg";
- wchar_t filename[MAX_PATH];
- size_t tempdirlen = GetTempPath(MAX_PATH, filename);
- bool fSend = true;
+ const wchar_t *mirandatempdir = L"Miranda";
+ const wchar_t *filenametemplate = L"\\clp-%Y%m%d-%H%M%S0.jpg";
+ wchar_t filename[MAX_PATH];
+ size_t tempdirlen = GetTempPath(MAX_PATH, filename);
+ bool fSend = true;
- const char *szProto = dat->cache->getActiveProto();
+ const char *szProto = cache->getActiveProto();
WORD wMyStatus = (WORD)CallProtoService(szProto, PS_GETSTATUS, 0, 0);
DWORD protoCaps = CallProtoService(szProto, PS_GETCAPS, PFLAGNUM_1, 0);
@@ -1847,13 +1809,13 @@ void TSAPI SendHBitmapAsFile(const TWindowData *dat, HBITMAP hbmp)
if (!(protoCaps & PF1_FILESEND))
fSend = false;
- if ((ID_STATUS_OFFLINE == wMyStatus) || (ID_STATUS_OFFLINE == dat->cache->getActiveStatus() && !(typeCaps & PF4_OFFLINEFILES)))
+ if ((ID_STATUS_OFFLINE == wMyStatus) || (ID_STATUS_OFFLINE == cache->getActiveStatus() && !(typeCaps & PF4_OFFLINEFILES)))
fSend = false;
- if (protoCaps & PF1_VISLIST && db_get_w(dat->cache->getActiveContact(), szProto, "ApparentMode", 0) == ID_STATUS_OFFLINE)
+ if (protoCaps & PF1_VISLIST && db_get_w(cache->getActiveContact(), szProto, "ApparentMode", 0) == ID_STATUS_OFFLINE)
fSend = false;
- if (protoCaps & PF1_INVISLIST && wMyStatus == ID_STATUS_INVISIBLE && db_get_w(dat->cache->getActiveContact(), szProto, "ApparentMode", 0) != ID_STATUS_ONLINE)
+ if (protoCaps & PF1_INVISLIST && wMyStatus == ID_STATUS_INVISIBLE && db_get_w(cache->getActiveContact(), szProto, "ApparentMode", 0) != ID_STATUS_ONLINE)
fSend = false;
if (!fSend) {
@@ -1921,7 +1883,7 @@ void TSAPI SendHBitmapAsFile(const TWindowData *dat, HBITMAP hbmp)
wchar_t* _t = mir_wstrdup(filename);
vTempFilenames.insert(_t);
- CallService(MS_FILE_SENDSPECIFICFILEST, (WPARAM)dat->cache->getActiveContact(), (LPARAM)ppFiles);
+ CallService(MS_FILE_SENDSPECIFICFILEST, (WPARAM)cache->getActiveContact(), (LPARAM)ppFiles);
mir_free(ppFiles[0]);
mir_free(ppFiles);
diff --git a/plugins/TabSRMM/src/msgdlgutils.h b/plugins/TabSRMM/src/msgdlgutils.h
index 01f7399bd8..32ca9e0631 100644
--- a/plugins/TabSRMM/src/msgdlgutils.h
+++ b/plugins/TabSRMM/src/msgdlgutils.h
@@ -30,61 +30,21 @@
#define WANT_IEVIEW_LOG 1
#define WANT_HPP_LOG 2
-void TSAPI CalcDynamicAvatarSize(TWindowData *dat, BITMAP *bminfo);
-char* TSAPI GetCurrentMetaContactProto(TWindowData *dat);
-int TSAPI MsgWindowUpdateMenu(TWindowData *dat, HMENU submenu, int menuID);
-int TSAPI MsgWindowMenuHandler(TWindowData *dat, int selection, int menuId);
-bool TSAPI GetAvatarVisibility(HWND hwndDlg, TWindowData *dat);
void TSAPI ProcessAvatarChange(HWND hwnd, LPARAM lParam);
-void TSAPI UpdateStatusBar(const TWindowData *dat);
int TSAPI CheckValidSmileyPack(const char *szProto, MCONTACT hContact);
wchar_t* TSAPI QuoteText(const wchar_t *text);
-void TSAPI UpdateReadChars(const TWindowData *dat);
-void TSAPI ShowPicture(TWindowData *dat, BOOL showNewPic);
-void TSAPI AdjustBottomAvatarDisplay(TWindowData *dat);
void TSAPI SetDialogToType(HWND hwndDlg);
-void TSAPI FlashOnClist(HWND hwndDlg, TWindowData *dat, MEVENT hEvent, DBEVENTINFO *dbei);
char* TSAPI Message_GetFromStream(HWND hwndRtf, DWORD dwPassedFlags = 0);
-BOOL TSAPI DoRtfToTags(const TWindowData *dat, CMStringW &pszText, int iNumColors, COLORREF *pColors);
-void TSAPI GetMYUIN(TWindowData *dat);
-void TSAPI SetMessageLog(TWindowData *dat);
-void TSAPI SwitchMessageLog(TWindowData *dat, int iMode);
UINT TSAPI GetIEViewMode(MCONTACT hContact);
-void TSAPI FindFirstEvent(TWindowData *dat);
-void TSAPI SaveSplitter(TWindowData *dat);
-void TSAPI LoadSplitter(TWindowData *dat);
-void TSAPI PlayIncomingSound(const TWindowData *dat);
-void TSAPI GetSendFormat(TWindowData *dat);
-void TSAPI GetLocaleID(TWindowData *dat, const wchar_t *szKLName);
-void TSAPI LoadOwnAvatar(TWindowData *dat);
-void TSAPI LoadContactAvatar(TWindowData *dat);
-void TSAPI LoadTimeZone(TWindowData *dat);
-void TSAPI HandlePasteAndSend(const TWindowData *dat);
-int TSAPI MsgWindowDrawHandler(WPARAM wParam, LPARAM lParam, TWindowData *dat);
void TSAPI LoadOverrideTheme(TContainerData *pContainer);
void TSAPI LoadThemeDefaults(TContainerData *pContainer);
int TSAPI CutContactName(const wchar_t *szold, wchar_t *sznew, size_t size);
-void TSAPI SendNudge(const TWindowData *dat);
-void TSAPI EnableSendButton(const TWindowData *dat, int iMode);
LRESULT TSAPI GetSendButtonState(HWND hwnd);
-HICON TSAPI GetXStatusIcon(const TWindowData *dat);
-void TSAPI FlashTab(TWindowData *dat, HWND hwndTab, int iTabindex, BOOL *bState, BOOL mode, HICON origImage);
-void TSAPI GetClientIcon(TWindowData *dat);
-void TSAPI RearrangeTab(HWND hwndDlg, const TWindowData *dat, int iMode, BOOL fSavePos);
-void TSAPI GetCachedStatusMsg(TWindowData *dat);
+void TSAPI RearrangeTab(HWND hwndDlg, const CTabBaseDlg *dat, int iMode, BOOL fSavePos);
bool TSAPI IsStatusEvent(int eventType);
bool TSAPI IsCustomEvent(int eventType);
-void TSAPI GetMyNick(TWindowData *dat);
-HICON TSAPI MY_GetContactIcon(const TWindowData *dat, LPCSTR szSetting);
-void TSAPI CheckAndDestroyIEView(TWindowData *dat);
-void TSAPI KbdState(TWindowData *dat, BOOL& isShift, BOOL& isControl, BOOL& isAlt);
-void TSAPI ClearLog(TWindowData *dat);
-bool TSAPI IsAutoSplitEnabled(const TWindowData *dat);
-LONG TSAPI GetDefaultMinimumInputHeight(const TWindowData *dat);
-void TSAPI DetermineMinHeight(TWindowData *dat);
void TSAPI CleanTempFiles();
-void TSAPI SendHBitmapAsFile(const TWindowData *dat, HBITMAP hbmp);
extern INT_PTR CALLBACK SelectContainerDlgProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam);
extern INT_PTR CALLBACK DlgProcContainerOptions(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam);
diff --git a/plugins/TabSRMM/src/msglog.cpp b/plugins/TabSRMM/src/msglog.cpp
index f87e1e4c40..340ea4651a 100644
--- a/plugins/TabSRMM/src/msglog.cpp
+++ b/plugins/TabSRMM/src/msglog.cpp
@@ -93,7 +93,7 @@ struct LogStreamData {
int eventsToInsert;
int isEmpty;
int isAppend;
- TWindowData *dlgDat;
+ CSrmmWindow *dlgDat;
DBEVENTINFO *dbei;
};
@@ -323,7 +323,7 @@ static int AppendUnicodeToBuffer(CMStringA &str, const wchar_t *line, int mode)
/////////////////////////////////////////////////////////////////////////////////////////
-static void Build_RTF_Header(CMStringA &str, TWindowData *dat)
+static void Build_RTF_Header(CMStringA &str, CSrmmWindow *dat)
{
int i;
LOGFONTA *logFonts = dat->pContainer->theme.logFonts;
@@ -381,14 +381,14 @@ static void Build_RTF_Header(CMStringA &str, TWindowData *dat)
}
// mir_free() the return value
-static char* CreateRTFHeader(TWindowData *dat)
+static char* CreateRTFHeader(CSrmmWindow *dat)
{
CMStringA str;
Build_RTF_Header(str, dat);
return str.Detach();
}
-static void AppendTimeStamp(wchar_t *szFinalTimestamp, int isSent, CMStringA &str, int skipFont, TWindowData *dat, int iFontIDOffset)
+static void AppendTimeStamp(wchar_t *szFinalTimestamp, int isSent, CMStringA &str, int skipFont, CSrmmWindow *dat, int iFontIDOffset)
{
if (skipFont)
AppendUnicodeToBuffer(str, szFinalTimestamp, MAKELONG(isSent, dat->bIsHistory));
@@ -443,7 +443,7 @@ int DbEventIsForMsgWindow(DBEVENTINFO *dbei)
return et && (et->flags & DETF_MSGWINDOW);
}
-static char* Template_CreateRTFFromDbEvent(TWindowData *dat, MCONTACT hContact, MEVENT hDbEvent, LogStreamData *streamData)
+static char* Template_CreateRTFFromDbEvent(CSrmmWindow *dat, MCONTACT hContact, MEVENT hDbEvent, LogStreamData *streamData)
{
HANDLE hTimeZone = NULL;
BOOL skipToNext = FALSE, skipFont = FALSE;
@@ -1074,7 +1074,7 @@ static DWORD CALLBACK LogStreamInEvents(DWORD_PTR dwCookie, LPBYTE pbBuff, LONG
return 0;
}
-static void SetupLogFormatting(TWindowData *dat)
+static void SetupLogFormatting(CSrmmWindow *dat)
{
if (dat->hHistoryEvents)
strncpy_s(dat->szMicroLf, "\\v\\cf%d \\ ~-+%d+-~\\v0 ", _TRUNCATE);
@@ -1082,7 +1082,7 @@ static void SetupLogFormatting(TWindowData *dat)
mir_snprintf(dat->szMicroLf, "%s\\par\\ltrpar\\sl-1%s ", GetRTFFont(MSGDLGFONTCOUNT), GetRTFFont(MSGDLGFONTCOUNT));
}
-static void ReplaceIcons(HWND hwndDlg, TWindowData *dat, LONG startAt, int fAppend, BOOL isSent)
+static void ReplaceIcons(HWND hwndDlg, CSrmmWindow *dat, LONG startAt, int fAppend, BOOL isSent)
{
wchar_t trbuffer[40];
TEXTRANGE tr;
@@ -1204,15 +1204,14 @@ static void ReplaceIcons(HWND hwndDlg, TWindowData *dat, LONG startAt, int fAppe
}
}
-void TSAPI StreamInEvents(HWND hwndDlg, MEVENT hDbEventFirst, int count, int fAppend, DBEVENTINFO *dbei_s)
+void CSrmmWindow::StreamInEvents(MEVENT hDbEventFirst, int count, int fAppend, DBEVENTINFO *dbei_s)
{
- TWindowData *dat = (TWindowData*)GetWindowLongPtr(hwndDlg, GWLP_USERDATA);
CHARRANGE oldSel, sel;
// calc time limit for grouping
- HWND hwndrtf = dat->hwndIEView ? dat->hwndIWebBrowserControl : GetDlgItem(hwndDlg, IDC_LOG);
+ HWND hwndrtf = hwndIEView ? hwndIWebBrowserControl : m_log.GetHwnd();
- rtfFonts = dat->pContainer->theme.rtfFonts ? dat->pContainer->theme.rtfFonts : &(rtfFontsGlobal[0][0]);
+ rtfFonts = pContainer->theme.rtfFonts ? pContainer->theme.rtfFonts : &(rtfFontsGlobal[0][0]);
time_t now = time(NULL);
struct tm tm_now = *localtime(&now);
@@ -1220,22 +1219,22 @@ void TSAPI StreamInEvents(HWND hwndDlg, MEVENT hDbEventFirst, int count, int fAp
tm_today.tm_hour = tm_today.tm_min = tm_today.tm_sec = 0;
today = mktime(&tm_today);
- if (dat->hwndIEView != NULL || dat->hwndHPP != NULL) {
+ if (hwndIEView != NULL || hwndHPP != NULL) {
const char *pszService;
IEVIEWEVENT event = { 0 };
event.cbSize = sizeof(IEVIEWEVENT);
- event.hContact = dat->hContact;
- if (dat->hwndIEView != NULL) {
- event.pszProto = dat->szProto;
- event.hwnd = dat->hwndIEView;
+ event.hContact = m_hContact;
+ if (hwndIEView != NULL) {
+ event.pszProto = szProto;
+ event.hwnd = hwndIEView;
pszService = MS_IEVIEW_EVENT;
}
else {
- event.hwnd = dat->hwndHPP;
+ event.hwnd = hwndHPP;
pszService = MS_HPP_EG_EVENT;
}
- if (dat->dwFlags & MWF_LOG_RTL)
+ if (dwFlags & MWF_LOG_RTL)
event.dwFlags = IEEF_RTL;
if (!fAppend) {
@@ -1251,7 +1250,7 @@ void TSAPI StreamInEvents(HWND hwndDlg, MEVENT hDbEventFirst, int count, int fAp
evData.dwFlags = IEEDF_SENT;
else {
evData.dwFlags = IEEDF_UNICODE_NICK;
- evData.ptszNick = pcli->pfnGetContactDisplayName(dat->hContact, 0);
+ evData.ptszNick = pcli->pfnGetContactDisplayName(m_hContact, 0);
}
switch (dbei_s->eventType) {
case EVENTTYPE_STATUSCHANGE: evData.iType = IEED_EVENT_STATUSCHANGE; break;
@@ -1270,30 +1269,30 @@ void TSAPI StreamInEvents(HWND hwndDlg, MEVENT hDbEventFirst, int count, int fAp
}
event.count = count;
CallService(pszService, 0, (LPARAM)&event);
- DM_ScrollToBottom(dat, 0, 0);
+ DM_ScrollToBottom(this, 0, 0);
if (fAppend && hDbEventFirst)
- dat->hDbEventLast = hDbEventFirst;
+ hDbEventLast = hDbEventFirst;
else
- dat->hDbEventLast = db_event_last(dat->hContact);
+ hDbEventLast = db_event_last(m_hContact);
return;
}
// separator strings used for grid lines, message separation and so on...
- dat->clr_added = FALSE;
+ clr_added = FALSE;
- if (dat->szMicroLf[0] == 0)
- SetupLogFormatting(dat);
+ if (szMicroLf[0] == 0)
+ SetupLogFormatting(this);
- szYourName = const_cast<wchar_t *>(dat->cache->getNick());
- szMyName = dat->szMyNickname;
+ szYourName = const_cast<wchar_t *>(cache->getNick());
+ szMyName = szMyNickname;
SendMessage(hwndrtf, EM_HIDESELECTION, TRUE, 0);
SendMessage(hwndrtf, EM_EXGETSEL, 0, (LPARAM)&oldSel);
LogStreamData streamData = { 0 };
- streamData.hContact = dat->hContact;
+ streamData.hContact = m_hContact;
streamData.hDbEvent = hDbEventFirst;
- streamData.dlgDat = dat;
+ streamData.dlgDat = this;
streamData.eventsToInsert = count;
streamData.isEmpty = fAppend ? GetWindowTextLength(hwndrtf) == 0 : 1;
streamData.dbei = dbei_s;
@@ -1318,7 +1317,7 @@ void TSAPI StreamInEvents(HWND hwndDlg, MEVENT hDbEventFirst, int count, int fAp
sel.cpMax = GetWindowTextLength(hwndrtf);
SendMessage(hwndrtf, EM_EXSETSEL, 0, (LPARAM)&sel);
startAt = 0;
- dat->isAutoRTL = 0;
+ isAutoRTL = 0;
}
// begin to draw
@@ -1327,13 +1326,13 @@ void TSAPI StreamInEvents(HWND hwndDlg, MEVENT hDbEventFirst, int count, int fAp
SendMessage(hwndrtf, EM_STREAMIN, fAppend ? SFF_SELECTION | SF_RTF : SFF_SELECTION | SF_RTF, (LPARAM)&stream);
SendMessage(hwndrtf, EM_EXSETSEL, 0, (LPARAM)&oldSel);
SendMessage(hwndrtf, EM_HIDESELECTION, FALSE, 0);
- dat->hDbEventLast = streamData.hDbEventLast;
+ hDbEventLast = streamData.hDbEventLast;
- if (dat->isAutoRTL & 1)
- SendMessage(hwndrtf, EM_SETBKGNDCOLOR, 0, (LOWORD(dat->iLastEventType) & DBEF_SENT) ? (fAppend ? dat->pContainer->theme.outbg : dat->pContainer->theme.oldoutbg) :
- (fAppend ? dat->pContainer->theme.inbg : dat->pContainer->theme.oldinbg));
+ if (isAutoRTL & 1)
+ SendMessage(hwndrtf, EM_SETBKGNDCOLOR, 0, (LOWORD(iLastEventType) & DBEF_SENT) ? (fAppend ? pContainer->theme.outbg : pContainer->theme.oldoutbg) :
+ (fAppend ? pContainer->theme.inbg : pContainer->theme.oldinbg));
- if (!(dat->isAutoRTL & 1)) {
+ if (!(isAutoRTL & 1)) {
GETTEXTLENGTHEX gtxl = { 0 };
gtxl.codepage = 1200;
gtxl.flags = GTL_DEFAULT | GTL_PRECISE | GTL_NUMCHARS;
@@ -1342,7 +1341,7 @@ void TSAPI StreamInEvents(HWND hwndDlg, MEVENT hDbEventFirst, int count, int fAp
sel.cpMin = sel.cpMax - 1;
SendMessage(hwndrtf, EM_EXSETSEL, 0, (LPARAM)&sel);
SendMessage(hwndrtf, EM_REPLACESEL, FALSE, (LPARAM)L"");
- dat->isAutoRTL |= 2;
+ isAutoRTL |= 2;
}
BOOL isSent;
@@ -1354,18 +1353,18 @@ void TSAPI StreamInEvents(HWND hwndDlg, MEVENT hDbEventFirst, int count, int fAp
isSent = (dbei.flags & DBEF_SENT) != 0;
}
- ReplaceIcons(hwndDlg, dat, startAt, fAppend, isSent);
- dat->clr_added = FALSE;
+ ReplaceIcons(m_hwnd, this, startAt, fAppend, isSent);
+ clr_added = FALSE;
- if (dat->hwndIEView == NULL && dat->hwndHPP == NULL) {
+ if (hwndIEView == NULL && hwndHPP == NULL) {
int len = GetWindowTextLength(hwndrtf);
SendMessage(hwndrtf, EM_SETSEL, len - 1, len - 1);
}
- DM_ScrollToBottom(dat, 0, 0);
+ DM_ScrollToBottom(this, 0, 0);
SendMessage(hwndrtf, WM_SETREDRAW, TRUE, 0);
InvalidateRect(hwndrtf, NULL, FALSE);
- EnableWindow(GetDlgItem(hwndDlg, IDC_QUOTE), dat->hDbEventLast != NULL);
+ EnableWindow(GetDlgItem(m_hwnd, IDC_QUOTE), hDbEventLast != NULL);
mir_free(streamData.buffer);
}
diff --git a/plugins/TabSRMM/src/msgs.cpp b/plugins/TabSRMM/src/msgs.cpp
index bfec1df09f..834e6becd5 100644
--- a/plugins/TabSRMM/src/msgs.cpp
+++ b/plugins/TabSRMM/src/msgs.cpp
@@ -115,9 +115,28 @@ static INT_PTR GetWindowData(WPARAM wParam, LPARAM lParam)
}
/////////////////////////////////////////////////////////////////////////////////////////
+// basic window class
+
+CTabBaseDlg::CTabBaseDlg(TNewWindowData *pData, int iResource)
+ : CSrmmBaseDialog(g_hInst, iResource),
+ m_log(this, IDC_LOG),
+ m_message(this, IDC_MESSAGE),
+ newData(pData),
+
+ pContainer(pData->pContainer),
+ m_hContact(pData->hContact)
+{
+ m_pLog = &m_log;
+ m_pEntry = &m_message;
+
+ m_autoClose = 0;
+ m_forceResizable = true;
+}
+
+/////////////////////////////////////////////////////////////////////////////////////////
// service function. Sets a status bar text for a contact
-static void SetStatusTextWorker(TWindowData *dat, StatusTextData *st)
+static void SetStatusTextWorker(CTabBaseDlg *dat, StatusTextData *st)
{
if (!dat)
return;
@@ -131,7 +150,7 @@ static void SetStatusTextWorker(TWindowData *dat, StatusTextData *st)
if (st != NULL && st->cbSize == sizeof(StatusTextData))
dat->sbCustom = new StatusTextData(*st);
- UpdateStatusBar(dat);
+ dat->UpdateStatusBar();
}
static INT_PTR SetStatusText(WPARAM hContact, LPARAM lParam)
@@ -140,11 +159,11 @@ static INT_PTR SetStatusText(WPARAM hContact, LPARAM lParam)
if (si == NULL) {
HWND hwnd = M.FindWindow(hContact);
if (hwnd != NULL)
- SetStatusTextWorker((TWindowData*)GetWindowLongPtr(hwnd, GWLP_USERDATA), (StatusTextData*)lParam);
+ SetStatusTextWorker((CTabBaseDlg*)GetWindowLongPtr(hwnd, GWLP_USERDATA), (StatusTextData*)lParam);
if (hContact = db_mc_getMeta(hContact))
if (hwnd = M.FindWindow(hContact))
- SetStatusTextWorker((TWindowData*)GetWindowLongPtr(hwnd, GWLP_USERDATA), (StatusTextData*)lParam);
+ SetStatusTextWorker((CTabBaseDlg*)GetWindowLongPtr(hwnd, GWLP_USERDATA), (StatusTextData*)lParam);
}
else SetStatusTextWorker(si->dat, (StatusTextData*)lParam);
@@ -189,7 +208,7 @@ static INT_PTR GetMessageWindowFlags(WPARAM wParam, LPARAM lParam)
if (hwndTarget == 0)
return 0;
- TWindowData *dat = (TWindowData*)GetWindowLongPtr(hwndTarget, GWLP_USERDATA);
+ CSrmmWindow *dat = (CSrmmWindow*)GetWindowLongPtr(hwndTarget, GWLP_USERDATA);
return (dat) ? dat->dwFlags : 0;
}
@@ -417,7 +436,7 @@ int MyAvatarChanged(WPARAM wParam, LPARAM lParam)
int TSAPI ActivateExistingTab(TContainerData *pContainer, HWND hwndChild)
{
- TWindowData *dat = (TWindowData*)GetWindowLongPtr(hwndChild, GWLP_USERDATA); // needed to obtain the hContact for the message window
+ CSrmmWindow *dat = (CSrmmWindow*)GetWindowLongPtr(hwndChild, GWLP_USERDATA); // needed to obtain the hContact for the message window
if (!dat || !pContainer)
return FALSE;
@@ -428,7 +447,7 @@ int TSAPI ActivateExistingTab(TContainerData *pContainer, HWND hwndChild)
SendMessage(pContainer->hwnd, WM_NOTIFY, 0, (LPARAM)&nmhdr); // just select the tab and let WM_NOTIFY do the rest
}
if (dat->bType == SESSIONTYPE_IM)
- SendMessage(pContainer->hwnd, DM_UPDATETITLE, dat->hContact, 0);
+ SendMessage(pContainer->hwnd, DM_UPDATETITLE, dat->m_hContact, 0);
if (IsIconic(pContainer->hwnd)) {
SendMessage(pContainer->hwnd, WM_SYSCOMMAND, SC_RESTORE, 0);
SetForegroundWindow(pContainer->hwnd);
@@ -527,9 +546,9 @@ HWND TSAPI CreateNewTabForContact(TContainerData *pContainer, MCONTACT hContact,
item.mask = TCIF_PARAM;
TabCtrl_GetItem(hwndTab, i, &item);
HWND hwnd = (HWND)item.lParam;
- TWindowData *dat = (TWindowData*)GetWindowLongPtr(hwnd, GWLP_USERDATA);
+ CSrmmWindow *dat = (CSrmmWindow*)GetWindowLongPtr(hwnd, GWLP_USERDATA);
if (dat) {
- int relPos = M.GetDword(dat->hContact, "tabindex", i * 100);
+ int relPos = M.GetDword(dat->m_hContact, "tabindex", i * 100);
if (iTabIndex_wanted <= relPos)
pContainer->iTabIndex = i;
}
@@ -547,14 +566,16 @@ HWND TSAPI CreateNewTabForContact(TContainerData *pContainer, MCONTACT hContact,
pContainer->iChilds++;
newData.bWantPopup = bWantPopup;
newData.hdbEvent = hdbEvent;
- HWND hwndNew = CreateDialogParam(g_hInst, MAKEINTRESOURCE(IDD_MSGSPLITNEW), hwndTab, DlgProcMessage, (LPARAM)&newData);
+
+ CSrmmWindow *pWindow = new CSrmmWindow(&newData);
+ pWindow->SetParent(hwndTab);
+ pWindow->Show();
+ HWND hwndNew = pWindow->GetHwnd();
// switchbar support
- if (pContainer->dwFlags & CNT_SIDEBAR) {
- TWindowData *dat = (TWindowData*)GetWindowLongPtr(hwndNew, GWLP_USERDATA);
- if (dat)
- pContainer->SideBar->addSession(dat, pContainer->iTabIndex);
- }
+ if (pContainer->dwFlags & CNT_SIDEBAR)
+ pContainer->SideBar->addSession(pWindow, pContainer->iTabIndex);
+
SendMessage(pContainer->hwnd, WM_SIZE, 0, 0);
// if the container is minimized, then pop it up...
@@ -663,7 +684,7 @@ int TABSRMM_FireEvent(MCONTACT hContact, HWND hwnd, unsigned int type, unsigned
if (hContact == NULL || hwnd == NULL)
return 0;
- TWindowData *dat = (TWindowData*)GetWindowLongPtr(hwnd, GWLP_USERDATA);
+ CSrmmWindow *dat = (CSrmmWindow*)GetWindowLongPtr(hwnd, GWLP_USERDATA);
if (dat == NULL)
return 0;
BYTE bType = dat->bType;
@@ -678,8 +699,8 @@ int TABSRMM_FireEvent(MCONTACT hContact, HWND hwnd, unsigned int type, unsigned
mwe.hwndLog = GetDlgItem(hwnd, IDC_LOG);
}
else {
- mwe.hwndInput = GetDlgItem(hwnd, IDC_CHAT_MESSAGE);
- mwe.hwndLog = GetDlgItem(hwnd, IDC_CHAT_LOG);
+ mwe.hwndInput = GetDlgItem(hwnd, IDC_MESSAGE);
+ mwe.hwndLog = GetDlgItem(hwnd, IDC_LOG);
}
if (type == MSG_WINDOW_EVT_CUSTOM) {
diff --git a/plugins/TabSRMM/src/msgs.h b/plugins/TabSRMM/src/msgs.h
index d00fcfb84e..ae449daad9 100644
--- a/plugins/TabSRMM/src/msgs.h
+++ b/plugins/TabSRMM/src/msgs.h
@@ -229,19 +229,50 @@ struct TContainerData
struct SESSION_INFO;
-struct TWindowData
+struct TNewWindowData
+{
+ MCONTACT hContact;
+ int isWchar;
+ LPCSTR szInitialText;
+ int iTabID;
+ int iTabImage;
+ int iActivate;
+ TCITEM item;
+ BOOL bWantPopup;
+ HKL hkl;
+
+ union {
+ MEVENT hdbEvent;
+ SESSION_INFO *si;
+ };
+ TContainerData *pContainer;
+};
+
+class CTabBaseDlg : public CSrmmBaseDialog
{
- UINT cbSize;
+
+protected:
+ CCtrlEdit m_log, m_message;
+ TNewWindowData *newData;
+
+ void DM_UpdateTitle(WPARAM wParam, LPARAM lParam);
+
+ void DetermineMinHeight();
+ void FindFirstEvent();
+ void GetSendFormat();
+ bool IsAutoSplitEnabled() const;
+ void LoadContactAvatar();
+ void LoadOwnAvatar();
+ void ResizeIeView();
+
+public:
BYTE bType;
- TContainerData *pContainer; // parent container description structure
- HWND hwnd;
DWORD dwFlags;
DWORD dwFlagsEx;
- MCONTACT hContact;
+ MCONTACT m_hContact;
char *szProto;
wchar_t szMyNickname[130];
wchar_t szStatusBar[100];
- StatusTextData *sbCustom;
wchar_t newtitle[130]; // tab title...
wchar_t szStatus[50];
WORD wStatus;
@@ -250,14 +281,15 @@ struct TWindowData
int iSendLength; // message length in utf-8 octets
HICON hTabIcon, hTabStatusIcon, hXStatusIcon, hClientIcon, hTaskbarIcon;
HICON iFlashIcon;
- BOOL mayFlashTab;
- BOOL bTabFlash;
+ bool m_bCanFlashTab, m_bTabFlash;
HWND hwndIEView, hwndIWebBrowserControl, hwndHPP;
HWND hwndContactPic, hwndPanelPic, hwndPanelPicParent;
UINT bbLSideWidth, bbRSideWidth;
BYTE kstate[256];
SESSION_INFO *si;
+ StatusTextData *sbCustom;
+ TContainerData *pContainer; // parent container description structure
RECT rcNick, rcUIN, rcStatus, rcPic;
MEVENT hDbEventFirst, hDbEventLast;
@@ -324,16 +356,111 @@ struct TWindowData
CContactCache *cache;
CProxyWindow *pWnd; // proxy window object (win7+, for taskbar support).
// ALWAYS check this pointer before using it, it is not guaranteed to exist.
+
+ bool bIsAutosizingInput;
+ bool fLimitedUpdate;
DWORD iSplitterSaved;
- BYTE bWasDeleted;
+ LONG iInputAreaHeight;
BOOL bActualHistory;
POINT ptTipActivation;
- LONG iInputAreaHeight;
- bool bIsAutosizingInput;
- bool fLimitedUpdate;
// Used for history in chats.
char *enteredText;
+
+public:
+ CTabBaseDlg(TNewWindowData*, int);
+
+ HWND DM_CreateClist();
+ void DM_InitTip();
+ void DM_NotifyTyping(int mode);
+ void DM_RecalcPictureSize();
+
+ void DM_FreeTheme();
+ void DM_ThemeChanged();
+
+ void BB_InitDlgButtons();
+ void BB_RefreshTheme();
+ BOOL BB_SetButtonsPos();
+ void BB_RedrawButtons();
+ void DM_SetDBButtonStates();
+
+ void CB_DestroyAllButtons();
+ void CB_DestroyButton(DWORD dwButtonCID, DWORD dwFlags);
+ void CB_ChangeButton(CustomButtonData *cbd);
+
+ void AdjustBottomAvatarDisplay();
+ void CalcDynamicAvatarSize(BITMAP *bminfo);
+ void ClearLog();
+ BOOL DoRtfToTags(CMStringW &pszText, int iNumColors, COLORREF *pColors) const;
+ void EnableSendButton(bool bMode) const;
+ void FlashOnClist(MEVENT hEvent, DBEVENTINFO *dbei);
+ void FlashTab(bool bInvertMode);
+ bool GetAvatarVisibility();
+ void GetClientIcon();
+ LONG GetDefaultMinimumInputHeight() const;
+ void GetLocaleID(const wchar_t *szKLName);
+ HICON GetMyContactIcon(LPCSTR szSetting);
+ void GetMYUIN();
+ void GetMyNick();
+ HICON GetXStatusIcon() const;
+ void HandlePasteAndSend();
+ void KbdState(bool &isShift, bool &isControl, bool &isAlt);
+ int LoadLocalFlags();
+ void LoadSplitter();
+ void PlayIncomingSound() const;
+ void SendHBitmapAsFile(HBITMAP hbmp) const;
+ void SaveSplitter();
+ void SendNudge() const;
+ void SetMessageLog();
+ void ShowPicture(bool showNewPic);
+ void UpdateReadChars() const;
+ void UpdateStatusBar() const;
+
+ int MsgWindowDrawHandler(WPARAM wParam, LPARAM lParam);
+ int MsgWindowUpdateMenu(HMENU submenu, int menuID);
+ int MsgWindowMenuHandler(int selection, int menuId);
+
+ void RenderToolbarBG(HDC hdc, const RECT &rcWindow) const;
+ void UpdateToolbarBG();
+};
+
+class CSrmmWindow : public CTabBaseDlg, public MZeroedObject
+{
+ void DM_OptionsApplied(WPARAM wParam, LPARAM lParam);
+ void MsgWindowUpdateState(UINT msg);
+
+public:
+ int msgTop, rcLogBottom;
+
+public:
+ CSrmmWindow(TNewWindowData*);
+
+ virtual void OnInitDialog() override;
+ virtual void OnDestroy() override;
+
+ virtual int Resizer(UTILRESIZECONTROL *urc) override;
+
+ virtual INT_PTR DlgProc(UINT msg, WPARAM wParam, LPARAM lParam) override;
+
+ void StreamInEvents(MEVENT hDbEventFirst, int count, int fAppend, DBEVENTINFO *dbei_s);
+};
+
+class CChatRoomDlg : public CTabBaseDlg, public MZeroedObject
+{
+ bool m_bWasDeleted;
+
+public:
+ CChatRoomDlg(TNewWindowData*);
+
+ virtual void OnInitDialog() override;
+ virtual void OnDestroy() override;
+
+ virtual int Resizer(UTILRESIZECONTROL *urc) override;
+
+ virtual INT_PTR DlgProc(UINT msg, WPARAM wParam, LPARAM lParam) override;
+
+ void StreamInEvents(LOGINFO* lin, SESSION_INFO *si, bool bRedraw);
+ void UpdateWindowState(UINT msg);
};
#define MESSAGE_WINDOW_DATA_SIZE offsetof(_MessageWindowData, hdbEventFirst);
@@ -406,25 +533,6 @@ struct TIconDescW
#define MIN_PANELHEIGHT 20
-struct TNewWindowData
-{
- MCONTACT hContact;
- int isWchar;
- LPCSTR szInitialText;
- int iTabID;
- int iTabImage;
- int iActivate;
- TCITEM item;
- BOOL bWantPopup;
- HKL hkl;
-
- union {
- MEVENT hdbEvent;
- SESSION_INFO *si;
- };
- TContainerData *pContainer;
-};
-
// flags for the container dwFlags
#define CNT_MOUSEDOWN 1
#define CNT_NOTITLE 2
@@ -789,8 +897,8 @@ struct SIDEBARITEM {
DWORD dwFlags;
HICON *hIcon, *hIconPressed, *hIconHover;
wchar_t *szName;
- void(*pfnAction)(ButtonItem *item, HWND hwndDlg, TWindowData *dat, HWND hwndItem);
- void(*pfnCallback)(ButtonItem *item, HWND hwndDlg, TWindowData *dat, HWND hwndItem);
+ void(*pfnAction)(ButtonItem *item, HWND hwndDlg, CSrmmWindow *dat, HWND hwndItem);
+ void(*pfnCallback)(ButtonItem *item, HWND hwndDlg, CSrmmWindow *dat, HWND hwndItem);
wchar_t *tszTip;
};
@@ -955,8 +1063,8 @@ int SI_InitStatusIcons();
int SI_DeinitStatusIcons();
int GetStatusIconsCount();
-void DrawStatusIcons(TWindowData *dat, HDC hdc, const RECT &r, int gap);
-void CheckStatusIconClick(TWindowData *dat, POINT pt, const RECT &rc, int gap, int code);
+void DrawStatusIcons(CTabBaseDlg *dat, HDC hdc, const RECT &r, int gap);
+void CheckStatusIconClick(CTabBaseDlg *dat, POINT pt, const RECT &rc, int gap, int code);
struct SKINDESC
{
diff --git a/plugins/TabSRMM/src/selectcontainer.cpp b/plugins/TabSRMM/src/selectcontainer.cpp
index 5dc5fbd09b..b708f5f887 100644
--- a/plugins/TabSRMM/src/selectcontainer.cpp
+++ b/plugins/TabSRMM/src/selectcontainer.cpp
@@ -45,7 +45,7 @@ INT_PTR CALLBACK SelectContainerDlgProc(HWND hwndDlg, UINT msg, WPARAM wParam, L
TranslateDialogDefault(hwndDlg);
if (lParam) {
- TWindowData *dat = (TWindowData*)GetWindowLongPtr((HWND)lParam, GWLP_USERDATA);
+ CSrmmWindow *dat = (CSrmmWindow*)GetWindowLongPtr((HWND)lParam, GWLP_USERDATA);
if (dat) {
mir_snwprintf(szNewTitle, TranslateT("Select container for %s"), dat->cache->getNick());
SetWindowText(hwndDlg, szNewTitle);
diff --git a/plugins/TabSRMM/src/sendqueue.cpp b/plugins/TabSRMM/src/sendqueue.cpp
index dcabc6bc29..3de3fe7e77 100644
--- a/plugins/TabSRMM/src/sendqueue.cpp
+++ b/plugins/TabSRMM/src/sendqueue.cpp
@@ -35,17 +35,17 @@ SendQueue *sendQueue = 0;
// as "failed" by either the ACKRESULT_FAILED or a timeout handler
// returns: zero-based queue index or -1 if none was found
-int SendQueue::findNextFailed(const TWindowData *dat) const
+int SendQueue::findNextFailed(const CSrmmWindow *dat) const
{
if (dat)
for (int i = 0; i < NR_SENDJOBS; i++)
- if (m_jobs[i].hContact == dat->hContact && m_jobs[i].iStatus == SQ_ERROR)
+ if (m_jobs[i].hContact == dat->m_hContact && m_jobs[i].iStatus == SQ_ERROR)
return i;
return -1;
}
-void SendQueue::handleError(TWindowData *dat, const int iEntry) const
+void SendQueue::handleError(CSrmmWindow *dat, const int iEntry) const
{
if (!dat) return;
@@ -63,13 +63,13 @@ void SendQueue::handleError(TWindowData *dat, const int iEntry) const
//add a message to the sending queue.
// iLen = required size of the memory block to hold the message
-int SendQueue::addTo(TWindowData *dat, size_t iLen, int dwFlags)
+int SendQueue::addTo(CSrmmWindow *dat, size_t iLen, int dwFlags)
{
int i;
int iFound = NR_SENDJOBS;
if (m_currentIndex >= NR_SENDJOBS) {
- _DebugPopup(dat->hContact, L"Send queue full");
+ _DebugPopup(dat->m_hContact, L"Send queue full");
return 0;
}
@@ -90,7 +90,7 @@ int SendQueue::addTo(TWindowData *dat, size_t iLen, int dwFlags)
}
entry_found:
if (iFound == NR_SENDJOBS) {
- _DebugPopup(dat->hContact, L"Send queue full");
+ _DebugPopup(dat->m_hContact, L"Send queue full");
return 0;
}
@@ -101,7 +101,7 @@ entry_found:
job.dwFlags = dwFlags;
job.dwTime = time(NULL);
- HWND hwndDlg = dat->hwnd;
+ HWND hwndDlg = dat->GetHwnd();
dat->cache->saveHistory(0, 0);
::SetDlgItemText(hwndDlg, IDC_MESSAGE, L"");
@@ -190,10 +190,10 @@ size_t SendQueue::getSendLength(const int iEntry)
return p.iSendLength;
}
-int SendQueue::sendQueued(TWindowData *dat, const int iEntry)
+int SendQueue::sendQueued(CSrmmWindow *dat, const int iEntry)
{
- HWND hwndDlg = dat->hwnd;
- CContactCache *ccActive = CContactCache::getContactCache(dat->hContact);
+ HWND hwndDlg = dat->GetHwnd();
+ CContactCache *ccActive = CContactCache::getContactCache(dat->m_hContact);
if (dat->sendMode & SMODE_MULTIPLE) {
int iJobs = 0;
@@ -216,7 +216,7 @@ int SendQueue::sendQueued(TWindowData *dat, const int iEntry)
if (iSendLength >= iMinLength) {
wchar_t tszError[256];
mir_snwprintf(tszError, TranslateT("The message cannot be sent delayed or to multiple contacts, because it exceeds the maximum allowed message length of %d bytes"), iMinLength);
- ::SendMessage(dat->hwnd, DM_ACTIVATETOOLTIP, IDC_MESSAGE, LPARAM(tszError));
+ ::SendMessage(dat->GetHwnd(), DM_ACTIVATETOOLTIP, IDC_MESSAGE, LPARAM(tszError));
sendQueue->clearJob(iEntry);
return 0;
}
@@ -235,7 +235,7 @@ int SendQueue::sendQueued(TWindowData *dat, const int iEntry)
return 0;
}
- if (dat->hContact == NULL)
+ if (dat->m_hContact == NULL)
return 0; //never happens
dat->nMax = (int)dat->cache->getMaxMessageLength(); // refresh length info
@@ -271,7 +271,7 @@ int SendQueue::sendQueued(TWindowData *dat, const int iEntry)
size_t iSendLength = getSendLength(iEntry);
if ((int)iSendLength >= dat->nMax) {
mir_snwprintf(tszError, TranslateT("The message cannot be sent delayed or to multiple contacts, because it exceeds the maximum allowed message length of %d bytes"), dat->nMax);
- SendMessage(dat->hwnd, DM_ACTIVATETOOLTIP, IDC_MESSAGE, LPARAM(tszError));
+ SendMessage(dat->GetHwnd(), DM_ACTIVATETOOLTIP, IDC_MESSAGE, LPARAM(tszError));
clearJob(iEntry);
return 0;
}
@@ -279,11 +279,11 @@ int SendQueue::sendQueued(TWindowData *dat, const int iEntry)
clearJob(iEntry);
return 0;
}
- m_jobs[iEntry].hSendId = (HANDLE)ProtoChainSend(dat->hContact, PSS_MESSAGE, m_jobs[iEntry].dwFlags, (LPARAM)m_jobs[iEntry].szSendBuffer);
+ m_jobs[iEntry].hSendId = (HANDLE)ProtoChainSend(dat->m_hContact, PSS_MESSAGE, m_jobs[iEntry].dwFlags, (LPARAM)m_jobs[iEntry].szSendBuffer);
if (dat->sendMode & SMODE_NOACK) { // fake the ack if we are not interested in receiving real acks
ACKDATA ack = { 0 };
- ack.hContact = dat->hContact;
+ ack.hContact = dat->m_hContact;
ack.hProcess = m_jobs[iEntry].hSendId;
ack.type = ACKTYPE_MESSAGE;
ack.result = ACKRESULT_SUCCESS;
@@ -297,7 +297,7 @@ int SendQueue::sendQueued(TWindowData *dat, const int iEntry)
// give icon feedback...
if (dat->pContainer->hwndActive == hwndDlg)
- ::UpdateReadChars(dat);
+ dat->UpdateReadChars();
if (!(dat->sendMode & SMODE_NOACK))
::HandleIconFeedback(dat, PluginConfig.g_IconSend);
@@ -321,18 +321,18 @@ void SendQueue::clearJob(const int iIndex)
// ) user decided to cancel a failed send
// it removes the completed / canceled send job from the queue and schedules the next job to send (if any)
-void SendQueue::checkQueue(const TWindowData *dat) const
+void SendQueue::checkQueue(const CSrmmWindow *dat) const
{
if (dat) {
- HWND hwndDlg = dat->hwnd;
+ HWND hwndDlg = dat->GetHwnd();
if (dat->iOpenJobs == 0)
- ::HandleIconFeedback(const_cast<TWindowData *>(dat), (HICON)INVALID_HANDLE_VALUE);
+ ::HandleIconFeedback(const_cast<CSrmmWindow *>(dat), (HICON)INVALID_HANDLE_VALUE);
else if (!(dat->sendMode & SMODE_NOACK))
- ::HandleIconFeedback(const_cast<TWindowData *>(dat), PluginConfig.g_IconSend);
+ ::HandleIconFeedback(const_cast<CSrmmWindow *>(dat), PluginConfig.g_IconSend);
if (dat->pContainer->hwndActive == hwndDlg)
- ::UpdateReadChars(const_cast<TWindowData *>(dat));
+ dat->UpdateReadChars();
}
}
@@ -340,7 +340,7 @@ void SendQueue::checkQueue(const TWindowData *dat) const
// logs an error message to the message window.Optionally, appends the original message
// from the given sendJob (queue index)
-void SendQueue::logError(const TWindowData *dat, int iSendJobIndex, const wchar_t *szErrMsg) const
+void SendQueue::logError(CSrmmWindow *dat, int iSendJobIndex, const wchar_t *szErrMsg) const
{
if (dat == 0)
return;
@@ -361,7 +361,7 @@ void SendQueue::logError(const TWindowData *dat, int iSendJobIndex, const wchar_
dbei.cbBlob = (int)iMsgLen;
dbei.timestamp = time(NULL);
dbei.szModule = (char *)szErrMsg;
- StreamInEvents(dat->hwnd, NULL, 1, 1, &dbei);
+ dat->StreamInEvents(NULL, 1, 1, &dbei);
}
/////////////////////////////////////////////////////////////////////////////////////////
@@ -370,23 +370,23 @@ void SendQueue::logError(const TWindowData *dat, int iSendJobIndex, const wchar_
// ) multisend contact list instance
// ) send button
-void SendQueue::EnableSending(const TWindowData *dat, const int iMode)
+void SendQueue::EnableSending(const CSrmmWindow *dat, bool bMode)
{
if (dat) {
- HWND hwndDlg = dat->hwnd;
- ::SendDlgItemMessage(hwndDlg, IDC_MESSAGE, EM_SETREADONLY, (WPARAM)iMode ? FALSE : TRUE, 0);
- Utils::enableDlgControl(hwndDlg, IDC_CLIST, iMode ? TRUE : FALSE);
- ::EnableSendButton(dat, iMode);
+ HWND hwndDlg = dat->GetHwnd();
+ ::SendDlgItemMessage(hwndDlg, IDC_MESSAGE, EM_SETREADONLY, !bMode, 0);
+ Utils::enableDlgControl(hwndDlg, IDC_CLIST, bMode);
+ dat->EnableSendButton(bMode);
}
}
/////////////////////////////////////////////////////////////////////////////////////////
// show or hide the error control button bar on top of the window
-void SendQueue::showErrorControls(TWindowData *dat, const int showCmd) const
+void SendQueue::showErrorControls(CSrmmWindow *dat, const int showCmd) const
{
UINT myerrorControls[] = { IDC_STATICERRORICON, IDC_STATICTEXT, IDC_RETRY, IDC_CANCELSEND, IDC_MSGSENDLATER };
- HWND hwndDlg = dat->hwnd;
+ HWND hwndDlg = dat->GetHwnd();
if (showCmd) {
TCITEM item = { 0 };
@@ -411,27 +411,27 @@ void SendQueue::showErrorControls(TWindowData *dat, const int showCmd) const
EnableSending(dat, TRUE);
}
-void SendQueue::recallFailed(const TWindowData *dat, int iEntry) const
+void SendQueue::recallFailed(const CSrmmWindow *dat, int iEntry) const
{
if (dat == NULL)
return;
- int iLen = GetWindowTextLength(GetDlgItem(dat->hwnd, IDC_MESSAGE));
+ int iLen = GetWindowTextLength(GetDlgItem(dat->GetHwnd(), IDC_MESSAGE));
NotifyDeliveryFailure(dat);
if (iLen != 0)
return;
// message area is empty, so we can recall the failed message...
SETTEXTEX stx = { ST_DEFAULT, CP_UTF8 };
- SendDlgItemMessage(dat->hwnd, IDC_MESSAGE, EM_SETTEXTEX, (WPARAM)&stx, (LPARAM)m_jobs[iEntry].szSendBuffer);
- UpdateSaveAndSendButton(const_cast<TWindowData *>(dat));
- SendDlgItemMessage(dat->hwnd, IDC_MESSAGE, EM_SETSEL, (WPARAM)-1, (LPARAM)-1);
+ SendDlgItemMessage(dat->GetHwnd(), IDC_MESSAGE, EM_SETTEXTEX, (WPARAM)&stx, (LPARAM)m_jobs[iEntry].szSendBuffer);
+ UpdateSaveAndSendButton(const_cast<CSrmmWindow *>(dat));
+ SendDlgItemMessage(dat->GetHwnd(), IDC_MESSAGE, EM_SETSEL, (WPARAM)-1, (LPARAM)-1);
}
-void SendQueue::UpdateSaveAndSendButton(TWindowData *dat)
+void SendQueue::UpdateSaveAndSendButton(CSrmmWindow *dat)
{
if (dat) {
- HWND hwndDlg = dat->hwnd;
+ HWND hwndDlg = dat->GetHwnd();
GETTEXTLENGTHEX gtxl = { 0 };
gtxl.codepage = CP_UTF8;
@@ -439,9 +439,9 @@ void SendQueue::UpdateSaveAndSendButton(TWindowData *dat)
int len = SendDlgItemMessage(hwndDlg, IDC_MESSAGE, EM_GETTEXTLENGTHEX, (WPARAM)&gtxl, 0);
if (len && GetSendButtonState(hwndDlg) == PBS_DISABLED)
- EnableSendButton(dat, TRUE);
+ dat->EnableSendButton(TRUE);
else if (len == 0 && GetSendButtonState(hwndDlg) != PBS_DISABLED)
- EnableSendButton(dat, FALSE);
+ dat->EnableSendButton(FALSE);
if (len) { // looks complex but avoids flickering on the button while typing.
if (!(dat->dwFlags & MWF_SAVEBTN_SAV)) {
@@ -459,7 +459,7 @@ void SendQueue::UpdateSaveAndSendButton(TWindowData *dat)
}
}
-void SendQueue::NotifyDeliveryFailure(const TWindowData *dat)
+void SendQueue::NotifyDeliveryFailure(const CSrmmWindow *dat)
{
if (M.GetByte("adv_noErrorPopups", 0))
return;
@@ -468,7 +468,7 @@ void SendQueue::NotifyDeliveryFailure(const TWindowData *dat)
return;
POPUPDATAT ppd = { 0 };
- ppd.lchContact = dat->hContact;
+ ppd.lchContact = dat->m_hContact;
wcsncpy_s(ppd.lptzContactName, dat->cache->getNick(), _TRUNCATE);
wcsncpy_s(ppd.lptzText, TranslateT("A message delivery has failed.\nClick to open the message window."), _TRUNCATE);
@@ -507,7 +507,7 @@ int SendQueue::RTL_Detect(const WCHAR *pszwText)
return(n >= 2 ? 1 : 0);
}
-int SendQueue::ackMessage(TWindowData *dat, WPARAM wParam, LPARAM lParam)
+int SendQueue::ackMessage(CSrmmWindow *dat, WPARAM wParam, LPARAM lParam)
{
ACKDATA *ack = (ACKDATA *)lParam;
@@ -541,7 +541,7 @@ int SendQueue::ackMessage(TWindowData *dat, WPARAM wParam, LPARAM lParam)
mir_snwprintf(job.szErrorMsg, TranslateT("Delivery failure: %s"), _A2T((char *)ack->lParam));
job.iStatus = SQ_ERROR;
- KillTimer(dat->hwnd, TIMERID_MSGSEND + iFound);
+ KillTimer(dat->GetHwnd(), TIMERID_MSGSEND + iFound);
if (!(dat->dwFlags & MWF_ERRORSTATE))
handleError(dat, iFound);
return 0;
@@ -590,7 +590,7 @@ int SendQueue::ackMessage(TWindowData *dat, WPARAM wParam, LPARAM lParam)
if (job.iAcksNeeded == 0) { // everything sent
clearJob(iFound);
if (dat) {
- KillTimer(dat->hwnd, TIMERID_MSGSEND + iFound);
+ KillTimer(dat->GetHwnd(), TIMERID_MSGSEND + iFound);
dat->iOpenJobs--;
}
m_currentIndex--;
@@ -604,7 +604,7 @@ int SendQueue::ackMessage(TWindowData *dat, WPARAM wParam, LPARAM lParam)
else {
if (M.GetByte("AutoClose", 0)) {
if (M.GetByte("adv_AutoClose_2", 0))
- SendMessage(dat->hwnd, WM_CLOSE, 0, 1);
+ SendMessage(dat->GetHwnd(), WM_CLOSE, 0, 1);
else
SendMessage(dat->pContainer->hwnd, WM_CLOSE, 0, 0);
}
@@ -631,7 +631,7 @@ LRESULT SendQueue::WarnPendingJobs(unsigned int)
//
// @return the index on success, -1 on failure
-int SendQueue::doSendLater(int iJobIndex, TWindowData *dat, MCONTACT hContact, bool fIsSendLater)
+int SendQueue::doSendLater(int iJobIndex, CSrmmWindow *dat, MCONTACT hContact, bool fIsSendLater)
{
bool fAvail = sendLater->isAvail();
@@ -647,19 +647,19 @@ int SendQueue::doSendLater(int iJobIndex, TWindowData *dat, MCONTACT hContact, b
DBEVENTINFO dbei = {};
dbei.eventType = EVENTTYPE_MESSAGE;
dbei.flags = DBEF_SENT | DBEF_UTF;
- dbei.szModule = GetContactProto(dat->hContact);
+ dbei.szModule = GetContactProto(dat->m_hContact);
dbei.timestamp = time(NULL);
dbei.cbBlob = (int)mir_strlen(utfText) + 1;
dbei.pBlob = (PBYTE)(char*)utfText;
- StreamInEvents(dat->hwnd, 0, 1, 1, &dbei);
+ dat->StreamInEvents(0, 1, 1, &dbei);
if (dat->hDbEventFirst == NULL)
- SendMessage(dat->hwnd, DM_REMAKELOG, 0, 0);
+ SendMessage(dat->GetHwnd(), DM_REMAKELOG, 0, 0);
dat->cache->saveHistory(0, 0);
- EnableSendButton(dat, FALSE);
- if (dat->pContainer->hwndActive == dat->hwnd)
- UpdateReadChars(dat);
- SendDlgItemMessage(dat->hwnd, IDC_SAVE, BM_SETIMAGE, IMAGE_ICON, (LPARAM)PluginConfig.g_buttonBarIcons[ICON_BUTTON_CANCEL]);
- SendDlgItemMessage(dat->hwnd, IDC_SAVE, BUTTONADDTOOLTIP, (WPARAM)pszIDCSAVE_close, BATF_UNICODE);
+ dat->EnableSendButton(false);
+ if (dat->pContainer->hwndActive == dat->GetHwnd())
+ dat->UpdateReadChars();
+ SendDlgItemMessage(dat->GetHwnd(), IDC_SAVE, BM_SETIMAGE, IMAGE_ICON, (LPARAM)PluginConfig.g_buttonBarIcons[ICON_BUTTON_CANCEL]);
+ SendDlgItemMessage(dat->GetHwnd(), IDC_SAVE, BUTTONADDTOOLTIP, (WPARAM)pszIDCSAVE_close, BATF_UNICODE);
dat->dwFlags &= ~MWF_SAVEBTN_SAV;
if (!fAvail)
diff --git a/plugins/TabSRMM/src/sendqueue.h b/plugins/TabSRMM/src/sendqueue.h
index 48be92645e..db914f214c 100644
--- a/plugins/TabSRMM/src/sendqueue.h
+++ b/plugins/TabSRMM/src/sendqueue.h
@@ -85,26 +85,26 @@ public:
SendJob *getJobByIndex(const int index) { return(&m_jobs[index]); }
void clearJob(const int index);
- int findNextFailed(const TWindowData *dat) const;
- void handleError(TWindowData *dat, const int iEntry) const;
- int addTo(TWindowData *dat, size_t iLen, int dwFlags);
- int sendQueued(TWindowData *dat, const int iEntry);
+ int findNextFailed(const CSrmmWindow *dat) const;
+ void handleError(CSrmmWindow *dat, const int iEntry) const;
+ int addTo(CSrmmWindow *dat, size_t iLen, int dwFlags);
+ int sendQueued(CSrmmWindow *dat, const int iEntry);
size_t getSendLength(const int iEntry);
- void checkQueue(const TWindowData *dat) const;
- void logError(const TWindowData *dat, int iSendJobIndex, const wchar_t *szErrMsg) const;
- void recallFailed(const TWindowData *dat, int iEntry) const;
- void showErrorControls(TWindowData *dat, const int showCmd) const;
- int ackMessage(TWindowData *dat, WPARAM wParam, LPARAM lParam);
- int doSendLater(int iIndex, TWindowData *dat, MCONTACT hContact = 0, bool fIsSendLater = true);
+ void checkQueue(const CSrmmWindow *dat) const;
+ void logError(CSrmmWindow *dat, int iSendJobIndex, const wchar_t *szErrMsg) const;
+ void recallFailed(const CSrmmWindow *dat, int iEntry) const;
+ void showErrorControls(CSrmmWindow *dat, const int showCmd) const;
+ int ackMessage(CSrmmWindow *dat, WPARAM wParam, LPARAM lParam);
+ int doSendLater(int iIndex, CSrmmWindow *dat, MCONTACT hContact = 0, bool fIsSendLater = true);
/*
* static members
*/
static int TSAPI RTL_Detect(const wchar_t *pszwText);
static int TSAPI GetProtoIconFromList(const char *szProto, int iStatus);
static LRESULT TSAPI WarnPendingJobs(unsigned int uNrMessages);
- static void TSAPI NotifyDeliveryFailure(const TWindowData *dat);
- static void TSAPI UpdateSaveAndSendButton(TWindowData *dat);
- static void TSAPI EnableSending(const TWindowData *dat, const int iMode);
+ static void TSAPI NotifyDeliveryFailure(const CSrmmWindow *dat);
+ static void TSAPI UpdateSaveAndSendButton(CSrmmWindow *dat);
+ static void TSAPI EnableSending(const CSrmmWindow *dat, bool bMode);
private:
SendJob m_jobs[NR_SENDJOBS];
@@ -115,6 +115,6 @@ extern SendQueue *sendQueue;
int TSAPI ActivateExistingTab(TContainerData *pContainer, HWND hwndChild);
void TSAPI ShowMultipleControls(const HWND hwndDlg, const UINT * controls, int cControls, int state);
-void TSAPI HandleIconFeedback(TWindowData *dat, HICON iIcon);
+void TSAPI HandleIconFeedback(CTabBaseDlg *dat, HICON iIcon);
#endif /* __SENDQUEUE_H */
diff --git a/plugins/TabSRMM/src/sidebar.cpp b/plugins/TabSRMM/src/sidebar.cpp
index 468125ecdf..72d249c12f 100644
--- a/plugins/TabSRMM/src/sidebar.cpp
+++ b/plugins/TabSRMM/src/sidebar.cpp
@@ -71,10 +71,10 @@ TSideBarLayout CSideBar::m_layouts[CSideBar::NR_LAYOUTS] = {
}
};
-CSideBarButton::CSideBarButton(const TWindowData *dat, CSideBar *sideBar)
+CSideBarButton::CSideBarButton(const CTabBaseDlg *dat, CSideBar *sideBar)
{
m_dat = dat;
- m_id = UINT(dat->hContact); // set the control id
+ m_id = UINT(dat->m_hContact); // set the control id
m_sideBar = sideBar;
_create();
}
@@ -254,7 +254,7 @@ void CSideBarButton::renderIconAndNick(const HDC hdc, const RECT *rcItem) const
if (m_dat && pContainer) {
hIcon = m_dat->cache->getIcon(iSize);
- if (m_dat->mayFlashTab == FALSE || (m_dat->mayFlashTab == TRUE && m_dat->bTabFlash != 0) || !(pContainer->dwFlagsEx & TCF_FLASHICON)) {
+ if (!m_dat->m_bCanFlashTab || (m_dat->m_bCanFlashTab == TRUE && m_dat->m_bTabFlash) || !(pContainer->dwFlagsEx & TCF_FLASHICON)) {
DWORD ix = rc.left + 4;
DWORD iy = (rc.bottom + rc.top - iSize) / 2;
if (m_dat->dwFlagsEx & MWF_SHOW_ISIDLE && PluginConfig.m_bIdleDetect)
@@ -280,7 +280,7 @@ void CSideBarButton::renderIconAndNick(const HDC hdc, const RECT *rcItem) const
::SetBkMode(hdc, TRANSPARENT);
- if (m_dat->mayFlashTab == FALSE || (m_dat->mayFlashTab == TRUE && m_dat->bTabFlash != 0) || !(pContainer->dwFlagsEx & TCF_FLASHLABEL)) {
+ if (!m_dat->m_bCanFlashTab || (m_dat->m_bCanFlashTab == TRUE && m_dat->m_bTabFlash) || !(pContainer->dwFlagsEx & TCF_FLASHLABEL)) {
bool fIsActive = (m_sideBar->getActiveItem() == this ? true : false);
COLORREF clr = 0;
dwTextFlags |= DT_WORD_ELLIPSIS;
@@ -333,7 +333,7 @@ int CSideBarButton::testCloseButton() const
void CSideBarButton::activateSession() const
{
if (m_dat)
- ::SendMessage(m_dat->hwnd, DM_ACTIVATEME, 0, 0); // the child window will activate itself
+ ::SendMessage(m_dat->GetHwnd(), DM_ACTIVATEME, 0, 0); // the child window will activate itself
}
// show the context menu (same as on tabs
@@ -505,7 +505,7 @@ void CSideBar::populateAll()
if (item.lParam == 0 || !IsWindow((HWND)item.lParam))
continue;
- TWindowData *dat = (TWindowData*)::GetWindowLongPtr((HWND)item.lParam, GWLP_USERDATA);
+ CSrmmWindow *dat = (CSrmmWindow*)::GetWindowLongPtr((HWND)item.lParam, GWLP_USERDATA);
if (dat == NULL)
continue;
@@ -530,7 +530,7 @@ void CSideBar::populateAll()
* (that is, it can only be used after WM_INITIALOG completed).
*position: -1 = append, otherwise insert it at the given position
*/
-void CSideBar::addSession(const TWindowData *dat, int position)
+void CSideBar::addSession(const CTabBaseDlg *dat, int position)
{
if (!m_isActive)
return;
@@ -552,7 +552,7 @@ void CSideBar::addSession(const TWindowData *dat, int position)
else
m_buttonlist.insert(item, position);
- SendDlgItemMessage(dat->hwnd, IDC_TOGGLESIDEBAR, BM_SETIMAGE, IMAGE_ICON,
+ SendDlgItemMessage(dat->GetHwnd(), IDC_TOGGLESIDEBAR, BM_SETIMAGE, IMAGE_ICON,
(LPARAM)(m_dwFlags & SIDEBARORIENTATION_LEFT ? PluginConfig.g_buttonBarIcons[ICON_DEFAULT_LEFT] : PluginConfig.g_buttonBarIcons[ICON_DEFAULT_RIGHT]));
Invalidate();
@@ -563,7 +563,7 @@ void CSideBar::addSession(const TWindowData *dat, int position)
*
* @param dat _MessageWindowData *: session data for a client session.
*/
-HRESULT CSideBar::removeSession(const TWindowData *dat)
+HRESULT CSideBar::removeSession(const CTabBaseDlg *dat)
{
if (dat) {
CSideBarButton *item = findSession(dat);
@@ -649,7 +649,7 @@ void CSideBar::scrollIntoView(const CSideBarButton *item)
*
* @param dat _MessageWindowData*: Session data
*/
-void CSideBar::updateSession(const TWindowData *dat)
+void CSideBar::updateSession(const CTabBaseDlg *dat)
{
if (!m_isVisible || !m_isActive)
return;
@@ -681,7 +681,7 @@ void CSideBar::updateSession(const TWindowData *dat)
*
* @return The previously active item (that can be zero)
*/
-const CSideBarButton* CSideBar::setActiveItem(const TWindowData *dat)
+const CSideBarButton* CSideBar::setActiveItem(const CTabBaseDlg *dat)
{
CSideBarButton *item = findSession(dat);
if (item != NULL)
@@ -805,7 +805,7 @@ void CSideBar::showAll(int showCmd)
* @return CSideBarButtonItem*: pointer to the found item. Zero, if none was found
*/
-CSideBarButton* CSideBar::findSession(const TWindowData *dat)
+CSideBarButton* CSideBar::findSession(const CTabBaseDlg *dat)
{
if (dat == NULL)
return NULL;
@@ -865,7 +865,7 @@ void CSideBar::resizeScrollWnd(LONG x, LONG y, LONG, LONG height) const
SWP_NOCOPYBITS | SWP_NOZORDER | SWP_SHOWWINDOW | SWP_NOSENDCHANGING | SWP_DEFERERASE | SWP_ASYNCWINDOWPOS);
}
-void CSideBar::invalidateButton(const TWindowData *dat)
+void CSideBar::invalidateButton(const CTabBaseDlg *dat)
{
if (m_isActive && m_isVisible) {
CSideBarButton *item = findSession(dat);
@@ -1039,10 +1039,8 @@ void __fastcall CSideBar::m_DefaultBackgroundRenderer(const HDC hdc, const RECT
}
}
-void __fastcall CSideBar::m_DefaultContentRenderer(const HDC hdc, const RECT *rcBox,
- const CSideBarButton *item)
+void __fastcall CSideBar::m_DefaultContentRenderer(const HDC hdc, const RECT *rcBox, const CSideBarButton *item)
{
- const TWindowData *dat = item->getDat();
UINT id = item->getID();
int stateID = item->m_buttonControl->stateId;
@@ -1052,7 +1050,7 @@ void __fastcall CSideBar::m_DefaultContentRenderer(const HDC hdc, const RECT *rc
if (!M.isAero() && stateID == PBS_HOT)
::DrawEdge(hdc, const_cast<RECT *>(rcBox), BDR_INNER, BF_RECT | BF_SOFT | BF_FLAT);
}
- else if (dat)
+ else if (item->getDat())
item->renderIconAndNick(hdc, rcBox);
}
@@ -1063,7 +1061,7 @@ void __fastcall CSideBar::m_DefaultContentRenderer(const HDC hdc, const RECT *rc
void __fastcall CSideBar::m_AdvancedContentRenderer(const HDC hdc, const RECT *rcBox,
const CSideBarButton *item)
{
- const TWindowData *dat = item->getDat();
+ const CTabBaseDlg *dat = item->getDat();
UINT id = item->getID();
LONG cx = rcBox->right - rcBox->left;
@@ -1076,18 +1074,18 @@ void __fastcall CSideBar::m_AdvancedContentRenderer(const HDC hdc, const RECT *r
RECT rc = *rcBox;
if (dat->ace && dat->ace->hbmPic) { // we have an avatar
- double dNewHeight, dNewWidth;
- LONG maxHeight = cy - 8;
- bool fFree = false;
+ double dNewHeight, dNewWidth;
+ LONG maxHeight = cy - 8;
+ bool fFree = false;
Utils::scaleAvatarHeightLimited(dat->ace->hbmPic, dNewWidth, dNewHeight, maxHeight);
HBITMAP hbmResized = CSkin::ResizeBitmap(dat->ace->hbmPic, dNewWidth, dNewHeight, fFree);
- HDC dc = CreateCompatibleDC(hdc);
+ HDC dc = CreateCompatibleDC(hdc);
HBITMAP hbmOld = reinterpret_cast<HBITMAP>(::SelectObject(dc, hbmResized));
- LONG xOff = (cx - maxHeight) + (maxHeight - (LONG)dNewWidth) / 2 - 4;
- LONG yOff = (cy - (LONG)dNewHeight) / 2;
+ LONG xOff = (cx - maxHeight) + (maxHeight - (LONG)dNewWidth) / 2 - 4;
+ LONG yOff = (cy - (LONG)dNewHeight) / 2;
GdiAlphaBlend(hdc, xOff, yOff, (LONG)dNewWidth, (LONG)dNewHeight, dc, 0, 0, (LONG)dNewWidth, (LONG)dNewHeight, CSkin::m_default_bf);
::SelectObject(dc, hbmOld);
@@ -1097,11 +1095,8 @@ void __fastcall CSideBar::m_AdvancedContentRenderer(const HDC hdc, const RECT *r
rc.right -= (maxHeight + 6);
}
- /*
- * calculate metrics based on font configuration. Determine if we have enough
- * space for both lines
- */
-
+ // calculate metrics based on font configuration. Determine if we have enough
+ // space for both lines
rc.left += 3;
HFONT hOldFont = reinterpret_cast<HFONT>(::SelectObject(hdc, CInfoPanel::m_ipConfig.hFonts[IPFONTID_NICK]));
::GetTextExtentPoint32A(hdc, "A", 1, &szFirstLine);
@@ -1124,11 +1119,8 @@ void __fastcall CSideBar::m_AdvancedContentRenderer(const HDC hdc, const RECT *r
int iSize;
HICON hIcon = dat->cache->getIcon(iSize);
- /*
- * TODO support larger icons at a later time. This side bar button
- * could use 32x32 icons as well.
- */
-
+ // TODO support larger icons at a later time. This side bar button
+ // could use 32x32 icons as well.
rc.top = rc.bottom - szSecondLine.cy - 2;
::DrawIconEx(hdc, rc.left, rc.top + (rc.bottom - rc.top) / 2 - 8, hIcon, 16, 16, 0, 0, DI_NORMAL);
rc.left += 18;
@@ -1148,21 +1140,21 @@ const SIZE& __fastcall CSideBar::m_measureAdvancedVertical(CSideBarButton* item)
{
SIZE sz = { 0 };
- const TWindowData *dat = item->getDat();
+ const CTabBaseDlg *dat = item->getDat();
if (dat) {
SIZE szFirstLine, szSecondLine;
if (dat->ace && dat->ace->hbmPic)
sz.cy = item->getLayout()->width;
- HDC dc = ::GetDC(dat->hwnd);
+ HDC dc = ::GetDC(dat->GetHwnd());
HFONT hOldFont = reinterpret_cast<HFONT>(::SelectObject(dc, CInfoPanel::m_ipConfig.hFonts[IPFONTID_NICK]));
::GetTextExtentPoint32(dc, dat->cache->getNick(), (int)mir_wstrlen(dat->cache->getNick()), &szFirstLine);
::SelectObject(dc, CInfoPanel::m_ipConfig.hFonts[IPFONTID_STATUS]);
::GetTextExtentPoint32(dc, dat->szStatus, (int)mir_wstrlen(dat->szStatus), &szSecondLine);
::SelectObject(dc, hOldFont);
- ReleaseDC(dat->hwnd, dc);
+ ReleaseDC(dat->GetHwnd(), dc);
szSecondLine.cx += 18; // icon space
diff --git a/plugins/TabSRMM/src/sidebar.h b/plugins/TabSRMM/src/sidebar.h
index b4c565ec7e..2ee7f35d90 100644
--- a/plugins/TabSRMM/src/sidebar.h
+++ b/plugins/TabSRMM/src/sidebar.h
@@ -31,8 +31,8 @@
struct TSideBarNotify
{
- NMHDR nmHdr;
- const TWindowData* dat;
+ NMHDR nmHdr;
+ const CTabBaseDlg *dat;
};
/* layout description structure */
@@ -61,7 +61,7 @@ class CSideBarButton
{
public:
CSideBarButton(const UINT id, CSideBar *sideBar);
- CSideBarButton(const TWindowData *dat, CSideBar *sideBar);
+ CSideBarButton(const CTabBaseDlg *dat, CSideBar *sideBar);
~CSideBarButton();
LONG getHeight() const { return(m_sz.cy); }
@@ -70,8 +70,8 @@ public:
const bool isTopAligned() const { return(m_isTopAligned); }
const HWND getHwnd() const { return(m_hwnd); }
const UINT getID() const { return(m_id); }
- const MCONTACT getContactHandle() const { return(m_dat->hContact); }
- const TWindowData* getDat() const { return(m_dat); }
+ const MCONTACT getContactHandle() const { return(m_dat->m_hContact); }
+ const CTabBaseDlg* getDat() const { return(m_dat); }
const TSideBarLayout* getLayout() const { return(m_sideBarLayout); }
void RenderThis(const HDC hdc) const;
@@ -91,7 +91,7 @@ private:
private:
const TSideBarLayout* m_sideBarLayout;
HWND m_hwnd; // window handle for the TSButton object
- const TWindowData* m_dat; // session data
+ const CTabBaseDlg* m_dat; // session data
UINT m_id; // control id
bool m_isTopAligned;
SIZE m_sz;
@@ -130,9 +130,9 @@ public:
~CSideBar();
void Init();
- void addSession(const TWindowData *dat, int position);
- HRESULT removeSession(const TWindowData *dat);
- void updateSession(const TWindowData *dat);
+ void addSession(const CTabBaseDlg *dat, int position);
+ HRESULT removeSession(const CTabBaseDlg *dat);
+ void updateSession(const CTabBaseDlg *dat);
void processScrollerButtons(UINT cmd);
void Layout(const RECT *rc = 0, bool fOnlyCalc = false);
@@ -149,7 +149,7 @@ public:
const CSideBarButton* getScrollDown() const { return(m_down); }
bool isSkinnedContainer() const { return(CSkin::m_skinEnabled ? true : false); }
const UINT getLayoutId() const { return(m_uLayout); }
- void invalidateButton(const TWindowData *dat);
+ void invalidateButton(const CTabBaseDlg *dat);
const CSideBarButton* setActiveItem(const CSideBarButton *newItem)
{
@@ -171,7 +171,7 @@ public:
}
HWND getScrollWnd() const { return(m_hwndScrollWnd); }
const CSideBarButton* getHoveredClose() const { return(m_hoveredClose); }
- const CSideBarButton* setActiveItem(const TWindowData *dat);
+ const CSideBarButton* setActiveItem(const CTabBaseDlg *dat);
static LRESULT CALLBACK wndProcStub(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
@@ -189,7 +189,7 @@ private:
void populateAll();
void removeAll();
void Invalidate();
- CSideBarButton* findSession(const TWindowData *dat);
+ CSideBarButton* findSession(const CTabBaseDlg *dat);
CSideBarButton* findSession(const MCONTACT hContact);
LRESULT CALLBACK wndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
diff --git a/plugins/TabSRMM/src/stdafx.h b/plugins/TabSRMM/src/stdafx.h
index dbb1a59233..d37e847728 100644
--- a/plugins/TabSRMM/src/stdafx.h
+++ b/plugins/TabSRMM/src/stdafx.h
@@ -245,7 +245,7 @@ extern CREOleCallback2 reOleCallback2;
int LoadSendRecvMessageModule(void);
int SplitmsgShutdown(void);
-void LogErrorMessage(HWND hwndDlg, TWindowData *dat, int i, wchar_t *szMsg);
+void LogErrorMessage(HWND hwndDlg, CSrmmWindow *dat, int i, wchar_t *szMsg);
int Chat_Load(), Chat_Unload();
void FreeLogFonts();
@@ -276,7 +276,7 @@ INT_PTR CALLBACK DlgProcUserPrefsFrame(HWND hwndDlg, UINT msg, WPARAM wParam, LP
int TSAPI TBStateConvert2Flat(int state);
int TSAPI RBStateConvert2Flat(int state);
-void TSAPI FillTabBackground(const HDC hdc, int iStateId, const TWindowData *dat, RECT* rc);
+void TSAPI FillTabBackground(const HDC hdc, int iStateId, const CTabBaseDlg *dat, RECT* rc);
#define IS_EXTKEY(a) (a & (1 << 24))
diff --git a/plugins/TabSRMM/src/tabctrl.cpp b/plugins/TabSRMM/src/tabctrl.cpp
index f783d2c73c..ba2bbbfa32 100644
--- a/plugins/TabSRMM/src/tabctrl.cpp
+++ b/plugins/TabSRMM/src/tabctrl.cpp
@@ -139,11 +139,11 @@ static void TSAPI DrawCustomTabPage(HDC hdc, RECT& rcClient)
::DeleteObject(hPen);
}
-void TSAPI FillTabBackground(const HDC hdc, int iStateId, const TWindowData *dat, RECT* rc)
+void TSAPI FillTabBackground(const HDC hdc, int iStateId, const CTabBaseDlg *dat, RECT* rc)
{
unsigned clrIndex;
- if (dat && dat->mayFlashTab)
+ if (dat && dat->m_bCanFlashTab)
clrIndex = 7;
else
clrIndex = (iStateId == PBS_PRESSED ? 5 : (iStateId == PBS_HOT ? 6 : 4));
@@ -160,14 +160,14 @@ void TSAPI FillTabBackground(const HDC hdc, int iStateId, const TWindowData *dat
// no image list is used and necessary, the message window dialog procedure has to provide a valid
// icon handle in dat->hTabIcon
-static void DrawItem(TabControlData *tabdat, HDC dc, RECT *rcItem, int nHint, int nItem, TWindowData *dat)
+static void DrawItem(TabControlData *tabdat, HDC dc, RECT *rcItem, int nHint, int nItem, CSrmmWindow *dat)
{
if (dat == NULL)
return;
InflateRect(rcItem, -2, -2);
- unsigned clrIndex = (dat->mayFlashTab) ? 3 : (nHint & HINT_ACTIVE_ITEM ? 1 : (nHint & HINT_HOTTRACK ? 2 : 0));
+ unsigned clrIndex = (dat->m_bCanFlashTab) ? 3 : (nHint & HINT_ACTIVE_ITEM ? 1 : (nHint & HINT_HOTTRACK ? 2 : 0));
COLORREF clr = PluginConfig.tabConfig.colors[clrIndex];
int oldMode = SetBkMode(dc, TRANSPARENT);
@@ -179,7 +179,7 @@ static void DrawItem(TabControlData *tabdat, HDC dc, RECT *rcItem, int nHint, in
HICON hIcon;
if (dat->dwFlags & MWF_ERRORSTATE)
hIcon = PluginConfig.g_iconErr;
- else if (dat->mayFlashTab)
+ else if (dat->m_bCanFlashTab)
hIcon = dat->iFlashIcon;
else {
if (dat->si && dat->iFlashIcon) {
@@ -194,7 +194,7 @@ static void DrawItem(TabControlData *tabdat, HDC dc, RECT *rcItem, int nHint, in
hIcon = dat->hTabIcon;
}
- if (dat->mayFlashTab == FALSE || (dat->mayFlashTab == TRUE && dat->bTabFlash != 0) || !(dat->pContainer->dwFlagsEx & TCF_FLASHICON)) {
+ if (!dat->m_bCanFlashTab || (dat->m_bCanFlashTab == TRUE && dat->m_bTabFlash) || !(dat->pContainer->dwFlagsEx & TCF_FLASHICON)) {
DWORD ix = rcItem->left + tabdat->m_xpad - 1;
DWORD iy = (rcItem->bottom + rcItem->top - iSize) / 2;
if (dat->dwFlagsEx & MWF_SHOW_ISIDLE && PluginConfig.m_bIdleDetect)
@@ -216,7 +216,7 @@ static void DrawItem(TabControlData *tabdat, HDC dc, RECT *rcItem, int nHint, in
CSkin::m_default_bf.SourceConstantAlpha = 255;
}
- if (dat->mayFlashTab == FALSE || (dat->mayFlashTab == TRUE && dat->bTabFlash != 0) || !(dat->pContainer->dwFlagsEx & TCF_FLASHLABEL)) {
+ if (!dat->m_bCanFlashTab || (dat->m_bCanFlashTab == TRUE && dat->m_bTabFlash) || !(dat->pContainer->dwFlagsEx & TCF_FLASHLABEL)) {
DWORD dwTextFlags = DT_SINGLELINE | DT_VCENTER;
HFONT oldFont = (HFONT)SelectObject(dc, (HFONT)SendMessage(tabdat->hwnd, WM_GETFONT, 0, 0));
if (tabdat->dwStyle & TCS_BUTTONS || !(tabdat->dwStyle & TCS_MULTILINE)) {
@@ -235,7 +235,7 @@ static void DrawItem(TabControlData *tabdat, HDC dc, RECT *rcItem, int nHint, in
static RECT rcTabPage = { 0 };
-static void DrawItemRect(TabControlData *tabdat, HDC dc, RECT *rcItem, int nHint, const TWindowData *dat)
+static void DrawItemRect(TabControlData *tabdat, HDC dc, RECT *rcItem, int nHint, const CSrmmWindow *dat)
{
POINT pt;
DWORD dwStyle = tabdat->dwStyle;
@@ -393,7 +393,7 @@ static int DWordAlign(int n)
return n;
}
-static HRESULT DrawThemesPartWithAero(const TabControlData *tabdat, HDC hDC, int iPartId, int iStateId, LPRECT prcBox, TWindowData *dat)
+static HRESULT DrawThemesPartWithAero(const TabControlData *tabdat, HDC hDC, int iPartId, int iStateId, LPRECT prcBox, CSrmmWindow *dat)
{
HRESULT hResult = 0;
bool bAero = M.isAero();
@@ -440,7 +440,7 @@ static HRESULT DrawThemesPart(const TabControlData *tabdat, HDC hDC, int iPartId
// draw a themed tab item. either a tab or the body pane
// handles image mirroring for tabs at the bottom
-static void DrawThemesXpTabItem(HDC pDC, RECT *rcItem, UINT uiFlag, TabControlData *tabdat, TWindowData *dat)
+static void DrawThemesXpTabItem(HDC pDC, RECT *rcItem, UINT uiFlag, TabControlData *tabdat, CSrmmWindow *dat)
{
BOOL bBody = (uiFlag & 1) ? TRUE : FALSE;
BOOL bSel = (uiFlag & 2) ? TRUE : FALSE;
@@ -623,7 +623,7 @@ static void PaintWorker(HWND hwnd, TabControlData *tabdat)
tabdat->helperDat = 0;
if (tabdat->fAeroTabs) {
- TWindowData *dat = (TWindowData*)GetWindowLongPtr(tabdat->pContainer->hwndActive, GWLP_USERDATA);
+ CSrmmWindow *dat = (CSrmmWindow*)GetWindowLongPtr(tabdat->pContainer->hwndActive, GWLP_USERDATA);
if (dat)
tabdat->helperDat = dat;
else
@@ -818,7 +818,7 @@ page_done:
RECT rcLog, rcPage;
GetClientRect(hwnd, &rcPage);
if (dwStyle & TCS_BOTTOM) {
- GetWindowRect(tabdat->helperDat->hwnd, &rcLog);
+ GetWindowRect(tabdat->helperDat->GetHwnd(), &rcLog);
pt.y = rcLog.bottom;
pt.x = rcLog.left;
ScreenToClient(hwnd, &pt);
@@ -826,7 +826,7 @@ page_done:
FillRect(hdc, &rcPage, CSkin::m_BrushBack);
rcPage.top = 0;
}
- GetWindowRect(GetDlgItem(tabdat->helperDat->hwnd, tabdat->helperDat->bType == SESSIONTYPE_IM ? IDC_LOG : IDC_CHAT_LOG), &rcLog);
+ GetWindowRect(GetDlgItem(tabdat->helperDat->GetHwnd(), tabdat->helperDat->bType == SESSIONTYPE_IM ? IDC_LOG : IDC_LOG), &rcLog);
pt.y = rcLog.top;
pt.x = rcLog.left;
@@ -846,9 +846,9 @@ page_done:
continue;
TabCtrl_GetItem(hwnd, i, &tci);
- TWindowData *dat = 0;
+ CSrmmWindow *dat = 0;
if (tci.lParam)
- dat = (TWindowData*)GetWindowLongPtr((HWND)tci.lParam, GWLP_USERDATA);
+ dat = (CSrmmWindow*)GetWindowLongPtr((HWND)tci.lParam, GWLP_USERDATA);
TabCtrl_GetItemRect(hwnd, i, &rcItem);
if (!bClassicDraw && uiBottom) {
rcItem.top -= PluginConfig.tabConfig.m_bottomAdjust;
@@ -876,13 +876,13 @@ page_done:
rctActive.bottom -= PluginConfig.tabConfig.m_bottomAdjust;
}
if (rctActive.left >= 0) {
- TWindowData *dat = 0;
+ CSrmmWindow *dat = 0;
int nHint = 0;
rcItem = rctActive;
TabCtrl_GetItem(hwnd, iActive, &tci);
if (tci.lParam)
- dat = (TWindowData*)GetWindowLongPtr((HWND)tci.lParam, GWLP_USERDATA);
+ dat = (CSrmmWindow*)GetWindowLongPtr((HWND)tci.lParam, GWLP_USERDATA);
if (!bClassicDraw && !(dwStyle & TCS_BUTTONS)) {
InflateRect(&rcItem, 2, 2);
@@ -1110,11 +1110,11 @@ static LRESULT CALLBACK TabControlSubclassProc(HWND hwnd, UINT msg, WPARAM wPara
int i = GetTabItemFromMouse(hwnd, &pt);
if (i != -1) {
TCITEM tc;
- TWindowData *dat = NULL;
+ CSrmmWindow *dat = NULL;
tc.mask = TCIF_PARAM;
TabCtrl_GetItem(hwnd, i, &tc);
- dat = (TWindowData*)GetWindowLongPtr((HWND)tc.lParam, GWLP_USERDATA);
+ dat = (CSrmmWindow*)GetWindowLongPtr((HWND)tc.lParam, GWLP_USERDATA);
if (dat) {
tabdat->bDragging = TRUE;
tabdat->iBeginIndex = i;
@@ -1142,7 +1142,7 @@ static LRESULT CALLBACK TabControlSubclassProc(HWND hwnd, UINT msg, WPARAM wPara
tc.mask = TCIF_PARAM;
TabCtrl_GetItem(hwnd, i, &tc);
- TWindowData *dat = (TWindowData*)GetWindowLongPtr((HWND)tc.lParam, GWLP_USERDATA);
+ CSrmmWindow *dat = (CSrmmWindow*)GetWindowLongPtr((HWND)tc.lParam, GWLP_USERDATA);
if (dat) {
tabdat->bDragging = TRUE;
tabdat->iBeginIndex = i;
@@ -1267,13 +1267,13 @@ static LRESULT CALLBACK TabControlSubclassProc(HWND hwnd, UINT msg, WPARAM wPara
/*
* get the message window data for the session to which this tab item belongs
*/
- TWindowData *dat = 0;
+ CSrmmWindow *dat = 0;
if (IsWindow((HWND)item.lParam) && item.lParam != 0)
- dat = (TWindowData*)GetWindowLongPtr((HWND)item.lParam, GWLP_USERDATA);
+ dat = (CSrmmWindow*)GetWindowLongPtr((HWND)item.lParam, GWLP_USERDATA);
if (dat) {
tabdat->fTipActive = TRUE;
ti.isGroup = 0;
- ti.hItem = (HANDLE)dat->hContact;
+ ti.hItem = (HANDLE)dat->m_hContact;
ti.isTreeFocused = 0;
CallService("mToolTip/ShowTip", 0, (LPARAM)&ti);
}
diff --git a/plugins/TabSRMM/src/taskbar.cpp b/plugins/TabSRMM/src/taskbar.cpp
index 2122ef9cc7..2a9d24f210 100644
--- a/plugins/TabSRMM/src/taskbar.cpp
+++ b/plugins/TabSRMM/src/taskbar.cpp
@@ -179,7 +179,7 @@ void CTaskbarInteract::SetTabActive(const HWND hwndTab, const HWND hwndGroup) co
* static member function. Ignored when OS is not Windows 7 or global option for
* Windows 7 task bar support is diabled.
*/
-void CProxyWindow::add(TWindowData *dat)
+void CProxyWindow::add(CTabBaseDlg *dat)
{
if (PluginConfig.m_bIsWin7 && PluginConfig.m_useAeroPeek) // && (!CSkin::m_skinEnabled || M.GetByte("forceAeroPeek", 0)))
dat->pWnd = new CProxyWindow(dat);
@@ -195,7 +195,7 @@ void CProxyWindow::add(TWindowData *dat)
*
* static member function
*/
-void CProxyWindow::verify(TWindowData *dat)
+void CProxyWindow::verify(CTabBaseDlg *dat)
{
if (PluginConfig.m_bIsWin7 && PluginConfig.m_useAeroPeek) {
if (0 == dat->pWnd) {
@@ -224,7 +224,7 @@ void CProxyWindow::verify(TWindowData *dat)
* and previews for a message session.
* each tab has one invisible proxy window
*/
-CProxyWindow::CProxyWindow(TWindowData *dat)
+CProxyWindow::CProxyWindow(CTabBaseDlg *dat)
{
m_dat = dat;
m_hBigIcon = 0;
@@ -320,7 +320,7 @@ void CProxyWindow::sendPreview()
if (m_dat->pContainer == NULL)
return;
- TWindowData *dat_active = reinterpret_cast<TWindowData *>(::GetWindowLongPtr(m_dat->pContainer->hwndActive, GWLP_USERDATA));
+ CSrmmWindow *dat_active = reinterpret_cast<CSrmmWindow *>(::GetWindowLongPtr(m_dat->pContainer->hwndActive, GWLP_USERDATA));
if (!m_thumb || !dat_active)
return;
@@ -330,7 +330,7 @@ void CProxyWindow::sendPreview()
HDC hdc, dc;
int twips = (int)(15.0f / PluginConfig.m_DPIscaleY);
bool fIsChat = m_dat->bType != SESSIONTYPE_IM;
- HWND hwndRich = ::GetDlgItem(m_dat->hwnd, fIsChat ? IDC_CHAT_LOG : IDC_LOG);
+ HWND hwndRich = ::GetDlgItem(m_dat->GetHwnd(), fIsChat ? IDC_LOG : IDC_LOG);
LONG cx, cy;
POINT ptOrigin = { 0 }, ptBottom;
@@ -338,8 +338,8 @@ void CProxyWindow::sendPreview()
RECT rcClient;
::SendMessage(m_dat->pContainer->hwnd, DM_QUERYCLIENTAREA, 0, (LPARAM)&rcClient);
- ::MoveWindow(m_dat->hwnd, rcClient.left, rcClient.top, (rcClient.right - rcClient.left), (rcClient.bottom - rcClient.top), FALSE);
- ::SendMessage(m_dat->hwnd, WM_SIZE, 0, 0);
+ ::MoveWindow(m_dat->GetHwnd(), rcClient.left, rcClient.top, (rcClient.right - rcClient.left), (rcClient.bottom - rcClient.top), FALSE);
+ ::SendMessage(m_dat->GetHwnd(), WM_SIZE, 0, 0);
DM_ScrollToBottom(m_dat, 0, 1);
}
/*
@@ -360,7 +360,7 @@ void CProxyWindow::sendPreview()
pt = m_dat->pContainer->ptLogSaved;
}
- ::GetWindowRect(::GetDlgItem(m_dat->pContainer->hwndActive, dat_active->bType == SESSIONTYPE_IM ? IDC_LOG : IDC_CHAT_LOG), &rcTemp);
+ ::GetWindowRect(::GetDlgItem(m_dat->pContainer->hwndActive, dat_active->bType == SESSIONTYPE_IM ? IDC_LOG : IDC_LOG), &rcTemp);
ptBottom.x = rcTemp.left;
ptBottom.y = rcTemp.bottom;
::ScreenToClient(m_dat->pContainer->hwnd, &ptBottom);
@@ -372,7 +372,7 @@ void CProxyWindow::sendPreview()
rcRich.right = cx;
rcRich.bottom = ptBottom.y - pt.y;
- dc = ::GetDC(m_dat->hwnd);
+ dc = ::GetDC(m_dat->GetHwnd());
hdc = ::CreateCompatibleDC(dc);
HBITMAP hbm = CSkin::CreateAeroCompatibleBitmap(rcContainer, hdc);
HBITMAP hbmOld = reinterpret_cast<HBITMAP>(::SelectObject(hdc, hbm));
@@ -434,7 +434,7 @@ void CProxyWindow::sendPreview()
else pt.x = pt.y = 0;
CMimAPI::m_pfnDwmSetIconicLivePreviewBitmap(m_hwndProxy, hbm, &pt, m_dat->pContainer->dwFlags & CNT_CREATE_MINIMIZED ? 0 : DWM_SIT_DISPLAYFRAME);
- ::ReleaseDC(m_dat->hwnd, dc);
+ ::ReleaseDC(m_dat->GetHwnd(), dc);
::DeleteObject(hbm);
}
@@ -553,10 +553,10 @@ LRESULT CALLBACK CProxyWindow::wndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARA
{
TContainerData* pC = m_dat->pContainer;
- if (m_dat->hwnd != pC->hwndActive)
- SendMessage(m_dat->hwnd, WM_CLOSE, 1, 3);
+ if (m_dat->GetHwnd() != pC->hwndActive)
+ SendMessage(m_dat->GetHwnd(), WM_CLOSE, 1, 3);
else
- SendMessage(m_dat->hwnd, WM_CLOSE, 1, 2);
+ SendMessage(m_dat->GetHwnd(), WM_CLOSE, 1, 2);
if (!IsIconic(pC->hwnd))
SetForegroundWindow(pC->hwnd);
}
@@ -568,8 +568,8 @@ LRESULT CALLBACK CProxyWindow::wndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARA
*/
case WM_ACTIVATE:
if (WA_ACTIVE == wParam) {
- if (IsWindow(m_dat->hwnd))
- ::PostMessage(m_dat->hwnd, DM_ACTIVATEME, 0, 0);
+ if (IsWindow(m_dat->GetHwnd()))
+ ::PostMessage(m_dat->GetHwnd(), DM_ACTIVATEME, 0, 0);
return 0; // no default processing, avoid flickering.
}
break;
diff --git a/plugins/TabSRMM/src/taskbar.h b/plugins/TabSRMM/src/taskbar.h
index 8e43fbf0db..d8ca7ec962 100644
--- a/plugins/TabSRMM/src/taskbar.h
+++ b/plugins/TabSRMM/src/taskbar.h
@@ -50,7 +50,7 @@ public:
virtual void update() = 0;
protected:
- const TWindowData *m_dat;
+ const CTabBaseDlg *m_dat;
const CProxyWindow *m_pWnd;
HBITMAP m_hbmThumb, m_hbmOld;
@@ -97,7 +97,7 @@ private:
class CProxyWindow
{
public:
- CProxyWindow(TWindowData *dat);
+ CProxyWindow(CTabBaseDlg *dat);
~CProxyWindow();
void updateIcon(const HICON hIcon) const;
@@ -108,7 +108,7 @@ public:
void Invalidate() const;
void verifyDwmState();
- __inline const TWindowData* getDat() const { return m_dat; }
+ __inline const CTabBaseDlg* getDat() const { return m_dat; }
__inline const LONG getWidth() const { return m_width; }
__inline const LONG getHeight() const { return m_height; }
__inline const HWND getHwnd() const { return m_hwndProxy; }
@@ -116,11 +116,11 @@ public:
__inline const HICON getOverlayIcon() const { return m_hOverlayIcon; }
static LRESULT CALLBACK stubWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
- static void add(TWindowData *dat);
- static void verify(TWindowData *dat);
+ static void add(CTabBaseDlg *dat);
+ static void verify(CTabBaseDlg *dat);
private:
- TWindowData *m_dat;
+ CTabBaseDlg *m_dat;
HWND m_hwndProxy;
LONG m_width, m_height;
diff --git a/plugins/TabSRMM/src/templates.cpp b/plugins/TabSRMM/src/templates.cpp
index ea0458703b..d8345d0152 100644
--- a/plugins/TabSRMM/src/templates.cpp
+++ b/plugins/TabSRMM/src/templates.cpp
@@ -112,7 +112,7 @@ INT_PTR CALLBACK DlgProcTemplateEditor(HWND hwndDlg, UINT msg, WPARAM wParam, LP
{
TemplateEditorInfo *teInfo = 0;
TTemplateSet *tSet;
- TWindowData *dat = (TWindowData*)GetWindowLongPtr(hwndDlg, GWLP_USERDATA);
+ CSrmmWindow *dat = (CSrmmWindow*)GetWindowLongPtr(hwndDlg, GWLP_USERDATA);
/*
* since this dialog needs a MessageWindowData * but has no container, we can store
* the extended info struct in pContainer *)
@@ -128,7 +128,7 @@ INT_PTR CALLBACK DlgProcTemplateEditor(HWND hwndDlg, UINT msg, WPARAM wParam, LP
TranslateDialogDefault(hwndDlg);
{
TemplateEditorNew *teNew = (TemplateEditorNew *)lParam;
- dat = (TWindowData*)mir_calloc(sizeof(TWindowData));
+ dat = (CSrmmWindow*)mir_calloc(sizeof(CSrmmWindow));
dat->pContainer = (TContainerData*)mir_alloc(sizeof(TContainerData));
memset(dat->pContainer, 0, sizeof(TContainerData));
teInfo = (TemplateEditorInfo *)dat->pContainer;
@@ -147,19 +147,19 @@ INT_PTR CALLBACK DlgProcTemplateEditor(HWND hwndDlg, UINT msg, WPARAM wParam, LP
SendDlgItemMessage(hwndDlg, IDC_PREVIEW, EM_SETEDITSTYLE, SES_EXTENDBACKCOLOR, SES_EXTENDBACKCOLOR);
SendDlgItemMessage(hwndDlg, IDC_PREVIEW, EM_EXLIMITTEXT, 0, 0x80000000);
- dat->hContact = db_find_first();
- dat->szProto = GetContactProto(dat->hContact);
- while (dat->szProto == 0 && dat->hContact != 0) {
- dat->hContact = db_find_next(dat->hContact);
- dat->szProto = GetContactProto(dat->hContact);
+ dat->m_hContact = db_find_first();
+ dat->szProto = GetContactProto(dat->m_hContact);
+ while (dat->szProto == 0 && dat->m_hContact != 0) {
+ dat->m_hContact = db_find_next(dat->m_hContact);
+ dat->szProto = GetContactProto(dat->m_hContact);
}
dat->dwFlags = dat->pContainer->theme.dwFlags;
- dat->cache = CContactCache::getContactCache(dat->hContact);
+ dat->cache = CContactCache::getContactCache(dat->m_hContact);
dat->cache->updateNick();
dat->cache->updateUIN();
dat->cache->updateStats(TSessionStats::INIT_TIMER);
- GetMYUIN(dat);
+ dat->GetMYUIN();
SetWindowLongPtr(hwndDlg, GWLP_USERDATA, (LONG_PTR)dat);
ShowWindow(hwndDlg, SW_SHOW);
@@ -359,7 +359,7 @@ INT_PTR CALLBACK DlgProcTemplateEditor(HWND hwndDlg, UINT msg, WPARAM wParam, LP
dat->dwFlags = (teInfo->rtl ? dat->dwFlags | MWF_LOG_RTL : dat->dwFlags & ~MWF_LOG_RTL);
dat->dwFlags = (iIndex == 0 || iIndex == 1) ? dat->dwFlags & ~MWF_LOG_GROUPMODE : dat->dwFlags | MWF_LOG_GROUPMODE;
mir_snwprintf(dat->szMyNickname, L"My Nickname");
- StreamInEvents(hwndDlg, 0, 1, 0, &dbei);
+ dat->StreamInEvents(0, 1, 0, &dbei);
SendDlgItemMessage(hwndDlg, IDC_PREVIEW, EM_SETSEL, -1, -1);
if (teInfo->changed)
memcpy(tSet->szTemplates[teInfo->inEdit], szTemp, TEMPLATE_LENGTH * sizeof(wchar_t));
diff --git a/plugins/TabSRMM/src/themeio.cpp b/plugins/TabSRMM/src/themeio.cpp
index e78fdf786d..c87c0df5b0 100644
--- a/plugins/TabSRMM/src/themeio.cpp
+++ b/plugins/TabSRMM/src/themeio.cpp
@@ -176,7 +176,7 @@ int TSAPI CheckThemeVersion(const wchar_t *szIniFilename)
return 0;
}
-void TSAPI WriteThemeToINI(const wchar_t *szIniFilenameT, TWindowData *dat)
+void TSAPI WriteThemeToINI(const wchar_t *szIniFilenameT, CSrmmWindow *dat)
{
int i, n = 0;
DBVARIANT dbv;
diff --git a/plugins/TabSRMM/src/themes.cpp b/plugins/TabSRMM/src/themes.cpp
index ed6853f736..444e1e562b 100644
--- a/plugins/TabSRMM/src/themes.cpp
+++ b/plugins/TabSRMM/src/themes.cpp
@@ -1920,7 +1920,7 @@ void CSkin::DrawDimmedIcon(HDC hdc, LONG left, LONG top, LONG dx, LONG dy, HICON
DeleteDC(dcMem);
}
-UINT CSkin::NcCalcRichEditFrame(HWND hwnd, const TWindowData *mwdat, UINT skinID, UINT msg, WPARAM wParam, LPARAM lParam, WNDPROC MyWndProc)
+UINT CSkin::NcCalcRichEditFrame(HWND hwnd, const CTabBaseDlg *mwdat, UINT skinID, UINT msg, WPARAM wParam, LPARAM lParam, WNDPROC MyWndProc)
{
NCCALCSIZE_PARAMS *nccp = (NCCALCSIZE_PARAMS *)lParam;
BOOL bReturn = FALSE;
@@ -1968,7 +1968,7 @@ UINT CSkin::NcCalcRichEditFrame(HWND hwnd, const TWindowData *mwdat, UINT skinID
// process WM_NCPAINT for the rich edit control. Draws a visual style border and avoid
// classic static edge / client edge may also draw a colorized border around the control
-UINT CSkin::DrawRichEditFrame(HWND hwnd, const TWindowData *mwdat, UINT skinID, UINT msg, WPARAM wParam, LPARAM lParam, WNDPROC OldWndProc)
+UINT CSkin::DrawRichEditFrame(HWND hwnd, const CTabBaseDlg *mwdat, UINT skinID, UINT msg, WPARAM wParam, LPARAM lParam, WNDPROC OldWndProc)
{
// do default processing (otherwise, NO scrollbar as it is painted in NC_PAINT)
LRESULT result = mir_callNextSubclass(hwnd, OldWndProc, msg, wParam, lParam);
@@ -2192,93 +2192,90 @@ void CSkin::MapClientToParent(HWND hwndClient, HWND hwndParent, RECT &rc)
// @param hdc HDC: handle to the device context in which painting should occur.
// @param rcWindow RECT &: The window rectangle of the message dialog window
-void CSkin::RenderToolbarBG(const TWindowData *dat, HDC hdc, const RECT &rcWindow)
+void CTabBaseDlg::RenderToolbarBG(HDC hdc, const RECT &rcWindow) const
{
- if (dat) {
- if (dat->pContainer->dwFlags & CNT_HIDETOOLBAR)
- return;
-
- bool bAero = M.isAero();
- bool fTbColorsValid = PluginConfig.m_tbBackgroundHigh && PluginConfig.m_tbBackgroundLow;
- BYTE bAlphaOffset = 0;
- BOOL fMustDrawNonThemed = ((bAero || fTbColorsValid) && !M.GetByte(SRMSGMOD_T, "forceThemedToolbar", 0));
- RECT rc, rcToolbar;
- POINT pt;
-
- if (!(dat->pContainer->dwFlags & CNT_BOTTOMTOOLBAR)) {
- ::GetWindowRect(::GetDlgItem(dat->hwnd, dat->bType == SESSIONTYPE_CHAT ? IDC_CHAT_LOG : IDC_LOG), &rc);
- pt.y = rc.bottom + 0;
- ::ScreenToClient(dat->hwnd, &pt);
- rcToolbar.top = pt.y;
- rcToolbar.left = 0;
- rcToolbar.right = rcWindow.right;
-
- if (dat->bType == SESSIONTYPE_IM) {
- if (dat->dwFlags & MWF_ERRORSTATE)
- rcToolbar.top += ERRORPANEL_HEIGHT;
- if (dat->dwFlagsEx & MWF_SHOW_SCROLLINGDISABLED || dat->bNotOnList) {
- rcToolbar.top += 20;
- RECT rcAdd;
- rcAdd.left = 0; rcAdd.right = rcToolbar.right - rcToolbar.left;
- rcAdd.bottom = rcToolbar.top - 1;
- rcAdd.top = rcAdd.bottom - 20;
- ::DrawEdge(hdc, &rcAdd, BDR_RAISEDINNER | BDR_RAISEDOUTER, BF_RECT | BF_SOFT | BF_FLAT);
- }
- }
-
- ::GetWindowRect(::GetDlgItem(dat->hwnd, dat->bType == SESSIONTYPE_CHAT ? IDC_CHAT_MESSAGE : IDC_MESSAGE), &rc);
- pt.y = rc.top - (dat->bIsAutosizingInput ? 1 : 2);
- ::ScreenToClient(dat->hwnd, &pt);
- rcToolbar.bottom = pt.y;
- }
- else {
- GetWindowRect(::GetDlgItem(dat->hwnd, dat->bType == SESSIONTYPE_CHAT ? IDC_CHAT_MESSAGE : IDC_MESSAGE), &rc);
- pt.y = rc.bottom - 2;
- ScreenToClient(dat->hwnd, &pt);
- rcToolbar.top = pt.y + 1;
- rcToolbar.left = 0;
- rcToolbar.right = rcWindow.right;
- rcToolbar.bottom = rcWindow.bottom;
- }
- LONG cx = rcToolbar.right - rcToolbar.left;
- LONG cy = rcToolbar.bottom - rcToolbar.top;
-
- RECT rcCachedToolbar = { 0 };
- rcCachedToolbar.right = cx;
- rcCachedToolbar.bottom = cy;
+ if (pContainer->dwFlags & CNT_HIDETOOLBAR)
+ return;
- if (dat->pContainer->cachedToolbarDC == 0)
- dat->pContainer->cachedToolbarDC = ::CreateCompatibleDC(hdc);
+ bool bAero = M.isAero();
+ bool fTbColorsValid = PluginConfig.m_tbBackgroundHigh && PluginConfig.m_tbBackgroundLow;
+ BYTE bAlphaOffset = 0;
+ BOOL fMustDrawNonThemed = ((bAero || fTbColorsValid) && !M.GetByte(SRMSGMOD_T, "forceThemedToolbar", 0));
+ RECT rc, rcToolbar;
+ POINT pt;
- if (dat->pContainer->szOldToolbarSize.cx != cx || dat->pContainer->szOldToolbarSize.cy != cy) {
- if (dat->pContainer->oldhbmToolbarBG) {
- ::SelectObject(dat->pContainer->cachedToolbarDC, dat->pContainer->oldhbmToolbarBG);
- ::DeleteObject(dat->pContainer->hbmToolbarBG);
+ if (!(pContainer->dwFlags & CNT_BOTTOMTOOLBAR)) {
+ ::GetWindowRect(::GetDlgItem(m_hwnd, bType == SESSIONTYPE_CHAT ? IDC_LOG : IDC_LOG), &rc);
+ pt.y = rc.bottom + 0;
+ ::ScreenToClient(m_hwnd, &pt);
+ rcToolbar.top = pt.y;
+ rcToolbar.left = 0;
+ rcToolbar.right = rcWindow.right;
+
+ if (bType == SESSIONTYPE_IM) {
+ if (dwFlags & MWF_ERRORSTATE)
+ rcToolbar.top += ERRORPANEL_HEIGHT;
+ if (dwFlagsEx & MWF_SHOW_SCROLLINGDISABLED || bNotOnList) {
+ rcToolbar.top += 20;
+ RECT rcAdd;
+ rcAdd.left = 0; rcAdd.right = rcToolbar.right - rcToolbar.left;
+ rcAdd.bottom = rcToolbar.top - 1;
+ rcAdd.top = rcAdd.bottom - 20;
+ ::DrawEdge(hdc, &rcAdd, BDR_RAISEDINNER | BDR_RAISEDOUTER, BF_RECT | BF_SOFT | BF_FLAT);
}
- dat->pContainer->hbmToolbarBG = CSkin::CreateAeroCompatibleBitmap(rcCachedToolbar, hdc);// ::CreateCompatibleBitmap(hdc, cx, cy);
- dat->pContainer->oldhbmToolbarBG = reinterpret_cast<HBITMAP>(::SelectObject(dat->pContainer->cachedToolbarDC, dat->pContainer->hbmToolbarBG));
}
- dat->pContainer->szOldToolbarSize.cx = cx;
- dat->pContainer->szOldToolbarSize.cy = cy;
- if (!fMustDrawNonThemed && M.isVSThemed()) {
- DrawThemeBackground(dat->hThemeToolbar, dat->pContainer->cachedToolbarDC, 6, 1, &rcCachedToolbar, &rcCachedToolbar);
- dat->pContainer->bTBRenderingMode = 1; // tell TSButton how to render the tool bar buttons
- }
- else {
- dat->pContainer->bTBRenderingMode = (M.isVSThemed() ? 1 : 0);
- m_tmp_tb_high = PluginConfig.m_tbBackgroundHigh ? PluginConfig.m_tbBackgroundHigh :
- ((bAero && m_pCurrentAeroEffect) ? m_pCurrentAeroEffect->m_clrToolbar : ::GetSysColor(COLOR_3DFACE));
- m_tmp_tb_low = PluginConfig.m_tbBackgroundLow ? PluginConfig.m_tbBackgroundLow :
- ((bAero && m_pCurrentAeroEffect) ? m_pCurrentAeroEffect->m_clrToolbar2 : ::GetSysColor(COLOR_3DFACE));
-
- bAlphaOffset = PluginConfig.m_tbBackgroundHigh ? 40 : 0;
- ::DrawAlpha(dat->pContainer->cachedToolbarDC, &rcCachedToolbar, m_tmp_tb_high, 55 + bAlphaOffset, m_tmp_tb_low, 0, 9, 0, 0, 0);
+ ::GetWindowRect(::GetDlgItem(m_hwnd, bType == SESSIONTYPE_CHAT ? IDC_MESSAGE : IDC_MESSAGE), &rc);
+ pt.y = rc.top - (bIsAutosizingInput ? 1 : 2);
+ ::ScreenToClient(m_hwnd, &pt);
+ rcToolbar.bottom = pt.y;
+ }
+ else {
+ GetWindowRect(::GetDlgItem(m_hwnd, bType == SESSIONTYPE_CHAT ? IDC_MESSAGE : IDC_MESSAGE), &rc);
+ pt.y = rc.bottom - 2;
+ ScreenToClient(m_hwnd, &pt);
+ rcToolbar.top = pt.y + 1;
+ rcToolbar.left = 0;
+ rcToolbar.right = rcWindow.right;
+ rcToolbar.bottom = rcWindow.bottom;
+ }
+ LONG cx = rcToolbar.right - rcToolbar.left;
+ LONG cy = rcToolbar.bottom - rcToolbar.top;
+
+ RECT rcCachedToolbar = { 0 };
+ rcCachedToolbar.right = cx;
+ rcCachedToolbar.bottom = cy;
+
+ if (pContainer->cachedToolbarDC == 0)
+ pContainer->cachedToolbarDC = ::CreateCompatibleDC(hdc);
+
+ if (pContainer->szOldToolbarSize.cx != cx || pContainer->szOldToolbarSize.cy != cy) {
+ if (pContainer->oldhbmToolbarBG) {
+ ::SelectObject(pContainer->cachedToolbarDC, pContainer->oldhbmToolbarBG);
+ ::DeleteObject(pContainer->hbmToolbarBG);
}
+ pContainer->hbmToolbarBG = CSkin::CreateAeroCompatibleBitmap(rcCachedToolbar, hdc);// ::CreateCompatibleBitmap(hdc, cx, cy);
+ pContainer->oldhbmToolbarBG = reinterpret_cast<HBITMAP>(::SelectObject(pContainer->cachedToolbarDC, pContainer->hbmToolbarBG));
+ }
+ pContainer->szOldToolbarSize.cx = cx;
+ pContainer->szOldToolbarSize.cy = cy;
- ::BitBlt(hdc, rcToolbar.left, rcToolbar.top, cx, cy,
- dat->pContainer->cachedToolbarDC, 0, 0, SRCCOPY);
+ if (!fMustDrawNonThemed && M.isVSThemed()) {
+ DrawThemeBackground(hThemeToolbar, pContainer->cachedToolbarDC, 6, 1, &rcCachedToolbar, &rcCachedToolbar);
+ pContainer->bTBRenderingMode = 1; // tell TSButton how to render the tool bar buttons
}
+ else {
+ pContainer->bTBRenderingMode = (M.isVSThemed() ? 1 : 0);
+ CSkin::m_tmp_tb_high = PluginConfig.m_tbBackgroundHigh ? PluginConfig.m_tbBackgroundHigh :
+ ((bAero && CSkin::m_pCurrentAeroEffect) ? CSkin::m_pCurrentAeroEffect->m_clrToolbar : ::GetSysColor(COLOR_3DFACE));
+ CSkin::m_tmp_tb_low = PluginConfig.m_tbBackgroundLow ? PluginConfig.m_tbBackgroundLow :
+ ((bAero && CSkin::m_pCurrentAeroEffect) ? CSkin::m_pCurrentAeroEffect->m_clrToolbar2 : ::GetSysColor(COLOR_3DFACE));
+
+ bAlphaOffset = PluginConfig.m_tbBackgroundHigh ? 40 : 0;
+ ::DrawAlpha(pContainer->cachedToolbarDC, &rcCachedToolbar, CSkin::m_tmp_tb_high, 55 + bAlphaOffset, CSkin::m_tmp_tb_low, 0, 9, 0, 0, 0);
+ }
+
+ ::BitBlt(hdc, rcToolbar.left, rcToolbar.top, cx, cy, pContainer->cachedToolbarDC, 0, 0, SRCCOPY);
}
/////////////////////////////////////////////////////////////////////////////////////////
@@ -2454,31 +2451,28 @@ void CSkin::extractSkinsAndLogo(bool fForceOverwrite) const
/////////////////////////////////////////////////////////////////////////////////////////
// redraw the splitter area between the message input and message log area only
-void CSkin::UpdateToolbarBG(TWindowData *dat)
+void CTabBaseDlg::UpdateToolbarBG()
{
- if (dat == NULL)
- return;
-
RECT rcUpdate, rcTmp;
- ::GetWindowRect(::GetDlgItem(dat->hwnd, dat->bType == SESSIONTYPE_IM ? IDC_LOG : IDC_CHAT_LOG), &rcTmp);
+ ::GetWindowRect(::GetDlgItem(m_hwnd, bType == SESSIONTYPE_IM ? IDC_LOG : IDC_LOG), &rcTmp);
POINT pt;
pt.x = rcTmp.left;
pt.y = rcTmp.top;
- ::ScreenToClient(dat->hwnd, &pt);
+ ::ScreenToClient(m_hwnd, &pt);
rcUpdate.left = 0;
rcUpdate.top = pt.y;
- ::GetClientRect(dat->hwnd, &rcTmp);
+ ::GetClientRect(m_hwnd, &rcTmp);
rcUpdate.right = rcTmp.right;
rcUpdate.bottom = rcTmp.bottom;
if (M.isAero() || M.isDwmActive())
- dat->fLimitedUpdate = true; // skip unrelevant window updates when we have buffered paint avail
- ::RedrawWindow(dat->hwnd, &rcUpdate, 0, RDW_INVALIDATE | RDW_ERASE | RDW_UPDATENOW);
- ::BB_RedrawButtons(dat);
- dat->fLimitedUpdate = false;
+ fLimitedUpdate = true; // skip unrelevant window updates when we have buffered paint avail
+ ::RedrawWindow(m_hwnd, &rcUpdate, 0, RDW_INVALIDATE | RDW_ERASE | RDW_UPDATENOW);
+ BB_RedrawButtons();
+ fLimitedUpdate = false;
}
/////////////////////////////////////////////////////////////////////////////////////////
diff --git a/plugins/TabSRMM/src/themes.h b/plugins/TabSRMM/src/themes.h
index b999139d8a..4472524fe9 100644
--- a/plugins/TabSRMM/src/themes.h
+++ b/plugins/TabSRMM/src/themes.h
@@ -371,12 +371,11 @@ public:
static void TSAPI SkinDrawBG(HWND hwndClient, HWND hwnd, TContainerData *pContainer, RECT *rcClient, HDC hdcTarget);
static void TSAPI DrawDimmedIcon(HDC hdc, LONG left, LONG top, LONG dx, LONG dy, HICON hIcon, BYTE alpha);
static DWORD __fastcall HexStringToLong(const wchar_t *szSource);
- static UINT TSAPI DrawRichEditFrame(HWND hwnd, const TWindowData *mwdat, UINT skinID, UINT msg, WPARAM wParam, LPARAM lParam, WNDPROC OldWndProc);
- static UINT TSAPI NcCalcRichEditFrame(HWND hwnd, const TWindowData *mwdat, UINT skinID, UINT msg, WPARAM wParam, LPARAM lParam, WNDPROC OldWndProc);
+ static UINT TSAPI DrawRichEditFrame(HWND hwnd, const CTabBaseDlg *mwdat, UINT skinID, UINT msg, WPARAM wParam, LPARAM lParam, WNDPROC OldWndProc);
+ static UINT TSAPI NcCalcRichEditFrame(HWND hwnd, const CTabBaseDlg *mwdat, UINT skinID, UINT msg, WPARAM wParam, LPARAM lParam, WNDPROC OldWndProc);
static HBITMAP TSAPI CreateAeroCompatibleBitmap(const RECT &rc, HDC dc);
static int TSAPI RenderText(HDC hdc, HANDLE hTheme, const wchar_t *szText, RECT *rc, DWORD dtFlags, const int iGlowSize = DEFAULT_GLOW_SIZE, COLORREF clr = 0, bool fForceAero = false);
static void TSAPI MapClientToParent(HWND hwndClient, HWND hwndParent, RECT &rc);
- static void TSAPI RenderToolbarBG(const TWindowData *dat, HDC hdc, const RECT &rcWindow);
static HBITMAP TSAPI ResizeBitmap(HBITMAP hBmpSrc, LONG width, LONG height, bool &mustFree);
static void TSAPI ApplyAeroEffect(const HDC hdc, const RECT* rc, int iEffectArea);
static void TSAPI setAeroEffect(const LRESULT effect);
@@ -384,7 +383,6 @@ public:
static HANDLE TSAPI InitiateBufferedPaint(const HDC hdcSrc, RECT& rc, HDC& hdcOut);
static void TSAPI FinalizeBufferedPaint(HANDLE hbp, RECT *rc);
static bool __fastcall DrawItem(const HDC hdc, const RECT *rc, const CSkinItem *item);
- static void TSAPI UpdateToolbarBG(TWindowData *dat);
static void TSAPI FillBack(const HDC hdc, RECT* rc);
static bool TSAPI IsThemed(void);
@@ -466,14 +464,14 @@ struct TabControlData
int iHoveredTabIndex;
int iHoveredCloseIcon;
HWND hwndDrag;
- TWindowData *dragDat;
+ CSrmmWindow *dragDat;
HIMAGELIST himlDrag;
BOOL bRefreshWithoutClip;
BOOL fSavePos;
BOOL fTipActive;
BOOL fAeroTabs;
BOOL fCloseButton;
- TWindowData* helperDat; // points to the client data of the active tab
+ CSrmmWindow* helperDat; // points to the client data of the active tab
CImageItem* helperItem, *helperGlowItem; // aero ui, holding the skin image for the tabs
};
@@ -494,17 +492,17 @@ struct ButtonItem {
LONG_PTR pressedGlyphMetrics[4];
DWORD dwFlags, dwStockFlags;
DWORD uId;
- wchar_t szTip[256];
+ wchar_t szTip[256];
char szService[256];
char szModule[256], szSetting[256];
BYTE bValuePush[256], bValueRelease[256];
DWORD type;
- void(*pfnAction)(ButtonItem *item, HWND hwndDlg, TWindowData *dat, HWND hwndItem);
- void(*pfnCallback)(ButtonItem *item, HWND hwndDlg, TWindowData *dat, HWND hwndItem);
+ void(*pfnAction)(ButtonItem *item, HWND hwndDlg, CTabBaseDlg *dat, HWND hwndItem);
+ void(*pfnCallback)(ButtonItem *item, HWND hwndDlg, CTabBaseDlg *dat, HWND hwndItem);
wchar_t tszLabel[40];
ButtonItem* nextItem;
HANDLE hContact;
- TWindowData *dat;
+ CSrmmWindow *dat;
};
typedef struct _tagButtonSet {
diff --git a/plugins/TabSRMM/src/userprefs.cpp b/plugins/TabSRMM/src/userprefs.cpp
index 768d9f34d5..38a90c916c 100644
--- a/plugins/TabSRMM/src/userprefs.cpp
+++ b/plugins/TabSRMM/src/userprefs.cpp
@@ -132,16 +132,16 @@ static INT_PTR CALLBACK DlgProcUserPrefs(HWND hwndDlg, UINT msg, WPARAM wParam,
break;
case WM_USER + 100:
- TWindowData *dat = 0;
+ CSrmmWindow *dat = 0;
DWORD *pdwActionToTake = (DWORD *)lParam;
unsigned int iOldIEView = 0;
HWND hWnd = M.FindWindow(hContact);
BYTE bOldInfoPanel = M.GetByte(hContact, "infopanel", 0);
if (hWnd) {
- dat = (TWindowData*)GetWindowLongPtr(hWnd, GWLP_USERDATA);
+ dat = (CSrmmWindow*)GetWindowLongPtr(hWnd, GWLP_USERDATA);
if (dat)
- iOldIEView = GetIEViewMode(dat->hContact);
+ iOldIEView = GetIEViewMode(dat->m_hContact);
}
int iIndex = SendDlgItemMessage(hwndDlg, IDC_IEVIEWMODE, CB_GETCURSEL, 0, 0);
int iMode = SendDlgItemMessage(hwndDlg, IDC_IEVIEWMODE, CB_GETITEMDATA, iIndex, 0);
@@ -166,7 +166,7 @@ static INT_PTR CALLBACK DlgProcUserPrefs(HWND hwndDlg, UINT msg, WPARAM wParam,
break;
}
if (hWnd && dat) {
- unsigned int iNewIEView = GetIEViewMode(dat->hContact);
+ unsigned int iNewIEView = GetIEViewMode(dat->m_hContact);
if (iNewIEView != iOldIEView) {
if (pdwActionToTake)
*pdwActionToTake |= UPREF_ACTION_SWITCHLOGVIEWER;
@@ -211,11 +211,13 @@ static INT_PTR CALLBACK DlgProcUserPrefs(HWND hwndDlg, UINT msg, WPARAM wParam,
if (IsDlgButtonChecked(hwndDlg, IDC_LOADONLYACTUAL)) {
db_set_b(hContact, SRMSGMOD_T, "ActualHistory", 1);
- if (hWnd && dat) dat->bActualHistory = TRUE;
+ if (hWnd && dat)
+ dat->bActualHistory = TRUE;
}
else {
db_set_b(hContact, SRMSGMOD_T, "ActualHistory", 0);
- if (hWnd && dat) dat->bActualHistory = FALSE;
+ if (hWnd && dat)
+ dat->bActualHistory = FALSE;
}
if (IsDlgButtonChecked(hwndDlg, IDC_IGNORETIMEOUTS)) {
@@ -230,7 +232,7 @@ static INT_PTR CALLBACK DlgProcUserPrefs(HWND hwndDlg, UINT msg, WPARAM wParam,
}
if (hWnd && dat) {
SendMessage(hWnd, DM_CONFIGURETOOLBAR, 0, 1);
- ShowPicture(dat, FALSE);
+ dat->ShowPicture(false);
SendMessage(hWnd, WM_SIZE, 0, 0);
DM_ScrollToBottom(dat, 0, 1);
}
@@ -242,6 +244,14 @@ static INT_PTR CALLBACK DlgProcUserPrefs(HWND hwndDlg, UINT msg, WPARAM wParam,
return FALSE;
}
+/////////////////////////////////////////////////////////////////////////////////////////
+// loads message log and other "per contact" flags
+// it uses the global flag value (0, mwflags) and then merges per contact settings
+// based on the mask value.
+//
+// ALWAYS mask dat->dwFlags with MWF_LOG_ALL to only affect real flag bits and
+// ignore temporary bits.
+
static struct _checkboxes
{
UINT uId;
@@ -264,36 +274,25 @@ checkboxes[] = {
0, 0
};
-/////////////////////////////////////////////////////////////////////////////////////////
-// loads message log and other "per contact" flags
-// it uses the global flag value (0, mwflags) and then merges per contact settings
-// based on the mask value.
-//
-// ALWAYS mask dat->dwFlags with MWF_LOG_ALL to only affect real flag bits and
-// ignore temporary bits.
-
-int TSAPI LoadLocalFlags(TWindowData *dat)
+int CTabBaseDlg::LoadLocalFlags()
{
- if (dat == NULL)
- return NULL;
-
- int i = 0;
- DWORD dwMask = M.GetDword(dat->hContact, "mwmask", 0);
- DWORD dwLocal = M.GetDword(dat->hContact, "mwflags", 0);
+ DWORD dwMask = M.GetDword(m_hContact, "mwmask", 0);
+ DWORD dwLocal = M.GetDword(m_hContact, "mwflags", 0);
DWORD dwGlobal = M.GetDword("mwflags", MWF_LOG_DEFAULT);
- dat->dwFlags &= ~MWF_LOG_ALL;
- if (dat->pContainer->theme.isPrivate)
- dat->dwFlags |= (dat->pContainer->theme.dwFlags & MWF_LOG_ALL);
+ dwFlags &= ~MWF_LOG_ALL;
+ if (pContainer->theme.isPrivate)
+ dwFlags |= (pContainer->theme.dwFlags & MWF_LOG_ALL);
else
- dat->dwFlags |= (dwGlobal & MWF_LOG_ALL);
- while (checkboxes[i].uId) {
+ dwFlags |= (dwGlobal & MWF_LOG_ALL);
+
+ for (int i = 0; checkboxes[i].uId; i++) {
DWORD maskval = checkboxes[i].uFlag;
if (dwMask & maskval)
- dat->dwFlags = (dwLocal & maskval) ? dat->dwFlags | maskval : dat->dwFlags & ~maskval;
- i++;
+ dwFlags = (dwLocal & maskval) ? dwFlags | maskval : dwFlags & ~maskval;
}
- return(dat->dwFlags & MWF_LOG_ALL);
+
+ return dwFlags & MWF_LOG_ALL;
}
/////////////////////////////////////////////////////////////////////////////////////////
@@ -344,9 +343,9 @@ static INT_PTR CALLBACK DlgProcUserPrefsLogOptions(HWND hwndDlg, UINT msg, WPARA
HWND hwnd = M.FindWindow(hContact);
DWORD *dwActionToTake = (DWORD *)lParam, dwMask = 0, dwFlags = 0, maskval;
- TWindowData *dat = NULL;
+ CSrmmWindow *dat = NULL;
if (hwnd)
- dat = (TWindowData*)GetWindowLongPtr(hwnd, GWLP_USERDATA);
+ dat = (CSrmmWindow*)GetWindowLongPtr(hwnd, GWLP_USERDATA);
while (checkboxes[i].uId) {
maskval = checkboxes[i].uFlag;
@@ -477,11 +476,11 @@ INT_PTR CALLBACK DlgProcUserPrefsFrame(HWND hwndDlg, UINT msg, WPARAM wParam, LP
SendMessage((HWND)tci.lParam, WM_COMMAND, WM_USER + 100, (LPARAM)&dwActionToTake);
}
if (hwnd) {
- TWindowData *dat = (TWindowData*)GetWindowLongPtr(hwnd, GWLP_USERDATA);
+ CSrmmWindow *dat = (CSrmmWindow*)GetWindowLongPtr(hwnd, GWLP_USERDATA);
if (dat) {
DWORD dwOldFlags = (dat->dwFlags & MWF_LOG_ALL);
SetDialogToType(hwnd);
- LoadLocalFlags(dat);
+ dat->LoadLocalFlags();
if ((dat->dwFlags & MWF_LOG_ALL) != dwOldFlags) {
bool fShouldHide = true;
if (IsIconic(dat->pContainer->hwnd))
diff --git a/plugins/TabSRMM/src/utils.cpp b/plugins/TabSRMM/src/utils.cpp
index 93fc88fd89..613b92207e 100644
--- a/plugins/TabSRMM/src/utils.cpp
+++ b/plugins/TabSRMM/src/utils.cpp
@@ -67,7 +67,7 @@ static wchar_t *formatting_strings_end[] = { L"b0 ", L"i0 ", L"u0 ", L"s0 ",
// flags: loword = words only for simple * /_ formatting
// hiword = bbcode support (strip bbcodes if 0)
-const wchar_t* Utils::FormatRaw(TWindowData *dat, const wchar_t *msg, int flags, BOOL isSent)
+const wchar_t* Utils::FormatRaw(CTabBaseDlg *dat, const wchar_t *msg, int flags, BOOL isSent)
{
bool clr_was_added = false, was_added;
static tstring message(msg);
@@ -213,7 +213,7 @@ ok:
smbp.Protocolname = dat->cache->getActiveProto();
smbp.flag = SAFL_TCHAR | SAFL_PATH | (isSent ? SAFL_OUTGOING : 0);
smbp.str = (wchar_t*)smcode.c_str();
- smbp.hContact = dat->hContact;
+ smbp.hContact = dat->m_hContact;
SMADD_BATCHPARSERES *smbpr = (SMADD_BATCHPARSERES *)CallService(MS_SMILEYADD_BATCHPARSE, 0, (LPARAM)&smbp);
if (smbpr) {
CallService(MS_SMILEYADD_BATCHFREE, 0, (LPARAM)smbpr);
@@ -241,7 +241,7 @@ static wchar_t* Trunc500(wchar_t *str)
return str;
}
-bool Utils::FormatTitleBar(const TWindowData *dat, const wchar_t *szFormat, CMStringW &dest)
+bool Utils::FormatTitleBar(const CTabBaseDlg *dat, const wchar_t *szFormat, CMStringW &dest)
{
if (dat == 0)
return false;
@@ -286,7 +286,7 @@ bool Utils::FormatTitleBar(const TWindowData *dat, const wchar_t *szFormat, CMSt
{
BYTE xStatus = dat->cache->getXStatusId();
if (dat->wStatus != ID_STATUS_OFFLINE && xStatus > 0 && xStatus <= 31) {
- ptrW szXStatus(db_get_wsa(dat->hContact, dat->szProto, "XStatusName"));
+ ptrW szXStatus(db_get_wsa(dat->m_hContact, dat->szProto, "XStatusName"));
dest.Append((szXStatus != NULL) ? Trunc500(szXStatus) : xStatusDescr[xStatus - 1]);
}
}
@@ -296,7 +296,7 @@ bool Utils::FormatTitleBar(const TWindowData *dat, const wchar_t *szFormat, CMSt
{
BYTE xStatus = dat->cache->getXStatusId();
if (dat->wStatus != ID_STATUS_OFFLINE && xStatus > 0 && xStatus <= 31) {
- ptrW szXStatus(db_get_wsa(dat->hContact, dat->szProto, "XStatusName"));
+ ptrW szXStatus(db_get_wsa(dat->m_hContact, dat->szProto, "XStatusName"));
dest.Append((szXStatus != NULL) ? Trunc500(szXStatus) : xStatusDescr[xStatus - 1]);
}
else dest.Append(dat->szStatus[0] ? dat->szStatus : L"(undef)");
@@ -317,7 +317,7 @@ bool Utils::FormatTitleBar(const TWindowData *dat, const wchar_t *szFormat, CMSt
case 'g':
{
- ptrW tszGroup(db_get_wsa(dat->hContact, "CList", "Group"));
+ ptrW tszGroup(db_get_wsa(dat->m_hContact, "CList", "Group"));
if (tszGroup != NULL)
dest.Append(tszGroup);
}
@@ -411,7 +411,7 @@ wchar_t* Utils::GetPreviewWithEllipsis(wchar_t *szText, size_t iMaxLen)
// returns != 0 when one of the installed keyboard layouts belongs to an rtl language
// used to find out whether we need to configure the message input box for bidirectional mode
-int Utils::FindRTLLocale(TWindowData *dat)
+int Utils::FindRTLLocale(CTabBaseDlg *dat)
{
HKL layouts[20];
int i, result = 0;
@@ -621,12 +621,12 @@ void Utils::scaleAvatarHeightLimited(const HBITMAP hBm, double& dNewWidth, doubl
// @param dat: _MessageWindowData* pointer to the window data
// @return HICON: the icon handle
-HICON Utils::iconFromAvatar(const TWindowData *dat)
+HICON Utils::iconFromAvatar(const CTabBaseDlg *dat)
{
if (!ServiceExists(MS_AV_GETAVATARBITMAP) || dat == NULL)
return 0;
- AVATARCACHEENTRY *ace = (AVATARCACHEENTRY *)CallService(MS_AV_GETAVATARBITMAP, dat->hContact, 0);
+ AVATARCACHEENTRY *ace = (AVATARCACHEENTRY *)CallService(MS_AV_GETAVATARBITMAP, dat->m_hContact, 0);
if (ace == NULL || ace->hbmPic == NULL)
return NULL;
@@ -724,7 +724,7 @@ void Utils::addMenuItem(const HMENU& m, MENUITEMINFO &mii, HICON hIcon, const wc
// return != 0 when the sound effect must be played for the given
// session. Uses container sound settings
-int Utils::mustPlaySound(const TWindowData *dat)
+int Utils::mustPlaySound(const CTabBaseDlg *dat)
{
if (!dat)
return 0;
@@ -736,7 +736,7 @@ int Utils::mustPlaySound(const TWindowData *dat)
return 0;
bool fActiveWindow = (dat->pContainer->hwnd == ::GetForegroundWindow() ? true : false);
- bool fActiveTab = (dat->pContainer->hwndActive == dat->hwnd ? true : false);
+ bool fActiveTab = (dat->pContainer->hwndActive == dat->GetHwnd() ? true : false);
bool fIconic = (::IsIconic(dat->pContainer->hwnd) ? true : false);
// window minimized, check if sound has to be played
@@ -844,22 +844,22 @@ wchar_t* Utils::extractURLFromRichEdit(const ENLINK* _e, const HWND hwndRich)
// generic command dispatcher
// used in various places (context menus, info panel menus etc.)
-LRESULT Utils::CmdDispatcher(UINT uType, HWND hwndDlg, UINT cmd, WPARAM wParam, LPARAM lParam, TWindowData *dat, TContainerData *pContainer)
+LRESULT Utils::CmdDispatcher(UINT uType, HWND hwndDlg, UINT cmd, WPARAM wParam, LPARAM lParam, CTabBaseDlg *dat, TContainerData *pContainer)
{
switch (uType) {
case CMD_CONTAINER:
if (pContainer && hwndDlg)
- return(DM_ContainerCmdHandler(pContainer, cmd, wParam, lParam));
+ return DM_ContainerCmdHandler(pContainer, cmd, wParam, lParam);
break;
case CMD_MSGDIALOG:
if (pContainer && hwndDlg && dat)
- return(DM_MsgWindowCmdHandler(hwndDlg, pContainer, dat, cmd, wParam, lParam));
+ return DM_MsgWindowCmdHandler(hwndDlg, pContainer, dat, cmd, wParam, lParam);
break;
case CMD_INFOPANEL:
- if (MsgWindowMenuHandler(dat, cmd, MENU_LOGMENU) == 0)
- return(DM_MsgWindowCmdHandler(hwndDlg, pContainer, dat, cmd, wParam, lParam));
+ if (dat->MsgWindowMenuHandler(cmd, MENU_LOGMENU) == 0)
+ return DM_MsgWindowCmdHandler(hwndDlg, pContainer, dat, cmd, wParam, lParam);
break;
}
return 0;
diff --git a/plugins/TabSRMM/src/utils.h b/plugins/TabSRMM/src/utils.h
index 7d86004366..fbc9ba9930 100644
--- a/plugins/TabSRMM/src/utils.h
+++ b/plugins/TabSRMM/src/utils.h
@@ -52,11 +52,11 @@ public:
CMD_INFOPANEL = 4,
};
- static int FindRTLLocale(TWindowData *dat);
+ static int FindRTLLocale(CTabBaseDlg *dat);
static wchar_t* GetPreviewWithEllipsis(wchar_t *szText, size_t iMaxLen);
static wchar_t* FilterEventMarkers(wchar_t *wszText);
- static LPCTSTR FormatRaw(TWindowData *dat, const wchar_t *msg, int flags, BOOL isSent);
- static bool FormatTitleBar(const TWindowData *dat, const wchar_t *szFormat, CMStringW &dest);
+ static LPCTSTR FormatRaw(CTabBaseDlg *dat, const wchar_t *msg, int flags, BOOL isSent);
+ static bool FormatTitleBar(const CTabBaseDlg *dat, const wchar_t *szFormat, CMStringW &dest);
static char* FilterEventMarkers(char *szText);
static void DoubleAmpersands(wchar_t *pszText, size_t len);
static void RTF_CTableInit();
@@ -69,13 +69,13 @@ public:
static void SaveContainerSettings(TContainerData *pContainer, const char *szSetting);
static DWORD CALLBACK StreamOut(DWORD_PTR dwCookie, LPBYTE pbBuff, LONG cb, LONG * pcb);
- static LRESULT CmdDispatcher(UINT uType, HWND hwndDlg, UINT cmd, WPARAM wParam, LPARAM lParam, TWindowData *dat = 0, TContainerData *pContainer = 0);
+ static LRESULT CmdDispatcher(UINT uType, HWND hwndDlg, UINT cmd, WPARAM wParam, LPARAM lParam, CTabBaseDlg *dat = 0, TContainerData *pContainer = 0);
static void addMenuItem(const HMENU& m, MENUITEMINFO& mii, HICON hIcon, const wchar_t *szText, UINT uID, UINT pos);
static void enableDlgControl(const HWND hwnd, UINT id, bool fEnable = true);
static void showDlgControl(const HWND hwnd, UINT id, int showCmd);
- static int mustPlaySound(const TWindowData *dat);
- static HICON iconFromAvatar(const TWindowData *dat);
+ static int mustPlaySound(const CTabBaseDlg *dat);
+ static HICON iconFromAvatar(const CTabBaseDlg *dat);
static void setAvatarContact(HWND hWnd, MCONTACT hContact);
static void getIconSize(HICON hIcon, int& sizeX, int& sizeY);
diff --git a/plugins/TabSRMM/src/version.h b/plugins/TabSRMM/src/version.h
index e8b2f7baf8..d68b27d599 100644
--- a/plugins/TabSRMM/src/version.h
+++ b/plugins/TabSRMM/src/version.h
@@ -1,7 +1,7 @@
#define __MAJOR_VERSION 3
-#define __MINOR_VERSION 4
-#define __RELEASE_NUM 1
-#define __BUILD_NUM 2
+#define __MINOR_VERSION 5
+#define __RELEASE_NUM 0
+#define __BUILD_NUM 1
#include <stdver.h>