weld SvxZoomDialog

Change-Id: I9d68fdcc9dc27a5aa4f6ec78542ce7822259233e
Reviewed-on: https://gerrit.libreoffice.org/52157
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Tested-by: Caolán McNamara <caolanm@redhat.com>
diff --git a/cui/source/dialogs/zoom.cxx b/cui/source/dialogs/zoom.cxx
index bb2700c..97998a8 100644
--- a/cui/source/dialogs/zoom.cxx
+++ b/cui/source/dialogs/zoom.cxx
@@ -36,55 +36,55 @@ const sal_uInt16 SPECIAL_FACTOR = 0xFFFF;

sal_uInt16 SvxZoomDialog::GetFactor() const
{
    if (m_p100Btn->IsChecked())
    if (m_x100Btn->get_active())
        return 100;

    if (m_pUserBtn->IsChecked())
        return static_cast<sal_uInt16>(m_pUserEdit->GetValue());
    if (m_xUserBtn->get_active())
        return static_cast<sal_uInt16>(m_xUserEdit->get_value(FUNIT_PERCENT));
    else
        return SPECIAL_FACTOR;
}

void SvxZoomDialog::SetFactor(sal_uInt16 nNewFactor, ZoomButtonId nButtonId)
{
    m_pUserEdit->Disable();
    m_xUserEdit->set_sensitive(false);

    if (nButtonId == ZoomButtonId::NONE)
    {
        if ( nNewFactor == 100 )
        {
            m_p100Btn->Check();
            m_p100Btn->GrabFocus();
            m_x100Btn->set_active(true);
            m_x100Btn->grab_focus();
        }
        else
        {
            m_pUserBtn->Check();
            m_pUserEdit->Enable();
            m_pUserEdit->SetValue(static_cast<long>(nNewFactor));
            m_pUserEdit->GrabFocus();
            m_xUserBtn->set_active(true);
            m_xUserEdit->set_sensitive(true);
            m_xUserEdit->set_value(nNewFactor, FUNIT_PERCENT);
            m_xUserEdit->grab_focus();
        }
    }
    else
    {
        m_pUserEdit->SetValue(static_cast<long>(nNewFactor));
        m_xUserEdit->set_value(nNewFactor, FUNIT_PERCENT);
        switch(nButtonId)
        {
            case ZoomButtonId::OPTIMAL:
            {
                m_pOptimalBtn->Check();
                m_pOptimalBtn->GrabFocus();
                m_xOptimalBtn->set_active(true);
                m_xOptimalBtn->grab_focus();
                break;
            }
            case ZoomButtonId::PAGEWIDTH:
            {
                m_pPageWidthBtn->Check();
                m_pPageWidthBtn->GrabFocus();
                m_xPageWidthBtn->set_active(true);
                m_xPageWidthBtn->grab_focus();
                break;
            }
            case ZoomButtonId::WHOLEPAGE:
            {
                m_pWholePageBtn->Check();
                m_pWholePageBtn->GrabFocus();
                m_xWholePageBtn->set_active(true);
                m_xWholePageBtn->grab_focus();
                break;
            }
            default: break;
@@ -97,15 +97,15 @@ void SvxZoomDialog::HideButton(ZoomButtonId nButtonId)
    switch (nButtonId)
    {
        case ZoomButtonId::OPTIMAL:
            m_pOptimalBtn->Hide();
            m_xOptimalBtn->hide();
            break;

        case ZoomButtonId::PAGEWIDTH:
            m_pPageWidthBtn->Hide();
            m_xPageWidthBtn->hide();
            break;

        case ZoomButtonId::WHOLEPAGE:
            m_pWholePageBtn->Hide();
            m_xWholePageBtn->hide();
            break;

        default:
@@ -116,57 +116,54 @@ void SvxZoomDialog::HideButton(ZoomButtonId nButtonId)
void SvxZoomDialog::SetLimits(sal_uInt16 nMin, sal_uInt16 nMax)
{
    DBG_ASSERT(nMin < nMax, "invalid limits");
    m_pUserEdit->SetMin(nMin);
    m_pUserEdit->SetFirst(nMin);
    m_pUserEdit->SetMax(nMax);
    m_pUserEdit->SetLast(nMax);
    m_xUserEdit->set_range(nMin, nMax, FUNIT_PERCENT);
}

const SfxItemSet* SvxZoomDialog::GetOutputItemSet() const
{
    return mpOutSet.get();
    return m_pOutSet.get();
}

SvxZoomDialog::SvxZoomDialog( vcl::Window* pParent, const SfxItemSet& rCoreSet )
    : SfxModalDialog(pParent, "ZoomDialog", "cui/ui/zoomdialog.ui")
    , mrSet(rCoreSet)
    , mpOutSet()
    , mbModified(false)

SvxZoomDialog::SvxZoomDialog(weld::Window* pParent, const SfxItemSet& rCoreSet)
    : GenericDialogController(pParent, "cui/ui/zoomdialog.ui", "ZoomDialog")
    , m_rSet(rCoreSet)
    , m_bModified(false)
    , m_xOptimalBtn(m_xBuilder->weld_radio_button("optimal"))
    , m_xWholePageBtn(m_xBuilder->weld_radio_button("fitwandh"))
    , m_xPageWidthBtn(m_xBuilder->weld_radio_button("fitw"))
    , m_x100Btn(m_xBuilder->weld_radio_button("100pc"))
    , m_xUserBtn(m_xBuilder->weld_radio_button("variable"))
    , m_xUserEdit(m_xBuilder->weld_metric_spin_button("zoomsb"))
    , m_xViewFrame(m_xBuilder->weld_widget("viewframe"))
    , m_xAutomaticBtn(m_xBuilder->weld_radio_button("automatic"))
    , m_xSingleBtn(m_xBuilder->weld_radio_button("singlepage"))
    , m_xColumnsBtn(m_xBuilder->weld_radio_button("columns"))
    , m_xColumnsEdit(m_xBuilder->weld_spin_button("columnssb"))
    , m_xBookModeChk(m_xBuilder->weld_check_button("bookmode"))
    , m_xOKBtn(m_xBuilder->weld_button("ok"))
{
    get(m_pOptimalBtn, "optimal");
    get(m_pWholePageBtn, "fitwandh");
    get(m_pPageWidthBtn, "fitw");
    get(m_p100Btn, "100pc");
    get(m_pUserBtn, "variable");
    get(m_pUserEdit, "zoomsb");
    get(m_pViewFrame, "viewframe");
    get(m_pAutomaticBtn, "automatic");
    get(m_pSingleBtn, "singlepage");
    get(m_pColumnsBtn, "columns");
    get(m_pColumnsEdit, "columnssb");
    get(m_pBookModeChk, "bookmode");
    get(m_pOKBtn, "ok");
    Link<Button*,void> aLink = LINK(this, SvxZoomDialog, UserHdl);
    m_p100Btn->SetClickHdl(aLink);
    m_pOptimalBtn->SetClickHdl(aLink);
    m_pPageWidthBtn->SetClickHdl(aLink);
    m_pWholePageBtn->SetClickHdl(aLink);
    m_pUserBtn->SetClickHdl(aLink);
    m_xUserEdit->set_unit(FUNIT_PERCENT);

    Link<Button*,void> aViewLayoutLink = LINK(this, SvxZoomDialog, ViewLayoutUserHdl);
    m_pAutomaticBtn->SetClickHdl(aViewLayoutLink);
    m_pSingleBtn->SetClickHdl(aViewLayoutLink);
    m_pColumnsBtn->SetClickHdl(aViewLayoutLink);
    Link<weld::ToggleButton&,void> aLink = LINK(this, SvxZoomDialog, UserHdl);
    m_x100Btn->connect_toggled(aLink);
    m_xOptimalBtn->connect_toggled(aLink);
    m_xPageWidthBtn->connect_toggled(aLink);
    m_xWholePageBtn->connect_toggled(aLink);
    m_xUserBtn->connect_toggled(aLink);

    Link<Edit&,void> aViewLayoutSpinLink = LINK(this, SvxZoomDialog, ViewLayoutSpinHdl);
    m_pColumnsEdit->SetModifyHdl(aViewLayoutSpinLink);
    Link<weld::ToggleButton&,void> aViewLayoutLink = LINK(this, SvxZoomDialog, ViewLayoutUserHdl);
    m_xAutomaticBtn->connect_toggled(aViewLayoutLink);
    m_xSingleBtn->connect_toggled(aViewLayoutLink);
    m_xColumnsBtn->connect_toggled(aViewLayoutLink);

    Link<Button*,void> aViewLayoutCheckLink = LINK(this, SvxZoomDialog, ViewLayoutCheckHdl);
    m_pBookModeChk->SetClickHdl(aViewLayoutCheckLink);
    Link<weld::SpinButton&,void> aViewLayoutSpinLink = LINK(this, SvxZoomDialog, ViewLayoutSpinHdl);
    m_xColumnsEdit->connect_value_changed(aViewLayoutSpinLink);

    m_pOKBtn->SetClickHdl(LINK(this, SvxZoomDialog, OKHdl));
    m_pUserEdit->SetModifyHdl(LINK(this, SvxZoomDialog, SpinHdl));
    Link<weld::ToggleButton&,void> aViewLayoutCheckLink = LINK(this, SvxZoomDialog, ViewLayoutCheckHdl);
    m_xBookModeChk->connect_toggled(aViewLayoutCheckLink);

    m_xOKBtn->connect_clicked(LINK(this, SvxZoomDialog, OKHdl));
    m_xUserEdit->connect_value_changed(LINK(this, SvxZoomDialog, SpinHdl));

    // default values
    sal_uInt16 nValue = 100;
@@ -190,9 +187,9 @@ SvxZoomDialog::SvxZoomDialog( vcl::Window* pParent, const SfxItemSet& rCoreSet )
        nMax = nValue;

    SetLimits(nMin, nMax);
    m_pUserEdit->SetValue(nValue);
    m_xUserEdit->set_value(nValue, FUNIT_PERCENT);

    const SfxPoolItem& rItem = mrSet.Get(mrSet.GetPool()->GetWhich(SID_ATTR_ZOOM));
    const SfxPoolItem& rItem = m_rSet.Get(m_rSet.GetPool()->GetWhich(SID_ATTR_ZOOM));

    if (nullptr != dynamic_cast<const SvxZoomItem*>( &rItem))
    {
@@ -220,13 +217,13 @@ SvxZoomDialog::SvxZoomDialog( vcl::Window* pParent, const SfxItemSet& rCoreSet )
        }

        if (!(SvxZoomEnableFlags::N100 & nValSet))
            m_p100Btn->Disable();
            m_x100Btn->set_sensitive(false);
        if (!(SvxZoomEnableFlags::OPTIMAL & nValSet))
            m_pOptimalBtn->Disable();
            m_xOptimalBtn->set_sensitive(false);
        if (!(SvxZoomEnableFlags::PAGEWIDTH & nValSet))
            m_pPageWidthBtn->Disable();
            m_xPageWidthBtn->set_sensitive(false);
        if (!(SvxZoomEnableFlags::WHOLEPAGE & nValSet))
            m_pWholePageBtn->Disable();
            m_xWholePageBtn->set_sensitive(false);

        SetFactor(nZoom, nButtonId);
    }
@@ -237,7 +234,7 @@ SvxZoomDialog::SvxZoomDialog( vcl::Window* pParent, const SfxItemSet& rCoreSet )
    }

    const SfxPoolItem* pPoolViewLayoutItem = nullptr;
    if (SfxItemState::SET == mrSet.GetItemState(SID_ATTR_VIEWLAYOUT, false, &pPoolViewLayoutItem))
    if (SfxItemState::SET == m_rSet.GetItemState(SID_ATTR_VIEWLAYOUT, false, &pPoolViewLayoutItem))
    {
        const SvxViewLayoutItem* pViewLayoutItem = static_cast<const SvxViewLayoutItem*>(pPoolViewLayoutItem);
        const sal_uInt16 nColumns = pViewLayoutItem->GetValue();
@@ -245,208 +242,172 @@ SvxZoomDialog::SvxZoomDialog( vcl::Window* pParent, const SfxItemSet& rCoreSet )

        if (0 == nColumns)
        {
            m_pAutomaticBtn->Check();
            m_pColumnsEdit->SetValue(2);
            m_pColumnsEdit->Disable();
            m_pBookModeChk->Disable();
            m_xAutomaticBtn->set_active(true);
            m_xColumnsEdit->set_value(2);
            m_xColumnsEdit->set_sensitive(false);
            m_xBookModeChk->set_sensitive(false);
        }
        else if (1 == nColumns)
        {
            m_pSingleBtn->Check();
            m_pColumnsEdit->SetValue(2);
            m_pColumnsEdit->Disable();
            m_pBookModeChk->Disable();
            m_xSingleBtn->set_active(true);
            m_xColumnsEdit->set_value(2);
            m_xColumnsEdit->set_sensitive(false);
            m_xBookModeChk->set_sensitive(false);
        }
        else
        {
            m_pColumnsBtn->Check();
            m_xColumnsBtn->set_active(true);
            if (!bBookMode)
            {
                m_pColumnsEdit->SetValue(nColumns);
                m_xColumnsEdit->set_value(nColumns);
                if (nColumns % 2 != 0)
                    m_pBookModeChk->Disable();
                    m_xBookModeChk->set_sensitive(false);
            }
            else
            {
                m_pColumnsEdit->SetValue(nColumns);
                m_pBookModeChk->Check();
                m_xColumnsEdit->set_value(nColumns);
                m_xBookModeChk->set_active(true);
            }
        }
    }
    else
    {
        // hide view layout related controls:
        m_pViewFrame->Disable();
        m_xViewFrame->set_sensitive(false);
    }
}

SvxZoomDialog::~SvxZoomDialog()
IMPL_LINK_NOARG(SvxZoomDialog, UserHdl, weld::ToggleButton&, void)
{
    disposeOnce();
}
    m_bModified = true;

void SvxZoomDialog::dispose()
{
    mpOutSet.reset();
    m_pOptimalBtn.clear();
    m_pWholePageBtn.clear();
    m_pPageWidthBtn.clear();
    m_p100Btn.clear();
    m_pUserBtn.clear();
    m_pUserEdit.clear();
    m_pViewFrame.clear();
    m_pAutomaticBtn.clear();
    m_pSingleBtn.clear();
    m_pColumnsBtn.clear();
    m_pColumnsEdit.clear();
    m_pBookModeChk.clear();
    m_pOKBtn.clear();
    SfxModalDialog::dispose();
}

IMPL_LINK(SvxZoomDialog, UserHdl, Button *, pButton, void)
{
    mbModified = true;

    if (pButton == m_pUserBtn)
    if (m_xUserBtn->get_active())
    {
        m_pUserEdit->Enable();
        m_pUserEdit->GrabFocus();
        m_xUserEdit->set_sensitive(true);
        m_xUserEdit->grab_focus();
    }
    else
    {
        m_pUserEdit->Disable();
        m_xUserEdit->set_sensitive(false);
    }
}

IMPL_LINK_NOARG(SvxZoomDialog, SpinHdl, Edit&, void)
IMPL_LINK_NOARG(SvxZoomDialog, SpinHdl, weld::MetricSpinButton&, void)
{
    if (!m_pUserBtn->IsChecked())
    if (!m_xUserBtn->get_active())
        return;

    mbModified = true;
    m_bModified = true;
}

IMPL_LINK(SvxZoomDialog, ViewLayoutUserHdl, Button*, pButton, void)
IMPL_LINK_NOARG(SvxZoomDialog, ViewLayoutUserHdl, weld::ToggleButton&, void)
{
    mbModified = true;
    m_bModified = true;

    if (pButton == m_pAutomaticBtn)
    if (m_xAutomaticBtn->get_active())
    {
        m_pColumnsEdit->Disable();
        m_pBookModeChk->Disable();
        m_xColumnsEdit->set_sensitive(false);
        m_xBookModeChk->set_sensitive(false);
    }
    else if (pButton == m_pSingleBtn)
    else if (m_xSingleBtn->get_active())
    {
        m_pColumnsEdit->Disable();
        m_pBookModeChk->Disable();
        m_xColumnsEdit->set_sensitive(false);
        m_xBookModeChk->set_sensitive(false);
    }
    else if (pButton == m_pColumnsBtn)
    else if (m_xColumnsBtn->get_active())
    {
        m_pColumnsEdit->Enable();
        m_pColumnsEdit->GrabFocus();
        if (m_pColumnsEdit->GetValue() % 2 == 0)
            m_pBookModeChk->Enable();
        m_xColumnsEdit->set_sensitive(true);
        m_xColumnsEdit->grab_focus();
        if (m_xColumnsEdit->get_value() % 2 == 0)
            m_xBookModeChk->set_sensitive(true);
    }
}

IMPL_LINK_NOARG(SvxZoomDialog, ViewLayoutSpinHdl, weld::SpinButton&, void)
{
    if (!m_xColumnsBtn->get_active())
        return;

    if (m_xColumnsEdit->get_value() % 2 == 0)
    {
        m_xBookModeChk->set_sensitive(true);
    }
    else
    {
        OSL_FAIL("Wrong Button");
        m_xBookModeChk->set_active(false);
        m_xBookModeChk->set_sensitive(false);
    }

    m_bModified = true;
}

IMPL_LINK(SvxZoomDialog, ViewLayoutSpinHdl, Edit&, rEdit, void)
IMPL_LINK_NOARG(SvxZoomDialog, ViewLayoutCheckHdl, weld::ToggleButton&, void)
{
    if (&rEdit == m_pColumnsEdit && !m_pColumnsBtn->IsChecked())
    if (!m_xColumnsBtn->get_active())
        return;

    if (m_pColumnsEdit->GetValue() % 2 == 0)
    {
        m_pBookModeChk->Enable();
    }
    else
    {
        m_pBookModeChk->Check(false);
        m_pBookModeChk->Disable();
    }

    mbModified = true;
    m_bModified = true;
}

IMPL_LINK(SvxZoomDialog, ViewLayoutCheckHdl, Button*, pCheckBox, void)
IMPL_LINK_NOARG(SvxZoomDialog, OKHdl, weld::Button&, void)
{
    if (pCheckBox == m_pBookModeChk && !m_pColumnsBtn->IsChecked())
        return;

    mbModified = true;
}

IMPL_LINK(SvxZoomDialog, OKHdl, Button*, pButton, void)
{
    if (mbModified || m_pOKBtn != pButton)
    if (m_bModified)
    {
        SvxZoomItem aZoomItem(SvxZoomType::PERCENT, 0, mrSet.GetPool()->GetWhich(SID_ATTR_ZOOM));
        SvxViewLayoutItem aViewLayoutItem(0, false, mrSet.GetPool()->GetWhich(SID_ATTR_VIEWLAYOUT));
        SvxZoomItem aZoomItem(SvxZoomType::PERCENT, 0, m_rSet.GetPool()->GetWhich(SID_ATTR_ZOOM));
        SvxViewLayoutItem aViewLayoutItem(0, false, m_rSet.GetPool()->GetWhich(SID_ATTR_VIEWLAYOUT));

        if (m_pOKBtn == pButton)
        sal_uInt16 nFactor = GetFactor();

        if (SPECIAL_FACTOR == nFactor)
        {
            sal_uInt16 nFactor = GetFactor();

            if (SPECIAL_FACTOR == nFactor)
            {
                if (m_pOptimalBtn->IsChecked())
                    aZoomItem.SetType(SvxZoomType::OPTIMAL);
                else if (m_pPageWidthBtn->IsChecked())
                    aZoomItem.SetType(SvxZoomType::PAGEWIDTH);
                else if (m_pWholePageBtn->IsChecked())
                    aZoomItem.SetType(SvxZoomType::WHOLEPAGE);
            }
            else
            {
                aZoomItem.SetValue(nFactor);
            }

            if (m_pAutomaticBtn->IsChecked())
            {
                aViewLayoutItem.SetValue(0);
                aViewLayoutItem.SetBookMode(false);
            }
            if (m_pSingleBtn->IsChecked())
            {
                aViewLayoutItem.SetValue(1);
                aViewLayoutItem.SetBookMode(false);
            }
            else if (m_pColumnsBtn->IsChecked())
            {
                aViewLayoutItem.SetValue(static_cast<sal_uInt16>(m_pColumnsEdit->GetValue()));
                aViewLayoutItem.SetBookMode(m_pBookModeChk->IsChecked());
            }
            if (m_xOptimalBtn->get_active())
                aZoomItem.SetType(SvxZoomType::OPTIMAL);
            else if (m_xPageWidthBtn->get_active())
                aZoomItem.SetType(SvxZoomType::PAGEWIDTH);
            else if (m_xWholePageBtn->get_active())
                aZoomItem.SetType(SvxZoomType::WHOLEPAGE);
        }
        else
        {
            OSL_FAIL("Wrong Button");
            return;
            aZoomItem.SetValue(nFactor);
        }
        mpOutSet.reset(new SfxItemSet(mrSet));
        mpOutSet->Put(aZoomItem);

        if (m_xAutomaticBtn->get_active())
        {
            aViewLayoutItem.SetValue(0);
            aViewLayoutItem.SetBookMode(false);
        }
        if (m_xSingleBtn->get_active())
        {
            aViewLayoutItem.SetValue(1);
            aViewLayoutItem.SetBookMode(false);
        }
        else if (m_xColumnsBtn->get_active())
        {
            aViewLayoutItem.SetValue(static_cast<sal_uInt16>(m_xColumnsEdit->get_value()));
            aViewLayoutItem.SetBookMode(m_xBookModeChk->get_active());
        }

        m_pOutSet.reset(new SfxItemSet(m_rSet));
        m_pOutSet->Put(aZoomItem);

        // don't set attribute in case the whole viewlayout stuff is disabled:
        if (m_pViewFrame->IsEnabled())
            mpOutSet->Put(aViewLayoutItem);
        if (m_xViewFrame->get_sensitive())
            m_pOutSet->Put(aViewLayoutItem);

        // memorize value from the UserEdit beyond the dialog
        SfxObjectShell* pShell = SfxObjectShell::Current();

        if (pShell)
        {
            sal_uInt16 nZoomValue = static_cast<sal_uInt16>(m_pUserEdit->GetValue());
            sal_uInt16 nZoomValue = static_cast<sal_uInt16>(m_xUserEdit->get_value(FUNIT_PERCENT));
            pShell->PutItem(SfxUInt16Item(SID_ATTR_ZOOM_USER, nZoomValue));
        }
        EndDialog( RET_OK );
        m_xDialog->response(RET_OK);
    }
    else
    {
        EndDialog();
    }
        m_xDialog->response(RET_CANCEL);

}

/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/cui/source/factory/dlgfact.cxx b/cui/source/factory/dlgfact.cxx
index 0acd2cc..6dc1f27 100644
--- a/cui/source/factory/dlgfact.cxx
+++ b/cui/source/factory/dlgfact.cxx
@@ -104,7 +104,12 @@ IMPL_ABSTDLG_BASE(AbstractHangulHanjaConversionDialog_Impl);
IMPL_ABSTDLG_BASE(AbstractFmShowColsDialog_Impl);
IMPL_ABSTDLG_BASE(AbstractHyphenWordDialog_Impl)
IMPL_ABSTDLG_BASE(AbstractThesaurusDialog_Impl)
IMPL_ABSTDLG_BASE(AbstractSvxZoomDialog_Impl)

short AbstractSvxZoomDialog_Impl::Execute()
{
    return m_xDlg->run();
}

IMPL_ABSTDLG_BASE(AbstractTitleDialog_Impl);
IMPL_ABSTDLG_BASE(AbstractScriptSelectorDialog_Impl);
IMPL_ABSTDLG_BASE(AbstractGalleryIdDialog_Impl);
@@ -406,17 +411,17 @@ void  AbstractFmShowColsDialog_Impl::SetColumns(const ::Reference< css::containe

void AbstractSvxZoomDialog_Impl::SetLimits( sal_uInt16 nMin, sal_uInt16 nMax )
{
    pDlg->SetLimits( nMin, nMax );
    m_xDlg->SetLimits( nMin, nMax );
}

void AbstractSvxZoomDialog_Impl::HideButton( ZoomButtonId nBtnId )
{
    pDlg->HideButton( nBtnId );
    m_xDlg->HideButton( nBtnId );
}

const SfxItemSet* AbstractSvxZoomDialog_Impl::GetOutputItemSet() const
{
    return pDlg->GetOutputItemSet();
    return m_xDlg->GetOutputItemSet();
}

void  AbstractSpellDialog_Impl::Invalidate()
@@ -953,11 +958,9 @@ VclPtr<AbstractFmShowColsDialog> AbstractDialogFactory_Impl::CreateFmShowColsDia
    return VclPtr<AbstractFmShowColsDialog_Impl>::Create( pDlg );
}

VclPtr<AbstractSvxZoomDialog> AbstractDialogFactory_Impl::CreateSvxZoomDialog( vcl::Window* pParent,
                                            const SfxItemSet& rCoreSet)
VclPtr<AbstractSvxZoomDialog> AbstractDialogFactory_Impl::CreateSvxZoomDialog(weld::Window* pParent, const SfxItemSet& rCoreSet)
{
    VclPtrInstance<SvxZoomDialog> pDlg( pParent, rCoreSet);
    return VclPtr<AbstractSvxZoomDialog_Impl>::Create( pDlg );
    return VclPtr<AbstractSvxZoomDialog_Impl>::Create(new SvxZoomDialog(pParent, rCoreSet));
}

VclPtr<AbstractSpellDialog> AbstractDialogFactory_Impl::CreateSvxSpellDialog(
diff --git a/cui/source/factory/dlgfact.hxx b/cui/source/factory/dlgfact.hxx
index 4a77f17..25573f6 100644
--- a/cui/source/factory/dlgfact.hxx
+++ b/cui/source/factory/dlgfact.hxx
@@ -187,11 +187,17 @@ class AbstractFmShowColsDialog_Impl : public AbstractFmShowColsDialog
class SvxZoomDialog;
class AbstractSvxZoomDialog_Impl : public AbstractSvxZoomDialog
{
    DECL_ABSTDLG_BASE(AbstractSvxZoomDialog_Impl,SvxZoomDialog)
    virtual void    SetLimits( sal_uInt16 nMin, sal_uInt16 nMax ) override;
    virtual void    HideButton( ZoomButtonId nBtnId ) override;
protected:
    std::unique_ptr<SvxZoomDialog> m_xDlg;
public:
    explicit AbstractSvxZoomDialog_Impl(SvxZoomDialog* p)
        : m_xDlg(p)
    {
    }
    virtual short Execute() override;
    virtual void  SetLimits( sal_uInt16 nMin, sal_uInt16 nMax ) override;
    virtual void  HideButton( ZoomButtonId nBtnId ) override;
    virtual const SfxItemSet*   GetOutputItemSet() const override ;

};

namespace svx{ class SpellDialog;}
@@ -547,8 +553,7 @@ public:
                                                SvxSpellWrapper* pWrapper ) override;

    virtual VclPtr<AbstractFmShowColsDialog> CreateFmShowColsDialog() override;
    virtual VclPtr<AbstractSvxZoomDialog> CreateSvxZoomDialog( vcl::Window* pParent,
                                            const SfxItemSet& rCoreSet) override;
    virtual VclPtr<AbstractSvxZoomDialog> CreateSvxZoomDialog(weld::Window* pParent, const SfxItemSet& rCoreSet) override;
   // add for SvxBorderBackgroundDlg
    virtual VclPtr<SfxAbstractTabDialog> CreateSvxBorderBackgroundDlg(
       vcl::Window* pParent,
diff --git a/cui/source/inc/zoom.hxx b/cui/source/inc/zoom.hxx
index 87221f5..7dd271f 100644
--- a/cui/source/inc/zoom.hxx
+++ b/cui/source/inc/zoom.hxx
@@ -22,44 +22,38 @@
#include <memory>
#include <sfx2/basedlgs.hxx>
#include <svx/zoom_def.hxx>
#include <vcl/button.hxx>
#include <vcl/field.hxx>
#include <vcl/fixed.hxx>
#include <vcl/weld.hxx>

class SvxZoomDialog : public SfxModalDialog
class SvxZoomDialog : public weld::GenericDialogController
{
private:
    VclPtr<RadioButton>        m_pOptimalBtn;
    VclPtr<RadioButton>        m_pWholePageBtn;
    VclPtr<RadioButton>        m_pPageWidthBtn;
    VclPtr<RadioButton>        m_p100Btn;
    VclPtr<RadioButton>        m_pUserBtn;
    VclPtr<MetricField>        m_pUserEdit;
    const SfxItemSet&           m_rSet;
    std::unique_ptr<SfxItemSet> m_pOutSet;
    bool                        m_bModified;

    VclPtr<VclContainer>       m_pViewFrame;
    VclPtr<RadioButton>        m_pAutomaticBtn;
    VclPtr<RadioButton>        m_pSingleBtn;
    VclPtr<RadioButton>        m_pColumnsBtn;
    VclPtr<NumericField>       m_pColumnsEdit;
    VclPtr<CheckBox>           m_pBookModeChk;
    std::unique_ptr<weld::RadioButton>        m_xOptimalBtn;
    std::unique_ptr<weld::RadioButton>        m_xWholePageBtn;
    std::unique_ptr<weld::RadioButton>        m_xPageWidthBtn;
    std::unique_ptr<weld::RadioButton>        m_x100Btn;
    std::unique_ptr<weld::RadioButton>        m_xUserBtn;
    std::unique_ptr<weld::MetricSpinButton>   m_xUserEdit;
    std::unique_ptr<weld::Widget>             m_xViewFrame;
    std::unique_ptr<weld::RadioButton>        m_xAutomaticBtn;
    std::unique_ptr<weld::RadioButton>        m_xSingleBtn;
    std::unique_ptr<weld::RadioButton>        m_xColumnsBtn;
    std::unique_ptr<weld::SpinButton>         m_xColumnsEdit;
    std::unique_ptr<weld::CheckButton>        m_xBookModeChk;
    std::unique_ptr<weld::Button>             m_xOKBtn;

    VclPtr<OKButton>           m_pOKBtn;

    const SfxItemSet&           mrSet;
    std::unique_ptr<SfxItemSet> mpOutSet;
    bool                        mbModified;

    DECL_LINK(UserHdl, Button*, void);
    DECL_LINK(SpinHdl, Edit&, void);
    DECL_LINK(ViewLayoutUserHdl, Button*, void);
    DECL_LINK(ViewLayoutSpinHdl, Edit&, void);
    DECL_LINK(ViewLayoutCheckHdl, Button*, void);
    DECL_LINK(OKHdl, Button*, void);
    DECL_LINK(UserHdl, weld::ToggleButton&, void);
    DECL_LINK(SpinHdl, weld::MetricSpinButton&, void);
    DECL_LINK(ViewLayoutUserHdl, weld::ToggleButton&, void);
    DECL_LINK(ViewLayoutSpinHdl, weld::SpinButton&, void);
    DECL_LINK(ViewLayoutCheckHdl, weld::ToggleButton&, void);
    DECL_LINK(OKHdl, weld::Button&, void);

public:
    SvxZoomDialog(vcl::Window* pParent, const SfxItemSet& rCoreSet);
    virtual ~SvxZoomDialog() override;
    virtual void dispose() override;
    SvxZoomDialog(weld::Window* pParent, const SfxItemSet& rCoreSet);

    const SfxItemSet* GetOutputItemSet() const;

diff --git a/cui/uiconfig/ui/zoomdialog.ui b/cui/uiconfig/ui/zoomdialog.ui
index 24f5faa..2fd7e3e 100644
--- a/cui/uiconfig/ui/zoomdialog.ui
+++ b/cui/uiconfig/ui/zoomdialog.ui
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.20.0 -->
<!-- Generated with glade 3.20.4 -->
<interface domain="cui">
  <requires lib="gtk+" version="3.18"/>
  <object class="GtkAdjustment" id="adjustment1">
@@ -8,11 +8,19 @@
    <property name="step_increment">1</property>
    <property name="page_increment">10</property>
  </object>
  <object class="GtkAdjustment" id="adjustment2">
    <property name="upper">100</property>
    <property name="step_increment">1</property>
    <property name="page_increment">10</property>
  </object>
  <object class="GtkDialog" id="ZoomDialog">
    <property name="can_focus">False</property>
    <property name="border_width">6</property>
    <property name="title" translatable="yes" context="zoomdialog|ZoomDialog">Zoom &amp; View Layout</property>
    <property name="resizable">False</property>
    <property name="modal">True</property>
    <property name="default_width">0</property>
    <property name="default_height">0</property>
    <property name="type_hint">dialog</property>
    <child internal-child="vbox">
      <object class="GtkBox" id="dialog-vbox1">
@@ -28,6 +36,7 @@
                <property name="label">gtk-ok</property>
                <property name="visible">True</property>
                <property name="can_focus">True</property>
                <property name="can_default">True</property>
                <property name="has_default">True</property>
                <property name="receives_default">True</property>
                <property name="use_stock">True</property>
@@ -107,7 +116,6 @@
                            <property name="xalign">0</property>
                            <property name="active">True</property>
                            <property name="draw_indicator">True</property>
                            <property name="group">fitwandh</property>
                          </object>
                          <packing>
                            <property name="expand">False</property>
@@ -122,9 +130,8 @@
                            <property name="can_focus">True</property>
                            <property name="receives_default">False</property>
                            <property name="xalign">0</property>
                            <property name="active">True</property>
                            <property name="draw_indicator">True</property>
                            <property name="group">fitw</property>
                            <property name="group">optimal</property>
                          </object>
                          <packing>
                            <property name="expand">False</property>
@@ -139,9 +146,8 @@
                            <property name="can_focus">True</property>
                            <property name="receives_default">False</property>
                            <property name="xalign">0</property>
                            <property name="active">True</property>
                            <property name="draw_indicator">True</property>
                            <property name="group">100pc</property>
                            <property name="group">optimal</property>
                          </object>
                          <packing>
                            <property name="expand">False</property>
@@ -156,9 +162,8 @@
                            <property name="can_focus">True</property>
                            <property name="receives_default">False</property>
                            <property name="xalign">0</property>
                            <property name="active">True</property>
                            <property name="draw_indicator">True</property>
                            <property name="group">variable</property>
                            <property name="group">optimal</property>
                          </object>
                          <packing>
                            <property name="expand">False</property>
@@ -178,11 +183,10 @@
                                <property name="can_focus">True</property>
                                <property name="receives_default">False</property>
                                <property name="xalign">0</property>
                                <property name="active">True</property>
                                <property name="draw_indicator">True</property>
                                <property name="group">optimal</property>
                                <accessibility>
                                  <relation type="label-for" target="zoomsb:0%"/>
                                  <relation type="label-for" target="zoomsb"/>
                                </accessibility>
                              </object>
                              <packing>
@@ -192,15 +196,16 @@
                              </packing>
                            </child>
                            <child>
                              <object class="GtkSpinButton" id="zoomsb:0%">
                              <object class="GtkSpinButton" id="zoomsb">
                                <property name="visible">True</property>
                                <property name="can_focus">True</property>
                                <property name="invisible_char">●</property>
                                <property name="activates_default">True</property>
                                <property name="adjustment">adjustment2</property>
                                <accessibility>
                                  <relation type="labelled-by" target="variable"/>
                                </accessibility>
                                <child internal-child="accessible">
                                  <object class="AtkObject" id="zoomsb:0%-atkobject">
                                  <object class="AtkObject" id="zoomsb-atkobject">
                                    <property name="AtkObject::accessible-name" translatable="yes" context="zoomdialog|zoomsb-atkobject">Variable</property>
                                  </object>
                                </child>
@@ -264,9 +269,7 @@
                            <property name="can_focus">True</property>
                            <property name="receives_default">False</property>
                            <property name="xalign">0</property>
                            <property name="active">True</property>
                            <property name="draw_indicator">True</property>
                            <property name="group">singlepage</property>
                          </object>
                          <packing>
                            <property name="expand">False</property>
@@ -281,9 +284,8 @@
                            <property name="can_focus">True</property>
                            <property name="receives_default">False</property>
                            <property name="xalign">0</property>
                            <property name="active">True</property>
                            <property name="draw_indicator">True</property>
                            <property name="group">columns</property>
                            <property name="group">automatic</property>
                          </object>
                          <packing>
                            <property name="expand">False</property>
@@ -303,7 +305,6 @@
                                <property name="can_focus">True</property>
                                <property name="receives_default">False</property>
                                <property name="xalign">0</property>
                                <property name="active">True</property>
                                <property name="draw_indicator">True</property>
                                <property name="group">automatic</property>
                                <accessibility>
@@ -321,7 +322,7 @@
                              <object class="GtkSpinButton" id="columnssb">
                                <property name="visible">True</property>
                                <property name="can_focus">True</property>
                                <property name="invisible_char">●</property>
                                <property name="activates_default">True</property>
                                <property name="adjustment">adjustment1</property>
                                <accessibility>
                                  <relation type="labelled-by" target="columns"/>
@@ -407,5 +408,8 @@
      <action-widget response="-6">cancel</action-widget>
      <action-widget response="-11">help</action-widget>
    </action-widgets>
    <child>
      <placeholder/>
    </child>
  </object>
</interface>
diff --git a/include/svx/svxdlg.hxx b/include/svx/svxdlg.hxx
index 3899e4a..f2f8172 100644
--- a/include/svx/svxdlg.hxx
+++ b/include/svx/svxdlg.hxx
@@ -345,8 +345,7 @@ public:

    virtual VclPtr<AbstractFmShowColsDialog> CreateFmShowColsDialog() = 0;

    virtual VclPtr<AbstractSvxZoomDialog> CreateSvxZoomDialog( vcl::Window* pParent,
                                            const SfxItemSet& rCoreSet )=0;
    virtual VclPtr<AbstractSvxZoomDialog> CreateSvxZoomDialog(weld::Window* pParent, const SfxItemSet& rCoreSet) = 0;

    virtual VclPtr<AbstractSpellDialog>   CreateSvxSpellDialog(vcl::Window* pParent,
                                            SfxBindings* pBindings,
diff --git a/sc/source/ui/view/tabvwsh3.cxx b/sc/source/ui/view/tabvwsh3.cxx
index 404b55a..a31a91f 100644
--- a/sc/source/ui/view/tabvwsh3.cxx
+++ b/sc/source/ui/view/tabvwsh3.cxx
@@ -724,7 +724,8 @@ void ScTabViewShell::Execute( SfxRequest& rReq )
                    SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
                    if(pFact)
                    {
                        pDlg.disposeAndReset(pFact->CreateSvxZoomDialog(GetDialogParent(), aSet));
                        vcl::Window* pWin = GetDialogParent();
                        pDlg.disposeAndReset(pFact->CreateSvxZoomDialog(pWin ? pWin->GetFrameWeld() : nullptr, aSet));
                        OSL_ENSURE(pDlg, "Dialog creation failed!");
                    }
                    if (pDlg)
diff --git a/starmath/source/view.cxx b/starmath/source/view.cxx
index f648764..979ac6a 100644
--- a/starmath/source/view.cxx
+++ b/starmath/source/view.cxx
@@ -1709,7 +1709,7 @@ void SmViewShell::Execute(SfxRequest& rReq)
                    SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
                    if(pFact)
                    {
                        ScopedVclPtr<AbstractSvxZoomDialog> xDlg(pFact->CreateSvxZoomDialog(&GetViewFrame()->GetWindow(), aSet));
                        ScopedVclPtr<AbstractSvxZoomDialog> xDlg(pFact->CreateSvxZoomDialog(GetViewFrame()->GetWindow().GetFrameWeld(), aSet));
                        assert(xDlg);
                        xDlg->SetLimits( MINZOOM, MAXZOOM );
                        if (xDlg->Execute() != RET_CANCEL)
diff --git a/sw/source/uibase/uiview/pview.cxx b/sw/source/uibase/uiview/pview.cxx
index f2958a8..32d37c6 100644
--- a/sw/source/uibase/uiview/pview.cxx
+++ b/sw/source/uibase/uiview/pview.cxx
@@ -772,7 +772,7 @@ void  SwPagePreview::Execute( SfxRequest &rReq )
                SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
                if(pFact)
                {
                    pDlg.disposeAndReset(pFact->CreateSvxZoomDialog(&GetViewFrame()->GetWindow(), aCoreSet));
                    pDlg.disposeAndReset(pFact->CreateSvxZoomDialog(GetViewFrame()->GetWindow().GetFrameWeld(), aCoreSet));
                    OSL_ENSURE(pDlg, "Dialog creation failed!");
                }

diff --git a/sw/source/uibase/uiview/view2.cxx b/sw/source/uibase/uiview/view2.cxx
index 721a603..c48970cb 100644
--- a/sw/source/uibase/uiview/view2.cxx
+++ b/sw/source/uibase/uiview/view2.cxx
@@ -1660,7 +1660,7 @@ void SwView::ExecuteStatusLine(SfxRequest &rReq)
                    SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
                    if(pFact)
                    {
                        pDlg.disposeAndReset(pFact->CreateSvxZoomDialog(&GetViewFrame()->GetWindow(), aCoreSet));
                        pDlg.disposeAndReset(pFact->CreateSvxZoomDialog(GetViewFrame()->GetWindow().GetFrameWeld(), aCoreSet));
                        OSL_ENSURE(pDlg, "Zooming fail!");
                        if (pDlg)
                        {
diff --git a/sw/uiconfig/swriter/ui/inserttable.ui b/sw/uiconfig/swriter/ui/inserttable.ui
index 2c68b19..1d7d896 100644
--- a/sw/uiconfig/swriter/ui/inserttable.ui
+++ b/sw/uiconfig/swriter/ui/inserttable.ui
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.22.0 -->
<!-- Generated with glade 3.20.4 -->
<interface domain="sw">
  <requires lib="gtk+" version="3.18"/>
  <object class="GtkAdjustment" id="adjustment1">
@@ -485,4 +485,10 @@
      <placeholder/>
    </child>
  </object>
  <object class="GtkSizeGroup" id="sizegroup1">
    <widgets>
      <widget name="colspin"/>
      <widget name="rowspin"/>
    </widgets>
  </object>
</interface>
diff --git a/vcl/unx/gtk3/gtk3gtkinst.cxx b/vcl/unx/gtk3/gtk3gtkinst.cxx
index cde387c..20d6160 100644
--- a/vcl/unx/gtk3/gtk3gtkinst.cxx
+++ b/vcl/unx/gtk3/gtk3gtkinst.cxx
@@ -2916,7 +2916,7 @@ public:

    virtual void enable_notify_events() override
    {
        GtkInstanceEntry::disable_notify_events();
        GtkInstanceEntry::enable_notify_events();
        g_signal_handler_unblock(m_pButton, m_nValueChangedSignalId);
    }