++iter;
}
_changeCurrentEnabled = true;
+
+ // Trigger a dataChanged() signal from the base model to update all proxy models (e.g. filters).
+ // Since signals are protected, we have to use invokeMethod for faking signal emission.
+ if (previous.isValid()) {
+ QMetaObject::invokeMethod(model(), "dataChanged", Qt::DirectConnection,
+ Q_ARG(QModelIndex, previous), Q_ARG(QModelIndex, previous));
+ }
}
}
-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)
void setModel(QAbstractItemModel *model);
void setFilteredModel(QAbstractItemModel *model, BufferViewConfig *config);
- virtual void setSelectionModel(QItemSelectionModel *selectionModel);
void setConfig(BufferViewConfig *config);
inline BufferViewConfig *config() { return _config; }
#include "networkmodel.h"
#include "uistyle.h"
-class CheckRemovalEvent : public QEvent
-{
-public:
- CheckRemovalEvent(const QModelIndex &source_index) : QEvent(QEvent::User), index(source_index) {};
- QPersistentModelIndex index;
-};
-
/*****************************************
* The Filter for the Tree View
setDynamicSortFilter(true);
- connect(this, SIGNAL(_dataChanged(const QModelIndex &, const QModelIndex &)),
- this, SLOT(_q_sourceDataChanged(QModelIndex, QModelIndex)));
-
_enableEditMode.setCheckable(true);
_enableEditMode.setChecked(_editMode);
connect(&_enableEditMode, SIGNAL(toggled(bool)), this, SLOT(enableEditMode(bool)));
}
-void BufferViewFilter::checkPreviousCurrentForRemoval(const QModelIndex ¤t, const QModelIndex &previous)
-{
- Q_UNUSED(current);
- if (previous.isValid())
- QCoreApplication::postEvent(this, new CheckRemovalEvent(previous));
-}
-
-
-void BufferViewFilter::customEvent(QEvent *event)
-{
- if (event->type() != QEvent::User)
- return;
-
- CheckRemovalEvent *removalEvent = static_cast<CheckRemovalEvent *>(event);
- checkItemForRemoval(removalEvent->index);
-
- event->accept();
-}
-
-
-void BufferViewFilter::checkItemsForRemoval(const QModelIndex &topLeft, const QModelIndex &bottomRight)
-{
- QModelIndex source_topLeft = mapToSource(topLeft);
- QModelIndex source_bottomRight = mapToSource(bottomRight);
- emit _dataChanged(source_topLeft, source_bottomRight);
-}
-
-
bool BufferViewFilter::bufferIdLessThan(const BufferId &left, const BufferId &right)
{
Q_CHECK_PTR(Client::networkModel());
QList<QAction *> actions(const QModelIndex &index);
-public slots:
- void checkPreviousCurrentForRemoval(const QModelIndex ¤t, const QModelIndex &previous);
- void checkItemForRemoval(const QModelIndex &index) { checkItemsForRemoval(index, index); }
- void checkItemsForRemoval(const QModelIndex &topLeft, const QModelIndex &bottomRight);
-
protected:
bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const;
bool lessThan(const QModelIndex &source_left, const QModelIndex &source_right) const;
bool bufferLessThan(const QModelIndex &source_left, const QModelIndex &source_right) const;
bool networkLessThan(const QModelIndex &source_left, const QModelIndex &source_right) const;
- virtual void customEvent(QEvent *event);
signals:
- void _dataChanged(const QModelIndex &source_topLeft, const QModelIndex &source_bottomRight);
void configChanged();
private slots: