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

Szymon Kłos eszkadev at gmail.com
Fri Feb 24 08:59:31 UTC 2017


 include/vcl/notebookbar.hxx              |    1 
 sfx2/source/notebookbar/PriorityHBox.cxx |   96 ++++++-----
 sw/uiconfig/swriter/ui/notebookbar.ui    |  269 +++++++++++++++++++------------
 vcl/source/control/notebookbar.cxx       |   15 +
 vcl/source/control/tabctrl.cxx           |    6 
 5 files changed, 241 insertions(+), 146 deletions(-)

New commits:
commit 3422dfc1b61c15d7d3a6b0e1ee16c50457946cc0
Author: Szymon Kłos <eszkadev at gmail.com>
Date:   Tue Feb 14 12:08:03 2017 +0100

    Notebookbar: Better resize support
    
    Change-Id: I0bb5a5600be60a68e53132f2c3c42f79c958b2b3
    Reviewed-on: https://gerrit.libreoffice.org/34491
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Samuel Mehrbrodt <Samuel.Mehrbrodt at cib.de>

diff --git a/include/vcl/notebookbar.hxx b/include/vcl/notebookbar.hxx
index cf01dc6..9a41152 100644
--- a/include/vcl/notebookbar.hxx
+++ b/include/vcl/notebookbar.hxx
@@ -30,6 +30,7 @@ public:
     virtual bool PreNotify( NotifyEvent& rNEvt ) override;
     virtual Size GetOptimalSize() const SAL_OVERRIDE;
     virtual void setPosSizePixel(long nX, long nY, long nWidth, long nHeight, PosSizeFlags nFlags = PosSizeFlags::All) SAL_OVERRIDE;
+    virtual void Resize() override;
 
     void SetIconClickHdl(Link<NotebookBar*, void> aHdl);
 
diff --git a/sfx2/source/notebookbar/PriorityHBox.cxx b/sfx2/source/notebookbar/PriorityHBox.cxx
index c1f60ac..91d9fb8 100644
--- a/sfx2/source/notebookbar/PriorityHBox.cxx
+++ b/sfx2/source/notebookbar/PriorityHBox.cxx
@@ -40,9 +40,6 @@ class SFX2_DLLPUBLIC PriorityHBox : public VclHBox
 {
 private:
     bool m_bInitialized;
-    long m_nNeededWidth;
-
-    ScopedVclPtr<SystemWindow> m_pSystemWindow;
 
     std::vector<IPrioritable*> m_aSortedChilds;
 
@@ -50,7 +47,6 @@ public:
     explicit PriorityHBox(vcl::Window *pParent)
         : VclHBox(pParent)
         , m_bInitialized(false)
-        , m_nNeededWidth(0)
     {
     }
 
@@ -59,36 +55,73 @@ public:
         disposeOnce();
     }
 
