// filter for the input widget to switch back to normal mode bool TopicWidget::eventFilter(QObject *obj, QEvent *event) { if (event->type() == QEvent::FocusOut && !_mouseEntered) { switchPlain(); return true; } if (event->type() == QEvent::Enter) { _mouseEntered = true; } if (event->type() == QEvent::Leave) { _mouseEntered = false; } if (event->type() != QEvent::KeyRelease) return QObject::eventFilter(obj, event); QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event); if (keyEvent->key() == Qt::Key_Escape) { switchPlain(); return true; } return false; }
void TopicWidget::setTopic(const QModelIndex &index) { QString newtopic; bool readonly = true; BufferId id = index.data(NetworkModel::BufferIdRole).value<BufferId>(); if(id.isValid()) { QModelIndex index0 = index.sibling(index.row(), 0); const Network *network = Client::network(Client::networkModel()->networkId(id)); switch(Client::networkModel()->bufferType(id)) { case BufferInfo::StatusBuffer: if(network) { newtopic = QString("%1 (%2) | %3 | %4") .arg(Qt::escape(network->networkName())) .arg(Qt::escape(network->currentServer())) .arg(tr("Users: %1").arg(network->ircUsers().count())) .arg(tr("Lag: %1 msecs").arg(network->latency())); } else { newtopic = index0.data(Qt::DisplayRole).toString(); } break; case BufferInfo::ChannelBuffer: newtopic = index.sibling(index.row(), 1).data().toString(); readonly = false; break; case BufferInfo::QueryBuffer: { QString nickname = index0.data(Qt::DisplayRole).toString(); if(network) { const IrcUser *user = network->ircUser(nickname); if(user) { newtopic = QString("%1%2%3 | %4@%5").arg(nickname) .arg(user->userModes().isEmpty() ? QString() : QString(" (+%1)").arg(user->userModes())) .arg(user->realName().isEmpty() ? QString() : QString(" | %1").arg(user->realName())) .arg(user->user()) .arg(user->host()); } else { // no such user newtopic = nickname; } } else { // no valid Network-Obj. newtopic = nickname; } break; } default: newtopic = index0.data(Qt::DisplayRole).toString(); } } _topic = newtopic; _readonly = readonly; ui.topicEditButton->setVisible(!_readonly); ui.topicLabel->setText(newtopic); ui.topicLineEdit->setPlainText(newtopic); switchPlain(); }
void TopicWidget::on_topicLineEdit_textEntered() { QModelIndex currentIdx = currentIndex(); if(currentIdx.isValid() && currentIdx.data(NetworkModel::BufferTypeRole) == BufferInfo::ChannelBuffer) { BufferInfo bufferInfo = currentIdx.data(NetworkModel::BufferInfoRole).value<BufferInfo>(); if(ui.topicLineEdit->text().isEmpty()) Client::userInput(bufferInfo, QString("/quote TOPIC %1 :").arg(bufferInfo.bufferName())); else Client::userInput(bufferInfo, QString("/topic %1").arg(ui.topicLineEdit->text())); } switchPlain(); }