X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fclient%2Fnetworkmodel.cpp;h=364c0e7901ff29259f6985b8f662cc629a5cb59c;hp=1a2da5e81a5fa2b0b7d9c0f743e6b7c8980db97b;hb=a2e0951abbe2d545836fb25fd6010aa085f17d82;hpb=9fc57dc2c000e80fb8bd746a090e2e8210e1278e diff --git a/src/client/networkmodel.cpp b/src/client/networkmodel.cpp index 1a2da5e8..364c0e79 100644 --- a/src/client/networkmodel.cpp +++ b/src/client/networkmodel.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005-2013 by the Quassel Project * + * Copyright (C) 2005-2015 by the Quassel Project * * devel@quassel-irc.org * * * * This program is free software; you can redistribute it and/or modify * @@ -22,7 +22,9 @@ #include #include +#if QT_VERSION < 0x050000 #include // for Qt::escape() +#endif #include "buffermodel.h" #include "buffersettings.h" @@ -153,7 +155,7 @@ void NetworkItem::attachNetwork(Network *network) connect(network, SIGNAL(connectedSet(bool)), this, SIGNAL(networkDataChanged())); connect(network, SIGNAL(destroyed()), - this, SIGNAL(networkDataChanged())); + this, SLOT(onNetworkDestroyed())); emit networkDataChanged(); } @@ -209,8 +211,13 @@ QString NetworkItem::toolTip(int column) const { Q_UNUSED(column); +#if QT_VERSION < 0x050000 QStringList toolTip(QString("%1").arg(Qt::escape(networkName()))); toolTip.append(tr("Server: %1").arg(Qt::escape(currentServer()))); +#else + QStringList toolTip(QString("%1").arg(networkName().toHtmlEscaped())); + toolTip.append(tr("Server: %1").arg(currentServer().toHtmlEscaped())); +#endif toolTip.append(tr("Users: %1").arg(nickCount())); if (_network) { @@ -233,6 +240,14 @@ void NetworkItem::onBeginRemoveChilds(int start, int end) } +void NetworkItem::onNetworkDestroyed() +{ + _network = 0; + emit networkDataChanged(); + removeAllChilds(); +} + + /***************************************** * Fancy Buffer Items *****************************************/ @@ -520,8 +535,10 @@ void QueryBufferItem::setIrcUser(IrcUser *ircUser) } if (ircUser) { + connect(ircUser, SIGNAL(destroyed(QObject*)), SLOT(removeIrcUser())); connect(ircUser, SIGNAL(quited()), this, SLOT(removeIrcUser())); connect(ircUser, SIGNAL(awaySet(bool)), this, SIGNAL(dataChanged())); + connect(ircUser, SIGNAL(encryptedSet(bool)), this, SLOT(setEncrypted(bool))); } _ircUser = ircUser; @@ -562,7 +579,11 @@ QString ChannelBufferItem::toolTip(int column) const Q_UNUSED(column); QStringList toolTip; +#if QT_VERSION < 0x050000 toolTip.append(tr("Channel %1").arg(Qt::escape(bufferName()))); +#else + toolTip.append(tr("Channel %1").arg(bufferName().toHtmlEscaped())); +#endif if (isActive()) { //TODO: add channel modes toolTip.append(tr("Users: %1").arg(nickCount())); @@ -578,7 +599,11 @@ QString ChannelBufferItem::toolTip(int column) const QString _topic = topic(); if (_topic != "") { _topic = stripFormatCodes(_topic); +#if QT_VERSION < 0x050000 _topic = Qt::escape(_topic); +#else + _topic = _topic.toHtmlEscaped(); +#endif toolTip.append(QString(" ")); toolTip.append(tr("Topic: %1").arg(_topic)); } @@ -594,12 +619,19 @@ QString ChannelBufferItem::toolTip(int column) const void ChannelBufferItem::attachIrcChannel(IrcChannel *ircChannel) { - Q_ASSERT(!_ircChannel && ircChannel); + if (_ircChannel) { + qWarning() << Q_FUNC_INFO << "IrcChannel already set; cleanup failed!?"; + disconnect(_ircChannel, 0, this, 0); + } _ircChannel = ircChannel; + connect(ircChannel, SIGNAL(destroyed(QObject*)), + this, SLOT(ircChannelDestroyed())); connect(ircChannel, SIGNAL(topicSet(QString)), this, SLOT(setTopic(QString))); + connect(ircChannel, SIGNAL(encryptedSet(bool)), + this, SLOT(setEncrypted(bool))); connect(ircChannel, SIGNAL(ircUsersJoined(QList )), this, SLOT(join(QList ))); connect(ircChannel, SIGNAL(ircUserParted(IrcUser *)), @@ -630,6 +662,16 @@ void ChannelBufferItem::ircChannelParted() } +void ChannelBufferItem::ircChannelDestroyed() +{ + if (_ircChannel) { + _ircChannel = 0; + emit dataChanged(); + removeAllChilds(); + } +} + + void ChannelBufferItem::join(const QList &ircUsers) { addUsersToCategory(ircUsers); @@ -905,33 +947,54 @@ QVariant IrcUserItem::data(int column, int role) const QString IrcUserItem::toolTip(int column) const { Q_UNUSED(column); - QStringList toolTip(QString("%1").arg(nickName())); - if (_ircUser->userModes() != "") toolTip[0].append(QString(" (%1)").arg(_ircUser->userModes())); - if (_ircUser->isAway()) { - toolTip[0].append(tr(" is away")); - if (!_ircUser->awayMessage().isEmpty()) - toolTip[0].append(QString(" (%1)").arg(_ircUser->awayMessage())); + QString strTooltip; + QTextStream tooltip( &strTooltip, QIODevice::WriteOnly ); + tooltip << ""; + + tooltip << "

