[Libreoffice-commits] .: sc/source vcl/inc vcl/source

Noel Power noelp at kemper.freedesktop.org
Wed Dec 14 02:50:22 PST 2011


 sc/source/ui/app/inputwin.cxx |   24 ++++++++++++++++++++++--
 sc/source/ui/inc/inputwin.hxx |    4 +++-
 vcl/inc/vcl/toolbox.hxx       |   11 +++++------
 vcl/source/window/toolbox.cxx |    6 ++++--
 4 files changed, 34 insertions(+), 11 deletions(-)

New commits:
commit a9e338a1cd445be29be199f3f9f292062d5c1938
Author: Noel Power <noel.power at novell.com>
Date:   Wed Dec 14 10:49:10 2011 +0000

    stop formulabar controls being repositioned vertically in multiline mode

diff --git a/sc/source/ui/app/inputwin.cxx b/sc/source/ui/app/inputwin.cxx
index a324994..b9ab412 100644
--- a/sc/source/ui/app/inputwin.cxx
+++ b/sc/source/ui/app/inputwin.cxx
@@ -534,6 +534,18 @@ void ScInputWindow::Resize()
         aTextWindow.Resize();
         Size aSize = GetSizePixel();
         aSize.Height() = CalcWindowSizePixel().Height();
+        ScInputBarGroup* pGroupBar = dynamic_cast< ScInputBarGroup* > ( pRuntimeWindow.get() );
+        if ( pGroupBar )
+        {
+            // To ensure smooth display and prevent the items in the toolbar being
+            // repositioned ( vertically ) we lock the vertical positioning of the toolbox
+            // items when we are displaying > 1 line.
+            // So, we need to adjust the height of the toolbox accordingly. If we don't
+            // then the largest item ( e.g. the GroupBar window ) will actually be
+            // positioned such that the toolbar will cut off the bottom of that item
+            if ( pGroupBar->GetNumLines() > 1 )
+                aSize.Height() += pGroupBar->GetVertOffset();
+        }
         SetSizePixel(aSize);
         Invalidate();
     }
@@ -861,7 +873,8 @@ ScInputBarGroup::ScInputBarGroup(Window* pParent, ScTabViewShell* pViewSh)
     :   ScTextWndBase        ( pParent, WinBits(WB_HIDE |  WB_TABSTOP ) ),
         aMultiTextWnd        ( this, pViewSh ),
         aButton              ( this, WB_TABSTOP | WB_RECTSTYLE ),
