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