[Libreoffice-commits] core.git: include/sfx2 sfx2/source vcl/source

Szymon Kłos szymon.klos at collabora.com
Sat Apr 22 11:51:23 UTC 2017


 include/sfx2/notebookbar/NotebookbarTabControl.hxx |    1 
 sfx2/source/notebookbar/NotebookbarTabControl.cxx  |   24 ++++++++++++++
 vcl/source/control/tabctrl.cxx                     |   36 +++++++++++++--------
 3 files changed, 48 insertions(+), 13 deletions(-)

New commits:
commit 055ae711eff085ff6b9db8f47c3193016d0db81e
Author: Szymon Kłos <szymon.klos at collabora.com>
Date:   Sat Apr 22 12:44:00 2017 +0200

    Notebookbar: better tab placing for the NotebookbarTabControl
    
    Change-Id: Ia44ce20455829048be457584c49fde0996f4a699
    Reviewed-on: https://gerrit.libreoffice.org/36814
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Szymon Kłos <szymon.klos at collabora.com>

diff --git a/include/sfx2/notebookbar/NotebookbarTabControl.hxx b/include/sfx2/notebookbar/NotebookbarTabControl.hxx
index 0d4ce9b9632c..2562af565b11 100644
--- a/include/sfx2/notebookbar/NotebookbarTabControl.hxx
+++ b/include/sfx2/notebookbar/NotebookbarTabControl.hxx
@@ -25,6 +25,7 @@ public:
     NotebookbarTabControl( Window* pParent );
 
     virtual void StateChanged(StateChangedType nStateChange) override;
+    virtual Size calculateRequisition() const override;
 
 private:
     static void FillShortcutsToolBox(css::uno::Reference<css::uno::XComponentContext>& xContext,
diff --git a/sfx2/source/notebookbar/NotebookbarTabControl.cxx b/sfx2/source/notebookbar/NotebookbarTabControl.cxx
index e2acfb5ea2c4..3c8f2058e18f 100644
--- a/sfx2/source/notebookbar/NotebookbarTabControl.cxx
+++ b/sfx2/source/notebookbar/NotebookbarTabControl.cxx
@@ -19,6 +19,7 @@
 
 #include <vcl/builderfactory.hxx>
 #include <vcl/layout.hxx>
+#include <vcl/tabpage.hxx>
 #include <sfx2/viewfrm.hxx>
 #include <sfx2/notebookbar/NotebookbarTabControl.hxx>
 #include <com/sun/star/ui/theModuleUIConfigurationManagerSupplier.hpp>
@@ -260,6 +261,29 @@ IMPL_LINK(NotebookbarTabControl, OpenNotebookbarPopupMenu, NotebookBar*, pNotebo
     }
 }
 
+Size NotebookbarTabControl::calculateRequisition() const
+{
+    Size aSize = NotebookbarTabControlBase::calculateRequisition();
+
+    for (int i = 0; i < GetPageCount(); i++)
+    {
+        vcl::Window* pChild = static_cast<vcl::Window*>(GetTabPage(TabControl::GetPageId(i)));
+
+        if (pChild)
+        {
+            Size aChildSize = VclAlignment::getLayoutRequisition(*pChild);
+
+            if (aChildSize.getWidth() < aSize.getWidth())
+                aSize.Width() = aChildSize.Width();
+        }
+    }
+
+    if (aSize.Width() < 400)
+        aSize.Width() = 400;
+
+    return aSize;
+}
+
 VCL_BUILDER_FACTORY( NotebookbarTabControl )
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/vcl/source/control/tabctrl.cxx b/vcl/source/control/tabctrl.cxx
index 0c39d870e6aa..d6e75ed387eb 100644
--- a/vcl/source/control/tabctrl.cxx
+++ b/vcl/source/control/tabctrl.cxx
@@ -2353,6 +2353,7 @@ bool NotebookbarTabControlBase::ImplPlaceTabs( long nWidth )
         return false;
 
     long nMaxWidth = nWidth;
