[Libreoffice-commits] core.git: Branch 'distro/collabora/cp-6.4' - include/vcl svx/source vcl/source

Pranam Lashkari (via logerrit) logerrit at kemper.freedesktop.org
Wed Dec 30 08:03:55 UTC 2020


 include/vcl/spinfld.hxx                             |    3 
 svx/source/sidebar/possize/PosSizePropertyPanel.cxx |  105 ++++++++++++++++++--
 svx/source/sidebar/possize/PosSizePropertyPanel.hxx |   13 +-
 vcl/source/control/spinfld.cxx                      |   14 ++
 4 files changed, 123 insertions(+), 12 deletions(-)

New commits:
commit 2dea8fd43fa4080b3d048415bbbf9a9f7e93b70a
Author:     Pranam Lashkari <lpranam at collabora.com>
AuthorDate: Sun Dec 20 17:46:44 2020 +0530
Commit:     Pranam Lashkari <lpranam at collabora.com>
CommitDate: Wed Dec 30 09:03:20 2020 +0100

    Stop modifying size values in sidebar when user still editing
    
    Change-Id: I75e41e6b932ec7329789db27db266599f4de75ae
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/108031
    Reviewed-by: Szymon Kłos <szymon.klos at collabora.com>
    Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice at gmail.com>

diff --git a/include/vcl/spinfld.hxx b/include/vcl/spinfld.hxx
index 8fb21f8605fd..d6a1c540b3e9 100644
--- a/include/vcl/spinfld.hxx
+++ b/include/vcl/spinfld.hxx
@@ -36,6 +36,7 @@ public:
 
     virtual void    Up();
     virtual void    Down();
+    virtual void    Enter();
     virtual void    First();
     virtual void    Last();
 
@@ -51,6 +52,7 @@ public:
 
     void            SetUpHdl( const Link<SpinField&,void>& rLink ) { maUpHdlLink = rLink; }
     void            SetDownHdl( const Link<SpinField&,void>& rLink ) { maDownHdlLink = rLink; }
+    void            SetEnterHdl( const Link<Control&,void>& rLink ) { maEnterHdlLink = rLink; }
 
     virtual Size    CalcMinimumSize() const override;
     virtual Size    CalcMinimumSizeForText(const OUString &rString) const override;
@@ -83,6 +85,7 @@ private:
     AutoTimer       maRepeatTimer;
     Link<SpinField&,void>  maUpHdlLink;
     Link<SpinField&,void>  maDownHdlLink;
+    Link<Control&,void>  maEnterHdlLink;
     bool            mbRepeat:1,
                     mbSpin:1,
                     mbInitialUp:1,
