Auto-created Visibility Group for group operation. Closes smart-pattern/valentina#18.
This commit is contained in:
parent
9869ae249f
commit
526892ed5a
|
@ -43,6 +43,7 @@
|
|||
- Change default values for grainline length and pattern label size to 10 cm.
|
||||
- Tool Point at distance and angle now allows negative length.
|
||||
- Export pattern to DXF-ASTM.
|
||||
- [smart-pattern/valentina#18] Auto-created Visibility Group for group operation.
|
||||
|
||||
# Version 0.6.2 (unreleased)
|
||||
- [#903] Bug in tool Cut Spline path.
|
||||
|
|
|
@ -148,9 +148,9 @@ void VWidgetGroups::RenameGroup(int row, int column)
|
|||
}
|
||||
|
||||
const quint32 id = ui->tableWidget->item(row, 0)->data(Qt::UserRole).toUInt();
|
||||
doc->SetGroupName(id, ui->tableWidget->item(row, column)->text());
|
||||
|
||||
UpdateGroups();
|
||||
::RenameGroup *renameGroup = new ::RenameGroup(doc, id, ui->tableWidget->item(row, column)->text());
|
||||
connect(renameGroup, &RenameGroup::UpdateGroups, this, &VWidgetGroups::UpdateGroups);
|
||||
qApp->getUndoStack()->push(renameGroup);
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
|
@ -209,9 +209,9 @@ void VWidgetGroups::CtxMenu(const QPoint &pos)
|
|||
|
||||
if (result == QDialog::Accepted)
|
||||
{
|
||||
doc->SetGroupName(id, dialog->GetName());
|
||||
item = ui->tableWidget->item(row, 1);
|
||||
item->setText(dialog->GetName());
|
||||
::RenameGroup *renameGroup = new ::RenameGroup(doc, id, dialog->GetName());
|
||||
connect(renameGroup, &RenameGroup::UpdateGroups, this, &VWidgetGroups::UpdateGroups);
|
||||
qApp->getUndoStack()->push(renameGroup);
|
||||
}
|
||||
}
|
||||
else if (selectedAction == actionDelete)
|
||||
|
|
|
@ -58,6 +58,7 @@
|
|||
<file>schema/pattern/v0.8.4.xsd</file>
|
||||
<file>schema/pattern/v0.8.5.xsd</file>
|
||||
<file>schema/pattern/v0.8.6.xsd</file>
|
||||
<file>schema/pattern/v0.8.7.xsd</file>
|
||||
<file>schema/standard_measurements/v0.3.0.xsd</file>
|
||||
<file>schema/standard_measurements/v0.4.0.xsd</file>
|
||||
<file>schema/standard_measurements/v0.4.1.xsd</file>
|
||||
|
|
1253
src/libs/ifc/schema/pattern/v0.8.7.xsd
Normal file
1253
src/libs/ifc/schema/pattern/v0.8.7.xsd
Normal file
File diff suppressed because it is too large
Load Diff
|
@ -1730,6 +1730,12 @@ void VAbstractPattern::SelectedDetail(quint32 id)
|
|||
emit ShowDetail(id);
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
void VAbstractPattern::UpdateVisiblityGroups()
|
||||
{
|
||||
emit UpdateGroups();
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
void VAbstractPattern::ToolExists(const quint32 &id)
|
||||
{
|
||||
|
@ -2422,7 +2428,8 @@ QDomElement VAbstractPattern::CreateGroups()
|
|||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
QDomElement VAbstractPattern::CreateGroup(quint32 id, const QString &name, const QMap<quint32, quint32> &groupData)
|
||||
QDomElement VAbstractPattern::CreateGroup(quint32 id, const QString &name, const QMap<quint32, quint32> &groupData,
|
||||
vidtype tool)
|
||||
{
|
||||
if (id == NULL_ID || groupData.isEmpty())
|
||||
{
|
||||
|
@ -2433,6 +2440,7 @@ QDomElement VAbstractPattern::CreateGroup(quint32 id, const QString &name, const
|
|||
SetAttribute(group, AttrId, id);
|
||||
SetAttribute(group, AttrName, name);
|
||||
SetAttribute(group, AttrVisible, true);
|
||||
SetAttributeOrRemoveIf(group, AttrTool, tool, tool == null_id);
|
||||
|
||||
auto i = groupData.constBegin();
|
||||
while (i != groupData.constEnd())
|
||||
|
@ -2446,66 +2454,50 @@ QDomElement VAbstractPattern::CreateGroup(quint32 id, const QString &name, const
|
|||
|
||||
return group;
|
||||
}
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
vidtype VAbstractPattern::GroupLinkedToTool(vidtype toolId) const
|
||||
{
|
||||
const QDomNodeList groups = elementsByTagName(TagGroup);
|
||||
for (int i=0; i < groups.size(); ++i)
|
||||
{
|
||||
const QDomElement group = groups.at(i).toElement();
|
||||
if (not group.isNull() && group.hasAttribute(AttrTool))
|
||||
{
|
||||
const quint32 id = GetParametrUInt(group, AttrTool, NULL_ID_STR);
|
||||
|
||||
if (toolId == id)
|
||||
{
|
||||
return GetParametrUInt(group, AttrId, NULL_ID_STR);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return null_id;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
QString VAbstractPattern::GetGroupName(quint32 id)
|
||||
{
|
||||
QString name = tr("New group");
|
||||
QDomElement groups = CreateGroups();
|
||||
if (not groups.isNull())
|
||||
QDomElement group = elementById(id, TagGroup);
|
||||
if (group.isElement())
|
||||
{
|
||||
QDomElement group = elementById(id, TagGroup);
|
||||
if (group.isElement())
|
||||
{
|
||||
name = GetParametrString(group, AttrName, name);
|
||||
return name;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (groups.childNodes().isEmpty())
|
||||
{
|
||||
QDomNode parent = groups.parentNode();
|
||||
parent.removeChild(groups);
|
||||
}
|
||||
name = GetParametrString(group, AttrName, name);
|
||||
|
||||
qDebug("Can't get group by id = %u.", id);
|
||||
return name;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
qDebug("Can't get tag Groups.");
|
||||
return name;
|
||||
}
|
||||
|
||||
return name;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
void VAbstractPattern::SetGroupName(quint32 id, const QString &name)
|
||||
{
|
||||
QDomElement groups = CreateGroups();
|
||||
if (not groups.isNull())
|
||||
QDomElement group = elementById(id, TagGroup);
|
||||
if (group.isElement())
|
||||
{
|
||||
QDomElement group = elementById(id, TagGroup);
|
||||
if (group.isElement())
|
||||
{
|
||||
group.setAttribute(AttrName, name);
|
||||
modified = true;
|
||||
emit patternChanged(false);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (groups.childNodes().isEmpty())
|
||||
{
|
||||
QDomNode parent = groups.parentNode();
|
||||
parent.removeChild(groups);
|
||||
}
|
||||
|
||||
qDebug("Can't get group by id = %u.", id);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
qDebug("Can't get tag Groups.");
|
||||
group.setAttribute(AttrName, name);
|
||||
modified = true;
|
||||
emit patternChanged(false);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -200,7 +200,9 @@ public:
|
|||
|
||||
void ParseGroups(const QDomElement &domElement);
|
||||
QDomElement CreateGroups();
|
||||
QDomElement CreateGroup(quint32 id, const QString &name, const QMap<quint32, quint32> &groupData);
|
||||
QDomElement CreateGroup(quint32 id, const QString &name, const QMap<quint32, quint32> &groupData,
|
||||
vidtype tool=null_id);
|
||||
vidtype GroupLinkedToTool(vidtype toolId) const;
|
||||
QString GetGroupName(quint32 id);
|
||||
void SetGroupName(quint32 id, const QString &name);
|
||||
QMap<quint32, QPair<QString, bool> > GetGroups();
|
||||
|
@ -413,6 +415,7 @@ public slots:
|
|||
void ClearScene();
|
||||
void CheckInLayoutList();
|
||||
void SelectedDetail(quint32 id);
|
||||
void UpdateVisiblityGroups();
|
||||
|
||||
protected:
|
||||
/** @brief nameActivDraw name current pattern peace. */
|
||||
|
|
|
@ -59,8 +59,8 @@ class QDomElement;
|
|||
*/
|
||||
|
||||
const QString VPatternConverter::PatternMinVerStr = QStringLiteral("0.1.4");
|
||||
const QString VPatternConverter::PatternMaxVerStr = QStringLiteral("0.8.6");
|
||||
const QString VPatternConverter::CurrentSchema = QStringLiteral("://schema/pattern/v0.8.6.xsd");
|
||||
const QString VPatternConverter::PatternMaxVerStr = QStringLiteral("0.8.7");
|
||||
const QString VPatternConverter::CurrentSchema = QStringLiteral("://schema/pattern/v0.8.7.xsd");
|
||||
|
||||
//VPatternConverter::PatternMinVer; // <== DON'T FORGET TO UPDATE TOO!!!!
|
||||
//VPatternConverter::PatternMaxVer; // <== DON'T FORGET TO UPDATE TOO!!!!
|
||||
|
@ -236,7 +236,8 @@ QString VPatternConverter::XSDSchema(int ver) const
|
|||
std::make_pair(FORMAT_VERSION(0, 8, 3), QStringLiteral("://schema/pattern/v0.8.3.xsd")),
|
||||
std::make_pair(FORMAT_VERSION(0, 8, 4), QStringLiteral("://schema/pattern/v0.8.4.xsd")),
|
||||
std::make_pair(FORMAT_VERSION(0, 8, 5), QStringLiteral("://schema/pattern/v0.8.5.xsd")),
|
||||
std::make_pair(FORMAT_VERSION(0, 8, 6), CurrentSchema)
|
||||
std::make_pair(FORMAT_VERSION(0, 8, 6), QStringLiteral("://schema/pattern/v0.8.6.xsd")),
|
||||
std::make_pair(FORMAT_VERSION(0, 8, 7), CurrentSchema)
|
||||
};
|
||||
|
||||
if (schemas.contains(ver))
|
||||
|
@ -481,6 +482,10 @@ void VPatternConverter::ApplyPatches()
|
|||
ValidateXML(XSDSchema(FORMAT_VERSION(0, 8, 6)));
|
||||
Q_FALLTHROUGH();
|
||||
case (FORMAT_VERSION(0, 8, 6)):
|
||||
ToV0_8_7();
|
||||
ValidateXML(XSDSchema(FORMAT_VERSION(0, 8, 7)));
|
||||
Q_FALLTHROUGH();
|
||||
case (FORMAT_VERSION(0, 8, 7)):
|
||||
break;
|
||||
default:
|
||||
InvalidVersion(m_ver);
|
||||
|
@ -498,7 +503,7 @@ void VPatternConverter::DowngradeToCurrentMaxVersion()
|
|||
bool VPatternConverter::IsReadOnly() const
|
||||
{
|
||||
// Check if attribute readOnly was not changed in file format
|
||||
Q_STATIC_ASSERT_X(VPatternConverter::PatternMaxVer == FORMAT_VERSION(0, 8, 6),
|
||||
Q_STATIC_ASSERT_X(VPatternConverter::PatternMaxVer == FORMAT_VERSION(0, 8, 7),
|
||||
"Check attribute readOnly.");
|
||||
|
||||
// Possibly in future attribute readOnly will change position etc.
|
||||
|
@ -1128,6 +1133,16 @@ void VPatternConverter::ToV0_8_6()
|
|||
Save();
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
void VPatternConverter::ToV0_8_7()
|
||||
{
|
||||
// TODO. Delete if minimal supported version is 0.8.7
|
||||
Q_STATIC_ASSERT_X(VPatternConverter::PatternMinVer < FORMAT_VERSION(0, 8, 7),
|
||||
"Time to refactor the code.");
|
||||
SetVersion(QStringLiteral("0.8.7"));
|
||||
Save();
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
void VPatternConverter::TagUnitToV0_2_0()
|
||||
{
|
||||
|
|
|
@ -53,7 +53,7 @@ public:
|
|||
static const QString PatternMaxVerStr;
|
||||
static const QString CurrentSchema;
|
||||
static Q_DECL_CONSTEXPR const int PatternMinVer = FORMAT_VERSION(0, 1, 4);
|
||||
static Q_DECL_CONSTEXPR const int PatternMaxVer = FORMAT_VERSION(0, 8, 6);
|
||||
static Q_DECL_CONSTEXPR const int PatternMaxVer = FORMAT_VERSION(0, 8, 7);
|
||||
|
||||
protected:
|
||||
virtual int MinVer() const override;
|
||||
|
@ -129,6 +129,7 @@ private:
|
|||
void ToV0_8_4();
|
||||
void ToV0_8_5();
|
||||
void ToV0_8_6();
|
||||
void ToV0_8_7();
|
||||
|
||||
void TagUnitToV0_2_0();
|
||||
void TagIncrementToV0_2_0();
|
||||
|
|
|
@ -67,6 +67,7 @@ DialogFlippingByAxis::DialogFlippingByAxis(const VContainer *data, quint32 toolI
|
|||
stage1(true),
|
||||
m_suffix(),
|
||||
flagName(true),
|
||||
flagGroupName(true),
|
||||
flagError(false)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
|
@ -81,6 +82,7 @@ DialogFlippingByAxis::DialogFlippingByAxis(const VContainer *data, quint32 toolI
|
|||
ui->comboBoxOriginPoint->setCurrentIndex(-1);
|
||||
|
||||
connect(ui->lineEditSuffix, &QLineEdit::textChanged, this, &DialogFlippingByAxis::SuffixChanged);
|
||||
connect(ui->lineEditVisibilityGroup, &QLineEdit::textChanged, this, &DialogFlippingByAxis::GroupNameChanged);
|
||||
connect(ui->comboBoxOriginPoint, &QComboBox::currentTextChanged,
|
||||
this, &DialogFlippingByAxis::PointChanged);
|
||||
|
||||
|
@ -147,6 +149,30 @@ QVector<quint32> DialogFlippingByAxis::GetObjects() const
|
|||
return ConvertToVector(objects);
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
QString DialogFlippingByAxis::GetVisibilityGroupName() const
|
||||
{
|
||||
return ui->lineEditVisibilityGroup->text();
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
void DialogFlippingByAxis::SetVisibilityGroupName(const QString &name)
|
||||
{
|
||||
ui->lineEditVisibilityGroup->setText(name.isEmpty() ? tr("Rotation") : name);
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
bool DialogFlippingByAxis::HasLinkedVisibilityGroup() const
|
||||
{
|
||||
return ui->groupBoxVisibilityGroup->isChecked();
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
void DialogFlippingByAxis::SetHasLinkedVisibilityGroup(bool linked)
|
||||
{
|
||||
ui->groupBoxVisibilityGroup->setChecked(linked);
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
void DialogFlippingByAxis::ShowDialog(bool click)
|
||||
{
|
||||
|
@ -277,6 +303,27 @@ void DialogFlippingByAxis::SuffixChanged()
|
|||
CheckState();
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
void DialogFlippingByAxis::GroupNameChanged()
|
||||
{
|
||||
QLineEdit* edit = qobject_cast<QLineEdit*>(sender());
|
||||
if (edit)
|
||||
{
|
||||
const QString name = edit->text();
|
||||
if (name.isEmpty())
|
||||
{
|
||||
flagGroupName = false;
|
||||
ChangeColor(ui->labelGroupName, errorColor);
|
||||
CheckState();
|
||||
return;
|
||||
}
|
||||
|
||||
flagGroupName = true;
|
||||
ChangeColor(ui->labelGroupName, OkColor(this));
|
||||
}
|
||||
CheckState();
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
void DialogFlippingByAxis::ShowVisualization()
|
||||
{
|
||||
|
|
|
@ -65,6 +65,12 @@ public:
|
|||
|
||||
QVector<quint32> GetObjects() const;
|
||||
|
||||
QString GetVisibilityGroupName() const;
|
||||
void SetVisibilityGroupName(const QString &name);
|
||||
|
||||
bool HasLinkedVisibilityGroup() const;
|
||||
void SetHasLinkedVisibilityGroup(bool linked);
|
||||
|
||||
virtual void ShowDialog(bool click) override;
|
||||
|
||||
public slots:
|
||||
|
@ -73,6 +79,7 @@ public slots:
|
|||
|
||||
private slots:
|
||||
void SuffixChanged();
|
||||
void GroupNameChanged();
|
||||
|
||||
protected:
|
||||
virtual void ShowVisualization() override;
|
||||
|
@ -96,6 +103,7 @@ private:
|
|||
QString m_suffix;
|
||||
|
||||
bool flagName;
|
||||
bool flagGroupName;
|
||||
bool flagError;
|
||||
|
||||
static void FillComboBoxAxisType(QComboBox *box);
|
||||
|
@ -104,7 +112,7 @@ private:
|
|||
//---------------------------------------------------------------------------------------------------------------------
|
||||
inline bool DialogFlippingByAxis::IsValid() const
|
||||
{
|
||||
return flagError && flagName;
|
||||
return flagError && flagName && flagGroupName;
|
||||
}
|
||||
|
||||
#endif // DIALOGFLIPPINGBYAXIS_H
|
||||
|
|
|
@ -6,8 +6,8 @@
|
|||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>285</width>
|
||||
<height>146</height>
|
||||
<width>304</width>
|
||||
<height>207</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
|
@ -48,6 +48,41 @@
|
|||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QGroupBox" name="groupBoxVisibilityGroup">
|
||||
<property name="toolTip">
|
||||
<string>Enable to create a visibility gropup from original objects</string>
|
||||
</property>
|
||||
<property name="title">
|
||||
<string>Visibility Group</string>
|
||||
</property>
|
||||
<property name="checkable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
||||
<item>
|
||||
<widget class="QLabel" name="labelGroupName">
|
||||
<property name="text">
|
||||
<string>Name:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLineEdit" name="lineEditVisibilityGroup">
|
||||
<property name="text">
|
||||
<string>Flipping by axis</string>
|
||||
</property>
|
||||
<property name="clearButtonEnabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QDialogButtonBox" name="buttonBox">
|
||||
<property name="orientation">
|
||||
|
|
|
@ -79,6 +79,7 @@ DialogFlippingByLine::DialogFlippingByLine(const VContainer *data, quint32 toolI
|
|||
FillComboBoxPoints(ui->comboBoxSecondLinePoint);
|
||||
|
||||
connect(ui->lineEditSuffix, &QLineEdit::textChanged, this, &DialogFlippingByLine::SuffixChanged);
|
||||
connect(ui->lineEditVisibilityGroup, &QLineEdit::textChanged, this, &DialogFlippingByLine::GroupNameChanged);
|
||||
connect(ui->comboBoxFirstLinePoint, &QComboBox::currentTextChanged,
|
||||
this, &DialogFlippingByLine::PointChanged);
|
||||
connect(ui->comboBoxSecondLinePoint, &QComboBox::currentTextChanged,
|
||||
|
@ -142,6 +143,30 @@ QVector<quint32> DialogFlippingByLine::GetObjects() const
|
|||
return ConvertToVector(objects);
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
QString DialogFlippingByLine::GetVisibilityGroupName() const
|
||||
{
|
||||
return ui->lineEditVisibilityGroup->text();
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
void DialogFlippingByLine::SetVisibilityGroupName(const QString &name)
|
||||
{
|
||||
ui->lineEditVisibilityGroup->setText(name.isEmpty() ? tr("Rotation") : name);
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
bool DialogFlippingByLine::HasLinkedVisibilityGroup() const
|
||||
{
|
||||
return ui->groupBoxVisibilityGroup->isChecked();
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
void DialogFlippingByLine::SetHasLinkedVisibilityGroup(bool linked)
|
||||
{
|
||||
ui->groupBoxVisibilityGroup->setChecked(linked);
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
void DialogFlippingByLine::ShowDialog(bool click)
|
||||
{
|
||||
|
@ -301,6 +326,27 @@ void DialogFlippingByLine::SuffixChanged()
|
|||
CheckState();
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
void DialogFlippingByLine::GroupNameChanged()
|
||||
{
|
||||
QLineEdit* edit = qobject_cast<QLineEdit*>(sender());
|
||||
if (edit)
|
||||
{
|
||||
const QString name = edit->text();
|
||||
if (name.isEmpty())
|
||||
{
|
||||
flagGroupName = false;
|
||||
ChangeColor(ui->labelGroupName, errorColor);
|
||||
CheckState();
|
||||
return;
|
||||
}
|
||||
|
||||
flagGroupName = true;
|
||||
ChangeColor(ui->labelGroupName, OkColor(this));
|
||||
}
|
||||
CheckState();
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
void DialogFlippingByLine::ShowVisualization()
|
||||
{
|
||||
|
|
|
@ -65,6 +65,12 @@ public:
|
|||
|
||||
QVector<quint32> GetObjects() const;
|
||||
|
||||
QString GetVisibilityGroupName() const;
|
||||
void SetVisibilityGroupName(const QString &name);
|
||||
|
||||
bool HasLinkedVisibilityGroup() const;
|
||||
void SetHasLinkedVisibilityGroup(bool linked);
|
||||
|
||||
virtual void ShowDialog(bool click) override;
|
||||
|
||||
public slots:
|
||||
|
@ -73,6 +79,7 @@ public slots:
|
|||
|
||||
private slots:
|
||||
void SuffixChanged();
|
||||
void GroupNameChanged();
|
||||
|
||||
protected:
|
||||
virtual void ShowVisualization() override;
|
||||
|
@ -96,13 +103,14 @@ private:
|
|||
QString m_suffix;
|
||||
|
||||
bool flagName;
|
||||
bool flagGroupName;
|
||||
bool flagError;
|
||||
};
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
inline bool DialogFlippingByLine::IsValid() const
|
||||
{
|
||||
return flagError && flagName;
|
||||
return flagError && flagName && flagGroupName;
|
||||
}
|
||||
|
||||
#endif // DIALOGFLIPPINGBYLINE_H
|
||||
|
|
|
@ -6,8 +6,8 @@
|
|||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>285</width>
|
||||
<height>146</height>
|
||||
<width>304</width>
|
||||
<height>207</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
|
@ -52,6 +52,41 @@
|
|||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QGroupBox" name="groupBoxVisibilityGroup">
|
||||
<property name="toolTip">
|
||||
<string>Enable to create a visibility gropup from original objects</string>
|
||||
</property>
|
||||
<property name="title">
|
||||
<string>Visibility Group</string>
|
||||
</property>
|
||||
<property name="checkable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
||||
<item>
|
||||
<widget class="QLabel" name="labelGroupName">
|
||||
<property name="text">
|
||||
<string>Name:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLineEdit" name="lineEditVisibilityGroup">
|
||||
<property name="text">
|
||||
<string>Flipping by line</string>
|
||||
</property>
|
||||
<property name="clearButtonEnabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QDialogButtonBox" name="buttonBox">
|
||||
<property name="orientation">
|
||||
|
|
|
@ -85,7 +85,8 @@ DialogMove::DialogMove(const VContainer *data, quint32 toolId, QWidget *parent)
|
|||
flagAngle(false),
|
||||
flagRotationAngle(false),
|
||||
flagLength(false),
|
||||
flagName(true)
|
||||
flagName(true),
|
||||
flagGroupName(true)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
|
||||
|
@ -118,6 +119,7 @@ DialogMove::DialogMove(const VContainer *data, quint32 toolId, QWidget *parent)
|
|||
ui->comboBoxRotationOriginPoint->blockSignals(false);
|
||||
|
||||
connect(ui->lineEditSuffix, &QLineEdit::textChanged, this, &DialogMove::SuffixChanged);
|
||||
connect(ui->lineEditVisibilityGroup, &QLineEdit::textChanged, this, &DialogMove::GroupNameChanged);
|
||||
connect(ui->toolButtonExprAngle, &QPushButton::clicked, this, &DialogMove::FXAngle);
|
||||
connect(ui->toolButtonExprRotationAngle, &QPushButton::clicked, this, &DialogMove::FXRotationAngle);
|
||||
connect(ui->toolButtonExprLength, &QPushButton::clicked, this, &DialogMove::FXLength);
|
||||
|
@ -257,6 +259,30 @@ QVector<quint32> DialogMove::GetObjects() const
|
|||
return ConvertToVector(objects);
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
QString DialogMove::GetVisibilityGroupName() const
|
||||
{
|
||||
return ui->lineEditVisibilityGroup->text();
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
void DialogMove::SetVisibilityGroupName(const QString &name)
|
||||
{
|
||||
ui->lineEditVisibilityGroup->setText(name.isEmpty() ? tr("Rotation") : name);
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
bool DialogMove::HasLinkedVisibilityGroup() const
|
||||
{
|
||||
return ui->groupBoxVisibilityGroup->isChecked();
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
void DialogMove::SetHasLinkedVisibilityGroup(bool linked)
|
||||
{
|
||||
ui->groupBoxVisibilityGroup->setChecked(linked);
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
void DialogMove::ShowDialog(bool click)
|
||||
{
|
||||
|
@ -481,6 +507,27 @@ void DialogMove::SuffixChanged()
|
|||
CheckState();
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
void DialogMove::GroupNameChanged()
|
||||
{
|
||||
QLineEdit* edit = qobject_cast<QLineEdit*>(sender());
|
||||
if (edit)
|
||||
{
|
||||
const QString name = edit->text();
|
||||
if (name.isEmpty())
|
||||
{
|
||||
flagGroupName = false;
|
||||
ChangeColor(ui->labelGroupName, errorColor);
|
||||
CheckState();
|
||||
return;
|
||||
}
|
||||
|
||||
flagGroupName = true;
|
||||
ChangeColor(ui->labelGroupName, OkColor(this));
|
||||
}
|
||||
CheckState();
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
void DialogMove::ShowVisualization()
|
||||
{
|
||||
|
|
|
@ -70,6 +70,12 @@ public:
|
|||
|
||||
QVector<quint32> GetObjects() const;
|
||||
|
||||
QString GetVisibilityGroupName() const;
|
||||
void SetVisibilityGroupName(const QString &name);
|
||||
|
||||
bool HasLinkedVisibilityGroup() const;
|
||||
void SetHasLinkedVisibilityGroup(bool linked);
|
||||
|
||||
virtual void ShowDialog(bool click) override;
|
||||
|
||||
public slots:
|
||||
|
@ -87,6 +93,7 @@ private slots:
|
|||
void FXLength();
|
||||
|
||||
void SuffixChanged();
|
||||
void GroupNameChanged();
|
||||
|
||||
protected:
|
||||
virtual void ShowVisualization() override;
|
||||
|
@ -129,6 +136,7 @@ private:
|
|||
bool flagRotationAngle;
|
||||
bool flagLength;
|
||||
bool flagName;
|
||||
bool flagGroupName;
|
||||
|
||||
void EvalAngle();
|
||||
void EvalRotationAngle();
|
||||
|
@ -138,7 +146,7 @@ private:
|
|||
//---------------------------------------------------------------------------------------------------------------------
|
||||
inline bool DialogMove::IsValid() const
|
||||
{
|
||||
return flagAngle && flagRotationAngle && flagLength && flagName;
|
||||
return flagAngle && flagRotationAngle && flagLength && flagName && flagGroupName;
|
||||
}
|
||||
|
||||
#endif // DIALOGMOVING_H
|
||||
|
|
|
@ -6,8 +6,8 @@
|
|||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>292</width>
|
||||
<height>332</height>
|
||||
<width>304</width>
|
||||
<height>402</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
|
@ -591,6 +591,41 @@
|
|||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QGroupBox" name="groupBoxVisibilityGroup">
|
||||
<property name="toolTip">
|
||||
<string>Enable to create a visibility gropup from original objects</string>
|
||||
</property>
|
||||
<property name="title">
|
||||
<string>Visibility Group</string>
|
||||
</property>
|
||||
<property name="checkable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_3">
|
||||
<item>
|
||||
<widget class="QLabel" name="labelGroupName">
|
||||
<property name="text">
|
||||
<string>Name:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLineEdit" name="lineEditVisibilityGroup">
|
||||
<property name="text">
|
||||
<string>Move</string>
|
||||
</property>
|
||||
<property name="clearButtonEnabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QDialogButtonBox" name="buttonBox">
|
||||
<property name="orientation">
|
||||
|
|
|
@ -77,6 +77,7 @@ DialogRotation::DialogRotation(const VContainer *data, quint32 toolId, QWidget *
|
|||
m_firstRelease(false),
|
||||
flagAngle(false),
|
||||
flagName(true),
|
||||
flagGroupName(true),
|
||||
flagError(false)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
|
@ -94,6 +95,7 @@ DialogRotation::DialogRotation(const VContainer *data, quint32 toolId, QWidget *
|
|||
FillComboBoxPoints(ui->comboBoxOriginPoint);
|
||||
|
||||
connect(ui->lineEditSuffix, &QLineEdit::textChanged, this, &DialogRotation::SuffixChanged);
|
||||
connect(ui->lineEditVisibilityGroup, &QLineEdit::textChanged, this, &DialogRotation::GroupNameChanged);
|
||||
connect(ui->toolButtonExprAngle, &QPushButton::clicked, this, &DialogRotation::FXAngle);
|
||||
connect(ui->plainTextEditFormula, &QPlainTextEdit::textChanged, this, [this]()
|
||||
{
|
||||
|
@ -170,6 +172,30 @@ QVector<quint32> DialogRotation::GetObjects() const
|
|||
return ConvertToVector(objects);
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
QString DialogRotation::GetVisibilityGroupName() const
|
||||
{
|
||||
return ui->lineEditVisibilityGroup->text();
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
void DialogRotation::SetVisibilityGroupName(const QString &name)
|
||||
{
|
||||
ui->lineEditVisibilityGroup->setText(name.isEmpty() ? tr("Rotation") : name);
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
bool DialogRotation::HasLinkedVisibilityGroup() const
|
||||
{
|
||||
return ui->groupBoxVisibilityGroup->isChecked();
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
void DialogRotation::SetHasLinkedVisibilityGroup(bool linked)
|
||||
{
|
||||
ui->groupBoxVisibilityGroup->setChecked(linked);
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
void DialogRotation::ShowDialog(bool click)
|
||||
{
|
||||
|
@ -366,6 +392,27 @@ void DialogRotation::SuffixChanged()
|
|||
CheckState();
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
void DialogRotation::GroupNameChanged()
|
||||
{
|
||||
QLineEdit* edit = qobject_cast<QLineEdit*>(sender());
|
||||
if (edit)
|
||||
{
|
||||
const QString name = edit->text();
|
||||
if (name.isEmpty())
|
||||
{
|
||||
flagGroupName = false;
|
||||
ChangeColor(ui->labelGroupName, errorColor);
|
||||
CheckState();
|
||||
return;
|
||||
}
|
||||
|
||||
flagGroupName = true;
|
||||
ChangeColor(ui->labelGroupName, OkColor(this));
|
||||
}
|
||||
CheckState();
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
void DialogRotation::ShowVisualization()
|
||||
{
|
||||
|
|
|
@ -63,6 +63,12 @@ public:
|
|||
|
||||
QVector<quint32> GetObjects() const;
|
||||
|
||||
QString GetVisibilityGroupName() const;
|
||||
void SetVisibilityGroupName(const QString &name);
|
||||
|
||||
bool HasLinkedVisibilityGroup() const;
|
||||
void SetHasLinkedVisibilityGroup(bool linked);
|
||||
|
||||
virtual void ShowDialog(bool click) override;
|
||||
|
||||
public slots:
|
||||
|
@ -74,6 +80,7 @@ private slots:
|
|||
void DeployAngleTextEdit();
|
||||
void FXAngle();
|
||||
void SuffixChanged();
|
||||
void GroupNameChanged();
|
||||
void EvalAngle();
|
||||
|
||||
protected:
|
||||
|
@ -111,13 +118,14 @@ private:
|
|||
/** @brief flagAngle true if value of angle is correct */
|
||||
bool flagAngle;
|
||||
bool flagName;
|
||||
bool flagGroupName;
|
||||
bool flagError;
|
||||
};
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
inline bool DialogRotation::IsValid() const
|
||||
{
|
||||
return flagAngle && flagName && flagError;
|
||||
return flagAngle && flagName && flagError && flagGroupName;
|
||||
}
|
||||
|
||||
#endif // DIALOGROTATION_H
|
||||
|
|
|
@ -6,8 +6,8 @@
|
|||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>285</width>
|
||||
<height>189</height>
|
||||
<width>392</width>
|
||||
<height>252</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
|
@ -222,6 +222,41 @@
|
|||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QGroupBox" name="groupBoxVisibilityGroup">
|
||||
<property name="toolTip">
|
||||
<string>Enable to create a visibility gropup from original objects</string>
|
||||
</property>
|
||||
<property name="title">
|
||||
<string>Visibility Group</string>
|
||||
</property>
|
||||
<property name="checkable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
||||
<item>
|
||||
<widget class="QLabel" name="labelGroupName">
|
||||
<property name="text">
|
||||
<string>Name:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLineEdit" name="lineEditVisibilityGroup">
|
||||
<property name="text">
|
||||
<string>Rotation</string>
|
||||
</property>
|
||||
<property name="clearButtonEnabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QDialogButtonBox" name="buttonBox">
|
||||
<property name="orientation">
|
||||
|
|
|
@ -74,6 +74,17 @@ void VToolFlippingByAxis::setDialog()
|
|||
dialogTool->SetOriginPointId(m_originPointId);
|
||||
dialogTool->SetAxisType(m_axisType);
|
||||
dialogTool->SetSuffix(suffix);
|
||||
|
||||
vidtype group = doc->GroupLinkedToTool(m_id);
|
||||
if (group != null_id)
|
||||
{
|
||||
dialogTool->SetHasLinkedVisibilityGroup(true);
|
||||
dialogTool->SetVisibilityGroupName(doc->GetGroupName(group));
|
||||
}
|
||||
else
|
||||
{
|
||||
dialogTool->SetHasLinkedVisibilityGroup(false);
|
||||
}
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
|
@ -89,6 +100,8 @@ VToolFlippingByAxis *VToolFlippingByAxis::Create(const QPointer<DialogTool> &dia
|
|||
initData.axisType = dialogTool->GetAxisType();
|
||||
initData.suffix = dialogTool->GetSuffix();
|
||||
initData.source = dialogTool->GetObjects();
|
||||
initData.hasLinkedVisibilityGroup = dialogTool->HasLinkedVisibilityGroup();
|
||||
initData.visibilityGroupName = dialogTool->GetVisibilityGroupName();
|
||||
initData.scene = scene;
|
||||
initData.doc = doc;
|
||||
initData.data = data;
|
||||
|
@ -123,6 +136,11 @@ VToolFlippingByAxis *VToolFlippingByAxis::Create(VToolFlippingByAxisInitData ini
|
|||
|
||||
if (initData.parse == Document::FullParse)
|
||||
{
|
||||
if (initData.typeCreation == Source::FromGui && initData.hasLinkedVisibilityGroup)
|
||||
{
|
||||
qApp->getUndoStack()->beginMacro(tr("Flipping by axis"));
|
||||
}
|
||||
|
||||
VAbstractTool::AddRecord(initData.id, Tool::FlippingByAxis, initData.doc);
|
||||
VToolFlippingByAxis *tool = new VToolFlippingByAxis(initData);
|
||||
initData.scene->addItem(tool);
|
||||
|
@ -133,6 +151,13 @@ VToolFlippingByAxis *VToolFlippingByAxis::Create(VToolFlippingByAxisInitData ini
|
|||
{
|
||||
initData.doc->IncrementReferens(initData.data->GetGObject(idObject)->getIdTool());
|
||||
}
|
||||
|
||||
if (initData.typeCreation == Source::FromGui && initData.hasLinkedVisibilityGroup)
|
||||
{
|
||||
VAbstractOperation::CreateVisibilityGroup(initData);
|
||||
qApp->getUndoStack()->endMacro();
|
||||
}
|
||||
|
||||
return tool;
|
||||
}
|
||||
return nullptr;
|
||||
|
@ -208,6 +233,10 @@ void VToolFlippingByAxis::SaveDialog(QDomElement &domElement, QList<quint32> &ol
|
|||
doc->SetAttribute(domElement, AttrCenter, QString().setNum(dialogTool->GetOriginPointId()));
|
||||
doc->SetAttribute(domElement, AttrAxisType, QString().setNum(static_cast<int>(dialogTool->GetAxisType())));
|
||||
doc->SetAttribute(domElement, AttrSuffix, dialogTool->GetSuffix());
|
||||
|
||||
// Save for later use.
|
||||
hasLinkedGroup = dialogTool->HasLinkedVisibilityGroup();
|
||||
groupName = dialogTool->GetVisibilityGroupName();
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
|
|
|
@ -74,6 +74,17 @@ void VToolFlippingByLine::setDialog()
|
|||
dialogTool->SetFirstLinePointId(m_firstLinePointId);
|
||||
dialogTool->SetSecondLinePointId(m_secondLinePointId);
|
||||
dialogTool->SetSuffix(suffix);
|
||||
|
||||
vidtype group = doc->GroupLinkedToTool(m_id);
|
||||
if (group != null_id)
|
||||
{
|
||||
dialogTool->SetHasLinkedVisibilityGroup(true);
|
||||
dialogTool->SetVisibilityGroupName(doc->GetGroupName(group));
|
||||
}
|
||||
else
|
||||
{
|
||||
dialogTool->SetHasLinkedVisibilityGroup(false);
|
||||
}
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
|
@ -89,6 +100,8 @@ VToolFlippingByLine *VToolFlippingByLine::Create(const QPointer<DialogTool> &dia
|
|||
initData.secondLinePointId = dialogTool->GetSecondLinePointId();
|
||||
initData.suffix = dialogTool->GetSuffix();
|
||||
initData.source = dialogTool->GetObjects();
|
||||
initData.hasLinkedVisibilityGroup = dialogTool->HasLinkedVisibilityGroup();
|
||||
initData.visibilityGroupName = dialogTool->GetVisibilityGroupName();
|
||||
initData.scene = scene;
|
||||
initData.doc = doc;
|
||||
initData.data = data;
|
||||
|
@ -116,6 +129,11 @@ VToolFlippingByLine *VToolFlippingByLine::Create(VToolFlippingByLineInitData ini
|
|||
|
||||
if (initData.parse == Document::FullParse)
|
||||
{
|
||||
if (initData.typeCreation == Source::FromGui && initData.hasLinkedVisibilityGroup)
|
||||
{
|
||||
qApp->getUndoStack()->beginMacro(tr("flipping by line"));
|
||||
}
|
||||
|
||||
VAbstractTool::AddRecord(initData.id, Tool::FlippingByLine, initData.doc);
|
||||
VToolFlippingByLine *tool = new VToolFlippingByLine(initData);
|
||||
initData.scene->addItem(tool);
|
||||
|
@ -127,6 +145,13 @@ VToolFlippingByLine *VToolFlippingByLine::Create(VToolFlippingByLineInitData ini
|
|||
{
|
||||
initData.doc->IncrementReferens(initData.data->GetGObject(idObject)->getIdTool());
|
||||
}
|
||||
|
||||
if (initData.typeCreation == Source::FromGui && initData.hasLinkedVisibilityGroup)
|
||||
{
|
||||
VAbstractOperation::CreateVisibilityGroup(initData);
|
||||
qApp->getUndoStack()->endMacro();
|
||||
}
|
||||
|
||||
return tool;
|
||||
}
|
||||
return nullptr;
|
||||
|
@ -195,6 +220,10 @@ void VToolFlippingByLine::SaveDialog(QDomElement &domElement, QList<quint32> &ol
|
|||
doc->SetAttribute(domElement, AttrP1Line, QString().setNum(dialogTool->GetFirstLinePointId()));
|
||||
doc->SetAttribute(domElement, AttrP2Line, QString().setNum(dialogTool->GetSecondLinePointId()));
|
||||
doc->SetAttribute(domElement, AttrSuffix, dialogTool->GetSuffix());
|
||||
|
||||
// Save for later use.
|
||||
hasLinkedGroup = dialogTool->HasLinkedVisibilityGroup();
|
||||
groupName = dialogTool->GetVisibilityGroupName();
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
|
|
|
@ -29,12 +29,42 @@
|
|||
#include "vabstractoperation.h"
|
||||
#include "../../../undocommands/label/operationmovelabel.h"
|
||||
#include "../../../undocommands/label/operationshowlabel.h"
|
||||
#include "../../../undocommands/savetooloptions.h"
|
||||
#include "../../../undocommands/undogroup.h"
|
||||
#include "../vgeometry/vpointf.h"
|
||||
|
||||
const QString VAbstractOperation::TagItem = QStringLiteral("item");
|
||||
const QString VAbstractOperation::TagSource = QStringLiteral("source");
|
||||
const QString VAbstractOperation::TagDestination = QStringLiteral("destination");
|
||||
|
||||
namespace
|
||||
{
|
||||
/**
|
||||
* @brief VisibilityGroupDataFromSource
|
||||
* @param initData
|
||||
* @return
|
||||
*/
|
||||
QMap<quint32, quint32> VisibilityGroupDataFromSource(const VContainer *data, const QVector<quint32> &source)
|
||||
{
|
||||
QMap<quint32, quint32> groupData;
|
||||
|
||||
for (auto &sId : source)
|
||||
{
|
||||
try
|
||||
{
|
||||
groupData.insert(sId, data->GetGObject(sId)->getIdTool());
|
||||
}
|
||||
catch (const VExceptionBadId &)
|
||||
{
|
||||
// ignore
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return groupData;
|
||||
}
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
QString VAbstractOperation::getTagName() const
|
||||
{
|
||||
|
@ -528,6 +558,66 @@ void VAbstractOperation::ChangeLabelVisibility(quint32 id, bool visible)
|
|||
}
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
void VAbstractOperation::ApplyToolOptions(const QList<quint32> &oldDependencies, const QList<quint32> &newDependencies,
|
||||
const QDomElement &oldDomElement, const QDomElement &newDomElement)
|
||||
{
|
||||
bool updateToolOptions =
|
||||
newDependencies != oldDependencies || not VDomDocument::Compare(newDomElement, oldDomElement);
|
||||
bool updateVisibilityOptions = NeedUpdateVisibilityGroup();
|
||||
|
||||
if (updateToolOptions && updateVisibilityOptions)
|
||||
{
|
||||
qApp->getUndoStack()->beginMacro(tr("operation options"));
|
||||
}
|
||||
|
||||
if (updateToolOptions)
|
||||
{
|
||||
SaveToolOptions *saveOptions = new SaveToolOptions(oldDomElement, newDomElement, oldDependencies,
|
||||
newDependencies, doc, m_id);
|
||||
connect(saveOptions, &SaveToolOptions::NeedLiteParsing, doc, &VAbstractPattern::LiteParseTree);
|
||||
qApp->getUndoStack()->push(saveOptions);
|
||||
}
|
||||
|
||||
if (updateVisibilityOptions)
|
||||
{
|
||||
vidtype group = doc->GroupLinkedToTool(m_id);
|
||||
|
||||
if (hasLinkedGroup)
|
||||
{
|
||||
if (group != null_id)
|
||||
{
|
||||
RenameGroup *renameGroup = new RenameGroup(doc, group, groupName);
|
||||
connect(renameGroup, &RenameGroup::UpdateGroups, doc, &VAbstractPattern::UpdateVisiblityGroups);
|
||||
qApp->getUndoStack()->push(renameGroup);
|
||||
}
|
||||
else
|
||||
{
|
||||
VAbstractOperationInitData initData;
|
||||
initData.id = m_id;
|
||||
initData.hasLinkedVisibilityGroup = hasLinkedGroup;
|
||||
initData.visibilityGroupName = groupName;
|
||||
initData.data = &(VDataTool::data);
|
||||
initData.doc = doc;
|
||||
initData.source = source;
|
||||
|
||||
VAbstractOperation::CreateVisibilityGroup(initData);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
DelGroup *delGroup = new DelGroup(doc, group);
|
||||
connect(delGroup, &DelGroup::UpdateGroups, doc, &VAbstractPattern::UpdateVisiblityGroups);
|
||||
qApp->getUndoStack()->push(delGroup);
|
||||
}
|
||||
}
|
||||
|
||||
if (updateToolOptions && updateVisibilityOptions)
|
||||
{
|
||||
qApp->getUndoStack()->endMacro();
|
||||
}
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
void VAbstractOperation::UpdateNamePosition(quint32 id, const QPointF &pos)
|
||||
{
|
||||
|
@ -641,6 +731,33 @@ void VAbstractOperation::AllowCurveSelecting(bool enabled, GOType type)
|
|||
}
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
bool VAbstractOperation::NeedUpdateVisibilityGroup() const
|
||||
{
|
||||
vidtype group = doc->GroupLinkedToTool(m_id);
|
||||
|
||||
if (hasLinkedGroup)
|
||||
{
|
||||
if (group != null_id)
|
||||
{
|
||||
if (groupName != doc->GetGroupName(group))
|
||||
{
|
||||
return true; // rename group
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return true; // create group
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return group != null_id; // remove group
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
void VAbstractOperation::InitOperatedObjects()
|
||||
{
|
||||
|
@ -725,3 +842,24 @@ QString VAbstractOperation::ComplexCurveToolTip(quint32 itemId) const
|
|||
.arg(UnitsToStr(qApp->patternUnit(), true), MakeToolTip());
|
||||
return toolTip;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
void VAbstractOperation::CreateVisibilityGroup(const VAbstractOperationInitData &initData)
|
||||
{
|
||||
if (not initData.hasLinkedVisibilityGroup && not initData.visibilityGroupName.isEmpty())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
const QMap<quint32, quint32> groupData = VisibilityGroupDataFromSource(initData.data, initData.source);
|
||||
vidtype groupId = initData.data->getNextId();
|
||||
const QDomElement group = initData.doc->CreateGroup(groupId, initData.visibilityGroupName, groupData, initData.id);
|
||||
if (not group.isNull())
|
||||
{
|
||||
AddGroup *addGroup = new AddGroup(group, initData.doc);
|
||||
connect(addGroup, &AddGroup::UpdateGroups, initData.doc, &VAbstractPattern::UpdateVisiblityGroups);
|
||||
qApp->getUndoStack()->push(addGroup);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -53,15 +53,14 @@ struct DestinationItem
|
|||
struct VAbstractOperationInitData : VAbstractToolInitData
|
||||
{
|
||||
VAbstractOperationInitData()
|
||||
: VAbstractToolInitData(),
|
||||
suffix(),
|
||||
source(),
|
||||
destination()
|
||||
: VAbstractToolInitData()
|
||||
{}
|
||||
|
||||
QString suffix;
|
||||
QVector<quint32> source;
|
||||
QVector<DestinationItem> destination;
|
||||
QString suffix{};
|
||||
QVector<quint32> source{};
|
||||
QVector<DestinationItem> destination{};
|
||||
QString visibilityGroupName{};
|
||||
bool hasLinkedVisibilityGroup{false};
|
||||
};
|
||||
|
||||
// FIXME. I don't know how to use QGraphicsItem properly, so just took first available finished class.
|
||||
|
@ -133,12 +132,17 @@ protected:
|
|||
|
||||
QMap<quint32, VAbstractSimple *> operatedObjects;
|
||||
|
||||
bool hasLinkedGroup{false};
|
||||
QString groupName{};
|
||||
|
||||
VAbstractOperation(VAbstractPattern *doc, VContainer *data, quint32 id, const QString &suffix,
|
||||
const QVector<quint32> &source, const QVector<DestinationItem> &destination,
|
||||
QGraphicsItem *parent = nullptr);
|
||||
|
||||
virtual void AddToFile() override;
|
||||
virtual void ChangeLabelVisibility(quint32 id, bool visible) override;
|
||||
virtual void ApplyToolOptions(const QList<quint32> &oldDependencies, const QList<quint32> &newDependencies,
|
||||
const QDomElement &oldDomElement, const QDomElement &newDomElement) override;
|
||||
|
||||
void UpdateNamePosition(quint32 id, const QPointF &pos);
|
||||
void SaveSourceDestination(QDomElement &tag);
|
||||
|
@ -155,11 +159,15 @@ protected:
|
|||
|
||||
QString ComplexPointToolTip(quint32 itemId) const;
|
||||
QString ComplexCurveToolTip(quint32 itemId) const;
|
||||
|
||||
static void CreateVisibilityGroup(const VAbstractOperationInitData & initData);
|
||||
private:
|
||||
Q_DISABLE_COPY(VAbstractOperation)
|
||||
|
||||
void AllowCurveHover(bool enabled, GOType type);
|
||||
void AllowCurveSelecting(bool enabled, GOType type);
|
||||
|
||||
bool NeedUpdateVisibilityGroup() const;
|
||||
};
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
|
|
|
@ -128,6 +128,17 @@ void VToolMove::setDialog()
|
|||
dialogTool->SetLength(formulaLength);
|
||||
dialogTool->SetSuffix(suffix);
|
||||
dialogTool->SetRotationOrigPointId(origPointId);
|
||||
|
||||
vidtype group = doc->GroupLinkedToTool(m_id);
|
||||
if (group != null_id)
|
||||
{
|
||||
dialogTool->SetHasLinkedVisibilityGroup(true);
|
||||
dialogTool->SetVisibilityGroupName(doc->GetGroupName(group));
|
||||
}
|
||||
else
|
||||
{
|
||||
dialogTool->SetHasLinkedVisibilityGroup(false);
|
||||
}
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
|
@ -145,6 +156,8 @@ VToolMove *VToolMove::Create(const QPointer<DialogTool> &dialog, VMainGraphicsSc
|
|||
initData.rotationOrigin = dialogTool->GetRotationOrigPointId();
|
||||
initData.suffix = dialogTool->GetSuffix();
|
||||
initData.source = dialogTool->GetObjects();
|
||||
initData.hasLinkedVisibilityGroup = dialogTool->HasLinkedVisibilityGroup();
|
||||
initData.visibilityGroupName = dialogTool->GetVisibilityGroupName();
|
||||
initData.scene = scene;
|
||||
initData.doc = doc;
|
||||
initData.data = data;
|
||||
|
@ -309,6 +322,11 @@ QT_WARNING_POP
|
|||
|
||||
if (initData.parse == Document::FullParse)
|
||||
{
|
||||
if (initData.typeCreation == Source::FromGui && initData.hasLinkedVisibilityGroup)
|
||||
{
|
||||
qApp->getUndoStack()->beginMacro(tr("move"));
|
||||
}
|
||||
|
||||
VAbstractTool::AddRecord(initData.id, Tool::Move, initData.doc);
|
||||
VToolMove *tool = new VToolMove(initData);
|
||||
initData.scene->addItem(tool);
|
||||
|
@ -324,6 +342,13 @@ QT_WARNING_POP
|
|||
{
|
||||
initData.doc->IncrementReferens(initData.data->GetGObject(idObject)->getIdTool());
|
||||
}
|
||||
|
||||
if (initData.typeCreation == Source::FromGui && initData.hasLinkedVisibilityGroup)
|
||||
{
|
||||
VAbstractOperation::CreateVisibilityGroup(initData);
|
||||
qApp->getUndoStack()->endMacro();
|
||||
}
|
||||
|
||||
return tool;
|
||||
}
|
||||
return nullptr;
|
||||
|
@ -464,6 +489,10 @@ void VToolMove::SaveDialog(QDomElement &domElement, QList<quint32> &oldDependenc
|
|||
doc->SetAttribute(domElement, AttrSuffix, dialogTool->GetSuffix());
|
||||
doc->SetAttribute(domElement, AttrCenter, QString().setNum(dialogTool->GetRotationOrigPointId()));
|
||||
doc->SetAttribute(domElement, AttrRotationAngle, dialogTool->GetRotationAngle());
|
||||
|
||||
// Save for later use.
|
||||
hasLinkedGroup = dialogTool->HasLinkedVisibilityGroup();
|
||||
groupName = dialogTool->GetVisibilityGroupName();
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
|
|
|
@ -98,6 +98,17 @@ void VToolRotation::setDialog()
|
|||
dialogTool->SetOrigPointId(origPointId);
|
||||
dialogTool->SetAngle(formulaAngle);
|
||||
dialogTool->SetSuffix(suffix);
|
||||
|
||||
vidtype group = doc->GroupLinkedToTool(m_id);
|
||||
if (group != null_id)
|
||||
{
|
||||
dialogTool->SetHasLinkedVisibilityGroup(true);
|
||||
dialogTool->SetVisibilityGroupName(doc->GetGroupName(group));
|
||||
}
|
||||
else
|
||||
{
|
||||
dialogTool->SetHasLinkedVisibilityGroup(false);
|
||||
}
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
|
@ -113,6 +124,8 @@ VToolRotation *VToolRotation::Create(const QPointer<DialogTool> &dialog, VMainGr
|
|||
initData.angle = dialogTool->GetAngle();
|
||||
initData.suffix = dialogTool->GetSuffix();
|
||||
initData.source = dialogTool->GetObjects();
|
||||
initData.hasLinkedVisibilityGroup = dialogTool->HasLinkedVisibilityGroup();
|
||||
initData.visibilityGroupName = dialogTool->GetVisibilityGroupName();
|
||||
initData.scene = scene;
|
||||
initData.doc = doc;
|
||||
initData.data = data;
|
||||
|
@ -251,6 +264,11 @@ QT_WARNING_POP
|
|||
|
||||
if (initData.parse == Document::FullParse)
|
||||
{
|
||||
if (initData.typeCreation == Source::FromGui && initData.hasLinkedVisibilityGroup)
|
||||
{
|
||||
qApp->getUndoStack()->beginMacro(tr("rotate"));
|
||||
}
|
||||
|
||||
VAbstractTool::AddRecord(initData.id, Tool::Rotation, initData.doc);
|
||||
VToolRotation *tool = new VToolRotation(initData);
|
||||
initData.scene->addItem(tool);
|
||||
|
@ -261,6 +279,13 @@ QT_WARNING_POP
|
|||
{
|
||||
initData.doc->IncrementReferens(initData.data->GetGObject(idObject)->getIdTool());
|
||||
}
|
||||
|
||||
if (initData.typeCreation == Source::FromGui && initData.hasLinkedVisibilityGroup)
|
||||
{
|
||||
VAbstractOperation::CreateVisibilityGroup(initData);
|
||||
qApp->getUndoStack()->endMacro();
|
||||
}
|
||||
|
||||
return tool;
|
||||
}
|
||||
return nullptr;
|
||||
|
@ -344,6 +369,10 @@ void VToolRotation::SaveDialog(QDomElement &domElement, QList<quint32> &oldDepen
|
|||
doc->SetAttribute(domElement, AttrCenter, QString().setNum(dialogTool->GetOrigPointId()));
|
||||
doc->SetAttribute(domElement, AttrAngle, dialogTool->GetAngle());
|
||||
doc->SetAttribute(domElement, AttrSuffix, dialogTool->GetSuffix());
|
||||
|
||||
// Save for later use.
|
||||
hasLinkedGroup = dialogTool->HasLinkedVisibilityGroup();
|
||||
groupName = dialogTool->GetVisibilityGroupName();
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
|
|
|
@ -114,14 +114,7 @@ void VDrawTool::SaveDialogChange(const QString &undoText)
|
|||
QList<quint32> oldDependencies;
|
||||
QList<quint32> newDependencies;
|
||||
SaveDialog(newDomElement, oldDependencies, newDependencies);
|
||||
|
||||
if (newDependencies != oldDependencies || not VDomDocument::Compare(newDomElement, oldDomElement))
|
||||
{
|
||||
SaveToolOptions *saveOptions = new SaveToolOptions(oldDomElement, newDomElement, oldDependencies,
|
||||
newDependencies, doc, m_id);
|
||||
connect(saveOptions, &SaveToolOptions::NeedLiteParsing, doc, &VAbstractPattern::LiteParseTree);
|
||||
qApp->getUndoStack()->push(saveOptions);
|
||||
}
|
||||
ApplyToolOptions(oldDependencies, newDependencies, oldDomElement, newDomElement);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -129,6 +122,19 @@ void VDrawTool::SaveDialogChange(const QString &undoText)
|
|||
}
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
void VDrawTool::ApplyToolOptions(const QList<quint32> &oldDependencies, const QList<quint32> &newDependencies,
|
||||
const QDomElement &oldDomElement, const QDomElement &newDomElement)
|
||||
{
|
||||
if (newDependencies != oldDependencies || not VDomDocument::Compare(newDomElement, oldDomElement))
|
||||
{
|
||||
SaveToolOptions *saveOptions = new SaveToolOptions(oldDomElement, newDomElement, oldDependencies,
|
||||
newDependencies, doc, m_id);
|
||||
connect(saveOptions, &SaveToolOptions::NeedLiteParsing, doc, &VAbstractPattern::LiteParseTree);
|
||||
qApp->getUndoStack()->push(saveOptions);
|
||||
}
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
/**
|
||||
* @brief AddToFile add tag with informations about tool into file.
|
||||
|
|
|
@ -99,6 +99,8 @@ protected:
|
|||
virtual void SaveDialog(QDomElement &domElement, QList<quint32> &oldDependencies,
|
||||
QList<quint32> &newDependencies)=0;
|
||||
virtual void SaveDialogChange(const QString &undoText = QString()) final;
|
||||
virtual void ApplyToolOptions(const QList<quint32> &oldDependencies, const QList<quint32> &newDependencies,
|
||||
const QDomElement &oldDomElement, const QDomElement &newDomElement);
|
||||
virtual void AddToFile() override;
|
||||
void SaveOption(QSharedPointer<VGObject> &obj);
|
||||
virtual void SaveOptions(QDomElement &tag, QSharedPointer<VGObject> &obj);
|
||||
|
|
|
@ -117,6 +117,34 @@ void AddGroup::redo()
|
|||
VMainGraphicsView::NewSceneRect(qApp->getCurrentScene(), qApp->getSceneView());
|
||||
}
|
||||
|
||||
//RenameGroup
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
RenameGroup::RenameGroup(VAbstractPattern *doc, quint32 id, const QString &name, QUndoCommand *parent)
|
||||
: VUndoCommand(QDomElement(), doc, parent),
|
||||
newName(name)
|
||||
{
|
||||
setText(tr("rename group"));
|
||||
nodeId = id;
|
||||
oldName = doc->GetGroupName(nodeId);
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
void RenameGroup::undo()
|
||||
{
|
||||
qCDebug(vUndo, "Undo.");
|
||||
doc->SetGroupName(nodeId, oldName);
|
||||
emit UpdateGroups();
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
void RenameGroup::redo()
|
||||
{
|
||||
qCDebug(vUndo, "Redo.");
|
||||
|
||||
doc->SetGroupName(nodeId, newName);
|
||||
emit UpdateGroups();
|
||||
}
|
||||
|
||||
//AddItemToGroup
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
AddItemToGroup::AddItemToGroup(const QDomElement &xml, VAbstractPattern *doc, quint32 groupId, QUndoCommand *parent)
|
||||
|
|
|
@ -53,6 +53,22 @@ private:
|
|||
const QString nameActivDraw;
|
||||
};
|
||||
|
||||
class RenameGroup : public VUndoCommand
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
RenameGroup(VAbstractPattern *doc, quint32 id, const QString &name, QUndoCommand *parent = nullptr);
|
||||
virtual ~RenameGroup()=default;
|
||||
virtual void undo() override;
|
||||
virtual void redo() override;
|
||||
signals:
|
||||
void UpdateGroups();
|
||||
private:
|
||||
Q_DISABLE_COPY(RenameGroup)
|
||||
QString newName;
|
||||
QString oldName{};
|
||||
};
|
||||
|
||||
class AddItemToGroup : public VUndoCommand
|
||||
{
|
||||
Q_OBJECT
|
||||
|
|
Loading…
Reference in New Issue
Block a user