| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222 | 
							- #include "main.h"
 
- #include "./local_menu.h"
 
- #include "./wasabi.h"
 
- #include "./resource.h"
 
- #include "./navigation.h"
 
- #include "./import.h"
 
- #include "../../General/gen_ml/ml_ipc_0313.h"
 
- #include "../nu/menuHelpers.h"
 
- #include "./ombrowser/browserView.h"
 
- #include "./ombrowser/toolbar.h"
 
- #include "./serviceHelper.h"
 
- #include <ifc_omservice.h>
 
- #define SUBMENU_VIEW			0
 
- #define SUBMENU_SERVICEMNGR		1
 
- #define SUBMENU_NAVIGATION		2
 
- #define SUBMENU_PLUGIN			3
 
- static INT Menu_AddViewContext(HMENU destMenu, HMENU baseMenu, BOOL viewActive)
 
- {
 
- 	if (NULL == destMenu) return 0;
 
- 	HMENU sorceMenu = GetSubMenu(baseMenu, SUBMENU_VIEW);
 
- 	if (NULL == sorceMenu) return 0;
 
- 	INT c = GetMenuItemCount(destMenu);
 
- 	c = MenuHelper_CopyMenu(destMenu, c, sorceMenu);
 
- 	
 
- 	
 
- 	if (FALSE != viewActive)
 
- 	{
 
- 		EnableMenuItem(destMenu, ID_VIEW_OPEN, MF_BYCOMMAND | MF_GRAYED | MF_DISABLED);
 
- 	}
 
- 	else
 
- 	{
 
- 		EnableMenuItem(destMenu, ID_VIEW_OPEN, MF_BYCOMMAND | MF_ENABLED);
 
- 		SetMenuDefaultItem(destMenu, ID_VIEW_OPEN, FALSE);
 
- 	}
 
- 	return c;
 
- }
 
- typedef struct __NAVITEMPAIR
 
- {
 
- 	INT wId;
 
- 	LPCSTR toolItem;
 
- } NAVITEMPAIR;
 
- static INT Menu_AddNavigationContext(HMENU destMenu, HMENU baseMenu)
 
- {
 
- 	if (NULL == destMenu) return 0;
 
- 	HMENU sorceMenu = GetSubMenu(baseMenu, SUBMENU_NAVIGATION);
 
- 	if (NULL == sorceMenu) return 0;
 
- 	INT c = GetMenuItemCount(destMenu);
 
- 	c = MenuHelper_CopyMenu(destMenu, c, sorceMenu);
 
- 	if (0 == c) return c;
 
- 	
 
- 	HWND hView = NULL;
 
- 	Navigation *navigation;
 
- 	if (SUCCEEDED(Plugin_GetNavigation(&navigation)))
 
- 	{
 
- 		hView = navigation->GetActiveView(NULL);
 
- 		navigation->Release();
 
- 	}
 
- 	
 
- 	HWND hToolbar = (NULL != hView) ? BrowserView_GetToolbar(hView) : NULL;
 
- 	if (NULL != hToolbar)
 
- 	{
 
- 		NAVITEMPAIR szItems[] = 
 
- 		{ 
 
- 			{ID_NAVIGATION_BACK, TOOLITEM_BUTTON_BACK},
 
- 			{ID_NAVIGATION_FORWARD, TOOLITEM_BUTTON_FORWARD},
 
- 			{ID_NAVIGATION_HOME, TOOLITEM_BUTTON_HOME},
 
- 			{ID_NAVIGATION_STOP, TOOLITEM_BUTTON_STOP},
 
- 			{ID_NAVIGATION_REFRESH, TOOLITEM_BUTTON_REFRESH},
 
- 		};
 
- 		for (INT i = 0; i < ARRAYSIZE(szItems); i++)
 
- 		{
 
- 			INT index = Toolbar_FindItem(hToolbar, szItems[i].toolItem);
 
- 			if (-1 != index)
 
- 			{
 
- 				BOOL fDisabled = Toolbar_GetItemStyle(hToolbar, MAKEINTRESOURCE(index), TBIS_DISABLED);
 
- 				EnableMenuItem(destMenu, szItems[i].wId, MF_BYCOMMAND | (fDisabled) ? (MF_DISABLED | MF_GRAYED) : (MF_ENABLED));
 
- 			}
 
- 		}
 
- 	}
 
- 	return c;
 
- }
 
- static INT Menu_AddServiceContext(HMENU destMenu, HMENU baseMenu, ifc_omservice *service)
 
