include/vcl/weld.hxx                      |    1 
 sw/source/ui/table/tabledlg.cxx           |   43 +++++++++++++++++++++--------
 sw/source/uibase/inc/prcntfld.hxx         |    1 
 sw/source/uibase/table/tablepg.hxx        |    1 
 sw/uiconfig/swriter/ui/tablecolumnpage.ui |   44 +++++++++++++++---------------
 vcl/source/app/salvtables.cxx             |    5 +++
 vcl/unx/gtk3/gtk3gtkinst.cxx              |    6 ++++
 7 files changed, 69 insertions(+), 32 deletions(-)

New commits:
commit 853b84c307191c2d6fd0ac697328abb9ac8ef22a
Author:     Caolán McNamara <caol...@redhat.com>
AuthorDate: Tue Oct 9 16:38:41 2018 +0100
Commit:     Caolán McNamara <caol...@redhat.com>
CommitDate: Wed Oct 10 15:37:09 2018 +0200

    tdf#120420 only show as much column widgets as don't distort the page width
    
    Change-Id: Ibde6f2bcb4fed1261ebd7efa45904600855a20ef
    Reviewed-on: https://gerrit.libreoffice.org/61596
    Tested-by: Jenkins
    Reviewed-by: Caolán McNamara <caol...@redhat.com>
    Tested-by: Caolán McNamara <caol...@redhat.com>

diff --git a/include/vcl/weld.hxx b/include/vcl/weld.hxx
index e49e3689f56d..86ecdfe01032 100644
--- a/include/vcl/weld.hxx
+++ b/include/vcl/weld.hxx
@@ -75,6 +75,7 @@ public:
 
     virtual void set_grid_left_attach(int nAttach) = 0;
     virtual int get_grid_left_attach() const = 0;
+    virtual void set_grid_width(int nCols) = 0;
     virtual void set_grid_top_attach(int nAttach) = 0;
     virtual int get_grid_top_attach() const = 0;
 
