[Libreoffice-commits] core.git: include/svx svx/source

Caolán McNamara (via logerrit) logerrit at kemper.freedesktop.org
Mon Feb 22 19:27:30 UTC 2021


 include/svx/ruler.hxx          |    2 -
 svx/source/dialog/svxruler.cxx |   50 +++++++++++++++++++++--------------------
 2 files changed, 27 insertions(+), 25 deletions(-)

New commits:
commit ca2498a0de77065e8e1b42c827cf6bf74e135725
Author:     Caolán McNamara <caolanm at redhat.com>
AuthorDate: Mon Feb 22 17:14:59 2021 +0000
Commit:     Caolán McNamara <caolanm at redhat.com>
CommitDate: Mon Feb 22 20:26:34 2021 +0100

    convert other svxruler menu
    
    Change-Id: Ie7d896139f805ddfc64fc7824741a9daff0dab15
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/111350
    Tested-by: Jenkins
    Reviewed-by: Caolán McNamara <caolanm at redhat.com>

diff --git a/include/svx/ruler.hxx b/include/svx/ruler.hxx
index 4c6735490b8c..374209a73f69 100644
--- a/include/svx/ruler.hxx
+++ b/include/svx/ruler.hxx
@@ -217,7 +217,7 @@ class SVX_DLLPUBLIC SvxRuler: public Ruler, public SfxListener
     tools::Long GetLeftMin() const;
     tools::Long GetRightMax() const;
 
-    DECL_LINK( TabMenuSelect, Menu *, bool );
+    void TabMenuSelect(const OString& rIdent);
     void MenuSelect(std::string_view ident);
     void PrepareProportional_Impl(RulerType);
 
diff --git a/svx/source/dialog/svxruler.cxx b/svx/source/dialog/svxruler.cxx
index fbb08d35fd45..4b5f42e1eb10 100644
--- a/svx/source/dialog/svxruler.cxx
+++ b/svx/source/dialog/svxruler.cxx
@@ -24,7 +24,6 @@
 #include <vcl/event.hxx>
 #include <vcl/fieldvalues.hxx>
 #include <vcl/image.hxx>
-#include <vcl/menu.hxx>
 #include <vcl/settings.hxx>
 #include <vcl/svapp.hxx>
 #include <vcl/virdev.hxx>
@@ -3261,13 +3260,16 @@ void SvxRuler::MenuSelect(std::string_view ident)
     SetUnit(vcl::StringToMetric(OUString::fromUtf8(ident)));
 }
 
-IMPL_LINK( SvxRuler, TabMenuSelect, Menu *, pMenu, bool )
+void SvxRuler::TabMenuSelect(const OString& rIdent)
 {
+    if (rIdent.isEmpty())
+        return;
+    sal_Int32 nId = rIdent.toInt32();
     /* Handler of the tab menu for setting the type */
-    if(mxTabStopItem && mxTabStopItem->Count() > mxRulerImpl->nIdx)
+    if (mxTabStopItem && mxTabStopItem->Count() > mxRulerImpl->nIdx)
     {
         SvxTabStop aTabStop = mxTabStopItem->At(mxRulerImpl->nIdx);
-        aTabStop.GetAdjustment() = ToAttrTab_Impl(pMenu->GetCurItemId() - 1);
+        aTabStop.GetAdjustment() = ToAttrTab_Impl(nId - 1);
         mxTabStopItem->Remove(mxRulerImpl->nIdx);
         mxTabStopItem->Insert(aTabStop);
         sal_uInt16 nTabStopId = bHorz ? SID_ATTR_TABSTOP : SID_ATTR_TABSTOP_VERTICAL;
@@ -3276,7 +3278,6 @@ IMPL_LINK( SvxRuler, TabMenuSelect, Menu *, pMenu, bool )
         UpdateTabs();
         mxRulerImpl->nIdx = 0;
     }
-    return false;
 }
 
 static const char* RID_SVXSTR_RULER_TAB[] =
