From 8314a38acf2afe72c38a4ffb0a3d2f09baa476c1 Mon Sep 17 00:00:00 2001 From: George Hazan Date: Thu, 20 Jul 2023 12:30:36 +0300 Subject: Clist_Modern: unused services removed --- plugins/Clist_modern/src/modern_clistmod.cpp | 9 - plugins/Clist_modern/src/modern_skinopt.cpp | 410 +++++++++++---------------- 2 files changed, 158 insertions(+), 261 deletions(-) (limited to 'plugins') diff --git a/plugins/Clist_modern/src/modern_clistmod.cpp b/plugins/Clist_modern/src/modern_clistmod.cpp index 08373b20d4..61984a16d9 100644 --- a/plugins/Clist_modern/src/modern_clistmod.cpp +++ b/plugins/Clist_modern/src/modern_clistmod.cpp @@ -137,10 +137,6 @@ HRESULT PreLoadContactListModule() return S_OK; } -INT_PTR SvcActiveSkin(WPARAM wParam, LPARAM lParam); -INT_PTR SvcPreviewSkin(WPARAM wParam, LPARAM lParam); -INT_PTR SvcApplySkin(WPARAM wParam, LPARAM lParam); - HRESULT CluiLoadModule() { InitAwayMsgModule(); @@ -148,11 +144,6 @@ HRESULT CluiLoadModule() HookEvent(ME_SYSTEM_SHUTDOWN, CListMod_ContactListShutdownProc); HookEvent(ME_OPT_INITIALISE, CListOptInit); HookEvent(ME_OPT_INITIALISE, SkinOptInit); - - CreateServiceFunction("ModernSkinSel/Active", SvcActiveSkin); - CreateServiceFunction("ModernSkinSel/Preview", SvcPreviewSkin); - CreateServiceFunction("ModernSkinSel/Apply", SvcApplySkin); - HookEvent(ME_DB_CONTACT_ADDED, ContactAdded); CreateServiceFunction(MS_CLIST_TOGGLEHIDEOFFLINE, ToggleHideOffline); diff --git a/plugins/Clist_modern/src/modern_skinopt.cpp b/plugins/Clist_modern/src/modern_skinopt.cpp index c13f0c8bb8..f634fe9fb7 100644 --- a/plugins/Clist_modern/src/modern_skinopt.cpp +++ b/plugins/Clist_modern/src/modern_skinopt.cpp @@ -37,30 +37,148 @@ struct SkinListData }; HBITMAP hPreviewBitmap = nullptr; -HTREEITEM AddItemToTree(HWND hTree, wchar_t *itemName, void *data); -HTREEITEM AddSkinToListFullName(HWND hwndDlg, wchar_t *fullName); -HTREEITEM AddSkinToList(HWND hwndDlg, wchar_t *path, wchar_t *file); -HTREEITEM FillAvailableSkinList(HWND hwndDlg); -INT_PTR CALLBACK DlgSkinOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam); +static HTREEITEM FindChild(HWND hTree, HTREEITEM Parent, wchar_t *Caption, void *data) +{ + HTREEITEM tmp = nullptr; + if (Parent) + tmp = TreeView_GetChild(hTree, Parent); + else + tmp = TreeView_GetRoot(hTree); -int SkinOptInit(WPARAM wParam, LPARAM) + while (tmp) { + TVITEM tvi; + wchar_t buf[255]; + tvi.hItem = tmp; + tvi.mask = TVIF_TEXT | TVIF_HANDLE; + tvi.pszText = buf; + tvi.cchTextMax = _countof(buf); + TreeView_GetItem(hTree, &tvi); + if (mir_wstrcmpi(Caption, tvi.pszText) == 0) { + if (!data) + return tmp; + + TVITEM tvi2 = { 0 }; + tvi2.hItem = tmp; + tvi2.mask = TVIF_HANDLE | TVIF_PARAM; + TreeView_GetItem(hTree, &tvi2); + SkinListData *sd = (SkinListData *)tvi2.lParam; + if (sd) + if (!mir_wstrcmpi(sd->File, ((SkinListData *)data)->File)) + return tmp; + } + tmp = TreeView_GetNextSibling(hTree, tmp); + } + return tmp; +} + +static HTREEITEM AddItemToTree(HWND hTree, wchar_t *itemName, void *data) { - if (!g_CluiData.fDisableSkinEngine) { - //Tabbed settings - OPTIONSDIALOGPAGE odp = {}; - odp.position = -200000000; - odp.pfnDlgProc = DlgSkinOpts; - odp.pszTemplate = MAKEINTRESOURCEA(IDD_OPT_SKIN); - odp.szGroup.w = LPGENW("Skins"); - odp.szTitle.w = LPGENW("Contact list"); - odp.flags = ODPF_BOLDGROUPS | ODPF_UNICODE; - g_plugin.addOptions(wParam, &odp); + HTREEITEM cItem = nullptr; + // Insert item node + cItem = FindChild(hTree, nullptr, itemName, data); + if (!cItem) { + TVINSERTSTRUCT tvis = {}; + tvis.hInsertAfter = TVI_SORT; + tvis.item.mask = TVIF_PARAM | TVIF_TEXT | TVIF_PARAM; + tvis.item.pszText = itemName; + tvis.item.lParam = (LPARAM)data; + return TreeView_InsertItem(hTree, &tvis); } + + mir_free(data); // need to free otherwise memory leak + return cItem; +} + +HTREEITEM AddSkinToList(HWND hwndDlg, wchar_t *path, wchar_t *file) +{ + wchar_t fullName[MAX_PATH], defskinname[MAX_PATH]; + SkinListData *sd = (SkinListData *)mir_alloc(sizeof(SkinListData)); + if (!sd) + return nullptr; + + if (!file || wcschr(file, '%')) { + mir_snwprintf(sd->File, L"%%Default Skin%%"); + mir_snwprintf(sd->Name, TranslateT("%Default Skin%")); + wcsncpy_s(fullName, TranslateT("Default Skin"), _TRUNCATE); + } + else { + mir_snwprintf(fullName, L"%s\\%s", path, file); + wcsncpy_s(defskinname, file, _TRUNCATE); + wchar_t *p = wcsrchr(defskinname, '.'); if (p) *p = 0; + GetPrivateProfileString(L"Skin_Description_Section", L"Name", defskinname, sd->Name, _countof(sd->Name), fullName); + wcsncpy_s(sd->File, fullName, _TRUNCATE); + } + return AddItemToTree(GetDlgItem(hwndDlg, IDC_TREE1), sd->Name, sd); +} + +static int SearchSkinFiles(HWND hwndDlg, wchar_t *Folder) +{ + wchar_t mask[MAX_PATH]; + mir_snwprintf(mask, L"%s\\*.msf", Folder); + + struct _wfinddata_t fd = {}; + intptr_t hFile = _wfindfirst(mask, &fd); + if (hFile != -1) { + do { + AddSkinToList(hwndDlg, Folder, fd.name); + } while (!_wfindnext(hFile, &fd)); + _findclose(hFile); + } + + mir_snwprintf(mask, L"%s\\*", Folder); + hFile = _wfindfirst(mask, &fd); + + do { + if (fd.attrib & _A_SUBDIR && !(mir_wstrcmpi(fd.name, L".") == 0 || mir_wstrcmpi(fd.name, L"..") == 0)) { //Next level of subfolders + wchar_t path[MAX_PATH]; + mir_snwprintf(path, L"%s\\%s", Folder, fd.name); + SearchSkinFiles(hwndDlg, path); + } + } while (!_wfindnext(hFile, &fd)); + + _findclose(hFile); return 0; } -INT_PTR CALLBACK DlgSkinOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) +static HTREEITEM AddSkinToListFullName(HWND hwndDlg, wchar_t *fullName) +{ + wchar_t path[MAX_PATH] = {}, file[MAX_PATH] = {}; + mir_wstrncpy(path, fullName, _countof(path)); + + wchar_t *buf = path + mir_wstrlen(path); + while (buf > path) { + if (*buf == '\\') { + *buf = '\0'; + break; + } + buf--; + } + buf++; + mir_wstrncpy(file, buf, _countof(file)); + return AddSkinToList(hwndDlg, path, file); +} + +static HTREEITEM FillAvailableSkinList(HWND hwndDlg) +{ + TreeView_DeleteAllItems(GetDlgItem(hwndDlg, IDC_TREE1)); + AddSkinToList(hwndDlg, TranslateT("Default Skin"), L"%Default Skin%"); + int attrib = GetFileAttributes(SkinsFolder); + if (attrib != INVALID_FILE_ATTRIBUTES && (attrib & FILE_ATTRIBUTE_DIRECTORY)) + SearchSkinFiles(hwndDlg, SkinsFolder); + + HTREEITEM res = (HTREEITEM)-1; + wchar_t skinfull[MAX_PATH]; + ptrW skinfile(db_get_wsa(0, SKIN, "SkinFile")); + if (skinfile) { + PathToAbsoluteW(skinfile, skinfull); + res = AddSkinToListFullName(hwndDlg, skinfull); + } + + return res; +} + +static INT_PTR CALLBACK DlgSkinOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) { switch (msg) { case WM_DESTROY: @@ -96,7 +214,7 @@ INT_PTR CALLBACK DlgSkinOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lPara tvi.hItem = hti; tvi.mask = TVIF_HANDLE | TVIF_PARAM; TreeView_GetItem(GetDlgItem(hwndDlg, IDC_TREE1), &tvi); - SkinListData *sd = (SkinListData*)(tvi.lParam); + SkinListData *sd = (SkinListData *)(tvi.lParam); if (!sd) return 0; @@ -132,7 +250,7 @@ INT_PTR CALLBACK DlgSkinOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lPara tvi.hItem = hti; tvi.mask = TVIF_HANDLE | TVIF_PARAM; TreeView_GetItem(GetDlgItem(hwndDlg, IDC_TREE1), &tvi); - SkinListData *sd = (SkinListData*)(tvi.lParam); + SkinListData *sd = (SkinListData *)(tvi.lParam); if (!sd) return 0; @@ -175,7 +293,7 @@ INT_PTR CALLBACK DlgSkinOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lPara if (wParam == IDC_PREVIEW) { // TODO:Draw hPreviewBitmap here HBRUSH hbr = CreateSolidBrush(GetSysColor(COLOR_3DFACE)); - DRAWITEMSTRUCT *dis = (DRAWITEMSTRUCT*)lParam; + DRAWITEMSTRUCT *dis = (DRAWITEMSTRUCT *)lParam; int mWidth = dis->rcItem.right - dis->rcItem.left; int mHeight = dis->rcItem.bottom - dis->rcItem.top; HDC memDC = CreateCompatibleDC(dis->hDC); @@ -200,14 +318,14 @@ INT_PTR CALLBACK DlgSkinOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lPara yScale = (float)wHeight / bmp.bmHeight; xScale = min(xScale, yScale); yScale = xScale; - int dWidth = (int)(xScale*bmp.bmWidth); - int dHeight = (int)(yScale*bmp.bmHeight); - + int dWidth = (int)(xScale * bmp.bmWidth); + int dHeight = (int)(yScale * bmp.bmHeight); + // CalcPosition POINT imgPos = { 0 }; imgPos.x = workRect.left + ((wWidth - dWidth) >> 1); imgPos.y = workRect.top + ((wHeight - dHeight) >> 1); - + // DrawImage DrawAvatarImageWithGDIp(memDC, imgPos.x, imgPos.y, dWidth, dHeight, hPreviewBitmap, 0, 0, bmp.bmWidth, bmp.bmHeight, 8, 255); } @@ -230,7 +348,7 @@ INT_PTR CALLBACK DlgSkinOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lPara break; case IDC_TREE1: - NMTREEVIEW *nmtv = (NMTREEVIEW*)lParam; + NMTREEVIEW *nmtv = (NMTREEVIEW *)lParam; if (nmtv == nullptr) return 0; @@ -241,7 +359,7 @@ INT_PTR CALLBACK DlgSkinOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lPara } if (nmtv->itemNew.lParam) { - SkinListData *sd = (SkinListData*)nmtv->itemNew.lParam; + SkinListData *sd = (SkinListData *)nmtv->itemNew.lParam; wchar_t buf[MAX_PATH]; PathToRelativeW(sd->File, buf); @@ -267,7 +385,7 @@ INT_PTR CALLBACK DlgSkinOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lPara tvi.hItem = hti; tvi.mask = TVIF_HANDLE | TVIF_PARAM; TreeView_GetItem(GetDlgItem(hwndDlg, IDC_TREE1), &tvi); - SkinListData *sd2 = (SkinListData*)(tvi.lParam); + SkinListData *sd2 = (SkinListData *)(tvi.lParam); if (!sd2) return 0; @@ -314,233 +432,21 @@ INT_PTR CALLBACK DlgSkinOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lPara return 0; } -int SearchSkinFiles(HWND hwndDlg, wchar_t *Folder) -{ - wchar_t mask[MAX_PATH]; - mir_snwprintf(mask, L"%s\\*.msf", Folder); - - struct _wfinddata_t fd = {}; - intptr_t hFile = _wfindfirst(mask, &fd); - if (hFile != -1) { - do { - AddSkinToList(hwndDlg, Folder, fd.name); - } while (!_wfindnext(hFile, &fd)); - _findclose(hFile); - } - - mir_snwprintf(mask, L"%s\\*", Folder); - hFile = _wfindfirst(mask, &fd); - - do { - if (fd.attrib & _A_SUBDIR && !(mir_wstrcmpi(fd.name, L".") == 0 || mir_wstrcmpi(fd.name, L"..") == 0)) { //Next level of subfolders - wchar_t path[MAX_PATH]; - mir_snwprintf(path, L"%s\\%s", Folder, fd.name); - SearchSkinFiles(hwndDlg, path); - } - } while (!_wfindnext(hFile, &fd)); - - _findclose(hFile); - return 0; -} - -HTREEITEM FillAvailableSkinList(HWND hwndDlg) -{ - TreeView_DeleteAllItems(GetDlgItem(hwndDlg, IDC_TREE1)); - AddSkinToList(hwndDlg, TranslateT("Default Skin"), L"%Default Skin%"); - int attrib = GetFileAttributes(SkinsFolder); - if (attrib != INVALID_FILE_ATTRIBUTES && (attrib & FILE_ATTRIBUTE_DIRECTORY)) - SearchSkinFiles(hwndDlg, SkinsFolder); - - HTREEITEM res = (HTREEITEM)-1; - wchar_t skinfull[MAX_PATH]; - ptrW skinfile(db_get_wsa(0, SKIN, "SkinFile")); - if (skinfile) { - PathToAbsoluteW(skinfile, skinfull); - res = AddSkinToListFullName(hwndDlg, skinfull); - } - - return res; -} - -HTREEITEM AddSkinToListFullName(HWND hwndDlg, wchar_t *fullName) -{ - wchar_t path[MAX_PATH] = {}, file[MAX_PATH] = {}; - mir_wstrncpy(path, fullName, _countof(path)); - - wchar_t *buf = path + mir_wstrlen(path); - while (buf > path) { - if (*buf == '\\') { - *buf = '\0'; - break; - } - buf--; - } - buf++; - mir_wstrncpy(file, buf, _countof(file)); - return AddSkinToList(hwndDlg, path, file); -} - -HTREEITEM AddSkinToList(HWND hwndDlg, wchar_t *path, wchar_t *file) -{ - wchar_t fullName[MAX_PATH], defskinname[MAX_PATH]; - SkinListData *sd = (SkinListData*)mir_alloc(sizeof(SkinListData)); - if (!sd) - return nullptr; - - if (!file || wcschr(file, '%')) { - mir_snwprintf(sd->File, L"%%Default Skin%%"); - mir_snwprintf(sd->Name, TranslateT("%Default Skin%")); - wcsncpy_s(fullName, TranslateT("Default Skin"), _TRUNCATE); - } - else { - mir_snwprintf(fullName, L"%s\\%s", path, file); - wcsncpy_s(defskinname, file, _TRUNCATE); - wchar_t *p = wcsrchr(defskinname, '.'); if (p) *p = 0; - GetPrivateProfileString(L"Skin_Description_Section", L"Name", defskinname, sd->Name, _countof(sd->Name), fullName); - wcsncpy_s(sd->File, fullName, _TRUNCATE); - } - return AddItemToTree(GetDlgItem(hwndDlg, IDC_TREE1), sd->Name, sd); -} - -HTREEITEM FindChild(HWND hTree, HTREEITEM Parent, wchar_t *Caption, void *data) -{ - HTREEITEM tmp = nullptr; - if (Parent) - tmp = TreeView_GetChild(hTree, Parent); - else - tmp = TreeView_GetRoot(hTree); - - while (tmp) { - TVITEM tvi; - wchar_t buf[255]; - tvi.hItem = tmp; - tvi.mask = TVIF_TEXT | TVIF_HANDLE; - tvi.pszText = buf; - tvi.cchTextMax = _countof(buf); - TreeView_GetItem(hTree, &tvi); - if (mir_wstrcmpi(Caption, tvi.pszText) == 0) { - if (!data) - return tmp; - - TVITEM tvi2 = { 0 }; - tvi2.hItem = tmp; - tvi2.mask = TVIF_HANDLE | TVIF_PARAM; - TreeView_GetItem(hTree, &tvi2); - SkinListData *sd = (SkinListData*)tvi2.lParam; - if (sd) - if (!mir_wstrcmpi(sd->File, ((SkinListData*)data)->File)) - return tmp; - } - tmp = TreeView_GetNextSibling(hTree, tmp); - } - return tmp; -} - -HTREEITEM AddItemToTree(HWND hTree, wchar_t *itemName, void *data) -{ - HTREEITEM cItem = nullptr; - // Insert item node - cItem = FindChild(hTree, nullptr, itemName, data); - if (!cItem) { - TVINSERTSTRUCT tvis = {}; - tvis.hInsertAfter = TVI_SORT; - tvis.item.mask = TVIF_PARAM | TVIF_TEXT | TVIF_PARAM; - tvis.item.pszText = itemName; - tvis.item.lParam = (LPARAM)data; - return TreeView_InsertItem(hTree, &tvis); - } - - mir_free(data); // need to free otherwise memory leak - return cItem; -} - -INT_PTR SvcActiveSkin(WPARAM, LPARAM) -{ - ptrW skinfile(db_get_wsa(0, SKIN, "SkinFile")); - if (skinfile) { - wchar_t skinfull[MAX_PATH]; - PathToAbsoluteW(skinfile, skinfull); - return (INT_PTR)mir_wstrdup(skinfull); - } - - return 0; -} - -INT_PTR SvcApplySkin(WPARAM, LPARAM lParam) -{ - ske_LoadSkinFromIniFile((wchar_t*)lParam, FALSE); - ske_LoadSkinFromDB(); - Clist_Broadcast(INTM_RELOADOPTIONS, 0, 0); - Sync(CLUIFrames_OnClistResize_mod, 0, 0); - ske_RedrawCompleteWindow(); - Sync(CLUIFrames_OnClistResize_mod, 0, 0); - - HWND hwnd = g_clistApi.hwndContactList; - RECT rc = { 0 }; - GetWindowRect(hwnd, &rc); - Sync(CLUIFrames_OnMoving, hwnd, &rc); - - g_bChangingMode = TRUE; - CLUI_UpdateLayeredMode(); - CLUI_ChangeWindowMode(); - SendMessage(g_clistApi.hwndContactTree, WM_SIZE, 0, 0); //forces it to send a cln_listsizechanged - CLUI_ReloadCLUIOptions(); - cliShowHide(true); - g_bChangingMode = FALSE; - - if (g_hCLUIOptionsWnd) { - SendDlgItemMessage(g_hCLUIOptionsWnd, IDC_LEFTMARGINSPIN, UDM_SETPOS, 0, db_get_b(0, "CLUI", "LeftClientMargin", SETTING_LEFTCLIENTMARIGN_DEFAULT)); - SendDlgItemMessage(g_hCLUIOptionsWnd, IDC_RIGHTMARGINSPIN, UDM_SETPOS, 0, db_get_b(0, "CLUI", "RightClientMargin", SETTING_RIGHTCLIENTMARIGN_DEFAULT)); - SendDlgItemMessage(g_hCLUIOptionsWnd, IDC_TOPMARGINSPIN, UDM_SETPOS, 0, db_get_b(0, "CLUI", "TopClientMargin", SETTING_TOPCLIENTMARIGN_DEFAULT)); - SendDlgItemMessage(g_hCLUIOptionsWnd, IDC_BOTTOMMARGINSPIN, UDM_SETPOS, 0, db_get_b(0, "CLUI", "BottomClientMargin", SETTING_BOTTOMCLIENTMARIGN_DEFAULT)); - } - return 0; -} +///////////////////////////////////////////////////////////////////////////////////////// +// Module entry point -INT_PTR SvcPreviewSkin(WPARAM wParam, LPARAM lParam) +int SkinOptInit(WPARAM wParam, LPARAM) { - DRAWITEMSTRUCT *dis = (DRAWITEMSTRUCT*)wParam; - RECT workRect = dis->rcItem; - OffsetRect(&workRect, -workRect.left, -workRect.top); - - if (lParam) { - wchar_t prfn[MAX_PATH] = { 0 }; - wchar_t imfn[MAX_PATH] = { 0 }; - wchar_t skinfolder[MAX_PATH] = { 0 }; - GetPrivateProfileString(L"Skin_Description_Section", L"Preview", L"", imfn, _countof(imfn), (LPCTSTR)lParam); - IniParser::GetSkinFolder((LPCTSTR)lParam, skinfolder); - mir_snwprintf(prfn, L"%s\\%s", skinfolder, imfn); - PathToAbsoluteW(prfn, imfn); - - hPreviewBitmap = ske_LoadGlyphImage(imfn); - if (hPreviewBitmap) { - // variables - BITMAP bmp = { 0 }; - GetObject(hPreviewBitmap, sizeof(BITMAP), &bmp); - - // GetSize - float xScale = 1, yScale = 1; - int wWidth = workRect.right - workRect.left; - int wHeight = workRect.bottom - workRect.top; - if (wWidth < bmp.bmWidth) - xScale = (float)wWidth / bmp.bmWidth; - if (wHeight < bmp.bmHeight) - yScale = (float)wHeight / bmp.bmHeight; - xScale = min(xScale, yScale); - yScale = xScale; - int dWidth = (int)(xScale*bmp.bmWidth); - int dHeight = (int)(yScale*bmp.bmHeight); - - // CalcPosition - POINT imgPos = { 0 }; - imgPos.x = workRect.left + ((wWidth - dWidth) >> 1); - imgPos.y = workRect.top + ((wHeight - dHeight) >> 1); - - // DrawImage - DrawAvatarImageWithGDIp(dis->hDC, imgPos.x, imgPos.y, dWidth, dHeight, hPreviewBitmap, 0, 0, bmp.bmWidth, bmp.bmHeight, 8, 255); - ske_UnloadGlyphImage(hPreviewBitmap); - } + if (!g_CluiData.fDisableSkinEngine) { + //Tabbed settings + OPTIONSDIALOGPAGE odp = {}; + odp.position = -200000000; + odp.pfnDlgProc = DlgSkinOpts; + odp.pszTemplate = MAKEINTRESOURCEA(IDD_OPT_SKIN); + odp.szGroup.w = LPGENW("Skins"); + odp.szTitle.w = LPGENW("Contact list"); + odp.flags = ODPF_BOLDGROUPS | ODPF_UNICODE; + g_plugin.addOptions(wParam, &odp); } - return 0; } -- cgit v1.2.3