[Libreoffice-commits] core.git: 2 commits - sc/source

Kohei Yoshida kohei.yoshida at collabora.com
Fri Oct 10 17:37:01 PDT 2014


 sc/source/ui/docshell/docfunc.cxx |   72 +++++++++++++++++++++++++++++++++-
 sc/source/ui/inc/docfunc.hxx      |    8 ++-
 sc/source/ui/view/viewfunc.cxx    |   79 +-------------------------------------
 3 files changed, 79 insertions(+), 80 deletions(-)

New commits:
commit ab58a180bdf08b38517e5ff603614c69e07bbbf2
Author: Kohei Yoshida <kohei.yoshida at collabora.com>
Date:   Fri Oct 10 20:07:54 2014 -0400

    Have ScViewFunc::DeleteContents() to call ScDocFunc's.
    
    If bSimple = true, call DeleteCell(), otherwise call DeleteContents().
    
    Change-Id: Ic08d9501797b537430bef0b6f3d920c3b497104b

diff --git a/sc/source/ui/view/viewfunc.cxx b/sc/source/ui/view/viewfunc.cxx
index 3ed06d2..4f89e13 100644
--- a/sc/source/ui/view/viewfunc.cxx
+++ b/sc/source/ui/view/viewfunc.cxx
@@ -1766,8 +1766,6 @@ void ScViewFunc::DeleteContents( InsertDeleteFlags nFlags, bool bRecord )
     if (bRecord && !pDoc->IsUndoEnabled())
         bRecord = false;
 
-    ScDocShellModificator aModificator( *pDocSh );
-
     if ( !aFuncMark.IsMarked() && !aFuncMark.IsMultiMarked() )
     {
         aMarkRange.aStart.SetCol(GetViewData().GetCurX());
@@ -1782,81 +1780,13 @@ void ScViewFunc::DeleteContents( InsertDeleteFlags nFlags, bool bRecord )
             bSimple = true;
     }
 
-    aFuncMark.SetMarking(false);        // for MarkToMulti
-    aFuncMark.MarkToSimple();           // before bMulti test below
-
-    OSL_ENSURE( aFuncMark.IsMarked() || aFuncMark.IsMultiMarked() || bSimple, "delete what?" );
-
-    ScDocument* pUndoDoc = NULL;
-    bool bMulti = !bSimple && aFuncMark.IsMultiMarked();
-    if (!bSimple)
-    {
-        aFuncMark.MarkToMulti();
-        aFuncMark.GetMultiMarkArea( aMarkRange );
-    }
-    ScRange aExtendedRange(aMarkRange);
-    if (!bSimple)
-    {
-        if ( pDoc->ExtendMerge( aExtendedRange, true ) )
-            bMulti = false;
-    }
-
-    // no objects on protected tabs
-    bool bObjects = (nFlags & IDF_OBJECTS) && !sc::DocFuncUtil::hasProtectedTab(*pDoc, aFuncMark);
-
-    sal_uInt16 nExtFlags = 0;       // extra flags are needed only if attributes are deleted
-    if ( nFlags & IDF_ATTRIB )
-        pDocSh->UpdatePaintExt( nExtFlags, aMarkRange );
-
-    //  order op opeeration:
-    //  1) BeginDrawUndo
-    //  2) delete objects (DrawUndo is filled)
-    //  3) copy contents for undo
-    //  4) delete contents
-    //  5) add undo-action
-
-    bool bDrawUndo = bObjects || ( nFlags & IDF_NOTE );     // needed for shown notes
-    if ( bDrawUndo && bRecord )
-        pDoc->BeginDrawUndo();
-
-    if (bObjects)
-    {
-        if (bMulti)
-            pDoc->DeleteObjectsInSelection( aFuncMark );
-        else
-            pDoc->DeleteObjectsInArea( aMarkRange.aStart.Col(), aMarkRange.aStart.Row(),
-/*!*/                                  aMarkRange.aEnd.Col(),   aMarkRange.aEnd.Row(),
-                                       aFuncMark );
-    }
-
-    // To keep track of all non-empty cells within the deleted area.
-    boost::shared_ptr<ScSimpleUndo::DataSpansType> pDataSpans;
-
-    if ( bRecord )
-    {
-        pUndoDoc = sc::DocFuncUtil::createDeleteContentsUndoDoc(*pDoc, aFuncMark, aExtendedRange, nFlags, bMulti);
-        pDataSpans.reset(sc::DocFuncUtil::getNonEmptyCellSpans(*pDoc, aFuncMark, aExtendedRange));
-    }
-
     HideAllCursors();   // for if summary is cancelled
