[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