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

Caolán McNamara (via logerrit) logerrit at kemper.freedesktop.org
Fri Feb 7 15:17:15 UTC 2020


 svx/UIConfig_svx.mk              |    1 
 svx/source/tbxctrls/grafctrl.cxx |  145 ++++++++++++++++++++-------------------
 svx/uiconfig/ui/grafmodebox.ui   |   23 ++++++
 3 files changed, 101 insertions(+), 68 deletions(-)

New commits:
commit 06164bdf2f5babd337a2f7813c572ca17056c521
Author:     Caolán McNamara <caolanm at redhat.com>
AuthorDate: Fri Feb 7 12:45:11 2020 +0000
Commit:     Caolán McNamara <caolanm at redhat.com>
CommitDate: Fri Feb 7 16:16:44 2020 +0100

    weld ImplGrafModeControl ItemWindow
    
    Change-Id: Ib71436cf9ecb312ea9f273bb974954556868e613
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/88189
    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 f3be7c4967ef..d43fb789f426 100644
--- a/svx/UIConfig_svx.mk
+++ b/svx/UIConfig_svx.mk
@@ -68,6 +68,7 @@ $(eval $(call gb_UIConfig_add_uifiles,svx,\
 	svx/uiconfig/ui/functionmenu \
 	svx/uiconfig/ui/gallerymenu1 \
 	svx/uiconfig/ui/gallerymenu2 \
+	svx/uiconfig/ui/grafmodebox \
 	svx/uiconfig/ui/headfootformatpage \
 	svx/uiconfig/ui/imapdialog \
 	svx/uiconfig/ui/imapmenu \
diff --git a/svx/source/tbxctrls/grafctrl.cxx b/svx/source/tbxctrls/grafctrl.cxx
index 588dbc25623f..3f8c084e06f7 100644
--- a/svx/source/tbxctrls/grafctrl.cxx
+++ b/svx/source/tbxctrls/grafctrl.cxx
@@ -332,99 +332,108 @@ void ImplGrafControl::Resize()
 
 namespace {
 
-class ImplGrafModeControl : public ListBox
+class ImplGrafModeControl final : public InterimItemWindow
 {
-    using Window::Update;
 private:
-    sal_uInt16              mnCurPos;
+    sal_uInt16 mnCurPos;
     Reference< XFrame > mxFrame;
+    std::unique_ptr<weld::ComboBox> m_xWidget;
+
+    DECL_LINK(SelectHdl, weld::ComboBox&, void);
+    DECL_LINK(KeyInputHdl, const KeyEvent&, bool);
+    DECL_LINK(FocusInHdl, weld::Widget&, void);
 
-    virtual void    Select() override;
-    virtual bool    PreNotify( NotifyEvent& rNEvt ) override;
-    virtual bool    EventNotify( NotifyEvent& rNEvt ) override;
     static void     ImplReleaseFocus();
 
 public:
-                    ImplGrafModeControl( vcl::Window* pParent, const Reference< XFrame >& rFrame );
+    ImplGrafModeControl( vcl::Window* pParent, const Reference< XFrame >& rFrame );
+    virtual void dispose() override;
+    virtual ~ImplGrafModeControl() override;
+
+    virtual void GetFocus() override
+    {
+        m_xWidget->grab_focus();
+    }
+
+    void set_sensitive(bool bSensitive)
+    {
+        Enable(bSensitive);
+        m_xWidget->set_sensitive(true);
+    }
+
+    void set_active(int nActive)
+    {
+        m_xWidget->set_active(nActive);
+    }
 
     void            Update( const SfxPoolItem* pItem );
 };
 
 }
 
-ImplGrafModeControl::ImplGrafModeControl( vcl::Window* pParent, const Reference< XFrame >& rFrame ) :
-    ListBox( pParent, WB_BORDER | WB_DROPDOWN | WB_AUTOHSCROLL ),
-    mnCurPos( 0 ),
-    mxFrame( rFrame )
+ImplGrafModeControl::ImplGrafModeControl(vcl::Window* pParent, const Reference<XFrame>& rFrame)
+    : InterimItemWindow(pParent, "svx/ui/grafmodebox.ui", "GrafModeBox")
+    , mnCurPos(0)
+    , mxFrame(rFrame)
+    , m_xWidget(m_xBuilder->weld_combo_box("grafmode"))
 {
-    SetSizePixel( Size( 100, 260 ) );
+    m_xWidget->append_text( SvxResId( RID_SVXSTR_GRAFMODE_STANDARD  ) );
+    m_xWidget->append_text( SvxResId( RID_SVXSTR_GRAFMODE_GREYS     ) );
+    m_xWidget->append_text( SvxResId( RID_SVXSTR_GRAFMODE_MONO      ) );
+    m_xWidget->append_text( SvxResId( RID_SVXSTR_GRAFMODE_WATERMARK ) );
 
-    InsertEntry( SvxResId( RID_SVXSTR_GRAFMODE_STANDARD  ) );
-    InsertEntry( SvxResId( RID_SVXSTR_GRAFMODE_GREYS     ) );
-    InsertEntry( SvxResId( RID_SVXSTR_GRAFMODE_MONO      ) );
-    InsertEntry( SvxResId( RID_SVXSTR_GRAFMODE_WATERMARK ) );
+    m_xWidget->connect_changed(LINK(this, ImplGrafModeControl, SelectHdl));
+    m_xWidget->connect_key_press(LINK(this, ImplGrafModeControl, KeyInputHdl));
+    m_xWidget->connect_focus_in(LINK(this, ImplGrafModeControl, FocusInHdl));
 
-    Show();
+    SetSizePixel(m_xWidget->get_preferred_size());
 }
 
-void ImplGrafModeControl::Select()
+void ImplGrafModeControl::dispose()
 {
-    if ( !IsTravelSelect() )
-    {
-        Sequence< PropertyValue > aArgs( 1 );
-        aArgs[0].Name = "GrafMode";
-        aArgs[0].Value <<= sal_Int16( GetSelectedEntryPos() );
-
-        /*  #i33380# DR 2004-09-03 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. */
-        ImplReleaseFocus();
-
-        SfxToolBoxControl::Dispatch(
-            Reference< XDispatchProvider >( mxFrame->getController(), UNO_QUERY ),
-            ".uno:GrafMode",
-            aArgs );
-    }
+    m_xWidget.reset();
+    InterimItemWindow::dispose();
 }
 
-bool ImplGrafModeControl::PreNotify( NotifyEvent& rNEvt )
+ImplGrafModeControl::~ImplGrafModeControl()
 {
-    MouseNotifyEvent nType = rNEvt.GetType();
-
-    if( MouseNotifyEvent::MOUSEBUTTONDOWN == nType || MouseNotifyEvent::GETFOCUS == nType )
-        mnCurPos = GetSelectedEntryPos();
+    disposeOnce();
+}
 
-    return ListBox::PreNotify( rNEvt );
+IMPL_LINK(ImplGrafModeControl, SelectHdl, weld::ComboBox&, rBox, void)
+{
+    Sequence< PropertyValue > aArgs( 1 );
+    aArgs[0].Name = "GrafMode";
+    aArgs[0].Value <<= sal_Int16(rBox.get_active());
+
+    /*  #i33380# DR 2004-09-03 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. */
+    ImplReleaseFocus();
+
+    SfxToolBoxControl::Dispatch(
+        Reference< XDispatchProvider >( mxFrame->getController(), UNO_QUERY ),
+        ".uno:GrafMode",
+        aArgs );
 }
 
-bool ImplGrafModeControl::EventNotify( NotifyEvent& rNEvt )
+IMPL_LINK(ImplGrafModeControl, KeyInputHdl, const KeyEvent&, rKEvt, bool)
 {
-    bool bHandled = ListBox::EventNotify( rNEvt );
+    bool bHandled(false);
 
-    if( rNEvt.GetType() == MouseNotifyEvent::KEYINPUT )
+    if (rKEvt.GetKeyCode().GetCode() == KEY_ESCAPE)
     {
-        const KeyEvent* pKEvt = rNEvt.GetKeyEvent();
-
-        switch( pKEvt->GetKeyCode().GetCode() )
-        {
-            case KEY_RETURN:
-            {
-                Select();
-                bHandled = true;
-            }
-            break;
-
-            case KEY_ESCAPE:
-            {
-                SelectEntryPos( mnCurPos );
-                ImplReleaseFocus();
-                bHandled = true;
-            }
-            break;
-        }
+        m_xWidget->set_active(mnCurPos);
+        ImplReleaseFocus();
+        bHandled = true;
     }
 
-    return bHandled;
+    return bHandled || ChildKeyInput(rKEvt);
+}
+
+IMPL_LINK_NOARG(ImplGrafModeControl, FocusInHdl, weld::Widget&, void)
+{
+    mnCurPos = m_xWidget->get_active();
 }
 
 void ImplGrafModeControl::ImplReleaseFocus()
@@ -441,9 +450,9 @@ void ImplGrafModeControl::ImplReleaseFocus()
 void ImplGrafModeControl::Update( const SfxPoolItem* pItem )
 {
     if( pItem )
-        SelectEntryPos( static_cast<const SfxUInt16Item*>(pItem)->GetValue() );
+        m_xWidget->set_active(static_cast<const SfxUInt16Item*>(pItem)->GetValue());
     else
-        SetNoSelection();
+        m_xWidget->set_active(-1);
 }
 
 SvxGrafToolBoxControl::SvxGrafToolBoxControl( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx) :
@@ -552,12 +561,12 @@ void SvxGrafModeToolBoxControl::StateChanged( sal_uInt16, SfxItemState eState, c
 
     if( eState == SfxItemState::DISABLED )
     {
-        pCtrl->Disable();
-        pCtrl->SetText( OUString() );
+        pCtrl->set_sensitive(false);
+        pCtrl->set_active(-1);
     }
     else
     {
-        pCtrl->Enable();
+        pCtrl->set_sensitive(true);
 
         if( eState == SfxItemState::DEFAULT )
             pCtrl->Update( pState );
diff --git a/svx/uiconfig/ui/grafmodebox.ui b/svx/uiconfig/ui/grafmodebox.ui
new file mode 100644
index 000000000000..c77d958e57cd
--- /dev/null
+++ b/svx/uiconfig/ui/grafmodebox.ui
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Generated with glade 3.22.1 -->
+<interface domain="svx">
+  <requires lib="gtk+" version="3.18"/>
+  <object class="GtkBox" id="GrafModeBox">
+    <property name="visible">True</property>
+    <property name="can_focus">False</property>
+    <property name="hexpand">True</property>
+    <property name="spacing">6</property>
+    <child>
+      <object class="GtkComboBoxText" id="grafmode">
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <property name="hexpand">True</property>
+      </object>
+      <packing>
+        <property name="expand">False</property>
+        <property name="fill">True</property>
+        <property name="position">0</property>
+      </packing>
+    </child>
+  </object>
+</interface>


More information about the Libreoffice-commits mailing list