[Libreoffice-commits] .: Branch 'feature/tubes' - sc/source

Michael Meeks michael at kemper.freedesktop.org
Tue Mar 20 05:23:45 PDT 2012


 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.meeks at 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;


More information about the Libreoffice-commits mailing list