diff options
author | hjk <hjk121@nokiamail.com> | 2014-11-27 17:45:49 +0100 |
---|---|---|
committer | hjk <hjk121@nokiamail.com> | 2014-12-01 17:02:40 +0100 |
commit | 99e2c9dbd4d98b1c66d1c62b2a0b06ea58aced2a (patch) | |
tree | d48437bb853da9dc9169d8670018f77418dca662 | |
parent | 5c6f982636530f226227722986ce5c5708df3f4b (diff) |
MacroExpander: Delay variable chooser population
Change-Id: I4bf81bcf8bb4f14bf6c31f613d79e79380b666e0
Reviewed-by: Eike Ziller <eike.ziller@theqtcompany.com>
Reviewed-by: hjk <hjk121@nokiamail.com>
-rw-r--r-- | src/libs/utils/macroexpander.cpp | 10 | ||||
-rw-r--r-- | src/libs/utils/macroexpander.h | 3 | ||||
-rw-r--r-- | 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 8a563ea4af2..226544b60e1 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 44f07f33d11..4fa2cf500ae 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<MacroExpander *()> MacroExpanderProvider; typedef QVector<MacroExpander *> MacroExpanders; +typedef QVector<MacroExpanderProvider> MacroExpanderProviders; class QTCREATOR_UTILS_EXPORT MacroExpander { @@ -89,7 +90,7 @@ public: QList<QByteArray> 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 1978de84fdd..f2f40024c94 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); } } |