summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTünde Tóth <toth.tunde@nisz.hu>2021-02-15 13:45:54 +0100
committerLászló Németh <nemeth@numbertext.org>2021-02-17 13:20:54 +0100
commitf89f806c88a8374e1dfd1d09747801377b8c0f36 (patch)
tree768186c8559d41271bf9d2103c4c41a26b4bc124
parent7943752b9e85c44460f3663560b086b6fc26f91e (diff)
tdf#36466 calc UI: add option to Select Visible Cells Only
Implement "Select Visible Cells Only" option to deselect the cells of the hidden rows in the actual selection. Change-Id: Ifa5a5c3aeeb45a7960a387d91b176cc66733ab10 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/110937 Tested-by: László Németh <nemeth@numbertext.org> Reviewed-by: László Németh <nemeth@numbertext.org>
-rw-r--r--officecfg/registry/data/org/openoffice/Office/UI/CalcCommands.xcu8
-rw-r--r--sc/inc/sc.hrc3
-rw-r--r--sc/sdi/cellsh.sdi1
-rw-r--r--sc/sdi/scalc.sdi17
-rw-r--r--sc/source/ui/view/cellsh1.cxx38
-rw-r--r--sc/uiconfig/scalc/menubar/menubar.xml1
6 files changed, 67 insertions, 1 deletions
diff --git a/officecfg/registry/data/org/openoffice/Office/UI/CalcCommands.xcu b/officecfg/registry/data/org/openoffice/Office/UI/CalcCommands.xcu
index e247c92524d0..919237963507 100644
--- a/officecfg/registry/data/org/openoffice/Office/UI/CalcCommands.xcu
+++ b/officecfg/registry/data/org/openoffice/Office/UI/CalcCommands.xcu
@@ -585,6 +585,14 @@
<value>1</value>
</prop>
</node>
+ <node oor:name=".uno:SelectVisibleCells" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="en-US">Select Visible Cells Only</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
<node oor:name=".uno:ConditionalFormatMenu" oor:op="replace">
<prop oor:name="Label" oor:type="xs:string">
<value xml:lang="en-US">C~onditional</value>
diff --git a/sc/inc/sc.hrc b/sc/inc/sc.hrc
index 4f7ed6980636..55be197e79c4 100644
--- a/sc/inc/sc.hrc
+++ b/sc/inc/sc.hrc
@@ -603,7 +603,8 @@
#define FID_DELETE_ALL_NOTES (SID_NEW_SLOTS+104)
#define SID_SCATTR_CELLPROTECTION (SID_NEW_SLOTS+105)
#define SID_SELECT_UNPROTECTED_CELLS (SID_NEW_SLOTS+106)
-#define SID_CURRENT_FORMULA_RANGE (SID_NEW_SLOTS+107)
+#define SID_SELECT_VISIBLE_CELLS (SID_NEW_SLOTS+107)
+#define SID_CURRENT_FORMULA_RANGE (SID_NEW_SLOTS+108)
// idl parameter
#define SID_SORT_BYROW (SC_PARAM_START)
diff --git a/sc/sdi/cellsh.sdi b/sc/sdi/cellsh.sdi
index de9f537de767..cbc20f2f8959 100644
--- a/sc/sdi/cellsh.sdi
+++ b/sc/sdi/cellsh.sdi
@@ -230,6 +230,7 @@ interface CellSelection
SID_DEC_INDENT [ ExecMethod = ExecuteEdit; StateMethod = GetState; ]
SID_INC_INDENT [ ExecMethod = ExecuteEdit; StateMethod = GetState; ]
SID_SELECT_UNPROTECTED_CELLS [ ExecMethod = ExecuteEdit;]
+ SID_SELECT_VISIBLE_CELLS [ ExecMethod = ExecuteEdit;]
SID_CURRENT_FORMULA_RANGE [ ExecMethod = ExecuteEdit;]
SID_THESAURUS [ ExecMethod = ExecuteEdit; StateMethod = GetCellState; ]
diff --git a/sc/sdi/scalc.sdi b/sc/sdi/scalc.sdi
index 47b429465197..fae369fa24a8 100644
--- a/sc/sdi/scalc.sdi
+++ b/sc/sdi/scalc.sdi
@@ -4453,6 +4453,23 @@ SfxVoidItem SelectUnprotectedCells SID_SELECT_UNPROTECTED_CELLS
GroupId = SfxGroupId::Edit;
]
+SfxVoidItem SelectVisibleCells SID_SELECT_VISIBLE_CELLS
+()
+[
+ AutoUpdate = FALSE,
+ FastCall = FALSE,
+ ReadOnlyDoc = TRUE,
+ Toggle = FALSE,
+ Container = FALSE,
+ RecordAbsolute = FALSE,
+ RecordPerSet;
+
+ AccelConfig = FALSE,
+ MenuConfig = TRUE,
+ ToolBoxConfig = FALSE,
+ GroupId = SfxGroupId::Edit;
+]
+
SfxVoidItem CurrentFormulaRange SID_CURRENT_FORMULA_RANGE
(SfxInt32Item StartCol FN_PARAM_1,SfxInt32Item StartRow FN_PARAM_2,SfxInt32Item EndCol FN_PARAM_3,SfxInt32Item EndRow FN_PARAM_4, SfxInt32Item Table FN_PARAM_5)
[
diff --git a/sc/source/ui/view/cellsh1.cxx b/sc/source/ui/view/cellsh1.cxx
index 6b1c50b3e011..f529e34b6140 100644
--- a/sc/source/ui/view/cellsh1.cxx
+++ b/sc/source/ui/view/cellsh1.cxx
@@ -2768,6 +2768,44 @@ void ScCellShell::ExecuteEdit( SfxRequest& rReq )
}
break;
+ case SID_SELECT_VISIBLE_CELLS:
+ {
+ ScViewData& rData = GetViewData();
+ ScMarkData& rMark = rData.GetMarkData();
+ ScDocument& rDoc = rData.GetDocument();
+
+ rMark.MarkToMulti();
+
+ ScRange aMultiArea;
+ rMark.GetMultiMarkArea(aMultiArea);
+ SCCOL nStartCol = aMultiArea.aStart.Col();
+ SCROW nStartRow = aMultiArea.aStart.Row();
+ SCCOL nEndCol = aMultiArea.aEnd.Col();
+ SCROW nEndRow = aMultiArea.aEnd.Row();
+
+ bool bChanged = false;
+ for (const SCTAB& nTab : rMark)
+ {
+ for (SCROW nRow = nStartRow; nRow <= nEndRow; ++nRow)
+ {
+ SCROW nLastRow = nRow;
+ if (rDoc.RowHidden(nRow, nTab, nullptr, &nLastRow))
+ {
+ rMark.SetMultiMarkArea(
+ ScRange(nStartCol, nRow, nTab, nEndCol, nLastRow, nTab), false);
+ bChanged = true;
+ nRow = nLastRow;
+ }
+ }
+ }
+
+ if (bChanged && !rMark.HasAnyMultiMarks())
+ rMark.ResetMark();
+
+ rMark.MarkToSimple();
+ }
+ break;
+
case SID_CURRENT_FORMULA_RANGE:
{
const SfxInt32Item* param1 = rReq.GetArg<SfxInt32Item>(FN_PARAM_1);
diff --git a/sc/uiconfig/scalc/menubar/menubar.xml b/sc/uiconfig/scalc/menubar/menubar.xml
index a8089440f73c..f413f7a6b627 100644
--- a/sc/uiconfig/scalc/menubar/menubar.xml
+++ b/sc/uiconfig/scalc/menubar/menubar.xml
@@ -110,6 +110,7 @@
<menu:menuitem menu:id=".uno:SelectColumn"/>
<menu:menuitem menu:id=".uno:SelectData"/>
<menu:menuitem menu:id=".uno:SelectUnprotectedCells"/>
+ <menu:menuitem menu:id=".uno:SelectVisibleCells"/>
</menu:menupopup>
</menu:menu>
<menu:menuseparator/>