25#include <osl/diagnose.h>
32#include <com/sun/star/script/vba/XVBACompatibility.hpp>
47#include <progress.hxx>
59using com::sun::star::script::XLibraryContainer;
60using com::sun::star::script::vba::XVBACompatibility;
61using com::sun::star::container::XNameContainer;
63using com::sun::star::uno::UNO_QUERY;
65using ::std::unique_ptr;
76 bool bFocus = pParent && pParent->
has_focus();
78 if (pGlobStrId && pGlobStrId == STR_PROTECTIONERR)
82 pGlobStrId = STR_READONLYERR;
87 VclMessageType::Info, VclButtonsType::Ok,
120 SCCOL nStartCol = nCol;
121 SCROW nStartRow = nRow;
122 SCTAB nStartTab = nTab;
136 bool bUseThis =
false;
146 pData->GetArea( nDummy, nOldCol1,nOldRow1, nOldCol2,nOldRow2 );
168 m_pDocument->GetDataArea( nTab, nStartCol, nStartRow, nEndCol, nEndRow,
false, bOnlyDown );
169 if ( nOldCol1 != nStartCol || nOldCol2 != nEndCol || nOldRow1 != nStartRow )
171 else if ( nOldRow2 != nEndRow )
174 pData->SetArea( nTab, nOldCol1,nOldRow1, nOldCol2,nEndRow );
180 if ( nOldCol1 == nStartCol && nOldRow1 == nStartRow &&
181 nOldCol2 == nEndCol && nOldRow2 == nEndRow )
195 pData->GetArea( nStartTab, nStartCol,nStartRow, nEndCol,nEndRow );
217 m_pDocument->GetDataArea( nTab, nStartCol, nStartRow, nEndCol, nEndRow,
false, bOnlyDown );
220 bool bHasHeader =
m_pDocument->HasColHeader( nStartCol,nStartRow, nEndCol,nEndRow, nTab );
229 bool bSheetLocal =
true;
237 nTab, nStartCol, nStartRow, nEndCol, nEndRow,
true, bHasHeader) ) );
263 pNoNameData->
GetArea( nOldTab, nOldX1, nOldY1, nOldX2, nOldY2 );
269 if (!bHasHeader && pNoNameData->
HasHeader() && nTab == nOldTab && nStartRow == nOldY1 &&
270 nStartCol <= nOldY2 && nOldY1 <= nEndCol)
282 pNoNameData->
SetArea( nTab, nStartCol,nStartRow, nEndCol,nEndRow );
289 std::unique_ptr<ScDBCollection> pUndoColl;
296 OUString aImport =
ScResId( STR_DBNAME_IMPORT );
304 aNewName = aImport + OUString::number(
nCount );
308 pNoNameData =
new ScDBData( aNewName, nTab,
309 nStartCol,nStartRow, nEndCol,nEndRow,
311 bool ins = rDBs.
insert(std::unique_ptr<ScDBData>(pNoNameData));
312 assert(ins); (void)ins;
317 nStartCol,nStartRow, nEndCol,nEndRow,
319 m_pDocument->SetAnonymousDBData(nTab, std::unique_ptr<ScDBData>(pNoNameData));
327 std::move(pUndoColl),
328 std::make_unique<ScDBCollection>( *pColl ) ) );
353 if (!
pData->HasHeader())
357 pData->SetHeader(bHasHeader);
384 pDBData->
GetArea( nRangeTab, nRangeX1, nRangeY1, nRangeX2, nRangeY2 );
409 bool bChange =
m_pDocument->SetOptimalHeight(aCxt, nStartRow,nEndRow, nTab,
true);
434 bool bIsUndoEnabled =
m_pDocument->IsUndoEnabled();
440 if ( nUpdateTab >= nTabCount )
441 nUpdateTab = nTabCount-1;
445 for (nTab=0; nTab<=nUpdateTab; ++nTab)
452 for (nTab=0; nTab<=nUpdateTab; ++nTab)
461 if (
m_pDocument->IsPendingRowHeights( nUpdateTab ) )
465 m_pDocument->SetPendingRowHeights( nUpdateTab,
false );
494 return pData->GetName();
524 VclMessageType::Info, VclButtonsType::Ok,
525 ScResId(STR_CONSOLIDATE_ERR1)));
540 aData.SetSize( nColSize, nRowSize );
558 aData.GetSize( nColSize, nRowSize );
559 if (bRecord && nColSize > 0 && nRowSize > 0)
561 std::unique_ptr<ScDBData> pUndoData(pDestData ?
new ScDBData(*pDestData) :
nullptr);
565 rParam.
nCol+nColSize-1, rParam.
nRow+nRowSize-1 );
576 std::unique_ptr<ScOutlineTable> pUndoTab(pTable ?
new ScOutlineTable( *pTable ) :
nullptr);
579 pUndoDoc->InitUndo( *
m_pDocument, 0, nTabCount-1,
false,
true );
599 std::make_unique<ScUndoConsolidate>(
this, aDestArea, rParam, std::move(pUndoDoc),
600 true, nInsertCount, std::move(pUndoTab), std::move(pUndoData) ) );
616 std::make_unique<ScUndoConsolidate>(
this, aDestArea, rParam, std::move(pUndoDoc),
617 false, 0,
nullptr, std::move(pUndoData) ) );
625 rParam.
nCol + nColSize - 1, rParam.
nRow + nRowSize - 1 );
633 SCCOL nPaintEndCol = nPaintStartCol + nColSize - 1;
634 SCROW nPaintEndRow = nPaintStartRow + nRowSize - 1;
649 if ( aOldDest.
aEnd.
Col() > nPaintEndCol )
650 nPaintEndCol = aOldDest.
aEnd.
Col();
651 if ( aOldDest.
aEnd.
Row() > nPaintEndRow )
652 nPaintEndRow = aOldDest.
aEnd.
Row();
655 nPaintEndCol, nPaintEndRow, rParam.
nTab, nPaintFlags );
665 SCTAB nEndTab = nTab;
667 while ( nEndTab+1 < nTabCount &&
m_pDocument->IsScenario(nEndTab+1) )
673 if (aCompare == rName)
679 if (
m_pDocument->TestCopyScenario( nSrcTab, nTab ) )
683 m_pDocument->MarkScenario( nSrcTab, nTab, aScenMark );
695 m_pDocument->CopyToDocument(nStartCol, nStartRow, nTab,
697 true, *pUndoDoc, &aScenMark);
699 for (
SCTAB i=nTab+1;
i<=nEndTab;
i++)
701 pUndoDoc->SetScenario(
i,
true );
705 m_pDocument->GetScenarioData(
i, aComment, aColor, nScenFlags );
706 pUndoDoc->SetScenarioData(
i, aComment, aColor, nScenFlags );
708 pUndoDoc->SetActiveScenario(
i, bActive );
716 std::make_unique<ScUndoUseScenario>(
this, aScenMark,
717 ScArea( nTab,nStartCol,nStartRow,nEndCol,nEndRow ),
718 std::move(pUndoDoc), rName ) );
734 VclMessageType::Info, VclButtonsType::Ok,
742 VclMessageType::Info, VclButtonsType::Ok,
743 ScResId(STR_SCENARIO_NOTFOUND)));
749 OSL_FAIL(
"UseScenario on Scenario-Sheet" );
759 OUString aOldComment;
762 m_pDocument->GetScenarioData( nTab, aOldComment, aOldColor, nOldFlags );
764 std::make_unique<ScUndoScenarioFlags>(
this, nTab,
765 aOldName, rName, aOldComment, rComment,
766 aOldColor, rColor, nOldFlags, nFlags) );
771 m_pDocument->SetScenarioData( nTab, rComment, rColor, nFlags );
775 if (aOldName != rName)
790 SCTAB nNewTab = nTab + 1;
804 if (
m_pDocument->CopyTab( nTab, nNewTab, pCopyMark ))
809 std::make_unique<ScUndoMakeScenario>(
this, nTab, nNewTab,
810 rName, rComment, rColor, nFlags, rMark ));
815 m_pDocument->SetScenarioData( nNewTab, rComment, rColor, nFlags );
829 m_pDocument->ApplySelectionPattern( aPattern, aDestMark );
854 SCTAB nDestPos,
bool bInsertNew,
855 bool bNotifyAndPaint )
869 if ( nErrVal > 0 && !bInsertNew)
870 m_pDocument->TransferDrawPage( rSrcDoc, nSrcPos, nDestPos );
872 if(nErrVal>0 && rSrcDoc.
IsScenario( nSrcPos ))
880 m_pDocument->SetScenarioData(nDestPos,aComment,aColor,nFlags);
882 m_pDocument->SetActiveScenario(nDestPos, bActive );
891 if ( bNotifyAndPaint )
914 OUString sSrcCodeName;
923 SCTAB nAdjSource = nSrcTab;
924 if ( nDestTab <= nSrcTab )
928 m_pDocument->CopyTabProtection(nAdjSource, nDestTab);
932 unique_ptr< vector<SCTAB> > pSrcList(
new vector<SCTAB>(1, nSrcTab));
933 unique_ptr< vector<SCTAB> > pDestList(
new vector<SCTAB>(1, nDestTab));
935 std::make_unique<ScUndoCopyTab>(
this, std::move(pSrcList), std::move(pDestList)));
941 OUString aLibName(
"Standard" );
945 if ( xVBACompat.is() )
947 aLibName = xVBACompat->getProjectName();
950 SCTAB nTabToUse = nDestTab;
957 if( xLibContainer.is() )
959 css::uno::Any aLibAny = xLibContainer->getByName( aLibName );
964 xLib->getByName( sSrcCodeName ) >>= sSource;
967 catch (
const css::uno::Exception& )
983 if ( nSrcTab == nDestTab )
989 std::optional<ScProgress> pProgress(std::in_place,
this,
ScResId(STR_UNDO_MOVE_TAB),
991 bool bDone =
m_pDocument->MoveTab( nSrcTab, nDestTab, &*pProgress );
999 unique_ptr< vector<SCTAB> > pSrcList(
new vector<SCTAB>(1, nSrcTab));
1000 unique_ptr< vector<SCTAB> > pDestList(
new vector<SCTAB>(1, nDestTab));
1002 std::make_unique<ScUndoMoveTab>(
this, std::move(pSrcList), std::move(pDestList)));
1032 RefreshPivotTables(aRange);
bool ValidTab(SCTAB nTab)
const SCTAB SC_TAB_APPEND
SfxApplication * SfxGetpApp()
@ Scenario
field button for datapilot
static weld::MessageDialog * CreateMessageDialog(weld::Widget *pParent, VclMessageType eMessageType, VclButtonsType eButtonType, const OUString &rPrimaryMessage, const ILibreOfficeKitNotifier *pNotifier=nullptr)
Use structure ScDocument if a certain size is exceeded?
ScDBData * getByRange(const ScRange &rRange)
Stores global named database ranges.
bool insert(std::unique_ptr< ScDBData > p)
Takes ownership of p and attempts to insert it into the collection.
ScDBData * findByUpperName(const OUString &rName)
ScDBData * GetDBNearCursor(SCCOL nCol, SCROW nRow, SCTAB nTab)
void GetImportParam(ScImportParam &rImportParam) const
bool HasAutoFilter() const
const OUString & GetName() const
void GetArea(SCTAB &rTab, SCCOL &rCol1, SCROW &rRow1, SCCOL &rCol2, SCROW &rRow2) const
void SetAutoFilter(bool bSet)
void SetSubTotalParam(const ScSubTotalParam &rSubTotalParam)
void SetHeader(bool bHasH)
SC_DLLPUBLIC void SetSortParam(const ScSortParam &rSortParam)
bool HasImportSelection() const
SC_DLLPUBLIC void SetQueryParam(const ScQueryParam &rQueryParam)
void SetArea(SCTAB nTab, SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2)
bool UpdatePivotTable(ScDPObject &rDPObj, bool bRecord, bool bApi)
bool RepeatDB(const OUString &rDBName, bool bApi, bool bIsUnnamed, SCTAB aTab=0)
bool DoImport(SCTAB nTab, const ScImportParam &rParam, const svx::ODataAccessDescriptor *pDescriptor)
SC_DLLPUBLIC size_t GetCount() const
const ScSheetSourceDesc * GetSheetDesc() const
Create before modifications of the document and destroy thereafter.
void SetDocumentModified()
SCTAB MakeScenario(SCTAB nTab, const OUString &rName, const OUString &rComment, const Color &rColor, ScScenarioFlags nFlags, ScMarkData &rMark, bool bRecord=true)
static weld::Window * GetActiveDialogParent()
SfxBindings * GetViewBindings()
void ErrorMessage(TranslateId pGlobStrId)
void UseScenario(SCTAB nTab, const OUString &rName, bool bRecord=true)
const ScDocument & GetDocument() const
std::shared_ptr< ScDocument > m_pDocument
void UpdateAllRowHeights(const ScMarkData *pTabMark=nullptr)
std::unique_ptr< ScDBData > GetOldAutoDBRange()
void UpdatePendingRowHeights(SCTAB nUpdateTab, bool bBefore=false)
void ModifyScenario(SCTAB nTab, const OUString &rName, const OUString &rComment, const Color &rColor, ScScenarioFlags nFlags)
ScDBData * GetDBData(const ScRange &rMarked, ScGetDBMode eMode, ScGetDBSelection eSel)
ScDBData * GetAnonymousDBData(const ScRange &rRange)
void PostPaint(SCCOL nStartCol, SCROW nStartRow, SCTAB nStartTab, SCCOL nEndCol, SCROW nEndRow, SCTAB nEndTab, PaintPartFlags nPart, sal_uInt16 nExtFlags=0)
void DoConsolidate(const ScConsolidateParam &rParam, bool bRecord=true)
bool MoveTable(SCTAB nSrcTab, SCTAB nDestTab, bool bCopy, bool bRecord)
std::unique_ptr< ScDBData > m_pOldAutoDBRange
sal_uLong TransferTab(ScDocShell &rSrcDocShell, SCTAB nSrcPos, SCTAB nDestPos, bool bInsertNew, bool bNotifyAndPaint)
void DBAreaDeleted(SCTAB nTab, SCCOL nX1, SCROW nY1, SCCOL nX2)
bool AdjustRowHeight(SCROW nStartRow, SCROW nEndRow, SCTAB nTab)
merge with docfunc
virtual SfxUndoManager * GetUndoManager() override
void RefreshPivotTables(const ScRange &rSource)
SC_DLLPUBLIC bool IsScenario(SCTAB nTab) const
SC_DLLPUBLIC const ScTableProtection * GetTabProtection(SCTAB nTab) const
SC_DLLPUBLIC bool IsTabProtected(SCTAB nTab) const
SC_DLLPUBLIC const ScDBData * GetDBAtArea(SCTAB nTab, SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2) const
SC_DLLPUBLIC void GetScenarioData(SCTAB nTab, OUString &rComment, Color &rColor, ScScenarioFlags &rFlags) const
SC_DLLPUBLIC bool IsVisible(SCTAB nTab) const
SC_DLLPUBLIC bool GetName(SCTAB nTab, OUString &rName) const
void SetClipParam(const ScClipParam &rParam)
SC_DLLPUBLIC bool IsActiveScenario(SCTAB nTab) const
static SC_DLLPUBLIC const CharClass & getCharClass()
todo: It should be possible to have MarkArrays for each table, in order to enable "search all" across...
const ScRange & GetMultiMarkArea() const
void SelectTable(SCTAB nTab, bool bNew)
void SelectOneTable(SCTAB nTab)
bool IsMultiMarked() const
bool GetTableSelect(SCTAB nTab) const
SCTAB GetSelectCount() const
SfxItemSet & GetItemSet()
void push_back(const ScRange &rRange)
bool Intersects(const ScRange &rRange) const
This class contains authoritative information on the internal reference used as the data source for d...
SC_DLLPUBLIC const ScRange & GetSourceRange() const
Get the range that contains the source data.
OutputDevice * GetDevice() const
void Invalidate(sal_uInt16 nId)
const SfxPoolItem * Put(const SfxPoolItem &rItem, sal_uInt16 nWhich)
css::uno::Reference< css::script::XLibraryContainer > GetBasicContainer()
virtual void AddUndoAction(std::unique_ptr< SfxUndoAction > pAction, bool bTryMerg=false)
@ TOP_LEFT
top left cell of area
void VBA_InsertModule(ScDocument &rDoc, SCTAB nTab, const OUString &sSource)
IMPL_LINK(ScDocShell, RefreshDBDataHdl, Timer *, pRefreshTimer, void)
static OUString lcl_GetAreaName(ScDocument *pDoc, const ScArea *pArea)
std::unique_ptr< ScDocument, o3tl::default_delete< ScDocument > > ScDocumentUniquePtr
ScGetDBSelection
For ScDBFunc::GetDBData()
@ RowDown
If only one row or portion thereof is selected, shrink row to used data columns and select further ro...
@ ForceMark
Behave as if the range corresponding to a ScDBData area was selected, for API use.
@ SC_DB_AUTOFILTER
force use of sheet-local instead of document global anonymous range
@ SC_DB_IMPORT
create "Importx" (if necessary)
@ SC_DB_MAKE
create "untitled" (if necessary)
constexpr OUStringLiteral STR_DB_LOCAL_NONAME
std::unique_ptr< sal_Int32[]> pData
constexpr OUStringLiteral aData
OUString ScResId(TranslateId aId)
This struct stores general clipboard parameters associated with a ScDocument instance created in clip...
sal_uInt16 nDataAreaCount
std::unique_ptr< ScArea[]> pDataAreas