qtui: Set proper icon for "About Quassel" menu option
[quassel.git] / src / common / message.h
1 /***************************************************************************
2  *   Copyright (C) 2005-2018 by the Quassel Project                        *
3  *   devel@quassel-irc.org                                                 *
4  *                                                                         *
5  *   This program is free software; you can redistribute it and/or modify  *
6  *   it under the terms of the GNU General Public License as published by  *
7  *   the Free Software Foundation; either version 2 of the License, or     *
8  *   (at your option) version 3.                                           *
9  *                                                                         *
10  *   This program is distributed in the hope that it will be useful,       *
11  *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
12  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
13  *   GNU General Public License for more details.                          *
14  *                                                                         *
15  *   You should have received a copy of the GNU General Public License     *
16  *   along with this program; if not, write to the                         *
17  *   Free Software Foundation, Inc.,                                       *
18  *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.         *
19  ***************************************************************************/
20
21 #ifndef MESSAGE_H_
22 #define MESSAGE_H_
23
24 #include <QCoreApplication>
25 #include <QDateTime>
26
27 #include "bufferinfo.h"
28 #include "types.h"
29
30 class Message
31 {
32     Q_DECLARE_TR_FUNCTIONS(Message)
33
34 public:
35     /** The different types a message can have for display */
36     enum Type {
37         Plain     = 0x00001,
38         Notice    = 0x00002,
39         Action    = 0x00004,
40         Nick      = 0x00008,
41         Mode      = 0x00010,
42         Join      = 0x00020,
43         Part      = 0x00040,
44         Quit      = 0x00080,
45         Kick      = 0x00100,
46         Kill      = 0x00200,
47         Server    = 0x00400,
48         Info      = 0x00800,
49         Error     = 0x01000,
50         DayChange = 0x02000,
51         Topic     = 0x04000,
52         NetsplitJoin = 0x08000,
53         NetsplitQuit = 0x10000,
54         Invite = 0x20000,
55     };
56     Q_DECLARE_FLAGS(Types, Type)
57
58     // DO NOT CHANGE without knowing what you do, some of these flags are stored in the database
59     enum Flag {
60         None = 0x00,
61         Self = 0x01,
62         Highlight = 0x02,
63         Redirected = 0x04,
64         ServerMsg = 0x08,
65         StatusMsg = 0x10,
66         Backlog = 0x80
67     };
68     Q_DECLARE_FLAGS(Flags, Flag)
69
70     Message(const BufferInfo &bufferInfo = BufferInfo(), Type type = Plain, const QString &contents = {},
71             const QString &sender = {}, const QString &senderPrefixes = {}, const QString &realName = {},
72             const QString &avatarUrl = {}, Flags flags = None);
73     Message(const QDateTime &ts, const BufferInfo &buffer = BufferInfo(), Type type = Plain,
74             const QString &contents = {}, const QString &sender = {}, const QString &senderPrefixes = {},
75             const QString &realName = {}, const QString &avatarUrl = {}, Flags flags = None);
76
77     inline static Message ChangeOfDay(const QDateTime &day) { return Message(day, BufferInfo(), DayChange); }
78     inline const MsgId &msgId() const { return _msgId; }
79     inline void setMsgId(MsgId id) { _msgId = id; }
80
81     inline const BufferInfo &bufferInfo() const { return _bufferInfo; }
82     inline const BufferId &bufferId() const { return _bufferInfo.bufferId(); }
83     inline void setBufferId(BufferId id) { _bufferInfo.setBufferId(id); }
84     inline const QString &contents() const { return _contents; }
85     inline const QString &sender() const { return _sender; }
86     inline const QString &senderPrefixes() const { return _senderPrefixes; }
87     inline const QString &realName() const { return _realName; }
88     inline const QString &avatarUrl() const { return _avatarUrl; }
89     inline Type type() const { return _type; }
90     inline Flags flags() const { return _flags; }
91     inline void setFlags(Flags flags) { _flags = flags; }
92     inline const QDateTime &timestamp() const { return _timestamp; }
93
94     inline bool isValid() const { return _msgId.isValid(); }
95
96     inline bool operator<(const Message &other) const { return _msgId < other._msgId; }
97
98 private:
99     QDateTime _timestamp;
100     MsgId _msgId;
101     BufferInfo _bufferInfo;
102     QString _contents;
103     QString _sender;
104     QString _senderPrefixes;
105     QString _realName;
106     QString _avatarUrl;
107     Type _type;
108     Flags _flags;
109
110     friend QDataStream &operator>>(QDataStream &in, Message &msg);
111 };
112
113
114 typedef QList<Message> MessageList;
115
116 QDataStream &operator<<(QDataStream &out, const Message &msg);
117 QDataStream &operator>>(QDataStream &in, Message &msg);
118 QDebug operator<<(QDebug dbg, const Message &msg);
119
120 Q_DECLARE_METATYPE(Message)
121 Q_DECLARE_OPERATORS_FOR_FLAGS(Message::Types)
122 Q_DECLARE_OPERATORS_FOR_FLAGS(Message::Flags)
123
124 #endif