X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fuisupport%2Finputline.cpp;h=c297694ce8acc42743e4082cec1cd0d259f34c92;hp=f6d7171580ea9ca6435003a1c6d896fe8cfd6414;hb=c030e0d5e910fe8af376e5462c9e58d45fd59e40;hpb=8699dd758516d0ded076811e8ea656adc95e69d0 diff --git a/src/uisupport/inputline.cpp b/src/uisupport/inputline.cpp index f6d71715..c297694c 100644 --- a/src/uisupport/inputline.cpp +++ b/src/uisupport/inputline.cpp @@ -22,54 +22,84 @@ #include "tabcompleter.h" -InputLine::InputLine(QWidget *parent) : QLineEdit(parent) { - idx = 0; - connect(this, SIGNAL(returnPressed()), this, SLOT(enter())); - tabComplete = new TabCompleter(this); - connect(this, SIGNAL(nickListUpdated(QStringList)), tabComplete, SLOT(updateNickList(QStringList))); +InputLine::InputLine(QWidget *parent) + : QLineEdit(parent), + idx(0), + tabCompleter(new TabCompleter(this)) +{ + +#ifdef Q_WS_MAC + bindModifier = Qt::ControlModifier | Qt::AltModifier; + jumpModifier = Qt::ControlModifier; +#else + bindModifier = Qt::ControlModifier; + jumpModifier = Qt::AltModifier; +#endif + + connect(this, SIGNAL(returnPressed()), this, SLOT(on_returnPressed())); + connect(this, SIGNAL(textChanged(QString)), this, SLOT(on_textChanged(QString))); + } InputLine::~InputLine() { - delete tabComplete; } void InputLine::keyPressEvent(QKeyEvent * event) { - if(event->key() == Qt::Key_Tab) { // Tabcomplete - tabComplete->complete(); + if((event->modifiers() == jumpModifier || event->modifiers() == bindModifier) && + (Qt::Key_0 <= event->key() && event->key() <= Qt::Key_9)) { + event->ignore(); + return; + } + + if(event->key() == Qt::Key_Up) { + if(idx > 0) { idx--; setText(history[idx]); } event->accept(); + } else if(event->key() == Qt::Key_Down) { + if(idx < history.count()) idx++; + if(idx < history.count()) setText(history[idx]); + else setText(""); + event->accept(); + } else if(event->key() == Qt::Key_Select) { // for Qtopia + emit returnPressed(); + QLineEdit::keyPressEvent(event); } else { - tabComplete->disable(); - if(event->key() == Qt::Key_Up) { - if(idx > 0) { idx--; setText(history[idx]); } - event->accept(); - } else if(event->key() == Qt::Key_Down) { - if(idx < history.count()) idx++; - if(idx < history.count()) setText(history[idx]); - else setText(""); - event->accept(); - } else if(event->key() == Qt::Key_Select) { // for Qtopia - emit returnPressed(); - QLineEdit::keyPressEvent(event); - } else { - QLineEdit::keyPressEvent(event); - } + QLineEdit::keyPressEvent(event); } -} -bool InputLine::event(QEvent *e) { - if(e->type() == QEvent::KeyPress) { - keyPressEvent(static_cast(e)); - return true; - } - return QLineEdit::event(e); } -void InputLine::enter() { +void InputLine::on_returnPressed() { history << text(); idx = history.count(); + emit sendText(text()); + clear(); } -void InputLine::updateNickList(QStringList l) { - nickList = l; - emit nickListUpdated(l); +void InputLine::on_textChanged(QString newText) { + QStringList lineSeperators; + lineSeperators << QString("\r\n") + << QString('\n') + << QString('\r'); + + QString lineSep; + foreach(QString seperator, lineSeperators) { + if(newText.contains(seperator)) { + lineSep = seperator; + break; + } + } + + if(lineSep.isEmpty()) + return; + + if(newText.contains(lineSep)) { + clear(); + QString line = newText.section(lineSep, 0, 0); + QString remainder = newText.section(lineSep, 1); + insert(line); + emit returnPressed(); + insert(remainder); + } + } +