Fix alias validation bug.

This commit is contained in:
Roman Telezhynskyi 2020-11-07 11:18:13 +02:00
parent 061c9b502a
commit 3feddb9ce9
21 changed files with 307 additions and 110 deletions

View file

@ -244,7 +244,8 @@ QString DialogArc::GetNotes() const
//---------------------------------------------------------------------------------------------------------------------
void DialogArc::SetAliasSuffix(const QString &alias)
{
ui->lineEditAlias->setText(alias);
originAliasSuffix = alias;
ui->lineEditAlias->setText(originAliasSuffix);
ValidateAlias();
}
@ -361,7 +362,8 @@ void DialogArc::ValidateAlias()
VArc arc;
arc.SetAliasSuffix(GetAliasSuffix());
if (not GetAliasSuffix().isEmpty() &&
(not rx.match(arc.GetAlias()).hasMatch() || not data->IsUnique(arc.GetAlias())))
(not rx.match(arc.GetAlias()).hasMatch() ||
(originAliasSuffix != GetAliasSuffix() && not data->IsUnique(arc.GetAlias()))))
{
flagAlias = false;
ChangeColor(ui->labelAlias, errorColor);

View file

@ -146,6 +146,8 @@ private:
qreal angleF1;
qreal angleF2;
QString originAliasSuffix{};
void EvalRadius();
void EvalF();
};

View file

