From 311ca7a074733ad0f14c79bd903a79b3c81c161f Mon Sep 17 00:00:00 2001 From: hjk <qtc-committer@nokia.com> Date: Tue, 2 Jun 2009 16:43:09 +0200 Subject: [PATCH] fakevim: more undo work --- src/plugins/fakevim/fakevimhandler.cpp | 52 +++++++++----------------- tests/auto/fakevim/main.cpp | 9 ++--- 2 files changed, 22 insertions(+), 39 deletions(-) diff --git a/src/plugins/fakevim/fakevimhandler.cpp b/src/plugins/fakevim/fakevimhandler.cpp index c233a74ee23..7f28665f491 100644 --- a/src/plugins/fakevim/fakevimhandler.cpp +++ b/src/plugins/fakevim/fakevimhandler.cpp @@ -86,7 +86,7 @@ //#define DEBUG_UNDO 1 #if DEBUG_UNDO -# define UNDO_DEBUG(s) qDebug() << s +# define UNDO_DEBUG(s) qDebug() << << m_tc.document()->revision() << s #else # define UNDO_DEBUG(s) #endif @@ -172,26 +172,6 @@ enum MoveType MoveLineWise, }; -struct EditOperation -{ - EditOperation() : position(-1), itemCount(0) {} - int position; - int itemCount; // used to combine several operations - QString from; - QString to; -}; - -QDebug &operator<<(QDebug &ts, const EditOperation &op) -{ - if (op.itemCount > 0) { - ts << "\n EDIT BLOCK WITH " << op.itemCount << " ITEMS"; - } else { - ts << "\n EDIT AT " << op.position - << " FROM " << op.from << " TO " << op.to; - } - return ts; -} - QDebug &operator<<(QDebug &ts, const QList<QTextEdit::ExtraSelection> &sels) { foreach (QTextEdit::ExtraSelection sel, sels) @@ -307,6 +287,9 @@ public: QWidget *editor() const; QChar characterAtCursor() const { return m_tc.document()->characterAt(m_tc.position()); } + void beginEditBlock() { UNDO_DEBUG("BEGIN EDIT BLOCK"); m_tc.beginEditBlock(); } + void endEditBlock() { UNDO_DEBUG("END EDIT BLOCK"); m_tc.endEditBlock(); } + void joinPreviousEditBlock() { UNDO_DEBUG("JOIN EDIT BLOCK"); m_tc.joinPreviousEditBlock(); } public: QTextEdit *m_textedit; @@ -515,12 +498,12 @@ EventResult FakeVimHandler::Private::handleEvent(QKeyEvent *ev) } m_undoCursorPosition[m_tc.document()->revision()] = m_tc.position(); - if (m_mode == InsertMode) - m_tc.joinPreviousEditBlock(); - else - m_tc.beginEditBlock(); + //if (m_mode == InsertMode) + // joinPreviousEditBlock(); + //else + // beginEditBlock(); EventResult result = handleKey(key, um, ev->text()); - m_tc.endEditBlock(); + //endEditBlock(); // We fake vi-style end-of-line behaviour m_fakeEnd = (atEndOfLine() && m_mode == CommandMode); @@ -1908,7 +1891,7 @@ void FakeVimHandler::Private::handleExCommand(const QString &cmd0) if (flags.contains('i')) pattern.setCaseSensitivity(Qt::CaseInsensitive); const bool global = flags.contains('g'); - m_tc.beginEditBlock(); + beginEditBlock(); for (int line = beginLine; line <= endLine; ++line) { const int start = firstPositionInLine(line); const int end = lastPositionInLine(line); @@ -1934,7 +1917,7 @@ void FakeVimHandler::Private::handleExCommand(const QString &cmd0) break; } } - m_tc.endEditBlock(); + endEditBlock(); enterCommandMode(); } else if (reSet.indexIn(cmd) != -1) { // :set showBlackMessage(QString()); @@ -2407,9 +2390,9 @@ QWidget *FakeVimHandler::Private::editor() const void FakeVimHandler::Private::undo() { int current = m_tc.document()->revision(); - m_tc.endEditBlock(); + //endEditBlock(); EDITOR(undo()); - m_tc.beginEditBlock(); + //beginEditBlock(); int rev = m_tc.document()->revision(); if (current == rev) showBlackMessage(tr("Already at oldest change")); @@ -2422,9 +2405,9 @@ void FakeVimHandler::Private::undo() void FakeVimHandler::Private::redo() { int current = m_tc.document()->revision(); - m_tc.endEditBlock(); + //endEditBlock(); EDITOR(redo()); - m_tc.beginEditBlock(); + //beginEditBlock(); int rev = m_tc.document()->revision(); if (rev == current) showBlackMessage(tr("Already at newest change")); @@ -2479,8 +2462,9 @@ void FakeVimHandler::Private::recordJump() void FakeVimHandler::Private::recordNewUndo() { - m_tc.endEditBlock(); - m_tc.beginEditBlock(); + //endEditBlock(); + UNDO_DEBUG("---- BREAK ----"); + //beginEditBlock(); } void FakeVimHandler::Private::insertAutomaticIndentation(bool goingDown) diff --git a/tests/auto/fakevim/main.cpp b/tests/auto/fakevim/main.cpp index ad8c1f60381..ddc91e3a6a0 100644 --- a/tests/auto/fakevim/main.cpp +++ b/tests/auto/fakevim/main.cpp @@ -326,7 +326,6 @@ void tst_FakeVim::command_i() check("ixxx" + escape, "xx@x" + lines); check("u", "@" + lines); - // combine insertions check("i1" + escape, "@1" + lines); check("i2" + escape, "@21" + lines); @@ -338,10 +337,10 @@ void tst_FakeVim::command_i() check("ibx" + escape, "b@xa" + lines); check("icyy" + escape, "bcy@yxa" + lines); check("u", "b@xa" + lines); - check("u", "@a" + lines); // undo broken -return; // FIXME - checkEx("redo", "b@xa" + lines); - check("u", "@a" + lines); + check("u", "@a" + lines); +// FIXME undo broken +// checkEx("redo", "b@xa" + lines); +// check("u", "@a" + lines); check("u", "@" + lines); } -- GitLab