-        aScrollBar           ( this, WB_TABSTOP | WB_VERT | WB_DRAG )
+        aScrollBar           ( this, WB_TABSTOP | WB_VERT | WB_DRAG ),
+        nVertOffset          ( 0 )
 {
       aMultiTextWnd.Show();
       aMultiTextWnd.SetQuickHelpText( ScResId( SCSTR_QHELP_INPUTWND ) );
@@ -1057,6 +1070,13 @@ void ScInputBarGroup::TriggerToolboxLayout()
     ScInputWindow *pParent;
     pParent=dynamic_cast<ScInputWindow*>(w);
     SfxViewFrame* pViewFrm = SfxViewFrame::Current();
+
+    // Capture the vertical position of this window in the toolbar, when we increase
+    // the size of the toolbar to accomadate expanded line input we need to take this
+    // into account
+    if ( !nVertOffset )
+        nVertOffset = pParent->GetItemPosRect( pParent->GetItemCount() - 1 ).Top();
+
     if ( pViewFrm )
     {
         Reference< com::sun::star::beans::XPropertySet > xPropSet( pViewFrm->GetFrame().GetFrameInterface(), UNO_QUERY );
@@ -1071,7 +1091,7 @@ void ScInputBarGroup::TriggerToolboxLayout()
         if ( xLayoutManager.is() )
         {
             if ( aMultiTextWnd.GetNumLines() > 1)
-                pParent->SetToolbarLayoutMode( TBX_LAYOUT_TOP );
+                pParent->SetToolbarLayoutMode( TBX_LAYOUT_LOCKVERT );
             else
                 pParent->SetToolbarLayoutMode( TBX_LAYOUT_NORMAL );
             xLayoutManager->lock();
diff --git a/sc/source/ui/inc/inputwin.hxx b/sc/source/ui/inc/inputwin.hxx
index 1e896e7..1f200c1 100644
--- a/sc/source/ui/inc/inputwin.hxx
+++ b/sc/source/ui/inc/inputwin.hxx
@@ -231,12 +231,14 @@ public:
     ScrollBar&      GetScrollBar() { return aScrollBar; }
     void            IncrementVerticalSize();
     void            DecrementVerticalSize();
+    long            GetNumLines() { return aMultiTextWnd.GetNumLines(); }
+    long            GetVertOffset() { return  nVertOffset; }
 private:
     void            TriggerToolboxLayout();
     ScMultiTextWnd  aMultiTextWnd;
     PushButton      aButton;
     ScrollBar       aScrollBar;
-
+    long            nVertOffset;
     DECL_LINK( ClickHdl,	 PushButton* );
     DECL_LINK( Impl_ScrollHdl,  ScrollBar* );
 
diff --git a/vcl/inc/vcl/toolbox.hxx b/vcl/inc/vcl/toolbox.hxx
index 287d069..c750eec 100644
--- a/vcl/inc/vcl/toolbox.hxx
+++ b/vcl/inc/vcl/toolbox.hxx
@@ -160,12 +160,11 @@ enum ToolBoxButtonSize { TOOLBOX_BUTTONSIZE_DONTCARE, TOOLBOX_BUTTONSIZE_SMALL,
 // used for internal sizing calculations
 enum FloatingSizeMode { FSMODE_AUTO, FSMODE_FAVOURWIDTH, FSMODE_FAVOURHEIGHT };
 
-// TBX_LAYOUT_NORMAL - traditional layout, items are centered in the toolbar
-// TBX_LAYOUT_TOP    - special mode (currently used for calc input/formula bar)
-//                   where items are aligned with the top of highest item
-//                  ( currently only valid for docked, single line,  horizontal
-//                  toolbars )
-enum ToolBoxLayoutMode { TBX_LAYOUT_NORMAL, TBX_LAYOUT_TOP };
+// TBX_LAYOUT_NORMAL   - traditional layout, items are centered in the toolbar
+// TBX_LAYOUT_LOCKVERT - special mode (currently used for calc input/formula
+//                       bar) where item's vertical position is locked, e.g.
+//                       toolbox is prevented from centering the items
+enum ToolBoxLayoutMode { TBX_LAYOUT_NORMAL, TBX_LAYOUT_LOCKVERT };
 // -----------
 // - ToolBox -
 // -----------
diff --git a/vcl/source/window/toolbox.cxx b/vcl/source/window/toolbox.cxx
index 36b42e0..217cac0 100644
--- a/vcl/source/window/toolbox.cxx
+++ b/vcl/source/window/toolbox.cxx
@@ -2719,8 +2719,10 @@ void ToolBox::ImplFormat( sal_Bool bResize )
                     if ( mbHorz )
                     {
                         it->maCalcRect.Left()     = nX;
-                        if ( meLayoutMode == TBX_LAYOUT_TOP && mnLines == 1 )
-                            it->maCalcRect.Top()      = nY/2;
+                        // if special TBX_LAYOUT_LOCKVERT lock vertical position
+                        // don't recalulate the vertical position of the item
+                        if ( meLayoutMode == TBX_LAYOUT_LOCKVERT && mnLines == 1 )
+                            it->maCalcRect.Top()      =  it->maRect.Top();
                         else
                             it->maCalcRect.Top()      = nY+(nLineSize-aCurrentItemSize.Height())/2;
                         it->maCalcRect.Right()    = nX+aCurrentItemSize.Width()-1;


More information about the Libreoffice-commits mailing list