28 #include <globstr.hrc>
62 nStartCol =
static_cast<SCCOL>(nStart);
63 nEndCol =
static_cast<SCCOL>(nEnd);
71 if (rDoc.
HasAttrib( nStartCol,nStartRow,nTab, nEndCol,nEndRow,nTab,
90 std::unique_ptr<ScOutlineTable> pUndoTab;
103 bRes = rArray.
Insert( nStartCol, nEndCol, bSize );
105 bRes = rArray.
Insert( nStartRow, nEndRow, bSize );
112 std::make_unique<ScUndoMakeOutline>( &
rDocShell,
113 nStartCol,nStartRow,nTab,nEndCol,nEndRow,nTab,
114 std::move(pUndoTab), bColumns,
true ) );
155 std::unique_ptr<ScOutlineTable> pUndoTab;
164 bRes = rArray.
Remove( nStartCol, nEndCol, bSize );
166 bRes = rArray.
Remove( nStartRow, nEndRow, bSize );
173 std::make_unique<ScUndoMakeOutline>( &
rDocShell,
174 nStartCol,nStartRow,nTab, nEndCol,nEndRow,nTab,
175 std::move(pUndoTab), bColumns,
false ) );
203 bool bSuccess =
false;
213 SCCOLROW nCol1, nCol2, nRow1, nRow2;
217 SCROW nStartRow = nRow1;
219 SCROW nEndRow = nRow2;
222 pUndoDoc->InitUndo( rDoc, nTab, nTab,
true,
true );
226 std::unique_ptr<ScOutlineTable> pUndoTab(
new ScOutlineTable( *pTable ));
229 std::make_unique<ScUndoRemoveAllOutlines>( &
rDocShell,
230 nStartCol, nStartRow, nTab,
231 nEndCol, nEndRow, nTab,
232 std::move(pUndoDoc), std::move(pUndoTab) ) );
268 std::unique_ptr<ScOutlineTable> pUndoTab;
276 SCCOLROW nCol1, nCol2, nRow1, nRow2;
279 SCCOL nOutStartCol =
static_cast<SCCOL>(nCol1);
280 SCROW nOutStartRow = nRow1;
282 SCROW nOutEndRow = nRow2;
285 pUndoDoc->InitUndo( rDoc, nTab, nTab,
true,
true );
296 rDoc.
DoAutoOutline( nStartCol,nStartRow, nEndCol,nEndRow, nTab );
301 std::make_unique<ScUndoAutoOutline>( &
rDocShell,
302 nStartCol, nStartRow, nTab,
303 nEndCol, nEndRow, nTab,
304 std::move(pUndoDoc), std::move(pUndoTab) ) );
315 bool bRecord,
bool bPaint )
334 std::unique_ptr<ScOutlineTable> pUndoTab(
new ScOutlineTable( *pTable ));
338 pUndoDoc->InitUndo( rDoc, nTab, nTab,
true );
345 pUndoDoc->InitUndo( rDoc, nTab, nTab,
false,
true );
350 std::make_unique<ScUndoOutlineLevel>( &
rDocShell,
352 std::move(pUndoDoc), std::move(pUndoTab),
353 bColumns, nLevel ) );
358 while ((pEntry=aIter.
GetNext()) !=
nullptr)
363 sal_uInt16 nThisLevel = aIter.
LastLevel();
364 bool bShow = (nThisLevel < nLevel);
374 else if ( nThisLevel == nLevel )
385 if (pParentEntry && pParentEntry->
IsHidden())
397 rDoc.
ShowCol( static_cast<SCCOL>(
i), nTab, bShow );
402 bool bFiltered = rDoc.
RowFiltered(
i, nTab,
nullptr, &nFilterEnd );
403 nFilterEnd = std::min( nThisEnd, nFilterEnd );
404 if ( !bShow || !bFiltered )
405 rDoc.
ShowRows(
i, nFilterEnd, nTab, bShow );
455 std::unique_ptr<ScOutlineTable> pUndoTab(
new ScOutlineTable( *pTable ));
457 pUndoDoc->InitUndo( rDoc, nTab, nTab,
true,
true );
462 std::make_unique<ScUndoOutlineBlock>( &
rDocShell,
463 nStartCol, nStartRow, nTab, nEndCol, nEndRow, nTab,
464 std::move(pUndoDoc), std::move(pUndoTab),
true ) );
473 while ((pEntry=aColIter.
GetNext()) !=
nullptr)
477 if ( nStart>=nStartCol && nEnd<=nEndCol )
481 if (nStart<nMin) nMin=nStart;
482 if (nEnd>nMax) nMax=nEnd;
486 for ( i=nMin; i<=nMax; i++ )
487 rDoc.
ShowCol( static_cast<SCCOL>(i), nTab,
true );
495 while ((pEntry=aRowIter.
GetNext()) !=
nullptr)
499 if ( nStart>=nStartRow && nEnd<=nEndRow )
503 if (nStart<nMin) nMin=nStart;
504 if (nEnd>nMax) nMax=nEnd;
508 for ( i=nMin; i<=nMax; i++ )
511 SCROW nFilterEnd = i;
512 bool bFiltered = rDoc.
RowFiltered( i, nTab,
nullptr, &nFilterEnd );
513 nFilterEnd = std::min( nMax, nFilterEnd );
515 rDoc.
ShowRows( i, nFilterEnd, nTab,
true );
570 rColArray.
ExtendBlock( nColLevel, nEffStartCol, nEffEndCol );
575 rRowArray.
ExtendBlock( nRowLevel, nEffStartRow, nEffEndRow );
581 std::unique_ptr<ScOutlineTable> pUndoTab(
new ScOutlineTable( *pTable ));
583 pUndoDoc->InitUndo( rDoc, nTab, nTab,
true,
true );
590 std::make_unique<ScUndoOutlineBlock>( &
rDocShell,
591 nStartCol, nStartRow, nTab, nEndCol, nEndRow, nTab,
592 std::move(pUndoDoc), std::move(pUndoTab),
false ) );
597 nCount = rColArray.
GetCount(nColLevel);
598 for ( i=0; i<nCount; i++ )
600 pEntry = rColArray.
GetEntry(nColLevel,i);
604 if ( static_cast<SCCOLROW>(nStartCol)<=nEnd && static_cast<SCCOLROW>(nEndCol)>=nStart )
605 HideOutline( nTab,
true, nColLevel, i,
false,
false );
610 nCount = rRowArray.
GetCount(nRowLevel);
611 for ( i=0; i<nCount; i++ )
613 pEntry = rRowArray.
GetEntry(nRowLevel,i);
617 if ( nStartRow<=nEnd && nEndRow>=nStart )
618 HideOutline( nTab,
false, nRowLevel, i,
false,
false );
636 bool bRecord,
bool bPaint )
655 pUndoDoc->InitUndo( rDoc, nTab, nTab,
true );
662 pUndoDoc->InitUndo( rDoc, nTab, nTab,
false,
true );
667 std::make_unique<ScUndoDoOutline>( &
rDocShell,
668 nStart, nEnd, nTab, std::move(pUndoDoc),
669 bColumns, nLevel, nEntry,
true ) );
674 for ( i = nStart; i <= nEnd; i++ )
677 rDoc.
ShowCol( static_cast<SCCOL>(i), nTab,
true );
681 SCROW nFilterEnd = i;
682 bool bFiltered = rDoc.
RowFiltered( i, nTab,
nullptr, &nFilterEnd );
683 nFilterEnd = std::min( nEnd, nFilterEnd );
685 rDoc.
ShowRows( i, nFilterEnd, nTab,
true );
691 while ((pEntry=aIter.
GetNext()) !=
nullptr)
698 for ( i = nSubStart; i <= nSubEnd; i++ )
699 rDoc.
ShowCol( static_cast<SCCOL>(i), nTab,
false );
701 rDoc.
ShowRows( nSubStart, nSubEnd, nTab,
false );
724 bool bRecord,
bool bPaint )
747 pUndoDoc->InitUndo( rDoc, nTab, nTab,
true );
754 pUndoDoc->InitUndo( rDoc, nTab, nTab,
false,
true );
759 std::make_unique<ScUndoDoOutline>( &
rDocShell,
760 nStart, nEnd, nTab, std::move(pUndoDoc),
761 bColumns, nLevel, nEntry,
false ) );
767 for ( i = nStart; i <= nEnd; i++ )
768 rDoc.
ShowCol( static_cast<SCCOL>(i), nTab,
false );
770 rDoc.
ShowRows( nStart, nEnd, nTab,
false );
void ExtendBlock(size_t nLevel, SCCOLROW &rBlkStart, SCCOLROW &rBlkEnd)
SC_DLLPUBLIC void ShowCol(SCCOL nCol, SCTAB nTab, bool bShow)
void UpdatePageBreaks(SCTAB nTab, const ScRange *pUserArea=nullptr)
static void lcl_PaintWidthHeight(ScDocShell &rDocShell, SCTAB nTab, bool bColumns, SCCOLROW nStart, SCCOLROW nEnd)
Move PaintWidthHeight to DocShell ?
SC_DLLPUBLIC void ShowRows(SCROW nRow1, SCROW nRow2, SCTAB nTab, bool bShow)
SC_DLLPUBLIC bool IsHidden() const
bool RemoveAllOutlines(SCTAB nTab, bool bRecord)
SfxBindings * GetViewBindings()
SC_DLLPUBLIC void SetDrawPageSize(SCTAB nTab)
SC_DLLPUBLIC SCCOLROW GetEnd() const
void SetDocumentModified()
ScOutlineEntry * GetEntry(size_t nLevel, size_t nIndex)
void Invalidate(sal_uInt16 nId)
const ScOutlineEntry * GetEntryByPos(size_t nLevel, SCCOLROW nPos) const
SC_DLLPUBLIC bool HasAttrib(SCCOL nCol1, SCROW nRow1, SCTAB nTab1, SCCOL nCol2, SCROW nRow2, SCTAB nTab2, HasAttrFlags nMask) const
void SetVisible(bool bNewVisible)
virtual SfxUndoManager * GetUndoManager() override
void DoAutoOutline(SCCOL nStartCol, SCROW nStartRow, SCCOL nEndCol, SCROW nEndRow, SCTAB nTab)
SC_DLLPUBLIC SCROW MaxRow() const
sal_Int32 SCCOLROW
a type capable of holding either SCCOL or SCROW
void CopyToDocument(SCCOL nCol1, SCROW nRow1, SCTAB nTab1, SCCOL nCol2, SCROW nRow2, SCTAB nTab2, InsertDeleteFlags nFlags, bool bMarked, ScDocument &rDestDoc, const ScMarkData *pMarks=nullptr, bool bColRowFlags=true)
void MakeOutline(const ScRange &rRange, bool bColumns, bool bRecord, bool bApi)
bool SetOutlineTable(SCTAB nTab, const ScOutlineTable *pNewOutline)
void GetRange(SCCOLROW &rStart, SCCOLROW &rEnd) const
SC_DLLPUBLIC SCCOL MaxCol() const
virtual void AddUndoAction(std::unique_ptr< SfxUndoAction > pAction, bool bTryMerg=false)
void InvalidatePageBreaks(SCTAB nTab)
void RemoveOutline(const ScRange &rRange, bool bColumns, bool bRecord, bool bApi)
bool HideMarkedOutlines(const ScRange &rRange, bool bRecord)
SC_DLLPUBLIC SCCOLROW GetStart() const
SC_DLLPUBLIC bool RowFiltered(SCROW nRow, SCTAB nTab, SCROW *pFirstRow=nullptr, SCROW *pLastRow=nullptr) const
std::unique_ptr< ScDocument, o3tl::default_delete< ScDocument > > ScDocumentUniquePtr
const ScOutlineArray & GetRowArray() const
const ScOutlineArray & GetColArray() const
void OnLOKShowHideColRow(bool bColumns, SCCOLROW nStartRow)
size_t GetCount(size_t nLevel) const
void SetHidden(bool bNewHidden)
void SetVisibleBelow(size_t nLevel, size_t nEntry, bool bValue, bool bSkipHidden=false)
bool Remove(SCCOLROW nBlockStart, SCCOLROW nBlockEnd, bool &rSizeChanged)
void AutoOutline(const ScRange &rRange, bool bRecord)
void PostPaint(SCCOL nStartCol, SCROW nStartRow, SCTAB nStartTab, SCCOL nEndCol, SCROW nEndRow, SCTAB nEndTab, PaintPartFlags nPart, sal_uInt16 nExtFlags=0)
bool SelectLevel(SCTAB nTab, bool bColumns, sal_uInt16 nLevel, bool bRecord, bool bPaint)
void SetStreamValid(SCTAB nTab, bool bSet, bool bIgnoreLock=false)
ScOutlineEntry * GetNext()
bool ShowMarkedOutlines(const ScRange &rRange, bool bRecord)
SC_DLLPUBLIC ScOutlineTable * GetOutlineTable(SCTAB nTab, bool bCreate=false)
const ScDocument & GetDocument() const
void ErrorMessage(TranslateId pGlobStrId)
static bool isAnyEditViewInRange(const SfxViewShell *pForViewShell, bool bColumns, SCCOLROW nStart, SCCOLROW nEnd)
bool IsUndoEnabled() const
bool FindTouchedLevel(SCCOLROW nBlockStart, SCCOLROW nBlockEnd, size_t &rFindLevel) const
void ShowOutline(SCTAB nTab, bool bColumns, sal_uInt16 nLevel, sal_uInt16 nEntry, bool bRecord, bool bPaint)
ScTabViewShell * GetBestViewShell(bool bOnlyVisible=true)
bool Insert(SCCOLROW nStartPos, SCCOLROW nEndPos, bool &rSizeChanged, bool bHidden=false)
bool HideOutline(SCTAB nTab, bool bColumns, sal_uInt16 nLevel, sal_uInt16 nEntry, bool bRecord, bool bPaint)
static void lcl_InvalidateOutliner(SfxBindings *pBindings)
bool m_bDetectedRangeSegmentation false