modernize: Use nullptr
[quassel.git] / src / client / networkmodel.h
index 8a5819e..a52c1b9 100644 (file)
@@ -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; }
 
@@ -199,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<IrcUser *> &ircUsers);
     void part(IrcUser *ircUser);
@@ -211,6 +240,7 @@ public slots:
 
 private slots:
     void ircChannelParted();
+    void ircChannelDestroyed();
 
 private:
     IrcChannel *_ircChannel;
@@ -221,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; }
@@ -255,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; }
@@ -264,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); }
 
@@ -275,7 +317,7 @@ private:
 /*****************************************
  * NetworkModel
  *****************************************/
-class NetworkModel : public TreeModel
+class CLIENT_EXPORT NetworkModel : public TreeModel
 {
     Q_OBJECT
 
@@ -303,7 +345,7 @@ public:
     };
     Q_DECLARE_FLAGS(ItemTypes, ItemType)
 
-    NetworkModel(QObject *parent = 0);
+    NetworkModel(QObject *parent = nullptr);
     static QList<QVariant> defaultHeader();
 
     static bool mimeContainsBufferList(const QMimeData *mimeData);
@@ -353,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);
@@ -385,5 +429,3 @@ private:
 
 
 Q_DECLARE_OPERATORS_FOR_FLAGS(NetworkModel::ItemTypes)
-
-#endif // NETWORKMODEL_H