summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarkus Mohrhard <markus.mohrhard@googlemail.com>2013-09-27 17:28:47 +0200
committerMarkus Mohrhard <markus.mohrhard@googlemail.com>2013-09-27 17:43:51 +0200
commit93d22efb334ad85fd02deb83ec1baf538cf0cba3 (patch)
tree9c91adde251c5edbdf24e2c467750a475bc3ef37
parent690228ad4dd4cf10ad6292686d4aad8dcc9e2793 (diff)
ignore hidden row/columns when navigating, fdo#45020
Change-Id: I597d7dbef07479f66894c7fce5ee21f340b43120
-rw-r--r--sc/source/ui/view/tabview2.cxx56
1 files changed, 48 insertions, 8 deletions
diff --git a/sc/source/ui/view/tabview2.cxx b/sc/source/ui/view/tabview2.cxx
index 4566805ed4b2..bcce76ed94fb 100644
--- a/sc/source/ui/view/tabview2.cxx
+++ b/sc/source/ui/view/tabview2.cxx
@@ -79,18 +79,38 @@ void moveCursorByProtRule(
{
for (SCCOL i = 0; i < nMovX && rCol < MAXCOL; ++i)
{
- if (!isCellQualified(pDoc, rCol+1, rRow, nTab, bSelectLocked, bSelectUnlocked))
+ SCCOL nNewUnhiddenCol = rCol + 1;
+ SCCOL nEndCol = 0;
+ while(pDoc->ColHidden(nNewUnhiddenCol, nTab, NULL, &nEndCol))
+ {
+ if(nNewUnhiddenCol >= MAXCOL)
+ return;
+
+ nNewUnhiddenCol = nEndCol +1;
+ }
+
+ if (!isCellQualified(pDoc, nNewUnhiddenCol, rRow, nTab, bSelectLocked, bSelectUnlocked))
break;
- ++rCol;
+ rCol = nNewUnhiddenCol;
}
}
else if (nMovX < 0)
{
for (SCCOL i = 0; i > nMovX && rCol > 0; --i)
{
- if (!isCellQualified(pDoc, rCol-1, rRow, nTab, bSelectLocked, bSelectUnlocked))
+ SCCOL nNewUnhiddenCol = rCol - 1;
+ SCCOL nStartCol = 0;
+ while(pDoc->ColHidden(nNewUnhiddenCol, nTab, &nStartCol))
+ {
+ if(nNewUnhiddenCol <= 0)
+ return;
+
+ nNewUnhiddenCol = nStartCol - 1;
+ }
+
+ if (!isCellQualified(pDoc, nNewUnhiddenCol, rRow, nTab, bSelectLocked, bSelectUnlocked))
break;
- --rCol;
+ rCol = nNewUnhiddenCol;
}
}
@@ -98,18 +118,38 @@ void moveCursorByProtRule(
{
for (SCROW i = 0; i < nMovY && rRow < MAXROW; ++i)
{
- if (!isCellQualified(pDoc, rCol, rRow+1, nTab, bSelectLocked, bSelectUnlocked))
+ SCROW nNewUnhiddenRow = rRow + 1;
+ SCROW nEndRow = 0;
+ while(pDoc->RowHidden(nNewUnhiddenRow, nTab, NULL, &nEndRow))
+ {
+ if(nNewUnhiddenRow >= MAXROW)
+ return;
+
+ nNewUnhiddenRow = nEndRow + 1;
+ }
+
+ if (!isCellQualified(pDoc, rCol, nNewUnhiddenRow, nTab, bSelectLocked, bSelectUnlocked))
break;
- ++rRow;
+ rRow = nNewUnhiddenRow;
}
}
else if (nMovY < 0)
{
for (SCROW i = 0; i > nMovY && rRow > 0; --i)
{
- if (!isCellQualified(pDoc, rCol, rRow-1, nTab, bSelectLocked, bSelectUnlocked))
+ SCROW nNewUnhiddenRow = rRow - 1;
+ SCROW nStartRow = 0;
+ while(pDoc->RowHidden(nNewUnhiddenRow, nTab, &nStartRow))
+ {
+ if(nNewUnhiddenRow <= 0)
+ return;
+
+ nNewUnhiddenRow = nStartRow - 1;
+ }
+
+ if (!isCellQualified(pDoc, rCol, nNewUnhiddenRow, nTab, bSelectLocked, bSelectUnlocked))
break;
- --rRow;
+ rRow = nNewUnhiddenRow;
}
}
}