@@ -3293,42 +3294,43 @@ void SvxRuler::Command( const CommandEvent& rCommandEvent )
     if ( CommandEventId::ContextMenu == rCommandEvent.GetCommand() )
     {
         CancelDrag();
+
+        tools::Rectangle aRect(rCommandEvent.GetMousePosPixel(), Size(1, 1));
+        weld::Window* pPopupParent = weld::GetPopupParent(*this, aRect);
+        std::unique_ptr<weld::Builder> xBuilder(Application::CreateBuilder(pPopupParent, "svx/ui/rulermenu.ui"));
+        std::unique_ptr<weld::Menu> xMenu(xBuilder->weld_menu("menu"));
+
         bool bRTL = mxRulerImpl->pTextRTLItem && mxRulerImpl->pTextRTLItem->GetValue();
         if ( !mpTabs.empty() &&
              RulerType::Tab ==
              GetRulerType( rCommandEvent.GetMousePosPixel(), &mxRulerImpl->nIdx ) &&
              mpTabs[mxRulerImpl->nIdx + TAB_GAP].nStyle < RULER_TAB_DEFAULT )
         {
-            ScopedVclPtrInstance<PopupMenu> aMenu;
-            aMenu->SetSelectHdl(LINK(this, SvxRuler, TabMenuSelect));
-            ScopedVclPtrInstance< VirtualDevice > pDev;
+            xMenu->clear();
+
             const Size aSz(ruler_tab_svx.width + 2, ruler_tab_svx.height + 2);
-            pDev->SetOutputSize(aSz);
-            pDev->SetBackground(Wallpaper(COL_WHITE));
-            Color aFillColor(pDev->GetSettings().GetStyleSettings().GetShadowColor());
             const Point aPt(aSz.Width() / 2, aSz.Height() / 2);
 
             for ( sal_uInt16 i = RULER_TAB_LEFT; i < RULER_TAB_DEFAULT; ++i )
             {
+                ScopedVclPtr<VirtualDevice> xDev(pPopupParent->create_virtual_device());
+                xDev->SetOutputSize(aSz);
+
                 sal_uInt16 nStyle = bRTL ? i|RULER_TAB_RTL : i;
                 nStyle |= static_cast<sal_uInt16>(bHorz ? WB_HORZ : WB_VERT);
-                DrawTab(*pDev, aFillColor, aPt, nStyle);
-                BitmapEx aItemBitmapEx(pDev->GetBitmapEx(Point(), aSz));
-                aItemBitmapEx.Replace(COL_WHITE, COL_TRANSPARENT);
-                aMenu->InsertItem(i + 1,
-                                 SvxResId(RID_SVXSTR_RULER_TAB[i]),
-                                 Image(aItemBitmapEx));
-                aMenu->CheckItem(i + 1, i == mpTabs[mxRulerImpl->nIdx + TAB_GAP].nStyle);
-                pDev->SetOutputSize(aSz); // delete device
+
+                Color aFillColor(xDev->GetSettings().GetStyleSettings().GetShadowColor());
+                DrawTab(*xDev, aFillColor, aPt, nStyle);
+
+                OString sId(OString::number(i + 1));
+                xMenu->insert(-1, OUString::fromUtf8(sId), SvxResId(RID_SVXSTR_RULER_TAB[i]),
+                              nullptr, xDev.get(), nullptr, TRISTATE_TRUE);
+                xMenu->set_active(sId, i == mpTabs[mxRulerImpl->nIdx + TAB_GAP].nStyle);
             }
-            aMenu->Execute( this, rCommandEvent.GetMousePosPixel() );
+            TabMenuSelect(xMenu->popup_at_rect(pPopupParent, aRect));
         }
         else
         {
-            tools::Rectangle aRect(rCommandEvent.GetMousePosPixel(), Size(1, 1));
-            weld::Window* pPopupParent = weld::GetPopupParent(*this, aRect);
-            std::unique_ptr<weld::Builder> xBuilder(Application::CreateBuilder(pPopupParent, "svx/ui/rulermenu.ui"));
-            std::unique_ptr<weld::Menu> xMenu(xBuilder->weld_menu("menu"));
             FieldUnit eUnit = GetUnit();
             const int nCount = xMenu->n_children();
 


More information about the Libreoffice-commits mailing list