diff --git a/sw/source/ui/table/tabledlg.cxx b/sw/source/ui/table/tabledlg.cxx
index 8e61980b1dff..13423f5899ba 100644
--- a/sw/source/ui/table/tabledlg.cxx
+++ b/sw/source/ui/table/tabledlg.cxx
@@ -702,6 +702,7 @@ SwTableColumnPage::SwTableColumnPage(TabPageParent pParent, 
const SfxItemSet& rS
     , pTableData(nullptr)
     , nTableWidth(0)
     , nMinWidth(MINLAY)
+    , nMetFields(MET_FIELDS)
     , nNoOfCols(0)
     , nNoOfVisibleCols(0)
     , bModified(false)
@@ -728,6 +729,24 @@ SwTableColumnPage::SwTableColumnPage(TabPageParent 
pParent, const SfxItemSet& rS
 {
     SetExchangeSupport();
 
+    //tdf#120420 keeping showing column width fields unless
+    //the dialog begins to grow, then stop adding them
+    weld::Window* pTopLevel = pParent.GetFrameWeld();
+    Size aOrigSize = pTopLevel->get_preferred_size();
+    for (sal_uInt16 i = 0; i < MET_FIELDS; ++i)
+    {
+        m_aFieldArr[i].show();
+        m_aTextArr[i]->show();
+
+        if (pTopLevel->get_preferred_size().Width() > aOrigSize.Width())
+        {
+            nMetFields = i + 1;
+            m_aTextArr[i]->set_grid_width(1);
+            m_xUpBtn->set_grid_left_attach(nMetFields * 2 - 1);
+            break;
+        }
+    }
+
     const SfxPoolItem* pItem;
     Init(SfxItemState::SET == rSet.GetItemState( SID_HTML_MODE, false,&pItem )
          && static_cast<const SfxUInt16Item*>(pItem)->GetValue() & 
HTMLMODE_ON);
@@ -763,7 +782,7 @@ void  SwTableColumnPage::Reset( const SfxItemSet* )
         }
         sal_Int64 nMinTwips = m_aFieldArr[0].NormalizePercent( nMinWidth );
         sal_Int64 nMaxTwips = m_aFieldArr[0].NormalizePercent( nTableWidth );
-        for( sal_uInt16 i = 0; (i < MET_FIELDS) && (i < nNoOfVisibleCols); i++ 
)
+        for( sal_uInt16 i = 0; (i < nMetFields) && (i < nNoOfVisibleCols); i++ 
)
         {
             m_aFieldArr[i].SetPrcntValue( m_aFieldArr[i].NormalizePercent(
                                                 GetVisibleWidth(i) ), 
FUNIT_TWIP );
@@ -773,10 +792,12 @@ void  SwTableColumnPage::Reset( const SfxItemSet* )
             m_aTextArr[i]->set_sensitive(true);
         }
 
-        if( nNoOfVisibleCols > MET_FIELDS )
+        if (nNoOfVisibleCols > nMetFields)
+        {
             m_xUpBtn->set_sensitive(true);
+        }
 
-        for( sal_uInt16 i = nNoOfVisibleCols; i < MET_FIELDS; ++i )
+        for( sal_uInt16 i = nNoOfVisibleCols; i < nMetFields; ++i )
         {
             m_aFieldArr[i].set_text(OUString());
             m_aTextArr[i]->set_sensitive(false);
@@ -790,7 +811,7 @@ void  SwTableColumnPage::Init(bool bWeb)
 {
     FieldUnit aMetric = ::GetDfltMetric(bWeb);
     Link<weld::MetricSpinButton&,void> aLk = LINK(this, SwTableColumnPage, 
ValueChangedHdl);
-    for (sal_uInt16 i = 0; i < MET_FIELDS; ++i)
+    for (sal_uInt16 i = 0; i < nMetFields; ++i)
     {
         aValueTable[i] = i;
         m_aFieldArr[i].SetMetric(aMetric);
@@ -820,13 +841,13 @@ IMPL_LINK(SwTableColumnPage, AutoClickHdl, weld::Button&, 
rControl, void)
     }
     if (&rControl == m_xUpBtn.get())
     {
-        if( aValueTable[ MET_FIELDS -1 ] < nNoOfVisibleCols -1  )
+        if( aValueTable[ nMetFields -1 ] < nNoOfVisibleCols -1  )
         {
             for(sal_uInt16 & rn : aValueTable)
                 rn += 1;
         }
     }
-    for( sal_uInt16 i = 0; (i < nNoOfVisibleCols ) && ( i < MET_FIELDS); i++ )
+    for( sal_uInt16 i = 0; (i < nNoOfVisibleCols ) && ( i < nMetFields); i++ )
     {
         OUString sEntry('~');
         OUString sIndex = OUString::number( aValueTable[i] + 1 );
@@ -835,7 +856,7 @@ IMPL_LINK(SwTableColumnPage, AutoClickHdl, weld::Button&, 
rControl, void)
     }
 
     m_xDownBtn->set_sensitive(aValueTable[0] > 0);
-    m_xUpBtn->set_sensitive(aValueTable[ MET_FIELDS -1 ] < nNoOfVisibleCols -1 
);
+    m_xUpBtn->set_sensitive(aValueTable[ nMetFields -1 ] < nNoOfVisibleCols -1 
);
     UpdateCols(0);
 }
 
@@ -879,7 +900,7 @@ void SwTableColumnPage::ModifyHdl(const 
weld::MetricSpinButton* pField)
     SwPercentField *pEdit = nullptr;
     sal_uInt16 i;
 
-    for( i = 0; i < MET_FIELDS; i++)
+    for( i = 0; i < nMetFields; i++)
     {
         if (pField == m_aFieldArr[i].get())
         {
@@ -888,7 +909,7 @@ void SwTableColumnPage::ModifyHdl(const 
weld::MetricSpinButton* pField)
         }
     }
 
-    if (MET_FIELDS <= i || !pEdit)
+    if (nMetFields <= i || !pEdit)
     {
         OSL_ENSURE(false, "cannot happen.");
         return;
@@ -1004,7 +1025,7 @@ void SwTableColumnPage::UpdateCols( sal_uInt16 
nCurrentPos )
     if(!bPercentMode)
         m_xSpaceED->set_value(m_xSpaceED->normalize(pTableData->GetSpace() - 
nTableWidth), FUNIT_TWIP);
 
-    for( sal_uInt16 i = 0; ( i < nNoOfVisibleCols ) && ( i < MET_FIELDS ); i++)
+    for( sal_uInt16 i = 0; ( i < nNoOfVisibleCols ) && ( i < nMetFields ); i++)
     {
         m_aFieldArr[i].SetPrcntValue(m_aFieldArr[i].NormalizePercent(
                         GetVisibleWidth(aValueTable[i]) ), FUNIT_TWIP);
@@ -1014,7 +1035,7 @@ void SwTableColumnPage::UpdateCols( sal_uInt16 
nCurrentPos )
 void SwTableColumnPage::ActivatePage( const SfxItemSet& )
 {
     bPercentMode = pTableData->GetWidthPercent() != 0;
-    for( sal_uInt16 i = 0; (i < MET_FIELDS) && (i < nNoOfVisibleCols); i++ )
+    for( sal_uInt16 i = 0; (i < nMetFields) && (i < nNoOfVisibleCols); i++ )
     {
         m_aFieldArr[i].SetRefValue(pTableData->GetWidth());
         m_aFieldArr[i].ShowPercent( bPercentMode );
diff --git a/sw/source/uibase/inc/prcntfld.hxx 
b/sw/source/uibase/inc/prcntfld.hxx
index 17c16e78f041..6b831a259b13 100644
--- a/sw/source/uibase/inc/prcntfld.hxx
+++ b/sw/source/uibase/inc/prcntfld.hxx
@@ -112,6 +112,7 @@ public:
     void connect_value_changed(const Link<weld::MetricSpinButton&, void>& 
rLink) { m_pField->connect_value_changed(rLink); }
     void SetMetric(FieldUnit eUnit) { ::SetFieldUnit(*m_pField, eUnit); }
     void set_sensitive(bool bEnable) { m_pField->set_sensitive(bEnable); }
+    void show() { m_pField->show(); }
     bool has_focus() const { return m_pField->has_focus(); }
     void save_value() { m_pField->save_value(); }
     bool get_value_changed_from_saved() const { return 
m_pField->get_value_changed_from_saved(); }
diff --git a/sw/source/uibase/table/tablepg.hxx 
b/sw/source/uibase/table/tablepg.hxx
index 02f9d57ba758..ad939bc635dd 100644
--- a/sw/source/uibase/table/tablepg.hxx
+++ b/sw/source/uibase/table/tablepg.hxx
@@ -99,6 +99,7 @@ class SwTableColumnPage : public SfxTabPage
     SwTableRep*     pTableData;
     SwTwips         nTableWidth;
     SwTwips         nMinWidth;
+    sal_uInt16      nMetFields;
     sal_uInt16      nNoOfCols;
     sal_uInt16      nNoOfVisibleCols;
     // Remember the width, when switching to autoalign
diff --git a/sw/uiconfig/swriter/ui/tablecolumnpage.ui 
b/sw/uiconfig/swriter/ui/tablecolumnpage.ui
index 5efafa5cce5e..00050c4e2a81 100644
--- a/sw/uiconfig/swriter/ui/tablecolumnpage.ui
+++ b/sw/uiconfig/swriter/ui/tablecolumnpage.ui
@@ -151,7 +151,6 @@
                 <property name="column_spacing">12</property>
                 <child>
                   <object class="GtkSpinButton" id="width2">
-                    <property name="visible">True</property>
                     <property name="sensitive">False</property>
                     <property name="can_focus">True</property>
                     <property name="halign">center</property>
@@ -168,11 +167,11 @@
                   <packing>
                     <property name="left_attach">2</property>
                     <property name="top_attach">1</property>
+                    <property name="width">2</property>
                   </packing>
                 </child>
                 <child>
                   <object class="GtkSpinButton" id="width3">
-                    <property name="visible">True</property>
                     <property name="sensitive">False</property>
                     <property name="can_focus">True</property>
                     <property name="halign">center</property>
@@ -187,13 +186,13 @@
                     </child>
                   </object>
                   <packing>
-                    <property name="left_attach">3</property>
+                    <property name="left_attach">4</property>
                     <property name="top_attach">1</property>
+                    <property name="width">2</property>
                   </packing>
                 </child>
                 <child>
                   <object class="GtkSpinButton" id="width4">
-                    <property name="visible">True</property>
                     <property name="sensitive">False</property>
                     <property name="can_focus">True</property>
                     <property name="halign">center</property>
@@ -208,13 +207,13 @@
                     </child>
                   </object>
                   <packing>
-                    <property name="left_attach">4</property>
+                    <property name="left_attach">6</property>
                     <property name="top_attach">1</property>
+                    <property name="width">2</property>
                   </packing>
                 </child>
                 <child>
                   <object class="GtkSpinButton" id="width5">
-                    <property name="visible">True</property>
                     <property name="sensitive">False</property>
                     <property name="can_focus">True</property>
                     <property name="halign">center</property>
@@ -229,13 +228,13 @@
                     </child>
                   </object>
                   <packing>
-                    <property name="left_attach">5</property>
+                    <property name="left_attach">8</property>
                     <property name="top_attach">1</property>
+                    <property name="width">2</property>
                   </packing>
                 </child>
                 <child>
                   <object class="GtkSpinButton" id="width6">
-                    <property name="visible">True</property>
                     <property name="sensitive">False</property>
                     <property name="can_focus">True</property>
                     <property name="halign">center</property>
@@ -250,30 +249,30 @@
                     </child>
                   </object>
                   <packing>
-                    <property name="left_attach">6</property>
+                    <property name="left_attach">10</property>
                     <property name="top_attach">1</property>
                     <property name="width">2</property>
                   </packing>
                 </child>
                 <child>
                   <object class="GtkLabel" id="6">
-                    <property name="visible">True</property>
                     <property name="sensitive">False</property>
                     <property name="can_focus">False</property>
+                    <property name="hexpand">True</property>
                     <property name="label">_6</property>
                     <property name="use_underline">True</property>
                     <property name="mnemonic_widget">width6</property>
                   </object>
                   <packing>
-                    <property name="left_attach">6</property>
+                    <property name="left_attach">10</property>
                     <property name="top_attach">0</property>
                   </packing>
                 </child>
                 <child>
                   <object class="GtkLabel" id="1">
-                    <property name="visible">True</property>
                     <property name="sensitive">False</property>
                     <property name="can_focus">False</property>
+                    <property name="hexpand">True</property>
                     <property name="label">_1</property>
                     <property name="use_underline">True</property>
                     <property name="mnemonic_widget">width1</property>
@@ -285,9 +284,9 @@
                 </child>
                 <child>
                   <object class="GtkLabel" id="2">
-                    <property name="visible">True</property>
                     <property name="sensitive">False</property>
                     <property name="can_focus">False</property>
+                    <property name="hexpand">True</property>
                     <property name="label">_2</property>
                     <property name="use_underline">True</property>
                     <property name="mnemonic_widget">width2</property>
@@ -295,53 +294,56 @@
                   <packing>
                     <property name="left_attach">2</property>
                     <property name="top_attach">0</property>
+                    <property name="width">2</property>
                   </packing>
                 </child>
                 <child>
                   <object class="GtkLabel" id="3">
-                    <property name="visible">True</property>
                     <property name="sensitive">False</property>
                     <property name="can_focus">False</property>
+                    <property name="hexpand">True</property>
                     <property name="label">_3</property>
                     <property name="use_underline">True</property>
                     <property name="mnemonic_widget">width3</property>
                   </object>
                   <packing>
-                    <property name="left_attach">3</property>
+                    <property name="left_attach">4</property>
                     <property name="top_attach">0</property>
+                    <property name="width">2</property>
                   </packing>
                 </child>
                 <child>
                   <object class="GtkLabel" id="5">
-                    <property name="visible">True</property>
                     <property name="sensitive">False</property>
                     <property name="can_focus">False</property>
+                    <property name="hexpand">True</property>
                     <property name="label">_5</property>
                     <property name="use_underline">True</property>
                     <property name="mnemonic_widget">width5</property>
                   </object>
                   <packing>
-                    <property name="left_attach">5</property>
+                    <property name="left_attach">8</property>
                     <property name="top_attach">0</property>
+                    <property name="width">2</property>
                   </packing>
                 </child>
                 <child>
                   <object class="GtkLabel" id="4">
-                    <property name="visible">True</property>
                     <property name="sensitive">False</property>
                     <property name="can_focus">False</property>
+                    <property name="hexpand">True</property>
                     <property name="label">_4</property>
                     <property name="use_underline">True</property>
                     <property name="mnemonic_widget">width4</property>
                   </object>
                   <packing>
-                    <property name="left_attach">4</property>
+                    <property name="left_attach">6</property>
                     <property name="top_attach">0</property>
+                    <property name="width">2</property>
                   </packing>
                 </child>
                 <child>
                   <object class="GtkSpinButton" id="width1">
-                    <property name="visible">True</property>
                     <property name="sensitive">False</property>
                     <property name="can_focus">True</property>
                     <property name="halign">center</property>
@@ -387,7 +389,7 @@
                     <property name="always_show_image">True</property>
                   </object>
                   <packing>
-                    <property name="left_attach">7</property>
+                    <property name="left_attach">11</property>
                     <property name="top_attach">0</property>
                   </packing>
                 </child>
diff --git a/vcl/source/app/salvtables.cxx b/vcl/source/app/salvtables.cxx
index 3d03b0a70124..102aa450c70a 100644
--- a/vcl/source/app/salvtables.cxx
+++ b/vcl/source/app/salvtables.cxx
@@ -341,6 +341,11 @@ public:
         return m_xWidget->get_grid_left_attach();
     }
 
+    virtual void set_grid_width(int nCols) override
+    {
+        m_xWidget->set_grid_width(nCols);
+    }
+
     virtual void set_grid_top_attach(int nAttach) override
     {
         m_xWidget->set_grid_top_attach(nAttach);
diff --git a/vcl/unx/gtk3/gtk3gtkinst.cxx b/vcl/unx/gtk3/gtk3gtkinst.cxx
index a03682d46bba..71131528dd46 100644
--- a/vcl/unx/gtk3/gtk3gtkinst.cxx
+++ b/vcl/unx/gtk3/gtk3gtkinst.cxx
@@ -1346,6 +1346,12 @@ public:
         return nAttach;
     }
 
+    virtual void set_grid_width(int nCols) override
+    {
+        GtkContainer* pParent = 
GTK_CONTAINER(gtk_widget_get_parent(m_pWidget));
+        gtk_container_child_set(pParent, m_pWidget, "width", nCols, nullptr);
+    }
+
     virtual void set_grid_top_attach(int nAttach) override
     {
         GtkContainer* pParent = 
GTK_CONTAINER(gtk_widget_get_parent(m_pWidget));
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to