aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/projectexplorer/targetsetuppage.h
diff options
context:
space:
mode:
authorTobias Hunger <tobias.hunger@qt.io>2018-03-20 17:05:05 +0100
committerTobias Hunger <tobias.hunger@qt.io>2018-04-10 11:24:02 +0000
commitbfe3bdd890c87095b3633357f921d2b4f2250a71 (patch)
treeaf6b0585854feeb2a57efda5810d87d477a655c3 /src/plugins/projectexplorer/targetsetuppage.h
parent990d26deba2889d70bed7287520e3cf006af45ae (diff)
TargetSetupPage: Try to prevent a crash
Try to prevent a crash that I can not reproduce: * Use a std::vector of TargetSetupWidgets instead of a map. * Double-check that no nullptr will end up in that vector. * Make sure widgets are removed from the vector before their kits become invalid. * Unify removal of widgets. Change-Id: Ie57c7689033914458ca4d4f3ae11998480008ff3 Reviewed-by: David Schulz <david.schulz@qt.io>
Diffstat (limited to 'src/plugins/projectexplorer/targetsetuppage.h')
-rw-r--r--src/plugins/projectexplorer/targetsetuppage.h19
1 files changed, 12 insertions, 7 deletions
diff --git a/src/plugins/projectexplorer/targetsetuppage.h b/src/plugins/projectexplorer/targetsetuppage.h
index 122872cd36..cc2c96037f 100644
--- a/src/plugins/projectexplorer/targetsetuppage.h
+++ b/src/plugins/projectexplorer/targetsetuppage.h
@@ -68,6 +68,8 @@ public:
// Call these before initializePage!
void setRequiredKitPredicate(const ProjectExplorer::Kit::Predicate &predicate);
void setPreferredKitPredicate(const ProjectExplorer::Kit::Predicate &predicate);
+ void setProjectPath(const QString &dir);
+ void setProjectImporter(ProjectImporter *importer);
/// Sets whether the targetsetupage uses a scrollarea
/// to host the widgets from the factories
@@ -76,11 +78,7 @@ public:
bool isComplete() const override;
bool setupProject(Project *project);
- bool isKitSelected(Core::Id id) const;
- void setKitSelected(Core::Id id, bool selected);
QList<Core::Id> selectedKits() const;
- void setProjectPath(const QString &dir);
- void setProjectImporter(ProjectImporter *importer);
/// Overrides the summary text of the targetsetuppage
void setNoteText(const QString &text);
@@ -102,22 +100,28 @@ private:
bool isUpdating() const;
void selectAtLeastOneKit();
- void removeWidget(Kit *k);
+ void removeWidget(Kit *k) { removeWidget(widget(k)); }
+ void removeWidget(Internal::TargetSetupWidget *w);
Internal::TargetSetupWidget *addWidget(Kit *k);
void setupImports();
void import(const Utils::FileName &path, bool silent = false);
- void setupWidgets();
+ void setupWidgets(const QString &filterText = QString());
void reset();
+ Internal::TargetSetupWidget *widget(Kit *k, Internal::TargetSetupWidget *fallback = nullptr) const
+ { return widget(k->id(), fallback); }
+ Internal::TargetSetupWidget *widget(const Core::Id kitId,
+ Internal::TargetSetupWidget *fallback = nullptr) const;
+
ProjectExplorer::Kit::Predicate m_requiredPredicate;
ProjectExplorer::Kit::Predicate m_preferredPredicate;
QPointer<ProjectImporter> m_importer = nullptr;
QLayout *m_baseLayout = nullptr;
QString m_projectPath;
QString m_defaultShadowBuildLocation;
- QMap<Core::Id, Internal::TargetSetupWidget *> m_widgets;
+ std::vector<Internal::TargetSetupWidget *> m_widgets;
Internal::TargetSetupWidget *m_firstWidget = nullptr;
Internal::TargetSetupPageUi *m_ui;
@@ -127,6 +131,7 @@ private:
QList<QWidget *> m_potentialWidgets;
bool m_forceOptionHint = false;
+ bool m_widgetsWereSetUp = false;
};
} // namespace ProjectExplorer