1/***************************************************************************
2 * Copyright (C) 2005-2014 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#include "irclistmodel.h"
22
23#include <QStringList>
24
25IrcListModel::IrcListModel(QObject *parent)
26 : QAbstractItemModel(parent)
27{
28}
29
30
31QVariant IrcListModel::data(const QModelIndex &index, int role) const
32{
33 if (!index.isValid() || index.row() >= rowCount() || index.column() >= columnCount() || role != Qt::DisplayRole)
34 return QVariant();
35
36 IrcListHelper::ChannelDescription channel = _channelList[index.row()];
37
38 switch (index.column()) {
39 case 0:
40 return channel.channelName;
41 case 1:
42 return channel.userCount;
43 case 2:
44 return channel.topic;
45 default:
46 return QVariant();
47 }
48}
49
50
51Qt::ItemFlags IrcListModel::flags(const QModelIndex &index) const
52{
53 if (!index.isValid()) {
54 return Qt::ItemIsDropEnabled;
55 }
56 else {
57 return Qt::ItemIsSelectable | Qt::ItemIsEnabled;
58 }
59}
60
61
62QVariant IrcListModel::headerData(int section, Qt::Orientation orientation, int role) const
63{
64 QStringList header;
65 header << tr("Channel")
66 << tr("Users")
67 << tr("Topic");
68
69 if (orientation == Qt::Horizontal && role == Qt::DisplayRole)
70 return header[section];
71
72 return QVariant();
73}
74
75
76QModelIndex IrcListModel::index(int row, int column, const QModelIndex &parent) const
77{
78 Q_UNUSED(parent);
79 if (row >= rowCount() || column >= columnCount())
80 return QModelIndex();
81
82 return createIndex(row, column);
83}
84
85
86void IrcListModel::setChannelList(const QList<IrcListHelper::ChannelDescription> &channelList)
87{
88 if (rowCount() > 0) {
89 beginRemoveRows(QModelIndex(), 0, _channelList.count() - 1);
90 _channelList.clear();
91 endRemoveRows();
92 }
93
94 if (channelList.count() > 0) {
95 beginInsertRows(QModelIndex(), 0, channelList.count() - 1);
96 _channelList = channelList;
97 endInsertRows();
98 }
99}
100