Auto-created Visibility Group for group operation. Closes smart-pattern/valentina#18.

This commit is contained in:
Roman Telezhynskyi 2020-03-18 14:45:47 +02:00
parent 9869ae249f
commit 526892ed5a
30 changed files with 2026 additions and 87 deletions

View File

@ -43,6 +43,7 @@
- Change default values for grainline length and pattern label size to 10 cm. - Change default values for grainline length and pattern label size to 10 cm.
- Tool Point at distance and angle now allows negative length. - Tool Point at distance and angle now allows negative length.
- Export pattern to DXF-ASTM. - Export pattern to DXF-ASTM.
- [smart-pattern/valentina#18] Auto-created Visibility Group for group operation.
# Version 0.6.2 (unreleased) # Version 0.6.2 (unreleased)
- [#903] Bug in tool Cut Spline path. - [#903] Bug in tool Cut Spline path.

View File

@ -148,9 +148,9 @@ void VWidgetGroups::RenameGroup(int row, int column)
} }
const quint32 id = ui->tableWidget->item(row, 0)->data(Qt::UserRole).toUInt(); const quint32 id = ui->tableWidget->item(row, 0)->data(Qt::UserRole).toUInt();
doc->SetGroupName(id, ui->tableWidget->item(row, column)->text()); ::RenameGroup *renameGroup = new ::RenameGroup(doc, id, ui->tableWidget->item(row, column)->text());
connect(renameGroup, &RenameGroup::UpdateGroups, this, &VWidgetGroups::UpdateGroups);
UpdateGroups(); qApp->getUndoStack()->push(renameGroup);
} }
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
@ -209,9 +209,9 @@ void VWidgetGroups::CtxMenu(const QPoint &pos)
if (result == QDialog::Accepted) if (result == QDialog::Accepted)
{ {
doc->SetGroupName(id, dialog->GetName()); ::RenameGroup *renameGroup = new ::RenameGroup(doc, id, dialog->GetName());
item = ui->tableWidget->item(row, 1); connect(renameGroup, &RenameGroup::UpdateGroups, this, &VWidgetGroups::UpdateGroups);
item->setText(dialog->GetName()); qApp->getUndoStack()->push(renameGroup);
} }
} }
else if (selectedAction == actionDelete) else if (selectedAction == actionDelete)

View File

@ -58,6 +58,7 @@
<file>schema/pattern/v0.8.4.xsd</file> <file>schema/pattern/v0.8.4.xsd</file>
<file>schema/pattern/v0.8.5.xsd</file> <file>schema/pattern/v0.8.5.xsd</file>
<file>schema/pattern/v0.8.6.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.3.0.xsd</file>
<file>schema/standard_measurements/v0.4.0.xsd</file> <file>schema/standard_measurements/v0.4.0.xsd</file>
<file>schema/standard_measurements/v0.4.1.xsd</file> <file>schema/standard_measurements/v0.4.1.xsd</file>

File diff suppressed because it is too large Load Diff

View File

