[Libreoffice-commits] core.git: svx/source svx/uiconfig svx/UIConfig_svx.mk sw/uiconfig

Caolán McNamara (via logerrit) logerrit at kemper.freedesktop.org
Fri Jan 17 13:44:32 UTC 2020


 svx/UIConfig_svx.mk                        |    1 
 svx/source/tbxctrls/tbcontrl.cxx           |  232 ++++++++++++++---------------
 svx/uiconfig/ui/floatingframeborder.ui     |   49 ++++++
 sw/uiconfig/swriter/ui/sidebartableedit.ui |    2 
 4 files changed, 164 insertions(+), 120 deletions(-)

New commits:
commit f7e013657df0a1955d901d79d6df806e5007a9f8
Author:     Caolán McNamara <caolanm at redhat.com>
AuthorDate: Fri Jan 17 09:24:44 2020 +0000
Commit:     Caolán McNamara <caolanm at redhat.com>
CommitDate: Fri Jan 17 14:43:49 2020 +0100

    weld SvxFrameWindow_Impl
    
    which makes .uno:SetBorderStyle in sidebartableedit work again
    
    Change-Id: I51faa21530171a47ee78863ddb312e1d9996326c
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/86959
    Tested-by: Jenkins
    Reviewed-by: Caolán McNamara <caolanm at redhat.com>

diff --git a/svx/UIConfig_svx.mk b/svx/UIConfig_svx.mk
index 1e62d619269d..aa3486ae3a51 100644
--- a/svx/UIConfig_svx.mk
+++ b/svx/UIConfig_svx.mk
@@ -48,6 +48,7 @@ $(eval $(call gb_UIConfig_add_uifiles,svx,\
 	svx/uiconfig/ui/findreplacedialog \
 	svx/uiconfig/ui/floatingareastyle \
 	svx/uiconfig/ui/floatingcontour \
+	svx/uiconfig/ui/floatingframeborder \
 	svx/uiconfig/ui/floatinglineproperty \
 	svx/uiconfig/ui/floatingundoredo \
 	svx/uiconfig/ui/fontworkgallerydialog \
diff --git a/svx/source/tbxctrls/tbcontrl.cxx b/svx/source/tbxctrls/tbcontrl.cxx
index bf99813bed76..fcd99c90d8fc 100644
--- a/svx/source/tbxctrls/tbcontrl.cxx
+++ b/svx/source/tbxctrls/tbcontrl.cxx
@@ -31,6 +31,7 @@
 #include <vcl/toolbox.hxx>
 #include <vcl/bitmapaccess.hxx>
 #include <vcl/menubtn.hxx>
+#include <vcl/customweld.hxx>
 #include <vcl/vclptr.hxx>
 #include <svtools/valueset.hxx>
 #include <svtools/ctrlbox.hxx>
@@ -251,50 +252,71 @@ public:
 };
 
 // SelectHdl needs the Modifiers, get them in MouseButtonUp
-class SvxFrmValueSet_Impl : public ValueSet
+class SvxFrmValueSet_Impl final : public SvtValueSet
 {
-    sal_uInt16          nModifier;
-    virtual void    MouseButtonUp( const MouseEvent& rMEvt ) override;
-public:
-    SvxFrmValueSet_Impl(vcl::Window* pParent,  WinBits nWinStyle)
-        : ValueSet(pParent, nWinStyle), nModifier(0) {}
-    sal_uInt16          GetModifier() const {return nModifier;}
+private:
+    sal_uInt16 nModifier;
 
-};
+    virtual bool MouseButtonUp(const MouseEvent& rMEvt) override
+    {
+        nModifier = rMEvt.GetModifier();
+        return SvtValueSet::MouseButtonUp(rMEvt);
+    }
 
-}
+public:
+    SvxFrmValueSet_Impl()
+        : SvtValueSet(nullptr)
+        , nModifier(0)
+    {
+    }
+    sal_uInt16 GetModifier() const {return nModifier;}
+};
 