+
+    ScDocFunc& rDocFunc = pDocSh->GetDocFunc();
     if (bSimple)
-        pDoc->DeleteArea( aMarkRange.aStart.Col(), aMarkRange.aStart.Row(),
-                          aMarkRange.aEnd.Col(),   aMarkRange.aEnd.Row(),
-                          aFuncMark, nFlags );
+        rDocFunc.DeleteCell(aMarkRange.aStart, aFuncMark, nFlags, bRecord, false);
     else
-    {
-        pDoc->DeleteSelection( nFlags, aFuncMark );
-    }
-
-    if ( bRecord )
-    {
-        sc::DocFuncUtil::addDeleteContentsUndo(
-            pDocSh->GetUndoManager(), pDocSh, aFuncMark, aExtendedRange, pUndoDoc,
-            nFlags, pDataSpans, bMulti, bDrawUndo);
-    }
-
-    if (!AdjustRowHeight( aExtendedRange.aStart.Row(), aExtendedRange.aEnd.Row() ))
-        pDocSh->PostPaint( aExtendedRange, PAINT_GRID, nExtFlags );
+        rDocFunc.DeleteContents(aFuncMark, nFlags, bRecord, false);
 
     pDocSh->UpdateOle(&GetViewData());
 
@@ -1874,7 +1804,6 @@ void ScViewFunc::DeleteContents( InsertDeleteFlags nFlags, bool bRecord )
         HelperNotifyChanges::Notify(*pModelObj, aChangeRanges);
     }
 
-    aModificator.SetDocumentModified();
     CellContentChanged();
     ShowAllCursors();
 
commit 7168096fdf35ee8b2afd330e3d9b3aab09772807
Author: Kohei Yoshida <kohei.yoshida at collabora.com>
Date:   Fri Oct 10 19:59:57 2014 -0400

    Add DeleteCell to ScDocFunc, which is a variant of DeleteContents ...
    
    for a single cell case.  This is equivalent of ScViewFunc::DeleteConents
    with bSimple = true.
    
    Change-Id: I5eccce21843f4cb21b29f96b0360617a180aebee

diff --git a/sc/source/ui/docshell/docfunc.cxx b/sc/source/ui/docshell/docfunc.cxx
index 03a3a9d..b308544 100644
--- a/sc/source/ui/docshell/docfunc.cxx
+++ b/sc/source/ui/docshell/docfunc.cxx
@@ -559,8 +559,8 @@ void ScDocFunc::DetectiveCollectAllSuccs(const ScRangeList& rSrcRanges, vector<S
     lcl_collectAllPredOrSuccRanges(rSrcRanges, rRefTokens, rDocShell, false);
 }
 
