diff options
author | Vadim Dashevskiy <watcherhd@gmail.com> | 2012-07-13 07:39:26 +0000 |
---|---|---|
committer | Vadim Dashevskiy <watcherhd@gmail.com> | 2012-07-13 07:39:26 +0000 |
commit | 2ab468f0ac05d1f257fbf8aa6add9512eabbcc20 (patch) | |
tree | 7eb6482089b07994ae77d264e120f3e7772c2fd6 /plugins/Clist_modern/src/modern_framesmenu.cpp | |
parent | ccb4003b6178f4c195350ae29896fdd442412af4 (diff) |
Clist_modern: changed folder structure
git-svn-id: http://svn.miranda-ng.org/main/trunk@939 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c
Diffstat (limited to 'plugins/Clist_modern/src/modern_framesmenu.cpp')
-rw-r--r-- | plugins/Clist_modern/src/modern_framesmenu.cpp | 214 |
1 files changed, 214 insertions, 0 deletions
diff --git a/plugins/Clist_modern/src/modern_framesmenu.cpp b/plugins/Clist_modern/src/modern_framesmenu.cpp new file mode 100644 index 0000000000..950bf122bb --- /dev/null +++ b/plugins/Clist_modern/src/modern_framesmenu.cpp @@ -0,0 +1,214 @@ +#include "hdr/modern_commonheaders.h"
+#include "hdr/modern_commonprototypes.h"
+
+// == == == == == == == == == == == == == Frames
+HANDLE hFrameMenuObject;
+
+//contactmenu exec param(ownerdata)
+//also used in checkservice
+typedef struct{
+ char *szServiceName;
+ int Frameid;
+ INT_PTR param1;
+}
+ FrameMenuExecParam,*lpFrameMenuExecParam;
+
+void FreeAndNil( void **p )
+{
+ if ( p == NULL )
+ return;
+
+ if ( *p != NULL ) {
+ mir_free( *p );
+ *p = NULL;
+} }
+
+static INT_PTR AddContextFrameMenuItem(WPARAM wParam,LPARAM lParam)
+{
+ TMO_MenuItem tmi;
+ CLISTMENUITEM *mi = (CLISTMENUITEM*)lParam;
+ if ( !pcli->pfnConvertMenu(mi, &tmi))
+ return NULL;
+
+ tmi.root = (mi->flags & CMIF_ROOTHANDLE) ? mi->hParentMenu : NULL;
+
+ lpFrameMenuExecParam fmep = (lpFrameMenuExecParam)mir_alloc(sizeof(FrameMenuExecParam));
+ if (fmep == NULL)
+ return 0;
+
+ memset(fmep, 0, sizeof(FrameMenuExecParam));
+ fmep->szServiceName = mir_strdup(mi->pszService);
+ fmep->Frameid = mi->popupPosition;
+ fmep->param1 = (INT_PTR)mi->pszContactOwner;
+ tmi.ownerdata = fmep;
+
+ return CallService(MO_ADDNEWMENUITEM,(WPARAM)hFrameMenuObject,(LPARAM)&tmi);
+}
+
+static INT_PTR RemoveContextFrameMenuItem(WPARAM wParam,LPARAM lParam)
+{
+ lpFrameMenuExecParam fmep = (lpFrameMenuExecParam)CallService(MO_MENUITEMGETOWNERDATA,wParam,lParam);
+ if (fmep != NULL){
+ if (fmep->szServiceName != NULL)
+ mir_free(fmep->szServiceName);
+ mir_free(fmep);
+ }
+
+ if (lParam != 1)
+ CallService(MO_REMOVEMENUITEM,wParam,0);
+
+ return 0;
+}
+
+//called with:
+//wparam - ownerdata
+//lparam - lparam from winproc
+INT_PTR FrameMenuExecService(WPARAM wParam,LPARAM lParam) {
+ lpFrameMenuExecParam fmep = (lpFrameMenuExecParam)wParam;
+ if (fmep == NULL){return(-1);};
+ CallService(fmep->szServiceName,lParam,fmep->param1);
+
+ return(0);
+};
+
+//true - ok,false ignore
+INT_PTR FrameMenuCheckService(WPARAM wParam,LPARAM lParam) {
+
+ PCheckProcParam pcpp = (PCheckProcParam)wParam;
+ lpFrameMenuExecParam fmep;
+ TMO_MenuItem mi;
+
+ if (pcpp == NULL){return(FALSE);};
+ if (CallService(MO_GETMENUITEM,(WPARAM)pcpp->MenuItemHandle,(LPARAM)&mi) == 0)
+ {
+ fmep = (lpFrameMenuExecParam)mi.ownerdata;
+ if (fmep != NULL)
+ {
+ //pcpp->wParam - frameid
+ if (((WPARAM)fmep->Frameid == pcpp->wParam) || fmep->Frameid == -1) return(TRUE);
+ };
+
+ };
+ return(FALSE);
+};
+
+static INT_PTR ContextFrameMenuNotify(WPARAM wParam,LPARAM lParam)
+{
+ NotifyEventHooks(g_CluiData.hEventPreBuildFrameMenu,wParam,lParam);
+ return(0);
+};
+
+static INT_PTR BuildContextFrameMenu(WPARAM wParam,LPARAM lParam)
+{
+ ListParam param = { 0 };
+ param.MenuObjectHandle = hFrameMenuObject;
+ param.wParam = wParam;
+ param.lParam = lParam;
+
+ HMENU hMenu = CreatePopupMenu();
+ //NotifyEventHooks(hPreBuildFrameMenuEvent,wParam,-1);
+ ContextFrameMenuNotify(wParam,-1);
+ CallService(MO_BUILDMENU,(WPARAM)hMenu,(LPARAM)¶m);
+ return (INT_PTR)hMenu;
+}
+
+// == == == == == == == == == == == == == Frames end
+bool InternalGenMenuModule = FALSE;
+
+int MeasureItemProxy(WPARAM wParam,LPARAM lParam) {
+
+ int val;
+ if (InternalGenMenuModule)
+ {
+
+ val = CallService(MS_INT_MENUMEASUREITEM,wParam,lParam);
+ if (val) return(val);
+ };
+ return CallService(MS_CLIST_MENUMEASUREITEM,wParam,lParam);
+
+
+};
+
+
+int DrawItemProxy(WPARAM wParam,LPARAM lParam) {
+ if (InternalGenMenuModule)
+ {
+ int val;
+ val = CallService(MS_INT_MENUDRAWITEM,wParam,lParam);
+ if (val) return(val);
+ }
+ return CallService(MS_CLIST_MENUDRAWITEM,wParam,lParam);
+
+};
+
+
+
+int ProcessCommandProxy(WPARAM wParam,LPARAM lParam) {
+ if (InternalGenMenuModule)
+ {
+ int val;
+ val = CallService(MS_INT_MENUPROCESSCOMMAND,wParam,lParam);
+ if (val) return(val);
+ };
+
+ return CallService(MS_CLIST_MENUPROCESSCOMMAND,wParam,lParam);
+
+};
+
+int ModifyMenuItemProxy(WPARAM wParam,LPARAM lParam) {
+ if (InternalGenMenuModule)
+ {
+ int val;
+ val = CallService(MS_INT_MODIFYMENUITEM,wParam,lParam);
+ if (val) return(val);
+ };
+
+ return CallService(MS_CLIST_MODIFYMENUITEM,wParam,lParam);
+
+};
+
+
+int InitFramesMenus(void)
+{
+ TMenuParam tmp;
+
+ if ( !ServiceExists(MO_REMOVEMENUOBJECT))
+ {
+
+ InitCustomMenus();
+ InternalGenMenuModule = TRUE;
+ };
+
+ if (ServiceExists(MO_REMOVEMENUOBJECT))
+ {
+ CreateServiceFunction("FrameMenuExecService",FrameMenuExecService);
+ CreateServiceFunction("FrameMenuCheckService",FrameMenuCheckService);
+
+ CreateServiceFunction(MS_CLIST_REMOVECONTEXTFRAMEMENUITEM,RemoveContextFrameMenuItem);
+ CreateServiceFunction("CList/AddContextFrameMenuItem",AddContextFrameMenuItem);
+ CreateServiceFunction(MS_CLIST_MENUBUILDFRAMECONTEXT,BuildContextFrameMenu);
+ CreateServiceFunction(MS_CLIST_FRAMEMENUNOTIFY,ContextFrameMenuNotify);
+
+
+ //frame menu object
+ memset(&tmp,0,sizeof(tmp));
+ tmp.cbSize = sizeof(tmp);
+ tmp.CheckService = "FrameMenuCheckService";
+ tmp.ExecService = "FrameMenuExecService";
+ tmp.name = "FrameMenu";
+ hFrameMenuObject = (HANDLE)CallService(MO_CREATENEWMENUOBJECT,0,(LPARAM)&tmp);
+ }
+ return 0;
+}
+int UnitFramesMenu()
+{
+
+ /*
+ if (ServiceExists(MO_REMOVEMENUOBJECT))
+ {
+ CallService(MO_REMOVEMENUOBJECT,hFrameMenuObject,0);
+ if (InternalGenMenuModule){UnitGenMenu();};
+ };
+ */
+ return(0);
+};
|