-void SvxFrmValueSet_Impl::MouseButtonUp( const MouseEvent& rMEvt )
-{
-    nModifier = rMEvt.GetModifier();
-    ValueSet::MouseButtonUp(rMEvt);
 }
 
 namespace {
 
-class SvxFrameWindow_Impl : public svtools::ToolbarPopup
+class SvxFrameToolBoxControl;
+
+class SvxFrameWindow_Impl final : public WeldToolbarPopup
 {
 private:
-    VclPtr<SvxFrmValueSet_Impl> aFrameSet;
-    svt::ToolboxController&     mrController;
+    rtl::Reference<SvxFrameToolBoxControl> mxControl;
+    std::unique_ptr<SvxFrmValueSet_Impl> mxFrameSet;
+    std::unique_ptr<weld::CustomWeld> mxFrameSetWin;
     std::vector<BitmapEx>       aImgVec;
     bool                        bParagraphMode;
 
     void InitImageList();
     void CalcSizeValueSet();
-    DECL_LINK( SelectHdl, ValueSet*, void );
-
-protected:
-    virtual void    GetFocus() override;
-    virtual void    KeyInput( const KeyEvent& rKEvt ) override;
+    DECL_LINK( SelectHdl, SvtValueSet*, void );
 
 public:
-    SvxFrameWindow_Impl( svt::ToolboxController& rController, vcl::Window* pParentWindow );
-    virtual ~SvxFrameWindow_Impl() override;
-    virtual void dispose() override;
+    SvxFrameWindow_Impl(SvxFrameToolBoxControl* pControl, weld::Widget* pParent);
+    virtual void GrabFocus() override
+    {
+        mxFrameSet->GrabFocus();
+    }
 
     virtual void    statusChanged( const css::frame::FeatureStateEvent& rEvent ) override;
-    virtual void    DataChanged( const DataChangedEvent& rDCEvt ) override;
+};
+
+class SvxFrameToolBoxControl : public svt::PopupWindowController
+{
+public:
+    explicit SvxFrameToolBoxControl( const css::uno::Reference< css::uno::XComponentContext >& rContext );
+
+    // XInitialization
+    virtual void SAL_CALL initialize( const css::uno::Sequence< css::uno::Any >& rArguments ) override;
+
+    // XServiceInfo
+    virtual OUString SAL_CALL getImplementationName() override;
+    virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override;
+
+    virtual void SAL_CALL execute(sal_Int16 nKeyModifier) override;
+private:
+    virtual std::unique_ptr<WeldToolbarPopup> weldPopupWindow() override;
+    virtual VclPtr<vcl::Window> createVclPopupWindow( vcl::Window* pParent ) override;
 };
 
     class LineListBox final : public ListBox
@@ -2343,12 +2365,14 @@ Color ColorStatus::GetColor()
 }
 
 
