summaryrefslogtreecommitdiff
path: root/protocols/Weather/src/weather_mwin.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'protocols/Weather/src/weather_mwin.cpp')
-rw-r--r--protocols/Weather/src/weather_mwin.cpp70
1 files changed, 36 insertions, 34 deletions
diff --git a/protocols/Weather/src/weather_mwin.cpp b/protocols/Weather/src/weather_mwin.cpp
index da08be4ce1..cb1e33849b 100644
--- a/protocols/Weather/src/weather_mwin.cpp
+++ b/protocols/Weather/src/weather_mwin.cpp
@@ -27,6 +27,7 @@ HGENMENU hMwinMenu;
struct MWinDataType
{
+ CWeatherProto *ppro;
MCONTACT hContact;
HWND hAvt;
BOOL haveAvatar;
@@ -44,7 +45,8 @@ static LRESULT CALLBACK wndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lPara
SetWindowLongPtr(hwnd, GWLP_USERDATA, (LONG_PTR)data);
data->hContact = (DWORD_PTR)((LPCREATESTRUCT)lParam)->lpCreateParams;
- data->hAvt = CreateWindow(AVATAR_CONTROL_CLASS, TEXT(""), WS_CHILD, 0, 0, opt.AvatarSize, opt.AvatarSize, hwnd, 0, g_plugin.getInst(), 0);
+ data->ppro = (CWeatherProto *)Proto_GetContactInstance(data->hContact);
+ data->hAvt = CreateWindow(AVATAR_CONTROL_CLASS, TEXT(""), WS_CHILD, 0, 0, data->ppro->opt.AvatarSize, data->ppro->opt.AvatarSize, hwnd, 0, g_plugin.getInst(), 0);
if (data->hAvt)
SendMessage(data->hAvt, AVATAR_SETCONTACT, 0, (LPARAM)data->hContact);
break;
@@ -97,7 +99,7 @@ static LRESULT CALLBACK wndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lPara
break;
case WM_LBUTTONDBLCLK:
- BriefInfo(data->hContact, 0);
+ data->ppro->BriefInfo(data->hContact, 0);
break;
case WM_COMMAND: //Needed by the contact's context menu
@@ -124,7 +126,7 @@ static LRESULT CALLBACK wndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lPara
break;
case WM_REDRAWWIN:
- if (data->hAvt != nullptr) MoveWindow(data->hAvt, 0, 0, opt.AvatarSize, opt.AvatarSize, TRUE);
+ if (data->hAvt != nullptr) MoveWindow(data->hAvt, 0, 0, data->ppro->opt.AvatarSize, data->ppro->opt.AvatarSize, TRUE);
RedrawWindow(hwnd, nullptr, nullptr, RDW_INVALIDATE | RDW_UPDATENOW);
break;
@@ -133,16 +135,16 @@ static LRESULT CALLBACK wndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lPara
RECT r, rc;
if (GetUpdateRect(hwnd, &r, FALSE)) {
- int picSize = opt.AvatarSize;
+ int picSize = data->ppro->opt.AvatarSize;
HICON hIcon = nullptr;
if (!data->haveAvatar) {
picSize = GetSystemMetrics(SM_CXICON);
- hIcon = GetStatusIconBig(data->hContact);
+ hIcon = data->ppro->GetStatusIconBig(data->hContact);
}
LOGFONT lfnt, lfnt1;
- COLORREF clr = g_plugin.getDword("ColorMwinFrame", GetSysColor(COLOR_3DFACE));
+ COLORREF clr = data->ppro->getDword("ColorMwinFrame", GetSysColor(COLOR_3DFACE));
COLORREF fntc = Font_GetW(_A2W(MODULENAME), LPGENW("Frame Font"), &lfnt);
COLORREF fntc1 = Font_GetW(_A2W(MODULENAME), LPGENW("Frame Title Font"), &lfnt1);
@@ -218,10 +220,17 @@ static LRESULT CALLBACK wndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lPara
return(TRUE);
}
-static void addWindow(MCONTACT hContact)
+void UpdateMwinData(MCONTACT hContact)
+{
+ HWND hwnd = WindowList_Find(hMwinWindowList, hContact);
+ if (hwnd != nullptr)
+ RedrawWindow(hwnd, nullptr, nullptr, RDW_INVALIDATE | RDW_UPDATENOW);
+}
+
+void CWeatherProto::AddFrameWindow(MCONTACT hContact)
{
DBVARIANT dbv;
- if (g_plugin.getWString(hContact, "Nick", &dbv))
+ if (getWString(hContact, "Nick", &dbv))
return;
wchar_t winname[512];
@@ -229,7 +238,7 @@ static void addWindow(MCONTACT hContact)
db_free(&dbv);
HWND hWnd = CreateWindow(L"WeatherFrame", L"", WS_CHILD | WS_VISIBLE,
- 0, 0, 10, 10, g_clistApi.hwndContactList, nullptr, g_plugin.getInst(), (void*)hContact);
+ 0, 0, 10, 10, g_clistApi.hwndContactList, nullptr, g_plugin.getInst(), (void *)hContact);
WindowList_Add(hMwinWindowList, hWnd, hContact);
CLISTFrame Frame = {};
@@ -242,41 +251,34 @@ static void addWindow(MCONTACT hContact)
Frame.height = 32;
int frameID = g_plugin.addFrame(&Frame);
- g_plugin.setDword(hContact, "mwin", frameID);
+ setDword(hContact, "mwin", frameID);
Contact::Hide(hContact);
}
-void removeWindow(MCONTACT hContact)
+void CWeatherProto::RemoveFrameWindow(MCONTACT hContact)
{
- uint32_t frameId = g_plugin.getDword(hContact, "mwin");
+ uint32_t frameId = getDword(hContact, "mwin");
WindowList_Remove(hMwinWindowList, WindowList_Find(hMwinWindowList, hContact));
CallService(MS_CLIST_FRAMES_REMOVEFRAME, frameId, 0);
- g_plugin.setDword(hContact, "mwin", 0);
+ setDword(hContact, "mwin", 0);
Contact::Hide(hContact, false);
}
-void UpdateMwinData(MCONTACT hContact)
+INT_PTR CWeatherProto::Mwin_MenuClicked(WPARAM hContact, LPARAM)
{
- HWND hwnd = WindowList_Find(hMwinWindowList, hContact);
- if (hwnd != nullptr)
- RedrawWindow(hwnd, nullptr, nullptr, RDW_INVALIDATE | RDW_UPDATENOW);
-}
-
-INT_PTR Mwin_MenuClicked(WPARAM wParam, LPARAM)
-{
- BOOL addwnd = WindowList_Find(hMwinWindowList, wParam) == nullptr;
- if (addwnd)
- addWindow(wParam);
+ if (WindowList_Find(hMwinWindowList, hContact))
+ RemoveFrameWindow(hContact);
else
- removeWindow(wParam);
+ AddFrameWindow(hContact);
+
return 0;
}
-int BuildContactMenu(WPARAM wparam, LPARAM)
+int CWeatherProto::BuildContactMenu(MCONTACT hContact)
{
- int flags = g_plugin.getDword(wparam, "mwin") ? CMIF_CHECKED : 0;
+ int flags = getDword(hContact, "mwin") ? CMIF_CHECKED : 0;
Menu_ModifyItem(hMwinMenu, nullptr, INVALID_HANDLE_VALUE, flags);
return 0;
}
@@ -287,7 +289,7 @@ int RedrawFrame(WPARAM, LPARAM)
return 0;
}
-void InitMwin(void)
+void CWeatherProto::InitMwin(void)
{
if (!ServiceExists(MS_CLIST_FRAMES_ADDFRAME))
return;
@@ -337,17 +339,17 @@ void InitMwin(void)
mir_strcpy(fontid.setting, "fnt1");
g_plugin.addFont(&fontid);
- for (auto &hContact : Contacts(MODULENAME))
- if (g_plugin.getDword(hContact, "mwin"))
- addWindow(hContact);
+ for (auto &hContact : AccContacts())
+ if (getDword(hContact, "mwin"))
+ AddFrameWindow(hContact);
hFontHook = HookEvent(ME_FONT_RELOAD, RedrawFrame);
}
-void DestroyMwin(void)
+void CWeatherProto::DestroyMwin(void)
{
- for (auto &hContact : Contacts(MODULENAME)) {
- uint32_t frameId = g_plugin.getDword(hContact, "mwin");
+ for (auto &hContact : AccContacts()) {
+ uint32_t frameId = getDword(hContact, "mwin");
if (frameId)
CallService(MS_CLIST_FRAMES_REMOVEFRAME, frameId, 0);
}