include/vcl/menu.hxx              |    4 ----
 sc/UIConfig_scalc.mk              |    1 +
 sc/source/ui/view/gridwin.cxx     |   23 ++++++++++++++++-------
 sc/uiconfig/scalc/ui/colormenu.ui |    9 +++++++++
 vcl/source/window/menu.cxx        |   14 --------------
 5 files changed, 26 insertions(+), 25 deletions(-)

New commits:
commit c3c526e0192b9cf429d326b129ce9e94ec9e346b
Author:     Caolán McNamara <caol...@redhat.com>
AuthorDate: Wed Nov 17 16:26:19 2021 +0000
Commit:     Caolán McNamara <caol...@redhat.com>
CommitDate: Wed Nov 17 20:49:41 2021 +0100

    weld colormenu
    
    Change-Id: I6feef72cf924865e2407a96cdd0b6e60c835dbc3
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/125417
    Tested-by: Jenkins
    Reviewed-by: Caolán McNamara <caol...@redhat.com>

diff --git a/include/vcl/menu.hxx b/include/vcl/menu.hxx
index f96c775fa64d..7834fe22519e 100644
--- a/include/vcl/menu.hxx
+++ b/include/vcl/menu.hxx
@@ -24,7 +24,6 @@
 #include <string_view>
 
 #include <vcl/vclenum.hxx>
-#include <tools/color.hxx>
 #include <tools/link.hxx>
 #include <tools/long.hxx>
 #include <vcl/dllapi.h>
@@ -303,9 +302,6 @@ public:
     void SetItemImage( sal_uInt16 nItemId, const Image& rImage );
     Image GetItemImage( sal_uInt16 nItemId ) const;
 
-    // Instead of an image, draw a color
-    void SetItemColor( sal_uInt16 nItemId, const Color& rColor );
-
     void SetItemCommand( sal_uInt16 nItemId, const OUString& rCommand );
     OUString GetItemCommand( sal_uInt16 nItemId ) const;
 
diff --git a/sc/UIConfig_scalc.mk b/sc/UIConfig_scalc.mk
index ce625df9f301..c1bd1b075926 100644
--- a/sc/UIConfig_scalc.mk
+++ b/sc/UIConfig_scalc.mk
@@ -94,6 +94,7 @@ $(eval $(call gb_UIConfig_add_uifiles,modules/scalc,\
        sc/uiconfig/scalc/ui/chardialog \
        sc/uiconfig/scalc/ui/checkwarningdialog \
        sc/uiconfig/scalc/ui/chisquaretestdialog \
+       sc/uiconfig/scalc/ui/colormenu \
        sc/uiconfig/scalc/ui/colorrowdialog \
        sc/uiconfig/scalc/ui/colwidthdialog \
        sc/uiconfig/scalc/ui/condformatmanager \
diff --git a/sc/source/ui/view/gridwin.cxx b/sc/source/ui/view/gridwin.cxx
index 39c2f7d8fd98..3530e9d69d5a 100644
--- a/sc/source/ui/view/gridwin.cxx
+++ b/sc/source/ui/view/gridwin.cxx
@@ -43,6 +43,7 @@
 #include <vcl/inputctx.hxx>
 #include <vcl/menu.hxx>
 #include <vcl/settings.hxx>
+#include <vcl/virdev.hxx>
 #include <vcl/weldutils.hxx>
 #include <sot/formats.hxx>
 #include <comphelper/classids.hxx>
@@ -928,7 +929,10 @@ void ScGridWindow::UpdateAutoFilterFromMenu(AutoFilterMode 
eMode)
                 ScFilterEntries aFilterEntries;
                 rDoc.GetFilterEntries(rPos.Col(), rPos.Row(), rPos.Tab(), 
aFilterEntries);
 
-                VclPtr<PopupMenu> pColorMenu = VclPtr<PopupMenu>::Create();
+                weld::Window* pPopupParent = mpAutoFilterPopup->GetFrameWeld();
+                std::unique_ptr<weld::Builder> 
xBuilder(Application::CreateBuilder(pPopupParent, 
"modules/scalc/ui/colormenu.ui"));
+                std::unique_ptr<weld::Menu> 
xColorMenu(xBuilder->weld_menu("menu"));
+
                 std::set<Color> aColors = eMode == AutoFilterMode::TextColor
                                               ? aFilterEntries.getTextColors()
                                               : 
aFilterEntries.getBackgroundColors();
@@ -942,12 +946,17 @@ void 
ScGridWindow::UpdateAutoFilterFromMenu(AutoFilterMode eMode)
                         OUString sText = eMode == AutoFilterMode::TextColor
                                              ? 
ScResId(SCSTR_FILTER_AUTOMATIC_COLOR)
                                              : ScResId(SCSTR_FILTER_NO_FILL);
-                        pColorMenu->InsertItem(i, sText, 
MenuItemBits::CHECKABLE);
+                        xColorMenu->append_check(OUString::number(i), sText);
                     }
                     else
                     {
-                        pColorMenu->InsertItem(i, OUString(), 
MenuItemBits::CHECKABLE);
-                        pColorMenu->SetItemColor(i, rColor);
+                        ScopedVclPtr<VirtualDevice> 
xDev(pPopupParent->create_virtual_device());
+                        
xDev->SetOutputSize(Application::GetSettings().GetStyleSettings().GetToolbarIconSizePixel());
+                        xDev->SetBackground(rColor);
+                        xDev->Erase();
+
+                        xColorMenu->insert(-1, OUString::number(i), OUString(),
+                                           nullptr, xDev.get(), nullptr, 
TRISTATE_TRUE);
                     }
                     auto aItem = pEntry->GetQueryItem();
                     if (aItem.maColor == rColor
@@ -957,14 +966,14 @@ void 
ScGridWindow::UpdateAutoFilterFromMenu(AutoFilterMode eMode)
                                 && aItem.meType == 
ScQueryEntry::ByBackgroundColor)))
                     {
                         nActive = i;
-                        pColorMenu->CheckItem(i, true);
+                        xColorMenu->set_active(OString::number(i), true);
                     }
                     i++;
                 }
 
                 tools::Rectangle aRect = rControl.GetSubMenuParentRect();
