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

Caolán McNamara (via logerrit) logerrit at kemper.freedesktop.org
Tue Jan 14 15:42:53 UTC 2020


 include/svx/layctrl.hxx         |    1 
 svx/source/tbxctrls/layctrl.cxx |  166 +++++++++++++++++++---------------------
 svx/uiconfig/ui/tablewindow.ui  |    2 
 3 files changed, 82 insertions(+), 87 deletions(-)

New commits:
commit 084549285b1683b0efd6f4301e6350f95bded729
Author:     Caolán McNamara <caolanm at redhat.com>
AuthorDate: Tue Jan 14 14:48:04 2020 +0000
Commit:     Caolán McNamara <caolanm at redhat.com>
CommitDate: Tue Jan 14 16:42:20 2020 +0100

    weld TableWindow
    
    Change-Id: If3b0f363b8f1f70d7d044a8e75def3fbab3d5e97
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/86766
    Tested-by: Jenkins
    Reviewed-by: Caolán McNamara <caolanm at redhat.com>

diff --git a/include/svx/layctrl.hxx b/include/svx/layctrl.hxx
index e56a95ddc1c8..c66c5e671ac0 100644
--- a/include/svx/layctrl.hxx
+++ b/include/svx/layctrl.hxx
@@ -29,6 +29,7 @@ public:
     SvxTableToolBoxControl(const css::uno::Reference<css::uno::XComponentContext>& rContext);
     virtual ~SvxTableToolBoxControl() override;
 
+    virtual std::unique_ptr<WeldToolbarPopup> weldPopupWindow() override;
     using svt::ToolboxController::createPopupWindow;
     virtual VclPtr<vcl::Window> createPopupWindow( vcl::Window* pParent ) override;
 
