From dfd0c9f91a45dfc1850f6e19f8a638d99b9bf4f3 Mon Sep 17 00:00:00 2001 From: dt <qtc-committer@nokia.com> Date: Tue, 28 Apr 2009 17:23:33 +0200 Subject: [PATCH] Crash found by ErikV in the Dependencies Model with unloading projects We didn't update the dependencies model in case a project gets loaded or unloaded. (Or the session switched.) In that case we do a rather drastic reset() now. --- .../projectexplorer/dependenciespanel.cpp | 41 +++++++++---------- .../projectexplorer/dependenciespanel.h | 26 ++++++++++++ 2 files changed, 46 insertions(+), 21 deletions(-) diff --git a/src/plugins/projectexplorer/dependenciespanel.cpp b/src/plugins/projectexplorer/dependenciespanel.cpp index 78598c4f3a0..83dacae6bbe 100644 --- a/src/plugins/projectexplorer/dependenciespanel.cpp +++ b/src/plugins/projectexplorer/dependenciespanel.cpp @@ -44,27 +44,6 @@ namespace ProjectExplorer { namespace Internal { -// -// DependenciesModel -// - -class DependenciesModel : public QAbstractListModel -{ -public: - DependenciesModel(SessionManager *session, Project *project, QObject *parent = 0); - - int rowCount(const QModelIndex &index) const; - int columnCount(const QModelIndex &index) const; - QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const; - bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole); - Qt::ItemFlags flags(const QModelIndex &index) const; - -private: - SessionManager *m_session; - Project *m_project; - QList<Project *> m_projects; -}; - DependenciesModel::DependenciesModel(SessionManager *session, Project *project, QObject *parent) @@ -75,6 +54,26 @@ DependenciesModel::DependenciesModel(SessionManager *session, { // We can't select ourselves as a dependency m_projects.removeAll(m_project); + connect(session, SIGNAL(projectRemoved(ProjectExplorer::Project*)), + this, SLOT(resetModel())); + connect(session, SIGNAL(projectAdded(ProjectExplorer::Project*)), + this, SLOT(resetModel())); + connect(session, SIGNAL(sessionLoaded()), + this, SLOT(resetModel())); +// qDebug()<<"Dependencies Model"<<this<<"for project"<<project<<"("<<project->file()->fileName()<<")"; +} + +DependenciesModel::~DependenciesModel() +{ +// qDebug()<<"~DependenciesModel"<<this; +} + +void DependenciesModel::resetModel() +{ + qDebug()<<"Resetting"; + m_projects = m_session->projects(); + m_projects.removeAll(m_project); + reset(); } int DependenciesModel::rowCount(const QModelIndex &index) const diff --git a/src/plugins/projectexplorer/dependenciespanel.h b/src/plugins/projectexplorer/dependenciespanel.h index 5203efcc49e..f69c3b353c9 100644 --- a/src/plugins/projectexplorer/dependenciespanel.h +++ b/src/plugins/projectexplorer/dependenciespanel.h @@ -70,6 +70,32 @@ private: DependenciesWidget *m_widget; }; +// +// DependenciesModel +// + +class DependenciesModel : public QAbstractListModel +{ + Q_OBJECT +public: + DependenciesModel(SessionManager *session, Project *project, QObject *parent = 0); + ~DependenciesModel(); + + int rowCount(const QModelIndex &index) const; + int columnCount(const QModelIndex &index) const; + QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const; + bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole); + Qt::ItemFlags flags(const QModelIndex &index) const; + +public slots: + void resetModel(); + +private: + SessionManager *m_session; + Project *m_project; + QList<Project *> m_projects; +}; + } // namespace Internal } // namespace ProjectExplorer -- GitLab