forked from qt-creator/qt-creator
Utils: Let aspect transition functions indicate there was a change
Helps to make it easier to reason about the necessity of emitting *changed signals. Change-Id: Ieab29b25f5cc2799e193417b9cab02c99501c60a Reviewed-by: Marcus Tillmanns <marcus.tillmanns@qt.io>
This commit is contained in:
@@ -1203,8 +1203,9 @@ void StringAspect::addToLayout(LayoutItem &parent)
|
|||||||
d->m_checker->addToLayout(parent);
|
d->m_checker->addToLayout(parent);
|
||||||
}
|
}
|
||||||
|
|
||||||
void StringAspect::guiToBuffer()
|
bool StringAspect::guiToBuffer()
|
||||||
{
|
{
|
||||||
|
const QString old = m_buffer;
|
||||||
switch (d->m_displayStyle) {
|
switch (d->m_displayStyle) {
|
||||||
case PathChooserDisplay:
|
case PathChooserDisplay:
|
||||||
if (d->m_pathChooserDisplay)
|
if (d->m_pathChooserDisplay)
|
||||||
@@ -1220,22 +1221,26 @@ void StringAspect::guiToBuffer()
|
|||||||
case LabelDisplay:
|
case LabelDisplay:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
return m_buffer != old;
|
||||||
}
|
}
|
||||||
|
|
||||||
void StringAspect::bufferToInternal()
|
bool StringAspect::bufferToInternal()
|
||||||
{
|
{
|
||||||
|
const QString old = m_internal;
|
||||||
if (d->m_valueAcceptor) {
|
if (d->m_valueAcceptor) {
|
||||||
if (const std::optional<QString> tmp = d->m_valueAcceptor(m_internal, m_buffer))
|
if (const std::optional<QString> tmp = d->m_valueAcceptor(m_internal, m_buffer))
|
||||||
m_internal = *tmp;
|
m_internal = *tmp;
|
||||||
return;
|
} else {
|
||||||
|
m_internal = m_buffer;
|
||||||
}
|
}
|
||||||
|
return m_internal != old;
|
||||||
m_internal = m_buffer;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void StringAspect::internalToBuffer()
|
bool StringAspect::internalToBuffer()
|
||||||
{
|
{
|
||||||
|
const QString old = m_buffer;
|
||||||
m_buffer = d->m_displayFilter ? d->m_displayFilter(m_internal) : m_internal;
|
m_buffer = d->m_displayFilter ? d->m_displayFilter(m_internal) : m_internal;
|
||||||
|
return m_buffer != old;
|
||||||
}
|
}
|
||||||
|
|
||||||
void StringAspect::bufferToGui()
|
void StringAspect::bufferToGui()
|
||||||
@@ -1391,10 +1396,12 @@ void ColorAspect::addToLayout(Layouting::LayoutItem &parent)
|
|||||||
this, &ColorAspect::handleGuiChanged);
|
this, &ColorAspect::handleGuiChanged);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ColorAspect::guiToBuffer()
|
bool ColorAspect::guiToBuffer()
|
||||||
{
|
{
|
||||||
|
const QColor old = m_buffer;
|
||||||
if (d->m_colorButton)
|
if (d->m_colorButton)
|
||||||
m_buffer = d->m_colorButton->color();
|
m_buffer = d->m_colorButton->color();
|
||||||
|
return m_buffer != old;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ColorAspect::bufferToGui()
|
void ColorAspect::bufferToGui()
|
||||||
@@ -1496,12 +1503,14 @@ QAction *BoolAspect::action()
|
|||||||
return act;
|
return act;
|
||||||
}
|
}
|
||||||
|
|
||||||
void BoolAspect::guiToBuffer()
|
bool BoolAspect::guiToBuffer()
|
||||||
{
|
{
|
||||||
|
const bool old = m_buffer;
|
||||||
if (d->m_button)
|
if (d->m_button)
|
||||||
m_buffer = d->m_button->isChecked();
|
m_buffer = d->m_button->isChecked();
|
||||||
else if (d->m_groupBox)
|
else if (d->m_groupBox)
|
||||||
m_buffer = d->m_groupBox->isChecked();
|
m_buffer = d->m_groupBox->isChecked();
|
||||||
|
return m_buffer != old;
|
||||||
}
|
}
|
||||||
|
|
||||||
void BoolAspect::bufferToGui()
|
void BoolAspect::bufferToGui()
|
||||||
@@ -1603,8 +1612,9 @@ void SelectionAspect::addToLayout(Layouting::LayoutItem &parent)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void SelectionAspect::guiToBuffer()
|
bool SelectionAspect::guiToBuffer()
|
||||||
{
|
{
|
||||||
|
const int old = m_buffer;
|
||||||
switch (d->m_displayStyle) {
|
switch (d->m_displayStyle) {
|
||||||
case DisplayStyle::RadioButtons:
|
case DisplayStyle::RadioButtons:
|
||||||
if (d->m_buttonGroup)
|
if (d->m_buttonGroup)
|
||||||
@@ -1615,6 +1625,7 @@ void SelectionAspect::guiToBuffer()
|
|||||||
m_buffer = d->m_comboBox->currentIndex();
|
m_buffer = d->m_comboBox->currentIndex();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
return m_buffer != old;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SelectionAspect::bufferToGui()
|
void SelectionAspect::bufferToGui()
|
||||||
@@ -1806,8 +1817,9 @@ void MultiSelectionAspect::bufferToGui()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void MultiSelectionAspect::guiToBuffer()
|
bool MultiSelectionAspect::guiToBuffer()
|
||||||
{
|
{
|
||||||
|
const QStringList old = m_buffer;
|
||||||
if (d->m_listView) {
|
if (d->m_listView) {
|
||||||
m_buffer.clear();
|
m_buffer.clear();
|
||||||
const int n = d->m_listView->count();
|
const int n = d->m_listView->count();
|
||||||
@@ -1818,6 +1830,7 @@ void MultiSelectionAspect::guiToBuffer()
|
|||||||
m_buffer.append(item->text());
|
m_buffer.append(item->text());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return m_buffer != old;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -1869,10 +1882,12 @@ void IntegerAspect::addToLayout(Layouting::LayoutItem &parent)
|
|||||||
this, &IntegerAspect::handleGuiChanged);
|
this, &IntegerAspect::handleGuiChanged);
|
||||||
}
|
}
|
||||||
|
|
||||||
void IntegerAspect::guiToBuffer()
|
bool IntegerAspect::guiToBuffer()
|
||||||
{
|
{
|
||||||
|
const qint64 old = m_buffer;
|
||||||
if (d->m_spinBox)
|
if (d->m_spinBox)
|
||||||
m_buffer = d->m_spinBox->value() * d->m_displayScaleFactor;
|
m_buffer = d->m_spinBox->value() * d->m_displayScaleFactor;
|
||||||
|
return m_buffer != old;
|
||||||
}
|
}
|
||||||
|
|
||||||
void IntegerAspect::bufferToGui()
|
void IntegerAspect::bufferToGui()
|
||||||
@@ -1968,10 +1983,12 @@ void DoubleAspect::addToLayout(LayoutItem &builder)
|
|||||||
this, &DoubleAspect::handleGuiChanged);
|
this, &DoubleAspect::handleGuiChanged);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DoubleAspect::guiToBuffer()
|
bool DoubleAspect::guiToBuffer()
|
||||||
{
|
{
|
||||||
|
const double old = m_buffer;
|
||||||
if (d->m_spinBox)
|
if (d->m_spinBox)
|
||||||
m_buffer = d->m_spinBox->value();
|
m_buffer = d->m_spinBox->value();
|
||||||
|
return m_buffer != old;
|
||||||
}
|
}
|
||||||
|
|
||||||
void DoubleAspect::bufferToGui()
|
void DoubleAspect::bufferToGui()
|
||||||
@@ -2447,46 +2464,61 @@ BaseAspect::Data::Ptr BaseAspect::extractData() const
|
|||||||
No-op otherwise.
|
No-op otherwise.
|
||||||
*/
|
*/
|
||||||
void BaseAspect::bufferToGui()
|
void BaseAspect::bufferToGui()
|
||||||
{}
|
{
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Mirrors the data stored in GUI element if they are already created to
|
Mirrors the data stored in GUI element if they are already created to
|
||||||
the internal volatile value.
|
the internal volatile value.
|
||||||
|
|
||||||
No-op otherwise.
|
No-op otherwise.
|
||||||
|
|
||||||
|
\return true when the buffered volatile value changed.
|
||||||
*/
|
*/
|
||||||
void BaseAspect::guiToBuffer()
|
bool BaseAspect::guiToBuffer()
|
||||||
{}
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Mirrors buffered volatile value to the internal value.
|
Mirrors buffered volatile value to the internal value.
|
||||||
This function is used for \c apply().
|
This function is used for \c apply().
|
||||||
|
|
||||||
|
\return true when the internal value changed.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
void BaseAspect::bufferToInternal()
|
bool BaseAspect::bufferToInternal()
|
||||||
{}
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void BaseAspect::internalToBuffer()
|
bool BaseAspect::internalToBuffer()
|
||||||
{}
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Applies common postprocessing like macro expansion.
|
Applies common postprocessing like macro expansion.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
void BaseAspect::internalToExternal()
|
bool BaseAspect::internalToExternal()
|
||||||
{}
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Mirrors externally visible value to internal volatile value.
|
Mirrors externally visible value to internal volatile value.
|
||||||
*/
|
*/
|
||||||
void BaseAspect::externalToInternal()
|
bool BaseAspect::externalToInternal()
|
||||||
{}
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
void BaseAspect::handleGuiChanged()
|
void BaseAspect::handleGuiChanged()
|
||||||
{
|
{
|
||||||
guiToBuffer();
|
if (guiToBuffer())
|
||||||
emit volatileValueChanged();
|
volatileValueChanged();
|
||||||
if (isAutoApply())
|
if (isAutoApply())
|
||||||
apply();
|
apply();
|
||||||
}
|
}
|
||||||
|
@@ -165,17 +165,18 @@ public:
|
|||||||
static QSettings *settings();
|
static QSettings *settings();
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void changed();
|
void changed(); // "internal"
|
||||||
void volatileValueChanged();
|
void volatileValueChanged();
|
||||||
|
void externalValueChanged();
|
||||||
void labelLinkActivated(const QString &link);
|
void labelLinkActivated(const QString &link);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual void internalToBuffer();
|
virtual bool internalToBuffer();
|
||||||
virtual void bufferToInternal();
|
virtual bool bufferToInternal();
|
||||||
virtual void bufferToGui();
|
virtual void bufferToGui();
|
||||||
virtual void guiToBuffer();
|
virtual bool guiToBuffer();
|
||||||
virtual void internalToExternal();
|
virtual bool internalToExternal();
|
||||||
virtual void externalToInternal();
|
virtual bool externalToInternal();
|
||||||
|
|
||||||
virtual void handleGuiChanged();
|
virtual void handleGuiChanged();
|
||||||
|
|
||||||
@@ -247,10 +248,14 @@ public:
|
|||||||
|
|
||||||
void setValue(const ValueType &value)
|
void setValue(const ValueType &value)
|
||||||
{
|
{
|
||||||
|
const bool changes = m_internal != value;
|
||||||
m_internal = value;
|
m_internal = value;
|
||||||
internalToBuffer();
|
if (internalToBuffer())
|
||||||
|
emit volatileValueChanged();
|
||||||
bufferToGui();
|
bufferToGui();
|
||||||
internalToExternal();
|
internalToExternal();
|
||||||
|
if (changes)
|
||||||
|
emit changed();
|
||||||
}
|
}
|
||||||
|
|
||||||
void setValueQuietly(const ValueType &value)
|
void setValueQuietly(const ValueType &value)
|
||||||
@@ -281,24 +286,36 @@ protected:
|
|||||||
return m_internal != m_buffer;
|
return m_internal != m_buffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
void internalToBuffer() override
|
bool internalToBuffer() override
|
||||||
{
|
{
|
||||||
|
if (m_buffer == m_internal)
|
||||||
|
return false;
|
||||||
m_buffer = m_internal;
|
m_buffer = m_internal;
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void bufferToInternal() override
|
bool bufferToInternal() override
|
||||||
{
|
{
|
||||||
|
if (m_buffer == m_internal)
|
||||||
|
return false;
|
||||||
m_internal = m_buffer;
|
m_internal = m_buffer;
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void internalToExternal() override
|
bool internalToExternal() override
|
||||||
{
|
{
|
||||||
|
if (m_external == m_internal)
|
||||||
|
return false;
|
||||||
m_external = m_internal;
|
m_external = m_internal;
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void externalToInternal() override
|
bool externalToInternal() override
|
||||||
{
|
{
|
||||||
|
if (m_external == m_internal)
|
||||||
|
return false;
|
||||||
m_internal = m_external;
|
m_internal = m_external;
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
QVariant variantValue() const override
|
QVariant variantValue() const override
|
||||||
@@ -357,7 +374,7 @@ public:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
void bufferToGui() override;
|
void bufferToGui() override;
|
||||||
void guiToBuffer() override;
|
bool guiToBuffer() override;
|
||||||
|
|
||||||
std::unique_ptr<Internal::BoolAspectPrivate> d;
|
std::unique_ptr<Internal::BoolAspectPrivate> d;
|
||||||
};
|
};
|
||||||
@@ -374,7 +391,7 @@ public:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
void bufferToGui() override;
|
void bufferToGui() override;
|
||||||
void guiToBuffer() override;
|
bool guiToBuffer() override;
|
||||||
|
|
||||||
std::unique_ptr<Internal::ColorAspectPrivate> d;
|
std::unique_ptr<Internal::ColorAspectPrivate> d;
|
||||||
};
|
};
|
||||||
@@ -422,7 +439,7 @@ public:
|
|||||||
|
|
||||||
protected:
|
protected:
|
||||||
void bufferToGui() override;
|
void bufferToGui() override;
|
||||||
void guiToBuffer() override;
|
bool guiToBuffer() override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::unique_ptr<Internal::SelectionAspectPrivate> d;
|
std::unique_ptr<Internal::SelectionAspectPrivate> d;
|
||||||
@@ -446,7 +463,7 @@ public:
|
|||||||
|
|
||||||
protected:
|
protected:
|
||||||
void bufferToGui() override;
|
void bufferToGui() override;
|
||||||
void guiToBuffer() override;
|
bool guiToBuffer() override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::unique_ptr<Internal::MultiSelectionAspectPrivate> d;
|
std::unique_ptr<Internal::MultiSelectionAspectPrivate> d;
|
||||||
@@ -522,10 +539,10 @@ signals:
|
|||||||
|
|
||||||
protected:
|
protected:
|
||||||
void bufferToGui() override;
|
void bufferToGui() override;
|
||||||
void guiToBuffer() override;
|
bool guiToBuffer() override;
|
||||||
|
|
||||||
void internalToBuffer() override;
|
bool internalToBuffer() override;
|
||||||
void bufferToInternal() override;
|
bool bufferToInternal() override;
|
||||||
|
|
||||||
std::unique_ptr<Internal::StringAspectPrivate> d;
|
std::unique_ptr<Internal::StringAspectPrivate> d;
|
||||||
};
|
};
|
||||||
@@ -573,7 +590,7 @@ public:
|
|||||||
|
|
||||||
protected:
|
protected:
|
||||||
void bufferToGui() override;
|
void bufferToGui() override;
|
||||||
void guiToBuffer() override;
|
bool guiToBuffer() override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::unique_ptr<Internal::IntegerAspectPrivate> d;
|
std::unique_ptr<Internal::IntegerAspectPrivate> d;
|
||||||
@@ -597,7 +614,7 @@ public:
|
|||||||
|
|
||||||
protected:
|
protected:
|
||||||
void bufferToGui() override;
|
void bufferToGui() override;
|
||||||
void guiToBuffer() override;
|
bool guiToBuffer() override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::unique_ptr<Internal::DoubleAspectPrivate> d;
|
std::unique_ptr<Internal::DoubleAspectPrivate> d;
|
||||||
|
@@ -31,7 +31,7 @@ public:
|
|||||||
void writeSettings() const override;
|
void writeSettings() const override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void guiToBuffer() override;
|
bool guiToBuffer() override;
|
||||||
void bufferToGui() override;
|
void bufferToGui() override;
|
||||||
|
|
||||||
SourcePathMapAspectPrivate *d = nullptr;
|
SourcePathMapAspectPrivate *d = nullptr;
|
||||||
|
@@ -470,10 +470,12 @@ void SourcePathMapAspect::addToLayout(Layouting::LayoutItem &parent)
|
|||||||
parent.addItem(d->m_widget.data());
|
parent.addItem(d->m_widget.data());
|
||||||
}
|
}
|
||||||
|
|
||||||
void SourcePathMapAspect::guiToBuffer()
|
bool SourcePathMapAspect::guiToBuffer()
|
||||||
{
|
{
|
||||||
|
const SourcePathMap old = m_buffer;
|
||||||
if (d->m_widget)
|
if (d->m_widget)
|
||||||
m_buffer = d->m_widget->sourcePathMap();
|
m_buffer = d->m_widget->sourcePathMap();
|
||||||
|
return m_buffer != old;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SourcePathMapAspect::bufferToGui()
|
void SourcePathMapAspect::bufferToGui()
|
||||||
|
@@ -151,7 +151,7 @@ void SuppressionAspect::addToLayout(Layouting::LayoutItem &parent)
|
|||||||
|
|
||||||
void SuppressionAspect::fromMap(const QVariantMap &map)
|
void SuppressionAspect::fromMap(const QVariantMap &map)
|
||||||
{
|
{
|
||||||
BaseAspect::fromMap(map);
|
BaseAspect::fromMap(map); // FIXME Looks wrong, as it skips the intermediate level
|
||||||
}
|
}
|
||||||
|
|
||||||
void SuppressionAspect::toMap(QVariantMap &map) const
|
void SuppressionAspect::toMap(QVariantMap &map) const
|
||||||
@@ -159,11 +159,13 @@ void SuppressionAspect::toMap(QVariantMap &map) const
|
|||||||
BaseAspect::toMap(map);
|
BaseAspect::toMap(map);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SuppressionAspect::guiToBuffer()
|
bool SuppressionAspect::guiToBuffer()
|
||||||
{
|
{
|
||||||
|
const FilePaths old = m_buffer;
|
||||||
m_buffer.clear();
|
m_buffer.clear();
|
||||||
for (int i = 0; i < d->m_model.rowCount(); ++i)
|
for (int i = 0; i < d->m_model.rowCount(); ++i)
|
||||||
m_buffer.append(FilePath::fromUserInput(d->m_model.item(i)->text()));
|
m_buffer.append(FilePath::fromUserInput(d->m_model.item(i)->text()));
|
||||||
|
return m_buffer != old;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SuppressionAspect::bufferToGui()
|
void SuppressionAspect::bufferToGui()
|
||||||
|
@@ -29,7 +29,7 @@ public:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
void bufferToGui() override;
|
void bufferToGui() override;
|
||||||
void guiToBuffer() override;
|
bool guiToBuffer() override;
|
||||||
|
|
||||||
friend class ValgrindBaseSettings;
|
friend class ValgrindBaseSettings;
|
||||||
SuppressionAspectPrivate *d = nullptr;
|
SuppressionAspectPrivate *d = nullptr;
|
||||||
|
Reference in New Issue
Block a user