From f673f034c2fef25e932a12fbd5e2772f90c75e6d Mon Sep 17 00:00:00 2001 From: George Hazan Date: Sun, 17 Jun 2012 12:44:02 +0000 Subject: Clist_mw & Clist_modern renamed git-svn-id: http://svn.miranda-ng.org/main/trunk@455 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- plugins/Clist_modern/modern_framesmenu.cpp | 216 +++++++++++++++++++++++++++++ 1 file changed, 216 insertions(+) create mode 100644 plugins/Clist_modern/modern_framesmenu.cpp (limited to 'plugins/Clist_modern/modern_framesmenu.cpp') diff --git a/plugins/Clist_modern/modern_framesmenu.cpp b/plugins/Clist_modern/modern_framesmenu.cpp new file mode 100644 index 0000000000..766adf4974 --- /dev/null +++ b/plugins/Clist_modern/modern_framesmenu.cpp @@ -0,0 +1,216 @@ +#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; + fmep=(lpFrameMenuExecParam)CallService(MO_MENUITEMGETOWNERDATA,wParam,lParam); + if (fmep!=NULL){ + if (fmep->szServiceName!=NULL){ + mir_free_and_nill(fmep->szServiceName); + }; + mir_free_and_nill(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 +boolean 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); +}; -- cgit v1.2.3