3 * ShellView Background Context Menu (shv_bg_cm)
5 * Copyright 1999 Juergen Schmied <juergen.schmied@metronet.de>
10 #include "debugtools.h"
13 #include "wine/obj_base.h"
14 #include "wine/obj_contextmenu.h"
15 #include "wine/obj_shellbrowser.h"
16 #include "wine/obj_shellextinit.h"
18 #include "shell32_main.h"
20 DEFAULT_DEBUG_CHANNEL(shell
)
22 /**************************************************************************
23 * IContextMenu Implementation
26 { ICOM_VTABLE(IContextMenu
)* lpvtbl
;
31 static struct ICOM_VTABLE(IContextMenu
) cmvt
;
33 /**************************************************************************
34 * ISVBgCm_Constructor()
36 IContextMenu
*ISvBgCm_Constructor(void)
40 cm
= (BgCmImpl
*)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY
,sizeof(BgCmImpl
));
44 TRACE("(%p)->()\n",cm
);
46 return (IContextMenu
*)cm
;
49 /**************************************************************************
50 * ISVBgCm_fnQueryInterface
52 static HRESULT WINAPI
ISVBgCm_fnQueryInterface(IContextMenu
*iface
, REFIID riid
, LPVOID
*ppvObj
)
54 ICOM_THIS(BgCmImpl
, iface
);
57 WINE_StringFromCLSID((LPCLSID
)riid
,xriid
);
59 TRACE("(%p)->(\n\tIID:\t%s,%p)\n",This
,xriid
,ppvObj
);
63 if(IsEqualIID(riid
, &IID_IUnknown
)) /*IUnknown*/
67 else if(IsEqualIID(riid
, &IID_IContextMenu
)) /*IContextMenu*/
71 else if(IsEqualIID(riid
, &IID_IShellExtInit
)) /*IShellExtInit*/
73 FIXME("-- LPSHELLEXTINIT pointer requested\n");
78 IUnknown_AddRef((IUnknown
*)*ppvObj
);
79 TRACE("-- Interface: (%p)->(%p)\n",ppvObj
,*ppvObj
);
82 TRACE("-- Interface: E_NOINTERFACE\n");
86 /**************************************************************************
89 static ULONG WINAPI
ISVBgCm_fnAddRef(IContextMenu
*iface
)
91 ICOM_THIS(BgCmImpl
, iface
);
93 TRACE("(%p)->(count=%lu)\n",This
, This
->ref
);
99 /**************************************************************************
102 static ULONG WINAPI
ISVBgCm_fnRelease(IContextMenu
*iface
)
104 ICOM_THIS(BgCmImpl
, iface
);
106 TRACE("(%p)->()\n",This
);
111 { TRACE(" destroying IContextMenu(%p)\n",This
);
113 HeapFree(GetProcessHeap(),0,This
);
119 /**************************************************************************
120 * ISVBgCm_fnQueryContextMenu()
123 static HRESULT WINAPI
ISVBgCm_fnQueryContextMenu(
134 ICOM_THIS(BgCmImpl
, iface
);
136 TRACE("(%p)->(hmenu=%x indexmenu=%x cmdfirst=%x cmdlast=%x flags=%x )\n",This
, hMenu
, indexMenu
, idCmdFirst
, idCmdLast
, uFlags
);
138 hMyMenu
= LoadMenuA(shell32_hInstance
, "MENU_002");
140 idMax
= Shell_MergeMenus (hMenu
, GetSubMenu(hMyMenu
,0), indexMenu
, idCmdFirst
, idCmdLast
, MM_SUBMENUSHAVEIDS
);
142 DestroyMenu(hMyMenu
);
144 return ResultFromShort(idMax
- idCmdFirst
);
147 /**************************************************************************
148 * ISVBgCm_fnInvokeCommand()
150 static HRESULT WINAPI
ISVBgCm_fnInvokeCommand(
152 LPCMINVOKECOMMANDINFO lpcmi
)
154 ICOM_THIS(BgCmImpl
, iface
);
160 TRACE("(%p)->(invcom=%p verb=%p wnd=%x)\n",This
,lpcmi
,lpcmi
->lpVerb
, lpcmi
->hwnd
);
162 /* get the active IShellView */
163 lpSB
= (LPSHELLBROWSER
)SendMessageA(lpcmi
->hwnd
, CWM_GETISHELLBROWSER
,0,0);
164 IShellBrowser_QueryActiveShellView(lpSB
, &lpSV
);
165 IShellView_GetWindow(lpSV
, &hWndSV
);
167 if(HIWORD(lpcmi
->lpVerb
))
169 TRACE("%s\n",lpcmi
->lpVerb
);
171 if (! strcmp(lpcmi
->lpVerb
,CMDSTR_NEWFOLDER
))
173 FIXME("%s not implemented\n",lpcmi
->lpVerb
);
175 else if (! strcmp(lpcmi
->lpVerb
,CMDSTR_VIEWLIST
))
177 SendMessageA(hWndSV
, WM_COMMAND
, MAKEWPARAM(FCIDM_SHVIEW_LISTVIEW
,0),0 );
179 else if (! strcmp(lpcmi
->lpVerb
,CMDSTR_VIEWDETAILS
))
181 SendMessageA(hWndSV
, WM_COMMAND
, MAKEWPARAM(FCIDM_SHVIEW_REPORTVIEW
,0),0 );
185 FIXME("please report: unknown verb %s\n",lpcmi
->lpVerb
);
190 switch(LOWORD(lpcmi
->lpVerb
))
192 case FCIDM_SHVIEW_BIGICON
:
193 SendMessageA(hWndSV
, WM_COMMAND
, MAKEWPARAM(FCIDM_SHVIEW_BIGICON
,0),0 );
196 case FCIDM_SHVIEW_SMALLICON
:
197 SendMessageA(hWndSV
, WM_COMMAND
, MAKEWPARAM(FCIDM_SHVIEW_SMALLICON
,0),0 );
199 case FCIDM_SHVIEW_LISTVIEW
:
200 SendMessageA(hWndSV
, WM_COMMAND
, MAKEWPARAM(FCIDM_SHVIEW_LISTVIEW
,0),0 );
203 case FCIDM_SHVIEW_REPORTVIEW
:
204 SendMessageA(hWndSV
, WM_COMMAND
, MAKEWPARAM(FCIDM_SHVIEW_REPORTVIEW
,0),0 );
209 IShellView_Release(lpSV
); /* QueryActiveShellView does AddRef*/
213 /**************************************************************************
214 * ISVBgCm_fnGetCommandString()
217 * the values given by the common dialogs are not documented. so we put some magic
218 * words in it and will see, where we get these verbs back...
220 static HRESULT WINAPI
ISVBgCm_fnGetCommandString(
228 ICOM_THIS(BgCmImpl
, iface
);
230 TRACE("(%p)->(idcom=%x flags=%x %p name=%p len=%x)\n",This
, idCommand
, uFlags
, lpReserved
, lpszName
, uMaxNameLen
);
232 /* test the existance of the menu items, the file dialog enables
233 the buttons according to this */
234 if (uFlags
== GCS_VALIDATEA
)
236 /* idCommmand's are 7febd910, 7febd920, 7febd930 */
237 if ((idCommand
==0x7febd910) ||
238 (idCommand
==0x7febd920) ||
239 (idCommand
==0x7febd930))
245 FIXME("unknown command string\n");
249 /**************************************************************************
250 * ISVBgCm_fnHandleMenuMsg()
252 static HRESULT WINAPI
ISVBgCm_fnHandleMenuMsg(
258 ICOM_THIS(BgCmImpl
, iface
);
260 FIXME("(%p)->(msg=%x wp=%x lp=%lx)\n",This
, uMsg
, wParam
, lParam
);
265 /**************************************************************************
266 * IContextMenu VTable
269 static struct ICOM_VTABLE(IContextMenu
) cmvt
=
271 ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
272 ISVBgCm_fnQueryInterface
,
275 ISVBgCm_fnQueryContextMenu
,
276 ISVBgCm_fnInvokeCommand
,
277 ISVBgCm_fnGetCommandString
,
278 ISVBgCm_fnHandleMenuMsg
,
279 (void *) 0xdeadbabe /* just paranoia (IContextMenu3) */