[Libreoffice-commits] .: Branch 'feature/tubes2' - 3 commits - sc/source
Michael Meeks
michael at kemper.freedesktop.org
Wed Mar 21 09:02:23 PDT 2012
sc/source/ui/docshell/docfunc.cxx | 12 ++++-
sc/source/ui/docshell/docsh.cxx | 80 +++++++++++++++++++++++++++++++++++++-
sc/source/ui/inc/docfunc.hxx | 4 +
sc/source/ui/inc/viewfunc.hxx | 6 +-
sc/source/ui/view/cellsh3.cxx | 2
sc/source/ui/view/viewfun4.cxx | 8 ++-
sc/source/ui/view/viewfunc.cxx | 17 +++-----
7 files changed, 109 insertions(+), 20 deletions(-)
New commits:
commit de709a5b0d0a0c774c9997fad98ce607103140a7
Author: Michael Meeks <michael.meeks at suse.com>
Date: Wed Mar 21 15:58:52 2012 +0000
dummy interception of ScFunc methods with INTERCEPT env var set.
diff --git a/sc/source/ui/docshell/docsh.cxx b/sc/source/ui/docshell/docsh.cxx
index ab5dcd9..0485370 100644
--- a/sc/source/ui/docshell/docsh.cxx
+++ b/sc/source/ui/docshell/docsh.cxx
@@ -2507,6 +2507,82 @@ sal_Bool ScDocShell::HasAutomaticTableName( const String& rFilter )
|| rFilter.EqualsAscii( pFilterRtf );
}
+namespace {
+
+class ScDocFuncIntercept : public ScDocFunc
+{
+public:
+ ScDocFuncIntercept( ScDocShell& rDocSh ) : ScDocFunc( rDocSh )
+ {
+ fprintf( stderr, "Interceptor created !\n" );
+ }
+ virtual ~ScDocFuncIntercept() {}
+ virtual void EnterListAction( sal_uInt16 nNameResId )
+ {
+ // Want to group these operations for the other side ...
+ String aUndo( ScGlobal::GetRscString( nNameResId ) );
+ }
+ virtual void EndListAction()
+ {
+ }
+ virtual ScBaseCell* InterpretEnglishString( const ScAddress& rPos, const String& rText,
+ const String& rFormulaNmsp,
+ const formula::FormulaGrammar::Grammar eGrammar,
+ short* pRetFormatType )
+ {
+ fprintf( stderr, "interp. english string '%s'\n",
+ rtl::OUStringToOString( rText, RTL_TEXTENCODING_UTF8 ).getStr() );
+ return ScDocFunc::InterpretEnglishString( rPos, rText, rFormulaNmsp,
+ eGrammar, pRetFormatType );
+ }
+ virtual sal_Bool SetNormalString( const ScAddress& rPos, const String& rText, sal_Bool bApi )
+ {
+ fprintf( stderr, "set normal string '%s'\n",
+ rtl::OUStringToOString( rText, RTL_TEXTENCODING_UTF8 ).getStr() );
+ return ScDocFunc::SetNormalString( rPos, rText, bApi );
+ }
+
+ virtual sal_Bool PutCell( const ScAddress& rPos, ScBaseCell* pNewCell, sal_Bool bApi )
+ {
+ fprintf( stderr, "put cell string '%p' %d\n", pNewCell, bApi );
+ return ScDocFunc::PutCell( rPos, pNewCell, bApi );
+ }
+
+ virtual sal_Bool PutData( const ScAddress& rPos, ScEditEngineDefaulter& rEngine,
+ sal_Bool bInterpret, sal_Bool bApi )
+ {
+ fprintf( stderr, "put data\n" );
+ return ScDocFunc::PutData( rPos, rEngine, bInterpret, 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 )
+ {
+ fprintf( stderr, "set cell text '%s'\n",
+ rtl::OUStringToOString( rText, RTL_TEXTENCODING_UTF8 ).getStr() );
+ return ScDocFunc::SetCellText( rPos, rText, bInterpret, bEnglish, bApi, rFormulaNmsp, eGrammar );
+ }
+
+ virtual bool ShowNote( const ScAddress& rPos, bool bShow = true )
+ {
+ fprintf( stderr, "%s note\n", bShow ? "show" : "hide" );
+ return ScDocFunc::ShowNote( rPos, bShow );
+ }
+};
+
+static ScDocFunc *
+createDocFunc( ScDocShell *pThis )
+{
+ if (getenv ("INTERCEPT"))
+ return new ScDocFuncIntercept( *pThis );
+ else
+ return new ScDocFuncDirect( *pThis );
+}
+
+} // anonymous namespace
+
ScDocShell::ScDocShell( const ScDocShell& rShell ) :
SvRefBase(),
SotObject(),
@@ -2538,7 +2614,7 @@ ScDocShell::ScDocShell( const ScDocShell& rShell ) :
bIsInplace = rShell.bIsInplace;
- pDocFunc = new ScDocFuncDirect(*this);
+ pDocFunc = createDocFunc( this );
// SetBaseModel needs exception handling
ScModelObj::CreateAndSet( this );
@@ -2585,7 +2661,7 @@ ScDocShell::ScDocShell( const sal_uInt64 i_nSfxCreationFlags ) :
bIsInplace = (GetCreateMode() == SFX_CREATE_MODE_EMBEDDED);
// wird zurueckgesetzt, wenn nicht inplace
- pDocFunc = new ScDocFuncDirect(*this);
+ pDocFunc = createDocFunc( this );
// SetBaseModel needs exception handling
ScModelObj::CreateAndSet( this );
commit 5d6ca544b4e9030be60f31583551b31c8d4c2f9a
Author: Michael Meeks <michael.meeks at suse.com>
Date: Wed Mar 21 15:57:35 2012 +0000
EnterData - remove un-necessary bRecord parameter for corner-case
diff --git a/sc/source/ui/inc/viewfunc.hxx b/sc/source/ui/inc/viewfunc.hxx
index e6be63c..9e72fac 100644
--- a/sc/source/ui/inc/viewfunc.hxx
+++ b/sc/source/ui/inc/viewfunc.hxx
@@ -90,10 +90,10 @@ public:
String GetAutoSumFormula( const ScRangeList& rRangeList, bool bSubTotal, const ScAddress& rAddr );
void EnterData( SCCOL nCol, SCROW nRow, SCTAB nTab, const String& rString,
- sal_Bool bRecord = sal_True, const EditTextObject* pData = NULL );
+ const EditTextObject* pData = NULL );
+ void EnterData( SCCOL nCol, SCROW nRow, SCTAB nTab,
+ const EditTextObject* pData, bool bTestSimple = false );
void EnterValue( SCCOL nCol, SCROW nRow, SCTAB nTab, const double& rValue );
- void EnterData( SCCOL nCol, SCROW nRow, SCTAB nTab, const EditTextObject* pData,
- sal_Bool bRecord = sal_True, sal_Bool bTestSimple = false );
void EnterMatrix( const String& rString, ::formula::FormulaGrammar::Grammar eGram );
void EnterBlock( const String& rString, const EditTextObject* pData );
diff --git a/sc/source/ui/view/cellsh3.cxx b/sc/source/ui/view/cellsh3.cxx
index f90c7c6..7dca36a 100644
--- a/sc/source/ui/view/cellsh3.cxx
+++ b/sc/source/ui/view/cellsh3.cxx
@@ -246,7 +246,7 @@ void ScCellShell::Execute( SfxRequest& rReq )
}
else if ( aString.Len() > 0 && ( aString.GetChar(0) == '=' || aString.GetChar(0) == '+' || aString.GetChar(0) == '-' ) )
{
- pTabViewShell->EnterData( aCursorPos.Col(), aCursorPos.Row(), aCursorPos.Tab(), aString, sal_True, pData );
+ pTabViewShell->EnterData( aCursorPos.Col(), aCursorPos.Row(), aCursorPos.Tab(), aString, pData );
}
else
{
diff --git a/sc/source/ui/view/viewfun4.cxx b/sc/source/ui/view/viewfun4.cxx
index 94672a7..3451dca 100644
--- a/sc/source/ui/view/viewfun4.cxx
+++ b/sc/source/ui/view/viewfun4.cxx
@@ -136,15 +136,19 @@ void ScViewFunc::PasteRTF( SCCOL nStartCol, SCROW nStartRow,
}
SCROW nRow = nStartRow;
+
+ // Temporarily turn off undo generation for this lot
+ bool bUndoEnabled = pDoc->IsUndoEnabled();
+ pDoc->EnableUndo( false );
for( sal_uInt16 n = 0; n < nParCnt; n++ )
{
EditTextObject* pObject = pEngine->CreateTextObject( n );
- EnterData( nStartCol, nRow, nTab, pObject, false, sal_True );
- // kein Undo, auf einfache Strings testen
+ EnterData( nStartCol, nRow, nTab, pObject, true );
delete pObject;
if( ++nRow > MAXROW )
break;
}
+ pDoc->EnableUndo(bUndoEnabled);
if (bRecord)
{
diff --git a/sc/source/ui/view/viewfunc.cxx b/sc/source/ui/view/viewfunc.cxx
index cf1b9db..28600b5 100644
--- a/sc/source/ui/view/viewfunc.cxx
+++ b/sc/source/ui/view/viewfunc.cxx
@@ -353,15 +353,15 @@ sal_Bool lcl_AddFunction( ScAppOptions& rAppOpt, sal_uInt16 nOpCode )
// input - undo OK
-void ScViewFunc::EnterData( SCCOL nCol, SCROW nRow, SCTAB nTab, const String& rString,
- sal_Bool bRecord, const EditTextObject* pData )
+void ScViewFunc::EnterData( SCCOL nCol, SCROW nRow, SCTAB nTab,
+ const String& rString,
+ const EditTextObject* pData )
{
ScDocument* pDoc = GetViewData()->GetDocument();
ScMarkData& rMark = GetViewData()->GetMarkData();
SCTAB nSelCount = rMark.GetSelectCount();
+ bool bRecord = pDoc->IsUndoEnabled();
SCTAB i;
- if (bRecord && !pDoc->IsUndoEnabled())
- bRecord = false;
ScDocShell* pDocSh = GetViewData()->GetDocShell();
ScDocShellModificator aModificator( *pDocSh );
@@ -727,14 +727,13 @@ void ScViewFunc::EnterValue( SCCOL nCol, SCROW nRow, SCTAB nTab, const double& r
}
}
-void ScViewFunc::EnterData( SCCOL nCol, SCROW nRow, SCTAB nTab, const EditTextObject* pData,
- sal_Bool bRecord, sal_Bool bTestSimple )
+void ScViewFunc::EnterData( SCCOL nCol, SCROW nRow, SCTAB nTab,
+ const EditTextObject* pData, bool bTestSimple )
{
ScDocShell* pDocSh = GetViewData()->GetDocShell();
ScMarkData& rMark = GetViewData()->GetMarkData();
ScDocument* pDoc = pDocSh->GetDocument();
- if (bRecord && !pDoc->IsUndoEnabled())
- bRecord = false;
+ bool bRecord = pDoc->IsUndoEnabled();
ScDocShellModificator aModificator( *pDocSh );
@@ -823,7 +822,7 @@ void ScViewFunc::EnterData( SCCOL nCol, SCROW nRow, SCTAB nTab, const EditTextOb
if (bCommon)
AdjustRowHeight(nRow,nRow);
- EnterData(nCol,nRow,nTab,aString,bRecord);
+ EnterData(nCol,nRow,nTab,aString);
}
else
{
commit e685b124983a5cdb6bb25b0d9dda1b640761cf24
Author: Michael Meeks <michael.meeks at suse.com>
Date: Wed Mar 21 14:12:27 2012 +0000
Add undo / redo lists to ScDocFunc
diff --git a/sc/source/ui/docshell/docfunc.cxx b/sc/source/ui/docshell/docfunc.cxx
index 973968d..5cb7c18 100644
--- a/sc/source/ui/docshell/docfunc.cxx
+++ b/sc/source/ui/docshell/docfunc.cxx
@@ -4949,8 +4949,6 @@ sal_Bool ScDocFunc::InsertAreaLink( const String& rFile, const String& rFilter,
const ScRange& rDestRange, sal_uLong nRefresh,
sal_Bool bFitBlock, sal_Bool bApi )
{
- //! auch fuer ScViewFunc::InsertAreaLink benutzen!
-
ScDocument* pDoc = rDocShell.GetDocument();
sal_Bool bUndo (pDoc->IsUndoEnabled());
@@ -5034,7 +5032,15 @@ sal_Bool ScDocFunc::InsertAreaLink( const String& rFile, const String& rFilter,
return sal_True;
}
+void ScDocFunc::EnterListAction( sal_uInt16 nNameResId )
+{
+ String aUndo( ScGlobal::GetRscString( nNameResId ) );
+ rDocShell.GetUndoManager()->EnterListAction( aUndo, aUndo );
+}
-
+void ScDocFunc::EndListAction()
+{
+ rDocShell.GetUndoManager()->LeaveListAction();
+}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sc/source/ui/inc/docfunc.hxx b/sc/source/ui/inc/docfunc.hxx
index e7f6b4d..629e726 100644
--- a/sc/source/ui/inc/docfunc.hxx
+++ b/sc/source/ui/inc/docfunc.hxx
@@ -74,6 +74,10 @@ public:
DECL_LINK( NotifyDrawUndo, SdrUndoAction* );
+ // for grouping multiple operations into one with a new name
+ virtual void EnterListAction( sal_uInt16 nNameResId );
+ virtual void EndListAction();
+
virtual sal_Bool DetectiveAddPred(const ScAddress& rPos);
virtual sal_Bool DetectiveDelPred(const ScAddress& rPos);
virtual sal_Bool DetectiveAddSucc(const ScAddress& rPos);
More information about the Libreoffice-commits
mailing list