[BROWSEUI] -CBandSite: Implement the context menu of the rebar. It queries the IConte...
authorGiannis Adamopoulos <gadamopoulos@reactos.org>
Tue, 27 Jun 2017 10:05:59 +0000 (10:05 +0000)
committerGiannis Adamopoulos <gadamopoulos@reactos.org>
Tue, 27 Jun 2017 10:05:59 +0000 (10:05 +0000)
svn path=/trunk/; revision=75216

21 files changed:
reactos/dll/win32/browseui/lang/bg-BG.rc
reactos/dll/win32/browseui/lang/de-DE.rc
reactos/dll/win32/browseui/lang/en-US.rc
reactos/dll/win32/browseui/lang/es-ES.rc
reactos/dll/win32/browseui/lang/fr-FR.rc
reactos/dll/win32/browseui/lang/he-IL.rc
reactos/dll/win32/browseui/lang/it-IT.rc
reactos/dll/win32/browseui/lang/ja-JP.rc
reactos/dll/win32/browseui/lang/pl-PL.rc
reactos/dll/win32/browseui/lang/pt-BR.rc
reactos/dll/win32/browseui/lang/ro-RO.rc
reactos/dll/win32/browseui/lang/ru-RU.rc
reactos/dll/win32/browseui/lang/sq-AL.rc
reactos/dll/win32/browseui/lang/tr-TR.rc
reactos/dll/win32/browseui/lang/uk-UA.rc
reactos/dll/win32/browseui/lang/zh-CN.rc
reactos/dll/win32/browseui/lang/zh-TW.rc
reactos/dll/win32/browseui/resource.h
reactos/dll/win32/browseui/shellbars/CBandSite.cpp
reactos/dll/win32/browseui/shellbars/CBandSite.h
reactos/dll/win32/browseui/shellbars/shellbars.h

index 11734ee..6fe1f3c 100644 (file)
@@ -87,6 +87,12 @@ BEGIN
        END
 END
 
        END
 END
 
+IDM_BAND_MENU MENUEX
+BEGIN
+       MENUITEM "Sho&w title", IDM_BAND_TITLE
+       MENUITEM "&Close toolbar", IDM_BAND_CLOSE
+END
+
 /* Dialogs */
 
 IDD_PROGRESS_DLG DIALOGEX 0, 0, 260, 85
 /* Dialogs */
 
 IDD_PROGRESS_DLG DIALOGEX 0, 0, 260, 85
index 75707d4..9bcbd8b 100644 (file)
@@ -105,6 +105,12 @@ BEGIN
        END
 END
 
        END
 END
 
+IDM_BAND_MENU MENUEX
+BEGIN
+       MENUITEM "Sho&w title", IDM_BAND_TITLE
+       MENUITEM "&Close toolbar", IDM_BAND_CLOSE
+END
+
 /* Dialogs */
 
 IDD_PROGRESS_DLG DIALOGEX 0, 0, 260, 85
 /* Dialogs */
 
 IDD_PROGRESS_DLG DIALOGEX 0, 0, 260, 85
index 2d206db..91bede9 100644 (file)
@@ -105,6 +105,12 @@ BEGIN
        END
 END
 
        END
 END
 
+IDM_BAND_MENU MENUEX
+BEGIN
+       MENUITEM "Sho&w title", IDM_BAND_TITLE
+       MENUITEM "&Close toolbar", IDM_BAND_CLOSE
+END
+
 /* Dialogs */
 
 IDD_PROGRESS_DLG DIALOGEX 0, 0, 260, 85
 /* Dialogs */
 
 IDD_PROGRESS_DLG DIALOGEX 0, 0, 260, 85
index cf542bc..a27939b 100644 (file)
@@ -89,6 +89,12 @@ BEGIN
        END
 END
 
        END
 END
 
+IDM_BAND_MENU MENUEX
+BEGIN
+       MENUITEM "Sho&w title", IDM_BAND_TITLE
+       MENUITEM "&Close toolbar", IDM_BAND_CLOSE
+END
+
 /* Dialogs */
 
 IDD_PROGRESS_DLG DIALOGEX 0, 0, 260, 85
 /* Dialogs */
 
 IDD_PROGRESS_DLG DIALOGEX 0, 0, 260, 85
index 03aa661..61a0930 100644 (file)
@@ -105,6 +105,12 @@ BEGIN
        END
 END
 
        END
 END
 
+IDM_BAND_MENU MENUEX
+BEGIN
+       MENUITEM "Sho&w title", IDM_BAND_TITLE
+       MENUITEM "&Close toolbar", IDM_BAND_CLOSE
+END
+
 /* Dialogs */
 
 IDD_PROGRESS_DLG DIALOGEX 0, 0, 260, 85
 /* Dialogs */
 
 IDD_PROGRESS_DLG DIALOGEX 0, 0, 260, 85
