summaryrefslogtreecommitdiff
path: root/plugins
diff options
context:
space:
mode:
Diffstat (limited to 'plugins')
-rw-r--r--plugins/Clist_modern/src/modern_clistmod.cpp9
-rw-r--r--plugins/Clist_modern/src/modern_skinopt.cpp410
2 files changed, 158 insertions, 261 deletions
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;
}