26 #include <document.hxx>
34 #define SC_SELENG_REFMODE_UPDATE_INTERVAL_MIN 65
44 pViewData( pNewViewData ),
49 OSL_ENSURE(
pViewData,
"ViewData==0 at FunctionSet");
61 bool bLeftScroll,
bool bTopScroll,
bool bRightScroll,
bool bBottomScroll )
69 double nWinRight = rWinSize.
getWidth() + aRootPos.getX();
70 double nMarginRight = aScrRect.
GetWidth() - nWinRight;
71 double nHOffset = rEffPos.X() - rWinSize.
Width();
72 double nHAccelRate = nHOffset / nMarginRight;
74 if (nHAccelRate > 1.0)
82 double nMarginLeft = aRootPos.getX();
83 double nHOffset = -rEffPos.X();
84 double nHAccelRate = nHOffset / nMarginLeft;
86 if (nHAccelRate > 1.0)
90 if (nUpdateInterval > nTmp)
91 nUpdateInterval = nTmp;
96 double nWinBottom = rWinSize.
getHeight() + aRootPos.getY();
97 double nMarginBottom = aScrRect.
GetHeight() - nWinBottom;
98 double nVOffset = rEffPos.Y() - rWinSize.
Height();
99 double nVAccelRate = nVOffset / nMarginBottom;
101 if (nVAccelRate > 1.0)
105 if (nUpdateInterval > nTmp)
106 nUpdateInterval = nTmp;
111 double nMarginTop = aRootPos.getY();
112 double nVOffset = -rEffPos.Y();
113 double nVAccelRate = nVOffset / nMarginTop;
115 if (nVAccelRate > 1.0)
119 if (nUpdateInterval > nTmp)
120 nUpdateInterval = nTmp;
126 if (bRefMode && nUpdateInterval < SC_SELENG_REFMODE_UPDATE_INTERVAL_MIN)
132 nUpdateInterval = SC_SELENG_REFMODE_UPDATE_INTERVAL_MIN;
134 return nUpdateInterval;
191 ScRange aMarkRange = pTransferObj->GetRange();
194 SCCOL nHandleX = (nPosX >= nStartX) ? nPosX - nStartX : 0;
195 SCROW nHandleY = (nPosY >= nStartY) ? nPosY - nStartY : 0;
196 pTransferObj->SetDragHandlePos( nHandleX, nHandleY );
198 pTransferObj->SetVisibleTab( nTab );
200 pTransferObj->SetDragSource( pDocSh, rMark );
204 pWindow->
EndTracking( TrackingEventFlags::Cancel );
206 SC_MOD()->SetDragObject( pTransferObj.get(), nullptr );
207 pTransferObj->StartDrag( pWindow, nDragActions );
218 bool bRefMode =
SC_MOD()->IsFormulaMode();
227 bool bRefMode =
SC_MOD()->IsFormulaMode();
271 bool bRefMode =
SC_MOD()->IsFormulaMode();
300 Point aEffPos = rPointPixel;
301 if ( aEffPos.X() == 0 )
303 if ( aEffPos.Y() == 0 )
308 bool bLeftScroll = ( aEffPos.X() < 0 );
309 bool bTopScroll = ( aEffPos.Y() < 0 );
314 nPosX, nPosY,
true, true );
326 if (bFillingSelection)
328 bBottomScroll = aEffPos.Y() >= aWinSize.
Height();
329 bRightScroll = aEffPos.X() >= aWinSize.
Width();
334 bBottomScroll = aEditArea.
Bottom() >= aWinSize.
Height();
335 bRightScroll = aEditArea.
Right() >= aWinSize.
Width();
338 bool bScroll = bRightScroll || bBottomScroll || bLeftScroll || bTopScroll;
341 if (bFillingSelection)
347 if ( bLeft && !bRightScroll )
348 do --nPosX;
while ( nPosX>=0 && rDoc.
ColHidden( nPosX, nTab ) );
349 if ( bTop && !bBottomScroll )
366 if ( aEffPos.X() >= aWinSize.
Width() )
383 if ( aEffPos.Y() >= aWinSize.
Height() )
404 aWinSize, aEffPos, bLeftScroll, bTopScroll, bRightScroll, bBottomScroll);
425 if (nPosX < 0 || nPosY < 0)
435 if ( bSkipProtected && bSkipUnprotected )
439 if ( (bCellProtected && bSkipProtected) || (!bCellProtected && bSkipUnprotected) )
485 SCCOL nStartX, nEndX;
486 SCROW nStartY, nEndY;
499 if ( nPosX+1 >= nStartX && nPosX <= nEndX &&
500 nPosY+1 >= nStartY && nPosY <= nEndY &&
501 ( nPosX != nEndX || nPosY != nEndY ) )
506 for (
SCCOL i=nPosX+1;
i<=nEndX;
i++)
510 SCCOL nDelStartX = nStartX;
511 SCROW nDelStartY = nStartY;
512 if ( nSizeX > nSizeY )
513 nDelStartX = nPosX + 1;
515 nDelStartY = nPosY + 1;
518 if ( nDelStartX < nStartX )
519 nDelStartX = nStartX;
520 if ( nDelStartY < nStartY )
521 nDelStartY = nStartY;
526 nEndX,nEndY,nTab ) );
550 bool bNegX = ( nPosX < nStartX );
551 bool bNegY = ( nPosY < nStartY );
558 do ++nPosX;
while ( nPosX<nStartX && rDoc.
ColHidden(nPosX, nTab) );
563 for (
SCCOL i=nEndX+1;
i<=nPosX;
i++)
571 if (++nPosY < nStartY)
582 if ( nSizeX > nSizeY )
593 SCCOL nRefStX = bNegX ? nEndX : nStartX;
594 SCROW nRefStY = bNegY ? nEndY : nStartY;
609 OSL_ENSURE( rDoc.
IsEmbedded(),
"!rDoc.IsEmbedded()" );
616 pView->
InitRefMode( aRange.aEnd.Col(), aRange.aEnd.Row(), nTab, eRefMode );
618 pView->
InitRefMode( aRange.aStart.Col(), aRange.aStart.Row(), nTab, eRefMode );
626 SCCOL nStartX, nEndX;
627 SCROW nStartY, nEndY;
637 if ( nPosX < nStartX ) nPosX = nStartX;
638 if ( nPosY < nStartY ) nPosY = nStartY;
666 pView->
MarkCursor( nPosX, nPosY, nTab,
false,
false,
true );
694 if ( nOldX != nPosX || nOldY != nPosY )
720 bool bRefMode =
SC_MOD()->IsFormulaMode();
749 bool bRefMode =
SC_MOD()->IsFormulaMode();
774 pViewData( pNewViewData ),
780 OSL_ENSURE(
pViewData,
"ViewData==0 at FunctionSet");
839 bScroll = ( rPointPixel.X() < 0 || rPointPixel.X() >= aWinSize.
Width() );
841 bScroll = ( rPointPixel.Y() < 0 || rPointPixel.Y() >= aWinSize.
Height() );
844 bool bSwitched =
false;
849 if ( rPointPixel.X() > aWinSize.
Width() )
868 if ( rPointPixel.Y() > aWinSize.
Height() )
893 nPosX, nPosY, false );
938 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)
tools::Long getWidth() const
SCROW GetRefStartY() const
ScHSplitPos WhichH(ScSplitPos ePos)
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
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)
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
tools::Long getHeight() 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.
tools::Long Width() const
ScMarkType GetSimpleArea(SCCOL &rStartCol, SCROW &rStartRow, SCTAB &rStartTab, SCCOL &rEndCol, SCROW &rEndRow, SCTAB &rEndTab) const
ScGridWindow * GetActiveWin()
vcl::Window * GetWindow() const
Size GetOutputSizePixel() 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
sal_uInt16 nScFillModeMouseModifier
void SetAnchor(SCCOL nPosX, SCROW nPosY)
virtual void DestroyAnchor() override
bool IsSelCtrlMouseClick() const
ScRefType
Mouse mode to select areas.
tools::Long Height() const
const INetURLObject & GetURLObject() const
void AlignToCursor(SCCOL nCurX, SCROW nCurY, ScFollowMode eMode, const ScSplitPos *pWhich=nullptr)
OUString GetURLNoPass(DecodeMechanism eMechanism=DecodeMechanism::ToIUri, rtl_TextEncoding eCharset=RTL_TEXTENCODING_UTF8) const
SfxObjectShell * GetSfxDocShell() const
bool IsRefInputMode() 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)
SC_DLLPUBLIC const ScTableProtection * GetTabProtection(SCTAB nTab) const
SfxMedium * GetMedium() const