weld PageFormatPanel

Change-Id: I98b40be22d11bee055ae321e8a93430bc69fe023
Reviewed-on: https://gerrit.libreoffice.org/85525
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Tested-by: Caolán McNamara <caolanm@redhat.com>
diff --git a/sw/source/uibase/sidebar/PageFormatPanel.cxx b/sw/source/uibase/sidebar/PageFormatPanel.cxx
index ad2fbc2..269e03c 100644
--- a/sw/source/uibase/sidebar/PageFormatPanel.cxx
+++ b/sw/source/uibase/sidebar/PageFormatPanel.cxx
@@ -63,8 +63,8 @@ VclPtr<vcl::Window> PageFormatPanel::Create(

void PageFormatPanel::SetMarginFieldUnit()
{
    auto nSelected = mpMarginSelectBox->GetSelectedEntryPos();
    mpMarginSelectBox->Clear();
    auto nSelected = mxMarginSelectBox->get_active();
    mxMarginSelectBox->clear();

    const LocaleDataWrapper& rLocaleData = Application::GetSettings().GetLocaleDataWrapper();
    if (IsInch(meFUnit))
@@ -73,7 +73,7 @@ void PageFormatPanel::SetMarginFieldUnit()
        for (size_t i = 0; i < SAL_N_ELEMENTS(RID_PAGEFORMATPANEL_MARGINS_INCH); ++i)
        {
            OUString sStr = rLocaleData.getNum(RID_PAGEFORMATPANEL_MARGINS_INCH[i].second, 2, true, false) + sSuffix;
            mpMarginSelectBox->InsertEntry(SwResId(RID_PAGEFORMATPANEL_MARGINS_INCH[i].first).replaceFirst("%1", sStr));
            mxMarginSelectBox->append_text(SwResId(RID_PAGEFORMATPANEL_MARGINS_INCH[i].first).replaceFirst("%1", sStr));
        }
    }
    else
@@ -82,18 +82,24 @@ void PageFormatPanel::SetMarginFieldUnit()
        for (size_t i = 0; i < SAL_N_ELEMENTS(RID_PAGEFORMATPANEL_MARGINS_CM); ++i)
        {
            OUString sStr = rLocaleData.getNum(RID_PAGEFORMATPANEL_MARGINS_CM[i].second, 2, true, false) + " " + sSuffix;
            mpMarginSelectBox->InsertEntry(SwResId(RID_PAGEFORMATPANEL_MARGINS_CM[i].first).replaceFirst("%1", sStr));
            mxMarginSelectBox->append_text(SwResId(RID_PAGEFORMATPANEL_MARGINS_CM[i].first).replaceFirst("%1", sStr));
        }
    }
    mpMarginSelectBox->SelectEntryPos(nSelected);
    mxMarginSelectBox->set_active(nSelected);
}

PageFormatPanel::PageFormatPanel(
    vcl::Window* pParent,
    const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame >& rxFrame,
    SfxBindings* pBindings) :
    PanelLayout(pParent, "PageFormatPanel", "modules/swriter/ui/pageformatpanel.ui", rxFrame),
    PanelLayout(pParent, "PageFormatPanel", "modules/swriter/ui/pageformatpanel.ui", rxFrame, true),
    mpBindings( pBindings ),
    mxPaperSizeBox(new SvxPaperSizeListBox(m_xBuilder->weld_combo_box("papersize"))),
    mxPaperWidth(new RelativeField(m_xBuilder->weld_metric_spin_button("paperwidth", FieldUnit::CM))),
    mxPaperHeight(new RelativeField(m_xBuilder->weld_metric_spin_button("paperheight", FieldUnit::CM))),
    mxPaperOrientation(m_xBuilder->weld_combo_box("paperorientation")),
    mxMarginSelectBox(m_xBuilder->weld_combo_box("marginLB")),
    mxCustomEntry(m_xBuilder->weld_label("customlabel")),
    maPaperSizeController(SID_ATTR_PAGE_SIZE, *pBindings, *this),
    maPaperOrientationController(SID_ATTR_PAGE, *pBindings, *this),
    maMetricController(SID_ATTR_METRIC, *pBindings,*this),
