X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fqtui%2Finputwidget.cpp;h=c2ef731e21e5fa092f63305ac56ed699cdfe6c4d;hp=e329b04de57a4a17b501e970e917e67e5753ad89;hb=c19a8e707391d74a80e9e7d4ef46f496284d9f49;hpb=8c38d6c5248c1b364bf56e25be0069f32c4f0408;ds=sidebyside diff --git a/src/qtui/inputwidget.cpp b/src/qtui/inputwidget.cpp index e329b04d..c2ef731e 100644 --- a/src/qtui/inputwidget.cpp +++ b/src/qtui/inputwidget.cpp @@ -22,6 +22,7 @@ #include "client.h" #include "networkmodel.h" +#include "jumpkeyhandler.h" InputWidget::InputWidget(QWidget *parent) : QWidget(parent), @@ -30,17 +31,24 @@ InputWidget::InputWidget(QWidget *parent) _selectionModel(0) { ui.setupUi(this); - connect(ui.inputEdit, SIGNAL(returnPressed()), this, SLOT(enterPressed())); + connect(ui.inputEdit, SIGNAL(sendText(QString)), this, SLOT(sendText(QString))); connect(ui.ownNick, SIGNAL(activated(QString)), this, SLOT(changeNick(QString))); connect(this, SIGNAL(userInput(BufferInfo, QString)), Client::instance(), SIGNAL(sendInput(BufferInfo, QString))); setFocusProxy(ui.inputEdit); + + ui.inputEdit->installEventFilter(new JumpKeyHandler(this)); } InputWidget::~InputWidget() { } void InputWidget::setModel(BufferModel *bufferModel) { + if(_bufferModel) { + disconnect(_bufferModel, 0, this, 0); + } _bufferModel = bufferModel; + connect(bufferModel, SIGNAL(dataChanged(QModelIndex, QModelIndex)), + this, SLOT(dataChanged(QModelIndex, QModelIndex))); } void InputWidget::setSelectionModel(QItemSelectionModel *selectionModel) { @@ -71,6 +79,15 @@ void InputWidget::currentChanged(const QModelIndex ¤t, const QModelIndex & ui.inputEdit->setEnabled(current.data(NetworkModel::ItemActiveRole).value()); } +void InputWidget::dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight) { + QItemSelectionRange changedArea(topLeft, bottomRight); + QModelIndex currentIndex = Client::bufferModel()->currentIndex(); + if(changedArea.contains(currentIndex)) { + ui.inputEdit->setEnabled(currentIndex.data(NetworkModel::ItemActiveRole).value()); + } +}; + + const Network *InputWidget::currentNetwork() const { if(!validBuffer) return 0; @@ -79,7 +96,7 @@ const Network *InputWidget::currentNetwork() const { } void InputWidget::setNetwork(const Network *network) { - if(_networkId == network->networkId()) + if(!network || _networkId == network->networkId()) return; const Network *previousNet = Client::network(_networkId); @@ -144,12 +161,6 @@ void InputWidget::changeNick(const QString &newNick) const { emit userInput(currentBufferInfo, QString("/nick %1").arg(newNick)); } -void InputWidget::enterPressed() { - QStringList lines = ui.inputEdit->text().split('\n', QString::SkipEmptyParts); - foreach(QString msg, lines) { - if(msg.isEmpty()) continue; - emit userInput(currentBufferInfo, msg); - } - ui.inputEdit->clear(); +void InputWidget::sendText(QString text) { + emit userInput(currentBufferInfo, text); } -