24#include <osl/diagnose.h>
52 if (bCellProtected && !bSelectLocked)
55 if (!bCellProtected && !bSelectUnlocked)
61void moveCursorByProtRule(
64 bool bSelectLocked =
true;
65 bool bSelectUnlocked =
true;
67 if (pTabProtection && pTabProtection->
isProtected())
77 SCCOL nNewUnhiddenCol = rCol + 1;
79 while(pDoc->
ColHidden(nNewUnhiddenCol, nTab,
nullptr, &nEndCol))
81 if(nNewUnhiddenCol >= pDoc->
MaxCol())
84 i += nEndCol - nNewUnhiddenCol + 1;
85 nNewUnhiddenCol = nEndCol +1;
88 if (!isCellQualified(pDoc, nNewUnhiddenCol, rRow, nTab, bSelectLocked, bSelectUnlocked))
90 rCol = nNewUnhiddenCol;
95 for (
SCCOL i = 0;
i > nMovX && rCol > 0; --
i)
97 SCCOL nNewUnhiddenCol = rCol - 1;
99 while(pDoc->
ColHidden(nNewUnhiddenCol, nTab, &nStartCol))
101 if(nNewUnhiddenCol <= 0)
104 i -= nNewUnhiddenCol - nStartCol + 1;
105 nNewUnhiddenCol = nStartCol - 1;
108 if (!isCellQualified(pDoc, nNewUnhiddenCol, rRow, nTab, bSelectLocked, bSelectUnlocked))
110 rCol = nNewUnhiddenCol;
118 SCROW nNewUnhiddenRow = rRow + 1;
120 while(pDoc->
RowHidden(nNewUnhiddenRow, nTab,
nullptr, &nEndRow))
122 if(nNewUnhiddenRow >= pDoc->
MaxRow())
125 i += nEndRow - nNewUnhiddenRow + 1;
126 nNewUnhiddenRow = nEndRow + 1;
129 if (!isCellQualified(pDoc, rCol, nNewUnhiddenRow, nTab, bSelectLocked, bSelectUnlocked))
131 rRow = nNewUnhiddenRow;
136 for (
SCROW i = 0;
i > nMovY && rRow > 0; --
i)
138 SCROW nNewUnhiddenRow = rRow - 1;
140 while(pDoc->
RowHidden(nNewUnhiddenRow, nTab, &nStartRow))
142 if(nNewUnhiddenRow <= 0)
145 i -= nNewUnhiddenRow - nStartRow + 1;
146 nNewUnhiddenRow = nStartRow - 1;
149 if (!isCellQualified(pDoc, rCol, nNewUnhiddenRow, nTab, bSelectLocked, bSelectUnlocked))
151 rRow = nNewUnhiddenRow;
164 else if (rCol > pDoc->
MaxCol())
175 else if (rRow > pDoc->
MaxRow())
183void moveCursorByMergedCell(
191 bool bSelectLocked =
true;
192 bool bSelectUnlocked =
true;
193 if (pTabProtection && pTabProtection->
isProtected())
201 bool bOriginMerged =
false;
204 if (pMergeAttr && pMergeAttr->
IsMerged())
208 bOriginMerged =
true;
217 if (nOrigX < pDoc->MaxCol() && nOrigX < rCol && rCol <= nOrigX + nColSpan - 1)
218 rCol = nOrigX + nColSpan;
228 checkBoundary(pDoc, rCol, rRow);
229 if (!isCellQualified(pDoc, rCol, rRow, nTab, bSelectLocked, bSelectUnlocked))
238 if (nOrigX > 0 && nOrigX <= rCol && rCol < nOrigX + nColSpan - 1)
250 checkBoundary(pDoc, rCol, rRow);
251 if (!isCellQualified(pDoc, rCol, rRow, nTab, bSelectLocked, bSelectUnlocked))
261 if (nOrigY < pDoc->MaxRow() && nOrigY < rRow && rRow <= nOrigY + nRowSpan - 1)
262 rRow = nOrigY + nRowSpan;
272 checkBoundary(pDoc, rCol, rRow);
273 if (!isCellQualified(pDoc, rCol, rRow, nTab, bSelectLocked, bSelectUnlocked))
283 if (nOrigY > 0 && nOrigY <= rRow && rRow < nOrigY + nRowSpan - 1)
295 checkBoundary(pDoc, rCol, rRow);
296 if (!isCellQualified(pDoc, rCol, rRow, nTab, bSelectLocked, bSelectUnlocked))
306 if (!rDoc.ValidCol(nStartCol)) nStartCol = rDoc.
MaxCol();
307 if (!rDoc.ValidRow(nStartRow)) nStartRow = rDoc.MaxRow();
308 if (!rDoc.ValidCol(nEndCol)) nEndCol = rDoc.MaxCol();
309 if (!rDoc.ValidRow(nEndRow)) nEndRow = rDoc.MaxRow();
311 bool bLeft = (nStartCol==0 && nEndCol==rDoc.MaxCol());
312 bool bTop = (nStartRow==0 && nEndRow==rDoc.MaxRow());
354 bool bTestNeg,
bool bCols,
bool bRows,
bool bForceNeg )
360 if (!rDoc.ValidCol(nCurX)) nCurX = rDoc.
MaxCol();
361 if (!rDoc.ValidRow(nCurY)) nCurY = rDoc.MaxRow();
450 bool bCols,
bool bRows,
bool bCellSelection )
458 OSL_FAIL(
"MarkCursor not in BlockMode" );
463 nCurY = rDocument.
MaxRow();
465 nCurX = rDocument.
MaxCol();
492 if ( bCellSelection )
496 SCCOL nCurXOffset = 0;
497 SCCOL nBlockStartXOffset = 0;
498 SCROW nCurYOffset = 0;
499 SCROW nBlockStartYOffset = 0;
500 bool bBlockStartMerged =
false;
524 bBlockStartMerged =
true;
545 SCCOL nCurXOffsetTemp = (nCurX < nCurX + nColSpan - 1) ? nColSpan - 1 : 0;
546 nCurXOffset = std::max(nCurXOffset, nCurXOffsetTemp);
550 SCROW nCurYOffsetTemp = (nCurY < nCurY + nRowSpan - 1) ? nRowSpan - 1 : 0;
551 nCurYOffset = std::max(nCurYOffset, nCurYOffsetTemp);
565 if ( !bBlockStartMerged )
595 if ( !bCols && !bRows )
642 if (nMovX != 0 && nPageX == 0) nPageX = (nMovX>0) ? 1 : -1;
643 if (nMovY != 0 && nPageY == 0) nPageY = (nMovY>0) ? 1 : -1;
684 SCCOL nVirtualX = bLegacyCellSelection ? nNewX : nCurX;
685 SCROW nVirtualY = bLegacyCellSelection ? nNewY : nCurY;
689 for (
i=0;
i<nMovX;
i++ )
692 for (
i=0;
i<-nMovX;
i++ )
695 for (
i=0;
i<nMovY;
i++ )
698 for (
i=0;
i<-nMovY;
i++ )
703 if (nMovX != 0 && nNewX == rDoc.
MaxCol())
705 if (nMovY != 0 && nNewY == rDoc.
MaxRow())
721 rAreaX = nNewX - nCurX;
722 rAreaY = nNewY - nCurY;
732 bool bSkipProtected =
false, bSkipUnprotected =
false;
740 bool bSkipCell =
false;
755 if (bSkipProtected && !bSkipCell)
757 if (bSkipUnprotected && !bSkipCell)
762 if (rCurX <= 0 || rCurX >= nMaxCol)
801 bool bSkipProtected =
false, bSkipUnprotected =
false;
809 bool bSkipCell =
false;
812 SCROW nFirstSameHiddenRow = -1;
813 SCROW nLastSameHiddenRow = -1;
814 bool bRowHidden =
false;
815 SCROW nFirstSameIsVerOverlapped = -1;
816 SCROW nLastSameIsVerOverlapped = -1;
817 bool bIsVerOverlapped =
false;
818 SCROW nFirstSameHasAttribRow = -1;
819 SCROW nLastSameHasAttribRow = -1;
820 bool bHasAttribProtected =
false;
823 if( rCurY < nFirstSameHiddenRow || rCurY > nLastSameHiddenRow )
824 bRowHidden = rDoc.
RowHidden(rCurY, nTab, &nFirstSameHiddenRow, &nLastSameHiddenRow);
825 bSkipCell = bRowHidden;
828 if( rCurY < nFirstSameIsVerOverlapped || rCurY > nLastSameIsVerOverlapped )
829 bIsVerOverlapped = rDoc.
IsVerOverlapped(rCurX, rCurY, nTab, &nFirstSameIsVerOverlapped, &nLastSameIsVerOverlapped);
830 bSkipCell = bIsVerOverlapped;
832 if (bSkipProtected && !bSkipCell)
834 if( rCurY < nFirstSameHasAttribRow || rCurY > nLastSameHasAttribRow )
836 &nFirstSameHasAttribRow, &nLastSameHasAttribRow);
837 bSkipCell = bHasAttribProtected;
839 if (bSkipUnprotected && !bSkipCell)
841 if( rCurY < nFirstSameHasAttribRow || rCurY > nLastSameHasAttribRow )
843 &nFirstSameHasAttribRow, &nLastSameHasAttribRow);
844 bSkipCell = !bHasAttribProtected;
849 if (rCurY <= 0 || rCurY >= rDoc.
MaxRow())
885 if (!nMovX && !nMovY)
905 bool bSelectLocked =
true;
906 bool bSelectUnlocked =
true;
908 if (pTabProtection && pTabProtection->
isProtected())
914 moveCursorByProtRule(nNewX, nNewY, nMovX, nMovY, nRefTab, &rDoc);
915 checkBoundary(&rDoc, nNewX, nNewY);
919 SCCOL nTempX = nNewX;
926 if (!checkBoundary(&rDoc, nTempX, nNewY))
929 if (isCellQualified(&rDoc, nTempX, nNewY, nRefTab, bSelectLocked, bSelectUnlocked))
935 SCROW nTempY = nNewY;
942 if (!checkBoundary(&rDoc, nNewX, nTempY))
945 if (isCellQualified(&rDoc, nNewX, nTempY, nRefTab, bSelectLocked, bSelectUnlocked))
951 SCCOL nTargetCol = nNewX;
952 SCROW nTargetRow = nNewY;
1017 if (pWin && pWin->IsVisible())
1018 pWin->UpdateCopySourceOverlay();
1024 if ( pWin && pWin->IsVisible() )
1025 pWin->UpdateSelectionOverlay();
1031 if ( pWin && pWin->IsVisible() )
1032 pWin->UpdateShrinkOverlay();
1038 if ( pWin && pWin->IsVisible() )
1039 pWin->UpdateAllOverlays();
1075 bool bDidReset =
false;
1093 if ( bReset && !bDidReset )
1157 double fZoomFactor =
static_cast<double>(
Fraction(nZoom,100));
1158 fScaleX *= fZoomFactor;
1159 fScaleY *= fZoomFactor;
1163 for (nCol=0; nCol<nFixPosX; nCol++)
1166 sal_uInt16 nColTwips = pDoc->
GetColWidth( nCol, nTab );
1169 nBlockX +=
static_cast<tools::Long>(nColTwips * fScaleX);
1170 if (nBlockX > nWindowX)
1174 for (nCol=nStartCol; nCol<=nEndCol; nCol++)
1176 sal_uInt16 nColTwips = pDoc->
GetColWidth( nCol, nTab );
1179 nBlockX +=
static_cast<tools::Long>(nColTwips * fScaleX);
1180 if (nBlockX > nWindowX)
1186 for (
SCROW nRow = 0; nRow <= nFixPosY-1; ++nRow)
1195 nBlockY +=
static_cast<tools::Long>(nRowTwips * fScaleY);
1196 if (nBlockY > nWindowY)
1200 for (
SCROW nRow = nStartRow; nRow <= nEndRow; ++nRow)
1205 nBlockY +=
static_cast<tools::Long>(nRowTwips * fScaleY);
1206 if (nBlockY > nWindowY)
1216 sal_uInt16 nZoom = 100;
1220 case SvxZoomType::PERCENT:
1224 case SvxZoomType::OPTIMAL:
1245 if ( nTab < nStartTab && nTab > nEndTab )
1257 if ( nStartCol < nFixPosX )
1258 nStartCol = nFixPosX;
1265 if ( nStartRow < nFixPosY )
1266 nStartRow = nFixPosY;
1274 Size aWinSize =
pGridWin[eUsedPart]->GetOutputSizePixel();
1278 if ( nFixPosX != 0 )
1280 if ( nFixPosY != 0 )
1289 while ( nMax > nMin )
1291 sal_uInt16 nTest = (nMin+nMax+1)/2;
1294 &rDoc, nTab, nStartCol, nStartRow, nEndCol, nEndRow,
1295 nFixPosX, nFixPosY ) )
1300 OSL_ENSURE( nMin == nMax,
"Nesting is wrong" );
1303 if ( nZoom != nOldZoom )
1308 if ( nStartCol <= nEndCol )
1310 if ( nStartRow <= nEndRow )
1318 case SvxZoomType::WHOLEPAGE:
1319 case SvxZoomType::PAGEWIDTH:
1326 SfxStyleFamily::Page );
1328 OSL_ENSURE( pStyleSheet,
"PageStyle not found :-/" );
1352 GetOutputSizePixel().Width();
1360 else if ( nOtherWidth > aWinSize.
Width() )
1367 GetOutputSizePixel().Height();
1375 else if ( nOtherHeight > aWinSize.
Height() )
1388 nZoom =
static_cast<sal_uInt16
>(nZoomX);
1390 if (
eType == SvxZoomType::WHOLEPAGE && nZoomY > 0 && nZoomY < nZoom)
1391 nZoom =
static_cast<sal_uInt16
>(nZoomY);
1397 OSL_FAIL(
"Unknown Zoom-Revision");
1423 if (pWin && pWin->IsVisible())
1424 pWin->HideNoteMarker();
1435 OSL_ENSURE(
pDrawView,
"ScTabView::MakeDrawLayer does not work");
1441 pWin->DrawLayerCreated();
1453 if (
SC_MOD()->IsInExecuteDrop() )
1463 bool bFocus = pParent && pParent->
has_focus();
1465 if (pGlobStrId && pGlobStrId == STR_PROTECTIONERR)
1469 pGlobStrId = STR_READONLYERR;
1474 VclMessageType::Info, VclButtonsType::Ok,
1480 weld::Window* pGrabOnClose = bFocus ? pParent :
nullptr;
1490 std::unique_ptr<ScPageBreakData> pNewData;
1508 pNewData->AddPages();
static weld::MessageDialog * CreateMessageDialog(weld::Widget *pParent, VclMessageType eMessageType, VclButtonsType eButtonType, const OUString &rPrimaryMessage, const ILibreOfficeKitNotifier *pNotifier=nullptr)
const ScDocument & GetDocument() const
ScDrawLayer * MakeDrawLayer()
SfxPrinter * GetPrinter(bool bCreateIfNotExist=true)
double GetOutputFactor() const
SC_DLLPUBLIC SCCOL GetAllocatedColumnsCount(SCTAB nTab) const
SC_DLLPUBLIC sal_uInt16 GetRowHeight(SCROW nRow, SCTAB nTab, bool bHiddenAsZero=true) const
bool IsHorOverlapped(SCCOL nCol, SCROW nRow, SCTAB nTab) const
SC_DLLPUBLIC sal_uInt16 GetColWidth(SCCOL nCol, SCTAB nTab, bool bHiddenAsZero=true) const
bool ValidRow(SCROW nRow) const
SC_DLLPUBLIC const ScTableProtection * GetTabProtection(SCTAB nTab) const
SC_DLLPUBLIC bool ExtendMerge(SCCOL nStartCol, SCROW nStartRow, SCCOL &rEndCol, SCROW &rEndRow, SCTAB nTab, bool bRefresh=false)
SC_DLLPUBLIC SCCOL MaxCol() const
SC_DLLPUBLIC SCROW MaxRow() const
SC_DLLPUBLIC OUString GetPageStyle(SCTAB nTab) const
SC_DLLPUBLIC bool RowHidden(SCROW nRow, SCTAB nTab, SCROW *pFirstRow=nullptr, SCROW *pLastRow=nullptr) const
SC_DLLPUBLIC bool HasAttrib(SCCOL nCol1, SCROW nRow1, SCTAB nTab1, SCCOL nCol2, SCROW nRow2, SCTAB nTab2, HasAttrFlags nMask) const
void FindAreaPos(SCCOL &rCol, SCROW &rRow, SCTAB nTab, ScMoveDirection eDirection) const
SC_DLLPUBLIC ScStyleSheetPool * GetStyleSheetPool() const
bool ValidCol(SCCOL nCol) const
bool IsVerOverlapped(SCCOL nCol, SCROW nRow, SCTAB nTab, SCROW *nStartRow=nullptr, SCROW *nEndRow=nullptr) const
SC_DLLPUBLIC bool ColHidden(SCCOL nCol, SCTAB nTab, SCCOL *pFirstCol=nullptr, SCCOL *pLastCol=nullptr) const
void SkipOverlapped(SCCOL &rCol, SCROW &rRow, SCTAB nTab) const
SC_DLLPUBLIC bool HasTable(SCTAB nTab) const
SC_DLLPUBLIC sal_uInt16 GetPrintRangeCount(SCTAB nTab)
SC_DLLPUBLIC const SfxPoolItem * GetAttr(SCCOL nCol, SCROW nRow, SCTAB nTab, sal_uInt16 nWhich) const
SC_DLLPUBLIC SCTAB GetTableCount() const
static SC_DLLPUBLIC double nScreenPPTX
Horizontal pixel per twips factor.
static SC_DLLPUBLIC double nScreenPPTY
Vertical pixel per twips factor.
todo: It should be possible to have MarkArrays for each table, in order to enable "search all" across...
const ScRange & GetMultiMarkArea() const
void SelectTable(SCTAB nTab, bool bNew)
const ScRange & GetMarkArea() const
bool IsMultiMarked() const
void SetMarkNegative(bool bFlag)
void SetMarking(bool bFlag)
bool IsMarkNegative() const
bool IsColumnMarked(SCCOL nCol) const
bool IsRowMarked(SCROW nRow) const
bool IsCellMarked(SCCOL nCol, SCROW nRow, bool bNoSimple=false) const
bool GetMarkingFlag() const
void SetMarkArea(const ScRange &rRange)
SCCOL GetColMerge() const
SCROW GetRowMerge() const
SC_DLLPUBLIC const ScInputOptions & GetInputOptions()
void ResetBreaks(SCTAB nTab)
virtual SfxPrinter * GetPrinter(bool bCreate=false) override
void UpdateInputHandler(bool bForce=false, bool bStopEditing=true)
bool IsRefInputMode() const
void UpdatePageBreakData(bool bForcePaint=false)
void InitBlockMode(SCCOL nCurX, SCROW nCurY, SCTAB nCurZ, bool bTestNeg=false, bool bCols=false, bool bRows=false, bool bForceNeg=false)
std::array< VclPtr< ScColBar >, 2 > pColBar
std::unique_ptr< ScPageBreakData > pPageBreakData
void GetAreaMoveEndPosition(SCCOL nMovX, SCROW nMovY, ScFollowMode eMode, SCCOL &rAreaX, SCROW &rAreaY, ScFollowMode &rMode)
void PaintTopArea(SCCOL nStartCol, SCCOL nEndCol)
ScHeaderFunctionSet aHdrFunc
void AlignToCursor(SCCOL nCurX, SCROW nCurY, ScFollowMode eMode, const ScSplitPos *pWhich=nullptr)
void DoneBlockMode(bool bContinue=false)
void ErrorMessage(TranslateId pGlobStrId)
sal_uInt16 CalcZoom(SvxZoomType eType, sal_uInt16 nOldZoom)
void SelectionChanged(bool bFromPaste=false)
std::array< VclPtr< ScGridWindow >, 4 > pGridWin
ScViewSelectionEngine * GetSelEngine()
tools::Long GetGridWidth(ScHSplitPos eWhich)
void InitRefMode(SCCOL nCurX, SCROW nCurY, SCTAB nCurZ, ScRefType eType)
void MarkCursor(SCCOL nCurX, SCROW nCurY, SCTAB nCurZ, bool bCols=false, bool bRows=false, bool bCellSelection=false)
void PaintArea(SCCOL nStartCol, SCROW nStartRow, SCCOL nEndCol, SCROW nEndRow, ScUpdateMode eMode=ScUpdateMode::All)
tools::Long GetGridHeight(ScVSplitPos eWhich)
void SkipCursorHorizontal(SCCOL &rCurX, SCROW &rCurY, SCCOL nOldX, SCCOL nMovX)
void UpdateCopySourceOverlay()
void UpdateSelectionOverlay()
void SelectAll(bool bContinue=false)
std::unique_ptr< ScDrawView > pDrawView
void UpdateShrinkOverlay()
std::array< VclPtr< ScRowBar >, 2 > pRowBar
void UpdateRef(SCCOL nCurX, SCROW nCurY, SCTAB nCurZ)
void ExpandBlockPage(SCCOL nMovX, SCROW nMovY)
void InitOwnBlockMode(const ScRange &rMarkRange)
void SkipCursorVertical(SCCOL &rCurX, SCROW &rCurY, SCROW nOldY, SCROW nMovY)
void ExpandBlock(SCCOL nMovX, SCROW nMovY, ScFollowMode eMode)
void GetPageMoveEndPosition(SCCOL nMovX, SCROW nMovY, SCCOL &rPageX, SCROW &rPageY)
void PaintBlock(bool bReset)
divide PaintBlock into two methods: RepaintBlock and RemoveBlock or similar
void PaintMarks(SCCOL nStartCol, SCROW nStartRow, SCCOL nEndCol, SCROW nEndRow)
void ExpandBlockArea(SCCOL nMovX, SCROW nMovY)
void PaintLeftArea(SCROW nStartRow, SCROW nEndRow)
std::shared_ptr< weld::MessageDialog > m_xMessageBox
bool IsMarking(SCCOL nCol, SCROW nRow, SCTAB nTab) const
sheet protection state container
bool isOptionEnabled(Option eOption) const
virtual bool isProtected() const override
SCCOL CellsAtX(SCCOL nPosX, SCCOL nDir, ScHSplitPos eWhichX, sal_uInt16 nScrSizeY=SC_SIZE_NONE) const
tools::Long GetPageUpDownOffset() const
ScMarkData & GetMarkData()
ScDocument & GetDocument() const
SCROW GetPosY(ScVSplitPos eWhich, SCTAB nForTab=-1) const
SCCOL GetRefStartX() const
void SetPosY(ScVSplitPos eWhich, SCROW nNewPosY)
ScSplitMode GetHSplitMode() const
ScDocShell * GetDocShell() const
ScTabViewShell * GetViewShell() const
ScMarkType GetSimpleArea(SCCOL &rStartCol, SCROW &rStartRow, SCTAB &rStartTab, SCCOL &rEndCol, SCROW &rEndRow, SCTAB &rEndTab) const
static tools::Long ToPixel(sal_uInt16 nTwips, double nFactor)
ScSplitPos GetActivePart() const
weld::Window * GetDialogParent()
SCROW CellsAtY(SCROW nPosY, SCROW nDir, ScVSplitPos eWhichY, sal_uInt16 nScrSizeX=SC_SIZE_NONE) const
SCROW GetRefStartY() const
void SetOldCursor(SCCOL nNewX, SCROW nNewY)
ScSplitMode GetVSplitMode() const
bool IsPagebreakMode() const
void SetPosX(ScHSplitPos eWhich, SCCOL nNewPosX)
SfxBindings & GetBindings()
SCCOL GetPosX(ScHSplitPos eWhich, SCTAB nForTab=-1) const
void CursorPosChanging(bool bShift, bool bMod1)
void Invalidate(sal_uInt16 nId)
virtual SfxStyleSheetBase * Find(const OUString &, SfxStyleFamily eFam, SfxStyleSearchBits n=SfxStyleSearchBits::All) const
constexpr tools::Long Height() const
tools::Long AdjustHeight(tools::Long n)
void setWidth(tools::Long nWidth)
tools::Long AdjustWidth(tools::Long n)
void setHeight(tools::Long nHeight)
constexpr tools::Long Width() const
#define LINK(Instance, Class, Member)
OUString ScResId(TranslateId aId)
constexpr TypedWhichId< ScMergeAttr > ATTR_MERGE(144)
VCL_DLLPUBLIC Application * GetpApp()
IMPL_STATIC_LINK_NOARG(ScTabView, InstallLOKNotifierHdl, void *, vcl::ILibreOfficeKitNotifier *)
static bool lcl_FitsInWindow(double fScaleX, double fScaleY, sal_uInt16 nZoom, tools::Long nWindowX, tools::Long nWindowY, const ScDocument *pDoc, SCTAB nTab, SCCOL nStartCol, SCROW nStartRow, SCCOL nEndCol, SCROW nEndRow, SCCOL nFixPosX, SCROW nFixPosY)
sal_Int32 SCCOLROW
a type capable of holding either SCCOL or SCROW
ScHSplitPos WhichH(ScSplitPos ePos)
ScFollowMode
Screen behavior related to cursor movements.
ScVSplitPos WhichV(ScSplitPos ePos)