123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160 |
- #include "main.h"
- #include "./menu.h"
- #include "./ratingMenu.h"
- #include "./ifc_skinhelper.h"
- #include "./ifc_skinnedmenu.h"
- #include "./ifc_menucustomizer.h"
- #include "./resource.h"
- #include "../nu/menuHelpers.h"
- #define SUBMENU_RATING 0
- #define SUBMENU_TOOLBAR 1
- #define SUBMENU_ADDRESSBAR 2
- static HRESULT Menu_GetSkinnedMenu(ifc_skinnedmenu **skinnedMenu)
- {
- if (NULL == skinnedMenu) return E_POINTER;
- ifc_skinhelper *skinHelper = NULL;
- HRESULT hr = Plugin_GetSkinHelper(&skinHelper);
- if (SUCCEEDED(hr) && skinHelper != NULL)
- {
- hr = skinHelper->QueryInterface(IFC_SkinnedMenu, (void**)skinnedMenu);
- skinHelper->Release();
- }
- return hr;
- }
- static HMENU Menu_CreateRatingMenu(HMENU baseMenu, INT ratingValue)
- {
- HMENU menu = GetSubMenu(baseMenu, SUBMENU_RATING);
- if (NULL == menu) return NULL;
- menu = MenuHelper_DuplcateMenu(menu);
- if (NULL == menu) return NULL;
- if (FALSE == RatingMenu_InitializeMenu(menu, ratingValue))
- {
- DestroyMenu(menu);
- menu = NULL;
- }
- return menu;
- }
- static HMENU Menu_GetToolbarContext(HMENU baseMenu, UINT flags)
- {
- HMENU hMenu = GetSubMenu(baseMenu, SUBMENU_TOOLBAR);
- return hMenu;
- }
- static HMENU Menu_GetAddressbarContext(HMENU baseMenu, UINT flags)
- {
- HMENU hMenu = GetSubMenu(baseMenu, SUBMENU_ADDRESSBAR);
- return hMenu;
- }
- void Menu_ConvertRatingMenuStar(HMENU menu, UINT menu_id)
- {
- MENUITEMINFOW mi = {sizeof(mi), MIIM_DATA | MIIM_TYPE, MFT_STRING};
- wchar_t rateBuf[32] = {0}, *rateStr = rateBuf;
- mi.dwTypeData = rateBuf;
- mi.cch = 32;
- if(GetMenuItemInfoW(menu, menu_id, FALSE, &mi))
- {
- while(rateStr && *rateStr)
- {
- if(*rateStr == L'*') *rateStr = L'\u2605';
- rateStr=CharNextW(rateStr);
- }
- SetMenuItemInfoW(menu, menu_id, FALSE, &mi);
- }
- }
- HMENU Menu_GetMenu(INT menuKind, UINT flags)
- {
- HMENU baseMenu = Plugin_LoadMenu(MAKEINTRESOURCE(IDR_CONTEXTMENU));
- if (NULL == baseMenu)
- return NULL;
- HMENU rate_hmenu = GetSubMenu(baseMenu,0);
- Menu_ConvertRatingMenuStar(rate_hmenu, ID_RATING_VALUE_5);
- Menu_ConvertRatingMenuStar(rate_hmenu, ID_RATING_VALUE_4);
- Menu_ConvertRatingMenuStar(rate_hmenu, ID_RATING_VALUE_3);
- Menu_ConvertRatingMenuStar(rate_hmenu, ID_RATING_VALUE_2);
- Menu_ConvertRatingMenuStar(rate_hmenu, ID_RATING_VALUE_1);
- switch(menuKind)
- {
- case MENU_RATING:
- return Menu_CreateRatingMenu(baseMenu, RATINGFROMMCF(flags));
- case MENU_TOOLBAR:
- return Menu_GetToolbarContext(baseMenu, flags);
- case MENU_ADDRESSBAR:
- return Menu_GetAddressbarContext(baseMenu, flags);
- }
- return NULL;
- }
- void Menu_ReleaseMenu(HMENU hMenu, INT menuKind)
- {
- if (NULL == hMenu)
- return;
- switch(menuKind)
- {
- case MENU_RATING:
- DestroyMenu(hMenu);
- break;
- case MENU_TOOLBAR:
- break;
- case MENU_ADDRESSBAR:
- break;
- }
- }
- BOOL Menu_TrackPopup(HMENU hMenu, UINT fuFlags, INT x, INT y, HWND hwnd, LPTPMPARAMS lptpm)
- {
- BOOL result = FALSE;
- ifc_skinnedmenu *skinnedMenu = NULL;
- if (SUCCEEDED(Menu_GetSkinnedMenu(&skinnedMenu)) && skinnedMenu != NULL)
- {
- ifc_menucustomizer *customizer = NULL;
- if (FAILED(RatingMenu_GetCustomizer(hMenu, &customizer)))
- customizer = NULL;
- result = skinnedMenu->TrackPopup(hMenu, fuFlags, x, y, hwnd, lptpm, customizer);
- if (NULL != customizer)
- customizer->Release();
- skinnedMenu->Release();
- }
- return result;
- }
- HANDLE Menu_InitializeHook(HWND hwnd, ifc_menucustomizer *customizer)
- {
- ifc_skinnedmenu *skinnedMenu = NULL;
- HANDLE hook = NULL;
- if (SUCCEEDED(Menu_GetSkinnedMenu(&skinnedMenu)) && skinnedMenu != NULL)
- {
- hook = skinnedMenu->InitPopupHook(hwnd, customizer);
- skinnedMenu->Release();
- }
- return hook;
- }
- HRESULT Menu_RemoveHook(HANDLE menuHook)
- {
- ifc_skinnedmenu *skinnedMenu = NULL;
- HRESULT hr = Menu_GetSkinnedMenu(&skinnedMenu);
- if (SUCCEEDED(hr) && skinnedMenu != NULL)
- {
- hr = skinnedMenu->RemovePopupHook(menuHook);
- skinnedMenu->Release();
- }
- return hr;
- }
|