-SvxFrameWindow_Impl::SvxFrameWindow_Impl ( svt::ToolboxController& rController, vcl::Window* pParentWindow ) :
-    ToolbarPopup( rController.getFrameInterface(), pParentWindow, WB_STDPOPUP | WB_MOVEABLE | WB_CLOSEABLE ),
-    aFrameSet   ( VclPtr<SvxFrmValueSet_Impl>::Create(this, WinBits( WB_ITEMBORDER | WB_DOUBLEBORDER | WB_3DLOOK | WB_NO_DIRECTSELECT )) ),
-    mrController( rController ),
-    bParagraphMode(false)
+SvxFrameWindow_Impl::SvxFrameWindow_Impl(SvxFrameToolBoxControl* pControl, weld::Widget* pParent)
+    : WeldToolbarPopup(pControl->getFrameInterface(), pParent, "svx/ui/floatingframeborder.ui", "FloatingFrameBorder")
+    , mxControl(pControl)
+    , mxFrameSet(new SvxFrmValueSet_Impl)
+    , mxFrameSetWin(new weld::CustomWeld(*m_xBuilder, "valueset", *mxFrameSet))
+    , bParagraphMode(false)
 {
+    mxFrameSet->SetStyle(WB_ITEMBORDER | WB_DOUBLEBORDER | WB_3DLOOK | WB_NO_DIRECTSELECT);
     AddStatusListener(".uno:BorderReducedMode");
     InitImageList();
 
@@ -2364,58 +2388,19 @@ SvxFrameWindow_Impl::SvxFrameWindow_Impl ( svt::ToolboxController& rController,
     sal_uInt16 i = 0;
 
     for ( i=1; i<9; i++ )
-        aFrameSet->InsertItem(i, Image(aImgVec[i-1]));
+        mxFrameSet->InsertItem(i, Image(aImgVec[i-1]));
 
     //bParagraphMode should have been set in StateChanged
     if ( !bParagraphMode )
         for ( i = 9; i < 13; i++ )
-            aFrameSet->InsertItem(i, Image(aImgVec[i-1]));
+            mxFrameSet->InsertItem(i, Image(aImgVec[i-1]));
 
-    aFrameSet->SetColCount( 4 );
-    aFrameSet->SetSelectHdl( LINK( this, SvxFrameWindow_Impl, SelectHdl ) );
+    mxFrameSet->SetColCount( 4 );
+    mxFrameSet->SetSelectHdl( LINK( this, SvxFrameWindow_Impl, SelectHdl ) );
     CalcSizeValueSet();
 
-    SetHelpId( HID_POPUP_FRAME );
-    SetText( SvxResId(RID_SVXSTR_FRAME) );
-    aFrameSet->SetAccessibleName( SvxResId(RID_SVXSTR_FRAME) );
-    aFrameSet->Show();
-}
-
-SvxFrameWindow_Impl::~SvxFrameWindow_Impl()
-{
-    disposeOnce();
-}
-
-void SvxFrameWindow_Impl::dispose()
-{
-    aFrameSet.disposeAndClear();
-    ToolbarPopup::dispose();
-}
-
-void SvxFrameWindow_Impl::GetFocus()
-{
-    if (aFrameSet)
-        aFrameSet->StartSelection();
-}
-
-void SvxFrameWindow_Impl::KeyInput( const KeyEvent& rKEvt )
-{
-    aFrameSet->GrabFocus();
-    aFrameSet->KeyInput( rKEvt );
-}
-
-void SvxFrameWindow_Impl::DataChanged( const DataChangedEvent& rDCEvt )
-{
-    ToolbarPopup::DataChanged( rDCEvt );
-
-    if ( ( rDCEvt.GetType() == DataChangedEventType::SETTINGS ) && ( rDCEvt.GetFlags() & AllSettingsFlags::STYLE ) )
-    {
-        InitImageList();
-
-        sal_uInt16 nNumOfItems = aFrameSet->GetItemCount();
-        for ( sal_uInt16 i = 1 ; i <= nNumOfItems ; ++i )
-            aFrameSet->SetItemImage( i, Image(aImgVec[i-1]) );
-    }
+    mxFrameSet->SetHelpId( HID_POPUP_FRAME );
+    mxFrameSet->SetAccessibleName( SvxResId(RID_SVXSTR_FRAME) );
 }
 
 namespace {
@@ -2440,10 +2425,8 @@ namespace o3tl {
 // By default unset lines remain unchanged.
 // Via Shift unset lines are reset
 
-IMPL_LINK_NOARG(SvxFrameWindow_Impl, SelectHdl, ValueSet*, void)
+IMPL_LINK_NOARG(SvxFrameWindow_Impl, SelectHdl, SvtValueSet*, void)
 {
-    VclPtr<SvxFrameWindow_Impl> xThis(this);
-
     SvxBoxItem          aBorderOuter( SID_ATTR_BORDER_OUTER );
     SvxBoxInfoItem      aBorderInner( SID_ATTR_BORDER_INNER );
     SvxBorderLine       theDefLine;
@@ -2451,8 +2434,8 @@ IMPL_LINK_NOARG(SvxFrameWindow_Impl, SelectHdl, ValueSet*, void)
                         *pRight = nullptr,
                         *pTop = nullptr,
                         *pBottom = nullptr;
-    sal_uInt16           nSel = aFrameSet->GetSelectedItemId();
-    sal_uInt16           nModifier = aFrameSet->GetModifier();
+    sal_uInt16           nSel = mxFrameSet->GetSelectedItemId();
+    sal_uInt16           nModifier = mxFrameSet->GetModifier();
     FrmValidFlags        nValidFlags = FrmValidFlags::NONE;
 
     theDefLine.GuessLinesWidths(theDefLine.GetBorderLineStyle(),
@@ -2531,9 +2514,6 @@ IMPL_LINK_NOARG(SvxFrameWindow_Impl, SelectHdl, ValueSet*, void)
     aBorderInner.SetValid( SvxBoxInfoItemValidFlags::DISTANCE );
     aBorderInner.SetValid( SvxBoxInfoItemValidFlags::DISABLE,   false );
 
-    if ( IsInPopupMode() )
-        EndPopupMode();
-
     Any a;
     Sequence< PropertyValue > aArgs( 2 );
     aArgs[0].Name = "OuterBorder";
@@ -2543,15 +2523,17 @@ IMPL_LINK_NOARG(SvxFrameWindow_Impl, SelectHdl, ValueSet*, void)
     aBorderInner.QueryValue( a );
     aArgs[1].Value = a;
 
-    if (aFrameSet)
+    if (mxFrameSet)
     {
         /* #i33380# Moved the following line above the Dispatch() call.
            This instance may be deleted in the meantime (i.e. when a dialog is opened
            while in Dispatch()), accessing members will crash in this case. */
-        aFrameSet->SetNoSelection();
+        mxFrameSet->SetNoSelection();
     }
 
-    mrController.dispatchCommand( ".uno:SetBorderStyle", aArgs );
+    mxControl->dispatchCommand( ".uno:SetBorderStyle", aArgs );
+
+    mxControl->EndPopupMode();
 }
 
 void SvxFrameWindow_Impl::statusChanged( const css::frame::FeatureStateEvent& rEvent )
@@ -2563,21 +2545,21 @@ void SvxFrameWindow_Impl::statusChanged( const css::frame::FeatureStateEvent& rE
         {
             bParagraphMode = bValue;
             //initial calls mustn't insert or remove elements
-            if(aFrameSet->GetItemCount())
+            if(mxFrameSet->GetItemCount())
             {
-                bool bTableMode = ( aFrameSet->GetItemCount() == 12 );
+                bool bTableMode = ( mxFrameSet->GetItemCount() == 12 );
                 bool bResize    = false;
 
                 if ( bTableMode && bParagraphMode )
                 {
                     for ( sal_uInt16 i = 9; i < 13; i++ )
-                        aFrameSet->RemoveItem(i);
+                        mxFrameSet->RemoveItem(i);
                     bResize = true;
                 }
                 else if ( !bTableMode && !bParagraphMode )
                 {
                     for ( sal_uInt16 i = 9; i < 13; i++ )
-                        aFrameSet->InsertItem(i, Image(aImgVec[i-1]));
+                        mxFrameSet->InsertItem(i, Image(aImgVec[i-1]));
                     bResize = true;
                 }
 
@@ -2592,12 +2574,12 @@ void SvxFrameWindow_Impl::statusChanged( const css::frame::FeatureStateEvent& rE
 
 void SvxFrameWindow_Impl::CalcSizeValueSet()
 {
-    Size aItemSize( 20 * GetParent()->GetDPIScaleFactor(), 20 * GetParent()->GetDPIScaleFactor() );
-    Size aSize = aFrameSet->CalcWindowSizePixel( aItemSize );
-    aFrameSet->SetPosSizePixel( Point( 2, 2 ), aSize );
-    aSize.AdjustWidth(4 );
-    aSize.AdjustHeight(4 );
-    SetOutputSizePixel( aSize );
+    weld::DrawingArea* pDrawingArea = mxFrameSet->GetDrawingArea();
+    const OutputDevice& rDevice = pDrawingArea->get_ref_device();
+    Size aItemSize( 20 * rDevice.GetDPIScaleFactor(), 20 * rDevice.GetDPIScaleFactor() );
+    Size aSize = mxFrameSet->CalcWindowSizePixel( aItemSize );
+    pDrawingArea->set_size_request(aSize.Width(), aSize.Height());
+    mxFrameSet->SetOutputSizePixel(aSize);
 }
 
 void SvxFrameWindow_Impl::InitImageList()
@@ -3611,48 +3593,60 @@ com_sun_star_comp_svx_ColorToolBoxControl_get_implementation(
     return cppu::acquire( new SvxColorToolBoxControl( rContext ) );
 }
 
-// class SvxFrameToolBoxControl --------------------------------------------
-
-namespace {
-
-class SvxFrameToolBoxControl : public svt::PopupWindowController
+SvxFrameToolBoxControl::SvxFrameToolBoxControl( const css::uno::Reference< css::uno::XComponentContext >& rContext )
+    : svt::PopupWindowController( rContext, nullptr, OUString() )
 {
-public:
-    explicit SvxFrameToolBoxControl( const css::uno::Reference< css::uno::XComponentContext >& rContext );
-
-    // XInitialization
-    virtual void SAL_CALL initialize( const css::uno::Sequence< css::uno::Any >& rArguments ) override;
-
-    // XServiceInfo
-    virtual OUString SAL_CALL getImplementationName() override;
-    virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override;
-
-private:
-    virtual VclPtr<vcl::Window> createVclPopupWindow( vcl::Window* pParent ) override;
-};
-
 }
 
-SvxFrameToolBoxControl::SvxFrameToolBoxControl( const css::uno::Reference< css::uno::XComponentContext >& rContext )
-    : svt::PopupWindowController( rContext, nullptr, OUString() )
+void SAL_CALL SvxFrameToolBoxControl::execute(sal_Int16 /*KeyModifier*/)
 {
+    if (m_pToolbar)
+    {
+        // Toggle the popup also when toolbutton is activated
+        const OString aId(m_aCommandURL.toUtf8());
+        m_pToolbar->set_menu_item_active(aId, !m_pToolbar->get_menu_item_active(aId));
+    }
+    else
+    {
+        // Open the popup also when Enter key is pressed.
+        createPopupWindow();
+    }
 }
 
 void SvxFrameToolBoxControl::initialize( const css::uno::Sequence< css::uno::Any >& rArguments )
 {
     svt::PopupWindowController::initialize( rArguments );
+
+    if (m_pToolbar)
+    {
+        mxPopoverContainer.reset(new ToolbarPopupContainer(m_pToolbar));
+        m_pToolbar->set_item_popover(m_aCommandURL.toUtf8(), mxPopoverContainer->getTopLevel());
+    }
+
     ToolBox* pToolBox = nullptr;
     sal_uInt16 nId = 0;
-    if ( getToolboxId( nId, &pToolBox ) )
+    if (getToolboxId(nId, &pToolBox))
         pToolBox->SetItemBits( nId, pToolBox->GetItemBits( nId ) | ToolBoxItemBits::DROPDOWNONLY );
 }
 
+std::unique_ptr<WeldToolbarPopup> SvxFrameToolBoxControl::weldPopupWindow()
+{
+    return std::make_unique<SvxFrameWindow_Impl>(this, m_pToolbar);
+}
+
 VclPtr<vcl::Window> SvxFrameToolBoxControl::createVclPopupWindow( vcl::Window* pParent )
 {
     if ( m_aCommandURL == ".uno:LineStyle" )
         return VclPtr<SvxLineWindow_Impl>::Create( *this, pParent );
 
-    return VclPtr<SvxFrameWindow_Impl>::Create( *this, pParent );
+    mxInterimPopover = VclPtr<InterimToolbarPopup>::Create(getFrameInterface(), pParent,
+        std::make_unique<SvxFrameWindow_Impl>(this, pParent->GetFrameWeld()));
+
+    mxInterimPopover->Show();
+
+    mxInterimPopover->SetText(SvxResId(RID_SVXSTR_FRAME));
+
+    return mxInterimPopover;
 }
 
 OUString SvxFrameToolBoxControl::getImplementationName()
diff --git a/svx/uiconfig/ui/floatingframeborder.ui b/svx/uiconfig/ui/floatingframeborder.ui
new file mode 100644
index 000000000000..684c86cd05dd
--- /dev/null
+++ b/svx/uiconfig/ui/floatingframeborder.ui
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Generated with glade 3.22.1 -->
+<interface domain="sc">
+  <requires lib="gtk+" version="3.18"/>
+  <object class="GtkPopover" id="FloatingFrameBorder">
+    <property name="can_focus">False</property>
+    <property name="no_show_all">True</property>
+    <property name="border_width">4</property>
+    <child>
+      <object class="GtkBox" id="container">
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <property name="orientation">vertical</property>
+        <property name="spacing">6</property>
+        <child>
+          <object class="GtkScrolledWindow" id="valuesetwin">
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="hexpand">True</property>
+            <property name="vexpand">True</property>
+            <property name="hscrollbar_policy">never</property>
+            <property name="vscrollbar_policy">never</property>
+            <property name="shadow_type">in</property>
+            <child>
+              <object class="GtkViewport">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <child>
+                  <object class="GtkDrawingArea" id="valueset">
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="events">GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK | GDK_STRUCTURE_MASK</property>
+                    <property name="hexpand">True</property>
+                    <property name="vexpand">True</property>
+                  </object>
+                </child>
+              </object>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">True</property>
+            <property name="position">0</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+  </object>
+</interface>
diff --git a/sw/uiconfig/swriter/ui/sidebartableedit.ui b/sw/uiconfig/swriter/ui/sidebartableedit.ui
index 8496672d827e..2a67ff4acf9d 100644
--- a/sw/uiconfig/swriter/ui/sidebartableedit.ui
+++ b/sw/uiconfig/swriter/ui/sidebartableedit.ui
@@ -509,7 +509,7 @@
               </packing>
             </child>
             <child>
-              <object class="GtkToolButton" id=".uno:SetBorderStyle">
+              <object class="GtkMenuToolButton" id=".uno:SetBorderStyle">
                 <property name="visible">True</property>
                 <property name="can_focus">False</property>
                 <property name="use_underline">True</property>


More information about the Libreoffice-commits mailing list