- {
 
- 	if (NULL == destMenu || NULL == service) return 0;
 
- 	HMENU sorceMenu = GetSubMenu(baseMenu, SUBMENU_SERVICEMNGR);
 
- 	if (NULL == sorceMenu) return 0;
 
- 	INT origCount = GetMenuItemCount(destMenu);
 
- 	INT c = MenuHelper_CopyMenu(destMenu, origCount, sorceMenu);
 
- 	UINT serviceFlags;
 
- 	if (FAILED(service->GetFlags(&serviceFlags))) serviceFlags = 0;
 
- 	if (0 != ((WDSVCF_ROOT | WDSVCF_SPECIAL) & serviceFlags))
 
- 	{
 
- 		UINT szDisabled[] = {ID_SERVICE_EDIT, ID_SERVICE_DELETE, ID_SERVICE_RELOAD, 
 
- 						ID_SERVICE_LOCATE, ID_SERVICE_EDITEXTERNAL };
 
- 		
 
- 		for (INT i = 0; i < ARRAYSIZE(szDisabled); i++)
 
- 			EnableMenuItem(destMenu, szDisabled[i], MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);
 
- 	}
 
- 	
 
- 	UINT uEnable;
 
- 	
 
- 	uEnable = (S_OK == ImportService_GetFileSupported()) ? MF_ENABLED : (MF_DISABLED | MF_GRAYED);
 
- 	EnableMenuItem(destMenu, ID_SERVICE_IMPORT_FILE, MF_BYCOMMAND | uEnable);
 
- 	uEnable = (S_OK == ImportService_GetUrlSupported()) ? MF_ENABLED : (MF_DISABLED | MF_GRAYED);
 
- 	EnableMenuItem(destMenu, ID_SERVICE_IMPORT_URL, MF_BYCOMMAND | uEnable);
 
- 	
 
- 	return c;
 
- }
 
- static INT Menu_AddPluginContext(HMENU destMenu, HMENU baseMenu, ifc_omservice *service)
 
- {
 
- 	UINT serviceFlags;
 
- 	if (NULL == service || FAILED(service->GetFlags(&serviceFlags))) 
 
- 		serviceFlags = 0;
 
- 	if (NULL == destMenu || NULL == service ||
 
- 		0 == (WDSVCF_ROOT & serviceFlags))
 
- 	{
 
- 		return 0;
 
- 	}
 
- 	HMENU sorceMenu = GetSubMenu(baseMenu, SUBMENU_PLUGIN);
 
- 	if (NULL == sorceMenu) return 0;
 
- 	INT origCount = GetMenuItemCount(destMenu);
 
- 	INT c = MenuHelper_CopyMenu(destMenu, origCount, sorceMenu);
 
- 			
 
- 	return c;
 
- }
 
- static HMENU Menu_GetServiceContext(HMENU baseMenu, ifc_omservice *service)
 
- {
 
- 	HMENU hMenu = CreatePopupMenu();
 
- 	if(NULL == hMenu) return NULL;
 
- 	ifc_omservice *activeService = NULL;
 
- 	Navigation *navigation;
 
- 	if (SUCCEEDED(Plugin_GetNavigation(&navigation)))
 
- 	{
 
- 		navigation->GetActive(&activeService);
 
- 		navigation->Release();
 
- 	}
 
- 	BOOL fActive = (NULL != service && activeService == service);
 
- 	INT c, total;
 
- 	total = Menu_AddViewContext(hMenu, baseMenu, fActive);
 
- 	if (FALSE != fActive)
 
- 	{
 
- 		c = Menu_AddNavigationContext(hMenu, baseMenu);
 
- 		if (0 != c && total > 0 && 0 != MenuHelper_InsertSeparator(hMenu, total))
 
- 			total++;
 
- 		
 
- 		total += c;
 
- 	}
 
- 	if (NULL != service)
 
- 	{
 
- 		c = Menu_AddServiceContext(hMenu, baseMenu, service);
 
- 		if (0 != c && total > 0 && 0 != MenuHelper_InsertSeparator(hMenu, total))
 
- 			total++;
 
- 		
 
- 		total += c;
 
- 		c = Menu_AddPluginContext(hMenu, baseMenu, service);
 
- 		if (0 != c && total > 0 && 0 != MenuHelper_InsertSeparator(hMenu, total))
 
- 			total++;
 
- 		
 
- 		total += c;
 
- 	}
 
- 	
 
- 	if (NULL != activeService)
 
- 		activeService->Release();
 
- 	return hMenu;
 
- }
 
- HMENU Menu_GetMenu(UINT menuKind, ifc_omservice *service)
 
- {
 
- 	HMENU baseMenu = WASABI_API_LOADMENUW(IDR_CONTEXTMENU);
 
- 	if (NULL == baseMenu) 
 
- 		return NULL;
 
- 	switch(menuKind)
 
- 	{
 
- 		case MENU_SERVICECONTEXT:
 
- 			return Menu_GetServiceContext(baseMenu, service);
 
- 	}
 
- 	return NULL;
 
- }
 
- BOOL Menu_ReleaseMenu(HMENU hMenu, UINT menuKind)
 
- {
 
- 	if (NULL == hMenu) return FALSE;
 
- 	switch(menuKind)
 
- 	{
 
- 		case MENU_SERVICECONTEXT:
 
- 			return DestroyMenu(hMenu);
 
- 	}
 
- 	return FALSE;
 
- }
 
 
  |