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

View File

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