summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhjk <hjk121@nokiamail.com>2014-11-27 17:45:49 +0100
committerhjk <hjk121@nokiamail.com>2014-12-01 17:02:40 +0100
commit99e2c9dbd4d98b1c66d1c62b2a0b06ea58aced2a (patch)
treed48437bb853da9dc9169d8670018f77418dca662
parent5c6f982636530f226227722986ce5c5708df3f4b (diff)
downloadqt-creator-99e2c9dbd4d98b1c66d1c62b2a0b06ea58aced2a.tar.gz
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.cpp10
-rw-r--r--src/libs/utils/macroexpander.h3
-rw-r--r--src/plugins/coreplugin/variablechooser.cpp30
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<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 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);
}
}