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;
- }
|