X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fqtui%2Fbufferwidget.cpp;h=8831a28ea3685b51570d180cb8721326b1cef3a2;hp=14a846fd188beea875631b8bdfda6cd1c2ceacc4;hb=a2d4978097260c8af1f51ade497071793db2a0c0;hpb=2a04cb443a50e37165fc2d5447cc705a813efd3e diff --git a/src/qtui/bufferwidget.cpp b/src/qtui/bufferwidget.cpp index 14a846fd..8831a28e 100644 --- a/src/qtui/bufferwidget.cpp +++ b/src/qtui/bufferwidget.cpp @@ -31,12 +31,10 @@ BufferWidget::BufferWidget(QWidget *parent) : QWidget(parent), _bufferModel(0), - _selectionModel(0) + _selectionModel(0), + _currentBuffer(0) { ui.setupUi(this); - ui.ownNick->clear(); // TODO add nick history - connect(ui.inputEdit, SIGNAL(returnPressed()), this, SLOT(enterPressed())); - connect(ui.ownNick, SIGNAL(activated(QString)), this, SLOT(changeNick(QString))); } BufferWidget::~BufferWidget() { @@ -98,6 +96,7 @@ void BufferWidget::removeBuffer(BufferId bufferId) { if(!_chatWidgets.contains(bufferId)) return; + if(Client::buffer(bufferId)) Client::buffer(bufferId)->setVisible(false); ChatWidget *chatWidget = _chatWidgets.take(bufferId); ui.stackedWidget->removeWidget(chatWidget); chatWidget->deleteLater(); @@ -110,21 +109,21 @@ void BufferWidget::currentChanged(const QModelIndex ¤t, const QModelIndex variant = current.data(NetworkModel::BufferIdRole); if(!variant.isValid()) return; - - setCurrentBuffer(qVariantValue(variant)); - updateNickSelector(); + setCurrentBuffer(variant.value()); } void BufferWidget::setCurrentBuffer(BufferId bufferId) { - ChatWidget *chatWidget; + ChatWidget *chatWidget = 0; + Buffer *buf = Client::buffer(bufferId); + if(!buf) { + qWarning() << "BufferWidget::setBuffer(BufferId): Can't show unknown Buffer:" << bufferId; + return; + } + Buffer *prevBuffer = Client::buffer(currentBuffer()); + if(prevBuffer) prevBuffer->setVisible(false); if(_chatWidgets.contains(bufferId)) { chatWidget = _chatWidgets[bufferId]; } else { - Buffer *buf = Client::buffer(bufferId); - if(!buf) { - qWarning() << "BufferWidget::setBuffer(BufferId): Can't show unknown Buffer:" << bufferId; - return; - } chatWidget = new ChatWidget(this); chatWidget->init(bufferId); QList lines; @@ -137,62 +136,11 @@ void BufferWidget::setCurrentBuffer(BufferId bufferId) { connect(buf, SIGNAL(msgPrepended(AbstractUiMsg *)), chatWidget, SLOT(prependMsg(AbstractUiMsg *))); _chatWidgets[bufferId] = chatWidget; ui.stackedWidget->addWidget(chatWidget); + chatWidget->setFocusProxy(this); } + _currentBuffer = bufferId; ui.stackedWidget->setCurrentWidget(chatWidget); - disconnect(this, SIGNAL(userInput(QString)), 0, 0); - connect(this, SIGNAL(userInput(QString)), Client::buffer(bufferId), SLOT(processUserInput(QString))); - chatWidget->setFocusProxy(ui.inputEdit); - ui.inputEdit->setFocus(); - -} - -Network *BufferWidget::currentNetwork() const { - if(!selectionModel()) - return 0; - - QVariant variant = selectionModel()->currentIndex().data(NetworkModel::NetworkIdRole); - if(!variant.isValid()) - return 0; - - return Client::network(qVariantValue(variant)); -} - -void BufferWidget::updateNickSelector() const { - Network *net = currentNetwork(); - if(!net) - return; - - const Identity *identity = Client::identity(net->identity()); - if(!identity) { - qWarning() << "BufferWidget::setCurrentNetwork(): can't find Identity for Network" << net->networkId(); - return; - } - - int nickIdx; - QStringList nicks = identity->nicks(); - if((nickIdx = nicks.indexOf(net->myNick())) == -1) { - nicks.prepend(net->myNick()); - nickIdx = 0; - } - - ui.ownNick->clear(); - ui.ownNick->addItems(nicks); - ui.ownNick->setCurrentIndex(nickIdx); -} - -void BufferWidget::changeNick(const QString &newNick) const { - Network *net = currentNetwork(); - if(!net || net->isMyNick(newNick)) - return; - emit userInput(QString("/nick %1").arg(newNick)); -} - -void BufferWidget::enterPressed() { - QStringList lines = ui.inputEdit->text().split('\n', QString::SkipEmptyParts); - foreach(QString msg, lines) { - if(msg.isEmpty()) continue; - emit userInput(msg); - } - ui.inputEdit->clear(); + buf->setVisible(true); + setFocus(); }