SVN_SILENT made messages (.desktop file)
[kdegames.git] / libkdegames / kchatbasemodel.cpp
blob343ec80115e9608202a9c53be90712340fca5bae
1 /*
2 This file is part of the KDE games library
3 Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
4 Copyright (C) 2007 Gael de Chalendar (aka Kleag) <kleag@free.fr>
6 This library is free software; you can redistribute it and/or
7 modify it under the terms of the GNU Library General Public
8 License version 2 as published by the Free Software Foundation.
10 This library 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 GNU
13 Library General Public License for more details.
15 You should have received a copy of the GNU Library General Public License
16 along with this library; see the file COPYING.LIB. If not, write to
17 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
18 Boston, MA 02110-1301, USA.
21 #include "kchatbasemodel.h"
23 #include <kconfig.h>
24 #include <kconfiggroup.h>
25 #include <kdebug.h>
26 #include <kglobal.h>
27 #include <ksharedconfig.h>
28 #include <QFont>
30 class KChatBaseMessagePrivate
32 public:
33 KChatBaseMessagePrivate()
35 m_type = KChatBaseMessage::Normal;
38 KChatBaseMessage::MessageType m_type;
41 KChatBaseMessage::KChatBaseMessage()
43 d = new KChatBaseMessagePrivate();
46 KChatBaseMessage::KChatBaseMessage(const QString& sender, const QString& message,
47 MessageType type) :
48 QPair<QString,QString>(sender,message)
50 d = new KChatBaseMessagePrivate();
51 d->m_type = type;
54 KChatBaseMessage::KChatBaseMessage(const KChatBaseMessage& m) :
55 QPair< QString, QString >(m)
57 d = new KChatBaseMessagePrivate();
58 d->m_type = m.d->m_type;
61 KChatBaseMessage::~KChatBaseMessage()
63 delete d;
67 class KChatBaseModelPrivate
69 public:
70 KChatBaseModelPrivate()
72 mAcceptMessage = true;
73 mMaxItems = -1;
75 bool mAcceptMessage;
76 int mMaxItems;
78 QList<int> mIndex2Id;
80 QFont mNameFont;
81 QFont mMessageFont;
82 QFont mSystemNameFont;
83 QFont mSystemMessageFont;
85 QList< KChatBaseMessage > m_messages;
90 KChatBaseModel::KChatBaseModel(QObject *parent)
91 : QAbstractListModel(parent), d(new KChatBaseModelPrivate())
95 KChatBaseModel::~KChatBaseModel()
97 // kDebug(11000) << "KChatBaseModelPrivate: DESTRUCT (" << this << ")";
98 saveConfig();
101 void KChatBaseModel::slotClear()
103 clear();
106 void KChatBaseModel::setNameFont(const QFont& font)
108 d->mNameFont = font;
111 void KChatBaseModel::setMessageFont(const QFont& font)
113 d->mMessageFont = font;
116 void KChatBaseModel::setBothFont(const QFont& font)
118 setNameFont(font);
119 setMessageFont(font);
122 const QFont& KChatBaseModel::nameFont() const
123 { return d->mNameFont; }
125 const QFont& KChatBaseModel::messageFont() const
126 { return d->mMessageFont; }
128 void KChatBaseModel::setSystemNameFont(const QFont& font)
130 d->mSystemNameFont = font;
133 void KChatBaseModel::setSystemMessageFont(const QFont& font)
135 d->mSystemMessageFont = font;
138 void KChatBaseModel::setSystemBothFont(const QFont& font)
140 setSystemNameFont(font);
141 setSystemMessageFont(font);
144 const QFont& KChatBaseModel::systemNameFont() const
145 { return d->mSystemNameFont; }
147 const QFont& KChatBaseModel::systemMessageFont() const
148 { return d->mSystemMessageFont; }
150 void KChatBaseModel::saveConfig(KConfig* conf)
152 if (!conf) {
153 conf = KGlobal::config().data();
155 KConfigGroup cg(conf, "KChatBaseModelPrivate");
157 cg.writeEntry("NameFont", nameFont());
158 cg.writeEntry("MessageFont", messageFont());
159 cg.writeEntry("SystemNameFont", systemNameFont());
160 cg.writeEntry("SystemMessageFont", systemMessageFont());
161 cg.writeEntry("MaxMessages", maxItems());
164 void KChatBaseModel::readConfig(KConfig* conf)
166 if (!conf) {
167 conf = KGlobal::config().data();
169 KConfigGroup cg(conf, "KChatBaseModelPrivate");
171 setNameFont(cg.readEntry("NameFont", QFont()));
172 setMessageFont(cg.readEntry("MessageFont", QFont()));
173 setSystemNameFont(cg.readEntry("SystemNameFont", QFont()));
174 setSystemMessageFont(cg.readEntry("SystemMessageFont", QFont()));
175 setMaxItems(cg.readEntry("MaxMessages", -1));
178 void KChatBaseModel::clear()
180 removeRows(0, rowCount());
183 void KChatBaseModel::setMaxItems(int maxItems)
185 d->mMaxItems = maxItems;
186 //TODO cut too many messages
187 if (maxItems == 0) {
188 clear();
189 } else if (maxItems > 0) {
190 while (rowCount() > (int)maxItems)
192 removeRow(0);
197 int KChatBaseModel::maxItems() const
199 return d->mMaxItems;
203 QVariant KChatBaseModel::data(const QModelIndex &index, int role) const
205 if (!index.isValid())
206 return QVariant();
208 if (role == Qt::DisplayRole)
210 KChatBaseMessage p = d->m_messages[index.row()];
211 return QVariant::fromValue(p);
213 return QVariant();
216 int KChatBaseModel::rowCount(const QModelIndex &parent) const
218 if (parent.isValid())
219 return 0;
220 else
221 return d->m_messages.size();
224 void KChatBaseModel::addMessage(const QString& fromName, const QString& text)
226 int row;
227 row = d->m_messages.size();
228 beginInsertRows(QModelIndex(), row, row);
229 d->m_messages.push_back(KChatBaseMessage(fromName,text));
230 endInsertRows();
232 while (maxItems()>-1 && rowCount() > maxItems())
234 beginRemoveRows(QModelIndex(), row, row);
235 d->m_messages.pop_front();
236 endRemoveRows();
240 void KChatBaseModel::addSystemMessage(const QString& fromName, const QString& text)
242 int row;
243 row = d->m_messages.size();
244 beginInsertRows(QModelIndex(), row, row);
245 d->m_messages.push_back(KChatBaseMessage(fromName,text,KChatBaseMessage::System));
246 endInsertRows();
250 #include "kchatbasemodel.moc"