Commit b8b3274f authored by hjk's avatar hjk Committed by Roberto Raggi
Browse files

small refactoring, make ex command interface public

parent 15c89ea2
......@@ -34,8 +34,10 @@
#include "handler.h"
#include <QtCore/QDebug>
#include <QtCore/QFile>
#include <QtCore/QObject>
#include <QtCore/QRegExp>
#include <QtCore/QTextStream>
#include <QtCore/QStack>
#include <QtGui/QKeyEvent>
......@@ -133,6 +135,7 @@ public:
void moveToNextWord(bool simple);
void moveToWordBoundary(bool simple, bool forward);
void handleFfTt(int key);
void handleCommand(const QString &cmd);
FakeVimHandler *q;
Mode m_mode;
......@@ -184,6 +187,8 @@ FakeVimHandler::Private::Private(FakeVimHandler *parent)
m_lastSearchForward = true;
m_register = '"';
m_gflag = false;
m_textedit = 0;
m_plaintextedit = 0;
}
bool FakeVimHandler::Private::eventFilter(QObject *ob, QEvent *ev)
......@@ -555,17 +560,7 @@ void FakeVimHandler::Private::handleExMode(int key, const QString &text)
else
m_commandBuffer.chop(1);
} else if (key == Key_Return && m_commandCode == ':') {
static QRegExp reGoto("^(\\d+)$");
if (reGoto.indexIn(m_commandBuffer) != -1) {
int n = reGoto.cap(1).toInt();
m_tc.setPosition(m_tc.block().document()
->findBlockByNumber(n - 1).position());
} else if (m_commandBuffer == "q!" || m_commandBuffer == "q") {
if (m_textedit)
q->quitRequested(m_textedit);
else
q->quitRequested(m_plaintextedit);
}
handleCommand(m_commandBuffer);
m_commandBuffer.clear();
m_mode = CommandMode;
} else if (key == Key_Return && isSearchCommand()) {
......@@ -591,6 +586,30 @@ void FakeVimHandler::Private::handleExMode(int key, const QString &text)
updateCommandBuffer();
}
void FakeVimHandler::Private::handleCommand(const QString &cmd)
{
static QRegExp reGoto("^(\\d+)$");
if (reGoto.indexIn(cmd) != -1) {
int n = reGoto.cap(1).toInt();
m_tc.setPosition(m_tc.block().document()
->findBlockByNumber(n - 1).position());
} else if (cmd == "q!" || cmd == "q") {
if (m_textedit)
q->quitRequested(m_textedit);
else
q->quitRequested(m_plaintextedit);
} else if (cmd.startsWith("r ")) {
QString fileName = cmd.mid(2);
QFile file(fileName);
file.open(QIODevice::ReadOnly);
QTextStream ts(&file);
if (m_textedit)
m_textedit->setText(ts.readAll());
else if (m_plaintextedit)
m_plaintextedit->setPlainText(ts.readAll());
}
}
void FakeVimHandler::Private::search(const QString &needle, bool forward)
{
//qDebug() << "NEEDLE " << needle << "BACKWARDS" << backwards;
......@@ -792,3 +811,30 @@ bool FakeVimHandler::eventFilter(QObject *ob, QEvent *ev)
return d->eventFilter(ob, ev);
}
void FakeVimHandler::addWidget(QWidget *widget)
{
widget->installEventFilter(this);
QFont font = widget->font();
font.setFamily("Monospace");
widget->setFont(font);
if (QTextEdit *ed = qobject_cast<QTextEdit *>(widget)) {
ed->setCursorWidth(QFontMetrics(ed->font()).width(QChar('x')));
ed->setLineWrapMode(QTextEdit::NoWrap);
} else if (QPlainTextEdit *ed = qobject_cast<QPlainTextEdit *>(widget)) {
ed->setCursorWidth(QFontMetrics(ed->font()).width(QChar('x')));
ed->setLineWrapMode(QPlainTextEdit::NoWrap);
}
}
void FakeVimHandler::removeWidget(QWidget *widget)
{
widget->removeEventFilter(this);
}
void FakeVimHandler::handleCommand(QWidget *widget, const QString &cmd)
{
d->m_textedit = qobject_cast<QTextEdit *>(widget);
d->m_plaintextedit = qobject_cast<QPlainTextEdit *>(widget);
d->handleCommand(cmd);
}
......@@ -52,8 +52,16 @@ public:
FakeVimHandler(QObject *parent = 0);
~FakeVimHandler();
// The same handler can be installed on several widgets
void addWidget(QWidget *widget);
void removeWidget(QWidget *widget);
// This executes an "ex" style command taking context
// information from \p widget;
void handleCommand(QWidget *widget, const QString &cmd);
signals:
void commandBufferChanged(const QString &);
void commandBufferChanged(const QString &msg);
void quitRequested(QObject *);
private:
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment