diff options
Diffstat (limited to 'protocols/Weather/src/weather_mwin.cpp')
-rw-r--r-- | protocols/Weather/src/weather_mwin.cpp | 70 |
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); } |