fixes #413 - Icons in Nicklist
[quassel.git] / src / common / message.h
1 /***************************************************************************
2  *   Copyright (C) 2005-09 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  *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
19  ***************************************************************************/
20
21 #ifndef MESSAGE_H_
22 #define MESSAGE_H_
23
24 #include <QString>
25 #include <QDateTime>
26
27 #include "bufferinfo.h"
28 #include "types.h"
29
30 class Message {
31   Q_DECLARE_TR_FUNCTIONS(Message)
32
33 public:
34   /** The different types a message can have for display */
35   enum Type {
36     Plain     = 0x0001,
37     Notice    = 0x0002,
38     Action    = 0x0004,
39     Nick      = 0x0008,
40     Mode      = 0x0010,
41     Join      = 0x0020,
42     Part      = 0x0040,
43     Quit      = 0x0080,
44     Kick      = 0x0100,
45     Kill      = 0x0200,
46     Server    = 0x0400,
47     Info      = 0x0800,
48     Error     = 0x1000,
49     DayChange = 0x2000
50   };
51
52   // DO NOT CHANGE without knowing what you do, some of these flags are stored in the database
53   enum Flag {
54     None = 0x00,
55     Self = 0x01,
56     Highlight = 0x02,
57     Redirected = 0x04,
58     ServerMsg = 0x08,
59     Backlog = 0x80
60   };
61   Q_DECLARE_FLAGS(Flags, Flag)
62
63
64   Message(const BufferInfo &bufferInfo = BufferInfo(), Type type = Plain, const QString &contents = "", const QString &sender = "", Flags flags = None);
65   Message(const QDateTime &ts, const BufferInfo &buffer = BufferInfo(), Type type = Plain,
66           const QString &contents = "", const QString &sender = "", Flags flags = None);
67
68   inline static Message ChangeOfDay(const QDateTime &day) { return Message(day, BufferInfo(), DayChange, tr("Day changed to %1").arg(day.toString("dddd MMMM d yyyy"))); }
69   inline const MsgId &msgId() const { return _msgId; }
70   inline void setMsgId(MsgId id) { _msgId = id; }
71
72   inline const BufferInfo &bufferInfo() const { return _bufferInfo; }
73   inline const BufferId &bufferId() const { return _bufferInfo.bufferId(); }
74   inline void setBufferId(BufferId id) { _bufferInfo.setBufferId(id); }
75   inline const QString &contents() const { return _contents; }
76   inline const QString &sender() const { return _sender; }
77   inline Type type() const { return _type; }
78   inline Flags flags() const { return _flags; }
79   inline void setFlags(Flags flags) { _flags = flags; }
80   inline const QDateTime &timestamp() const { return _timestamp; }
81
82   inline bool isValid() const { return _msgId.isValid(); }
83
84   inline bool operator<(const Message &other) const { return _msgId < other._msgId; }
85
86 private:
87   QDateTime _timestamp;
88   MsgId _msgId;
89   BufferInfo _bufferInfo;
90   QString _contents;
91   QString _sender;
92   Type _type;
93   Flags _flags;
94
95   friend QDataStream &operator>>(QDataStream &in, Message &msg);
96 };
97
98 typedef QList<Message> MessageList;
99
100 QDataStream &operator<<(QDataStream &out, const Message &msg);
101 QDataStream &operator>>(QDataStream &in, Message &msg);
102 QDebug operator<<(QDebug dbg, const Message &msg);
103
104 Q_DECLARE_METATYPE(Message)
105 Q_DECLARE_OPERATORS_FOR_FLAGS(Message::Flags)
106
107 #endif