29 #include <osl/diagnose.h>
33 #include <document.hxx>
42 #include <drawview.hxx>
55 #include <officecfg/Office/Calc.hxx>
56 #include <LibreOfficeKit/LibreOfficeKitEnums.h>
66 pFrameWin->EnableRTL(
false );
70 mbInlineWithScrollbar = officecfg::Office::Calc::Layout::Other::TabbarInlineWithScrollbar::get();
72 aScrollTimer.SetTimeout(10);
73 aScrollTimer.SetInvokeHandler(
LINK(
this,
ScTabView, TimerHdl ) );
76 pGridWin[i] =
nullptr;
80 SC_SPLIT_BOTTOMLEFT ) );
81 aFunctionSet.SetSelectionEngine( pSelEngine.get() );
86 &aHdrFunc, pHdrSelEng.get(), this );
89 &aHdrFunc, pHdrSelEng.get(), this );
92 pColOutline[i] = pRowOutline[i] =
nullptr;
98 pHSplitter->SetKeyboardStepSize( 1 );
99 pVSplitter->SetKeyboardStepSize( 1 );
102 if (mbInlineWithScrollbar)
103 pTabControl->SetStyle(pTabControl->GetStyle() |
WB_SIZEABLE);
111 InitScrollBar( *aHScrollLeft, aViewData.GetDocument().MaxCol()+1 );
112 InitScrollBar( *aHScrollRight, aViewData.GetDocument().MaxCol()+1 );
113 InitScrollBar( *aVScrollTop, aViewData.GetDocument().MaxRow()+1 );
114 InitScrollBar( *aVScrollBottom, aViewData.GetDocument().MaxRow()+1 );
125 pHSplitter->SetSplitHdl(
LINK(
this,
ScTabView, SplitHdl ) );
126 pVSplitter->SetSplitHdl(
LINK(
this,
ScTabView, SplitHdl ) );
130 pDrawActual =
nullptr;
147 if ( pOld && pOld->
GetView() == this )
154 pBrushDocument.reset();
155 pDrawBrushSet.reset();
157 pPageBreakData.reset();
160 pDrawActual =
nullptr;
168 auto lRemoveWindows =
171 ScViewData& rOtherViewData = pOtherViewShell->GetViewData();
172 for (
int k = 0; k < 4; ++k)
174 if (rOtherViewData.
HasEditView(static_cast<ScSplitPos>(k)))
182 aViewData.KillEditView();
189 pDrawView->DeleteWindowFromPaintView(pGridWin[i]);
192 pDrawView->HideSdrPage();
199 mpSpellCheckCxt->dispose();
200 mpSpellCheckCxt.reset();
202 mxInputHintOO.reset();
204 pGridWin[i].disposeAndClear();
210 pColBar[i].disposeAndClear();
211 pRowBar[i].disposeAndClear();
212 pColOutline[i].disposeAndClear();
213 pRowOutline[i].disposeAndClear();
216 aScrollBarBox.disposeAndClear();
217 aCornerButton.disposeAndClear();
218 aTopButton.disposeAndClear();
219 aHScrollLeft.disposeAndClear();
220 aHScrollRight.disposeAndClear();
221 aVScrollTop.disposeAndClear();
222 aVScrollBottom.disposeAndClear();
224 pHSplitter.disposeAndClear();
225 pVSplitter.disposeAndClear();
226 pTabControl.disposeAndClear();
235 OSL_ENSURE(pLayer,
"Where is the Draw Layer ??");
242 if ( SC_SPLIT_BOTTOMLEFT != static_cast<ScSplitPos>(i) )
243 pDrawView->AddWindowToPaintView(pGridWin[i],
nullptr);
245 pDrawView->RecalcScale();
249 pGridWin[i]->SetMapMode(pGridWin[i]->GetDrawMapMode());
251 pGridWin[i]->PaintImmediately();
254 SfxRequest aSfxRequest(SID_OBJECT_SELECT, SfxCallMode::SLOT, aViewData.GetViewShell()->GetPool());
255 SetDrawFuncPtr(
new FuSelection(*aViewData.GetViewShell(), GetActiveWin(), pDrawView.get(),
256 pLayer,aSfxRequest));
264 FmFormShell* pFormSh = aViewData.GetViewShell()->GetFormShell();
266 pFormSh->
SetView(pDrawView.get());
268 if (aViewData.GetViewShell()->HasAccessibilityObjects())
269 aViewData.GetViewShell()->BroadcastAccessibility(
SfxHint(SfxHintId::ScAccMakeDrawLayer));
276 pDrawView->AddWindowToPaintView(pWin,
nullptr);
288 SCTAB nTab = aViewData.GetTabNo();
289 pDrawView->HideSdrPage();
290 pDrawView->ShowSdrPage(pDrawView->GetModel()->GetPage(nTab));
294 pDrawView->RecalcScale();
295 pDrawView->UpdateWorkArea();
304 if (aViewData.GetViewShell()->HasAccessibilityObjects())
306 SfxHint aAccHint(SfxHintId::ScAccTableChanged);
307 aViewData.GetViewShell()->BroadcastAccessibility(aAccHint);
315 if (xController.is())
317 ScTabViewObj* pImp = comphelper::getUnoTunnelImplementation<ScTabViewObj>( xController );
326 ScDocShell* pDocSh = GetViewData().GetDocShell();
327 ScModelObj* pModelObj = pDocSh ? comphelper::getUnoTunnelImplementation<ScModelObj>( pDocSh->
GetModel()) :
nullptr;
333 std::stringstream ss;
334 ss << aDocSize.
Width() <<
", " << aDocSize.
Height();
335 OString sRect = ss.str().c_str();
340 OString sPayload = aRectangle.
toString() +
", " + OString::number(aViewData.GetTabNo());
352 SCTAB nTab = aViewData.GetTabNo();
353 bool bEx = aViewData.GetViewShell()->IsDrawSelMode();
354 bool bProt = aViewData.GetDocument().IsTabProtected( nTab ) ||
355 aViewData.GetSfxDocShell()->IsReadOnly();
356 bool bShared = aViewData.GetDocShell()->IsDocShared();
359 SdrLayerAdmin& rAdmin = pDrawView->GetModel()->GetLayerAdmin();
362 pDrawView->SetLayerLocked( pLayer->
GetName(), bProt || !bEx || bShared );
365 pDrawView->SetLayerLocked( pLayer->
GetName() );
368 pDrawView->SetLayerLocked( pLayer->
GetName(), bProt || bShared );
371 pDrawView->SetLayerLocked( pLayer->
GetName(), bProt || bShared );
375 pDrawView->SetLayerLocked( pLayer->
GetName(), bProt || bShared );
376 pDrawView->SetLayerVisible( pLayer->
GetName(),
false);
387 ( pViewSh->
IsDrawTextShell() || pDrawActual->GetSlotID() == SID_DRAW_NOTEEDIT ) )
391 SfxCallMode::SLOT | SfxCallMode::RECORD );
394 pDrawView->ScEndTextEdit();
395 pDrawView->UnmarkAll();
404 return pDrawView->IsTextEdit();
411 return aViewData.GetZoomType();
416 aViewData.SetZoomType( eNew, bAll );
421 aViewData.SetZoom( rNewX, rNewY, bAll );
423 pDrawView->RecalcScale();
429 aViewData.RefreshZoom();
431 pDrawView->RecalcScale();
437 aViewData.SetPagebreakMode(bSet);
439 pDrawView->RecalcScale();
446 pDrawView->SetDragMode( SdrDragMode::Move );
452 if ( !pDrawView && aViewData.GetOptions().GetGridOptions().GetGridVisible() )
456 pDrawView->UpdateUserViewOptions();
458 if (bGraphicsChanged)
459 DrawEnableAnim(
true);
462 bool bGrow = ( aViewData.IsTabMode() && pTabControl->GetSizePixel().Width() <= 0 );
465 bool bShrink = ( bHScrollChanged && aViewData.IsTabMode() && aViewData.IsHScrollMode() &&
468 if ( bGrow || bShrink )
470 Size aSize = pTabControl->GetSizePixel();
472 pTabControl->SetSizePixel(aSize);
481 pDrawView->MarkListHasChanged();
487 pDrawView->AdjustMarkHdl();
493 pDrawView->UpdateIMap( pObj );
506 if ( !pDrawView->IsAnimationEnabled() )
508 pDrawView->SetAnimationEnabled();
513 if ( pGridWin[i] && pGridWin[i]->IsVisible() )
519 pDrawView->SetAnimationEnabled(
false);
527 Outliner* pOL = pDrawView->GetTextEditOutliner();
529 aViewData.UpdateOutlinerFlags( *pOL );
538 pWin->SetDigitLanguage( eNewLang );
554 SCTAB nTab = aViewData.GetTabNo();
562 nScrollX = aRect.
Right() - aWinSize.
Width() + 1;
563 if ( aRect.
Left() < nScrollX )
564 nScrollX = aRect.
Left();
573 if ( aRect.
Left() < 0 )
574 nScrollX = aRect.
Left();
575 if ( aRect.
Top() < 0 )
583 nScrollX = -nScrollX;
585 double nPPTX = aViewData.GetPPTX();
586 double nPPTY = aViewData.GetPPTY();
587 ScSplitPos eWhich = aViewData.GetActivePart();
594 while (nScrollX > 0 && nPosX < rDoc.
MaxCol())
600 else if (nScrollX < 0)
601 while (nScrollX < 0 && nPosX > 0)
616 while (nScrollY < 0 && nPosY > 0)
623 ScrollLines( nLinesX, nLinesY );
628 pDrawBrushSet.reset();
629 pBrushDocument = std::move(pNew);
631 bLockPaintBrush = bLock;
633 aViewData.GetBindings().Invalidate(SID_FORMATPAINTBRUSH);
638 pBrushDocument.reset();
639 pDrawBrushSet = std::move(pNew);
641 bLockPaintBrush = bLock;
643 aViewData.GetBindings().Invalidate(SID_FORMATPAINTBRUSH);
648 if ( HasPaintBrush() )
650 SetBrushDocument(
nullptr,
false );
651 SetActivePointer( PointerStyle::Arrow );
661 if (!pCaption)
return;
667 aRect.
Union( aTailRect );
673 const int nBorderSize = 200;
685 if (pTabViewShell && pViewShell->
GetDocId() == pCurrentViewShell->
GetDocId())
687 for (
auto& pWin: pTabViewShell->pGridWin)
689 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)
constexpr tools::Long Width() const
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)
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)
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)
constexpr tools::Long Height() const
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)
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
static void ClearPrimarySelection()
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