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

Anshu (via logerrit) logerrit at kemper.freedesktop.org
Thu Nov 19 19:11:38 UTC 2020


 sw/source/ui/table/instable.cxx       |   59 +++++++++++++++++++++++-----------
 sw/source/uibase/inc/instable.hxx     |    7 ++--
 sw/uiconfig/swriter/ui/inserttable.ui |   17 ++++++++-
 3 files changed, 58 insertions(+), 25 deletions(-)

New commits:
commit 3f8d9566cdf278d3412207aa15ac5a8c6a3757b4
Author:     Anshu <anshukhare50 at gmail.com>
AuthorDate: Tue Nov 10 03:46:47 2020 +0530
Commit:     Mike Kaganski <mike.kaganski at collabora.com>
CommitDate: Thu Nov 19 20:10:53 2020 +0100

    tdf#134779 Warning generated if the table size exceeds a particular limit
    
    Change-Id: I2ee23c7b3f5638b48323a76535e7a3b5141d1ad0
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/105501
    Tested-by: Jenkins
    Reviewed-by: Mike Kaganski <mike.kaganski at collabora.com>

diff --git a/sw/source/ui/table/instable.cxx b/sw/source/ui/table/instable.cxx
index 3ca34f37b313..b700b85d53fc 100644
--- a/sw/source/ui/table/instable.cxx
+++ b/sw/source/ui/table/instable.cxx
@@ -25,7 +25,6 @@
 #include <viewopt.hxx>
 #include <comphelper/lok.hxx>
 