-bool ScDocFunc::DeleteContents( const ScMarkData& rMark, InsertDeleteFlags nFlags,
-                                    bool bRecord, bool bApi )
+bool ScDocFunc::DeleteContents(
+    const ScMarkData& rMark, InsertDeleteFlags nFlags, bool bRecord, bool bApi )
 {
     ScDocShellModificator aModificator( rDocShell );
 
@@ -652,6 +652,74 @@ bool ScDocFunc::DeleteContents( const ScMarkData& rMark, InsertDeleteFlags nFlag
     return true;
 }
 
+bool ScDocFunc::DeleteCell(
+    const ScAddress& rPos, const ScMarkData& rMark, InsertDeleteFlags nFlags, bool bRecord, bool bApi )
+{
+    ScDocShellModificator aModificator(rDocShell);
+
+    ScDocument& rDoc = rDocShell.GetDocument();
+
+    if (bRecord && !rDoc.IsUndoEnabled())
+        bRecord = false;
+
+    ScEditableTester aTester(&rDoc, rPos.Col(), rPos.Row(), rPos.Col(), rPos.Row(), rMark);
+    if (!aTester.IsEditable())
+    {
+        if (!bApi)
+            rDocShell.ErrorMessage(aTester.GetMessageId());
+        return false;
+    }
+
+    // no objects on protected tabs
+    bool bObjects = (nFlags & IDF_OBJECTS) && !sc::DocFuncUtil::hasProtectedTab(rDoc, rMark);
+
+    sal_uInt16 nExtFlags = 0;       // extra flags are needed only if attributes are deleted
+    if (nFlags & IDF_ATTRIB)
+        rDocShell.UpdatePaintExt(nExtFlags, rPos);
+
+    //  order op opeeration:
+    //  1) BeginDrawUndo
+    //  2) delete objects (DrawUndo is filled)
+    //  3) copy contents for undo
+    //  4) delete contents
+    //  5) add undo-action
+
+    bool bDrawUndo = bObjects || (nFlags & IDF_NOTE);     // needed for shown notes
+    if (bDrawUndo && bRecord)
+        rDoc.BeginDrawUndo();
+
+    if (bObjects)
+        rDoc.DeleteObjectsInArea(rPos.Col(), rPos.Row(), rPos.Col(), rPos.Row(), rMark);
+
+    // To keep track of all non-empty cells within the deleted area.
+    boost::shared_ptr<ScSimpleUndo::DataSpansType> pDataSpans;
+
+    ScDocument* pUndoDoc = NULL;
+    if (bRecord)
+    {
+        pUndoDoc = sc::DocFuncUtil::createDeleteContentsUndoDoc(rDoc, rMark, rPos, nFlags, false);
+        pDataSpans.reset(sc::DocFuncUtil::getNonEmptyCellSpans(rDoc, rMark, rPos));
+    }
+
+    rDoc.DeleteArea(rPos.Col(), rPos.Row(), rPos.Col(), rPos.Row(), rMark, nFlags);
+
+    if (bRecord)
+    {
+        sc::DocFuncUtil::addDeleteContentsUndo(
+            rDocShell.GetUndoManager(), &rDocShell, rMark, rPos, pUndoDoc,
+            nFlags, pDataSpans, false, bDrawUndo);
+    }
+
+    if (!AdjustRowHeight(rPos))
+        rDocShell.PostPaint(
+            rPos.Col(), rPos.Row(), rPos.Tab(), rPos.Col(), rPos.Row(), rPos.Tab(),
+            PAINT_GRID, nExtFlags);
+
+    aModificator.SetDocumentModified();
+
+    return true;
+}
+
 bool ScDocFunc::TransliterateText( const ScMarkData& rMark, sal_Int32 nType,
                                     bool bRecord, bool bApi )
 {
diff --git a/sc/source/ui/inc/docfunc.hxx b/sc/source/ui/inc/docfunc.hxx
index ebd7ac3..5cd2513 100644
--- a/sc/source/ui/inc/docfunc.hxx
+++ b/sc/source/ui/inc/docfunc.hxx
@@ -85,9 +85,11 @@ public:
     void            DetectiveCollectAllPreds(const ScRangeList& rSrcRanges, ::std::vector<ScTokenRef>& rRefTokens);
     void            DetectiveCollectAllSuccs(const ScRangeList& rSrcRanges, ::std::vector<ScTokenRef>& rRefTokens);
 
-    SC_DLLPUBLIC bool
-                    DeleteContents( const ScMarkData& rMark, InsertDeleteFlags nFlags,
-                                            bool bRecord, bool bApi );
+    SC_DLLPUBLIC bool DeleteContents(
+        const ScMarkData& rMark, InsertDeleteFlags nFlags, bool bRecord, bool bApi );
+
+    bool DeleteCell(
+        const ScAddress& rPos, const ScMarkData& rMark, InsertDeleteFlags nFlags, bool bRecord, bool bApi );
 
     bool            TransliterateText( const ScMarkData& rMark, sal_Int32 nType,
                                                bool bRecord, bool bApi );


More information about the Libreoffice-commits mailing list