Utils: Consolidate some duplicated code in aspect implementations

Change-Id: Iad6b81d13705ce6ad752f2855fb47ea038ffe581
Reviewed-by: Marcus Tillmanns <marcus.tillmanns@qt.io>
This commit is contained in:
hjk
2023-07-21 09:32:18 +02:00
parent 4267d6ad81
commit 6847c7c5ae
2 changed files with 41 additions and 67 deletions

View File

@@ -1205,42 +1205,28 @@ void StringAspect::addToLayout(LayoutItem &parent)
bool StringAspect::guiToBuffer() bool StringAspect::guiToBuffer()
{ {
const QString old = m_buffer; if (d->m_pathChooserDisplay)
switch (d->m_displayStyle) { return updateStorage(m_buffer, d->m_pathChooserDisplay->lineEdit()->text());
case PathChooserDisplay: if (d->m_lineEditDisplay)
if (d->m_pathChooserDisplay) return updateStorage(m_buffer, d->m_lineEditDisplay->text());
m_buffer = d->m_pathChooserDisplay->lineEdit()->text(); if (d->m_textEditDisplay)
break; return updateStorage(m_buffer, d->m_textEditDisplay->document()->toPlainText());
case LineEditDisplay: return false;
if (d->m_lineEditDisplay)
m_buffer = d->m_lineEditDisplay->text();
break;
case TextEditDisplay:
if (d->m_textEditDisplay)
m_buffer = d->m_textEditDisplay->document()->toPlainText();
case LabelDisplay:
break;
}
return m_buffer != old;
} }
bool 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; return updateStorage(m_internal, *tmp);
} else {
m_internal = m_buffer;
} }
return m_internal != old; return updateStorage(m_internal, m_buffer);
} }
bool StringAspect::internalToBuffer() bool StringAspect::internalToBuffer()
{ {
const QString old = m_buffer; const QString val = d->m_displayFilter ? d->m_displayFilter(m_internal) : m_internal;
m_buffer = d->m_displayFilter ? d->m_displayFilter(m_internal) : m_internal; return updateStorage(m_buffer, val);
return m_buffer != old;
} }
void StringAspect::bufferToGui() void StringAspect::bufferToGui()
@@ -1398,10 +1384,9 @@ void ColorAspect::addToLayout(Layouting::LayoutItem &parent)
bool ColorAspect::guiToBuffer() bool ColorAspect::guiToBuffer()
{ {
const QColor old = m_buffer;
if (d->m_colorButton) if (d->m_colorButton)
m_buffer = d->m_colorButton->color(); return updateStorage(m_buffer, d->m_colorButton->color());
return m_buffer != old; return false;
} }
void ColorAspect::bufferToGui() void ColorAspect::bufferToGui()
@@ -1630,19 +1615,12 @@ bool SelectionAspect::guiToBuffer()
void SelectionAspect::bufferToGui() void SelectionAspect::bufferToGui()
{ {
switch (d->m_displayStyle) { if (d->m_buttonGroup) {
case DisplayStyle::RadioButtons: { QAbstractButton *button = d->m_buttonGroup->button(m_buffer);
if (d->m_buttonGroup) { QTC_ASSERT(button, return);
QAbstractButton *button = d->m_buttonGroup->button(m_buffer); button->setChecked(true);
QTC_ASSERT(button, return); } else if (d->m_comboBox) {
button->setChecked(true); d->m_comboBox->setCurrentIndex(m_buffer);
}
break;
}
case DisplayStyle::ComboBox:
if (d->m_comboBox)
d->m_comboBox->setCurrentIndex(m_buffer);
break;
} }
} }
@@ -1819,18 +1797,18 @@ void MultiSelectionAspect::bufferToGui()
bool MultiSelectionAspect::guiToBuffer() bool MultiSelectionAspect::guiToBuffer()
{ {
const QStringList old = m_buffer;
if (d->m_listView) { if (d->m_listView) {
m_buffer.clear(); QStringList val;
const int n = d->m_listView->count(); const int n = d->m_listView->count();
QTC_CHECK(n == d->m_allValues.size()); QTC_CHECK(n == d->m_allValues.size());
for (int i = 0; i != n; ++i) { for (int i = 0; i != n; ++i) {
auto item = d->m_listView->item(i); auto item = d->m_listView->item(i);
if (item->checkState() == Qt::Checked) if (item->checkState() == Qt::Checked)
m_buffer.append(item->text()); val.append(item->text());
} }
return updateStorage(m_buffer, val);
} }
return m_buffer != old; return false;
} }
@@ -1884,10 +1862,9 @@ void IntegerAspect::addToLayout(Layouting::LayoutItem &parent)
bool 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; return updateStorage(m_buffer, d->m_spinBox->value() * d->m_displayScaleFactor);
return m_buffer != old; return false;
} }
void IntegerAspect::bufferToGui() void IntegerAspect::bufferToGui()
@@ -1985,10 +1962,9 @@ void DoubleAspect::addToLayout(LayoutItem &builder)
bool DoubleAspect::guiToBuffer() bool DoubleAspect::guiToBuffer()
{ {
const double old = m_buffer;
if (d->m_spinBox) if (d->m_spinBox)
m_buffer = d->m_spinBox->value(); return updateStorage(m_buffer, d->m_spinBox->value());
return m_buffer != old; return false;
} }
void DoubleAspect::bufferToGui() void DoubleAspect::bufferToGui()

View File

@@ -214,6 +214,16 @@ protected:
static void saveToMap(QVariantMap &data, const QVariant &value, static void saveToMap(QVariantMap &data, const QVariant &value,
const QVariant &defaultValue, const QString &key); const QVariant &defaultValue, const QString &key);
protected:
template <class Value>
bool updateStorage(Value &target, const Value &val)
{
if (target == val)
return false;
target = val;
return true;
}
private: private:
std::unique_ptr<Internal::BaseAspectPrivate> d; std::unique_ptr<Internal::BaseAspectPrivate> d;
}; };
@@ -288,34 +298,22 @@ protected:
bool internalToBuffer() override bool internalToBuffer() override
{ {
if (m_buffer == m_internal) return updateStorage(m_buffer, m_internal);
return false;
m_buffer = m_internal;
return true;
} }
bool bufferToInternal() override bool bufferToInternal() override
{ {
if (m_buffer == m_internal) return updateStorage(m_internal, m_buffer);
return false;
m_internal = m_buffer;
return true;
} }
bool internalToExternal() override bool internalToExternal() override
{ {
if (m_external == m_internal) return updateStorage(m_external, m_internal);
return false;
m_external = m_internal;
return true;
} }
bool externalToInternal() override bool externalToInternal() override
{ {
if (m_external == m_internal) return updateStorage(m_internal, m_external);
return false;
m_internal = m_external;
return true;
} }
QVariant variantValue() const override QVariant variantValue() const override