From cb4a46e7fbe62d788e66ed6121c717a2d22a4d7c Mon Sep 17 00:00:00 2001 From: watcherhd Date: Thu, 21 Apr 2011 14:14:52 +0000 Subject: svn.miranda.im is moving to a new home! git-svn-id: http://miranda-plugins.googlecode.com/svn/trunk@7 e753b5eb-9565-29b2-b5c5-2cc6f99dfbcb --- fingerprint_mod/include/m_utils.h | 325 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 325 insertions(+) create mode 100644 fingerprint_mod/include/m_utils.h (limited to 'fingerprint_mod/include/m_utils.h') diff --git a/fingerprint_mod/include/m_utils.h b/fingerprint_mod/include/m_utils.h new file mode 100644 index 0000000..b247535 --- /dev/null +++ b/fingerprint_mod/include/m_utils.h @@ -0,0 +1,325 @@ +/* + +Miranda IM: the free IM client for Microsoft* Windows* + +Copyright 2000-2003 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. +*/ + +#ifndef M_UTILS_H__ +#define M_UTILS_H__ 1 + +#include + +//this entire module is v0.1.0.1+ +//this module cannot be redefined by a plugin, because it's not useful for it +//to be possible +//There are some more utility services in the database for dealing with time +//and simple string scrambling, but they are very db-orientated + +/* Opens a URL in the user's default web browser v0.1.0.1+ +wParam=bOpenInNewWindow +lParam=(LPARAM)(const char*)szUrl +returns 0 always +bOpenInNewWindow should be zero to open the URL in the browser window the user +last used, or nonzero to open in a new browser window. If there's no browser +running, one will be opened to show the URL. +*/ +#define MS_UTILS_OPENURL "Utils/OpenURL" + +/* Resizes a dialog by calling a custom routine to move the individual +controls v0.1.0.1+ +wParam=0 +lParam=(LPARAM)(UTILRESIZEDIALOG*)&urd +Returns 0 on success, or nonzero on failure +Does not support dialogtemplateex dialog boxes, and will return failure if you +try to resize one +The dialog itself should have been resized prior to calling this service +pfnResizer is called once for each control in the dialog +pfnResizer should return a combination of one rd_anchorx_ and one rd_anchory +constant +*/ +typedef struct { + int cbSize; + UINT wId; //control ID + RECT rcItem; //original control rectangle, relative to dialog + //modify in-place to specify the new position + SIZE dlgOriginalSize; //size of dialog client area in template + SIZE dlgNewSize; //current size of dialog client area +} UTILRESIZECONTROL; +typedef int (*DIALOGRESIZERPROC)(HWND hwndDlg,LPARAM lParam,UTILRESIZECONTROL *urc); +typedef struct { + int cbSize; + HWND hwndDlg; + HINSTANCE hInstance; //module containing the dialog template + LPCSTR lpTemplate; //dialog template + LPARAM lParam; //caller-defined + DIALOGRESIZERPROC pfnResizer; +} UTILRESIZEDIALOG; +#define RD_ANCHORX_CUSTOM 0 //function did everything required to the x axis, do no more processing +#define RD_ANCHORX_LEFT 0 //move the control to keep it constant distance from the left edge of the dialog +#define RD_ANCHORX_RIGHT 1 //move the control to keep it constant distance from the right edge of the dialog +#define RD_ANCHORX_WIDTH 2 //size the control to keep it constant distance from both edges of the dialog +#define RD_ANCHORX_CENTRE 4 //move the control to keep it constant distance from the centre of the dialog +#define RD_ANCHORY_CUSTOM 0 +#define RD_ANCHORY_TOP 0 +#define RD_ANCHORY_BOTTOM 8 +#define RD_ANCHORY_HEIGHT 16 +#define RD_ANCHORY_CENTRE 32 +#define MS_UTILS_RESIZEDIALOG "Utils/ResizeDialog" + +/* Gets the name of a country given its number v0.1.2.0+ +wParam=countryId +lParam=0 +Returns a pointer to the string containing the country name on success, +or NULL on failure +*/ +#define MS_UTILS_GETCOUNTRYBYNUMBER "Utils/GetCountryByNumber" + +/* Gets the full list of country IDs v0.1.2.0+ +wParam=(WPARAM)(int*)piCount +lParam=(LPARAM)(struct CountryListEntry**)ppList +Returns 0 always +Neither wParam nor lParam can be NULL. +The list is sorted alphabetically by country name, on the assumption that it's +quicker to search numbers out of order than it is to search names out of order +*/ +struct CountryListEntry { + int id; + const char *szName; +}; +#define MS_UTILS_GETCOUNTRYLIST "Utils/GetCountryList" + +/******************************* Window lists *******************************/ + +//allocate a window list v0.1.0.1+ +//wParam=lParam=0 +//returns a handle to the new window list +#define MS_UTILS_ALLOCWINDOWLIST "Utils/AllocWindowList" + +//adds a window to the specified window list v0.1.0.1+ +//wParam=0 +//lParam=(LPARAM)(WINDOWLISTENTRY*)&wle +//returns 0 on success, nonzero on failure +typedef struct { + HANDLE hList; + HWND hwnd; + HANDLE hContact; +} WINDOWLISTENTRY; +#define MS_UTILS_ADDTOWINDOWLIST "Utils/AddToWindowList" +__inline static int WindowList_Add(HANDLE hList,HWND hwnd,HANDLE hContact) { + WINDOWLISTENTRY wle; + wle.hList=hList; wle.hwnd=hwnd; wle.hContact=hContact; + return CallService(MS_UTILS_ADDTOWINDOWLIST,0,(LPARAM)&wle); +} +//removes a window from the specified window list v0.1.0.1+ +//wParam=(WPARAM)(HANDLE)hList +//lParam=(LPARAM)(HWND)hwnd +//returns 0 on success, nonzero on failure +#define MS_UTILS_REMOVEFROMWINDOWLIST "Utils/RemoveFromWindowList" +__inline static int WindowList_Remove(HANDLE hList,HWND hwnd) { + return CallService(MS_UTILS_REMOVEFROMWINDOWLIST,(WPARAM)hList,(LPARAM)hwnd); +} + +//finds a window given the hContact v0.1.0.1+ +//wParam=(WPARAM)(HANDLE)hList +//lParam=(WPARAM)(HANDLE)hContact +//returns the window handle on success, or NULL on failure +#define MS_UTILS_FINDWINDOWINLIST "Utils/FindWindowInList" +__inline static HWND WindowList_Find(HANDLE hList,HANDLE hContact) { + return (HWND)CallService(MS_UTILS_FINDWINDOWINLIST,(WPARAM)hList,(LPARAM)hContact); +} + +//broadcasts a message to all windows in a list v0.1.0.1+ +//wParam=(WPARAM)(HANDLE)hList +//lParam=(LPARAM)(MSG*)&msg +//returns 0 on success, nonzero on failure +//Only msg.message, msg.wParam and msg.lParam are used +#define MS_UTILS_BROADCASTTOWINDOWLIST "Utils/BroadcastToWindowList" +__inline static int WindowList_Broadcast(HANDLE hList,UINT message,WPARAM wParam,LPARAM lParam) { + MSG msg; + msg.message=message; msg.wParam=wParam; msg.lParam=lParam; + return CallService(MS_UTILS_BROADCASTTOWINDOWLIST,(WPARAM)hList,(LPARAM)&msg); +} + +/* + Description: Broadcast a message to all windows in the given list using PostMessage() + Version: 0.3.0.0+ + Inline helper: WindowList_BroadcastAsync + + wParam=(WPARAM)(HANDLE)hList + lParam=(LPARAM)(MSG*)&msg + + Returns 0 on success, nonzero on failure, this service does not fail, even if PostMessage() fails for whatever reason + +*/ +#define MS_UTILS_BROADCASTTOWINDOWLIST_ASYNC "Utils/BroadcastToWindowListAsync" + +__inline static int WindowList_BroadcastAsync(HANDLE hList,UINT message,WPARAM wParam,LPARAM lParam) { + MSG msg; + msg.message=message; msg.wParam=wParam; msg.lParam=lParam; + return CallService(MS_UTILS_BROADCASTTOWINDOWLIST_ASYNC,(WPARAM)hList,(LPARAM)&msg); +} + +/***************************** Hyperlink windows ********************************/ + +//there aren't any services here, because you don't need them. +#define WNDCLASS_HYPERLINK _T("Hyperlink") +//the control will obey the SS_LEFT (0), SS_CENTER (1), and SS_RIGHT (2) styles +//the control will send STN_CLICKED via WM_COMMAND when the link itself is clicked + +// Use this in a SendMessage to set the color of the url when control is enabled +// wParam=DWORD color +// lParam=not used +#define HLK_SETENABLECOLOUR (WM_USER+101) // added in 0.3.1 +// Use this in a SendMessage to set the color of the url when control is disabled +// wParam=DWORD color +// lParam=not used +#define HLK_SETDISABLECOLOUR (WM_USER+102) // added in 0.3.1 + +/***************************** Window Position Saving ***************************/ + +//saves the position of a window in the database v0.1.1.0+ +//wParam=0 +//lParam=(LPARAM)(SAVEWINDOWPOS*)&swp +//returns 0 on success, nonzero on failure +typedef struct { + HWND hwnd; + HANDLE hContact; + const char *szModule; //module name to store the setting in + const char *szNamePrefix; //text to prefix on "x", "width", etc, to form setting names +} SAVEWINDOWPOS; +#define MS_UTILS_SAVEWINDOWPOSITION "Utils/SaveWindowPos" +__inline static int Utils_SaveWindowPosition(HWND hwnd,HANDLE hContact,const char *szModule,const char *szNamePrefix) { + SAVEWINDOWPOS swp; + swp.hwnd=hwnd; swp.hContact=hContact; swp.szModule=szModule; swp.szNamePrefix=szNamePrefix; + return CallService(MS_UTILS_SAVEWINDOWPOSITION,0,(LPARAM)&swp); +} + +//restores the position of a window from the database v0.1.1.0+ +//wParam=flags +//lParam=(LPARAM)(SAVEWINDOWPOS*)&swp +//returns 0 on success, nonzero on failure +//if no position was found in the database, the function returns 1 and does +//nothing +//the NoSize version won't use stored size information: the window is left the +//same size. +#define RWPF_NOSIZE 1 //don't use stored size info: leave dialog same size +#define RWPF_NOMOVE 2 //don't use stored position +#define RWPF_NOACTIVATE 4 //show but don't activate v0.3.3.0+ +#define MS_UTILS_RESTOREWINDOWPOSITION "Utils/RestoreWindowPos" +__inline static int Utils_RestoreWindowPosition(HWND hwnd,HANDLE hContact,const char *szModule,const char *szNamePrefix) { + SAVEWINDOWPOS swp; + swp.hwnd=hwnd; swp.hContact=hContact; swp.szModule=szModule; swp.szNamePrefix=szNamePrefix; + return CallService(MS_UTILS_RESTOREWINDOWPOSITION,0,(LPARAM)&swp); +} +__inline static int Utils_RestoreWindowPositionNoSize(HWND hwnd,HANDLE hContact,const char *szModule,const char *szNamePrefix) { + SAVEWINDOWPOS swp; + swp.hwnd=hwnd; swp.hContact=hContact; swp.szModule=szModule; swp.szNamePrefix=szNamePrefix; + return CallService(MS_UTILS_RESTOREWINDOWPOSITION,RWPF_NOSIZE,(LPARAM)&swp); +} +__inline static int Utils_RestoreWindowPositionNoMove(HWND hwnd,HANDLE hContact,const char *szModule,const char *szNamePrefix) { + SAVEWINDOWPOS swp; + swp.hwnd=hwnd; swp.hContact=hContact; swp.szModule=szModule; swp.szNamePrefix=szNamePrefix; + return CallService(MS_UTILS_RESTOREWINDOWPOSITION,RWPF_NOMOVE,(LPARAM)&swp); +} + +/************************ Colour Picker Control (0.1.2.1+) **********************/ + +#define WNDCLASS_COLOURPICKER _T("ColourPicker") + +#define CPM_SETCOLOUR 0x1000 //lParam=new colour +#define CPM_GETCOLOUR 0x1001 //returns colour +#define CPM_SETDEFAULTCOLOUR 0x1002 //lParam=default, used as first custom colour +#define CPM_GETDEFAULTCOLOUR 0x1003 //returns colour +#define CPN_COLOURCHANGED 1 //sent through WM_COMMAND + +/***************************** Bitmap Filter (0.1.2.1+) *************************/ + +//Loads a bitmap v0.1.2.1+ +//wParam=0 +//lParam=(LPARAM)(const char*)filename +//returns HBITMAP on success, NULL on failure +//This function uses OleLoadPicturePath() so supports BMP, JPEG and GIF. It may +//support PNG on future versions of Windows (or XP for that matter) +//For speed, if the file extension is .bmp or .rle it'll use LoadImage() so as +//to avoid the big lag loading OLE. +//Remember to DeleteObject() when you're done +#define MS_UTILS_LOADBITMAP "Utils/LoadBitmap" + +//Gets the filter strings for use in the open file dialog v0.1.2.1+ +//wParam=cbLengthOfBuffer +//lParam=(LPARAM)(char*)pszBuffer +//Returns 0 on success, nonzero on failure +//See the MSDN under OPENFILENAME.lpstrFilter for the formatting +//An 'All Bitmaps' item is always first and 'All Files' is last. +//The returned string is already translated. +#define MS_UTILS_GETBITMAPFILTERSTRINGS "Utils/GetBitmapFilterStrings" + +//Saves a path to a relative path (from the miranda directory) +//Only saves as a relative path if the file is in the miranda directory (or +//sub directory) +//wParam=(WPARAM)(char*)pszPath +//lParam=(LPARAM)(char*)pszNewPath +//pszPath is the path to convert and pszNewPath is the buffer that +//the new path is copied too. pszNewPath MUST be of the size MAX_PATH. +//Returns numbers of chars copied. +#define MS_UTILS_PATHTORELATIVE "Utils/PathToRelative" + +//Saves a path to a absolute path (from the miranda directory) +//wParam=(WPARAM)(char*)pszPath +//lParam=(LPARAM)(char*)pszNewPath +//pszPath is the path to convert and pszNewPath is the buffer that +//the new path is copied too. pszNewPath MUST be of the size MAX_PATH. +//Returns numbers of chars copied. +#define MS_UTILS_PATHTOABSOLUTE "Utils/PathToAbsolute" + +// Added in 0.4.0.1 +// Here are some string wrappers that are more safe than the win32 versions + +static __inline int mir_snprintf(char *buffer, size_t count, const char* fmt, ...) { + va_list va; + int len; + + va_start(va, fmt); + len = _vsnprintf(buffer, count-1, fmt, va); + va_end(va); + buffer[count-1] = 0; + return len; +} + +static __inline int mir_sntprintf(TCHAR *buffer, size_t count, const TCHAR* fmt, ...) { + va_list va; + int len; + + va_start(va, fmt); + len = _vsntprintf(buffer, count-1, fmt, va); + va_end(va); + buffer[count-1] = 0; + return len; +} + +static __inline int mir_vsnprintf(char *buffer, size_t count, const char* fmt, va_list va) { + int len; + + len = _vsnprintf(buffer, count-1, fmt, va); + buffer[count-1] = 0; + return len; +} + +#endif // M_UTILS_H__ -- cgit v1.2.3