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"
24 #include <kconfiggroup.h>
27 #include <ksharedconfig.h>
30 class KChatBaseMessagePrivate
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
,
48 QPair
<QString
,QString
>(sender
,message
)
50 d
= new KChatBaseMessagePrivate();
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()
67 class KChatBaseModelPrivate
70 KChatBaseModelPrivate()
72 mAcceptMessage
= true;
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 << ")";
101 void KChatBaseModel::slotClear()
106 void KChatBaseModel::setNameFont(const QFont
& font
)
111 void KChatBaseModel::setMessageFont(const QFont
& font
)
113 d
->mMessageFont
= font
;
116 void KChatBaseModel::setBothFont(const QFont
& 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
)
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
)
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
189 } else if (maxItems
> 0) {
190 while (rowCount() > (int)maxItems
)
197 int KChatBaseModel::maxItems() const
203 QVariant
KChatBaseModel::data(const QModelIndex
&index
, int role
) const
205 if (!index
.isValid())
208 if (role
== Qt::DisplayRole
)
210 KChatBaseMessage p
= d
->m_messages
[index
.row()];
211 return QVariant::fromValue(p
);
216 int KChatBaseModel::rowCount(const QModelIndex
&parent
) const
218 if (parent
.isValid())
221 return d
->m_messages
.size();
224 void KChatBaseModel::addMessage(const QString
& fromName
, const QString
& text
)
227 row
= d
->m_messages
.size();
228 beginInsertRows(QModelIndex(), row
, row
);
229 d
->m_messages
.push_back(KChatBaseMessage(fromName
,text
));
232 while (maxItems()>-1 && rowCount() > maxItems())
234 beginRemoveRows(QModelIndex(), row
, row
);
235 d
->m_messages
.pop_front();
240 void KChatBaseModel::addSystemMessage(const QString
& fromName
, const QString
& text
)
243 row
= d
->m_messages
.size();
244 beginInsertRows(QModelIndex(), row
, row
);
245 d
->m_messages
.push_back(KChatBaseMessage(fromName
,text
,KChatBaseMessage::System
));
250 #include "kchatbasemodel.moc"