+    long nShortcutsWidth = m_pShortcuts != nullptr ? m_pShortcuts->GetSizePixel().getWidth() : 0;
 
     const long nOffsetX = 2 + GetItemsOffset().X();
     const long nOffsetY = 2 + GetItemsOffset().Y();
@@ -2362,10 +2363,14 @@ bool NotebookbarTabControlBase::ImplPlaceTabs( long nWidth )
 
     //collect widths
     std::vector<sal_Int32> aWidths;
-    for( std::vector<ImplTabItem>::iterator it = mpTabCtrlData->maItemList.begin();
+    aWidths.push_back(ImplGetItemSize( &(*(mpTabCtrlData->maItemList.begin())), nMaxWidth ).Width() + nShortcutsWidth);
+    for( std::vector<ImplTabItem>::iterator it = mpTabCtrlData->maItemList.begin() + 1;
          it != mpTabCtrlData->maItemList.end(); ++it )
     {
-        aWidths.push_back(ImplGetItemSize( &(*it), nMaxWidth ).Width());
+        long aSize = ImplGetItemSize( &(*it), nMaxWidth ).getWidth();
+        if( !it->maText.isEmpty() && aSize < 100)
+            aSize = 100;
+        aWidths.push_back(aSize);
     }
 
     //aBreakIndexes will contain the indexes of the last tab on each row
@@ -2375,7 +2380,6 @@ bool NotebookbarTabControlBase::ImplPlaceTabs( long nWidth )
         nMaxWidth = mnMaxPageWidth;
     nMaxWidth -= GetItemsOffset().X();
 
-    long nShortcutsWidth = m_pShortcuts != nullptr ? m_pShortcuts->GetSizePixel().getWidth() : 0;
     long nX = nOffsetX;
     long nY = nOffsetY;
 
@@ -2394,9 +2398,6 @@ bool NotebookbarTabControlBase::ImplPlaceTabs( long nWidth )
     for( std::vector<ImplTabItem>::iterator it = mpTabCtrlData->maItemList.begin();
          it != mpTabCtrlData->maItemList.end(); ++it, ++nIndex )
     {
-        if( it == mpTabCtrlData->maItemList.begin() + 1 )
-            nX += nShortcutsWidth;
-
         Size aSize = ImplGetItemSize( &(*it), nMaxWidth );
 
         bool bNewLine = false;
@@ -2442,6 +2443,12 @@ bool NotebookbarTabControlBase::ImplPlaceTabs( long nWidth )
         nLineWidthAry[nLines] += aSize.Width();
         nX += aSize.Width();
 
+        if( it == mpTabCtrlData->maItemList.begin() )
+        {
+            nLineWidthAry[nLines] += nShortcutsWidth;
+            nX += nShortcutsWidth;
+        }
+
         if ( it->mnId == mnCurPageId )
             nCurLine = nLines;
 
@@ -2492,18 +2499,21 @@ bool NotebookbarTabControlBase::ImplPlaceTabs( long nWidth )
                 n++;
             }
 
-            if( m_pShortcuts && ( it == mpTabCtrlData->maItemList.begin() ) )
-            {
-                Point aPos(nIDX + nDX + nDX, nLineHeightAry[n-1]);
-                m_pShortcuts->SetPosPixel(aPos);
-            }
-
             it->maRect.Left() += nIDX;
-            it->maRect.Right() += nIDX + nDX;
+            if( it == mpTabCtrlData->maItemList.begin() )
+                it->maRect.Right() += nIDX;
+            else
+                it->maRect.Right() += nIDX + nDX;
             it->maRect.Top() = nLineHeightAry[n-1];
             it->maRect.Bottom() = nLineHeightAry[n-1] + nIH;
             nIDX += nDX;
 
+            if( m_pShortcuts && ( it == mpTabCtrlData->maItemList.begin() ) )
+            {
+                Point aPos(it->maRect.Right(), nLineHeightAry[n-1]);
+                m_pShortcuts->SetPosPixel(aPos);
+            }
+
             if ( nModDX )
             {
                 nIDX++;


More information about the Libreoffice-commits mailing list