index 90ea998..29ed7e5 100644 (file)
@@ -89,6 +89,12 @@ BEGIN
        END
 END
 
        END
 END
 
+IDM_BAND_MENU MENUEX
+BEGIN
+       MENUITEM "Sho&w title", IDM_BAND_TITLE
+       MENUITEM "&Close toolbar", IDM_BAND_CLOSE
+END
+
 /* Dialogs */
 
 IDD_PROGRESS_DLG DIALOGEX 0, 0, 260, 85
 /* Dialogs */
 
 IDD_PROGRESS_DLG DIALOGEX 0, 0, 260, 85
index 7744eca..6a5bf82 100644 (file)
@@ -87,6 +87,12 @@ BEGIN
        END
 END
 
        END
 END
 
+IDM_BAND_MENU MENUEX
+BEGIN
+       MENUITEM "Sho&w title", IDM_BAND_TITLE
+       MENUITEM "&Close toolbar", IDM_BAND_CLOSE
+END
+
 /* Dialogs */
 
 IDD_PROGRESS_DLG DIALOGEX 0, 0, 260, 85
 /* Dialogs */
 
 IDD_PROGRESS_DLG DIALOGEX 0, 0, 260, 85
index 9a9f609..4641cb8 100644 (file)
@@ -105,6 +105,12 @@ BEGIN
     END
 END
 
     END
 END
 
+IDM_BAND_MENU MENUEX
+BEGIN
+       MENUITEM "Sho&w title", IDM_BAND_TITLE
+       MENUITEM "&Close toolbar", IDM_BAND_CLOSE
+END
+
 /* Dialogs */
 
 IDD_PROGRESS_DLG DIALOGEX 0, 0, 260, 85
 /* Dialogs */
 
 IDD_PROGRESS_DLG DIALOGEX 0, 0, 260, 85
index c72b83e..8c4a452 100644 (file)
@@ -95,6 +95,12 @@ BEGIN
        END
 END
 
        END
 END
 
+IDM_BAND_MENU MENUEX
+BEGIN
+       MENUITEM "Sho&w title", IDM_BAND_TITLE
+       MENUITEM "&Close toolbar", IDM_BAND_CLOSE
+END
+
 /* Dialogs */
 
 IDD_PROGRESS_DLG DIALOGEX 0, 0, 260, 85
 /* Dialogs */
 
 IDD_PROGRESS_DLG DIALOGEX 0, 0, 260, 85
index 99ab81d..7db17de 100644 (file)
@@ -89,6 +89,12 @@ BEGIN
        END
 END
 
        END
 END
 
+IDM_BAND_MENU MENUEX
+BEGIN
+       MENUITEM "Sho&w title", IDM_BAND_TITLE
+       MENUITEM "&Close toolbar", IDM_BAND_CLOSE
+END
+
 /* Dialogs */
 
 IDD_PROGRESS_DLG DIALOGEX 0, 0, 260, 85
 /* Dialogs */
 
 IDD_PROGRESS_DLG DIALOGEX 0, 0, 260, 85
index aade44f..6836064 100644 (file)
@@ -89,6 +89,12 @@ BEGIN
        END
 END
 
        END
 END
 
+IDM_BAND_MENU MENUEX
+BEGIN
+       MENUITEM "Sho&w title", IDM_BAND_TITLE
+       MENUITEM "&Close toolbar", IDM_BAND_CLOSE
+END
+
 /* Dialogs */
 
 IDD_PROGRESS_DLG DIALOGEX 0, 0, 260, 85
 /* Dialogs */
 
 IDD_PROGRESS_DLG DIALOGEX 0, 0, 260, 85
index a046758..221c605 100644 (file)
@@ -89,6 +89,12 @@ BEGIN
        END
 END
 
        END
 END
 
+IDM_BAND_MENU MENUEX
+BEGIN
+       MENUITEM "Sho&w title", IDM_BAND_TITLE
+       MENUITEM "&Close toolbar", IDM_BAND_CLOSE
+END
+
 /* Dialogs */
 
 IDD_PROGRESS_DLG DIALOGEX 0, 0, 260, 85
 /* Dialogs */
 
 IDD_PROGRESS_DLG DIALOGEX 0, 0, 260, 85
index 5677ba0..d6d657f 100644 (file)
@@ -106,6 +106,12 @@ BEGIN
        END
 END
 
        END
 END
 
+IDM_BAND_MENU MENUEX
+BEGIN
+       MENUITEM "Sho&w title", IDM_BAND_TITLE
+       MENUITEM "&Close toolbar", IDM_BAND_CLOSE
+END
+
 /* Dialogs */
 
 IDD_PROGRESS_DLG DIALOGEX 0, 0, 260, 85
 /* Dialogs */
 
 IDD_PROGRESS_DLG DIALOGEX 0, 0, 260, 85
