Small improvements for passmark.
Added new option that allow localy disable the second passmark on the seam line. --HG-- branch : release
This commit is contained in:
parent
39a1c50022
commit
c9e005c65b
|
@ -355,6 +355,7 @@
|
||||||
<xs:attribute name="passmark" type="xs:boolean"/>
|
<xs:attribute name="passmark" type="xs:boolean"/>
|
||||||
<xs:attribute name="passmarkLine" type="passmarkLineType"/>
|
<xs:attribute name="passmarkLine" type="passmarkLineType"/>
|
||||||
<xs:attribute name="passmarkAngle" type="passmarkAngleType"/>
|
<xs:attribute name="passmarkAngle" type="passmarkAngleType"/>
|
||||||
|
<xs:attribute name="showSecondPassmark" type="xs:boolean"/>
|
||||||
</xs:complexType>
|
</xs:complexType>
|
||||||
</xs:element>
|
</xs:element>
|
||||||
</xs:sequence>
|
</xs:sequence>
|
||||||
|
@ -390,6 +391,7 @@
|
||||||
<xs:attribute name="passmark" type="xs:boolean"/>
|
<xs:attribute name="passmark" type="xs:boolean"/>
|
||||||
<xs:attribute name="passmarkLine" type="passmarkLineType"/>
|
<xs:attribute name="passmarkLine" type="passmarkLineType"/>
|
||||||
<xs:attribute name="passmarkAngle" type="passmarkAngleType"/>
|
<xs:attribute name="passmarkAngle" type="passmarkAngleType"/>
|
||||||
|
<xs:attribute name="showSecondPassmark" type="xs:boolean"/>
|
||||||
</xs:complexType>
|
</xs:complexType>
|
||||||
</xs:element>
|
</xs:element>
|
||||||
</xs:sequence>
|
</xs:sequence>
|
||||||
|
@ -552,6 +554,7 @@
|
||||||
<xs:attribute name="passmark" type="xs:boolean"/>
|
<xs:attribute name="passmark" type="xs:boolean"/>
|
||||||
<xs:attribute name="passmarkLine" type="passmarkLineType"/>
|
<xs:attribute name="passmarkLine" type="passmarkLineType"/>
|
||||||
<xs:attribute name="passmarkAngle" type="passmarkAngleType"/>
|
<xs:attribute name="passmarkAngle" type="passmarkAngleType"/>
|
||||||
|
<xs:attribute name="showSecondPassmark" type="xs:boolean"/>
|
||||||
</xs:complexType>
|
</xs:complexType>
|
||||||
</xs:element>
|
</xs:element>
|
||||||
</xs:sequence>
|
</xs:sequence>
|
||||||
|
|
|
@ -111,6 +111,7 @@ const QString VAbstractPattern::AttrNodeExcluded = QStringLiteral("excluded
|
||||||
const QString VAbstractPattern::AttrNodePassmark = QStringLiteral("passmark");
|
const QString VAbstractPattern::AttrNodePassmark = QStringLiteral("passmark");
|
||||||
const QString VAbstractPattern::AttrNodePassmarkLine = QStringLiteral("passmarkLine");
|
const QString VAbstractPattern::AttrNodePassmarkLine = QStringLiteral("passmarkLine");
|
||||||
const QString VAbstractPattern::AttrNodePassmarkAngle = QStringLiteral("passmarkAngle");
|
const QString VAbstractPattern::AttrNodePassmarkAngle = QStringLiteral("passmarkAngle");
|
||||||
|
const QString VAbstractPattern::AttrNodeShowSecondPassmark = QStringLiteral("showSecondPassmark");
|
||||||
const QString VAbstractPattern::AttrSABefore = QStringLiteral("before");
|
const QString VAbstractPattern::AttrSABefore = QStringLiteral("before");
|
||||||
const QString VAbstractPattern::AttrSAAfter = QStringLiteral("after");
|
const QString VAbstractPattern::AttrSAAfter = QStringLiteral("after");
|
||||||
const QString VAbstractPattern::AttrStart = QStringLiteral("start");
|
const QString VAbstractPattern::AttrStart = QStringLiteral("start");
|
||||||
|
@ -680,6 +681,9 @@ VPieceNode VAbstractPattern::ParseSANode(const QDomElement &domElement)
|
||||||
VAbstractPattern::AttrNodePassmarkAngle,
|
VAbstractPattern::AttrNodePassmarkAngle,
|
||||||
strStraightforward));
|
strStraightforward));
|
||||||
|
|
||||||
|
const bool showSecond = VDomDocument::GetParametrBool(domElement, VAbstractPattern::AttrNodeShowSecondPassmark,
|
||||||
|
trueStr);
|
||||||
|
|
||||||
const QString t = VDomDocument::GetParametrString(domElement, AttrType, VAbstractPattern::NodePoint);
|
const QString t = VDomDocument::GetParametrString(domElement, AttrType, VAbstractPattern::NodePoint);
|
||||||
Tool tool;
|
Tool tool;
|
||||||
|
|
||||||
|
@ -715,6 +719,7 @@ VPieceNode VAbstractPattern::ParseSANode(const QDomElement &domElement)
|
||||||
node.SetFormulaSAAfter(saAfter);
|
node.SetFormulaSAAfter(saAfter);
|
||||||
node.SetAngleType(angle);
|
node.SetAngleType(angle);
|
||||||
node.SetExcluded(excluded);
|
node.SetExcluded(excluded);
|
||||||
|
node.SetShowSecondPassmark(showSecond);
|
||||||
node.SetPassmark(passmark);
|
node.SetPassmark(passmark);
|
||||||
node.SetPassmarkLineType(passmarkLine);
|
node.SetPassmarkLineType(passmarkLine);
|
||||||
node.SetPassmarkAngleType(passmarkAngle);
|
node.SetPassmarkAngleType(passmarkAngle);
|
||||||
|
|
|
@ -219,6 +219,7 @@ public:
|
||||||
static const QString AttrNodePassmark;
|
static const QString AttrNodePassmark;
|
||||||
static const QString AttrNodePassmarkLine;
|
static const QString AttrNodePassmarkLine;
|
||||||
static const QString AttrNodePassmarkAngle;
|
static const QString AttrNodePassmarkAngle;
|
||||||
|
static const QString AttrNodeShowSecondPassmark;
|
||||||
static const QString AttrSABefore;
|
static const QString AttrSABefore;
|
||||||
static const QString AttrSAAfter;
|
static const QString AttrSAAfter;
|
||||||
static const QString AttrStart;
|
static const QString AttrStart;
|
||||||
|
|
|
@ -1097,7 +1097,8 @@ QVector<QLineF> VPiece::CreatePassmark(const QVector<VPieceNode> &path, int prev
|
||||||
lines += SAPassmark(path, previousSAPoint, passmarkSAPoint, nextSAPoint, data, passmarkIndex);
|
lines += SAPassmark(path, previousSAPoint, passmarkSAPoint, nextSAPoint, data, passmarkIndex);
|
||||||
if (qApp->Settings()->IsDoublePassmark()
|
if (qApp->Settings()->IsDoublePassmark()
|
||||||
&& path.at(passmarkIndex).IsMainPathNode()
|
&& path.at(passmarkIndex).IsMainPathNode()
|
||||||
&& path.at(passmarkIndex).GetPassmarkAngleType() != PassmarkAngleType::Intersection)
|
&& path.at(passmarkIndex).GetPassmarkAngleType() != PassmarkAngleType::Intersection
|
||||||
|
&& path.at(passmarkIndex).IsShowSecondPassmark())
|
||||||
{
|
{
|
||||||
lines += BuiltInSAPassmark(path, previousSAPoint, passmarkSAPoint, nextSAPoint, data, passmarkIndex);
|
lines += BuiltInSAPassmark(path, previousSAPoint, passmarkSAPoint, nextSAPoint, data, passmarkIndex);
|
||||||
}
|
}
|
||||||
|
|
|
@ -301,6 +301,18 @@ void VPieceNode::SetPassmarkAngleType(PassmarkAngleType angleType)
|
||||||
d->m_passmarkAngleType = angleType;
|
d->m_passmarkAngleType = angleType;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
bool VPieceNode::IsShowSecondPassmark() const
|
||||||
|
{
|
||||||
|
return d->m_isShowSecondPassmark;
|
||||||
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
void VPieceNode::SetShowSecondPassmark(bool value)
|
||||||
|
{
|
||||||
|
d->m_isShowSecondPassmark = value;
|
||||||
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
bool VPieceNode::IsExcluded() const
|
bool VPieceNode::IsExcluded() const
|
||||||
{
|
{
|
||||||
|
|
|
@ -96,6 +96,9 @@ public:
|
||||||
|
|
||||||
PassmarkAngleType GetPassmarkAngleType() const;
|
PassmarkAngleType GetPassmarkAngleType() const;
|
||||||
void SetPassmarkAngleType(PassmarkAngleType angleType);
|
void SetPassmarkAngleType(PassmarkAngleType angleType);
|
||||||
|
|
||||||
|
bool IsShowSecondPassmark() const;
|
||||||
|
void SetShowSecondPassmark(bool value);
|
||||||
private:
|
private:
|
||||||
QSharedDataPointer<VPieceNodeData> d;
|
QSharedDataPointer<VPieceNodeData> d;
|
||||||
};
|
};
|
||||||
|
|
|
@ -51,7 +51,8 @@ public:
|
||||||
m_formulaWidthAfter(currentSeamAllowance),
|
m_formulaWidthAfter(currentSeamAllowance),
|
||||||
m_angleType(PieceNodeAngle::ByLength),
|
m_angleType(PieceNodeAngle::ByLength),
|
||||||
m_passmarkLineType(PassmarkLineType::OneLine),
|
m_passmarkLineType(PassmarkLineType::OneLine),
|
||||||
m_passmarkAngleType(PassmarkAngleType::Straightforward)
|
m_passmarkAngleType(PassmarkAngleType::Straightforward),
|
||||||
|
m_isShowSecondPassmark(true)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
VPieceNodeData(quint32 id, Tool typeTool, bool reverse)
|
VPieceNodeData(quint32 id, Tool typeTool, bool reverse)
|
||||||
|
@ -65,7 +66,8 @@ public:
|
||||||
m_formulaWidthAfter(currentSeamAllowance),
|
m_formulaWidthAfter(currentSeamAllowance),
|
||||||
m_angleType(PieceNodeAngle::ByLength),
|
m_angleType(PieceNodeAngle::ByLength),
|
||||||
m_passmarkLineType(PassmarkLineType::OneLine),
|
m_passmarkLineType(PassmarkLineType::OneLine),
|
||||||
m_passmarkAngleType(PassmarkAngleType::Straightforward)
|
m_passmarkAngleType(PassmarkAngleType::Straightforward),
|
||||||
|
m_isShowSecondPassmark(true)
|
||||||
{
|
{
|
||||||
if (m_typeTool == Tool::NodePoint)
|
if (m_typeTool == Tool::NodePoint)
|
||||||
{
|
{
|
||||||
|
@ -85,10 +87,11 @@ public:
|
||||||
m_formulaWidthAfter(node.m_formulaWidthAfter),
|
m_formulaWidthAfter(node.m_formulaWidthAfter),
|
||||||
m_angleType(node.m_angleType),
|
m_angleType(node.m_angleType),
|
||||||
m_passmarkLineType(node.m_passmarkLineType),
|
m_passmarkLineType(node.m_passmarkLineType),
|
||||||
m_passmarkAngleType(node.m_passmarkAngleType)
|
m_passmarkAngleType(node.m_passmarkAngleType),
|
||||||
|
m_isShowSecondPassmark(node.m_isShowSecondPassmark)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
~VPieceNodeData();
|
~VPieceNodeData() Q_DECL_EQ_DEFAULT;
|
||||||
|
|
||||||
friend QDataStream& operator<<(QDataStream& out, const VPieceNodeData& p);
|
friend QDataStream& operator<<(QDataStream& out, const VPieceNodeData& p);
|
||||||
friend QDataStream& operator>>(QDataStream& in, VPieceNodeData& p);
|
friend QDataStream& operator>>(QDataStream& in, VPieceNodeData& p);
|
||||||
|
@ -120,13 +123,12 @@ public:
|
||||||
PassmarkLineType m_passmarkLineType;
|
PassmarkLineType m_passmarkLineType;
|
||||||
PassmarkAngleType m_passmarkAngleType;
|
PassmarkAngleType m_passmarkAngleType;
|
||||||
|
|
||||||
|
bool m_isShowSecondPassmark;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
VPieceNodeData &operator=(const VPieceNodeData &) Q_DECL_EQ_DELETE;
|
VPieceNodeData &operator=(const VPieceNodeData &) Q_DECL_EQ_DELETE;
|
||||||
};
|
};
|
||||||
|
|
||||||
VPieceNodeData::~VPieceNodeData()
|
|
||||||
{}
|
|
||||||
|
|
||||||
// Friend functions
|
// Friend functions
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
QDataStream &operator<<(QDataStream &out, const VPieceNodeData &p)
|
QDataStream &operator<<(QDataStream &out, const VPieceNodeData &p)
|
||||||
|
@ -140,7 +142,8 @@ QDataStream &operator<<(QDataStream &out, const VPieceNodeData &p)
|
||||||
<< p.m_formulaWidthAfter
|
<< p.m_formulaWidthAfter
|
||||||
<< static_cast<int>(p.m_angleType)
|
<< static_cast<int>(p.m_angleType)
|
||||||
<< static_cast<int>(p.m_passmarkLineType)
|
<< static_cast<int>(p.m_passmarkLineType)
|
||||||
<< static_cast<int>(p.m_passmarkAngleType);
|
<< static_cast<int>(p.m_passmarkAngleType)
|
||||||
|
<< p.m_isShowSecondPassmark;
|
||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -161,7 +164,8 @@ QDataStream &operator>>(QDataStream &in, VPieceNodeData &p)
|
||||||
>> p.m_formulaWidthAfter
|
>> p.m_formulaWidthAfter
|
||||||
>> angleType
|
>> angleType
|
||||||
>> passmarkLineType
|
>> passmarkLineType
|
||||||
>> passmarkAngleType;
|
>> passmarkAngleType
|
||||||
|
>> p.m_isShowSecondPassmark;
|
||||||
|
|
||||||
p.m_typeTool = static_cast<Tool>(typeTool);
|
p.m_typeTool = static_cast<Tool>(typeTool);
|
||||||
p.m_angleType = static_cast<PieceNodeAngle>(angleType);
|
p.m_angleType = static_cast<PieceNodeAngle>(angleType);
|
||||||
|
|
|
@ -855,6 +855,9 @@ void DialogSeamAllowance::PassmarkChanged(int index)
|
||||||
uiTabPassmarks->radioButtonBisector->setDisabled(true);
|
uiTabPassmarks->radioButtonBisector->setDisabled(true);
|
||||||
uiTabPassmarks->radioButtonIntersection->setDisabled(true);
|
uiTabPassmarks->radioButtonIntersection->setDisabled(true);
|
||||||
|
|
||||||
|
uiTabPassmarks->checkBoxShowSecondPassmark->setDisabled(true);
|
||||||
|
uiTabPassmarks->checkBoxShowSecondPassmark->blockSignals(true);
|
||||||
|
|
||||||
uiTabPassmarks->groupBoxMarkType->blockSignals(true);
|
uiTabPassmarks->groupBoxMarkType->blockSignals(true);
|
||||||
uiTabPassmarks->groupBoxAngleType->blockSignals(true);
|
uiTabPassmarks->groupBoxAngleType->blockSignals(true);
|
||||||
|
|
||||||
|
@ -913,8 +916,15 @@ void DialogSeamAllowance::PassmarkChanged(int index)
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Show the second option
|
||||||
|
uiTabPassmarks->checkBoxShowSecondPassmark->setEnabled(true);
|
||||||
|
uiTabPassmarks->checkBoxShowSecondPassmark->setChecked(node.IsShowSecondPassmark());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uiTabPassmarks->checkBoxShowSecondPassmark->blockSignals(false);
|
||||||
|
|
||||||
uiTabPassmarks->groupBoxMarkType->blockSignals(false);
|
uiTabPassmarks->groupBoxMarkType->blockSignals(false);
|
||||||
uiTabPassmarks->groupBoxAngleType->blockSignals(false);
|
uiTabPassmarks->groupBoxAngleType->blockSignals(false);
|
||||||
}
|
}
|
||||||
|
@ -1233,7 +1243,24 @@ void DialogSeamAllowance::PassmarkAngleTypeChanged(int id)
|
||||||
|
|
||||||
rowNode.SetPassmarkAngleType(angleType);
|
rowNode.SetPassmarkAngleType(angleType);
|
||||||
rowItem->setData(Qt::UserRole, QVariant::fromValue(rowNode));
|
rowItem->setData(Qt::UserRole, QVariant::fromValue(rowNode));
|
||||||
rowItem->setText(GetNodeName(rowNode, true));
|
|
||||||
|
ListChanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
void DialogSeamAllowance::PassmarkShowSecondChanged(int state)
|
||||||
|
{
|
||||||
|
const int i = uiTabPassmarks->comboBoxPassmarks->currentIndex();
|
||||||
|
if (i != -1)
|
||||||
|
{
|
||||||
|
QListWidgetItem *rowItem = GetItemById(CURRENT_DATA(uiTabPassmarks->comboBoxPassmarks).toUInt());
|
||||||
|
if (rowItem)
|
||||||
|
{
|
||||||
|
VPieceNode rowNode = qvariant_cast<VPieceNode>(rowItem->data(Qt::UserRole));
|
||||||
|
rowNode.SetShowSecondPassmark(state);
|
||||||
|
rowItem->setData(Qt::UserRole, QVariant::fromValue(rowNode));
|
||||||
|
|
||||||
ListChanged();
|
ListChanged();
|
||||||
}
|
}
|
||||||
|
@ -2757,6 +2784,8 @@ void DialogSeamAllowance::InitPassmarksTab()
|
||||||
this, &DialogSeamAllowance::PassmarkLineTypeChanged);
|
this, &DialogSeamAllowance::PassmarkLineTypeChanged);
|
||||||
connect(uiTabPassmarks->buttonGroupAngleType, static_cast<void(QButtonGroup::*)(int)>(&QButtonGroup::buttonClicked),
|
connect(uiTabPassmarks->buttonGroupAngleType, static_cast<void(QButtonGroup::*)(int)>(&QButtonGroup::buttonClicked),
|
||||||
this, &DialogSeamAllowance::PassmarkAngleTypeChanged);
|
this, &DialogSeamAllowance::PassmarkAngleTypeChanged);
|
||||||
|
connect(uiTabPassmarks->checkBoxShowSecondPassmark, &QCheckBox::stateChanged, this,
|
||||||
|
&DialogSeamAllowance::PassmarkShowSecondChanged);
|
||||||
}
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
|
@ -104,6 +104,7 @@ private slots:
|
||||||
void TabChanged(int index);
|
void TabChanged(int index);
|
||||||
void PassmarkLineTypeChanged(int id);
|
void PassmarkLineTypeChanged(int id);
|
||||||
void PassmarkAngleTypeChanged(int id);
|
void PassmarkAngleTypeChanged(int id);
|
||||||
|
void PassmarkShowSecondChanged(int state);
|
||||||
|
|
||||||
void UpdateGrainlineValues();
|
void UpdateGrainlineValues();
|
||||||
void UpdateDetailLabelValues();
|
void UpdateDetailLabelValues();
|
||||||
|
|
|
@ -6,8 +6,8 @@
|
||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>222</width>
|
<width>268</width>
|
||||||
<height>349</height>
|
<height>377</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<property name="windowTitle">
|
<property name="windowTitle">
|
||||||
|
@ -159,6 +159,16 @@
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QCheckBox" name="checkBoxShowSecondPassmark">
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Show the second passmark on seam line</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<spacer name="verticalSpacer">
|
<spacer name="verticalSpacer">
|
||||||
<property name="orientation">
|
<property name="orientation">
|
||||||
|
|
|
@ -624,6 +624,7 @@ QDomElement VAbstractTool::AddSANode(VAbstractPattern *doc, const QString &tagNa
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
{
|
||||||
const bool excluded = node.IsExcluded();
|
const bool excluded = node.IsExcluded();
|
||||||
if (excluded)
|
if (excluded)
|
||||||
{
|
{
|
||||||
|
@ -633,6 +634,7 @@ QDomElement VAbstractTool::AddSANode(VAbstractPattern *doc, const QString &tagNa
|
||||||
{ // For backward compatebility.
|
{ // For backward compatebility.
|
||||||
nod.removeAttribute(VAbstractPattern::AttrNodeExcluded);
|
nod.removeAttribute(VAbstractPattern::AttrNodeExcluded);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
switch (type)
|
switch (type)
|
||||||
{
|
{
|
||||||
|
@ -656,12 +658,14 @@ QDomElement VAbstractTool::AddSANode(VAbstractPattern *doc, const QString &tagNa
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
{
|
||||||
const unsigned char angleType = static_cast<unsigned char>(node.GetAngleType());
|
const unsigned char angleType = static_cast<unsigned char>(node.GetAngleType());
|
||||||
|
|
||||||
if (angleType > 0)
|
if (angleType > 0)
|
||||||
{
|
{
|
||||||
doc->SetAttribute(nod, AttrAngle, angleType);
|
doc->SetAttribute(nod, AttrAngle, angleType);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (type == Tool::NodePoint)
|
if (type == Tool::NodePoint)
|
||||||
{
|
{
|
||||||
|
@ -687,6 +691,18 @@ QDomElement VAbstractTool::AddSANode(VAbstractPattern *doc, const QString &tagNa
|
||||||
nod.removeAttribute(VAbstractPattern::AttrNodePassmarkAngle);
|
nod.removeAttribute(VAbstractPattern::AttrNodePassmarkAngle);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
const bool showSecond = node.IsShowSecondPassmark();
|
||||||
|
if (not showSecond)
|
||||||
|
{
|
||||||
|
doc->SetAttribute(nod, VAbstractPattern::AttrNodeShowSecondPassmark, showSecond);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{ // For backward compatebility.
|
||||||
|
nod.removeAttribute(VAbstractPattern::AttrNodeShowSecondPassmark);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return nod;
|
return nod;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user