diff options
Diffstat (limited to 'plugins/tabsrmm/API/m_popup2.h')
-rw-r--r-- | plugins/tabsrmm/API/m_popup2.h | 457 |
1 files changed, 457 insertions, 0 deletions
diff --git a/plugins/tabsrmm/API/m_popup2.h b/plugins/tabsrmm/API/m_popup2.h new file mode 100644 index 0000000000..cec5abb395 --- /dev/null +++ b/plugins/tabsrmm/API/m_popup2.h @@ -0,0 +1,457 @@ +/*
+===============================================================================
+ PopUp plugin
+Plugin Name: PopUp
+Plugin authors: Luca Santarelli aka hrk (hrk@users.sourceforge.net)
+ Victor Pavlychko (nullbie@gmail.com)
+===============================================================================
+The purpose of this plugin is to give developers a common "platform/interface"
+to show PopUps. It is born from the source code of NewStatusNotify, another
+plugin I've made.
+
+Remember that users *must* have this plugin enabled, or they won't get any
+popup. Write this in the requirements, do whatever you wish ;-)... but tell
+them!
+===============================================================================
+*/
+
+#ifndef __m_popup2_h__
+#define __m_popup2_h__
+
+#ifndef POPUP_VERSION
+#define POPUP_VERSION 0x02010003
+#endif
+
+#define MAX_ACTIONTITLE 64
+
+// Popup Action flags
+#define PAF_ENABLED 0x01 // Actions is enabled. You may store one global
+ // action set and toggle some items depending on
+ // popup you are requesting
+
+// ANSI Popup Action
+typedef struct
+{
+ int cbSize; // sizeof(POPUPACTION)
+ HICON lchIcon; // Action Icon
+ // Action title text. Please use module name as prefix
+ // (e.g. "Popup Plus/Dismiss Popup") and don't translate
+ // This is translates by popup. So no unicode.
+ char lpzTitle[MAX_ACTIONTITLE];
+ DWORD flags; // set of PAF_* flags
+ WPARAM wParam; // wParam for UM_POPUPACTION message
+ LPARAM lParam; // lParam for UM_POPUPACTION message
+} POPUPACTION, *LPPOPUPACTION;
+
+///////////////////////////////////////////////////////////////
+// Few notes about new popup api
+// ------------------------------
+// When you call any ADD service, Popup Plus creates local
+// copy of POPUPDATA2 to store the data. Each time you call
+// CHANGE service this data is updated. You can use the
+// MS_POPUP_GETDATA2 service to retrieve Popups's copy of
+// this data, however you MUST NOT chahge that.
+
+// unicode or ansi mode
+#define PU2_ANSI 0x00
+#define PU2_UNICODE 0x01
+#if defined(UNICODE) || defined(_UNICODE)
+ #define PU2_TCHAR PU2_UNICODE
+#else
+ #define PU2_TCHAR PU2_ANSI
+#endif
+
+#define PU2_CUSTOM_POPUP 0x02
+
+typedef struct
+{
+ // general
+ int cbSize;
+ DWORD flags;
+
+ // miranda bindings
+ HANDLE lchContact;
+ HANDLE lchEvent;
+
+ // style
+ COLORREF colorBack;
+ COLORREF colorText;
+ HICON lchIcon;
+ HBITMAP hbmAvatar;
+ union
+ {
+ char *lpzTitle;
+ WCHAR *lpwzTitle;
+ TCHAR *lptzTitle;
+ };
+ union
+ {
+ char *lpzText;
+ WCHAR *lpwzText;
+ TCHAR *lptzText;
+ };
+ char *lpzSkin;
+
+ // time and timeout
+ int iSeconds;
+ DWORD dwTimestamp;
+
+ // plugin bindings
+ WNDPROC PluginWindowProc;
+ void *PluginData;
+
+ // popup actions
+ int actionCount;
+ POPUPACTION *lpActions;
+
+ HANDLE lchNotification;
+} POPUPDATA2, *LPPOPUPDATA2;
+
+// Creates new popup
+// wParam = (WPARAM)(LPPOPUPDATA2)&ppd2
+// lParam = (LPARAM)(combination of APF_* flags)
+// returns: window handle (if requested) of NULL on success, -1 on failure.
+#define MS_POPUP_ADDPOPUP2 "Popup/AddPopup2"
+
+// Update an popup
+// wParam = (WPARAM)(HWND)hwndPopup
+// lParam = (LPARAM)(LPPOPUPDATA2)&ppd2
+// returns: zero on success, -1 on failure.
+#define MS_POPUP_CHANGEPOPUP2 "Popup/ChangePopup2"
+
+// deprecatet !!! (only for compatibility) use new POPUPDATA2 struct for extended popup
+// Extended popup data V2 (ansi version)
+typedef struct
+{
+ HANDLE lchContact;
+ HICON lchIcon;
+ union
+ {
+ char lptzContactName[MAX_CONTACTNAME];
+ char lpzContactName[MAX_CONTACTNAME];
+ };
+ union
+ {
+ char lptzText[MAX_SECONDLINE];
+ char lpzText[MAX_SECONDLINE];
+ };
+ COLORREF colorBack;
+ COLORREF colorText;
+ WNDPROC PluginWindowProc;
+ void * PluginData;
+ int iSeconds; // Custom delay time in seconds. -1 means "forever", 0 means "default time".
+ // +2.1.0.3
+ // you *MUST* pass APF_NEWDATA flag for services to take care of this data
+ HANDLE hNotification; // Reserved. Must be NULL
+ int actionCount; // Amount of passed actions
+ LPPOPUPACTION lpActions; // Popup Actions
+ int cbSize; // struct size for future
+} POPUPDATAEX_V2, *LPPOPUPDATAEX_V2;
+
+// deprecatet !!! (only for compatibility) use new POPUPDATA2 struct for extended popup
+// Unicode version of POPUPDATAEX_V2
+typedef struct
+{
+ HANDLE lchContact;
+ HICON lchIcon;
+ union
+ {
+ WCHAR lptzContactName[MAX_CONTACTNAME];
+ WCHAR lpwzContactName[MAX_CONTACTNAME];
+ };
+ union
+ {
+ WCHAR lptzText[MAX_SECONDLINE];
+ WCHAR lpwzText[MAX_SECONDLINE];
+ };
+ COLORREF colorBack;
+ COLORREF colorText;
+ WNDPROC PluginWindowProc;
+ void * PluginData;
+ int iSeconds;
+ // +2.1.0.3
+ // you *MUST* pass APF_NEWDATA flag for services to take care of this data
+ HANDLE hNotification;
+ int actionCount;
+ LPPOPUPACTION lpActions;
+ int cbSize;
+} POPUPDATAW_V2, *LPPOPUPDATAW_V2;
+
+// deprecatet !!! (only for compatibility) use new POPUPDATA2 struct for extended popup
+#if defined(_UNICODE) || defined(UNICODE)
+ typedef POPUPDATAW_V2 POPUPDATAT_V2;
+ typedef LPPOPUPDATAW_V2 LPPOPUPDATAT_V2;
+#else
+ typedef POPUPDATAEX_V2 POPUPDATAT_V2;
+ typedef LPPOPUPDATAEX_V2 LPPOPUPDATAT_V2;
+#endif
+
+/* PopUp/AddPopup
+Creates, adds and shows a popup, given a (valid) POPUPDATA structure pointer.
+
+wParam = (WPARAM)(*POPUPDATA)PopUpDataAddress
+lParam = 0
+
+Returns: > 0 on success, 0 if creation went bad, -1 if the PopUpData contained unacceptable values.
+NOTE: it returns -1 if the PopUpData was not valid, if there were already too many popups, if the module was disabled.
+Otherwise, it can return anything else...
+
+Popup Plus 2.0.4.0+
+You may pass additional creation flags via lParam:
+/* core define see miranda\include\m_popup.h
+ APF_RETURN_HWND ....... function returns handle to newly created popup window (however this calls are a bit slower)
+ APF_CUSTOM_POPUP ...... new popup is created in hidden state and doesn't obey to popup queue rules.
+ you may control it via UM_* messages and custom window procedure (not yet implemented)
+additional APF_ flags */
+#define APF_NO_HISTORY 0x04 //do not log this popup in popup history (useful for previews)
+#define APF_NO_POPUP 0x08 //do not show popup. this is useful if you want popup yo be stored in history only
+#define APF_NEWDATA 0x10 //deprecatet!! only for use with old POPUPDATAEX_V2/POPUPDATAW_V2 structs
+
+//overload function for POPUPDATAEX_V2/POPUPDATAW_V2
+static INT_PTR __inline PUAddPopUpEx(POPUPDATAEX_V2* ppdp) {
+ return CallService(MS_POPUP_ADDPOPUPEX, (WPARAM)ppdp,0);
+}
+
+static INT_PTR __inline PUAddPopUpW(POPUPDATAW_V2* ppdp) {
+ return CallService(MS_POPUP_ADDPOPUPW, (WPARAM)ppdp,0);
+}
+
+static int __inline PUChange(HWND hWndPopUp, POPUPDATAEX_V2 *newData) {
+ return (int)CallService(MS_POPUP_CHANGE, (WPARAM)hWndPopUp, (LPARAM)newData);
+}
+
+#define MS_POPUP_CHANGEW "PopUp/ChangeW"
+static int __inline PUChangeW(HWND hWndPopUp, POPUPDATAW_V2 *newData) {
+ return (int)CallService(MS_POPUP_CHANGEW, (WPARAM)hWndPopUp, (LPARAM)newData);
+}
+
+/* UM_CHANGEPOPUP
+This message is triggered by Change/ChangeText services. You also may post it directly, but make
+sure you allocate memory via miranda mmi, because popup will mir_free() them!
+
+wParam = Modification type
+lParam = value of type defined by wParam
+
+/* core define see miranda\include\m_popup.h
+#define CPT_TEXT 1 // lParam = (char *)text
+#define CPT_TEXTW 2 // lParam = (WCHAR *)text
+#define CPT_TITLE 3 // lParam = (char *)title
+#define CPT_TITLEW 4 // lParam = (WCHAR *)title
+#define CPT_DATA 5 // lParam = (POPUPDATA *)data
+#define CPT_DATAEX 6 // lParam = (POPUPDATAEX *) or (POPUPDATAEX_V2 *)data see CPT_DATA2
+#define CPT_DATAW 7 // lParam = (POPUPDATAW *) or (POPUPDATAW_V2 *)data see CPT_DATA2
+additional CPT_ flag*/
+#define CPT_DATA2 8 // lParam = (POPUPDATA2 *)data -- see m_popup2.h for details
+
+/* UM_POPUPACTION
+Popup Action notification
+
+wParam and lParam are specified bu plugin.
+wParam = 0 is used buy popup plus internally!
+*/
+
+#define UM_POPUPACTION (WM_USER + 0x0204)
+
+/* UM_POPUPMODIFYACTIONICON
+Modify Popup Action Icon
+
+wParam = (WPARAM)(LPPOPUPACTIONID)&actionId
+lParam = (LPARAM)(HICON)hIcon
+*/
+
+typedef struct
+{
+ WPARAM wParam;
+ LPARAM lParam;
+} POPUPACTIONID, *LPPOPUPACTIONID;
+
+#define UM_POPUPMODIFYACTIONICON (WM_USER + 0x0205)
+static int __inline PUModifyActionIcon(HWND hWndPopUp, WPARAM wParam, LPARAM lParam, HICON hIcon) {
+ POPUPACTIONID actionId = { wParam, lParam };
+ return (int)SendMessage(hWndPopUp, UM_POPUPMODIFYACTIONICON, (WPARAM)&actionId, (LPARAM)hIcon);
+}
+
+/* UM_POPUPSHOW
+Show popup at position
+
+wParam = x
+lParam = y
+*/
+#define UM_POPUPSHOW (WM_USER + 0x0206)
+
+/* PopUp/RegisterActions
+Registers your action in popup action list
+
+wParam = (WPARAM)(LPPOPUPACTION)actions
+lParam = (LPARAM)actionCount
+
+Returns: 0 if the popup was shown, -1 in case of failure.
+*/
+#define MS_POPUP_REGISTERACTIONS "PopUp/RegisterActions"
+
+static int __inline PURegisterActions(LPPOPUPACTION actions, int count) {
+ return (int)CallService(MS_POPUP_REGISTERACTIONS, (WPARAM)actions,(LPARAM)count);
+}
+
+/* PopUp/RegisterNotification
+Registers your action in popup action list
+
+wParam = (WPARAM)(LPPOPUPNOTIFICATION)info
+lParam = 0
+
+Returns: handle of registered notification or sero on failure
+*/
+#define MS_POPUP_REGISTERNOTIFICATION "PopUp/RegisterNotification"
+
+#define PNAF_CALLBACK 0x01
+
+#define POPUP_ACTION_NOTHING "Do nothing"
+#define POPUP_ACTION_DISMISS "Dismiss popup"
+
+typedef struct
+{
+ char lpzTitle[64];
+ DWORD dwFlags;
+ union
+ {
+ struct
+ {
+ char lpzLModule[MAXMODULELABELLENGTH];
+ char lpzLSetting[MAXMODULELABELLENGTH];
+ DBVARIANT dbvLData;
+ char lpzRModule[MAXMODULELABELLENGTH];
+ char lpzRSetting[MAXMODULELABELLENGTH];
+ DBVARIANT dbvRData;
+ };
+ struct
+ {
+ DWORD dwCookie;
+ void (*pfnCallback)(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam, DWORD cookie);
+ };
+ };
+} POPUPNOTIFYACTION, *LPPOPUPNOTIFYACTION;
+
+#define PNF_CONTACT 0x01
+
+typedef struct
+{
+ int cbSize;
+ DWORD dwFlags; // set of PNF_* flags
+ char lpzGroup[MAXMODULELABELLENGTH];
+ char lpzName[MAXMODULELABELLENGTH];
+ HICON lchIcon; // this will be registered in icolib
+ COLORREF colorBack; // this will be registered in fontservice
+ COLORREF colorText; // this will be registered in fontservice
+ int iSeconds; // default timeout
+ int actionCount; // for unified action comboboxes
+ LPPOPUPNOTIFYACTION lpActions;
+ char *lpzLAction;
+ char *lpzRAction;
+ char *pszReserved1; // reserved for future use
+ DLGPROC pfnReserved2; // reserved for future use
+} POPUPNOTIFICATION, *LPPOPUPNOTIFICATION;
+
+static HANDLE __inline PURegisterNotification(LPPOPUPNOTIFICATION notification) {
+ return (HANDLE)CallService(MS_POPUP_REGISTERNOTIFICATION, (WPARAM)notification, (LPARAM)0);
+}
+
+/* PopUp/UnhookEventAsync
+Using of "UnhookEvent" inside PluginWindowProc in conjunction with HookEventMessage
+may cause deadlocks. Use this service instead. It will queue event unhook into main
+thread and notify you when everything has finished.
+
+Deadlock scenario:
+ 1. Event is fired with NotifyEventHooks in the main thread
+ 2. Miranda core calls EnterCriticalSection(csHooks) and starts notifications
+ 3. You decide to unhook event, therefore call UnhookEvent
+ 4. Miranda core *INSIDE YOUR THREAD* calls EnterCriticalSection(csHooks) and
+ waits for main thread to finish processing
+ 5. Main thread calls SendMessage(hwnd, ...) to notify your window
+ 6. Your window's thread is busy waiting for main thread to leave critical section
+ 7. deadlock....
+
+wParam = (WPARAM)(HWND)hwndPopup
+lParam = (LPARAM)(HANDLE)hEvent
+
+Returns: 0 if everything gone ok. -1 if service was not found (and unsafe unhook was performed)
+*/
+
+#define MS_POPUP_UNHOOKEVENTASYNC "PopUp/UnhookEventAsync"
+
+/* UM_POPUPUNHOOKCOMPLETE
+Modify Popup Action Icon
+
+wParam = 0
+lParam = (LPARAM)(HANDLE)hEventUnhooked
+*/
+#define UM_POPUPUNHOOKCOMPLETE (WM_USER + 0x0206)
+
+static int __inline PUUnhookEventAsync(HWND hwndPopup, HANDLE hEvent) {
+ if (ServiceExists(MS_POPUP_UNHOOKEVENTASYNC))
+ return (int)CallService(MS_POPUP_UNHOOKEVENTASYNC, (WPARAM)hwndPopup,(LPARAM)hEvent);
+
+ // old popup plugins: unhook service not found
+ UnhookEvent(hEvent);
+ PostMessage(hwndPopup, UM_POPUPUNHOOKCOMPLETE, 0, (LPARAM)hEvent);
+ return 0;
+}
+
+/* PopUp/GetStatus
+Returns 1 when popups are showen and 0 when not
+wParam = 0
+lParam = 0
+*/
+#define MS_POPUP_GETSTATUS "PopUp/GetStatus"
+
+#ifdef __cplusplus
+/* PopUp/RegisterVfx
+Register new animation (fade in/out) effect
+wParam = 0
+lParam = (LPARAM)(char *)vfx_name
+*/
+
+#define MS_POPUP_REGISTERVFX "PopUp/RegisterVfx"
+
+/* PopUp/Vfx/<vfx_name>
+Define this service to create vfx instance
+wParam = 0
+lParam = 0
+return = (int)(IPopupPlusEffect *)vfx
+*/
+
+#define MS_POPUP_CREATEVFX "PopUp/Vfx/"
+
+class IPopupPlusEffect
+{
+public:
+ virtual void beginEffect(int w, int h, int alpha0, int alpha1, int frameCount) = 0;
+ virtual void beginFrame(int frame) = 0;
+ virtual int getPixelAlpha(int x, int y) = 0;
+ virtual void endFrame() = 0;
+ virtual void endEffect() = 0;
+ virtual void destroy() = 0;
+};
+#endif // __cplusplus
+
+
+/* PopUp/ShowMessage
+This is mainly for developers.
+Shows a warning message in a PopUp. It's useful if you need a "MessageBox" like function, but you don't want a modal
+window (which will interfere with a DialogProcedure. MessageBox steals focus and control, this one not.
+
+wParam = (char *)lpzMessage
+lParam = 0;
+
+Returns: 0 if the popup was shown, -1 in case of failure.
+
+/* core define see miranda\include\m_popup.h
+#define SM_WARNING 0x01 //Triangle icon.
+#define SM_NOTIFY 0x02 //Exclamation mark icon.
+additional SM_ flags */
+#define SM_ERROR 0x03 //Cross icon.
+#ifndef MS_POPUP_SHOWMESSAGE
+#define MS_POPUP_SHOWMESSAGE "PopUp/ShowMessage"
+#define MS_POPUP_SHOWMESSAGEW "PopUp/ShowMessageW"
+#endif
+
+#endif // __m_popup2_h__
|