summaryrefslogtreecommitdiff
path: root/src/plugins/coreplugin/variablechooser.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/coreplugin/variablechooser.cpp')
-rw-r--r--src/plugins/coreplugin/variablechooser.cpp30
1 files changed, 14 insertions, 16 deletions
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);
}
}