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

List:       kde-commits
Subject:    branches/work/koffice-change-tracking/libs/kotext/opendocument
From:       Ganesh Paramasivam <ganesh () crystalfab ! com>
Date:       2010-12-27 9:52:58
Message-ID: 20101227095258.7AE00AC8AD () svn ! kde ! org
[Download RAW message or body]

SVN commit 1209559 by ganeshp:

Making checkForDeleteMerge a generic function to check for both splits and merges

 M  +39 -7     KoTextWriter.cpp  


--- branches/work/koffice-change-tracking/libs/kotext/opendocument/KoTextWriter.cpp \
#1209558:1209559 @@ -80,6 +80,9 @@
     styleManager(0),
     changeTracker(0),
     rdfData(0),
+    splitEndBlockNumber(-1),
+    splitRegionOpened(false),
+    spltIdCounter(1),
     deleteMergeRegionOpened(false),
     deleteMergeEndBlockNumber(-1)
     {
@@ -136,13 +139,22 @@
     // is not included in the selection.
     QList<KoInlineObject*> pairedInlineObjectStack;
 
+    // For saving of paragraph or header splits    
+    int checkForSplit(const QTextBlock &block);
+    int splitEndBlockNumber;
+    bool splitRegionOpened;
+    bool spltIdCounter;
+
     //For saving of delete-changes that result in a merge between two elements
     bool deleteMergeRegionOpened;
     int deleteMergeEndBlockNumber;
-    int checkForDeleteMerge(QTextBlock &block);
+    int checkForDeleteMerge(const QTextBlock &block);
     void openDeleteMergeRegion();
     void closeDeleteMergeRegion();
 
+    //Method used by both split and merge
+    int checkForMergeOrSplit(const QTextBlock &block, KoGenChange::Type changeType);
+
     KoXmlWriter *oldXmlWriter;
     KoXmlWriter *newXmlWriter;
     QByteArray generatedXmlArray;
@@ -455,6 +467,15 @@
         writer->addAttribute("delta:insertion-type", "insert-with-content");
     }
 
+    if (!deleteMergeRegionOpened && !splitRegionOpened && !cursor.currentTable() && \
(!cursor.currentList() || outlineLevel)) { +        qDebug() << \
"***********checkForSplit called for block " << block.text(); +        \
splitEndBlockNumber = checkForSplit(block); +        qDebug() << \
"***********splitEndBlockNumber is " << splitEndBlockNumber; +        if \
(splitEndBlockNumber != -1) { +            splitRegionOpened = true;
+        }
+    }
+
     QString styleName = saveParagraphStyle(block);
     if (!styleName.isEmpty())
         writer->addAttribute("text:style-name", styleName);
@@ -1111,6 +1132,7 @@
             }
         }
 
+
         saveParagraph(block, from, to);
 
         if (deleteMergeRegionOpened && (block.blockNumber() == \
deleteMergeEndBlockNumber) && (!cursor.currentList() || blockOutlineLevel)) { @@ \
-1121,13 +1143,23 @@  } // while
 }
 
-int KoTextWriter::Private::checkForDeleteMerge(QTextBlock &block)
+int KoTextWriter::Private::checkForSplit(const QTextBlock &block)
 {
+    return checkForMergeOrSplit(block, KoGenChange::InsertChange);
+}
+
+int KoTextWriter::Private::checkForDeleteMerge(const QTextBlock &block)
+{
+    return checkForMergeOrSplit(block, KoGenChange::DeleteChange);
+}
+
+int KoTextWriter::Private::checkForMergeOrSplit(const QTextBlock &block, \
KoGenChange::Type changeType) +{
     QTextBlock endBlock = block;
     QTextCursor cursor(block);    
     int endBlockNumber = -1;
 
-    int changeId = 0, deleteChangeId = 0;
+    int splitMergeChangeId = 0, changeId = 0;
     do {
         if (!endBlock.next().isValid())
             break;
@@ -1142,8 +1174,8 @@
         }
         
         if (!changeId) {
-            deleteChangeId = changeId = nextBlockChangeId;
-            if ((changeId) && \
(changeTracker->elementById(nextBlockChangeId)->getChangeType() == \
KoGenChange::DeleteChange)) { +            splitMergeChangeId = changeId = \
nextBlockChangeId; +            if ((changeId) && \
(changeTracker->elementById(nextBlockChangeId)->getChangeType() == changeType)) {  \
endBlock = endBlock.next();  }
         } else {
@@ -1156,11 +1188,11 @@
     } while(changeId);
 
     if (endBlock.blockNumber() != block.blockNumber()) {
-        //Check that the last fragment of this block is not a part of this delete \
change. If so, it is not a delete merge. +        //Check that the last fragment of \
this block is not a part of this change. If so, it is not a merge or a split  \
QTextFragment lastFragment = (block.end()).fragment();  QTextCharFormat \
                lastFragmentFormat = lastFragment.charFormat();
         int lastFragmentChangeId = \
                lastFragmentFormat.intProperty(KoCharacterStyle::ChangeTrackerId);
-        if (lastFragmentChangeId != deleteChangeId) {
+        if (lastFragmentChangeId != splitMergeChangeId) {
             endBlockNumber = endBlock.blockNumber();
         }
     }


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

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