[Libreoffice-commits] core.git: include/svtools sd/inc sd/qa sd/source sd/uiconfig svtools/source

Caolán McNamara caolanm at redhat.com
Mon Apr 30 14:01:42 UTC 2018


 include/svtools/unitconv.hxx     |    2 
 sd/inc/sdabstdlg.hxx             |    2 
 sd/qa/unit/dialogs-test.cxx      |    3 
 sd/source/ui/dlg/dlgsnap.cxx     |  165 ++++++++++++++++-----------------------
 sd/source/ui/dlg/sddlgfact.cxx   |   20 ++--
 sd/source/ui/dlg/sddlgfact.hxx   |   11 ++
 sd/source/ui/func/fusnapln.cxx   |    3 
 sd/source/ui/inc/dlgsnap.hxx     |   40 ++++-----
 sd/uiconfig/sdraw/ui/dlgsnap.ui  |   60 ++++++++------
 svtools/source/misc/unitconv.cxx |   31 ++++++-
 10 files changed, 181 insertions(+), 156 deletions(-)

New commits:
commit 23cf9370edf41c591ebb5acad372b5ce2395f68e
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Mon Apr 30 11:55:31 2018 +0100

    weld SdSnapLineDlg
    
    Change-Id: I3a8117719525fa204f29cc10a944376116050d61
    Reviewed-on: https://gerrit.libreoffice.org/53658
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Caolán McNamara <caolanm at redhat.com>
    Tested-by: Caolán McNamara <caolanm at redhat.com>

