[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(&region));
-        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(&region)); +       \
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