[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    =?utf-8?q?=5Bcalligra/words-change=5Ftracking-ganeshp=5D_libs=3A?=
From:       Ganesh Paramasivam <ganesh () crystalfab ! com>
Date:       2011-03-04 10:05:22
Message-ID: 20110304100522.10364A60CB () git ! kde ! org
[Download RAW message or body]

Git commit af58b489500de2772a53f7597bfa5f5b8abaff07 by Ganesh Paramasivam.
Committed on 04/03/2011 at 10:50.
Pushed by ganeshp into branch 'words-change_tracking-ganeshp'.

Ability to save change information and change metadata based on user setting (ODF 1.2 \
or DeltaXML)

M  +7    -0    libs/kotext/opendocument/KoTextWriter.cpp     
M  +44   -1    libs/odf/KoGenChange.cpp     
M  +16   -1    libs/odf/KoGenChange.h     

http://commits.kde.org/calligra/af58b489500de2772a53f7597bfa5f5b8abaff07

diff --git a/libs/kotext/opendocument/KoTextWriter.cpp \
b/libs/kotext/opendocument/KoTextWriter.cpp index a100718..b4eb76e 100644
--- a/libs/kotext/opendocument/KoTextWriter.cpp
+++ b/libs/kotext/opendocument/KoTextWriter.cpp
@@ -273,7 +273,14 @@ void KoTextWriter::Private::saveChange(int changeId)
 {
     if(changeTransTable.value(changeId).length())
         return;
+
     KoGenChange change;
+    if (changeTracker->saveFormat() == KoChangeTracker::ODF_1_2) {
+        change.setChangeFormat(KoGenChange::ODF_1_2);
+    } else {
+        change.setChangeFormat(KoGenChange::DELTAXML);
+    }
+
     changeTracker->saveInlineChange(changeId, change);
     QString changeName = sharedData->genChanges().insert(change);
     changeTransTable.insert(changeId, changeName);
diff --git a/libs/odf/KoGenChange.cpp b/libs/odf/KoGenChange.cpp
index a061f2a..3042483 100644
--- a/libs/odf/KoGenChange.cpp
+++ b/libs/odf/KoGenChange.cpp
@@ -39,7 +39,7 @@ static int compareMap(const QMap<QString, QString> &map1, const \
QMap<QString, QS  }
 
 
-KoGenChange::KoGenChange()
+KoGenChange::KoGenChange(KoGenChange::ChangeFormat \
changeFormat):m_changeFormat(changeFormat)  {
 }
 
@@ -70,6 +70,49 @@ void KoGenChange::writeChangeMetaData(KoXmlWriter* writer) const
 
 void KoGenChange::writeChange(KoXmlWriter *writer, const QString &name) const
 {
+    if (m_changeFormat == KoGenChange::ODF_1_2) {
+        writeODF12Change(writer, name);
+    } else {
+        writeDeltaXmlChange(writer, name);
+    }
+}
+
+void KoGenChange::writeODF12Change(KoXmlWriter *writer, const QString &name) const
+{
+    writer->startElement("text:changed-region");
+    writer->addAttribute("text:id", name);
+
+    const char* elementName;
+    switch (m_type) {
+    case KoGenChange::DeleteChange:
+        elementName = "text:deletion";
+        break;
+    case KoGenChange::FormatChange:
+        elementName = "text:format-change";
+        break;
+    case KoGenChange::InsertChange:
+        elementName = "text:insertion";
+        break;
+    default:
+        elementName = "text:format-change"; //should not happen, format-change is \
probably the most harmless of the three. +    }   
+    writer->startElement(elementName);
+    if (!m_changeMetaData.isEmpty()) {
+        writer->startElement("office:change-info");
+        writeChangeMetaData(writer);
+        if (m_literalData.contains("changeMetaData"))
+            writer->addCompleteElement(m_literalData.value("changeMetaData").toUtf8());
 +        writer->endElement(); // office:change-info
+    }   
+    if ((m_type == KoGenChange::DeleteChange) && \
m_literalData.contains("deleteChangeXml")) +        \
writer->addCompleteElement(m_literalData.value("deleteChangeXml").toUtf8()); +
+    writer->endElement(); // text:insertion/format/deletion
+    writer->endElement(); // text:change
+}
+
+void KoGenChange::writeDeltaXmlChange(KoXmlWriter *writer, const QString &name) \
const +{
     writer->startElement("delta:change-transaction");
     writer->addAttribute("delta:change-id", name);
     if (!m_changeMetaData.isEmpty()) {
diff --git a/libs/odf/KoGenChange.h b/libs/odf/KoGenChange.h
index c27e71c..2ee5ad2 100644
--- a/libs/odf/KoGenChange.h
+++ b/libs/odf/KoGenChange.h
@@ -53,12 +53,17 @@ public:
         DeleteChange
     };
 
+    enum ChangeFormat {
+        ODF_1_2,
+        DELTAXML
+    };
+
     /**
      * Start the definition of a new change. Its name will be set later by \
                KoGenChanges::insert(),
      * but first you must define its properties and attributes.
      *
      */
-    explicit KoGenChange();
+    explicit KoGenChange(KoGenChange::ChangeFormat changeFormat = \
KoGenChange::ODF_1_2);  ~KoGenChange();
 
     /// Set the type of this change
@@ -66,6 +71,11 @@ public:
         m_type = type;
     }
 
+    /// set the format to be used to save changes
+    void setChangeFormat(KoGenChange::ChangeFormat changeFormat) {
+        m_changeFormat = changeFormat;
+    }
+
     /// Return the type of this style
     Type type() const {
         return m_type;
@@ -141,10 +151,15 @@ private:
 
     void writeChangeMetaData(KoXmlWriter *writer) const;
 
+    void writeODF12Change(KoXmlWriter *writer, const QString &name) const;
+
+    void writeDeltaXmlChange(KoXmlWriter *writer, const QString &name) const;
+
 private:
     // Note that the copy constructor and assignment operator are allowed.
     // Better not use pointers below!
     Type m_type;
+    ChangeFormat m_changeFormat;
     /// We use QMaps since they provide automatic sorting on the key (important for \
unicity!)  QMap<QString, QString> m_changeMetaData;
     QMap<QString, QString> m_literalData;


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic