From e170d02c243cd6047e82ba0ecb939da3245a6a3f Mon Sep 17 00:00:00 2001 From: George Hazan Date: Thu, 16 Mar 2017 21:27:05 +0300 Subject: Scriver: - fix for a problem with the initial container resize; - useless class InfobarWindowData removed - useless header file infobar.h removed; - version bump --- plugins/Scriver/src/infobar.cpp | 97 +++++++++++++++++++---------------------- 1 file changed, 45 insertions(+), 52 deletions(-) (limited to 'plugins/Scriver/src/infobar.cpp') diff --git a/plugins/Scriver/src/infobar.cpp b/plugins/Scriver/src/infobar.cpp index f9f8c4e226..fc9e1a61ef 100644 --- a/plugins/Scriver/src/infobar.cpp +++ b/plugins/Scriver/src/infobar.cpp @@ -23,13 +23,12 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include "stdafx.h" -void SetupInfobar(InfobarWindowData* idat) +void CSrmmWindow::SetupInfobar() { DWORD colour = db_get_dw(0, SRMMMOD, SRMSGSET_INFOBARBKGCOLOUR, SRMSGDEFSET_INFOBARBKGCOLOUR); - HWND hwnd = idat->hWnd; - SendDlgItemMessage(hwnd, IDC_INFOBAR_NAME, EM_SETBKGNDCOLOR, 0, colour); - SendDlgItemMessage(hwnd, IDC_INFOBAR_STATUS, EM_SETBKGNDCOLOR, 0, colour); + SendDlgItemMessage(m_hwndInfo, IDC_INFOBAR_NAME, EM_SETBKGNDCOLOR, 0, colour); + SendDlgItemMessage(m_hwndInfo, IDC_INFOBAR_STATUS, EM_SETBKGNDCOLOR, 0, colour); LOGFONT lf; LoadMsgDlgFont(MSGFONTID_INFOBAR_NAME, &lf, &colour); @@ -45,9 +44,9 @@ void SetupInfobar(InfobarWindowData* idat) cf2.wWeight = (WORD)lf.lfWeight; cf2.bPitchAndFamily = lf.lfPitchAndFamily; cf2.yHeight = abs(lf.lfHeight) * 1440 / g_dat.logPixelSY; - SendDlgItemMessage(hwnd, IDC_INFOBAR_NAME, EM_SETCHARFORMAT, SCF_DEFAULT, (LPARAM)&cf2); - SendDlgItemMessage(hwnd, IDC_INFOBAR_NAME, EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM)&cf2); /* WINE: fix send colour text. */ - SendDlgItemMessage(hwnd, IDC_INFOBAR_NAME, EM_SETCHARFORMAT, SCF_ALL, (LPARAM)&cf2); /* WINE: fix send colour text. */ + SendDlgItemMessage(m_hwndInfo, IDC_INFOBAR_NAME, EM_SETCHARFORMAT, SCF_DEFAULT, (LPARAM)&cf2); + SendDlgItemMessage(m_hwndInfo, IDC_INFOBAR_NAME, EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM)&cf2); /* WINE: fix send colour text. */ + SendDlgItemMessage(m_hwndInfo, IDC_INFOBAR_NAME, EM_SETCHARFORMAT, SCF_ALL, (LPARAM)&cf2); /* WINE: fix send colour text. */ LoadMsgDlgFont(MSGFONTID_INFOBAR_STATUS, &lf, &colour); cf2.dwMask = CFM_COLOR | CFM_FACE | CFM_CHARSET | CFM_SIZE | CFM_WEIGHT | CFM_BOLD | CFM_ITALIC; @@ -59,30 +58,28 @@ void SetupInfobar(InfobarWindowData* idat) cf2.wWeight = (WORD)lf.lfWeight; cf2.bPitchAndFamily = lf.lfPitchAndFamily; cf2.yHeight = abs(lf.lfHeight) * 1440 / g_dat.logPixelSY; - SendDlgItemMessage(hwnd, IDC_INFOBAR_STATUS, EM_SETCHARFORMAT, SCF_DEFAULT, (LPARAM)&cf2); - SendDlgItemMessage(hwnd, IDC_INFOBAR_STATUS, EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM)&cf2); /* WINE: fix send colour text. */ - SendDlgItemMessage(hwnd, IDC_INFOBAR_STATUS, EM_SETCHARFORMAT, SCF_ALL, (LPARAM)&cf2); /* WINE: fix send colour text. */ + SendDlgItemMessage(m_hwndInfo, IDC_INFOBAR_STATUS, EM_SETCHARFORMAT, SCF_DEFAULT, (LPARAM)&cf2); + SendDlgItemMessage(m_hwndInfo, IDC_INFOBAR_STATUS, EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM)&cf2); /* WINE: fix send colour text. */ + SendDlgItemMessage(m_hwndInfo, IDC_INFOBAR_STATUS, EM_SETCHARFORMAT, SCF_ALL, (LPARAM)&cf2); /* WINE: fix send colour text. */ - RefreshInfobar(idat); + RefreshInfobar(); } -static HICON GetExtraStatusIcon(InfobarWindowData* idat) +static HICON GetExtraStatusIcon(CSrmmWindow *pDlg) { - BYTE bXStatus = db_get_b(idat->mwd->m_hContact, idat->mwd->m_szProto, "XStatusId", 0); + BYTE bXStatus = db_get_b(pDlg->m_hContact, pDlg->m_szProto, "XStatusId", 0); if (bXStatus > 0) - return (HICON)CallProtoService(idat->mwd->m_szProto, PS_GETCUSTOMSTATUSICON, bXStatus, 0); + return (HICON)CallProtoService(pDlg->m_szProto, PS_GETCUSTOMSTATUSICON, bXStatus, 0); return nullptr; } -void RefreshInfobar(InfobarWindowData* idat) +void CSrmmWindow::RefreshInfobar() { - HWND hwnd = idat->hWnd; - CSrmmWindow *dat = idat->mwd; - ptrW szContactStatusMsg(db_get_wsa(dat->m_hContact, "CList", "StatusMsg")); - ptrW szXStatusName(db_get_wsa(idat->mwd->m_hContact, idat->mwd->m_szProto, "XStatusName")); - ptrW szXStatusMsg(db_get_wsa(idat->mwd->m_hContact, idat->mwd->m_szProto, "XStatusMsg")); - HICON hIcon = GetExtraStatusIcon(idat); + ptrW szContactStatusMsg(db_get_wsa(m_hContact, "CList", "StatusMsg")); + ptrW szXStatusName(db_get_wsa(m_hContact, m_szProto, "XStatusName")); + ptrW szXStatusMsg(db_get_wsa(m_hContact, m_szProto, "XStatusMsg")); + HICON hIcon = GetExtraStatusIcon(this); wchar_t szText[2048]; SETTEXTEX st; if (szXStatusMsg && *szXStatusMsg) @@ -91,39 +88,39 @@ void RefreshInfobar(InfobarWindowData* idat) wcsncpy_s(szText, TranslateW(szXStatusName), _TRUNCATE); st.flags = ST_DEFAULT; st.codepage = 1200; - SendDlgItemMessage(hwnd, IDC_INFOBAR_NAME, EM_SETTEXTEX, (WPARAM)&st, (LPARAM)pcli->pfnGetContactDisplayName(dat->m_hContact, 0)); - SendDlgItemMessage(hwnd, IDC_INFOBAR_STATUS, EM_SETTEXTEX, (WPARAM)&st, (LPARAM)szContactStatusMsg); - hIcon = (HICON)SendDlgItemMessage(hwnd, IDC_XSTATUSICON, STM_SETICON, (WPARAM)hIcon, 0); + SendDlgItemMessage(m_hwndInfo, IDC_INFOBAR_NAME, EM_SETTEXTEX, (WPARAM)&st, (LPARAM)pcli->pfnGetContactDisplayName(m_hContact, 0)); + SendDlgItemMessage(m_hwndInfo, IDC_INFOBAR_STATUS, EM_SETTEXTEX, (WPARAM)&st, (LPARAM)szContactStatusMsg); + hIcon = (HICON)SendDlgItemMessage(m_hwndInfo, IDC_XSTATUSICON, STM_SETICON, (WPARAM)hIcon, 0); if (hIcon) DestroyIcon(hIcon); - SetToolTipText(hwnd, idat->hXStatusTip, szText, nullptr); - SendMessage(hwnd, WM_SIZE, 0, 0); - InvalidateRect(hwnd, nullptr, TRUE); - RedrawWindow(GetDlgItem(hwnd, IDC_AVATAR), nullptr, nullptr, RDW_INVALIDATE); + SetToolTipText(m_hwndInfo, m_hXStatusTip, szText, nullptr); + SendMessage(m_hwndInfo, WM_SIZE, 0, 0); + InvalidateRect(m_hwndInfo, nullptr, TRUE); + RedrawWindow(GetDlgItem(m_hwndInfo, IDC_AVATAR), nullptr, nullptr, RDW_INVALIDATE); } static INT_PTR CALLBACK InfobarWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { static BOOL bWasCopy; - InfobarWindowData* idat = (InfobarWindowData *)GetWindowLongPtr(hwnd, GWLP_USERDATA); + CSrmmWindow *idat = (CSrmmWindow*)GetWindowLongPtr(hwnd, GWLP_USERDATA); if (!idat && msg != WM_INITDIALOG) return FALSE; switch (msg) { case WM_INITDIALOG: bWasCopy = FALSE; - idat = (InfobarWindowData*)lParam; - idat->hWnd = hwnd; + idat = (CSrmmWindow *)lParam; + idat->m_hwndInfo = hwnd; { RECT rect = { 0 }; - idat->hXStatusTip = CreateToolTip(hwnd, nullptr, nullptr, &rect); + idat->m_hXStatusTip = CreateToolTip(hwnd, nullptr, nullptr, &rect); SetWindowLongPtr(hwnd, GWLP_USERDATA, (LONG_PTR)idat); SendDlgItemMessage(hwnd, IDC_INFOBAR_NAME, EM_AUTOURLDETECT, TRUE, 0); SendDlgItemMessage(hwnd, IDC_INFOBAR_NAME, EM_SETEVENTMASK, 0, ENM_MOUSEEVENTS | ENM_LINK | ENM_KEYEVENTS); SendDlgItemMessage(hwnd, IDC_INFOBAR_STATUS, EM_AUTOURLDETECT, TRUE, 0); SendDlgItemMessage(hwnd, IDC_INFOBAR_STATUS, EM_SETEVENTMASK, 0, ENM_MOUSEEVENTS | ENM_LINK | ENM_KEYEVENTS); - SetupInfobar(idat); + idat->SetupInfobar(); } return TRUE; @@ -137,9 +134,9 @@ static INT_PTR CALLBACK InfobarWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARA GetClientRect(hwnd, &rc); dlgWidth = rc.right - rc.left; dlgHeight = rc.bottom - rc.top; - if (idat->mwd->m_hbmpAvatarPic && (g_dat.flags & SMF_AVATAR)) { + if (idat->m_hbmpAvatarPic && (g_dat.flags & SMF_AVATAR)) { BITMAP bminfo; - GetObject(idat->mwd->m_hbmpAvatarPic, sizeof(bminfo), &bminfo); + GetObject(idat->m_hbmpAvatarPic, sizeof(bminfo), &bminfo); if (bminfo.bmWidth != 0 && bminfo.bmHeight != 0) { avatarHeight = dlgHeight - 2; avatarWidth = bminfo.bmWidth * avatarHeight / bminfo.bmHeight; @@ -158,7 +155,7 @@ static INT_PTR CALLBACK InfobarWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARA rc.top = dlgHeight / 4 - 8; rc.bottom = rc.top + 20; rc.right = rc.left + 16; - SetToolTipRect(hwnd, idat->hXStatusTip, &rc); + SetToolTipRect(hwnd, idat->m_hXStatusTip, &rc); EndDeferWindowPos(hdwp); } return TRUE; @@ -219,9 +216,9 @@ static INT_PTR CALLBACK InfobarWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARA rect.right = itemWidth - 1; rect.bottom = itemHeight - 1; FillRect(hdcMem, &rect, g_dat.hInfobarBrush); - if (idat->mwd->m_hbmpAvatarPic && (g_dat.flags & SMF_AVATAR)) { + if (idat->m_hbmpAvatarPic && (g_dat.flags & SMF_AVATAR)) { BITMAP bminfo; - GetObject(idat->mwd->m_hbmpAvatarPic, sizeof(bminfo), &bminfo); + GetObject(idat->m_hbmpAvatarPic, sizeof(bminfo), &bminfo); if (bminfo.bmWidth != 0 && bminfo.bmHeight != 0) { int avatarHeight = itemHeight; int avatarWidth = bminfo.bmWidth * avatarHeight / bminfo.bmHeight; @@ -231,7 +228,7 @@ static INT_PTR CALLBACK InfobarWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARA } AVATARDRAWREQUEST adr = { sizeof(adr) }; - adr.hContact = idat->mwd->m_hContact; + adr.hContact = idat->m_hContact; adr.hTargetDC = hdcMem; adr.rcDraw.right = avatarWidth - 1; adr.rcDraw.bottom = avatarHeight - 1; @@ -249,12 +246,12 @@ static INT_PTR CALLBACK InfobarWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARA return Menu_DrawItem(lParam); case WM_LBUTTONDOWN: - SendMessage(idat->mwd->GetHwnd(), WM_LBUTTONDOWN, wParam, lParam); + SendMessage(idat->GetHwnd(), WM_LBUTTONDOWN, wParam, lParam); return TRUE; case WM_RBUTTONUP: { - HMENU hMenu = Menu_BuildContactMenu(idat->mwd->m_hContact); + HMENU hMenu = Menu_BuildContactMenu(idat->m_hContact); POINT pt; GetCursorPos(&pt); @@ -264,21 +261,17 @@ static INT_PTR CALLBACK InfobarWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARA break; case WM_DESTROY: - if (idat->hXStatusTip != nullptr) { - DestroyWindow(idat->hXStatusTip); - idat->hXStatusTip = nullptr; + if (idat->m_hXStatusTip != nullptr) { + DestroyWindow(idat->m_hXStatusTip); + idat->m_hXStatusTip = nullptr; } - mir_free(idat); } return FALSE; } -InfobarWindowData* CreateInfobar(HWND hParent, CSrmmWindow *dat) +void CSrmmWindow::CreateInfobar() { - InfobarWindowData *idat = (InfobarWindowData*)mir_alloc(sizeof(InfobarWindowData)); - idat->mwd = dat; - idat->hWnd = CreateDialogParam(g_hInst, MAKEINTRESOURCE(IDD_INFOBAR), hParent, InfobarWndProc, (LPARAM)idat); - RichUtil_SubClass(idat->hWnd); - SetWindowPos(idat->hWnd, HWND_TOP, 0, 0, 0, 0, SWP_HIDEWINDOW | SWP_NOSIZE | SWP_NOREPOSITION); - return idat; + m_hwndInfo = CreateDialogParam(g_hInst, MAKEINTRESOURCE(IDD_INFOBAR), m_hwnd, InfobarWndProc, (LPARAM)this); + RichUtil_SubClass(m_hwndInfo); + SetWindowPos(m_hwndInfo, HWND_TOP, 0, 0, 0, 0, SWP_HIDEWINDOW | SWP_NOSIZE | SWP_NOREPOSITION); } -- cgit v1.2.3