34 #include <osl/diagnose.h>
42 #include <overlayobject.hxx>
50 #include <inputwin.hxx>
66 #include <LibreOfficeKit/LibreOfficeKitEnums.h>
69 #include <com/sun/star/chart2/data/HighlightedRange.hpp>
74 ScRange lcl_getSubRangeByIndex(
const ScRange& rRange, sal_Int32 nIndex )
81 if( (nWidth > 0) && (nHeight > 0) && (nDepth > 0) )
84 sal_Int32 nArea = nWidth * nHeight;
85 aResult.IncCol( static_cast< SCCOL >( nIndex % nWidth ) );
86 aResult.IncRow( static_cast< SCROW >( (nIndex % nArea) / nWidth ) );
87 aResult.IncTab( static_cast< SCTAB >( nIndex / nArea ) );
88 if( !rRange.
In( aResult ) )
101 DBG_ASSERT(nTotalWindows == 0,
"ScExtraEditViewManager dtor: some out window has not yet been removed!");
106 Apply<Adder>(pViewShell, eWhich);
111 Apply<Remover>(pViewShell, eWhich);
115 template<ScExtraEditViewManager::ModifierTagType ModifierTag>
119 if (pOtherViewShell ==
nullptr || pOtherViewShell == mpThisViewShell)
123 if (mpOtherEditView !=
nullptr)
125 DBG_ASSERT(mpOtherEditView->GetEditEngine(),
"Edit view has no valid engine.");
126 for (
int i = 0;
i < 4; ++
i)
131 Modifier<ModifierTag>(pWin);
137 template<ScExtraEditViewManager::ModifierTagType ModifierTag>
141 SAL_WARN(
"sc",
"ScExtraEditViewManager::Modifier<ModifierTag>: non-specialized version should not be invoked.");
145 void ScExtraEditViewManager::Modifier<ScExtraEditViewManager::Adder>(
ScGridWindow* pWin)
147 if (mpOtherEditView->AddOtherViewWindow(pWin))
152 void ScExtraEditViewManager::Modifier<ScExtraEditViewManager::Remover>(
ScGridWindow* pWin)
154 if (mpOtherEditView->RemoveOtherViewWindow(pWin))
163 SCTAB nTab = aViewData.GetTabNo();
166 bool bRefMode =
SC_MOD()->IsFormulaMode();
179 DoneBlockMode( bControl );
180 aViewData.ResetOldCursor();
181 SetCursor( nPosX, nPosY );
189 ScMarkType eMarkType = aViewData.GetSimpleArea(aMarkRange);
192 for (sal_uInt16
i = 0;
i < 4;
i++)
194 if (pGridWin[
i] && pGridWin[
i]->IsVisible())
195 pGridWin[
i]->UpdateAutoFillMark( bMarked, aMarkRange );
198 for (sal_uInt16
i = 0;
i < 2;
i++)
200 if (pColBar[
i] && pColBar[
i]->IsVisible())
202 if (pRowBar[
i] && pRowBar[
i]->IsVisible())
209 CheckSelectionTransfer();
214 if (pGridWin[eWhich])
215 pGridWin[eWhich]->FakeButtonUp();
222 if (pWin && pWin->IsVisible())
236 if (pWin && pWin->IsVisible())
239 pWin->CursorChanged();
246 pGridWin[aViewData.GetActivePart()]->ShowCursor();
247 pGridWin[aViewData.GetActivePart()]->CursorChanged();
259 rBindings.
Invalidate( SID_ATTR_CHAR_FONTHEIGHT );
263 rBindings.
Invalidate( SID_ATTR_CHAR_POSTURE );
264 rBindings.
Invalidate( SID_ATTR_CHAR_UNDERLINE );
270 rBindings.
Invalidate( SID_ATTR_CHAR_OVERLINE );
272 rBindings.
Invalidate( SID_ATTR_CHAR_KERNING );
275 rBindings.
Invalidate( SID_ATTR_CHAR_STRIKEOUT );
276 rBindings.
Invalidate( SID_ATTR_CHAR_SHADOWED );
278 rBindings.
Invalidate( SID_ATTR_PARA_ADJUST_LEFT );
279 rBindings.
Invalidate( SID_ATTR_PARA_ADJUST_RIGHT );
280 rBindings.
Invalidate( SID_ATTR_PARA_ADJUST_BLOCK );
281 rBindings.
Invalidate( SID_ATTR_PARA_ADJUST_CENTER);
282 rBindings.
Invalidate( SID_NUMBER_TYPE_FORMAT);
293 rBindings.
Invalidate( SID_SCATTR_CELLPROTECTION );
299 rBindings.
Invalidate( SID_ATTR_ALIGN_INDENT );
302 rBindings.
Invalidate( SID_ATTR_BORDER_OUTER );
303 rBindings.
Invalidate( SID_ATTR_BORDER_INNER );
304 rBindings.
Invalidate( SID_ATTR_BORDER_DIAG_TLBR );
305 rBindings.
Invalidate( SID_ATTR_BORDER_DIAG_BLTR );
306 rBindings.
Invalidate( SID_NUMBER_TYPE_FORMAT );
311 rBindings.
Invalidate( SID_ATTR_ALIGN_LINEBREAK );
314 rBindings.
Invalidate( SID_TEXTDIRECTION_LEFT_TO_RIGHT );
315 rBindings.
Invalidate( SID_TEXTDIRECTION_TOP_TO_BOTTOM );
316 rBindings.
Invalidate( SID_ATTR_PARA_LEFT_TO_RIGHT );
317 rBindings.
Invalidate( SID_ATTR_PARA_RIGHT_TO_LEFT );
320 rBindings.
Invalidate( SID_ALIGN_ANY_HDEFAULT );
322 rBindings.
Invalidate( SID_ALIGN_ANY_HCENTER );
324 rBindings.
Invalidate( SID_ALIGN_ANY_JUSTIFIED );
325 rBindings.
Invalidate( SID_ALIGN_ANY_VDEFAULT );
327 rBindings.
Invalidate( SID_ALIGN_ANY_VCENTER );
331 rBindings.
Invalidate( SID_NUMBER_SCIENTIFIC );
343 void collectUIInformation(
const std::map<OUString, OUString>& aParameters)
346 aDescription.
aID =
"grid_window";
347 aDescription.
aAction =
"SELECT";
349 aDescription.
aParent =
"MainWindow";
350 aDescription.
aKeyWord =
"ScGridWinUIObject";
363 SCCOL nOldX = aViewData.GetCurX();
364 SCROW nOldY = aViewData.GetCurY();
374 if ( !(nPosX != nOldX || nPosY != nOldY || bNew) )
379 if ( aViewData.HasEditView( aViewData.GetActivePart() ) && !bRefMode )
386 aViewData.SetCurX( nPosX );
387 aViewData.SetCurY( nPosY );
394 collectUIInformation({{
"CELL", aCurrAddress}});
399 if (nPosX <= aViewData.GetMaxTiledCol() - 10 && nPosY <= aViewData.GetMaxTiledRow() - 25)
404 ScModelObj* pModelObj = pDocSh ? comphelper::getUnoTunnelImplementation<ScModelObj>( pDocSh->
GetModel() ) :
nullptr;
409 if (nPosX > aViewData.GetMaxTiledCol() - 10)
410 aViewData.SetMaxTiledCol(std::min<SCCOL>(std::max(nPosX, aViewData.GetMaxTiledCol()) + 10, rDoc.
MaxCol()));
412 if (nPosY > aViewData.GetMaxTiledRow() - 25)
413 aViewData.SetMaxTiledRow(std::min<SCROW>(std::max(nPosY, aViewData.GetMaxTiledRow()) + 25,
MAXTILEDROW));
430 if (aNewColArea.getWidth())
436 if (aNewRowArea.getHeight())
443 std::stringstream ss;
444 ss << aNewSize.
Width() <<
", " << aNewSize.
Height();
445 OString sSize = ss.str().c_str();
446 ScModelObj* pModel = comphelper::getUnoTunnelImplementation<ScModelObj>(aViewData.GetViewShell()->GetCurrentDocument());
465 if (!xDlgController || !xDlgController->getDialog()->get_visible())
474 if ( !aViewData.IsActive() )
494 pNew->CopyToPrimarySelection();
504 collectUIInformation({{
"RANGE", aStartAddress +
":" + aEndAddress}});
518 rBindings.
Invalidate( SID_HYPERLINK_GETLINK );
523 aViewData.GetViewShell()->UpdateInputHandler();
528 pTabControl->SetProtectionSymbol( static_cast<sal_uInt16>(nTab)+1, bProtect);
537 if (xController.is())
539 ScTabViewObj* pImp = comphelper::getUnoTunnelImplementation<ScTabViewObj>( xController );
545 UpdateAutoFillMark(bFromPaste);
590 rBindings.
Invalidate( SID_PASTE_UNFORMATTED );
595 rBindings.
Invalidate( FID_INS_COLUMNS_BEFORE );
597 rBindings.
Invalidate( FID_INS_COLUMNS_AFTER );
606 rBindings.
Invalidate( SID_CELL_FORMAT_RESET );
611 rBindings.
Invalidate( SID_ENABLE_HYPHENATION );
620 rBindings.
Invalidate( SID_SELECT_UNPROTECTED_CELLS );
622 if (aViewData.GetViewShell()->HasAccessibilityObjects())
623 aViewData.GetViewShell()->BroadcastAccessibility(
SfxHint(SfxHintId::ScAccCursorChanged));
625 CellContentChanged();
630 bool bRefMode =
SC_MOD()->IsFormulaMode();
632 aViewData.GetDocShell()->Broadcast(
SfxHint( SfxHintId::ScKillEditView ) );
638 aViewData.GetCurX(), aViewData.GetCurY(), aViewData.GetTabNo() );
639 aViewData.GetViewShell()->SetPivotShell(bDP);
650 Point calcHintWindowPosition(
651 const Point& rCellPos,
const Size& rCellSize,
const Size& rFrameWndSize,
const Size& rHintWndSize)
662 if (nMRight - nMargin >= rHintWndSize.
Width())
668 Point aPos = rCellPos;
669 aPos.AdjustX(rCellSize.
Width() + nMargin );
670 if (aPos.Y() + rHintWndSize.
Height() > rFrameWndSize.
Height())
673 aPos.setY( rFrameWndSize.
Height() - rHintWndSize.
Height() );
679 if (nMBottom - nMargin >= rHintWndSize.
Height())
682 if (rFrameWndSize.
Width() >= rHintWndSize.
Width())
685 Point aPos = rCellPos;
686 aPos.AdjustY(rCellSize.
Height() + nMargin );
687 if (aPos.X() + rHintWndSize.
Width() > rFrameWndSize.
Width())
690 aPos.setX( rFrameWndSize.
Width() - rHintWndSize.
Width() );
696 if (nMLeft - nMargin >= rHintWndSize.
Width())
702 Point aPos = rCellPos;
703 aPos.AdjustX( -(rHintWndSize.
Width() + nMargin) );
704 if (aPos.Y() + rHintWndSize.
Height() > rFrameWndSize.
Height())
707 aPos.setY( rFrameWndSize.
Height() - rHintWndSize.
Height() );
713 if (nMTop - nMargin >= rHintWndSize.
Height())
716 if (rFrameWndSize.
Width() >= rHintWndSize.
Width())
719 Point aPos = rCellPos;
720 aPos.AdjustY( -(rHintWndSize.
Height() + nMargin) );
721 if (aPos.X() + rHintWndSize.
Width() > rFrameWndSize.
Width())
724 aPos.setX( rFrameWndSize.
Width() - rHintWndSize.
Width() );
732 if (nMRight - nMargin >= rHintWndSize.
Width())
735 Point aPos = rCellPos;
736 aPos.AdjustX(nMargin + rCellSize.
Width() );
741 if (nMBottom - nMargin >= rHintWndSize.
Height())
744 Point aPos = rCellPos;
745 aPos.AdjustY(nMargin + rCellSize.
Height() );
750 if (nMLeft - nMargin >= rHintWndSize.
Width())
753 Point aPos = rCellPos;
754 aPos.AdjustX( -(rHintWndSize.
Width() + nMargin) );
759 if (nMTop - nMargin >= rHintWndSize.
Height())
762 Point aPos = rCellPos;
763 aPos.AdjustY( -(rHintWndSize.
Height() + nMargin) );
770 Point aPos = rCellPos;
771 aPos.AdjustX(rCellSize.
Width() );
781 mxInputHintOO.reset();
783 bool bListValButton =
false;
789 aViewData.GetTabNo(),
794 OSL_ENSURE(pData,
"ValidationData not found");
795 OUString aTitle, aMessage;
797 if ( pData && pData->
GetInput( aTitle, aMessage ) && !aMessage.isEmpty() )
799 ScSplitPos eWhich = aViewData.GetActivePart();
801 SCCOL nCol = aViewData.GetCurX();
802 SCROW nRow = aViewData.GetCurY();
803 Point aPos = aViewData.GetScrPos( nCol, nRow, eWhich );
806 if ( nCol >= aViewData.GetPosX(
WhichH(eWhich)) &&
807 nRow >= aViewData.GetPosY(
WhichV(eWhich)) &&
808 aPos.X() < aWinSize.
Width() && aPos.Y() < aWinSize.
Height() )
816 mxInputHintOO->append(std::unique_ptr<sdr::overlay::OverlayObject>(pOverlay));
821 aViewData.GetMergeSizePixel(nCol, nRow, nCellSizeX, nCellSizeY);
823 Point aHintPos = calcHintWindowPosition(
824 aPos,
Size(nCellSizeX,nCellSizeY), aWinSize, aHintWndSize);
831 if (!pWindow->IsVisible())
834 if (!xOverlayManager.is())
838 xOverlayManager->add(*pOverlay);
839 pWindow->updateLOKInputHelp(aTitle, aMessage);
848 std::unique_ptr<ScOverlayHint> pOtherOverlay(
new ScOverlayHint(aTitle, aMessage, aCommentColor, pFrameWin->GetFont()));
849 Point aFooPos(pWindow->PixelToLogic(aOtherPos, pWindow->GetDrawMapMode()));
850 pOtherOverlay->SetPos(aFooPos, pWindow->GetDrawMapMode());
851 xOverlayManager->add(*pOtherOverlay);
852 mxInputHintOO->append(std::move(pOtherOverlay));
861 aListValPos.
Set( aViewData.GetCurX(), aViewData.GetCurY(), aViewData.GetTabNo() );
862 bListValButton =
true;
868 if (pWin && pWin->IsVisible())
869 pWin->UpdateListValPos(bListValButton, aListValPos);
877 mxInputHintOO.reset();
892 if (xDlgController && xDlgController->getDialog()->get_visible())
893 return xDlgController->getDialog();
904 if (xDlgController && xDlgController->getDialog()->get_visible())
905 return xDlgController->getDialog();
919 ScSplitPos eActive = aViewData.GetActivePart();
922 bool bHFix = (aViewData.GetHSplitMode() ==
SC_SPLIT_FIX);
923 bool bVFix = (aViewData.GetVSplitMode() ==
SC_SPLIT_FIX);
924 if (bHFix && eActiveX ==
SC_SPLIT_LEFT && nCurX >= aViewData.GetFixPosX())
929 if (bVFix && eActiveY ==
SC_SPLIT_TOP && nCurY >= aViewData.GetFixPosY())
943 eAlign = aViewData.GetActivePart();
947 SCCOL nDeltaX = aViewData.GetPosX(eAlignX);
948 SCROW nDeltaY = aViewData.GetPosY(eAlignY);
949 SCCOL nSizeX = aViewData.VisibleCellsX(eAlignX);
950 SCROW nSizeY = aViewData.VisibleCellsY(eAlignY);
954 if ( nCurX >= 0 && nCurY >= 0 )
955 aViewData.GetMergeSizePixel( nCurX, nCurY, nCellSizeX, nCellSizeY );
957 nCellSizeX = nCellSizeY = 0;
958 Size aScrSize = aViewData.GetScrSize();
963 bool bForceNew =
false;
981 int x,
y, width, height;
987 if ( aDlgPixel.
Right() >= 0 && aDlgPixel.
Left() < aWinSize.
Width() )
989 if ( nCurX < nDeltaX || nCurX >= nDeltaX+nSizeX ||
990 nCurY < nDeltaY || nCurY >= nDeltaY+nSizeY )
995 Point aStart = aViewData.GetScrPos( nCurX, nCurY, eAlign );
997 aViewData.GetMergeSizePixel( nCurX, nCurY, nCSX, nCSY );
999 if ( aCursor.
IsOver( aDlgPixel ) )
1007 bool bBottom =
false;
1010 if ( nBotSpace > 0 && nBotSpace > nTopSpace )
1015 aViewData.GetPosFromPixel( 0,nDlgBot, eAlign, nWPosX, nWPosY );
1018 SCROW nDiff = nWPosY - nDeltaY;
1019 if ( nCurY >= nDiff )
1021 nSpaceY = nDlgBot + ( nBotSpace - nCellSizeY ) / 2;
1026 if ( !bBottom && nTopSpace > 0 )
1028 nSpaceY = ( nTopSpace - nCellSizeY ) / 2;
1035 SCCOL nNewDeltaX = nDeltaX;
1036 SCROW nNewDeltaY = nDeltaY;
1037 bool bDoLine =
false;
1042 if ( nCurX < nDeltaX || nCurX >= nDeltaX+nSizeX )
1044 nNewDeltaX = nCurX - aViewData.CellsAtX( nCurX, -1, eAlignX, static_cast<sal_uInt16>(nSpaceX) );
1047 nSizeX = aViewData.CellsAtX( nNewDeltaX, 1, eAlignX );
1049 if ( nCurY < nDeltaY || nCurY >= nDeltaY+nSizeY || bForceNew )
1051 nNewDeltaY = nCurY - aViewData.CellsAtY( nCurY, -1, eAlignY, static_cast<sal_uInt16>(nSpaceY) );
1054 nSizeY = aViewData.CellsAtY( nNewDeltaY, 1, eAlignY );
1064 if ( nCurX < nDeltaX || nCurX >= nDeltaX+nSizeX )
1066 nNewDeltaX = nDeltaX + nCurX - aViewData.GetCurX();
1069 nSizeX = aViewData.CellsAtX( nNewDeltaX, 1, eAlignX );
1071 if ( nCurY < nDeltaY || nCurY >= nDeltaY+nSizeY )
1073 nNewDeltaY = nDeltaY + nCurY - aViewData.GetCurY();
1076 nSizeY = aViewData.CellsAtY( nNewDeltaY, 1, eAlignY );
1081 if ( nCurX < nNewDeltaX || nCurX >= nNewDeltaX+nSizeX )
1083 nNewDeltaX = nCurX - (nSizeX / 2);
1086 nSizeX = aViewData.CellsAtX( nNewDeltaX, 1, eAlignX );
1088 if ( nCurY < nNewDeltaY || nCurY >= nNewDeltaY+nSizeY )
1090 nNewDeltaY = nCurY - (nSizeY / 2);
1093 nSizeY = aViewData.CellsAtY( nNewDeltaY, 1, eAlignY );
1102 OSL_FAIL(
"Wrong cursor mode");
1109 while ( nCurX >= nNewDeltaX+nSizeX )
1111 nNewDeltaX = nCurX-nSizeX+1;
1112 SCTAB nTab = aViewData.GetTabNo();
1115 nSizeX = aViewData.CellsAtX( nNewDeltaX, 1, eAlignX );
1117 while ( nCurY >= nNewDeltaY+nSizeY )
1119 nNewDeltaY = nCurY-nSizeY+1;
1120 SCTAB nTab = aViewData.GetTabNo();
1123 nSizeY = aViewData.CellsAtY( nNewDeltaY, 1, eAlignY );
1125 if ( nCurX < nNewDeltaX )
1127 if ( nCurY < nNewDeltaY )
1131 if ( nNewDeltaX != nDeltaX )
1132 nSizeX = aViewData.CellsAtX( nNewDeltaX, 1, eAlignX );
1133 if (nNewDeltaX+nSizeX-1 > rDoc.
MaxCol())
1134 nNewDeltaX = rDoc.
MaxCol()-nSizeX+1;
1138 if ( nNewDeltaY != nDeltaY )
1139 nSizeY = aViewData.CellsAtY( nNewDeltaY, 1, eAlignY );
1140 if (nNewDeltaY+nSizeY-1 > rDoc.
MaxRow())
1141 nNewDeltaY = rDoc.
MaxRow()-nSizeY+1;
1145 if ( nNewDeltaX != nDeltaX )
1146 ScrollX( nNewDeltaX - nDeltaX, eAlignX );
1147 if ( nNewDeltaY != nDeltaY )
1148 ScrollY( nNewDeltaY - nDeltaY, eAlignY );
1154 if (eActiveX ==
SC_SPLIT_RIGHT && nCurX < aViewData.GetFixPosX())
1171 bool bMod1Locked = (aViewData.GetViewShell()->GetLockedModifiers() &
KEY_MOD1) != 0;
1172 aViewData.SetSelCtrlMouseClick( rMEvt.
IsMod1() || bMod1Locked );
1176 bMoveIsShift = rMEvt.
IsShift();
1177 bRet = pSelEngine->SelMouseButtonDown( rMEvt );
1178 bMoveIsShift =
false;
1181 aViewData.SetSelCtrlMouseClick(
false );
1189 bool bShift,
bool bControl,
bool bKeepOld,
bool bKeepSel )
1192 aViewData.ResetOldCursor();
1196 if( aViewData.GetViewShell()->GetForceFocusOnCurCell() )
1197 aViewData.GetViewShell()->SetForceFocusOnCurCell( !rDoc.
ValidColRow(nCurX, nCurY) );
1199 if (nCurX < 0) nCurX = 0;
1200 if (nCurY < 0) nCurY = 0;
1214 AlignToCursor( nCurX, nCurY, eMode );
1218 SetCursor( nCurX, nCurY );
1224 const ScMarkData& rMark = aViewData.GetMarkData();
1227 if (!aSelList.
In(
ScRange(nCurX, nCurY, aViewData.GetTabNo())))
1229 DoneBlockMode(
true);
1247 bool bSame = ( nCurX == aViewData.GetCurX() && nCurY == aViewData.GetCurY() );
1248 bMoveIsShift = bShift;
1249 pSelEngine->CursorPosChanging( bShift, bControl );
1250 bMoveIsShift =
false;
1251 aFunctionSet.SetCursorAtCell( nCurX, nCurY,
false );
1264 bool bShift,
bool bKeepSel )
1267 SCTAB nTab = aViewData.GetTabNo();
1269 bool bSkipProtected =
false, bSkipUnprotected =
false;
1277 if ( bSkipProtected && bSkipUnprotected )
1284 if ( aViewData.IsRefMode() )
1286 nOldX = aViewData.GetRefEndX();
1287 nOldY = aViewData.GetRefEndY();
1288 nCurX = nOldX + nMovX;
1289 nCurY = nOldY + nMovY;
1293 nOldX = aViewData.GetCurX();
1294 nOldY = aViewData.GetCurY();
1295 nCurX = (nMovX != 0) ? nOldX+nMovX : aViewData.GetOldCurX();
1296 nCurY = (nMovY != 0) ? nOldY+nMovY : aViewData.GetOldCurY();
1299 if (nMovX < 0 && nOldX == 0)
1304 if (nMovY < 0 && nOldY == 0)
1310 aViewData.ResetOldCursor();
1313 SkipCursorHorizontal(nCurX, nCurY, nOldX, nMovX);
1316 SkipCursorVertical(nCurX, nCurY, nOldY, nMovY);
1318 MoveCursorAbs( nCurX, nCurY, eMode, bShift,
false,
true, bKeepSel );
1325 GetPageMoveEndPosition(nMovX, nMovY, nPageX, nPageY);
1326 MoveCursorRel( nPageX, nPageY, eMode, bShift, bKeepSel );
1333 GetAreaMoveEndPosition(nMovX, nMovY, eMode, nNewX, nNewY, eMode);
1334 MoveCursorRel(nNewX, nNewY, eMode, bShift, bKeepSel);
1340 SCTAB nTab = aViewData.GetTabNo();
1344 aViewData.GetMoveCursor( nCurX,nCurY );
1345 SCCOL nNewX = nCurX;
1346 SCROW nNewY = nCurY;
1350 if ( nMovX > 0 || nMovY > 0 )
1363 aViewData.ResetOldCursor();
1364 MoveCursorRel( nNewX-nCurX, nNewY-nCurY, eMode, bShift, bKeepSel );
1370 SCTAB nTab = aViewData.GetTabNo();
1374 aViewData.GetMoveCursor( nCurX,nCurY );
1375 SCCOL nNewX = nCurX;
1376 SCROW nNewY = nCurY;
1378 ScSplitPos eWhich = aViewData.GetActivePart();
1379 SCCOL nPosX = aViewData.GetPosX(
WhichH(eWhich) );
1380 SCROW nPosY = aViewData.GetPosY(
WhichV(eWhich) );
1382 SCCOL nAddX = aViewData.VisibleCellsX(
WhichH(eWhich) );
1385 SCROW nAddY = aViewData.VisibleCellsY(
WhichV(eWhich) );
1399 aViewData.SetOldCursor( nNewX,nNewY );
1401 MoveCursorAbs( nNewX, nNewY, eMode, bShift,
false,
true );
1409 aViewData.UpdateInputHandler(
true);
1415 switch (static_cast<ScDirection>(rOpt.
GetMoveDir()))
1418 nMoveY = bShift ? -1 : 1;
1421 nMoveX = bShift ? -1 : 1;
1424 nMoveY = bShift ? 1 : -1;
1427 nMoveX = bShift ? 1 : -1;
1433 aViewData.GetMoveCursor( nCurX,nCurY );
1434 SCCOL nNewX = nCurX;
1435 SCROW nNewY = nCurY;
1436 SCTAB nTab = aViewData.GetTabNo();
1443 rDoc.
GetNextPos( nNewX, nNewY, nTab, nMoveX, nMoveY,
true,
false, rMark );
1445 MoveCursorRel( nNewX - nCurX, nNewY - nCurY,
SC_FOLLOW_LINE,
false,
true );
1448 if ( nNewX == nCurX && nNewY == nCurY )
1449 aViewData.UpdateInputHandler(
true);
1454 const SCCOL nTabStartCol = ((nMoveY != 0 && !nMoveX) ? aViewData.GetTabStartCol() :
SC_TABSTART_NONE);
1455 rDoc.
GetNextPos( nNewX, nNewY, nTab, nMoveX, nMoveY,
false,
true, rMark, nTabStartCol );
1457 MoveCursorRel( nNewX - nCurX, nNewY - nCurY,
SC_FOLLOW_LINE,
false);
1465 enum { MOD_NONE, MOD_CTRL, MOD_ALT, MOD_BOTH } eModifier =
1467 (rKCode.
IsMod2() ? MOD_BOTH : MOD_CTRL) :
1468 (rKCode.
IsMod2() ? MOD_ALT : MOD_NONE);
1480 case KEY_UP: nDY = -1;
break;
1483 if( nDX != 0 || nDY != 0 )
1487 case MOD_NONE: MoveCursorRel( nDX, nDY,
SC_FOLLOW_LINE, bSel );
break;
1488 case MOD_CTRL: MoveCursorArea( nDX, nDY,
SC_FOLLOW_JUMP, bSel );
break;
1504 case MOD_NONE: MoveCursorPage( 0, static_cast<SCCOLROW>(nDX),
SC_FOLLOW_FIX, bSel );
break;
1505 case MOD_ALT: MoveCursorPage( nDX, 0,
SC_FOLLOW_FIX, bSel );
break;
1506 case MOD_CTRL: SelectNextTab( nDX,
false );
break;
1518 nDX = (nCode ==
KEY_HOME) ? -1 : 1;
1522 case MOD_NONE: MoveCursorEnd( nDX, 0, eMode, bSel );
break;
1523 case MOD_CTRL: MoveCursorEnd( nDX, static_cast<SCCOLROW>(nDX), eMode, bSel );
break;
1538 short nMove = bShift ? -1 : 1;
1545 aViewData.GetMoveCursor( nCurX,nCurY );
1546 SCCOL nNewX = nCurX;
1547 SCROW nNewY = nCurY;
1548 SCTAB nTab = aViewData.GetTabNo();
1551 rDoc.
GetNextPos( nNewX,nNewY, nTab, nMove,0, bMarked,
true, rMark );
1553 SCCOL nTabCol = aViewData.GetTabStartCol();
1557 MoveCursorRel( nNewX-nCurX, nNewY-nCurY,
SC_FOLLOW_LINE,
false,
true );
1560 aViewData.SetTabStartCol( nTabCol );
1574 nEndCol = aMarkRange.
aEnd.
Col();
1579 aViewData.GetMoveCursor( nStartCol, nDummy );
1583 SCTAB nTab = aViewData.GetTabNo();
1586 InitBlockMode( nStartCol,0, nTab );
1587 MarkCursor( nEndCol, rDoc.
MaxRow(), nTab );
1602 nEndRow = aMarkRange.
aEnd.
Row();
1607 aViewData.GetMoveCursor( nDummy, nStartRow );
1611 SCTAB nTab = aViewData.GetTabNo();
1614 InitBlockMode( 0,nStartRow, nTab );
1615 MarkCursor( rDoc.
MaxCol(), nEndRow, nTab );
1623 SCCOL nStartCol = nCol;
1624 SCTAB nTab = aViewData.GetTabNo();
1626 if ((nModifier &
KEY_SHIFT) == KEY_SHIFT)
1627 bMoveIsShift =
true;
1629 DoneBlockMode( nModifier != 0 );
1630 InitBlockMode( nStartCol, 0, nTab,
true,
true);
1631 MarkCursor( nCol, rDoc.
MaxRow(), nTab );
1632 bMoveIsShift =
false;
1633 SetCursor( nCol, 0 );
1640 SCROW nStartRow = nRow;
1641 SCTAB nTab = aViewData.GetTabNo();
1643 if ((nModifier &
KEY_SHIFT) == KEY_SHIFT)
1644 bMoveIsShift =
true;
1646 DoneBlockMode( nModifier != 0 );
1647 InitBlockMode( 0, nStartRow, nTab,
true,
false,
true );
1648 MarkCursor( rDoc.
MaxCol(), nRow, nTab );
1649 bMoveIsShift =
false;
1650 SetCursor( 0, nRow );
1657 SCTAB nTab = aViewData.GetTabNo();
1658 SCCOL nStartCol = aViewData.GetCurX();
1659 SCROW nStartRow = aViewData.GetCurY();
1660 SCCOL nEndCol = nStartCol;
1661 SCROW nEndRow = nStartRow;
1663 rDoc.
GetDataArea( nTab, nStartCol, nStartRow, nEndCol, nEndRow, bIncludeCursor,
false );
1667 InitBlockMode( nStartCol, nStartRow, nTab );
1668 MarkCursor( nEndCol, nEndRow, nTab );
1677 ScAddress aCursor( aViewData.GetCurX(), aViewData.GetCurY(), aViewData.GetTabNo() );
1681 MarkRange( aMatrix,
false );
1692 DoneBlockMode( bContinue );
1697 bool bCol = ( rRange.
aStart.
Col() == 0 && rRange.
aEnd.
Col() == rDoc.
MaxCol() ) && !aViewData.GetDocument().IsInVBAMode();
1700 nAlignX = aViewData.GetPosX(
WhichH(aViewData.GetActivePart()));
1702 nAlignY = aViewData.GetPosY(
WhichV(aViewData.GetActivePart()));
1713 aViewData.ResetOldCursor();
1714 SetCursor( nPosX, nPosY );
1728 aViewData.GetMoveCursor( nCurX,nCurY );
1739 aViewData.GetMarkData() = rNew;
1748 UpdateSelectionOverlay();
1755 OSL_ENSURE( nDir==-1 || nDir==1,
"SelectNextTab: invalid value");
1758 SCTAB nTab = aViewData.GetTabNo();
1785 SetTabNo( nTab,
false, bExtendSelection );
1791 pTabControl->SwitchToPageId( nTab );
1800 OSL_FAIL(
"SetTabNo: invalid sheet");
1804 if ( !(nTab != aViewData.GetTabNo() || bNew) )
1808 FmFormShell* pFormSh = aViewData.GetViewShell()->GetFormShell();
1829 aViewData.GetDocShell()->UpdatePendingRowHeights( nTab );
1832 SCTAB nOldPos = nTab;
1835 bool bUp = (nTab>=nOldPos);
1839 if (nTab>=nTabCount)
1852 OSL_FAIL(
"no visible sheets");
1867 pSelEngine->Reset();
1868 aViewData.SetRefTabNo( nTab );
1871 ScSplitPos eOldActive = aViewData.GetActivePart();
1872 bool bFocus = pGridWin[eOldActive] && pGridWin[eOldActive]->HasFocus();
1874 aViewData.SetTabNo( nTab );
1875 if (mpSpellCheckCxt)
1876 mpSpellCheckCxt->setTabNo( nTab );
1884 bool bAllSelected =
true;
1885 for (
SCTAB nSelTab = 0; nSelTab < nTabCount; ++nSelTab)
1889 if (nTab == nSelTab)
1892 bExtendSelection =
true;
1896 bAllSelected =
false;
1897 if (bExtendSelection)
1902 if (bAllSelected && !bNew)
1905 bExtendSelection =
false;
1907 if (bExtendSelection)
1926 if (pWin && pWin->IsVisible())
1927 pWin->UpdateEditViewPos();
1931 TabChanged(bSameTabButMoved);
1932 collectUIInformation({{
"TABLE", OUString::number(nTab)}});
1933 UpdateVisibleRange();
1935 aViewData.GetViewShell()->WindowChanged();
1936 aViewData.ResetOldCursor();
1937 SetCursor( aViewData.GetCurX(), aViewData.GetCurY(), true );
1939 if ( !bUnoRefDialog )
1940 aViewData.GetViewShell()->DisconnectAllClients();
1944 ScClient* pClient =
static_cast<ScClient*
>(aViewData.GetViewShell()->GetIPClient());
1948 if ( nTab == aViewData.GetRefTabNo() )
1956 MapMode aMapMode( MapUnit::Map100thMM );
1972 if ( bFocus && aViewData.GetActivePart() != eOldActive && !bRefMode )
1977 bool bResize =
false;
1979 if (aViewData.UpdateFixX())
1982 if (aViewData.UpdateFixY())
1988 if ( aViewData.IsPagebreakMode() )
1989 UpdatePageBreakData();
1996 pWin->SetMapMode(pWin->GetDrawMapMode());
2005 DoResize( aBorderPos, aFrameSize );
2006 rBindings.
Invalidate( SID_DELETE_PRINTAREA );
2007 rBindings.
Invalidate( FID_DEL_MANUALBREAKS );
2011 rBindings.
Invalidate( SID_STATUS_PAGESTYLE );
2033 OnLibreOfficeKitTabChanged();
2038 aExtraEditViewManager.Add(pViewShell, eWhich);
2043 aExtraEditViewManager.Remove(pViewShell, eWhich);
2053 auto lTabSwitch = [pThisViewShell, nThisTabNo] (
ScTabViewShell* pOtherViewShell)
2055 ScViewData& rOtherViewData = pOtherViewShell->GetViewData();
2057 if (nThisTabNo == nOtherTabNo)
2059 for (
int i = 0;
i < 4; ++
i)
2069 for (
int i = 0;
i < 4; ++
i)
2094 DrawEnableAnim(
false );
2096 EditView* pSpellingView = aViewData.GetSpellingView();
2098 for (sal_uInt16
i = 0;
i < 4;
i++)
2100 if (pGridWin[
i] && pGridWin[
i]->IsVisible() && !aViewData.HasEditView(
ScSplitPos(
i)))
2104 SCCOL nScrX = aViewData.GetPosX( eHWhich );
2105 SCROW nScrY = aViewData.GetPosY( eVWhich );
2108 ( nCol >= nScrX && nCol <= nScrX + aViewData.VisibleCellsX(eHWhich) - 1 &&
2109 nRow >= nScrY && nRow <= nScrY + aViewData.VisibleCellsY(eVWhich) - 1 );
2115 if ( bPosVisible || aViewData.GetActivePart() ==
static_cast<ScSplitPos>(
i) ||
2116 ( pSpellingView && aViewData.GetEditView(static_cast<ScSplitPos>(
i)) == pSpellingView ) )
2118 pGridWin[
i]->HideCursor();
2120 pGridWin[
i]->DeleteCursorOverlay();
2121 pGridWin[
i]->DeleteAutoFillOverlay();
2122 pGridWin[
i]->DeleteCopySourceOverlay();
2125 pGridWin[
i]->flushOverlayManager();
2128 pGridWin[
i]->SetMapMode(aViewData.GetLogicMode());
2130 aViewData.SetEditEngine( static_cast<ScSplitPos>(
i), pEngine, pGridWin[
i], nCol, nRow );
2136 pGridWin[i]->UpdateEditViewPos();
2142 if (aViewData.GetViewShell()->HasAccessibilityObjects())
2143 aViewData.GetViewShell()->BroadcastAccessibility(
SfxHint(SfxHintId::ScAccEnterEditMode));
2148 ScSplitPos eActive = aViewData.GetActivePart();
2149 for (sal_uInt16
i = 0;
i < 4;
i++)
2152 if (aViewData.HasEditView(eCurrent))
2154 EditView* pEditView = aViewData.GetEditView(eCurrent);
2156 tools::Long nRefTabNo = GetViewData().GetRefTabNo();
2157 tools::Long nX = GetViewData().GetCurXForTab(nRefTabNo);
2158 tools::Long nY = GetViewData().GetCurYForTab(nRefTabNo);
2161 static_cast<ScEditEngineDefaulter*>(pEditView->
GetEditEngine()),
2162 pGridWin[
i], nX, nY );
2163 if (eCurrent == eActive)
2171 SCCOL nCol1 = aViewData.GetEditStartCol();
2172 SCROW nRow1 = aViewData.GetEditStartRow();
2173 SCCOL nCol2 = aViewData.GetEditEndCol();
2174 SCROW nRow2 = aViewData.GetEditEndRow();
2176 bool bNotifyAcc =
false;
2179 bool bExtended = nRow1 != nRow2;
2181 bool bAtCursor = nCol1 <= aViewData.GetCurX() &&
2182 nCol2 >= aViewData.GetCurX() &&
2183 nRow1 == aViewData.GetCurY();
2184 for (sal_uInt16
i = 0;
i < 4;
i++)
2186 bPaint[
i] = aViewData.HasEditView( static_cast<ScSplitPos>(
i) );
2191 EditView* pView = aViewData.GetEditView( static_cast<ScSplitPos>(i) );
2197 if (bNotifyAcc && aViewData.GetViewShell()->HasAccessibilityObjects())
2198 aViewData.GetViewShell()->BroadcastAccessibility(
SfxHint(SfxHintId::ScAccLeaveEditMode));
2200 aViewData.ResetEditView();
2201 for (sal_uInt16
i = 0;
i < 4;
i++)
2203 if (pGridWin[
i] && bPaint[
i] && pGridWin[
i]->IsVisible())
2205 pGridWin[
i]->ShowCursor();
2207 pGridWin[
i]->SetMapMode(pGridWin[
i]->GetDrawMapMode());
2212 pGridWin[
i]->Invalidate(rInvRect);
2215 auto lInvalidateWindows =
2228 else if (bExtended || ( bAtCursor && !bNoPaint ))
2231 pGridWin[
i]->UpdateSelectionOverlay();
2237 DrawEnableAnim(
true );
2242 bool bGrabFocus =
false;
2243 if (aViewData.IsActive())
2264 for (sal_uInt16
i = 0;
i < 4;
i++)
2266 if (pGridWin[
i] && pGridWin[
i]->IsVisible())
2274 pGridWin[i]->UpdateCursorOverlay();
2275 pGridWin[i]->UpdateAutoFillOverlay();
2283 if ( aViewData.GetDocument().IsAutoCalcShellDisabled() )
2286 for (sal_uInt16
i = 0;
i < 4;
i++)
2288 if (pGridWin[
i] && pGridWin[
i]->IsVisible())
2289 pGridWin[
i]->UpdateFormulas(nStartCol, nStartRow, nEndCol, nEndRow);
2292 if ( aViewData.IsPagebreakMode() )
2293 UpdatePageBreakData();
2295 UpdateHeaderWidth();
2298 if ( aViewData.HasEditView( aViewData.GetActivePart() ) )
2317 for (
size_t i = 0;
i < 4; ++
i)
2319 if (!pGridWin[
i] || !pGridWin[
i]->IsVisible())
2334 if (bIsTiledRendering)
2336 nLastX = aViewData.GetMaxTiledCol();
2337 nLastY = aViewData.GetMaxTiledRow();
2342 SCCOL nScrX = aViewData.GetPosX( eHWhich );
2343 SCROW nScrY = aViewData.GetPosY( eVWhich );
2359 nLastX = nScrX + aViewData.VisibleCellsX( eHWhich ) + 1;
2360 nLastY = nScrY + aViewData.VisibleCellsY( eVWhich ) + 1;
2375 bool bLayoutRTL = aViewData.GetDocument().IsLayoutRTL( aViewData.GetTabNo() );
2378 Point aStart = aViewData.GetScrPos( nCol1, nRow1, static_cast<ScSplitPos>(
i) );
2379 Point aEnd = aViewData.GetScrPos( nCol2+1, nRow2+1, static_cast<ScSplitPos>(
i) );
2382 if (bIsTiledRendering)
2391 aEnd.setX( bLayoutRTL ? 0 : std::numeric_limits<int>::max() / 1000 );
2395 aEnd.setX( bLayoutRTL ? 0 : pGridWin[
i]->GetOutputSizePixel().
Width() );
2398 aEnd.AdjustX( -nLayoutSign );
2403 aEnd.setY( pGridWin[
i]->GetOutputSizePixel().Height() );
2405 aStart.AdjustX( -nLayoutSign );
2406 aStart.AdjustY( -1 );
2408 bool bMarkClipped = aViewData.GetOptions().GetOption(
VOPT_CLIPMARKS );
2417 aStart.AdjustX( -(nMarkPixel * nLayoutSign) );
2420 pGridWin[
i]->Invalidate( pGridWin[
i]->PixelToLogic(
tools::Rectangle( aStart,aEnd ) ) );
2438 aViewData.GetDocument().ExtendMerge(aRef);
2451 bool bHiddenEdge =
false;
2454 while ( nCol1 > 0 && rDoc.
ColHidden(nCol1, nTab) )
2481 if ( nCol2 - nCol1 > 1 && nRow2 - nRow1 > 1 && !bHiddenEdge )
2500 if ( !(pRangeFinder && pRangeFinder->
GetDocName() == aViewData.GetDocShell()->GetTitle()) )
2503 SCTAB nTab = aViewData.GetTabNo();
2504 sal_uInt16
nCount =
static_cast<sal_uInt16
>(pRangeFinder->
Count());
2508 for (sal_uInt16
i=0;
i<nCount;
i++)
2509 PaintRangeFinderEntry(&pRangeFinder->
GetObject(
i),nTab);
2513 sal_uInt16
idx = nNumber;
2515 PaintRangeFinderEntry(&pRangeFinder->
GetObject(idx),nTab);
2523 maHighlightRanges.emplace_back( rRange, rColor );
2525 SCTAB nTab = aViewData.GetTabNo();
2533 SCTAB nTab = aViewData.GetTabNo();
2542 maHighlightRanges.clear();
2546 const uno::Sequence< chart2::data::HighlightedRange > & rHilightRanges )
2548 ClearHighlightRanges();
2552 std::vector<ReferenceMark> aReferenceMarks( nSize );
2554 for (chart2::data::HighlightedRange
const & rHighlightedRange : rHilightRanges)
2558 ScDocument& rDoc = aViewData.GetDocShell()->GetDocument();
2562 size_t nListSize = aRangeList.
size();
2564 aReferenceMarks.resize(nSize);
2566 for (
size_t j = 0; j < nListSize; ++j )
2570 if( rHighlightedRange.Index == - 1 )
2573 AddHighlightRange( aTargetRange, aSelColor );
2577 aTargetRange = lcl_getSubRangeByIndex( p, rHighlightedRange.Index );
2578 AddHighlightRange( aTargetRange, aSelColor );
2605 ScDocument& rDocument = aViewData.GetDocShell()->GetDocument();
2606 ScGridWindow* pWin = pGridWin[aViewData.GetActivePart()].get();
2628 for (sal_uInt16
i = 0;
i < 4;
i++)
2630 if (pGridWin[
i] && pGridWin[
i]->IsVisible())
2631 pGridWin[
i]->Invalidate();
2639 for (sal_uInt16
i = 0;
i < 2;
i++)
2642 pColBar[i]->Invalidate();
2644 pColOutline[i]->Invalidate();
2650 for (sal_uInt16
i = 0;
i < 4;
i++)
2652 if(pGridWin[
i] && pGridWin[
i]->IsVisible())
2653 pGridWin[
i]->CreateAnchorHandle(rHdl, rAddress);
2663 aViewData.RecalcPixPos();
2667 if ( aViewData.GetHSplitMode() ==
SC_SPLIT_FIX && nStartCol < aViewData.GetFixPosX() )
2668 if (aViewData.UpdateFixX())
2677 bool bLayoutRTL = rDoc.
IsLayoutRTL( aViewData.GetTabNo() );
2680 for (sal_uInt16
i = 0;
i < 2;
i++)
2683 if (pColBar[eWhich])
2685 Size aWinSize = pColBar[eWhich]->GetSizePixel();
2686 tools::Long nStartX = aViewData.GetScrPos( nStartCol, 0, eWhich ).X();
2688 if (nEndCol >= rDoc.
MaxCol())
2689 nEndX = nStartX + (bLayoutRTL ? 0 : ( aWinSize.
Width()-1 ));
2691 nEndX = aViewData.GetScrPos( nEndCol+1, 0, eWhich ).X() - nLayoutSign;
2692 pColBar[eWhich]->Invalidate(
2695 if (pColOutline[eWhich])
2696 pColOutline[eWhich]->Invalidate();
2704 for (sal_uInt16
i = 0;
i < 2;
i++)
2707 pRowBar[i]->Invalidate();
2709 pRowOutline[i]->Invalidate();
2719 aViewData.RecalcPixPos();
2723 if ( aViewData.GetVSplitMode() ==
SC_SPLIT_FIX && nStartRow < aViewData.GetFixPosY() )
2724 if (aViewData.UpdateFixY())
2733 for (sal_uInt16
i = 0;
i < 2;
i++)
2736 if (pRowBar[eWhich])
2738 Size aWinSize = pRowBar[eWhich]->GetSizePixel();
2739 tools::Long nStartY = aViewData.GetScrPos( 0, nStartRow, eWhich ).Y();
2741 if (nEndRow >= rDoc.
MaxRow())
2742 nEndY = nStartY + aWinSize.
Height() - 1;
2744 nEndY = aViewData.GetScrPos( 0, nEndRow+1, eWhich ).Y() - 1;
2745 pRowBar[eWhich]->Invalidate(
2748 if (pRowOutline[eWhich])
2749 pRowOutline[eWhich]->Invalidate();
2757 SCTAB nTab = aViewData.GetTabNo();
2761 aViewData.SetTabNo(nCount-1);
2764 pTabControl->UpdateStatus();
2773 double nOldX = aViewData.GetPPTX();
2774 double nOldY = aViewData.GetPPTY();
2776 aViewData.RefreshZoom();
2778 bool bChangedX = ( aViewData.GetPPTX() != nOldX );
2779 bool bChangedY = ( aViewData.GetPPTY() != nOldY );
2780 if ( !(bChangedX || bChangedY) )
2786 Fraction aZoomX = aViewData.GetZoomX();
2787 Fraction aZoomY = aViewData.GetZoomY();
2788 SetZoom( aZoomX, aZoomY,
false );
2799 if ( bActivate == aViewData.IsActive() && !bFirst )
2830 aViewData.Activate(bActivate);
2844 OSL_ENSURE( pGridWin[eWin],
"Corrupted document, not all SplitPos in GridWin" );
2845 if ( !pGridWin[eWin] )
2848 if ( !pGridWin[eWin] )
2851 for ( i=0; i<4; i++ )
2859 OSL_ENSURE( i<4,
"and BOOM" );
2861 aViewData.SetActivePart( eWin );
2867 UpdateInputContext();
2870 pGridWin[aViewData.GetActivePart()]->ClickExtern();
2876 if ( eOld == eWhich )
2879 bInActivatePart =
true;
2881 bool bRefMode =
SC_MOD()->IsFormulaMode();
2884 if ( aViewData.HasEditView(eOld) && !bRefMode )
2891 bool bTopCap = pColBar[eOldH] && pColBar[eOldH]->IsMouseCaptured();
2892 bool bLeftCap = pRowBar[eOldV] && pRowBar[eOldV]->IsMouseCaptured();
2894 bool bFocus = pGridWin[eOld]->HasFocus();
2895 bool bCapture = pGridWin[eOld]->IsMouseCaptured();
2897 pGridWin[eOld]->ReleaseMouse();
2898 pGridWin[eOld]->ClickExtern();
2899 pGridWin[eOld]->HideCursor();
2900 pGridWin[eWhich]->HideCursor();
2901 aViewData.SetActivePart( eWhich );
2906 pSelEngine->SetWindow(pGridWin[eWhich]);
2907 pSelEngine->SetWhich(eWhich);
2910 pGridWin[eOld]->MoveMouseStatus(*pGridWin[eWhich]);
2912 if ( bCapture || pGridWin[eWhich]->IsMouseCaptured() )
2917 pGridWin[eWhich]->ReleaseMouse();
2918 pGridWin[eWhich]->StartTracking();
2921 if ( bTopCap && pColBar[eNewH] )
2923 pColBar[eOldH]->SetIgnoreMove(
true);
2924 pColBar[eNewH]->SetIgnoreMove(
false);
2925 pHdrSelEng->SetWindow( pColBar[eNewH] );
2926 tools::Long nWidth = pColBar[eNewH]->GetOutputSizePixel().Width();
2928 pColBar[eNewH]->CaptureMouse();
2930 if ( bLeftCap && pRowBar[eNewV] )
2932 pRowBar[eOldV]->SetIgnoreMove(
true);
2933 pRowBar[eNewV]->SetIgnoreMove(
false);
2934 pHdrSelEng->SetWindow( pRowBar[eNewV] );
2935 tools::Long nHeight = pRowBar[eNewV]->GetOutputSizePixel().Height();
2937 pRowBar[eNewV]->CaptureMouse();
2939 aHdrFunc.SetWhich(eWhich);
2941 pGridWin[eOld]->ShowCursor();
2942 pGridWin[eWhich]->ShowCursor();
2949 if ( !bRefMode && !bOleActive )
2952 if ( bFocus && !aViewData.IsAnyFillMode() && !bRefMode )
2956 pGridWin[eWhich]->GrabFocus();
2959 bInActivatePart =
false;
2967 pWin->ClickExtern();
2973 ScGridWindow* pWin = pGridWin[aViewData.GetActivePart()].get();
2978 pTabControl->UpdateInputContext();
2986 if (pGridWin[eGridWhich])
2987 return pGridWin[eGridWhich]->GetSizePixel().Width();
2997 if (pGridWin[eGridWhich])
2998 return pGridWin[eGridWhich]->GetSizePixel().Height();
3005 SC_MOD()->InputEnterHandler();
3012 pHdl->
SetRefScale( aViewData.GetZoomX(), aViewData.GetZoomY() );
3024 for (sal_uInt32
i = 0;
i < 4;
i++)
3027 pGridWin[i]->SetMapMode(pGridWin[i]->GetDrawMapMode());
3043 ScGridWindow* pWin = pGridWin[aViewData.GetActivePart()].get();
3045 if ( pWin && aViewData.HasEditView( aViewData.GetActivePart() ) )
3052 pWin->
SetMapMode( aViewData.GetLogicMode() );
3059 for (sal_uInt16
i = 0;
i < 4;
i++)
3061 if (pGridWin[
i] && pGridWin[
i]->IsVisible())
3062 pGridWin[
i]->CheckNeedsRepaint();
3070 if (pWin && pWin->IsVisible() && pWin->NeedsRepaint())
std::shared_ptr< SfxDialogController > & GetController()
void FindNextUnprot(bool bShift, bool bInSelection)
SC_DLLPUBLIC bool GetPrintArea(SCTAB nTab, SCCOL &rEndCol, SCROW &rEndRow, bool bNotes=true) const
SfxViewFrame * GetViewFrame() const
SC_DLLPUBLIC ScDPObject * GetDPAtCursor(SCCOL nCol, SCROW nRow, SCTAB nTab) const
void DoChartSelection(const css::uno::Sequence< css::chart2::data::HighlightedRange > &rHilightRanges)
void MarkDataArea(bool bIncludeCursor=true)
OUString GetColRowString() const
Create a human-readable string representation of the cell address.
static weld::Window * lcl_GetCareWin(SfxViewFrame *pViewFrm)
static void notifyDocumentSizeChanged(SfxViewShell const *pThisView, const OString &rPayload, vcl::ITiledRenderable *pDoc, bool bInvalidateAll=true)
todo: It should be possible to have MarkArrays for each table, in order to enable "search all" across...
SfxChildWindow * GetChildWindow(sal_uInt16)
ScVSplitPos WhichV(ScSplitPos ePos)
constexpr sal_uInt16 KEY_MOD1
void RemoveWindowFromForeignEditView(SfxViewShell *pViewShell, ScSplitPos eWhich)
void flushOverlayManager()
bool SetObjArea(const tools::Rectangle &)
MapMode GetDrawMapMode(bool bForce=false)
MapMode for the drawinglayer objects.
std::unique_ptr< ContentProperties > pData
void SetTabProtectionSymbol(SCTAB nTab, const bool bProtect)
void UpdateInputContext()
bool IsObjectInPlaceActive() const
void MarkRange(const ScRange &rRange, bool bSetCursor=true, bool bContinue=false)
sheet protection state container
ScHSplitPos WhichH(ScSplitPos ePos)
void ShowCursor(bool bGotoCursor=true, bool bForceVisCursor=true, bool bActivate=false)
SC_DLLPUBLIC ScDPCollection * GetDPCollection()
ScFollowMode
Screen behavior related to cursor movements.
void FillRangeListWithMarks(ScRangeList *pList, bool bClear, SCTAB nForTab=-1) const
Create a range list of marks.
const sal_uInt8 SC_CLIPMARK_SIZE
bool HasEditView(ScSplitPos eWhich) const
sal_uInt16 GetCode() const
SC_DLLPUBLIC SCROW FirstVisibleRow(SCROW nStartRow, SCROW nEndRow, SCTAB nTab) const
tools::Long GetGridWidth(ScHSplitPos eWhich)
SC_DLLPUBLIC SCROW LastVisibleRow(SCROW nStartRow, SCROW nEndRow, SCTAB nTab) const
static void UpdateInputLine()
Size GetOrigObjSize(MapMode const *pTargetMapMode=nullptr) const
void AddHighlightRange(const ScRange &rRange, const Color &rColor)
bool HasSelectionList() const
Returns true, if the validation cell will show a selection list.
css::uno::Reference< css::frame::XModel > GetModel() const
void Invalidate(sal_uInt16 nId)
static void forEachOtherView(ViewShellType *pThisViewShell, FunctionType f)
SC_DLLPUBLIC void SetCursor(SCCOL nPosX, SCROW nPosY, bool bNew=false)
SC_DLLPUBLIC void SetVisible(SCTAB nTab, bool bVisible)
SC_DLLPUBLIC formula::FormulaGrammar::AddressConvention GetAddressConvention() const
ScDPObject * GetByName(std::u16string_view rName) const
void PaintRangeFinderEntry(const ScRangeFindData *pData, SCTAB nTab)
Update marks for a selected Range.
constexpr sal_uInt16 KEY_UP
SC_DLLPUBLIC sal_uInt16 GetRowHeight(SCROW nRow, SCTAB nTab, bool bHiddenAsZero=true) const
SC_DLLPUBLIC void MoveCursorAbs(SCCOL nCurX, SCROW nCurY, ScFollowMode eMode, bool bShift, bool bControl, bool bKeepOld=false, bool bKeepSel=false)
constexpr sal_uInt16 KEY_END
void GetMarkArea(ScRange &rRange) const
SC_DLLPUBLIC const ScValidationData * GetValidationEntry(sal_uLong nIndex) const
constexpr tools::Long Width() const
static UITestLogger & getInstance()
void KillEditView(bool bNoPaint)
tools::Long GetGridHeight(ScVSplitPos eWhich)
weld::Window * GetFrameWeld() const
void MoveCursorScreen(SCCOL nMovX, SCROW nMovY, ScFollowMode eMode, bool bShift)
void UpdateAutoFillMark(bool bFromPaste=false)
void logEvent(const EventDescription &rDescription)
Reference< XController > xController
bool isOptionEnabled(Option eOption) const
void PaintLeftArea(SCROW nStartRow, SCROW nEndRow)
void MoveCursorEnd(SCCOL nMovX, SCROW nMovY, ScFollowMode eMode, bool bShift, bool bKeepSel=false)
SC_DLLPUBLIC SCROW MaxRow() const
void UpdateInputContext()
SC_DLLPUBLIC SCTAB GetTableCount() const
static bool lcl_IsRefDlgActive(SfxViewFrame *pViewFrm)
bool In(const ScRange &) const
bool IsMultiMarked() const
void OnLibreOfficeKitTabChanged()
SfxFrame & GetFrame() const
void PaintRangeFinder(tools::Long nNumber)
constexpr sal_uInt16 KEY_PAGEUP
void libreOfficeKitViewCallback(int nType, const char *pPayload) const override
bool SelMouseButtonDown(const MouseEvent &rMEvt)
void UpdateFormulas(SCCOL nStartCol=-1, SCROW nStartRow=-1, SCCOL nEndCol=-1, SCROW nEndRow=-1)
SC_DLLPUBLIC bool HasTable(SCTAB nTab) const
SC_DLLPUBLIC void GetNextPos(SCCOL &rCol, SCROW &rRow, SCTAB nTab, SCCOL nMovX, SCROW nMovY, bool bMarked, bool bUnprotected, const ScMarkData &rMark, SCCOL nTabStartCol=SC_TABSTART_NONE) const
void ActivatePart(ScSplitPos eWhich)
void ClearHighlightRanges()
constexpr tools::Long getHeight() const
void ActivateView(bool bActivate, bool bFirst)
ScViewData & GetViewData()
void SelectionChanged(bool bFromPaste=false)
SC_DLLPUBLIC const SfxPoolItem * GetAttr(SCCOL nCol, SCROW nRow, SCTAB nTab, sal_uInt16 nWhich) const
bool HasHintWindow() const
void PutInOrder(T &nStart, T &nEnd)
void PaintArea(SCCOL nStartCol, SCROW nStartRow, SCCOL nEndCol, SCROW nEndRow, ScUpdateMode eMode=ScUpdateMode::All)
void SelectTabPage(const sal_uInt16 nTab)
constexpr sal_uInt16 KEY_DOWN
constexpr TypedWhichId< SfxUInt32Item > ATTR_VALIDDATA(153)
SC_DLLPUBLIC void GetDataArea(SCTAB nTab, SCCOL &rStartCol, SCROW &rStartRow, SCCOL &rEndCol, SCROW &rEndRow, bool bIncludeOld, bool bOnlyDown) const
Return the smallest area containing at least all contiguous cells having data.
SC_DLLPUBLIC SCCOL MaxCol() const
SC_DLLPUBLIC bool ColHidden(SCCOL nCol, SCTAB nTab, SCCOL *pFirstCol=nullptr, SCCOL *pLastCol=nullptr) const
sal_uInt16 GetCurRefDlgId() const
void SetWindow(vcl::Window *pViewPort)
#define DBG_ASSERT(sCon, aError)
void SelectTable(SCTAB nTab, bool bNew)
void Set(SCCOL nCol, SCROW nRow, SCTAB nTab)
ScMarkType
States GetSimpleArea() returns for the underlying selection marks, so the caller can react if the res...
constexpr sal_uInt16 KEY_HOME
void CreateAnchorHandles(SdrHdlList &rHdl, const ScAddress &rAddress)
EditEngine * GetEditEngine() const
void SetPos(const Point &rPos, const MapMode &rMode)
void FakeButtonUp(ScSplitPos eWhich)
virtual void Invalidate(InvalidateFlags nFlags=InvalidateFlags::NONE)
SC_DLLPUBLIC void SetTabNo(SCTAB nTab, bool bNew=false, bool bExtendSelection=false, bool bSameTabButMoved=false)
void SelectOneTable(SCTAB nTab)
constexpr sal_uInt16 KEY_PAGEDOWN
virtual void ViewShellChanged()=0
Size GetOutputSizePixel() const
bool In(const ScAddress &) const
is Address& in Range?
void MakeEditView(ScEditEngineDefaulter *pEngine, SCCOL nCol, SCROW nRow)
void DoDPFieldPopup(std::u16string_view rPivotTableName, sal_Int32 nDimensionIndex, Point aPoint, Size aSize)
SfxViewShell * GetViewShell() const
virtual bool isProtected() const override
ScSelectionTransferObj * GetSelectionTransfer() const
constexpr sal_uInt16 KEY_RIGHT
Point PixelToLogic(const Point &rDevicePt) const
Point LogicToPixel(const Point &rLogicPt) const
void ClickCursor(SCCOL nPosX, SCROW nPosY, bool bControl)
SdrOle2Obj * GetDrawObj()
bool ValidColRow(SCCOL nCol, SCROW nRow) const
void SetEditEngine(EditEngine *pEditEngine)
void SkipOverlapped(SCCOL &rCol, SCROW &rRow, SCTAB nTab) const
const vcl::KeyCode & GetKeyCode() const
SfxViewShell * GetViewShell() const
SC_DLLPUBLIC void PutInOrder()
void MoveCursorEnter(bool bShift)
bool HasChildWindow(sal_uInt16)
SfxInPlaceClient * GetIPClient() const
bool ValidRow(SCROW nRow) const
virtual bool IsRefInputMode() const =0
constexpr tools::Long Height() const
void MoveCursorPage(SCCOL nMovX, SCROW nMovY, ScFollowMode eMode, bool bShift, bool bKeepSel=false)
void CheckSelectionTransfer()
void AddWindowToForeignEditView(SfxViewShell *pViewShell, ScSplitPos eWhich)
void MoveCursorArea(SCCOL nMovX, SCROW nMovY, ScFollowMode eMode, bool bShift, bool bKeepSel=false)
css::uno::Reference< css::frame::XController > GetController() const
void MoveCursorRel(SCCOL nMovX, SCROW nMovY, ScFollowMode eMode, bool bShift, bool bKeepSel=false)
bool GetInput(OUString &rTitle, OUString &rMsg) const
const tools::Rectangle & GetObjArea() const
void AlignToCursor(SCCOL nCurX, SCROW nCurY, ScFollowMode eMode, const ScSplitPos *pWhich=nullptr)
SC_DLLPUBLIC bool IsLayoutRTL(SCTAB nTab) const
static bool GetRangeListFromString(ScRangeList &rRangeList, const OUString &rRangeListStr, const ScDocument &rDocument, formula::FormulaGrammar::AddressConvention eConv, sal_Unicode cSeparator= ' ', sal_Unicode cQuote= '\'')
void SetSelectionTransfer(ScSelectionTransferObj *pNew)
void SelectNextTab(short nDir, bool bExtendSelection)
sal_uInt32 GetValue() const
ScRangeFindData & GetObject(sal_uLong nIndex)
Size GetSizePixel() const
SC_DLLPUBLIC bool IsVisible(SCTAB nTab) const
#define SAL_WARN(area, stream)
void DPLaunchFieldPopupMenu(const Point &rScrPos, const Size &rScrSize, const ScAddress &rPos, ScDPObject *pDPObj)
SC_DLLPUBLIC bool GetMatrixFormulaRange(const ScAddress &rCellPos, ScRange &rMatrix)
const SCCOL SC_TABSTART_NONE
bool IsRefInputMode() const
constexpr tools::Long getWidth() const
constexpr sal_uInt16 KEY_LEFT
Point OutputToScreenPixel(const Point &rPos) const
SC_DLLPUBLIC void MakeTable(SCTAB nTab, bool _bNeedsNameCheck=true)
tools::Rectangle GetInvalidateRect() const
const OUString & GetDocName() const
bool GetTableSelect(SCTAB nTab) const
std::map< OUString, OUString > aParameters
void PaintTopArea(SCCOL nStartCol, SCCOL nEndCol)
constexpr sal_uInt16 KEY_SHIFT
void BuildAllDimensionMembers()
SC_DLLPUBLIC sal_uInt16 GetColWidth(SCCOL nCol, SCTAB nTab, bool bHiddenAsZero=true) const
const ScInputHandler * GetInputHandler() const
SC_DLLPUBLIC void CellContentChanged()
static rtl::Reference< ScSelectionTransferObj > CreateFromView(ScTabView *pSource)
bool ValidTab(SCTAB nTab)
static void notifyInvalidation(SfxViewShell const *pThisView, std::string_view rPayload)
void GetEditView(ScSplitPos eWhich, EditView *&rViewPtr, SCCOL &rCol, SCROW &rRow)
virtual Size getDocumentSize() override
bool MoveCursorKeyInput(const KeyEvent &rKeyEvent)
virtual const tools::Rectangle & GetLogicRect() const override
void SetMarkData(const ScMarkData &rNew)
SC_DLLPUBLIC const ScTableProtection * GetTabProtection(SCTAB nTab) const