index 56d1893..a1856f1 100644 (file)
@@ -89,6 +89,12 @@ BEGIN
        END
 END
 
        END
 END
 
+IDM_BAND_MENU MENUEX
+BEGIN
+       MENUITEM "Sho&w title", IDM_BAND_TITLE
+       MENUITEM "&Close toolbar", IDM_BAND_CLOSE
+END
+
 /* Dialogs */
 
 IDD_PROGRESS_DLG DIALOGEX 0, 0, 260, 85
 /* Dialogs */
 
 IDD_PROGRESS_DLG DIALOGEX 0, 0, 260, 85
index 34f8ba0..ea8de8a 100644 (file)
@@ -89,6 +89,12 @@ BEGIN
        END
 END
 
        END
 END
 
+IDM_BAND_MENU MENUEX
+BEGIN
+       MENUITEM "Sho&w title", IDM_BAND_TITLE
+       MENUITEM "&Close toolbar", IDM_BAND_CLOSE
+END
+
 /* Dialogs */
 
 IDD_PROGRESS_DLG DIALOGEX 0, 0, 260, 85
 /* Dialogs */
 
 IDD_PROGRESS_DLG DIALOGEX 0, 0, 260, 85
index 9d5c098..622e665 100644 (file)
@@ -107,6 +107,12 @@ BEGIN
        END
 END
 
        END
 END
 
+IDM_BAND_MENU MENUEX
+BEGIN
+       MENUITEM "Sho&w title", IDM_BAND_TITLE
+       MENUITEM "&Close toolbar", IDM_BAND_CLOSE
+END
+
 /* Dialogs */
 
 IDD_PROGRESS_DLG DIALOGEX 0, 0, 260, 85
 /* Dialogs */
 
 IDD_PROGRESS_DLG DIALOGEX 0, 0, 260, 85
index 07ca957..a658735 100644 (file)
@@ -107,6 +107,12 @@ BEGIN
        END
 END
 
        END
 END
 
+IDM_BAND_MENU MENUEX
+BEGIN
+       MENUITEM "Sho&w title", IDM_BAND_TITLE
+       MENUITEM "&Close toolbar", IDM_BAND_CLOSE
+END
+
 /* Dialogs */
 
 IDD_PROGRESS_DLG DIALOGEX 0, 0, 260, 85
 /* Dialogs */
 
 IDD_PROGRESS_DLG DIALOGEX 0, 0, 260, 85
index 7310100..31f32fe 100644 (file)
 #define IDM_TASKBAR_TOOLBARS_QUICKLAUNCH      4
 #define IDM_TASKBAR_TOOLBARS_NEW              1
 
 #define IDM_TASKBAR_TOOLBARS_QUICKLAUNCH      4
 #define IDM_TASKBAR_TOOLBARS_NEW              1
 
+#define IDM_BAND_MENU                       269
+#define IDM_BAND_TITLE                   0xA200
+#define IDM_BAND_CLOSE                   0xA201
+
 /* Random id for band close button, feel free to change it */
 #define IDM_BASEBAR_CLOSE                0xA200
 
 /* Random id for band close button, feel free to change it */
 #define IDM_BASEBAR_CLOSE                0xA200
 
index eddd7cb..ff65a79 100644 (file)
@@ -221,6 +221,83 @@ HRESULT CBandSiteBase::UpdateBand(DWORD dwBandID)
     return UpdateSingleBand(Band);
 }
 
     return UpdateSingleBand(Band);
 }
 