" << nickName(); + if (_ircUser->userModes() != "") { + //TODO: Translate user Modes and add them to the table below + tooltip << " (" << _ircUser->userModes() << ")"; } - if (!_ircUser->realName().isEmpty()) toolTip.append(_ircUser->realName()); - if (!_ircUser->ircOperator().isEmpty()) toolTip.append(QString("%1 %2").arg(nickName()).arg(_ircUser->ircOperator())); - if (!_ircUser->suserHost().isEmpty()) toolTip.append(_ircUser->suserHost()); - if (!_ircUser->whoisServiceReply().isEmpty()) toolTip.append(_ircUser->whoisServiceReply()); + tooltip << "

"; - toolTip.append(_ircUser->hostmask().remove(0, _ircUser->hostmask().indexOf("!")+1)); + auto addRow = [&](const QString& key, const QString& value, bool condition = true) { + if (condition) + { + tooltip << "" << key << "" << value << ""; + } + }; + + tooltip << ""; + if (_ircUser->isAway()) { + QString awayMessage(tr("(unknown)")); + if(!_ircUser->awayMessage().isEmpty()) { + awayMessage = _ircUser->awayMessage(); + } + addRow(tr("Away Message"), awayMessage); + } + addRow(tr("Realname"), _ircUser->realName(), !_ircUser->realName().isEmpty()); + addRow(tr("Operator"), _ircUser->ircOperator(), !_ircUser->ircOperator().isEmpty()); + addRow(tr("Suser Host"), _ircUser->suserHost(),!_ircUser->suserHost().isEmpty()); + addRow(tr("Whois Service Reply"), _ircUser->whoisServiceReply(), !_ircUser->whoisServiceReply().isEmpty()); + addRow(tr("Hostmask"), _ircUser->hostmask().remove(0, _ircUser->hostmask().indexOf("!")+1)); + addRow(tr("Operator"), _ircUser->ircOperator(), !_ircUser->ircOperator().isEmpty()); if (_ircUser->idleTime().isValid()) { QDateTime now = QDateTime::currentDateTime(); QDateTime idle = _ircUser->idleTime(); int idleTime = idle.secsTo(now); - toolTip.append(tr("idling since %1").arg(secondsToString(idleTime))); + addRow(tr("Idling since"), secondsToString(idleTime)); } + if (_ircUser->loginTime().isValid()) { - toolTip.append(tr("login time: %1").arg(_ircUser->loginTime().toString())); + addRow(tr("Login time"), _ircUser->loginTime().toString()); } - if (!_ircUser->server().isEmpty()) toolTip.append(tr("server: %1").arg(_ircUser->server())); + addRow(tr("Server"), _ircUser->server(), !_ircUser->server().isEmpty()); - return QString("

%1

").arg(toolTip.join("
")); + tooltip << "
"; + return strTooltip; } @@ -1075,7 +1138,7 @@ QList > NetworkModel::mimeDataToBufferList(const QMim if (!mimeContainsBufferList(mimeData)) return bufferList; - QStringList rawBufferList = QString::fromAscii(mimeData->data("application/Quassel/BufferItemList")).split(","); + QStringList rawBufferList = QString::fromLatin1(mimeData->data("application/Quassel/BufferItemList")).split(","); NetworkId networkId; BufferId bufferUid; foreach(QString rawBuffer, rawBufferList) { @@ -1103,7 +1166,7 @@ QMimeData *NetworkModel::mimeData(const QModelIndexList &indexes) const bufferlist << bufferid; } - mimeData->setData("application/Quassel/BufferItemList", bufferlist.join(",").toAscii()); + mimeData->setData("application/Quassel/BufferItemList", bufferlist.join(",").toLatin1()); return mimeData; } @@ -1237,7 +1300,8 @@ void NetworkModel::updateBufferActivity(Message &msg) } } else { - updateBufferActivity(bufferItem(msg.bufferInfo()), msg); + if ((BufferSettings(msg.bufferId()).messageFilter() & msg.type()) != msg.type()) + updateBufferActivity(bufferItem(msg.bufferInfo()), msg); } }