Improve restrict dimension dialog. Disable not available combinations.
This commit is contained in:
parent
2b7769c80e
commit
4c0edca64a
|
@ -7,6 +7,7 @@
|
|||
- New option "Don't use the native file dialog".
|
||||
- Improve the layout option "Auto crop unused width".
|
||||
- Improve multisize measurements format. Allow decimal step 0.5.
|
||||
- Improve restrict dimension dialog. Disable not available combinations.
|
||||
|
||||
# Version 0.7.41 Dec 4, 2020
|
||||
- Bug fixes.
|
||||
|
|
|
@ -387,7 +387,7 @@ void DialogRestrictDimension::InitTable()
|
|||
ui->tableWidget->blockSignals(false);
|
||||
|
||||
RefreshTable();
|
||||
ui->tableWidget->selectRow(0);
|
||||
ui->tableWidget->selectRow(StartRow());
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
|
@ -415,11 +415,11 @@ void DialogRestrictDimension::RefreshTable()
|
|||
{
|
||||
if (m_dimensions.size() >= 3)
|
||||
{
|
||||
MeasurementDimension_p dimensionA = m_dimensions.at(1);
|
||||
basesRow = dimensionA->ValidBases();
|
||||
MeasurementDimension_p dimensionB = m_dimensions.at(1);
|
||||
basesRow = dimensionB->ValidBases();
|
||||
|
||||
MeasurementDimension_p dimensionB = m_dimensions.at(2);
|
||||
basesColumn = dimensionB->ValidBases();
|
||||
MeasurementDimension_p dimensionC = m_dimensions.at(2);
|
||||
basesColumn = dimensionC->ValidBases();
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -454,6 +454,7 @@ void DialogRestrictDimension::AddCell(int row, int column, qreal rowValue, qreal
|
|||
qreal base2 = 0;
|
||||
MeasurementDimension_p dimension;
|
||||
QVector<qreal> bases;
|
||||
QVector<qreal> validRows;
|
||||
|
||||
if (m_oneDimesionRestriction)
|
||||
{
|
||||
|
@ -461,6 +462,7 @@ void DialogRestrictDimension::AddCell(int row, int column, qreal rowValue, qreal
|
|||
|
||||
if (m_dimensions.size() >= 2)
|
||||
{
|
||||
validRows = m_dimensions.at(0)->ValidBases();
|
||||
dimension = m_dimensions.at(1);
|
||||
bases = dimension->ValidBases();
|
||||
}
|
||||
|
@ -472,6 +474,7 @@ void DialogRestrictDimension::AddCell(int row, int column, qreal rowValue, qreal
|
|||
|
||||
if (m_dimensions.size() >= 3)
|
||||
{
|
||||
validRows = DimensionRestrictedValues(m_dimensions.at(1));
|
||||
dimension = m_dimensions.at(2);
|
||||
bases = dimension->ValidBases();
|
||||
}
|
||||
|
@ -494,16 +497,27 @@ void DialogRestrictDimension::AddCell(int row, int column, qreal rowValue, qreal
|
|||
}
|
||||
}
|
||||
|
||||
const bool leftRestriction = columnValue >= min;
|
||||
const bool rightRestriction = columnValue <= max;
|
||||
|
||||
if (leftRestriction && rightRestriction)
|
||||
if (validRows.contains(rowValue))
|
||||
{
|
||||
item->setIcon(QIcon(QStringLiteral("://icon/24x24/star.png")));
|
||||
const bool leftRestriction = columnValue >= min;
|
||||
const bool rightRestriction = columnValue <= max;
|
||||
|
||||
if (leftRestriction && rightRestriction)
|
||||
{
|
||||
item->setIcon(QIcon(QStringLiteral("://icon/24x24/star.png")));
|
||||
}
|
||||
else
|
||||
{
|
||||
item->setIcon(QIcon(QStringLiteral("://icon/24x24/close.png")));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
item->setIcon(QIcon(QStringLiteral("://icon/24x24/close.png")));
|
||||
|
||||
Qt::ItemFlags flags = item->flags();
|
||||
flags &= ~(Qt::ItemIsEnabled);
|
||||
item->setFlags(flags);
|
||||
}
|
||||
|
||||
// set the item non-editable (view only), and non-selectable
|
||||
|
@ -653,3 +667,57 @@ auto DialogRestrictDimension::DimensionLabels(const QVector<qreal> &bases,
|
|||
|
||||
return labels;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
auto DialogRestrictDimension::DimensionRestrictedValues(const MeasurementDimension_p &dimension) const -> QVector<qreal>
|
||||
{
|
||||
QPair<qreal, qreal> restriction;
|
||||
|
||||
if (not m_oneDimesionRestriction)
|
||||
{
|
||||
qreal base1 = ui->comboBoxDimensionA->currentData().toDouble();
|
||||
restriction = m_restrictions.value(VMeasurement::CorrectionHash(base1), QPair<qreal, qreal>(0, 0));
|
||||
}
|
||||
|
||||
const QVector<qreal> bases = dimension->ValidBases();
|
||||
|
||||
qreal min = bases.indexOf(restriction.first) != -1 ? restriction.first : dimension->MinValue();
|
||||
qreal max = bases.indexOf(restriction.second) != -1 ? restriction.second : dimension->MaxValue();
|
||||
|
||||
if (min > max)
|
||||
{
|
||||
min = dimension->MinValue();
|
||||
max = dimension->MaxValue();
|
||||
}
|
||||
|
||||
return VAbstartMeasurementDimension::ValidBases(min, max, dimension->Step());
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
auto DialogRestrictDimension::StartRow() const -> int
|
||||
{
|
||||
if (m_oneDimesionRestriction)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
QVector<qreal> basesRow;
|
||||
|
||||
if (m_dimensions.size() >= 3)
|
||||
{
|
||||
MeasurementDimension_p dimensionB = m_dimensions.at(1);
|
||||
basesRow = dimensionB->ValidBases();
|
||||
|
||||
QVector<qreal> validRows = DimensionRestrictedValues(dimensionB);
|
||||
|
||||
for(int i=0; i < basesRow.size(); ++i)
|
||||
{
|
||||
if (validRows.contains(basesRow.at(i)))
|
||||
{
|
||||
return i;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -84,6 +84,8 @@ private:
|
|||
void FillBases(const QVector<qreal> &bases, const MeasurementDimension_p &dimension, QComboBox *control) const;
|
||||
|
||||
auto DimensionLabels(const QVector<qreal> &bases, const MeasurementDimension_p &dimension) const -> QStringList;
|
||||
auto DimensionRestrictedValues(const MeasurementDimension_p &dimension) const -> QVector<qreal>;
|
||||
auto StartRow() const -> int;
|
||||
};
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
|
|
|
@ -39,10 +39,17 @@ void VDecorationAligningDelegate::paint(QPainter *painter, const QStyleOptionVie
|
|||
{
|
||||
QIcon icon = QIcon(qvariant_cast<QIcon>(index.data(Qt::DecorationRole)));
|
||||
|
||||
if (option.state & QStyle::State_Selected)
|
||||
if ((option.state & QStyle::State_Selected) != 0U)
|
||||
{
|
||||
painter->fillRect(option.rect, option.palette.highlight());
|
||||
}
|
||||
|
||||
icon.paint(painter, option.rect, m_alignment);
|
||||
if ((index.flags() & Qt::ItemIsEnabled) != 0U)
|
||||
{
|
||||
icon.paint(painter, option.rect, m_alignment);
|
||||
}
|
||||
else
|
||||
{
|
||||
icon.paint(painter, option.rect, m_alignment, QIcon::Disabled);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user