+HRESULT CBandSiteBase::OnContextMenu(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT *plrResult)
+{
+    /* Find the index fo the band that was clicked */
+    int x = GET_X_LPARAM(lParam);
+    int y = GET_Y_LPARAM(lParam);
+
+    RBHITTESTINFO htInfo = {{x, y}};
+    ScreenToClient(fRebarWindow, &htInfo.pt);
+    int iBand = SendMessageW(fRebarWindow, RB_HITTEST, 0, (LPARAM)&htInfo);
+    if (iBand < 0)
+    {
+        /* FIXME: what to do here? */
+        return S_OK;
+    }
+
+    /* Now get the id of the band that was clicked */
+    REBARBANDINFOW bandInfo = {sizeof(bandInfo), RBBIM_ID};
+    SendMessageW(fRebarWindow, RB_GETBANDINFOW, htInfo.iBand, (LPARAM)&bandInfo);
+
+    /* Finally get the band */
+    DWORD dwBandID = bandInfo.wID;
+    struct BandObject *Band = GetBandByID(dwBandID);
+    if (Band == NULL)
+        return E_FAIL;
+
+    HMENU hMenu = CreatePopupMenu();
+    if (hMenu == NULL)
+        return E_OUTOFMEMORY;
+
+    /* Try to load the menu of the band */
+    UINT idBandLast = 0;
+    CComPtr<IContextMenu> pcm;
+    HRESULT hr = Band->DeskBand->QueryInterface(IID_PPV_ARG(IContextMenu, &pcm));
+    if (SUCCEEDED(hr))
+    {
+        hr = pcm->QueryContextMenu(hMenu, 0, 0, UINT_MAX, CMF_NORMAL);
+        if (SUCCEEDED(hr))
+        {
+            idBandLast = HRESULT_CODE(hr);
+        }
+    }
+
+    /* Load the static part of the menu */
+    HMENU hMenuStatic = LoadMenuW(GetModuleHandleW(L"browseui.dll"), MAKEINTRESOURCEW(IDM_BAND_MENU));
+    if (hMenuStatic)
+        Shell_MergeMenus(hMenu, hMenuStatic, UINT_MAX, 0, UINT_MAX, MM_DONTREMOVESEPS | MM_SUBMENUSHAVEIDS);
+
+    EnableMenuItem(hMenu, IDM_BAND_TITLE, MF_GRAYED);
+    /* TODO: Show IDM_BAND_TITLE as checked if the band title is shown */
+
+    /* TODO: Query the menu of our site */
+
+    UINT uCommand = ::TrackPopupMenuEx(hMenu, TPM_RETURNCMD, x, y, fRebarWindow, NULL);
+    if (uCommand < idBandLast)
+    {
+        CMINVOKECOMMANDINFO cmi = { sizeof(cmi), 0, fRebarWindow, MAKEINTRESOURCEA(uCommand)};
+        hr = pcm->InvokeCommand(&cmi);
+        if (FAILED_UNEXPECTEDLY(hr))
+            return hr;
+    }
+    else
+    {
+        if (uCommand == IDM_BAND_TITLE)
+        {
+            /* TODO: Implement showing or hiding the title */
+        }
+        else if(uCommand == IDM_BAND_CLOSE)
+        {
+            hr = RemoveBand(dwBandID);
+            if (FAILED_UNEXPECTEDLY(hr))
+                return hr;
+        }
+    }
+
+    return S_OK;
+}
+
 struct CBandSiteBase::BandObject *CBandSiteBase::GetBandFromHwnd(HWND hwnd)
 {
     HRESULT                                 hRet;
 struct CBandSiteBase::BandObject *CBandSiteBase::GetBandFromHwnd(HWND hwnd)
 {
     HRESULT                                 hRet;
@@ -567,6 +644,15 @@ HRESULT STDMETHODCALLTYPE CBandSiteBase::OnWinEvent(HWND hWnd, UINT uMsg, WPARAM
     if (fRebarWindow == NULL)
         return E_FAIL;
 
     if (fRebarWindow == NULL)
         return E_FAIL;
 
+    if (uMsg == WM_CONTEXTMENU)
+    {
+        HRESULT hr = OnContextMenu(hWnd, uMsg, wParam, lParam, plrResult);
+        if (FAILED_UNEXPECTEDLY(hr))
+            return hr;
+        
+        return S_OK;
+    }
+        
     if (hWnd == fRebarWindow)
     {
         /* FIXME: Just send the message? */
     if (hWnd == fRebarWindow)
     {
         /* FIXME: Just send the message? */
index 2bef9ab..c4c1b39 100644 (file)
@@ -120,6 +120,7 @@ private:
     HRESULT UpdateAllBands();
     HRESULT UpdateBand(DWORD dwBandID);
     struct BandObject *GetBandFromHwnd(HWND hwnd);
     HRESULT UpdateAllBands();
     HRESULT UpdateBand(DWORD dwBandID);
     struct BandObject *GetBandFromHwnd(HWND hwnd);
+    HRESULT OnContextMenu(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT *plrResult);
 
     BEGIN_COM_MAP(CBandSiteBase)
         COM_INTERFACE_ENTRY_IID(IID_IBandSite, IBandSite)
 
     BEGIN_COM_MAP(CBandSiteBase)
         COM_INTERFACE_ENTRY_IID(IID_IBandSite, IBandSite)
index b85d98c..0c3b58b 100644 (file)
@@ -33,4 +33,7 @@
 
 WINE_DEFAULT_DEBUG_CHANNEL(browseui);
 
 
 WINE_DEFAULT_DEBUG_CHANNEL(browseui);
 
+#define GET_X_LPARAM(lp) ((int)(short)LOWORD(lp))
+#define GET_Y_LPARAM(lp) ((int)(short)HIWORD(lp))
+
 #endif /* _BROWSEUI_PCH_ */
 #endif /* _BROWSEUI_PCH_ */