-    virtual void dispose() override
+    virtual Size calculateRequisition() const override
     {
-        if (m_pSystemWindow)
+        sal_uInt16 nVisibleChildren = 0;
+
+        Size aSize;
+        for (vcl::Window *pChild = GetWindow(GetWindowType::FirstChild); pChild; pChild = pChild->GetWindow(GetWindowType::Next))
         {
-            m_pSystemWindow->RemoveEventListener(LINK(this, PriorityHBox, WindowEventListener));
-            m_pSystemWindow.clear();
+            if (!pChild->IsVisible())
+                continue;
+            ++nVisibleChildren;
+            Size aChildSize = getLayoutRequisition(*pChild);
+
+            bool bAllwaysExpanded = true;
+
+            IPrioritable* pPrioritable = pChild->GetType() == WindowType::CONTAINER ?
+                dynamic_cast<IPrioritable*>(pChild) : nullptr;
+            if (pPrioritable && pPrioritable->GetPriority() != VCL_PRIORITY_DEFAULT)
+                bAllwaysExpanded = false;
+
+            if (bAllwaysExpanded)
+            {
+                long nPrimaryDimension = getPrimaryDimension(aChildSize);
+                nPrimaryDimension += pChild->get_padding() * 2;
+                setPrimaryDimension(aChildSize, nPrimaryDimension);
+            }
+            else
+                setPrimaryDimension(aChildSize, 0);
+
+            accumulateMaxes(aChildSize, aSize);
         }
-        VclHBox::dispose();
+
+        return finalizeMaxes(aSize, nVisibleChildren);
     }
 
     virtual void Resize() override
     {
         long nWidth = GetSizePixel().Width();
-        long nCurrentWidth = m_nNeededWidth;
+        long nCurrentWidth = VclHBox::calculateRequisition().getWidth();
 
         // Hide lower priority controls
         auto pChild = m_aSortedChilds.begin();
         while (nCurrentWidth > nWidth && pChild != m_aSortedChilds.end())
         {
-            DropdownBox* pContainer = static_cast<DropdownBox*>(*pChild);
-            nCurrentWidth -= pContainer->GetSizePixel().Width() + get_spacing();
-            pContainer->HideContent();
-            nCurrentWidth += pContainer->GetSizePixel().Width() + get_spacing();
+            DropdownBox* pBox = static_cast<DropdownBox*>(*pChild);
+
+            nCurrentWidth -= pBox->GetOutputWidthPixel() + get_spacing();
+            pBox->HideContent();
+            nCurrentWidth += pBox->GetOutputWidthPixel() + get_spacing();
+
             pChild++;
         }
 
         // Show higher priority controls if we already have enough space
         while (pChild != m_aSortedChilds.end())
         {
-            static_cast<DropdownBox*>(*pChild)->ShowContent();
+            DropdownBox* pBox = static_cast<DropdownBox*>(*pChild);
+
+            nCurrentWidth -= pBox->GetOutputWidthPixel() + get_spacing();
+            pBox->ShowContent();
+            nCurrentWidth += getLayoutRequisition(*pBox).Width() + get_spacing();
+
+            if (nCurrentWidth > nWidth)
+            {
+                pBox->HideContent();
+                break;
+            }
+
             pChild++;
         }
 
@@ -101,14 +134,12 @@ public:
         {
             m_bInitialized = true;
 
-            m_pSystemWindow = SfxViewFrame::Current()->GetFrame().GetSystemWindow();
-            if (m_pSystemWindow)
-            {
-                m_pSystemWindow->AddEventListener(LINK(this, PriorityHBox, WindowEventListener));
-
-                CalcNeededWidth();
+            GetChildrenWithPriorities();
 
-                long nWidth = m_pSystemWindow->GetSizePixel().Width();
+            SystemWindow* pSystemWindow = SfxViewFrame::Current()->GetFrame().GetSystemWindow();
+            if (pSystemWindow)
+            {
+                long nWidth = pSystemWindow->GetSizePixel().Width();
                 SetSizePixel(Size(nWidth, GetSizePixel().Height()));
             }
         }
@@ -116,14 +147,11 @@ public:
         VclHBox::Paint(rRenderContext, rRect);
     }
 
-    void CalcNeededWidth()
+    void GetChildrenWithPriorities()
     {
-        int spacing = get_spacing();
-
         for (sal_uInt16 i = 0; i < GetChildCount(); ++i)
         {
             vcl::Window* pChild = GetChild(i);
-            m_nNeededWidth += pChild->GetSizePixel().Width() + spacing;
 
             // Add only containers which have explicitly assigned priority.
             IPrioritable* pPrioritable = pChild->GetType() == WindowType::CONTAINER ?
@@ -134,24 +162,8 @@ public:
 
         std::sort(m_aSortedChilds.begin(), m_aSortedChilds.end(), lcl_comparePriority);
     }
-
-private:
-    DECL_LINK( WindowEventListener, VclWindowEvent&, void );
 };
 
-IMPL_LINK( PriorityHBox, WindowEventListener, VclWindowEvent&, rEvent, void )
-{
-    if (rEvent.GetId() == VclEventId::WindowResize)
-    {
-        vcl::Window* pEventWindow = rEvent.GetWindow();
-
-        OSL_ENSURE(pEventWindow, "PriorityHBox::WindowEventListener: no window!");
-
-        long nWidth = pEventWindow->GetSizePixel().Width();
-        SetSizePixel(Size(nWidth, GetSizePixel().Height()));
-    }
-}
-
 VCL_BUILDER_FACTORY(PriorityHBox)
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/uiconfig/swriter/ui/notebookbar.ui b/sw/uiconfig/swriter/ui/notebookbar.ui
index 1c8d5ef..b64a2d3 100644
--- a/sw/uiconfig/swriter/ui/notebookbar.ui
+++ b/sw/uiconfig/swriter/ui/notebookbar.ui
@@ -2374,14 +2374,57 @@
                     <property name="can_focus">False</property>
                     <property name="tooltip_text" translatable="yes">Links</property>
                     <child>
-                      <object class="vcllo-SmallButton" id="hyperlinkdialog">
+                      <object class="GtkBox">
                         <property name="visible">True</property>
-                        <property name="can_focus">True</property>
-                        <property name="receives_default">True</property>
-                        <property name="action_name">.uno:HyperlinkDialog</property>
-                        <property name="image">HyperlinkDialogImg</property>
-                        <property name="relief">none</property>
-                        <property name="image_position">top</property>
+                        <property name="can_focus">False</property>
+                        <child>
+                          <object class="vcllo-SmallButton" id="hyperlinkdialog">
+                            <property name="visible">True</property>
+                            <property name="can_focus">True</property>
+                            <property name="receives_default">True</property>
+                            <property name="action_name">.uno:HyperlinkDialog</property>
+                            <property name="image">HyperlinkDialogImg</property>
+                            <property name="relief">none</property>
+                            <property name="image_position">top</property>
+                          </object>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="fill">True</property>
+                            <property name="position">0</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="vcllo-SmallButton" id="bookmark">
+                            <property name="visible">True</property>
+                            <property name="can_focus">True</property>
+                            <property name="receives_default">True</property>
+                            <property name="action_name">.uno:InsertBookmark</property>
+                            <property name="image">InsertBookmarkImg</property>
+                            <property name="relief">none</property>
+                            <property name="image_position">top</property>
+                          </object>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="fill">True</property>
+                            <property name="position">1</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="vcllo-SmallButton" id="insertreferencefield">
+                            <property name="visible">True</property>
+                            <property name="can_focus">True</property>
+                            <property name="receives_default">True</property>
+                            <property name="action_name">.uno:InsertReferenceField</property>
+                            <property name="image">InsertReferenceFieldImg</property>
+                            <property name="relief">none</property>
+                            <property name="image_position">top</property>
+                          </object>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="fill">True</property>
+                            <property name="position">2</property>
+                          </packing>
+                        </child>
                       </object>
                       <packing>
                         <property name="expand">False</property>
@@ -2389,38 +2432,6 @@
                         <property name="position">0</property>
                       </packing>
                     </child>
-                    <child>
-                      <object class="vcllo-SmallButton" id="bookmark">
-                        <property name="visible">True</property>
-                        <property name="can_focus">True</property>
-                        <property name="receives_default">True</property>
-                        <property name="action_name">.uno:InsertBookmark</property>
-                        <property name="image">InsertBookmarkImg</property>
-                        <property name="relief">none</property>
-                        <property name="image_position">top</property>
-                      </object>
-                      <packing>
-                        <property name="expand">False</property>
-                        <property name="fill">True</property>
-                        <property name="position">1</property>
-                      </packing>
-                    </child>
-                    <child>
-                      <object class="vcllo-SmallButton" id="insertreferencefield">
-                        <property name="visible">True</property>
-                        <property name="can_focus">True</property>
-                        <property name="receives_default">True</property>
-                        <property name="action_name">.uno:InsertReferenceField</property>
-                        <property name="image">InsertReferenceFieldImg</property>
-                        <property name="relief">none</property>
-                        <property name="image_position">top</property>
-                      </object>
-                      <packing>
-                        <property name="expand">False</property>
-                        <property name="fill">True</property>
-                        <property name="position">2</property>
-                      </packing>
-                    </child>
                     <style>
                       <class name="priority-3"/>
                     </style>
@@ -3874,6 +3885,9 @@
                         <property name="position">3</property>
                       </packing>
                     </child>
+                    <style>
+                      <class name="priority-3"/>
+                    </style>
                   </object>
                   <packing>
                     <property name="expand">False</property>
@@ -4026,6 +4040,9 @@
                         <property name="position">1</property>
                       </packing>
                     </child>
+                    <style>
+                      <class name="priority-3"/>
+                    </style>
                   </object>
                   <packing>
                     <property name="expand">False</property>
@@ -4040,57 +4057,84 @@
                     <property name="tooltip_text" translatable="yes">Zoom</property>
                     <property name="valign">center</property>
                     <child>
-                      <object class="vcllo-SmallButton" id="Zoom100Percent">
-                        <property name="visible">True</property>
-                        <property name="can_focus">True</property>
-                        <property name="receives_default">True</property>
-                        <property name="action_name">.uno:Zoom100Percent</property>
-                        <property name="image">Zoom100PercentImg</property>
-                        <property name="relief">none</property>
-                        <property name="image_position">top</property>
-                        <property name="always_show_image">True</property>
-                      </object>
-                      <packing>
-                        <property name="expand">False</property>
-                        <property name="fill">True</property>
-                        <property name="position">0</property>
-                      </packing>
-                    </child>
-                    <child>
-                      <object class="vcllo-SmallButton" id="ZoomOptimal">
-                        <property name="visible">True</property>
-                        <property name="can_focus">True</property>
-                        <property name="receives_default">True</property>
-                        <property name="action_name">.uno:ZoomOptimal</property>
-                        <property name="image">ZoomOptimalImg</property>
-                        <property name="relief">none</property>
-                        <property name="image_position">top</property>
-                        <property name="always_show_image">True</property>
-                      </object>
-                      <packing>
-                        <property name="expand">False</property>
-                        <property name="fill">True</property>
-                        <property name="position">1</property>
-                      </packing>
-                    </child>
-                    <child>
-                      <object class="GtkBox" id="box85">
+                      <object class="GtkBox" id="box">
                         <property name="visible">True</property>
                         <property name="can_focus">False</property>
                         <child>
-                          <object class="GtkBox" id="box117">
+                          <object class="vcllo-SmallButton" id="Zoom100Percent">
+                            <property name="visible">True</property>
+                            <property name="can_focus">True</property>
+                            <property name="receives_default">True</property>
+                            <property name="action_name">.uno:Zoom100Percent</property>
+                            <property name="image">Zoom100PercentImg</property>
+                            <property name="relief">none</property>
+                            <property name="image_position">top</property>
+                            <property name="always_show_image">True</property>
+                          </object>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="fill">True</property>
+                            <property name="position">0</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="vcllo-SmallButton" id="ZoomOptimal">
+                            <property name="visible">True</property>
+                            <property name="can_focus">True</property>
+                            <property name="receives_default">True</property>
+                            <property name="action_name">.uno:ZoomOptimal</property>
+                            <property name="image">ZoomOptimalImg</property>
+                            <property name="relief">none</property>
+                            <property name="image_position">top</property>
+                            <property name="always_show_image">True</property>
+                          </object>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="fill">True</property>
+                            <property name="position">1</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkBox" id="box85">
                             <property name="visible">True</property>
                             <property name="can_focus">False</property>
-                            <property name="orientation">vertical</property>
                             <child>
-                              <object class="GtkButton" id="ZoomPage">
+                              <object class="GtkBox" id="box117">
                                 <property name="visible">True</property>
-                                <property name="can_focus">True</property>
-                                <property name="receives_default">True</property>
-                                <property name="action_name">.uno:ZoomPage</property>
-                                <property name="relief">none</property>
-                                <property name="xalign">0</property>
-                                <property name="always_show_image">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="orientation">vertical</property>
+                                <child>
+                                  <object class="GtkButton" id="ZoomPage">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">True</property>
+                                    <property name="receives_default">True</property>
+                                    <property name="action_name">.uno:ZoomPage</property>
+                                    <property name="relief">none</property>
+                                    <property name="xalign">0</property>
+                                    <property name="always_show_image">True</property>
+                                  </object>
+                                  <packing>
+                                    <property name="expand">False</property>
+                                    <property name="fill">True</property>
+                                    <property name="position">0</property>
+                                  </packing>
+                                </child>
+                                <child>
+                                  <object class="GtkButton" id="ZoomPageWidth">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">True</property>
+                                    <property name="receives_default">True</property>
+                                    <property name="action_name">.uno:ZoomPageWidth</property>
+                                    <property name="relief">none</property>
+                                    <property name="xalign">0</property>
+                                    <property name="always_show_image">True</property>
+                                  </object>
+                                  <packing>
+                                    <property name="expand">False</property>
+                                    <property name="fill">True</property>
+                                    <property name="position">1</property>
+                                  </packing>
+                                </child>
                               </object>
                               <packing>
                                 <property name="expand">False</property>
@@ -4099,14 +4143,10 @@
                               </packing>
                             </child>
                             <child>
-                              <object class="GtkButton" id="ZoomPageWidth">
+                              <object class="GtkSeparator" id="separator13">
                                 <property name="visible">True</property>
-                                <property name="can_focus">True</property>
-                                <property name="receives_default">True</property>
-                                <property name="action_name">.uno:ZoomPageWidth</property>
-                                <property name="relief">none</property>
-                                <property name="xalign">0</property>
-                                <property name="always_show_image">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="orientation">vertical</property>
                               </object>
                               <packing>
                                 <property name="expand">False</property>
@@ -4118,26 +4158,14 @@
                           <packing>
                             <property name="expand">False</property>
                             <property name="fill">True</property>
-                            <property name="position">0</property>
-                          </packing>
-                        </child>
-                        <child>
-                          <object class="GtkSeparator" id="separator13">
-                            <property name="visible">True</property>
-                            <property name="can_focus">False</property>
-                            <property name="orientation">vertical</property>
-                          </object>
-                          <packing>
-                            <property name="expand">False</property>
-                            <property name="fill">True</property>
-                            <property name="position">1</property>
+                            <property name="position">2</property>
                           </packing>
                         </child>
                       </object>
                       <packing>
                         <property name="expand">False</property>
                         <property name="fill">True</property>
-                        <property name="position">2</property>
+                        <property name="position">0</property>
                       </packing>
                     </child>
                     <style>
@@ -4218,6 +4246,9 @@
                         <property name="position">0</property>
                       </packing>
                     </child>
+                    <style>
+                      <class name="priority-3"/>
+                    </style>
                   </object>
                   <packing>
                     <property name="expand">False</property>
@@ -4455,6 +4486,9 @@
                         <property name="position">3</property>
                       </packing>
                     </child>
+                    <style>
+                      <class name="priority-3"/>
+                    </style>
                   </object>
                   <packing>
                     <property name="expand">False</property>
@@ -4521,6 +4555,9 @@
                         <property name="position">0</property>
                       </packing>
                     </child>
+                    <style>
+                      <class name="priority-3"/>
+                    </style>
                   </object>
                   <packing>
                     <property name="expand">False</property>
@@ -4854,6 +4891,9 @@
                         <property name="position">0</property>
                       </packing>
                     </child>
+                    <style>
+                      <class name="priority-3"/>
+                    </style>
                   </object>
                   <packing>
                     <property name="expand">False</property>
@@ -4885,6 +4925,9 @@
                         <property name="position">0</property>
                       </packing>
                     </child>
+                    <style>
+                      <class name="priority-3"/>
+                    </style>
                   </object>
                   <packing>
                     <property name="expand">False</property>
@@ -4963,6 +5006,9 @@
                         <property name="position">0</property>
                       </packing>
                     </child>
+                    <style>
+                      <class name="priority-3"/>
+                    </style>
                   </object>
                   <packing>
                     <property name="expand">False</property>
@@ -5134,6 +5180,9 @@
                         <property name="position">0</property>
                       </packing>
                     </child>
+                    <style>
+                      <class name="priority-3"/>
+                    </style>
                   </object>
                   <packing>
                     <property name="expand">False</property>
@@ -5212,6 +5261,9 @@
                         <property name="position">0</property>
                       </packing>
                     </child>
+                    <style>
+                      <class name="priority-3"/>
+                    </style>
                   </object>
                   <packing>
                     <property name="expand">False</property>
@@ -5300,6 +5352,9 @@
                         <property name="position">0</property>
                       </packing>
                     </child>
+                    <style>
+                      <class name="priority-3"/>
+                    </style>
                   </object>
                   <packing>
                     <property name="expand">False</property>
@@ -5376,6 +5431,9 @@
                         <property name="position">0</property>
                       </packing>
                     </child>
+                    <style>
+                      <class name="priority-3"/>
+                    </style>
                   </object>
                   <packing>
                     <property name="expand">False</property>
@@ -5452,6 +5510,9 @@
                         <property name="position">0</property>
                       </packing>
                     </child>
+                    <style>
+                      <class name="priority-3"/>
+                    </style>
                   </object>
                   <packing>
                     <property name="expand">False</property>
diff --git a/vcl/source/control/notebookbar.cxx b/vcl/source/control/notebookbar.cxx
index 6f4108d..4532360 100644
--- a/vcl/source/control/notebookbar.cxx
+++ b/vcl/source/control/notebookbar.cxx
@@ -105,6 +105,21 @@ void NotebookBar::setPosSizePixel(long nX, long nY, long nWidth, long nHeight, P
         VclContainer::setLayoutAllocation(*pChild, Point(0, 0), Size(nWidth, nHeight));
 }
 
+void NotebookBar::Resize()
+{
+    if(m_pUIBuilder && m_pUIBuilder->get_widget_root())
+    {
+        vcl::Window* pWindow = m_pUIBuilder->get_widget_root()->GetChild(0);
+        if (pWindow)
+        {
+            Size aSize = pWindow->GetSizePixel();
+            aSize.Width() = GetSizePixel().Width();
+            pWindow->SetSizePixel(aSize);
+        }
+    }
+    Control::Resize();
+}
+
 void NotebookBar::SetIconClickHdl(Link<NotebookBar*, void> aHdl)
 {
     if (m_pContextContainer)
diff --git a/vcl/source/control/tabctrl.cxx b/vcl/source/control/tabctrl.cxx
index 989da8f..5268fbd 100644
--- a/vcl/source/control/tabctrl.cxx
+++ b/vcl/source/control/tabctrl.cxx
@@ -2273,13 +2273,19 @@ void NotebookbarTabControl::SelectTabPage( sal_uInt16 nPageId )
     if ( nPageId == 1 )
         m_aIconClickHdl.Call( static_cast<NotebookBar*>(GetParent()) );
     else
+    {
         TabControl::SelectTabPage( nPageId );
+        Resize();
+    }
 }
 
 void NotebookbarTabControl::SetCurPageId( sal_uInt16 nPageId )
 {
     if ( nPageId != 1 )
+    {
         TabControl::SetCurPageId( nPageId );
+        Resize();
+    }
     if ( nPageId == GetPageCount() )
         ImplActivateTabPage( true );
 }


More information about the Libreoffice-commits mailing list