-                sal_uInt16 nSelected = pColorMenu->Execute(mpAutoFilterPopup, 
aRect, PopupMenuFlags::ExecuteRight);
-                pColorMenu.disposeAndClear();
+                sal_Int32 nSelected = xColorMenu->popup_at_rect(pPopupParent, 
aRect, weld::Placement::End).toInt32();
+                xColorMenu.reset();
                 rControl.terminateAllPopupMenus();
 
                 if (nSelected == 0)
diff --git a/sc/uiconfig/scalc/ui/colormenu.ui 
b/sc/uiconfig/scalc/ui/colormenu.ui
new file mode 100644
index 000000000000..27967c9e3bd1
--- /dev/null
+++ b/sc/uiconfig/scalc/ui/colormenu.ui
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Generated with glade 3.38.2 -->
+<interface domain="sc">
+  <requires lib="gtk+" version="3.20"/>
+  <object class="GtkMenu" id="menu">
+    <property name="visible">True</property>
+    <property name="can-focus">False</property>
+  </object>
+</interface>
diff --git a/vcl/source/window/menu.cxx b/vcl/source/window/menu.cxx
index 53f5e28e6f53..4a497b84b02c 100644
--- a/vcl/source/window/menu.cxx
+++ b/vcl/source/window/menu.cxx
@@ -21,7 +21,6 @@
 #include <sal/log.hxx>
 
 #include <comphelper/lok.hxx>
-#include <bitmap/BitmapWriteAccess.hxx>
 #include <vcl/svapp.hxx>
 #include <vcl/mnemonic.hxx>
 #include <vcl/image.hxx>
@@ -1022,19 +1021,6 @@ OUString Menu::GetItemText( sal_uInt16 nItemId ) const
     return OUString();
 }
 
-void Menu::SetItemColor(sal_uInt16 nItemId, const Color& rColor)
-{
-    StyleSettings aSettings = Application::GetSettings().GetStyleSettings();
-    auto iconSize = aSettings.GetToolbarIconSizePixel();
-    Bitmap aBmp(iconSize, vcl::PixelFormat::N24_BPP);
-    BitmapWriteAccess aBmpAccess(aBmp);
-    aBmpAccess.SetFillColor(rColor);
-    aBmpAccess.FillRect(tools::Rectangle(0, 0, iconSize.Width() - 1, 
iconSize.Height() - 1));
-    BitmapEx aBmpEx(aBmp);
-    Image aImage(aBmpEx);
-    SetItemImage(nItemId, aImage);
-}
-
 void Menu::SetItemImage( sal_uInt16 nItemId, const Image& rImage )
 {
     size_t          nPos;

Reply via email to