diff --git a/include/svtools/unitconv.hxx b/include/svtools/unitconv.hxx
index 6d663df72b1c..056bc8ae9404 100644
--- a/include/svtools/unitconv.hxx
+++ b/include/svtools/unitconv.hxx
@@ -44,7 +44,9 @@ SVT_DLLPUBLIC long      ControlToItem( long nIn, FieldUnit eCtrl, MapUnit eItem
 
 SVT_DLLPUBLIC FieldUnit MapToFieldUnit( const MapUnit eUnit );
 
+SVT_DLLPUBLIC void      SetMetricValue(weld::MetricSpinButton& rField, int lCoreValue, MapUnit eUnit);
 SVT_DLLPUBLIC void      SetMetricValue( MetricField& rField, long lCoreValue, MapUnit eUnit );
+SVT_DLLPUBLIC int       GetCoreValue(const weld::MetricSpinButton& rField, MapUnit eUnit);
 SVT_DLLPUBLIC long      GetCoreValue( const MetricField& rField, MapUnit eUnit );
 
 SVT_DLLPUBLIC long  PointToTwips( long nIn );
diff --git a/sd/inc/sdabstdlg.hxx b/sd/inc/sdabstdlg.hxx
index 8587d9dc256e..4b1e402f6eb7 100644
--- a/sd/inc/sdabstdlg.hxx
+++ b/sd/inc/sdabstdlg.hxx
@@ -184,7 +184,7 @@ public:
     virtual VclPtr<SfxAbstractTabDialog>       CreateSdTabCharDialog(vcl::Window* pWindow, const SfxItemSet* pAttr, SfxObjectShell* pDocShell) = 0;
     virtual VclPtr<SfxAbstractTabDialog>       CreateSdTabPageDialog(vcl::Window* pWindow, const SfxItemSet* pAttr, SfxObjectShell* pDocShell, bool bAreaPage) = 0;
     virtual VclPtr<AbstractSdModifyFieldDlg>   CreateSdModifyFieldDlg(vcl::Window* pWindow, const SvxFieldData* pInField, const SfxItemSet& rSet) = 0;
-    virtual VclPtr<AbstractSdSnapLineDlg>      CreateSdSnapLineDlg(vcl::Window* pParent, const SfxItemSet& rInAttrs, ::sd::View* pView) = 0;
+    virtual VclPtr<AbstractSdSnapLineDlg>      CreateSdSnapLineDlg(weld::Window* pParent, const SfxItemSet& rInAttrs, ::sd::View* pView) = 0;
     virtual VclPtr<AbstractSdInsertLayerDlg>   CreateSdInsertLayerDlg(weld::Window* pParent, const SfxItemSet& rInAttrs, bool bDeletable, const OUString& rStr) = 0;
     virtual VclPtr<AbstractSdInsertPagesObjsDlg> CreateSdInsertPagesObjsDlg(vcl::Window* pParent, const SdDrawDocument* pDoc, SfxMedium* pSfxMedium, const OUString& rFileName) = 0;
     virtual VclPtr<AbstractMorphDlg>           CreateMorphDlg(weld::Window* pParent, const SdrObject* pObj1, const SdrObject* pObj2) = 0;
diff --git a/sd/qa/unit/dialogs-test.cxx b/sd/qa/unit/dialogs-test.cxx
index 260b22ce7fc0..868388102e07 100644
--- a/sd/qa/unit/dialogs-test.cxx
+++ b/sd/qa/unit/dialogs-test.cxx
@@ -352,8 +352,9 @@ VclPtr<VclAbstractDialog> SdDialogsTest::createDialogByID(sal_uInt32 nID)
             SfxItemSet aNewAttr(pDrawDoc->GetItemPool(), svl::Items<ATTR_SNAPLINE_START, ATTR_SNAPLINE_END>{});
             aNewAttr.Put(SfxInt32Item(ATTR_SNAPLINE_X, 0));
             aNewAttr.Put(SfxInt32Item(ATTR_SNAPLINE_Y, 0));
+            auto const parent = getViewShell()->GetActiveWindow();
             pRetval = getSdAbstractDialogFactory()->CreateSdSnapLineDlg(
-                getViewShell()->GetActiveWindow(),
+                parent == nullptr ? nullptr : parent->GetFrameWeld(),
                 aNewAttr,
                 getDrawView());
             break;
diff --git a/sd/source/ui/dlg/dlgsnap.cxx b/sd/source/ui/dlg/dlgsnap.cxx
index 58a893078aa1..40de52f786e0 100644
--- a/sd/source/ui/dlg/dlgsnap.cxx
+++ b/sd/source/ui/dlg/dlgsnap.cxx
@@ -30,32 +30,28 @@
 /**
  * dialog to adjust grid (scarcely ESO!)
  */
-SdSnapLineDlg::SdSnapLineDlg(
-    vcl::Window* pWindow,
-    const SfxItemSet& rInAttrs,
-    ::sd::View const * pView)
-    : ModalDialog(pWindow, "SnapObjectDialog", "modules/sdraw/ui/dlgsnap.ui")
+SdSnapLineDlg::SdSnapLineDlg(weld::Window* pWindow, const SfxItemSet& rInAttrs, ::sd::View const * pView)
+    : GenericDialogController(pWindow, "modules/sdraw/ui/dlgsnap.ui", "SnapObjectDialog")
     , eUIUnit(pView->GetDoc().GetUIUnit())
     , aUIScale(pView->GetDoc().GetUIScale())
+    , m_xFtX(m_xBuilder->weld_label("xlabel"))
+    , m_xMtrFldX(m_xBuilder->weld_metric_spin_button("x", FUNIT_CM))
+    , m_xFtY(m_xBuilder->weld_label("ylabel"))
+    , m_xMtrFldY(m_xBuilder->weld_metric_spin_button("y", FUNIT_CM))
+    , m_xRadioGroup(m_xBuilder->weld_widget("radiogroup"))
+    , m_xRbPoint(m_xBuilder->weld_radio_button("point"))
+    , m_xRbVert(m_xBuilder->weld_radio_button("vert"))
+    , m_xRbHorz(m_xBuilder->weld_radio_button("horz"))
+    , m_xBtnDelete(m_xBuilder->weld_button("delete"))
 {
-    get(m_pFtX, "xlabel");
-    get(m_pMtrFldX, "x");
-    get(m_pFtY, "ylabel");
-    get(m_pMtrFldY, "y");
-    get(m_pRadioGroup, "radiogroup");
-    get(m_pRbPoint, "point");
-    get(m_pRbVert, "vert");
-    get(m_pRbHorz, "horz");
-    get(m_pBtnDelete, "delete");
+    m_xRbHorz->connect_clicked(LINK(this, SdSnapLineDlg, ClickHdl));
+    m_xRbVert->connect_clicked(LINK(this, SdSnapLineDlg, ClickHdl));
+    m_xRbPoint->connect_clicked(LINK(this, SdSnapLineDlg, ClickHdl));
 
-    m_pRbHorz->SetClickHdl(LINK(this, SdSnapLineDlg, ClickHdl));
-    m_pRbVert->SetClickHdl(LINK(this, SdSnapLineDlg, ClickHdl));
-    m_pRbPoint->SetClickHdl(LINK(this, SdSnapLineDlg, ClickHdl));
+    m_xBtnDelete->connect_clicked(LINK(this, SdSnapLineDlg, ClickHdl));
 
-    m_pBtnDelete->SetClickHdl(LINK(this, SdSnapLineDlg, ClickHdl));
-
-    SetFieldUnit( *m_pMtrFldX, eUIUnit, true );
-    SetFieldUnit( *m_pMtrFldY, eUIUnit, true );
+    SetFieldUnit(*m_xMtrFldX, eUIUnit, true);
+    SetFieldUnit(*m_xMtrFldY, eUIUnit, true);
 
     // get WorkArea
     ::tools::Rectangle aWorkArea = pView->GetWorkArea();
@@ -74,70 +70,51 @@ SdSnapLineDlg::SdSnapLineDlg(
 
     // determine max and min values depending on
     // WorkArea, PoolUnit and FieldUnit:
-    SetMetricValue( *m_pMtrFldX, aLeftTop.X(), ePoolUnit );
-
-    long nValue = static_cast<long>(m_pMtrFldX->GetValue());
-    nValue = long( nValue / aUIScale);
-    m_pMtrFldX->SetMin( nValue );
-    m_pMtrFldX->SetFirst( nValue );
-
-    SetMetricValue( *m_pMtrFldX, aRightBottom.X(), ePoolUnit );
-    nValue = static_cast<long>(m_pMtrFldX->GetValue());
-    nValue = long( nValue / aUIScale);
-    m_pMtrFldX->SetMax( nValue );
-    m_pMtrFldX->SetLast( nValue );
-
-    SetMetricValue( *m_pMtrFldY, aLeftTop.Y(), ePoolUnit );
-    nValue = static_cast<long>(m_pMtrFldY->GetValue());
-    nValue = long( nValue / aUIScale);
-    m_pMtrFldY->SetMin( nValue );
-    m_pMtrFldY->SetFirst( nValue );
-
-    SetMetricValue( *m_pMtrFldY, aRightBottom.Y(), ePoolUnit );
-    nValue = static_cast<long>(m_pMtrFldY->GetValue());
-    nValue = long( nValue / aUIScale);
-    m_pMtrFldY->SetMax( nValue );
-    m_pMtrFldY->SetLast( nValue );
+    SetMetricValue(*m_xMtrFldX, aLeftTop.X(), ePoolUnit );
+
+    int nValue = m_xMtrFldX->get_value(FUNIT_NONE);
+    nValue = sal_Int32(nValue / aUIScale);
+    m_xMtrFldX->set_min(nValue, FUNIT_NONE);
+
+    SetMetricValue(*m_xMtrFldX, aRightBottom.X(), ePoolUnit);
+    nValue = m_xMtrFldX->get_value(FUNIT_NONE);
+    nValue = sal_Int32(nValue / aUIScale);
+    m_xMtrFldX->set_max(nValue, FUNIT_NONE);
+
+    SetMetricValue(*m_xMtrFldY, aLeftTop.Y(), ePoolUnit);
+    nValue = m_xMtrFldY->get_value(FUNIT_NONE);
+    nValue = sal_Int32(nValue / aUIScale);
+    m_xMtrFldY->set_min(nValue, FUNIT_NONE);
+
+    SetMetricValue(*m_xMtrFldY, aRightBottom.Y(), ePoolUnit);
+    nValue = m_xMtrFldY->get_value(FUNIT_NONE);
+    nValue = sal_Int32(nValue / aUIScale);
+    m_xMtrFldY->set_max(nValue, FUNIT_NONE);
 
     // set values
     nXValue = static_cast<const SfxInt32Item&>( rInAttrs.Get(ATTR_SNAPLINE_X)).GetValue();
     nYValue = static_cast<const SfxInt32Item&>( rInAttrs.Get(ATTR_SNAPLINE_Y)).GetValue();
-    nXValue = long(nXValue / aUIScale);
-    nYValue = long(nYValue / aUIScale);
-    SetMetricValue( *m_pMtrFldX, nXValue, MapUnit::Map100thMM);
-    SetMetricValue( *m_pMtrFldY, nYValue, MapUnit::Map100thMM);
+    nXValue = sal_Int32(nXValue / aUIScale);
+    nYValue = sal_Int32(nYValue / aUIScale);
+    SetMetricValue(*m_xMtrFldX, nXValue, MapUnit::Map100thMM);
+    SetMetricValue(*m_xMtrFldY, nYValue, MapUnit::Map100thMM);
 
-    m_pRbPoint->Check();
+    m_xRbPoint->set_active(true);
 }
 
 SdSnapLineDlg::~SdSnapLineDlg()
 {
-    disposeOnce();
-}
-
-void SdSnapLineDlg::dispose()
-{
-    m_pFtX.clear();
-    m_pMtrFldX.clear();
-    m_pFtY.clear();
-    m_pMtrFldY.clear();
-    m_pRadioGroup.clear();
-    m_pRbPoint.clear();
-    m_pRbVert.clear();
-    m_pRbHorz.clear();
-    m_pBtnDelete.clear();
-    ModalDialog::dispose();
 }
 
 /**
  * fills provided item sets with dialog box attributes
  */
-IMPL_LINK( SdSnapLineDlg, ClickHdl, Button *, pBtn, void )
+IMPL_LINK( SdSnapLineDlg, ClickHdl, weld::Button&, rBtn, void )
 {
-    if ( pBtn == m_pRbPoint )        SetInputFields(true, true);
-    else if ( pBtn == m_pRbHorz )    SetInputFields(false, true);
-    else if ( pBtn == m_pRbVert )    SetInputFields(true, false);
-    else if ( pBtn == m_pBtnDelete ) EndDialog(RET_SNAP_DELETE);
+    if (&rBtn == m_xRbPoint.get())   SetInputFields(true, true);
+    else if (&rBtn == m_xRbHorz.get())    SetInputFields(false, true);
+    else if (&rBtn == m_xRbVert.get())    SetInputFields(true, false);
+    else if (&rBtn == m_xBtnDelete.get()) m_xDialog->response(RET_SNAP_DELETE);
 }
 
 /**
@@ -147,12 +124,12 @@ void SdSnapLineDlg::GetAttr(SfxItemSet& rOutAttrs)
 {
     SnapKind eKind;
 
-    if ( m_pRbHorz->IsChecked() )      eKind = SK_HORIZONTAL;
-    else if ( m_pRbVert->IsChecked() ) eKind = SK_VERTICAL;
-    else                            eKind = SK_POINT;
+    if (m_xRbHorz->get_active())      eKind = SK_HORIZONTAL;
+    else if (m_xRbVert->get_active()) eKind = SK_VERTICAL;
+    else                              eKind = SK_POINT;
 
-    nXValue = long( GetCoreValue( *m_pMtrFldX, MapUnit::Map100thMM) * aUIScale);
-    nYValue = long( GetCoreValue( *m_pMtrFldY, MapUnit::Map100thMM) * aUIScale);
+    nXValue = sal_Int32(GetCoreValue(*m_xMtrFldX, MapUnit::Map100thMM) * aUIScale);
+    nYValue = sal_Int32(GetCoreValue(*m_xMtrFldY, MapUnit::Map100thMM) * aUIScale);
 
     rOutAttrs.Put(SfxAllEnumItem(ATTR_SNAPLINE_KIND, static_cast<sal_uInt16>(eKind)));
     rOutAttrs.Put(SfxInt32Item(ATTR_SNAPLINE_X, nXValue));
@@ -161,7 +138,7 @@ void SdSnapLineDlg::GetAttr(SfxItemSet& rOutAttrs)
 
 void SdSnapLineDlg::HideRadioGroup()
 {
-    m_pRadioGroup->Hide();
+    m_xRadioGroup->hide();
 }
 
 /**
@@ -171,31 +148,31 @@ void SdSnapLineDlg::SetInputFields(bool bEnableX, bool bEnableY)
 {
     if ( bEnableX )
     {
-        if ( !m_pMtrFldX->IsEnabled() )
-            m_pMtrFldX->SetValue(nXValue);
-        m_pMtrFldX->Enable();
-        m_pFtX->Enable();
+        if (!m_xMtrFldX->get_sensitive())
+            m_xMtrFldX->set_value(nXValue, FUNIT_NONE);
+        m_xMtrFldX->set_sensitive(true);
+        m_xFtX->set_sensitive(true);
     }
-    else if ( m_pMtrFldX->IsEnabled() )
+    else if (m_xMtrFldX->get_sensitive())
     {
-        nXValue = static_cast<long>(m_pMtrFldX->GetValue());
-        m_pMtrFldX->SetText(OUString());
-        m_pMtrFldX->Disable();
-        m_pFtX->Disable();
+        nXValue = m_xMtrFldX->get_value(FUNIT_NONE);
+        m_xMtrFldX->set_text(OUString());
+        m_xMtrFldX->set_sensitive(false);
+        m_xFtX->set_sensitive(false);
     }
     if ( bEnableY )
     {
-        if ( !m_pMtrFldY->IsEnabled() )
-            m_pMtrFldY->SetValue(nYValue);
-        m_pMtrFldY->Enable();
-        m_pFtY->Enable();
+        if (!m_xMtrFldY->get_sensitive())
+            m_xMtrFldY->set_value(nYValue, FUNIT_NONE);
+        m_xMtrFldY->set_sensitive(true);
+        m_xFtY->set_sensitive(true);
     }
-    else if ( m_pMtrFldY->IsEnabled() )
+    else if (m_xMtrFldY->get_sensitive())
     {
-        nYValue = static_cast<long>(m_pMtrFldY->GetValue());
-        m_pMtrFldY->SetText(OUString());
-        m_pMtrFldY->Disable();
-        m_pFtY->Disable();
+        nYValue = m_xMtrFldY->get_value(FUNIT_NONE);
+        m_xMtrFldY->set_text(OUString());
+        m_xMtrFldY->set_sensitive(false);
+        m_xFtY->set_sensitive(false);
     }
 }
 
diff --git a/sd/source/ui/dlg/sddlgfact.cxx b/sd/source/ui/dlg/sddlgfact.cxx
index dca60841af70..2c6131f7fd4b 100644
--- a/sd/source/ui/dlg/sddlgfact.cxx
+++ b/sd/source/ui/dlg/sddlgfact.cxx
@@ -52,7 +52,11 @@ IMPL_ABSTDLG_BASE(AbstractSdCustomShowDlg_Impl);
 IMPL_ABSTDLG_BASE(SdAbstractTabDialog_Impl);
 IMPL_ABSTDLG_BASE(SdPresLayoutTemplateDlg_Impl);
 IMPL_ABSTDLG_BASE(AbstractSdModifyFieldDlg_Impl);
-IMPL_ABSTDLG_BASE(AbstractSdSnapLineDlg_Impl);
+
+short AbstractSdSnapLineDlg_Impl::Execute()
+{
+    return m_xDlg->run();
+}
 
 short AbstractSdInsertLayerDlg_Impl::Execute()
 {
@@ -197,27 +201,27 @@ SfxItemSet AbstractSdModifyFieldDlg_Impl::GetItemSet()
 
 void AbstractSdSnapLineDlg_Impl::GetAttr(SfxItemSet& rOutAttrs)
 {
-    pDlg->GetAttr(rOutAttrs);
+    m_xDlg->GetAttr(rOutAttrs);
 }
 
 void AbstractSdSnapLineDlg_Impl::HideRadioGroup()
 {
-    pDlg->HideRadioGroup();
+    m_xDlg->HideRadioGroup();
 }
 
 void AbstractSdSnapLineDlg_Impl::HideDeleteBtn()
 {
-    pDlg->HideDeleteBtn();
+    m_xDlg->HideDeleteBtn();
 }
 
 void AbstractSdSnapLineDlg_Impl::SetInputFields(bool bEnableX, bool bEnableY)
 {
-    pDlg->SetInputFields(bEnableX, bEnableY);
+    m_xDlg->SetInputFields(bEnableX, bEnableY);
 }
 
 void AbstractSdSnapLineDlg_Impl::SetText( const OUString& rStr )
 {
-    pDlg->SetText( rStr );
+    m_xDlg->set_title(rStr);
 }
 
 void AbstractSdInsertLayerDlg_Impl::GetAttr( SfxItemSet& rOutAttrs )
@@ -334,9 +338,9 @@ VclPtr<AbstractSdModifyFieldDlg> SdAbstractDialogFactory_Impl::CreateSdModifyFie
     return VclPtr<AbstractSdModifyFieldDlg_Impl>::Create( VclPtr<SdModifyFieldDlg>::Create( pParent, pInField, rSet ) );
 }
 
-VclPtr<AbstractSdSnapLineDlg> SdAbstractDialogFactory_Impl::CreateSdSnapLineDlg( vcl::Window* pParent, const SfxItemSet& rInAttrs, ::sd::View* pView)
+VclPtr<AbstractSdSnapLineDlg> SdAbstractDialogFactory_Impl::CreateSdSnapLineDlg(weld::Window* pParent, const SfxItemSet& rInAttrs, ::sd::View* pView)
 {
-    return VclPtr<AbstractSdSnapLineDlg_Impl>::Create( VclPtr<SdSnapLineDlg>::Create( pParent, rInAttrs, pView ) );
+    return VclPtr<AbstractSdSnapLineDlg_Impl>::Create(new SdSnapLineDlg(pParent, rInAttrs, pView));
 }
 
 VclPtr<AbstractSdInsertLayerDlg> SdAbstractDialogFactory_Impl::CreateSdInsertLayerDlg(weld::Window* pParent, const SfxItemSet& rInAttrs, bool bDeletable, const OUString& aStr)
diff --git a/sd/source/ui/dlg/sddlgfact.hxx b/sd/source/ui/dlg/sddlgfact.hxx
index 0367e9a8e192..d8bb3438f65f 100644
--- a/sd/source/ui/dlg/sddlgfact.hxx
+++ b/sd/source/ui/dlg/sddlgfact.hxx
@@ -142,7 +142,14 @@ class AbstractSdModifyFieldDlg_Impl : public AbstractSdModifyFieldDlg
 class SdSnapLineDlg;
 class AbstractSdSnapLineDlg_Impl : public AbstractSdSnapLineDlg
 {
-    DECL_ABSTDLG_BASE(AbstractSdSnapLineDlg_Impl,SdSnapLineDlg)
+private:
+    std::unique_ptr<SdSnapLineDlg> m_xDlg;
+public:
+    AbstractSdSnapLineDlg_Impl(SdSnapLineDlg* pDlg)
+        : m_xDlg(pDlg)
+    {
+    }
+    virtual short Execute() override;
     virtual void GetAttr(SfxItemSet& rOutAttrs) override;
     virtual void HideRadioGroup() override;
     virtual void HideDeleteBtn() override;
@@ -245,7 +252,7 @@ public:
     virtual VclPtr<SfxAbstractTabDialog>       CreateSdTabCharDialog(vcl::Window* pWindow, const SfxItemSet* pAttr, SfxObjectShell* pDocShell) override;
     virtual VclPtr<SfxAbstractTabDialog>       CreateSdTabPageDialog(vcl::Window* pWindow, const SfxItemSet* pAttr, SfxObjectShell* pDocShell, bool bAreaPage) override;
     virtual VclPtr<AbstractSdModifyFieldDlg>   CreateSdModifyFieldDlg( vcl::Window* pWindow, const SvxFieldData* pInField, const SfxItemSet& rSet ) override;
-    virtual VclPtr<AbstractSdSnapLineDlg>      CreateSdSnapLineDlg(vcl::Window* pParent, const SfxItemSet& rInAttrs, ::sd::View* pView) override;
+    virtual VclPtr<AbstractSdSnapLineDlg>      CreateSdSnapLineDlg(weld::Window* pParent, const SfxItemSet& rInAttrs, ::sd::View* pView) override;
     virtual VclPtr<AbstractSdInsertLayerDlg>   CreateSdInsertLayerDlg(weld::Window* pParent, const SfxItemSet& rInAttrs, bool bDeletable, const OUString& aStr) override;
     virtual VclPtr<AbstractSdInsertPagesObjsDlg> CreateSdInsertPagesObjsDlg(vcl::Window* pParent, const SdDrawDocument* pDoc, SfxMedium* pSfxMedium, const OUString& rFileName ) override;
     virtual VclPtr<AbstractMorphDlg>           CreateMorphDlg(weld::Window* pParent, const SdrObject* pObj1, const SdrObject* pObj2) override;
diff --git a/sd/source/ui/func/fusnapln.cxx b/sd/source/ui/func/fusnapln.cxx
index f86710d28f62..a4719be2bcf9 100644
--- a/sd/source/ui/func/fusnapln.cxx
+++ b/sd/source/ui/func/fusnapln.cxx
@@ -109,7 +109,8 @@ void FuSnapLine::DoExecute( SfxRequest& rReq )
         aNewAttr.Put(SfxInt32Item(ATTR_SNAPLINE_Y, aLinePos.Y()));
 
         SdAbstractDialogFactory* pFact = SdAbstractDialogFactory::Create();
-        ScopedVclPtr<AbstractSdSnapLineDlg> pDlg(pFact ? pFact->CreateSdSnapLineDlg(mpViewShell->GetActiveWindow(), aNewAttr, mpView) : nullptr);
+        vcl::Window* pWin = mpViewShell->GetActiveWindow();
+        ScopedVclPtr<AbstractSdSnapLineDlg> pDlg(pFact ? pFact->CreateSdSnapLineDlg(pWin ? pWin->GetFrameWeld() : nullptr, aNewAttr, mpView) : nullptr);
         OSL_ASSERT(pDlg);
         if (!pDlg)
             return;
diff --git a/sd/source/ui/inc/dlgsnap.hxx b/sd/source/ui/inc/dlgsnap.hxx
index 7444b561b649..25b1f248844d 100644
--- a/sd/source/ui/inc/dlgsnap.hxx
+++ b/sd/source/ui/inc/dlgsnap.hxx
@@ -20,14 +20,10 @@
 #ifndef INCLUDED_SD_SOURCE_UI_INC_DLGSNAP_HXX
 #define INCLUDED_SD_SOURCE_UI_INC_DLGSNAP_HXX
 
-#include <vcl/button.hxx>
-#include <vcl/fixed.hxx>
-#include <vcl/field.hxx>
-#include <vcl/group.hxx>
-#include <vcl/layout.hxx>
 #include <tools/fract.hxx>
-#include <vcl/dialog.hxx>
 #include <sdenumdef.hxx>
+#include <vcl/weld.hxx>
+
 /************************************************************************/
 
 class SfxItemSet;
@@ -38,34 +34,34 @@ namespace sd {
 /**
  * dialog to adjust snap- lines and points
  */
-class SdSnapLineDlg : public ModalDialog
+class SdSnapLineDlg : public weld::GenericDialogController
 {
 private:
-    VclPtr<FixedText>          m_pFtX;
-    VclPtr<MetricField>        m_pMtrFldX;
-    VclPtr<FixedText>          m_pFtY;
-    VclPtr<MetricField>        m_pMtrFldY;
-    VclPtr<VclContainer>       m_pRadioGroup;
-    VclPtr<RadioButton>        m_pRbPoint;
-    VclPtr<RadioButton>        m_pRbVert;
-    VclPtr<RadioButton>        m_pRbHorz;
-    VclPtr<PushButton>         m_pBtnDelete;
-    long                nXValue;
-    long                nYValue;
+    int                 nXValue;
+    int                 nYValue;
     FieldUnit           eUIUnit;
     Fraction            aUIScale;
 
-    DECL_LINK( ClickHdl, Button *, void );
+    std::unique_ptr<weld::Label> m_xFtX;
+    std::unique_ptr<weld::MetricSpinButton> m_xMtrFldX;
+    std::unique_ptr<weld::Label> m_xFtY;
+    std::unique_ptr<weld::MetricSpinButton> m_xMtrFldY;
+    std::unique_ptr<weld::Widget> m_xRadioGroup;
+    std::unique_ptr<weld::RadioButton> m_xRbPoint;
+    std::unique_ptr<weld::RadioButton> m_xRbVert;
+    std::unique_ptr<weld::RadioButton> m_xRbHorz;
+    std::unique_ptr<weld::Button> m_xBtnDelete;
+
+    DECL_LINK(ClickHdl, weld::Button&, void);
 
 public:
-    SdSnapLineDlg(vcl::Window* pWindow, const SfxItemSet& rInAttrs, ::sd::View const * pView);
+    SdSnapLineDlg(weld::Window* pWindow, const SfxItemSet& rInAttrs, ::sd::View const * pView);
     virtual ~SdSnapLineDlg() override;
-    virtual void dispose() override;
 
     void GetAttr(SfxItemSet& rOutAttrs);
 
     void HideRadioGroup();
-    void HideDeleteBtn() { m_pBtnDelete->Hide(); }
+    void HideDeleteBtn() { m_xBtnDelete->hide(); }
     void SetInputFields(bool bEnableX, bool bEnableY);
 };
 
diff --git a/sd/uiconfig/sdraw/ui/dlgsnap.ui b/sd/uiconfig/sdraw/ui/dlgsnap.ui
index d85e5bb01a83..24535f2692f3 100644
--- a/sd/uiconfig/sdraw/ui/dlgsnap.ui
+++ b/sd/uiconfig/sdraw/ui/dlgsnap.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="sd">
   <requires lib="gtk+" version="3.18"/>
   <object class="GtkAdjustment" id="adjustment1">
@@ -17,22 +17,25 @@
   <object class="GtkImage" id="image1">
     <property name="visible">True</property>
     <property name="can_focus">False</property>
-    <property name="pixbuf">sd/res/hlppoint.png</property>
+    <property name="icon_name">sd/res/hlppoint.png</property>
   </object>
   <object class="GtkImage" id="image2">
     <property name="visible">True</property>
     <property name="can_focus">False</property>
-    <property name="pixbuf">sd/res/hlplvert.png</property>
+    <property name="icon_name">sd/res/hlplvert.png</property>
   </object>
   <object class="GtkImage" id="image3">
     <property name="visible">True</property>
     <property name="can_focus">False</property>
-    <property name="pixbuf">sd/res/hlplhorz.png</property>
+    <property name="icon_name">sd/res/hlplhorz.png</property>
   </object>
   <object class="GtkDialog" id="SnapObjectDialog">
     <property name="can_focus">False</property>
     <property name="border_width">6</property>
     <property name="title" translatable="yes" context="dlgsnap|SnapObjectDialog">New Snap Object</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">
@@ -44,13 +47,13 @@
             <property name="can_focus">False</property>
             <property name="layout_style">end</property>
             <child>
-              <object class="GtkButton" id="ok">
-                <property name="label">gtk-ok</property>
+              <object class="GtkButton" id="delete">
+                <property name="label">gtk-delete</property>
                 <property name="visible">True</property>
                 <property name="can_focus">True</property>
-                <property name="has_default">True</property>
                 <property name="receives_default">True</property>
                 <property name="use_stock">True</property>
+                <property name="image_position">bottom</property>
               </object>
               <packing>
                 <property name="expand">False</property>
@@ -59,10 +62,12 @@
               </packing>
             </child>
             <child>
-              <object class="GtkButton" id="cancel">
-                <property name="label">gtk-cancel</property>
+              <object class="GtkButton" id="ok">
+                <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>
               </object>
@@ -73,31 +78,29 @@
               </packing>
             </child>
             <child>
-              <object class="GtkButton" id="help">
-                <property name="label">gtk-help</property>
+              <object class="GtkButton" id="cancel">
+                <property name="label">gtk-cancel</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>
-                <property name="image_position">top</property>
               </object>
               <packing>
                 <property name="expand">False</property>
                 <property name="fill">True</property>
                 <property name="position">2</property>
-                <property name="secondary">True</property>
               </packing>
             </child>
             <child>
-              <object class="GtkButton" id="delete">
-                <property name="label">gtk-delete</property>
+              <object class="GtkButton" id="help">
+                <property name="label">gtk-help</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>
-                <property name="image_position">bottom</property>
+                <property name="image_position">top</property>
               </object>
               <packing>
                 <property name="expand">False</property>
@@ -138,9 +141,10 @@
                         <property name="row_spacing">6</property>
                         <property name="column_spacing">12</property>
                         <child>
-                          <object class="GtkSpinButton" id="x:0.00cm">
+                          <object class="GtkSpinButton" id="x">
                             <property name="visible">True</property>
                             <property name="can_focus">True</property>
+                            <property name="activates_default">True</property>
                             <property name="adjustment">adjustment1</property>
                             <property name="digits">2</property>
                           </object>
@@ -150,9 +154,10 @@
                           </packing>
                         </child>
                         <child>
-                          <object class="GtkSpinButton" id="y:0.00cm">
+                          <object class="GtkSpinButton" id="y">
                             <property name="visible">True</property>
                             <property name="can_focus">True</property>
+                            <property name="activates_default">True</property>
                             <property name="adjustment">adjustment2</property>
                             <property name="digits">2</property>
                           </object>
@@ -167,7 +172,7 @@
                             <property name="can_focus">False</property>
                             <property name="label" translatable="yes" context="dlgsnap|xlabel">_X:</property>
                             <property name="use_underline">True</property>
-                            <property name="mnemonic_widget">x:0.00cm</property>
+                            <property name="mnemonic_widget">x</property>
                           </object>
                           <packing>
                             <property name="left_attach">0</property>
@@ -180,7 +185,7 @@
                             <property name="can_focus">False</property>
                             <property name="label" translatable="yes" context="dlgsnap|ylabel">_Y:</property>
                             <property name="use_underline">True</property>
-                            <property name="mnemonic_widget">y:0.00cm</property>
+                            <property name="mnemonic_widget">y</property>
                           </object>
                           <packing>
                             <property name="left_attach">0</property>
@@ -235,9 +240,9 @@
                             <property name="image">image1</property>
                             <property name="use_underline">True</property>
                             <property name="xalign">0</property>
+                            <property name="always_show_image">True</property>
                             <property name="active">True</property>
                             <property name="draw_indicator">True</property>
-                            <property name="group">vert</property>
                           </object>
                           <packing>
                             <property name="expand">False</property>
@@ -254,8 +259,9 @@
                             <property name="image">image2</property>
                             <property name="use_underline">True</property>
                             <property name="xalign">0</property>
+                            <property name="always_show_image">True</property>
                             <property name="draw_indicator">True</property>
-                            <property name="group">horz</property>
+                            <property name="group">point</property>
                           </object>
                           <packing>
                             <property name="expand">False</property>
@@ -272,6 +278,7 @@
                             <property name="image">image3</property>
                             <property name="use_underline">True</property>
                             <property name="xalign">0</property>
+                            <property name="always_show_image">True</property>
                             <property name="draw_indicator">True</property>
                             <property name="group">point</property>
                           </object>
@@ -312,10 +319,13 @@
       </object>
     </child>
     <action-widgets>
+      <action-widget response="0">delete</action-widget>
       <action-widget response="-5">ok</action-widget>
       <action-widget response="-6">cancel</action-widget>
       <action-widget response="-11">help</action-widget>
-      <action-widget response="0">delete</action-widget>
     </action-widgets>
+    <child>
+      <placeholder/>
+    </child>
   </object>
 </interface>
diff --git a/svtools/source/misc/unitconv.cxx b/svtools/source/misc/unitconv.cxx
index f99b2806076c..64d1acb75330 100644
--- a/svtools/source/misc/unitconv.cxx
+++ b/svtools/source/misc/unitconv.cxx
@@ -132,7 +132,6 @@ void SetFieldUnit( MetricField& rField, FieldUnit eUnit, bool bAll )
     }
 }
 
-
 void SetFieldUnit( MetricBox& rBox, FieldUnit eUnit )
 {
     sal_Int64 nMin = rBox.Denormalize( rBox.GetMin( FUNIT_TWIP ) );
@@ -162,6 +161,12 @@ void SetFieldUnit( MetricBox& rBox, FieldUnit eUnit )
     rBox.SetMax( rBox.Normalize( nMax ), FUNIT_TWIP );
 }
 
+void SetMetricValue(weld::MetricSpinButton& rField, int nCoreValue, MapUnit eUnit)
+{
+    auto nVal = OutputDevice::LogicToLogic(nCoreValue, eUnit, MapUnit::Map100thMM);
+    nVal = rField.normalize(nVal);
+    rField.set_value(nVal, FUNIT_100TH_MM);
+}
 
 void SetMetricValue( MetricField& rField, long nCoreValue, MapUnit eUnit )
 {
@@ -171,6 +176,29 @@ void SetMetricValue( MetricField& rField, long nCoreValue, MapUnit eUnit )
 
 }
 
+int GetCoreValue(const weld::MetricSpinButton& rField, MapUnit eUnit)
+{
+    int nVal = rField.get_value(FUNIT_100TH_MM);
+    // avoid rounding issues
+    const int nSizeMask = 0xff000000;
+    bool bRoundBefore = true;
+    if( nVal >= 0 )
+    {
+        if( (nVal & nSizeMask) == 0 )
+            bRoundBefore = false;
+    }
+    else
+    {
+        if( ((-nVal) & nSizeMask ) == 0 )
+            bRoundBefore = false;
+    }
+    if( bRoundBefore )
+        nVal = rField.denormalize( nVal );
+    auto nUnitVal = OutputDevice::LogicToLogic(nVal, MapUnit::Map100thMM, eUnit);
+    if (!bRoundBefore)
+        nUnitVal = rField.denormalize(nUnitVal);
+    return nUnitVal;
+}
 
 long GetCoreValue( const MetricField& rField, MapUnit eUnit )
 {
@@ -196,7 +224,6 @@ long GetCoreValue( const MetricField& rField, MapUnit eUnit )
     return static_cast<long>(nUnitVal);
 }
 
-
 long CalcToUnit( float nIn, MapUnit eUnit )
 {
     // nIn is in Points


More information about the Libreoffice-commits mailing list