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)
|
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;
|
return node;
|
||||||
nn->update();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
return n;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void GdbServerProviderModel::addProvider(GdbServerProvider *provider)
|
void GdbServerProviderModel::addProvider(GdbServerProvider *provider)
|
||||||
|
@@ -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
|
||||||
|
Reference in New Issue
Block a user