X-Git-Url: https://git.quassel-irc.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Fuisupport%2Fbufferview.cpp;h=598686eceefdb2f299748deef2fd574eb29e5061;hb=40fd2239205d9926296ccf60474a1aeb53c06c53;hp=8ed210f59ca50e70c74456357907fbbb1167c5c0;hpb=2bcb925e42921b124efd19d1978ff19f44a09113;p=quassel.git diff --git a/src/uisupport/bufferview.cpp b/src/uisupport/bufferview.cpp index 8ed210f5..598686ec 100644 --- a/src/uisupport/bufferview.cpp +++ b/src/uisupport/bufferview.cpp @@ -18,16 +18,26 @@ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ -#include "client.h" -#include "buffersyncer.h" #include "bufferview.h" -#include "networkmodel.h" + +#include "bufferviewfilter.h" +#include "buffersyncer.h" +#include "client.h" #include "network.h" +#include "networkmodel.h" #include "uisettings.h" #include "global.h" +#include +#include +#include +#include +#include +#include +#include + /***************************************** * The TreeView showing the Buffers *****************************************/ @@ -66,16 +76,12 @@ void BufferView::init() { #endif } -void BufferView::setFilteredModel(QAbstractItemModel *model, BufferViewFilter::Modes mode, QList nets) { - BufferViewFilter *filter = new BufferViewFilter(model, mode, nets); - setModel(filter); - connect(this, SIGNAL(removeBuffer(const QModelIndex &)), filter, SLOT(removeBuffer(const QModelIndex &))); -} - void BufferView::setModel(QAbstractItemModel *model) { delete selectionModel(); QTreeView::setModel(model); init(); + if(!model) + return; // remove old Actions QList oldactions = header()->actions(); @@ -98,6 +104,59 @@ void BufferView::setModel(QAbstractItemModel *model) { } +void BufferView::setFilteredModel(QAbstractItemModel *model_, BufferViewConfig *config) { + BufferViewFilter *filter = qobject_cast(model()); + if(filter) { + filter->setConfig(config); + setConfig(config); + return; + } + + if(model()) { + disconnect(this, 0, model(), 0); + } + + if(!model_) { + setModel(model_); + } else { + BufferViewFilter *filter = new BufferViewFilter(model_, config); + setModel(filter); + connect(this, SIGNAL(removeBuffer(const QModelIndex &)), filter, SLOT(removeBuffer(const QModelIndex &))); + } + setConfig(config); +} + +void BufferView::setConfig(BufferViewConfig *config) { + if(_config == config) + return; + + if(_config) { + disconnect(_config, 0, this, 0); + } + + _config = config; + if(config) { + connect(config, SIGNAL(networkIdSet(const NetworkId &)), this, SLOT(setRootIndexForNetworkId(const NetworkId &))); + setRootIndexForNetworkId(config->networkId()); + } else { + setRootIndex(QModelIndex()); + } +} + +void BufferView::setRootIndexForNetworkId(const NetworkId &networkId) { + if(!networkId.isValid() || !model()) { + setRootIndex(QModelIndex()); + } else { + int networkCount = model()->rowCount(); + QModelIndex child; + for(int i = 0; i < networkCount; i++) { + child = model()->index(i, 0); + if(networkId == model()->data(child, NetworkModel::NetworkIdRole).value()) + setRootIndex(child); + } + } +} + void BufferView::joinChannel(const QModelIndex &index) { BufferInfo::Type bufferType = (BufferInfo::Type)index.data(NetworkModel::BufferTypeRole).value(); @@ -299,7 +358,7 @@ void BufferView::wheelEvent(QWheelEvent* event) { QSize BufferView::sizeHint() const { - return QSize(120, 50); + return QTreeView::sizeHint(); if(!model()) return QTreeView::sizeHint(); @@ -314,3 +373,28 @@ QSize BufferView::sizeHint() const { } return QSize(columnSize, 50); } + +// ============================== +// BufferView Dock +// ============================== +BufferViewDock::BufferViewDock(BufferViewConfig *config, QWidget *parent) + : QDockWidget(config->bufferViewName(), parent) +{ + setObjectName("BufferViewDock-" + QString::number(config->bufferViewId())); + toggleViewAction()->setData(config->bufferViewId()); + setAllowedAreas(Qt::RightDockWidgetArea|Qt::LeftDockWidgetArea); + connect(config, SIGNAL(bufferViewNameSet(const QString &)), this, SLOT(bufferViewRenamed(const QString &))); +} + +BufferViewDock::BufferViewDock(QWidget *parent) + : QDockWidget(tr("All Buffers"), parent) +{ + setObjectName("BufferViewDock--1"); + toggleViewAction()->setData((int)-1); + setAllowedAreas(Qt::RightDockWidgetArea|Qt::LeftDockWidgetArea); +} + +void BufferViewDock::bufferViewRenamed(const QString &newName) { + setWindowTitle(newName); + toggleViewAction()->setText(newName); +}