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()" );
635 pView->
InitRefMode( aRange.aEnd.Col(), aRange.aEnd.Row(), nTab, eRefMode );
637 pView->
InitRefMode( aRange.aStart.Col(), aRange.aStart.Row(), nTab, eRefMode );
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 );
bool IsAnyFillMode() const
ScMarkData & GetMarkData()
virtual void BeginDrag() override
void InitRefMode(SCCOL nCurX, SCROW nCurY, SCTAB nCurZ, ScRefType eType)
virtual void SetCursorAtPoint(const Point &rPointPixel, bool bDontSelectAtCursor=false) override
void SetDelMark(const ScRange &rRange)
ScDocShell * GetDocShell() const
SC_DLLPUBLIC bool IsTabProtected(SCTAB nTab) const
todo: It should be possible to have MarkArrays for each table, in order to enable "search all" across...
ScRefType GetRefType() const
virtual void DeselectAll() override
ScVSplitPos WhichV(ScSplitPos ePos)
constexpr sal_uInt16 KEY_MOD1
SC_DLLPUBLIC bool CopyToClip(ScDocument *pClipDoc, bool bCut, bool bApi=false, bool bIncludeObjects=false, bool bStopEdit=true)
void SetSelectionMode(SelectionMode eMode)
ScViewSelectionEngine(vcl::Window *pWindow, ScTabView *pView, ScSplitPos eSplitPos)
bool GetDelMark(ScRange &rRange) const
sheet protection state container
void DoneRefMode(bool bContinue=false)
SCROW GetRefStartY() const
ScHSplitPos WhichH(ScSplitPos ePos)
static LOKDeviceFormFactor getDeviceFormFactor()
ScViewSelectionEngine * pEngine
virtual bool IsSelectionAtPoint(const Point &rPointPixel) override
sal_uLong CalcUpdateInterval(const Size &rWinSize, const Point &rEffPos, bool bLeftScroll, bool bTopScroll, bool bRightScroll, bool bBottomScroll)
#define DND_ACTION_COPYMOVE
SC_DLLPUBLIC SCROW FirstVisibleRow(SCROW nStartRow, SCROW nEndRow, SCTAB nTab) const
ScSplitPos GetActivePart() const
SC_DLLPUBLIC SCROW LastVisibleRow(SCROW nStartRow, SCROW nEndRow, SCTAB nTab) const
ScDocument & GetDocument() const
tools::Rectangle GetDesktopRectPixel() const
void SetSelectionEngine(ScViewSelectionEngine *pSelEngine)
void GetEmbedded(ScRange &rRange) const
void FillTransferableObjectDescriptor(TransferableObjectDescriptor &rDesc) const
void EnableDrag(bool bOn)
SC_DLLPUBLIC void SetCursor(SCCOL nPosX, SCROW nPosY, bool bNew=false)
SCCOL GetPosX(ScHSplitPos eWhich, SCTAB nForTab=-1) const
SC_DLLPUBLIC bool HasAttrib(SCCOL nCol1, SCROW nRow1, SCTAB nTab1, SCCOL nCol2, SCROW nRow2, SCTAB nTab2, HasAttrFlags nMask) const
SC_DLLPUBLIC sal_uInt16 GetRowHeight(SCROW nRow, SCTAB nTab, bool bHiddenAsZero=true) const
bool IsCellMarked(SCCOL nCol, SCROW nRow, bool bNoSimple=false) const
constexpr tools::Long Width() const
bool isOptionEnabled(Option eOption) const
void SetUpdateInterval(sal_uLong nInterval)
bool SelectionEditable(bool *pOnlyNotBecauseOfMatrix=nullptr)
sal_Int32 SCCOLROW
a type capable of holding either SCCOL or SCROW
#define SELENG_AUTOREPEAT_INTERVAL
bool IsMultiMarked() const
void EndTracking(TrackingEventFlags nFlags=TrackingEventFlags::NONE)
const Point & GetMousePosPixel() const
void UpdateShrinkOverlay()
void UpdateInputHandler(bool bForce=false, bool bStopEditing=true)
void ActivatePart(ScSplitPos eWhich)
void DoneBlockMode(bool bContinue=false)
constexpr tools::Long getHeight() const
SCROW GetPosY(ScVSplitPos eWhich, SCTAB nForTab=-1) const
ScSplitMode GetHSplitMode() const
void SelectionChanged(bool bFromPaste=false)
void SetRefStart(SCCOL nNewX, SCROW nNewY, SCTAB nNewZ)
bool IsRowMarked(SCROW nRow) const
ScTabViewShell * GetViewShell() const
SC_DLLPUBLIC bool ColHidden(SCCOL nCol, SCTAB nTab, SCCOL *pFirstCol=nullptr, SCCOL *pLastCol=nullptr) const
bool IsModalMode(SfxObjectShell *pDocSh=nullptr)
bool IsColumnMarked(SCCOL nCol) const
tools::Rectangle GetEditArea(ScSplitPos eWhich, SCCOL nPosX, SCROW nPosY, vcl::Window *pWin, const ScPatternAttr *pPattern, bool bForceToTop, bool bInPrintTwips=false)
void Set(SCCOL nCol, SCROW nRow, SCTAB nTab)
std::unique_ptr< ScDocument, o3tl::default_delete< ScDocument > > ScDocumentUniquePtr
void GetPosFromPixel(tools::Long nClickX, tools::Long nClickY, ScSplitPos eWhich, SCCOL &rPosX, SCROW &rPosY, bool bTestMerge=true, bool bRepair=false, SCTAB nForTab=-1)
void FakeButtonUp(ScSplitPos eWhich)
static bool bDidSwitch
Member.
ScMarkType GetSimpleArea(SCCOL &rStartCol, SCROW &rStartRow, SCTAB &rStartTab, SCCOL &rEndCol, SCROW &rEndRow, SCTAB &rEndTab) const
bool CheckRefBounds(SCCOL nPosX, SCROW nPosY)
ScGridWindow * GetActiveWin()
vcl::Window * GetWindow() const
ScSplitPos GetWhich() const
Point OutputToAbsoluteScreenPixel(const Point &rPos) const
ScSplitPos GetWhich() const
ScDBFunc * GetView() const
SCCOL GetRefStartX() const
const MouseEvent & GetMouseEvent() const
void GetMouseQuadrant(const Point &rClickPos, ScSplitPos eWhich, SCCOL nPosX, SCROW nPosY, bool &rLeft, bool &rTop)
bool ValidRow(SCROW nRow) const
ScFillMode GetFillMode() const
#define SELENG_AUTOREPEAT_INTERVAL_MAX
constexpr tools::Long Height() const
sal_uInt16 nScFillModeMouseModifier
void SetAnchor(SCCOL nPosX, SCROW nPosY)
virtual void DestroyAnchor() override
bool IsSelCtrlMouseClick() const
ScRefType
Mouse mode to select areas.
const INetURLObject & GetURLObject() const
void AlignToCursor(SCCOL nCurX, SCROW nCurY, ScFollowMode eMode, const ScSplitPos *pWhich=nullptr)
Size GetOutputSizePixel() const
OUString GetURLNoPass(DecodeMechanism eMechanism=DecodeMechanism::ToIUri, rtl_TextEncoding eCharset=RTL_TEXTENCODING_UTF8) const
SfxObjectShell * GetSfxDocShell() const
bool IsRefInputMode() const
constexpr tools::Long getWidth() const
virtual void DeselectAtPoint(const Point &rPointPixel) override
void UpdateRef(SCCOL nCurX, SCROW nCurY, SCTAB nCurZ)
virtual void CreateAnchor() override
SC_DLLPUBLIC sal_uInt16 GetColWidth(SCCOL nCol, SCTAB nTab, bool bHiddenAsZero=true) const
void MarkCursor(SCCOL nCurX, SCROW nCurY, SCTAB nCurZ, bool bCols=false, bool bRows=false, bool bCellSelection=false)
void SetAnchorFlag(bool bSet)
bool SetCursorAtCell(SCCOL nPosX, SCROW nPosY, bool bScroll)
ScSplitMode GetVSplitMode() const
void InitBlockMode(SCCOL nCurX, SCROW nCurY, SCTAB nCurZ, bool bTestNeg=false, bool bCols=false, bool bRows=false, bool bForceNeg=false)
bool IsMarking(SCCOL nCol, SCROW nRow, SCTAB nTab) const
ScViewFunctionSet(ScViewData *pNewViewData)
bool m_bDetectedRangeSegmentation false
SC_DLLPUBLIC const ScTableProtection * GetTabProtection(SCTAB nTab) const
SfxMedium * GetMedium() const