diff options
author | Markus Mohrhard <markus.mohrhard@googlemail.com> | 2013-09-27 17:28:47 +0200 |
---|---|---|
committer | Markus Mohrhard <markus.mohrhard@googlemail.com> | 2013-09-27 17:43:51 +0200 |
commit | 93d22efb334ad85fd02deb83ec1baf538cf0cba3 (patch) | |
tree | 9c91adde251c5edbdf24e2c467750a475bc3ef37 | |
parent | 690228ad4dd4cf10ad6292686d4aad8dcc9e2793 (diff) |
ignore hidden row/columns when navigating, fdo#45020
Change-Id: I597d7dbef07479f66894c7fce5ee21f340b43120
-rw-r--r-- | sc/source/ui/view/tabview2.cxx | 56 |
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; } } } |