[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