22#include <osl/diagnose.h>
27#include <document.hxx>
37#define SC_SELENG_REFMODE_UPDATE_INTERVAL_MIN 65
47 pViewData( pNewViewData ),
52 OSL_ENSURE(
pViewData,
"ViewData==0 at FunctionSet");
64 bool bLeftScroll,
bool bTopScroll,
bool bRightScroll,
bool bBottomScroll )
72 double nWinRight = rWinSize.
getWidth() + aRootPos.getX();
73 double nMarginRight = aScrRect.
GetWidth() - nWinRight;
74 double nHOffset = rEffPos.X() - rWinSize.
Width();
75 double nHAccelRate = nHOffset / nMarginRight;
77 if (nHAccelRate > 1.0)
85 double nMarginLeft = aRootPos.getX();
86 double nHOffset = -rEffPos.X();
87 double nHAccelRate = nHOffset / nMarginLeft;
89 if (nHAccelRate > 1.0)
93 if (nUpdateInterval > nTmp)
94 nUpdateInterval = nTmp;
99 double nWinBottom = rWinSize.
getHeight() + aRootPos.getY();
100 double nMarginBottom = aScrRect.
GetHeight() - nWinBottom;
101 double nVOffset = rEffPos.Y() - rWinSize.
Height();
102 double nVAccelRate = nVOffset / nMarginBottom;
104 if (nVAccelRate > 1.0)
108 if (nUpdateInterval > nTmp)
109 nUpdateInterval = nTmp;
114 double nMarginTop = aRootPos.getY();
115 double nVOffset = -rEffPos.Y();
116 double nVAccelRate = nVOffset / nMarginTop;
118 if (nVAccelRate > 1.0)
122 if (nUpdateInterval > nTmp)
123 nUpdateInterval = nTmp;
129 if (bRefMode && nUpdateInterval < SC_SELENG_REFMODE_UPDATE_INTERVAL_MIN)
135 nUpdateInterval = SC_SELENG_REFMODE_UPDATE_INTERVAL_MIN;
137 return nUpdateInterval;
194 ScRange aMarkRange = pTransferObj->GetRange();
197 SCCOL nHandleX = (nPosX >= nStartX) ? nPosX - nStartX : 0;
198 SCROW nHandleY = (nPosY >= nStartY) ? nPosY - nStartY : 0;
199 pTransferObj->SetDragHandlePos( nHandleX, nHandleY );
201 pTransferObj->SetVisibleTab( nTab );
203 pTransferObj->SetDragSource( pDocSh, rMark );
207 pWindow->
EndTracking( TrackingEventFlags::Cancel );
212 SC_MOD()->SetDragObject( pTransferObj.get(),
nullptr );
213 pTransferObj->StartDrag( pWindow, nDragActions );
224 bool bRefMode =
SC_MOD()->IsFormulaMode();
233 bool bRefMode =
SC_MOD()->IsFormulaMode();
277 bool bRefMode =
SC_MOD()->IsFormulaMode();
306 Point aEffPos = rPointPixel;
307 if ( aEffPos.X() == 0 )
309 if ( aEffPos.Y() == 0 )
314 bool bLeftScroll = ( aEffPos.X() < 0 );
315 bool bTopScroll = ( aEffPos.Y() < 0 );
320 nPosX, nPosY,
true, true );
332 if (bFillingSelection)
334 bBottomScroll = aEffPos.Y() >= aWinSize.
Height();
335 bRightScroll = aEffPos.X() >= aWinSize.
Width();
340 bBottomScroll = aEditArea.
Bottom() >= aWinSize.
Height();
341 bRightScroll = aEditArea.
Right() >= aWinSize.
Width();
344 bool bScroll = bRightScroll || bBottomScroll || bLeftScroll || bTopScroll;
347 if (bFillingSelection)
353 if ( bLeft && !bRightScroll )
354 do --nPosX;
while ( nPosX>=0 && rDoc.
ColHidden( nPosX, nTab ) );
355 if ( bTop && !bBottomScroll )
372 if ( aEffPos.X() >= aWinSize.
Width() )
389 if ( aEffPos.Y() >= aWinSize.
Height() )
410 aWinSize, aEffPos, bLeftScroll, bTopScroll, bRightScroll, bBottomScroll);
431 return nPosX >= startX && nPosX <= endX && nPosY >= startY && nPosY <= endY;
442 if (nPosX < 0 || nPosY < 0)
452 if ( bSkipProtected && bSkipUnprotected )
456 if ( (bCellProtected && bSkipProtected) || (!bCellProtected && bSkipUnprotected) )
504 SCCOL nStartX, nEndX;
505 SCROW nStartY, nEndY;
518 if ( nPosX+1 >= nStartX && nPosX <= nEndX &&
519 nPosY+1 >= nStartY && nPosY <= nEndY &&
520 ( nPosX != nEndX || nPosY != nEndY ) )
525 for (
SCCOL i=nPosX+1;
i<=nEndX;
i++)
529 SCCOL nDelStartX = nStartX;
530 SCROW nDelStartY = nStartY;
531 if ( nSizeX > nSizeY )
532 nDelStartX = nPosX + 1;
534 nDelStartY = nPosY + 1;
537 if ( nDelStartX < nStartX )
538 nDelStartX = nStartX;
539 if ( nDelStartY < nStartY )
540 nDelStartY = nStartY;
545 nEndX,nEndY,nTab ) );
569 bool bNegX = ( nPosX < nStartX );
570 bool bNegY = ( nPosY < nStartY );
577 do ++nPosX;
while ( nPosX<nStartX && rDoc.
ColHidden(nPosX, nTab) );
582 for (
SCCOL i=nEndX+1;
i<=nPosX;
i++)
590 if (++nPosY < nStartY)
601 if ( nSizeX > nSizeY )
612 SCCOL nRefStX = bNegX ? nEndX : nStartX;
613 SCROW nRefStY = bNegY ? nEndY : nStartY;
628 OSL_ENSURE( rDoc.
IsEmbedded(),
"!rDoc.IsEmbedded()" );
645 SCCOL nStartX, nEndX;
646 SCROW nStartY, nEndY;
656 if ( nPosX < nStartX ) nPosX = nStartX;
657 if ( nPosY < nStartY ) nPosY = nStartY;
685 pView->
MarkCursor( nPosX, nPosY, nTab,
false,
false,
true );
713 if ( nOldX != nPosX || nOldY != nPosY )
739 bool bRefMode =
SC_MOD()->IsFormulaMode();
768 bool bRefMode =
SC_MOD()->IsFormulaMode();
793 pViewData( pNewViewData ),
799 OSL_ENSURE(
pViewData,
"ViewData==0 at FunctionSet");
858 bScroll = ( rPointPixel.X() < 0 || rPointPixel.X() >= aWinSize.
Width() );
860 bScroll = ( rPointPixel.Y() < 0 || rPointPixel.Y() >= aWinSize.
Height() );
863 bool bSwitched =
false;
868 if ( rPointPixel.X() > aWinSize.
Width() )
887 if ( rPointPixel.Y() > aWinSize.
Height() )
912 nPosX, nPosY, false );
957 nPosX, nPosY,
false );
OUString GetURLNoPass(DecodeMechanism eMechanism=DecodeMechanism::ToIUri, rtl_TextEncoding eCharset=RTL_TEXTENCODING_UTF8) const
void Set(SCCOL nCol, SCROW nRow, SCTAB nTab)
SC_DLLPUBLIC sal_uInt16 GetRowHeight(SCROW nRow, SCTAB nTab, bool bHiddenAsZero=true) 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 IsTabProtected(SCTAB nTab) const
SC_DLLPUBLIC bool HasAttrib(SCCOL nCol1, SCROW nRow1, SCTAB nTab1, SCCOL nCol2, SCROW nRow2, SCTAB nTab2, HasAttrFlags nMask) const
void GetEmbedded(ScRange &rRange) const
SC_DLLPUBLIC bool ColHidden(SCCOL nCol, SCTAB nTab, SCCOL *pFirstCol=nullptr, SCCOL *pLastCol=nullptr) const
SC_DLLPUBLIC SCROW LastVisibleRow(SCROW nStartRow, SCROW nEndRow, SCTAB nTab) const
SC_DLLPUBLIC SCROW FirstVisibleRow(SCROW nStartRow, SCROW nEndRow, SCTAB nTab) const
todo: It should be possible to have MarkArrays for each table, in order to enable "search all" across...
bool IsMultiMarked() const
bool IsColumnMarked(SCCOL nCol) const
bool IsRowMarked(SCROW nRow) const
bool IsCellMarked(SCCOL nCol, SCROW nRow, bool bNoSimple=false) const
bool IsModalMode(SfxObjectShell *pDocSh=nullptr)
void UpdateInputHandler(bool bForce=false, bool bStopEditing=true)
bool IsRefInputMode() const
void InitBlockMode(SCCOL nCurX, SCROW nCurY, SCTAB nCurZ, bool bTestNeg=false, bool bCols=false, bool bRows=false, bool bForceNeg=false)
void FakeButtonUp(ScSplitPos eWhich)
void AlignToCursor(SCCOL nCurX, SCROW nCurY, ScFollowMode eMode, const ScSplitPos *pWhich=nullptr)
void DoneBlockMode(bool bContinue=false)
void DoneRefMode(bool bContinue=false)
void SelectionChanged(bool bFromPaste=false)
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)
SC_DLLPUBLIC void SetCursor(SCCOL nPosX, SCROW nPosY, bool bNew=false)
void ActivatePart(ScSplitPos eWhich)
void UpdateShrinkOverlay()
void UpdateRef(SCCOL nCurX, SCROW nCurY, SCTAB nCurZ)
bool IsMarking(SCCOL nCol, SCROW nRow, SCTAB nTab) const
sheet protection state container
bool isOptionEnabled(Option eOption) const
ScFillMode GetFillMode() const
ScMarkData & GetMarkData()
void GetMouseQuadrant(const Point &rClickPos, ScSplitPos eWhich, SCCOL nPosX, SCROW nPosY, bool &rLeft, bool &rTop)
ScDocument & GetDocument() const
SCROW GetPosY(ScVSplitPos eWhich, SCTAB nForTab=-1) const
SCCOL GetRefStartX() const
ScRefType GetRefType() const
ScSplitMode GetHSplitMode() const
bool IsSelCtrlMouseClick() const
ScDocShell * GetDocShell() const
ScGridWindow * GetActiveWin()
void GetPosFromPixel(tools::Long nClickX, tools::Long nClickY, ScSplitPos eWhich, SCCOL &rPosX, SCROW &rPosY, bool bTestMerge=true, bool bRepair=false, SCTAB nForTab=-1)
void SetDelMark(const ScRange &rRange)
ScTabViewShell * GetViewShell() const
ScMarkType GetSimpleArea(SCCOL &rStartCol, SCROW &rStartRow, SCTAB &rStartTab, SCCOL &rEndCol, SCROW &rEndRow, SCTAB &rEndTab) const
ScDBFunc * GetView() const
ScSplitPos GetActivePart() const
bool GetDelMark(ScRange &rRange) const
SCROW GetRefStartY() const
ScSplitMode GetVSplitMode() const
tools::Rectangle GetEditArea(ScSplitPos eWhich, SCCOL nPosX, SCROW nPosY, vcl::Window *pWin, const ScPatternAttr *pPattern, bool bForceToTop, bool bInPrintTwips=false)
SfxObjectShell * GetSfxDocShell() const
bool IsAnyFillMode() const
SCCOL GetPosX(ScHSplitPos eWhich, SCTAB nForTab=-1) const
void SetRefStart(SCCOL nNewX, SCROW nNewY, SCTAB nNewZ)
bool SelectionEditable(bool *pOnlyNotBecauseOfMatrix=nullptr)
SC_DLLPUBLIC bool CopyToClip(ScDocument *pClipDoc, bool bCut, bool bApi=false, bool bIncludeObjects=false, bool bStopEdit=true)
virtual void DeselectAtPoint(const Point &rPointPixel) override
virtual void DeselectAll() override
bool SetCursorAtCell(SCCOL nPosX, SCROW nPosY, bool bScroll)
virtual void CreateAnchor() override
ScSplitPos GetWhich() const
virtual void BeginDrag() override
void SetAnchorFlag(bool bSet)
sal_uLong CalcUpdateInterval(const Size &rWinSize, const Point &rEffPos, bool bLeftScroll, bool bTopScroll, bool bRightScroll, bool bBottomScroll)
void SetSelectionEngine(ScViewSelectionEngine *pSelEngine)
ScViewFunctionSet(ScViewData *pNewViewData)
virtual void DestroyAnchor() override
void SetAnchor(SCCOL nPosX, SCROW nPosY)
ScViewSelectionEngine * pEngine
virtual void SetCursorAtPoint(const Point &rPointPixel, bool bDontSelectAtCursor=false) override
bool CheckRefBounds(SCCOL nPosX, SCROW nPosY)
virtual bool IsSelectionAtPoint(const Point &rPointPixel) override
ScSplitPos GetWhich() const
ScViewSelectionEngine(vcl::Window *pWindow, ScTabView *pView, ScSplitPos eSplitPos)
const MouseEvent & GetMouseEvent() const
const Point & GetMousePosPixel() const
void EnableDrag(bool bOn)
vcl::Window * GetWindow() const
void SetSelectionMode(SelectionMode eMode)
void SetUpdateInterval(sal_uLong nInterval)
static LOKDeviceFormFactor getDeviceFormFactor()
const INetURLObject & GetURLObject() const
void FillTransferableObjectDescriptor(TransferableObjectDescriptor &rDesc) const
SfxMedium * GetMedium() const
constexpr tools::Long getHeight() const
constexpr tools::Long Height() const
constexpr tools::Long getWidth() const
constexpr tools::Long Width() const
tools::Rectangle GetDesktopRectPixel() const
void EndTracking(TrackingEventFlags nFlags=TrackingEventFlags::NONE)
Size GetOutputSizePixel() const
Point OutputToAbsoluteScreenPixel(const Point &rPos) const
std::unique_ptr< ScDocument, o3tl::default_delete< ScDocument > > ScDocumentUniquePtr
sal_uInt16 nScFillModeMouseModifier
constexpr sal_uInt16 KEY_MOD1
static bool bDidSwitch
Member.
#define SELENG_AUTOREPEAT_INTERVAL_MAX
#define SELENG_AUTOREPEAT_INTERVAL
#define DND_ACTION_COPYMOVE
sal_Int32 SCCOLROW
a type capable of holding either SCCOL or SCROW
ScHSplitPos WhichH(ScSplitPos ePos)
ScRefType
Mouse mode to select areas.
ScVSplitPos WhichV(ScSplitPos ePos)