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

List:       kde-commits
Subject:    [calligra/words-change_tracking-ganeshp] libs/kotext/
From:       Ganesh Paramasivam <ganesh () crystalfab ! com>
Date:       2011-01-21 8:50:42
Message-ID: 20110121085042.24743A60A6 () git ! kde ! org
[Download RAW message or body]

Git commit 667853b59572ee33b516a5309bc506af7282a1d9 by Ganesh Paramasivam
Pushed by ganeshp into branch words-change_tracking-ganeshp

Stable version for support of multiple and overlapping changes ( loading and saving \
). It's still a work-in-progress. More support expected to be added over the next \
couple of weeks

M  +5    -2    libs/kotext/changetracker/KoChangeTracker.cpp     
M  +1    -1    libs/kotext/changetracker/KoChangeTracker.h     
M  +32   -2    libs/kotext/opendocument/KoTextWriter.cpp     
M  +3    -2    libs/kotext/opendocument/tests/TestChangeTracking.cpp     

http://commits.kde.org/47e7010d/667853b59572ee33b516a5309bc506af7282a1d9

diff --git a/libs/kotext/changetracker/KoChangeTracker.cpp \
b/libs/kotext/changetracker/KoChangeTracker.cpp index d398ed7..b22f6ac 100644
--- a/libs/kotext/changetracker/KoChangeTracker.cpp
+++ b/libs/kotext/changetracker/KoChangeTracker.cpp
@@ -189,6 +189,9 @@ int KoChangeTracker::getDeleteChangeId(QString title, \
QTextDocumentFragment sele  
 KoChangeTrackerElement* KoChangeTracker::elementById(int id)
 {
+    if (isDuplicateChangeId(id)) {
+        id = originalChangeId(id);
+    }
     return d->changes.value(id);
 }
 
@@ -275,7 +278,7 @@ bool KoChangeTracker::isDuplicateChangeId(int duplicateChangeId)
     return isDuplicate;
 }
 
-bool KoChangeTracker::originalChangeId(int duplicateChangeId)
+int KoChangeTracker::originalChangeId(int duplicateChangeId)
 {
     int originalChangeId = 0;
     QMultiHash<int, int>::const_iterator i = d->duplicateIds.constBegin();
@@ -287,7 +290,7 @@ bool KoChangeTracker::originalChangeId(int duplicateChangeId)
         }
         ++i;
     }
-
+    
     return originalChangeId;
 }
 
diff --git a/libs/kotext/changetracker/KoChangeTracker.h \
b/libs/kotext/changetracker/KoChangeTracker.h index f618520..a078645 100644
--- a/libs/kotext/changetracker/KoChangeTracker.h
+++ b/libs/kotext/changetracker/KoChangeTracker.h
@@ -94,7 +94,7 @@ public:
 
     int createDuplicateChangeId(int existingChangeId);
     bool isDuplicateChangeId(int duplicateChangeId);
-    bool originalChangeId(int duplicateChangeId);
+    int originalChangeId(int duplicateChangeId);
 
     void acceptRejectChange(int changeId, bool set);
 
diff --git a/libs/kotext/opendocument/KoTextWriter.cpp \
b/libs/kotext/opendocument/KoTextWriter.cpp index e905d9f..f6f533c 100644
--- a/libs/kotext/opendocument/KoTextWriter.cpp
+++ b/libs/kotext/opendocument/KoTextWriter.cpp
@@ -317,7 +317,17 @@ int KoTextWriter::Private::openTagRegion(int position, \
ElementType elementType,  
     if (!changeId || (changeStack.top() == changeId)) {
         changeId = 0;
-    }
+    } else if ((changeTracker->isDuplicateChangeId(changeId)) && \
(changeTracker->originalChangeId(changeId) == changeStack.top())) { +        \
QVectorIterator<int> changeStackIterator(changeStack); +        \
changeStackIterator.toBack(); +       
+        while ((changeStackIterator.peekPrevious()) && \
(changeStackIterator.peekPrevious() == changeTracker->originalChangeId(changeId))) { \
+            changeStackIterator.previous(); +            changeId = \
changeTracker->parent(changeId); +        }
+    } else if ((changeTracker->isDuplicateChangeId(changeId)) && \
(changeTracker->isParent(changeStack.top(), changeId))) { +        changeId = 0;
+    } 
 
     returnChangeId = changeId;
     
