32 #include <document.hxx>
41 #include <drawview.hxx>
54 #include <officecfg/Office/Calc.hxx>
55 #include <LibreOfficeKit/LibreOfficeKitEnums.h>
65 pFrameWin->EnableRTL(
false );
69 mbInlineWithScrollbar = officecfg::Office::Calc::Layout::Other::TabbarInlineWithScrollbar::get();
71 aScrollTimer.SetTimeout(10);
72 aScrollTimer.SetInvokeHandler(
LINK(
this,
ScTabView, TimerHdl ) );
75 pGridWin[i] =
nullptr;
79 SC_SPLIT_BOTTOMLEFT ) );
80 aFunctionSet.SetSelectionEngine( pSelEngine.get() );
85 &aHdrFunc, pHdrSelEng.get(), this );
88 &aHdrFunc, pHdrSelEng.get(), this );
91 pColOutline[i] = pRowOutline[i] =
nullptr;
97 pHSplitter->SetKeyboardStepSize( 1 );
98 pVSplitter->SetKeyboardStepSize( 1 );
101 if (mbInlineWithScrollbar)
102 pTabControl->SetStyle(pTabControl->GetStyle() |
WB_SIZEABLE);
110 InitScrollBar( *aHScrollLeft, aViewData.GetDocument().MaxCol()+1 );
111 InitScrollBar( *aHScrollRight, aViewData.GetDocument().MaxCol()+1 );
112 InitScrollBar( *aVScrollTop, aViewData.GetDocument().MaxRow()+1 );
113 InitScrollBar( *aVScrollBottom, aViewData.GetDocument().MaxRow()+1 );
124 pHSplitter->SetSplitHdl(
LINK(
this,
ScTabView, SplitHdl ) );
125 pVSplitter->SetSplitHdl(
LINK(
this,
ScTabView, SplitHdl ) );
129 pDrawActual =
nullptr;
146 if ( pOld && pOld->
GetView() == this )
153 pBrushDocument.reset();
154 pDrawBrushSet.reset();
156 pPageBreakData.reset();
159 pDrawActual =
nullptr;
167 auto lRemoveWindows =
170 ScViewData& rOtherViewData = pOtherViewShell->GetViewData();
171 for (
int k = 0; k < 4; ++k)
173 if (rOtherViewData.
HasEditView(static_cast<ScSplitPos>(k)))
181 aViewData.KillEditView();
188 pDrawView->DeleteWindowFromPaintView(pGridWin[i]);
191 pDrawView->HideSdrPage();
198 mpSpellCheckCxt->dispose();
199 mpSpellCheckCxt.reset();
201 mxInputHintOO.reset();
203 pGridWin[i].disposeAndClear();
209 pColBar[i].disposeAndClear();
210 pRowBar[i].disposeAndClear();
211 pColOutline[i].disposeAndClear();
212 pRowOutline[i].disposeAndClear();
215 aScrollBarBox.disposeAndClear();
216 aCornerButton.disposeAndClear();
217 aTopButton.disposeAndClear();
218 aHScrollLeft.disposeAndClear();
219 aHScrollRight.disposeAndClear();
220 aVScrollTop.disposeAndClear();
221 aVScrollBottom.disposeAndClear();
223 pHSplitter.disposeAndClear();
224 pVSplitter.disposeAndClear();
225 pTabControl.disposeAndClear();
234 OSL_ENSURE(pLayer,
"Where is the Draw Layer ??");
241 if ( SC_SPLIT_BOTTOMLEFT != static_cast<ScSplitPos>(i) )
242 pDrawView->AddWindowToPaintView(pGridWin[i],
nullptr);
244 pDrawView->RecalcScale();
248 pGridWin[i]->SetMapMode(pGridWin[i]->GetDrawMapMode());
250 pGridWin[i]->PaintImmediately();
253 SfxRequest aSfxRequest(SID_OBJECT_SELECT, SfxCallMode::SLOT, aViewData.GetViewShell()->GetPool());
254 SetDrawFuncPtr(
new FuSelection(*aViewData.GetViewShell(), GetActiveWin(), pDrawView.get(),
255 pLayer,aSfxRequest));
263 FmFormShell* pFormSh = aViewData.GetViewShell()->GetFormShell();
265 pFormSh->
SetView(pDrawView.get());
267 if (aViewData.GetViewShell()->HasAccessibilityObjects())
268 aViewData.GetViewShell()->BroadcastAccessibility(
SfxHint(SfxHintId::ScAccMakeDrawLayer));
275 pDrawView->AddWindowToPaintView(pWin,
nullptr);
287 SCTAB nTab = aViewData.GetTabNo();
288 pDrawView->HideSdrPage();
289 pDrawView->ShowSdrPage(pDrawView->GetModel()->GetPage(nTab));
293 pDrawView->RecalcScale();
294 pDrawView->UpdateWorkArea();
303 if (aViewData.GetViewShell()->HasAccessibilityObjects())
305 SfxHint aAccHint(SfxHintId::ScAccTableChanged);
306 aViewData.GetViewShell()->BroadcastAccessibility(aAccHint);
314 if (xController.is())
316 ScTabViewObj* pImp = comphelper::getUnoTunnelImplementation<ScTabViewObj>( xController );
325 ScDocShell* pDocSh = GetViewData().GetDocShell();
326 ScModelObj* pModelObj = pDocSh ? comphelper::getUnoTunnelImplementation<ScModelObj>( pDocSh->
GetModel()) :
nullptr;
332 std::stringstream ss;
333 ss << aDocSize.
Width() <<
", " << aDocSize.
Height();
334 OString sRect = ss.str().c_str();
339 OString sPayload = aRectangle.
toString() +
", " + OString::number(aViewData.GetTabNo());
351 SCTAB nTab = aViewData.GetTabNo();
352 bool bEx = aViewData.GetViewShell()->IsDrawSelMode();
353 bool bProt = aViewData.GetDocument().IsTabProtected( nTab ) ||
354 aViewData.GetSfxDocShell()->IsReadOnly();
355 bool bShared = aViewData.GetDocShell()->IsDocShared();
358 SdrLayerAdmin& rAdmin = pDrawView->GetModel()->GetLayerAdmin();
361 pDrawView->SetLayerLocked( pLayer->
GetName(), bProt || !bEx || bShared );
364 pDrawView->SetLayerLocked( pLayer->
GetName() );
367 pDrawView->SetLayerLocked( pLayer->
GetName(), bProt || bShared );
370 pDrawView->SetLayerLocked( pLayer->
GetName(), bProt || bShared );
374 pDrawView->SetLayerLocked( pLayer->
GetName(), bProt || bShared );
375 pDrawView->SetLayerVisible( pLayer->
GetName(),
false);
386 ( pViewSh->
IsDrawTextShell() || pDrawActual->GetSlotID() == SID_DRAW_NOTEEDIT ) )
390 SfxCallMode::SLOT | SfxCallMode::RECORD );
393 pDrawView->ScEndTextEdit();
394 pDrawView->UnmarkAll();
403 return pDrawView->IsTextEdit();
410 return aViewData.GetZoomType();
415 aViewData.SetZoomType( eNew, bAll );
420 aViewData.SetZoom( rNewX, rNewY, bAll );
422 pDrawView->RecalcScale();
428 aViewData.RefreshZoom();
430 pDrawView->RecalcScale();
436 aViewData.SetPagebreakMode(bSet);
438 pDrawView->RecalcScale();
445 pDrawView->SetDragMode( SdrDragMode::Move );
451 if ( !pDrawView && aViewData.GetOptions().GetGridOptions().GetGridVisible() )
455 pDrawView->UpdateUserViewOptions();
457 if (bGraphicsChanged)
458 DrawEnableAnim(
true);
461 bool bGrow = ( aViewData.IsTabMode() && pTabControl->GetSizePixel().Width() <= 0 );
464 bool bShrink = ( bHScrollChanged && aViewData.IsTabMode() && aViewData.IsHScrollMode() &&
467 if ( bGrow || bShrink )
469 Size aSize = pTabControl->GetSizePixel();
471 pTabControl->SetSizePixel(aSize);
480 pDrawView->MarkListHasChanged();
486 pDrawView->AdjustMarkHdl();
492 pDrawView->UpdateIMap( pObj );
505 if ( !pDrawView->IsAnimationEnabled() )
507 pDrawView->SetAnimationEnabled();
512 if ( pGridWin[i] && pGridWin[i]->IsVisible() )
518 pDrawView->SetAnimationEnabled(
false);
526 Outliner* pOL = pDrawView->GetTextEditOutliner();
528 aViewData.UpdateOutlinerFlags( *pOL );
537 pWin->SetDigitLanguage( eNewLang );
553 SCTAB nTab = aViewData.GetTabNo();
561 nScrollX = aRect.
Right() - aWinSize.
Width() + 1;
562 if ( aRect.
Left() < nScrollX )
563 nScrollX = aRect.
Left();
572 if ( aRect.
Left() < 0 )
573 nScrollX = aRect.
Left();
574 if ( aRect.
Top() < 0 )
582 nScrollX = -nScrollX;
584 double nPPTX = aViewData.GetPPTX();
585 double nPPTY = aViewData.GetPPTY();
586 ScSplitPos eWhich = aViewData.GetActivePart();
593 while (nScrollX > 0 && nPosX < rDoc.
MaxCol())
599 else if (nScrollX < 0)
600 while (nScrollX < 0 && nPosX > 0)
615 while (nScrollY < 0 && nPosY > 0)
622 ScrollLines( nLinesX, nLinesY );
627 pDrawBrushSet.reset();
628 pBrushDocument = std::move(pNew);
630 bLockPaintBrush = bLock;
632 aViewData.GetBindings().Invalidate(SID_FORMATPAINTBRUSH);
637 pBrushDocument.reset();
638 pDrawBrushSet = std::move(pNew);
640 bLockPaintBrush = bLock;
642 aViewData.GetBindings().Invalidate(SID_FORMATPAINTBRUSH);
647 if ( HasPaintBrush() )
649 SetBrushDocument(
nullptr,
false );
650 SetActivePointer( PointerStyle::Arrow );
660 if (!pCaption)
return;
666 aRect.
Union( aTailRect );
672 const int nBorderSize = 200;
684 if (pTabViewShell && pViewShell->
GetDocId() == pCurrentViewShell->
GetDocId())
686 for (
auto& pWin: pTabViewShell->pGridWin)
688 if (pWin && pWin->IsVisible())
void SetAutoSpellContext(const std::shared_ptr< sc::SpellCheckContext > &ctx)
SfxViewFrame * GetViewFrame() const
#define LINK(Instance, Class, Member)
SvxZoomType GetZoomType() const
void ResetBrushDocument()
bool IsDrawSelMode() const
static void notifyDocumentSizeChanged(SfxViewShell const *pThisView, const OString &rPayload, vcl::ITiledRenderable *pDoc, bool bInvalidateAll=true)
virtual const tools::Rectangle & GetCurrentBoundRect() const
#define SC_TABBAR_DEFWIDTH
ScVSplitPos WhichV(ScSplitPos ePos)
void RemoveWindowFromForeignEditView(SfxViewShell *pViewShell, ScSplitPos eWhich)
SC_DLLPUBLIC void RefreshZoom()
SC_DLLPUBLIC bool IsNegativePage(SCTAB nTab) const
void setWidth(tools::Long nWidth)
void SetBrushDocument(ScDocumentUniquePtr pNew, bool bLock)
void SetPagebreakMode(bool bSet)
ScHSplitPos WhichH(ScSplitPos ePos)
virtual const tools::Rectangle & GetLogicRect() const override
ViewShellDocId GetDocId() const override
bool HasEditView(ScSplitPos eWhich) const
constexpr SdrLayerID SC_LAYER_BACK(1)
void ViewOptionsHasChanged(bool bHScrollChanged, bool bGraphicsChanged)
void UpdateIMap(SdrObject *pObj)
::basegfx::B2DPolygon getTailPolygon() const
void SheetChanged(bool bSameTabButMoved)
Base class for all functions.
css::uno::Reference< css::frame::XModel > GetModel() const
void TabChanged(bool bSameTabButMoved=false)
Called after moving, copying, inserting or deleting a sheet.
static void forEachOtherView(ViewShellType *pThisViewShell, FunctionType f)
SC_DLLPUBLIC sal_uInt16 GetRowHeight(SCROW nRow, SCTAB nTab, bool bHiddenAsZero=true) const
void StartAnimations(SCTAB nTab)
Reference< XController > xController
SC_DLLPUBLIC SCROW MaxRow() const
Additional class containing cell annotation data.
SfxFrame & GetFrame() const
static SfxViewShell * GetNext(const SfxViewShell &rPrev, bool bOnlyVisible=true, const std::function< bool(const SfxViewShell *)> &isViewShell=nullptr)
static SfxViewShell * Current()
void libreOfficeKitViewCallback(int nType, const char *pPayload) const override
bool IsDrawTextShell() const
void DrawMarkListHasChanged()
const tools::Long nScrollY
void ScrollToObject(const SdrObject *pDrawObj)
const tools::Long nScrollX
ScDocument * GetDocument() const
void SetZoom(const Fraction &rNewX, const Fraction &rNewY, bool bAll)
SC_DLLPUBLIC ScDrawLayer * GetDrawLayer()
SC_DLLPUBLIC SCCOL MaxCol() const
SfxDispatcher * GetDispatcher() const
void DoAddWin(ScGridWindow *pWin)
std::unique_ptr< ScDocument, o3tl::default_delete< ScDocument > > ScDocumentUniquePtr
void DrawEnableAnim(bool bSet)
tools::Long Width() const
void SetDrawShell(bool bActive)
const OUString & GetName() const
static bool GetLayoutRTL()
virtual css::uno::Reference< css::frame::XModel > GetCurrentDocument() const
SdrLayer * GetLayerPerID(SdrLayerID nID)
void MakeVisible(const tools::Rectangle &rHMMRect)
static void ClearSelection(vcl::Window *pWindow)
Size GetOutputSizePixel() const
static SfxViewShell * GetFirst(bool bOnlyVisible=true, const std::function< bool(const SfxViewShell *)> &isViewShell=nullptr)
SfxViewShell * GetViewShell() const
ScSelectionTransferObj * GetSelectionTransfer() const
void DigitLanguageChanged()
Point LogicToPixel(const Point &rLogicPt) const
WinBits const WB_SIZEABLE
B2DRange const & getB2DRange() const
SdrCaptionObj * GetCaption() const
Returns an existing note caption object.
constexpr SdrLayerID SC_LAYER_HIDDEN(4)
virtual void Invalidate(sal_uInt16 nId=0)
constexpr SdrLayerID SC_LAYER_FRONT(0)
bool IsDrawTextEdit() const
css::uno::Reference< css::frame::XController > GetController() const
constexpr SdrLayerID SC_LAYER_INTERN(2)
static VclPtr< reference_type > Create(Arg &&...arg)
tools::Long Height() const
static void OnLOKNoteStateChanged(const ScPostIt *pNote)
void UpdateAnchorHandles()
void SetSelectionTransfer(ScSelectionTransferObj *pNew)
void SetZoomType(SvxZoomType eNew, bool bAll)
void InvalidateAll(bool bWithMsg)
void UpdateDrawTextOutliner()
const SfxPoolItem * Execute(sal_uInt16 nSlot, SfxCallMode nCall=SfxCallMode::SLOT, const SfxPoolItem **pArgs=nullptr, sal_uInt16 nModi=0, const SfxPoolItem **pInternalArgs=nullptr)
SC_DLLPUBLIC sal_uInt16 GetColWidth(SCCOL nCol, SCTAB nTab, bool bHiddenAsZero=true) const
constexpr SdrLayerID SC_LAYER_CONTROLS(3)
void SetDrawBrushSet(std::unique_ptr< SfxItemSet > pNew, bool bLock)
virtual Size getDocumentSize() override
void MakeDrawView(TriState nForceDesignMode)
ScTabView * GetView() const