From 99e2c9dbd4d98b1c66d1c62b2a0b06ea58aced2a Mon Sep 17 00:00:00 2001 From: hjk Date: Thu, 27 Nov 2014 17:45:49 +0100 Subject: MacroExpander: Delay variable chooser population Change-Id: I4bf81bcf8bb4f14bf6c31f613d79e79380b666e0 Reviewed-by: Eike Ziller Reviewed-by: hjk --- src/libs/utils/macroexpander.cpp | 10 ++-------- src/libs/utils/macroexpander.h | 3 ++- src/plugins/coreplugin/variablechooser.cpp | 30 ++++++++++++++---------------- 3 files changed, 18 insertions(+), 25 deletions(-) diff --git a/src/libs/utils/macroexpander.cpp b/src/libs/utils/macroexpander.cpp index 8a563ea4af..226544b60e 100644 --- a/src/libs/utils/macroexpander.cpp +++ b/src/libs/utils/macroexpander.cpp @@ -411,15 +411,9 @@ QString MacroExpander::variableDescription(const QByteArray &variable) const return d->m_descriptions.value(variable); } -MacroExpanders MacroExpander::subExpanders() const +MacroExpanderProviders MacroExpander::subProviders() const { - MacroExpanders expanders; - foreach (const MacroExpanderProvider &provider, d->m_subProviders) - if (provider) - if (MacroExpander *expander = provider()) - expanders.append(expander); - - return expanders; + return d->m_subProviders; } QString MacroExpander::displayName() const diff --git a/src/libs/utils/macroexpander.h b/src/libs/utils/macroexpander.h index 44f07f33d1..4fa2cf500a 100644 --- a/src/libs/utils/macroexpander.h +++ b/src/libs/utils/macroexpander.h @@ -46,6 +46,7 @@ namespace Internal { class MacroExpanderPrivate; } class MacroExpander; typedef std::function MacroExpanderProvider; typedef QVector MacroExpanders; +typedef QVector MacroExpanderProviders; class QTCREATOR_UTILS_EXPORT MacroExpander { @@ -89,7 +90,7 @@ public: QList visibleVariables() const; QString variableDescription(const QByteArray &variable) const; - MacroExpanders subExpanders() const; + MacroExpanderProviders subProviders() const; QString displayName() const; void setDisplayName(const QString &displayName); diff --git a/src/plugins/coreplugin/variablechooser.cpp b/src/plugins/coreplugin/variablechooser.cpp index 1978de84fd..f2f40024c9 100644 --- a/src/plugins/coreplugin/variablechooser.cpp +++ b/src/plugins/coreplugin/variablechooser.cpp @@ -127,23 +127,17 @@ class VariableGroupItem : public TreeItem { public: VariableGroupItem() - : m_chooser(0), m_expander(0) + : m_chooser(0) { setLazy(true); } - bool ensureExpander() const - { - if (!m_expander) - m_expander = m_provider(); - return m_expander != 0; - } - QVariant data(int column, int role) const { if (role == Qt::DisplayRole || role == Qt::EditRole) { - if (column == 0 && ensureExpander()) - return m_expander->displayName(); + if (column == 0) + if (MacroExpander *expander = m_provider()) + return expander->displayName(); } return QVariant(); @@ -151,8 +145,8 @@ public: void populate() { - if (ensureExpander()) - populateGroup(m_expander); + if (MacroExpander *expander = m_provider()) + populateGroup(expander); } void populateGroup(MacroExpander *expander); @@ -160,7 +154,6 @@ public: public: VariableChooserPrivate *m_chooser; // Not owned. MacroExpanderProvider m_provider; - mutable MacroExpander *m_expander; // Not owned. }; class VariableItem : public TreeItem @@ -260,6 +253,9 @@ VariableChooserPrivate::VariableChooserPrivate(VariableChooser *parent) void VariableGroupItem::populateGroup(MacroExpander *expander) { + if (!expander) + return; + foreach (const QByteArray &variable, expander->visibleVariables()) { auto item = new VariableItem; item->m_variable = QString::fromUtf8(variable); @@ -269,13 +265,15 @@ void VariableGroupItem::populateGroup(MacroExpander *expander) appendChild(item); } - foreach (MacroExpander *subExpander, expander->subExpanders()) { + foreach (const MacroExpanderProvider &subProvider, expander->subProviders()) { + if (!subProvider) + continue; if (expander->isAccumulating()) { - populateGroup(subExpander); + populateGroup(subProvider()); } else { auto item = new VariableGroupItem; item->m_chooser = m_chooser; - item->m_expander = subExpander; + item->m_provider = subProvider; appendChild(item); } } -- cgit v1.2.1