#include "bufferview.h"
+#include "buffermodel.h"
#include "bufferviewfilter.h"
#include "buffersyncer.h"
#include "client.h"
+#include "mappedselectionmodel.h"
#include "network.h"
#include "networkmodel.h"
void BufferView::setModel(QAbstractItemModel *model) {
delete selectionModel();
+ if(QTreeView::model()) {
+ disconnect(QTreeView::model(), SIGNAL(layoutChanged()), this, SLOT(layoutChanged()));
+ }
+
QTreeView::setModel(model);
init();
- if(!model)
- return;
-
// remove old Actions
QList<QAction *> oldactions = header()->actions();
foreach(QAction *action, oldactions) {
action->deleteLater();
}
+ if(!model)
+ return;
+
+ connect(model, SIGNAL(layoutChanged()), this, SLOT(layoutChanged()));
+
QString sectionName;
QAction *showSection;
for(int i = 1; i < model->columnCount(); i++) {
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);
- if(model()->rowCount(parent) == 1 && parent.data(NetworkModel::ItemTypeRole) == NetworkModel::NetworkItemType
- && (Global::SPUTDEV || parent.data(NetworkModel::ItemActiveRole) == true)) {
+
+ // ensure that newly inserted network nodes are expanded per default
+ if(parent.data(NetworkModel::ItemTypeRole) != NetworkModel::NetworkItemType)
+ return;
+
+ if(model()->rowCount(parent) == 1 && parent.data(NetworkModel::ItemActiveRole) == true) {
// without updating the parent the expand will have no effect... Qt Bug?
update(parent);
expand(parent);
}
}
+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() || !mappedSelectionModel)
+ return;
+
+ mappedSelectionModel->mappedSetCurrentIndex(Client::bufferModel()->standardSelectionModel()->currentIndex(), QItemSelectionModel::Current);
+ mappedSelectionModel->mappedSelect(Client::bufferModel()->standardSelectionModel()->selection(), QItemSelectionModel::ClearAndSelect | QItemSelectionModel::Rows);
+}
+
void BufferView::dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight) {
QTreeView::dataChanged(topLeft, bottomRight);
continue;
bool isActive = networkIdx.data(NetworkModel::ItemActiveRole).toBool();
- if(Global::SPUTDEV) {
- if(isExpanded(networkIdx) != isActive) setExpanded(networkIdx, true);
- } else {
- if(isExpanded(networkIdx) != isActive)
- setExpanded(networkIdx, isActive);
- }
+#ifdef SPUTDEV
+ if(isExpanded(networkIdx) != isActive) setExpanded(networkIdx, true);
+#else
+ if(isExpanded(networkIdx) != isActive) setExpanded(networkIdx, isActive);
+#endif
}
}