@ -270,7 +270,8 @@ QString DialogArcWithLength::GetNotes() const
//---------------------------------------------------------------------------------------------------------------------
void DialogArcWithLength::SetAliasSuffix(const QString &alias)
{
ui->lineEditAlias->setText(alias);
originAliasSuffix = alias;
ui->lineEditAlias->setText(originAliasSuffix);
ValidateAlias();
}
@ -398,7 +399,8 @@ void DialogArcWithLength::ValidateAlias()
VArc arc;
arc.SetAliasSuffix(GetAliasSuffix());
if (not GetAliasSuffix().isEmpty() &&
(not rx.match(arc.GetAlias()).hasMatch() || not data->IsUnique(arc.GetAlias())))
(not rx.match(arc.GetAlias()).hasMatch() ||
(originAliasSuffix != GetAliasSuffix() && not data->IsUnique(arc.GetAlias()))))
{
flagAlias = false;
ChangeColor(ui->labelAlias, errorColor);

View file

@ -137,6 +137,8 @@ private:
int formulaBaseHeightF1;
int formulaBaseHeightLength;
QString originAliasSuffix{};
void Radius();
void Length();
void EvalF();

View file

@ -109,7 +109,8 @@ void DialogCubicBezier::SetSpline(const VCubicBezier &spline)
ui->lineEditSplineName->setText(qApp->TrVars()->VarToUser(spl.name()));
ui->doubleSpinBoxApproximationScale->setValue(spl.GetApproximationScale());
ui->lineEditAlias->setText(spl.GetAliasSuffix());
originAliasSuffix = spl.GetAliasSuffix();
ui->lineEditAlias->setText(originAliasSuffix);
ValidateAlias();
auto path = qobject_cast<VisToolCubicBezier *>(vis);
@ -270,7 +271,8 @@ void DialogCubicBezier::ValidateAlias()
VCubicBezier spline = spl;
spline.SetAliasSuffix(ui->lineEditAlias->text());
if (not ui->lineEditAlias->text().isEmpty() &&
(not rx.match(spline.GetAlias()).hasMatch() || not data->IsUnique(spline.GetAlias())))
(not rx.match(spline.GetAlias()).hasMatch() ||
(originAliasSuffix != ui->lineEditAlias->text() && not data->IsUnique(spline.GetAlias()))))
{
flagAlias = false;
ChangeColor(ui->labelAlias, errorColor);

View file

@ -83,6 +83,8 @@ private:
bool flagError;
bool flagAlias{true};
QString originAliasSuffix{};
const QSharedPointer<VPointF> GetP1() const;
const QSharedPointer<VPointF> GetP2() const;
const QSharedPointer<VPointF> GetP3() const;

View file

@ -115,7 +115,8 @@ void DialogCubicBezierPath::SetPath(const VCubicBezierPath &value)
ui->lineEditSplPathName->setText(qApp->TrVars()->VarToUser(path.name()));
ui->doubleSpinBoxApproximationScale->setValue(path.GetApproximationScale());
ui->lineEditAlias->setText(path.GetAliasSuffix());
originAliasSuffix = path.GetAliasSuffix();
ui->lineEditAlias->setText(originAliasSuffix);
ValidateAlias();
ChangeCurrentData(ui->comboBoxPenStyle, path.GetPenStyle());
@ -259,7 +260,8 @@ void DialogCubicBezierPath::ValidateAlias()
VCubicBezierPath tempPath = path;
tempPath.SetAliasSuffix(ui->lineEditAlias->text());
if (not ui->lineEditAlias->text().isEmpty() &&
(not rx.match(tempPath.GetAlias()).hasMatch() || not data->IsUnique(tempPath.GetAlias())))
(not rx.match(tempPath.GetAlias()).hasMatch() ||
(originAliasSuffix != ui->lineEditAlias->text() && not data->IsUnique(tempPath.GetAlias()))))
{
flagAlias = false;
ChangeColor(ui->labelAlias, errorColor);

View file

@ -83,6 +83,8 @@ private:
bool flagError;
bool flagAlias{true};
QString originAliasSuffix{};
void NewItem(const VPointF &point);
void DataPoint(const VPointF &p);
void SavePath();

View file

@ -209,46 +209,37 @@ void DialogCutArc::ArcChanged()
void DialogCutArc::ValidateAlias()
{
QRegularExpression rx(NameRegExp());
VArc arc1;
arc1.SetAliasSuffix(GetAliasSuffix1());
if (not GetAliasSuffix1().isEmpty() &&
(not rx.match(arc1.GetAlias()).hasMatch() || not data->IsUnique(arc1.GetAlias())))
{
flagAlias1 = false;
ChangeColor(ui->labelAlias1, errorColor);
}
else
{
flagAlias1 = true;
ChangeColor(ui->labelAlias1, OkColor(this));
}
VArc arc2;
arc2.SetAliasSuffix(GetAliasSuffix2());
if (not GetAliasSuffix2().isEmpty() && not data->IsUnique(arc2.GetAlias()))
{
flagAlias2 = false;
ChangeColor(ui->labelAlias2, errorColor);
}
else
{
flagAlias2 = true;
ChangeColor(ui->labelAlias2, OkColor(this));
}
if (arc1.GetAlias() == arc2.GetAlias())
if (not GetAliasSuffix1().isEmpty() &&
(not rx.match(arc1.GetAlias()).hasMatch() ||
(originAliasSuffix2 != GetAliasSuffix1() && not data->IsUnique(arc1.GetAlias())) ||
arc1.GetAlias() == arc2.GetAlias()))
{
flagAlias1 = false;
ChangeColor(ui->labelAlias1, errorColor);
flagAlias2 = false;
ChangeColor(ui->labelAlias2, errorColor);
}
else
{
flagAlias1 = true;
ChangeColor(ui->labelAlias1, OkColor(this));
}
if (not GetAliasSuffix2().isEmpty() &&
(not rx.match(arc2.GetAlias()).hasMatch() ||
(originAliasSuffix2 != GetAliasSuffix2() && not data->IsUnique(arc2.GetAlias())) ||
arc1.GetAlias() == arc2.GetAlias()))
{
flagAlias2 = false;
ChangeColor(ui->labelAlias2, errorColor);
}
else
{
flagAlias2 = true;
ChangeColor(ui->labelAlias2, OkColor(this));
}
@ -338,7 +329,8 @@ QString DialogCutArc::GetNotes() const
//---------------------------------------------------------------------------------------------------------------------
void DialogCutArc::SetAliasSuffix1(const QString &alias)
{
ui->lineEditAlias1->setText(alias);
originAliasSuffix1 = alias;
ui->lineEditAlias1->setText(originAliasSuffix1);
ValidateAlias();
}
@ -351,7 +343,8 @@ QString DialogCutArc::GetAliasSuffix1() const
//---------------------------------------------------------------------------------------------------------------------
void DialogCutArc::SetAliasSuffix2(const QString &alias)
{
ui->lineEditAlias2->setText(alias);
originAliasSuffix2 = alias;
ui->lineEditAlias2->setText(originAliasSuffix2);
ValidateAlias();
}

View file

@ -110,6 +110,9 @@ private:
bool flagName;
bool flagAlias1{true};
bool flagAlias2{true};
QString originAliasSuffix1{};
QString originAliasSuffix2{};
};
//---------------------------------------------------------------------------------------------------------------------

View file

@ -216,46 +216,37 @@ void DialogCutSpline::SplineChanged()
void DialogCutSpline::ValidateAlias()
{
QRegularExpression rx(NameRegExp());
VSpline spl1;
spl1.SetAliasSuffix(GetAliasSuffix1());
if (not GetAliasSuffix1().isEmpty() &&
(not rx.match(spl1.GetAlias()).hasMatch() || not data->IsUnique(spl1.GetAlias())))
{
flagAlias1 = false;
ChangeColor(ui->labelAlias1, errorColor);
}
else
{
flagAlias1 = true;
ChangeColor(ui->labelAlias1, OkColor(this));
}
VSpline spl2;
spl2.SetAliasSuffix(GetAliasSuffix2());
if (not GetAliasSuffix2().isEmpty() && not data->IsUnique(spl2.GetAlias()))
{
flagAlias2 = false;
ChangeColor(ui->labelAlias2, errorColor);
}
else
{
flagAlias2 = true;
ChangeColor(ui->labelAlias2, OkColor(this));
}
if (spl1.GetAlias() == spl2.GetAlias())
if (not GetAliasSuffix1().isEmpty() &&
(not rx.match(spl1.GetAlias()).hasMatch() ||
(originAliasSuffix2 != GetAliasSuffix1() && not data->IsUnique(spl1.GetAlias())) ||
spl1.GetAlias() == spl2.GetAlias()))
{
flagAlias1 = false;
ChangeColor(ui->labelAlias1, errorColor);
flagAlias2 = false;
ChangeColor(ui->labelAlias2, errorColor);
}
else
{
flagAlias1 = true;
ChangeColor(ui->labelAlias1, OkColor(this));
}
if (not GetAliasSuffix2().isEmpty() &&
(not rx.match(spl2.GetAlias()).hasMatch() ||
(originAliasSuffix2 != GetAliasSuffix2() && not data->IsUnique(spl2.GetAlias())) ||
spl1.GetAlias() == spl2.GetAlias()))
{
flagAlias2 = false;
ChangeColor(ui->labelAlias2, errorColor);
}
else
{
flagAlias2 = true;
ChangeColor(ui->labelAlias2, OkColor(this));
}
@ -338,7 +329,8 @@ QString DialogCutSpline::GetNotes() const
//---------------------------------------------------------------------------------------------------------------------
void DialogCutSpline::SetAliasSuffix1(const QString &alias)
{
ui->lineEditAlias1->setText(alias);
originAliasSuffix1 = alias;
ui->lineEditAlias1->setText(originAliasSuffix1);
ValidateAlias();
}
@ -351,7 +343,8 @@ QString DialogCutSpline::GetAliasSuffix1() const
//---------------------------------------------------------------------------------------------------------------------
void DialogCutSpline::SetAliasSuffix2(const QString &alias)
{
ui->lineEditAlias2->setText(alias);
originAliasSuffix2 = alias;
ui->lineEditAlias2->setText(originAliasSuffix2);
ValidateAlias();
}

View file

@ -109,6 +109,9 @@ private:
bool flagName;
bool flagAlias1{true};
bool flagAlias2{true};
QString originAliasSuffix1{};
QString originAliasSuffix2{};
};
//---------------------------------------------------------------------------------------------------------------------

View file

@ -216,46 +216,37 @@ void DialogCutSplinePath::SplinePathChanged()
void DialogCutSplinePath::ValidateAlias()
{
QRegularExpression rx(NameRegExp());
VSplinePath path1;
path1.SetAliasSuffix(GetAliasSuffix1());
if (not GetAliasSuffix1().isEmpty() &&
(not rx.match(path1.GetAlias()).hasMatch() || not data->IsUnique(path1.GetAlias())))
{
flagAlias1 = false;
ChangeColor(ui->labelAlias1, errorColor);
}
else
{
flagAlias1 = true;
ChangeColor(ui->labelAlias1, OkColor(this));
}
VSplinePath path2;
path2.SetAliasSuffix(GetAliasSuffix2());
if (not GetAliasSuffix2().isEmpty() && not data->IsUnique(path2.GetAlias()))
{
flagAlias2 = false;
ChangeColor(ui->labelAlias2, errorColor);
}
else
{
flagAlias2 = true;
ChangeColor(ui->labelAlias2, OkColor(this));
}
if (path1.GetAlias() == path2.GetAlias())
if (not GetAliasSuffix1().isEmpty() &&
(not rx.match(path1.GetAlias()).hasMatch() ||
(originAliasSuffix2 != GetAliasSuffix1() && not data->IsUnique(path1.GetAlias())) ||
path1.GetAlias() == path2.GetAlias()))
{
flagAlias1 = false;
ChangeColor(ui->labelAlias1, errorColor);
flagAlias2 = false;
ChangeColor(ui->labelAlias2, errorColor);
}
else
{
flagAlias1 = true;
ChangeColor(ui->labelAlias1, OkColor(this));
}
if (not GetAliasSuffix2().isEmpty() &&
(not rx.match(path2.GetAlias()).hasMatch() ||
(originAliasSuffix2 != GetAliasSuffix2() && not data->IsUnique(path2.GetAlias())) ||
path1.GetAlias() == path2.GetAlias()))
{
flagAlias2 = false;
ChangeColor(ui->labelAlias2, errorColor);
}
else
{
flagAlias2 = true;
ChangeColor(ui->labelAlias2, OkColor(this));
}
@ -338,7 +329,8 @@ QString DialogCutSplinePath::GetNotes() const
//---------------------------------------------------------------------------------------------------------------------
void DialogCutSplinePath::SetAliasSuffix1(const QString &alias)
{
ui->lineEditAlias1->setText(alias);
originAliasSuffix1 = alias;
ui->lineEditAlias1->setText(originAliasSuffix1);
ValidateAlias();
}
@ -351,7 +343,8 @@ QString DialogCutSplinePath::GetAliasSuffix1() const
//---------------------------------------------------------------------------------------------------------------------
void DialogCutSplinePath::SetAliasSuffix2(const QString &alias)
{
ui->lineEditAlias2->setText(alias);
originAliasSuffix2 = alias;
ui->lineEditAlias2->setText(originAliasSuffix2);
ValidateAlias();
}

View file

@ -108,6 +108,9 @@ private:
bool flagName;
bool flagAlias1{true};
bool flagAlias2{true};
QString originAliasSuffix1{};
QString originAliasSuffix2{};
};
//---------------------------------------------------------------------------------------------------------------------

View file

@ -603,7 +603,8 @@ void DialogEllipticalArc::ValidateAlias()
VEllipticalArc arc;
arc.SetAliasSuffix(GetAliasSuffix());
if (not GetAliasSuffix().isEmpty() &&
(not rx.match(arc.GetAlias()).hasMatch() || not data->IsUnique(arc.GetAlias())))
(not rx.match(arc.GetAlias()).hasMatch() ||
(originAliasSuffix != GetAliasSuffix() && not data->IsUnique(arc.GetAlias()))))
{
flagAlias = false;
ChangeColor(ui->labelAlias, errorColor);
@ -632,7 +633,8 @@ QString DialogEllipticalArc::GetNotes() const
//---------------------------------------------------------------------------------------------------------------------
void DialogEllipticalArc::SetAliasSuffix(const QString &alias)
{
ui->lineEditAlias->setText(alias);
originAliasSuffix = alias;
ui->lineEditAlias->setText(originAliasSuffix);
ValidateAlias();
}

View file

@ -173,6 +173,8 @@ private:
qreal angleF2;
qreal angleRotation;
QString originAliasSuffix{};
void EvalRadiuses();
void EvalAngles();
};

View file

@ -64,7 +64,6 @@
DialogFlippingByAxis::DialogFlippingByAxis(const VContainer *data, quint32 toolId, QWidget *parent)
: DialogTool(data, toolId, parent),
ui(new Ui::DialogFlippingByAxis),
objects(),
stage1(true),
m_suffix(),
flagName(true),
@ -87,6 +86,9 @@ DialogFlippingByAxis::DialogFlippingByAxis(const VContainer *data, quint32 toolI
connect(ui->comboBoxOriginPoint, &QComboBox::currentTextChanged,
this, &DialogFlippingByAxis::PointChanged);
connect(ui->listWidget, &QListWidget::currentRowChanged, this, &DialogFlippingByAxis::ShowSourceDetails);
connect(ui->lineEditAlias, &QLineEdit::textEdited, this, &DialogFlippingByAxis::AliasChanged);
vis = new VisToolFlippingByAxis(data);
ui->tabWidget->setCurrentIndex(0);
@ -147,12 +149,6 @@ void DialogFlippingByAxis::SetSuffix(const QString &value)
ui->lineEditSuffix->setText(value);
}
//---------------------------------------------------------------------------------------------------------------------
QVector<quint32> DialogFlippingByAxis::GetObjects() const
{
return ConvertToVector(objects);
}
//---------------------------------------------------------------------------------------------------------------------
QString DialogFlippingByAxis::GetVisibilityGroupName() const
{
@ -201,7 +197,7 @@ void DialogFlippingByAxis::ShowDialog(bool click)
{
if (stage1 && not click)
{
if (objects.isEmpty())
if (sourceObjects.isEmpty())
{
return;
}
@ -214,7 +210,7 @@ void DialogFlippingByAxis::ShowDialog(bool click)
VisToolFlippingByAxis *operation = qobject_cast<VisToolFlippingByAxis *>(vis);
SCASSERT(operation != nullptr)
operation->SetObjects(ConvertToVector(objects));
operation->SetObjects(SourceToObjects(sourceObjects));
operation->VisualMode();
scene->ToggleArcSelection(false);
@ -229,6 +225,8 @@ void DialogFlippingByAxis::ShowDialog(bool click)
qApp->getSceneView()->AllowRubberBand(false);
FillSourceList();
emit ToolTip(tr("Select origin point"));
}
else if (not stage1 && prepare && click)
@ -240,6 +238,19 @@ void DialogFlippingByAxis::ShowDialog(bool click)
}
}
//---------------------------------------------------------------------------------------------------------------------
QVector<SourceItem> DialogFlippingByAxis::GetSourceObjects() const
{
return sourceObjects;
}
//---------------------------------------------------------------------------------------------------------------------
void DialogFlippingByAxis::SetSourceObjects(const QVector<SourceItem> &value)
{
sourceObjects = value;
FillSourceList();
}
//---------------------------------------------------------------------------------------------------------------------
void DialogFlippingByAxis::ChosenObject(quint32 id, const SceneObject &type)
{
@ -247,7 +258,10 @@ void DialogFlippingByAxis::ChosenObject(quint32 id, const SceneObject &type)
{
if (type == SceneObject::Point)
{
if (objects.contains(id))
auto obj = std::find_if(sourceObjects.begin(), sourceObjects.end(),
[id](const SourceItem &sItem) { return sItem.id == id; });
if (obj != sourceObjects.end())
{
emit ToolTip(tr("Select origin point that is not part of the list of objects"));
return;
@ -272,16 +286,23 @@ void DialogFlippingByAxis::SelectedObject(bool selected, quint32 object, quint32
Q_UNUSED(tool)
if (stage1)
{
auto obj = std::find_if(sourceObjects.begin(), sourceObjects.end(),
[object](const SourceItem &sItem) { return sItem.id == object; });
if (selected)
{
if (not objects.contains(object))
if (obj == sourceObjects.cend())
{
objects.append(object);
SourceItem item;
item.id = object;
sourceObjects.append(item);
}
}
else
{
objects.removeOne(object);
if (obj != sourceObjects.end())
{
sourceObjects.erase(obj);
}
}
}
}
@ -297,6 +318,7 @@ void DialogFlippingByAxis::SuffixChanged()
{
flagName = false;
ChangeColor(ui->labelSuffix, errorColor);
ui->labelStatus->setText(tr("Invalid suffix"));
CheckState();
return;
}
@ -313,6 +335,7 @@ void DialogFlippingByAxis::SuffixChanged()
{
flagName = false;
ChangeColor(ui->labelSuffix, errorColor);
ui->labelStatus->setText(tr("Invalid suffix"));
CheckState();
return;
}
@ -337,6 +360,7 @@ void DialogFlippingByAxis::GroupNameChanged()
{
flagGroupName = false;
ChangeColor(ui->labelGroupName, errorColor);
ui->labelStatus->setText(tr("Invalid group name"));
CheckState();
return;
}
@ -347,6 +371,63 @@ void DialogFlippingByAxis::GroupNameChanged()
CheckState();
}
//---------------------------------------------------------------------------------------------------------------------
void DialogFlippingByAxis::ShowSourceDetails(int row)
{
ui->lineEditAlias->setDisabled(true);
if (ui->listWidget->count() == 0)
{
return;
}
const auto sourceItem = qvariant_cast<SourceItem>(ui->listWidget->item(row)->data(Qt::UserRole));
const QSharedPointer<VGObject> obj = data->GetGObject(sourceItem.id);
ui->labelAlias->setText(obj->getType() == GOType::Point ? tr("Label:") : tr("Alias:"));
ui->lineEditAlias->blockSignals(true);
ui->lineEditAlias->setText(sourceItem.alias);
ui->lineEditAlias->setEnabled(true);
ui->lineEditAlias->blockSignals(false);
QRegularExpression rx(NameRegExp());
if (not rx.match(sourceItem.alias).hasMatch() || not data->IsUnique(sourceItem.alias))
{
flagAlias = false;
ChangeColor(ui->labelAlias, errorColor);
ui->labelStatus->setText(obj->getType() == GOType::Point ? tr("Invalid label") : tr("Invalid alias"));
CheckState();
return;
}
else
{
flagAlias = true;
ChangeColor(ui->labelAlias, errorColor);
CheckState();
}
}
//---------------------------------------------------------------------------------------------------------------------
void DialogFlippingByAxis::AliasChanged(const QString &text)
{
if (ui->listWidget->count() == 0)
{
return;
}
if (auto *item = ui->listWidget->currentItem())
{
auto sourceItem = qvariant_cast<SourceItem>(item->data(Qt::UserRole));
sourceItem.alias = text;
item->setData(Qt::UserRole, QVariant::fromValue(sourceItem));
ValidateSourceAliases();
}
}
//---------------------------------------------------------------------------------------------------------------------
void DialogFlippingByAxis::ShowVisualization()
{
@ -358,10 +439,22 @@ void DialogFlippingByAxis::SaveData()
{
m_suffix = ui->lineEditSuffix->text();
sourceObjects.clear();
sourceObjects.reserve(ui->listWidget->count());
for (int i=0; i<ui->listWidget->count(); ++i)
{
if (const QListWidgetItem *item = ui->listWidget->item(i))
{
auto sourceItem = qvariant_cast<SourceItem>(item->data(Qt::UserRole));
sourceObjects.append(sourceItem);
}
}
VisToolFlippingByAxis *operation = qobject_cast<VisToolFlippingByAxis *>(vis);
SCASSERT(operation != nullptr)
operation->SetObjects(ConvertToVector(objects));
operation->SetObjects(SourceToObjects(sourceObjects));
operation->SetOriginPointId(GetOriginPointId());
operation->SetAxisType(GetAxisType());
operation->RefreshGeometry();
@ -383,9 +476,13 @@ void DialogFlippingByAxis::SaveData()
void DialogFlippingByAxis::PointChanged()
{
QColor color;
if (objects.contains(getCurrentObjectId(ui->comboBoxOriginPoint)))
quint32 id = getCurrentObjectId(ui->comboBoxOriginPoint);
auto obj = std::find_if(sourceObjects.begin(), sourceObjects.end(),
[id](const SourceItem &sItem) { return sItem.id == id; });
if (obj != sourceObjects.end())
{
flagError = false;
ui->labelStatus->setText(tr("Invalid point"));
color = errorColor;
}
else
@ -406,6 +503,73 @@ void DialogFlippingByAxis::FillComboBoxAxisType(QComboBox *box)
box->addItem(tr("Horizontal axis"), QVariant(static_cast<int>(AxisType::HorizontalAxis)));
}
//---------------------------------------------------------------------------------------------------------------------
void DialogFlippingByAxis::FillSourceList()
{
ui->listWidget->blockSignals(true);
ui->listWidget->clear();
int row = -1;
for (auto &sourceItem : sourceObjects)
{
const QSharedPointer<VGObject> obj = data->GetGObject(sourceItem.id);
auto *item = new QListWidgetItem(obj->ObjectName());
item->setToolTip(obj->ObjectName());
item->setData(Qt::UserRole, QVariant::fromValue(sourceItem));
ui->listWidget->insertItem(++row, item);
}
ui->listWidget->blockSignals(false);
if (ui->listWidget->count() > 0)
{
ui->listWidget->setCurrentRow(0);
}
ValidateSourceAliases();
}
//---------------------------------------------------------------------------------------------------------------------
void DialogFlippingByAxis::ValidateSourceAliases()
{
QRegularExpression rx(NameRegExp());
for (int i=0; i<ui->listWidget->count(); ++i)
{
if (const QListWidgetItem *item = ui->listWidget->item(i))
{
auto sourceItem = qvariant_cast<SourceItem>(item->data(Qt::UserRole));
const QSharedPointer<VGObject> obj = data->GetGObject(sourceItem.id);
QString name;
if (obj->getType() == GOType::Point)
{
name = sourceItem.alias;
}
else
{
const QString oldAlias = obj->GetAliasSuffix();
obj->SetAliasSuffix(sourceItem.alias);
name = obj->GetAlias();
obj->SetAliasSuffix(oldAlias);
}
if (not rx.match(name).hasMatch() || not data->IsUnique(name))
{
flagAlias = false;
ui->labelStatus->setText(obj->getType() == GOType::Point ? tr("Invalid label") : tr("Invalid alias"));
CheckState();
return;
}
}
}
}
//---------------------------------------------------------------------------------------------------------------------
void DialogFlippingByAxis::SetNotes(const QString &notes)
{
@ -417,3 +581,16 @@ QString DialogFlippingByAxis::GetNotes() const
{
return ui->plainTextEditToolNotes->toPlainText();
}
//---------------------------------------------------------------------------------------------------------------------
bool DialogFlippingByAxis::IsValid() const
{
bool ready = flagError && flagName && flagGroupName && flagAlias;
if (ready)
{
ui->labelStatus->setText(tr("Ready"));
}
return ready;
}

View file

@ -439,10 +439,13 @@ void DialogSpline::EvalLength2()
void DialogSpline::ValidateAlias()
{
QRegularExpression rx(NameRegExp());
VSpline spline = spl;
spline.SetAliasSuffix(ui->lineEditAlias->text());
if (not ui->lineEditAlias->text().isEmpty() &&
(not rx.match(spline.GetAlias()).hasMatch() || not data->IsUnique(spline.GetAlias())))
(not rx.match(spline.GetAlias()).hasMatch() ||
(originAliasSuffix != ui->lineEditAlias->text() && not data->IsUnique(spline.GetAlias()))))
{
flagAlias = false;
ChangeColor(ui->labelAlias, errorColor);
@ -613,7 +616,8 @@ void DialogSpline::SetSpline(const VSpline &spline)
ui->plainTextEditLength2F->setPlainText(length2F);
ui->lineEditSplineName->setText(qApp->TrVars()->VarToUser(spl.name()));
ui->lineEditAlias->setText(spl.GetAliasSuffix());
originAliasSuffix = spl.GetAliasSuffix();
ui->lineEditAlias->setText(originAliasSuffix);
ValidateAlias();
auto path = qobject_cast<VisToolSpline *>(vis);

View file

@ -121,6 +121,8 @@ private:
bool flagError;
bool flagAlias{true};
QString originAliasSuffix{};
const QSharedPointer<VPointF> GetP1() const;
const QSharedPointer<VPointF> GetP4() const;

View file

@ -170,7 +170,8 @@ void DialogSplinePath::SetPath(const VSplinePath &value)
ui->lineEditSplPathName->setText(qApp->TrVars()->VarToUser(path.name()));
ui->doubleSpinBoxApproximationScale->setValue(path.GetApproximationScale());
ui->lineEditAlias->setText(path.GetAliasSuffix());
originAliasSuffix = path.GetAliasSuffix();
ui->lineEditAlias->setText(originAliasSuffix);
ValidateAlias();
ChangeCurrentData(ui->comboBoxPenStyle, path.GetPenStyle());
@ -500,10 +501,13 @@ void DialogSplinePath::FXLength2()
void DialogSplinePath::ValidateAlias()
{
QRegularExpression rx(NameRegExp());
VSplinePath tempPath = path;
tempPath.SetAliasSuffix(ui->lineEditAlias->text());
if (not ui->lineEditAlias->text().isEmpty() &&
(not rx.match(tempPath.GetAlias()).hasMatch() || not data->IsUnique(tempPath.GetAlias())))
(not rx.match(tempPath.GetAlias()).hasMatch() ||
(originAliasSuffix != ui->lineEditAlias->text() && not data->IsUnique(tempPath.GetAlias()))))
{
flagAlias = false;
ChangeColor(ui->labelAlias, errorColor);

View file

@ -115,6 +115,8 @@ private:
bool flagError;
bool flagAlias{true};
QString originAliasSuffix{};
void EvalAngle1();
void EvalAngle2();
void EvalLength1();