BareMetal: Make better use of typed treemodel

Using the right type (Utils::TypedTreeItem<GdbServerProviderNode>) for
the root item avoids the m_widget == nullptr case and enables
simplification of the code.

Change-Id: I20bff4e8ad57551578513d4ffef1f969290a55f9
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
hjk
2018-07-11 14:11:53 +02:00
parent 3d3f14e3fe
commit 9ee022af7c
2 changed files with 16 additions and 32 deletions

View File

@@ -61,19 +61,10 @@ public:
GdbServerProviderNode(GdbServerProvider *provider, bool changed = false) GdbServerProviderNode(GdbServerProvider *provider, bool changed = false)
: provider(provider), changed(changed) : provider(provider), changed(changed)
{ {
widget = provider ? provider->configurationWidget() : 0;
}
Qt::ItemFlags flags(int) const override
{
return provider ? Qt::ItemIsEnabled|Qt::ItemIsSelectable : Qt::ItemIsEnabled;
} }
QVariant data(int column, int role) const override QVariant data(int column, int role) const override
{ {
if (!provider)
return QVariant();
if (role == Qt::FontRole) { if (role == Qt::FontRole) {
QFont f = QApplication::font(); QFont f = QApplication::font();
if (changed) if (changed)
@@ -89,14 +80,12 @@ public:
return QVariant(); return QVariant();
} }
GdbServerProvider *provider; GdbServerProvider *provider = nullptr;
GdbServerProviderConfigWidget *widget; GdbServerProviderConfigWidget *widget = nullptr;
bool changed; bool changed = false;
}; };
GdbServerProviderModel::GdbServerProviderModel()
GdbServerProviderModel::GdbServerProviderModel(QObject *parent)
: TreeModel<>(parent)
{ {
setHeader({tr("Name"), tr("Type")}); setHeader({tr("Name"), tr("Type")});
@@ -206,19 +195,13 @@ void GdbServerProviderModel::markForAddition(GdbServerProvider *provider)
GdbServerProviderNode *GdbServerProviderModel::createNode( GdbServerProviderNode *GdbServerProviderModel::createNode(
GdbServerProvider *provider, bool changed) GdbServerProvider *provider, bool changed)
{ {
auto n = new GdbServerProviderNode(provider, changed); auto node = new GdbServerProviderNode(provider, changed);
if (n->widget) { node->widget = provider->configurationWidget();
connect(n->widget, &GdbServerProviderConfigWidget::dirty, this, [this, n] { connect(node->widget, &GdbServerProviderConfigWidget::dirty, this, [node] {
for (TreeItem *item : *rootItem()) { node->changed = true;
auto nn = static_cast<GdbServerProviderNode *>(item); node->update();
if (nn->widget == n->widget) {
nn->changed = true;
nn->update();
}
}
}); });
} return node;
return n;
} }
void GdbServerProviderModel::addProvider(GdbServerProvider *provider) void GdbServerProviderModel::addProvider(GdbServerProvider *provider)

View File

@@ -46,12 +46,13 @@ class GdbServerProviderFactory;
class GdbServerProviderNode; class GdbServerProviderNode;
class GdbServerProvidersSettingsWidget; class GdbServerProvidersSettingsWidget;
class GdbServerProviderModel : public Utils::TreeModel<> class GdbServerProviderModel
: public Utils::TreeModel<Utils::TypedTreeItem<GdbServerProviderNode>, GdbServerProviderNode>
{ {
Q_OBJECT Q_OBJECT
public: public:
explicit GdbServerProviderModel(QObject *parent = 0); GdbServerProviderModel();
GdbServerProvider *provider(const QModelIndex &) const; GdbServerProvider *provider(const QModelIndex &) const;
GdbServerProviderConfigWidget *widget(const QModelIndex &) const; GdbServerProviderConfigWidget *widget(const QModelIndex &) const;
@@ -82,14 +83,14 @@ class GdbServerProvidersSettingsPage : public Core::IOptionsPage
Q_OBJECT Q_OBJECT
public: public:
explicit GdbServerProvidersSettingsPage(QObject *parent = 0); explicit GdbServerProvidersSettingsPage(QObject *parent = nullptr);
private: private:
QWidget *widget(); QWidget *widget();
void apply(); void apply();
void finish(); void finish();
GdbServerProvidersSettingsWidget *m_configWidget = 0; GdbServerProvidersSettingsWidget *m_configWidget = nullptr;
}; };
} // namespace Internal } // namespace Internal