[Libreoffice-commits] core.git: 3 commits - sc/Library_sc.mk sc/source
Kohei Yoshida
kohei.yoshida at collabora.com
Wed Oct 8 20:26:49 PDT 2014
sc/Library_sc.mk | 1
sc/source/ui/docshell/docfunc.cxx | 61 ++----------------
sc/source/ui/docshell/docfuncutil.cxx | 115 ++++++++++++++++++++++++++++++++++
sc/source/ui/inc/docfuncutil.hxx | 46 +++++++++++++
sc/source/ui/view/viewfunc.cxx | 67 ++-----------------
5 files changed, 178 insertions(+), 112 deletions(-)
New commits:
commit 9aa36a1ad39e37c372cc833a44fba450b8cc30cd
Author: Kohei Yoshida <kohei.yoshida at collabora.com>
Date: Wed Oct 8 23:21:17 2014 -0400
Move this one to a common place too.
Change-Id: I7f4e007cfc861dc323b42be353c6ba11091e8fa1
diff --git a/sc/source/ui/docshell/docfunc.cxx b/sc/source/ui/docshell/docfunc.cxx
index 6de4d7a..c529527 100644
--- a/sc/source/ui/docshell/docfunc.cxx
+++ b/sc/source/ui/docshell/docfunc.cxx
@@ -637,11 +637,9 @@ bool ScDocFunc::DeleteContents( const ScMarkData& rMark, InsertDeleteFlags nFlag
// add undo action after drawing undo is complete (objects and note captions)
if( bRecord )
{
- ScUndoDeleteContents* pUndo =
- new ScUndoDeleteContents(
- &rDocShell, aMultiMark, aExtendedRange, pUndoDoc, bMulti, nFlags, bDrawUndo);
- rDocShell.GetUndoManager()->AddUndoAction(pUndo);
- pUndo->SetDataSpans(pDataSpans);
+ sc::DocFuncUtil::addDeleteContentsUndo(
+ rDocShell.GetUndoManager(), &rDocShell, aMultiMark, aExtendedRange,
+ pUndoDoc, nFlags, pDataSpans, bMulti, bDrawUndo);
}
if (!AdjustRowHeight( aExtendedRange ))
diff --git a/sc/source/ui/docshell/docfuncutil.cxx b/sc/source/ui/docshell/docfuncutil.cxx
index 35f3fb2..1adb135 100644
--- a/sc/source/ui/docshell/docfuncutil.cxx
+++ b/sc/source/ui/docshell/docfuncutil.cxx
@@ -22,6 +22,7 @@
#include <markdata.hxx>
#include <undobase.hxx>
#include <global.hxx>
+#include <undoblk.hxx>
#include <memory>
@@ -70,6 +71,20 @@ ScDocument* DocFuncUtil::createDeleteContentsUndoDoc(
return pUndoDoc.release();
}
+void DocFuncUtil::addDeleteContentsUndo(
+ svl::IUndoManager* pUndoMgr, ScDocShell* pDocSh, const ScMarkData& rMark,
+ const ScRange& rRange, ScDocument* pUndoDoc, InsertDeleteFlags nFlags,
+ const boost::shared_ptr<ScSimpleUndo::DataSpansType>& pSpans,
+ bool bMulti, bool bDrawUndo )
+{
+ std::unique_ptr<ScUndoDeleteContents> pUndo(
+ new ScUndoDeleteContents(
+ pDocSh, rMark, rRange, pUndoDoc, bMulti, nFlags, bDrawUndo));
+ pUndo->SetDataSpans(pSpans);
+
+ pUndoMgr->AddUndoAction(pUndo.release());
+}
+
ScSimpleUndo::DataSpansType* DocFuncUtil::getNonEmptyCellSpans(
const ScDocument& rDoc, const ScMarkData& rMark, const ScRange& rRange )
{
diff --git a/sc/source/ui/inc/docfuncutil.hxx b/sc/source/ui/inc/docfuncutil.hxx
index 553bab6..65bf820 100644
--- a/sc/source/ui/inc/docfuncutil.hxx
+++ b/sc/source/ui/inc/docfuncutil.hxx
@@ -10,6 +10,8 @@
#include <undobase.hxx>
+#include <boost/shared_ptr.hpp>
+
class ScDocument;
class ScMarkData;
class ScRange;
@@ -27,6 +29,12 @@ public:
ScDocument& rDoc, const ScMarkData& rMark, const ScRange& rRange,
InsertDeleteFlags nFlags, bool bOnlyMarked );
+ static void addDeleteContentsUndo(
+ svl::IUndoManager* pUndoMgr, ScDocShell* pDocSh, const ScMarkData& rMark,
+ const ScRange& rRange, ScDocument* pUndoDoc, InsertDeleteFlags nFlags,
+ const boost::shared_ptr<ScSimpleUndo::DataSpansType>& pSpans,
+ bool bMulti, bool bDrawUndo );
+
static ScSimpleUndo::DataSpansType* getNonEmptyCellSpans(
const ScDocument& rDoc, const ScMarkData& rMark, const ScRange& rRange );
};
diff --git a/sc/source/ui/view/viewfunc.cxx b/sc/source/ui/view/viewfunc.cxx
index cb3db19..f1ab1eb 100644
--- a/sc/source/ui/view/viewfunc.cxx
+++ b/sc/source/ui/view/viewfunc.cxx
@@ -1850,12 +1850,9 @@ void ScViewFunc::DeleteContents( InsertDeleteFlags nFlags, bool bRecord )
if ( bRecord )
{
- ScUndoDeleteContents* pUndo =
- new ScUndoDeleteContents(
- pDocSh, aFuncMark, aExtendedRange, pUndoDoc, bMulti, nFlags, bDrawUndo);
- pUndo->SetDataSpans(pDataSpans);
-
- pDocSh->GetUndoManager()->AddUndoAction(pUndo);
+ sc::DocFuncUtil::addDeleteContentsUndo(
+ pDocSh->GetUndoManager(), pDocSh, aFuncMark, aExtendedRange, pUndoDoc,
+ nFlags, pDataSpans, bMulti, bDrawUndo);
}
if (!AdjustRowHeight( aExtendedRange.aStart.Row(), aExtendedRange.aEnd.Row() ))
commit 7adef94b82f5c71da483f238d05df7800b8da38b
Author: Kohei Yoshida <kohei.yoshida at collabora.com>
Date: Wed Oct 8 22:33:47 2014 -0400
Share undo doc creation code.
Change-Id: I55f27b61637ba0284479c63c2fa48b0bd8938c0f
diff --git a/sc/source/ui/docshell/docfunc.cxx b/sc/source/ui/docshell/docfunc.cxx
index fedbd20..6de4d7a 100644
--- a/sc/source/ui/docshell/docfunc.cxx
+++ b/sc/source/ui/docshell/docfunc.cxx
@@ -628,42 +628,8 @@ bool ScDocFunc::DeleteContents( const ScMarkData& rMark, InsertDeleteFlags nFlag
if ( bRecord )
{
- pUndoDoc = new ScDocument( SCDOCMODE_UNDO );
- pUndoDoc->InitUndo( &rDoc, aMarkRange.aStart.Tab(), aMarkRange.aEnd.Tab() );
-
- // bei "Format/Standard" alle Attribute kopieren, weil CopyToDocument
- // nur mit IDF_HARDATTR zu langsam ist:
- InsertDeleteFlags nUndoDocFlags = nFlags;
- if (nFlags & IDF_ATTRIB)
- nUndoDocFlags |= IDF_ATTRIB;
- if (nFlags & IDF_EDITATTR) // Edit-Engine-Attribute
- nUndoDocFlags |= IDF_STRING; // -> Zellen werden geaendert
- if (nFlags & IDF_NOTE)
- nUndoDocFlags |= IDF_CONTENTS; // copy all cells with their notes
- // note captions are handled in drawing undo
- nUndoDocFlags |= IDF_NOCAPTIONS;
- rDoc.CopyToDocument( aExtendedRange, nUndoDocFlags, bMulti, pUndoDoc, &aMultiMark );
-
- pDataSpans.reset(new ScSimpleUndo::DataSpansType);
-
- ScMarkData::iterator it = aMultiMark.begin(), itEnd = aMultiMark.end();
- for (; it != itEnd; ++it)
- {
- SCTAB nTab = *it;
-
- SCCOL nCol1 = aMarkRange.aStart.Col(), nCol2 = aMarkRange.aEnd.Col();
- SCROW nRow1 = aMarkRange.aStart.Row(), nRow2 = aMarkRange.aEnd.Row();
-
- std::pair<ScSimpleUndo::DataSpansType::iterator,bool> r =
- pDataSpans->insert(nTab, new sc::ColumnSpanSet(false));
-
- if (r.second)
- {
- ScSimpleUndo::DataSpansType::iterator it2 = r.first;
- sc::ColumnSpanSet* pSet = it2->second;
- pSet->scan(rDoc, nTab, nCol1, nRow1, nCol2, nRow2, true);
- }
- }
+ pUndoDoc = sc::DocFuncUtil::createDeleteContentsUndoDoc(rDoc, aMultiMark, aMarkRange, nFlags, bMulti);
+ pDataSpans.reset(sc::DocFuncUtil::getNonEmptyCellSpans(rDoc, aMultiMark, aMarkRange));
}
rDoc.DeleteSelection( nFlags, aMultiMark );
diff --git a/sc/source/ui/docshell/docfuncutil.cxx b/sc/source/ui/docshell/docfuncutil.cxx
index 570ed52..35f3fb2 100644
--- a/sc/source/ui/docshell/docfuncutil.cxx
+++ b/sc/source/ui/docshell/docfuncutil.cxx
@@ -20,6 +20,10 @@
#include <docfuncutil.hxx>
#include <document.hxx>
#include <markdata.hxx>
+#include <undobase.hxx>
+#include <global.hxx>
+
+#include <memory>
namespace sc {
@@ -34,6 +38,63 @@ bool DocFuncUtil::hasProtectedTab( const ScDocument& rDoc, const ScMarkData& rMa
return false;
}
+ScDocument* DocFuncUtil::createDeleteContentsUndoDoc(
+ ScDocument& rDoc, const ScMarkData& rMark, const ScRange& rRange,
+ InsertDeleteFlags nFlags, bool bOnlyMarked )
+{
+ std::unique_ptr<ScDocument> pUndoDoc(new ScDocument(SCDOCMODE_UNDO));
+ SCTAB nTab = rRange.aStart.Tab();
+ pUndoDoc->InitUndo(&rDoc, nTab, nTab);
+ SCTAB nTabCount = rDoc.GetTableCount();
+ ScMarkData::const_iterator itr = rMark.begin(), itrEnd = rMark.end();
+ for (; itr != itrEnd; ++itr)
+ if (*itr != nTab)
+ pUndoDoc->AddUndoTab( *itr, *itr );
+ ScRange aCopyRange = rRange;
+ aCopyRange.aStart.SetTab(0);
+ aCopyRange.aEnd.SetTab(nTabCount-1);
+
+ // in case of "Format/Standard" copy all attributes, because CopyToDocument
+ // with IDF_HARDATTR only is too time-consuming:
+ InsertDeleteFlags nUndoDocFlags = nFlags;
+ if (nFlags & IDF_ATTRIB)
+ nUndoDocFlags |= IDF_ATTRIB;
+ if (nFlags & IDF_EDITATTR) // Edit-Engine-Attribute
+ nUndoDocFlags |= IDF_STRING; // -> cells will be changed
+ if (nFlags & IDF_NOTE)
+ nUndoDocFlags |= IDF_CONTENTS; // copy all cells with their notes
+ // do not copy note captions to undo document
+ nUndoDocFlags |= IDF_NOCAPTIONS;
+ rDoc.CopyToDocument(aCopyRange, nUndoDocFlags, bOnlyMarked, pUndoDoc.get(), &rMark);
+
+ return pUndoDoc.release();
+}
+
+ScSimpleUndo::DataSpansType* DocFuncUtil::getNonEmptyCellSpans(
+ const ScDocument& rDoc, const ScMarkData& rMark, const ScRange& rRange )
+{
+ std::unique_ptr<ScSimpleUndo::DataSpansType> pDataSpans(new ScSimpleUndo::DataSpansType);
+ ScMarkData::const_iterator it = rMark.begin(), itEnd = rMark.end();
+ for (; it != itEnd; ++it)
+ {
+ SCTAB nTab = *it;
+
+ SCCOL nCol1 = rRange.aStart.Col(), nCol2 = rRange.aEnd.Col();
+ SCROW nRow1 = rRange.aStart.Row(), nRow2 = rRange.aEnd.Row();
+
+ std::pair<ScSimpleUndo::DataSpansType::iterator,bool> r =
+ pDataSpans->insert(nTab, new sc::ColumnSpanSet(false));
+
+ if (r.second)
+ {
+ sc::ColumnSpanSet* pSet = r.first->second;
+ pSet->scan(rDoc, nTab, nCol1, nRow1, nCol2, nRow2, true);
+ }
+ }
+
+ return pDataSpans.release();
+}
+
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sc/source/ui/inc/docfuncutil.hxx b/sc/source/ui/inc/docfuncutil.hxx
index 20927a0..553bab6 100644
--- a/sc/source/ui/inc/docfuncutil.hxx
+++ b/sc/source/ui/inc/docfuncutil.hxx
@@ -5,17 +5,34 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
+#ifndef INCLUDED_SC_DOCFUNCUTIL_HXX
+#define INCLUDED_SC_DOCFUNCUTIL_HXX
+
+#include <undobase.hxx>
+
class ScDocument;
class ScMarkData;
+class ScRange;
+struct InsertDeleteFlags;
namespace sc {
class DocFuncUtil
{
public:
+
static bool hasProtectedTab( const ScDocument& rDoc, const ScMarkData& rMark );
+
+ static ScDocument* createDeleteContentsUndoDoc(
+ ScDocument& rDoc, const ScMarkData& rMark, const ScRange& rRange,
+ InsertDeleteFlags nFlags, bool bOnlyMarked );
+
+ static ScSimpleUndo::DataSpansType* getNonEmptyCellSpans(
+ const ScDocument& rDoc, const ScMarkData& rMark, const ScRange& rRange );
};
}
+#endif
+
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sc/source/ui/view/viewfunc.cxx b/sc/source/ui/view/viewfunc.cxx
index 201b720..cb3db19 100644
--- a/sc/source/ui/view/viewfunc.cxx
+++ b/sc/source/ui/view/viewfunc.cxx
@@ -1834,50 +1834,8 @@ void ScViewFunc::DeleteContents( InsertDeleteFlags nFlags, bool bRecord )
if ( bRecord )
{
- pUndoDoc = new ScDocument( SCDOCMODE_UNDO );
- SCTAB nTab = aMarkRange.aStart.Tab();
- pUndoDoc->InitUndo( pDoc, nTab, nTab );
- SCTAB nTabCount = pDoc->GetTableCount();
- ScMarkData::iterator itr = aFuncMark.begin(), itrEnd = aFuncMark.end();
- for (; itr != itrEnd; ++itr)
- if (*itr != nTab)
- pUndoDoc->AddUndoTab( *itr, *itr );
- ScRange aCopyRange = aExtendedRange;
- aCopyRange.aStart.SetTab(0);
- aCopyRange.aEnd.SetTab(nTabCount-1);
-
- // in case of "Format/Standard" copy all attributes, because CopyToDocument
- // with IDF_HARDATTR only is too time-consuming:
- InsertDeleteFlags nUndoDocFlags = nFlags;
- if (nFlags & IDF_ATTRIB)
- nUndoDocFlags |= IDF_ATTRIB;
- if (nFlags & IDF_EDITATTR) // Edit-Engine-Attribute
- nUndoDocFlags |= IDF_STRING; // -> cells will be changed
- if (nFlags & IDF_NOTE)
- nUndoDocFlags |= IDF_CONTENTS; // copy all cells with their notes
- // do not copy note captions to undo document
- nUndoDocFlags |= IDF_NOCAPTIONS;
- pDoc->CopyToDocument( aCopyRange, nUndoDocFlags, bMulti, pUndoDoc, &aFuncMark );
-
- pDataSpans.reset(new ScSimpleUndo::DataSpansType);
-
- for (itr = aFuncMark.begin(); itr != itrEnd; ++itr)
- {
- nTab = *itr;
-
- SCCOL nCol1 = aCopyRange.aStart.Col(), nCol2 = aCopyRange.aEnd.Col();
- SCROW nRow1 = aCopyRange.aStart.Row(), nRow2 = aCopyRange.aEnd.Row();
-
- std::pair<ScSimpleUndo::DataSpansType::iterator,bool> r =
- pDataSpans->insert(nTab, new sc::ColumnSpanSet(false));
-
- if (r.second)
- {
- ScSimpleUndo::DataSpansType::iterator it = r.first;
- sc::ColumnSpanSet* pSet = it->second;
- pSet->scan(*pDoc, nTab, nCol1, nRow1, nCol2, nRow2, true);
- }
- }
+ pUndoDoc = sc::DocFuncUtil::createDeleteContentsUndoDoc(*pDoc, aFuncMark, aExtendedRange, nFlags, bMulti);
+ pDataSpans.reset(sc::DocFuncUtil::getNonEmptyCellSpans(*pDoc, aFuncMark, aExtendedRange));
}
HideAllCursors(); // for if summary is cancelled
commit ed0e3fdcc13e0925c16aa81f6aa461892f15d81a
Author: Kohei Yoshida <kohei.yoshida at collabora.com>
Date: Wed Oct 8 20:01:58 2014 -0400
Start sharing common code between DeleteContents of ScViewFunc/ScDocFunc.
The goal is to have ScViewFunc::DeleteContents() simply call
ScDocFunc::DeleteContents() while doing the view only stuff in the ScViewFunc
variant. This is just a step toward that goal.
Change-Id: I2e574f9eb2b2be5340dbfb6f10739dfc2406faae
diff --git a/sc/Library_sc.mk b/sc/Library_sc.mk
index 55988a1..20460ee 100644
--- a/sc/Library_sc.mk
+++ b/sc/Library_sc.mk
@@ -404,6 +404,7 @@ $(eval $(call gb_Library_add_exception_objects,sc,\
sc/source/ui/docshell/dbdocfun \
sc/source/ui/docshell/dbdocimp \
sc/source/ui/docshell/docfunc \
+ sc/source/ui/docshell/docfuncutil \
sc/source/ui/docshell/docsh \
sc/source/ui/docshell/docsh2 \
sc/source/ui/docshell/docsh3 \
diff --git a/sc/source/ui/docshell/docfunc.cxx b/sc/source/ui/docshell/docfunc.cxx
index f3a6245..fedbd20 100644
--- a/sc/source/ui/docshell/docfunc.cxx
+++ b/sc/source/ui/docshell/docfunc.cxx
@@ -86,6 +86,7 @@
#include <rowheightcontext.hxx>
#include <cellvalues.hxx>
#include <undoconvert.hxx>
+#include <docfuncutil.hxx>
#include <memory>
#include <utility>
@@ -595,17 +596,8 @@ bool ScDocFunc::DeleteContents( const ScMarkData& rMark, InsertDeleteFlags nFlag
if ( rDoc.ExtendMerge( aExtendedRange, true ) )
bMulti = false;
- // keine Objekte auf geschuetzten Tabellen
- bool bObjects = false;
- if ( nFlags & IDF_OBJECTS )
- {
- bObjects = true;
- SCTAB nTabCount = rDoc.GetTableCount();
- ScMarkData::const_iterator itr = rMark.begin(), itrEnd = rMark.end();
- for (; itr != itrEnd && *itr < nTabCount; ++itr)
- if (rDoc.IsTabProtected(*itr))
- bObjects = 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 )
@@ -674,7 +666,6 @@ bool ScDocFunc::DeleteContents( const ScMarkData& rMark, InsertDeleteFlags nFlag
}
}
-//! HideAllCursors(); // falls Zusammenfassung aufgehoben wird
rDoc.DeleteSelection( nFlags, aMultiMark );
// add undo action after drawing undo is complete (objects and note captions)
diff --git a/sc/source/ui/docshell/docfuncutil.cxx b/sc/source/ui/docshell/docfuncutil.cxx
new file mode 100644
index 0000000..570ed52
--- /dev/null
+++ b/sc/source/ui/docshell/docfuncutil.cxx
@@ -0,0 +1,39 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <docfuncutil.hxx>
+#include <document.hxx>
+#include <markdata.hxx>
+
+namespace sc {
+
+bool DocFuncUtil::hasProtectedTab( const ScDocument& rDoc, const ScMarkData& rMark )
+{
+ SCTAB nTabCount = rDoc.GetTableCount();
+ ScMarkData::const_iterator itr = rMark.begin(), itrEnd = rMark.end();
+ for (; itr != itrEnd && *itr < nTabCount; ++itr)
+ if (rDoc.IsTabProtected(*itr))
+ return true;
+
+ return false;
+}
+
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sc/source/ui/inc/docfuncutil.hxx b/sc/source/ui/inc/docfuncutil.hxx
new file mode 100644
index 0000000..20927a0
--- /dev/null
+++ b/sc/source/ui/inc/docfuncutil.hxx
@@ -0,0 +1,21 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+class ScDocument;
+class ScMarkData;
+
+namespace sc {
+
+class DocFuncUtil
+{
+public:
+ static bool hasProtectedTab( const ScDocument& rDoc, const ScMarkData& rMark );
+};
+
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sc/source/ui/view/viewfunc.cxx b/sc/source/ui/view/viewfunc.cxx
index c3782e4..201b720 100644
--- a/sc/source/ui/view/viewfunc.cxx
+++ b/sc/source/ui/view/viewfunc.cxx
@@ -76,6 +76,8 @@
#include "cellsuno.hxx"
#include "tokenarray.hxx"
#include <rowheightcontext.hxx>
+#include <docfuncutil.hxx>
+
#include <boost/scoped_ptr.hpp>
static void lcl_PostRepaintCondFormat( const ScConditionalFormat *pCondFmt, ScDocShell *pDocSh )
@@ -1800,15 +1802,7 @@ void ScViewFunc::DeleteContents( InsertDeleteFlags nFlags, bool bRecord )
}
// no objects on protected tabs
- bool bObjects = false;
- if ( nFlags & IDF_OBJECTS )
- {
- bObjects = true;
- ScMarkData::iterator itr = aFuncMark.begin(), itrEnd = aFuncMark.end();
- for (; itr != itrEnd; ++itr)
- if (pDoc->IsTabProtected(*itr))
- bObjects = false;
- }
+ 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 )
More information about the Libreoffice-commits
mailing list