[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: [calligra] sheets: add named areas to new odf dir
From: Tomas Mecir <mecirt () gmail ! com>
Date: 2016-03-06 17:21:12
Message-ID: E1accMi-0005vS-EH () scm ! kde ! org
[Download RAW message or body]
Git commit 010eb6aad6a1b69aa083efabcc36ff079e5aa776 by Tomas Mecir.
Committed on 27/02/2016 at 22:24.
Pushed by mecir into branch 'master'.
add named areas to new odf dir
M +8 -68 sheets/NamedAreaManager.cpp
M +4 -9 sheets/NamedAreaManager.h
M +0 -1 sheets/odf/SheetsOdfDoc.cpp
M +67 -2 sheets/odf/SheetsOdfMap.cpp
M +3 -0 sheets/odf/SheetsOdfPrivate.h
http://commits.kde.org/calligra/010eb6aad6a1b69aa083efabcc36ff079e5aa776
diff --git a/sheets/NamedAreaManager.cpp b/sheets/NamedAreaManager.cpp
index 0b3c975..3369e24 100644
--- a/sheets/NamedAreaManager.cpp
+++ b/sheets/NamedAreaManager.cpp
@@ -30,13 +30,12 @@
// Local
#include "NamedAreaManager.h"
+#include <KoXmlReader.h>
+
// Qt
+#include <QDomElement>
#include <QHash>
-// Calligra
-#include <KoXmlNS.h>
-#include <KoXmlWriter.h>
-
// Sheets
#include "CellStorage.h"
#include "FormulaStorage.h"
@@ -45,7 +44,6 @@
#include "Region.h"
#include "Sheet.h"
#include "Util.h"
-#include "odf/SheetsOdf.h"
using namespace Calligra::Sheets;
@@ -77,6 +75,11 @@ NamedAreaManager::~NamedAreaManager()
delete d;
}
+const Map *NamedAreaManager::map() const
+{
+ return d->map;
+}
+
void NamedAreaManager::insert(const Region& region, const QString& name)
{
// NOTE Stefan: Only contiguous regions are supported (OpenDocument \
compatibility). @@ -175,69 +178,6 @@ void NamedAreaManager::updateAllNamedAreas()
}
}
-void NamedAreaManager::loadOdf(const KoXmlElement& body)
-{
- KoXmlNode namedAreas = KoXml::namedItemNS(body, KoXmlNS::table, \
"named-expressions");
- if (!namedAreas.isNull()) {
- debugSheetsODF << "Loading named areas...";
- KoXmlElement element;
- forEachElement(element, namedAreas) {
- if (element.namespaceURI() != KoXmlNS::table)
- continue;
- if (element.localName() == "named-range") {
- if (!element.hasAttributeNS(KoXmlNS::table, "name"))
- continue;
- if (!element.hasAttributeNS(KoXmlNS::table, "cell-range-address"))
- continue;
-
- // TODO: what is: table:base-cell-address
- const QString base = element.attributeNS(KoXmlNS::table, \
"base-cell-address", QString());
-
- // Handle the case where the table:base-cell-address does contain \
the referenced sheetname
- // while it's missing in the table:cell-range-address. See bug \
#194386 for an example.
- Sheet* fallbackSheet = 0;
- if (!base.isEmpty()) {
- Region region(Odf::loadRegion(base), d->map);
- fallbackSheet = region.lastSheet();
- }
-
- const QString name = element.attributeNS(KoXmlNS::table, "name", \
QString());
- const QString range = element.attributeNS(KoXmlNS::table, \
"cell-range-address", QString());
- debugSheetsODF << "Named area found, name:" << name << ", area:" << \
range;
-
- Region region(Odf::loadRegion(range), d->map, fallbackSheet);
- if (!region.isValid() || !region.lastSheet()) {
- debugSheetsODF << "invalid area";
- continue;
- }
-
- insert(region, name);
- } else if (element.localName() == "named-expression") {
- debugSheetsODF << "Named expression found.";
- // TODO
- }
- }
- }
-}
-
-void NamedAreaManager::saveOdf(KoXmlWriter& xmlWriter) const
-{
- if (d->namedAreas.isEmpty())
- return;
- Region region;
- xmlWriter.startElement("table:named-expressions");
- const QList<NamedArea> namedAreas = d->namedAreas.values();
- for (int i = 0; i < namedAreas.count(); ++i) {
- region = Region(namedAreas[i].range, namedAreas[i].sheet);
- xmlWriter.startElement("table:named-range");
- xmlWriter.addAttribute("table:name", namedAreas[i].name);
- xmlWriter.addAttribute("table:base-cell-address", Odf::saveRegion(Region(1, \
1, namedAreas[i].sheet).name()));
- xmlWriter.addAttribute("table:cell-range-address", \
Odf::saveRegion(®ion));
- xmlWriter.endElement();
- }
- xmlWriter.endElement();
-}
-
void NamedAreaManager::loadXML(const KoXmlElement& parent)
{
KoXmlElement element;
diff --git a/sheets/NamedAreaManager.h b/sheets/NamedAreaManager.h
index fb706b6..8b0e4b9 100644
--- a/sheets/NamedAreaManager.h
+++ b/sheets/NamedAreaManager.h
@@ -23,16 +23,14 @@
#include <QList>
#include <QObject>
-#include <KoXmlReader.h>
-
#include "Region.h"
#include "sheets_odf_export.h"
class QDomDocument;
+class QDomElement;
class QString;
-
-class KoXmlWriter;
+class KoXmlElement;
namespace Calligra
{
@@ -59,6 +57,8 @@ public:
*/
virtual ~NamedAreaManager();
+ const Map *map() const;
+
void remove(Sheet* sheet);
Region namedArea(const QString& name) const;
@@ -74,11 +74,6 @@ public:
void regionChanged(const Region& region);
void updateAllNamedAreas();
- /// \ingroup OpenDocument
- void loadOdf(const KoXmlElement& body);
- /// \ingroup OpenDocument
- void saveOdf(KoXmlWriter& xmlWriter) const;
-
/// \ingroup NativeFormat
void loadXML(const KoXmlElement& element);
/// \ingroup NativeFormat
diff --git a/sheets/odf/SheetsOdfDoc.cpp b/sheets/odf/SheetsOdfDoc.cpp
index cbc9612..bb50bd7 100644
--- a/sheets/odf/SheetsOdfDoc.cpp
+++ b/sheets/odf/SheetsOdfDoc.cpp
@@ -188,7 +188,6 @@ bool Odf::saveDocument(DocBase *doc, KoDocument::SavingContext \
&documentContext) bodyWriter->endElement(); ////office:spreadsheet
bodyWriter->endElement(); ////office:body
-#warning convert to new odf
// Done with writing out the contents to the tempfile, we can now write out the \
automatic styles
mainStyles.saveOdfStyles(KoGenStyles::DocumentAutomaticStyles, contentWriter);
diff --git a/sheets/odf/SheetsOdfMap.cpp b/sheets/odf/SheetsOdfMap.cpp
index 884ddb0..2a2bbed 100644
--- a/sheets/odf/SheetsOdfMap.cpp
+++ b/sheets/odf/SheetsOdfMap.cpp
@@ -239,7 +239,7 @@ bool Odf::loadMap(Map *map, const KoXmlElement& body, \
KoOdfLoadingContext& odfCo #warning TODO new style odf
map->databaseManager()->loadOdf(body); // table:database-ranges
#warning TODO new style odf
- map->namedAreaManager()->loadOdf(body); // table:named-expressions
+ loadNamedAreas(map->namedAreaManager(), body); // table:named-expressions
map->setLoading(false);
return true;
@@ -305,7 +305,7 @@ bool Odf::saveMap(Map *map, KoXmlWriter & xmlWriter, \
KoShapeSavingContext & savi tableContext.valStyle.writeStyle(xmlWriter);
#warning TODO new style odf
- map->namedAreaManager()->saveOdf(savingContext.xmlWriter());
+ saveNamedAreas(map->namedAreaManager(), savingContext.xmlWriter());
#warning TODO new style odf
map->databaseManager()->saveOdf(savingContext.xmlWriter());
return true;
@@ -359,6 +359,71 @@ void Odf::saveTableShape(Sheet *sheet, KoShapeSavingContext \
&context) tableContext.valStyle.writeStyle(context.xmlWriter());
}
+void Odf::loadNamedAreas(NamedAreaManager *manager, const KoXmlElement& body)
+{
+ KoXmlNode namedAreas = KoXml::namedItemNS(body, KoXmlNS::table, \
"named-expressions"); + if (namedAreas.isNull()) return;
+
+ debugSheetsODF << "Loading named areas...";
+ KoXmlElement element;
+ forEachElement(element, namedAreas) {
+ if (element.namespaceURI() != KoXmlNS::table)
+ continue;
+ if (element.localName() == "named-range") {
+ if (!element.hasAttributeNS(KoXmlNS::table, "name"))
+ continue;
+ if (!element.hasAttributeNS(KoXmlNS::table, "cell-range-address"))
+ continue;
+
+ // TODO: what is: table:base-cell-address
+ const QString base = element.attributeNS(KoXmlNS::table, \
"base-cell-address", QString()); +
+ // Handle the case where the table:base-cell-address does contain the \
referenced sheetname + // while it's missing in the \
table:cell-range-address. See bug #194386 for an example. + Sheet* \
fallbackSheet = 0; + if (!base.isEmpty()) {
+ Region region(loadRegion(base), manager->map());
+ fallbackSheet = region.lastSheet();
+ }
+
+ const QString name = element.attributeNS(KoXmlNS::table, "name", \
QString()); + const QString range = element.attributeNS(KoXmlNS::table, \
"cell-range-address", QString()); + debugSheetsODF << "Named area found, \
name:" << name << ", area:" << range; +
+ Region region(Odf::loadRegion(range), manager->map(), fallbackSheet);
+ if (!region.isValid() || !region.lastSheet()) {
+ debugSheetsODF << "invalid area";
+ continue;
+ }
+
+ manager->insert(region, name);
+ } else if (element.localName() == "named-expression") {
+ debugSheetsODF << "Named expression found.";
+ // TODO
+ }
+ }
+}
+
+void Odf::saveNamedAreas(const NamedAreaManager *manager, KoXmlWriter& xmlWriter)
+{
+ QList<QString> areas = manager->areaNames();
+ if (areas.isEmpty()) return;
+
+ Region region;
+ xmlWriter.startElement("table:named-expressions");
+ for (int i = 0; i < areas.count(); ++i) {
+ QString name = areas[i];
+ region = manager->namedArea(name);
+ xmlWriter.startElement("table:named-range");
+ xmlWriter.addAttribute("table:name", name);
+ xmlWriter.addAttribute("table:base-cell-address", Odf::saveRegion(Region(1, \
1, manager->sheet(name)).name())); + \
xmlWriter.addAttribute("table:cell-range-address", Odf::saveRegion(®ion)); + \
xmlWriter.endElement(); + }
+ xmlWriter.endElement();
+}
+
+
diff --git a/sheets/odf/SheetsOdfPrivate.h b/sheets/odf/SheetsOdfPrivate.h
index 6a2ee7a..4e020b1 100644
--- a/sheets/odf/SheetsOdfPrivate.h
+++ b/sheets/odf/SheetsOdfPrivate.h
@@ -48,6 +48,7 @@ namespace Calligra {
namespace Sheets {
class CalculationSettings;
+class NamedAreaManager;
namespace Odf {
@@ -59,6 +60,8 @@ namespace Odf {
bool loadMap(Map *map, const KoXmlElement& body, KoOdfLoadingContext& \
odfContext); void loadMapSettings(Map *map, const KoOasisSettings &settingsDoc);
bool saveMap(Map *map, KoXmlWriter & xmlWriter, KoShapeSavingContext & \
savingContext); + void loadNamedAreas(NamedAreaManager *manager, const \
KoXmlElement& body); + void saveNamedAreas(const NamedAreaManager *manager, \
KoXmlWriter& xmlWriter);
// SheetsOdfSheet
bool loadSheet(Sheet *sheet, const KoXmlElement& sheetElement, \
OdfLoadingContext& tableContext, const Styles& autoStyles, const QHash<QString, \
Conditions>& conditionalStyles);
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic