ProjectTree: Use signals to communicate change from FlatModel to view

Better encapsulation and potentially more than one view on the model.

Change-Id: I45657484a68eba61b3987d324cf1542704ffd61c
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
hjk
2017-03-01 13:19:51 +01:00
parent f7a778690d
commit aabdc242d5
3 changed files with 11 additions and 15 deletions

View File

@@ -89,14 +89,6 @@ FlatModel::FlatModel(QObject *parent)
update(); update();
} }
void FlatModel::setView(QTreeView *view)
{
QTC_CHECK(!m_view);
m_view = view;
connect(m_view, &QTreeView::expanded, this, &FlatModel::onExpanded);
connect(m_view, &QTreeView::collapsed, this, &FlatModel::onCollapsed);
}
QVariant FlatModel::data(const QModelIndex &index, int role) const QVariant FlatModel::data(const QModelIndex &index, int role) const
{ {
QVariant result; QVariant result;
@@ -221,7 +213,7 @@ void FlatModel::rebuildModel()
const QString displayName = node->m_node->displayName(); const QString displayName = node->m_node->displayName();
ExpandData ed(path, displayName); ExpandData ed(path, displayName);
if (m_toExpand.contains(ed)) if (m_toExpand.contains(ed))
m_view->expand(node->index()); emit requestExpansion(node->index());
}); });
} }

View File

@@ -59,8 +59,6 @@ class FlatModel : public Utils::TreeModel<WrapperNode, WrapperNode>
public: public:
FlatModel(QObject *parent); FlatModel(QObject *parent);
void setView(QTreeView *view);
// QAbstractItemModel // QAbstractItemModel
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
Qt::ItemFlags flags(const QModelIndex &index) const override; Qt::ItemFlags flags(const QModelIndex &index) const override;
@@ -79,8 +77,12 @@ public:
void setProjectFilterEnabled(bool filter); void setProjectFilterEnabled(bool filter);
void setGeneratedFilesFilterEnabled(bool filter); void setGeneratedFilesFilterEnabled(bool filter);
void onExpanded(const QModelIndex &idx);
void onCollapsed(const QModelIndex &idx);
signals: signals:
void renamed(const Utils::FileName &oldName, const Utils::FileName &newName); void renamed(const Utils::FileName &oldName, const Utils::FileName &newName);
void requestExpansion(const QModelIndex &index);
private: private:
void nodeUpdated(ProjectExplorer::Node *node); void nodeUpdated(ProjectExplorer::Node *node);
@@ -99,14 +101,11 @@ private:
void addFolderNode(WrapperNode *parent, FolderNode *folderNode, QSet<Node *> *seen); void addFolderNode(WrapperNode *parent, FolderNode *folderNode, QSet<Node *> *seen);
ExpandData expandDataForNode(const Node *node) const; ExpandData expandDataForNode(const Node *node) const;
void onExpanded(const QModelIndex &idx);
void onCollapsed(const QModelIndex &idx);
void loadExpandData(); void loadExpandData();
void saveExpandData(); void saveExpandData();
void handleProjectAdded(Project *project); void handleProjectAdded(Project *project);
QTimer m_timer; QTimer m_timer;
QTreeView *m_view = nullptr;
QSet<ExpandData> m_toExpand; QSet<ExpandData> m_toExpand;
}; };

View File

@@ -175,7 +175,6 @@ ProjectTreeWidget::ProjectTreeWidget(QWidget *parent) : QWidget(parent)
m_view->setItemDelegate(new ProjectTreeItemDelegate(this)); m_view->setItemDelegate(new ProjectTreeItemDelegate(this));
setFocusProxy(m_view); setFocusProxy(m_view);
m_view->installEventFilter(this); m_view->installEventFilter(this);
m_model->setView(m_view);
auto layout = new QVBoxLayout(); auto layout = new QVBoxLayout();
layout->addWidget(ItemViewFind::createSearchableWrapper( layout->addWidget(ItemViewFind::createSearchableWrapper(
@@ -198,12 +197,18 @@ ProjectTreeWidget::ProjectTreeWidget(QWidget *parent) : QWidget(parent)
// connections // connections
connect(m_model, &FlatModel::renamed, connect(m_model, &FlatModel::renamed,
this, &ProjectTreeWidget::renamed); this, &ProjectTreeWidget::renamed);
connect(m_model, &FlatModel::requestExpansion,
m_view, &QTreeView::expand);
connect(m_view, &QAbstractItemView::activated, connect(m_view, &QAbstractItemView::activated,
this, &ProjectTreeWidget::openItem); this, &ProjectTreeWidget::openItem);
connect(m_view->selectionModel(), &QItemSelectionModel::currentChanged, connect(m_view->selectionModel(), &QItemSelectionModel::currentChanged,
this, &ProjectTreeWidget::handleCurrentItemChange); this, &ProjectTreeWidget::handleCurrentItemChange);
connect(m_view, &QWidget::customContextMenuRequested, connect(m_view, &QWidget::customContextMenuRequested,
this, &ProjectTreeWidget::showContextMenu); this, &ProjectTreeWidget::showContextMenu);
connect(m_view, &QTreeView::expanded,
m_model, &FlatModel::onExpanded);
connect(m_view, &QTreeView::collapsed,
m_model, &FlatModel::onCollapsed);
m_toggleSync = new QToolButton; m_toggleSync = new QToolButton;
m_toggleSync->setIcon(Utils::Icons::LINK.icon()); m_toggleSync->setIcon(Utils::Icons::LINK.icon());