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

Caolán McNamara (via logerrit) logerrit at kemper.freedesktop.org
Thu Dec 19 21:10:12 UTC 2019


 include/svx/samecontentlistbox.hxx           |    4 -
 include/svx/spacinglistbox.hxx               |    2 
 svx/source/dialog/samecontentlistbox.cxx     |   13 +++
 svx/source/dialog/spacinglistbox.cxx         |   46 +++++++++++
 sw/source/uibase/sidebar/PageFooterPanel.cxx |  107 ++++++++++++++-------------
 sw/source/uibase/sidebar/PageFooterPanel.hxx |   19 ++--
 sw/uiconfig/swriter/ui/pagefooterpanel.ui    |    6 -
 7 files changed, 133 insertions(+), 64 deletions(-)

New commits:
commit 0a2b871ccdc5a76f793982bae45cb251c71e4b94
Author:     Caolán McNamara <caolanm at redhat.com>
AuthorDate: Thu Dec 19 13:41:16 2019 +0000
Commit:     Caolán McNamara <caolanm at redhat.com>
CommitDate: Thu Dec 19 22:08:44 2019 +0100

    weld PageFooterPanel
    
    Change-Id: Ice9e7c5ab9c1085021ebb3561cfb2bd0a6727066
    Reviewed-on: https://gerrit.libreoffice.org/85526
    Tested-by: Jenkins
    Reviewed-by: Caolán McNamara <caolanm at redhat.com>
    Tested-by: Caolán McNamara <caolanm at redhat.com>

diff --git a/include/svx/samecontentlistbox.hxx b/include/svx/samecontentlistbox.hxx
index 842063125d2e..73946e2a3f35 100644
--- a/include/svx/samecontentlistbox.hxx
+++ b/include/svx/samecontentlistbox.hxx
@@ -22,14 +22,16 @@
 
 #include <svx/svxdllapi.h>
 #include <vcl/lstbox.hxx>
+#include <vcl/weld.hxx>
 
 /// Custom Widget ListBox to hold entries for SameContent setting of Header/Footer
 class SVX_DLLPUBLIC SameContentListBox final : public ListBox
 {
 public:
     SameContentListBox( vcl::Window* pParent );
+    static void Fill(weld::ComboBox& rComboBox);
     Size GetOptimalSize() const override;
 };
 
 #endif
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
\ No newline at end of file
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/include/svx/spacinglistbox.hxx b/include/svx/spacinglistbox.hxx
index 91e7fa18d777..df8b8c043e19 100644
--- a/include/svx/spacinglistbox.hxx
+++ b/include/svx/spacinglistbox.hxx
@@ -22,6 +22,7 @@
 
 #include <svx/svxdllapi.h>
 #include <vcl/lstbox.hxx>
+#include <vcl/weld.hxx>
 
 enum class SpacingType { SPACING_INCH, MARGINS_INCH, SPACING_CM, MARGINS_CM };
 
@@ -31,6 +32,7 @@ class SVX_DLLPUBLIC SpacingListBox final : public ListBox
 public:
     SpacingListBox( vcl::Window* pParent );
     void Init(SpacingType eType);
+    static void Fill(SpacingType eType, weld::ComboBox&);
     Size GetOptimalSize() const override;
 };
 
diff --git a/svx/source/dialog/samecontentlistbox.cxx b/svx/source/dialog/samecontentlistbox.cxx
index 29e72df42e73..e1bd38c05669 100644
--- a/svx/source/dialog/samecontentlistbox.cxx
+++ b/svx/source/dialog/samecontentlistbox.cxx
@@ -36,6 +36,19 @@ SameContentListBox::SameContentListBox(vcl::Window* pParent)
     SelectEntryPos(0);
 }
 
