1 /***************************************************************************
2 * Copyright (C) 2005-08 by the Quassel Project *
3 * devel@quassel-irc.org *
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. *
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. *
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 ***************************************************************************/
21 #include "buffermodel.h"
23 #include "networkmodel.h"
24 #include "mappedselectionmodel.h"
26 #include <QAbstractItemView>
28 BufferModel::BufferModel(NetworkModel *parent)
29 : QSortFilterProxyModel(parent),
30 _selectionModelSynchronizer(new SelectionModelSynchronizer(this)),
31 _propertyMapper(new ModelPropertyMapper(this))
33 setSourceModel(parent);
35 // initialize the Property Mapper
36 _propertyMapper->setModel(this);
37 delete _propertyMapper->selectionModel();
38 MappedSelectionModel *mappedSelectionModel = new MappedSelectionModel(this);
39 _propertyMapper->setSelectionModel(mappedSelectionModel);
40 synchronizeSelectionModel(mappedSelectionModel);
42 connect(_selectionModelSynchronizer, SIGNAL(setCurrentIndex(QModelIndex, QItemSelectionModel::SelectionFlags)),
43 this, SLOT(setCurrentIndex(QModelIndex, QItemSelectionModel::SelectionFlags)));
46 BufferModel::~BufferModel() {
49 bool BufferModel::filterAcceptsRow(int sourceRow, const QModelIndex &parent) const {
52 if(parent.data(NetworkModel::ItemTypeRole) == NetworkModel::BufferItemType)
58 void BufferModel::synchronizeSelectionModel(MappedSelectionModel *selectionModel) {
59 selectionModelSynchronizer()->addSelectionModel(selectionModel);
62 void BufferModel::synchronizeView(QAbstractItemView *view) {
63 MappedSelectionModel *mappedSelectionModel = new MappedSelectionModel(view->model());
64 selectionModelSynchronizer()->addSelectionModel(mappedSelectionModel);
65 Q_ASSERT(mappedSelectionModel);
66 delete view->selectionModel();
67 view->setSelectionModel(mappedSelectionModel);
70 void BufferModel::mapProperty(int column, int role, QObject *target, const QByteArray &property) {
71 propertyMapper()->addMapping(column, role, target, property);
74 // This Slot indicates that the user has selected a different buffer in the gui
75 void BufferModel::setCurrentIndex(const QModelIndex &index, QItemSelectionModel::SelectionFlags command) {
77 BufferId newCurrentBuffer;
78 if(index.data(NetworkModel::ItemTypeRole) == NetworkModel::BufferItemType
79 && currentBuffer != (newCurrentBuffer = qVariantValue<BufferId>(index.data(NetworkModel::BufferIdRole)))) {
80 currentBuffer = newCurrentBuffer;
81 // FIXME: to something like: index.setData(ActivitRole, NoActivity);
82 // networkModel->bufferActivity(BufferItem::NoActivity, currentBuffer);
83 emit selectionChanged(index);
87 QModelIndex BufferModel::currentIndex() {
88 return propertyMapper()->selectionModel()->currentIndex();