[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: [kate] part: modified line system: refactor through derivation
From: Dominik Haumann <dhdev () gmx ! de>
Date: 2011-09-04 18:58:13
Message-ID: 20110904185813.832FEA607A () git ! kde ! org
[Download RAW message or body]
Git commit 5b915a4cfb23c7afc114cc8399254384aac9a4a3 by Dominik Haumann.
Committed on 04/09/2011 at 20:53.
Pushed by dhaumann into branch 'master'.
modified line system: refactor through derivation
Now, the undo/redo text modification is completely separated from the modification \
system
A +396 -0 part/undo/katemodifiedundo.cpp [License: LGPL (v2)]
M +1 -0 part/CMakeLists.txt
A +134 -0 part/undo/katemodifiedundo.h [License: LGPL (v2)]
M +28 -18 part/undo/kateundo.h
M +1 -271 part/undo/kateundo.cpp
http://commits.kde.org/kate/5b915a4cfb23c7afc114cc8399254384aac9a4a3
diff --git a/part/CMakeLists.txt b/part/CMakeLists.txt
index 2f249c4..5d238e8 100644
--- a/part/CMakeLists.txt
+++ b/part/CMakeLists.txt
@@ -73,6 +73,7 @@ document/katebuffer.cpp
# undo
undo/kateundo.cpp
+undo/katemodifiedundo.cpp
undo/kateundomanager.cpp
# scripting
diff --git a/part/undo/katemodifiedundo.cpp b/part/undo/katemodifiedundo.cpp
new file mode 100644
index 0000000..dc36078
--- /dev/null
+++ b/part/undo/katemodifiedundo.cpp
@@ -0,0 +1,396 @@
+/* This file is part of the KDE libraries
+ Copyright (C) 2011 Dominik Haumann <dhaumann@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License version 2 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#include "katemodifiedundo.h"
+
+#include "kateundomanager.h"
+#include "katedocument.h"
+
+#include <ktexteditor/cursor.h>
+#include <ktexteditor/view.h>
+
+
+KateModifiedInsertText::KateModifiedInsertText (KateDocument *document, int line, \
int col, const QString &text) + : KateEditInsertTextUndo (document, line, col, text)
+{
+ setFlag(RedoLine1Modified);
+ Kate::TextLine tl = document->plainKateTextLine(line);
+ Q_ASSERT(tl);
+ if (tl->markedAsModified()) {
+ setFlag(UndoLine1Modified);
+ }
+ if (tl->markedAsSavedOnDisk()) {
+ setFlag(UndoLine1Saved);
+ }
+}
+
+KateModifiedRemoveText::KateModifiedRemoveText (KateDocument *document, int line, \
int col, const QString &text) + : KateEditRemoveTextUndo (document, line, col, text)
+{
+ setFlag(RedoLine1Modified);
+ Kate::TextLine tl = document->plainKateTextLine(line);
+ Q_ASSERT(tl);
+ if (tl->markedAsModified()) {
+ setFlag(UndoLine1Modified);
+ }
+ if (tl->markedAsSavedOnDisk()) {
+ setFlag(UndoLine1Saved);
+ }
+}
+
+KateModifiedWrapLine::KateModifiedWrapLine (KateDocument *document, int line, int \
col, int len, bool newLine) + : KateEditWrapLineUndo (document, line, col, len, \
newLine) +{
+ Kate::TextLine tl = document->plainKateTextLine(line);
+ Q_ASSERT(tl);
+ if (col < len || tl->markedAsModified()) {
+ setFlag(RedoLine1Modified);
+ } else if (tl->markedAsSavedOnDisk()) {
+ setFlag(RedoLine1Saved);
+ }
+
+ if (col > 0 || len == 0 || tl->markedAsModified()) {
+ setFlag(RedoLine2Modified);
+ } else if (tl->markedAsSavedOnDisk()) {
+ setFlag(RedoLine2Saved);
+ }
+
+ if (tl->markedAsModified()) {
+ setFlag(UndoLine1Modified);
+ }
+ if (tl->markedAsSavedOnDisk()) {
+ setFlag(UndoLine1Saved);
+ }
+}
+
+KateModifiedUnWrapLine::KateModifiedUnWrapLine (KateDocument *document, int line, \
int col, int len, bool removeLine) + : KateEditUnWrapLineUndo (document, line, col, \
len, removeLine) +{
+ setFlag(RedoLine1Modified);
+
+ Kate::TextLine tl = document->plainKateTextLine(line);
+ Q_ASSERT(tl);
+ if (tl->markedAsModified()) {
+ setFlag(UndoLine1Modified);
+ }
+ if (tl->markedAsSavedOnDisk()) {
+ setFlag(UndoLine1Saved);
+ }
+
+ Kate::TextLine nextLine = document->plainKateTextLine(line + 1);
+ Q_ASSERT(nextLine);
+ if (nextLine->markedAsModified()) {
+ setFlag(UndoLine2Modified);
+ }
+ if (nextLine->markedAsSavedOnDisk()) {
+ setFlag(UndoLine2Saved);
+ }
+}
+
+KateModifiedInsertLine::KateModifiedInsertLine (KateDocument *document, int line, \
const QString &text) + : KateEditInsertLineUndo (document, line, text)
+{
+ setFlag(RedoLine1Modified);
+}
+
+KateModifiedRemoveLine::KateModifiedRemoveLine (KateDocument *document, int line, \
const QString &text) + : KateEditRemoveLineUndo (document, line, text)
+{
+ Kate::TextLine tl = document->plainKateTextLine(line);
+ Q_ASSERT(tl);
+ if (tl->markedAsModified()) {
+ setFlag(UndoLine1Modified);
+ }
+ if (tl->markedAsSavedOnDisk()) {
+ setFlag(UndoLine1Saved);
+ }
+}
+
+void KateModifiedInsertText::undo ()
+{
+ KateEditInsertTextUndo::undo();
+
+ KateDocument *doc = document();
+ Kate::TextLine tl = doc->plainKateTextLine(line());
+ Q_ASSERT(tl);
+
+ tl->markAsModified(isFlagSet(UndoLine1Modified));
+ tl->markAsSavedOnDisk(isFlagSet(UndoLine1Saved));
+}
+
+void KateModifiedRemoveText::undo ()
+{
+ KateEditRemoveTextUndo::undo();
+
+ KateDocument *doc = document();
+ Kate::TextLine tl = doc->plainKateTextLine(line());
+ Q_ASSERT(tl);
+
+ tl->markAsModified(isFlagSet(UndoLine1Modified));
+ tl->markAsSavedOnDisk(isFlagSet(UndoLine1Saved));
+}
+
+void KateModifiedWrapLine::undo ()
+{
+ KateEditWrapLineUndo::undo();
+
+ KateDocument *doc = document();
+ Kate::TextLine tl = doc->plainKateTextLine(line());
+ Q_ASSERT(tl);
+
+ tl->markAsModified(isFlagSet(UndoLine1Modified));
+ tl->markAsSavedOnDisk(isFlagSet(UndoLine1Saved));
+}
+
+void KateModifiedUnWrapLine::undo ()
+{
+ KateEditUnWrapLineUndo::undo();
+
+ KateDocument *doc = document();
+ Kate::TextLine tl = doc->plainKateTextLine(line());
+ Q_ASSERT(tl);
+
+ tl->markAsModified(isFlagSet(UndoLine1Modified));
+ tl->markAsSavedOnDisk(isFlagSet(UndoLine1Saved));
+
+ Kate::TextLine nextLine = doc->plainKateTextLine(line() + 1);
+ Q_ASSERT(nextLine);
+ nextLine->markAsModified(isFlagSet(UndoLine2Modified));
+ nextLine->markAsSavedOnDisk(isFlagSet(UndoLine2Saved));
+}
+
+void KateModifiedInsertLine::undo ()
+{
+ KateEditInsertLineUndo::undo();
+
+ // no line modification needed, since the line is removed
+}
+
+void KateModifiedRemoveLine::undo ()
+{
+ KateEditRemoveLineUndo::undo();
+
+ KateDocument *doc = document();
+ Kate::TextLine tl = doc->plainKateTextLine(line());
+ Q_ASSERT(tl);
+
+ tl->markAsModified(isFlagSet(UndoLine1Modified));
+ tl->markAsSavedOnDisk(isFlagSet(UndoLine1Saved));
+}
+
+
+void KateModifiedRemoveText::redo ()
+{
+ KateEditRemoveTextUndo::redo();
+
+ KateDocument *doc = document();
+ Kate::TextLine tl = doc->plainKateTextLine(line());
+ Q_ASSERT(tl);
+
+ tl->markAsModified(isFlagSet(RedoLine1Modified));
+ tl->markAsSavedOnDisk(isFlagSet(RedoLine1Saved));
+}
+
+void KateModifiedInsertText::redo ()
+{
+ KateEditInsertTextUndo::redo();
+
+ KateDocument *doc = document();
+ Kate::TextLine tl = doc->plainKateTextLine(line());
+ Q_ASSERT(tl);
+
+ tl->markAsModified(isFlagSet(RedoLine1Modified));
+ tl->markAsSavedOnDisk(isFlagSet(RedoLine1Saved));
+}
+
+void KateModifiedUnWrapLine::redo ()
+{
+ KateEditUnWrapLineUndo::redo();
+
+ KateDocument *doc = document();
+ Kate::TextLine tl = doc->plainKateTextLine(line());
+ Q_ASSERT(tl);
+
+ tl->markAsModified(isFlagSet(RedoLine1Modified));
+ tl->markAsSavedOnDisk(isFlagSet(RedoLine1Saved));
+}
+
+void KateModifiedWrapLine::redo ()
+{
+ KateEditWrapLineUndo::redo ();
+
+ KateDocument *doc = document();
+ Kate::TextLine tl = doc->plainKateTextLine(line());
+ Q_ASSERT(tl);
+
+ tl->markAsModified(isFlagSet(RedoLine1Modified));
+ tl->markAsSavedOnDisk(isFlagSet(RedoLine1Saved));
+
+ Kate::TextLine nextLine = doc->plainKateTextLine(line() + 1);
+ Q_ASSERT(nextLine);
+
+ nextLine->markAsModified(isFlagSet(RedoLine2Modified));
+ nextLine->markAsSavedOnDisk(isFlagSet(RedoLine2Saved));
+}
+
+void KateModifiedRemoveLine::redo ()
+{
+ KateEditRemoveLineUndo::redo();
+
+ // no line modification needed, since the line is removed
+}
+
+void KateModifiedInsertLine::redo ()
+{
+ KateEditInsertLineUndo::redo();
+
+ KateDocument *doc = document();
+ Kate::TextLine tl = doc->plainKateTextLine(line());
+ Q_ASSERT(tl);
+
+ tl->markAsModified(isFlagSet(RedoLine1Modified));
+ tl->markAsSavedOnDisk(isFlagSet(RedoLine1Saved));
+}
+
+void KateModifiedInsertText::updateRedoSavedOnDiskFlag(QBitArray & lines)
+{
+ if (line() >= lines.size()) {
+ lines.resize(line() + 1);
+ }
+
+ if (!lines.testBit(line())) {
+ lines.setBit(line());
+
+ unsetFlag(RedoLine1Modified);
+ setFlag(RedoLine1Saved);
+ }
+}
+
+void KateModifiedInsertText::updateUndoSavedOnDiskFlag(QBitArray & lines)
+{
+ if (line() >= lines.size()) {
+ lines.resize(line() + 1);
+ }
+
+ if (!lines.testBit(line())) {
+ lines.setBit(line());
+
+ unsetFlag(UndoLine1Modified);
+ setFlag(UndoLine1Saved);
+ }
+}
+
+void KateModifiedRemoveText::updateRedoSavedOnDiskFlag(QBitArray & lines)
+{
+ if (line() >= lines.size()) {
+ lines.resize(line() + 1);
+ }
+
+ if (!lines.testBit(line())) {
+ lines.setBit(line());
+
+ unsetFlag(RedoLine1Modified);
+ setFlag(RedoLine1Saved);
+ }
+}
+
+void KateModifiedRemoveText::updateUndoSavedOnDiskFlag(QBitArray & lines)
+{
+ if (line() >= lines.size()) {
+ lines.resize(line() + 1);
+ }
+
+ if (!lines.testBit(line())) {
+ lines.setBit(line());
+
+ unsetFlag(UndoLine1Modified);
+ setFlag(UndoLine1Saved);
+ }
+}
+
+void KateModifiedWrapLine::updateRedoSavedOnDiskFlag(QBitArray & lines)
+{
+ if (line() + 1 >= lines.size()) {
+ lines.resize(line() + 2);
+ }
+
+ if (isFlagSet(RedoLine1Modified) && !lines.testBit(line())) {
+ lines.setBit(line());
+
+ unsetFlag(RedoLine1Modified);
+ setFlag(RedoLine1Saved);
+ }
+
+ if (isFlagSet(RedoLine2Modified) && !lines.testBit(line() + 1)) {
+ lines.setBit(line() + 1);
+
+ unsetFlag(RedoLine2Modified);
+ setFlag(RedoLine2Saved);
+ }
+}
+
+void KateModifiedWrapLine::updateUndoSavedOnDiskFlag(QBitArray & lines)
+{
+ if (line() >= lines.size()) {
+ lines.resize(line() + 1);
+ }
+
+ if (isFlagSet(UndoLine1Modified) && !lines.testBit(line())) {
+ lines.setBit(line());
+
+ unsetFlag(UndoLine1Modified);
+ setFlag(UndoLine1Saved);
+ }
+}
+
+void KateModifiedUnWrapLine::updateRedoSavedOnDiskFlag(QBitArray & lines)
+{
+ if (line() >= lines.size()) {
+ lines.resize(line() + 1);
+ }
+
+ if (isFlagSet(RedoLine1Modified) && !lines.testBit(line())) {
+ lines.setBit(line());
+
+ unsetFlag(RedoLine1Modified);
+ setFlag(RedoLine1Saved);
+ }
+}
+
+void KateModifiedUnWrapLine::updateUndoSavedOnDiskFlag(QBitArray & lines)
+{
+ if (line() + 1 >= lines.size()) {
+ lines.resize(line() + 2);
+ }
+
+ if (isFlagSet(UndoLine1Modified) && !lines.testBit(line())) {
+ lines.setBit(line());
+
+ unsetFlag(UndoLine1Modified);
+ setFlag(UndoLine1Saved);
+ }
+
+ if (isFlagSet(UndoLine2Modified) && !lines.testBit(line() + 1)) {
+ lines.setBit(line() + 1);
+
+ unsetFlag(UndoLine2Modified);
+ setFlag(UndoLine2Saved);
+ }
+}
+
+// kate: space-indent on; indent-width 2; replace-tabs on;
diff --git a/part/undo/katemodifiedundo.h b/part/undo/katemodifiedundo.h
new file mode 100644
index 0000000..0b80e40
--- /dev/null
+++ b/part/undo/katemodifiedundo.h
@@ -0,0 +1,134 @@
+/* This file is part of the KDE libraries
+ Copyright (C) 2011 Dominik Haumann <dhaumann@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License version 2 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#ifndef KATE_MODIFIED_UNDO_H
+#define KATE_MODIFIED_UNDO_H
+
+#include "kateundo.h"
+
+class KateModifiedInsertText : public KateEditInsertTextUndo
+{
+ public:
+ KateModifiedInsertText (KateDocument *document, int line, int col, const QString \
&text); +
+ /**
+ * @copydoc KateUndo::undo()
+ */
+ void undo();
+
+ /**
+ * @copydoc KateUndo::redo()
+ */
+ void redo();
+
+ void updateUndoSavedOnDiskFlag(QBitArray & lines);
+ void updateRedoSavedOnDiskFlag(QBitArray & lines);
+};
+
+class KateModifiedRemoveText : public KateEditRemoveTextUndo
+{
+ public:
+ KateModifiedRemoveText (KateDocument *document, int line, int col, const QString \
&text); +
+ /**
+ * @copydoc KateUndo::undo()
+ */
+ void undo();
+
+ /**
+ * @copydoc KateUndo::redo()
+ */
+ void redo();
+
+ void updateUndoSavedOnDiskFlag(QBitArray & lines);
+ void updateRedoSavedOnDiskFlag(QBitArray & lines);
+};
+
+class KateModifiedWrapLine : public KateEditWrapLineUndo
+{
+ public:
+ KateModifiedWrapLine (KateDocument *document, int line, int col, int len, bool \
newLine); +
+ /**
+ * @copydoc KateUndo::undo()
+ */
+ void undo();
+
+ /**
+ * @copydoc KateUndo::redo()
+ */
+ void redo();
+
+ void updateUndoSavedOnDiskFlag(QBitArray & lines);
+ void updateRedoSavedOnDiskFlag(QBitArray & lines);
+};
+
+class KateModifiedUnWrapLine : public KateEditUnWrapLineUndo
+{
+ public:
+ KateModifiedUnWrapLine (KateDocument *document, int line, int col, int len, bool \
removeLine); +
+ /**
+ * @copydoc KateUndo::undo()
+ */
+ void undo();
+
+ /**
+ * @copydoc KateUndo::redo()
+ */
+ void redo();
+
+ void updateUndoSavedOnDiskFlag(QBitArray & lines);
+ void updateRedoSavedOnDiskFlag(QBitArray & lines);
+};
+
+class KateModifiedInsertLine : public KateEditInsertLineUndo
+{
+ public:
+ KateModifiedInsertLine (KateDocument *document, int line, const QString &text);
+
+ /**
+ * @copydoc KateUndo::undo()
+ */
+ void undo();
+
+ /**
+ * @copydoc KateUndo::redo()
+ */
+ void redo();
+};
+
+class KateModifiedRemoveLine : public KateEditRemoveLineUndo
+{
+ public:
+ KateModifiedRemoveLine (KateDocument *document, int line, const QString &text);
+
+ /**
+ * @copydoc KateUndo::undo()
+ */
+ void undo();
+
+ /**
+ * @copydoc KateUndo::redo()
+ */
+ void redo();
+};
+
+#endif // KATE_MODIFIED_UNDO_H
+
+// kate: space-indent on; indent-width 2; replace-tabs on;
diff --git a/part/undo/kateundo.cpp b/part/undo/kateundo.cpp
index 22a5370..a7f57e8 100644
--- a/part/undo/kateundo.cpp
+++ b/part/undo/kateundo.cpp
@@ -1,4 +1,5 @@
/* This file is part of the KDE libraries
+ Copyright (C) 2011 Dominik Haumann <dhaumann@kde.org>
Copyright (C) 2009-2010 Bernhard Beschow <bbeschow@cs.tu-berlin.de>
Copyright (C) 2002 John Firebaugh <jfirebaugh@kde.org>
Copyright (C) 2001 Christoph Cullmann <cullmann@kde.org>
@@ -37,36 +38,12 @@ KateUndo::~KateUndo ()
{
}
-void KateUndo::setFlag(ModificationFlag flag)
-{
- m_lineModFlags |= flag;
-}
-
-void KateUndo::unsetFlag(ModificationFlag flag)
-{
- m_lineModFlags &= (~flag);
-}
-
-bool KateUndo::isFlagSet(ModificationFlag flag) const
-{
- return m_lineModFlags & flag;
-}
-
KateEditInsertTextUndo::KateEditInsertTextUndo (KateDocument *document, int line, \
int col, const QString &text) : KateUndo (document)
, m_line (line)
, m_col (col)
, m_text (text)
{
- setFlag(RedoLine1Modified);
- Kate::TextLine tl = document->plainKateTextLine(line);
- Q_ASSERT(tl);
- if (tl->markedAsModified()) {
- setFlag(UndoLine1Modified);
- }
- if (tl->markedAsSavedOnDisk()) {
- setFlag(UndoLine1Saved);
- }
}
KateEditRemoveTextUndo::KateEditRemoveTextUndo (KateDocument *document, int line, \
int col, const QString &text) @@ -75,15 +52,6 @@ \
KateEditRemoveTextUndo::KateEditRemoveTextUndo (KateDocument *document, int line , \
m_col (col) , m_text (text)
{
- setFlag(RedoLine1Modified);
- Kate::TextLine tl = document->plainKateTextLine(line);
- Q_ASSERT(tl);
- if (tl->markedAsModified()) {
- setFlag(UndoLine1Modified);
- }
- if (tl->markedAsSavedOnDisk()) {
- setFlag(UndoLine1Saved);
- }
}
KateEditWrapLineUndo::KateEditWrapLineUndo (KateDocument *document, int line, int \
col, int len, bool newLine) @@ -93,26 +61,6 @@ \
KateEditWrapLineUndo::KateEditWrapLineUndo (KateDocument *document, int line, in , \
m_len (len) , m_newLine (newLine)
{
- Kate::TextLine tl = document->plainKateTextLine(line);
- Q_ASSERT(tl);
- if (col < len || tl->markedAsModified()) {
- setFlag(RedoLine1Modified);
- } else if (tl->markedAsSavedOnDisk()) {
- setFlag(RedoLine1Saved);
- }
-
- if (col > 0 || len == 0 || tl->markedAsModified()) {
- setFlag(RedoLine2Modified);
- } else if (tl->markedAsSavedOnDisk()) {
- setFlag(RedoLine2Saved);
- }
-
- if (tl->markedAsModified()) {
- setFlag(UndoLine1Modified);
- }
- if (tl->markedAsSavedOnDisk()) {
- setFlag(UndoLine1Saved);
- }
}
KateEditUnWrapLineUndo::KateEditUnWrapLineUndo (KateDocument *document, int line, \
int col, int len, bool removeLine) @@ -122,25 +70,6 @@ \
KateEditUnWrapLineUndo::KateEditUnWrapLineUndo (KateDocument *document, int line , \
m_len (len) , m_removeLine (removeLine)
{
- setFlag(RedoLine1Modified);
-
- Kate::TextLine tl = document->plainKateTextLine(line);
- Q_ASSERT(tl);
- if (tl->markedAsModified()) {
- setFlag(UndoLine1Modified);
- }
- if (tl->markedAsSavedOnDisk()) {
- setFlag(UndoLine1Saved);
- }
-
- Kate::TextLine nextLine = document->plainKateTextLine(line + 1);
- Q_ASSERT(nextLine);
- if (nextLine->markedAsModified()) {
- setFlag(UndoLine2Modified);
- }
- if (nextLine->markedAsSavedOnDisk()) {
- setFlag(UndoLine2Saved);
- }
}
KateEditInsertLineUndo::KateEditInsertLineUndo (KateDocument *document, int line, \
const QString &text) @@ -148,7 +77,6 @@ \
KateEditInsertLineUndo::KateEditInsertLineUndo (KateDocument *document, int line , \
m_line (line) , m_text (text)
{
- setFlag(RedoLine1Modified);
}
KateEditRemoveLineUndo::KateEditRemoveLineUndo (KateDocument *document, int line, \
const QString &text) @@ -156,14 +84,6 @@ \
KateEditRemoveLineUndo::KateEditRemoveLineUndo (KateDocument *document, int line , \
m_line (line) , m_text (text)
{
- Kate::TextLine tl = document->plainKateTextLine(line);
- Q_ASSERT(tl);
- if (tl->markedAsModified()) {
- setFlag(UndoLine1Modified);
- }
- if (tl->markedAsSavedOnDisk()) {
- setFlag(UndoLine1Saved);
- }
}
@@ -222,11 +142,6 @@ void KateEditInsertTextUndo::undo ()
KateDocument *doc = document();
doc->editRemoveText (m_line, m_col, len());
-
- Kate::TextLine tl = doc->plainKateTextLine(m_line);
- Q_ASSERT(tl);
- tl->markAsModified(isFlagSet(UndoLine1Modified));
- tl->markAsSavedOnDisk(isFlagSet(UndoLine1Saved));
}
void KateEditRemoveTextUndo::undo ()
@@ -234,11 +149,6 @@ void KateEditRemoveTextUndo::undo ()
KateDocument *doc = document();
doc->editInsertText (m_line, m_col, m_text);
-
- Kate::TextLine tl = doc->plainKateTextLine(m_line);
- Q_ASSERT(tl);
- tl->markAsModified(isFlagSet(UndoLine1Modified));
- tl->markAsSavedOnDisk(isFlagSet(UndoLine1Saved));
}
void KateEditWrapLineUndo::undo ()
@@ -246,11 +156,6 @@ void KateEditWrapLineUndo::undo ()
KateDocument *doc = document();
doc->editUnWrapLine (m_line, m_newLine, m_len);
-
- Kate::TextLine tl = doc->plainKateTextLine(m_line);
- Q_ASSERT(tl);
- tl->markAsModified(isFlagSet(UndoLine1Modified));
- tl->markAsSavedOnDisk(isFlagSet(UndoLine1Saved));
}
void KateEditUnWrapLineUndo::undo ()
@@ -258,16 +163,6 @@ void KateEditUnWrapLineUndo::undo ()
KateDocument *doc = document();
doc->editWrapLine (m_line, m_col, m_removeLine);
-
- Kate::TextLine tl = doc->plainKateTextLine(m_line);
- Q_ASSERT(tl);
- tl->markAsModified(isFlagSet(UndoLine1Modified));
- tl->markAsSavedOnDisk(isFlagSet(UndoLine1Saved));
-
- Kate::TextLine nextLine = doc->plainKateTextLine(m_line + 1);
- Q_ASSERT(nextLine);
- nextLine->markAsModified(isFlagSet(UndoLine2Modified));
- nextLine->markAsSavedOnDisk(isFlagSet(UndoLine2Saved));
}
void KateEditInsertLineUndo::undo ()
@@ -275,8 +170,6 @@ void KateEditInsertLineUndo::undo ()
KateDocument *doc = document();
doc->editRemoveLine (m_line);
-
- // no line modification needed, since the line is removed
}
void KateEditRemoveLineUndo::undo ()
@@ -284,11 +177,6 @@ void KateEditRemoveLineUndo::undo ()
KateDocument *doc = document();
doc->editInsertLine (m_line, m_text);
-
- Kate::TextLine tl = doc->plainKateTextLine(m_line);
- Q_ASSERT(tl);
- tl->markAsModified(isFlagSet(UndoLine1Modified));
- tl->markAsSavedOnDisk(isFlagSet(UndoLine1Saved));
}
void KateEditMarkLineAutoWrappedUndo::undo ()
@@ -303,11 +191,6 @@ void KateEditRemoveTextUndo::redo ()
KateDocument *doc = document();
doc->editRemoveText (m_line, m_col, len());
-
- Kate::TextLine tl = doc->plainKateTextLine(m_line);
- Q_ASSERT(tl);
- tl->markAsModified(isFlagSet(RedoLine1Modified));
- tl->markAsSavedOnDisk(isFlagSet(RedoLine1Saved));
}
void KateEditInsertTextUndo::redo ()
@@ -315,11 +198,6 @@ void KateEditInsertTextUndo::redo ()
KateDocument *doc = document();
doc->editInsertText (m_line, m_col, m_text);
-
- Kate::TextLine tl = doc->plainKateTextLine(m_line);
- Q_ASSERT(tl);
- tl->markAsModified(isFlagSet(RedoLine1Modified));
- tl->markAsSavedOnDisk(isFlagSet(RedoLine1Saved));
}
void KateEditUnWrapLineUndo::redo ()
@@ -327,11 +205,6 @@ void KateEditUnWrapLineUndo::redo ()
KateDocument *doc = document();
doc->editUnWrapLine (m_line, m_removeLine, m_len);
-
- Kate::TextLine tl = doc->plainKateTextLine(m_line);
- Q_ASSERT(tl);
- tl->markAsModified(isFlagSet(RedoLine1Modified));
- tl->markAsSavedOnDisk(isFlagSet(RedoLine1Saved));
}
void KateEditWrapLineUndo::redo ()
@@ -339,16 +212,6 @@ void KateEditWrapLineUndo::redo ()
KateDocument *doc = document();
doc->editWrapLine (m_line, m_col, m_newLine);
-
- Kate::TextLine tl = doc->plainKateTextLine(m_line);
- Q_ASSERT(tl);
- tl->markAsModified(isFlagSet(RedoLine1Modified));
- tl->markAsSavedOnDisk(isFlagSet(RedoLine1Saved));
-
- Kate::TextLine nextLine = doc->plainKateTextLine(m_line + 1);
- Q_ASSERT(nextLine);
- nextLine->markAsModified(isFlagSet(RedoLine2Modified));
- nextLine->markAsSavedOnDisk(isFlagSet(RedoLine2Saved));
}
void KateEditRemoveLineUndo::redo ()
@@ -356,8 +219,6 @@ void KateEditRemoveLineUndo::redo ()
KateDocument *doc = document();
doc->editRemoveLine (m_line);
-
- // no line modification needed, since the line is removed
}
void KateEditInsertLineUndo::redo ()
@@ -365,11 +226,6 @@ void KateEditInsertLineUndo::redo ()
KateDocument *doc = document();
doc->editInsertLine (m_line, m_text);
-
- Kate::TextLine tl = doc->plainKateTextLine(m_line);
- Q_ASSERT(tl);
- tl->markAsModified(isFlagSet(RedoLine1Modified));
- tl->markAsSavedOnDisk(isFlagSet(RedoLine1Saved));
}
void KateEditMarkLineAutoWrappedUndo::redo ()
@@ -379,132 +235,6 @@ void KateEditMarkLineAutoWrappedUndo::redo ()
doc->editMarkLineAutoWrapped (m_line, m_autowrapped);
}
-void KateEditInsertTextUndo::updateRedoSavedOnDiskFlag(QBitArray & lines)
-{
- if (m_line >= lines.size()) {
- lines.resize(m_line + 1);
- }
-
- if (!lines.testBit(m_line)) {
- lines.setBit(m_line);
-
- unsetFlag(RedoLine1Modified);
- setFlag(RedoLine1Saved);
- }
-}
-
-void KateEditInsertTextUndo::updateUndoSavedOnDiskFlag(QBitArray & lines)
-{
- if (m_line >= lines.size()) {
- lines.resize(m_line + 1);
- }
-
- if (!lines.testBit(m_line)) {
- lines.setBit(m_line);
-
- unsetFlag(UndoLine1Modified);
- setFlag(UndoLine1Saved);
- }
-}
-
-void KateEditRemoveTextUndo::updateRedoSavedOnDiskFlag(QBitArray & lines)
-{
- if (m_line >= lines.size()) {
- lines.resize(m_line + 1);
- }
-
- if (!lines.testBit(m_line)) {
- lines.setBit(m_line);
-
- unsetFlag(RedoLine1Modified);
- setFlag(RedoLine1Saved);
- }
-}
-
-void KateEditRemoveTextUndo::updateUndoSavedOnDiskFlag(QBitArray & lines)
-{
- if (m_line >= lines.size()) {
- lines.resize(m_line + 1);
- }
-
- if (!lines.testBit(m_line)) {
- lines.setBit(m_line);
-
- unsetFlag(UndoLine1Modified);
- setFlag(UndoLine1Saved);
- }
-}
-
-void KateEditWrapLineUndo::updateRedoSavedOnDiskFlag(QBitArray & lines)
-{
- if (m_line + 1 >= lines.size()) {
- lines.resize(m_line + 2);
- }
-
- if (isFlagSet(RedoLine1Modified) && !lines.testBit(m_line)) {
- lines.setBit(m_line);
-
- unsetFlag(RedoLine1Modified);
- setFlag(RedoLine1Saved);
- }
-
- if (isFlagSet(RedoLine2Modified) && !lines.testBit(m_line + 1)) {
- lines.setBit(m_line + 1);
-
- unsetFlag(RedoLine2Modified);
- setFlag(RedoLine2Saved);
- }
-}
-
-void KateEditWrapLineUndo::updateUndoSavedOnDiskFlag(QBitArray & lines)
-{
- if (m_line >= lines.size()) {
- lines.resize(m_line + 1);
- }
-
- if (isFlagSet(UndoLine1Modified) && !lines.testBit(m_line)) {
- lines.setBit(m_line);
-
- unsetFlag(UndoLine1Modified);
- setFlag(UndoLine1Saved);
- }
-}
-
-void KateEditUnWrapLineUndo::updateRedoSavedOnDiskFlag(QBitArray & lines)
-{
- if (m_line >= lines.size()) {
- lines.resize(m_line + 1);
- }
-
- if (isFlagSet(RedoLine1Modified) && !lines.testBit(m_line)) {
- lines.setBit(m_line);
-
- unsetFlag(RedoLine1Modified);
- setFlag(RedoLine1Saved);
- }
-}
-
-void KateEditUnWrapLineUndo::updateUndoSavedOnDiskFlag(QBitArray & lines)
-{
- if (m_line + 1 >= lines.size()) {
- lines.resize(m_line + 2);
- }
-
- if (isFlagSet(UndoLine1Modified) && !lines.testBit(m_line)) {
- lines.setBit(m_line);
-
- unsetFlag(UndoLine1Modified);
- setFlag(UndoLine1Saved);
- }
-
- if (isFlagSet(UndoLine2Modified) && !lines.testBit(m_line + 1)) {
- lines.setBit(m_line + 1);
-
- unsetFlag(UndoLine2Modified);
- setFlag(UndoLine2Saved);
- }
-}
-
KateUndoGroup::KateUndoGroup (KateUndoManager *manager, const KTextEditor::Cursor \
&cursorPosition, const KTextEditor::Range &selectionRange) : m_manager (manager)
, m_safePoint(false)
diff --git a/part/undo/kateundo.h b/part/undo/kateundo.h
index 66db181..4fa2761 100644
--- a/part/undo/kateundo.h
+++ b/part/undo/kateundo.h
@@ -1,4 +1,5 @@
/* This file is part of the KDE libraries
+ Copyright (C) 2011 Dominik Haumann <dhaumann@kde.org>
Copyright (C) 2009-2010 Bernhard Beschow <bbeschow@cs.tu-berlin.de>
Copyright (C) 2002 John Firebaugh <jfirebaugh@kde.org>
Copyright (C) 2001 Christoph Cullmann <cullmann@kde.org>
@@ -127,9 +128,17 @@ class KateUndo
RedoLine2Saved = 128
};
- void setFlag(ModificationFlag flag);
- void unsetFlag(ModificationFlag flag);
- bool isFlagSet(ModificationFlag flag) const;
+ inline void setFlag(ModificationFlag flag) {
+ m_lineModFlags |= flag;
+ }
+
+ inline void unsetFlag(ModificationFlag flag) {
+ m_lineModFlags &= (~flag);
+ }
+
+ inline bool isFlagSet(ModificationFlag flag) const {
+ return m_lineModFlags & flag;
+ }
virtual void updateUndoSavedOnDiskFlag(QBitArray & lines) { Q_UNUSED(lines) }
virtual void updateRedoSavedOnDiskFlag(QBitArray & lines) { Q_UNUSED(lines) }
@@ -168,11 +177,9 @@ class KateEditInsertTextUndo : public KateUndo
*/
KateUndo::UndoType type() const { return KateUndo::editInsertText; }
- void updateUndoSavedOnDiskFlag(QBitArray & lines);
- void updateRedoSavedOnDiskFlag(QBitArray & lines);
-
- private:
- int len() const { return m_text.length(); }
+ protected:
+ inline int len() const { return m_text.length(); }
+ inline int line() const { return m_line; }
private:
const int m_line;
@@ -210,12 +217,9 @@ class KateEditRemoveTextUndo : public KateUndo
*/
KateUndo::UndoType type() const { return KateUndo::editRemoveText; }
- void updateUndoSavedOnDiskFlag(QBitArray & lines);
- void updateRedoSavedOnDiskFlag(QBitArray & lines);
-
-
- private:
- int len() const { return m_text.length(); }
+ protected:
+ inline int len() const { return m_text.length(); }
+ inline int line() const { return m_line; }
private:
const int m_line;
@@ -272,8 +276,8 @@ class KateEditWrapLineUndo : public KateUndo
*/
KateUndo::UndoType type() const { return KateUndo::editWrapLine; }
- void updateUndoSavedOnDiskFlag(QBitArray & lines);
- void updateRedoSavedOnDiskFlag(QBitArray & lines);
+ protected:
+ inline int line() const { return m_line; }
private:
const int m_line;
@@ -302,8 +306,8 @@ class KateEditUnWrapLineUndo : public KateUndo
*/
KateUndo::UndoType type() const { return KateUndo::editUnWrapLine; }
- void updateUndoSavedOnDiskFlag(QBitArray & lines);
- void updateRedoSavedOnDiskFlag(QBitArray & lines);
+ protected:
+ inline int line() const { return m_line; }
private:
const int m_line;
@@ -332,6 +336,9 @@ class KateEditInsertLineUndo : public KateUndo
*/
KateUndo::UndoType type() const { return KateUndo::editInsertLine; }
+ protected:
+ inline int line() const { return m_line; }
+
private:
const int m_line;
const QString m_text;
@@ -357,6 +364,9 @@ class KateEditRemoveLineUndo : public KateUndo
*/
KateUndo::UndoType type() const { return KateUndo::editRemoveLine; }
+ protected:
+ inline int line() const { return m_line; }
+
private:
const int m_line;
const QString m_text;
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic