void BufferView::setModel(QAbstractItemModel *model) {
delete selectionModel();
if(QTreeView::model()) {
- disconnect(QTreeView::model(), SIGNAL(layoutChanged()), this, SLOT(updateSelection()));
+ disconnect(QTreeView::model(), SIGNAL(layoutChanged()), this, SLOT(layoutChanged()));
}
QTreeView::setModel(model);
if(!model)
return;
- connect(model, SIGNAL(layoutChanged()), this, SLOT(updateSelection()));
+ connect(model, SIGNAL(layoutChanged()), this, SLOT(layoutChanged()));
QString sectionName;
QAction *showSection;
} else {
BufferViewFilter *filter = new BufferViewFilter(model_, config);
setModel(filter);
- connect(this, SIGNAL(removeBuffer(const QModelIndex &)), filter, SLOT(removeBuffer(const QModelIndex &)));
+ connect(this, SIGNAL(removeBuffer(const QModelIndex &)),
+ filter, SLOT(removeBuffer(const QModelIndex &)));
}
setConfig(config);
}
+void BufferView::setSelectionModel(QItemSelectionModel *selectionModel) {
+ if(QTreeView::selectionModel())
+ disconnect(selectionModel, SIGNAL(currentChanged(QModelIndex, QModelIndex)),
+ model(), SIGNAL(checkPreviousCurrentForRemoval(QModelIndex, QModelIndex)));
+
+ QTreeView::setSelectionModel(selectionModel);
+ BufferViewFilter *filter = qobject_cast<BufferViewFilter *>(model());
+ if(filter) {
+ connect(selectionModel, SIGNAL(currentChanged(QModelIndex, QModelIndex)),
+ filter, SLOT(checkPreviousCurrentForRemoval(QModelIndex, QModelIndex)));
+ }
+}
+
void BufferView::setConfig(BufferViewConfig *config) {
if(_config == config)
return;
QTreeView::keyPressEvent(event);
}
-// ensure that newly inserted network nodes are expanded per default
void BufferView::rowsInserted(const QModelIndex & parent, int start, int end) {
QTreeView::rowsInserted(parent, start, end);
+
+ // ensure that newly inserted network nodes are expanded per default
if(parent.data(NetworkModel::ItemTypeRole) != NetworkModel::NetworkItemType)
return;
}
}
-void BufferView::updateSelection() {
+void BufferView::layoutChanged() {
+ Q_ASSERT(model());
+
+ // expand all active networks
+ QModelIndex networkIdx;
+ for(int row = 0; row < model()->rowCount(); row++) {
+ networkIdx = model()->index(row, 0);
+ update(networkIdx);
+ if(model()->rowCount(networkIdx) > 0 && model()->data(networkIdx, NetworkModel::ItemActiveRole) == true) {
+ expand(networkIdx);
+ } else {
+ collapse(networkIdx);
+ }
+ }
+
+ // update selection to current one
MappedSelectionModel *mappedSelectionModel = qobject_cast<MappedSelectionModel *>(selectionModel());
- if(!config())
+ if(!config() || !mappedSelectionModel)
return;
mappedSelectionModel->mappedSetCurrentIndex(Client::bufferModel()->standardSelectionModel()->currentIndex(), QItemSelectionModel::Current);