@@ -106,12 +112,6 @@ PageFormatPanel::PageFormatPanel(
    meUnit(),
    aCustomEntry()
{
    get(mpPaperSizeBox, "papersize");
    get(mpPaperWidth, "paperwidth");
    get(mpPaperHeight, "paperheight");
    get(mpPaperOrientation, "paperorientation");
    get(mpMarginSelectBox, "marginLB");
    get(mpCustomEntry, "customlabel");
    Initialize();
}

@@ -122,12 +122,12 @@ PageFormatPanel::~PageFormatPanel()

void PageFormatPanel::dispose()
{
    mpPaperSizeBox.disposeAndClear();
    mpPaperWidth.disposeAndClear();
    mpPaperHeight.disposeAndClear();
    mpPaperOrientation.disposeAndClear();
    mpMarginSelectBox.disposeAndClear();
    mpCustomEntry.clear();
    mxPaperSizeBox.reset();
    mxPaperWidth.reset();
    mxPaperHeight.reset();
    mxPaperOrientation.reset();
    mxMarginSelectBox.reset();
    mxCustomEntry.reset();

    maMetricController.dispose();
    maPaperOrientationController.dispose();
@@ -143,25 +143,22 @@ void PageFormatPanel::dispose()

void PageFormatPanel::Initialize()
{
    mpPaperSizeBox->FillPaperSizeEntries( PaperSizeApp::Std );
    mpPaperSizeBox->SetDropDownLineCount(6);
    mxPaperSizeBox->FillPaperSizeEntries( PaperSizeApp::Std );
    meUnit = maPaperSizeController.GetCoreMetric();
    SetFieldUnit( *mpPaperWidth, meFUnit );
    SetFieldUnit( *mpPaperHeight, meFUnit );
    mxPaperWidth->SetFieldUnit(meFUnit);
    mxPaperHeight->SetFieldUnit(meFUnit);
    SetMarginFieldUnit();
    aCustomEntry = mpCustomEntry->GetText();
    aCustomEntry = mxCustomEntry->get_label();

    const SvtOptionsDrawinglayer aDrawinglayerOpt;
    mpPaperWidth->SetMax(mpPaperWidth->Normalize(aDrawinglayerOpt.GetMaximumPaperWidth()), FieldUnit::CM);
    mpPaperWidth->SetLast(mpPaperWidth->Normalize(aDrawinglayerOpt.GetMaximumPaperWidth()), FieldUnit::CM);
    mpPaperHeight->SetMax(mpPaperHeight->Normalize(aDrawinglayerOpt.GetMaximumPaperHeight()), FieldUnit::CM);
    mpPaperHeight->SetLast(mpPaperHeight->Normalize(aDrawinglayerOpt.GetMaximumPaperHeight()), FieldUnit::CM);
    mxPaperWidth->set_max(mxPaperWidth->normalize(aDrawinglayerOpt.GetMaximumPaperWidth()), FieldUnit::CM);
    mxPaperHeight->set_max(mxPaperHeight->normalize(aDrawinglayerOpt.GetMaximumPaperHeight()), FieldUnit::CM);

    mpPaperSizeBox->SetSelectHdl( LINK(this, PageFormatPanel, PaperFormatModifyHdl ));
    mpPaperOrientation->SetSelectHdl( LINK(this, PageFormatPanel, PaperFormatModifyHdl ));
    mpPaperHeight->SetModifyHdl( LINK(this, PageFormatPanel, PaperSizeModifyHdl ));
    mpPaperWidth->SetModifyHdl( LINK(this, PageFormatPanel, PaperSizeModifyHdl ));
    mpMarginSelectBox->SetSelectHdl( LINK(this, PageFormatPanel, PaperModifyMarginHdl));
    mxPaperSizeBox->connect_changed( LINK(this, PageFormatPanel, PaperFormatModifyHdl ));
    mxPaperOrientation->connect_changed( LINK(this, PageFormatPanel, PaperFormatModifyHdl ));
    mxPaperHeight->connect_value_changed( LINK(this, PageFormatPanel, PaperSizeModifyHdl ));
    mxPaperWidth->connect_value_changed( LINK(this, PageFormatPanel, PaperSizeModifyHdl ));
    mxMarginSelectBox->connect_changed( LINK(this, PageFormatPanel, PaperModifyMarginHdl));

    mpBindings->Update(SID_ATTR_METRIC);
    mpBindings->Update(SID_ATTR_PAGE);
@@ -188,14 +185,14 @@ void PageFormatPanel::NotifyItemUpdate(
            {
                Size aPaperSize = pSizeItem->GetSize();

                mpPaperWidth->SetValue( mpPaperWidth->Normalize( aPaperSize.Width() ), FieldUnit::TWIP );
                mpPaperHeight->SetValue( mpPaperHeight->Normalize( aPaperSize.Height() ), FieldUnit::TWIP );
                mxPaperWidth->set_value(mxPaperWidth->normalize(aPaperSize.Width()), FieldUnit::TWIP);
                mxPaperHeight->set_value(mxPaperHeight->normalize(aPaperSize.Height()), FieldUnit::TWIP);

                if(mpPaperOrientation->GetSelectedEntryPos() == 1)
                if(mxPaperOrientation->get_active() == 1)
                   Swap(aPaperSize);

                Paper ePaper = SvxPaperInfo::GetSvxPaper(aPaperSize, meUnit);
                mpPaperSizeBox->SetSelection( ePaper );
                mxPaperSizeBox->SetSelection( ePaper );
            }
        }
        break;
@@ -206,8 +203,8 @@ void PageFormatPanel::NotifyItemUpdate(
            if (eFUnit != meFUnit)
            {
                meFUnit = eFUnit;
                SetFieldUnit( *mpPaperHeight, meFUnit );
                SetFieldUnit( *mpPaperWidth, meFUnit );
                mxPaperHeight->SetFieldUnit(meFUnit);
                mxPaperWidth->SetFieldUnit(meFUnit);
                SetMarginFieldUnit();
                UpdateMarginBox();
            }
@@ -220,9 +217,9 @@ void PageFormatPanel::NotifyItemUpdate(
            {
                mpPageItem.reset( static_cast<SvxPageItem*>(pState->Clone()) );
                if ( mpPageItem->IsLandscape() )
                    mpPaperOrientation->SelectEntryPos(1);
                    mxPaperOrientation->set_active(1);
                else
                    mpPaperOrientation->SelectEntryPos(0);
                    mxPaperOrientation->set_active(0);
            }
        }
        break;
@@ -251,36 +248,36 @@ void PageFormatPanel::NotifyItemUpdate(
    }
}

IMPL_LINK_NOARG(PageFormatPanel, PaperFormatModifyHdl, ListBox&, void)
IMPL_LINK_NOARG(PageFormatPanel, PaperFormatModifyHdl, weld::ComboBox&, void)
{
    Paper ePaper = mpPaperSizeBox->GetSelection();
    Paper ePaper = mxPaperSizeBox->GetSelection();
    Size  aSize;

    if(ePaper!=PAPER_USER)
       aSize = SvxPaperInfo::GetPaperSize(ePaper, meUnit);
    else
       aSize = Size(GetCoreValue( *mpPaperWidth, meUnit ), GetCoreValue( *mpPaperHeight, meUnit));
       aSize = Size(mxPaperWidth->GetCoreValue(meUnit), mxPaperHeight->GetCoreValue(meUnit));

    if(mpPaperOrientation->GetSelectedEntryPos() == 1 || ePaper==PAPER_USER)
    if (mxPaperOrientation->get_active() == 1 || ePaper==PAPER_USER)
        Swap(aSize);

    mpPageItem->SetLandscape(mpPaperOrientation->GetSelectedEntryPos() == 1);
    mpPageItem->SetLandscape(mxPaperOrientation->get_active() == 1);
    SvxSizeItem aSizeItem(SID_ATTR_PAGE_SIZE, aSize);
    mpBindings->GetDispatcher()->ExecuteList(SID_ATTR_PAGE_SIZE, SfxCallMode::RECORD, { &aSizeItem, mpPageItem.get() });
}

IMPL_LINK_NOARG(PageFormatPanel, PaperSizeModifyHdl, Edit&, void)
IMPL_LINK_NOARG(PageFormatPanel, PaperSizeModifyHdl, weld::MetricSpinButton&, void)
{
    Size aSize( GetCoreValue( *mpPaperWidth, meUnit ), GetCoreValue( *mpPaperHeight, meUnit));
    Size aSize(mxPaperWidth->GetCoreValue(meUnit), mxPaperHeight->GetCoreValue(meUnit));
    SvxSizeItem aSizeItem(SID_ATTR_PAGE_SIZE, aSize);
    mpBindings->GetDispatcher()->ExecuteList(SID_ATTR_PAGE_SIZE, SfxCallMode::RECORD, { &aSizeItem });
}

IMPL_LINK_NOARG(PageFormatPanel, PaperModifyMarginHdl, ListBox&, void)
IMPL_LINK_NOARG(PageFormatPanel, PaperModifyMarginHdl, weld::ComboBox&, void)
{
    bool bMirrored = false;
    bool bApplyNewPageMargins = true;
    switch ( mpMarginSelectBox->GetSelectedEntryPos() )
    switch (mxMarginSelectBox->get_active())
    {
        case 0:
            SetNone(mnPageLeftMargin, mnPageRightMargin, mnPageTopMargin, mnPageBottomMargin, bMirrored);
@@ -376,52 +373,62 @@ void PageFormatPanel::UpdateMarginBox()
    mnPageTopMargin = mpPageULMarginItem->GetUpper();
    mnPageBottomMargin = mpPageULMarginItem->GetLower();

    int nCustomEntry = mxMarginSelectBox->find_text(aCustomEntry);

    bool bMirrored = (mpPageItem->GetPageUsage() == SvxPageUsage::Mirror);
    if( IsNone(mnPageLeftMargin, mnPageRightMargin, mnPageTopMargin, mnPageBottomMargin, bMirrored) )
    {
        mpMarginSelectBox->SelectEntryPos(0);
        mpMarginSelectBox->RemoveEntry(aCustomEntry);
        mxMarginSelectBox->set_active(0);
        if (nCustomEntry != -1)
            mxMarginSelectBox->remove(nCustomEntry);
    }
    else if( IsNarrow(mnPageLeftMargin, mnPageRightMargin, mnPageTopMargin, mnPageBottomMargin, bMirrored) )
    {
        mpMarginSelectBox->SelectEntryPos(1);
        mpMarginSelectBox->RemoveEntry(aCustomEntry);
        mxMarginSelectBox->set_active(1);
        if (nCustomEntry != -1)
            mxMarginSelectBox->remove(nCustomEntry);
    }
    else if( IsModerate(mnPageLeftMargin, mnPageRightMargin, mnPageTopMargin, mnPageBottomMargin, bMirrored) )
    {
        mpMarginSelectBox->SelectEntryPos(2);
        mpMarginSelectBox->RemoveEntry(aCustomEntry);
        mxMarginSelectBox->set_active(2);
        if (nCustomEntry != -1)
            mxMarginSelectBox->remove(nCustomEntry);
    }
    else if( IsNormal075(mnPageLeftMargin, mnPageRightMargin, mnPageTopMargin, mnPageBottomMargin, bMirrored) )
    {
        mpMarginSelectBox->SelectEntryPos(3);
        mpMarginSelectBox->RemoveEntry(aCustomEntry);
        mxMarginSelectBox->set_active(3);
        if (nCustomEntry != -1)
            mxMarginSelectBox->remove(nCustomEntry);
    }
    else if( IsNormal100(mnPageLeftMargin, mnPageRightMargin, mnPageTopMargin, mnPageBottomMargin, bMirrored) )
    {
        mpMarginSelectBox->SelectEntryPos(4);
        mpMarginSelectBox->RemoveEntry(aCustomEntry);
        mxMarginSelectBox->set_active(4);
        if (nCustomEntry != -1)
            mxMarginSelectBox->remove(nCustomEntry);
    }
    else if( IsNormal125(mnPageLeftMargin, mnPageRightMargin, mnPageTopMargin, mnPageBottomMargin, bMirrored) )
    {
        mpMarginSelectBox->SelectEntryPos(5);
        mpMarginSelectBox->RemoveEntry(aCustomEntry);
        mxMarginSelectBox->set_active(5);
        if (nCustomEntry != -1)
            mxMarginSelectBox->remove(nCustomEntry);
    }
    else if( IsWide(mnPageLeftMargin, mnPageRightMargin, mnPageTopMargin, mnPageBottomMargin, bMirrored) )
    {
        mpMarginSelectBox->SelectEntryPos(6);
        mpMarginSelectBox->RemoveEntry(aCustomEntry);
        mxMarginSelectBox->set_active(6);
        if (nCustomEntry != -1)
            mxMarginSelectBox->remove(nCustomEntry);
    }
    else if( IsMirrored(mnPageLeftMargin, mnPageRightMargin, mnPageTopMargin, mnPageBottomMargin, bMirrored) )
    {
        mpMarginSelectBox->SelectEntryPos(7);
        mpMarginSelectBox->RemoveEntry(aCustomEntry);
        mxMarginSelectBox->set_active(7);
        if (nCustomEntry != -1)
            mxMarginSelectBox->remove(nCustomEntry);
    }
    else
    {
        if(mpMarginSelectBox->GetEntryPos(aCustomEntry) == LISTBOX_ENTRY_NOTFOUND)
            mpMarginSelectBox->InsertEntry(aCustomEntry);
        mpMarginSelectBox->SelectEntry(aCustomEntry);
        if (nCustomEntry == -1)
            mxMarginSelectBox->append_text(aCustomEntry);
        mxMarginSelectBox->set_active_text(aCustomEntry);
    }
}

diff --git a/sw/source/uibase/sidebar/PageFormatPanel.hxx b/sw/source/uibase/sidebar/PageFormatPanel.hxx
index 1df56ec..206d478 100644
--- a/sw/source/uibase/sidebar/PageFormatPanel.hxx
+++ b/sw/source/uibase/sidebar/PageFormatPanel.hxx
@@ -67,12 +67,12 @@ private:

    SfxBindings* mpBindings;

    VclPtr<PaperSizeListBox> mpPaperSizeBox;
    VclPtr<SvxRelativeField> mpPaperWidth;
    VclPtr<SvxRelativeField> mpPaperHeight;
    VclPtr<ListBox> mpPaperOrientation;
    VclPtr<ListBox> mpMarginSelectBox;
    VclPtr<FixedText> mpCustomEntry;
    std::unique_ptr<SvxPaperSizeListBox> mxPaperSizeBox;
    std::unique_ptr<RelativeField> mxPaperWidth;
    std::unique_ptr<RelativeField> mxPaperHeight;
    std::unique_ptr<weld::ComboBox> mxPaperOrientation;
    std::unique_ptr<weld::ComboBox> mxMarginSelectBox;
    std::unique_ptr<weld::Label> mxCustomEntry;

    ::sfx2::sidebar::ControllerItem maPaperSizeController;
    ::sfx2::sidebar::ControllerItem maPaperOrientationController;
@@ -98,9 +98,9 @@ private:
    void UpdateMarginBox();
    void ExecuteMarginLRChange( const long nPageLeftMargin, const long nPageRightMargin );
    void ExecuteMarginULChange( const long nPageTopMargin, const long  nPageBottomMargin);
    DECL_LINK(PaperFormatModifyHdl, ListBox&, void);
    DECL_LINK(PaperSizeModifyHdl, Edit&, void);
    DECL_LINK(PaperModifyMarginHdl, ListBox&, void );
    DECL_LINK(PaperFormatModifyHdl, weld::ComboBox&, void);
    DECL_LINK(PaperSizeModifyHdl, weld::MetricSpinButton&, void);
    DECL_LINK(PaperModifyMarginHdl, weld::ComboBox&, void );
};

} } //end of namespace sw::sidebar
diff --git a/sw/uiconfig/swriter/ui/pageformatpanel.ui b/sw/uiconfig/swriter/ui/pageformatpanel.ui
index 5dc85d0..deacf8c 100644
--- a/sw/uiconfig/swriter/ui/pageformatpanel.ui
+++ b/sw/uiconfig/swriter/ui/pageformatpanel.ui
@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.18.3 -->
<!-- Generated with glade 3.22.1 -->
<interface domain="sw">
  <requires lib="gtk+" version="3.18"/>
  <requires lib="LibreOffice" version="1.0"/>
  <object class="GtkGrid" id="PageFormatPanel">
    <property name="visible">True</property>
    <property name="can_focus">False</property>
@@ -21,8 +20,8 @@
            <property name="visible">True</property>
            <property name="can_focus">False</property>
            <property name="label" translatable="yes" context="pageformatpanel|size">Size:</property>
            <property name="xalign">1</property>
            <property name="mnemonic_widget">papersize</property>
            <property name="xalign">1</property>
          </object>
          <packing>
            <property name="left_attach">0</property>
@@ -34,8 +33,8 @@
            <property name="visible">True</property>
            <property name="can_focus">False</property>
            <property name="label" translatable="yes" context="pageformatpanel|width">Width:</property>
            <property name="xalign">1</property>
            <property name="mnemonic_widget">paperwidth</property>
            <property name="xalign">1</property>
          </object>
          <packing>
            <property name="left_attach">0</property>
@@ -47,8 +46,8 @@
            <property name="visible">True</property>
            <property name="can_focus">False</property>
            <property name="label" translatable="yes" context="pageformatpanel|height">Height:</property>
            <property name="xalign">1</property>
            <property name="mnemonic_widget">paperheight</property>
            <property name="xalign">1</property>
          </object>
          <packing>
            <property name="left_attach">0</property>
@@ -60,8 +59,8 @@
            <property name="visible">True</property>
            <property name="can_focus">False</property>
            <property name="label" translatable="yes" context="pageformatpanel|orientation">Orientation:</property>
            <property name="xalign">1</property>
            <property name="mnemonic_widget">paperorientation</property>
            <property name="xalign">1</property>
          </object>
          <packing>
            <property name="left_attach">0</property>
@@ -69,7 +68,7 @@
          </packing>
        </child>
        <child>
          <object class="svxlo-SvxRelativeField" id="paperwidth">
          <object class="GtkSpinButton" id="paperwidth">
            <property name="visible">True</property>
            <property name="can_focus">True</property>
            <property name="has_tooltip">True</property>
@@ -83,7 +82,7 @@
          </packing>
        </child>
        <child>
          <object class="svxlo-SvxRelativeField" id="paperheight">
          <object class="GtkSpinButton" id="paperheight">
            <property name="visible">True</property>
            <property name="can_focus">True</property>
            <property name="has_tooltip">True</property>
@@ -112,7 +111,7 @@
          </packing>
        </child>
        <child>
          <object class="svxcorelo-PaperSizeListBox" id="papersize">
          <object class="GtkComboBoxText" id="papersize">
            <property name="visible">True</property>
            <property name="can_focus">False</property>
            <property name="hexpand">True</property>
@@ -127,8 +126,8 @@
            <property name="visible">True</property>
            <property name="can_focus">False</property>
            <property name="label" translatable="yes" context="pageformatpanel|margin">Margins:</property>
            <property name="xalign">1</property>
            <property name="mnemonic_widget">marginLB</property>
            <property name="xalign">1</property>
          </object>
          <packing>
            <property name="left_attach">0</property>