@@ -334,6 +344,9 @@ int KoTextWriter::Private::openTagRegion(int position, \
ElementType elementType,  
     while(changeHistory.size()) {
         int changeId = changeHistory.pop();
+        if (changeTracker->isDuplicateChangeId(changeId)) {
+            changeId = changeTracker->originalChangeId(changeId);
+        }
 
         if (changeId && changeTracker->elementById(changeId)->getChangeType() == \
KoGenChange::DeleteChange) {  writer->startElement("delta:removed-content", false);
@@ -581,6 +594,9 @@ void KoTextWriter::Private::saveParagraph(const QTextBlock \
&block, int from, int  QTextFragment firstFragment = (block.begin()).fragment();
             QTextCharFormat firstFragmentFormat = firstFragment.charFormat();
             int firstFragmentChangeId = \
firstFragmentFormat.intProperty(KoCharacterStyle::ChangeTrackerId); +            if \
(changeTracker->isDuplicateChangeId(firstFragmentChangeId)) { +                \
firstFragmentChangeId = changeTracker->originalChangeId(firstFragmentChangeId); +     \
}  if (firstFragmentChangeId != changeId) {
                 QString outputXml("<delta:removed-content \
delta:removal-change-idref=\"" + changeTransTable.value(changeId) + "\"/>");  \
writer->addCompleteElement(outputXml.toUtf8()); @@ -747,6 +763,9 @@ void \
KoTextWriter::Private::saveParagraph(const QTextBlock &block, int from, int  \
                QTextFragment lastFragment = (--block.end()).fragment();
             QTextCharFormat lastFragmentFormat = lastFragment.charFormat();
             int lastFragmentChangeId = \
lastFragmentFormat.intProperty(KoCharacterStyle::ChangeTrackerId); +            if \
(changeTracker->isDuplicateChangeId(lastFragmentChangeId)) { +                \
lastFragmentChangeId = changeTracker->originalChangeId(lastFragmentChangeId); +       \
}  if (lastFragmentChangeId != changeId) {
                 QString outputXml("<delta:removed-content \
delta:removal-change-idref=\"" + changeTransTable.value(changeId) + "\"/>");  \
writer->addCompleteElement(outputXml.toUtf8()); @@ -848,6 +867,10 @@ int \
KoTextWriter::Private::checkForListChange(const QTextBlock &listBlock)  int changeId \
= 0;  do {
         int currentChangeId = checkForBlockChange(block);
+        if (changeTracker->isDuplicateChangeId(currentChangeId)) {
+            currentChangeId = changeTracker->originalChangeId(currentChangeId);
+        }
+
         if (!currentChangeId) {
             // Encountered a list-item that is not a change
             // So break out of loop and return 0
@@ -885,7 +908,6 @@ int KoTextWriter::Private::checkForListChange(const QTextBlock \
&listBlock)  }
         }
     } while ((textDocument.list(block) == list) && (KoList::level(block) >= \
                topListLevel));
-
     return changeId;
 }
 
@@ -1326,6 +1348,10 @@ int KoTextWriter::Private::checkForMergeOrSplit(const \
QTextBlock &block, KoGenCh  } else {
             nextBlockChangeId = \
endBlock.next().blockFormat().property(KoCharacterStyle::ChangeTrackerId).toInt();  }
+
+        if (changeTracker->isDuplicateChangeId(nextBlockChangeId)) {
+            nextBlockChangeId = changeTracker->originalChangeId(nextBlockChangeId);
+        }
         
         if (!changeId) {
             splitMergeChangeId = changeId = nextBlockChangeId;
@@ -1348,6 +1374,10 @@ int KoTextWriter::Private::checkForMergeOrSplit(const \
QTextBlock &block, KoGenCh  QTextFragment lastFragment = \
(--(endBlock.end())).fragment();  QTextCharFormat lastFragmentFormat = \
                lastFragment.charFormat();
         int lastFragmentChangeId = \
lastFragmentFormat.intProperty(KoCharacterStyle::ChangeTrackerId); +        if \
(changeTracker->isDuplicateChangeId(lastFragmentChangeId)) { +            \
lastFragmentChangeId = changeTracker->originalChangeId(lastFragmentChangeId); +       \
} +
         if (lastFragmentChangeId != splitMergeChangeId) {
             endBlockNumber = endBlock.blockNumber();
         }
diff --git a/libs/kotext/opendocument/tests/TestChangeTracking.cpp \
b/libs/kotext/opendocument/tests/TestChangeTracking.cpp index b5549a4..f66ef8e 100644
--- a/libs/kotext/opendocument/tests/TestChangeTracking.cpp
+++ b/libs/kotext/opendocument/tests/TestChangeTracking.cpp
@@ -299,9 +299,10 @@ void TestChangeTracking::testChangeTracking_data()
     QTest::newRow("Others-3")  << \
"ChangeTracking/other/list-table-list-1/list-table-list-tracked.odt";  
     //Multiple and Overlapping changes
+    QTest::newRow("Multiple Paragraph Changes")  << \
"ChangeTracking/multiple-changes/para-add-then-delete/para-add-delete-tracked.odt"; + \
QTest::newRow("Multiple Span Changes")  << \
                "ChangeTracking/multiple-changes/insert-delete-span/insert-delete-span-tracked.odt";
                
     QTest::newRow("Paragraph Overlapping")  << \
"ChangeTracking/overlapping/text-delete-within-added-p/text-delete-within-added-p-tracked.odt";
                
-    //QTest::newRow("Multiple Paragraph Changes")  << \
                "ChangeTracking/multiple-changes/para-add-then-delete/para-add-delete-tracked.odt";
                
-    //QTest::newRow("Multiple Span Changes")  << \
"ChangeTracking/multiple-changes/insert-delete-span/insert-delete-span-tracked.odt"; \
+    QTest::newRow("List Overlapping")  << \
"ChangeTracking/overlapping/insert-list-item-delete-list/insert-list-item-delete-list-tracked.odt";
  
 }
 
diff --git a/libs/kotext/opendocument/tests/data/ChangeTracking/multiple-changes/insert-delete-span/insert-delete-span-tracked.odt \
b/libs/kotext/opendocument/tests/data/ChangeTracking/multiple-changes/insert-delete-span/insert-delete-span-tracked.odt
 index 9518a9a..23069f4 100755
Binary files a/libs/kotext/opendocument/tests/data/ChangeTracking/multiple-changes/insert-delete-span/insert-delete-span-tracked.odt \
and b/libs/kotext/opendocument/tests/data/ChangeTracking/multiple-changes/insert-delete-span/insert-delete-span-tracked.odt \
                differ
diff --git a/libs/kotext/opendocument/tests/data/ChangeTracking/multiple-changes/para-add-then-delete/para-add-delete-tracked.odt \
b/libs/kotext/opendocument/tests/data/ChangeTracking/multiple-changes/para-add-then-delete/para-add-delete-tracked.odt
 index 4ee30c2..dae11de 100755
Binary files a/libs/kotext/opendocument/tests/data/ChangeTracking/multiple-changes/para-add-then-delete/para-add-delete-tracked.odt \
and b/libs/kotext/opendocument/tests/data/ChangeTracking/multiple-changes/para-add-then-delete/para-add-delete-tracked.odt \
                differ
diff --git a/libs/kotext/opendocument/tests/data/ChangeTracking/overlapping/insert-list-item-delete-list/insert-list-item-delete-list-tracked.odt \
b/libs/kotext/opendocument/tests/data/ChangeTracking/overlapping/insert-list-item-delete-list/insert-list-item-delete-list-tracked.odt
 index 9a63134..2bd5ae2 100755
Binary files a/libs/kotext/opendocument/tests/data/ChangeTracking/overlapping/insert-list-item-delete-list/insert-list-item-delete-list-tracked.odt \
and b/libs/kotext/opendocument/tests/data/ChangeTracking/overlapping/insert-list-item-delete-list/insert-list-item-delete-list-tracked.odt \
differ


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

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