forked from qt-creator/qt-creator
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:
@@ -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();
|
||||
}
|
||||
}
|
||||
auto node = new GdbServerProviderNode(provider, changed);
|
||||
node->widget = provider->configurationWidget();
|
||||
connect(node->widget, &GdbServerProviderConfigWidget::dirty, this, [node] {
|
||||
node->changed = true;
|
||||
node->update();
|
||||
});
|
||||
}
|
||||
return n;
|
||||
return node;
|
||||
}
|
||||
|
||||
void GdbServerProviderModel::addProvider(GdbServerProvider *provider)
|
||||
|
@@ -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
|
||||
|
Reference in New Issue
Block a user