Support for options Force Flipping and Forbid Flipping in Puzzle.
This commit is contained in:
parent
a68793cc82
commit
18e2554907
|
@ -15,6 +15,7 @@
|
||||||
- Fix menu on Mac OS X.
|
- Fix menu on Mac OS X.
|
||||||
- Add function's argument template with name in the Formula Wizard.
|
- Add function's argument template with name in the Formula Wizard.
|
||||||
- Unit type for increments.
|
- Unit type for increments.
|
||||||
|
- Support for options Force Flipping and Forbid Flipping in Puzzle.
|
||||||
|
|
||||||
# Valentina 0.7.51 April 18, 2022
|
# Valentina 0.7.51 April 18, 2022
|
||||||
- Z value change for a layout piece.
|
- Z value change for a layout piece.
|
||||||
|
|
|
@ -127,6 +127,11 @@ VPPiece::VPPiece(const VLayoutPiece &layoutPiece)
|
||||||
: VLayoutPiece(layoutPiece)
|
: VLayoutPiece(layoutPiece)
|
||||||
{
|
{
|
||||||
ClearTransformations();
|
ClearTransformations();
|
||||||
|
|
||||||
|
if (IsForceFlipping())
|
||||||
|
{
|
||||||
|
Flip();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
|
@ -1304,6 +1304,9 @@ void VPMainWindow::SetPropertyTabCurrentPieceData()
|
||||||
SetCheckBoxValue(ui->checkBoxCurrentPieceShowSeamline, not selectedPiece->IsHideMainPath());
|
SetCheckBoxValue(ui->checkBoxCurrentPieceShowSeamline, not selectedPiece->IsHideMainPath());
|
||||||
SetCheckBoxValue(ui->checkBoxCurrentPieceMirrorPiece, selectedPiece->IsMirror());
|
SetCheckBoxValue(ui->checkBoxCurrentPieceMirrorPiece, selectedPiece->IsMirror());
|
||||||
|
|
||||||
|
const bool disableFlipping = selectedPiece->IsForbidFlipping() || selectedPiece->IsForceFlipping();
|
||||||
|
ui->checkBoxCurrentPieceMirrorPiece->setDisabled(disableFlipping);
|
||||||
|
|
||||||
if (not ui->checkBoxRelativeTranslation->isChecked())
|
if (not ui->checkBoxRelativeTranslation->isChecked())
|
||||||
{
|
{
|
||||||
QRectF rect = PiecesBoundingRect(selectedPieces);
|
QRectF rect = PiecesBoundingRect(selectedPieces);
|
||||||
|
|
|
@ -472,12 +472,10 @@ void VPLayoutFileReader::ReadPiece(const VPPiecePtr &piece)
|
||||||
piece->SetXScale(ReadAttributeDouble(attribs, ML::AttrXScale, QChar('1')));
|
piece->SetXScale(ReadAttributeDouble(attribs, ML::AttrXScale, QChar('1')));
|
||||||
piece->SetYScale(ReadAttributeDouble(attribs, ML::AttrYScale, QChar('1')));
|
piece->SetYScale(ReadAttributeDouble(attribs, ML::AttrYScale, QChar('1')));
|
||||||
piece->SetZValue(ReadAttributeDouble(attribs, ML::AttrZValue, QChar('1')));
|
piece->SetZValue(ReadAttributeDouble(attribs, ML::AttrZValue, QChar('1')));
|
||||||
|
piece->SetMirror(ReadAttributeBool(attribs, ML::AttrMirrored, falseStr));
|
||||||
bool pieceMirrored = ReadAttributeBool(attribs, ML::AttrMirrored, falseStr);
|
piece->SetForbidFlipping(ReadAttributeBool(attribs, ML::AttrForbidFlipping, falseStr));
|
||||||
piece->SetMirror(pieceMirrored);
|
piece->SetForceFlipping(ReadAttributeBool(attribs, ML::AttrForceFlipping, falseStr));
|
||||||
|
piece->SetMatrix(StringToTransfrom(ReadAttributeEmptyString(attribs, ML::AttrTransform)));
|
||||||
QString matrix = ReadAttributeEmptyString(attribs, ML::AttrTransform);
|
|
||||||
piece->SetMatrix(StringToTransfrom(matrix));
|
|
||||||
|
|
||||||
const QStringList tags
|
const QStringList tags
|
||||||
{
|
{
|
||||||
|
|
|
@ -263,6 +263,10 @@ void VPLayoutFileWriter::WritePiece(const VPPiecePtr &piece)
|
||||||
SetAttribute(ML::AttrName, piece->GetName());
|
SetAttribute(ML::AttrName, piece->GetName());
|
||||||
SetAttributeOrRemoveIf<bool>(ML::AttrMirrored, piece->IsMirror(),
|
SetAttributeOrRemoveIf<bool>(ML::AttrMirrored, piece->IsMirror(),
|
||||||
[](bool mirrored) noexcept {return not mirrored;});
|
[](bool mirrored) noexcept {return not mirrored;});
|
||||||
|
SetAttributeOrRemoveIf<bool>(ML::AttrForbidFlipping, piece->IsForbidFlipping(),
|
||||||
|
[](bool forbid) noexcept {return not forbid;});
|
||||||
|
SetAttributeOrRemoveIf<bool>(ML::AttrForceFlipping, piece->IsForceFlipping(),
|
||||||
|
[](bool force) noexcept {return not force;});
|
||||||
SetAttribute(ML::AttrTransform, TransformToString(piece->GetMatrix()));
|
SetAttribute(ML::AttrTransform, TransformToString(piece->GetMatrix()));
|
||||||
SetAttributeOrRemoveIf<QString>(ML::AttrGradationLabel, piece->GetGradationId(),
|
SetAttributeOrRemoveIf<QString>(ML::AttrGradationLabel, piece->GetGradationId(),
|
||||||
[](const QString &label) noexcept {return label.isEmpty();});
|
[](const QString &label) noexcept {return label.isEmpty();});
|
||||||
|
|
|
@ -77,6 +77,8 @@ const QString AttrLength = QStringLiteral("length");
|
||||||
const QString AttrFollowGrainline = QStringLiteral("followGrainline");
|
const QString AttrFollowGrainline = QStringLiteral("followGrainline");
|
||||||
const QString AttrID = QStringLiteral("id");
|
const QString AttrID = QStringLiteral("id");
|
||||||
const QString AttrMirrored = QStringLiteral("mirrored");
|
const QString AttrMirrored = QStringLiteral("mirrored");
|
||||||
|
const QString AttrForbidFlipping = QStringLiteral("forbidFlipping");
|
||||||
|
const QString AttrForceFlipping = QStringLiteral("forceFlipping");
|
||||||
const QString AttrTransform = QStringLiteral("transform");
|
const QString AttrTransform = QStringLiteral("transform");
|
||||||
const QString AttrShowSeamline = QStringLiteral("showSeamline");
|
const QString AttrShowSeamline = QStringLiteral("showSeamline");
|
||||||
const QString AttrEnabled = QStringLiteral("enabled");
|
const QString AttrEnabled = QStringLiteral("enabled");
|
||||||
|
|
|
@ -82,6 +82,8 @@ extern const QString AttrLength;
|
||||||
extern const QString AttrFollowGrainline;
|
extern const QString AttrFollowGrainline;
|
||||||
extern const QString AttrID;
|
extern const QString AttrID;
|
||||||
extern const QString AttrMirrored;
|
extern const QString AttrMirrored;
|
||||||
|
extern const QString AttrForbidFlipping;
|
||||||
|
extern const QString AttrForceFlipping;
|
||||||
extern const QString AttrTransform;
|
extern const QString AttrTransform;
|
||||||
extern const QString AttrShowSeamline;
|
extern const QString AttrShowSeamline;
|
||||||
extern const QString AttrEnabled;
|
extern const QString AttrEnabled;
|
||||||
|
|
|
@ -92,5 +92,6 @@
|
||||||
<file>schema/watermark/v1.1.0.xsd</file>
|
<file>schema/watermark/v1.1.0.xsd</file>
|
||||||
<file>schema/layout/v0.1.0.xsd</file>
|
<file>schema/layout/v0.1.0.xsd</file>
|
||||||
<file>schema/layout/v0.1.1.xsd</file>
|
<file>schema/layout/v0.1.1.xsd</file>
|
||||||
|
<file>schema/layout/v0.1.2.xsd</file>
|
||||||
</qresource>
|
</qresource>
|
||||||
</RCC>
|
</RCC>
|
||||||
|
|
526
src/libs/ifc/schema/layout/v0.1.2.xsd
Normal file
526
src/libs/ifc/schema/layout/v0.1.2.xsd
Normal file
|
@ -0,0 +1,526 @@
|
||||||
|
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
|
||||||
|
<xs:element name="layout">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element name="properties">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element type="units" name="unit"/>
|
||||||
|
<xs:element type="xs:string" name="title"/>
|
||||||
|
<xs:element type="xs:string" name="description"/>
|
||||||
|
<xs:element name="control">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:attribute type="xs:boolean" name="warningSuperposition"/>
|
||||||
|
<xs:attribute type="xs:boolean" name="warningOutOfBound"/>
|
||||||
|
<xs:attribute type="xs:boolean" name="stickyEdges"/>
|
||||||
|
<xs:attribute type="xs:boolean" name="followGrainline"/>
|
||||||
|
<xs:attribute type="xs:float" name="piecesGap"/>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="tiles">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element name="size">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:attribute type="xs:float" name="width" use="required"/>
|
||||||
|
<xs:attribute type="xs:float" name="length" use="required"/>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="margin">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:attribute type="xs:float" name="top"/>
|
||||||
|
<xs:attribute type="xs:float" name="right"/>
|
||||||
|
<xs:attribute type="xs:float" name="bottom"/>
|
||||||
|
<xs:attribute type="xs:float" name="left"/>
|
||||||
|
<xs:attribute type="xs:boolean" name="ignoreMargins"/>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:sequence>
|
||||||
|
<xs:attribute type="xs:boolean" name="visible"/>
|
||||||
|
<xs:attribute type="xs:string" name="matchingMarks"/>
|
||||||
|
<xs:attribute type="xs:boolean" name="printScheme"/>
|
||||||
|
<xs:attribute type="xs:boolean" name="tileNumber"/>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="scale">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:attribute type="LayoutScale" name="xScale"/>
|
||||||
|
<xs:attribute type="LayoutScale" name="yScale"/>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="watermark">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:simpleContent>
|
||||||
|
<xs:extension base="xs:string">
|
||||||
|
<xs:attribute type="xs:boolean" name="showPreview" use="optional"/>
|
||||||
|
</xs:extension>
|
||||||
|
</xs:simpleContent>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:sequence>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="unplacedPieces">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element name="piece" minOccurs="0" maxOccurs="unbounded">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element type="PathNotEmpty" name="seamLine"/>
|
||||||
|
<xs:element name="seamAllowance">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:simpleContent>
|
||||||
|
<xs:extension base="PathOrEmpty">
|
||||||
|
<xs:attribute type="xs:boolean" name="enabled" use="optional"/>
|
||||||
|
</xs:extension>
|
||||||
|
</xs:simpleContent>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="grainline">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:simpleContent>
|
||||||
|
<xs:extension base="PathOrEmpty">
|
||||||
|
<xs:attribute type="xs:boolean" name="enabled" use="optional"/>
|
||||||
|
<xs:attribute type="xs:float" name="angle" use="optional"/>
|
||||||
|
<xs:attribute type="ArrowDirection" name="arrowDirection" use="optional"/>
|
||||||
|
</xs:extension>
|
||||||
|
</xs:simpleContent>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="notches">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element name="notch" minOccurs="0" maxOccurs="unbounded">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:attribute type="xs:boolean" name="builtIn" use="optional"/>
|
||||||
|
<xs:attribute type="NotchType" name="type" use="optional"/>
|
||||||
|
<xs:attribute type="LinePath" name="baseLine" use="optional"/>
|
||||||
|
<xs:attribute type="LinesPath" name="path" use="optional"/>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:sequence>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="internalPaths">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element name="internalPath" minOccurs="0" maxOccurs="unbounded">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:simpleContent>
|
||||||
|
<xs:extension base="PathNotEmpty">
|
||||||
|
<xs:attribute type="xs:boolean" name="cut" use="optional"/>
|
||||||
|
<xs:attribute type="CurvePenStyle" name="penStyle" use="optional"/>
|
||||||
|
</xs:extension>
|
||||||
|
</xs:simpleContent>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:sequence>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="markers">
|
||||||
|
<xs:complexType mixed="true">
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element name="marker" maxOccurs="unbounded" minOccurs="0">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:simpleContent>
|
||||||
|
<xs:extension base="MarkerShapePath">
|
||||||
|
<xs:attribute type="Transformation" name="transform" use="required"/>
|
||||||
|
<xs:attribute type="MarkerType" name="type" use="required"/>
|
||||||
|
<xs:attribute type="PointPath" name="center" use="required"/>
|
||||||
|
<xs:attribute type="RectPath" name="box" use="required"/>
|
||||||
|
</xs:extension>
|
||||||
|
</xs:simpleContent>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:sequence>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="labels">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element name="pieceLabel" minOccurs="0" maxOccurs="1">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element name="lines">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element name="line" minOccurs="0" maxOccurs="unbounded">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:simpleContent>
|
||||||
|
<xs:extension base="xs:string">
|
||||||
|
<xs:attribute type="xs:boolean" name="bold" use="optional"/>
|
||||||
|
<xs:attribute type="xs:boolean" name="italic" use="optional"/>
|
||||||
|
<xs:attribute type="xs:unsignedInt" name="alignment" use="optional"/>
|
||||||
|
<xs:attribute type="xs:unsignedInt" name="fontSize" use="optional"/>
|
||||||
|
</xs:extension>
|
||||||
|
</xs:simpleContent>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:sequence>
|
||||||
|
<xs:attribute type="xs:string" name="font"/>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:sequence>
|
||||||
|
<xs:attribute type="xs:string" name="shape" use="required"/>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="patternLabel" minOccurs="0" maxOccurs="1">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element name="lines">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element name="line" minOccurs="0" maxOccurs="unbounded">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:simpleContent>
|
||||||
|
<xs:extension base="xs:string">
|
||||||
|
<xs:attribute type="xs:boolean" name="bold" use="optional"/>
|
||||||
|
<xs:attribute type="xs:boolean" name="italic" use="optional"/>
|
||||||
|
<xs:attribute type="xs:unsignedInt" name="alignment" use="optional"/>
|
||||||
|
<xs:attribute type="xs:unsignedInt" name="fontSize" use="optional"/>
|
||||||
|
</xs:extension>
|
||||||
|
</xs:simpleContent>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:sequence>
|
||||||
|
<xs:attribute type="xs:string" name="font"/>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:sequence>
|
||||||
|
<xs:attribute type="xs:string" name="shape" use="required"/>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:sequence>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:sequence>
|
||||||
|
<xs:attribute name="id" type="uuid" use="required"/>
|
||||||
|
<xs:attribute type="xs:string" name="name"/>
|
||||||
|
<xs:attribute type="xs:boolean" name="mirrored"/>
|
||||||
|
<xs:attribute type="xs:boolean" name="forbidFlipping"/>
|
||||||
|
<xs:attribute type="xs:boolean" name="forceFlipping"/>
|
||||||
|
<xs:attribute type="Transformation" name="transform"/>
|
||||||
|
<xs:attribute type="xs:string" name="gradationLabel"/>
|
||||||
|
<xs:attribute type="xs:unsignedInt" name="copyNumber"/>
|
||||||
|
<xs:attribute type="xs:boolean" name="showSeamline"/>
|
||||||
|
<xs:attribute type="xs:float" name="xScale"/>
|
||||||
|
<xs:attribute type="xs:float" name="yScale"/>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:sequence>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="sheets">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element name="sheet" minOccurs="0" maxOccurs="unbounded">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element type="xs:string" name="name"/>
|
||||||
|
<xs:element name="size">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:attribute type="xs:float" name="width" use="required"/>
|
||||||
|
<xs:attribute type="xs:float" name="length" use="required"/>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="margin">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:attribute type="xs:float" name="top"/>
|
||||||
|
<xs:attribute type="xs:float" name="right"/>
|
||||||
|
<xs:attribute type="xs:float" name="bottom"/>
|
||||||
|
<xs:attribute type="xs:float" name="left"/>
|
||||||
|
<xs:attribute type="xs:boolean" name="ignoreMargins"/>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="pieces">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element name="piece" minOccurs="0" maxOccurs="unbounded">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element type="PathNotEmpty" name="seamLine"/>
|
||||||
|
<xs:element name="seamAllowance">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:simpleContent>
|
||||||
|
<xs:extension base="PathOrEmpty">
|
||||||
|
<xs:attribute type="xs:boolean" name="enabled" use="optional"/>
|
||||||
|
</xs:extension>
|
||||||
|
</xs:simpleContent>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="grainline">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:simpleContent>
|
||||||
|
<xs:extension base="PathOrEmpty">
|
||||||
|
<xs:attribute type="xs:boolean" name="enabled" use="optional"/>
|
||||||
|
<xs:attribute type="xs:float" name="angle" use="optional"/>
|
||||||
|
<xs:attribute type="ArrowDirection" name="arrowDirection" use="optional"/>
|
||||||
|
</xs:extension>
|
||||||
|
</xs:simpleContent>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="notches">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element name="notch" minOccurs="0" maxOccurs="unbounded">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:attribute type="xs:boolean" name="builtIn" use="optional"/>
|
||||||
|
<xs:attribute type="NotchType" name="type" use="optional"/>
|
||||||
|
<xs:attribute type="LinePath" name="baseLine" use="optional"/>
|
||||||
|
<xs:attribute type="LinesPath" name="path" use="optional"/>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:sequence>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="internalPaths">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element name="internalPath" minOccurs="0" maxOccurs="unbounded">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:simpleContent>
|
||||||
|
<xs:extension base="PathNotEmpty">
|
||||||
|
<xs:attribute type="xs:boolean" name="cut" use="optional"/>
|
||||||
|
<xs:attribute type="CurvePenStyle" name="penStyle" use="optional"/>
|
||||||
|
</xs:extension>
|
||||||
|
</xs:simpleContent>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:sequence>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="markers">
|
||||||
|
<xs:complexType mixed="true">
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element name="marker" maxOccurs="unbounded" minOccurs="0">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:simpleContent>
|
||||||
|
<xs:extension base="MarkerShapePath">
|
||||||
|
<xs:attribute type="Transformation" name="transform" use="required"/>
|
||||||
|
<xs:attribute type="MarkerType" name="type" use="required"/>
|
||||||
|
<xs:attribute type="PointPath" name="center" use="required"/>
|
||||||
|
<xs:attribute type="RectPath" name="box" use="required"/>
|
||||||
|
</xs:extension>
|
||||||
|
</xs:simpleContent>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:sequence>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="labels">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element name="pieceLabel" minOccurs="0" maxOccurs="1">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element name="lines">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element name="line" minOccurs="0" maxOccurs="unbounded">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:simpleContent>
|
||||||
|
<xs:extension base="xs:string">
|
||||||
|
<xs:attribute type="xs:boolean" name="bold" use="optional"/>
|
||||||
|
<xs:attribute type="xs:boolean" name="italic" use="optional"/>
|
||||||
|
<xs:attribute type="AlignmentType" name="alignment" use="optional"/>
|
||||||
|
<xs:attribute type="xs:unsignedInt" name="fontSize" use="optional"/>
|
||||||
|
</xs:extension>
|
||||||
|
</xs:simpleContent>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:sequence>
|
||||||
|
<xs:attribute type="xs:string" name="font"/>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:sequence>
|
||||||
|
<xs:attribute type="PathNotEmpty" name="shape" use="required"/>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="patternLabel" minOccurs="0" maxOccurs="1">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element name="lines">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element name="line" minOccurs="0" maxOccurs="unbounded">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:simpleContent>
|
||||||
|
<xs:extension base="xs:string">
|
||||||
|
<xs:attribute type="xs:boolean" name="bold" use="optional"/>
|
||||||
|
<xs:attribute type="xs:boolean" name="italic" use="optional"/>
|
||||||
|
<xs:attribute type="AlignmentType" name="alignment" use="optional"/>
|
||||||
|
<xs:attribute type="xs:unsignedInt" name="fontSize" use="optional"/>
|
||||||
|
</xs:extension>
|
||||||
|
</xs:simpleContent>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:sequence>
|
||||||
|
<xs:attribute type="xs:string" name="font"/>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:sequence>
|
||||||
|
<xs:attribute type="PathNotEmpty" name="shape" use="required"/>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:sequence>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:sequence>
|
||||||
|
<xs:attribute name="id" type="uuid" use="required"/>
|
||||||
|
<xs:attribute type="xs:string" name="name"/>
|
||||||
|
<xs:attribute type="xs:boolean" name="mirrored"/>
|
||||||
|
<xs:attribute type="xs:boolean" name="forbidFlipping"/>
|
||||||
|
<xs:attribute type="xs:boolean" name="forceFlipping"/>
|
||||||
|
<xs:attribute type="Transformation" name="transform"/>
|
||||||
|
<xs:attribute type="xs:string" name="gradationLabel"/>
|
||||||
|
<xs:attribute type="xs:unsignedInt" name="copyNumber"/>
|
||||||
|
<xs:attribute type="xs:boolean" name="showSeamline"/>
|
||||||
|
<xs:attribute type="xs:float" name="xScale"/>
|
||||||
|
<xs:attribute type="xs:float" name="yScale"/>
|
||||||
|
<xs:attribute type="xs:float" name="zValue"/>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:sequence>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:sequence>
|
||||||
|
<xs:attribute type="GrainlineType" name="grainlineType"/>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:sequence>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:sequence>
|
||||||
|
<xs:attribute type="formatVersion" name="version" use="required"/>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
<!--Types-->
|
||||||
|
<xs:simpleType name="formatVersion">
|
||||||
|
<xs:restriction base="xs:string">
|
||||||
|
<xs:pattern value="[0-9]{1,}\.[0-9]{1,}\.[0-9]{1,}"/>
|
||||||
|
</xs:restriction>
|
||||||
|
</xs:simpleType>
|
||||||
|
<xs:simpleType name="units">
|
||||||
|
<xs:restriction base="xs:string">
|
||||||
|
<xs:enumeration value="mm"/>
|
||||||
|
<xs:enumeration value="cm"/>
|
||||||
|
<xs:enumeration value="inch"/>
|
||||||
|
</xs:restriction>
|
||||||
|
</xs:simpleType>
|
||||||
|
<xs:simpleType name="uuid">
|
||||||
|
<xs:restriction base="xs:string">
|
||||||
|
<xs:pattern value="|\{[0-9a-fA-F]{8}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{12}\}"/>
|
||||||
|
</xs:restriction>
|
||||||
|
</xs:simpleType>
|
||||||
|
<xs:simpleType name="ArrowDirection">
|
||||||
|
<xs:restriction base="xs:string">
|
||||||
|
<xs:enumeration value="atFront"/>
|
||||||
|
<xs:enumeration value="atRear"/>
|
||||||
|
<xs:enumeration value="atBoth"/>
|
||||||
|
</xs:restriction>
|
||||||
|
</xs:simpleType>
|
||||||
|
<xs:simpleType name="NotchType">
|
||||||
|
<xs:restriction base="xs:unsignedInt">
|
||||||
|
<xs:enumeration value="0"/>
|
||||||
|
<!--OneLine-->
|
||||||
|
<xs:enumeration value="1"/>
|
||||||
|
<!--TwoLines-->
|
||||||
|
<xs:enumeration value="2"/>
|
||||||
|
<!--ThreeLines-->
|
||||||
|
<xs:enumeration value="3"/>
|
||||||
|
<!--TMark-->
|
||||||
|
<xs:enumeration value="4"/>
|
||||||
|
<!--VMark-->
|
||||||
|
<xs:enumeration value="5"/>
|
||||||
|
<!--VMark2-->
|
||||||
|
<xs:enumeration value="6"/>
|
||||||
|
<!--UMark-->
|
||||||
|
<xs:enumeration value="7"/>
|
||||||
|
<!--BoxMark-->
|
||||||
|
</xs:restriction>
|
||||||
|
</xs:simpleType>
|
||||||
|
<xs:simpleType name="CurvePenStyle">
|
||||||
|
<xs:restriction base="xs:string">
|
||||||
|
<xs:enumeration value="hair"/>
|
||||||
|
<xs:enumeration value="dashLine"/>
|
||||||
|
<xs:enumeration value="dotLine"/>
|
||||||
|
<xs:enumeration value="dashDotLine"/>
|
||||||
|
<xs:enumeration value="dashDotDotLine"/>
|
||||||
|
</xs:restriction>
|
||||||
|
</xs:simpleType>
|
||||||
|
<xs:simpleType name="MarkerType">
|
||||||
|
<xs:restriction base="xs:unsignedInt">
|
||||||
|
<xs:enumeration value="0"/><!--Segment-->
|
||||||
|
<xs:enumeration value="1"/><!--Rectangle-->
|
||||||
|
<xs:enumeration value="2"/><!--Cross-->
|
||||||
|
<xs:enumeration value="3"/><!--Tshaped-->
|
||||||
|
<xs:enumeration value="4"/><!--Doubletree-->
|
||||||
|
<xs:enumeration value="5"/><!--Corner-->
|
||||||
|
<xs:enumeration value="6"/><!--Triangle-->
|
||||||
|
<xs:enumeration value="7"/><!--Hshaped-->
|
||||||
|
<xs:enumeration value="8"/><!--Button-->
|
||||||
|
<xs:enumeration value="9"/><!--Circle-->
|
||||||
|
</xs:restriction>
|
||||||
|
</xs:simpleType>
|
||||||
|
<xs:simpleType name="AlignmentType">
|
||||||
|
<xs:restriction base="xs:unsignedInt">
|
||||||
|
<xs:enumeration value="0"/><!--default (no aligns)-->
|
||||||
|
<xs:enumeration value="1"/><!--aligns with the left edge-->
|
||||||
|
<xs:enumeration value="2"/><!--aligns with the right edge-->
|
||||||
|
<xs:enumeration value="4"/><!--Centers horizontally in the available space-->
|
||||||
|
</xs:restriction>
|
||||||
|
</xs:simpleType>
|
||||||
|
<xs:simpleType name="Transformation">
|
||||||
|
<xs:restriction base="xs:string">
|
||||||
|
<xs:pattern value="([-+]?\d+\.?\d*([eE][-+]?\d+)?;){8,}[-+]?\d+\.?\d*([eE][-+]?\d+)?"/>
|
||||||
|
</xs:restriction>
|
||||||
|
</xs:simpleType>
|
||||||
|
<xs:simpleType name="PathNotEmpty">
|
||||||
|
<xs:restriction base="xs:string">
|
||||||
|
<xs:pattern value="([-+]?\d+\.?\d*([eE][-+]?\d+)?,[-+]?\d+\.?\d*([eE][-+]?\d+)?\s){0,}[-+]?\d+\.?\d*([eE][-+]?\d+)?,[-+]?\d+\.?\d*([eE][-+]?\d+)?"/>
|
||||||
|
</xs:restriction>
|
||||||
|
</xs:simpleType>
|
||||||
|
<xs:simpleType name="PathOrEmpty">
|
||||||
|
<xs:restriction base="xs:string">
|
||||||
|
<xs:pattern value="|([-+]?\d+\.?\d*([eE][-+]?\d+)?,[-+]?\d+\.?\d*([eE][-+]?\d+)?\s){0,}[-+]?\d+\.?\d*([eE][-+]?\d+)?,[-+]?\d+\.?\d*([eE][-+]?\d+)?"/>
|
||||||
|
</xs:restriction>
|
||||||
|
</xs:simpleType>
|
||||||
|
<xs:simpleType name="LinePath">
|
||||||
|
<xs:restriction base="xs:string">
|
||||||
|
<xs:pattern value="[-+]?\d+\.?\d*([eE][-+]?\d+)?,[-+]?\d+\.?\d*([eE][-+]?\d+)?;[-+]?\d+\.?\d*([eE][-+]?\d+)?,[-+]?\d+\.?\d*([eE][-+]?\d+)?"/>
|
||||||
|
</xs:restriction>
|
||||||
|
</xs:simpleType>
|
||||||
|
<xs:simpleType name="LinesPath">
|
||||||
|
<xs:restriction base="xs:string">
|
||||||
|
<xs:pattern value="([-+]?\d+\.?\d*([eE][-+]?\d+)?,[-+]?\d+\.?\d*([eE][-+]?\d+)?;[-+]?\d+\.?\d*([eE][-+]?\d+)?,[-+]?\d+\.?\d*([eE][-+]?\d+)?\*){0,}[-+]?\d+\.?\d*([eE][-+]?\d+)?,[-+]?\d+\.?\d*([eE][-+]?\d+)?;[-+]?\d+\.?\d*([eE][-+]?\d+)?,[-+]?\d+\.?\d*([eE][-+]?\d+)?"/>
|
||||||
|
</xs:restriction>
|
||||||
|
</xs:simpleType>
|
||||||
|
<xs:simpleType name="PointPath">
|
||||||
|
<xs:restriction base="xs:string">
|
||||||
|
<xs:pattern value="[-+]?\d+\.?\d*([eE][-+]?\d+)?,[-+]?\d+\.?\d*([eE][-+]?\d+)?"/>
|
||||||
|
</xs:restriction>
|
||||||
|
</xs:simpleType>
|
||||||
|
<xs:simpleType name="RectPath">
|
||||||
|
<xs:restriction base="xs:string">
|
||||||
|
<xs:pattern value="([-+]?\d+\.?\d*([eE][-+]?\d+)?;){3,}[-+]?\d+\.?\d*([eE][-+]?\d+)?"/>
|
||||||
|
</xs:restriction>
|
||||||
|
</xs:simpleType>
|
||||||
|
<xs:simpleType name="MarkerShapePath">
|
||||||
|
<xs:restriction base="xs:string">
|
||||||
|
<xs:pattern value="(([-+]?\d+\.?\d*([eE][-+]?\d+)?,[-+]?\d+\.?\d*([eE][-+]?\d+)?\s){0,}[-+]?\d+\.?\d*([eE][-+]?\d+)?,[-+]?\d+\.?\d*([eE][-+]?\d+)?\*){0,}([-+]?\d+\.?\d*([eE][-+]?\d+)?,[-+]?\d+\.?\d*([eE][-+]?\d+)?\s){0,}[-+]?\d+\.?\d*([eE][-+]?\d+)?,[-+]?\d+\.?\d*([eE][-+]?\d+)?"/>
|
||||||
|
</xs:restriction>
|
||||||
|
</xs:simpleType>
|
||||||
|
<xs:simpleType name="GrainlineType">
|
||||||
|
<xs:restriction base="xs:string">
|
||||||
|
<xs:enumeration value="horizontal"/>
|
||||||
|
<xs:enumeration value="vertical"/>
|
||||||
|
<xs:enumeration value="notFixed"/>
|
||||||
|
</xs:restriction>
|
||||||
|
</xs:simpleType>
|
||||||
|
<xs:simpleType name="LayoutScale">
|
||||||
|
<xs:restriction base="xs:float">
|
||||||
|
<xs:minInclusive value="0.01"/>
|
||||||
|
<xs:maxInclusive value="3"/>
|
||||||
|
</xs:restriction>
|
||||||
|
</xs:simpleType>
|
||||||
|
</xs:schema>
|
|
@ -38,8 +38,8 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
const QString VLayoutConverter::LayoutMinVerStr = QStringLiteral("0.1.0");
|
const QString VLayoutConverter::LayoutMinVerStr = QStringLiteral("0.1.0");
|
||||||
const QString VLayoutConverter::LayoutMaxVerStr = QStringLiteral("0.1.1");
|
const QString VLayoutConverter::LayoutMaxVerStr = QStringLiteral("0.1.2");
|
||||||
const QString VLayoutConverter::CurrentSchema = QStringLiteral("://schema/layout/v0.1.1.xsd");
|
const QString VLayoutConverter::CurrentSchema = QStringLiteral("://schema/layout/v0.1.2.xsd");
|
||||||
|
|
||||||
//VLayoutConverter::LayoutMinVer; // <== DON'T FORGET TO UPDATE TOO!!!!
|
//VLayoutConverter::LayoutMinVer; // <== DON'T FORGET TO UPDATE TOO!!!!
|
||||||
//VLayoutConverter::LayoutMaxVer; // <== DON'T FORGET TO UPDATE TOO!!!!
|
//VLayoutConverter::LayoutMaxVer; // <== DON'T FORGET TO UPDATE TOO!!!!
|
||||||
|
@ -89,7 +89,8 @@ auto VLayoutConverter::XSDSchema(unsigned ver) const -> QString
|
||||||
QHash <unsigned, QString> schemas =
|
QHash <unsigned, QString> schemas =
|
||||||
{
|
{
|
||||||
std::make_pair(FormatVersion(0, 1, 0), QStringLiteral("://schema/layout/v0.1.0.xsd")),
|
std::make_pair(FormatVersion(0, 1, 0), QStringLiteral("://schema/layout/v0.1.0.xsd")),
|
||||||
std::make_pair(FormatVersion(0, 1, 1), CurrentSchema),
|
std::make_pair(FormatVersion(0, 1, 1), QStringLiteral("://schema/layout/v0.1.1.xsd")),
|
||||||
|
std::make_pair(FormatVersion(0, 1, 2), CurrentSchema),
|
||||||
};
|
};
|
||||||
|
|
||||||
if (schemas.contains(ver))
|
if (schemas.contains(ver))
|
||||||
|
@ -106,10 +107,11 @@ void VLayoutConverter::ApplyPatches()
|
||||||
switch (m_ver)
|
switch (m_ver)
|
||||||
{
|
{
|
||||||
case (FormatVersion(0, 1, 0)):
|
case (FormatVersion(0, 1, 0)):
|
||||||
ToV0_1_1();
|
|
||||||
ValidateXML(XSDSchema(FormatVersion(0, 1, 1)));
|
|
||||||
Q_FALLTHROUGH();
|
|
||||||
case (FormatVersion(0, 1, 1)):
|
case (FormatVersion(0, 1, 1)):
|
||||||
|
ToV0_1_2();
|
||||||
|
ValidateXML(XSDSchema(FormatVersion(0, 1, 12)));
|
||||||
|
Q_FALLTHROUGH();
|
||||||
|
case (FormatVersion(0, 1, 2)):
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
InvalidVersion(m_ver);
|
InvalidVersion(m_ver);
|
||||||
|
@ -130,12 +132,12 @@ auto VLayoutConverter::IsReadOnly() const -> bool
|
||||||
}
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
void VLayoutConverter::ToV0_1_1()
|
void VLayoutConverter::ToV0_1_2()
|
||||||
{
|
{
|
||||||
// TODO. Delete if minimal supported version is 0.1.1
|
// TODO. Delete if minimal supported version is 0.1.2
|
||||||
Q_STATIC_ASSERT_X(VLayoutConverter::LayoutMinVer < FormatVersion(0, 1, 1),
|
Q_STATIC_ASSERT_X(VLayoutConverter::LayoutMinVer < FormatVersion(0, 1, 2),
|
||||||
"Time to refactor the code.");
|
"Time to refactor the code.");
|
||||||
|
|
||||||
SetVersion(QStringLiteral("0.1.1"));
|
SetVersion(QStringLiteral("0.1.2"));
|
||||||
Save();
|
Save();
|
||||||
}
|
}
|
||||||
|
|
|
@ -44,7 +44,7 @@ public:
|
||||||
static const QString LayoutMaxVerStr;
|
static const QString LayoutMaxVerStr;
|
||||||
static const QString CurrentSchema;
|
static const QString CurrentSchema;
|
||||||
static Q_DECL_CONSTEXPR const unsigned LayoutMinVer = FormatVersion(0, 1, 0);
|
static Q_DECL_CONSTEXPR const unsigned LayoutMinVer = FormatVersion(0, 1, 0);
|
||||||
static Q_DECL_CONSTEXPR const unsigned LayoutMaxVer = FormatVersion(0, 1, 1);
|
static Q_DECL_CONSTEXPR const unsigned LayoutMaxVer = FormatVersion(0, 1, 2);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void SetVersion(const QString &version) override;
|
void SetVersion(const QString &version) override;
|
||||||
|
@ -61,7 +61,7 @@ protected:
|
||||||
|
|
||||||
auto IsReadOnly() const -> bool override;
|
auto IsReadOnly() const -> bool override;
|
||||||
|
|
||||||
void ToV0_1_1();
|
void ToV0_1_2();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Q_DISABLE_COPY(VLayoutConverter)
|
Q_DISABLE_COPY(VLayoutConverter)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user