summaryrefslogtreecommitdiff
path: root/plugins/SendScreenshotPlus/src/mir_icolib.cpp
diff options
context:
space:
mode:
authorVadim Dashevskiy <watcherhd@gmail.com>2012-07-23 13:49:28 +0000
committerVadim Dashevskiy <watcherhd@gmail.com>2012-07-23 13:49:28 +0000
commita9580df150d799246eaecbf3c1fb5cecf9f8ab49 (patch)
treece046b1cd432d65718c9f6af80521d533ce6d4ca /plugins/SendScreenshotPlus/src/mir_icolib.cpp
parent60338d55bb73d0c45b6e092703c4bb88a3c49755 (diff)
SecureIM, SeenPlugin, SendSS, Sessions: changed folder structure
git-svn-id: http://svn.miranda-ng.org/main/trunk@1122 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c
Diffstat (limited to 'plugins/SendScreenshotPlus/src/mir_icolib.cpp')
-rw-r--r--plugins/SendScreenshotPlus/src/mir_icolib.cpp382
1 files changed, 382 insertions, 0 deletions
diff --git a/plugins/SendScreenshotPlus/src/mir_icolib.cpp b/plugins/SendScreenshotPlus/src/mir_icolib.cpp
new file mode 100644
index 0000000000..33718faf98
--- /dev/null
+++ b/plugins/SendScreenshotPlus/src/mir_icolib.cpp
@@ -0,0 +1,382 @@
+/*
+
+Miranda IM: the free IM client for Microsoft* Windows*
+
+Copyright 2000-2009 Miranda ICQ/IM project,
+all portions of this codebase are copyrighted to the people
+listed in contributors.txt.
+
+This program is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 2
+of the License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+aLONG with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+this file is taken from UserinfoEx plugin and support UserinfoEx icon pack !!!!
+
+*/
+
+#include "global.h"
+
+
+typedef struct _ICODESC
+{
+ LPSTR pszName;
+ LPSTR pszDesc;
+ LPSTR pszSection;
+ BOOL bfromIconPack;
+ WORD idResource;
+ BYTE size;
+} ICODESC;
+
+HICON ghDefIcon = NULL;
+
+//IDI_PLUG_MAIN must be the first icon from Plugin.dll, all other icon must be IDI_PLUG_MAIN+n
+static ICODESC icoDesc[] =
+{
+ // common
+ { ICO_PLUG_SSWINDOW1, "Screenshot Icon1", SECT_COMMON, 0, IDI_PLUG_MAIN, -1 },
+ { ICO_PLUG_SSWINDOW2, "Screenshot Icon2", SECT_COMMON, 0, IDI_PLUG_ICON1, 0 },
+ { ICO_PLUG_SSTARGET, "Target Cursor", SECT_COMMON, 0, IDI_PLUG_ICON2, 1 },
+ { ICO_PLUG_SSMONITOR, "Target Desktop", SECT_COMMON, 0, IDI_PLUG_ICON3, 1 },
+ { ICO_PLUG_SSDEFAULT, "Default", SECT_COMMON, 0, IDI_PLUG_DEFAULT, 0 },
+
+ // overlays
+ { ICO_PLUG_OVERLAYON, "overlay on", SECT_OVERLAY, 0, IDI_PLUG_OVERLAYON, 0 },
+ { ICO_PLUG_OVERLAYOFF, "overlay off", SECT_OVERLAY, 0, IDI_PLUG_OVERLAYOFF,0 },
+
+ // dialogs
+// { ICO_DLG_DETAILS, "Details Infobar", SECT_DLG, 1, IDI_DLG_DETAILS, 48 },
+// { ICO_DLG_PHONE, "Phone Infobar", SECT_DLG, 1, IDI_DLG_PHONE, 1 },
+// { ICO_DLG_EMAIL, "E-Mail Infobar", SECT_DLG, 1, IDI_DLG_EMAIL, 1 },
+
+ // button icons
+ { ICO_PLUG_SSHELP, "Help", SECT_BUTTONS, 0, IDI_PLUG_HELP, 0 },
+ { ICO_PLUG_SSFOLDERO, "Open Folder", SECT_BUTTONS, 0, IDI_PLUG_FOLDERO, 0 },
+ { ICO_PLUG_SSDESKOFF, "description off", SECT_BUTTONS, 0, IDI_PLUG_DESKOFF, 0 },
+ { ICO_PLUG_SSDESKON, "description on", SECT_BUTTONS, 0, IDI_PLUG_DESKON, 0 },
+ { ICO_PLUG_SSDELOFF, "delete off", SECT_BUTTONS, 0, IDI_PLUG_DELOFF, 0 },
+ { ICO_PLUG_SSDELON, "delete on", SECT_BUTTONS, 0, IDI_PLUG_DELON, 0 },
+ { ICO_PLUG_ARROWL, "Prev", SECT_BUTTONS, 0, IDI_PLUG_ARROWL, 0 },
+ { ICO_PLUG_ARROWR, "Next", SECT_BUTTONS, 0, IDI_PLUG_ARROWR, 0 },
+
+ { ICO_BTN_UPDATE, "Update", SECT_BUTTONS, 1, IDI_BTN_UPDATE, 0 },
+ { ICO_BTN_OK, "Ok", SECT_BUTTONS, 1, IDI_BTN_OK, 0 },
+ { ICO_BTN_CANCEL, "Cancel", SECT_BUTTONS, 1, IDI_BTN_CLOSE, 0 },
+ { ICO_BTN_APPLY, "Apply", SECT_BUTTONS, 1, IDI_BTN_APPLY, 0 },
+// { ICO_BTN_GOTO, "Goto", SECT_BUTTONS, 1, IDI_BTN_GOTO, 0 },
+// { ICO_BTN_EMAIL, "e-mail", SECT_BUTTONS, 1, IDI_BTN_EMAIL, 0 },
+// { ICO_BTN_DOWNARROW, "Down arrow", SECT_BUTTONS, 1, IDI_BTN_DOWNARROW, 0 },
+// { ICO_BTN_ADD, "Add", SECT_BUTTONS, 1, IDI_BTN_ADD, 0 },
+ { ICO_BTN_EDIT, "Edit", SECT_BUTTONS, 1, IDI_BTN_EDIT, 0 },
+// { ICO_BTN_DELETE, "Delete", SECT_BUTTONS, 1, IDI_BTN_DELETE, 0 },
+// { ICO_BTN_SEARCH, "Search", SECT_BUTTONS, 1, IDI_SEARCH, 0 },
+// { ICO_BTN_YES, "Yes", SECT_BUTTONS, 1, IDI_BTN_YES, 0 },
+// { ICO_BTN_NO, "No", SECT_BUTTONS, 1, IDI_BTN_NO, 0 },
+// { ICO_BTN_IGNORE, "Ignore", SECT_BUTTONS, 1, IDI_BTN_IGNORE, 0 },
+
+};
+
+/**
+ * This function finds the default iconpack file and return its path.
+ *
+ * @param - none
+ *
+ * @return This function returns the relative path to an existing icon pack.
+ **/
+LPTSTR IcoLib_GetDefaultIconFileName()
+{
+ static LPTSTR path[] = {
+ _T("Icons\\uinfoex_icons.dll"),
+ _T("Plugins\\uinfoex_icons.dll"),
+ _T("Customize\\Icons\\uinfoex_icons.dll")
+ };
+ TCHAR absolute[MAX_PATH];
+
+ for (INT i = 0; i < SIZEOF(path); i++)
+ {
+ CallService(MS_UTILS_PATHTOABSOLUTET, (WPARAM)path[i], (LPARAM)absolute);
+ if (PathFileExists(absolute))
+ {
+ return path[i];
+ }
+ }
+ return NULL;
+}
+
+/**
+ * This function checks the version of an iconpack.
+ * If the icon pack's version differs from the desired one,
+ * dialog with a warning is displayed.
+ *
+ * @param szIconPack - This is the path to the icon pack.
+ * It can be absolute or relative.
+ *
+ * @return nothing
+ **/
+static VOID IcoLib_CheckIconPackVersion(LPTSTR szIconPack)
+{
+ //if (DB::Setting::GetByte(SET_ICONS_CHECKFILEVERSION, TRUE))
+ if (DBGetContactSettingByte(NULL,MODNAME,SET_ICONS_CHECKFILEVERSION, TRUE))
+ {
+ if (szIconPack)
+ {
+ TCHAR szAbsolutePath[MAX_PATH];
+ HMODULE hIconDll;
+
+ CallService(MS_UTILS_PATHTOABSOLUTET, (WPARAM)szIconPack, (LPARAM)szAbsolutePath);
+
+ hIconDll = LoadLibrary(szAbsolutePath);
+ if (hIconDll)
+ {
+ CHAR szFileVersion[64];
+
+ if (!LoadStringA(hIconDll, IDS_ICOPACKVERSION, szFileVersion, sizeof(szFileVersion)) ||
+ mir_strcmp(szFileVersion, "__UserInfoEx_IconPack_1.2__"))
+ {
+ MsgErr(NULL, LPGENT("Warning: Your current IconPack's version differs from the one UserInfoEx is designed for.\nSome icons may not be displayed correctly"));
+ }
+ FreeLibrary(hIconDll);
+ }
+ }
+ else
+ {
+ MsgErr(NULL, LPGENT("Warning: No IconPack found in one of the following directories: 'customize\\icons', 'icons' or 'plugins'!"));
+ }
+ }
+}
+
+/**
+ * Returns a icon, identified by a name
+ *
+ * @param pszIcon - name of the icon
+ *
+ * @return: HICON if the icon is loaded, NULL otherwise
+ **/
+HICON IcoLib_GetIcon(LPCSTR pszIcon, bool big)
+{
+ return (pszIcon) ? (HICON)CallService(MS_SKIN2_GETICON, (WPARAM)big, (LPARAM) pszIcon) : NULL;
+}
+
+/**
+ * Returns a icon, identified by a name
+ *
+ * @param hIconItem - this is the pointer to an IconItem structure in icolib.
+ *
+ * @return: HICON if the icon is loaded, NULL otherwise
+ **/
+HICON IcoLib_GetIconByHandle(HANDLE hIconItem, bool big)
+{
+ return (HICON)CallService(MS_SKIN2_GETICONBYHANDLE, (WPARAM)big, (LPARAM) hIconItem);
+}
+
+/**
+ * Set the icon of each control in the list
+ *
+ * @param hDlg - handle to the dialog control, that owns the controls
+ * @param pCtrl - list to all controls and its icon names
+ * @param numCtrls - number of elements in the pCtrl list
+ *
+ * @return nothing
+ **/
+VOID IcoLib_SetCtrlIcons(HWND hDlg, const ICONCTRL* pCtrl, BYTE numCtrls)
+{
+ HICON hIcon;
+ BYTE i;
+ HWND hCtrl;
+
+ for (i = 0; i < numCtrls; i++)
+ {
+ hIcon = IcoLib_GetIcon(pCtrl[i].pszIcon);
+ if (pCtrl[i].idCtrl)
+ {
+ hCtrl = GetDlgItem(hDlg, pCtrl[i].idCtrl);
+ switch (pCtrl[i].Message)
+ {
+ case STM_SETICON:
+ case STM_SETIMAGE:
+ {
+ ShowWindow(hCtrl, hIcon ? SW_SHOW : SW_HIDE);
+ }
+ case BM_SETIMAGE:
+ {
+ SendMessage(hCtrl, pCtrl[i].Message, IMAGE_ICON, (LPARAM) hIcon);
+ }
+ }
+ }
+ else
+ {
+ SendMessage(hDlg, pCtrl[i].Message, ICON_BIG, (LPARAM) hIcon);
+ }
+ }
+}
+
+/**
+ * This function manually registers a single icon from the default icon library.
+ *
+ * @param szIconID - This is the uniquely identifying string for an icon.
+ * This string is the setting name in the database and should
+ * only use ASCII characters.
+ * @param szDescription - This is the description displayed in the options dialog.
+ * @param szSection - This is the subsection, where the icon is organized in the options dialog.
+ * @param szDefaultFile - This is the validated path to the default icon file.
+ * @param idIcon - This is the ResourceID of the icon in the default file.
+ * @param Size - This is the desired size of the icon to load.
+ * 0: default size for small icons (16x16)
+ * 1: default size for normal icons (32x32)
+ * @param hDefIcon - This is the default icon to use if the default icon
+ * file does not exist and no custom icon is set up in the config.
+ *
+ * @return This function returns the HANDLE of the icon item.
+ **/
+static HANDLE IcoLib_RegisterIconHandleEx(LPSTR szIconID, LPSTR szDescription, LPSTR szSection, LPTSTR szDefaultFile, INT idIcon, INT Size, HICON hDefIcon)
+{
+ HANDLE hIconHandle = NULL;
+
+ if (szIconID && szDescription && szSection)
+ {
+ SKINICONDESC sid;
+
+ ZeroMemory(&sid, sizeof(sid));
+ sid.cbSize = sizeof(sid);
+ sid.flags = SIDF_ALL_TCHAR;
+ sid.pszName = szIconID;
+ sid.ptszDescription = mir_a2t(szDescription);
+ sid.ptszSection = mir_a2t(szSection);
+
+ if (sid.ptszDescription && sid.ptszSection)
+ {
+ switch (Size)
+ {
+ // small and big icons
+ case -1:
+ {
+ sid.cx = sid.cy = 0;
+ break;
+ }
+ // small icons (16x16)
+ case 0:
+ {
+ sid.cx = GetSystemMetrics(SM_CXSMICON);
+ sid.cy = GetSystemMetrics(SM_CYSMICON);
+ break;
+ }
+ // normal icons (32x32)
+ case 1:
+ {
+ sid.cx = GetSystemMetrics(SM_CXICON);
+ sid.cy = GetSystemMetrics(SM_CYICON);
+ break;
+ }
+ // custom icon size
+ default:
+ {
+ sid.cx = sid.cy = Size;
+ break;
+ }
+ }
+
+ sid.ptszDefaultFile = szDefaultFile;
+ if (sid.ptszDefaultFile && sid.ptszDefaultFile[0])
+ {
+ if(idIcon < IDI_FIRST_ICON || idIcon > IDI_LASTICON) {
+ // Icon from Plugin.dll
+ sid.iDefaultIndex = idIcon - IDI_PLUG_MAIN;
+ }
+ else{
+ //UserinfoEx Icon pack
+ sid.iDefaultIndex = ICONINDEX(idIcon);
+ }
+ }
+ else
+ {
+ sid.hDefaultIcon = hDefIcon;
+ sid.iDefaultIndex = -1;
+ }
+ hIconHandle = Skin_AddIcon(&sid);
+ }
+ mir_freeAndNil(sid.ptszDescription);
+ mir_freeAndNil(sid.ptszSection);
+ }
+ return hIconHandle;
+}
+
+/**
+ * This function manually registers a single icon from the default icon library.
+ *
+ * @param szIconID - This is the uniquely identifying string for an icon.
+ * This string is the setting name in the database and should
+ * only use ASCII characters.
+ * @param szDescription - This is the description displayed in the options dialog.
+ * @param szSection - This is the subsection, where the icon is organized in the options dialog.
+ * @param idIcon - This is the ResourceID of the icon in the default file
+ * @param Size - This is the desired size of the icon to load.
+ * 0: default size for small icons (16x16)
+ * 1: default size for normal icons (32x32)
+ *
+ * @return This function returns the HANDLE of the icon item.
+ **/
+HANDLE IcoLib_RegisterIconHandle(LPSTR szIconID, LPSTR szDescription, LPSTR szSection, INT idIcon, INT Size)
+{
+ return IcoLib_RegisterIconHandleEx(szIconID, szDescription, szSection, IcoLib_GetDefaultIconFileName(), idIcon, Size, ghDefIcon);
+}
+
+/**
+ * This function manually registers a single icon from the default icon library.
+ *
+ * @param szIconID - This is the uniquely identifying string for an icon.
+ * This string is the setting name in the database and should
+ * only use ASCII characters.
+ * @param szDescription - This is the description displayed in the options dialog.
+ * @param szSection - This is the subsection, where the icon is organized in the options dialog.
+ * @param idIcon - This is the ResourceID of the icon in the default file
+ * @param Size - This is the desired size of the icon to load.
+ * 0: default size for small icons (16x16)
+ * 1: default size for normal icons (32x32)
+ *
+ * @return This function returns the HICON of the icon itself.
+ **/
+HICON IcoLib_RegisterIcon(LPSTR szIconID, LPSTR szDescription, LPSTR szSection, INT idIcon, INT Size)
+{
+ return IcoLib_GetIconByHandle(IcoLib_RegisterIconHandle(szIconID, szDescription, szSection, idIcon, Size));
+}
+
+/**
+ * Add default icons to the skin library or load customized icons
+ *
+ * @param none
+ *
+ * @return nothing
+ **/
+VOID IcoLib_LoadModule()
+{
+ LPTSTR szDefaultFile;
+ LPTSTR szPluginFile;
+ INT_PTR i;
+
+ // search for default icon file
+ szDefaultFile = IcoLib_GetDefaultIconFileName();
+ IcoLib_CheckIconPackVersion(szDefaultFile);
+
+ szPluginFile = _T("Plugins\\")_T(__FILENAME);
+
+ // load default icon if required
+ ghDefIcon = (HICON)LoadImage(hInst, MAKEINTRESOURCE(IDI_PLUG_DEFAULT), IMAGE_ICON,
+ GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), 0);
+
+ for (i = 0; i < SIZEOF(icoDesc); i++)
+ {
+ IcoLib_RegisterIconHandleEx(
+ icoDesc[i].pszName, icoDesc[i].pszDesc, icoDesc[i].pszSection,
+ icoDesc[i].bfromIconPack ? szDefaultFile : szPluginFile, icoDesc[i].idResource, icoDesc[i].size, ghDefIcon);
+ }
+}
+