-#define ROW_COL_PROD 16384
 
 void SwInsTableDlg::GetValues( OUString& rName, sal_uInt16& rRow, sal_uInt16& rCol,
                                 SwInsertTableOptions& rInsTableOpts, OUString& rAutoName,
@@ -33,8 +32,8 @@ void SwInsTableDlg::GetValues( OUString& rName, sal_uInt16& rRow, sal_uInt16& rC
 {
     SwInsertTableFlags nInsMode = SwInsertTableFlags::NONE;
     rName = m_xNameEdit->get_text();
-    rRow = m_xRowNF->get_value();
-    rCol = m_xColNF->get_value();
+    rRow = m_xRowSpinButton->get_value();
+    rCol = m_xColSpinButton->get_value();
 
     if (m_xHeaderCB->get_active())
         nInsMode |= SwInsertTableFlags::Headline;
@@ -66,8 +65,9 @@ SwInsTableDlg::SwInsTableDlg(SwView& rView)
     , pTAutoFormat(nullptr)
     , nEnteredValRepeatHeaderNF(-1)
     , m_xNameEdit(m_xBuilder->weld_entry("nameedit"))
-    , m_xColNF(m_xBuilder->weld_spin_button("colspin"))
-    , m_xRowNF(m_xBuilder->weld_spin_button("rowspin"))
+    , m_xWarning(m_xBuilder->weld_label("lbwarning"))
+    , m_xColSpinButton(m_xBuilder->weld_spin_button("colspin"))
+    , m_xRowSpinButton(m_xBuilder->weld_spin_button("rowspin"))
     , m_xHeaderCB(m_xBuilder->weld_check_button("headercb"))
     , m_xRepeatHeaderCB(m_xBuilder->weld_check_button("repeatcb"))
     , m_xRepeatHeaderNF(m_xBuilder->weld_spin_button("repeatheaderspin"))
@@ -89,11 +89,8 @@ SwInsTableDlg::SwInsTableDlg(SwView& rView)
     m_xNameEdit->connect_insert_text(LINK(this, SwInsTableDlg, TextFilterHdl));
     m_xNameEdit->set_text(pShell->GetUniqueTableName());
     m_xNameEdit->connect_changed(LINK(this, SwInsTableDlg, ModifyName));
-    m_xColNF->connect_value_changed(LINK(this, SwInsTableDlg, ModifyRowCol));
-    m_xRowNF->connect_value_changed(LINK(this, SwInsTableDlg, ModifyRowCol));
-
-    m_xRowNF->set_max(ROW_COL_PROD/m_xColNF->get_value());
-    m_xColNF->set_max(ROW_COL_PROD/m_xRowNF->get_value());
+    m_xRowSpinButton->connect_changed(LINK(this, SwInsTableDlg, ModifyRowCol));
+    m_xColSpinButton->connect_changed(LINK(this, SwInsTableDlg, ModifyRowCol));
 
     m_xInsertBtn->connect_clicked(LINK(this, SwInsTableDlg, OKHdl));
 
@@ -116,7 +113,7 @@ SwInsTableDlg::SwInsTableDlg(SwView& rView)
     RepeatHeaderCheckBoxHdl(*m_xRepeatHeaderCB);
     CheckBoxHdl(*m_xHeaderCB);
 
-    sal_Int64 nMax = m_xRowNF->get_value();
+    sal_Int64 nMax = m_xRowSpinButton->get_value();
     if( nMax <= 1 )
         nMax = 1;
     else
@@ -124,6 +121,7 @@ SwInsTableDlg::SwInsTableDlg(SwView& rView)
     m_xRepeatHeaderNF->set_max( nMax );
 
     InitAutoTableFormat();
+    m_xWarning->set_label_type(weld::LabelType::Warning);
 }
 
 void SwInsTableDlg::InitAutoTableFormat()
@@ -227,21 +225,44 @@ IMPL_LINK( SwInsTableDlg, ModifyName, weld::Entry&, rEdit, void )
     m_xInsertBtn->set_sensitive(pShell->GetTableStyle(sTableName) == nullptr);
 }
 
-IMPL_LINK( SwInsTableDlg, ModifyRowCol, weld::SpinButton&, rEdit, void )
+// We use weld::Entry's "changed" notification here, not weld::SpinButton's "value_changed", because
+// the latter only fires after the control looses focus; so the notification would not fire during
+// typing a big number, so that user typing it and immediately clicking "Insert" would not see the
+// warning.
+// Since the notification is called in weld::Entry context, we can only rely on what's available for
+// used weld::Entry's notification; specifically, we have to call spin buttons' get_text() instead
+// of get_value(), because the latter is not guaranteed to return an up-to-date value at this point
+// (depends on vcl plugin used).
+IMPL_LINK( SwInsTableDlg, ModifyRowCol, weld::Entry&, rEdit, void )
 {
-    if(&rEdit == m_xColNF.get())
+    sal_Int64 nRow = m_xRowSpinButton->get_text().toInt64();
+    sal_Int64 nCol = m_xColSpinButton->get_text().toInt64();
+    if (nRow > 255)
+    {
+        m_xRowSpinButton->set_message_type(weld::EntryMessageType::Warning);
+        m_xWarning->set_visible(true);
+    }
+    else
+    {
+        m_xRowSpinButton->set_message_type(weld::EntryMessageType::Normal);
+    }
+    if (nCol > 63)
     {
-        sal_Int64 nCol = m_xColNF->get_value();
-        if(!nCol)
-            nCol = 1;
-        m_xRowNF->set_max(ROW_COL_PROD/nCol);
+        m_xColSpinButton->set_message_type(weld::EntryMessageType::Warning);
+        m_xWarning->set_visible(true);
     }
     else
     {
-        sal_Int64 nRow = m_xRowNF->get_value();
+        m_xColSpinButton->set_message_type(weld::EntryMessageType::Normal);
+    }
+    if (nRow <= 255 && nCol <= 63)
+    {
+        m_xWarning->set_visible(false);
+    }
+    if (&rEdit != m_xColSpinButton.get())
+    {
         if(!nRow)
             nRow = 1;
-        m_xColNF->set_max(ROW_COL_PROD/nRow);
 
         // adjust depending NF for repeated rows
         sal_Int64 nMax = ( nRow == 1 )? 1 : nRow - 1 ;
diff --git a/sw/source/uibase/inc/instable.hxx b/sw/source/uibase/inc/instable.hxx
index 05c02af5c2a8..3070dcccbd54 100644
--- a/sw/source/uibase/inc/instable.hxx
+++ b/sw/source/uibase/inc/instable.hxx
@@ -48,8 +48,9 @@ class SwInsTableDlg : public SfxDialogController
     AutoFormatPreview m_aWndPreview;
 
     std::unique_ptr<weld::Entry> m_xNameEdit;
-    std::unique_ptr<weld::SpinButton> m_xColNF;
-    std::unique_ptr<weld::SpinButton> m_xRowNF;
+    std::unique_ptr<weld::Label> m_xWarning;
+    std::unique_ptr<weld::SpinButton> m_xColSpinButton;
+    std::unique_ptr<weld::SpinButton> m_xRowSpinButton;
     std::unique_ptr<weld::CheckButton> m_xHeaderCB;
     std::unique_ptr<weld::CheckButton> m_xRepeatHeaderCB;
     std::unique_ptr<weld::SpinButton> m_xRepeatHeaderNF;
@@ -68,7 +69,7 @@ class SwInsTableDlg : public SfxDialogController
     DECL_LINK(TextFilterHdl, OUString&, bool);
     DECL_LINK(SelFormatHdl, weld::TreeView&, void);
     DECL_LINK(ModifyName, weld::Entry&, void);
-    DECL_LINK(ModifyRowCol, weld::SpinButton&, void);
+    DECL_LINK(ModifyRowCol, weld::Entry&, void);
     DECL_LINK(OKHdl, weld::Button&, void);
     DECL_LINK(CheckBoxHdl, weld::ToggleButton&, void);
     DECL_LINK(RepeatHeaderCheckBoxHdl, weld::ToggleButton&, void);
diff --git a/sw/uiconfig/swriter/ui/inserttable.ui b/sw/uiconfig/swriter/ui/inserttable.ui
index d59e4757a6bf..3e5bd06258ea 100644
--- a/sw/uiconfig/swriter/ui/inserttable.ui
+++ b/sw/uiconfig/swriter/ui/inserttable.ui
@@ -4,14 +4,14 @@
   <requires lib="gtk+" version="3.20"/>
   <object class="GtkAdjustment" id="adjustment1">
     <property name="lower">1</property>
-    <property name="upper">99</property>
+    <property name="upper">2000000</property>
     <property name="value">2</property>
     <property name="step_increment">1</property>
     <property name="page_increment">10</property>
   </object>
   <object class="GtkAdjustment" id="adjustment2">
     <property name="lower">1</property>
-    <property name="upper">99</property>
+    <property name="upper">2000000</property>
     <property name="value">2</property>
     <property name="step_increment">1</property>
     <property name="page_increment">10</property>
@@ -238,7 +238,18 @@
                             <property name="left_attach">3</property>
                             <property name="top_attach">1</property>
                           </packing>
-                        </child>
+                          </child>
+                          <child>
+                            <object class="GtkLabel" id="lbwarning">
+                              <property name="can_focus">False</property>
+                              <property name="label" translatable="yes" context="inserttable|lbwarning">Warning : Large tables may adversely affect performance and compatibility</property>
+                            </object>
+                            <packing>
+                              <property name="left_attach">0</property>
+                              <property name="top_attach">2</property>
+                              <property name="width">4</property>
+                            </packing>
+                          </child>
                       </object>
                     </child>
                   </object>


More information about the Libreoffice-commits mailing list