diff --git a/svx/source/tbxctrls/layctrl.cxx b/svx/source/tbxctrls/layctrl.cxx
index e93b02f6428d..c20e12316306 100644
--- a/svx/source/tbxctrls/layctrl.cxx
+++ b/svx/source/tbxctrls/layctrl.cxx
@@ -50,11 +50,12 @@ SFX_IMPL_TOOLBOX_CONTROL(SvxColumnsToolBoxControl,SfxUInt16Item);
 
 namespace {
 
-class TableWindow final : public svtools::ToolbarPopup
+class TableWindow final : public WeldToolbarPopup
 {
 private:
-    VclPtr<PushButton>  aTableButton;
-    VclPtr<VclDrawingArea> aDrawingArea;
+    std::unique_ptr<weld::Button> mxTableButton;
+    std::unique_ptr<weld::DrawingArea> mxDrawingArea;
+    ::Color             aFontColor;
     ::Color             aLineColor;
     ::Color             aFillColor;
     ::Color             aHighlightFillColor;
@@ -73,21 +74,23 @@ private:
     long mnTableWidth;
     long mnTableHeight;
 
-    DECL_LINK( SelectHdl, Button*, void );
+    DECL_LINK(SelectHdl, weld::Button&, void);
 
 public:
-    TableWindow( SvxTableToolBoxControl* pControl, vcl::Window* pParent,
-                 const OUString&            rCmd,
-                 const OUString&            rText );
-    virtual ~TableWindow() override;
-    virtual void            dispose() override;
+    TableWindow( SvxTableToolBoxControl* pControl, weld::Widget* pParent,
+                 const OUString& rCmd);
+    virtual void GrabFocus() override
+    {
+        mxDrawingArea->grab_focus();
+    }
 
     DECL_LINK(KeyInputHdl, const KeyEvent& rKEvt, bool);
     DECL_LINK(MouseMoveHdl, const MouseEvent&, bool);
     DECL_LINK(MouseButtonUpHdl, const MouseEvent&, bool);
+    DECL_STATIC_LINK(TableWindow, MouseButtonDownHdl, const MouseEvent&, bool);
+    DECL_LINK(ResizeHdl, const Size&, void);
     typedef std::pair<vcl::RenderContext&, const tools::Rectangle&> target_and_area;
     DECL_LINK(PaintHdl, target_and_area, void);
-    virtual bool            EventNotify( NotifyEvent& rNEvt ) override;
 
 private:
     void                    Update( long nNewCol, long nNewLine );
@@ -102,22 +105,21 @@ const long TableWindow::TABLE_CELLS_HORIZ = 10;
 const long TableWindow::TABLE_CELLS_VERT = 15;
 
 
-IMPL_LINK_NOARG(TableWindow, SelectHdl, Button*, void)
+IMPL_LINK_NOARG(TableWindow, SelectHdl, weld::Button&, void)
 {
     CloseAndShowTableDialog();
 }
 
-TableWindow::TableWindow( SvxTableToolBoxControl* pControl, vcl::Window* pParent, const OUString& rCmd,
-                          const OUString& rText )
-    : ToolbarPopup(pControl->getFrameInterface(), pParent, "TableWindow", "svx/ui/tablewindow.ui")
-    , aTableButton(get<PushButton>("moreoptions"))
-    , aDrawingArea(get<VclDrawingArea>("table"))
+TableWindow::TableWindow(SvxTableToolBoxControl* pControl, weld::Widget* pParent, const OUString& rCmd)
+    : WeldToolbarPopup(pControl->getFrameInterface(), pParent, "svx/ui/tablewindow.ui", "TableWindow")
+    , mxTableButton(m_xBuilder->weld_button("moreoptions"))
+    , mxDrawingArea(m_xBuilder->weld_drawing_area("table"))
     , nCol( 0 )
     , nLine( 0 )
     , maCommand( rCmd )
     , mxControl(pControl)
 {
-    float fScaleFactor = GetDPIScaleFactor();
+    float fScaleFactor = mxDrawingArea->get_ref_device().GetDPIScaleFactor();
 
     mnTableCellWidth  = 15 * fScaleFactor;
     mnTableCellHeight = 15 * fScaleFactor;
@@ -127,52 +129,26 @@ TableWindow::TableWindow( SvxTableToolBoxControl* pControl, vcl::Window* pParent
 
     const StyleSettings& rStyles = Application::GetSettings().GetStyleSettings();
     svtools::ColorConfig aColorConfig;
-
+    aFontColor = aColorConfig.GetColorValue( svtools::FONTCOLOR ).nColor;
     aLineColor = rStyles.GetShadowColor();
     aFillColor = rStyles.GetWindowColor();
     aHighlightFillColor = rStyles.GetHighlightColor();
-    aBackgroundColor = aDrawingArea->GetSettings().GetStyleSettings().GetFaceColor();
-
-    aDrawingArea->SetBackground( aBackgroundColor );
-    vcl::Font aFont = aDrawingArea->GetFont();
-    aFont.SetColor( aColorConfig.GetColorValue( svtools::FONTCOLOR ).nColor );
-    aFont.SetFillColor( aBackgroundColor );
-    aFont.SetTransparent( false );
-    aDrawingArea->SetFont( aFont );
+    aBackgroundColor = rStyles.GetFaceColor();
 
-    aDrawingArea->SetKeyPressHdl(LINK(this, TableWindow, KeyInputHdl));
-    aDrawingArea->SetMouseMoveHdl(LINK(this, TableWindow, MouseMoveHdl));
-    aDrawingArea->SetMouseReleaseHdl(LINK(this, TableWindow, MouseButtonUpHdl));
-    aDrawingArea->SetPaintHdl(LINK(this, TableWindow, PaintHdl));
+    mxDrawingArea->connect_key_press(LINK(this, TableWindow, KeyInputHdl));
+    mxDrawingArea->connect_mouse_move(LINK(this, TableWindow, MouseMoveHdl));
+    mxDrawingArea->connect_mouse_release(LINK(this, TableWindow, MouseButtonUpHdl));
+    mxDrawingArea->connect_mouse_press(LINK(this, TableWindow, MouseButtonDownHdl));
+    mxDrawingArea->connect_size_allocate(LINK(this, TableWindow, ResizeHdl));
+    mxDrawingArea->connect_draw(LINK(this, TableWindow, PaintHdl));
 
-    SetText( rText );
-
-    // if parent window is a toolbox only display table button when mouse activated
-    ToolBox* pToolBox = nullptr;
-    if (pParent->GetType() == WindowType::TOOLBOX)
-        pToolBox = dynamic_cast<ToolBox*>( pParent );
-    if ( !pToolBox || !pToolBox->IsKeyEvent() )
-    {
-        aTableButton->SetText( SvxResId( RID_SVXSTR_MORE ) );
-        aTableButton->SetClickHdl( LINK( this, TableWindow, SelectHdl ) );
-        aTableButton->Show();
-    }
+    mxTableButton->set_label( SvxResId( RID_SVXSTR_MORE ) );
+    mxTableButton->connect_clicked( LINK( this, TableWindow, SelectHdl ) );
+    mxTableButton->show();
 
     // + 1 to leave space to draw the right/bottom borders
-    aDrawingArea->set_width_request(mnTableWidth + 1);
-    aDrawingArea->set_height_request(mnTableHeight + 1);
-}
-
-TableWindow::~TableWindow()
-{
-    disposeOnce();
-}
-
-void TableWindow::dispose()
-{
-    aTableButton.disposeAndClear();
-    aDrawingArea.disposeAndClear();
-    ToolbarPopup::dispose();
+    mxDrawingArea->set_size_request(mnTableWidth + 1, mnTableHeight + 1);
+    mxDrawingArea->queue_draw();
 }
 
 IMPL_LINK(TableWindow, MouseMoveHdl, const MouseEvent&, rMEvt, bool)
@@ -204,7 +180,7 @@ IMPL_LINK(TableWindow, KeyInputHdl, const KeyEvent&, rKEvt, bool)
                 if ( nNewLine > 1 )
                     nNewLine--;
                 else
-                    EndPopupMode();
+                    mxControl->EndPopupMode();
                 break;
             case KEY_DOWN:
                 if ( nNewLine < TABLE_CELLS_VERT )
@@ -216,7 +192,7 @@ IMPL_LINK(TableWindow, KeyInputHdl, const KeyEvent&, rKEvt, bool)
                 if ( nNewCol > 1 )
                     nNewCol--;
                 else
-                    EndPopupMode();
+                    mxControl->EndPopupMode();
                 break;
             case KEY_RIGHT:
                 if ( nNewCol < TABLE_CELLS_HORIZ )
@@ -225,12 +201,11 @@ IMPL_LINK(TableWindow, KeyInputHdl, const KeyEvent&, rKEvt, bool)
                     CloseAndShowTableDialog();
                 break;
             case KEY_ESCAPE:
-                EndPopupMode();
+                mxControl->EndPopupMode();
                 break;
             case KEY_RETURN:
                 InsertTable();
-                EndPopupMode();
-                GrabFocusToDocument();
+                mxControl->EndPopupMode();
                 return true;
             default:
                 bHandled = false;
@@ -240,11 +215,10 @@ IMPL_LINK(TableWindow, KeyInputHdl, const KeyEvent&, rKEvt, bool)
             Update( nNewCol, nNewLine );
         }
     }
-    else if(KEY_MOD1 == nModifier && KEY_RETURN == nKey)
+    else if (KEY_MOD1 == nModifier && KEY_RETURN == nKey)
     {
         InsertTable();
-        EndPopupMode();
-        GrabFocusToDocument();
+        mxControl->EndPopupMode();
         return true;
     }
 
@@ -254,16 +228,33 @@ IMPL_LINK(TableWindow, KeyInputHdl, const KeyEvent&, rKEvt, bool)
 IMPL_LINK_NOARG(TableWindow, MouseButtonUpHdl, const MouseEvent&, bool)
 {
     InsertTable();
-    EndPopupMode();
-    GrabFocusToDocument();
+    mxControl->EndPopupMode();
+    return true;
+}
 
+IMPL_STATIC_LINK_NOARG(TableWindow, MouseButtonDownHdl, const MouseEvent&, bool)
+{
     return true;
 }
 
+IMPL_LINK_NOARG(TableWindow, ResizeHdl, const Size&, void)
+{
+    mxDrawingArea->queue_draw();
+}
+
 IMPL_LINK(TableWindow, PaintHdl, target_and_area, aPayload, void)
 {
     vcl::RenderContext& rRenderContext = aPayload.first;
 
+    rRenderContext.Push(PushFlags::FONT);
+
+    rRenderContext.SetBackground( aBackgroundColor );
+    vcl::Font aFont = rRenderContext.GetFont();
+    aFont.SetColor( aFontColor );
+    aFont.SetFillColor( aBackgroundColor );
+    aFont.SetTransparent( false );
+    rRenderContext.SetFont( aFont );
+
     const long nSelectionWidth = nCol * mnTableCellWidth;
     const long nSelectionHeight = nLine * mnTableCellHeight;
 
@@ -297,7 +288,10 @@ IMPL_LINK(TableWindow, PaintHdl, target_and_area, aPayload, void)
 
     // the text near the mouse cursor telling the table dimensions
     if (!nCol || !nLine)
+    {
+        rRenderContext.Pop();
         return;
+    }
 
     OUString aText = OUString::number( nCol ) + " x " + OUString::number( nLine );
     if (maCommand == ".uno:ShowMultiplePages")
@@ -325,10 +319,12 @@ IMPL_LINK(TableWindow, PaintHdl, target_and_area, aPayload, void)
                                       nTextY + aTextSize.Height() + nTipBorder));
 
     // #i95350# force RTL output
