#include <QMessageBox>
#include <QScrollBar>
+#include "actioncollection.h"
#include "bufferview.h"
#include "graphicalui.h"
#include "multilineedit.h"
const int leftMargin = 3;
MultiLineEdit::MultiLineEdit(QWidget *parent)
- :
-#ifdef HAVE_KDE
- KTextEdit(parent),
-#else
- QTextEdit(parent),
-#endif
+ : MultiLineEditParent(parent),
_idx(0),
_mode(SingleLine),
_singleLine(true),
return sizeHint();
}
+void MultiLineEdit::setEmacsMode(bool enable) {
+ _emacsMode = enable;
+}
+
void MultiLineEdit::setSpellCheckEnabled(bool enable) {
#ifdef HAVE_KDE
setCheckSpellingEnabled(enable);
return false;
}
+bool MultiLineEdit::event(QEvent *e) {
+ // We need to make sure that global shortcuts aren't eaten
+ if(e->type() == QEvent::ShortcutOverride) {
+ QKeyEvent* event = static_cast<QKeyEvent *>(e);
+ QKeySequence key = QKeySequence(event->key() | event->modifiers());
+ foreach(QAction *action, GraphicalUi::actionCollection()->actions()) {
+ if(action->shortcuts().contains(key)) {
+ e->ignore();
+ return false;
+ }
+ }
+ }
+
+ return MultiLineEditParent::event(e);
+}
+
void MultiLineEdit::keyPressEvent(QKeyEvent *event) {
// Workaround the fact that Qt < 4.5 doesn't know InsertLineSeparator yet
#if QT_VERSION >= 0x040500
on_returnPressed();
return;
}
-#ifdef HAVE_KDE
- KTextEdit::keyPressEvent(event);
-#else
- QTextEdit::keyPressEvent(event);
-#endif
+ MultiLineEditParent::keyPressEvent(event);
return;
}
;
}
+ if(_emacsMode) {
+ if(event->modifiers() & Qt::ControlModifier) {
+ switch(event->key()) {
+ // move
+ case Qt::Key_A:
+ moveCursor(QTextCursor::StartOfLine);
+ return;
+ case Qt::Key_E:
+ moveCursor(QTextCursor::EndOfLine);
+ return;
+ case Qt::Key_F:
+ moveCursor(QTextCursor::Right);
+ return;
+ case Qt::Key_B:
+ moveCursor(QTextCursor::Left);
+ return;
+
+ // modify
+ case Qt::Key_Y:
+ paste();
+ return;
+ case Qt::Key_K:
+ moveCursor(QTextCursor::EndOfLine, QTextCursor::KeepAnchor);
+ cut();
+ return;
+ }
+ }
+ else if(event->modifiers() & Qt::MetaModifier ||
+ event->modifiers() & Qt::AltModifier)
+ {
+ switch(event->key()) {
+ case Qt::Key_Right:
+ moveCursor(QTextCursor::WordRight);
+ return;
+ case Qt::Key_Left:
+ moveCursor(QTextCursor::WordLeft);
+ return;
+ case Qt::Key_F:
+ moveCursor(QTextCursor::WordRight);
+ return;
+ case Qt::Key_B:
+ moveCursor(QTextCursor::WordLeft);
+ return;
+ case Qt::Key_Less:
+ moveCursor(QTextCursor::Start);
+ return;
+ case Qt::Key_Greater:
+ moveCursor(QTextCursor::End);
+ return;
+ }
+ }
+ }
#ifdef HAVE_KDE
KTextEdit::keyPressEvent(event);