[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