X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fclient%2Fnetworkmodel.h;h=a52c1b98f4bf4bc4747887c45ac7b02f82aad04e;hp=f0d4c02a8e2176d3e7ba03b11394eac44f3135fb;hb=39328183a6a87c6eb10a9dbbffcd5d65bf154a1f;hpb=76db8cdfbeffaaba359c8e80cf2146da9e9e7f8a diff --git a/src/client/networkmodel.h b/src/client/networkmodel.h index f0d4c02a..a52c1b98 100644 --- a/src/client/networkmodel.h +++ b/src/client/networkmodel.h @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005-2013 by the Quassel Project * + * Copyright (C) 2005-2018 by the Quassel Project * * devel@quassel-irc.org * * * * This program is free software; you can redistribute it and/or modify * @@ -18,8 +18,9 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * ***************************************************************************/ -#ifndef NETWORKMODEL_H -#define NETWORKMODEL_H +#pragma once + +#include "client-export.h" #include "bufferinfo.h" #include "clientsettings.h" @@ -41,10 +42,25 @@ class NetworkItem : public PropertyMapItem Q_PROPERTY(int nickCount READ nickCount) public : - NetworkItem(const NetworkId &netid, AbstractTreeItem *parent = 0); + NetworkItem(const NetworkId &netid, AbstractTreeItem *parent = nullptr); + + virtual QStringList propertyOrder() const; virtual QVariant data(int column, int row) const; + /** + * Escapes a string as HTML, ready for Qt markup. + * + * Implementation depends on Qt version - Qt4 uses Qt::escape, while Qt5 uses .toHtmlEscaped(). + * + * @param[in] string QString to escape + * @param[in] useNonbreakingSpaces + * @parblock + * If true, replace spaces with non-breaking spaces (i.e. ' '), otherwise only HTML escape. + * @endparblock + */ + static QString escapeHTML(const QString &string, bool useNonbreakingSpaces = false); + inline bool isActive() const { return (bool)_network ? _network->isConnected() : false; } inline const NetworkId &networkId() const { return _networkId; } @@ -72,6 +88,7 @@ signals: private slots: void onBeginRemoveChilds(int start, int end); + void onNetworkDestroyed(); private: NetworkId _networkId; @@ -92,7 +109,9 @@ class BufferItem : public PropertyMapItem Q_PROPERTY(int nickCount READ nickCount) public : - BufferItem(const BufferInfo &bufferInfo, AbstractTreeItem *parent = 0); + BufferItem(const BufferInfo &bufferInfo, AbstractTreeItem *parent = nullptr); + + virtual QStringList propertyOrder() const; inline const BufferInfo &bufferInfo() const { return _bufferInfo; } virtual QVariant data(int column, int role) const; @@ -117,6 +136,8 @@ public : void setActivityLevel(BufferInfo::ActivityLevel level); void clearActivityLevel(); void updateActivityLevel(const Message &msg); + void setActivity(Message::Types msg, bool highlight); + bool addActivity(Message::Types msg, bool highlight); inline const MsgId &firstUnreadMsgId() const { return _firstUnreadMsgId; } @@ -125,6 +146,7 @@ public : public slots: virtual inline void setTopic(const QString &) { emit dataChanged(1); } + virtual inline void setEncrypted(bool) { emit dataChanged(); } private: BufferInfo _bufferInfo; @@ -198,6 +220,14 @@ public: void attachIrcChannel(IrcChannel *ircChannel); + /** + * Gets the list of channel modes for a given nick. + * + * @param[in] nick IrcUser nickname to check + * @returns Channel modes as a string if any, otherwise empty string + */ + QString nickChannelModes(const QString &nick) const; + public slots: void join(const QList &ircUsers); void part(IrcUser *ircUser); @@ -210,6 +240,7 @@ public slots: private slots: void ircChannelParted(); + void ircChannelDestroyed(); private: IrcChannel *_ircChannel; @@ -220,13 +251,16 @@ private: * User Category Items (like @vh etc.) *****************************************/ class IrcUserItem; -class UserCategoryItem : public PropertyMapItem + +class CLIENT_EXPORT UserCategoryItem : public PropertyMapItem { Q_OBJECT Q_PROPERTY(QString categoryName READ categoryName) public : - UserCategoryItem(int category, AbstractTreeItem *parent); + UserCategoryItem(int category, AbstractTreeItem *parent); + + virtual QStringList propertyOrder() const; QString categoryName() const; inline int categoryId() const { return _category; } @@ -254,7 +288,9 @@ class IrcUserItem : public PropertyMapItem Q_PROPERTY(QString nickName READ nickName) public : - IrcUserItem(IrcUser *ircUser, AbstractTreeItem *parent); + IrcUserItem(IrcUser *ircUser, AbstractTreeItem *parent); + + virtual QStringList propertyOrder() const; inline QString nickName() const { return _ircUser ? _ircUser->nick() : QString(); } inline bool isActive() const { return _ircUser ? !_ircUser->isAway() : false; } @@ -263,6 +299,13 @@ public : virtual QVariant data(int column, int role) const; virtual QString toolTip(int column) const; + /** + * Gets the list of channel modes for this nick if parented to channel. + * + * @returns Channel modes as a string if any, otherwise empty string + */ + QString channelModes() const; + private slots: inline void ircUserQuited() { parent()->removeChild(this); } @@ -274,7 +317,7 @@ private: /***************************************** * NetworkModel *****************************************/ -class NetworkModel : public TreeModel +class CLIENT_EXPORT NetworkModel : public TreeModel { Q_OBJECT @@ -302,7 +345,7 @@ public: }; Q_DECLARE_FLAGS(ItemTypes, ItemType) - NetworkModel(QObject *parent = 0); + NetworkModel(QObject *parent = nullptr); static QList defaultHeader(); static bool mimeContainsBufferList(const QMimeData *mimeData); @@ -352,6 +395,8 @@ public slots: void clearBufferActivity(const BufferId &bufferId); void updateBufferActivity(Message &msg); void networkRemoved(const NetworkId &networkId); + void bufferActivityChanged(BufferId, Message::Types); + void highlightCountChanged(BufferId, int); signals: void requestSetLastSeenMsg(BufferId buffer, MsgId msg); @@ -384,5 +429,3 @@ private: Q_DECLARE_OPERATORS_FOR_FLAGS(NetworkModel::ItemTypes) - -#endif // NETWORKMODEL_H