+void SameContentListBox::Fill(weld::ComboBox& rComboBox)
+{
+    rComboBox.clear();
+    for (size_t i = 0; i < SAL_N_ELEMENTS(RID_SVXSTRARY_SAMECONTENT); ++i)
+    {
+        OUString aStr = SvxResId(RID_SVXSTRARY_SAMECONTENT[i].first);
+        sal_uInt32 nData = RID_SVXSTRARY_SAMECONTENT[i].second;
+        rComboBox.append(OUString::number(nData), aStr);
+    }
+    rComboBox.set_active(0);
+    rComboBox.set_size_request(150, -1);
+}
+
 VCL_BUILDER_FACTORY(SameContentListBox);
 
 Size SameContentListBox::GetOptimalSize() const
diff --git a/svx/source/dialog/spacinglistbox.cxx b/svx/source/dialog/spacinglistbox.cxx
index 90654618f994..ac31393b3a2f 100644
--- a/svx/source/dialog/spacinglistbox.cxx
+++ b/svx/source/dialog/spacinglistbox.cxx
@@ -78,6 +78,52 @@ void SpacingListBox::Init(SpacingType eType)
     SelectEntryPos(nSelected);
 }
 
+void SpacingListBox::Fill(SpacingType eType, weld::ComboBox& rComboBox)
+{
+    auto nSelected = rComboBox.get_active();
+    if (nSelected == -1)
+        nSelected = 0;
+    rComboBox.clear();
+
+    const LocaleDataWrapper& rLocaleData = Application::GetSettings().GetLocaleDataWrapper();
+    OUString sSuffix;
+
+    const measurement* pResources;
+    switch (eType)
+    {
+        case SpacingType::SPACING_INCH:
+            pResources = RID_SVXSTRARY_SPACING_INCH;
+            sSuffix = weld::MetricSpinButton::MetricToString(FieldUnit::INCH);
+            break;
+        case SpacingType::MARGINS_INCH:
+            pResources = RID_SVXSTRARY_MARGINS_INCH;
+            sSuffix = weld::MetricSpinButton::MetricToString(FieldUnit::INCH);
+            break;
+        case SpacingType::SPACING_CM:
+            pResources = RID_SVXSTRARY_SPACING_CM;
+            sSuffix = " " + weld::MetricSpinButton::MetricToString(FieldUnit::CM);
+            break;
+        default:
+        case SpacingType::MARGINS_CM:
+            sSuffix = " " + weld::MetricSpinButton::MetricToString(FieldUnit::CM);
+            pResources = RID_SVXSTRARY_MARGINS_CM;
+            break;
+    }
+
+    while (pResources->key)
+    {
+        OUString sMeasurement = rLocaleData.getNum(pResources->human, 2, true, false) + sSuffix;
+        OUString aStr = SvxResId(pResources->key).replaceFirst("%1", sMeasurement);
+        sal_uInt32 nData = pResources->twips;
+        rComboBox.append(OUString::number(nData), aStr);
+        ++pResources;
+    }
+
+    rComboBox.set_active(nSelected);
+
+    rComboBox.set_size_request(150, -1);
+}
+
 VCL_BUILDER_FACTORY(SpacingListBox);
 
 Size SpacingListBox::GetOptimalSize() const