@ -1730,6 +1730,12 @@ void VAbstractPattern::SelectedDetail(quint32 id)
emit ShowDetail(id); emit ShowDetail(id);
} }
//---------------------------------------------------------------------------------------------------------------------
void VAbstractPattern::UpdateVisiblityGroups()
{
emit UpdateGroups();
}
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
void VAbstractPattern::ToolExists(const quint32 &id) 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()) 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, AttrId, id);
SetAttribute(group, AttrName, name); SetAttribute(group, AttrName, name);
SetAttribute(group, AttrVisible, true); SetAttribute(group, AttrVisible, true);
SetAttributeOrRemoveIf(group, AttrTool, tool, tool == null_id);
auto i = groupData.constBegin(); auto i = groupData.constBegin();
while (i != groupData.constEnd()) while (i != groupData.constEnd())
@ -2446,66 +2454,50 @@ QDomElement VAbstractPattern::CreateGroup(quint32 id, const QString &name, const
return group; 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 VAbstractPattern::GetGroupName(quint32 id)
{ {
QString name = tr("New group"); QString name = tr("New group");
QDomElement groups = CreateGroups(); QDomElement group = elementById(id, TagGroup);
if (not groups.isNull()) if (group.isElement())
{ {
QDomElement group = elementById(id, TagGroup); name = GetParametrString(group, AttrName, name);
if (group.isElement())
{
name = GetParametrString(group, AttrName, name);
return name;
}
else
{
if (groups.childNodes().isEmpty())
{
QDomNode parent = groups.parentNode();
parent.removeChild(groups);
}
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) void VAbstractPattern::SetGroupName(quint32 id, const QString &name)
{ {
QDomElement groups = CreateGroups(); QDomElement group = elementById(id, TagGroup);
if (not groups.isNull()) if (group.isElement())
{ {
QDomElement group = elementById(id, TagGroup); group.setAttribute(AttrName, name);
if (group.isElement()) modified = true;
{ emit patternChanged(false);
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.");
} }
} }

View File

@ -200,7 +200,9 @@ public:
void ParseGroups(const QDomElement &domElement); void ParseGroups(const QDomElement &domElement);
QDomElement CreateGroups(); 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); QString GetGroupName(quint32 id);
void SetGroupName(quint32 id, const QString &name); void SetGroupName(quint32 id, const QString &name);
QMap<quint32, QPair<QString, bool> > GetGroups(); QMap<quint32, QPair<QString, bool> > GetGroups();
@ -413,6 +415,7 @@ public slots:
void ClearScene(); void ClearScene();
void CheckInLayoutList(); void CheckInLayoutList();
void SelectedDetail(quint32 id); void SelectedDetail(quint32 id);
void UpdateVisiblityGroups();
protected: protected:
/** @brief nameActivDraw name current pattern peace. */ /** @brief nameActivDraw name current pattern peace. */

View File

@ -59,8 +59,8 @@ class QDomElement;
*/ */
const QString VPatternConverter::PatternMinVerStr = QStringLiteral("0.1.4"); const QString VPatternConverter::PatternMinVerStr = QStringLiteral("0.1.4");
const QString VPatternConverter::PatternMaxVerStr = QStringLiteral("0.8.6"); const QString VPatternConverter::PatternMaxVerStr = QStringLiteral("0.8.7");
const QString VPatternConverter::CurrentSchema = QStringLiteral("://schema/pattern/v0.8.6.xsd"); const QString VPatternConverter::CurrentSchema = QStringLiteral("://schema/pattern/v0.8.7.xsd");
//VPatternConverter::PatternMinVer; // <== DON'T FORGET TO UPDATE TOO!!!! //VPatternConverter::PatternMinVer; // <== DON'T FORGET TO UPDATE TOO!!!!
//VPatternConverter::PatternMaxVer; // <== 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, 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, 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, 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)) if (schemas.contains(ver))
@ -481,6 +482,10 @@ void VPatternConverter::ApplyPatches()
ValidateXML(XSDSchema(FORMAT_VERSION(0, 8, 6))); ValidateXML(XSDSchema(FORMAT_VERSION(0, 8, 6)));
Q_FALLTHROUGH(); Q_FALLTHROUGH();
case (FORMAT_VERSION(0, 8, 6)): 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; break;
default: default:
InvalidVersion(m_ver); InvalidVersion(m_ver);
@ -498,7 +503,7 @@ void VPatternConverter::DowngradeToCurrentMaxVersion()
bool VPatternConverter::IsReadOnly() const bool VPatternConverter::IsReadOnly() const
{ {
// Check if attribute readOnly was not changed in file format // 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."); "Check attribute readOnly.");
// Possibly in future attribute readOnly will change position etc. // Possibly in future attribute readOnly will change position etc.
@ -1128,6 +1133,16 @@ void VPatternConverter::ToV0_8_6()
Save(); 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() void VPatternConverter::TagUnitToV0_2_0()
{ {

View File

@ -53,7 +53,7 @@ public:
static const QString PatternMaxVerStr; static const QString PatternMaxVerStr;
static const QString CurrentSchema; static const QString CurrentSchema;
static Q_DECL_CONSTEXPR const int PatternMinVer = FORMAT_VERSION(0, 1, 4); 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: protected:
virtual int MinVer() const override; virtual int MinVer() const override;
@ -129,6 +129,7 @@ private:
void ToV0_8_4(); void ToV0_8_4();
void ToV0_8_5(); void ToV0_8_5();
void ToV0_8_6(); void ToV0_8_6();
void ToV0_8_7();
void TagUnitToV0_2_0(); void TagUnitToV0_2_0();
void TagIncrementToV0_2_0(); void TagIncrementToV0_2_0();

View File

@ -67,6 +67,7 @@ DialogFlippingByAxis::DialogFlippingByAxis(const VContainer *data, quint32 toolI
stage1(true), stage1(true),
m_suffix(), m_suffix(),
flagName(true), flagName(true),
flagGroupName(true),
flagError(false) flagError(false)
{ {
ui->setupUi(this); ui->setupUi(this);
@ -81,6 +82,7 @@ DialogFlippingByAxis::DialogFlippingByAxis(const VContainer *data, quint32 toolI
ui->comboBoxOriginPoint->setCurrentIndex(-1); ui->comboBoxOriginPoint->setCurrentIndex(-1);
connect(ui->lineEditSuffix, &QLineEdit::textChanged, this, &DialogFlippingByAxis::SuffixChanged); connect(ui->lineEditSuffix, &QLineEdit::textChanged, this, &DialogFlippingByAxis::SuffixChanged);
connect(ui->lineEditVisibilityGroup, &QLineEdit::textChanged, this, &DialogFlippingByAxis::GroupNameChanged);
connect(ui->comboBoxOriginPoint, &QComboBox::currentTextChanged, connect(ui->comboBoxOriginPoint, &QComboBox::currentTextChanged,
this, &DialogFlippingByAxis::PointChanged); this, &DialogFlippingByAxis::PointChanged);
@ -147,6 +149,30 @@ QVector<quint32> DialogFlippingByAxis::GetObjects() const
return ConvertToVector(objects); 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) void DialogFlippingByAxis::ShowDialog(bool click)
{ {
@ -277,6 +303,27 @@ void DialogFlippingByAxis::SuffixChanged()
CheckState(); 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() void DialogFlippingByAxis::ShowVisualization()
{ {

View File

@ -65,6 +65,12 @@ public:
QVector<quint32> GetObjects() const; 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; virtual void ShowDialog(bool click) override;
public slots: public slots:
@ -73,6 +79,7 @@ public slots:
private slots: private slots:
void SuffixChanged(); void SuffixChanged();
void GroupNameChanged();
protected: protected:
virtual void ShowVisualization() override; virtual void ShowVisualization() override;
@ -96,6 +103,7 @@ private:
QString m_suffix; QString m_suffix;
bool flagName; bool flagName;
bool flagGroupName;
bool flagError; bool flagError;
static void FillComboBoxAxisType(QComboBox *box); static void FillComboBoxAxisType(QComboBox *box);
@ -104,7 +112,7 @@ private:
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
inline bool DialogFlippingByAxis::IsValid() const inline bool DialogFlippingByAxis::IsValid() const
{ {
return flagError && flagName; return flagError && flagName && flagGroupName;
} }
#endif // DIALOGFLIPPINGBYAXIS_H #endif // DIALOGFLIPPINGBYAXIS_H

View File

@ -6,8 +6,8 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>285</width> <width>304</width>
<height>146</height> <height>207</height>
</rect> </rect>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
@ -48,6 +48,41 @@
</item> </item>
</layout> </layout>
</item> </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> <item>
<widget class="QDialogButtonBox" name="buttonBox"> <widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation"> <property name="orientation">

View File

@ -79,6 +79,7 @@ DialogFlippingByLine::DialogFlippingByLine(const VContainer *data, quint32 toolI
FillComboBoxPoints(ui->comboBoxSecondLinePoint); FillComboBoxPoints(ui->comboBoxSecondLinePoint);
connect(ui->lineEditSuffix, &QLineEdit::textChanged, this, &DialogFlippingByLine::SuffixChanged); connect(ui->lineEditSuffix, &QLineEdit::textChanged, this, &DialogFlippingByLine::SuffixChanged);
connect(ui->lineEditVisibilityGroup, &QLineEdit::textChanged, this, &DialogFlippingByLine::GroupNameChanged);
connect(ui->comboBoxFirstLinePoint, &QComboBox::currentTextChanged, connect(ui->comboBoxFirstLinePoint, &QComboBox::currentTextChanged,
this, &DialogFlippingByLine::PointChanged); this, &DialogFlippingByLine::PointChanged);
connect(ui->comboBoxSecondLinePoint, &QComboBox::currentTextChanged, connect(ui->comboBoxSecondLinePoint, &QComboBox::currentTextChanged,
@ -142,6 +143,30 @@ QVector<quint32> DialogFlippingByLine::GetObjects() const
return ConvertToVector(objects); 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) void DialogFlippingByLine::ShowDialog(bool click)
{ {
@ -301,6 +326,27 @@ void DialogFlippingByLine::SuffixChanged()
CheckState(); 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() void DialogFlippingByLine::ShowVisualization()
{ {

View File

@ -65,6 +65,12 @@ public:
QVector<quint32> GetObjects() const; 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; virtual void ShowDialog(bool click) override;
public slots: public slots:
@ -73,6 +79,7 @@ public slots:
private slots: private slots:
void SuffixChanged(); void SuffixChanged();
void GroupNameChanged();
protected: protected:
virtual void ShowVisualization() override; virtual void ShowVisualization() override;
@ -96,13 +103,14 @@ private:
QString m_suffix; QString m_suffix;
bool flagName; bool flagName;
bool flagGroupName;
bool flagError; bool flagError;
}; };
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
inline bool DialogFlippingByLine::IsValid() const inline bool DialogFlippingByLine::IsValid() const
{ {
return flagError && flagName; return flagError && flagName && flagGroupName;
} }
#endif // DIALOGFLIPPINGBYLINE_H #endif // DIALOGFLIPPINGBYLINE_H

View File

@ -6,8 +6,8 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>285</width> <width>304</width>
<height>146</height> <height>207</height>
</rect> </rect>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
@ -52,6 +52,41 @@
</item> </item>
</layout> </layout>
</item> </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> <item>
<widget class="QDialogButtonBox" name="buttonBox"> <widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation"> <property name="orientation">

View File

@ -85,7 +85,8 @@ DialogMove::DialogMove(const VContainer *data, quint32 toolId, QWidget *parent)
flagAngle(false), flagAngle(false),
flagRotationAngle(false), flagRotationAngle(false),
flagLength(false), flagLength(false),
flagName(true) flagName(true),
flagGroupName(true)
{ {
ui->setupUi(this); ui->setupUi(this);
@ -118,6 +119,7 @@ DialogMove::DialogMove(const VContainer *data, quint32 toolId, QWidget *parent)
ui->comboBoxRotationOriginPoint->blockSignals(false); ui->comboBoxRotationOriginPoint->blockSignals(false);
connect(ui->lineEditSuffix, &QLineEdit::textChanged, this, &DialogMove::SuffixChanged); 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->toolButtonExprAngle, &QPushButton::clicked, this, &DialogMove::FXAngle);
connect(ui->toolButtonExprRotationAngle, &QPushButton::clicked, this, &DialogMove::FXRotationAngle); connect(ui->toolButtonExprRotationAngle, &QPushButton::clicked, this, &DialogMove::FXRotationAngle);
connect(ui->toolButtonExprLength, &QPushButton::clicked, this, &DialogMove::FXLength); connect(ui->toolButtonExprLength, &QPushButton::clicked, this, &DialogMove::FXLength);
@ -257,6 +259,30 @@ QVector<quint32> DialogMove::GetObjects() const
return ConvertToVector(objects); 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) void DialogMove::ShowDialog(bool click)
{ {
@ -481,6 +507,27 @@ void DialogMove::SuffixChanged()
CheckState(); 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() void DialogMove::ShowVisualization()
{ {

View File

@ -70,6 +70,12 @@ public:
QVector<quint32> GetObjects() const; 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; virtual void ShowDialog(bool click) override;
public slots: public slots:
@ -87,6 +93,7 @@ private slots:
void FXLength(); void FXLength();
void SuffixChanged(); void SuffixChanged();
void GroupNameChanged();
protected: protected:
virtual void ShowVisualization() override; virtual void ShowVisualization() override;
@ -129,6 +136,7 @@ private:
bool flagRotationAngle; bool flagRotationAngle;
bool flagLength; bool flagLength;
bool flagName; bool flagName;
bool flagGroupName;
void EvalAngle(); void EvalAngle();
void EvalRotationAngle(); void EvalRotationAngle();
@ -138,7 +146,7 @@ private:
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
inline bool DialogMove::IsValid() const inline bool DialogMove::IsValid() const
{ {
return flagAngle && flagRotationAngle && flagLength && flagName; return flagAngle && flagRotationAngle && flagLength && flagName && flagGroupName;
} }
#endif // DIALOGMOVING_H #endif // DIALOGMOVING_H

View File

@ -6,8 +6,8 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>292</width> <width>304</width>
<height>332</height> <height>402</height>
</rect> </rect>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
@ -591,6 +591,41 @@
</item> </item>
</layout> </layout>
</item> </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> <item>
<widget class="QDialogButtonBox" name="buttonBox"> <widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation"> <property name="orientation">

View File

@ -77,6 +77,7 @@ DialogRotation::DialogRotation(const VContainer *data, quint32 toolId, QWidget *
m_firstRelease(false), m_firstRelease(false),
flagAngle(false), flagAngle(false),
flagName(true), flagName(true),
flagGroupName(true),
flagError(false) flagError(false)
{ {
ui->setupUi(this); ui->setupUi(this);
@ -94,6 +95,7 @@ DialogRotation::DialogRotation(const VContainer *data, quint32 toolId, QWidget *
FillComboBoxPoints(ui->comboBoxOriginPoint); FillComboBoxPoints(ui->comboBoxOriginPoint);
connect(ui->lineEditSuffix, &QLineEdit::textChanged, this, &DialogRotation::SuffixChanged); 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->toolButtonExprAngle, &QPushButton::clicked, this, &DialogRotation::FXAngle);
connect(ui->plainTextEditFormula, &QPlainTextEdit::textChanged, this, [this]() connect(ui->plainTextEditFormula, &QPlainTextEdit::textChanged, this, [this]()
{ {
@ -170,6 +172,30 @@ QVector<quint32> DialogRotation::GetObjects() const
return ConvertToVector(objects); 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) void DialogRotation::ShowDialog(bool click)
{ {
@ -366,6 +392,27 @@ void DialogRotation::SuffixChanged()
CheckState(); 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() void DialogRotation::ShowVisualization()
{ {

View File

@ -63,6 +63,12 @@ public:
QVector<quint32> GetObjects() const; 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; virtual void ShowDialog(bool click) override;
public slots: public slots:
@ -74,6 +80,7 @@ private slots:
void DeployAngleTextEdit(); void DeployAngleTextEdit();
void FXAngle(); void FXAngle();
void SuffixChanged(); void SuffixChanged();
void GroupNameChanged();
void EvalAngle(); void EvalAngle();
protected: protected:
@ -111,13 +118,14 @@ private:
/** @brief flagAngle true if value of angle is correct */ /** @brief flagAngle true if value of angle is correct */
bool flagAngle; bool flagAngle;
bool flagName; bool flagName;
bool flagGroupName;
bool flagError; bool flagError;
}; };
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
inline bool DialogRotation::IsValid() const inline bool DialogRotation::IsValid() const
{ {
return flagAngle && flagName && flagError; return flagAngle && flagName && flagError && flagGroupName;
} }
#endif // DIALOGROTATION_H #endif // DIALOGROTATION_H

View File

@ -6,8 +6,8 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>285</width> <width>392</width>
<height>189</height> <height>252</height>
</rect> </rect>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
@ -222,6 +222,41 @@
</item> </item>
</layout> </layout>
</item> </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> <item>
<widget class="QDialogButtonBox" name="buttonBox"> <widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation"> <property name="orientation">

View File

@ -74,6 +74,17 @@ void VToolFlippingByAxis::setDialog()
dialogTool->SetOriginPointId(m_originPointId); dialogTool->SetOriginPointId(m_originPointId);
dialogTool->SetAxisType(m_axisType); dialogTool->SetAxisType(m_axisType);
dialogTool->SetSuffix(suffix); 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.axisType = dialogTool->GetAxisType();
initData.suffix = dialogTool->GetSuffix(); initData.suffix = dialogTool->GetSuffix();
initData.source = dialogTool->GetObjects(); initData.source = dialogTool->GetObjects();
initData.hasLinkedVisibilityGroup = dialogTool->HasLinkedVisibilityGroup();
initData.visibilityGroupName = dialogTool->GetVisibilityGroupName();
initData.scene = scene; initData.scene = scene;
initData.doc = doc; initData.doc = doc;
initData.data = data; initData.data = data;
@ -123,6 +136,11 @@ VToolFlippingByAxis *VToolFlippingByAxis::Create(VToolFlippingByAxisInitData ini
if (initData.parse == Document::FullParse) 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); VAbstractTool::AddRecord(initData.id, Tool::FlippingByAxis, initData.doc);
VToolFlippingByAxis *tool = new VToolFlippingByAxis(initData); VToolFlippingByAxis *tool = new VToolFlippingByAxis(initData);
initData.scene->addItem(tool); initData.scene->addItem(tool);
@ -133,6 +151,13 @@ VToolFlippingByAxis *VToolFlippingByAxis::Create(VToolFlippingByAxisInitData ini
{ {
initData.doc->IncrementReferens(initData.data->GetGObject(idObject)->getIdTool()); initData.doc->IncrementReferens(initData.data->GetGObject(idObject)->getIdTool());
} }
if (initData.typeCreation == Source::FromGui && initData.hasLinkedVisibilityGroup)
{
VAbstractOperation::CreateVisibilityGroup(initData);
qApp->getUndoStack()->endMacro();
}
return tool; return tool;
} }
return nullptr; 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, AttrCenter, QString().setNum(dialogTool->GetOriginPointId()));
doc->SetAttribute(domElement, AttrAxisType, QString().setNum(static_cast<int>(dialogTool->GetAxisType()))); doc->SetAttribute(domElement, AttrAxisType, QString().setNum(static_cast<int>(dialogTool->GetAxisType())));
doc->SetAttribute(domElement, AttrSuffix, dialogTool->GetSuffix()); doc->SetAttribute(domElement, AttrSuffix, dialogTool->GetSuffix());
// Save for later use.
hasLinkedGroup = dialogTool->HasLinkedVisibilityGroup();
groupName = dialogTool->GetVisibilityGroupName();
} }
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------

View File

@ -74,6 +74,17 @@ void VToolFlippingByLine::setDialog()
dialogTool->SetFirstLinePointId(m_firstLinePointId); dialogTool->SetFirstLinePointId(m_firstLinePointId);
dialogTool->SetSecondLinePointId(m_secondLinePointId); dialogTool->SetSecondLinePointId(m_secondLinePointId);
dialogTool->SetSuffix(suffix); 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.secondLinePointId = dialogTool->GetSecondLinePointId();
initData.suffix = dialogTool->GetSuffix(); initData.suffix = dialogTool->GetSuffix();
initData.source = dialogTool->GetObjects(); initData.source = dialogTool->GetObjects();
initData.hasLinkedVisibilityGroup = dialogTool->HasLinkedVisibilityGroup();
initData.visibilityGroupName = dialogTool->GetVisibilityGroupName();
initData.scene = scene; initData.scene = scene;
initData.doc = doc; initData.doc = doc;
initData.data = data; initData.data = data;
@ -116,6 +129,11 @@ VToolFlippingByLine *VToolFlippingByLine::Create(VToolFlippingByLineInitData ini
if (initData.parse == Document::FullParse) 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); VAbstractTool::AddRecord(initData.id, Tool::FlippingByLine, initData.doc);
VToolFlippingByLine *tool = new VToolFlippingByLine(initData); VToolFlippingByLine *tool = new VToolFlippingByLine(initData);
initData.scene->addItem(tool); initData.scene->addItem(tool);
@ -127,6 +145,13 @@ VToolFlippingByLine *VToolFlippingByLine::Create(VToolFlippingByLineInitData ini
{ {
initData.doc->IncrementReferens(initData.data->GetGObject(idObject)->getIdTool()); initData.doc->IncrementReferens(initData.data->GetGObject(idObject)->getIdTool());
} }
if (initData.typeCreation == Source::FromGui && initData.hasLinkedVisibilityGroup)
{
VAbstractOperation::CreateVisibilityGroup(initData);
qApp->getUndoStack()->endMacro();
}
return tool; return tool;
} }
return nullptr; 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, AttrP1Line, QString().setNum(dialogTool->GetFirstLinePointId()));
doc->SetAttribute(domElement, AttrP2Line, QString().setNum(dialogTool->GetSecondLinePointId())); doc->SetAttribute(domElement, AttrP2Line, QString().setNum(dialogTool->GetSecondLinePointId()));
doc->SetAttribute(domElement, AttrSuffix, dialogTool->GetSuffix()); doc->SetAttribute(domElement, AttrSuffix, dialogTool->GetSuffix());
// Save for later use.
hasLinkedGroup = dialogTool->HasLinkedVisibilityGroup();
groupName = dialogTool->GetVisibilityGroupName();
} }
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------

View File

@ -29,12 +29,42 @@
#include "vabstractoperation.h" #include "vabstractoperation.h"
#include "../../../undocommands/label/operationmovelabel.h" #include "../../../undocommands/label/operationmovelabel.h"
#include "../../../undocommands/label/operationshowlabel.h" #include "../../../undocommands/label/operationshowlabel.h"
#include "../../../undocommands/savetooloptions.h"
#include "../../../undocommands/undogroup.h"
#include "../vgeometry/vpointf.h" #include "../vgeometry/vpointf.h"
const QString VAbstractOperation::TagItem = QStringLiteral("item"); const QString VAbstractOperation::TagItem = QStringLiteral("item");
const QString VAbstractOperation::TagSource = QStringLiteral("source"); const QString VAbstractOperation::TagSource = QStringLiteral("source");
const QString VAbstractOperation::TagDestination = QStringLiteral("destination"); 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 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) 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() void VAbstractOperation::InitOperatedObjects()
{ {
@ -725,3 +842,24 @@ QString VAbstractOperation::ComplexCurveToolTip(quint32 itemId) const
.arg(UnitsToStr(qApp->patternUnit(), true), MakeToolTip()); .arg(UnitsToStr(qApp->patternUnit(), true), MakeToolTip());
return toolTip; 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;
}

View File

@ -53,15 +53,14 @@ struct DestinationItem
struct VAbstractOperationInitData : VAbstractToolInitData struct VAbstractOperationInitData : VAbstractToolInitData
{ {
VAbstractOperationInitData() VAbstractOperationInitData()
: VAbstractToolInitData(), : VAbstractToolInitData()
suffix(),
source(),
destination()
{} {}
QString suffix; QString suffix{};
QVector<quint32> source; QVector<quint32> source{};
QVector<DestinationItem> destination; 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. // 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; QMap<quint32, VAbstractSimple *> operatedObjects;
bool hasLinkedGroup{false};
QString groupName{};
VAbstractOperation(VAbstractPattern *doc, VContainer *data, quint32 id, const QString &suffix, VAbstractOperation(VAbstractPattern *doc, VContainer *data, quint32 id, const QString &suffix,
const QVector<quint32> &source, const QVector<DestinationItem> &destination, const QVector<quint32> &source, const QVector<DestinationItem> &destination,
QGraphicsItem *parent = nullptr); QGraphicsItem *parent = nullptr);
virtual void AddToFile() override; virtual void AddToFile() override;
virtual void ChangeLabelVisibility(quint32 id, bool visible) 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 UpdateNamePosition(quint32 id, const QPointF &pos);
void SaveSourceDestination(QDomElement &tag); void SaveSourceDestination(QDomElement &tag);
@ -155,11 +159,15 @@ protected:
QString ComplexPointToolTip(quint32 itemId) const; QString ComplexPointToolTip(quint32 itemId) const;
QString ComplexCurveToolTip(quint32 itemId) const; QString ComplexCurveToolTip(quint32 itemId) const;
static void CreateVisibilityGroup(const VAbstractOperationInitData & initData);
private: private:
Q_DISABLE_COPY(VAbstractOperation) Q_DISABLE_COPY(VAbstractOperation)
void AllowCurveHover(bool enabled, GOType type); void AllowCurveHover(bool enabled, GOType type);
void AllowCurveSelecting(bool enabled, GOType type); void AllowCurveSelecting(bool enabled, GOType type);
bool NeedUpdateVisibilityGroup() const;
}; };
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------

View File

@ -128,6 +128,17 @@ void VToolMove::setDialog()
dialogTool->SetLength(formulaLength); dialogTool->SetLength(formulaLength);
dialogTool->SetSuffix(suffix); dialogTool->SetSuffix(suffix);
dialogTool->SetRotationOrigPointId(origPointId); 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.rotationOrigin = dialogTool->GetRotationOrigPointId();
initData.suffix = dialogTool->GetSuffix(); initData.suffix = dialogTool->GetSuffix();
initData.source = dialogTool->GetObjects(); initData.source = dialogTool->GetObjects();
initData.hasLinkedVisibilityGroup = dialogTool->HasLinkedVisibilityGroup();
initData.visibilityGroupName = dialogTool->GetVisibilityGroupName();
initData.scene = scene; initData.scene = scene;
initData.doc = doc; initData.doc = doc;
initData.data = data; initData.data = data;
@ -309,6 +322,11 @@ QT_WARNING_POP
if (initData.parse == Document::FullParse) 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); VAbstractTool::AddRecord(initData.id, Tool::Move, initData.doc);
VToolMove *tool = new VToolMove(initData); VToolMove *tool = new VToolMove(initData);
initData.scene->addItem(tool); initData.scene->addItem(tool);
@ -324,6 +342,13 @@ QT_WARNING_POP
{ {
initData.doc->IncrementReferens(initData.data->GetGObject(idObject)->getIdTool()); initData.doc->IncrementReferens(initData.data->GetGObject(idObject)->getIdTool());
} }
if (initData.typeCreation == Source::FromGui && initData.hasLinkedVisibilityGroup)
{
VAbstractOperation::CreateVisibilityGroup(initData);
qApp->getUndoStack()->endMacro();
}
return tool; return tool;
} }
return nullptr; return nullptr;
@ -464,6 +489,10 @@ void VToolMove::SaveDialog(QDomElement &domElement, QList<quint32> &oldDependenc
doc->SetAttribute(domElement, AttrSuffix, dialogTool->GetSuffix()); doc->SetAttribute(domElement, AttrSuffix, dialogTool->GetSuffix());
doc->SetAttribute(domElement, AttrCenter, QString().setNum(dialogTool->GetRotationOrigPointId())); doc->SetAttribute(domElement, AttrCenter, QString().setNum(dialogTool->GetRotationOrigPointId()));
doc->SetAttribute(domElement, AttrRotationAngle, dialogTool->GetRotationAngle()); doc->SetAttribute(domElement, AttrRotationAngle, dialogTool->GetRotationAngle());
// Save for later use.
hasLinkedGroup = dialogTool->HasLinkedVisibilityGroup();
groupName = dialogTool->GetVisibilityGroupName();
} }
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------

View File

@ -98,6 +98,17 @@ void VToolRotation::setDialog()
dialogTool->SetOrigPointId(origPointId); dialogTool->SetOrigPointId(origPointId);
dialogTool->SetAngle(formulaAngle); dialogTool->SetAngle(formulaAngle);
dialogTool->SetSuffix(suffix); 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.angle = dialogTool->GetAngle();
initData.suffix = dialogTool->GetSuffix(); initData.suffix = dialogTool->GetSuffix();
initData.source = dialogTool->GetObjects(); initData.source = dialogTool->GetObjects();
initData.hasLinkedVisibilityGroup = dialogTool->HasLinkedVisibilityGroup();
initData.visibilityGroupName = dialogTool->GetVisibilityGroupName();
initData.scene = scene; initData.scene = scene;
initData.doc = doc; initData.doc = doc;
initData.data = data; initData.data = data;
@ -251,6 +264,11 @@ QT_WARNING_POP
if (initData.parse == Document::FullParse) 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); VAbstractTool::AddRecord(initData.id, Tool::Rotation, initData.doc);
VToolRotation *tool = new VToolRotation(initData); VToolRotation *tool = new VToolRotation(initData);
initData.scene->addItem(tool); initData.scene->addItem(tool);
@ -261,6 +279,13 @@ QT_WARNING_POP
{ {
initData.doc->IncrementReferens(initData.data->GetGObject(idObject)->getIdTool()); initData.doc->IncrementReferens(initData.data->GetGObject(idObject)->getIdTool());
} }
if (initData.typeCreation == Source::FromGui && initData.hasLinkedVisibilityGroup)
{
VAbstractOperation::CreateVisibilityGroup(initData);
qApp->getUndoStack()->endMacro();
}
return tool; return tool;
} }
return nullptr; 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, AttrCenter, QString().setNum(dialogTool->GetOrigPointId()));
doc->SetAttribute(domElement, AttrAngle, dialogTool->GetAngle()); doc->SetAttribute(domElement, AttrAngle, dialogTool->GetAngle());
doc->SetAttribute(domElement, AttrSuffix, dialogTool->GetSuffix()); doc->SetAttribute(domElement, AttrSuffix, dialogTool->GetSuffix());
// Save for later use.
hasLinkedGroup = dialogTool->HasLinkedVisibilityGroup();
groupName = dialogTool->GetVisibilityGroupName();
} }
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------

View File

@ -114,14 +114,7 @@ void VDrawTool::SaveDialogChange(const QString &undoText)
QList<quint32> oldDependencies; QList<quint32> oldDependencies;
QList<quint32> newDependencies; QList<quint32> newDependencies;
SaveDialog(newDomElement, oldDependencies, newDependencies); SaveDialog(newDomElement, oldDependencies, newDependencies);
ApplyToolOptions(oldDependencies, newDependencies, oldDomElement, 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);
}
} }
else 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. * @brief AddToFile add tag with informations about tool into file.

View File

@ -99,6 +99,8 @@ protected:
virtual void SaveDialog(QDomElement &domElement, QList<quint32> &oldDependencies, virtual void SaveDialog(QDomElement &domElement, QList<quint32> &oldDependencies,
QList<quint32> &newDependencies)=0; QList<quint32> &newDependencies)=0;
virtual void SaveDialogChange(const QString &undoText = QString()) final; 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; virtual void AddToFile() override;
void SaveOption(QSharedPointer<VGObject> &obj); void SaveOption(QSharedPointer<VGObject> &obj);
virtual void SaveOptions(QDomElement &tag, QSharedPointer<VGObject> &obj); virtual void SaveOptions(QDomElement &tag, QSharedPointer<VGObject> &obj);

View File

@ -117,6 +117,34 @@ void AddGroup::redo()
VMainGraphicsView::NewSceneRect(qApp->getCurrentScene(), qApp->getSceneView()); 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::AddItemToGroup(const QDomElement &xml, VAbstractPattern *doc, quint32 groupId, QUndoCommand *parent) AddItemToGroup::AddItemToGroup(const QDomElement &xml, VAbstractPattern *doc, quint32 groupId, QUndoCommand *parent)

View File

@ -53,6 +53,22 @@ private:
const QString nameActivDraw; 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 class AddItemToGroup : public VUndoCommand
{ {
Q_OBJECT Q_OBJECT