diff --git a/svx/source/sidebar/possize/PosSizePropertyPanel.cxx b/svx/source/sidebar/possize/PosSizePropertyPanel.cxx
index e5cc427a0f2a..a85d44422499 100644
--- a/svx/source/sidebar/possize/PosSizePropertyPanel.cxx
+++ b/svx/source/sidebar/possize/PosSizePropertyPanel.cxx
@@ -190,12 +190,27 @@ namespace
 void PosSizePropertyPanel::Initialize()
 {
     //Position : Horizontal / Vertical
-    mpMtrPosX->SetModifyHdl( LINK( this, PosSizePropertyPanel, ChangePosXHdl ) );
-    mpMtrPosY->SetModifyHdl( LINK( this, PosSizePropertyPanel, ChangePosYHdl ) );
+    mpMtrPosX->SetLoseFocusHdl( LINK( this, PosSizePropertyPanel, ChangePosXHdl ) );
+    mpMtrPosX->SetEnterHdl(LINK( this, PosSizePropertyPanel, ChangePosXHdl ) );
+    mpMtrPosX->SetUpHdl( LINK( this, PosSizePropertyPanel, ChangePosXUpDownHdl ) );
+    mpMtrPosX->SetDownHdl( LINK( this, PosSizePropertyPanel, ChangePosXUpDownHdl ) );
+
+    mpMtrPosY->SetLoseFocusHdl( LINK( this, PosSizePropertyPanel, ChangePosYHdl ) );
+    mpMtrPosY->SetEnterHdl( LINK( this, PosSizePropertyPanel, ChangePosYHdl ) );
+    mpMtrPosY->SetUpHdl( LINK( this, PosSizePropertyPanel, ChangePosYUpDownHdl ) );
+    mpMtrPosY->SetDownHdl( LINK( this, PosSizePropertyPanel, ChangePosYUpDownHdl ) );
+
 
     //Size : Width / Height
-    mpMtrWidth->SetModifyHdl( LINK( this, PosSizePropertyPanel, ChangeWidthHdl ) );
-    mpMtrHeight->SetModifyHdl( LINK( this, PosSizePropertyPanel, ChangeHeightHdl ) );
+    mpMtrWidth->SetLoseFocusHdl( LINK( this, PosSizePropertyPanel, ChangeWidthHdl ) );
+    mpMtrWidth->SetEnterHdl( LINK( this, PosSizePropertyPanel, ChangeWidthHdl ) );
+    mpMtrWidth->SetUpHdl( LINK( this, PosSizePropertyPanel, ChangeWidthUpDownHdl ) );
+    mpMtrWidth->SetDownHdl( LINK( this, PosSizePropertyPanel, ChangeWidthUpDownHdl ) );
+
+    mpMtrHeight->SetLoseFocusHdl( LINK( this, PosSizePropertyPanel, ChangeHeightHdl ) );
+    mpMtrHeight->SetEnterHdl( LINK( this, PosSizePropertyPanel, ChangeHeightHdl ) );
+    mpMtrHeight->SetUpHdl( LINK( this, PosSizePropertyPanel, ChangeHeightUpDownHdl ) );
+    mpMtrHeight->SetDownHdl( LINK( this, PosSizePropertyPanel, ChangeHeightUpDownHdl ) );
 
     //Size : Keep ratio
     mpCbxScale->SetClickHdl( LINK( this, PosSizePropertyPanel, ClickAutoHdl ) );
@@ -353,7 +368,7 @@ void PosSizePropertyPanel::HandleContextChange(
 }
 
 
-IMPL_LINK_NOARG( PosSizePropertyPanel, ChangeWidthHdl, Edit&, void )
+IMPL_LINK_NOARG( PosSizePropertyPanel, ChangeWidthHdl, Control&, void )
 {
     if( mpCbxScale->IsChecked() &&
         mpCbxScale->IsEnabled() )
@@ -374,8 +389,29 @@ IMPL_LINK_NOARG( PosSizePropertyPanel, ChangeWidthHdl, Edit&, void )
     executeSize();
 }
 
+IMPL_LINK_NOARG( PosSizePropertyPanel, ChangeWidthUpDownHdl, SpinField&, void )
+{
+    if( mpCbxScale->IsChecked() &&
+        mpCbxScale->IsEnabled() )
+    {
+        long nHeight = static_cast<long>( (static_cast<double>(mlOldHeight) * static_cast<double>(mpMtrWidth->GetValue())) / static_cast<double>(mlOldWidth) );
+        if( nHeight <= mpMtrHeight->GetMax( FieldUnit::NONE ) )
+        {
+            mpMtrHeight->SetUserValue( nHeight, FieldUnit::NONE );
+        }
+        else
+        {
+            nHeight = static_cast<long>(mpMtrHeight->GetMax( FieldUnit::NONE ));
+            mpMtrHeight->SetUserValue( nHeight );
+            const long nWidth = static_cast<long>( (static_cast<double>(mlOldWidth) * static_cast<double>(nHeight)) / static_cast<double>(mlOldHeight) );
+            mpMtrWidth->SetUserValue( nWidth, FieldUnit::NONE );
+        }
+    }
+    executeSize();
+}
 
-IMPL_LINK_NOARG( PosSizePropertyPanel, ChangeHeightHdl, Edit&, void )
+
+IMPL_LINK_NOARG( PosSizePropertyPanel, ChangeHeightHdl, Control&, void )
 {
     if( mpCbxScale->IsChecked() &&
         mpCbxScale->IsEnabled() )
@@ -396,8 +432,45 @@ IMPL_LINK_NOARG( PosSizePropertyPanel, ChangeHeightHdl, Edit&, void )
     executeSize();
 }
 
+IMPL_LINK_NOARG( PosSizePropertyPanel, ChangeHeightUpDownHdl, SpinField&, void )
+{
+    if( mpCbxScale->IsChecked() &&
+        mpCbxScale->IsEnabled() )
+    {
+        long nWidth = static_cast<long>( (static_cast<double>(mlOldWidth) * static_cast<double>(mpMtrHeight->GetValue())) / static_cast<double>(mlOldHeight) );
+        if( nWidth <= mpMtrWidth->GetMax( FieldUnit::NONE ) )
+        {
+            mpMtrWidth->SetUserValue( nWidth, FieldUnit::NONE );
+        }
+        else
+        {
+            nWidth = static_cast<long>(mpMtrWidth->GetMax( FieldUnit::NONE ));
+            mpMtrWidth->SetUserValue( nWidth );
+            const long nHeight = static_cast<long>( (static_cast<double>(mlOldHeight) * static_cast<double>(nWidth)) / static_cast<double>(mlOldWidth) );
+            mpMtrHeight->SetUserValue( nHeight, FieldUnit::NONE );
+        }
+    }
+    executeSize();
+}
+
+
+IMPL_LINK_NOARG( PosSizePropertyPanel, ChangePosXHdl, Control&, void )
+{
+    if ( mpMtrPosX->IsValueModified())
+    {
+        long lX = GetCoreValue( *mpMtrPosX, mePoolUnit );
+
+        Fraction aUIScale = mpView->GetModel()->GetUIScale();
+        lX = long( lX * aUIScale );
+
+        SfxInt32Item aPosXItem( SID_ATTR_TRANSFORM_POS_X,static_cast<sal_uInt32>(lX));
+
+        GetBindings()->GetDispatcher()->ExecuteList(
+            SID_ATTR_TRANSFORM, SfxCallMode::RECORD, { &aPosXItem });
+    }
+}
 
-IMPL_LINK_NOARG( PosSizePropertyPanel, ChangePosXHdl, Edit&, void )
+IMPL_LINK_NOARG( PosSizePropertyPanel, ChangePosXUpDownHdl, SpinField&, void )
 {
     if ( mpMtrPosX->IsValueModified())
     {
@@ -414,7 +487,23 @@ IMPL_LINK_NOARG( PosSizePropertyPanel, ChangePosXHdl, Edit&, void )
 }
 
 
-IMPL_LINK_NOARG( PosSizePropertyPanel, ChangePosYHdl, Edit&, void )
+IMPL_LINK_NOARG( PosSizePropertyPanel, ChangePosYHdl, Control&, void )
+{
+    if ( mpMtrPosY->IsValueModified() )
+    {
+        long lY = GetCoreValue( *mpMtrPosY, mePoolUnit );
+
+        Fraction aUIScale = mpView->GetModel()->GetUIScale();
+        lY = long( lY * aUIScale );
+
+        SfxInt32Item aPosYItem( SID_ATTR_TRANSFORM_POS_Y,static_cast<sal_uInt32>(lY));
+
+        GetBindings()->GetDispatcher()->ExecuteList(
+            SID_ATTR_TRANSFORM, SfxCallMode::RECORD, { &aPosYItem });
+    }
+}
+
+IMPL_LINK_NOARG( PosSizePropertyPanel, ChangePosYUpDownHdl, SpinField&, void )
 {
     if ( mpMtrPosY->IsValueModified() )
     {
diff --git a/svx/source/sidebar/possize/PosSizePropertyPanel.hxx b/svx/source/sidebar/possize/PosSizePropertyPanel.hxx
index 26854fa4873c..becbcef6da0d 100644
--- a/svx/source/sidebar/possize/PosSizePropertyPanel.hxx
+++ b/svx/source/sidebar/possize/PosSizePropertyPanel.hxx
@@ -20,6 +20,7 @@
 #define INCLUDED_SVX_SOURCE_SIDEBAR_POSSIZE_POSSIZEPROPERTYPANEL_HXX
 
 #include <vcl/ctrl.hxx>
+#include <vcl/spinfld.hxx>
 #include <sfx2/sidebar/SidebarPanelBase.hxx>
 #include <sfx2/sidebar/ControllerItem.hxx>
 #include <sfx2/sidebar/IContextChangeReceiver.hxx>
@@ -157,10 +158,14 @@ private:
 
     css::uno::Reference<css::ui::XSidebar> mxSidebar;
 
-    DECL_LINK( ChangePosXHdl, Edit&, void );
-    DECL_LINK( ChangePosYHdl, Edit&, void );
-    DECL_LINK( ChangeWidthHdl, Edit&, void );
-    DECL_LINK( ChangeHeightHdl, Edit&, void );
+    DECL_LINK( ChangePosXHdl, Control&, void );
+    DECL_LINK( ChangePosYHdl, Control&, void );
+    DECL_LINK( ChangePosXUpDownHdl, SpinField&, void );
+    DECL_LINK( ChangePosYUpDownHdl, SpinField&, void );
+    DECL_LINK( ChangeWidthHdl, Control&, void );
+    DECL_LINK( ChangeHeightHdl, Control&, void );
+    DECL_LINK( ChangeWidthUpDownHdl, SpinField&, void );
+    DECL_LINK( ChangeHeightUpDownHdl, SpinField&, void );
     DECL_LINK( ClickAutoHdl, Button*, void );
     DECL_LINK( AngleModifiedHdl, Edit&, void );
     DECL_LINK( RotationHdl, svx::DialControl*, void );
diff --git a/vcl/source/control/spinfld.cxx b/vcl/source/control/spinfld.cxx
index e4cac9a03766..f4660ce64dca 100644
--- a/vcl/source/control/spinfld.cxx
+++ b/vcl/source/control/spinfld.cxx
@@ -367,6 +367,11 @@ void SpinField::Down()
     ImplCallEventListenersAndHandler( VclEventId::SpinfieldDown, [this] () { maDownHdlLink.Call(*this); } );
 }
 
+void SpinField::Enter()
+{
+    ImplCallEventListenersAndHandler( VclEventId::EditModify, [this] () { maEnterHdlLink.Call(*this); } );
+}
+
 void SpinField::First()
 {
     ImplCallEventListenersAndHandler(VclEventId::SpinfieldFirst, nullptr);
@@ -541,6 +546,15 @@ bool SpinField::EventNotify(NotifyEvent& rNEvt)
                     }
                 }
                 break;
+                case KEY_RETURN:
+                {
+                    if (!nMod)
+                    {
+                        Enter();
+                        bDone = true;
+                    }
+                }
+                break;
             }
         }
     }


More information about the Libreoffice-commits mailing list