summaryrefslogtreecommitdiff
path: root/sc/source/ui
diff options
context:
space:
mode:
authorKohei Yoshida <kyoshida@novell.com>2010-11-29 19:20:22 -0500
committerKohei Yoshida <kyoshida@novell.com>2010-11-29 19:20:22 -0500
commit84ab11c230846101b6c77efc88cdf4d25f2a3a87 (patch)
tree4d7eea32c745845204a53b25d95072ca32de9b4b /sc/source/ui
parent0723039f40ca98a5e80ff8d1f9981428becc03b4 (diff)
Re-calculate visible range when switching sheets.
Visible range of the current sheet is used to decide whether or not to render cell cursor. Failing to do that was causing the cursor to disappear when switching sheets while the cursor on the current sheet was invisible. (fdo#31753)
Diffstat (limited to 'sc/source/ui')
-rw-r--r--sc/source/ui/inc/gridwin.hxx1
-rw-r--r--sc/source/ui/inc/tabview.hxx1
-rw-r--r--sc/source/ui/view/gridwin2.cxx16
-rw-r--r--sc/source/ui/view/gridwin4.cxx40
-rw-r--r--sc/source/ui/view/tabview.cxx11
-rw-r--r--sc/source/ui/view/tabview3.cxx8
6 files changed, 50 insertions, 27 deletions
diff --git a/sc/source/ui/inc/gridwin.hxx b/sc/source/ui/inc/gridwin.hxx
index f847dd919791..294287aada3e 100644
--- a/sc/source/ui/inc/gridwin.hxx
+++ b/sc/source/ui/inc/gridwin.hxx
@@ -394,6 +394,7 @@ public:
void CheckNeedsRepaint();
void UpdateDPFromFieldPopupMenu();
+ void UpdateVisibleRange();
// #114409#
void CursorChanged();
diff --git a/sc/source/ui/inc/tabview.hxx b/sc/source/ui/inc/tabview.hxx
index 3bfc8096c3a5..5ff45c883668 100644
--- a/sc/source/ui/inc/tabview.hxx
+++ b/sc/source/ui/inc/tabview.hxx
@@ -210,6 +210,7 @@ protected:
void ZoomChanged();
void UpdateShow();
+ void UpdateVisibleRange();
void GetBorderSize( SvBorder& rBorder, const Size& rSize );
void ResetDrawDragMode();
diff --git a/sc/source/ui/view/gridwin2.cxx b/sc/source/ui/view/gridwin2.cxx
index 4aa2b1476759..dd19b66fcf25 100644
--- a/sc/source/ui/view/gridwin2.cxx
+++ b/sc/source/ui/view/gridwin2.cxx
@@ -594,6 +594,22 @@ void ScGridWindow::UpdateDPFromFieldPopupMenu()
aFunc.DataPilotUpdate(pDPObj, &aNewDPObj, true, false);
}
+void ScGridWindow::UpdateVisibleRange()
+{
+ SCCOL nPosX = pViewData->GetPosX(eHWhich);
+ SCROW nPosY = pViewData->GetPosY(eVWhich);
+ SCCOL nXRight = nPosX + pViewData->VisibleCellsX(eHWhich);
+ if (nXRight > MAXCOL) nXRight = MAXCOL;
+ SCROW nYBottom = nPosY + pViewData->VisibleCellsY(eVWhich);
+ if (nYBottom > MAXROW) nYBottom = MAXROW;
+
+ // Store the current visible range.
+ maVisibleRange.mnCol1 = nPosX;
+ maVisibleRange.mnCol2 = nXRight;
+ maVisibleRange.mnRow1 = nPosY;
+ maVisibleRange.mnRow2 = nYBottom;
+}
+
void ScGridWindow::DPMouseMove( const MouseEvent& rMEvt )
{
DPTestMouse( rMEvt, TRUE );
diff --git a/sc/source/ui/view/gridwin4.cxx b/sc/source/ui/view/gridwin4.cxx
index 136522fec177..1c5ec44dd44d 100644
--- a/sc/source/ui/view/gridwin4.cxx
+++ b/sc/source/ui/view/gridwin4.cxx
@@ -432,32 +432,26 @@ void ScGridWindow::Draw( SCCOL nX1, SCROW nY1, SCCOL nX2, SCROW nY2, ScUpdateMod
DBG_ASSERT( ValidCol(nX2) && ValidRow(nY2), "GridWin Draw Bereich zu gross" );
- SCCOL nPosX = pViewData->GetPosX( eHWhich );
- SCROW nPosY = pViewData->GetPosY( eVWhich );
- if (nX2 < nPosX || nY2 < nPosY)
- return; // unsichtbar
- if (nX1 < nPosX) nX1 = nPosX;
- if (nY1 < nPosY) nY1 = nPosY;
+ UpdateVisibleRange();
- SCCOL nXRight = nPosX + pViewData->VisibleCellsX(eHWhich);
- if (nXRight > MAXCOL) nXRight = MAXCOL;
- SCROW nYBottom = nPosY + pViewData->VisibleCellsY(eVWhich);
- if (nYBottom > MAXROW) nYBottom = MAXROW;
+ if (nX2 < maVisibleRange.mnCol1 || nY2 < maVisibleRange.mnRow1)
+ return;
+ // unsichtbar
+ if (nX1 < maVisibleRange.mnCol1)
+ nX1 = maVisibleRange.mnCol1;
+ if (nY1 < maVisibleRange.mnRow1)
+ nY1 = maVisibleRange.mnRow1;
- // Store the current visible range.
- maVisibleRange.mnCol1 = nPosX;
- maVisibleRange.mnCol2 = nXRight;
- maVisibleRange.mnRow1 = nPosY;
- maVisibleRange.mnRow2 = nYBottom;
+ if (nX1 > maVisibleRange.mnCol2 || nY1 > maVisibleRange.mnRow2)
+ return;
- if (nX1 > nXRight || nY1 > nYBottom)
- return; // unsichtbar
- if (nX2 > nXRight) nX2 = nXRight;
- if (nY2 > nYBottom) nY2 = nYBottom;
+ if (nX2 > maVisibleRange.mnCol2)
+ nX2 = maVisibleRange.mnCol2;
+ if (nY2 > maVisibleRange.mnRow2)
+ nY2 = maVisibleRange.mnRow2;
- if ( eMode != SC_UPDATE_MARKS )
- if (nX2 < nXRight)
- nX2 = nXRight; // zum Weiterzeichnen
+ if ( eMode != SC_UPDATE_MARKS && nX2 < maVisibleRange.mnCol2)
+ nX2 = maVisibleRange.mnCol2; // zum Weiterzeichnen
// ab hier kein return mehr
@@ -475,7 +469,7 @@ void ScGridWindow::Draw( SCCOL nX1, SCROW nY1, SCCOL nX2, SCROW nY2, ScUpdateMod
long nLayoutSign = bLayoutRTL ? -1 : 1;
if ( bLayoutRTL )
{
- long nEndPixel = pViewData->GetScrPos( nX2+1, nPosY, eWhich ).X();
+ long nEndPixel = pViewData->GetScrPos( nX2+1, maVisibleRange.mnRow1, eWhich ).X();
nMirrorWidth = aScrPos.X() - nEndPixel;
aScrPos.X() = nEndPixel + 1;
}
diff --git a/sc/source/ui/view/tabview.cxx b/sc/source/ui/view/tabview.cxx
index 01877252b078..195015c72c54 100644
--- a/sc/source/ui/view/tabview.cxx
+++ b/sc/source/ui/view/tabview.cxx
@@ -1691,6 +1691,17 @@ void ScTabView::UpdateShow()
//! neue Gridwindows eintragen
}
+void ScTabView::UpdateVisibleRange()
+{
+ for (int i = 0; i < 4; ++i)
+ {
+ if (!pGridWin[i])
+ continue;
+
+ pGridWin[i]->UpdateVisibleRange();
+ }
+}
+
// --- Splitter --------------------------------------------------------
IMPL_LINK( ScTabView, SplitHdl, Splitter*, pSplitter )
diff --git a/sc/source/ui/view/tabview3.cxx b/sc/source/ui/view/tabview3.cxx
index bffd30928982..e963dca31f2d 100644
--- a/sc/source/ui/view/tabview3.cxx
+++ b/sc/source/ui/view/tabview3.cxx
@@ -1638,13 +1638,13 @@ void ScTabView::SetTabNo( SCTAB nTab, BOOL bNew, BOOL bExtendSelection )
if ( bRefMode ) // hide EditView if necessary (after aViewData.SetTabNo !)
{
- for ( USHORT i=0; i<4; i++ )
- if ( pGridWin[i] )
- if ( pGridWin[i]->IsVisible() )
- pGridWin[i]->UpdateEditViewPos();
+ for (USHORT i = 0; i < 4; ++i)
+ if (pGridWin[i] && pGridWin[i]->IsVisible())
+ pGridWin[i]->UpdateEditViewPos();
}
TabChanged(); // DrawView
+ UpdateVisibleRange();
aViewData.GetViewShell()->WindowChanged(); // falls das aktive Fenster anders ist
if ( !bUnoRefDialog )