sc/source/ui/docshell/docsh.cxx | 4 sc/source/ui/inc/docfunc.hxx | 251 ++++++++++++++++++++------------------- sc/source/ui/unoobj/cellsuno.cxx | 6 3 files changed, 135 insertions(+), 126 deletions(-)
New commits: commit 7bc643779225cce42cfe99aea730b5ec7c9f0bd1 Author: Michael Meeks <michael.me...@suse.com> Date: Tue Mar 20 12:22:05 2012 +0000 virtualise the ScDocFunc to allow interposing some magic diff --git a/sc/source/ui/docshell/docsh.cxx b/sc/source/ui/docshell/docsh.cxx index 88bad72..ab5dcd9 100644 --- a/sc/source/ui/docshell/docsh.cxx +++ b/sc/source/ui/docshell/docsh.cxx @@ -2538,7 +2538,7 @@ ScDocShell::ScDocShell( const ScDocShell& rShell ) : bIsInplace = rShell.bIsInplace; - pDocFunc = new ScDocFunc(*this); + pDocFunc = new ScDocFuncDirect(*this); // SetBaseModel needs exception handling ScModelObj::CreateAndSet( this ); @@ -2585,7 +2585,7 @@ ScDocShell::ScDocShell( const sal_uInt64 i_nSfxCreationFlags ) : bIsInplace = (GetCreateMode() == SFX_CREATE_MODE_EMBEDDED); // wird zurueckgesetzt, wenn nicht inplace - pDocFunc = new ScDocFunc(*this); + pDocFunc = new ScDocFuncDirect(*this); // SetBaseModel needs exception handling ScModelObj::CreateAndSet( this ); diff --git a/sc/source/ui/inc/docfunc.hxx b/sc/source/ui/inc/docfunc.hxx index a2e6fd2..e7f6b4d 100644 --- a/sc/source/ui/inc/docfunc.hxx +++ b/sc/source/ui/inc/docfunc.hxx @@ -60,147 +60,156 @@ class ScDocFunc private: ScDocShell& rDocShell; - sal_Bool AdjustRowHeight( const ScRange& rRange, sal_Bool bPaint = true ); + sal_Bool AdjustRowHeight( const ScRange& rRange, sal_Bool bPaint = true ); void CreateOneName( ScRangeName& rList, SCCOL nPosX, SCROW nPosY, SCTAB nTab, SCCOL nX1, SCROW nY1, SCCOL nX2, SCROW nY2, sal_Bool& rCancel, sal_Bool bApi ); void NotifyInputHandler( const ScAddress& rPos ); +protected: + ScDocFunc( ScDocShell& rDocSh ): rDocShell(rDocSh) {} public: - ScDocFunc( ScDocShell& rDocSh ): rDocShell(rDocSh) {} - ~ScDocFunc() {} + virtual ~ScDocFunc() {} DECL_LINK( NotifyDrawUndo, SdrUndoAction* ); - sal_Bool DetectiveAddPred(const ScAddress& rPos); - sal_Bool DetectiveDelPred(const ScAddress& rPos); - sal_Bool DetectiveAddSucc(const ScAddress& rPos); - sal_Bool DetectiveDelSucc(const ScAddress& rPos); - sal_Bool DetectiveAddError(const ScAddress& rPos); - sal_Bool DetectiveMarkInvalid(SCTAB nTab); - sal_Bool DetectiveDelAll(SCTAB nTab); - sal_Bool DetectiveRefresh(sal_Bool bAutomatic = false); - void DetectiveCollectAllPreds(const ScRangeList& rSrcRanges, ::std::vector<ScTokenRef>& rRefTokens); - void DetectiveCollectAllSuccs(const ScRangeList& rSrcRanges, ::std::vector<ScTokenRef>& rRefTokens); - - sal_Bool DeleteContents( const ScMarkData& rMark, sal_uInt16 nFlags, - sal_Bool bRecord, sal_Bool bApi ); - - sal_Bool TransliterateText( const ScMarkData& rMark, sal_Int32 nType, - sal_Bool bRecord, sal_Bool bApi ); - - sal_Bool SetNormalString( const ScAddress& rPos, const String& rText, sal_Bool bApi ); - sal_Bool PutCell( const ScAddress& rPos, ScBaseCell* pNewCell, sal_Bool bApi ); - sal_Bool PutData( const ScAddress& rPos, ScEditEngineDefaulter& rEngine, - sal_Bool bInterpret, sal_Bool bApi ); - sal_Bool SetCellText( const ScAddress& rPos, const String& rText, - sal_Bool bInterpret, sal_Bool bEnglish, sal_Bool bApi, - const String& rFormulaNmsp, - const formula::FormulaGrammar::Grammar eGrammar ); - - // creates a new cell for use with PutCell - ScBaseCell* InterpretEnglishString( const ScAddress& rPos, const String& rText, - const String& rFormulaNmsp, const formula::FormulaGrammar::Grammar eGrammar, - short* pRetFormatType = NULL ); - - bool ShowNote( const ScAddress& rPos, bool bShow = true ); - inline bool HideNote( const ScAddress& rPos ) { return ShowNote( rPos, false ); } - - bool SetNoteText( const ScAddress& rPos, const String& rNoteText, sal_Bool bApi ); - bool ReplaceNote( const ScAddress& rPos, const String& rNoteText, const String* pAuthor, const String* pDate, sal_Bool bApi ); - - sal_Bool ApplyAttributes( const ScMarkData& rMark, const ScPatternAttr& rPattern, - sal_Bool bRecord, sal_Bool bApi ); - sal_Bool ApplyStyle( const ScMarkData& rMark, const String& rStyleName, - sal_Bool bRecord, sal_Bool bApi ); - - sal_Bool InsertCells( const ScRange& rRange,const ScMarkData* pTabMark, - InsCellCmd eCmd, sal_Bool bRecord, sal_Bool bApi, - sal_Bool bPartOfPaste = false ); - sal_Bool DeleteCells( const ScRange& rRange, const ScMarkData* pTabMark, - DelCellCmd eCmd, sal_Bool bRecord, sal_Bool bApi ); - - sal_Bool MoveBlock( const ScRange& rSource, const ScAddress& rDestPos, - sal_Bool bCut, sal_Bool bRecord, sal_Bool bPaint, sal_Bool bApi ); - - sal_Bool InsertTable( SCTAB nTab, const String& rName, sal_Bool bRecord, sal_Bool bApi ); - sal_Bool RenameTable( SCTAB nTab, const String& rName, sal_Bool bRecord, sal_Bool bApi ); - sal_Bool DeleteTable( SCTAB nTab, sal_Bool bRecord, sal_Bool bApi ); - - bool SetTabBgColor( SCTAB nTab, const Color& rColor, bool bRecord, bool bApi ); - bool SetTabBgColor( ScUndoTabColorInfo::List& rUndoTabColorList, bool bRecord, bool bApi ); - - sal_Bool SetTableVisible( SCTAB nTab, sal_Bool bVisible, sal_Bool bApi ); - - sal_Bool SetLayoutRTL( SCTAB nTab, sal_Bool bRTL, sal_Bool bApi ); - - SC_DLLPUBLIC sal_Bool SetWidthOrHeight( sal_Bool bWidth, SCCOLROW nRangeCnt, SCCOLROW* pRanges, - SCTAB nTab, ScSizeMode eMode, sal_uInt16 nSizeTwips, - sal_Bool bRecord, sal_Bool bApi ); - - sal_Bool InsertPageBreak( sal_Bool bColumn, const ScAddress& rPos, - sal_Bool bRecord, sal_Bool bSetModified, sal_Bool bApi ); - sal_Bool RemovePageBreak( sal_Bool bColumn, const ScAddress& rPos, - sal_Bool bRecord, sal_Bool bSetModified, sal_Bool bApi ); - - void ProtectSheet( SCTAB nTab, const ScTableProtection& rProtect ); - - sal_Bool Protect( SCTAB nTab, const String& rPassword, sal_Bool bApi ); - sal_Bool Unprotect( SCTAB nTab, const String& rPassword, sal_Bool bApi ); - - sal_Bool ClearItems( const ScMarkData& rMark, const sal_uInt16* pWhich, sal_Bool bApi ); - sal_Bool ChangeIndent( const ScMarkData& rMark, sal_Bool bIncrement, sal_Bool bApi ); - bool AutoFormat( const ScRange& rRange, const ScMarkData* pTabMark, - sal_uInt16 nFormatNo, bool bRecord, bool bApi ); - - sal_Bool EnterMatrix( const ScRange& rRange, const ScMarkData* pTabMark, - const ScTokenArray* pTokenArray, - const String& rString, sal_Bool bApi, sal_Bool bEnglish, - const String& rFormulaNmsp, - const formula::FormulaGrammar::Grammar ); - - sal_Bool TabOp( const ScRange& rRange, const ScMarkData* pTabMark, - const ScTabOpParam& rParam, sal_Bool bRecord, sal_Bool bApi ); - - bool FillSimple( const ScRange& rRange, const ScMarkData* pTabMark, - FillDir eDir, bool bRecord, bool bApi ); - sal_Bool FillSeries( const ScRange& rRange, const ScMarkData* pTabMark, - FillDir eDir, FillCmd eCmd, FillDateCmd eDateCmd, - double fStart, double fStep, double fMax, - sal_Bool bRecord, sal_Bool bApi ); - // FillAuto: rRange wird von Source-Range auf Dest-Range angepasst - SC_DLLPUBLIC sal_Bool FillAuto( ScRange& rRange, const ScMarkData* pTabMark, FillDir eDir, FillCmd eCmd, FillDateCmd eDateCmd, sal_uLong nCount, double fStep, double fMax, sal_Bool bRecord, sal_Bool bApi ); - - sal_Bool FillAuto( ScRange& rRange, const ScMarkData* pTabMark, - FillDir eDir, sal_uLong nCount, sal_Bool bRecord, sal_Bool bApi ); - - sal_Bool ResizeMatrix( const ScRange& rOldRange, const ScAddress& rNewEnd, sal_Bool bApi ); - - sal_Bool MergeCells( const ScCellMergeOption& rOption, sal_Bool bContents, - sal_Bool bRecord, sal_Bool bApi ); - sal_Bool UnmergeCells( const ScRange& rRange, sal_Bool bRecord, sal_Bool bApi ); - bool UnmergeCells( const ScCellMergeOption& rOption, sal_Bool bRecord, sal_Bool bApi ); - - bool SetNewRangeNames( ScRangeName* pNewRanges, bool bModifyDoc = true, SCTAB nTab = -1 ); // takes ownership of pNewRanges //nTab = -1 for local range names - bool ModifyRangeNames( const ScRangeName& rNewRanges, SCTAB nTab = -1 ); + virtual sal_Bool DetectiveAddPred(const ScAddress& rPos); + virtual sal_Bool DetectiveDelPred(const ScAddress& rPos); + virtual sal_Bool DetectiveAddSucc(const ScAddress& rPos); + virtual sal_Bool DetectiveDelSucc(const ScAddress& rPos); + virtual sal_Bool DetectiveAddError(const ScAddress& rPos); + virtual sal_Bool DetectiveMarkInvalid(SCTAB nTab); + virtual sal_Bool DetectiveDelAll(SCTAB nTab); + virtual sal_Bool DetectiveRefresh(sal_Bool bAutomatic = false); + virtual void DetectiveCollectAllPreds(const ScRangeList& rSrcRanges, ::std::vector<ScTokenRef>& rRefTokens); + virtual void DetectiveCollectAllSuccs(const ScRangeList& rSrcRanges, ::std::vector<ScTokenRef>& rRefTokens); + + virtual sal_Bool DeleteContents( const ScMarkData& rMark, sal_uInt16 nFlags, + sal_Bool bRecord, sal_Bool bApi ); + + virtual sal_Bool TransliterateText( const ScMarkData& rMark, sal_Int32 nType, + sal_Bool bRecord, sal_Bool bApi ); + + virtual sal_Bool SetNormalString( const ScAddress& rPos, const String& rText, sal_Bool bApi ); + virtual sal_Bool PutCell( const ScAddress& rPos, ScBaseCell* pNewCell, sal_Bool bApi ); + virtual sal_Bool PutData( const ScAddress& rPos, ScEditEngineDefaulter& rEngine, + sal_Bool bInterpret, sal_Bool bApi ); + virtual sal_Bool SetCellText( const ScAddress& rPos, const String& rText, + sal_Bool bInterpret, sal_Bool bEnglish, sal_Bool bApi, + const String& rFormulaNmsp, + const formula::FormulaGrammar::Grammar eGrammar ); + + // creates a new cell for use with PutCell + virtual ScBaseCell* InterpretEnglishString( const ScAddress& rPos, const String& rText, + const String& rFormulaNmsp, const formula::FormulaGrammar::Grammar eGrammar, + short* pRetFormatType = NULL ); + + virtual bool ShowNote( const ScAddress& rPos, bool bShow = true ); + inline bool HideNote( const ScAddress& rPos ) { return ShowNote( rPos, false ); } + + virtual bool SetNoteText( const ScAddress& rPos, const String& rNoteText, sal_Bool bApi ); + virtual bool ReplaceNote( const ScAddress& rPos, const String& rNoteText, const String* pAuthor, const String* pDate, sal_Bool bApi ); + + virtual sal_Bool ApplyAttributes( const ScMarkData& rMark, const ScPatternAttr& rPattern, + sal_Bool bRecord, sal_Bool bApi ); + virtual sal_Bool ApplyStyle( const ScMarkData& rMark, const String& rStyleName, + sal_Bool bRecord, sal_Bool bApi ); + + virtual sal_Bool InsertCells( const ScRange& rRange,const ScMarkData* pTabMark, + InsCellCmd eCmd, sal_Bool bRecord, sal_Bool bApi, + sal_Bool bPartOfPaste = false ); + virtual sal_Bool DeleteCells( const ScRange& rRange, const ScMarkData* pTabMark, + DelCellCmd eCmd, sal_Bool bRecord, sal_Bool bApi ); + + virtual sal_Bool MoveBlock( const ScRange& rSource, const ScAddress& rDestPos, + sal_Bool bCut, sal_Bool bRecord, sal_Bool bPaint, sal_Bool bApi ); + + virtual sal_Bool InsertTable( SCTAB nTab, const String& rName, sal_Bool bRecord, sal_Bool bApi ); + virtual sal_Bool RenameTable( SCTAB nTab, const String& rName, sal_Bool bRecord, sal_Bool bApi ); + virtual sal_Bool DeleteTable( SCTAB nTab, sal_Bool bRecord, sal_Bool bApi ); + + virtual bool SetTabBgColor( SCTAB nTab, const Color& rColor, bool bRecord, bool bApi ); + virtual bool SetTabBgColor( ScUndoTabColorInfo::List& rUndoTabColorList, bool bRecord, bool bApi ); + + virtual sal_Bool SetTableVisible( SCTAB nTab, sal_Bool bVisible, sal_Bool bApi ); + + virtual sal_Bool SetLayoutRTL( SCTAB nTab, sal_Bool bRTL, sal_Bool bApi ); + + virtual SC_DLLPUBLIC sal_Bool + SetWidthOrHeight( sal_Bool bWidth, SCCOLROW nRangeCnt, SCCOLROW* pRanges, + SCTAB nTab, ScSizeMode eMode, sal_uInt16 nSizeTwips, + sal_Bool bRecord, sal_Bool bApi ); + + virtual sal_Bool InsertPageBreak( sal_Bool bColumn, const ScAddress& rPos, + sal_Bool bRecord, sal_Bool bSetModified, sal_Bool bApi ); + virtual sal_Bool RemovePageBreak( sal_Bool bColumn, const ScAddress& rPos, + sal_Bool bRecord, sal_Bool bSetModified, sal_Bool bApi ); + + virtual void ProtectSheet( SCTAB nTab, const ScTableProtection& rProtect ); + + virtual sal_Bool Protect( SCTAB nTab, const String& rPassword, sal_Bool bApi ); + virtual sal_Bool Unprotect( SCTAB nTab, const String& rPassword, sal_Bool bApi ); + + virtual sal_Bool ClearItems( const ScMarkData& rMark, const sal_uInt16* pWhich, sal_Bool bApi ); + virtual sal_Bool ChangeIndent( const ScMarkData& rMark, sal_Bool bIncrement, sal_Bool bApi ); + virtual bool AutoFormat( const ScRange& rRange, const ScMarkData* pTabMark, + sal_uInt16 nFormatNo, bool bRecord, bool bApi ); + + virtual sal_Bool EnterMatrix( const ScRange& rRange, const ScMarkData* pTabMark, + const ScTokenArray* pTokenArray, + const String& rString, sal_Bool bApi, sal_Bool bEnglish, + const String& rFormulaNmsp, + const formula::FormulaGrammar::Grammar ); + + virtual sal_Bool TabOp( const ScRange& rRange, const ScMarkData* pTabMark, + const ScTabOpParam& rParam, sal_Bool bRecord, sal_Bool bApi ); + + virtual bool FillSimple( const ScRange& rRange, const ScMarkData* pTabMark, + FillDir eDir, bool bRecord, bool bApi ); + virtual sal_Bool FillSeries( const ScRange& rRange, const ScMarkData* pTabMark, + FillDir eDir, FillCmd eCmd, FillDateCmd eDateCmd, + double fStart, double fStep, double fMax, + sal_Bool bRecord, sal_Bool bApi ); + + // FillAuto: rRange wird von Source-Range auf Dest-Range angepasst + SC_DLLPUBLIC virtual sal_Bool FillAuto( ScRange& rRange, const ScMarkData* pTabMark, FillDir eDir, FillCmd eCmd, FillDateCmd eDateCmd, sal_uLong nCount, double fStep, double fMax, sal_Bool bRecord, sal_Bool bApi ); + + virtual sal_Bool FillAuto( ScRange& rRange, const ScMarkData* pTabMark, + FillDir eDir, sal_uLong nCount, sal_Bool bRecord, sal_Bool bApi ); + + virtual sal_Bool ResizeMatrix( const ScRange& rOldRange, const ScAddress& rNewEnd, sal_Bool bApi ); + + virtual sal_Bool MergeCells( const ScCellMergeOption& rOption, sal_Bool bContents, + sal_Bool bRecord, sal_Bool bApi ); + virtual sal_Bool UnmergeCells( const ScRange& rRange, sal_Bool bRecord, sal_Bool bApi ); + virtual bool UnmergeCells( const ScCellMergeOption& rOption, sal_Bool bRecord, sal_Bool bApi ); + + virtual bool SetNewRangeNames( ScRangeName* pNewRanges, bool bModifyDoc = true, SCTAB nTab = -1 ); // takes ownership of pNewRanges //nTab = -1 for local range names + virtual bool ModifyRangeNames( const ScRangeName& rNewRanges, SCTAB nTab = -1 ); /** * Modify all range names, global scope names as well as sheet local ones, * in one go. Note that this method will <b>not</b> destroy the instances * passed as arguments (it creates copies); the caller is responsible for * destroying them. */ - void ModifyAllRangeNames( const boost::ptr_map<rtl::OUString, ScRangeName>& rRangeMap ); + virtual void ModifyAllRangeNames( const boost::ptr_map<rtl::OUString, ScRangeName>& rRangeMap ); - sal_Bool CreateNames( const ScRange& rRange, sal_uInt16 nFlags, sal_Bool bApi, SCTAB nTab = -1 ); // -1 for global range names - sal_Bool InsertNameList( const ScAddress& rStartPos, sal_Bool bApi ); + virtual sal_Bool CreateNames( const ScRange& rRange, sal_uInt16 nFlags, sal_Bool bApi, SCTAB nTab = -1 ); // -1 for global range names + virtual sal_Bool InsertNameList( const ScAddress& rStartPos, sal_Bool bApi ); - sal_Bool InsertAreaLink( const String& rFile, const String& rFilter, - const String& rOptions, const String& rSource, - const ScRange& rDestRange, sal_uLong nRefresh, - sal_Bool bFitBlock, sal_Bool bApi ); + virtual sal_Bool InsertAreaLink( const String& rFile, const String& rFilter, + const String& rOptions, const String& rSource, + const ScRange& rDestRange, sal_uLong nRefresh, + sal_Bool bFitBlock, sal_Bool bApi ); }; +class ScDocFuncDirect : public ScDocFunc +{ +public: + ScDocFuncDirect( ScDocShell& rDocSh ) : ScDocFunc( rDocSh ) {} + virtual ~ScDocFuncDirect() {} +}; #endif diff --git a/sc/source/ui/unoobj/cellsuno.cxx b/sc/source/ui/unoobj/cellsuno.cxx index 24c31e8..71363d8 100644 --- a/sc/source/ui/unoobj/cellsuno.cxx +++ b/sc/source/ui/unoobj/cellsuno.cxx @@ -8214,7 +8214,7 @@ void ScTableSheetObj::SetOnePropertyValue( const SfxItemPropertySimpleEntry* pEn return; //! Exception oder so? ScDocument* pDoc = pDocSh->GetDocument(); SCTAB nTab = GetTab_Impl(); - ScDocFunc rFunc = pDocSh->GetDocFunc(); + ScDocFunc &rFunc = pDocSh->GetDocFunc(); if ( pEntry->nWID == SC_WID_UNO_PAGESTL ) { @@ -8857,7 +8857,7 @@ void ScTableColumnObj::SetOnePropertyValue( const SfxItemPropertySimpleEntry* pE OSL_ENSURE(rRange.aStart.Col() == rRange.aEnd.Col(), "zuviele Spalten"); SCCOL nCol = rRange.aStart.Col(); SCTAB nTab = rRange.aStart.Tab(); - ScDocFunc rFunc = pDocSh->GetDocFunc(); + ScDocFunc &rFunc = pDocSh->GetDocFunc(); SCCOLROW nColArr[2]; nColArr[0] = nColArr[1] = nCol; @@ -9001,7 +9001,7 @@ void ScTableRowObj::SetOnePropertyValue( const SfxItemPropertySimpleEntry* pEntr OSL_ENSURE(rRange.aStart.Row() == rRange.aEnd.Row(), "zuviele Zeilen"); SCROW nRow = rRange.aStart.Row(); SCTAB nTab = rRange.aStart.Tab(); - ScDocFunc rFunc = pDocSh->GetDocFunc(); + ScDocFunc &rFunc = pDocSh->GetDocFunc(); SCCOLROW nRowArr[2]; nRowArr[0] = nRowArr[1] = nRow; _______________________________________________ Libreoffice-commits mailing list Libreoffice-commits@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits