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;