[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