-    if (IsRTLEnabled())
+    if (mxDrawingArea->get_direction())
         aText = u"\u202D" + aText;
 
     rRenderContext.DrawText(Point(nTextX, nTextY), aText);
+
+    rRenderContext.Pop();
 }
 
 void TableWindow::InsertTable()
@@ -357,7 +353,7 @@ void TableWindow::Update( long nNewCol, long nNewLine )
     {
         nCol = nNewCol;
         nLine = nNewLine;
-        aDrawingArea->Invalidate(tools::Rectangle(0, 0, mnTableWidth, mnTableHeight));
+        mxDrawingArea->queue_draw_area(0, 0, mnTableWidth, mnTableHeight);
     }
 }
 
@@ -380,27 +376,12 @@ void TableWindow::TableDialog( const Sequence< PropertyValue >& rArgs )
 void TableWindow::CloseAndShowTableDialog()
 {
     // close the toolbar tool
-    EndPopupMode();
+    mxControl->EndPopupMode();
 
     // and open the table dialog instead
     TableDialog( Sequence< PropertyValue >() );
 }
 
-bool TableWindow::EventNotify( NotifyEvent& rNEvt )
-{
-    // handle table button key input
-    if ( rNEvt.GetType() == MouseNotifyEvent::KEYINPUT )
-    {
-        const vcl::KeyCode& rKey = rNEvt.GetKeyEvent()->GetKeyCode();
-        const sal_uInt16 nCode = rKey.GetCode();
-        if ( nCode != KEY_RETURN && nCode != KEY_SPACE && nCode != KEY_ESCAPE )
-        {
-            return true;
-        }
-    }
-    return ToolbarPopup::EventNotify( rNEvt );
-}
-
 namespace {
 
 class ColumnsWindow : public SfxPopupWindow
@@ -719,12 +700,25 @@ SvxTableToolBoxControl::~SvxTableToolBoxControl()
 {
 }
 
-VclPtr<vcl::Window> SvxTableToolBoxControl::createPopupWindow(vcl::Window* pParent)
+std::unique_ptr<WeldToolbarPopup> SvxTableToolBoxControl::weldPopupWindow()
+{
+    return std::make_unique<TableWindow>(this, m_pToolbar, m_aCommandURL);
+}
+
+VclPtr<vcl::Window> SvxTableToolBoxControl::createPopupWindow( vcl::Window* pParent )
 {
     ToolBox* pToolBox = nullptr;
     sal_uInt16 nId = 0;
     bool bToolBox = getToolboxId(nId, &pToolBox);
-    return VclPtr<TableWindow>::Create(this, pParent, m_aCommandURL, bToolBox ? pToolBox->GetItemText(nId) : OUString());
+
+    mxInterimPopover = VclPtr<InterimToolbarPopup>::Create(getFrameInterface(), pParent,
+        std::make_unique<TableWindow>(this, pParent->GetFrameWeld(), m_aCommandURL));
+
+    mxInterimPopover->SetText(bToolBox ? pToolBox->GetItemText(nId) : OUString());
+
+    mxInterimPopover->Show();
+
+    return mxInterimPopover;
 }
 
 OUString SvxTableToolBoxControl::getImplementationName()
diff --git a/svx/uiconfig/ui/tablewindow.ui b/svx/uiconfig/ui/tablewindow.ui
index 26bf5ab41a61..6e934e7545b0 100644
--- a/svx/uiconfig/ui/tablewindow.ui
+++ b/svx/uiconfig/ui/tablewindow.ui
@@ -18,7 +18,7 @@
           <object class="GtkDrawingArea" id="table">
             <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="events">GDK_BUTTON_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK | GDK_STRUCTURE_MASK</property>
             <property name="halign">center</property>
             <property name="valign">center</property>
             <property name="hexpand">True</property>


More information about the Libreoffice-commits mailing list