diff --git a/sw/source/uibase/sidebar/PageFooterPanel.cxx b/sw/source/uibase/sidebar/PageFooterPanel.cxx
index 4cc0c62d0624..a08e527d158e 100644
--- a/sw/source/uibase/sidebar/PageFooterPanel.cxx
+++ b/sw/source/uibase/sidebar/PageFooterPanel.cxx
@@ -54,15 +54,15 @@ VclPtr<vcl::Window> PageFooterPanel::Create(
 
 void PageFooterPanel::SetMarginsAndSpacingFieldUnit()
 {
-    mpFooterSpacingLB->Init(IsInch(meFUnit) ? SpacingType::SPACING_INCH : SpacingType::SPACING_CM);
-    mpFooterMarginPresetLB->Init(IsInch(meFUnit) ? SpacingType::MARGINS_INCH : SpacingType::MARGINS_CM);
+    SpacingListBox::Fill(IsInch(meFUnit) ? SpacingType::SPACING_INCH : SpacingType::SPACING_CM, *mxFooterSpacingLB);
+    SpacingListBox::Fill(IsInch(meFUnit) ? SpacingType::MARGINS_INCH : SpacingType::MARGINS_CM, *mxFooterMarginPresetLB);
 }
 
 PageFooterPanel::PageFooterPanel(
     vcl::Window* pParent,
     const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame >& rxFrame,
     SfxBindings* pBindings) :
-    PanelLayout(pParent, "PageFooterPanel", "modules/swriter/ui/pagefooterpanel.ui", rxFrame),
+    PanelLayout(pParent, "PageFooterPanel", "modules/swriter/ui/pagefooterpanel.ui", rxFrame, true),
     mpBindings( pBindings ),
     maHFToggleController(SID_ATTR_PAGE_FOOTER, *pBindings, *this),
     maMetricController(SID_ATTR_METRIC, *pBindings,*this),
@@ -74,14 +74,13 @@ PageFooterPanel::PageFooterPanel(
     mpFooterItem( new SfxBoolItem(SID_ATTR_PAGE_FOOTER) ),
     mpFooterLRMarginItem( new SvxLongLRSpaceItem(0, 0, SID_ATTR_PAGE_FOOTER_LRMARGIN)),
     mpFooterSpacingItem( new SvxLongULSpaceItem(0, 0, SID_ATTR_PAGE_FOOTER_SPACING)),
-    mpFooterLayoutItem( new SfxInt16Item(SID_ATTR_PAGE_FOOTER_LAYOUT))
+    mpFooterLayoutItem( new SfxInt16Item(SID_ATTR_PAGE_FOOTER_LAYOUT)),
+    mxFooterToggle(m_xBuilder->weld_check_button("footertoggle")),
+    mxFooterSpacingLB(m_xBuilder->weld_combo_box("spacingpreset")),
+    mxFooterMarginPresetLB(m_xBuilder->weld_combo_box("footermarginpreset")),
+    mxFooterLayoutLB(m_xBuilder->weld_combo_box("samecontentLB")),
+    mxCustomEntry(m_xBuilder->weld_label("customlabel"))
 {
-    get(mpFooterToggle, "footertoggle");
-    get(mpFooterSpacingLB, "spacingpreset");
-    get(mpFooterLayoutLB, "samecontentLB");
-    get(mpFooterMarginPresetLB, "footermarginpreset");
-    get(mpCustomEntry, "customlabel");
-
     Initialize();
 }
 
@@ -92,12 +91,12 @@ PageFooterPanel::~PageFooterPanel()
 
 void PageFooterPanel::dispose()
 {
-    mpFooterToggle.disposeAndClear();
+    mxFooterToggle.reset();
     maMetricController.dispose();
-    mpFooterSpacingLB.disposeAndClear();
-    mpFooterLayoutLB.disposeAndClear();
-    mpFooterMarginPresetLB.disposeAndClear();
-    mpCustomEntry.clear();
+    mxFooterSpacingLB.reset();
+    mxFooterLayoutLB.reset();
+    mxFooterMarginPresetLB.reset();
+    mxCustomEntry.reset();
 
     PanelLayout::dispose();
 }
@@ -116,13 +115,15 @@ FieldUnit PageFooterPanel::GetCurrentUnit(SfxItemState eState, const SfxPoolItem
 
 void PageFooterPanel::Initialize()
 {
+    SameContentListBox::Fill(*mxFooterLayoutLB);
+
     SetMarginsAndSpacingFieldUnit();
 
-    aCustomEntry = mpCustomEntry->GetText();
-    mpFooterToggle->SetClickHdl( LINK(this, PageFooterPanel, FooterToggleHdl) );
-    mpFooterMarginPresetLB->SetSelectHdl( LINK(this, PageFooterPanel, FooterLRMarginHdl));
-    mpFooterSpacingLB->SetSelectHdl( LINK(this, PageFooterPanel, FooterSpacingHdl));
-    mpFooterLayoutLB->SetSelectHdl( LINK(this, PageFooterPanel, FooterLayoutHdl));
+    aCustomEntry = mxCustomEntry->get_label();
+    mxFooterToggle->connect_toggled( LINK(this, PageFooterPanel, FooterToggleHdl) );
+    mxFooterMarginPresetLB->connect_changed( LINK(this, PageFooterPanel, FooterLRMarginHdl));
+    mxFooterSpacingLB->connect_changed( LINK(this, PageFooterPanel, FooterSpacingHdl));
+    mxFooterLayoutLB->connect_changed( LINK(this, PageFooterPanel, FooterLayoutHdl));
 
     mpBindings->Invalidate(SID_ATTR_METRIC);
     mpBindings->Invalidate(SID_ATTR_PAGE_FOOTER);
@@ -133,17 +134,17 @@ void PageFooterPanel::Initialize()
 
 void PageFooterPanel::UpdateFooterCheck()
 {
-    if(mpFooterToggle->IsChecked())
+    if (mxFooterToggle->get_active())
     {
-        mpFooterSpacingLB->Enable();
-        mpFooterLayoutLB->Enable();
-        mpFooterMarginPresetLB->Enable();
+        mxFooterSpacingLB->set_sensitive(true);
+        mxFooterLayoutLB->set_sensitive(true);
+        mxFooterMarginPresetLB->set_sensitive(true);
     }
     else
     {
-        mpFooterSpacingLB->Disable();
-        mpFooterLayoutLB->Disable();
-        mpFooterMarginPresetLB->Disable();
+        mxFooterSpacingLB->set_sensitive(false);
+        mxFooterLayoutLB->set_sensitive(false);
+        mxFooterMarginPresetLB->set_sensitive(false);
     }
 }
 
@@ -151,44 +152,48 @@ void PageFooterPanel::UpdateMarginControl()
 {
     sal_uInt16 nLeft = mpFooterLRMarginItem->GetLeft();
     sal_uInt16 nRight = mpFooterLRMarginItem->GetRight();
-    sal_uInt16 nCount = mpFooterMarginPresetLB->GetEntryCount();
+    sal_uInt16 nCount = mxFooterMarginPresetLB->get_count();
     if(nLeft == nRight)
     {
-        for(sal_uInt16 i = 0; i < nCount; i++)
+        for (sal_uInt16 i = 0; i < nCount; ++i)
         {
-            if(reinterpret_cast<sal_uLong>(mpFooterMarginPresetLB->GetEntryData(i)) == nLeft )
+            if (mxFooterMarginPresetLB->get_id(i).toUInt32() == nLeft)
             {
-                mpFooterMarginPresetLB->SelectEntryPos(i);
-                mpFooterMarginPresetLB->RemoveEntry(aCustomEntry);
+                mxFooterMarginPresetLB->set_active(i);
+                int nCustomEntry = mxFooterMarginPresetLB->find_text(aCustomEntry);
+                if (nCustomEntry != -1)
+                    mxFooterMarginPresetLB->remove(nCustomEntry);
                 return;
             }
         }
     }
-    mpFooterMarginPresetLB->InsertEntry(aCustomEntry);
-    mpFooterMarginPresetLB->SelectEntry(aCustomEntry);
+    mxFooterMarginPresetLB->append_text(aCustomEntry);
+    mxFooterMarginPresetLB->set_active_text(aCustomEntry);
 }
 
 void PageFooterPanel::UpdateSpacingControl()
 {
     sal_uInt16 nBottom = mpFooterSpacingItem->GetUpper();
-    sal_uInt16 nCount = mpFooterSpacingLB->GetEntryCount();
-    for(sal_uInt16 i = 0; i < nCount; i++)
+    sal_uInt16 nCount = mxFooterSpacingLB->get_count();
+    for (sal_uInt16 i = 0; i < nCount; ++i)
     {
-        if(reinterpret_cast<sal_uLong>(mpFooterSpacingLB->GetEntryData(i)) == nBottom )
+        if (mxFooterSpacingLB->get_id(i).toUInt32() == nBottom)
         {
-            mpFooterSpacingLB->SelectEntryPos(i);
-            mpFooterSpacingLB->RemoveEntry(aCustomEntry);
+            mxFooterSpacingLB->set_active(i);
+            int nCustomEntry = mxFooterSpacingLB->find_text(aCustomEntry);
+            if (nCustomEntry != -1)
+                mxFooterSpacingLB->remove(nCustomEntry);
             return;
         }
     }
-    mpFooterSpacingLB->InsertEntry(aCustomEntry);
-    mpFooterSpacingLB->SelectEntry(aCustomEntry);
+    mxFooterSpacingLB->append_text(aCustomEntry);
+    mxFooterSpacingLB->set_active_text(aCustomEntry);
 }
 
 void PageFooterPanel::UpdateLayoutControl()
 {
     sal_uInt16 nLayout = mpFooterLayoutItem->GetValue();
-    mpFooterLayoutLB->SelectEntryPos( nLayout );
+    mxFooterLayoutLB->set_active(nLayout);
 }
 
 void PageFooterPanel::NotifyItemUpdate(
@@ -207,7 +212,7 @@ void PageFooterPanel::NotifyItemUpdate(
                 dynamic_cast<const SfxBoolItem*>( pState) )
             {
                 mpFooterItem.reset( static_cast<SfxBoolItem*>(pState->Clone()) );
-                mpFooterToggle->Check(mpFooterItem->GetValue());
+                mxFooterToggle->set_active(mpFooterItem->GetValue());
                 UpdateFooterCheck();
             }
         }
@@ -259,34 +264,34 @@ void PageFooterPanel::NotifyItemUpdate(
     }
 }
 
-IMPL_LINK_NOARG( PageFooterPanel, FooterToggleHdl, Button*, void )
+IMPL_LINK_NOARG( PageFooterPanel, FooterToggleHdl, weld::ToggleButton&, void )
 {
-    bool IsChecked = mpFooterToggle->IsChecked();
+    bool IsChecked = mxFooterToggle->get_active();
     mpFooterItem->SetValue(IsChecked);
     GetBindings()->GetDispatcher()->ExecuteList( SID_ATTR_PAGE_FOOTER, SfxCallMode::RECORD, { mpFooterItem.get() } );
     UpdateFooterCheck();
 }
 
-IMPL_LINK_NOARG( PageFooterPanel, FooterLRMarginHdl, ListBox&, void )
+IMPL_LINK_NOARG( PageFooterPanel, FooterLRMarginHdl, weld::ComboBox&, void )
 {
-    sal_uInt16 nVal = static_cast<sal_uInt16>(reinterpret_cast<sal_uLong>(mpFooterMarginPresetLB->GetSelectedEntryData()));
+    sal_uInt16 nVal = mxFooterMarginPresetLB->get_active_id().toUInt32();
     mpFooterLRMarginItem->SetLeft(nVal);
     mpFooterLRMarginItem->SetRight(nVal);
     GetBindings()->GetDispatcher()->ExecuteList( SID_ATTR_PAGE_FOOTER_LRMARGIN,
                                                  SfxCallMode::RECORD, { mpFooterLRMarginItem.get() } );
 }
 
-IMPL_LINK_NOARG( PageFooterPanel, FooterSpacingHdl, ListBox&, void )
+IMPL_LINK_NOARG( PageFooterPanel, FooterSpacingHdl, weld::ComboBox&, void )
 {
-    sal_uInt16 nVal = static_cast<sal_uInt16>(reinterpret_cast<sal_uLong>(mpFooterSpacingLB->GetSelectedEntryData()));
+    sal_uInt16 nVal = mxFooterSpacingLB->get_active_id().toUInt32();
     mpFooterSpacingItem->SetUpper(nVal);
     GetBindings()->GetDispatcher()->ExecuteList( SID_ATTR_PAGE_FOOTER_SPACING,
                                                  SfxCallMode::RECORD, { mpFooterSpacingItem.get() } );
 
 }
-IMPL_LINK_NOARG( PageFooterPanel, FooterLayoutHdl, ListBox&, void )
+IMPL_LINK_NOARG( PageFooterPanel, FooterLayoutHdl, weld::ComboBox&, void )
 {
-    sal_uInt16 nVal = mpFooterLayoutLB->GetSelectedEntryPos();
+    sal_uInt16 nVal = mxFooterLayoutLB->get_active();
     mpFooterLayoutItem->SetValue(nVal);
     GetBindings()->GetDispatcher()->ExecuteList( SID_ATTR_PAGE_FOOTER_LAYOUT,
                                                  SfxCallMode::RECORD, { mpFooterLayoutItem.get() } );
diff --git a/sw/source/uibase/sidebar/PageFooterPanel.hxx b/sw/source/uibase/sidebar/PageFooterPanel.hxx
index d41789ecad67..00a536a38fb5 100644
--- a/sw/source/uibase/sidebar/PageFooterPanel.hxx
+++ b/sw/source/uibase/sidebar/PageFooterPanel.hxx
@@ -74,11 +74,6 @@ private:
 
     FieldUnit meFUnit;
 
-    VclPtr<CheckBox>           mpFooterToggle;
-    VclPtr<SpacingListBox>     mpFooterSpacingLB;
-    VclPtr<SpacingListBox>     mpFooterMarginPresetLB;
-    VclPtr<SameContentListBox> mpFooterLayoutLB;
-    VclPtr<FixedText>          mpCustomEntry;
     OUString aCustomEntry;
 
     void Initialize();
@@ -93,12 +88,18 @@ private:
     ::std::unique_ptr<SvxLongULSpaceItem> mpFooterSpacingItem;
     ::std::unique_ptr<SfxInt16Item>       mpFooterLayoutItem;
 
+    std::unique_ptr<weld::CheckButton> mxFooterToggle;
+    std::unique_ptr<weld::ComboBox> mxFooterSpacingLB;
+    std::unique_ptr<weld::ComboBox> mxFooterMarginPresetLB;
+    std::unique_ptr<weld::ComboBox> mxFooterLayoutLB;
+    std::unique_ptr<weld::Label> mxCustomEntry;
+
     static FieldUnit GetCurrentUnit(SfxItemState eState, const SfxPoolItem* pState);
 
-    DECL_LINK( FooterToggleHdl, Button*, void );
-    DECL_LINK( FooterLRMarginHdl, ListBox&, void);
-    DECL_LINK( FooterSpacingHdl, ListBox&, void);
-    DECL_LINK( FooterLayoutHdl, ListBox&, void);
+    DECL_LINK( FooterToggleHdl, weld::ToggleButton&, void );
+    DECL_LINK( FooterLRMarginHdl, weld::ComboBox&, void);
+    DECL_LINK( FooterSpacingHdl, weld::ComboBox&, void);
+    DECL_LINK( FooterLayoutHdl, weld::ComboBox&, void);
 };
 
 } } //end of namespace sw::sidebar
diff --git a/sw/uiconfig/swriter/ui/pagefooterpanel.ui b/sw/uiconfig/swriter/ui/pagefooterpanel.ui
index a0b872b499fb..2df5d8d831fd 100644
--- a/sw/uiconfig/swriter/ui/pagefooterpanel.ui
+++ b/sw/uiconfig/swriter/ui/pagefooterpanel.ui
@@ -98,7 +98,7 @@
           </packing>
         </child>
         <child>
-          <object class="svxcorelo-SpacingListBox" id="footermarginpreset">
+          <object class="GtkComboBoxText" id="footermarginpreset">
             <property name="visible">True</property>
             <property name="can_focus">False</property>
             <property name="halign">end</property>
@@ -109,7 +109,7 @@
           </packing>
         </child>
         <child>
-          <object class="svxcorelo-SpacingListBox" id="spacingpreset">
+          <object class="GtkComboBoxText" id="spacingpreset">
             <property name="visible">True</property>
             <property name="can_focus">False</property>
             <property name="halign">end</property>
@@ -120,7 +120,7 @@
           </packing>
         </child>
         <child>
-          <object class="svxcorelo-SameContentListBox" id="samecontentLB">
+          <object class="GtkComboBoxText" id="samecontentLB">
             <property name="visible">True</property>
             <property name="can_focus">False</property>
             <property name="halign">end</property>


More information about the Libreoffice-commits mailing list