Merge remote-tracking branch 'origin/develop' into feature/manual-layout

This commit is contained in:
Roman Telezhynskyi 2020-11-10 16:00:01 +02:00
commit 0371905c0d
464 changed files with 59348 additions and 21838 deletions

View File

@ -4,53 +4,31 @@ jobs:
- stage: main test
os: linux
dist: xenial
sudo: required
compiler: clang
env:
- DEPLOY=false
- CCACHE_CPP2=yes
- RUN_TESTS=true
cache:
- ccache
directories:
- "$HOME/.sonar/cache"
cache:
ccache: true
directories:
- "$HOME/.sonar/cache"
- os: linux
dist: bionic
sudo: required
compiler: clang
env:
- DEPLOY=false
- CCACHE_CPP2=yes
- RUN_TESTS=true
cache:
- ccache
directories:
- "$HOME/.sonar/cache"
ccache: true
directories:
- "$HOME/.sonar/cache"
- os: osx
compiler: clang
env:
- DEPLOY=true
- LEGACY=false
osx_image: xcode11
- os: osx
compiler: clang
env:
- DEPLOY=true
- LEGACY=true
osx_image: xcode8
- stage: sonarcloud
os: linux
dist: xenial
sudo: required
compiler: clang
env:
- DEPLOY=false
- CCACHE_CPP2=yes
- RUN_TESTS=false
cache:
- ccache
directories:
- "$HOME/.sonar/cache"
before_install:
- |
if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then
@ -73,12 +51,7 @@ before_install:
sudo dpkg -i ccache_3.3.4-1_amd64.deb;
else
brew update > /dev/null;
if [[ "$LEGACY" = false ]]; then
brew install qt5;
else
unset SSL_CERT_FILE;
brew install https://gist.githubusercontent.com/dismine/c3ac01de38e12edcf22d9e05791adf82/raw/20544ac8e68ef3523f92e15f432bbaf9a6aa2c22/qt5.rb;
fi
brew install qt5;
chmod -R 755 /usr/local/opt/qt5/*
fi
before_script:
@ -111,14 +84,10 @@ script:
- "$CXX --version"
- |
if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then
make -j$(nproc);
if [[ "$RUN_TESTS" == "true" ]]; then
make -j$(nproc);
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:"$TRAVIS_BUILD_DIR/build/src/libs/vpropertyexplorer/bin:$TRAVIS_BUILD_DIR/build/src/libs/qmuparser/bin";
xvfb-run -a make --silent check TESTARGS="-silent";
else
build-wrapper-linux-x86-64 --out-dir ../bw-outputs make -j$(nproc);
cd ..;
sonar-scanner;
fi
else
make -j1;
@ -133,27 +102,15 @@ before_deploy:
- |
if [[ "$DEPLOY" == "true" ]]; then
../scripts/macfixqtdylibrpath.py $TRAVIS_BUILD_DIR/build/src/app/valentina/bin/Valentina.app;
if [[ "$LEGACY" = false ]]; then
tar -C $TRAVIS_BUILD_DIR/build/src/app/valentina/bin --exclude "*.DS_Store" -cvzf valentina-osx-${TRAVIS_COMMIT}.tar.gz Valentina.app/;
else
tar -C $TRAVIS_BUILD_DIR/build/src/app/valentina/bin --exclude "*.DS_Store" -cvzf valentina-osx-${TRAVIS_COMMIT}-legacy.tar.gz Valentina.app/;
fi
tar -C $TRAVIS_BUILD_DIR/build/src/app/valentina/bin --exclude "*.DS_Store" -cvzf valentina-osx-${TRAVIS_COMMIT}.tar.gz Valentina.app/;
fi
deploy:
edge:
branch: v1.8.47
provider: bintray
skip_cleanup: true
file: "../share/bintray.json"
user: dismine
key:
secure: q9rcswyUyOqHAnxL0FLEQ8tdFkE21kNlv/TUpZgk0MbcsWRhBWaKJVv5kz6ABkjeLMB7c7eS7KfYRui0RFBKHI7ZnpzHBZN4f1aGd/rf9m5qaZdKFFBlpz4tXPHvXOVyXRwOReqFj7brAz6NB+oqJN8HFA4Q1y039yZOaHt28JkwYSDqS5lRvbwegYS8kaJupGZcm8NaNeB8tuXuZ/8DIQpZdVKmBUwpgpPAewCEqYP4z9DUpsmMZ5h63g7mJKm9di91cQr65eS24io6m1ZfAx8M6kTaKwyR5nz8a8bnqR48AAnbNoM8Xj1sgJqnT40DZKPCNr7KL3JSNRglKNgHVMFBOj0v9F5YxsDs8twWuqFVbywB+lNSHDyvGVgmS2+EdwKLQT0YBxYfIL1nh34ed7GffZZmBcAJGfxo8ieAMRgyylSyQIHJ0ZBl6X6DzOvLpvFlcva9yhqZfkx3P/Dgarqklnj3DdvzTDW2vxCT4yVLpMySlBXW2I3s7m8xpOjZbM7eZfMZkwjd/e8IYp8jxdQnxlzNe15mzxSXnZjLz3Rwi1qzhJZyZf4OGVxuQuR9oW+c5q55OOY5hImtZELlJyu1K0zKTd85g0D+WwKj4J30J0QWl1pxZlln59Q5cMmpyQ7sc8zN1WPoWAEyavwPrf4028TpEJqaUw/0cQGg9I4=
dry-run: false
on:
all_branches: true
condition: "$DEPLOY = true"
addons:
sonarcloud:
organization: "dismine"
token:
secure: L8uC9uH9d+coVwndZ+UzDpMFS+fxk8dCSEcoAIXC22xg4PhHACbZJqrSANRNy8UC7LZHdFlGDozeHLqw6FPanKIoNy6yX7ngGjuR2azLOdqNhBvlhH6Knc0ua7zSpQuHDkkv3vwdJHS4MNXvAwTr+ErLXmEBvuekiM2HEHGRA8MtdEo9naq+m65/ZTkn3iiA654HT2gh3afYDONyTbEa6WkGmoI1Z597PoIJ/0HaKf9TqO/FahXhLYmLL9UW7rPCwj8rUyLiJ39lRrmo2JAPdRT/QoxAA5l97OI+IMjv5ut5p1KZUozuAedxj8kx43QAw+YuRqBZAuZOy5meFSHV62WG5CbqCuZPE79+JyLTYSKxuuzK6v8F6jnQRXC79EdYEIRbXtC86ZftFDgHTt1LP4JaBoPV9ee3DiY7PHO65oSjey7831Ou18UcjmV0BqtQfVVAWsRKYTqjFCBKa9hNDbzIKHLbmj5/K5TitBMTBpjSYnLYJdkDWY3DPGpWDFyT2oo2bRrSl9/UsuT27hi5psMTQSlrYqIGezVz0KDf3TjWPS5RhHjMr+Lt4Ykh5YxKw9zmvH9gvPwOQbfTtPNZHGOMt1Q8aZhovruYDlBleBFuDaHnKV8U9lJr2BOb44nvx+BBURo/Xq1cNew9UNitjTvtEmPeocOLMb2lFMkXAbs=

View File

@ -1,4 +1,14 @@
# Version 0.7.0 (unreleased)
# Version 0.7.37 (unreleased)
- Fix Tape crash on Mac OS X.
- Fix issue in VAbstractCurve::CurveIntersectAxis.
- Improve editing a spline path through control points for locked angles.
- [smart-pattern/valentina#73] Notes for tools.
- Fix crash while synchronize measurements.
- Object alias.
- Change value for an uninitialized local variable to NAN.
- Independent pen style and color after a group operation.
# Version 0.7.36 October 24, 2020
- [#892] Show tooltip for piece node point.
- [#894] Quick way to disable a passmark.
- [#895] Improve path validation. Do not allow repeat the same curve twice.
@ -50,6 +60,10 @@
- Improve the property browser. Show full arc name.
- [smart-pattern/valentina#45] Optimize tool box position for big screen resolutions.
- [smart-pattern/valentina#40] Invalid name of arc in modeling mode.
- New warning. Error calculating segment of curve.
- Improve searching lost measurements. Additional case with underscores instead of regular spaces.
- Redesign multisize measurements.
- [smart-pattern/valentina#5] New versioning schema.
# Version 0.6.2 (unreleased)
- [#903] Bug in tool Cut Spline path.
@ -89,6 +103,9 @@
- Fix crash after uniting three pieces in sequence.
- Incorrect conversion to newer curve format.
- Elide a variable description in the formula wizard.
- Fix removing a pin in the Seam Allowance tool dialog.
- Fix label size for case with two pins.
- Fix crash while synchronize measurements.
# Version 0.6.1 October 23, 2018
- [#885] Regression. Broken support for multi size measurements.

View File

@ -39,10 +39,10 @@ shallow_clone: false # default is "false"
environment:
matrix:
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
QT5: Qt\5.14\mingw73_32
QT_VERSION: Qt5.14
QT5: Qt\5.15\mingw81_32
QT_VERSION: Qt5.15
QMAKE_GENERATOR: "MinGW Makefiles"
MINGW_PATH: C:\Qt\Tools\mingw730_32\bin
MINGW_PATH: C:\Qt\Tools\mingw810_32\bin
PLATFORM: x86
DEPLOY: true
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
@ -52,6 +52,26 @@ environment:
MINGW_PATH: C:\Qt\Tools\mingw492_32\bin
PLATFORM: x86
DEPLOY: true
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
QT5: Qt\5.15\mingw81_64
QT_VERSION: Qt5.15
QMAKE_GENERATOR: "MinGW Makefiles"
MINGW_PATH: C:\Qt\Tools\mingw810_64\bin
PLATFORM: x64
DEPLOY: false
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
QT5: Qt\5.15\msvc2019_64
QMAKE_GENERATOR: "NMake Makefiles JOM"
VSVER: 16
PLATFORM: x64
DEPLOY: false
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
QT5: Qt\5.14\mingw73_32
QT_VERSION: Qt5.14
QMAKE_GENERATOR: "MinGW Makefiles"
MINGW_PATH: C:\Qt\Tools\mingw730_32\bin
PLATFORM: x86
DEPLOY: false
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
QT5: Qt\5.14\mingw73_64
QT_VERSION: Qt5.14
@ -238,7 +258,7 @@ deploy:
package: valentina-win_auto-upload
publish: true
override: true
version: 0.7.0a
version: 0.7.36
on:
DEPLOY: true
artifact: valentina-win-$(QT_VERSION)-$(APPVEYOR_REPO_BRANCH)-$(APPVEYOR_REPO_COMMIT)

View File

@ -19,6 +19,19 @@ unix{
} else {
VCOPY = $$QMAKE_COPY -u
}
# Default prefix. Use for creation install path.
DEFAULT_PREFIX = /usr
# Prefix for binary file.
isEmpty(PREFIX){
PREFIX = $$DEFAULT_PREFIX
}
BINDIR = $$PREFIX/bin
DATADIR = $$PREFIX/share
PKGDATADIR = $$DATADIR/valentina
DEFINES += BINDIR=\\\"$$BINDIR\\\" DATADIR=\\\"$$DATADIR\\\" PKGDATADIR=\\\"$$PKGDATADIR\\\"
}
win32{
@ -310,9 +323,6 @@ defineReplace(FindLatestTagDistance){
}
}
# Default prefix. Use for creation install path.
DEFAULT_PREFIX = /usr
# In debug mode on Unix system we use all usefull for us compilers keys for checking errors.
# Also trying make all possible for speed up build time.
unix {
@ -934,6 +944,7 @@ MSVC_DEBUG_CXXFLAGS += \
-wd5027 \ # move assignment operator was implicitly defined as deleted
-wd5039 \ # pointer or reference to potentially throwing function passed to extern C function under -EHc.
-wd4774 \ # format string expected in argument 3 is not a string literal
-wd5204 # class has virtual functions, but its trivial destructor is not virtual; instances of objects derived
# from this class may not be destructed correctly
-wd5204 \ # class has virtual functions, but its trivial destructor is not virtual; instances of objects derived
# from this class may not be destructed correctly
-wd5219 # implicit conversion from '<type>' to '<type>', possible loss of data
}

View File

@ -1,5 +1,5 @@
valentina (0.7.0) trusty; urgency=low
valentina (0.7.36) trusty; urgency=low
* Auto build.
-- dismine <dismine@dismine-To-be-filled-by-O-E-M> Mon, 12 Oct 2018 12:27:00 +0300
-- dismine <dismine@dismine-To-be-filled-by-O-E-M> Sat, 24 Oct 2020 12:27:00 +0300

View File

@ -16,8 +16,7 @@ Vcs-Browser: https://gitlab.com/smart-pattern/valentina
Package: valentina
Architecture: i386 amd64
Depends: libc6 (>= 2.4), libgcc1 (>= 1:4.1.1), libqt5core5a (>= 5.4.0) | libqt5core5 (>= 5.4.0), libqt5gui5 (>= 5.4.0) | libqt5gui5-gles (>= 5.4.0), libqt5printsupport5 (>= 5.4.0), libqt5svg5 (>= 5.4.0), libqt5widgets5 (>= 5.4.0), libqt5xml5 (>= 5.4.0), libqt5xmlpatterns5 (>= 5.4.0), libqt5concurrent5(>= 5.4.0), libqt5opengl5 (>= 5.4.0), libstdc++6 (>= 4.8)
Suggests: xpdf
Depends: libc6 (>= 2.4), libgcc1 (>= 1:4.1.1), libqt5core5a (>= 5.4.0) | libqt5core5 (>= 5.4.0), libqt5gui5 (>= 5.4.0) | libqt5gui5-gles (>= 5.4.0), libqt5printsupport5 (>= 5.4.0), libqt5svg5 (>= 5.4.0), libqt5widgets5 (>= 5.4.0), libqt5xml5 (>= 5.4.0), libqt5xmlpatterns5 (>= 5.4.0), libqt5concurrent5(>= 5.4.0), libqt5opengl5 (>= 5.4.0), libstdc++6 (>= 4.8), poppler-utils
Conflicts: seamly2d
Description: Pattern making program.
Valentina is a cross-platform patternmaking program which allows designers

View File

@ -1,6 +1,6 @@
.\" Manpage for tape.
.\" Contact dismine@gmail.com to correct errors.
.TH tape 1 "10 March, 2017" "tape man page"
.TH tape 1 "3 October, 2020" "tape man page"
.SH NAME
Tape \- Valentina's measurements editor.
.SH SYNOPSIS
@ -20,12 +20,14 @@ is a part of Valentina. And used for creating and editing measurement files.
Displays this help.
.IP "-v, --version"
Displays version information.
.IP "-e, --height <The base height>"
Open with the base height. Valid values: 92, 98, 104, 110, 116, 122, 128, 134, 140, 146, 152, 158, 164, 170, 176, 182, 188, 194, 200cm.
.IP "-s, --size <The base size>"
Open with the base size. Valid values: 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56cm.
.IP "-u, --unit <The pattern unit>"
Set pattern file unit: cm, mm, inch.
.IP "-a, --dimensionA <The dimension A base>"
Set base for dimension A in the table units.
.IP "-b, --dimensionB <The dimension B base>"
Set base for dimension B in the table units.
.IP "-c, --dimensionA <The dimension C base>"
Set base for dimension C in the table units.
.IP "-u, --units <The pattern units>"
Set pattern file units: cm, mm, inch.
.IP "--test"
Use for unit testing. Run the program and open a file without showing the main window.
.IP "--no-scaling"
@ -35,9 +37,5 @@ Disable high dpi scaling. Call this option if has problem with scaling (by defau
\- the measurement file.
.SH AUTHOR
.RI "This manual page was written by Roman Telezhynskyi <" dismine@gmail.com ">"
.SH "SEE ALSO"
.RB "Full " "User Manual" " is availiable in"
.UR https://bitbucket.org/dismine/valentina/wiki/manual/Content
.UE
.BR valentina (1)

View File

@ -139,10 +139,12 @@ The path to output destination folder. By default the directory at which the app
.RB "Export only details. Export details as they positioned in the details mode. Any layout related options will be ignored."
.IP "--exportSuchDetails <The name regex>"
.RB "Export only details that match a piece name regex."
.IP "-x, --gsize <The size value>"
.RB "Set size value a pattern file, that was opened with multisize measurements " "(export mode)" ". Valid values: 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56cm."
.IP "-e, --gheight <The height value>"
.RB "Set height value a pattern file, that was opened with multisize measurements (" "export mode" "). Valid values: 92, 98, 104, 110, 116, 122, 128, 134, 140, 146, 152, 158, 164, 170, 176, 182, 188, 194, 200cm."
.IP "--dimensionA <The dimension A base>"
.RB "Set base for dimension A in the multisize measurements units " "(export mode)" "."
.IP "--dimensionB <The dimension B base>"
.RB "Set base for dimension B in the multisize measurements units " "(export mode)" "."
.IP "--dimensionC <The dimension C base>"
.RB "Set base for dimension C in the multisize measurements units " "(export mode)" "."
.IP "--userMaterial <User material>"
.RB "Use this option to override user material defined in pattern. The value must be in form <number>@<user matrial name>. The number should be in range from 1 to 20. For example, 1@Fabric2. The key can be used multiple times. Has no effect in GUI mode."
.IP "-p, --pageformat <Template number>"

View File

@ -1,5 +1,5 @@
valentina (0.7.0) trusty; urgency=low
valentina (0.7.36) trusty; urgency=low
* Auto build.
-- dismine <dismine@dismine-To-be-filled-by-O-E-M> Mon, 12 Oct 2018 12:27:00 +0300
-- dismine <dismine@dismine-To-be-filled-by-O-E-M> Sat, 24 Oct 2020 12:27:00 +0300

3
dist/debian/control vendored
View File

@ -16,8 +16,7 @@ Vcs-Browser: https://gitlab.com/smart-pattern/valentina
Package: valentina
Architecture: i386 amd64
Depends: libc6 (>= 2.4), libgcc1 (>= 1:4.1.1), libqt5core5a (>= 5.4.0) | libqt5core5 (>= 5.4.0), libqt5gui5 (>= 5.4.0) | libqt5gui5-gles (>= 5.4.0), libqt5printsupport5 (>= 5.4.0), libqt5svg5 (>= 5.4.0), libqt5widgets5 (>= 5.4.0), libqt5xml5 (>= 5.4.0), libqt5xmlpatterns5 (>= 5.4.0), libqt5concurrent5(>= 5.4.0), libqt5opengl5 (>= 5.4.0), libstdc++6 (>= 4.8)
Suggests: xpdf
Depends: libc6 (>= 2.4), libgcc1 (>= 1:4.1.1), libqt5core5a (>= 5.4.0) | libqt5core5 (>= 5.4.0), libqt5gui5 (>= 5.4.0) | libqt5gui5-gles (>= 5.4.0), libqt5printsupport5 (>= 5.4.0), libqt5svg5 (>= 5.4.0), libqt5widgets5 (>= 5.4.0), libqt5xml5 (>= 5.4.0), libqt5xmlpatterns5 (>= 5.4.0), libqt5concurrent5(>= 5.4.0), libqt5opengl5 (>= 5.4.0), libstdc++6 (>= 4.8), poppler-utils
Conflicts: seamly2d
Description: Pattern making program.
Valentina is a cross-platform patternmaking program which allows designers

20
dist/debian/tape.1 vendored
View File

@ -1,6 +1,6 @@
.\" Manpage for tape.
.\" Contact dismine@gmail.com to correct errors.
.TH tape 1 "10 March, 2017" "tape man page"
.TH tape 1 "3 October, 2020" "tape man page"
.SH NAME
Tape \- Valentina's measurements editor.
.SH SYNOPSIS
@ -20,12 +20,14 @@ is a part of Valentina. And used for creating and editing measurement files.
Displays this help.
.IP "-v, --version"
Displays version information.
.IP "-e, --height <The base height>"
Open with the base height. Valid values: 92, 98, 104, 110, 116, 122, 128, 134, 140, 146, 152, 158, 164, 170, 176, 182, 188, 194, 200cm.
.IP "-s, --size <The base size>"
Open with the base size. Valid values: 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56cm.
.IP "-u, --unit <The pattern unit>"
Set pattern file unit: cm, mm, inch.
.IP "-a, --dimensionA <The dimension A base>"
Set base for dimension A in the table units.
.IP "-b, --dimensionB <The dimension B base>"
Set base for dimension B in the table units.
.IP "-c, --dimensionA <The dimension C base>"
Set base for dimension C in the table units.
.IP "-u, --units <The pattern units>"
Set pattern file units: cm, mm, inch.
.IP "--test"
Use for unit testing. Run the program and open a file without showing the main window.
.IP "--no-scaling"
@ -35,9 +37,5 @@ Disable high dpi scaling. Call this option if has problem with scaling (by defau
\- the measurement file.
.SH AUTHOR
.RI "This manual page was written by Roman Telezhynskyi <" dismine@gmail.com ">"
.SH "SEE ALSO"
.RB "Full " "User Manual" " is availiable in"
.UR https://bitbucket.org/dismine/valentina/wiki/manual/Content
.UE
.BR valentina (1)

View File

@ -139,10 +139,12 @@ The path to output destination folder. By default the directory at which the app
.RB "Export only details. Export details as they positioned in the details mode. Any layout related options will be ignored."
.IP "--exportSuchDetails <The name regex>"
.RB "Export only details that match a piece name regex."
.IP "-x, --gsize <The size value>"
.RB "Set size value a pattern file, that was opened with multisize measurements " "(export mode)" ". Valid values: 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56cm."
.IP "-e, --gheight <The height value>"
.RB "Set height value a pattern file, that was opened with multisize measurements (" "export mode" "). Valid values: 92, 98, 104, 110, 116, 122, 128, 134, 140, 146, 152, 158, 164, 170, 176, 182, 188, 194, 200cm."
.IP "--dimensionA <The dimension A base>"
.RB "Set base for dimension A in the multisize measurements units " "(export mode)" "."
.IP "--dimensionB <The dimension B base>"
.RB "Set base for dimension B in the multisize measurements units " "(export mode)" "."
.IP "--dimensionC <The dimension C base>"
.RB "Set base for dimension C in the multisize measurements units " "(export mode)" "."
.IP "--userMaterial <User material>"
.RB "Use this option to override user material defined in pattern. The value must be in form <number>@<user matrial name>. The number should be in range from 1 to 20. For example, 1@Fabric2. The key can be used multiple times. Has no effect in GUI mode."
.IP "-p, --pageformat <Template number>"

View File

@ -9,9 +9,9 @@
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>LSMinimumSystemVersion</key>
<string>10.6</string>
<string>10.7</string>
<key>NSHumanReadableCopyright</key>
<string>© 2013-2018, Valentina project</string>
<string>© 2013-2020, Valentina project</string>
<key>CFBundleSignature</key>
<string>@TYPEINFO@</string>
<key>CFBundleExecutable</key>
@ -19,9 +19,9 @@
<key>CFBundleIdentifier</key>
<string>io.bitbucket.valentinaproject.@EXECUTABLE@</string>
<key>CFBundleShortVersionString</key>
<string>0.7.0</string>
<string>0.7.36</string>
<key>CFBundleVersion</key>
<string>0.7.0.0</string>
<string>0.7.36.0</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleDocumentTypes</key>

View File

@ -9,9 +9,9 @@
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>LSMinimumSystemVersion</key>
<string>10.6</string>
<string>10.7</string>
<key>NSHumanReadableCopyright</key>
<string>© 2013-2018, Valentina project</string>
<string>© 2013-2020, Valentina project</string>
<key>CFBundleSignature</key>
<string>@TYPEINFO@</string>
<key>CFBundleExecutable</key>
@ -19,9 +19,9 @@
<key>CFBundleIdentifier</key>
<string>io.bitbucket.valentinaproject.@EXECUTABLE@</string>
<key>CFBundleShortVersionString</key>
<string>0.7.0</string>
<string>0.7.36</string>
<key>CFBundleVersion</key>
<string>0.7.0.0</string>
<string>0.7.36.0</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleDocumentTypes</key>

2
dist/rpm/_service vendored
View File

@ -1,7 +1,7 @@
<services>
<service name="tar_scm">
<param name="url">git://github.com/dismine/Valentina_git.git</param>
<param name="versionprefix">0.6.999</param>
<param name="versionprefix">0.7.36</param>
<param name="filename">valentina</param>
<param name="scm">git</param>
<param name="exclude">.git</param>

View File

@ -79,9 +79,19 @@ BuildRequires: libqt5-qtxmlpatterns-devel
#BuildRequires: clang-libs
#%endif
Requires: poppler-utils
%if 0%{?mageia} > 0
Requires: poppler
%endif
Version: 0.7.0
%if 0%{?suse_version} > 0
Requires: poppler-tools
%endif
%if 0%{?fedora_version} > 0 || 0%{?rhel_version} > 0 || 0%{?centos_version} > 0
Requires: poppler-utils
%endif
Version: 0.7.36
Release: 0
URL: https://gitlab.com/smart-pattern/valentina
License: GPL-3.0+
@ -233,6 +243,6 @@ rm -f dist/debian/%{name}.1.gz dist/debian/tape.1.gz dist/debian/%{name}.xml dis
%changelog
* Mon Jun 11 2018 Roman Telezhynskyi
* Sat Oct 24 2020 Roman Telezhynskyi
- Auto build

19
dist/valentina.dsc vendored
View File

@ -2,17 +2,24 @@ Format: 3.0 (native)
Source: valentina
Binary: valentina
Architecture: i386 amd64
Version: 0.3.3
Version: 0.7.36
Maintainer: Roman Telezhynskyi <dismine@gmail.com>
Homepage: http://www.valentina-project.org/
Homepage: https://valentinaproject.bitbucket.io
Standards-Version: 3.9.5
Vcs-Browser: https://bitbucket.org/dismine/valentina
Build-Depends: debhelper (>= 8.0.0), qtbase5-dev (>= 5.0.0), libqt5svg5-dev (>= 5.0.0), g++ (>= 4.6.0), qt5-default (>= 5.0.0), qttools5-dev-tools (>= 5.0.0), libqt5xmlpatterns5-dev (>= 5.0.0)
Build-Depends: debhelper (>= 8.0.0),
qtbase5-dev (>= 5.4.0),
libqt5svg5-dev (>= 5.4.0),
g++ (>= 4.8.0),
qt5-default (>= 5.4.0),
qttools5-dev-tools (>= 5.4.0),
libqt5xmlpatterns5-dev (>= 5.4.0),
libqt5opengl5-dev (>= 5.4.0)
Package-List:
valentina deb graphics optional
Checksums-Sha1:
581eb1bf36b4ab7126b5983d809130f15396859e 24838101 valentina_0.3.3.tar
581eb1bf36b4ab7126b5983d809130f15396859e 24838101 valentina_0.7.36.tar
Checksums-Sha256:
9b156c7120a69b90373efb8ca9998c3e0563a60ad337210166cfd41b00b0f13c 24838101 valentina_0.3.3.tar
9b156c7120a69b90373efb8ca9998c3e0563a60ad337210166cfd41b00b0f13c 24838101 valentina_0.7.36.tar
Files:
95677e29d3a59cf5b064f7be236a4b78 24838101 valentina_0.3.3.tar
95677e29d3a59cf5b064f7be236a4b78 24838101 valentina_0.7.36.tar

View File

@ -6,11 +6,11 @@
#define MyAppPublisher "Roman Telezhynskyi"
#define MyAppURL "http://valentinaproject.bitbucket.io/"
#define MyAppExeName "valentina.exe"
#define MyAppCopyright "(C) 2013-2018 Valentina project"
#define MyAppCopyright "(C) 2013-2020 Valentina project"
#define MyDateTimeString GetDateTimeString('yyyymmddhhnnss', '', '');
; Appstatus: "" = release, "b" = beta, "a" = alpha
; this only modifies the resulting exe name of the installer package ;-)
#define MyAppStatus "a"
#define MyAppStatus ""
[Setup]
; NOTE: The value of AppId uniquely identifies this application.
@ -226,8 +226,6 @@ Source: ".\valentina\*.txt"; DestDir: "{app}"; Flags: ignoreversion
Source: ".\valentina\*.rcc"; DestDir: "{app}"; Flags: ignoreversion
Source: ".\valentina\*.ico"; DestDir: "{app}"; Flags: ignoreversion
Source: ".\valentina\*.ini"; DestDir: "{app}"; Flags: ignoreversion
; Only for test versions
;Source: ".\valentina\VERSION"; DestDir: "{app}"; Flags: ignoreversion
; NOTE: Don't use "Flags: ignoreversion" on any shared system files
; DLL used to check if the target program is running at install time

View File

@ -4,9 +4,9 @@
"repo": "Valentina",
"subject": "dismine",
"desc": "Was pushed completely automatically",
"website_url": "http://valentina-project.org/",
"issue_tracker_url": "https://bitbucket.org/dismine/valentina/issues?status=new&status=open",
"vcs_url": "https://bitbucket.org/dismine/valentina",
"website_url": "https://valentinaproject.bitbucket.io",
"issue_tracker_url": "https://gitlab.com/smart-pattern/valentina/-/issues",
"vcs_url": "https://gitlab.com/smart-pattern/valentina",
"github_use_tag_release_notes": false,
"licenses": ["GPL-3.0"],
"labels": ["patternmaking"],
@ -15,10 +15,10 @@
},
"version": {
"name": "0.6.2rc",
"desc": "Fake release",
"released": "2019-06-24",
"vcs_tag": "0.6.2",
"name": "0.7.36",
"desc": "Test branch release",
"released": "2020-10-24",
"vcs_tag": "v0.7.36",
"gpgSign": false
},

View File

@ -163,7 +163,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="266"/>
<source>Vertical distance from the widest point of the calf to the floor.</source>
<comment>Full measurement description.</comment>
<translation>Вертикальное расстояние от широкой части икры ноги до пола</translation>
<translation>Вертикальное расстояние от широкой части икры ноги до пола.</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="270"/>
@ -211,7 +211,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="286"/>
<source>Height: Highhip</source>
<comment>Full measurement name.</comment>
<translation>Высота остисто - подвздошной передней точки.</translation>
<translation>Высота остисто-подвздошной передней точки.</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="287"/>
@ -362,7 +362,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="344"/>
<source>Vertical distance from the Waist Side to the Hip level.</source>
<comment>Full measurement description.</comment>
<translation>Расстояние от линии талии до віступающей точки ягодицы</translation>
<translation>Расстояние от линии талии до выступающей точки ягодицы.</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="348"/>
@ -458,7 +458,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="398"/>
<source>Horizontal distance from Waist Side to Waist Side.</source>
<comment>Full measurement description.</comment>
<translation>Горизонтальное расстояние от одной стороны талии до другой</translation>
<translation>Горизонтальное расстояние от одной стороны талии до другой.</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="402"/>
@ -476,7 +476,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="405"/>
<source>Horizontal distance from Hip Side to Hip Side.</source>
<comment>Full measurement description.</comment>
<translation>Горизонтальное расстояние от бедра до бедра</translation>
<translation>Горизонтальное расстояние от бедра до бедра.</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="409"/>
@ -512,7 +512,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="431"/>
<source>Horizontal distance from Scapula (Blade point) to the Neck Back.</source>
<comment>Full measurement description.</comment>
<translation>Размерный признак в стандарте 74.Измеряют по горизонтали расстояние от шейной точки до вертикальной плоскости, касательной паиболее выступающих назад точек обеих лопаток.</translation>
<translation>Размерный признак в стандарте 74. Измеряют по горизонтали расстояние от шейной точки до вертикальной плоскости, касательной наиболее выступающих назад точек обеих лопаток.</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="435"/>
@ -565,7 +565,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="464"/>
<source>Length from Wrist line to base of middle finger.</source>
<comment>Full measurement description.</comment>
<translation>Размер от запястья до основания среднего пальца</translation>
<translation>Размер от запястья до основания среднего пальца.</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="468"/>
@ -583,7 +583,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="471"/>
<source>Length from Wrist line to end of middle finger.</source>
<comment>Full measurement description.</comment>
<translation>Размер от запястья до конца среднего пальца</translation>
<translation>Размер от запястья до конца среднего пальца.</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="475"/>
@ -619,7 +619,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="484"/>
<source>Circumference where Palm is widest.</source>
<comment>Full measurement description.</comment>
<translation>Обхват ладони в максимально широком месте</translation>
<translation>Обхват ладони в максимально широком месте.</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="487"/>
@ -655,7 +655,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="509"/>
<source>Measure at widest part of foot.</source>
<comment>Full measurement description.</comment>
<translation>Ширина стопы в самом широком месте</translation>
<translation>Ширина стопы в самом широком месте.</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="512"/>
@ -691,7 +691,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="522"/>
<source>Measure circumference around widest part of foot.</source>
<comment>Full measurement description.</comment>
<translation>Измерьте окружность самой широкой части стопы</translation>
<translation>Измерьте окружность самой широкой части стопы.</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="526"/>
@ -781,7 +781,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="569"/>
<source>Horizontal distance from Head Side to Head Side, where Head is widest.</source>
<comment>Full measurement description.</comment>
<translation>Горизонтальное расстояние от одной стороны головы до другой в самом широком месте</translation>
<translation>Горизонтальное расстояние от одной стороны головы до другой в самом широком месте.</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="573"/>
@ -835,7 +835,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="603"/>
<source>Circumference of Neck midsection, about halfway between jaw and torso.</source>
<comment>Full measurement description.</comment>
<translation>Окружность средней части шеи, примерно на посередине между челюстью и туловищем.</translation>
<translation>Окружность средней части шеи, примерно посередине между челюстью и туловищем.</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="607"/>
@ -853,7 +853,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="610"/>
<source>Neck circumference at base of Neck, touching Neck Back, Neck Sides, and Neck Front.</source>
<comment>Full measurement description.</comment>
<translation>Номер размерного признака в стандарте 13. Ленту накладывают на основание шеи так, чтобы оба края ленты плотно прилегали к ее поверхности, и замыкают спереди над яремной вырезкой. Размер читают по нижнему краю ленты.</translation>
<translation>Номер размерного признака в стандарте 13. Ленту накладывают на основание шеи так, чтобы оба края ленты плотно прилегали к ее поверхности, и замыкают спереди над яремной веной. Размер читают по нижнему краю ленты.</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="615"/>
@ -984,7 +984,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="655"/>
<source>Circumference around Highhip, where Abdomen protrusion is greatest, parallel to floor.</source>
<comment>Full measurement description.</comment>
<translation>Обхват бёдер сверху, через саму выступающую точку живота, параллельно полу.</translation>
<translation>Обхват бёдер сверху, через самую выступающую точку живота, параллельно полу.</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="660"/>
@ -1020,7 +1020,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="671"/>
<source>From Neck Side to Neck Side through Neck Front.</source>
<comment>Full measurement description.</comment>
<translation>Ленту накладывают на основание шеи так, чтобы оба края ленты плотно прилегали к ее поверхности, и замыкают спереди над яремной вырезкой. Размер читают по нижнему краю ленты. Мерка записывается в половинном размере.</translation>
<translation>Ленту накладывают на основание шеи так, чтобы оба края ленты плотно прилегали к ее поверхности, и замыкают спереди над яремной веной. Размер читают по нижнему краю ленты. Мерка записывается в половинном размере.</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="675"/>
@ -1165,7 +1165,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="727"/>
<source>From Hip Side to Hip Side across Front.</source>
<comment>Full measurement description.</comment>
<translation>Размерный признак 20. Ленту накладывают на ягодичные точки. Лента должна проходить горизонтально вокруг туловища и замыкаться на правой стороне туловища</translation>
<translation>Размерный признак 20. Ленту накладывают на ягодичные точки. Лента должна проходить горизонтально вокруг туловища и замыкаться на правой стороне туловища.</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="731"/>
@ -1237,7 +1237,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="756"/>
<source>Half of &apos;Lowbust arc, front&apos;. (&apos;Lowbust Arc, front&apos; / 2).</source>
<comment>Full measurement description.</comment>
<translation>Половина от ширины груди третьей. ( Шг3/2)</translation>
<translation>Половина от ширины груди третьей. (Шг3/2)</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="760"/>
@ -1399,7 +1399,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="822"/>
<source>From Rib Side to Rib side across back. (&apos;Rib circumference&apos; - &apos;Rib arc, front&apos;).</source>
<comment>Full measurement description.</comment>
<translation>От одной стороны ребер до другой, обхватывая лентойсзади. (&apos;Обхват ребер&apos; - &apos;Ширина ребер спереди&apos;)</translation>
<translation>От одной стороны ребер до другой, обхватывая лентой сзади. (&apos;Обхват ребер&apos; - &apos;Ширина ребер спереди&apos;)</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="827"/>
@ -1615,8 +1615,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="912"/>
<source>Curve stiff paper around front of abdomen, tape at sides. Measure from Hip Side to Hip Side over paper across front.</source>
<comment>Full measurement description.</comment>
<translation>Ленту накладывают на ягодичные точки. Лента должна проходить горизонтально вокруг туловища, спереди - по гибкой пластине, приложенной вертикально к животу для учета выступа живота, и замыкаться на правой стороне туловища
</translation>
<translation>Ленту накладывают на ягодичные точки. Лента должна проходить горизонтально вокруг туловища, спереди - по гибкой пластине, приложенной вертикально к животу для учета выступа живота, и замыкаться на правой стороне туловища.</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="917"/>
@ -1724,7 +1723,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="969"/>
<source>From Neck Front down between breasts to Waist Front.</source>
<comment>Full measurement description.</comment>
<translation>Расстояние от основания шеи спереди между грудью до лини талии спереди</translation>
<translation>Расстояние от основания шеи спереди между грудью до линии талии спереди.</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="973"/>
@ -3020,7 +3019,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1509"/>
<source>From Neck Side diagonal to Armfold Front.</source>
<comment>Full measurement description.</comment>
<translation>Расстояние от шейной точки до уровня заднего угла подмышечной впадины спереди</translation>
<translation>Расстояние от шейной точки до уровня заднего угла подмышечной впадины спереди.</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1513"/>
@ -3548,7 +3547,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="2148"/>
<source>This information is pulled from pattern charts in some patternmaking systems, e.g. Winifred P. Aldrich&apos;s &quot;Metric Pattern Cutting&quot;.</source>
<comment>Full measurement description.</comment>
<translation>Эта информация использована из шаблона в таких системах раскроя, как Уилфред Алдрич &quot;Метод конструирования и моделирования&quot;</translation>
<translation>Эта информация использована из шаблона в таких системах раскроя, как Уилфред Алдрич &quot;Метод конструирования и моделирования&quot;.</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1736"/>
@ -4400,7 +4399,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="2140"/>
<source>This information is pulled from pattern charts in some patternmaking systems, e.g. Winifred P. Aldrich&apos;s &quot;Metric Pattern Cutting&quot;.</source>
<comment>Full measurement description.</comment>
<translation>Эта информация взята для выкроек в таких системах раскроя, как Уилфред Алдрич &quot;Метод конструирования и моделирования&quot;</translation>
<translation>Эта информация взята для выкроек в таких системах раскроя, как Уилфред Алдрич &quot;Метод конструирования и моделирования&quot;.</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="2137"/>

View File

@ -43,7 +43,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="221"/>
<source>height_scapula</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Влоп</translation>
<translation>height_scapula</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="223"/>
@ -61,7 +61,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="228"/>
<source>height_armpit</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Взу</translation>
<translation>height_armpit</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="230"/>
@ -115,7 +115,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="249"/>
<source>height_gluteal_fold</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Впс</translation>
<translation>height_gluteal_fold</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="251"/>
@ -163,7 +163,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="266"/>
<source>Vertical distance from the widest point of the calf to the floor.</source>
<comment>Full measurement description.</comment>
<translation>Вертикальное расстояние от широкой части икры ноги до пола</translation>
<translation>Вертикальное расстояние от широкой части икры ноги до пола.</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="270"/>
@ -205,13 +205,13 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="284"/>
<source>height_highhip</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Вопт</translation>
<translation>height_highhip</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="286"/>
<source>Height: Highhip</source>
<comment>Full measurement name.</comment>
<translation>Высота остисто - подвздошной передней точки.</translation>
<translation>Высота остисто-подвздошной передней точки.</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="287"/>
@ -242,7 +242,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="298"/>
<source>height_bustpoint</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Вст</translation>
<translation>height_bustpoint</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="300"/>
@ -260,7 +260,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="305"/>
<source>height_shoulder_tip</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Впт</translation>
<translation>height_shoulder_tip</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="307"/>
@ -314,7 +314,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="326"/>
<source>height_neck_back_to_knee</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Дшк</translation>
<translation>height_neck_back_to_knee</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="328"/>
@ -362,7 +362,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="344"/>
<source>Vertical distance from the Waist Side to the Hip level.</source>
<comment>Full measurement description.</comment>
<translation>Расстояние от линии талии до віступающей точки ягодицы</translation>
<translation>Расстояние от линии талии до выступающей точки ягодицы.</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="348"/>
@ -500,7 +500,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="428"/>
<source>indent_neck_back</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Пкор</translation>
<translation>indent_neck_back</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="430"/>
@ -530,7 +530,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="438"/>
<source>Horizontal distance between a flat stick, placed to touch Hip and Scapula, and Waist Back.</source>
<comment>Full measurement description.</comment>
<translation>Горизонтальное расстояние между плоской палочкой, размещенной так, чтобы она касалась бедра и лопатки, и поясницей сзади</translation>
<translation>Горизонтальное расстояние между плоской палочкой, размещенной так, чтобы она касалась бедра и лопатки, и поясницей сзади.</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="442"/>
@ -565,7 +565,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="464"/>
<source>Length from Wrist line to base of middle finger.</source>
<comment>Full measurement description.</comment>
<translation>Размер от запястья до основания среднего пальца</translation>
<translation>Размер от запястья до основания среднего пальца.</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="468"/>
@ -619,13 +619,13 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="484"/>
<source>Circumference where Palm is widest.</source>
<comment>Full measurement description.</comment>
<translation>Обхват ладони в максимально широком месте</translation>
<translation>Обхват ладони в максимально широком месте.</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="487"/>
<source>hand_circ</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Окис</translation>
<translation>hand_circ</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="489"/>
@ -655,7 +655,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="509"/>
<source>Measure at widest part of foot.</source>
<comment>Full measurement description.</comment>
<translation>Ширина стопы в самом широком месте</translation>
<translation>Ширина стопы в самом широком месте.</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="512"/>
@ -697,7 +697,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="526"/>
<source>foot_instep_circ</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Ос</translation>
<translation>foot_instep_circ</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="528"/>
@ -715,7 +715,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="545"/>
<source>head_circ</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Огол</translation>
<translation>head_circ</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="547"/>
@ -733,7 +733,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="552"/>
<source>head_length</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Вгол</translation>
<translation>head_length</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="554"/>
@ -781,7 +781,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="569"/>
<source>Horizontal distance from Head Side to Head Side, where Head is widest.</source>
<comment>Full measurement description.</comment>
<translation>Горизонтальное расстояние от одной стороны головы до другой в самом широком месте</translation>
<translation>Горизонтальное расстояние от одной стороны головы до другой в самом широком месте.</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="573"/>
@ -805,7 +805,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="580"/>
<source>head_chin_to_neck_back</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Дшош</translation>
<translation>head_chin_to_neck_back</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="582"/>
@ -823,7 +823,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="600"/>
<source>neck_mid_circ</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Сш1</translation>
<translation>neck_mid_circ</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="602"/>
@ -835,7 +835,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="603"/>
<source>Circumference of Neck midsection, about halfway between jaw and torso.</source>
<comment>Full measurement description.</comment>
<translation>Окружность средней части шеи, примерно на посередине между челюстью и туловищем.</translation>
<translation>Окружность средней части шеи, примерно посередине между челюстью и туловищем.</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="607"/>
@ -853,13 +853,13 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="610"/>
<source>Neck circumference at base of Neck, touching Neck Back, Neck Sides, and Neck Front.</source>
<comment>Full measurement description.</comment>
<translation>Номер размерного признака в стандарте 13. Ленту накладывают на основание шеи так, чтобы оба края ленты плотно прилегали к ее поверхности, и замыкают спереди над яремной вырезкой. Размер читают по нижнему краю ленты.</translation>
<translation>Номер размерного признака в стандарте 13. Ленту накладывают на основание шеи так, чтобы оба края ленты плотно прилегали к ее поверхности, и замыкают спереди над яремной веной. Размер читают по нижнему краю ленты.</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="615"/>
<source>highbust_circ</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>ОгI</translation>
<translation>highbust_circ</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="617"/>
@ -877,7 +877,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="622"/>
<source>bust_circ</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>ОгII</translation>
<translation>bust_circ</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="624"/>
@ -895,7 +895,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="629"/>
<source>lowbust_circ</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>ОгIII</translation>
<translation>lowbust_circ</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="631"/>
@ -1008,7 +1008,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="668"/>
<source>neck_arc_f</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Сш</translation>
<translation>neck_arc_f</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="670"/>
@ -1020,13 +1020,13 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="671"/>
<source>From Neck Side to Neck Side through Neck Front.</source>
<comment>Full measurement description.</comment>
<translation>Ленту накладывают на основание шеи так, чтобы оба края ленты плотно прилегали к ее поверхности, и замыкают спереди над яремной вырезкой. Размер читают по нижнему краю ленты.</translation>
<translation>Ленту накладывают на основание шеи так, чтобы оба края ленты плотно прилегали к ее поверхности, и замыкают спереди над яремной веной. Размер читают по нижнему краю ленты.</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="675"/>
<source>highbust_arc_f</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>СгI</translation>
<translation>highbust_arc_f</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="677"/>
@ -1045,7 +1045,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="682"/>
<source>bust_arc_f</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>СгII</translation>
<translation>bust_arc_f</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="684"/>
@ -1081,7 +1081,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="696"/>
<source>lowbust_arc_f</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>СгIII</translation>
<translation>lowbust_arc_f</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="698"/>
@ -1117,7 +1117,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="710"/>
<source>waist_arc_f</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Ст</translation>
<translation>waist_arc_f</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="712"/>
@ -1153,7 +1153,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="724"/>
<source>hip_arc_f</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>СбI</translation>
<translation>hip_arc_f</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="726"/>
@ -1165,7 +1165,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="727"/>
<source>From Hip Side to Hip Side across Front.</source>
<comment>Full measurement description.</comment>
<translation>Размерный признак 20. Ленту накладывают на ягодичные точки. Лента должна проходить горизонтально вокруг туловища и замыкаться на правой стороне туловища</translation>
<translation>Размерный признак 20. Ленту накладывают на ягодичные точки. Лента должна проходить горизонтально вокруг туловища и замыкаться на правой стороне туловища.</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="731"/>
@ -1225,7 +1225,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="753"/>
<source>lowbust_arc_half_f</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Шг3_пол</translation>
<translation>lowbust_arc_half_f</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="755"/>
@ -1279,7 +1279,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="774"/>
<source>highhip_arc_half_f</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>бедро_щирина_половина</translation>
<translation>бедро_ширина_половина</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="776"/>
@ -1603,7 +1603,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="909"/>
<source>hip_with_abdomen_arc_f</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Сб</translation>
<translation>hip_with_abdomen_arc_f</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="911"/>
@ -1615,8 +1615,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="912"/>
<source>Curve stiff paper around front of abdomen, tape at sides. Measure from Hip Side to Hip Side over paper across front.</source>
<comment>Full measurement description.</comment>
<translation>Ленту накладывают на ягодичные точки. Лента должна проходить горизонтально вокруг туловища, спереди - по гибкой пластине, приложенной вертикально к животу для учета выступа живота, и замыкаться на правой стороне туловища
</translation>
<translation>Ленту накладывают на ягодичные точки. Лента должна проходить горизонтально вокруг туловища, спереди - по гибкой пластине, приложенной вертикально к животу для учета выступа живота, и замыкаться на правой стороне туловища.</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="917"/>
@ -1724,13 +1723,13 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="969"/>
<source>From Neck Front down between breasts to Waist Front.</source>
<comment>Full measurement description.</comment>
<translation>Расстояние от основания шеи спереди между грудью до лини талии спереди</translation>
<translation>Расстояние от основания шеи спереди между грудью до лини талии спереди.</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="973"/>
<source>armpit_to_waist_side</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Дб</translation>
<translation>armpit_to_waist_side</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="975"/>
@ -1766,7 +1765,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="986"/>
<source>neck_side_to_waist_f</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>ДтсI</translation>
<translation>neck_side_to_waist_f</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="988"/>
@ -1802,7 +1801,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1000"/>
<source>neck_front_to_highbust_f</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Впрп</translation>
<translation>neck_front_to_highbust_f</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1002"/>
@ -1820,7 +1819,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1006"/>
<source>highbust_to_waist_f</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Дпер</translation>
<translation>highbust_to_waist_f</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1008"/>
@ -1874,7 +1873,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1030"/>
<source>lowbust_to_waist_f</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Дпг</translation>
<translation>lowbust_to_waist_f</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1032"/>
@ -2000,7 +1999,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1078"/>
<source>neck_side_to_waist_b</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Дтс1</translation>
<translation>neck_side_to_waist_b</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1080"/>
@ -2018,7 +2017,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1085"/>
<source>neck_back_to_waist_b</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Дтс</translation>
<translation>neck_back_to_waist_b</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1087"/>
@ -2054,7 +2053,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1099"/>
<source>neck_back_to_highbust_b</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Впрз</translation>
<translation>neck_back_to_highbust_b</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1101"/>
@ -2216,7 +2215,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1161"/>
<source>waist_to_highhip_f</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Гт1</translation>
<translation>waist_to_highhip_f</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1163"/>
@ -2234,7 +2233,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1167"/>
<source>waist_to_hip_f</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>ГтII</translation>
<translation>waist_to_hip_f</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1169"/>
@ -2450,7 +2449,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1264"/>
<source>shoulder_length</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Шп</translation>
<translation>shoulder_length</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1266"/>
@ -2468,7 +2467,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1270"/>
<source>shoulder_tip_to_shoulder_tip_f</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>dпл</translation>
<translation>shoulder_tip_to_shoulder_tip_f</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1272"/>
@ -2486,7 +2485,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1277"/>
<source>across_chest_f</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Шг1</translation>
<translation>across_chest_f</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1279"/>
@ -2504,7 +2503,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1284"/>
<source>armfold_to_armfold_f</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Шг</translation>
<translation>armfold_to_armfold_f</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1286"/>
@ -2558,7 +2557,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1307"/>
<source>shoulder_tip_to_shoulder_tip_b</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Дпз</translation>
<translation>shoulder_tip_to_shoulder_tip_b</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1309"/>
@ -2594,7 +2593,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1321"/>
<source>armfold_to_armfold_b</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Шс</translation>
<translation>armfold_to_armfold_b</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1323"/>
@ -2684,7 +2683,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1355"/>
<source>neck_width</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation></translation>
<translation>neck_width</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1357"/>
@ -2702,7 +2701,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1375"/>
<source>bustpoint_to_bustpoint</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Цг</translation>
<translation>bustpoint_to_bustpoint</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1377"/>
@ -2720,7 +2719,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1381"/>
<source>bustpoint_to_neck_side</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Вг</translation>
<translation>bustpoint_to_neck_side</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1383"/>
@ -2732,7 +2731,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1384"/>
<source>From Neck Side to Bustpoint.</source>
<comment>Full measurement description.</comment>
<translation>Измеряют от точки основания шеи до выступающей точки грудной железы.</translation>
<translation>Измеряют от точки основания шеи до выступающей точки грудной железы.</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1387"/>
@ -2882,7 +2881,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1456"/>
<source>shoulder_tip_to_waist_front</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Впкп</translation>
<translation>shoulder_tip_to_waist_front</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1458"/>
@ -2936,7 +2935,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1477"/>
<source>shoulder_tip_to_waist_back</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Впк</translation>
<translation>shoulder_tip_to_waist_back</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1479"/>
@ -3008,7 +3007,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1506"/>
<source>neck_side_to_armfold_f</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Впрк</translation>
<translation>neck_side_to_armfold_f</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1508"/>
@ -3020,7 +3019,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1509"/>
<source>From Neck Side diagonal to Armfold Front.</source>
<comment>Full measurement description.</comment>
<translation>Расстояние от шейной точки до уровня заднего угла подмышечной впадины спереди</translation>
<translation>Расстояние от шейной точки до уровня заднего угла подмышечной впадины спереди.</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1513"/>
@ -3188,7 +3187,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1589"/>
<source>arm_shoulder_tip_to_wrist</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Дрзап</translation>
<translation>arm_shoulder_tip_to_wrist</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1591"/>
@ -3206,7 +3205,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1596"/>
<source>arm_shoulder_tip_to_elbow</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Дрлок</translation>
<translation>arm_shoulder_tip_to_elbow</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1598"/>
@ -3242,7 +3241,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1611"/>
<source>arm_armpit_to_wrist</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Втр</translation>
<translation>arm_armpit_to_wrist</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1613"/>
@ -3296,7 +3295,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1633"/>
<source>arm_upper_circ</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Оп</translation>
<translation>arm_upper_circ</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1635"/>
@ -3332,7 +3331,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1645"/>
<source>arm_elbow_circ</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Олк</translation>
<translation>arm_elbow_circ</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1647"/>
@ -3368,7 +3367,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1658"/>
<source>arm_wrist_circ</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Озап</translation>
<translation>arm_wrist_circ</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1660"/>
@ -3404,7 +3403,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1670"/>
<source>arm_neck_side_to_wrist</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Длуч</translation>
<translation>arm_neck_side_to_wrist</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1672"/>
@ -3422,7 +3421,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1678"/>
<source>arm_neck_side_to_finger_tip</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>ДIIIп</translation>
<translation>arm_neck_side_to_finger_tip</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1680"/>
@ -3476,7 +3475,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1702"/>
<source>armscye_width</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>dпзр</translation>
<translation>armscye_width</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1704"/>
@ -3512,7 +3511,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1728"/>
<source>leg_crotch_to_floor</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Дн</translation>
<translation>leg_crotch_to_floor</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1730"/>
@ -3548,13 +3547,13 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="2148"/>
<source>This information is pulled from pattern charts in some patternmaking systems, e.g. Winifred P. Aldrich&apos;s &quot;Metric Pattern Cutting&quot;.</source>
<comment>Full measurement description.</comment>
<translation>Эта информация использована из шаблона в таких системах раскроя, как Уилфред Алдрич &quot;Метод конструирования и моделирования&quot;</translation>
<translation>Эта информация использована из шаблона в таких системах раскроя, как Уилфред Алдрич &quot;Метод конструирования и моделирования&quot;.</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1736"/>
<source>leg_waist_side_to_floor</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Дсб</translation>
<translation>leg_waist_side_to_floor</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1738"/>
@ -3572,7 +3571,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1743"/>
<source>leg_thigh_upper_circ</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Обед</translation>
<translation>leg_thigh_upper_circ</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1745"/>
@ -3680,7 +3679,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1785"/>
<source>leg_ankle_circ</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Ощ</translation>
<translation>leg_ankle_circ</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1787"/>
@ -3698,7 +3697,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1792"/>
<source>leg_knee_circ_bent</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Окс</translation>
<translation>leg_knee_circ_bent</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1794"/>
@ -3770,7 +3769,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1819"/>
<source>leg_waist_side_to_knee</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Дтк</translation>
<translation>leg_waist_side_to_knee</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1821"/>
@ -3860,7 +3859,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1892"/>
<source>rise_length_side</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Дпс</translation>
<translation>rise_length_side</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1894"/>
@ -3937,7 +3936,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1918"/>
<source>waist_to_waist_halter</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Двчт</translation>
<translation>waist_to_waist_halter</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1920"/>
@ -4351,7 +4350,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="2101"/>
<source>highbust_b_over_shoulder_to_highbust_f</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Дбр</translation>
<translation>highbust_b_over_shoulder_to_highbust_f</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="2103"/>
@ -4369,7 +4368,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="2110"/>
<source>armscye_arc</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Дп</translation>
<translation>armscye_arc</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="2112"/>
@ -4400,7 +4399,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="2140"/>
<source>This information is pulled from pattern charts in some patternmaking systems, e.g. Winifred P. Aldrich&apos;s &quot;Metric Pattern Cutting&quot;.</source>
<comment>Full measurement description.</comment>
<translation>Эта информация взята для выкроек в таких системах раскроя, как Уилфред Алдрич &quot;Метод конструирования и моделирования&quot;</translation>
<translation>Эта информация взята для выкроек в таких системах раскроя, как Уилфред Алдрич &quot;Метод конструирования и моделирования&quot;.</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="2137"/>

View File

@ -43,7 +43,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="221"/>
<source>height_scapula</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Влоп</translation>
<translation>height_scapula</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="223"/>
@ -61,7 +61,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="228"/>
<source>height_armpit</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Взу</translation>
<translation>height_armpit</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="230"/>
@ -115,7 +115,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="249"/>
<source>height_gluteal_fold</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Впс</translation>
<translation>height_gluteal_fold</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="251"/>
@ -205,13 +205,13 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="284"/>
<source>height_highhip</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Вопт</translation>
<translation>height_highhip</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="286"/>
<source>Height: Highhip</source>
<comment>Full measurement name.</comment>
<translation>Высота остисто - подвздошной передней точки.</translation>
<translation>Высота остисто-подвздошной передней точки.</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="287"/>
@ -242,7 +242,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="298"/>
<source>height_bustpoint</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Вст</translation>
<translation>height_bustpoint</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="300"/>
@ -260,7 +260,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="305"/>
<source>height_shoulder_tip</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Впт</translation>
<translation>height_shoulder_tip</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="307"/>
@ -314,7 +314,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="326"/>
<source>height_neck_back_to_knee</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Дшк</translation>
<translation>height_neck_back_to_knee</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="328"/>
@ -362,7 +362,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="344"/>
<source>Vertical distance from the Waist Side to the Hip level.</source>
<comment>Full measurement description.</comment>
<translation>Расстояние от линии талии до віступающей точки ягодицы</translation>
<translation>Расстояние от линии талии до выступающей точки ягодицы.</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="348"/>
@ -476,7 +476,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="405"/>
<source>Horizontal distance from Hip Side to Hip Side.</source>
<comment>Full measurement description.</comment>
<translation>Горизонтальное расстояние от бедра до бедра</translation>
<translation>Горизонтальное расстояние от бедра до бедра.</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="409"/>
@ -500,7 +500,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="428"/>
<source>indent_neck_back</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Пкор</translation>
<translation>indent_neck_back</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="430"/>
@ -512,7 +512,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="431"/>
<source>Horizontal distance from Scapula (Blade point) to the Neck Back.</source>
<comment>Full measurement description.</comment>
<translation>Размерный признак в стандарте 74.Измеряют по горизонтали расстояние от шейной точки до вертикальной плоскости, касательной паиболее выступающих назад точек обеих лопаток.</translation>
<translation>Размерный признак в стандарте 74.Измеряют по горизонтали расстояние от шейной точки до вертикальной плоскости, касательной наиболее выступающих назад точек обеих лопаток.</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="435"/>
@ -530,7 +530,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="438"/>
<source>Horizontal distance between a flat stick, placed to touch Hip and Scapula, and Waist Back.</source>
<comment>Full measurement description.</comment>
<translation>Горизонтальное расстояние между плоской палочкой, размещенной так, чтобы она касалась бедра и лопатки, и поясницей сзади</translation>
<translation>Горизонтальное расстояние между плоской палочкой, размещенной так, чтобы она касалась бедра и лопатки, и поясницей сзади.</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="442"/>
@ -565,7 +565,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="464"/>
<source>Length from Wrist line to base of middle finger.</source>
<comment>Full measurement description.</comment>
<translation>Размер от запястья до основания среднего пальца</translation>
<translation>Размер от запястья до основания среднего пальца.</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="468"/>
@ -583,7 +583,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="471"/>
<source>Length from Wrist line to end of middle finger.</source>
<comment>Full measurement description.</comment>
<translation>Размер от запястья до конца среднего пальца</translation>
<translation>Размер от запястья до конца среднего пальца.</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="475"/>
@ -619,13 +619,13 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="484"/>
<source>Circumference where Palm is widest.</source>
<comment>Full measurement description.</comment>
<translation>Обхват ладони в максимально широком месте</translation>
<translation>Обхват ладони в максимально широком месте.</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="487"/>
<source>hand_circ</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Окис</translation>
<translation>hand_circ</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="489"/>
@ -637,7 +637,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="490"/>
<source>Tuck thumb toward smallest finger, bring fingers close together. Measure circumference around widest part of hand.</source>
<comment>Full measurement description.</comment>
<translation>Прижмите большой палец к ладони и максимально наклоните в сторону мизинца. Измеряется охват ладони в самом широком месте.</translation>
<translation>Прижмите большой палец к ладони и максимально наклоните в сторону мизинца. Охват ладони измеряют в самом широком месте.</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="506"/>
@ -655,7 +655,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="509"/>
<source>Measure at widest part of foot.</source>
<comment>Full measurement description.</comment>
<translation>Ширина стопы в самом широком месте</translation>
<translation>Ширина стопы в самом широком месте.</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="512"/>
@ -691,13 +691,13 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="522"/>
<source>Measure circumference around widest part of foot.</source>
<comment>Full measurement description.</comment>
<translation>Измерьте окружность самой широкой части стопы</translation>
<translation>Измерьте окружность самой широкой части стопы.</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="526"/>
<source>foot_instep_circ</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Ос</translation>
<translation>foot_instep_circ</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="528"/>
@ -715,7 +715,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="545"/>
<source>head_circ</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Огол</translation>
<translation>head_circ</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="547"/>
@ -733,7 +733,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="552"/>
<source>head_length</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Вгол</translation>
<translation>head_length</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="554"/>
@ -781,7 +781,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="569"/>
<source>Horizontal distance from Head Side to Head Side, where Head is widest.</source>
<comment>Full measurement description.</comment>
<translation>Горизонтальное расстояние от одной стороны головы до другой в самом широком месте</translation>
<translation>Горизонтальное расстояние от одной стороны головы до другой в самом широком месте.</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="573"/>
@ -805,7 +805,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="580"/>
<source>head_chin_to_neck_back</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Дшош</translation>
<translation>head_chin_to_neck_back</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="582"/>
@ -823,7 +823,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="600"/>
<source>neck_mid_circ</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Сш1</translation>
<translation>neck_mid_circ</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="602"/>
@ -835,7 +835,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="603"/>
<source>Circumference of Neck midsection, about halfway between jaw and torso.</source>
<comment>Full measurement description.</comment>
<translation>Окружность средней части шеи, примерно на посередине между челюстью и туловищем.</translation>
<translation>Окружность средней части шеи, примерно посередине между челюстью и туловищем.</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="607"/>
@ -853,13 +853,13 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="610"/>
<source>Neck circumference at base of Neck, touching Neck Back, Neck Sides, and Neck Front.</source>
<comment>Full measurement description.</comment>
<translation>Номер размерного признака в стандарте 13. Ленту накладывают на основание шеи так, чтобы оба края ленты плотно прилегали к ее поверхности, и замыкают спереди над яремной вырезкой. Размер читают по нижнему краю ленты.</translation>
<translation>Номер размерного признака в стандарте 13. Ленту накладывают на основание шеи так, чтобы оба края ленты плотно прилегали к ее поверхности, и замыкают спереди над яремной веной. Размер читают по нижнему краю ленты.</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="615"/>
<source>highbust_circ</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>ОгI</translation>
<translation>highbust_circ</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="617"/>
@ -877,7 +877,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="622"/>
<source>bust_circ</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>ОгII</translation>
<translation>bust_circ</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="624"/>
@ -895,7 +895,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="629"/>
<source>lowbust_circ</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>ОгIII</translation>
<translation>lowbust_circ</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="631"/>
@ -984,7 +984,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="655"/>
<source>Circumference around Highhip, where Abdomen protrusion is greatest, parallel to floor.</source>
<comment>Full measurement description.</comment>
<translation>Обхват бёдер сверху, через саму выступающую точку живота, параллельно полу.</translation>
<translation>Обхват бёдер сверху, через самую выступающую точку живота, параллельно полу.</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="660"/>
@ -1008,7 +1008,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="668"/>
<source>neck_arc_f</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Сш</translation>
<translation>neck_arc_f</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="670"/>
@ -1020,13 +1020,13 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="671"/>
<source>From Neck Side to Neck Side through Neck Front.</source>
<comment>Full measurement description.</comment>
<translation>Ленту накладывают на основание шеи так, чтобы оба края ленты плотно прилегали к ее поверхности, и замыкают спереди над яремной вырезкой. Размер читают по нижнему краю ленты.</translation>
<translation>Ленту накладывают на основание шеи так, чтобы оба края ленты плотно прилегали к ее поверхности, и замыкают спереди над яремной веной. Размер читают по нижнему краю ленты.</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="675"/>
<source>highbust_arc_f</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>СгI</translation>
<translation>highbust_arc_f</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="677"/>
@ -1045,7 +1045,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="682"/>
<source>bust_arc_f</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>СгII</translation>
<translation>bust_arc_f</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="684"/>
@ -1081,7 +1081,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="696"/>
<source>lowbust_arc_f</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>СгIII</translation>
<translation>lowbust_arc_f</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="698"/>
@ -1117,7 +1117,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="710"/>
<source>waist_arc_f</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Ст</translation>
<translation>waist_arc_f</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="712"/>
@ -1153,7 +1153,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="724"/>
<source>hip_arc_f</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>СбI</translation>
<translation>hip_arc_f</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="726"/>
@ -1165,7 +1165,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="727"/>
<source>From Hip Side to Hip Side across Front.</source>
<comment>Full measurement description.</comment>
<translation>Размерный признак 20. Ленту накладывают на ягодичные точки. Лента должна проходить горизонтально вокруг туловища и замыкаться на правой стороне туловища</translation>
<translation>Размерный признак 20. Ленту накладывают на ягодичные точки. Лента должна проходить горизонтально вокруг туловища и замыкаться на правой стороне туловища.</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="731"/>
@ -1225,7 +1225,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="753"/>
<source>lowbust_arc_half_f</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Шг3_пол</translation>
<translation>lowbust_arc_half_f</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="755"/>
@ -1237,7 +1237,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="756"/>
<source>Half of &apos;Lowbust arc, front&apos;. (&apos;Lowbust Arc, front&apos; / 2).</source>
<comment>Full measurement description.</comment>
<translation>Половина от ширины груди третьей. ( Шг3/2)</translation>
<translation>Половина от ширины груди третьей. (Шг3/2)</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="760"/>
@ -1399,7 +1399,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="822"/>
<source>From Rib Side to Rib side across back. (&apos;Rib circumference&apos; - &apos;Rib arc, front&apos;).</source>
<comment>Full measurement description.</comment>
<translation>От одной стороны ребер до другой, обхватывая лентойсзади. (&apos;Обхват ребер&apos; - &apos;Ширина ребер спереди&apos;)</translation>
<translation>От одной стороны ребер до другой, обхватывая лентой сзади. (&apos;Обхват ребер&apos; - &apos;Ширина ребер спереди&apos;)</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="827"/>
@ -1603,7 +1603,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="909"/>
<source>hip_with_abdomen_arc_f</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Сб</translation>
<translation>hip_with_abdomen_arc_f</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="911"/>
@ -1615,8 +1615,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="912"/>
<source>Curve stiff paper around front of abdomen, tape at sides. Measure from Hip Side to Hip Side over paper across front.</source>
<comment>Full measurement description.</comment>
<translation>Ленту накладывают на ягодичные точки. Лента должна проходить горизонтально вокруг туловища, спереди - по гибкой пластине, приложенной вертикально к животу для учета выступа живота, и замыкаться на правой стороне туловища
</translation>
<translation>Ленту накладывают на ягодичные точки. Лента должна проходить горизонтально вокруг туловища, спереди - по гибкой пластине, приложенной вертикально к животу для учета выступа живота, и замыкаться на правой стороне туловища.</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="917"/>
@ -1730,7 +1729,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="973"/>
<source>armpit_to_waist_side</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Дб</translation>
<translation>armpit_to_waist_side</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="975"/>
@ -1766,7 +1765,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="986"/>
<source>neck_side_to_waist_f</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>ДтсI</translation>
<translation>neck_side_to_waist_f</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="988"/>
@ -1802,7 +1801,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1000"/>
<source>neck_front_to_highbust_f</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Впрп</translation>
<translation>neck_front_to_highbust_f</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1002"/>
@ -1820,7 +1819,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1006"/>
<source>highbust_to_waist_f</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Дпер</translation>
<translation>highbust_to_waist_f</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1008"/>
@ -1874,7 +1873,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1030"/>
<source>lowbust_to_waist_f</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Дпг</translation>
<translation>lowbust_to_waist_f</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1032"/>
@ -2000,7 +1999,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1078"/>
<source>neck_side_to_waist_b</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Дтс1</translation>
<translation>neck_side_to_waist_b</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1080"/>
@ -2018,7 +2017,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1085"/>
<source>neck_back_to_waist_b</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Дтс</translation>
<translation>neck_back_to_waist_b</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1087"/>
@ -2054,7 +2053,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1099"/>
<source>neck_back_to_highbust_b</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Впрз</translation>
<translation>neck_back_to_highbust_b</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1101"/>
@ -2216,7 +2215,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1161"/>
<source>waist_to_highhip_f</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Гт1</translation>
<translation>waist_to_highhip_f</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1163"/>
@ -2234,7 +2233,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1167"/>
<source>waist_to_hip_f</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>ГтII</translation>
<translation>waist_to_hip_f</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1169"/>
@ -2450,7 +2449,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1264"/>
<source>shoulder_length</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Шп</translation>
<translation>shoulder_length</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1266"/>
@ -2468,7 +2467,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1270"/>
<source>shoulder_tip_to_shoulder_tip_f</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>dпл</translation>
<translation>shoulder_tip_to_shoulder_tip_f</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1272"/>
@ -2486,7 +2485,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1277"/>
<source>across_chest_f</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Шг1</translation>
<translation>across_chest_f</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1279"/>
@ -2504,7 +2503,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1284"/>
<source>armfold_to_armfold_f</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Шг</translation>
<translation>armfold_to_armfold_f</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1286"/>
@ -2558,7 +2557,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1307"/>
<source>shoulder_tip_to_shoulder_tip_b</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Дпз</translation>
<translation>shoulder_tip_to_shoulder_tip_b</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1309"/>
@ -2594,7 +2593,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1321"/>
<source>armfold_to_armfold_b</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Шс</translation>
<translation>armfold_to_armfold_b</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1323"/>
@ -2684,7 +2683,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1355"/>
<source>neck_width</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation></translation>
<translation>neck_width</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1357"/>
@ -2702,7 +2701,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1375"/>
<source>bustpoint_to_bustpoint</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Цг</translation>
<translation>bustpoint_to_bustpoint</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1377"/>
@ -2720,7 +2719,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1381"/>
<source>bustpoint_to_neck_side</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Вг</translation>
<translation>bustpoint_to_neck_side</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1383"/>
@ -2882,7 +2881,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1456"/>
<source>shoulder_tip_to_waist_front</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Впкп</translation>
<translation>shoulder_tip_to_waist_front</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1458"/>
@ -2936,7 +2935,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1477"/>
<source>shoulder_tip_to_waist_back</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Впк</translation>
<translation>shoulder_tip_to_waist_back</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1479"/>
@ -3008,7 +3007,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1506"/>
<source>neck_side_to_armfold_f</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Впрк</translation>
<translation>neck_side_to_armfold_f</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1508"/>
@ -3020,7 +3019,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1509"/>
<source>From Neck Side diagonal to Armfold Front.</source>
<comment>Full measurement description.</comment>
<translation>Расстояние от шейной точки до уровня заднего угла подмышечной впадины спереди</translation>
<translation>Расстояние от шейной точки до уровня заднего угла подмышечной впадины спереди.</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1513"/>
@ -3188,7 +3187,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1589"/>
<source>arm_shoulder_tip_to_wrist</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Дрзап</translation>
<translation>arm_shoulder_tip_to_wrist</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1591"/>
@ -3206,7 +3205,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1596"/>
<source>arm_shoulder_tip_to_elbow</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Дрлок</translation>
<translation>arm_shoulder_tip_to_elbow</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1598"/>
@ -3242,7 +3241,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1611"/>
<source>arm_armpit_to_wrist</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Втр</translation>
<translation>arm_armpit_to_wrist</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1613"/>
@ -3296,7 +3295,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1633"/>
<source>arm_upper_circ</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Оп</translation>
<translation>arm_upper_circ</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1635"/>
@ -3332,7 +3331,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1645"/>
<source>arm_elbow_circ</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Олк</translation>
<translation>arm_elbow_circ</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1647"/>
@ -3368,7 +3367,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1658"/>
<source>arm_wrist_circ</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Озап</translation>
<translation>arm_wrist_circ</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1660"/>
@ -3404,7 +3403,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1670"/>
<source>arm_neck_side_to_wrist</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Длуч</translation>
<translation>arm_neck_side_to_wrist</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1672"/>
@ -3422,7 +3421,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1678"/>
<source>arm_neck_side_to_finger_tip</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>ДIIIп</translation>
<translation>arm_neck_side_to_finger_tip</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1680"/>
@ -3476,7 +3475,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1702"/>
<source>armscye_width</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>dпзр</translation>
<translation>armscye_width</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1704"/>
@ -3512,7 +3511,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1728"/>
<source>leg_crotch_to_floor</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Дн</translation>
<translation>leg_crotch_to_floor</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1730"/>
@ -3548,13 +3547,13 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="2148"/>
<source>This information is pulled from pattern charts in some patternmaking systems, e.g. Winifred P. Aldrich&apos;s &quot;Metric Pattern Cutting&quot;.</source>
<comment>Full measurement description.</comment>
<translation>Эта информация использована из шаблона в таких системах раскроя, как Уилфред Алдрич &quot;Метод конструирования и моделирования&quot;</translation>
<translation>Эта информация использована из шаблона в таких системах раскроя, как Уилфред Алдрич &quot;Метод конструирования и моделирования&quot;.</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1736"/>
<source>leg_waist_side_to_floor</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Дсб</translation>
<translation>leg_waist_side_to_floor</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1738"/>
@ -3572,7 +3571,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1743"/>
<source>leg_thigh_upper_circ</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Обед</translation>
<translation>leg_thigh_upper_circ</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1745"/>
@ -3680,7 +3679,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1785"/>
<source>leg_ankle_circ</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Ощ</translation>
<translation>leg_ankle_circ</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1787"/>
@ -3698,7 +3697,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1792"/>
<source>leg_knee_circ_bent</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Окс</translation>
<translation>leg_knee_circ_bent</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1794"/>
@ -3770,7 +3769,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1819"/>
<source>leg_waist_side_to_knee</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Дтк</translation>
<translation>leg_waist_side_to_knee</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1821"/>
@ -3860,7 +3859,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1892"/>
<source>rise_length_side</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Дпс</translation>
<translation>rise_length_side</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1894"/>
@ -3937,7 +3936,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1918"/>
<source>waist_to_waist_halter</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Двчт</translation>
<translation>waist_to_waist_halter</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1920"/>
@ -4351,7 +4350,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="2101"/>
<source>highbust_b_over_shoulder_to_highbust_f</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Дбр</translation>
<translation>highbust_b_over_shoulder_to_highbust_f</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="2103"/>
@ -4369,7 +4368,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="2110"/>
<source>armscye_arc</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Дп</translation>
<translation>armscye_arc</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="2112"/>
@ -4400,7 +4399,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="2140"/>
<source>This information is pulled from pattern charts in some patternmaking systems, e.g. Winifred P. Aldrich&apos;s &quot;Metric Pattern Cutting&quot;.</source>
<comment>Full measurement description.</comment>
<translation>Эта информация взята для выкроек в таких системах раскроя, как Уилфред Алдрич &quot;Метод конструирования и моделирования&quot;</translation>
<translation>Эта информация взята для выкроек в таких системах раскроя, как Уилфред Алдрич &quot;Метод конструирования и моделирования&quot;.</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="2137"/>

View File

@ -43,7 +43,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="221"/>
<source>height_scapula</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Влоп</translation>
<translation>height_scapula</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="223"/>
@ -61,7 +61,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="228"/>
<source>height_armpit</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Взу</translation>
<translation>height_armpit</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="230"/>
@ -73,7 +73,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="231"/>
<source>Vertical distance from the Armpit to the floor.</source>
<comment>Full measurement description.</comment>
<translation>Номер размерного признака в стандарте 11. Расстояние по вертикали от пола до заднего угла подмышечной впадины. Уровень заднего угла подмышечной впадины переносят отметкой на позвоночник с помощью антропометра.</translation>
<translation>Номер размерного признака в стандарте 11. Расстояние по вертикали от пола до заднего угла подмышечной впадины. Уровень заднего угла подмышечной впадины переносят отметкой на позвоночнике с помощью антропометра.</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="235"/>
@ -115,7 +115,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="249"/>
<source>height_gluteal_fold</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Впс</translation>
<translation>height_gluteal_fold</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="251"/>
@ -163,7 +163,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="266"/>
<source>Vertical distance from the widest point of the calf to the floor.</source>
<comment>Full measurement description.</comment>
<translation>Вертикальное расстояние от широкой части икры ноги до пола</translation>
<translation>Вертикальное расстояние от широкой части икры ноги до пола.</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="270"/>
@ -205,13 +205,13 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="284"/>
<source>height_highhip</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Вопт</translation>
<translation>height_highhip</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="286"/>
<source>Height: Highhip</source>
<comment>Full measurement name.</comment>
<translation>Высота остисто - подвздошной передней точки.</translation>
<translation>Высота остисто-подвздошной передней точки.</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="287"/>
@ -242,7 +242,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="298"/>
<source>height_bustpoint</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Вст</translation>
<translation>height_bustpoint</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="300"/>
@ -260,7 +260,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="305"/>
<source>height_shoulder_tip</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Впт</translation>
<translation>height_shoulder_tip</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="307"/>
@ -314,7 +314,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="326"/>
<source>height_neck_back_to_knee</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Дшк</translation>
<translation>height_neck_back_to_knee</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="328"/>
@ -362,7 +362,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="344"/>
<source>Vertical distance from the Waist Side to the Hip level.</source>
<comment>Full measurement description.</comment>
<translation>Расстояние от линии талии до віступающей точки ягодицы</translation>
<translation>Расстояние от линии талии до выступающей точки ягодицы.</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="348"/>
@ -458,7 +458,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="398"/>
<source>Horizontal distance from Waist Side to Waist Side.</source>
<comment>Full measurement description.</comment>
<translation>Горизонтальное расстояние от одной стороны талии до другой</translation>
<translation>Горизонтальное расстояние от одной стороны талии до другой.</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="402"/>
@ -476,7 +476,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="405"/>
<source>Horizontal distance from Hip Side to Hip Side.</source>
<comment>Full measurement description.</comment>
<translation>Горизонтальное расстояние от бедра до бедра</translation>
<translation>Горизонтальное расстояние от бедра до бедра.</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="409"/>
@ -500,7 +500,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="428"/>
<source>indent_neck_back</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Пкор</translation>
<translation>indent_neck_back</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="430"/>
@ -512,7 +512,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="431"/>
<source>Horizontal distance from Scapula (Blade point) to the Neck Back.</source>
<comment>Full measurement description.</comment>
<translation>Размерный признак в стандарте 74.Измеряют по горизонтали расстояние от шейной точки до вертикальной плоскости, касательной паиболее выступающих назад точек обеих лопаток.</translation>
<translation>Размерный признак в стандарте 74. Измеряют по горизонтали расстояние от шейной точки до вертикальной плоскости, касательной наиболее выступающих назад точек обеих лопаток.</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="435"/>
@ -530,7 +530,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="438"/>
<source>Horizontal distance between a flat stick, placed to touch Hip and Scapula, and Waist Back.</source>
<comment>Full measurement description.</comment>
<translation>Горизонтальное расстояние между плоской палочкой, размещенной так, чтобы она касалась бедра и лопатки, и поясницей сзади</translation>
<translation>Горизонтальное расстояние между плоской палочкой, размещенной так, чтобы она касалась бедра и лопатки, и поясницей сзади.</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="442"/>
@ -565,7 +565,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="464"/>
<source>Length from Wrist line to base of middle finger.</source>
<comment>Full measurement description.</comment>
<translation>Размер от запястья до основания среднего пальца</translation>
<translation>Размер от запястья до основания среднего пальца.</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="468"/>
@ -583,7 +583,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="471"/>
<source>Length from Wrist line to end of middle finger.</source>
<comment>Full measurement description.</comment>
<translation>Размер от запястья до конца среднего пальца</translation>
<translation>Размер от запястья до конца среднего пальца.</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="475"/>
@ -625,7 +625,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="487"/>
<source>hand_circ</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Окис</translation>
<translation>hand_circ</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="489"/>
@ -655,7 +655,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="509"/>
<source>Measure at widest part of foot.</source>
<comment>Full measurement description.</comment>
<translation>Ширина стопы в самом широком месте</translation>
<translation>Ширина стопы в самом широком месте.</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="512"/>
@ -691,13 +691,13 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="522"/>
<source>Measure circumference around widest part of foot.</source>
<comment>Full measurement description.</comment>
<translation>Измерьте окружность самой широкой части стопы</translation>
<translation>Измерьте окружность самой широкой части стопы.</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="526"/>
<source>foot_instep_circ</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Ос</translation>
<translation>foot_instep_circ</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="528"/>
@ -715,7 +715,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="545"/>
<source>head_circ</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Огол</translation>
<translation>head_circ</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="547"/>
@ -733,7 +733,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="552"/>
<source>head_length</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Вгол</translation>
<translation>head_length</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="554"/>
@ -805,7 +805,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="580"/>
<source>head_chin_to_neck_back</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Дшош</translation>
<translation>head_chin_to_neck_back</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="582"/>
@ -823,7 +823,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="600"/>
<source>neck_mid_circ</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Сш1</translation>
<translation>neck_mid_circ</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="602"/>
@ -835,7 +835,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="603"/>
<source>Circumference of Neck midsection, about halfway between jaw and torso.</source>
<comment>Full measurement description.</comment>
<translation>Окружность средней части шеи, примерно на посередине между челюстью и туловищем.</translation>
<translation>Окружность средней части шеи, примерно посередине между челюстью и туловищем.</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="607"/>
@ -853,13 +853,13 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="610"/>
<source>Neck circumference at base of Neck, touching Neck Back, Neck Sides, and Neck Front.</source>
<comment>Full measurement description.</comment>
<translation>Номер размерного признака в стандарте 13. Ленту накладывают на основание шеи так, чтобы оба края ленты плотно прилегали к ее поверхности, и замыкают спереди над яремной вырезкой. Размер читают по нижнему краю ленты.</translation>
<translation>Номер размерного признака в стандарте 13. Ленту накладывают на основание шеи так, чтобы оба края ленты плотно прилегали к ее поверхности, и замыкают спереди над яремной веной. Размер читают по нижнему краю ленты.</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="615"/>
<source>highbust_circ</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>ОгI</translation>
<translation>highbust_circ</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="617"/>
@ -877,7 +877,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="622"/>
<source>bust_circ</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>ОгII</translation>
<translation>bust_circ</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="624"/>
@ -895,7 +895,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="629"/>
<source>lowbust_circ</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>ОгIII</translation>
<translation>lowbust_circ</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="631"/>
@ -984,7 +984,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="655"/>
<source>Circumference around Highhip, where Abdomen protrusion is greatest, parallel to floor.</source>
<comment>Full measurement description.</comment>
<translation>Обхват бёдер сверху, через саму выступающую точку живота, параллельно полу.</translation>
<translation>Обхват бёдер сверху, через самую выступающую точку живота, параллельно полу.</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="660"/>
@ -1008,7 +1008,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="668"/>
<source>neck_arc_f</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Сш</translation>
<translation>neck_arc_f</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="670"/>
@ -1020,13 +1020,13 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="671"/>
<source>From Neck Side to Neck Side through Neck Front.</source>
<comment>Full measurement description.</comment>
<translation>Ленту накладывают на основание шеи так, чтобы оба края ленты плотно прилегали к ее поверхности, и замыкают спереди над яремной вырезкой. Размер читают по нижнему краю ленты.</translation>
<translation>Ленту накладывают на основание шеи так, чтобы оба края ленты плотно прилегали к ее поверхности, и замыкают спереди над яремной веной. Размер читают по нижнему краю ленты.</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="675"/>
<source>highbust_arc_f</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>СгI</translation>
<translation>highbust_arc_f</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="677"/>
@ -1045,7 +1045,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="682"/>
<source>bust_arc_f</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>СгII</translation>
<translation>bust_arc_f</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="684"/>
@ -1081,7 +1081,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="696"/>
<source>lowbust_arc_f</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>СгIII</translation>
<translation>lowbust_arc_f</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="698"/>
@ -1117,7 +1117,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="710"/>
<source>waist_arc_f</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Ст</translation>
<translation>waist_arc_f</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="712"/>
@ -1153,7 +1153,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="724"/>
<source>hip_arc_f</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>СбI</translation>
<translation>hip_arc_f</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="726"/>
@ -1225,7 +1225,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="753"/>
<source>lowbust_arc_half_f</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Шг3_пол</translation>
<translation>lowbust_arc_half_f</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="755"/>
@ -1237,7 +1237,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="756"/>
<source>Half of &apos;Lowbust arc, front&apos;. (&apos;Lowbust Arc, front&apos; / 2).</source>
<comment>Full measurement description.</comment>
<translation>Половина от ширины груди третьей. ( Шг3/2)</translation>
<translation>Половина от ширины груди третьей. (Шг3/2)</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="760"/>
@ -1279,7 +1279,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="774"/>
<source>highhip_arc_half_f</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>бедро_щирина_половина</translation>
<translation>бедро_ширина_половина</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="776"/>
@ -1399,7 +1399,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="822"/>
<source>From Rib Side to Rib side across back. (&apos;Rib circumference&apos; - &apos;Rib arc, front&apos;).</source>
<comment>Full measurement description.</comment>
<translation>От одной стороны ребер до другой, обхватывая лентойсзади. (&apos;Обхват ребер&apos; - &apos;Ширина ребер спереди&apos;)</translation>
<translation>От одной стороны ребер до другой, обхватывая лентой сзади. (&apos;Обхват ребер&apos; - &apos;Ширина ребер спереди&apos;)</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="827"/>
@ -1603,7 +1603,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="909"/>
<source>hip_with_abdomen_arc_f</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Сб</translation>
<translation>hip_with_abdomen_arc_f</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="911"/>
@ -1724,13 +1724,13 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="969"/>
<source>From Neck Front down between breasts to Waist Front.</source>
<comment>Full measurement description.</comment>
<translation>Расстояние от основания шеи спереди между грудью до лини талии спереди</translation>
<translation>Расстояние от основания шеи спереди между грудью до линии талии спереди.</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="973"/>
<source>armpit_to_waist_side</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Дб</translation>
<translation>armpit_to_waist_side</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="975"/>
@ -1766,7 +1766,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="986"/>
<source>neck_side_to_waist_f</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>ДтсI</translation>
<translation>neck_side_to_waist_f</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="988"/>
@ -1802,7 +1802,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1000"/>
<source>neck_front_to_highbust_f</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Впрп</translation>
<translation>neck_front_to_highbust_f</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1002"/>
@ -1820,7 +1820,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1006"/>
<source>highbust_to_waist_f</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Дпер</translation>
<translation>highbust_to_waist_f</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1008"/>
@ -1874,7 +1874,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1030"/>
<source>lowbust_to_waist_f</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Дпг</translation>
<translation>lowbust_to_waist_f</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1032"/>
@ -2000,7 +2000,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1078"/>
<source>neck_side_to_waist_b</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Дтс1</translation>
<translation>neck_side_to_waist_b</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1080"/>
@ -2018,7 +2018,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1085"/>
<source>neck_back_to_waist_b</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Дтс</translation>
<translation>neck_back_to_waist_b</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1087"/>
@ -2054,7 +2054,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1099"/>
<source>neck_back_to_highbust_b</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Впрз</translation>
<translation>neck_back_to_highbust_b</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1101"/>
@ -2216,7 +2216,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1161"/>
<source>waist_to_highhip_f</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Гт1</translation>
<translation>waist_to_highhip_f</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1163"/>
@ -2234,7 +2234,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1167"/>
<source>waist_to_hip_f</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>ГтII</translation>
<translation>waist_to_hip_f</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1169"/>
@ -2450,7 +2450,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1264"/>
<source>shoulder_length</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Шп</translation>
<translation>shoulder_length</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1266"/>
@ -2468,7 +2468,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1270"/>
<source>shoulder_tip_to_shoulder_tip_f</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>dпл</translation>
<translation>shoulder_tip_to_shoulder_tip_f</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1272"/>
@ -2486,7 +2486,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1277"/>
<source>across_chest_f</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Шг1</translation>
<translation>across_chest_f</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1279"/>
@ -2504,7 +2504,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1284"/>
<source>armfold_to_armfold_f</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Шг</translation>
<translation>armfold_to_armfold_f</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1286"/>
@ -2558,7 +2558,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1307"/>
<source>shoulder_tip_to_shoulder_tip_b</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Дпз</translation>
<translation>shoulder_tip_to_shoulder_tip_b</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1309"/>
@ -2594,7 +2594,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1321"/>
<source>armfold_to_armfold_b</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Шс</translation>
<translation>armfold_to_armfold_b</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1323"/>
@ -2606,7 +2606,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1324"/>
<source>From Armfold to Armfold across the back.</source>
<comment>Full measurement description.</comment>
<translation>Номер размерного признака в стандарте 47. Измеряют по поверхности тела ресстояние между задними углами подмышечных впадин. Нижний край ленты должен быть расположен на уровне отметки заднего угла подмышечной впадины на позвоночнике.</translation>
<translation>Номер размерного признака в стандарте 47. Измеряют по поверхности тела расстояние между задними углами подмышечных впадин. Нижний край ленты должен быть расположен на уровне отметки заднего угла подмышечной впадины на позвоночнике.</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1328"/>
@ -2684,7 +2684,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1355"/>
<source>neck_width</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation></translation>
<translation>neck_width</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1357"/>
@ -2702,7 +2702,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1375"/>
<source>bustpoint_to_bustpoint</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Цг</translation>
<translation>bustpoint_to_bustpoint</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1377"/>
@ -2720,7 +2720,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1381"/>
<source>bustpoint_to_neck_side</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Вг</translation>
<translation>bustpoint_to_neck_side</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1383"/>
@ -2882,7 +2882,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1456"/>
<source>shoulder_tip_to_waist_front</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Впкп</translation>
<translation>shoulder_tip_to_waist_front</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1458"/>
@ -2936,7 +2936,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1477"/>
<source>shoulder_tip_to_waist_back</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Впк</translation>
<translation>shoulder_tip_to_waist_back</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1479"/>
@ -3008,7 +3008,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1506"/>
<source>neck_side_to_armfold_f</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Впрк</translation>
<translation>neck_side_to_armfold_f</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1508"/>
@ -3020,7 +3020,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1509"/>
<source>From Neck Side diagonal to Armfold Front.</source>
<comment>Full measurement description.</comment>
<translation>Расстояние от шейной точки до уровня заднего угла подмышечной впадины спереди</translation>
<translation>Расстояние от шейной точки до уровня заднего угла подмышечной впадины спереди.</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1513"/>
@ -3188,7 +3188,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1589"/>
<source>arm_shoulder_tip_to_wrist</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Дрзап</translation>
<translation>arm_shoulder_tip_to_wrist</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1591"/>
@ -3206,7 +3206,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1596"/>
<source>arm_shoulder_tip_to_elbow</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Дрлок</translation>
<translation>arm_shoulder_tip_to_elbow</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1598"/>
@ -3242,7 +3242,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1611"/>
<source>arm_armpit_to_wrist</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Втр</translation>
<translation>arm_armpit_to_wrist</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1613"/>
@ -3296,7 +3296,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1633"/>
<source>arm_upper_circ</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Оп</translation>
<translation>arm_upper_circ</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1635"/>
@ -3332,7 +3332,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1645"/>
<source>arm_elbow_circ</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Олк</translation>
<translation>arm_elbow_circ</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1647"/>
@ -3368,7 +3368,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1658"/>
<source>arm_wrist_circ</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Озап</translation>
<translation>arm_wrist_circ</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1660"/>
@ -3404,7 +3404,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1670"/>
<source>arm_neck_side_to_wrist</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Длуч</translation>
<translation>arm_neck_side_to_wrist</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1672"/>
@ -3422,7 +3422,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1678"/>
<source>arm_neck_side_to_finger_tip</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>ДIIIп</translation>
<translation>arm_neck_side_to_finger_tip</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1680"/>
@ -3476,7 +3476,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1702"/>
<source>armscye_width</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>dпзр</translation>
<translation>armscye_width</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1704"/>
@ -3512,7 +3512,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1728"/>
<source>leg_crotch_to_floor</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Дн</translation>
<translation>leg_crotch_to_floor</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1730"/>
@ -3548,13 +3548,13 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="2148"/>
<source>This information is pulled from pattern charts in some patternmaking systems, e.g. Winifred P. Aldrich&apos;s &quot;Metric Pattern Cutting&quot;.</source>
<comment>Full measurement description.</comment>
<translation>Эта информация использована из шаблона в таких системах раскроя, как Уилфред Алдрич &quot;Метод конструирования и моделирования&quot;</translation>
<translation>Эта информация использована из шаблона в таких системах раскроя, как Уилфред Алдрич &quot;Метод конструирования и моделирования&quot;.</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1736"/>
<source>leg_waist_side_to_floor</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Дсб</translation>
<translation>leg_waist_side_to_floor</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1738"/>
@ -3572,7 +3572,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1743"/>
<source>leg_thigh_upper_circ</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Обед</translation>
<translation>leg_thigh_upper_circ</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1745"/>
@ -3680,7 +3680,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1785"/>
<source>leg_ankle_circ</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Ощ</translation>
<translation>leg_ankle_circ</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1787"/>
@ -3698,7 +3698,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1792"/>
<source>leg_knee_circ_bent</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Окс</translation>
<translation>leg_knee_circ_bent</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1794"/>
@ -3770,7 +3770,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1819"/>
<source>leg_waist_side_to_knee</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Дтк</translation>
<translation>leg_waist_side_to_knee</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1821"/>
@ -3860,7 +3860,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1892"/>
<source>rise_length_side</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Дпс</translation>
<translation>rise_length_side</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1894"/>
@ -3937,7 +3937,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1918"/>
<source>waist_to_waist_halter</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Двчт</translation>
<translation>waist_to_waist_halter</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1920"/>
@ -4351,7 +4351,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="2101"/>
<source>highbust_b_over_shoulder_to_highbust_f</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Дбр</translation>
<translation>highbust_b_over_shoulder_to_highbust_f</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="2103"/>
@ -4369,7 +4369,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="2110"/>
<source>armscye_arc</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>Дп</translation>
<translation>armscye_arc</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="2112"/>
@ -4400,7 +4400,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="2140"/>
<source>This information is pulled from pattern charts in some patternmaking systems, e.g. Winifred P. Aldrich&apos;s &quot;Metric Pattern Cutting&quot;.</source>
<comment>Full measurement description.</comment>
<translation>Эта информация взята для выкроек в таких системах раскроя, как Уилфред Алдрич &quot;Метод конструирования и моделирования&quot;</translation>
<translation>Эта информация взята для выкроек в таких системах раскроя, как Уилфред Алдрич &quot;Метод конструирования и моделирования&quot;.</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="2137"/>

View File

@ -7,49 +7,49 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="207"/>
<source>height</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>рост</translation>
<translation>Р</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="209"/>
<source>Height: Total</source>
<comment>Full measurement name.</comment>
<translation>Рост: общий</translation>
<translation>Рост</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="210"/>
<source>Vertical distance from crown of head to floor.</source>
<comment>Full measurement description.</comment>
<translation>Вертикальное расстояние от темени до пола.</translation>
<translation>Высота верхушечной точки - длина тела. Размерный признак 1. Расстояние по вертикали от пола до верхушечной точки. Измеряют спереди.</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="214"/>
<source>height_neck_back</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>ростея_сзади</translation>
<translation>Вштс</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="216"/>
<source>Height: Neck Back</source>
<comment>Full measurement name.</comment>
<translation>Рост: шея сзади</translation>
<translation>Высота точки основания шеи сзади</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="217"/>
<source>Vertical distance from the Neck Back (cervicale vertebra) to the floor.</source>
<comment>Full measurement description.</comment>
<translation>Вертикальное расстояние от шеи сзади (шейный позвонок) до пола.</translation>
<translation>Размерный признак 10. Расстояние по вертикали от пола до точки основания шеи сзади</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="221"/>
<source>height_scapula</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>ростопаточной_точки</translation>
<translation>Влоп</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="223"/>
<source>Height: Scapula</source>
<comment>Full measurement name.</comment>
<translation>Рост: лопаточной точки</translation>
<translation>Высота лопаточной точки</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="224"/>
@ -61,13 +61,13 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="228"/>
<source>height_armpit</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>рост_подмышки_сзади</translation>
<translation>Взу</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="230"/>
<source>Height: Armpit</source>
<comment>Full measurement name.</comment>
<translation>Рост: заднего угла подмышечной впадины</translation>
<translation>Высота заднего угла подмышечной впадины</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="231"/>
@ -79,13 +79,13 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="235"/>
<source>height_waist_side</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>росталии_сбоку</translation>
<translation>Влт</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="237"/>
<source>Height: Waist Side</source>
<comment>Full measurement name.</comment>
<translation>Рост: до линии талии</translation>
<translation>Высота линии талии</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="238"/>
@ -97,85 +97,85 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="242"/>
<source>height_hip</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>рост_бедра</translation>
<translation>Вбед</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="244"/>
<source>Height: Hip</source>
<comment>Full measurement name.</comment>
<translation>Рост: до бедра</translation>
<translation>Высота бедра</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="245"/>
<source>Vertical distance from the Hip level to the floor.</source>
<comment>Full measurement description.</comment>
<translation>Вертикальное расстояние от бедра до пола.</translation>
<translation>Размерный признак 216. Вертикальное расстояние от бедра до пола.</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="249"/>
<source>height_gluteal_fold</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>ростогодиц</translation>
<translation>Впс</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="251"/>
<source>Height: Gluteal Fold</source>
<comment>Full measurement name.</comment>
<translation>Рост: до складки между ягодицами и бедром</translation>
<translation>Высота подъягодичной складки</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="252"/>
<source>Vertical distance from the Gluteal fold, where the Gluteal muscle meets the top of the back thigh, to the floor.</source>
<comment>Full measurement description.</comment>
<translation>Номер размерного признака в стандарте 12. Вертикальное расстояние от складки.между ягодицами и бедром до пола</translation>
<translation>Номер размерного признака в стандарте 12. Расстояние но вертикали от пола до середины подъягодичной складки </translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="256"/>
<source>height_knee</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>ростоолена</translation>
<translation>Вк</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="258"/>
<source>Height: Knee</source>
<comment>Full measurement name.</comment>
<translation>Рост: коленной точки</translation>
<translation>Высота коленной точки</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="259"/>
<source>Vertical distance from the fold at the back of the Knee to the floor.</source>
<comment>Full measurement description.</comment>
<translation>Вертикальное расстояние от сгиба колена сзади до пола.</translation>
<translation>Размерный признак 9. Вертикальное расстояние от сгиба колена сзади до пола.</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="263"/>
<source>height_calf</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>рост_икры</translation>
<translation>Викр</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="265"/>
<source>Height: Calf</source>
<comment>Full measurement name.</comment>
<translation>рост: икры</translation>
<translation>Высота икры</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="266"/>
<source>Vertical distance from the widest point of the calf to the floor.</source>
<comment>Full measurement description.</comment>
<translation>Вертикальное расстояние от широкой части икры ноги до пола</translation>
<translation>Размерный признак 218. Вертикальное расстояние от широкой части икры ноги до пола</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="270"/>
<source>height_ankle_high</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>ростодыжки_сверху</translation>
<translation>Вщ</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="272"/>
<source>Height: Ankle High</source>
<comment>Full measurement name.</comment>
<translation>Рост: щиколотка</translation>
<translation>Высота щиколотки</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="273"/>

View File

@ -163,7 +163,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="266"/>
<source>Vertical distance from the widest point of the calf to the floor.</source>
<comment>Full measurement description.</comment>
<translation>Вертикальное расстояние от широкой части икры ноги до пола</translation>
<translation>Вертикальное расстояние от широкой части икры ноги до пола.</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="270"/>
@ -211,7 +211,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="286"/>
<source>Height: Highhip</source>
<comment>Full measurement name.</comment>
<translation>Высота остисто - подвздошной передней точки.</translation>
<translation>Высота остисто-подвздошной передней точки.</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="287"/>
@ -362,7 +362,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="344"/>
<source>Vertical distance from the Waist Side to the Hip level.</source>
<comment>Full measurement description.</comment>
<translation>Расстояние от линии талии до віступающей точки ягодицы</translation>
<translation>Расстояние от линии талии до выступающей точки ягодицы.</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="348"/>
@ -512,7 +512,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="431"/>
<source>Horizontal distance from Scapula (Blade point) to the Neck Back.</source>
<comment>Full measurement description.</comment>
<translation>Размерный признак в стандарте 74.Измеряют по горизонтали расстояние от шейной точки до вертикальной плоскости, касательной паиболее выступающих назад точек обеих лопаток.</translation>
<translation>Размерный признак в стандарте 74. Измеряют по горизонтали расстояние от шейной точки до вертикальной плоскости, касательной наиболее выступающих назад точек обеих лопаток.</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="435"/>
@ -530,7 +530,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="438"/>
<source>Horizontal distance between a flat stick, placed to touch Hip and Scapula, and Waist Back.</source>
<comment>Full measurement description.</comment>
<translation>Горизонтальное расстояние между плоской палочкой, размещенной так, чтобы она касалась бедра и лопатки, и поясницей сзади</translation>
<translation>Горизонтальное расстояние между плоской палочкой, размещенной так, чтобы она касалась бедра и лопатки, и поясницей сзади.</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="442"/>
@ -565,7 +565,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="464"/>
<source>Length from Wrist line to base of middle finger.</source>
<comment>Full measurement description.</comment>
<translation>Размер от запястья до основания среднего пальца</translation>
<translation>Размер от запястья до основания среднего пальца.</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="468"/>
@ -583,7 +583,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="471"/>
<source>Length from Wrist line to end of middle finger.</source>
<comment>Full measurement description.</comment>
<translation>Размер от запястья до конца среднего пальца</translation>
<translation>Размер от запястья до конца среднего пальца.</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="475"/>
@ -619,7 +619,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="484"/>
<source>Circumference where Palm is widest.</source>
<comment>Full measurement description.</comment>
<translation>Обхват ладони в максимально широком месте</translation>
<translation>Обхват ладони в максимально широком месте.</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="487"/>
@ -691,7 +691,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="522"/>
<source>Measure circumference around widest part of foot.</source>
<comment>Full measurement description.</comment>
<translation>Измерьте окружность самой широкой части стопы</translation>
<translation>Измерьте окружность самой широкой части стопы.</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="526"/>
@ -853,7 +853,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="610"/>
<source>Neck circumference at base of Neck, touching Neck Back, Neck Sides, and Neck Front.</source>
<comment>Full measurement description.</comment>
<translation>Номер размерного признака в стандарте 13. Ленту накладывают на основание шеи так, чтобы оба края ленты плотно прилегали к ее поверхности, и замыкают спереди над яремной вырезкой. Размер читают по нижнему краю ленты.</translation>
<translation>Номер размерного признака в стандарте 13. Ленту накладывают на основание шеи так, чтобы оба края ленты плотно прилегали к ее поверхности, и замыкают спереди над яремной веной. Размер читают по нижнему краю ленты.</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="615"/>
@ -984,7 +984,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="655"/>
<source>Circumference around Highhip, where Abdomen protrusion is greatest, parallel to floor.</source>
<comment>Full measurement description.</comment>
<translation>Обхват бёдер сверху, через саму выступающую точку живота, параллельно полу.</translation>
<translation>Обхват бёдер сверху, через самую выступающую точку живота, параллельно полу.</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="660"/>
@ -1020,7 +1020,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="671"/>
<source>From Neck Side to Neck Side through Neck Front.</source>
<comment>Full measurement description.</comment>
<translation>Ленту накладывают на основание шеи так, чтобы оба края ленты плотно прилегали к ее поверхности, и замыкают спереди над яремной вырезкой. Размер читают по нижнему краю ленты.</translation>
<translation>Ленту накладывают на основание шеи так, чтобы оба края ленты плотно прилегали к ее поверхности, и замыкают спереди над яремной веной. Размер читают по нижнему краю ленты.</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="675"/>
@ -1237,7 +1237,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="756"/>
<source>Half of &apos;Lowbust arc, front&apos;. (&apos;Lowbust Arc, front&apos; / 2).</source>
<comment>Full measurement description.</comment>
<translation>Половина от ширины груди третьей. ( Шг3/2)</translation>
<translation>Половина от ширины груди третьей. (Шг3/2)</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="760"/>
@ -1279,7 +1279,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="774"/>
<source>highhip_arc_half_f</source>
<comment>Name in a formula. Don&apos;t use math symbols and space in name!!!!</comment>
<translation>бедро_щирина_половина</translation>
<translation>бедро_ширина_половина</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="776"/>
@ -1399,7 +1399,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="822"/>
<source>From Rib Side to Rib side across back. (&apos;Rib circumference&apos; - &apos;Rib arc, front&apos;).</source>
<comment>Full measurement description.</comment>
<translation>От одной стороны ребер до другой, обхватывая лентойсзади. (&apos;Обхват ребер&apos; - &apos;Ширина ребер спереди&apos;)</translation>
<translation>От одной стороны ребер до другой, обхватывая лентой сзади. (&apos;Обхват ребер&apos; - &apos;Ширина ребер спереди&apos;)</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="827"/>
@ -1615,8 +1615,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="912"/>
<source>Curve stiff paper around front of abdomen, tape at sides. Measure from Hip Side to Hip Side over paper across front.</source>
<comment>Full measurement description.</comment>
<translation>Ленту накладывают на ягодичные точки. Лента должна проходить горизонтально вокруг туловища, спереди - по гибкой пластине, приложенной вертикально к животу для учета выступа живота, и замыкаться на правой стороне туловища
</translation>
<translation>Ленту накладывают на ягодичные точки. Лента должна проходить горизонтально вокруг туловища, спереди - по гибкой пластине, приложенной вертикально к животу для учета выступа живота, и замыкаться на правой стороне туловища.</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="917"/>
@ -1724,7 +1723,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="969"/>
<source>From Neck Front down between breasts to Waist Front.</source>
<comment>Full measurement description.</comment>
<translation>Расстояние от основания шеи спереди между грудью до лини талии спереди</translation>
<translation>Расстояние от основания шеи спереди между грудью до линии талии спереди</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="973"/>
@ -2732,7 +2731,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1384"/>
<source>From Neck Side to Bustpoint.</source>
<comment>Full measurement description.</comment>
<translation>Измеряют от точки основания шеи до выступающей точки грудной железы.</translation>
<translation>Измеряют от точки основания шеи до выступающей точки грудной железы.</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1387"/>
@ -3020,7 +3019,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1509"/>
<source>From Neck Side diagonal to Armfold Front.</source>
<comment>Full measurement description.</comment>
<translation>Расстояние от шейной точки до уровня заднего угла подмышечной впадины спереди</translation>
<translation>Расстояние от шейной точки до уровня заднего угла подмышечной впадины спереди.</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1513"/>
@ -3548,7 +3547,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="2148"/>
<source>This information is pulled from pattern charts in some patternmaking systems, e.g. Winifred P. Aldrich&apos;s &quot;Metric Pattern Cutting&quot;.</source>
<comment>Full measurement description.</comment>
<translation>Эта информация использована из шаблона в таких системах раскроя, как Уилфред Алдрич &quot;Метод конструирования и моделирования&quot;</translation>
<translation>Эта информация использована из шаблона в таких системах раскроя, как Уилфред Алдрич &quot;Метод конструирования и моделирования&quot;.</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="1736"/>
@ -4400,7 +4399,7 @@
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="2140"/>
<source>This information is pulled from pattern charts in some patternmaking systems, e.g. Winifred P. Aldrich&apos;s &quot;Metric Pattern Cutting&quot;.</source>
<comment>Full measurement description.</comment>
<translation>Эта информация взята для выкроек в таких системах раскроя, как Уилфред Алдрич &quot;Метод конструирования и моделирования&quot;</translation>
<translation>Эта информация взята для выкроек в таких системах раскроя, как Уилфред Алдрич &quot;Метод конструирования и моделирования&quot;.</translation>
</message>
<message>
<location filename="../../src/libs/vpatterndb/vtranslatemeasurements.cpp" line="2137"/>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -67,17 +67,6 @@ int main(int argc, char *argv[])
VPApplication app(argc, argv);
app.InitOptions();
if (FvUpdater::IsStaledTestBuild())
{
qWarning() << QApplication::translate("Puzzle",
"This test build is older than %1 days. To provide you with better "
"quality service we restrict the lifetime you can use a test build. "
"To continue using Puzzle please update to newer test build. The "
"application will be shut down.")
.arg(FvUpdater::testBuildLifetime);
return V_EX_UNAVAILABLE;
}
QTimer::singleShot(0, &app, &VPApplication::ProcessCMD);
#if defined(APPIMAGE) && defined(Q_OS_LINUX)

View File

@ -202,7 +202,7 @@ inline void noisyFailureMsgHandler(QtMsgType type, const QMessageLogContext &con
{
if (topWinAllowsPop)
{
messageBox.setText(VAbstractApplication::ClearMessage(msg));
messageBox.setText(msg);
messageBox.setStandardButtons(QMessageBox::Ok);
messageBox.setWindowModality(Qt::ApplicationModal);
messageBox.setModal(true);

View File

@ -11,7 +11,11 @@
</rect>
</property>
<property name="windowTitle">
<string>PuzzleMainWindow</string>
<string>Puzzle</string>
</property>
<property name="windowIcon">
<iconset resource="share/resources/puzzleicon.qrc">
<normaloff>:/puzzleicon/64x64/logo.png</normaloff>:/puzzleicon/64x64/logo.png</iconset>
</property>
<widget class="QWidget" name="centralWidget">
<property name="enabled">
@ -32,7 +36,7 @@
<x>0</x>
<y>0</y>
<width>1427</width>
<height>22</height>
<height>21</height>
</rect>
</property>
<widget class="QMenu" name="menuFile">
@ -230,7 +234,7 @@
<x>0</x>
<y>0</y>
<width>342</width>
<height>1264</height>
<height>1252</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
@ -505,7 +509,7 @@
<attribute name="toolTip">
<string>Layout properties</string>
</attribute>
<layout class="QVBoxLayout" name="verticalLayoutLayoutProperty">
<layout class="QVBoxLayout" name="verticalLayoutSheetProperty">
<property name="leftMargin">
<number>0</number>
</property>
@ -538,7 +542,7 @@
<x>0</x>
<y>0</y>
<width>356</width>
<height>760</height>
<height>761</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
@ -954,7 +958,7 @@
<x>0</x>
<y>0</y>
<width>356</width>
<height>760</height>
<height>761</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_3">
@ -1027,7 +1031,7 @@
<x>0</x>
<y>0</y>
<width>356</width>
<height>760</height>
<height>761</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_4">

View File

@ -38,8 +38,7 @@ TapePreferencesConfigurationPage::TapePreferencesConfigurationPage(QWidget *pare
: QWidget(parent),
ui(new Ui::TapePreferencesConfigurationPage),
m_langChanged(false),
m_systemChanged(false),
m_defGradationChanged(false)
m_systemChanged(false)
{
ui->setupUi(this);
RetranslateUi();
@ -84,31 +83,6 @@ TapePreferencesConfigurationPage::TapePreferencesConfigurationPage(QWidget *pare
//----------------------- Toolbar
ui->toolBarStyleCheck->setChecked(qApp->TapeSettings()->GetToolBarStyle());
//---------------------------Default height and size
// If change units don't forget about the label
ui->defHeightCombo->addItems(VMeasurement::WholeListHeights(Unit::Cm));
index = ui->defHeightCombo->findText(QString().setNum(qApp->TapeSettings()->GetDefHeight()));
if (index != -1)
{
ui->defHeightCombo->setCurrentIndex(index);
}
auto DefGradationChanged = [this]()
{
m_defGradationChanged = true;
};
connect(ui->defHeightCombo, QOverload<int>::of(&QComboBox::currentIndexChanged), this, DefGradationChanged);
// If change units don't forget about the label
ui->defSizeCombo->addItems(VMeasurement::WholeListSizes(Unit::Cm));
index = ui->defSizeCombo->findText(QString().setNum(qApp->TapeSettings()->GetDefSize()));
if (index != -1)
{
ui->defSizeCombo->setCurrentIndex(index);
}
connect(ui->defSizeCombo, QOverload<int>::of(&QComboBox::currentIndexChanged), this, DefGradationChanged);
}
//---------------------------------------------------------------------------------------------------------------------
@ -150,13 +124,6 @@ QStringList TapePreferencesConfigurationPage::Apply()
qApp->RetranslateGroups();
}
if (m_defGradationChanged)
{
settings->SetDefHeight(ui->defHeightCombo->currentText().toInt());
settings->SetDefSize(ui->defSizeCombo->currentText().toInt());
m_defGradationChanged = false;
}
return preferences;
}
@ -187,7 +154,4 @@ void TapePreferencesConfigurationPage::RetranslateUi()
ui->systemCombo->blockSignals(false);
ui->systemCombo->setCurrentIndex(ui->systemCombo->findData(code));
}
ui->labelHeightUnit->setText(UnitsToStr(Unit::Cm, true));
ui->labelSizeUnit->setText(UnitsToStr(Unit::Cm, true));
}

View File

@ -52,7 +52,6 @@ private:
Ui::TapePreferencesConfigurationPage *ui;
bool m_langChanged;
bool m_systemChanged;
bool m_defGradationChanged;
void RetranslateUi();
};

View File

@ -7,7 +7,7 @@
<x>0</x>
<y>0</y>
<width>544</width>
<height>750</height>
<height>648</height>
</rect>
</property>
<property name="windowTitle">
@ -25,7 +25,7 @@
<x>0</x>
<y>0</y>
<width>524</width>
<height>730</height>
<height>628</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
@ -165,89 +165,6 @@
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="groupBox">
<property name="title">
<string>Default height and size</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<widget class="QLabel" name="label">
<property name="text">
<string>Default height:</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QComboBox" name="defSizeCombo">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
<item row="0" column="2">
<widget class="QLabel" name="labelHeightUnit">
<property name="text">
<string notr="true">Height unit</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QComboBox" name="defHeightCombo">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
<item row="1" column="2">
<widget class="QLabel" name="labelSizeUnit">
<property name="text">
<string notr="true">Size unit</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_4">
<property name="text">
<string>Default size:</string>
</property>
</widget>
</item>
<item row="0" column="3">
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="1" column="3">
<spacer name="horizontalSpacer_2">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="groupBox_4">
<property name="title">

View File

@ -0,0 +1,223 @@
/************************************************************************
**
** @file dialogdimensionlabels.cpp
** @author Roman Telezhynskyi <dismine(at)gmail.com>
** @date 8 10, 2020
**
** @brief
** @copyright
** This source code is part of the Valentina project, a pattern making
** program, whose allow create and modeling patterns of clothing.
** Copyright (C) 2020 Valentina project
** <https://gitlab.com/smart-pattern/valentina> All Rights Reserved.
**
** Valentina is free software: you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation, either version 3 of the License, or
** (at your option) any later version.
**
** Valentina is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
** GNU General Public License for more details.
**
** You should have received a copy of the GNU General Public License
** along with Valentina. If not, see <http://www.gnu.org/licenses/>.
**
*************************************************************************/
#include "dialogdimensionlabels.h"
#include "ui_dialogdimensionlabels.h"
//---------------------------------------------------------------------------------------------------------------------
DialogDimensionLabels::DialogDimensionLabels(const QMap<MeasurementDimension, MeasurementDimension_p> &dimensions, bool fullCircumference,
QWidget *parent)
: QDialog(parent),
ui(new Ui::DialogDimensionLabels),
m_dimensions(dimensions),
m_fullCircumference(fullCircumference)
{
ui->setupUi(this);
InitLabels();
InitDimensions();
InitTable();
connect(ui->comboBoxDimensionLabels, QOverload<int>::of(&QComboBox::currentIndexChanged), this,
&DialogDimensionLabels::DimensionChanged);
connect(ui->tableWidget, &QTableWidget::itemChanged, this, &DialogDimensionLabels::LabelChanged);
}
//---------------------------------------------------------------------------------------------------------------------
DialogDimensionLabels::~DialogDimensionLabels()
{
delete ui;
}
//---------------------------------------------------------------------------------------------------------------------
void DialogDimensionLabels::changeEvent(QEvent *event)
{
if (event->type() == QEvent::LanguageChange)
{
// retranslate designer form (single inheritance approach)
ui->retranslateUi(this);
MeasurementDimension type =
static_cast<MeasurementDimension>(ui->comboBoxDimensionLabels->currentData().toInt());
InitDimensions();
int index = ui->comboBoxDimensionLabels->findData(static_cast<int>(type));
if (index != -1)
{
ui->comboBoxDimensionLabels->blockSignals(true);
ui->comboBoxDimensionLabels->setCurrentIndex(index);
ui->comboBoxDimensionLabels->blockSignals(false);
}
const int row = ui->tableWidget->currentRow();
InitTable();
ui->tableWidget->blockSignals(true);
ui->tableWidget->selectRow(row);
ui->tableWidget->blockSignals(false);
}
// remember to call base class implementation
QDialog::changeEvent(event);
}
//---------------------------------------------------------------------------------------------------------------------
void DialogDimensionLabels::DimensionChanged()
{
InitTable();
ui->tableWidget->selectRow(0);
}
//---------------------------------------------------------------------------------------------------------------------
void DialogDimensionLabels::LabelChanged(QTableWidgetItem *item)
{
if (item)
{
MeasurementDimension type =
static_cast<MeasurementDimension>(ui->comboBoxDimensionLabels->currentData().toInt());
int value = item->data(Qt::UserRole).toInt();
DimesionLabels labels = m_labels.value(type);
labels.insert(value, item->text());
m_labels.insert(type, labels);
}
}
//---------------------------------------------------------------------------------------------------------------------
void DialogDimensionLabels::InitLabels()
{
m_labels.clear();
const QList<MeasurementDimension_p> dimensions = m_dimensions.values();
for(auto &dimension : dimensions)
{
m_labels.insert(dimension->Type(), dimension->Labels());
}
}
//---------------------------------------------------------------------------------------------------------------------
void DialogDimensionLabels::InitDimensions()
{
ui->comboBoxDimensionLabels->blockSignals(true);
ui->comboBoxDimensionLabels->clear();
for(auto &dimension : m_dimensions)
{
ui->comboBoxDimensionLabels->addItem(VAbstartMeasurementDimension::DimensionName(dimension->Type()),
static_cast<int>(dimension->Type()));
}
ui->comboBoxDimensionLabels->blockSignals(false);
}
//---------------------------------------------------------------------------------------------------------------------
void DialogDimensionLabels::InitTable()
{
ui->tableWidget->blockSignals(true);
ui->tableWidget->clearContents();
const MeasurementDimension type =
static_cast<MeasurementDimension>(ui->comboBoxDimensionLabels->currentData().toInt());
MeasurementDimension_p dimension;
if (m_dimensions.contains(type))
{
dimension = m_dimensions.value(type);
}
if (dimension.isNull())
{
return;
}
const QVector<int> bases = dimension->ValidBases();
ui->tableWidget->setRowCount(bases.size());
const DimesionLabels labels = m_labels.value(type);
for(int row = 0; row < bases.size(); ++row)
{
const int base = bases.at(row);
{
auto *itemValue = new QTableWidgetItem(DimensionValue(dimension, base));
itemValue->setData(Qt::UserRole, base);
itemValue->setTextAlignment(Qt::AlignHCenter | Qt::AlignCenter);
// set the item non-editable (view only), and non-selectable
Qt::ItemFlags flags = itemValue->flags();
flags &= ~(Qt::ItemIsEditable); // reset/clear the flag
itemValue->setFlags(flags);
ui->tableWidget->setItem(row, 0, itemValue);
}
{
auto *itemLabel = new QTableWidgetItem(labels.value(base));
itemLabel->setData(Qt::UserRole, base);
itemLabel->setTextAlignment(Qt::AlignHCenter | Qt::AlignCenter);
ui->tableWidget->setItem(row, 1, itemLabel);
}
}
ui->tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
ui->tableWidget->blockSignals(false);
}
//---------------------------------------------------------------------------------------------------------------------
QString DialogDimensionLabels::DimensionValue(const MeasurementDimension_p &dimension, int value)
{
QStringList labels;
if (dimension->Type() == MeasurementDimension::X)
{
return QString::number(value);
}
else if (dimension->Type() == MeasurementDimension::Y)
{
if (dimension->IsCircumference())
{
return QString::number(m_fullCircumference ? value*2 : value);
}
else
{
return QString::number(value);
}
}
else if (dimension->Type() == MeasurementDimension::W || dimension->Type() == MeasurementDimension::Z)
{
return QString::number(m_fullCircumference ? value*2 : value);
}
return QString::number(value);
}

View File

@ -0,0 +1,82 @@
/************************************************************************
**
** @file dialogdimensionlabels.h
** @author Roman Telezhynskyi <dismine(at)gmail.com>
** @date 8 10, 2020
**
** @brief
** @copyright
** This source code is part of the Valentina project, a pattern making
** program, whose allow create and modeling patterns of clothing.
** Copyright (C) 2020 Valentina project
** <https://gitlab.com/smart-pattern/valentina> All Rights Reserved.
**
** Valentina is free software: you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation, either version 3 of the License, or
** (at your option) any later version.
**
** Valentina is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
** GNU General Public License for more details.
**
** You should have received a copy of the GNU General Public License
** along with Valentina. If not, see <http://www.gnu.org/licenses/>.
**
*************************************************************************/
#ifndef DIALOGDIMENSIONLABELS_H
#define DIALOGDIMENSIONLABELS_H
#include <QDialog>
#include <QMap>
#include "../vformat/vdimensions.h"
namespace Ui
{
class DialogDimensionLabels;
}
class QTableWidgetItem;
class DialogDimensionLabels : public QDialog
{
Q_OBJECT
public:
explicit DialogDimensionLabels(const QMap<MeasurementDimension, MeasurementDimension_p > &dimensions,
bool fullCircumference, QWidget *parent = nullptr);
virtual ~DialogDimensionLabels();
QMap<MeasurementDimension, DimesionLabels> Labels() const;
protected:
virtual void changeEvent(QEvent* event) override;
private slots:
void DimensionChanged();
void LabelChanged(QTableWidgetItem *item);
private:
Q_DISABLE_COPY(DialogDimensionLabels)
Ui::DialogDimensionLabels *ui;
QMap<MeasurementDimension, MeasurementDimension_p > m_dimensions;
QMap<MeasurementDimension, DimesionLabels> m_labels{};
bool m_fullCircumference;
void InitLabels();
void InitDimensions();
void InitTable();
QString DimensionValue(const MeasurementDimension_p &dimension, int value);
};
//---------------------------------------------------------------------------------------------------------------------
inline QMap<MeasurementDimension, DimesionLabels> DialogDimensionLabels::Labels() const
{
return m_labels;
}
#endif // DIALOGDIMENSIONLABELS_H

View File

@ -0,0 +1,134 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>DialogDimensionLabels</class>
<widget class="QDialog" name="DialogDimensionLabels">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>345</width>
<height>424</height>
</rect>
</property>
<property name="windowTitle">
<string>Dimension labels</string>
</property>
<property name="windowIcon">
<iconset>
<normaloff>:/tapeicon/64x64/logo.png</normaloff>:/tapeicon/64x64/logo.png</iconset>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QLabel" name="labelDimension">
<property name="text">
<string>Dimension:</string>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="comboBoxDimensionLabels"/>
</item>
<item>
<spacer name="horizontalSpacer_2">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
<item>
<widget class="QTableWidget" name="tableWidget">
<property name="alternatingRowColors">
<bool>true</bool>
</property>
<property name="selectionMode">
<enum>QAbstractItemView::SingleSelection</enum>
</property>
<property name="selectionBehavior">
<enum>QAbstractItemView::SelectRows</enum>
</property>
<attribute name="verticalHeaderVisible">
<bool>false</bool>
</attribute>
<column>
<property name="text">
<string>Value</string>
</property>
</column>
<column>
<property name="text">
<string>Label</string>
</property>
</column>
</widget>
</item>
<item>
<widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
</property>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections>
<connection>
<sender>buttonBox</sender>
<signal>accepted()</signal>
<receiver>DialogDimensionLabels</receiver>
<slot>accept()</slot>
<hints>
<hint type="sourcelabel">
<x>248</x>
<y>254</y>
</hint>
<hint type="destinationlabel">
<x>157</x>
<y>274</y>
</hint>
</hints>
</connection>
<connection>
<sender>buttonBox</sender>
<signal>rejected()</signal>
<receiver>DialogDimensionLabels</receiver>
<slot>reject()</slot>
<hints>
<hint type="sourcelabel">
<x>316</x>
<y>260</y>
</hint>
<hint type="destinationlabel">
<x>286</x>
<y>274</y>
</hint>
</hints>
</connection>
</connections>
</ui>

View File

@ -0,0 +1,929 @@
/************************************************************************
**
** @file dialogmeasurementscsvcolumns.cpp
** @author Roman Telezhynskyi <dismine(at)gmail.com>
** @date 9 10, 2020
**
** @brief
** @copyright
** This source code is part of the Valentina project, a pattern making
** program, whose allow create and modeling patterns of clothing.
** Copyright (C) 2020 Valentina project
** <https://gitlab.com/smart-pattern/valentina> All Rights Reserved.
**
** Valentina is free software: you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation, either version 3 of the License, or
** (at your option) any later version.
**
** Valentina is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
** GNU General Public License for more details.
**
** You should have received a copy of the GNU General Public License
** along with Valentina. If not, see <http://www.gnu.org/licenses/>.
**
*************************************************************************/
#include "dialogmeasurementscsvcolumns.h"
#include "ui_dialogmeasurementscsvcolumns.h"
#include "../vmisc/qxtcsvmodel.h"
#include "../vtools/dialogs/dialogtoolbox.h"
#include <QPushButton>
#include <QShowEvent>
//---------------------------------------------------------------------------------------------------------------------
DialogMeasurementsCSVColumns::DialogMeasurementsCSVColumns(const QString &filename, MeasurementsType type,
QWidget *parent) :
QDialog(parent),
ui(new Ui::DialogMeasurementsCSVColumns),
m_fileName{filename},
m_type(type)
{
ui->setupUi(this);
HackColumnControls();
}
//---------------------------------------------------------------------------------------------------------------------
DialogMeasurementsCSVColumns::DialogMeasurementsCSVColumns(const QString &filename, MeasurementsType type,
const QList<MeasurementDimension_p> &dimensions,
QWidget *parent) :
QDialog(parent),
ui(new Ui::DialogMeasurementsCSVColumns),
m_fileName{filename},
m_type(type),
m_dimensions{dimensions}
{
ui->setupUi(this);
HackColumnControls();
}
//---------------------------------------------------------------------------------------------------------------------
DialogMeasurementsCSVColumns::~DialogMeasurementsCSVColumns()
{
qDeleteAll(m_hackedWidgets);
delete ui;
}
//---------------------------------------------------------------------------------------------------------------------
void DialogMeasurementsCSVColumns::changeEvent(QEvent *event)
{
if (event->type() == QEvent::LanguageChange)
{
// retranslate designer form (single inheritance approach)
ui->retranslateUi(this);
RetranslateLabels();
InitColumnsControls();
InitImportHeaders();
ShowImportPreview();
CheckStatus();
}
// remember to call base class implementation
QDialog::changeEvent(event);
}
//---------------------------------------------------------------------------------------------------------------------
void DialogMeasurementsCSVColumns::showEvent(QShowEvent *event)
{
QDialog::showEvent( event );
if ( event->spontaneous() )
{
return;
}
if (m_isInitialized)
{
return;
}
// do your init stuff here
if (not m_fileName.isEmpty())
{
InitColumnsMap();
ShowInputPreview();
InitColumnsControls();
RetranslateLabels();
SetDefaultColumns();
InitImportHeaders();
ShowImportPreview();
connect(ui->comboBoxName, QOverload<int>::of(&QComboBox::currentIndexChanged),
this, &DialogMeasurementsCSVColumns::ColumnChanged);
connect(ui->comboBoxValue, QOverload<int>::of(&QComboBox::currentIndexChanged),
this, &DialogMeasurementsCSVColumns::ColumnChanged);
if (m_type == MeasurementsType::Multisize)
{
if (m_dimensions.size() > 0)
{
connect(ui->comboBoxShiftA, QOverload<int>::of(&QComboBox::currentIndexChanged),
this, &DialogMeasurementsCSVColumns::ColumnChanged);
}
if (m_dimensions.size() > 1)
{
connect(ui->comboBoxShiftB, QOverload<int>::of(&QComboBox::currentIndexChanged),
this, &DialogMeasurementsCSVColumns::ColumnChanged);
}
if (m_dimensions.size() > 2)
{
connect(ui->comboBoxShiftC, QOverload<int>::of(&QComboBox::currentIndexChanged),
this, &DialogMeasurementsCSVColumns::ColumnChanged);
}
}
connect(ui->comboBoxFullName, QOverload<int>::of(&QComboBox::currentIndexChanged),
this, &DialogMeasurementsCSVColumns::ColumnChanged);
connect(ui->comboBoxDescription, QOverload<int>::of(&QComboBox::currentIndexChanged),
this, &DialogMeasurementsCSVColumns::ColumnChanged);
CheckStatus();
}
m_isInitialized = true;//first show windows are held
}
//---------------------------------------------------------------------------------------------------------------------
void DialogMeasurementsCSVColumns::ColumnChanged()
{
auto *control = qobject_cast<QComboBox*>(sender());
auto SaveColum = [this, control](int column)
{
m_columnsMap[column] = control->currentData().toInt();
ShowImportPreview();
CheckStatus();
};
if (control == ui->comboBoxName)
{
if (m_type == MeasurementsType::Individual)
{
SaveColum(static_cast<int>(IndividualMeasurementsColumns::Name));
}
else
{
SaveColum(static_cast<int>(MultisizeMeasurementsColumns::Name));
}
}
else if (control == ui->comboBoxValue)
{
if (m_type == MeasurementsType::Individual)
{
SaveColum(static_cast<int>(IndividualMeasurementsColumns::Value));
}
else
{
SaveColum(static_cast<int>(MultisizeMeasurementsColumns::BaseValue));
}
}
else if (control == ui->comboBoxShiftA)
{
SaveColum(static_cast<int>(MultisizeMeasurementsColumns::ShiftA));
}
else if (control == ui->comboBoxShiftB)
{
SaveColum(static_cast<int>(MultisizeMeasurementsColumns::ShiftB));
}
else if (control == ui->comboBoxShiftC)
{
SaveColum(static_cast<int>(MultisizeMeasurementsColumns::ShiftC));
}
else if (control == ui->comboBoxFullName)
{
if (m_type == MeasurementsType::Individual)
{
SaveColum(static_cast<int>(IndividualMeasurementsColumns::FullName));
}
else
{
SaveColum(static_cast<int>(MultisizeMeasurementsColumns::FullName));
}
}
else if (control == ui->comboBoxDescription)
{
if (m_type == MeasurementsType::Individual)
{
SaveColum(static_cast<int>(IndividualMeasurementsColumns::Description));
}
else
{
SaveColum(static_cast<int>(MultisizeMeasurementsColumns::Description));
}
}
}
//---------------------------------------------------------------------------------------------------------------------
bool DialogMeasurementsCSVColumns::ColumnMandatory(int column) const
{
if (m_type == MeasurementsType::Individual)
{
return column < static_cast<int>(IndividualMeasurementsColumns::FullName);
}
else
{
int mandatory = 3;
if (m_dimensions.size() > 1)
{
mandatory += qMin(m_dimensions.size(), 2);
}
return static_cast<int>(column) < mandatory;
}
}
//---------------------------------------------------------------------------------------------------------------------
QString DialogMeasurementsCSVColumns::ColumnHeader(int column) const
{
if (m_type == MeasurementsType::Individual)
{
const auto individualColumn = static_cast<IndividualMeasurementsColumns>(column);
switch(individualColumn)
{
case IndividualMeasurementsColumns::Name:
return tr("Name", "measurement column");
case IndividualMeasurementsColumns::Value:
return tr("Value", "measurement column");
case IndividualMeasurementsColumns::FullName:
return tr("Full name", "measurement column");
case IndividualMeasurementsColumns::Description:
return tr("Description", "measurement column");
default:
return QString();
}
}
else
{
const auto multisizeColumn = static_cast<MultisizeMeasurementsColumns>(column);
switch(multisizeColumn)
{
case MultisizeMeasurementsColumns::Name:
return tr("Name", "measurement column");
case MultisizeMeasurementsColumns::BaseValue:
return tr("Base value", "measurement column");
case MultisizeMeasurementsColumns::ShiftA:
if (m_dimensions.size() > 0)
{
MeasurementDimension_p dimension = m_dimensions.at(0);
return tr("Shift (%1):", "measurement column")
.arg(VAbstartMeasurementDimension::DimensionName(dimension->Type()));
}
else
{
return "Shift A";
}
case MultisizeMeasurementsColumns::ShiftB:
if (m_dimensions.size() > 1)
{
MeasurementDimension_p dimension = m_dimensions.at(1);
return tr("Shift (%1):", "measurement column")
.arg(VAbstartMeasurementDimension::DimensionName(dimension->Type()));
}
else
{
return "Shift B";
}
case MultisizeMeasurementsColumns::ShiftC:
if (m_dimensions.size() > 2)
{
MeasurementDimension_p dimension = m_dimensions.at(2);
return tr("Shift (%1):", "measurement column")
.arg(VAbstartMeasurementDimension::DimensionName(dimension->Type()));
}
else
{
return "Shift C";
}
case MultisizeMeasurementsColumns::FullName:
return tr("Full name", "measurement column");
case MultisizeMeasurementsColumns::Description:
return tr("Description", "measurement column");
default:
return QString();
}
}
}
//---------------------------------------------------------------------------------------------------------------------
int DialogMeasurementsCSVColumns::ImportColumnCount() const
{
if (m_type == MeasurementsType::Individual)
{
return static_cast<int>(IndividualMeasurementsColumns::LAST_DO_NOT_USE);
}
else
{
return static_cast<int>(MultisizeMeasurementsColumns::LAST_DO_NOT_USE);
}
}
//---------------------------------------------------------------------------------------------------------------------
int DialogMeasurementsCSVColumns::MinimumColumns() const
{
if (m_type == MeasurementsType::Individual)
{
return 2;
}
else
{
int mandatory = 3;
if (m_dimensions.size() > 1)
{
mandatory += qMin(m_dimensions.size(), 2);
}
return mandatory;
}
}
//---------------------------------------------------------------------------------------------------------------------
bool DialogMeasurementsCSVColumns::ColumnsValid()
{
ChangeColor(ui->labelName, OkColor(this));
ChangeColor(ui->labelValue, OkColor(this));
if (m_type == MeasurementsType::Multisize)
{
if (m_dimensions.size() > 0)
{
ChangeColor(ui->labelShiftA, OkColor(this));
}
if (m_dimensions.size() > 1)
{
ChangeColor(ui->labelShiftB, OkColor(this));
}
if (m_dimensions.size() > 2)
{
ChangeColor(ui->labelShiftC, OkColor(this));
}
}
ChangeColor(ui->labelFullName, OkColor(this));
ChangeColor(ui->labelDescription, OkColor(this));
auto ColumnValid = [this](int column)
{
int value = m_columnsMap.at(column);
if (value == -1 && not ColumnMandatory(column))
{
return true;
}
for (int c=0; c < m_columnsMap.size(); ++c)
{
if (c == column)
{
continue;
}
if (value == m_columnsMap.at(c))
{
return false;
}
}
return true;
};
bool columnNameFlag = true;
bool columnValueFlag = true;
bool columnShiftAFlag = true;
bool columnShiftBFlag = true;
bool columnShiftCFlag = true;
bool columnFullNameFlag = true;
bool columnDescriptionFlag = true;
const QColor errorColor = Qt::red;
if (m_type == MeasurementsType::Multisize)
{
if (not ColumnValid(static_cast<int>(MultisizeMeasurementsColumns::Name)))
{
ChangeColor(ui->labelName, errorColor);
columnNameFlag = false;
}
}
else
{
if (not ColumnValid(static_cast<int>(IndividualMeasurementsColumns::Name)))
{
ChangeColor(ui->labelName, errorColor);
columnNameFlag = false;
}
}
if (m_type == MeasurementsType::Multisize)
{
if (not ColumnValid(static_cast<int>(MultisizeMeasurementsColumns::BaseValue)))
{
ChangeColor(ui->labelValue, errorColor);
columnValueFlag = false;
}
}
else
{
if (not ColumnValid(static_cast<int>(IndividualMeasurementsColumns::Value)))
{
ChangeColor(ui->labelValue, errorColor);
columnValueFlag = false;
}
}
if (m_type == MeasurementsType::Multisize)
{
if (m_dimensions.size() > 0)
{
if (not ColumnValid(static_cast<int>(MultisizeMeasurementsColumns::ShiftA)))
{
ChangeColor(ui->labelShiftA, errorColor);
columnShiftAFlag = false;
}
}
if (m_dimensions.size() > 1)
{
if (not ColumnValid(static_cast<int>(MultisizeMeasurementsColumns::ShiftB)))
{
ChangeColor(ui->labelShiftB, errorColor);
columnShiftBFlag = false;
}
}
if (m_dimensions.size() > 2)
{
if (not ColumnValid(static_cast<int>(MultisizeMeasurementsColumns::ShiftC)))
{
ChangeColor(ui->labelShiftC, errorColor);
columnShiftCFlag = false;
}
}
}
if (not ColumnValid(m_type == MeasurementsType::Multisize
? static_cast<int>(MultisizeMeasurementsColumns::FullName)
: static_cast<int>(IndividualMeasurementsColumns::FullName)))
{
ChangeColor(ui->labelFullName, errorColor);
columnFullNameFlag = false;
}
if (not ColumnValid(m_type == MeasurementsType::Multisize
? static_cast<int>(MultisizeMeasurementsColumns::Description)
: static_cast<int>(IndividualMeasurementsColumns::Description)))
{
ChangeColor(ui->labelDescription, errorColor);
columnDescriptionFlag = false;
}
return columnNameFlag && columnValueFlag && columnShiftAFlag && columnShiftBFlag && columnShiftCFlag &&
columnFullNameFlag && columnDescriptionFlag;
}
//---------------------------------------------------------------------------------------------------------------------
void DialogMeasurementsCSVColumns::InitColumnsMap()
{
QSharedPointer<QxtCsvModel> csv = DialogMeasurementsCSVColumns::CSVModel();
m_columnsMap.clear();
auto InitColumn = [this, csv](int column, int &index, bool forceSkip=false)
{
if (forceSkip)
{
m_columnsMap[column] = -1;
}
else
{
++index;
if (ColumnMandatory(column))
{
m_columnsMap[column] = index;
}
else
{
m_columnsMap[column] = csv->columnCount() >= index ? index : -1;
}
}
};
if (m_type == MeasurementsType::Individual)
{
m_columnsMap.resize(static_cast<int>(IndividualMeasurementsColumns::LAST_DO_NOT_USE));
int index = -1;
for(int column = 0; column < static_cast<int>(IndividualMeasurementsColumns::LAST_DO_NOT_USE); ++column)
{
InitColumn(column, index);
}
}
else
{
m_columnsMap.resize(static_cast<int>(MultisizeMeasurementsColumns::LAST_DO_NOT_USE));
int index = -1;
InitColumn(static_cast<int>(MultisizeMeasurementsColumns::Name), index);
InitColumn(static_cast<int>(MultisizeMeasurementsColumns::BaseValue), index);
InitColumn(static_cast<int>(MultisizeMeasurementsColumns::ShiftA), index);
InitColumn(static_cast<int>(MultisizeMeasurementsColumns::ShiftB), index, m_dimensions.size() < 2);
InitColumn(static_cast<int>(MultisizeMeasurementsColumns::ShiftC), index, m_dimensions.size() < 3);
InitColumn(static_cast<int>(MultisizeMeasurementsColumns::FullName), index);
InitColumn(static_cast<int>(MultisizeMeasurementsColumns::Description), index);
}
}
//---------------------------------------------------------------------------------------------------------------------
void DialogMeasurementsCSVColumns::InitColumnsControls()
{
const int inputColumnCount = CSVModel()->columnCount();
auto InitControl = [this, inputColumnCount](QComboBox *control, int column)
{
SCASSERT(control != nullptr)
int currentColumn = -2;
int index = control->currentIndex();
if (index != -1)
{
currentColumn = control->currentData().toInt();
}
control->blockSignals(true);
control->clear();
for(int i=0; i < inputColumnCount; ++i)
{
control->addItem(QString::number(i+1), i);
}
if (not ColumnMandatory(column))
{
control->addItem(tr("Skip"), -1);
}
control->setCurrentIndex(-1);
index = control->findData(currentColumn);
if (index != -1)
{
control->setCurrentIndex(index);
control->blockSignals(false);
}
else
{
control->blockSignals(false);
if (not ColumnMandatory(column))
{
control->setCurrentIndex(control->findData(-1));
}
else
{
control->setCurrentIndex(0);
}
}
};
if (m_type == MeasurementsType::Individual)
{
InitControl(ui->comboBoxName, static_cast<int>(IndividualMeasurementsColumns::Name));
InitControl(ui->comboBoxValue, static_cast<int>(IndividualMeasurementsColumns::Value));
InitControl(ui->comboBoxFullName, static_cast<int>(IndividualMeasurementsColumns::FullName));
InitControl(ui->comboBoxDescription, static_cast<int>(IndividualMeasurementsColumns::Description));
}
else
{
InitControl(ui->comboBoxName, static_cast<int>(MultisizeMeasurementsColumns::Name));
InitControl(ui->comboBoxValue, static_cast<int>(MultisizeMeasurementsColumns::BaseValue));
if (m_dimensions.size() > 0)
{
InitControl(ui->comboBoxShiftA, static_cast<int>(MultisizeMeasurementsColumns::ShiftA));
}
if (m_dimensions.size() > 1)
{
InitControl(ui->comboBoxShiftB, static_cast<int>(MultisizeMeasurementsColumns::ShiftB));
}
if (m_dimensions.size() > 2)
{
InitControl(ui->comboBoxShiftC, static_cast<int>(MultisizeMeasurementsColumns::ShiftC));
}
InitControl(ui->comboBoxFullName, static_cast<int>(MultisizeMeasurementsColumns::FullName));
InitControl(ui->comboBoxDescription, static_cast<int>(MultisizeMeasurementsColumns::Description));
}
}
//---------------------------------------------------------------------------------------------------------------------
void DialogMeasurementsCSVColumns::InitImportHeaders()
{
if (m_fileName.isEmpty())
{
return;
}
const int columns = ImportColumnCount();
ui->tableWidgetImport->clear();
ui->tableWidgetImport->setColumnCount(columns);
auto AddHeader = [this](int column, bool visible=true)
{
QTableWidgetItem *header = new QTableWidgetItem(ColumnHeader(column));
ui->tableWidgetImport->setHorizontalHeaderItem(column, header);
ui->tableWidgetImport->setColumnHidden(column, not visible);
};
if (m_type == MeasurementsType::Individual)
{
AddHeader(static_cast<int>(IndividualMeasurementsColumns::Name));
AddHeader(static_cast<int>(IndividualMeasurementsColumns::Value));
AddHeader(static_cast<int>(IndividualMeasurementsColumns::FullName));
AddHeader(static_cast<int>(IndividualMeasurementsColumns::Description));
}
else
{
AddHeader(static_cast<int>(MultisizeMeasurementsColumns::Name));
AddHeader(static_cast<int>(MultisizeMeasurementsColumns::BaseValue));
AddHeader(static_cast<int>(MultisizeMeasurementsColumns::ShiftA), m_dimensions.size() > 0);
AddHeader(static_cast<int>(MultisizeMeasurementsColumns::ShiftB), m_dimensions.size() > 1);
AddHeader(static_cast<int>(MultisizeMeasurementsColumns::ShiftC), m_dimensions.size() > 2);
AddHeader(static_cast<int>(MultisizeMeasurementsColumns::FullName));
AddHeader(static_cast<int>(MultisizeMeasurementsColumns::Description));
}
}
//---------------------------------------------------------------------------------------------------------------------
QSharedPointer<QxtCsvModel> DialogMeasurementsCSVColumns::CSVModel() const
{
return QSharedPointer<QxtCsvModel>::create(m_fileName, nullptr, m_withHeader, m_separator, m_codec);
}
//---------------------------------------------------------------------------------------------------------------------
void DialogMeasurementsCSVColumns::ShowInputPreview()
{
if (m_fileName.isEmpty())
{
return;
}
QSharedPointer<QxtCsvModel> csv = DialogMeasurementsCSVColumns::CSVModel();
const int columns = csv->columnCount();
const int rows = csv->rowCount();
ui->tableWidgetInput->clear();
ui->tableWidgetInput->setColumnCount(columns);
ui->tableWidgetInput->setRowCount(rows);
ui->tableWidgetInput->horizontalHeader()->setVisible(m_withHeader);
if (m_withHeader)
{
for(int column=0; column<columns; ++column)
{
QTableWidgetItem *header = new QTableWidgetItem(csv->headerText(column));
header->setToolTip(QString::number(column+1));
ui->tableWidgetInput->setHorizontalHeaderItem(column, header);
}
}
for (int row=0; row < rows; ++row)
{
for(int column=0; column<columns; ++column)
{
const QString text = csv->text(row, column);
QTableWidgetItem *item = new QTableWidgetItem(text);
item->setToolTip(text);
// set the item non-editable (view only), and non-selectable
Qt::ItemFlags flags = item->flags();
flags &= ~(Qt::ItemIsEditable); // reset/clear the flag
item->setFlags(flags);
ui->tableWidgetInput->setItem(row, column, item);
}
}
ui->tableWidgetInput->resizeColumnsToContents();
ui->tableWidgetInput->resizeRowsToContents();
}
//---------------------------------------------------------------------------------------------------------------------
void DialogMeasurementsCSVColumns::ShowImportPreview()
{
if (m_fileName.isEmpty())
{
return;
}
QSharedPointer<QxtCsvModel> csv = DialogMeasurementsCSVColumns::CSVModel();
const int importColumns = ImportColumnCount();
const int columns = csv->columnCount();
const int rows = csv->rowCount();
ui->tableWidgetImport->clearContents();
ui->tableWidgetImport->setRowCount(rows);
for (int row=0; row < rows; ++row)
{
for(int column=0; column < importColumns; ++column)
{
const int tableColumn = m_columnsMap.at(column);
if (tableColumn >= 0 && tableColumn < columns)
{
const QString text = csv->text(row, tableColumn);
QTableWidgetItem *item = new QTableWidgetItem(text);
item->setToolTip(text);
// set the item non-editable (view only), and non-selectable
Qt::ItemFlags flags = item->flags();
flags &= ~(Qt::ItemIsEditable); // reset/clear the flag
item->setFlags(flags);
ui->tableWidgetImport->setItem(row, column, item);
}
}
}
ui->tableWidgetImport->resizeColumnsToContents();
ui->tableWidgetImport->resizeRowsToContents();
}
//---------------------------------------------------------------------------------------------------------------------
void DialogMeasurementsCSVColumns::HackColumnControls()
{
if (m_type == MeasurementsType::Individual)
{
HackWidget(&ui->labelShiftA);
HackWidget(&ui->labelShiftB);
HackWidget(&ui->labelShiftC);
HackWidget(&ui->comboBoxShiftA);
HackWidget(&ui->comboBoxShiftB);
HackWidget(&ui->comboBoxShiftC);
}
else
{
if (m_dimensions.size() < 2)
{
HackWidget(&ui->labelShiftB);
HackWidget(&ui->comboBoxShiftB);
}
if (m_dimensions.size() < 3)
{
HackWidget(&ui->labelShiftC);
HackWidget(&ui->comboBoxShiftC);
}
}
}
//---------------------------------------------------------------------------------------------------------------------
void DialogMeasurementsCSVColumns::RetranslateLabels()
{
ui->labelName->setText(tr("Name") + "*:");
if (m_type == MeasurementsType::Individual)
{
ui->labelValue->setText(tr("Value") + "*:");
}
else
{
ui->labelValue->setText(tr("Base value") + "*:");
if (m_dimensions.size() > 0)
{
MeasurementDimension_p dimension = m_dimensions.at(0);
ui->labelShiftA->setText(tr("Shift (%1)*:")
.arg(VAbstartMeasurementDimension::DimensionName(dimension->Type())));
}
if (m_dimensions.size() > 1)
{
MeasurementDimension_p dimension = m_dimensions.at(1);
ui->labelShiftB->setText(tr("Shift (%1)*:")
.arg(VAbstartMeasurementDimension::DimensionName(dimension->Type())));
}
if (m_dimensions.size() > 2)
{
MeasurementDimension_p dimension = m_dimensions.at(2);
ui->labelShiftC->setText(tr("Shift (%1)*:")
.arg(VAbstartMeasurementDimension::DimensionName(dimension->Type())));
}
}
}
//---------------------------------------------------------------------------------------------------------------------
void DialogMeasurementsCSVColumns::SetDefaultColumns()
{
auto SetDefault = [this](QComboBox *control, int column)
{
SCASSERT(control != nullptr)
int index = control->findData(m_columnsMap.at(column));
if (index != -1)
{
control->setCurrentIndex(index);
}
};
if (m_type == MeasurementsType::Individual)
{
SetDefault(ui->comboBoxName, static_cast<int>(IndividualMeasurementsColumns::Name));
SetDefault(ui->comboBoxValue, static_cast<int>(IndividualMeasurementsColumns::Value));
SetDefault(ui->comboBoxFullName, static_cast<int>(IndividualMeasurementsColumns::FullName));
SetDefault(ui->comboBoxDescription, static_cast<int>(IndividualMeasurementsColumns::Description));
}
else
{
SetDefault(ui->comboBoxName, static_cast<int>(MultisizeMeasurementsColumns::Name));
SetDefault(ui->comboBoxValue, static_cast<int>(MultisizeMeasurementsColumns::BaseValue));
if (m_dimensions.size() > 0)
{
SetDefault(ui->comboBoxShiftA, static_cast<int>(MultisizeMeasurementsColumns::ShiftA));
}
if (m_dimensions.size() > 1)
{
SetDefault(ui->comboBoxShiftB, static_cast<int>(MultisizeMeasurementsColumns::ShiftB));
}
if (m_dimensions.size() > 2)
{
SetDefault(ui->comboBoxShiftC, static_cast<int>(MultisizeMeasurementsColumns::ShiftC));
}
SetDefault(ui->comboBoxFullName, static_cast<int>(MultisizeMeasurementsColumns::FullName));
SetDefault(ui->comboBoxDescription, static_cast<int>(MultisizeMeasurementsColumns::Description));
}
}
//---------------------------------------------------------------------------------------------------------------------
void DialogMeasurementsCSVColumns::CheckStatus()
{
auto SetStatus = [this](bool status)
{
QPushButton *bOk = ui->buttonBox->button(QDialogButtonBox::Ok);
SCASSERT(bOk != nullptr)
bOk->setEnabled(status);
};
if (m_fileName.isEmpty())
{
SetStatus(false);
ui->labelStatus->setText(tr("File path is empty"));
return;
}
QSharedPointer<QxtCsvModel> csv = DialogMeasurementsCSVColumns::CSVModel();
const int columns = csv->columnCount();
if (columns < MinimumColumns())
{
SetStatus(false);
ui->labelStatus->setText(tr("Not enough columns"));
return;
}
const int rows = csv->rowCount();
if (rows < 1)
{
SetStatus(false);
ui->labelStatus->setText(tr("Not enough data to import"));
return;
}
if (not ColumnsValid())
{
SetStatus(false);
ui->labelStatus->setText(tr("Please, select unique number for each column"));
return;
}
SetStatus(true);
ui->labelStatus->setText(tr("Ready"));
}
//---------------------------------------------------------------------------------------------------------------------
template<class T>
void DialogMeasurementsCSVColumns::HackWidget(T **widget)
{
delete *widget;
*widget = new T();
m_hackedWidgets.append(*widget);
}

View File

@ -0,0 +1,149 @@
/************************************************************************
**
** @file dialogmeasurementscsvcolumns.h
** @author Roman Telezhynskyi <dismine(at)gmail.com>
** @date 9 10, 2020
**
** @brief
** @copyright
** This source code is part of the Valentina project, a pattern making
** program, whose allow create and modeling patterns of clothing.
** Copyright (C) 2020 Valentina project
** <https://gitlab.com/smart-pattern/valentina> All Rights Reserved.
**
** Valentina is free software: you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation, either version 3 of the License, or
** (at your option) any later version.
**
** Valentina is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
** GNU General Public License for more details.
**
** You should have received a copy of the GNU General Public License
** along with Valentina. If not, see <http://www.gnu.org/licenses/>.
**
*************************************************************************/
#ifndef DIALOGMEASUREMENTSCSVCOLUMNS_H
#define DIALOGMEASUREMENTSCSVCOLUMNS_H
#include <QDialog>
#include "../vformat/vdimensions.h"
class QxtCsvModel;
enum class IndividualMeasurementsColumns: qint8
{
Name = 0,
Value = 1,
FullName = 2, // optional
Description = 3, // optional
LAST_DO_NOT_USE = 4
};
enum class MultisizeMeasurementsColumns: qint8
{
Name = 0,
BaseValue = 1,
ShiftA = 2,
ShiftB = 3, // optional if not required
ShiftC = 4, // optional if not required
FullName = 5, // optional
Description = 6, // optional
LAST_DO_NOT_USE = 7
};
namespace Ui {
class DialogMeasurementsCSVColumns;
}
class DialogMeasurementsCSVColumns : public QDialog
{
Q_OBJECT
public:
DialogMeasurementsCSVColumns(const QString &filename, MeasurementsType type, QWidget *parent = nullptr);
DialogMeasurementsCSVColumns(const QString &filename, MeasurementsType type,
const QList<MeasurementDimension_p> &dimensions, QWidget *parent = nullptr);
virtual ~DialogMeasurementsCSVColumns();
QVector<int> ColumnsMap() const;
void SetWithHeader(bool withHeader);
void SetSeparator(const QChar &separator);
void SetCodec(QTextCodec *codec);
protected:
virtual void changeEvent(QEvent* event) override;
virtual void showEvent(QShowEvent *event) override;
private slots:
void ColumnChanged();
private:
Q_DISABLE_COPY(DialogMeasurementsCSVColumns)
Ui::DialogMeasurementsCSVColumns *ui;
bool m_isInitialized{false};
QString m_fileName;
bool m_withHeader{false};
QChar m_separator{','};
QTextCodec *m_codec{nullptr};
QVector<int> m_columnsMap{};
MeasurementsType m_type;
QList<MeasurementDimension_p> m_dimensions{};
QVector<QObject *> m_hackedWidgets{};
bool ColumnMandatory(int column) const;
QString ColumnHeader(int column) const;
int ImportColumnCount() const;
int MinimumColumns() const;
bool ColumnsValid();
void InitColumnsMap();
void InitColumnsControls();
void InitImportHeaders();
QSharedPointer<QxtCsvModel> CSVModel() const;
void ShowInputPreview();
void ShowImportPreview();
template <class T>
void HackWidget(T **widget);
void HackColumnControls();
void RetranslateLabels();
void SetDefaultColumns();
void CheckStatus();
};
//---------------------------------------------------------------------------------------------------------------------
inline QVector<int> DialogMeasurementsCSVColumns::ColumnsMap() const
{
return m_columnsMap;
}
//---------------------------------------------------------------------------------------------------------------------
inline void DialogMeasurementsCSVColumns::SetWithHeader(bool withHeader)
{
m_withHeader = withHeader;
}
//---------------------------------------------------------------------------------------------------------------------
inline void DialogMeasurementsCSVColumns::SetSeparator(const QChar &separator)
{
m_separator = separator;
}
//---------------------------------------------------------------------------------------------------------------------
inline void DialogMeasurementsCSVColumns::SetCodec(QTextCodec *codec)
{
m_codec = codec;
}
#endif // DIALOGMEASUREMENTSCSVCOLUMNS_H

View File

@ -0,0 +1,204 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>DialogMeasurementsCSVColumns</class>
<widget class="QDialog" name="DialogMeasurementsCSVColumns">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>908</width>
<height>703</height>
</rect>
</property>
<property name="windowTitle">
<string>Setup columns</string>
</property>
<property name="windowIcon">
<iconset resource="../share/resources/tapeicon.qrc">
<normaloff>:/tapeicon/64x64/logo.png</normaloff>:/tapeicon/64x64/logo.png</iconset>
</property>
<layout class="QVBoxLayout" name="verticalLayout_4">
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QGroupBox" name="groupBox">
<property name="title">
<string>Preview</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_3">
<item>
<widget class="QGroupBox" name="groupBox_2">
<property name="title">
<string>Input</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<widget class="QTableWidget" name="tableWidgetInput">
<attribute name="verticalHeaderVisible">
<bool>false</bool>
</attribute>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="groupBox_3">
<property name="title">
<string>Import</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QTableWidget" name="tableWidgetImport">
<attribute name="verticalHeaderVisible">
<bool>false</bool>
</attribute>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="groupBox_4">
<property name="title">
<string>Columns</string>
</property>
<layout class="QFormLayout" name="formLayout">
<property name="horizontalSpacing">
<number>6</number>
</property>
<item row="0" column="0">
<widget class="QLabel" name="labelName">
<property name="text">
<string notr="true">Name:</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QComboBox" name="comboBoxName"/>
</item>
<item row="1" column="0">
<widget class="QLabel" name="labelValue">
<property name="text">
<string notr="true">Value:</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QComboBox" name="comboBoxValue"/>
</item>
<item row="2" column="0">
<widget class="QLabel" name="labelShiftA">
<property name="text">
<string notr="true">ShiftA:</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QComboBox" name="comboBoxShiftA"/>
</item>
<item row="3" column="0">
<widget class="QLabel" name="labelShiftB">
<property name="text">
<string notr="true">ShiftB:</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QComboBox" name="comboBoxShiftB"/>
</item>
<item row="4" column="0">
<widget class="QLabel" name="labelShiftC">
<property name="text">
<string notr="true">ShiftC:</string>
</property>
</widget>
</item>
<item row="4" column="1">
<widget class="QComboBox" name="comboBoxShiftC"/>
</item>
<item row="5" column="0">
<widget class="QLabel" name="labelFullName">
<property name="text">
<string>Full name:</string>
</property>
</widget>
</item>
<item row="5" column="1">
<widget class="QComboBox" name="comboBoxFullName"/>
</item>
<item row="6" column="0">
<widget class="QLabel" name="labelDescription">
<property name="text">
<string>Description:</string>
</property>
</widget>
</item>
<item row="6" column="1">
<widget class="QComboBox" name="comboBoxDescription"/>
</item>
</layout>
</widget>
</item>
</layout>
</item>
<item>
<widget class="QLabel" name="labelStatus">
<property name="text">
<string>Ready</string>
</property>
</widget>
</item>
<item>
<widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
</property>
</widget>
</item>
</layout>
</widget>
<resources>
<include location="../share/resources/tapeicon.qrc"/>
</resources>
<connections>
<connection>
<sender>buttonBox</sender>
<signal>accepted()</signal>
<receiver>DialogMeasurementsCSVColumns</receiver>
<slot>accept()</slot>
<hints>
<hint type="sourcelabel">
<x>248</x>
<y>254</y>
</hint>
<hint type="destinationlabel">
<x>157</x>
<y>274</y>
</hint>
</hints>
</connection>
<connection>
<sender>buttonBox</sender>
<signal>rejected()</signal>
<receiver>DialogMeasurementsCSVColumns</receiver>
<slot>reject()</slot>
<hints>
<hint type="sourcelabel">
<x>316</x>
<y>260</y>
</hint>
<hint type="destinationlabel">
<x>286</x>
<y>274</y>
</hint>
</hints>
</connection>
</connections>
</ui>

View File

@ -44,31 +44,7 @@ DialogNewMeasurements::DialogNewMeasurements(QWidget *parent)
ui->setupUi(this);
InitMTypes();
InitUnits(MeasurementsType::Individual);
InitHeightsList();
InitSizesList();
const VTapeSettings *settings = qApp->TapeSettings();
const int height = static_cast<int>(UnitConvertor(settings->GetDefHeight(), Unit::Cm, MUnit()));
int index = ui->comboBoxBaseHeight->findText(QString().setNum(height));
if (index != -1)
{
ui->comboBoxBaseHeight->setCurrentIndex(index);
}
const int size = static_cast<int>(UnitConvertor(settings->GetDefSize(), Unit::Cm, MUnit()));
index = ui->comboBoxBaseSize->findText(QString().setNum(size));
if (index != -1)
{
ui->comboBoxBaseSize->setCurrentIndex(index);
}
connect(ui->comboBoxMType, QOverload<int>::of(&QComboBox::currentIndexChanged), this,
&DialogNewMeasurements::CurrentTypeChanged);
connect(ui->comboBoxUnit, QOverload<int>::of(&QComboBox::currentIndexChanged), this,
&DialogNewMeasurements::CurrentUnitChanged);
InitUnits();
}
//---------------------------------------------------------------------------------------------------------------------
@ -89,18 +65,6 @@ Unit DialogNewMeasurements::MUnit() const
return static_cast<Unit>(ui->comboBoxUnit->currentData().toInt());
}
//---------------------------------------------------------------------------------------------------------------------
int DialogNewMeasurements::BaseSize() const
{
return ui->comboBoxBaseSize->currentText().toInt();
}
//---------------------------------------------------------------------------------------------------------------------
int DialogNewMeasurements::BaseHeight() const
{
return ui->comboBoxBaseHeight->currentText().toInt();
}
//---------------------------------------------------------------------------------------------------------------------
void DialogNewMeasurements::changeEvent(QEvent *event)
{
@ -109,7 +73,7 @@ void DialogNewMeasurements::changeEvent(QEvent *event)
// retranslate designer form (single inheritance approach)
ui->retranslateUi(this);
InitMTypes();
InitUnits(static_cast<MeasurementsType>(ui->comboBoxMType->currentData().toInt()));
InitUnits();
}
// remember to call base class implementation
@ -137,40 +101,6 @@ void DialogNewMeasurements::showEvent(QShowEvent *event)
isInitialized = true;//first show windows are held
}
//---------------------------------------------------------------------------------------------------------------------
void DialogNewMeasurements::CurrentTypeChanged(int index)
{
const MeasurementsType type = static_cast<MeasurementsType>(ui->comboBoxMType->itemData(index).toInt());
if (type == MeasurementsType::Multisize)
{
ui->comboBoxBaseSize->setEnabled(true);
ui->comboBoxBaseHeight->setEnabled(true);
}
else
{
ui->comboBoxBaseSize->setEnabled(false);
ui->comboBoxBaseHeight->setEnabled(false);
}
InitUnits(type);
}
//---------------------------------------------------------------------------------------------------------------------
void DialogNewMeasurements::CurrentUnitChanged(int index)
{
Q_UNUSED(index)
if (MUnit() != Unit::Inch)
{
int i = ui->comboBoxBaseHeight->currentIndex();
InitHeightsList();
ui->comboBoxBaseHeight->setCurrentIndex(i);
i = ui->comboBoxBaseSize->currentIndex();
InitSizesList();
ui->comboBoxBaseSize->setCurrentIndex(i);
}
}
//---------------------------------------------------------------------------------------------------------------------
void DialogNewMeasurements::InitMTypes()
{
@ -194,23 +124,7 @@ void DialogNewMeasurements::InitMTypes()
}
//---------------------------------------------------------------------------------------------------------------------
void DialogNewMeasurements::InitHeightsList()
{
const QStringList list = VMeasurement::WholeListHeights(MUnit());
ui->comboBoxBaseHeight->clear();
ui->comboBoxBaseHeight->addItems(list);
}
//---------------------------------------------------------------------------------------------------------------------
void DialogNewMeasurements::InitSizesList()
{
const QStringList list = VMeasurement::WholeListSizes(MUnit());
ui->comboBoxBaseSize->clear();
ui->comboBoxBaseSize->addItems(list);
}
//---------------------------------------------------------------------------------------------------------------------
void DialogNewMeasurements::InitUnits(const MeasurementsType &type)
void DialogNewMeasurements::InitUnits()
{
int val = static_cast<int>(Unit::Cm);
if (ui->comboBoxUnit->currentIndex() != -1)
@ -220,12 +134,11 @@ void DialogNewMeasurements::InitUnits(const MeasurementsType &type)
ui->comboBoxUnit->blockSignals(true);
ui->comboBoxUnit->clear();
ui->comboBoxUnit->addItem(tr("Centimeters"), static_cast<int>(Unit::Cm));
ui->comboBoxUnit->addItem(tr("Millimiters"), static_cast<int>(Unit::Mm));
if (type == MeasurementsType::Individual)
{
ui->comboBoxUnit->addItem(tr("Inches"), static_cast<int>(Unit::Inch));
}
ui->comboBoxUnit->addItem(tr("Inches"), static_cast<int>(Unit::Inch));
ui->comboBoxUnit->setCurrentIndex(-1);
ui->comboBoxUnit->blockSignals(false);

View File

@ -48,26 +48,18 @@ public:
MeasurementsType Type() const;
Unit MUnit() const;
int BaseSize() const;
int BaseHeight() const;
protected:
virtual void changeEvent(QEvent* event) override;
virtual void showEvent(QShowEvent *event) override;
private slots:
void CurrentTypeChanged(int index);
void CurrentUnitChanged(int index);
private:
Q_DISABLE_COPY(DialogNewMeasurements)
Ui::DialogNewMeasurements *ui;
bool isInitialized;
void InitMTypes();
void InitHeightsList();
void InitSizesList();
void InitUnits(const MeasurementsType &type);
void InitUnits();
};
#endif // DIALOGNEWMEASUREMENTS_H

View File

@ -9,8 +9,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>244</width>
<height>185</height>
<width>220</width>
<height>104</height>
</rect>
</property>
<property name="windowTitle">
@ -60,64 +60,6 @@
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_2">
<property name="text">
<string>Base size:</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QComboBox" name="comboBoxBaseSize">
<property name="enabled">
<bool>false</bool>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<property name="minimumContentsLength">
<number>3</number>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="label_3">
<property name="text">
<string>Base height:</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QComboBox" name="comboBoxBaseHeight">
<property name="enabled">
<bool>false</bool>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<property name="minimumContentsLength">
<number>4</number>
</property>
</widget>
</item>
</layout>
</item>
<item>

View File

@ -0,0 +1,655 @@
/************************************************************************
**
** @file dialogrestrictdimension.cpp
** @author Roman Telezhynskyi <dismine(at)gmail.com>
** @date 5 10, 2020
**
** @brief
** @copyright
** This source code is part of the Valentina project, a pattern making
** program, whose allow create and modeling patterns of clothing.
** Copyright (C) 2020 Valentina project
** <https://gitlab.com/smart-pattern/valentina> All Rights Reserved.
**
** Valentina is free software: you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation, either version 3 of the License, or
** (at your option) any later version.
**
** Valentina is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
** GNU General Public License for more details.
**
** You should have received a copy of the GNU General Public License
** along with Valentina. If not, see <http://www.gnu.org/licenses/>.
**
*************************************************************************/
#include "dialogrestrictdimension.h"
#include "ui_dialogrestrictdimension.h"
#include <QTableWidgetItem>
#include "../vpatterndb/variables/vmeasurement.h"
#include "../vwidgets/vdecorationaligningdelegate.h"
namespace
{
//---------------------------------------------------------------------------------------------------------------------
QVector<int> FilterByMinimum(const QVector<int> &base, int restriction)
{
if (restriction <= 0)
{
return base;
}
QVector<int> filtered;
filtered.reserve(base.size());
for(auto &b : base)
{
if (b >= restriction)
{
filtered.append(b);
}
}
return filtered;
}
//---------------------------------------------------------------------------------------------------------------------
QVector<int> FilterByMaximum(const QVector<int> &base, int restriction)
{
if (restriction <= 0)
{
return base;
}
QVector<int> filtered;
filtered.reserve(base.size());
for(auto &b : base)
{
if (b <= restriction)
{
filtered.append(b);
}
}
return filtered;
}
}
//---------------------------------------------------------------------------------------------------------------------
DialogRestrictDimension::DialogRestrictDimension(const QList<MeasurementDimension_p> &dimensions,
const QMap<QString, QPair<int, int>> &restrictions,
bool oneDimesionRestriction, bool fullCircumference,
QWidget *parent) :
QDialog(parent),
ui(new Ui::DialogRestrictDimension),
m_oneDimesionRestriction(oneDimesionRestriction),
m_fullCircumference(fullCircumference),
m_dimensions(dimensions),
m_restrictions(restrictions)
{
ui->setupUi(this);
ui->tableWidget->setItemDelegate(
new VDecorationAligningDelegate(Qt::AlignHCenter | Qt::AlignCenter, ui->tableWidget));
connect(ui->tableWidget, &QTableWidget::itemSelectionChanged, this, &DialogRestrictDimension::RowSelected);
connect(ui->comboBoxDimensionA, QOverload<int>::of(&QComboBox::currentIndexChanged), this,
&DialogRestrictDimension::DimensionAChanged);
connect(ui->comboBoxMin, QOverload<int>::of(&QComboBox::currentIndexChanged), this,
&DialogRestrictDimension::MinRestrictionChanged);
connect(ui->comboBoxMax, QOverload<int>::of(&QComboBox::currentIndexChanged), this,
&DialogRestrictDimension::MaxRestrictionChanged);
InitDimensionsBaseValues();
InitTable();
}
//---------------------------------------------------------------------------------------------------------------------
DialogRestrictDimension::~DialogRestrictDimension()
{
delete ui;
}
//---------------------------------------------------------------------------------------------------------------------
void DialogRestrictDimension::changeEvent(QEvent *event)
{
if (event->type() == QEvent::LanguageChange)
{
// retranslate designer form (single inheritance approach)
ui->retranslateUi(this);
auto RetranslateControls = [this](int index, QLabel *name, QComboBox *control)
{
SCASSERT(name != nullptr)
SCASSERT(control != nullptr)
if (m_dimensions.size() > index)
{
MeasurementDimension_p dimension = m_dimensions.at(index);
name->setText(VAbstartMeasurementDimension::DimensionName(dimension->Type())+QChar(':'));
name->setToolTip(VAbstartMeasurementDimension::DimensionToolTip(dimension->Type(),
dimension->IsCircumference(),
m_fullCircumference));
InitDimensionGradation(dimension, control);
}
};
if (not m_oneDimesionRestriction)
{
RetranslateControls(0, ui->labelDimensionA, ui->comboBoxDimensionA);
}
}
// remember to call base class implementation
QDialog::changeEvent(event);
}
//---------------------------------------------------------------------------------------------------------------------
void DialogRestrictDimension::RowSelected()
{
EnableRestrictionControls(false);
QTableWidgetItem *item = ui->tableWidget->currentItem();
if (item)
{
int base1 = 0;
int base2 = 0;
MeasurementDimension_p dimension;
if (m_oneDimesionRestriction)
{
base1 = item->data(Qt::UserRole).toInt();
if (m_dimensions.size() > 1)
{
dimension = m_dimensions.at(1);
}
}
else
{
base1 = ui->comboBoxDimensionA->currentData().toInt();
base2 = item->data(Qt::UserRole).toInt();
if (m_dimensions.size() > 2)
{
dimension = m_dimensions.at(2);
}
}
QPair<int, int> restriction = m_restrictions.value(VMeasurement::CorrectionHash(base1, base2),
QPair<int, int>(0, 0));
if (dimension.isNull())
{
return;
}
const QVector<int> bases = dimension->ValidBases();
ui->comboBoxMin->blockSignals(true);
ui->comboBoxMin->clear();
QVector<int> filtered = FilterByMaximum(bases, restriction.second);
FillBases(filtered, dimension, ui->comboBoxMin);
int index = ui->comboBoxMin->findData(restriction.first);
ui->comboBoxMin->setCurrentIndex(index != -1 ? index : 0);
ui->comboBoxMin->blockSignals(false);
ui->comboBoxMax->blockSignals(true);
ui->comboBoxMax->clear();
filtered = FilterByMinimum(bases, restriction.first);
FillBases(FilterByMinimum(bases, restriction.first), dimension, ui->comboBoxMax);
index = ui->comboBoxMax->findData(restriction.second);
ui->comboBoxMax->setCurrentIndex(index != -1 ? index : ui->comboBoxMax->count() - 1);
ui->comboBoxMax->blockSignals(false);
EnableRestrictionControls(true);
}
}
//---------------------------------------------------------------------------------------------------------------------
void DialogRestrictDimension::DimensionAChanged()
{
InitTable();
}
//---------------------------------------------------------------------------------------------------------------------
void DialogRestrictDimension::MinRestrictionChanged()
{
QTableWidgetItem *item = ui->tableWidget->currentItem();
if (item)
{
int base1 = 0;
int base2 = 0;
if (m_oneDimesionRestriction)
{
base1 = item->data(Qt::UserRole).toInt();
}
else
{
base1 = ui->comboBoxDimensionA->currentData().toInt();
base2 = item->data(Qt::UserRole).toInt();
}
const QString coordinates = VMeasurement::CorrectionHash(base1, base2);
QPair<int, int> restriction = m_restrictions.value(coordinates, QPair<int, int>(0, 0));
restriction.first = ui->comboBoxMin->currentData().toInt();
m_restrictions.insert(coordinates, restriction);
const int currentRow = ui->tableWidget->currentRow();
RefreshTable();
ui->tableWidget->blockSignals(true);
ui->tableWidget->selectRow(currentRow);
ui->tableWidget->blockSignals(false);
RowSelected();
}
}
//---------------------------------------------------------------------------------------------------------------------
void DialogRestrictDimension::MaxRestrictionChanged()
{
QTableWidgetItem *item = ui->tableWidget->currentItem();
if (item)
{
int base1 = 0;
int base2 = 0;
if (m_oneDimesionRestriction)
{
base1 = item->data(Qt::UserRole).toInt();
}
else
{
base1 = ui->comboBoxDimensionA->currentData().toInt();
base2 = item->data(Qt::UserRole).toInt();
}
const QString coordinates = VMeasurement::CorrectionHash(base1, base2);
QPair<int, int> restriction = m_restrictions.value(coordinates, QPair<int, int>(0, 0));
restriction.second = ui->comboBoxMax->currentData().toInt();
m_restrictions.insert(coordinates, restriction);
const int currentRow = ui->tableWidget->currentRow();
RefreshTable();
ui->tableWidget->blockSignals(true);
ui->tableWidget->selectRow(currentRow);
ui->tableWidget->blockSignals(false);
RowSelected();
}
}
//---------------------------------------------------------------------------------------------------------------------
void DialogRestrictDimension::InitDimensionsBaseValues()
{
auto DimensionsBaseValue = [this](int index, QLabel *name, QComboBox *control)
{
SCASSERT(name != nullptr)
SCASSERT(control != nullptr)
if (m_dimensions.size() > index)
{
MeasurementDimension_p dimension = m_dimensions.at(index);
const QString unit = UnitsToStr(dimension->Units(), true);
name->setText(VAbstartMeasurementDimension::DimensionName(dimension->Type())+QChar(':'));
name->setToolTip(VAbstartMeasurementDimension::DimensionToolTip(dimension->Type(),
dimension->IsCircumference(),
m_fullCircumference));
InitDimensionGradation(dimension, control);
}
};
if (not m_oneDimesionRestriction)
{
if (m_dimensions.size() > 0)
{
DimensionsBaseValue(0, ui->labelDimensionA, ui->comboBoxDimensionA);
}
else
{
ui->labelDimensionA->setVisible(false);
ui->comboBoxDimensionA->setVisible(false);
}
}
else
{
ui->labelDimensionA->setVisible(false);
ui->comboBoxDimensionA->setVisible(false);
}
}
//---------------------------------------------------------------------------------------------------------------------
void DialogRestrictDimension::InitDimensionGradation(const MeasurementDimension_p &dimension, QComboBox *control)
{
SCASSERT(control != nullptr)
int current = -1;
if (control->currentIndex() != -1)
{
current = control->currentData().toInt();
}
control->blockSignals(true);
control->clear();
FillBases(dimension->ValidBases(), dimension, control);
int i = control->findData(current);
if (i != -1)
{
control->setCurrentIndex(i);
control->blockSignals(false);
}
else
{
control->blockSignals(false);
control->setCurrentIndex(0);
}
}
//---------------------------------------------------------------------------------------------------------------------
void DialogRestrictDimension::InitTable()
{
ui->tableWidget->blockSignals(true);
ui->tableWidget->clear();
auto InitHeaders = [this](int index)
{
if (m_dimensions.size() > index)
{
MeasurementDimension_p dimensionA = m_dimensions.at(index-1);
const QVector<int> basesA = dimensionA->ValidBases();
ui->tableWidget->setRowCount(basesA.size());
ui->tableWidget->setVerticalHeaderLabels(DimensionLabels(basesA, dimensionA));
MeasurementDimension_p dimensionB = m_dimensions.at(index);
const QVector<int> basesB = dimensionB->ValidBases();
ui->tableWidget->setColumnCount(basesB.size());
ui->tableWidget->setHorizontalHeaderLabels(DimensionLabels(basesB, dimensionB));
}
};
InitHeaders(m_oneDimesionRestriction ? 1 : 2);
ui->tableWidget->blockSignals(false);
RefreshTable();
ui->tableWidget->selectRow(0);
}
//---------------------------------------------------------------------------------------------------------------------
void DialogRestrictDimension::RefreshTable()
{
QVector<int> basesRow;
QVector<int> basesColumn;
if (m_oneDimesionRestriction)
{
if (m_dimensions.size() >= 2)
{
MeasurementDimension_p dimensionA = m_dimensions.at(0);
basesRow = dimensionA->ValidBases();
MeasurementDimension_p dimensionB = m_dimensions.at(1);
basesColumn = dimensionB->ValidBases();
}
else
{
return;
}
}
else
{
if (m_dimensions.size() >= 3)
{
MeasurementDimension_p dimensionA = m_dimensions.at(1);
basesRow = dimensionA->ValidBases();
MeasurementDimension_p dimensionB = m_dimensions.at(2);
basesColumn = dimensionB->ValidBases();
}
else
{
return;
}
}
ui->tableWidget->blockSignals(true);
ui->tableWidget->clearContents();
for(int row=0; row < basesRow.size(); ++row)
{
for(int column=0; column < basesColumn.size(); ++column)
{
AddCell(row, column, basesRow.at(row), basesColumn.at(column));
}
}
ui->tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
ui->tableWidget->verticalHeader()->setSectionResizeMode(QHeaderView::Stretch);
ui->tableWidget->blockSignals(false);
}
//---------------------------------------------------------------------------------------------------------------------
void DialogRestrictDimension::AddCell(int row, int column, int rowValue, int columnValue)
{
auto *item = new QTableWidgetItem();
item->setData(Qt::UserRole, rowValue);
int base1 = 0;
int base2 = 0;
MeasurementDimension_p dimension;
QVector<int> bases;
if (m_oneDimesionRestriction)
{
base1 = rowValue;
if (m_dimensions.size() >= 2)
{
dimension = m_dimensions.at(1);
bases = dimension->ValidBases();
}
}
else
{
base1 = ui->comboBoxDimensionA->currentData().toInt();
base2 = rowValue;
if (m_dimensions.size() >= 3)
{
dimension = m_dimensions.at(2);
bases = dimension->ValidBases();
}
}
QPair<int, int> restriction = m_restrictions.value(VMeasurement::CorrectionHash(base1, base2),
QPair<int, int>(0, 0));
int min = INT32_MIN;
int max = INT32_MAX;
if (not dimension.isNull())
{
min = bases.indexOf(restriction.first) != -1 ? restriction.first : dimension->MinValue();
max = bases.indexOf(restriction.second) != -1 ? restriction.second : dimension->MaxValue();
if (max < min)
{
min = dimension->MinValue();
max = dimension->MaxValue();
}
}
const bool leftRestriction = columnValue >= min;
const bool rightRestriction = columnValue <= max;
if (leftRestriction && rightRestriction)
{
item->setIcon(QIcon("://icon/24x24/star.png"));
}
else
{
item->setIcon(QIcon("://icon/24x24/close.png"));
}
// set the item non-editable (view only), and non-selectable
Qt::ItemFlags flags = item->flags();
flags &= ~(Qt::ItemIsEditable); // reset/clear the flag
item->setFlags(flags);
ui->tableWidget->setItem(row, column, item);
}
//---------------------------------------------------------------------------------------------------------------------
void DialogRestrictDimension::EnableRestrictionControls(bool enable)
{
if (not enable)
{
ui->comboBoxMin->blockSignals(true);
ui->comboBoxMin->setCurrentIndex(-1);
ui->comboBoxMin->blockSignals(false);
ui->comboBoxMax->blockSignals(true);
ui->comboBoxMax->setCurrentIndex(-1);
ui->comboBoxMax->blockSignals(false);
}
ui->groupBoxRestriction->setEnabled(enable);
}
//---------------------------------------------------------------------------------------------------------------------
void DialogRestrictDimension::FillBases(const QVector<int> &bases, const MeasurementDimension_p &dimension,
QComboBox *control)
{
SCASSERT(control != nullptr)
const DimesionLabels labels = dimension->Labels();
const QString units = UnitsToStr(dimension->Units(), true);
if (dimension->Type() == MeasurementDimension::X)
{
for(auto base : bases)
{
if (labels.contains(base) && not labels.value(base).isEmpty())
{
control->addItem(labels.value(base), base);
}
else
{
control->addItem(QString("%1 %2").arg(base).arg(units), base);
}
}
}
else if (dimension->Type() == MeasurementDimension::Y)
{
for(auto base : bases)
{
if (labels.contains(base) && not labels.value(base).isEmpty())
{
control->addItem(labels.value(base), base);
}
else
{
if (dimension->IsCircumference())
{
control->addItem(QString("%1 %2").arg(m_fullCircumference ? base*2 : base).arg(units), base);
}
else
{
control->addItem(QString::number(base), base);
}
}
}
}
else if (dimension->Type() == MeasurementDimension::W || dimension->Type() == MeasurementDimension::Z)
{
for(auto base : bases)
{
if (labels.contains(base) && not labels.value(base).isEmpty())
{
control->addItem(labels.value(base), base);
}
else
{
control->addItem(QString("%1 %2").arg(m_fullCircumference ? base*2 : base).arg(units), base);
}
}
}
}
//---------------------------------------------------------------------------------------------------------------------
QStringList DialogRestrictDimension::DimensionLabels(const QVector<int> &bases, const MeasurementDimension_p &dimension)
{
const bool showUnits = dimension->IsCircumference() || dimension->Type() == MeasurementDimension::X;
const QString units = showUnits ? UnitsToStr(dimension->Units(), true) : QString();
const DimesionLabels dimensionLabels = dimension->Labels();
QStringList labels;
if (dimension->Type() == MeasurementDimension::X)
{
for(auto base : bases)
{
if (dimensionLabels.contains(base) && not dimensionLabels.value(base).isEmpty())
{
labels.append(dimensionLabels.value(base));
}
else
{
labels.append(QString("%1 %2").arg(base).arg(units));
}
}
}
else if (dimension->Type() == MeasurementDimension::Y)
{
for(auto base : bases)
{
if (dimensionLabels.contains(base) && not dimensionLabels.value(base).isEmpty())
{
labels.append(dimensionLabels.value(base));
}
else
{
if (dimension->IsCircumference())
{
labels.append(QString("%1 %2").arg(m_fullCircumference ? base*2 : base).arg(units));
}
else
{
labels.append(QString::number(base));
}
}
}
}
else if (dimension->Type() == MeasurementDimension::W || dimension->Type() == MeasurementDimension::Z)
{
for(auto base : bases)
{
if (dimensionLabels.contains(base) && not dimensionLabels.value(base).isEmpty())
{
labels.append(dimensionLabels.value(base));
}
else
{
labels.append(QString("%1 %2").arg(m_fullCircumference ? base*2 : base).arg(units));
}
}
}
return labels;
}

View File

@ -0,0 +1,95 @@
/************************************************************************
**
** @file dialogrestrictdimension.h
** @author Roman Telezhynskyi <dismine(at)gmail.com>
** @date 5 10, 2020
**
** @brief
** @copyright
** This source code is part of the Valentina project, a pattern making
** program, whose allow create and modeling patterns of clothing.
** Copyright (C) 2020 Valentina project
** <https://gitlab.com/smart-pattern/valentina> All Rights Reserved.
**
** Valentina is free software: you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation, either version 3 of the License, or
** (at your option) any later version.
**
** Valentina is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
** GNU General Public License for more details.
**
** You should have received a copy of the GNU General Public License
** along with Valentina. If not, see <http://www.gnu.org/licenses/>.
**
*************************************************************************/
#ifndef DIALOGRESTRICTDIMENSION_H
#define DIALOGRESTRICTDIMENSION_H
#include <QDialog>
#include <QMap>
#include "../vformat/vdimensions.h"
namespace Ui
{
class DialogRestrictDimension;
}
class QTableWidgetItem;
class DialogRestrictDimension : public QDialog
{
Q_OBJECT
public:
DialogRestrictDimension(const QList<MeasurementDimension_p> &dimensions,
const QMap<QString, QPair<int, int>> &restrictions, bool oneDimesionRestriction,
bool fullCircumference, QWidget *parent = nullptr);
virtual ~DialogRestrictDimension();
QMap<QString, QPair<int, int> > Restrictions() const;
protected:
virtual void changeEvent(QEvent* event) override;
protected slots:
void RowSelected();
void DimensionAChanged();
void MinRestrictionChanged();
void MaxRestrictionChanged();
private:
Q_DISABLE_COPY(DialogRestrictDimension)
Ui::DialogRestrictDimension *ui;
bool m_oneDimesionRestriction;
bool m_fullCircumference;
QList<MeasurementDimension_p> m_dimensions;
QMap<QString, QPair<int, int>> m_restrictions;
void InitDimensionsBaseValues();
void InitDimensionGradation(const MeasurementDimension_p &dimension, QComboBox *control);
void InitTable();
void RefreshTable();
void AddCell(int row, int column, int rowValue, int columnValue);
void EnableRestrictionControls(bool enable);
void FillBases(const QVector<int> &bases, const MeasurementDimension_p &dimension, QComboBox *control);
QStringList DimensionLabels(const QVector<int> &bases, const MeasurementDimension_p &dimension);
};
//---------------------------------------------------------------------------------------------------------------------
inline QMap<QString, QPair<int, int> > DialogRestrictDimension::Restrictions() const
{
return m_restrictions;
}
#endif // DIALOGRESTRICTDIMENSION_H

View File

@ -0,0 +1,180 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>DialogRestrictDimension</class>
<widget class="QDialog" name="DialogRestrictDimension">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>699</width>
<height>566</height>
</rect>
</property>
<property name="windowTitle">
<string>Restrict dimension</string>
</property>
<property name="windowIcon">
<iconset resource="../share/resources/tapeicon.qrc">
<normaloff>:/tapeicon/64x64/logo.png</normaloff>:/tapeicon/64x64/logo.png</iconset>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<layout class="QGridLayout" name="gridLayout_2">
<item row="0" column="0">
<spacer name="horizontalSpacer_3">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="0" column="1">
<widget class="QLabel" name="labelDimensionA">
<property name="text">
<string>Dimension A:</string>
</property>
</widget>
</item>
<item row="0" column="2">
<widget class="QComboBox" name="comboBoxDimensionA"/>
</item>
<item row="0" column="3">
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
<item>
<widget class="QTableWidget" name="tableWidget">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>4</verstretch>
</sizepolicy>
</property>
<property name="editTriggers">
<set>QAbstractItemView::CurrentChanged|QAbstractItemView::SelectedClicked</set>
</property>
<property name="selectionMode">
<enum>QAbstractItemView::SingleSelection</enum>
</property>
<property name="selectionBehavior">
<enum>QAbstractItemView::SelectRows</enum>
</property>
<property name="iconSize">
<size>
<width>24</width>
<height>24</height>
</size>
</property>
</widget>
</item>
<item>
<widget class="QGroupBox" name="groupBoxRestriction">
<property name="enabled">
<bool>false</bool>
</property>
<property name="title">
<string>Restriction</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<widget class="QLabel" name="label_4">
<property name="text">
<string>Min:</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QComboBox" name="comboBoxMin"/>
</item>
<item row="0" column="2">
<spacer name="horizontalSpacer_4">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="0" column="3">
<widget class="QLabel" name="label_5">
<property name="text">
<string>Max:</string>
</property>
</widget>
</item>
<item row="0" column="4">
<widget class="QComboBox" name="comboBoxMax"/>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
</property>
</widget>
</item>
</layout>
</widget>
<resources>
<include location="../share/resources/tapeicon.qrc"/>
</resources>
<connections>
<connection>
<sender>buttonBox</sender>
<signal>accepted()</signal>
<receiver>DialogRestrictDimension</receiver>
<slot>accept()</slot>
<hints>
<hint type="sourcelabel">
<x>248</x>
<y>254</y>
</hint>
<hint type="destinationlabel">
<x>157</x>
<y>274</y>
</hint>
</hints>
</connection>
<connection>
<sender>buttonBox</sender>
<signal>rejected()</signal>
<receiver>DialogRestrictDimension</receiver>
<slot>reject()</slot>
<hints>
<hint type="sourcelabel">
<x>316</x>
<y>260</y>
</hint>
<hint type="destinationlabel">
<x>286</x>
<y>274</y>
</hint>
</hints>
</connection>
</connections>
</ui>

View File

@ -0,0 +1,604 @@
/************************************************************************
**
** @file dialogsetupmultisize.cpp
** @author Roman Telezhynskyi <dismine(at)gmail.com>
** @date 26 9, 2020
**
** @brief
** @copyright
** This source code is part of the Valentina project, a pattern making
** program, whose allow create and modeling patterns of clothing.
** Copyright (C) 2020 Valentina project
** <https://gitlab.com/smart-pattern/valentina> All Rights Reserved.
**
** Valentina is free software: you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation, either version 3 of the License, or
** (at your option) any later version.
**
** Valentina is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
** GNU General Public License for more details.
**
** You should have received a copy of the GNU General Public License
** along with Valentina. If not, see <http://www.gnu.org/licenses/>.
**
*************************************************************************/
#include "dialogsetupmultisize.h"
#include "ui_dialogsetupmultisize.h"
#include <QPushButton>
#include <QShowEvent>
#include "../mapplication.h"
#include "../vmisc/backport/qoverload.h"
//---------------------------------------------------------------------------------------------------------------------
DialogSetupMultisize::DialogSetupMultisize(Unit unit, QWidget *parent) :
QDialog(parent),
ui(new Ui::DialogSetupMultisize),
m_xDimension(QSharedPointer<VXMeasurementDimension>::create(unit)),
m_yDimension(QSharedPointer<VYMeasurementDimension>::create(unit)),
m_wDimension(QSharedPointer<VWMeasurementDimension>::create(unit)),
m_zDimension(QSharedPointer<VZMeasurementDimension>::create(unit))
{
ui->setupUi(this);
ui->labelError->clear();
ui->checkBoxYDimensionCircumference->setChecked(m_yDimension->IsCircumference());
InitXDimension();
InitYDimension();
InitWDimension();
InitZDimension();
// height
connect(ui->spinBoxXDimensionMinValue, QOverload<int>::of(&QSpinBox::valueChanged),
this, [this](int value)
{
DimensionMinValueChanged(value, ui->spinBoxXDimensionMaxValue, ui->comboBoxXDimensionStep,
ui->comboBoxXDimensionBase, m_xDimension);
});
connect(ui->spinBoxXDimensionMaxValue, QOverload<int>::of(&QSpinBox::valueChanged),
this, [this](int value)
{
DimensionMaxValueChanged(value, ui->spinBoxXDimensionMinValue, ui->comboBoxXDimensionStep,
ui->comboBoxXDimensionBase, m_xDimension);
});
connect(ui->comboBoxXDimensionStep, QOverload<int>::of(&QComboBox::currentIndexChanged),
this, [this](int index)
{
DimensionStepChanged(index, ui->comboBoxXDimensionStep, ui->comboBoxXDimensionBase, m_xDimension);
});
connect(ui->comboBoxXDimensionBase, QOverload<int>::of(&QComboBox::currentIndexChanged),
this, [this](int index)
{
DimensionBaseChanged(index, ui->comboBoxXDimensionBase, m_xDimension);
});
// size
connect(ui->spinBoxYDimensionMinValue, QOverload<int>::of(&QSpinBox::valueChanged),
this, [this](int value)
{
DimensionMinValueChanged(value, ui->spinBoxYDimensionMaxValue, ui->comboBoxYDimensionStep,
ui->comboBoxYDimensionBase, m_yDimension);
});
connect(ui->spinBoxYDimensionMaxValue, QOverload<int>::of(&QSpinBox::valueChanged),
this, [this](int value)
{
DimensionMaxValueChanged(value, ui->spinBoxYDimensionMinValue, ui->comboBoxYDimensionStep,
ui->comboBoxYDimensionBase, m_yDimension);
});
connect(ui->comboBoxYDimensionStep, QOverload<int>::of(&QComboBox::currentIndexChanged),
this, [this](int index)
{
DimensionStepChanged(index, ui->comboBoxYDimensionStep, ui->comboBoxYDimensionBase, m_yDimension);
});
connect(ui->comboBoxYDimensionBase, QOverload<int>::of(&QComboBox::currentIndexChanged),
this, [this](int index)
{
DimensionBaseChanged(index, ui->comboBoxYDimensionBase, m_yDimension);
});
// hip
connect(ui->spinBoxWDimensionMinValue, QOverload<int>::of(&QSpinBox::valueChanged),
this, [this](int value)
{
DimensionMinValueChanged(value, ui->spinBoxWDimensionMaxValue, ui->comboBoxWDimensionStep,
ui->comboBoxWDimensionBase, m_wDimension);
});
connect(ui->spinBoxWDimensionMaxValue, QOverload<int>::of(&QSpinBox::valueChanged),
this, [this](int value)
{
DimensionMaxValueChanged(value, ui->spinBoxWDimensionMinValue, ui->comboBoxWDimensionStep,
ui->comboBoxWDimensionBase, m_wDimension);
});
connect(ui->comboBoxWDimensionStep, QOverload<int>::of(&QComboBox::currentIndexChanged),
this, [this](int index)
{
DimensionStepChanged(index, ui->comboBoxWDimensionStep, ui->comboBoxWDimensionBase, m_wDimension);
});
connect(ui->comboBoxWDimensionBase, QOverload<int>::of(&QComboBox::currentIndexChanged),
this, [this](int index)
{
DimensionBaseChanged(index, ui->comboBoxWDimensionBase, m_wDimension);
});
// waist
connect(ui->spinBoxZDimensionMinValue, QOverload<int>::of(&QSpinBox::valueChanged),
this, [this](int value)
{
DimensionMinValueChanged(value, ui->spinBoxZDimensionMaxValue, ui->comboBoxZDimensionStep,
ui->comboBoxZDimensionBase, m_zDimension);
});
connect(ui->spinBoxZDimensionMaxValue, QOverload<int>::of(&QSpinBox::valueChanged),
this, [this](int value)
{
DimensionMaxValueChanged(value, ui->spinBoxZDimensionMinValue, ui->comboBoxZDimensionStep,
ui->comboBoxZDimensionBase, m_zDimension);
});
connect(ui->comboBoxZDimensionStep, QOverload<int>::of(&QComboBox::currentIndexChanged),
this, [this](int index)
{
DimensionStepChanged(index, ui->comboBoxZDimensionStep, ui->comboBoxZDimensionBase, m_zDimension);
});
connect(ui->comboBoxZDimensionBase, QOverload<int>::of(&QComboBox::currentIndexChanged),
this, [this](int index)
{
DimensionBaseChanged(index, ui->comboBoxZDimensionBase, m_zDimension);
});
connect(ui->groupBoxXDimension, &QGroupBox::clicked, this, [this](){CheckState();});
connect(ui->groupBoxYDimension, &QGroupBox::clicked, this, [this](){CheckState();});
connect(ui->groupBoxWDimension, &QGroupBox::clicked, this, [this](){CheckState();});
connect(ui->groupBoxZDimension, &QGroupBox::clicked, this, [this](){CheckState();});
connect(ui->checkBoxFullCircumference, &QCheckBox::stateChanged,
this, &DialogSetupMultisize::ShowFullCircumference);
connect(ui->checkBoxYDimensionCircumference, &QCheckBox::stateChanged,
this, &DialogSetupMultisize::YDimensionCircumferenceChanged);
CheckState();
}
//---------------------------------------------------------------------------------------------------------------------
DialogSetupMultisize::~DialogSetupMultisize()
{
delete ui;
}
//---------------------------------------------------------------------------------------------------------------------
QVector<MeasurementDimension_p> DialogSetupMultisize::Dimensions() const
{
QVector<MeasurementDimension_p> dimensions;
if (ui->groupBoxXDimension->isChecked())
{
dimensions.append(m_xDimension);
}
if (ui->groupBoxYDimension->isChecked())
{
dimensions.append(m_yDimension);
}
if (ui->groupBoxWDimension->isChecked())
{
dimensions.append(m_wDimension);
}
if (ui->groupBoxZDimension->isChecked())
{
dimensions.append(m_zDimension);
}
return dimensions;
}
//---------------------------------------------------------------------------------------------------------------------
bool DialogSetupMultisize::FullCircumference() const
{
return ui->checkBoxFullCircumference->isChecked();
}
//---------------------------------------------------------------------------------------------------------------------
void DialogSetupMultisize::changeEvent(QEvent *event)
{
if (event->type() == QEvent::LanguageChange)
{
// retranslate designer form (single inheritance approach)
ui->retranslateUi(this);
}
// remember to call base class implementation
QDialog::changeEvent(event);
}
//---------------------------------------------------------------------------------------------------------------------
void DialogSetupMultisize::showEvent(QShowEvent *event)
{
QDialog::showEvent( event );
if ( event->spontaneous() )
{
return;
}
if (m_isInitialized)
{
return;
}
// do your init stuff here
setMaximumSize(size());
setMinimumSize(size());
m_isInitialized = true;//first show windows are held
}
//---------------------------------------------------------------------------------------------------------------------
void DialogSetupMultisize::ShowFullCircumference()
{
auto ShowDimensionFullCircumference = [this](QSpinBox *spinboxMinValue, QSpinBox *spinboxMaxValue,
QComboBox *comboBoxStep, QComboBox *comboBoxBase,
const MeasurementDimension_p &dimension)
{
SCASSERT(spinboxMinValue != nullptr)
SCASSERT(spinboxMaxValue != nullptr)
SCASSERT(comboBoxStep != nullptr)
SCASSERT(comboBoxBase != nullptr)
InitDimension(spinboxMinValue, spinboxMaxValue, comboBoxStep, dimension);
UpdateBase(comboBoxBase, dimension);
comboBoxBase->blockSignals(true);
comboBoxBase->setCurrentIndex(-1);
comboBoxBase->blockSignals(false);
};
ShowDimensionFullCircumference(ui->spinBoxYDimensionMinValue, ui->spinBoxYDimensionMaxValue,
ui->comboBoxYDimensionStep, ui->comboBoxYDimensionBase, m_yDimension);
ShowDimensionFullCircumference(ui->spinBoxWDimensionMinValue, ui->spinBoxWDimensionMaxValue,
ui->comboBoxWDimensionStep, ui->comboBoxWDimensionBase, m_wDimension);
ShowDimensionFullCircumference(ui->spinBoxZDimensionMinValue, ui->spinBoxZDimensionMaxValue,
ui->comboBoxZDimensionStep, ui->comboBoxZDimensionBase, m_zDimension);
CheckState();
}
//---------------------------------------------------------------------------------------------------------------------
void DialogSetupMultisize::YDimensionCircumferenceChanged()
{
bool checked = ui->checkBoxYDimensionCircumference->isChecked();
m_yDimension->SetCircumference(checked);
const bool c = m_yDimension->IsCircumference();
const QString unitStr = c ? " " + UnitsToStr(m_yDimension->Units()) : QString();
ui->spinBoxYDimensionMinValue->setSuffix(unitStr);
ui->spinBoxYDimensionMaxValue->setSuffix(unitStr);
InitDimension(ui->spinBoxYDimensionMinValue, ui->spinBoxYDimensionMaxValue, ui->comboBoxYDimensionStep,
m_yDimension);
UpdateBase(ui->comboBoxYDimensionBase, m_yDimension);
ui->comboBoxYDimensionBase->blockSignals(true);
ui->comboBoxYDimensionBase->setCurrentIndex(-1);
ui->comboBoxYDimensionBase->blockSignals(false);
bool ok = false;
const int base = ui->comboBoxYDimensionBase->currentData().toInt(&ok);
m_yDimension->SetBaseValue(ok ? base : -1);
CheckState();
}
//---------------------------------------------------------------------------------------------------------------------
void DialogSetupMultisize::CheckState()
{
ui->labelError->clear();
bool xDimensionValid = true;
bool yDimensionValid = true;
bool wDimensionValid = true;
bool zDimensionValid = true;
int dimensions = 0;
auto CheckDimension = [this](QGroupBox *group, bool &dimensionValid, int &dimensions,
const MeasurementDimension_p &dimension)
{
SCASSERT(group != nullptr)
if (group->isChecked())
{
dimensionValid = dimension->IsValid();
++dimensions;
if (ui->labelError->text().isEmpty() && not dimensionValid)
{
ui->labelError->setText(tr("Please, provide correct data for dimensions"));
}
}
};
CheckDimension(ui->groupBoxXDimension, xDimensionValid, dimensions, m_xDimension);
CheckDimension(ui->groupBoxYDimension, yDimensionValid, dimensions, m_yDimension);
CheckDimension(ui->groupBoxWDimension, wDimensionValid, dimensions, m_wDimension);
CheckDimension(ui->groupBoxZDimension, zDimensionValid, dimensions, m_zDimension);
if (ui->labelError->text().isEmpty() && dimensions == 0)
{
ui->labelError->setText(tr("Please, select at least one dimension"));
}
else if (ui->labelError->text().isEmpty() && dimensions > 3)
{
ui->labelError->setText(tr("No more than 3 dimensions allowed"));
}
const bool enough = dimensions > 0 && dimensions <= 3;
QPushButton *bOk = ui->buttonBox->button(QDialogButtonBox::Ok);
SCASSERT(bOk != nullptr)
bOk->setEnabled(enough && xDimensionValid && yDimensionValid && wDimensionValid && zDimensionValid);
if (ui->labelError->text().isEmpty())
{
ui->labelError->setText(tr("Ready"));
}
}
//---------------------------------------------------------------------------------------------------------------------
void DialogSetupMultisize::InitDimensionMinMax(QSpinBox *spinboxMinValue, QSpinBox *spinboxMaxValue,
const MeasurementDimension_p &dimension)
{
SCASSERT(spinboxMinValue != nullptr)
SCASSERT(spinboxMaxValue != nullptr)
dimension->SetMinValue(dimension->RangeMin());
dimension->SetMaxValue(dimension->RangeMax());
const bool fc = ui->checkBoxFullCircumference->isChecked();
const bool c = dimension->IsCircumference();
spinboxMinValue->blockSignals(true);
const QString unitStr = " " + UnitsToStr(dimension->Units());
if (c || dimension->Type() == MeasurementDimension::X)
{
spinboxMinValue->setSuffix(unitStr);
}
spinboxMinValue->setMinimum(c && fc ? dimension->RangeMin()*2 : dimension->RangeMin());
spinboxMinValue->setMaximum(c && fc ? dimension->MaxValue()*2 : dimension->MaxValue());
spinboxMinValue->setValue(c && fc ? dimension->MinValue()*2 : dimension->MinValue());
spinboxMinValue->blockSignals(false);
spinboxMaxValue->blockSignals(true);
if (c || dimension->Type() == MeasurementDimension::X)
{
spinboxMaxValue->setSuffix(unitStr);
}
spinboxMaxValue->setMinimum(c && fc ? dimension->MinValue()*2 : dimension->MinValue());
spinboxMaxValue->setMaximum(c && fc ? dimension->RangeMax()*2 : dimension->RangeMax());
spinboxMaxValue->setValue(c && fc ? dimension->RangeMax()*2 : dimension->RangeMax());
spinboxMaxValue->setValue(c && fc ? dimension->MaxValue()*2 : dimension->MaxValue());
spinboxMaxValue->blockSignals(false);
}
//---------------------------------------------------------------------------------------------------------------------
void DialogSetupMultisize::InitDimensionStep(QComboBox *comboBoxStep,
const MeasurementDimension_p &dimension)
{
SCASSERT(comboBoxStep != nullptr)
const bool fc = ui->checkBoxFullCircumference->isChecked();
const bool c = dimension->IsCircumference();
const QString unitStr = " " + UnitsToStr(dimension->Units());
dimension->SetStep(-1);
comboBoxStep->blockSignals(true);
const QVector<int> steps = dimension->ValidSteps();
comboBoxStep->clear();
for(auto step : steps)
{
comboBoxStep->addItem(QString("%1%2").arg(c && fc ? step*2 : step)
.arg(c || dimension->Type() == MeasurementDimension::X ? unitStr : QString()), step);
}
comboBoxStep->setCurrentIndex(-1); // force a user to select
comboBoxStep->blockSignals(false);
bool ok = false;
const int step = comboBoxStep->currentData().toInt(&ok);
dimension->SetStep(ok ? step : -1);
}
//---------------------------------------------------------------------------------------------------------------------
void DialogSetupMultisize::InitDimension(QSpinBox *spinboxMinValue, QSpinBox *spinboxMaxValue, QComboBox *comboBoxStep,
const MeasurementDimension_p &dimension)
{
InitDimensionMinMax(spinboxMinValue, spinboxMaxValue, dimension);
InitDimensionStep(comboBoxStep, dimension);
}
//---------------------------------------------------------------------------------------------------------------------
void DialogSetupMultisize::InitXDimension()
{
InitDimension(ui->spinBoxXDimensionMinValue, ui->spinBoxXDimensionMaxValue, ui->comboBoxXDimensionStep,
m_xDimension);
}
//---------------------------------------------------------------------------------------------------------------------
void DialogSetupMultisize::InitYDimension()
{
InitDimension(ui->spinBoxYDimensionMinValue, ui->spinBoxYDimensionMaxValue, ui->comboBoxYDimensionStep,
m_yDimension);
}
//---------------------------------------------------------------------------------------------------------------------
void DialogSetupMultisize::InitWDimension()
{
InitDimension(ui->spinBoxWDimensionMinValue, ui->spinBoxWDimensionMaxValue, ui->comboBoxWDimensionStep,
m_wDimension);
}
//---------------------------------------------------------------------------------------------------------------------
void DialogSetupMultisize::InitZDimension()
{
InitDimension(ui->spinBoxZDimensionMinValue, ui->spinBoxZDimensionMaxValue, ui->comboBoxZDimensionStep,
m_zDimension);
}
//---------------------------------------------------------------------------------------------------------------------
void DialogSetupMultisize::DimensionMinValueChanged(int value, QSpinBox *spinboxMaxValue, QComboBox *comboBoxStep,
QComboBox *comboBoxBase,
const MeasurementDimension_p &dimension)
{
SCASSERT(spinboxMaxValue != nullptr)
SCASSERT(comboBoxStep != nullptr)
SCASSERT(comboBoxBase != nullptr)
const bool fc = ui->checkBoxFullCircumference->isChecked();
const bool c = dimension->IsCircumference();
dimension->SetMinValue(c && fc ? value / 2 : value);
spinboxMaxValue->blockSignals(true);
spinboxMaxValue->setMinimum(value);
spinboxMaxValue->blockSignals(false);
dimension->SetMaxValue(c && fc ? spinboxMaxValue->value() / 2 : spinboxMaxValue->value());
UpdateSteps(comboBoxStep, dimension);
UpdateBase(comboBoxBase, dimension);
CheckState();
}
//---------------------------------------------------------------------------------------------------------------------
void DialogSetupMultisize::DimensionMaxValueChanged(int value, QSpinBox *spinboxMinValue, QComboBox *comboBoxStep,
QComboBox *comboBoxBase,
const MeasurementDimension_p &dimension)
{
SCASSERT(spinboxMinValue != nullptr)
SCASSERT(comboBoxStep != nullptr)
SCASSERT(comboBoxBase != nullptr)
const bool fc = ui->checkBoxFullCircumference->isChecked();
const bool c = dimension->IsCircumference();
dimension->SetMaxValue(c && fc ? value / 2 : value);
spinboxMinValue->blockSignals(true);
spinboxMinValue->setMaximum(value);
spinboxMinValue->blockSignals(false);
dimension->SetMinValue(c && fc ? spinboxMinValue->value() / 2 : spinboxMinValue->value());
UpdateSteps(comboBoxStep, dimension);
UpdateBase(comboBoxBase, dimension);
CheckState();
}
//---------------------------------------------------------------------------------------------------------------------
void DialogSetupMultisize::DimensionStepChanged(int index, QComboBox *comboBoxStep, QComboBox *comboBoxBase,
const MeasurementDimension_p &dimension)
{
SCASSERT(comboBoxStep != nullptr)
SCASSERT(comboBoxBase != nullptr)
bool ok = false;
const int step = comboBoxStep->itemData(index).toInt(&ok);
dimension->SetStep(ok ? step : -1);
UpdateBase(comboBoxBase, dimension);
CheckState();
}
//---------------------------------------------------------------------------------------------------------------------
void DialogSetupMultisize::DimensionBaseChanged(int index, QComboBox *comboBoxBase,
const MeasurementDimension_p &dimension)
{
SCASSERT(comboBoxBase != nullptr)
bool ok = false;
const int base = comboBoxBase->itemData(index).toInt(&ok);
dimension->SetBaseValue(ok ? base : -1);
CheckState();
}
//---------------------------------------------------------------------------------------------------------------------
void DialogSetupMultisize::UpdateSteps(QComboBox *comboBoxStep,
const MeasurementDimension_p &dimension)
{
SCASSERT(comboBoxStep != nullptr)
int oldStep = -1;
if (comboBoxStep->currentIndex() != -1)
{
oldStep = comboBoxStep->currentData().toInt();
}
comboBoxStep->blockSignals(true);
const QString unitStr = " " + UnitsToStr(dimension->Units());
const QVector<int> steps = dimension->ValidSteps();
comboBoxStep->clear();
const bool fc = ui->checkBoxFullCircumference->isChecked();
const bool c = dimension->IsCircumference();
for(auto step : steps)
{
comboBoxStep->addItem(QString("%1%2").arg(c && fc ? step * 2 : step)
.arg(c ? unitStr : QString()), step);
}
comboBoxStep->setCurrentIndex(comboBoxStep->findData(oldStep));
comboBoxStep->blockSignals(false);
bool ok = false;
const int step = comboBoxStep->currentData().toInt(&ok);
dimension->SetStep(ok ? step : -1);
}
//---------------------------------------------------------------------------------------------------------------------
void DialogSetupMultisize::UpdateBase(QComboBox *comboBoxBase,
const MeasurementDimension_p &dimension)
{
SCASSERT(comboBoxBase != nullptr)
int oldBase = -1;
if (comboBoxBase->currentIndex() != -1)
{
oldBase = comboBoxBase->currentData().toInt();
}
comboBoxBase->blockSignals(true);
const QString unitStr = " " + UnitsToStr(dimension->Units());
const QVector<int> bases = dimension->ValidBases();
comboBoxBase->clear();
const bool fc = ui->checkBoxFullCircumference->isChecked();
const bool c = dimension->IsCircumference();
for(auto base : bases)
{
comboBoxBase->addItem(QString("%1%2").arg(c && fc ? base * 2 : base)
.arg(c || dimension->Type() == MeasurementDimension::X ? unitStr : QString()), base);
}
comboBoxBase->setCurrentIndex(comboBoxBase->findData(oldBase));
comboBoxBase->blockSignals(false);
bool ok = false;
const int base = comboBoxBase->currentData().toInt(&ok);
dimension->SetBaseValue(ok ? base : -1);
}

View File

@ -0,0 +1,101 @@
/************************************************************************
**
** @file dialogsetupmultisize.h
** @author Roman Telezhynskyi <dismine(at)gmail.com>
** @date 26 9, 2020
**
** @brief
** @copyright
** This source code is part of the Valentina project, a pattern making
** program, whose allow create and modeling patterns of clothing.
** Copyright (C) 2020 Valentina project
** <https://gitlab.com/smart-pattern/valentina> All Rights Reserved.
**
** Valentina is free software: you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation, either version 3 of the License, or
** (at your option) any later version.
**
** Valentina is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
** GNU General Public License for more details.
**
** You should have received a copy of the GNU General Public License
** along with Valentina. If not, see <http://www.gnu.org/licenses/>.
**
*************************************************************************/
#ifndef DIALOGSETUPMULTISIZE_H
#define DIALOGSETUPMULTISIZE_H
#include <QDialog>
#include "../vformat/vdimensions.h"
#include "../vmisc/def.h"
class QSpinBox;
namespace Ui
{
class DialogSetupMultisize;
}
class DialogSetupMultisize : public QDialog
{
Q_OBJECT
public:
explicit DialogSetupMultisize(Unit unit, QWidget *parent = nullptr);
~DialogSetupMultisize();
QVector<MeasurementDimension_p> Dimensions() const;
bool FullCircumference() const;
protected:
virtual void changeEvent(QEvent* event) override;
virtual void showEvent(QShowEvent *event) override;
private slots:
void ShowFullCircumference();
void YDimensionCircumferenceChanged();
private:
Q_DISABLE_COPY(DialogSetupMultisize)
Ui::DialogSetupMultisize *ui;
bool m_isInitialized{false};
QSharedPointer<VXMeasurementDimension> m_xDimension;
QSharedPointer<VYMeasurementDimension> m_yDimension;
QSharedPointer<VWMeasurementDimension> m_wDimension;
QSharedPointer<VZMeasurementDimension> m_zDimension;
void CheckState();
void InitDimensionMinMax(QSpinBox *spinboxMinValue, QSpinBox *spinboxMaxValue,
const MeasurementDimension_p &dimension);
void InitDimensionStep(QComboBox *comboBoxStep,const MeasurementDimension_p &dimension);
void InitDimension(QSpinBox *spinboxMinValue, QSpinBox *spinboxMaxValue, QComboBox *comboBoxStep,
const MeasurementDimension_p &dimension);
void InitXDimension();
void InitYDimension();
void InitWDimension();
void InitZDimension();
void DimensionMinValueChanged(int value, QSpinBox *spinboxMaxValue, QComboBox *comboBoxStep,
QComboBox *comboBoxBase,
const MeasurementDimension_p &dimension);
void DimensionMaxValueChanged(int value, QSpinBox *spinboxMinValue, QComboBox *comboBoxStep,
QComboBox *comboBoxBase,
const MeasurementDimension_p &dimension);
void DimensionStepChanged(int index, QComboBox *comboBoxStep, QComboBox *comboBoxBase,
const MeasurementDimension_p &dimension);
void DimensionBaseChanged(int index, QComboBox *comboBoxBase,
const MeasurementDimension_p &dimension);
void UpdateSteps(QComboBox *comboBoxStep, const MeasurementDimension_p &dimension);
void UpdateBase(QComboBox *comboBoxBase, const MeasurementDimension_p &dimension);
};
#endif // DIALOGSETUPMULTISIZE_H

View File

@ -0,0 +1,480 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>DialogSetupMultisize</class>
<widget class="QDialog" name="DialogSetupMultisize">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>734</width>
<height>289</height>
</rect>
</property>
<property name="windowTitle">
<string>Setup multisize measurements</string>
</property>
<property name="windowIcon">
<iconset resource="../share/resources/tapeicon.qrc">
<normaloff>:/tapeicon/64x64/logo.png</normaloff>:/tapeicon/64x64/logo.png</iconset>
</property>
<layout class="QVBoxLayout" name="verticalLayout_5">
<item>
<widget class="QCheckBox" name="checkBoxFullCircumference">
<property name="text">
<string>Use full circumference</string>
</property>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QGroupBox" name="groupBoxXDimension">
<property name="title">
<string comment="dimension">Height</string>
</property>
<property name="checkable">
<bool>true</bool>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<layout class="QFormLayout" name="formLayout_2">
<property name="fieldGrowthPolicy">
<enum>QFormLayout::ExpandingFieldsGrow</enum>
</property>
<item row="0" column="0">
<widget class="QLabel" name="label">
<property name="text">
<string>Min value:</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QSpinBox" name="spinBoxXDimensionMinValue">
<property name="toolTip">
<string>Minimal value described in the column</string>
</property>
<property name="suffix">
<string/>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_2">
<property name="text">
<string>Max value:</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QSpinBox" name="spinBoxXDimensionMaxValue">
<property name="toolTip">
<string>Maximal value described in the column</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_3">
<property name="text">
<string>Step:</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QComboBox" name="comboBoxXDimensionStep">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="toolTip">
<string>Single-step between the column values</string>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="label_4">
<property name="text">
<string>Base:</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QComboBox" name="comboBoxXDimensionBase">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="toolTip">
<string>The base value for the column</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="groupBoxYDimension">
<property name="title">
<string comment="dimension">Size</string>
</property>
<property name="checkable">
<bool>true</bool>
</property>
<property name="checked">
<bool>true</bool>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<layout class="QFormLayout" name="formLayout_3">
<property name="fieldGrowthPolicy">
<enum>QFormLayout::ExpandingFieldsGrow</enum>
</property>
<item row="0" column="0">
<widget class="QLabel" name="label_5">
<property name="text">
<string>Min value:</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QSpinBox" name="spinBoxYDimensionMinValue">
<property name="toolTip">
<string>Minimal value described in the column</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_6">
<property name="text">
<string>Max value:</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QSpinBox" name="spinBoxYDimensionMaxValue">
<property name="toolTip">
<string>Maximal value described in the column</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_7">
<property name="text">
<string>Step:</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QComboBox" name="comboBoxYDimensionStep">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="toolTip">
<string>Single-step between the column values</string>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="label_8">
<property name="text">
<string>Base:</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QComboBox" name="comboBoxYDimensionBase">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="toolTip">
<string>The base value for the column</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<widget class="QCheckBox" name="checkBoxYDimensionCircumference">
<property name="text">
<string>Circumference</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="groupBoxWDimension">
<property name="title">
<string comment="dimension">Waist</string>
</property>
<property name="checkable">
<bool>true</bool>
</property>
<property name="checked">
<bool>false</bool>
</property>
<layout class="QVBoxLayout" name="verticalLayout_4">
<item>
<layout class="QFormLayout" name="formLayout_5">
<property name="fieldGrowthPolicy">
<enum>QFormLayout::ExpandingFieldsGrow</enum>
</property>
<item row="0" column="0">
<widget class="QLabel" name="label_13">
<property name="text">
<string>Min value:</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QSpinBox" name="spinBoxWDimensionMinValue">
<property name="toolTip">
<string>Minimal value described in the column</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_14">
<property name="text">
<string>Max value:</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QSpinBox" name="spinBoxWDimensionMaxValue">
<property name="toolTip">
<string>Maximal value described in the column</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_15">
<property name="text">
<string>Step:</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QComboBox" name="comboBoxWDimensionStep">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="toolTip">
<string>Single-step between the column values</string>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="label_16">
<property name="text">
<string>Base:</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QComboBox" name="comboBoxWDimensionBase">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="toolTip">
<string>The base value for the column</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="groupBoxZDimension">
<property name="title">
<string comment="dimension">Hip</string>
</property>
<property name="checkable">
<bool>true</bool>
</property>
<property name="checked">
<bool>false</bool>
</property>
<layout class="QVBoxLayout" name="verticalLayout_3">
<item>
<layout class="QFormLayout" name="formLayout_4">
<property name="fieldGrowthPolicy">
<enum>QFormLayout::ExpandingFieldsGrow</enum>
</property>
<item row="0" column="0">
<widget class="QLabel" name="label_9">
<property name="text">
<string>Min value:</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QSpinBox" name="spinBoxZDimensionMinValue">
<property name="toolTip">
<string>Minimal value described in the column</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_10">
<property name="text">
<string>Max value:</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QSpinBox" name="spinBoxZDimensionMaxValue">
<property name="toolTip">
<string>Maximal value described in the column</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_11">
<property name="text">
<string>Step:</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QComboBox" name="comboBoxZDimensionStep">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="toolTip">
<string>Single-step between the column values</string>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="label_12">
<property name="text">
<string>Base:</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QComboBox" name="comboBoxZDimensionBase">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="toolTip">
<string>The base value for the column</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
</item>
</layout>
</item>
<item>
<widget class="QLabel" name="labelError">
<property name="text">
<string notr="true">_</string>
</property>
</widget>
</item>
<item>
<widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
</property>
</widget>
</item>
</layout>
</widget>
<tabstops>
<tabstop>groupBoxXDimension</tabstop>
<tabstop>spinBoxXDimensionMinValue</tabstop>
<tabstop>spinBoxXDimensionMaxValue</tabstop>
<tabstop>comboBoxXDimensionStep</tabstop>
<tabstop>comboBoxXDimensionBase</tabstop>
<tabstop>groupBoxYDimension</tabstop>
<tabstop>spinBoxYDimensionMinValue</tabstop>
<tabstop>spinBoxYDimensionMaxValue</tabstop>
<tabstop>comboBoxYDimensionStep</tabstop>
<tabstop>comboBoxYDimensionBase</tabstop>
<tabstop>groupBoxWDimension</tabstop>
<tabstop>spinBoxWDimensionMinValue</tabstop>
<tabstop>spinBoxWDimensionMaxValue</tabstop>
<tabstop>comboBoxWDimensionStep</tabstop>
<tabstop>comboBoxWDimensionBase</tabstop>
<tabstop>groupBoxZDimension</tabstop>
<tabstop>spinBoxZDimensionMinValue</tabstop>
<tabstop>spinBoxZDimensionMaxValue</tabstop>
<tabstop>comboBoxZDimensionStep</tabstop>
<tabstop>comboBoxZDimensionBase</tabstop>
</tabstops>
<resources>
<include location="../share/resources/tapeicon.qrc"/>
</resources>
<connections>
<connection>
<sender>buttonBox</sender>
<signal>accepted()</signal>
<receiver>DialogSetupMultisize</receiver>
<slot>accept()</slot>
<hints>
<hint type="sourcelabel">
<x>746</x>
<y>383</y>
</hint>
<hint type="destinationlabel">
<x>157</x>
<y>274</y>
</hint>
</hints>
</connection>
<connection>
<sender>buttonBox</sender>
<signal>rejected()</signal>
<receiver>DialogSetupMultisize</receiver>
<slot>reject()</slot>
<hints>
<hint type="sourcelabel">
<x>746</x>
<y>383</y>
</hint>
<hint type="destinationlabel">
<x>286</x>
<y>274</y>
</hint>
</hints>
</connection>
</connections>
</ui>

View File

@ -71,17 +71,6 @@ int main(int argc, char *argv[])
MApplication app(argc, argv);
app.InitOptions();
if (FvUpdater::IsStaledTestBuild())
{
qWarning() << QApplication::translate("Tape",
"This test build is older than %1 days. To provide you with better "
"quality service we restrict the lifetime you can use a test build. "
"To continue using Tape please update to newer test build. The "
"application will be shut down.")
.arg(FvUpdater::testBuildLifetime);
return V_EX_UNAVAILABLE;
}
QTimer::singleShot(0, &app, &MApplication::ProcessCMD);
#if defined(APPIMAGE) && defined(Q_OS_LINUX)

View File

@ -53,6 +53,10 @@
#include <QSpacerItem>
#include <QThread>
#if defined(APPIMAGE) && defined(Q_OS_LINUX)
# include "../vmisc/appimage.h"
#endif // defined(APPIMAGE) && defined(Q_OS_LINUX)
QT_WARNING_PUSH
QT_WARNING_DISABLE_CLANG("-Wmissing-prototypes")
QT_WARNING_DISABLE_INTEL(1418)
@ -212,7 +216,7 @@ inline void noisyFailureMsgHandler(QtMsgType type, const QMessageLogContext &con
{
if (topWinAllowsPop)
{
messageBox.setText(VAbstractApplication::ClearMessage(msg));
messageBox.setText(msg);
messageBox.setStandardButtons(QMessageBox::Ok);
messageBox.setWindowModality(Qt::ApplicationModal);
messageBox.setModal(true);
@ -532,7 +536,7 @@ QString MApplication::diagramsPath() const
}
else
{
return QStringLiteral("/usr/share/valentina") + dPath;
return PKGDATADIR + dPath;
}
}
#else // Unix
@ -543,7 +547,12 @@ QString MApplication::diagramsPath() const
}
else
{
return QStringLiteral("/usr/share/valentina") + dPath;
#if defined(APPIMAGE) && defined(Q_OS_LINUX)
/* Fix path to diagrams when run inside AppImage. */
return AppImageRoot() + PKGDATADIR + dPath;
#else
return PKGDATADIR + dPath;
#endif // defined(APPIMAGE) && defined(Q_OS_LINUX)
}
#endif
}
@ -591,96 +600,46 @@ void MApplication::ParseCommandLine(const SocketConnection &connection, const QS
parser.addHelpOption();
parser.addVersionOption();
parser.addPositionalArgument("filename", tr("The measurement file."));
//-----
QCommandLineOption heightOption(QStringList() << "e" << "height",
tr("Open with the base height. Valid values: %1cm.")
.arg(VMeasurement::WholeListHeights(Unit::Cm).join(", ")),
tr("The base height"));
parser.addOption(heightOption);
//-----
QCommandLineOption sizeOption(QStringList() << "s" << "size",
tr("Open with the base size. Valid values: %1cm.").arg(VMeasurement::WholeListSizes(Unit::Cm).join(", ")),
tr("The base size"));
parser.addOption(sizeOption);
//-----
QCommandLineOption unitOption(QStringList() << "u" << "unit",
tr("Set pattern file unit: cm, mm, inch."),
tr("The pattern unit"));
parser.addOption(unitOption);
//-----
QCommandLineOption testOption(QStringList() << "test",
tr("Use for unit testing. Run the program and open a file without showing the main window."));
parser.addOption(testOption);
//-----
QCommandLineOption scalingOption(QStringList() << LONG_OPTION_NO_HDPI_SCALING,
tr("Disable high dpi scaling. Call this option if has problem with scaling (by default scaling enabled). "
"Alternatively you can use the %1 environment variable.").arg("QT_AUTO_SCREEN_SCALE_FACTOR=0"));
parser.addOption(scalingOption);
//-----
const QString LONG_OPTION_DIMENSION_A = QStringLiteral("dimensionA");
const QString SINGLE_OPTION_DIMENSION_A = QChar('a');
const QString LONG_OPTION_DIMENSION_B = QStringLiteral("dimensionB");
const QString SINGLE_OPTION_DIMENSION_B = QChar('b');
const QString LONG_OPTION_DIMENSION_C = QStringLiteral("dimensionC");
const QString SINGLE_OPTION_DIMENSION_C = QChar('c');
const QString LONG_OPTION_UNITS = QStringLiteral("units");
const QString SINGLE_OPTION_UNITS = QChar('u');
const QString LONG_OPTION_TEST = QStringLiteral("test");
parser.addOptions(
{
{{SINGLE_OPTION_DIMENSION_A, LONG_OPTION_DIMENSION_A}, tr("Set base for dimension A in the table units."),
tr("The dimension A base")},
{{SINGLE_OPTION_DIMENSION_B, LONG_OPTION_DIMENSION_B}, tr("Set base for dimension B in the table units."),
tr("The dimension B base")},
{{SINGLE_OPTION_DIMENSION_C, LONG_OPTION_DIMENSION_C}, tr("Set base for dimension C in the table units."),
tr("The dimension C base")},
{{SINGLE_OPTION_UNITS, LONG_OPTION_UNITS}, tr("Set pattern file units: cm, mm, inch."),
tr("The pattern units")},
{LONG_OPTION_TEST,
tr("Use for unit testing. Run the program and open a file without showing the main window.")},
{LONG_OPTION_NO_HDPI_SCALING,
tr("Disable high dpi scaling. Call this option if has problem with scaling (by default scaling enabled). "
"Alternatively you can use the %1 environment variable.").arg("QT_AUTO_SCREEN_SCALE_FACTOR=0")},
});
parser.process(arguments);
bool flagHeight = false;
bool flagSize = false;
bool flagUnit = false;
int size = 0;
int height = 0;
Unit unit = Unit::Cm;
if (parser.isSet(heightOption))
{
const QString heightValue = parser.value(heightOption);
if (VMeasurement::IsGradationHeightValid(heightValue))
{
flagHeight = true;
height = heightValue.toInt();
}
else
{
qCCritical(mApp, "%s\n",
qPrintable(tr("Invalid base height argument. Must be %1cm.")
.arg(VMeasurement::WholeListHeights(Unit::Cm).join(", "))));
parser.showHelp(V_EX_USAGE);
}
}
if (parser.isSet(sizeOption))
{
const QString sizeValue = parser.value(sizeOption);
if (VMeasurement::IsGradationSizeValid(sizeValue))
{
flagSize = true;
size = sizeValue.toInt();
}
else
{
qCCritical(mApp, "%s\n",
qPrintable(tr("Invalid base size argument. Must be %1cm.")
.arg(VMeasurement::WholeListSizes(Unit::Cm).join(", "))));
parser.showHelp(V_EX_USAGE);
}
}
{
const QString unitValue = parser.value(unitOption);
if (not unitValue.isEmpty())
{
const QStringList units = QStringList() << unitMM << unitCM << unitINCH;
if (units.contains(unitValue))
{
flagUnit = true;
unit = StrToUnits(unitValue);
}
else
{
qCCritical(mApp, "%s\n", qPrintable(tr("Invalid base size argument. Must be cm, mm or inch.")));
parser.showHelp(V_EX_USAGE);
}
}
}
testMode = parser.isSet(testOption);
testMode = parser.isSet(LONG_OPTION_TEST);
if (not testMode && connection == SocketConnection::Client)
{
@ -729,6 +688,84 @@ void MApplication::ParseCommandLine(const SocketConnection &connection, const QS
parser.showHelp(V_EX_USAGE);
}
bool flagDimensionA = false;
bool flagDimensionB = false;
bool flagDimensionC = false;
bool flagUnits = false;
int dimensionAValue = 0;
int dimensionBValue = 0;
int dimensionCValue = 0;
Unit unit = Unit::Cm;
if (parser.isSet(LONG_OPTION_DIMENSION_A))
{
const QString value = parser.value(LONG_OPTION_DIMENSION_A);
bool ok = false;
dimensionAValue = value.toInt(&ok);
if(ok && dimensionAValue > 0)
{
flagDimensionA = true;
}
else
{
qCCritical(mApp, "%s\n", qPrintable(tr("Invalid dimension A base value.")));
parser.showHelp(V_EX_USAGE);
}
}
if (parser.isSet(LONG_OPTION_DIMENSION_B))
{
const QString value = parser.value(LONG_OPTION_DIMENSION_B);
bool ok = false;
dimensionBValue = value.toInt(&ok);
if(ok && dimensionBValue > 0)
{
flagDimensionB = true;
}
else
{
qCCritical(mApp, "%s\n", qPrintable(tr("Invalid dimension B base value.")));
parser.showHelp(V_EX_USAGE);
}
}
if (parser.isSet(LONG_OPTION_DIMENSION_C))
{
const QString value = parser.value(LONG_OPTION_DIMENSION_C);
bool ok = false;
dimensionCValue = value.toInt(&ok);
if(ok && dimensionCValue > 0)
{
flagDimensionC = true;
}
else
{
qCCritical(mApp, "%s\n", qPrintable(tr("Invalid dimension C base value.")));
parser.showHelp(V_EX_USAGE);
}
}
{
const QString unitValue = parser.value(LONG_OPTION_UNITS);
if (not unitValue.isEmpty())
{
if (QStringList{unitMM, unitCM, unitINCH}.contains(unitValue))
{
flagUnits = true;
unit = StrToUnits(unitValue);
}
else
{
qCCritical(mApp, "%s\n", qPrintable(tr("Invalid base size argument. Must be cm, mm or inch.")));
parser.showHelp(V_EX_USAGE);
}
}
}
for (auto &arg : args)
{
NewMainWindow();
@ -742,17 +779,31 @@ void MApplication::ParseCommandLine(const SocketConnection &connection, const QS
continue;
}
if (flagSize)
if (flagDimensionA)
{
MainWindow()->SetBaseMSize(size);
if (not MainWindow()->SetDimensionABase(dimensionAValue))
{
parser.showHelp(V_EX_USAGE);
}
}
if (flagHeight)
if (flagDimensionB)
{
MainWindow()->SetBaseMHeight(height);
if (not MainWindow()->SetDimensionBBase(dimensionBValue))
{
parser.showHelp(V_EX_USAGE);
}
}
if (flagUnit)
if (flagDimensionC)
{
if (not MainWindow()->SetDimensionCBase(dimensionCValue))
{
parser.showHelp(V_EX_USAGE);
}
}
if (flagUnits)
{
MainWindow()->SetPUnit(unit);
}

View File

@ -2,6 +2,9 @@
# This need for corect working file translations.pro
SOURCES += \
$$PWD/dialogs/dialogdimensionlabels.cpp \
$$PWD/dialogs/dialogmeasurementscsvcolumns.cpp \
$$PWD/dialogs/dialogrestrictdimension.cpp \
$$PWD/main.cpp \
$$PWD/tmainwindow.cpp \
$$PWD/mapplication.cpp \
@ -12,11 +15,15 @@ SOURCES += \
$$PWD/dialogs/dialogtapepreferences.cpp \
$$PWD/dialogs/configpages/tapepreferencesconfigurationpage.cpp \
$$PWD/dialogs/configpages/tapepreferencespathpage.cpp \
$$PWD/vtapesettings.cpp
$$PWD/vtapesettings.cpp \
$$PWD/dialogs/dialogsetupmultisize.cpp
*msvc*:SOURCES += $$PWD/stable.cpp
HEADERS += \
$$PWD/dialogs/dialogdimensionlabels.h \
$$PWD/dialogs/dialogmeasurementscsvcolumns.h \
$$PWD/dialogs/dialogrestrictdimension.h \
$$PWD/tmainwindow.h \
$$PWD/stable.h \
$$PWD/mapplication.h \
@ -28,13 +35,18 @@ HEADERS += \
$$PWD/dialogs/dialogtapepreferences.h \
$$PWD/dialogs/configpages/tapepreferencesconfigurationpage.h \
$$PWD/dialogs/configpages/tapepreferencespathpage.h \
$$PWD/vtapesettings.h
$$PWD/vtapesettings.h \
$$PWD/dialogs/dialogsetupmultisize.h
FORMS += \
$$PWD/dialogs/dialogdimensionlabels.ui \
$$PWD/dialogs/dialogmeasurementscsvcolumns.ui \
$$PWD/dialogs/dialogrestrictdimension.ui \
$$PWD/tmainwindow.ui \
$$PWD/dialogs/dialogabouttape.ui \
$$PWD/dialogs/dialognewmeasurements.ui \
$$PWD/dialogs/dialogmdatabase.ui \
$$PWD/dialogs/dialogtapepreferences.ui \
$$PWD/dialogs/configpages/tapepreferencesconfigurationpage.ui \
$$PWD/dialogs/configpages/tapepreferencespathpage.ui
$$PWD/dialogs/configpages/tapepreferencespathpage.ui \
$$PWD/dialogs/dialogsetupmultisize.ui

View File

@ -191,19 +191,11 @@ include(../translations.pri)
# Set "make install" command for Unix-like systems.
unix{
# Prefix for binary file.
isEmpty(PREFIX){
PREFIX = $$DEFAULT_PREFIX
}
unix:!macx{
DATADIR =$$PREFIX/share
DEFINES += DATADIR=\\\"$$DATADIR\\\" PKGDATADIR=\\\"$$PKGDATADIR\\\"
!macx{
# Path to bin file after installation
target.path = $$PREFIX/bin
target.path = $$BINDIR
rcc_diagrams.path = $$PREFIX/share/valentina/
rcc_diagrams.path = $$PKGDATADIR
rcc_diagrams.files = $${OUT_PWD}/$${DESTDIR}/diagrams.rcc
rcc_diagrams.CONFIG = no_check_exist
@ -360,7 +352,16 @@ DEPENDPATH += $$PWD/../../libs/vformat
win32:!win32-g++: PRE_TARGETDEPS += $$OUT_PWD/../../libs/vformat/$${DESTDIR}/vformat.lib
else:unix|win32-g++: PRE_TARGETDEPS += $$OUT_PWD/../../libs/vformat/$${DESTDIR}/libvformat.a
#VPatternDB static library (depend on vgeometry, vmisc, VLayout)
# VLayout static library (depend on IFC, VGeometry, VPatternDB)
unix|win32: LIBS += -L$$OUT_PWD/../../libs/vlayout/$${DESTDIR}/ -lvlayout
INCLUDEPATH += $$PWD/../../libs/vlayout
DEPENDPATH += $$PWD/../../libs/vlayout
win32:!win32-g++: PRE_TARGETDEPS += $$OUT_PWD/../../libs/vlayout/$${DESTDIR}/vlayout.lib
else:unix|win32-g++: PRE_TARGETDEPS += $$OUT_PWD/../../libs/vlayout/$${DESTDIR}/libvlayout.a
#VPatternDB static library (depend on vgeometry, vmisc)
unix|win32: LIBS += -L$$OUT_PWD/../../libs/vpatterndb/$${DESTDIR} -lvpatterndb
INCLUDEPATH += $$PWD/../../libs/vpatterndb
@ -396,15 +397,6 @@ DEPENDPATH += $$PWD/../../libs/vmisc
win32:!win32-g++: PRE_TARGETDEPS += $$OUT_PWD/../../libs/vmisc/$${DESTDIR}/vmisc.lib
else:unix|win32-g++: PRE_TARGETDEPS += $$OUT_PWD/../../libs/vmisc/$${DESTDIR}/libvmisc.a
# VLayout static library (depend on VGeometry)
unix|win32: LIBS += -L$$OUT_PWD/../../libs/vlayout/$${DESTDIR}/ -lvlayout
INCLUDEPATH += $$PWD/../../libs/vlayout
DEPENDPATH += $$PWD/../../libs/vlayout
win32:!win32-g++: PRE_TARGETDEPS += $$OUT_PWD/../../libs/vlayout/$${DESTDIR}/vlayout.lib
else:unix|win32-g++: PRE_TARGETDEPS += $$OUT_PWD/../../libs/vlayout/$${DESTDIR}/libvlayout.a
# VGeometry static library (depend on ifc)
unix|win32: LIBS += -L$$OUT_PWD/../../libs/vgeometry/$${DESTDIR}/ -lvgeometry

File diff suppressed because it is too large Load Diff

View File

@ -44,6 +44,7 @@ namespace Ui
class QLabel;
class QxtCsvModel;
class VMeasurement;
class TMainWindow : public VAbstractMainWindow
{
@ -57,8 +58,9 @@ public:
void RetranslateTable();
void SetBaseMHeight(int height);
void SetBaseMSize(int size);
bool SetDimensionABase(int base);
bool SetDimensionBBase(int base);
bool SetDimensionCBase(int base);
void SetPUnit(Unit unit);
bool LoadFile(const QString &path);
@ -112,8 +114,11 @@ private slots:
void AddKnown();
void ImportFromPattern();
void ChangedSize(const QString &text);
void ChangedHeight(const QString & text);
void DimensionABaseChanged();
void DimensionBBaseChanged();
void DimensionCBaseChanged();
void GradationChanged();
void ShowMData();
@ -122,43 +127,67 @@ private slots:
void SaveMName(const QString &text);
void SaveMValue();
void SaveMBaseValue(double value);
void SaveMSizeIncrease(double value);
void SaveMHeightIncrease(double value);
void SaveMShiftA(double value);
void SaveMShiftB(double value);
void SaveMShiftC(double value);
void SaveMCorrectionValue(double value);
void SaveMDescription();
void SaveMFullName();
void SaveMUnits();
void SaveMDimension();
void FullCircumferenceChanged(bool checked);
void ExportToIndividual();
void RestrictSecondDimesion();
void RestrictThirdDimesion();
void EditDimensionLabels();
private:
Q_DISABLE_COPY(TMainWindow)
Ui::TMainWindow *ui;
VMeasurements *m;
VContainer *data;
Unit mUnit;
Unit pUnit;
MeasurementsType mType;
qreal currentSize;
qreal currentHeight;
QString curFile;
QComboBox *gradationHeights;
QComboBox *gradationSizes;
QComboBox *comboBoxUnits;
VMeasurements *m{nullptr};
VContainer *data{nullptr};
Unit mUnit{Unit::Cm};
Unit pUnit{Unit::Cm};
MeasurementsType mType{MeasurementsType::Individual};
int currentDimensionA{0};
int currentDimensionB{0};
int currentDimensionC{0};
QString curFile{};
QComboBox *gradationDimensionA{nullptr};
QComboBox *gradationDimensionB{nullptr};
QComboBox *gradationDimensionC{nullptr};
QComboBox *comboBoxUnits{nullptr};
int formulaBaseHeight;
QSharedPointer<VLockGuard<char>> lock;
QSharedPointer<VTableSearch> search;
QLabel *labelGradationHeights;
QLabel *labelGradationSizes;
QLabel *labelPatternUnit;
bool isInitialized;
bool mIsReadOnly;
QSharedPointer<VLockGuard<char>> lock{nullptr};
QSharedPointer<VTableSearch> search{};
QLabel *labelGradationDimensionA{nullptr};
QLabel *labelGradationDimensionB{nullptr};
QLabel *labelGradationDimensionC{nullptr};
QLabel *labelPatternUnit{nullptr};
bool isInitialized{false};
bool mIsReadOnly{false};
QTimer *gradation;
QVector<QObject *> hackedWidgets;
QVector<QObject *> hackedWidgets{};
void SetupMenu();
void InitWindow();
void InitMenu();
void InitDimensionsBaseValue();
void InitDimensionGradation(int index, const MeasurementDimension_p &dimension, QComboBox *control);
void InitDimensionControls();
void InitDimesionShifts();
void InitTable();
void SetDecimals();
void InitUnits();
void InitPatternUnits();
void InitComboBoxUnits();
void InitMeasurementUnits();
void InitGender(QComboBox *gender);
void InitMeasurementDimension();
void ShowNewMData(bool fresh);
void ShowUnits();
@ -172,18 +201,13 @@ private:
QTableWidgetItem *AddCell(const QString &text, int row, int column, int aligment, bool ok = true);
Q_REQUIRED_RESULT QComboBox *SetGradationList(QLabel *label, const QStringList &list);
void SetDefaultHeight(int value);
void SetDefaultSize(int value);
void RefreshData(bool freshCall = false);
void RefreshTable(bool freshCall = false);
QString GetCustomName() const;
QString ClearCustomName(const QString &name) const;
bool EvalFormula(const QString &formula, bool fromUser, VContainer *data, QLabel *label);
bool EvalFormula(const QString &formula, bool fromUser, VContainer *data, QLabel *label, bool specialUnits);
void ShowMDiagram(const QString &name);
void Open(const QString &pathTo, const QString &filter);
@ -208,15 +232,25 @@ private:
template <class T>
void HackWidget(T **widget);
void HackDimensionBaseValue();
void HackDimensionShifts();
QString CheckMName(const QString &name, const QSet<QString> &importedNames) const;
void ShowError(const QString &text);
void RefreshDataAfterImport();
void ImportIndividualMeasurements(const QxtCsvModel &csv);
void ImportMultisizeMeasurements(const QxtCsvModel &csv);
void ImportIndividualMeasurements(const QxtCsvModel &csv, const QVector<int> &map);
void ImportMultisizeMeasurements(const QxtCsvModel &csv, const QVector<int> &map);
void SetCurrentPatternUnit();
void ShowDimensionControls();
void SetDimensionBases();
void SetCurrentDimensionValues();
QVector<int> DimensionRestrictedValues(int index, const MeasurementDimension_p &dimension);
QMap<int, QSharedPointer<VMeasurement> > OrderedMeasurments() const;
};
#endif // TMAINWINDOW_H

File diff suppressed because it is too large Load Diff

View File

@ -37,9 +37,6 @@
namespace
{
Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingDataBaseGeometry, (QLatin1String("database/geometry")))
Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingDefHeight, (QLatin1String("gradation/defHeight")))
Q_GLOBAL_STATIC_WITH_ARGS(const QString, settingDefSize, (QLatin1String("gradation/defSize")))
}
//---------------------------------------------------------------------------------------------------------------------
@ -60,27 +57,3 @@ void VTapeSettings::SetDataBaseGeometry(const QByteArray &value)
{
setValue(*settingDataBaseGeometry, value);
}
//---------------------------------------------------------------------------------------------------------------------
void VTapeSettings::SetDefHeight(int value)
{
setValue(*settingDefHeight, value);
}
//---------------------------------------------------------------------------------------------------------------------
int VTapeSettings::GetDefHeight() const
{
return value(*settingDefHeight, 176).toInt();
}
//---------------------------------------------------------------------------------------------------------------------
void VTapeSettings::SetDefSize(int value)
{
setValue(*settingDefSize, value);
}
//---------------------------------------------------------------------------------------------------------------------
int VTapeSettings::GetDefSize() const
{
return value(*settingDefSize, 50).toInt();
}

View File

@ -49,12 +49,6 @@ public:
QByteArray GetDataBaseGeometry() const;
void SetDataBaseGeometry(const QByteArray &value);
void SetDefHeight(int value);
int GetDefHeight() const;
void SetDefSize(int value);
int GetDefSize() const;
private:
Q_DISABLE_COPY(VTapeSettings)
};

View File

@ -51,6 +51,7 @@
#include <QDateTime>
#include <QtXmlPatterns>
#include <QIcon>
#include <Qt>
QT_WARNING_PUSH
QT_WARNING_DISABLE_CLANG("-Wmissing-prototypes")
@ -171,7 +172,7 @@ inline void noisyFailureMsgHandler(QtMsgType type, const QMessageLogContext &con
const bool isPatternMessage = qApp->IsPatternMessage(msg);
if (isPatternMessage)
{
logMsg = logMsg.remove(VAbstractApplication::patternMessageSignature);
logMsg = logMsg.remove(VAbstractValApplication::patternMessageSignature);
}
{
@ -224,7 +225,11 @@ inline void noisyFailureMsgHandler(QtMsgType type, const QMessageLogContext &con
vStdOut().flush();
vStdErr().flush();
#if QT_VERSION < QT_VERSION_CHECK(5, 15, 0)
(*qApp->LogFile()) << debugdate << endl;
#else
(*qApp->LogFile()) << debugdate << Qt::endl;
#endif
}
if (isGuiThread)
@ -266,7 +271,7 @@ inline void noisyFailureMsgHandler(QtMsgType type, const QMessageLogContext &con
break;
}
messageBox.setText(VAbstractApplication::ClearMessage(logMsg));
messageBox.setText(VAbstractValApplication::ClearMessage(logMsg));
messageBox.setStandardButtons(QMessageBox::Ok);
messageBox.setWindowModality(Qt::ApplicationModal);
messageBox.setModal(true);
@ -304,7 +309,7 @@ inline void noisyFailureMsgHandler(QtMsgType type, const QMessageLogContext &con
* @param argv command line.
*/
VApplication::VApplication(int &argc, char **argv)
: VAbstractApplication(argc, argv),
: VAbstractValApplication(argc, argv),
trVars(nullptr),
autoSaveTimer(nullptr),
lockLog(),
@ -342,7 +347,7 @@ void VApplication::NewValentina(const QString &fileName)
qCDebug(vApp, "New process without arguments. program = %s",
qUtf8Printable(QCoreApplication::applicationFilePath()));
// Path can contain spaces.
if (QProcess::startDetached("\""+QCoreApplication::applicationFilePath()+"\""))
if (QProcess::startDetached(QCoreApplication::applicationFilePath(), QStringList()))
{
qCDebug(vApp, "The process was started successfully.");
}
@ -355,7 +360,7 @@ void VApplication::NewValentina(const QString &fileName)
{
const QString run = QStringLiteral("\"%1\" \"%2\"").arg(QCoreApplication::applicationFilePath(), fileName);
qCDebug(vApp, "New process with arguments. program = %s", qUtf8Printable(run));
if (QProcess::startDetached(run))
if (QProcess::startDetached(QCoreApplication::applicationFilePath(), QStringList{fileName}))
{
qCDebug(vApp, "The process was started successfully.");
}

View File

@ -29,11 +29,12 @@
#ifndef VAPPLICATION_H
#define VAPPLICATION_H
#include "../vmisc/vabstractapplication.h"
#include "../vmisc/vabstractvalapplication.h"
#include "../vwidgets/vmaingraphicsview.h"
#include "../vpatterndb/vtranslatevars.h"
#include "vvalentinasettings.h"
#include "vcmdexport.h"
#include "vlockguard.h"
class VApplication;// use in define
@ -45,7 +46,7 @@ class VApplication;// use in define
/**
* @brief The VApplication class reimplamentation QApplication class.
*/
class VApplication : public VAbstractApplication
class VApplication : public VAbstractValApplication
{
Q_OBJECT
public:
@ -115,7 +116,5 @@ inline void VApplication::setAutoSaveTimer(QTimer *value)
{
autoSaveTimer = value;
}
//---------------------------------------------------------------------------------------------------------------------
#endif // VAPPLICATION_H

View File

@ -506,40 +506,68 @@ bool VCommandLine::IsGuiEnabled() const
}
//---------------------------------------------------------------------------------------------------------------------
bool VCommandLine::IsSetGradationSize() const
bool VCommandLine::IsSetDimensionA() const
{
return IsOptionSet(LONG_OPTION_GRADATIONSIZE);
return IsOptionSet(LONG_OPTION_DIMENSION_A);
}
//---------------------------------------------------------------------------------------------------------------------
bool VCommandLine::IsSetGradationHeight() const
bool VCommandLine::IsSetDimensionB() const
{
return IsOptionSet(LONG_OPTION_GRADATIONHEIGHT);
return IsOptionSet(LONG_OPTION_DIMENSION_B);
}
//---------------------------------------------------------------------------------------------------------------------
QString VCommandLine::OptGradationSize() const
bool VCommandLine::IsSetDimensionC() const
{
const QString size = OptionValue(LONG_OPTION_GRADATIONSIZE);
if (VMeasurement::IsGradationSizeValid(size))
return IsOptionSet(LONG_OPTION_DIMENSION_C);
}
//---------------------------------------------------------------------------------------------------------------------
int VCommandLine::OptDimensionA() const
{
const QString value = OptionValue(LONG_OPTION_DIMENSION_A);
bool ok = false;
int dimensionAValue = value.toInt(&ok);
if(ok && dimensionAValue > 0)
{
return size;
return dimensionAValue;
}
qCritical() << translate("VCommandLine", "Invalid gradation size value.") << "\n";
qCritical() << translate("VCommandLine", "Invalid dimension A value.") << "\n";
const_cast<VCommandLine*>(this)->parser.showHelp(V_EX_USAGE);
}
//---------------------------------------------------------------------------------------------------------------------
QString VCommandLine::OptGradationHeight() const
int VCommandLine::OptDimensionB() const
{
const QString height = OptionValue(LONG_OPTION_GRADATIONHEIGHT);
if (VMeasurement::IsGradationHeightValid(height))
const QString value = OptionValue(LONG_OPTION_DIMENSION_B);
bool ok = false;
int dimensionBValue = value.toInt(&ok);
if(ok && dimensionBValue > 0)
{
return height;
return dimensionBValue;
}
qCritical() << translate("VCommandLine", "Invalid gradation height value.") << "\n";
qCritical() << translate("VCommandLine", "Invalid dimension B value.") << "\n";
const_cast<VCommandLine*>(this)->parser.showHelp(V_EX_USAGE);
}
//---------------------------------------------------------------------------------------------------------------------
int VCommandLine::OptDimensionC() const
{
const QString value = OptionValue(LONG_OPTION_DIMENSION_C);
bool ok = false;
int dimensionCValue = value.toInt(&ok);
if(ok && dimensionCValue > 0)
{
return dimensionCValue;
}
qCritical() << translate("VCommandLine", "Invalid dimension C value.") << "\n";
const_cast<VCommandLine*>(this)->parser.showHelp(V_EX_USAGE);
}
@ -635,14 +663,19 @@ void VCommandLine::InitCommandLineOptions()
{LONG_OPTION_EXPORTSUCHDETAILS,
translate("VCommandLine", "Export only details that match a piece name regex."),
translate("VCommandLine", "The name regex")},
{{SINGLE_OPTION_GRADATIONSIZE, LONG_OPTION_GRADATIONSIZE},
translate("VCommandLine", "Set size value for pattern file, that was opened with multisize measurements "
"(export mode). Valid values: %1cm.").arg(VMeasurement::WholeListSizes(Unit::Cm) .join(QStringLiteral(", "))),
translate("VCommandLine", "The size value")},
{{SINGLE_OPTION_GRADATIONHEIGHT, LONG_OPTION_GRADATIONHEIGHT},
translate("VCommandLine", "Set height value for pattern file, that was opened with multisize measurements "
"(export mode). Valid values: %1cm.").arg(VMeasurement::WholeListHeights(Unit::Cm).join(QStringLiteral(", "))),
translate("VCommandLine", "The height value")},
{LONG_OPTION_DIMENSION_A,
translate("VCommandLine", "Set base for dimension A in the multisize measurements units (export mode)."),
translate("VCommandLine", "The dimension A base")},
{LONG_OPTION_DIMENSION_B,
translate("VCommandLine", "Set base for dimension B in the multisize measurements units (export mode)."),
translate("VCommandLine", "The dimension B base")},
{LONG_OPTION_DIMENSION_C,
translate("VCommandLine", "Set base for dimension C in the multisize measurements units (export mode)."),
translate("VCommandLine", "The dimension C base")},
{LONG_OPTION_USER_MATERIAL,
translate("VCommandLine", "Use this option to override user material defined in pattern. The value must be in "
"form <number>@<user matrial name>. The number should be in range from 1 to %1. For example, 1@Fabric2. The "

View File

@ -115,11 +115,13 @@ public:
bool IsGuiEnabled()const;
bool IsSetGradationSize() const;
bool IsSetGradationHeight() const;
bool IsSetDimensionA() const;
bool IsSetDimensionB() const;
bool IsSetDimensionC() const;
QString OptGradationSize() const;
QString OptGradationHeight() const;
int OptDimensionA() const;
int OptDimensionB() const;
int OptDimensionC() const;
QMarginsF TiledPageMargins() const;
VAbstractLayoutDialog::PaperSizeTemplate OptTiledPaperSize() const;

View File

@ -49,10 +49,11 @@ VFormulaPropertyEditor::VFormulaPropertyEditor(QWidget *parent)
// Create the tool button
ToolButton = new QToolButton(this);
ToolButton->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Minimum);
ToolButton->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
ToolButton->setText("...");
ToolButton->setIcon(QIcon("://icon/16x16/fx.png"));
ToolButton->setFixedWidth(20);
ToolButton->setIconSize(QSize(16, 16));
ToolButton->setFixedSize(24, 24);
ToolButton->installEventFilter(this);
setFocusProxy(ToolButton); // Make the ToolButton the focus proxy
setFocusPolicy(ToolButton->focusPolicy());
@ -60,6 +61,7 @@ VFormulaPropertyEditor::VFormulaPropertyEditor(QWidget *parent)
// Create the text label
TextLabel = new QLabel(this);
TextLabel->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
TextLabel->setText(formula.getStringValue());
// The layout (a horizontal layout)
@ -68,7 +70,7 @@ VFormulaPropertyEditor::VFormulaPropertyEditor(QWidget *parent)
layout->setMargin(0);
layout->addWidget(TextLabel);
// Spacer (this is needed for proper display of the label and button)
layout->addSpacerItem(new QSpacerItem(1000000000, 0, QSizePolicy::Expanding, QSizePolicy::Expanding));
layout->addSpacerItem(new QSpacerItem(1000000000, 0, QSizePolicy::Expanding, QSizePolicy::Preferred));
layout->addWidget(ToolButton);
}

File diff suppressed because it is too large Load Diff

View File

@ -67,35 +67,86 @@ private:
void ShowItemOptions(QGraphicsItem *item);
template<class Tool>
void SetPointName(const QString &name);
void SetPointName(VPE::VProperty *property);
template<class Tool>
void SetPointName1(const QString &name);
void SetPointName1(VPE::VProperty *property);
template<class Tool>
void SetPointName2(const QString &name);
void SetPointName2(VPE::VProperty *property);
template<class Tool>
void SetOperationSuffix(const QString &suffix);
void SetOperationSuffix(VPE::VProperty *property);
template<class Type>
Type GetCrossPoint(const QVariant &value);
template<class Tool>
void SetCrossCirclesPoint(const QVariant &value);
void SetCrossCirclesPoint(VPE::VProperty *property);
template<class Tool>
void SetVCrossCurvesPoint(const QVariant &value);
void SetVCrossCurvesPoint(VPE::VProperty *property);
template<class Tool>
void SetHCrossCurvesPoint(const QVariant &value);
void SetHCrossCurvesPoint(VPE::VProperty *property);
template<class Tool>
void SetAxisType(const QVariant &value);
void SetAxisType(VPE::VProperty *property);
template<class Tool>
void SetNotes(VPE::VProperty *property);
template<class Tool>
void SetAlias(VPE::VProperty *property);
template<class Tool>
void SetAlias1(VPE::VProperty *property);
template<class Tool>
void SetAlias2(VPE::VProperty *property);
template<class Tool>
void SetLineType(VPE::VProperty *property);
template<class Tool>
void SetLineColor(VPE::VProperty *property);
template<class Tool>
void SetFormulaLength(VPE::VProperty *property);
template<class Tool>
void SetFormulaAngle(VPE::VProperty *property);
template<class Tool>
void SetFormulaRadius(VPE::VProperty *property);
template<class Tool>
void SetFormulaF1(VPE::VProperty *property);
template<class Tool>
void SetFormulaF2(VPE::VProperty *property);
template<class Tool>
void SetPenStyle(VPE::VProperty *property);
template<class Tool>
void SetFormulaRotationAngle(VPE::VProperty *property);
template<class Tool>
void SetApproximationScale(VPE::VProperty *property);
template<class Tool>
void AddPropertyObjectName(Tool *i, const QString &propertyName, bool readOnly = false);
template<class Tool>
void AddPropertyAlias(Tool *i, const QString &propertyName);
template<class Tool>
void AddPropertyAlias1(Tool *i, const QString &propertyName);
template<class Tool>
void AddPropertyAlias2(Tool *i, const QString &propertyName);
template<class Tool>
void AddPropertyPointName1(Tool *i, const QString &propertyName);
@ -131,6 +182,7 @@ private:
void AddPropertyFormula(const QString &propertyName, const VFormula &formula, const QString &attrName);
void AddPropertyParentPointName(const QString &pointName, const QString &propertyName,
const QString &propertyAttribure);
void AddPropertyText(const QString &propertyName, const QString &text, const QString &attrName);
QStringList PropertiesList() const;

View File

@ -373,7 +373,7 @@ void DialogFinalMeasurements::SaveFormula()
{
QTableWidgetItem *result = ui->tableWidget->item(row, 1);
//Show unit in dialog lable (cm, mm or inch)
const QString postfix = UnitsToStr(qApp->patternUnit());
const QString postfix = UnitsToStr(qApp->patternUnits());
ui->labelCalculatedValue->setText(result->text() + QChar(QChar::Space) +postfix);
return;
}
@ -381,7 +381,7 @@ void DialogFinalMeasurements::SaveFormula()
if (text.isEmpty())
{
//Show unit in dialog lable (cm, mm or inch)
const QString postfix = UnitsToStr(qApp->patternUnit());
const QString postfix = UnitsToStr(qApp->patternUnits());
ui->labelCalculatedValue->setText(tr("Error") + " (" + postfix + "). " + tr("Empty field."));
return;
}
@ -455,7 +455,7 @@ void DialogFinalMeasurements::Fx()
dialog->setWindowTitle(tr("Edit measurement"));
dialog->SetFormula(qApp->TrVars()->TryFormulaFromUser(ui->plainTextEditFormula->toPlainText(),
qApp->Settings()->GetOsSeparator()));
const QString postfix = UnitsToStr(qApp->patternUnit(), true);
const QString postfix = UnitsToStr(qApp->patternUnits(), true);
dialog->setPostfix(postfix);//Show unit in dialog lable (cm, mm or inch)
if (dialog->exec() == QDialog::Accepted)
@ -513,7 +513,7 @@ void DialogFinalMeasurements::FillFinalMeasurements(bool freshCall)
//---------------------------------------------------------------------------------------------------------------------
void DialogFinalMeasurements::ShowUnits()
{
const QString unit = UnitsToStr(qApp->patternUnit());
const QString unit = UnitsToStr(qApp->patternUnits());
{
// calculated value
@ -554,7 +554,7 @@ void DialogFinalMeasurements::AddCell(const QString &text, int row, int column,
//---------------------------------------------------------------------------------------------------------------------
bool DialogFinalMeasurements::EvalUserFormula(const QString &formula, bool fromUser)
{
const QString postfix = UnitsToStr(qApp->patternUnit());//Show unit in dialog lable (cm, mm or inch)
const QString postfix = UnitsToStr(qApp->patternUnits());//Show unit in dialog lable (cm, mm or inch)
if (formula.isEmpty())
{
ui->labelCalculatedValue->setText(tr("Error") + " (" + postfix + "). " + tr("Empty field."));

View File

@ -268,7 +268,7 @@ void DialogIncrements::FillAnglesCurves()
//---------------------------------------------------------------------------------------------------------------------
void DialogIncrements::ShowUnits()
{
const QString unit = UnitsToStr(qApp->patternUnit());
const QString unit = UnitsToStr(qApp->patternUnits());
ShowHeaderUnits(ui->tableWidgetIncrement, 1, unit);// calculated value
ShowHeaderUnits(ui->tableWidgetIncrement, 2, unit);// formula
@ -361,7 +361,7 @@ QString DialogIncrements::ClearIncrementName(const QString &name) const
//---------------------------------------------------------------------------------------------------------------------
bool DialogIncrements::EvalIncrementFormula(const QString &formula, bool fromUser, VContainer *data, QLabel *label)
{
const QString postfix = UnitsToStr(qApp->patternUnit());//Show unit in dialog lable (cm, mm or inch)
const QString postfix = UnitsToStr(qApp->patternUnits());//Show unit in dialog lable (cm, mm or inch)
if (formula.isEmpty())
{
label->setText(tr("Error") + " (" + postfix + "). " + tr("Empty field."));
@ -816,6 +816,9 @@ void DialogIncrements::FullUpdateFromFile()
{
hasChanges = false;
const int incrementRow = ui->tableWidgetIncrement->currentRow();
const int pcRow = ui->tableWidgetPC->currentRow();
ui->tableWidgetLines->clearContents();
ui->tableWidgetSplines->clearContents();
ui->tableWidgetAnglesCurves->clearContents();
@ -835,6 +838,9 @@ void DialogIncrements::FullUpdateFromFile()
search->RefreshList(ui->lineEditFind->text());
searchPC->RefreshList(ui->lineEditFindPC->text());
ui->tableWidgetIncrement->selectRow(incrementRow);
ui->tableWidgetPC->selectRow(pcRow);
}
//---------------------------------------------------------------------------------------------------------------------
@ -1222,7 +1228,7 @@ void DialogIncrements::SaveIncrFormula()
{
QTableWidgetItem *result = table->item(row, 1);
//Show unit in dialog lable (cm, mm or inch)
const QString postfix = UnitsToStr(qApp->patternUnit());
const QString postfix = UnitsToStr(qApp->patternUnits());
labelCalculatedValue->setText(result->text() + QChar(QChar::Space) +postfix);
return;
}
@ -1230,7 +1236,7 @@ void DialogIncrements::SaveIncrFormula()
if (text.isEmpty())
{
//Show unit in dialog lable (cm, mm or inch)
const QString postfix = UnitsToStr(qApp->patternUnit());
const QString postfix = UnitsToStr(qApp->patternUnits());
labelCalculatedValue->setText(tr("Error") + " (" + postfix + "). " + tr("Empty field."));
return;
}
@ -1368,7 +1374,7 @@ void DialogIncrements::Fx()
dialog->SetFormula(qApp->TrVars()->TryFormulaFromUser(plainTextEditFormula->toPlainText(),
qApp->Settings()->GetOsSeparator()));
const QString postfix = UnitsToStr(qApp->patternUnit(), true);
const QString postfix = UnitsToStr(qApp->patternUnits(), true);
dialog->setPostfix(postfix);//Show unit in dialog lable (cm, mm or inch)
if (dialog->exec() == QDialog::Accepted)

View File

@ -71,7 +71,7 @@ DialogLayoutScale::~DialogLayoutScale()
void DialogLayoutScale::SetTiledMargins(QMarginsF margins)
{
// read Margins top, right, bottom, left
margins = UnitConvertor(margins, Unit::Mm, qApp->patternUnit());
margins = UnitConvertor(margins, Unit::Mm, qApp->patternUnits());
ui->doubleSpinBoxLeftField->setValue(margins.left());
ui->doubleSpinBoxTopField->setValue(margins.top());
@ -89,7 +89,7 @@ QMarginsF DialogLayoutScale::GetTiledMargins() const
ui->doubleSpinBoxBottomField->value()
);
return UnitConvertor(margins, qApp->patternUnit(), Unit::Mm);
return UnitConvertor(margins, qApp->patternUnits(), Unit::Mm);
}
//---------------------------------------------------------------------------------------------------------------------
@ -181,7 +181,7 @@ void DialogLayoutScale::VerticalScaleChanged(double d)
void DialogLayoutScale::ReadSettings()
{
VValentinaSettings *settings = qApp->ValentinaSettings();
const Unit unit = qApp->patternUnit();
const Unit unit = qApp->patternUnits();
// read Margins top, right, bottom, left
const QMarginsF margins = settings->GetTiledPDFMargins(unit);
@ -201,7 +201,7 @@ void DialogLayoutScale::ReadSettings()
void DialogLayoutScale::WriteSettings() const
{
VValentinaSettings *settings = qApp->ValentinaSettings();
const Unit unit = qApp->patternUnit();
const Unit unit = qApp->patternUnits();
// write Margins top, right, bottom, left
QMarginsF margins = QMarginsF(

View File

@ -82,8 +82,7 @@ void DialogPatternMaterials::SetPatternMaterials(const QMap<int, QString> &list)
for (int i = 0; i < userMaterialPlaceholdersQuantity; ++i)
{
const QString translated = qApp->TrVars()->PlaceholderToUser(pl_userMaterial + QString::number(i + 1));
QTableWidgetItem *item = new QTableWidgetItem(per + translated + per);
QTableWidgetItem *item = new QTableWidgetItem(per + pl_userMaterial + QString::number(i + 1) + per);
item->setFlags(item->flags() ^ Qt::ItemIsEditable);
item->setTextAlignment(Qt::AlignLeft);

View File

@ -34,6 +34,7 @@
#include <QMenu>
#include <QDate>
#include <QMessageBox>
#include <QRadioButton>
#include "../xml/vpattern.h"
#include "../vpatterndb/vcontainer.h"
@ -42,21 +43,12 @@
#include "dialogknownmaterials.h"
#include "dialogpatternmaterials.h"
// calc how many combinations we have
static const int heightsCount = (static_cast<int>(GHeights::H200) -
(static_cast<int>(GHeights::H50) - heightStep))/heightStep;
static const int sizesCount = (static_cast<int>(GSizes::S72) - (static_cast<int>(GSizes::S22) - sizeStep))/sizeStep;
//---------------------------------------------------------------------------------------------------------------------
DialogPatternProperties::DialogPatternProperties(VPattern *doc, VContainer *pattern, QWidget *parent)
: QDialog(parent),
ui(new Ui::DialogPatternProperties),
doc(doc),
pattern(pattern),
heightsChecked(heightsCount),
sizesChecked(sizesCount),
heights (QMap<GHeights, bool>()),
sizes(QMap<GSizes, bool>()),
data(QMap<QCheckBox *, int>()),
descriptionChanged(false),
gradationChanged(false),
@ -79,6 +71,8 @@ DialogPatternProperties::DialogPatternProperties(VPattern *doc, VContainer *pat
setWindowFlags(Qt::Window);
#endif
ui->lineEditCustomerEmail->setClearButtonEnabled(true);
SCASSERT(doc != nullptr)
VValentinaSettings *settings = qApp->ValentinaSettings();
@ -140,44 +134,11 @@ DialogPatternProperties::DialogPatternProperties(VPattern *doc, VContainer *pat
connect(bCancel, &QPushButton::clicked, this, &DialogPatternProperties::close);
ui->tabWidget->setCurrentIndex(0);
if (qApp->patternType() != MeasurementsType::Multisize)
if (qApp->GetMeasurementsType() != MeasurementsType::Multisize)
{
ui->tabWidget->setTabEnabled(1, false);
}
InitHeights();
InitSizes();
heights = doc->GetGradationHeights();
sizes = doc->GetGradationSizes();
SetOptions(heights);
SetOptions(sizes);
InitComboBox(ui->comboBoxHeight, heights);
InitComboBox(ui->comboBoxSize, sizes);
const QString height = QString().setNum(doc->GetDefCustomHeight());
SetDefaultHeight(height);
const QString size = QString().setNum(doc->GetDefCustomSize());
SetDefaultSize(size);
connect(ui->radioButtonDefFromP, &QRadioButton::toggled, this, [this]()
{
ui->comboBoxHeight->setEnabled(ui->radioButtonDefFromP->isChecked());
ui->comboBoxSize->setEnabled(ui->radioButtonDefFromP->isChecked());
});
auto DefValueChanged = [this](){defaultChanged = true;};
connect(ui->radioButtonDefFromP, &QRadioButton::toggled, this, DefValueChanged);
ui->radioButtonDefFromP->setChecked(doc->IsDefCustom());
connect(ui->comboBoxHeight, QOverload<int>::of(&QComboBox::currentIndexChanged), this, DefValueChanged);
connect(ui->comboBoxSize, QOverload<int>::of(&QComboBox::currentIndexChanged), this, DefValueChanged);
const bool readOnly = doc->IsReadOnly();
ui->checkBoxPatternReadOnly->setChecked(readOnly);
if (not readOnly)
@ -198,21 +159,29 @@ DialogPatternProperties::DialogPatternProperties(VPattern *doc, VContainer *pat
ui->lineEditPatternNumber->setText(doc->GetPatternNumber());
ui->lineEditCompanyName->setText(doc->GetCompanyName());
if (qApp->patternType() == MeasurementsType::Individual)
ui->lineEditCustomerName->setText(qApp->GetCustomerName());
ui->lineEditCustomerEmail->setText(qApp->CustomerEmail());
ui->dateEditCustomerBirthDate->setDate(qApp->GetCustomerBirthDate());
if (qApp->GetMeasurementsType() == MeasurementsType::Individual)
{
ui->lineEditCustomerName->setText(qApp->GetCustomerName());
ui->lineEditCustomerName->setReadOnly(true);
ui->lineEditCustomerName->setToolTip(tr("The customer name from individual measurements"));
}
else
{
ui->lineEditCustomerName->setText(doc->GetCustomerName());
ui->lineEditCustomerEmail->setReadOnly(true);
ui->lineEditCustomerEmail->setToolTip(tr("The customer email from individual measurements"));
ui->dateEditCustomerBirthDate->setReadOnly(true);
ui->dateEditCustomerBirthDate->setToolTip(tr("The customer birth date from individual measurements"));
}
connect(ui->lineEditPatternName, &QLineEdit::editingFinished, this, &DialogPatternProperties::LabelDataChanged);
connect(ui->lineEditPatternNumber, &QLineEdit::editingFinished, this, &DialogPatternProperties::LabelDataChanged);
connect(ui->lineEditCompanyName, &QLineEdit::editingFinished, this, &DialogPatternProperties::LabelDataChanged);
connect(ui->lineEditCustomerName, &QLineEdit::editingFinished, this, &DialogPatternProperties::LabelDataChanged);
connect(ui->lineEditCustomerEmail, &QLineEdit::editingFinished, this, &DialogPatternProperties::LabelDataChanged);
connect(ui->dateEditCustomerBirthDate, &QDateEdit::editingFinished, this,
&DialogPatternProperties::LabelDataChanged);
connect(ui->pushButtonEditPatternLabel, &QPushButton::clicked, this, &DialogPatternProperties::EditLabel);
connect(ui->pushButtonPatternMaterials, &QPushButton::clicked, this,
&DialogPatternProperties::ManagePatternMaterials);
@ -245,13 +214,9 @@ void DialogPatternProperties::Apply()
SaveDescription();
break;
case 1:
SaveGradation();
SaveDefValues();
break;
case 2:
SaveReadOnlyState();
break;
case 3:
case 2:
SaveLabelData();
SaveTemplateData();
SaveMaterialData();
@ -266,8 +231,6 @@ void DialogPatternProperties::Apply()
void DialogPatternProperties::Ok()
{
SaveDescription();
SaveGradation();
SaveDefValues();
SaveReadOnlyState();
SaveLabelData();
SaveTemplateData();
@ -278,143 +241,12 @@ void DialogPatternProperties::Ok()
close();
}
//---------------------------------------------------------------------------------------------------------------------
void DialogPatternProperties::SelectAll(int state)
{
QCheckBox* box = qobject_cast<QCheckBox*>(sender());
if (box)
{
if (box == ui->checkBoxAllHeights)
{
if (state == Qt::Checked)
{
SetHeightsChecked(true);
}
else if (state == Qt::Unchecked)
{
SetHeightsChecked(false);
}
if (data.contains(box))
{
heights.insert(static_cast<GHeights>(data.value(box)), box->isChecked());
}
}
if (box == ui->checkBoxAllSizes)
{
if (state == Qt::Checked)
{
SetSizesChecked(true);
}
else if (state == Qt::Unchecked)
{
SetSizesChecked(false);
}
if (data.contains(box))
{
sizes.insert(static_cast<GSizes>(data.value(box)), box->isChecked());
}
}
}
}
//---------------------------------------------------------------------------------------------------------------------
void DialogPatternProperties::CheckStateHeight(int state)
{
QCheckBox* box = qobject_cast<QCheckBox*>(sender());
if (box)
{
if (state == Qt::Checked)
{
++heightsChecked;
if (heightsChecked == heightsCount)
{
ui->checkBoxAllHeights->blockSignals(true);//don't touch anothers checkboxes
ui->checkBoxAllHeights->setCheckState(Qt::Checked);
heights.insert(GHeights::ALL, true);
ui->checkBoxAllHeights->blockSignals(false);
}
}
else if (state == Qt::Unchecked)
{
if (heightsChecked == heightsCount)
{
ui->checkBoxAllHeights->blockSignals(true);//don't touch anothers checkboxes
ui->checkBoxAllHeights->setCheckState(Qt::Unchecked);
heights.insert(GHeights::ALL, false);
ui->checkBoxAllHeights->blockSignals(false);
}
--heightsChecked;
}
if (data.contains(box))
{
heights.insert(static_cast<GHeights>(data.value(box)), box->isChecked());
}
UpdateDefHeight();
CheckApplyOk();
gradationChanged = true;
}
}
//---------------------------------------------------------------------------------------------------------------------
void DialogPatternProperties::CheckStateSize(int state)
{
QCheckBox* box = qobject_cast<QCheckBox*>(sender());
if (box)
{
if (state == Qt::Checked)
{
++sizesChecked;
if (sizesChecked == sizesCount)
{
ui->checkBoxAllSizes->blockSignals(true);//don't touch anothers checkboxes
ui->checkBoxAllSizes->setCheckState(Qt::Checked);
sizes.insert(GSizes::ALL, true);
ui->checkBoxAllSizes->blockSignals(false);
}
}
else if (state == Qt::Unchecked)
{
if (sizesChecked == sizesCount)
{
ui->checkBoxAllSizes->blockSignals(true);//don't touch anothers checkboxes
ui->checkBoxAllSizes->setCheckState(Qt::Unchecked);
sizes.insert(GSizes::ALL, false);
ui->checkBoxAllSizes->blockSignals(false);
}
--sizesChecked;
}
if (data.contains(box))
{
sizes.insert(static_cast<GSizes>(data.value(box)), box->isChecked());
}
UpdateDefSize();
CheckApplyOk();
gradationChanged = true;
}
}
//---------------------------------------------------------------------------------------------------------------------
void DialogPatternProperties::DescEdited()
{
descriptionChanged = true;
}
//---------------------------------------------------------------------------------------------------------------------
void DialogPatternProperties::DefValueChanged()
{
defaultChanged = true;
}
//---------------------------------------------------------------------------------------------------------------------
void DialogPatternProperties::LabelDataChanged()
{
@ -422,134 +254,6 @@ void DialogPatternProperties::LabelDataChanged()
askSaveLabelData = true;
}
//---------------------------------------------------------------------------------------------------------------------
void DialogPatternProperties::SetHeightsChecked(bool enabled)
{
ui->checkBoxH50->setChecked(enabled);
ui->checkBoxH56->setChecked(enabled);
ui->checkBoxH62->setChecked(enabled);
ui->checkBoxH68->setChecked(enabled);
ui->checkBoxH74->setChecked(enabled);
ui->checkBoxH80->setChecked(enabled);
ui->checkBoxH86->setChecked(enabled);
ui->checkBoxH92->setChecked(enabled);
ui->checkBoxH98->setChecked(enabled);
ui->checkBoxH104->setChecked(enabled);
ui->checkBoxH110->setChecked(enabled);
ui->checkBoxH116->setChecked(enabled);
ui->checkBoxH122->setChecked(enabled);
ui->checkBoxH128->setChecked(enabled);
ui->checkBoxH134->setChecked(enabled);
ui->checkBoxH140->setChecked(enabled);
ui->checkBoxH146->setChecked(enabled);
ui->checkBoxH152->setChecked(enabled);
ui->checkBoxH158->setChecked(enabled);
ui->checkBoxH164->setChecked(enabled);
ui->checkBoxH170->setChecked(enabled);
ui->checkBoxH176->setChecked(enabled);
ui->checkBoxH182->setChecked(enabled);
ui->checkBoxH188->setChecked(enabled);
ui->checkBoxH194->setChecked(enabled);
ui->checkBoxH200->setChecked(enabled);
}
//---------------------------------------------------------------------------------------------------------------------
void DialogPatternProperties::SetSizesChecked(bool enabled)
{
ui->checkBoxS22->setChecked(enabled);
ui->checkBoxS24->setChecked(enabled);
ui->checkBoxS26->setChecked(enabled);
ui->checkBoxS28->setChecked(enabled);
ui->checkBoxS30->setChecked(enabled);
ui->checkBoxS32->setChecked(enabled);
ui->checkBoxS34->setChecked(enabled);
ui->checkBoxS36->setChecked(enabled);
ui->checkBoxS38->setChecked(enabled);
ui->checkBoxS40->setChecked(enabled);
ui->checkBoxS42->setChecked(enabled);
ui->checkBoxS44->setChecked(enabled);
ui->checkBoxS46->setChecked(enabled);
ui->checkBoxS48->setChecked(enabled);
ui->checkBoxS50->setChecked(enabled);
ui->checkBoxS52->setChecked(enabled);
ui->checkBoxS54->setChecked(enabled);
ui->checkBoxS56->setChecked(enabled);
ui->checkBoxS58->setChecked(enabled);
ui->checkBoxS60->setChecked(enabled);
ui->checkBoxS62->setChecked(enabled);
ui->checkBoxS64->setChecked(enabled);
ui->checkBoxS66->setChecked(enabled);
ui->checkBoxS68->setChecked(enabled);
ui->checkBoxS70->setChecked(enabled);
ui->checkBoxS72->setChecked(enabled);
}
//---------------------------------------------------------------------------------------------------------------------
void DialogPatternProperties::InitHeights()
{
Init(ui->checkBoxAllHeights, static_cast<int>(GHeights::ALL), &DialogPatternProperties::SelectAll);
Init(ui->checkBoxH50, static_cast<int>(GHeights::H50), &DialogPatternProperties::CheckStateHeight);
Init(ui->checkBoxH56, static_cast<int>(GHeights::H56), &DialogPatternProperties::CheckStateHeight);
Init(ui->checkBoxH62, static_cast<int>(GHeights::H62), &DialogPatternProperties::CheckStateHeight);
Init(ui->checkBoxH68, static_cast<int>(GHeights::H68), &DialogPatternProperties::CheckStateHeight);
Init(ui->checkBoxH74, static_cast<int>(GHeights::H74), &DialogPatternProperties::CheckStateHeight);
Init(ui->checkBoxH80, static_cast<int>(GHeights::H80), &DialogPatternProperties::CheckStateHeight);
Init(ui->checkBoxH86, static_cast<int>(GHeights::H86), &DialogPatternProperties::CheckStateHeight);
Init(ui->checkBoxH92, static_cast<int>(GHeights::H92), &DialogPatternProperties::CheckStateHeight);
Init(ui->checkBoxH98, static_cast<int>(GHeights::H98), &DialogPatternProperties::CheckStateHeight);
Init(ui->checkBoxH104, static_cast<int>(GHeights::H104), &DialogPatternProperties::CheckStateHeight);
Init(ui->checkBoxH110, static_cast<int>(GHeights::H110), &DialogPatternProperties::CheckStateHeight);
Init(ui->checkBoxH116, static_cast<int>(GHeights::H116), &DialogPatternProperties::CheckStateHeight);
Init(ui->checkBoxH122, static_cast<int>(GHeights::H122), &DialogPatternProperties::CheckStateHeight);
Init(ui->checkBoxH128, static_cast<int>(GHeights::H128), &DialogPatternProperties::CheckStateHeight);
Init(ui->checkBoxH134, static_cast<int>(GHeights::H134), &DialogPatternProperties::CheckStateHeight);
Init(ui->checkBoxH140, static_cast<int>(GHeights::H140), &DialogPatternProperties::CheckStateHeight);
Init(ui->checkBoxH146, static_cast<int>(GHeights::H146), &DialogPatternProperties::CheckStateHeight);
Init(ui->checkBoxH152, static_cast<int>(GHeights::H152), &DialogPatternProperties::CheckStateHeight);
Init(ui->checkBoxH158, static_cast<int>(GHeights::H158), &DialogPatternProperties::CheckStateHeight);
Init(ui->checkBoxH164, static_cast<int>(GHeights::H164), &DialogPatternProperties::CheckStateHeight);
Init(ui->checkBoxH170, static_cast<int>(GHeights::H170), &DialogPatternProperties::CheckStateHeight);
Init(ui->checkBoxH176, static_cast<int>(GHeights::H176), &DialogPatternProperties::CheckStateHeight);
Init(ui->checkBoxH182, static_cast<int>(GHeights::H182), &DialogPatternProperties::CheckStateHeight);
Init(ui->checkBoxH188, static_cast<int>(GHeights::H188), &DialogPatternProperties::CheckStateHeight);
Init(ui->checkBoxH194, static_cast<int>(GHeights::H194), &DialogPatternProperties::CheckStateHeight);
Init(ui->checkBoxH200, static_cast<int>(GHeights::H200), &DialogPatternProperties::CheckStateHeight);
}
//---------------------------------------------------------------------------------------------------------------------
void DialogPatternProperties::InitSizes()
{
Init(ui->checkBoxAllSizes, static_cast<int>(GSizes::ALL), &DialogPatternProperties::SelectAll);
Init(ui->checkBoxS22, static_cast<int>(GSizes::S22), &DialogPatternProperties::CheckStateSize);
Init(ui->checkBoxS24, static_cast<int>(GSizes::S24), &DialogPatternProperties::CheckStateSize);
Init(ui->checkBoxS26, static_cast<int>(GSizes::S26), &DialogPatternProperties::CheckStateSize);
Init(ui->checkBoxS28, static_cast<int>(GSizes::S28), &DialogPatternProperties::CheckStateSize);
Init(ui->checkBoxS30, static_cast<int>(GSizes::S30), &DialogPatternProperties::CheckStateSize);
Init(ui->checkBoxS32, static_cast<int>(GSizes::S32), &DialogPatternProperties::CheckStateSize);
Init(ui->checkBoxS34, static_cast<int>(GSizes::S34), &DialogPatternProperties::CheckStateSize);
Init(ui->checkBoxS36, static_cast<int>(GSizes::S36), &DialogPatternProperties::CheckStateSize);
Init(ui->checkBoxS38, static_cast<int>(GSizes::S38), &DialogPatternProperties::CheckStateSize);
Init(ui->checkBoxS40, static_cast<int>(GSizes::S40), &DialogPatternProperties::CheckStateSize);
Init(ui->checkBoxS42, static_cast<int>(GSizes::S42), &DialogPatternProperties::CheckStateSize);
Init(ui->checkBoxS44, static_cast<int>(GSizes::S44), &DialogPatternProperties::CheckStateSize);
Init(ui->checkBoxS46, static_cast<int>(GSizes::S46), &DialogPatternProperties::CheckStateSize);
Init(ui->checkBoxS48, static_cast<int>(GSizes::S48), &DialogPatternProperties::CheckStateSize);
Init(ui->checkBoxS50, static_cast<int>(GSizes::S50), &DialogPatternProperties::CheckStateSize);
Init(ui->checkBoxS52, static_cast<int>(GSizes::S52), &DialogPatternProperties::CheckStateSize);
Init(ui->checkBoxS54, static_cast<int>(GSizes::S54), &DialogPatternProperties::CheckStateSize);
Init(ui->checkBoxS56, static_cast<int>(GSizes::S56), &DialogPatternProperties::CheckStateSize);
Init(ui->checkBoxS58, static_cast<int>(GSizes::S58), &DialogPatternProperties::CheckStateSize);
Init(ui->checkBoxS60, static_cast<int>(GSizes::S60), &DialogPatternProperties::CheckStateSize);
Init(ui->checkBoxS62, static_cast<int>(GSizes::S62), &DialogPatternProperties::CheckStateSize);
Init(ui->checkBoxS64, static_cast<int>(GSizes::S64), &DialogPatternProperties::CheckStateSize);
Init(ui->checkBoxS66, static_cast<int>(GSizes::S66), &DialogPatternProperties::CheckStateSize);
Init(ui->checkBoxS68, static_cast<int>(GSizes::S68), &DialogPatternProperties::CheckStateSize);
Init(ui->checkBoxS70, static_cast<int>(GSizes::S70), &DialogPatternProperties::CheckStateSize);
Init(ui->checkBoxS72, static_cast<int>(GSizes::S72), &DialogPatternProperties::CheckStateSize);
}
//---------------------------------------------------------------------------------------------------------------------
void DialogPatternProperties::InitComboBoxFormats(QComboBox *box, const QStringList &items,
const QString &currentFormat)
@ -568,14 +272,6 @@ void DialogPatternProperties::InitComboBoxFormats(QComboBox *box, const QStringL
}
}
//---------------------------------------------------------------------------------------------------------------------
void DialogPatternProperties::CheckApplyOk()
{
bool enable = !(heightsChecked == 0 || sizesChecked == 0);
ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(enable);
ui->buttonBox->button(QDialogButtonBox::Apply)->setEnabled(enable);
}
//---------------------------------------------------------------------------------------------------------------------
void DialogPatternProperties::SaveDescription()
{
@ -589,38 +285,6 @@ void DialogPatternProperties::SaveDescription()
}
}
//---------------------------------------------------------------------------------------------------------------------
void DialogPatternProperties::SaveGradation()
{
if (gradationChanged)
{
doc->SetGradationHeights(heights);
doc->SetGradationSizes(sizes);
emit UpdateGradation();
gradationChanged = false;
}
}
//---------------------------------------------------------------------------------------------------------------------
void DialogPatternProperties::SaveDefValues()
{
if (defaultChanged)
{
if (ui->radioButtonDefFromM->isChecked())
{
doc->SetDefCustom(false);
}
else
{
doc->SetDefCustom(true);
doc->SetDefCustomHeight(ui->comboBoxHeight->currentText().toInt());
doc->SetDefCustomSize(ui->comboBoxSize->currentText().toInt());
}
defaultChanged = false;
emit doc->patternChanged(false);
}
}
//---------------------------------------------------------------------------------------------------------------------
void DialogPatternProperties::SaveLabelData()
{
@ -629,9 +293,11 @@ void DialogPatternProperties::SaveLabelData()
doc->SetPatternName(ui->lineEditPatternName->text());
doc->SetPatternNumber(ui->lineEditPatternNumber->text());
doc->SetCompanyName(ui->lineEditCompanyName->text());
if (qApp->patternType() != MeasurementsType::Individual)
if (qApp->GetMeasurementsType() != MeasurementsType::Individual)
{
doc->SetCustomerName(ui->lineEditCustomerName->text());
doc->SetCustomerBirthDate(ui->dateEditCustomerBirthDate->date());
doc->SetCustomerEmail(ui->lineEditCustomerEmail->text());
}
doc->SetLabelDateFormat(ui->comboBoxDateFormat->currentText());
doc->SetLabelTimeFormat(ui->comboBoxTimeFormat->currentText());
@ -672,114 +338,6 @@ void DialogPatternProperties::SaveReadOnlyState()
}
}
//---------------------------------------------------------------------------------------------------------------------
void DialogPatternProperties::SetDefaultHeight(const QString &def)
{
int index = ui->comboBoxHeight->findText(def);
if (index != -1)
{
ui->comboBoxHeight->setCurrentIndex(index);
defaultChanged = true;
}
else
{
const int height = static_cast<int>(pattern->height());
index = ui->comboBoxHeight->findText(QString().setNum(height));
if (index != -1)
{
ui->comboBoxHeight->setCurrentIndex(index);
defaultChanged = true;
}
}
}
//---------------------------------------------------------------------------------------------------------------------
void DialogPatternProperties::SetDefaultSize(const QString &def)
{
int index = ui->comboBoxSize->findText(def);
if (index != -1)
{
ui->comboBoxSize->setCurrentIndex(index);
defaultChanged = true;
}
else
{
const int size = static_cast<int>(pattern->size());
index = ui->comboBoxSize->findText(QString().setNum(size));
if (index != -1)
{
ui->comboBoxSize->setCurrentIndex(index);
defaultChanged = true;
}
}
}
//---------------------------------------------------------------------------------------------------------------------
void DialogPatternProperties::UpdateDefHeight()
{
const QString def = ui->comboBoxHeight->currentText();
InitComboBox(ui->comboBoxHeight, heights);
SetDefaultHeight(def);
}
//---------------------------------------------------------------------------------------------------------------------
void DialogPatternProperties::UpdateDefSize()
{
const QString def = ui->comboBoxSize->currentText();
InitComboBox(ui->comboBoxSize, sizes);
SetDefaultSize(def);
}
//---------------------------------------------------------------------------------------------------------------------
template<typename Func>
void DialogPatternProperties::Init(QCheckBox *check, int val, Func slot)
{
connect(check, &QCheckBox::stateChanged, this, slot);
data.insert(check, val);
}
//---------------------------------------------------------------------------------------------------------------------
template<typename GVal>
void DialogPatternProperties::SetOptions(const QMap<GVal, bool> &option)
{
if (option.value(GVal::ALL) == false)
{
QMapIterator<GVal, bool> i(option);
while (i.hasNext())
{
i.next();
if (i.value() == false && i.key() != GVal::ALL)
{
QCheckBox *box = data.key(static_cast<int>(i.key()));
if (box != nullptr)
{
box->setCheckState(Qt::Unchecked);
}
}
}
}
}
//---------------------------------------------------------------------------------------------------------------------
template<typename GVal>
void DialogPatternProperties::InitComboBox(QComboBox *box, const QMap<GVal, bool> &option)
{
SCASSERT(box != nullptr)
box->clear();
QMapIterator<GVal, bool> i(option);
while (i.hasNext())
{
i.next();
if (i.value() && i.key() != GVal::ALL)
{
box->addItem(QString().setNum(static_cast<int>(UnitConvertor(static_cast<int>(i.key()), Unit::Cm,
*pattern->GetPatternUnit()))));
}
}
}
//---------------------------------------------------------------------------------------------------------------------
QImage DialogPatternProperties::GetImage()
{
@ -937,7 +495,7 @@ void DialogPatternProperties::EditLabel()
}
}
DialogEditLabel editor(doc);
DialogEditLabel editor(doc, pattern);
templateDataChanged ? editor.SetTemplate(templateLines) : editor.SetTemplate(doc->GetPatternLabelTemplate());

View File

@ -50,16 +50,10 @@ class DialogPatternProperties : public QDialog
public:
explicit DialogPatternProperties(VPattern *doc, VContainer *pattern, QWidget *parent = nullptr);
virtual ~DialogPatternProperties() override;
signals:
void UpdateGradation();
private slots:
void DefValueChanged();
void LabelDataChanged();
void Apply();
void Ok();
void SelectAll(int state);
void CheckStateHeight(int state);
void CheckStateSize(int state);
void DescEdited();
void ChangeImage();
void SaveImage();
@ -70,10 +64,6 @@ private:
Ui::DialogPatternProperties *ui;
VPattern *doc;
VContainer *pattern;
int heightsChecked;
int sizesChecked;
QMap<GHeights, bool> heights;
QMap<GSizes, bool> sizes;
QMap<QCheckBox *, int> data;
bool descriptionChanged;
bool gradationChanged;
@ -91,31 +81,13 @@ private:
QVector<VLabelTemplateLine> templateLines;
QMap<int, QString> patternMaterials;
void SetHeightsChecked(bool enabled);
void SetSizesChecked(bool enabled);
void InitHeights();
void InitSizes();
template<typename Func>
void Init(QCheckBox *check, int val, Func slot);
template<typename GVal>
void SetOptions(const QMap<GVal, bool> &option);
template<typename GVal>
void InitComboBox(QComboBox *box, const QMap<GVal, bool> &option);
void InitComboBoxFormats(QComboBox *box, const QStringList &items, const QString &currentFormat);
void CheckApplyOk();
void SaveDescription();
void SaveGradation();
void SaveDefValues();
void SaveLabelData();
void SaveTemplateData();
void SaveMaterialData();
void SaveReadOnlyState();
void SetDefaultHeight(const QString &def);
void SetDefaultSize(const QString &def);
void UpdateDefHeight();
void UpdateDefSize();
void InitImage();
QImage GetImage();
};

File diff suppressed because it is too large Load Diff

View File

@ -687,7 +687,7 @@ void DialogSaveLayout::SetTiledExportMode(bool tiledExportMode)
void DialogSaveLayout::SetTiledMargins(QMarginsF margins)
{
// read Margins top, right, bottom, left
margins = UnitConvertor(margins, Unit::Mm, qApp->patternUnit());
margins = UnitConvertor(margins, Unit::Mm, qApp->patternUnits());
ui->doubleSpinBoxLeftField->setValue(margins.left());
ui->doubleSpinBoxTopField->setValue(margins.top());
@ -705,7 +705,7 @@ QMarginsF DialogSaveLayout::GetTiledMargins() const
ui->doubleSpinBoxBottomField->value()
);
return UnitConvertor(margins, qApp->patternUnit(), Unit::Mm);
return UnitConvertor(margins, qApp->patternUnits(), Unit::Mm);
}
//---------------------------------------------------------------------------------------------------------------------
@ -817,9 +817,9 @@ bool DialogSaveLayout::TestPdf()
QProcess proc;
#if defined(Q_OS_WIN) || defined(Q_OS_OSX)
// Seek pdftops in app bundle or near valentin.exe
proc.start(qApp->applicationDirPath() + QLatin1String("/")+ PDFTOPS);
proc.start(qApp->applicationDirPath() + QLatin1String("/")+ PDFTOPS, QStringList());
#else
proc.start(PDFTOPS); // Seek pdftops in standard path
proc.start(PDFTOPS, QStringList()); // Seek pdftops in standard path
#endif
if (proc.waitForStarted(15000) && (proc.waitForFinished(15000) || proc.state() == QProcess::NotRunning))
{
@ -904,7 +904,7 @@ void DialogSaveLayout::RemoveFormatFromList(LayoutExportFormats format)
void DialogSaveLayout::ReadSettings()
{
VValentinaSettings *settings = qApp->ValentinaSettings();
const Unit unit = qApp->patternUnit();
const Unit unit = qApp->patternUnits();
// read Margins top, right, bottom, left
const QMarginsF margins = settings->GetTiledPDFMargins(unit);
@ -958,7 +958,7 @@ void DialogSaveLayout::WriteSettings() const
}
VValentinaSettings *settings = qApp->ValentinaSettings();
const Unit unit = qApp->patternUnit();
const Unit unit = qApp->patternUnits();
// write Margins top, right, bottom, left
QMarginsF margins = QMarginsF(

View File

@ -297,7 +297,7 @@ void VWidgetDetails::ShowContextMenu(const QPoint &pos)
catch (const VExceptionBadId &)
{
const QString errorMsg = tr("Cannot find piece by id '%1'").arg(id);
qWarning() << VAbstractApplication::patternMessageSignature + errorMsg;
qWarning() << VAbstractValApplication::patternMessageSignature + errorMsg;
}
}

View File

@ -230,7 +230,7 @@ void VWidgetGroups::CtxMenu(const QPoint &pos)
}
else if (selectedAction == actionPreferences)
{
QScopedPointer<VContainer> fackeContainer(new VContainer(qApp->TrVars(), qApp->patternUnitP(),
QScopedPointer<VContainer> fackeContainer(new VContainer(qApp->TrVars(), qApp->patternUnitsP(),
VContainer::UniqueNamespace()));
QScopedPointer<DialogGroup> dialog(new DialogGroup(fackeContainer.data(), NULL_ID, this));
dialog->SetName(doc->GetGroupName(id));

View File

@ -80,17 +80,6 @@ int main(int argc, char *argv[])
VApplication app(argc, argv);
app.InitOptions();
if (FvUpdater::IsStaledTestBuild())
{
qWarning() << QApplication::translate("Valentina",
"This test build is older than %1 days. To provide you with better "
"quality service we restrict the lifetime you can use a test build. "
"To continue using Valentina please update to newer test build. The "
"application will be shut down.")
.arg(FvUpdater::testBuildLifetime);
return V_EX_UNAVAILABLE;
}
if (VApplication::IsGUIMode())
{
// Set feed URL before doing anything else

File diff suppressed because it is too large Load Diff

View File

@ -32,7 +32,9 @@
#include "mainwindowsnogui.h"
#include "core/vcmdexport.h"
#include "../vmisc/vlockguard.h"
#include "../vformat/vdimensions.h"
#include <QDoubleSpinBox>
#include <QPointer>
namespace Ui
@ -51,7 +53,6 @@ class DialogFinalMeasurements;
class VWidgetGroups;
class VWidgetDetails;
class QToolButton;
class QDoubleSpinBox;
class QProgressBar;
class WatermarkWindow;
@ -110,6 +111,7 @@ protected:
virtual void PrepareSceneList(PreviewQuatilty quality) override;
virtual void ExportToCSVData(const QString &fileName, bool withHeader, int mib,
const QChar &separator) final;
virtual void ToolBarStyle(QToolBar *bar) const override;
private slots:
void ScaleChanged(qreal scale);
void MouseMove(const QPointF &scenePos);
@ -212,8 +214,11 @@ private slots:
void OpenAt(QAction *where);
#endif //defined(Q_OS_MAC)
void ChangedSize(const QString &text);
void ChangedHeight(const QString &text);
void DimensionABaseChanged();
void DimensionBBaseChanged();
void DimensionCBaseChanged();
void GradationChanged();
void ShowProgress();
void ClearPatternMessages();
@ -270,13 +275,16 @@ private:
QLabel *leftGoToStage;
QLabel *rightGoToStage;
QTimer *autoSaveTimer;
QTimer *measurementsSyncTimer;
bool guiEnabled;
QPointer<QComboBox> gradationHeights;
QPointer<QComboBox> gradationSizes;
QPointer<QLabel> gradationHeightsLabel;
QPointer<QLabel> gradationSizesLabel;
QPointer<QLabel> zoomScale;
QPointer<QDoubleSpinBox> doubleSpinBoxScale;
QPointer<QComboBox> dimensionA{nullptr};
QPointer<QComboBox> dimensionB{nullptr};
QPointer<QComboBox> dimensionC{nullptr};
QPointer<QLabel> dimensionALabel{nullptr};
QPointer<QLabel> dimensionBLabel{nullptr};
QPointer<QLabel> dimensionCLabel{nullptr};
QPointer<QLabel> zoomScale{nullptr};
QPointer<QDoubleSpinBox> doubleSpinBoxScale{nullptr};
VToolOptionsPropertyBrowser *toolOptions;
VWidgetGroups *groupsWidget;
VWidgetDetails *detailsWidget;
@ -289,8 +297,16 @@ private:
QList<QPointer<WatermarkWindow>> m_watermarkEditors{};
void SetDefaultHeight();
void SetDefaultSize();
int m_currentDimensionA{0};
int m_currentDimensionB{0};
int m_currentDimensionC{0};
QSharedPointer<VMeasurements> m{};
QTimer *m_gradation;
void InitDimensionControls();
void InitDimensionGradation(int index, const MeasurementDimension_p &dimension, QPointer<QComboBox> control);
void ToolBarOption();
void ToolBarStages();
@ -342,15 +358,12 @@ private:
void InitAutoSave();
bool PatternPieceName(QString &name);
QString CheckPathToMeasurements(const QString &patternPath, const QString &path);
QComboBox *SetGradationList(QLabel *label, const QStringList &list);
void ChangePP(int index, bool zoomBestFit = true);
/**
* @brief EndVisualization try show dialog after and working with tool visualization.
*/
void EndVisualization(bool click = false);
void ZoomFirstShow();
void UpdateHeightsList(const QStringList &list);
void UpdateSizesList(const QStringList &list);
void AddDocks();
void InitDocksContain();
@ -364,14 +377,15 @@ private:
void InitScenes();
bool LoadMeasurements(const QString &path);
bool UpdateMeasurements(const QString &path, int size, int height);
bool UpdateMeasurements(const QString &path, int baseA, int baseB, int baseC);
void ReopenFilesAfterCrash(QStringList &args);
bool DoExport(const VCommandLinePtr& expParams);
bool DoFMExport(const VCommandLinePtr& expParams);
bool SetSize(const QString &text);
bool SetHeight(const QString & text);
bool SetDimensionA(int value);
bool SetDimensionB(int value);
bool SetDimensionC(int value);
QString GetPatternFileName();
QString GetMeasurementFileName();
@ -397,6 +411,12 @@ private:
void OpenWatermark(const QString &path = QString());
void CleanWaterkmarkEditors();
void StoreMultisizeMDimensions();
void StoreIndividualMDimensions();
QVector<int> DimensionRestrictedValues(int index, const MeasurementDimension_p &dimension);
void SetDimensionBases();
};
#endif // MAINWINDOW_H

View File

@ -68,6 +68,7 @@
#include <QtConcurrent>
#include <functional>
#include <QPageSize>
#include <QDebug>
#if defined(Q_OS_WIN32) && QT_VERSION >= QT_VERSION_CHECK(5, 7, 0)
#include <QWinTaskbarButton>
@ -137,7 +138,7 @@ MainWindowsNoGUI::MainWindowsNoGUI(QWidget *parent)
listDetails(),
currentScene(nullptr),
tempSceneLayout(nullptr),
pattern(new VContainer(qApp->TrVars(), qApp->patternUnitP(), valentinaNamespace)),
pattern(new VContainer(qApp->TrVars(), qApp->patternUnitsP(), valentinaNamespace)),
doc(nullptr),
papers(),
shadows(),
@ -156,7 +157,6 @@ MainWindowsNoGUI::MainWindowsNoGUI(QWidget *parent)
margins(),
paperSize(),
m_dialogSaveLayout(),
m_mouseCoordinate(),
#if defined(Q_OS_WIN32) && QT_VERSION >= QT_VERSION_CHECK(5, 7, 0)
m_taskbarButton(new QWinTaskbarButton(this)),
m_taskbarProgress(nullptr),
@ -836,7 +836,7 @@ void MainWindowsNoGUI::PrintPages(QPrinter *printer)
QPainter painter;
if (not painter.begin(printer))
{ // failed to open file
qWarning("failed to open file, is it writable?");
qCritical() << tr("Failed to open file, is it writable?");
return;
}
@ -935,7 +935,7 @@ void MainWindowsNoGUI::PrintPages(QPrinter *printer)
{
const QString errorMsg = tr("File error.\n\n%1\n\n%2").arg(e.ErrorMessage(), e.DetailedInformation());
qApp->IsPedantic() ? throw VException(errorMsg) :
qWarning() << VAbstractApplication::patternMessageSignature + errorMsg;
qWarning() << VAbstractValApplication::patternMessageSignature + errorMsg;
}
}
@ -2071,33 +2071,6 @@ QString MainWindowsNoGUI::FileName() const
return QFileInfo(fileName).baseName();
}
//---------------------------------------------------------------------------------------------------------------------
void MainWindowsNoGUI::SetSizeHeightForIndividualM() const
{
const QHash<QString, QSharedPointer<VInternalVariable> > * vars = pattern->DataVariables();
if (vars->contains(size_M))
{
pattern->SetSize(*vars->value(size_M)->GetValue());
}
else
{
pattern->SetSize(0);
}
if (vars->contains(height_M))
{
pattern->SetHeight(*vars->value(height_M)->GetValue());
}
else
{
pattern->SetHeight(0);
}
doc->SetPatternWasChanged(true);
emit doc->UpdatePatternLabel();
}
//---------------------------------------------------------------------------------------------------------------------
bool MainWindowsNoGUI::ExportFMeasurementsToCSVData(const QString &fileName, bool withHeader, int mib,
const QChar &separator) const
@ -2215,21 +2188,6 @@ QSharedPointer<VMeasurements> MainWindowsNoGUI::OpenMeasurementFile(const QStrin
}
CheckRequiredMeasurements(m.data());
if (m->Type() == MeasurementsType::Multisize)
{
if (m->MUnit() == Unit::Inch)
{
qCCritical(vMainNoGUIWindow, "%s\n\n%s", qUtf8Printable(tr("Wrong units.")),
qUtf8Printable(tr("Application doesn't support multisize table with inches.")));
m->clear();
if (not VApplication::IsGUIMode())
{
qApp->exit(V_EX_DATAERR);
}
return m;
}
}
}
catch (VException &e)
{

View File

@ -122,8 +122,8 @@ protected:
QSharedPointer<DialogSaveLayout> m_dialogSaveLayout;
/** @brief mouseCoordinate pointer to label who show mouse coordinate. */
QPointer<QLabel> m_mouseCoordinate;
QPointer<QLabel> m_unreadPatternMessage{};
QPointer<QLabel> m_mouseCoordinate{nullptr};
QPointer<QLabel> m_unreadPatternMessage{nullptr};
#if defined(Q_OS_WIN) && QT_VERSION >= QT_VERSION_CHECK(5, 7, 0)
QWinTaskbarButton *m_taskbarButton;
@ -142,7 +142,6 @@ protected:
bool GenerateLayout(VLayoutGenerator& lGenerator);
int ContinueIfLayoutStale();
QString FileName() const;
void SetSizeHeightForIndividualM() const;
bool ExportFMeasurementsToCSVData(const QString &fileName,
bool withHeader, int mib, const QChar &separator) const;

View File

@ -142,96 +142,88 @@ include(../translations.pri)
# Set "make install" command for Unix-like systems.
unix{
# Prefix for binary file.
isEmpty(PREFIX){
PREFIX = $$DEFAULT_PREFIX
}
unix:!macx{
DATADIR =$$PREFIX/share
DEFINES += DATADIR=\\\"$$DATADIR\\\" PKGDATADIR=\\\"$$PKGDATADIR\\\"
!macx{
# Path to bin file after installation
target.path = $$PREFIX/bin
target.path = $$BINDIR
tape.path = $$PREFIX/bin
tape.path = $$BINDIR
tape.files += $${OUT_PWD}/../tape/$${DESTDIR}/tape
# .desktop file
desktop.path = $$PREFIX/share/applications/
desktop.path = $$DATADIR/applications/
desktop.files += ../../../dist/$${TARGET}.desktop \
desktop.files += ../../../dist/tape.desktop
# logo
hicolor_48_apps.path = $$PREFIX/share/icons/hicolor/48x48/apps/
hicolor_48_apps.path = $$DATADIR/icons/hicolor/48x48/apps/
hicolor_48_apps.files += \
../../../share/icons/48x48/apps/$${TARGET}.png \
../../../share/icons/48x48/apps/tape.png
hicolor_48_mimetypes.path = $$PREFIX/share/icons/hicolor/48x48/mimetypes/
hicolor_48_mimetypes.path = $$DATADIR/icons/hicolor/48x48/mimetypes/
hicolor_48_mimetypes.files += \
../../../share/icons/48x48/mimetypes/application-x-valentina-pattern.png \
../../../share/icons/48x48/mimetypes/application-x-valentina-i-measurements.png \
../../../share/icons/48x48/mimetypes/application-x-valentina-s-measurements.png
hicolor_64_apps.path = $$PREFIX/share/icons/hicolor/64x64/apps/
hicolor_64_apps.path = $$DATADIR/icons/hicolor/64x64/apps/
hicolor_64_apps.files += \
../../../share/icons/64x64/apps/$${TARGET}.png \
../../../share/icons/64x64/apps/tape.png
hicolor_64_mimetypes.path = $$PREFIX/share/icons/hicolor/64x64/mimetypes/
hicolor_64_mimetypes.path = $$DATADIR/icons/hicolor/64x64/mimetypes/
hicolor_64_mimetypes.files += \
../../../share/icons/64x64/mimetypes/application-x-valentina-pattern.png \
../../../share/icons/64x64/mimetypes/application-x-valentina-i-measurements.png \
../../../share/icons/64x64/mimetypes/application-x-valentina-s-measurements.png
hicolor_128_apps.path = $$PREFIX/share/icons/hicolor/128x128/apps/
hicolor_128_apps.path = $$DATADIR/icons/hicolor/128x128/apps/
hicolor_128_apps.files += \
../../../share/icons/128x128/apps/$${TARGET}.png \
../../../share/icons/128x128/apps/tape.png
hicolor_128_mimetypes.path = $$PREFIX/share/icons/hicolor/128x128/mimetypes/
hicolor_128_mimetypes.path = $$DATADIR/icons/hicolor/128x128/mimetypes/
hicolor_128_mimetypes.files += \
../../../share/icons/128x128/mimetypes/application-x-valentina-pattern.png \
../../../share/icons/128x128/mimetypes/application-x-valentina-i-measurements.png \
../../../share/icons/128x128/mimetypes/application-x-valentina-s-measurements.png
hicolor_256_apps.path = $$PREFIX/share/icons/hicolor/256x256/apps/
hicolor_256_apps.path = $$DATADIR/icons/hicolor/256x256/apps/
hicolor_256_apps.files += \
../../../share/icons/256x256/apps/$${TARGET}.png \
../../../share/icons/256x256/apps/tape.png
hicolor_256_mimetypes.path = $$PREFIX/share/icons/hicolor/256x256/mimetypes/
hicolor_256_mimetypes.path = $$DATADIR/icons/hicolor/256x256/mimetypes/
hicolor_256_mimetypes.files += \
../../../share/icons/256x256/mimetypes/application-x-valentina-pattern.png \
../../../share/icons/256x256/mimetypes/application-x-valentina-i-measurements.png \
../../../share/icons/256x256/mimetypes/application-x-valentina-s-measurements.png
hicolor_512_apps.path = $$PREFIX/share/icons/hicolor/512x512/apps/
hicolor_512_apps.path = $$DATADIR/icons/hicolor/512x512/apps/
hicolor_512_apps.files += \
../../../share/icons/512x512/apps/$${TARGET}.png \
../../../share/icons/512x512/apps/tape.png
hicolor_512_mimetypes.path = $$PREFIX/share/icons/hicolor/512x512/mimetypes/
hicolor_512_mimetypes.path = $$DATADIR/icons/hicolor/512x512/mimetypes/
hicolor_512_mimetypes.files += \
../../../share/icons/512x512/mimetypes/application-x-valentina-pattern.png \
../../../share/icons/512x512/mimetypes/application-x-valentina-i-measurements.png \
../../../share/icons/512x512/mimetypes/application-x-valentina-s-measurements.png
# Path to translation files after installation
translations.path = $$PREFIX/share/$${TARGET}/translations/
translations.path = $$PKGDATADIR/translations/
translations.files = $$INSTALL_TRANSLATIONS
# Path to multisize measurement after installation
multisize.path = $$PREFIX/share/$${TARGET}/tables/multisize/
multisize.path = $$PKGDATADIR/tables/multisize/
multisize.files = $$INSTALL_MULTISIZE_MEASUREMENTS
# Path to templates after installation
templates.path = $$PREFIX/share/$${TARGET}/tables/templates/
templates.path = $$PKGDATADIR/tables/templates/
templates.files = $$INSTALL_STANDARD_TEMPLATES
# Path to label templates after installation
label.path = $$PREFIX/share/$${TARGET}/labels/
label.path = $$PKGDATADIR/labels/
label.files = $$INSTALL_LABEL_TEMPLATES
INSTALLS += \
@ -591,16 +583,7 @@ DEPENDPATH += $$PWD/../../libs/vformat
win32:!win32-g++: PRE_TARGETDEPS += $$OUT_PWD/../../libs/vformat/$${DESTDIR}/vformat.lib
else:unix|win32-g++: PRE_TARGETDEPS += $$OUT_PWD/../../libs/vformat/$${DESTDIR}/libvformat.a
#VPatternDB static library (depend on vgeometry, vmisc, VLayout)
unix|win32: LIBS += -L$$OUT_PWD/../../libs/vpatterndb/$${DESTDIR} -lvpatterndb
INCLUDEPATH += $$PWD/../../libs/vpatterndb
DEPENDPATH += $$PWD/../../libs/vpatterndb
win32:!win32-g++: PRE_TARGETDEPS += $$OUT_PWD/../../libs/vpatterndb/$${DESTDIR}/vpatterndb.lib
else:unix|win32-g++: PRE_TARGETDEPS += $$OUT_PWD/../../libs/vpatterndb/$${DESTDIR}/libvpatterndb.a
# VLayout static library (depend on IFC, VGeometry)
# VLayout static library (depend on IFC, VGeometry, VPatternDB)
unix|win32: LIBS += -L$$OUT_PWD/../../libs/vlayout/$${DESTDIR}/ -lvlayout
INCLUDEPATH += $$PWD/../../libs/vlayout
@ -609,6 +592,15 @@ DEPENDPATH += $$PWD/../../libs/vlayout
win32:!win32-g++: PRE_TARGETDEPS += $$OUT_PWD/../../libs/vlayout/$${DESTDIR}/vlayout.lib
else:unix|win32-g++: PRE_TARGETDEPS += $$OUT_PWD/../../libs/vlayout/$${DESTDIR}/libvlayout.a
#VPatternDB static library (depend on vgeometry, vmisc)
unix|win32: LIBS += -L$$OUT_PWD/../../libs/vpatterndb/$${DESTDIR} -lvpatterndb
INCLUDEPATH += $$PWD/../../libs/vpatterndb
DEPENDPATH += $$PWD/../../libs/vpatterndb
win32:!win32-g++: PRE_TARGETDEPS += $$OUT_PWD/../../libs/vpatterndb/$${DESTDIR}/vpatterndb.lib
else:unix|win32-g++: PRE_TARGETDEPS += $$OUT_PWD/../../libs/vpatterndb/$${DESTDIR}/libvpatterndb.a
# VGeometry static library (depend on ifc)
unix|win32: LIBS += -L$$OUT_PWD/../../libs/vgeometry/$${DESTDIR}/ -lvgeometry

View File

@ -127,7 +127,7 @@ void VPattern::CreateEmptyFile()
patternElement.appendChild(createComment(FileComment()));
patternElement.appendChild(CreateElementWithText(TagVersion, VPatternConverter::PatternMaxVerStr));
patternElement.appendChild(CreateElementWithText(TagUnit, UnitsToStr(qApp->patternUnit())));
patternElement.appendChild(CreateElementWithText(TagUnit, UnitsToStr(qApp->patternUnits())));
patternElement.appendChild(createElement(TagDescription));
patternElement.appendChild(createElement(TagNotes));
@ -1167,7 +1167,7 @@ void VPattern::PointsWithLineCommonAttributes(const QDomElement &domElement, VTo
//---------------------------------------------------------------------------------------------------------------------
void VPattern::PointsCommonAttributes(const QDomElement &domElement, VToolSinglePointInitData &initData)
{
PointsCommonAttributes(domElement, initData.id, initData.mx, initData.my);
DrawPointsCommonAttributes(domElement, initData.id, initData.mx, initData.my, initData.notes);
initData.name = GetParametrString(domElement, AttrName, QChar('A'));
initData.showLabel = GetParametrBool(domElement, AttrShowLabel, trueStr);
}
@ -1180,6 +1180,15 @@ void VPattern::PointsCommonAttributes(const QDomElement &domElement, quint32 &id
my = qApp->toPixel(GetParametrDouble(domElement, AttrMy, QStringLiteral("15.0")));
}
//---------------------------------------------------------------------------------------------------------------------
void VPattern::DrawPointsCommonAttributes(const QDomElement &domElement, quint32 &id, qreal &mx, qreal &my,
QString &notes)
{
DrawToolsCommonAttributes(domElement, id, notes);
mx = qApp->toPixel(GetParametrDouble(domElement, AttrMx, QStringLiteral("10.0")));
my = qApp->toPixel(GetParametrDouble(domElement, AttrMy, QStringLiteral("15.0")));
}
//---------------------------------------------------------------------------------------------------------------------
/**
* @brief ParsePointElement parse point tag.
@ -2022,7 +2031,7 @@ void VPattern::ParseToolCutSpline(VMainGraphicsScene *scene, QDomElement &domEle
try
{
VToolCutSplineInitData initData;
VToolCutInitData initData;
initData.scene = scene;
initData.doc = this;
initData.data = data;
@ -2032,7 +2041,9 @@ void VPattern::ParseToolCutSpline(VMainGraphicsScene *scene, QDomElement &domEle
PointsCommonAttributes(domElement, initData);
initData.formula = GetParametrString(domElement, AttrLength, QChar('0'));
const QString f = initData.formula;//need for saving fixed formula;
initData.splineId = GetParametrUInt(domElement, VToolCutSpline::AttrSpline, NULL_ID_STR);
initData.baseCurveId = GetParametrUInt(domElement, VToolCutSpline::AttrSpline, NULL_ID_STR);
initData.aliasSuffix1 = GetParametrEmptyString(domElement, AttrAlias1);
initData.aliasSuffix2 = GetParametrEmptyString(domElement, AttrAlias2);
VToolCutSpline::Create(initData);
//Rewrite attribute formula. Need for situation when we have wrong formula.
@ -2065,7 +2076,7 @@ void VPattern::ParseToolCutSplinePath(VMainGraphicsScene *scene, QDomElement &do
try
{
VToolCutSplinePathInitData initData;
VToolCutInitData initData;
initData.scene = scene;
initData.doc = this;
initData.data = data;
@ -2075,7 +2086,9 @@ void VPattern::ParseToolCutSplinePath(VMainGraphicsScene *scene, QDomElement &do
PointsCommonAttributes(domElement, initData);
initData.formula = GetParametrString(domElement, AttrLength, QChar('0'));
const QString f = initData.formula;//need for saving fixed formula;
initData.splinePathId = GetParametrUInt(domElement, VToolCutSplinePath::AttrSplinePath, NULL_ID_STR);
initData.baseCurveId = GetParametrUInt(domElement, VToolCutSplinePath::AttrSplinePath, NULL_ID_STR);
initData.aliasSuffix1 = GetParametrEmptyString(domElement, AttrAlias1);
initData.aliasSuffix2 = GetParametrEmptyString(domElement, AttrAlias2);
VToolCutSplinePath::Create(initData);
//Rewrite attribute formula. Need for situation when we have wrong formula.
@ -2108,7 +2121,7 @@ void VPattern::ParseToolCutArc(VMainGraphicsScene *scene, QDomElement &domElemen
try
{
VToolCutArcInitData initData;
VToolCutInitData initData;
initData.scene = scene;
initData.doc = this;
initData.data = data;
@ -2118,7 +2131,9 @@ void VPattern::ParseToolCutArc(VMainGraphicsScene *scene, QDomElement &domElemen
PointsCommonAttributes(domElement, initData);
initData.formula = GetParametrString(domElement, AttrLength, QChar('0'));
const QString f = initData.formula;//need for saving fixed formula;
initData.arcId = GetParametrUInt(domElement, AttrArc, NULL_ID_STR);
initData.baseCurveId = GetParametrUInt(domElement, AttrArc, NULL_ID_STR);
initData.aliasSuffix1 = GetParametrEmptyString(domElement, AttrAlias1);
initData.aliasSuffix2 = GetParametrEmptyString(domElement, AttrAlias2);
VToolCutArc::Create(initData);
//Rewrite attribute formula. Need for situation when we have wrong formula.
@ -2549,6 +2564,7 @@ void VPattern::ParseToolSpline(VMainGraphicsScene *scene, QDomElement &domElemen
initData.penStyle = GetParametrString(domElement, AttrPenStyle, TypeLineLine);
initData.duplicate = GetParametrUInt(domElement, AttrDuplicate, QChar('0'));
initData.approximationScale = GetParametrDouble(domElement, AttrAScale, QChar('0'));
initData.aliasSuffix = GetParametrEmptyString(domElement, AttrAlias);
VToolSpline *spl = VToolSpline::Create(initData);
@ -2610,6 +2626,7 @@ void VPattern::ParseToolCubicBezier(VMainGraphicsScene *scene, const QDomElement
const QString penStyle = GetParametrString(domElement, AttrPenStyle, TypeLineLine);
const quint32 duplicate = GetParametrUInt(domElement, AttrDuplicate, QChar('0'));
const qreal approximationScale = GetParametrDouble(domElement, AttrAScale, QChar('0'));
const QString alias = GetParametrEmptyString(domElement, AttrAlias);
auto p1 = data->GeometricObject<VPointF>(point1);
auto p2 = data->GeometricObject<VPointF>(point2);
@ -2625,6 +2642,7 @@ void VPattern::ParseToolCubicBezier(VMainGraphicsScene *scene, const QDomElement
initData.spline->SetPenStyle(penStyle);
initData.spline->SetPenStyle(penStyle);
initData.spline->SetApproximationScale(approximationScale);
initData.spline->SetAliasSuffix(alias);
VToolCubicBezier::Create(initData);
}
@ -2728,6 +2746,7 @@ void VPattern::ParseToolSplinePath(VMainGraphicsScene *scene, const QDomElement
initData.penStyle = GetParametrString(domElement, AttrPenStyle, TypeLineLine);
initData.duplicate = GetParametrUInt(domElement, AttrDuplicate, QChar('0'));
initData.approximationScale = GetParametrDouble(domElement, AttrAScale, QChar('0'));
initData.aliasSuffix = GetParametrEmptyString(domElement, AttrAlias);
const QDomNodeList nodeList = domElement.childNodes();
const qint32 num = nodeList.size();
@ -2820,6 +2839,7 @@ void VPattern::ParseToolCubicBezierPath(VMainGraphicsScene *scene, const QDomEle
const QString penStyle = GetParametrString(domElement, AttrPenStyle, TypeLineLine);
const quint32 duplicate = GetParametrUInt(domElement, AttrDuplicate, QChar('0'));
const qreal approximationScale = GetParametrDouble(domElement, AttrAScale, QChar('0'));
const QString alias = GetParametrEmptyString(domElement, AttrAlias);
QVector<VPointF> points;
@ -2851,6 +2871,7 @@ void VPattern::ParseToolCubicBezierPath(VMainGraphicsScene *scene, const QDomEle
initData.path->SetColor(color);
initData.path->SetPenStyle(penStyle);
initData.path->SetApproximationScale(approximationScale);
initData.path->SetAliasSuffix(alias);
VToolCubicBezierPath::Create(initData);
}
@ -2984,6 +3005,7 @@ void VPattern::ParseToolArc(VMainGraphicsScene *scene, QDomElement &domElement,
initData.color = GetParametrString(domElement, AttrColor, ColorBlack);
initData.penStyle = GetParametrString(domElement, AttrPenStyle, TypeLineLine);
initData.approximationScale = GetParametrDouble(domElement, AttrAScale, QChar('0'));
initData.aliasSuffix = GetParametrEmptyString(domElement, AttrAlias);
VToolArc::Create(initData);
//Rewrite attribute formula. Need for situation when we have wrong formula.
@ -3040,6 +3062,7 @@ void VPattern::ParseToolEllipticalArc(VMainGraphicsScene *scene, QDomElement &do
initData.color = GetParametrString(domElement, AttrColor, ColorBlack);
initData.penStyle = GetParametrString(domElement, AttrPenStyle, TypeLineLine);
initData.approximationScale = GetParametrDouble(domElement, AttrAScale, QChar('0'));
initData.aliasSuffix = GetParametrEmptyString(domElement, AttrAlias);
VToolEllipticalArc::Create(initData);
//Rewrite attribute formula. Need for situation when we have wrong formula.
@ -3173,6 +3196,7 @@ void VPattern::ParseToolArcWithLength(VMainGraphicsScene *scene, QDomElement &do
initData.color = GetParametrString(domElement, AttrColor, ColorBlack);
initData.penStyle = GetParametrString(domElement, AttrPenStyle, TypeLineLine);
initData.approximationScale = GetParametrDouble(domElement, AttrAScale, QChar('0'));
initData.aliasSuffix = GetParametrEmptyString(domElement, AttrAlias);
VToolArcWithLength::Create(initData);
//Rewrite attribute formula. Need for situation when we have wrong formula.
@ -3260,7 +3284,7 @@ void VPattern::ParseToolFlippingByLine(VMainGraphicsScene *scene, QDomElement &d
initData.parse = parse;
initData.typeCreation = Source::FromFile;
ToolsCommonAttributes(domElement, initData.id);
DrawToolsCommonAttributes(domElement, initData.id, initData.notes);
initData.firstLinePointId = GetParametrUInt(domElement, AttrP1Line, NULL_ID_STR);
initData.secondLinePointId = GetParametrUInt(domElement, AttrP2Line, NULL_ID_STR);
initData.suffix = GetParametrString(domElement, AttrSuffix, QString());
@ -3292,7 +3316,7 @@ void VPattern::ParseToolFlippingByAxis(VMainGraphicsScene *scene, QDomElement &d
initData.parse = parse;
initData.typeCreation = Source::FromFile;
ToolsCommonAttributes(domElement, initData.id);
DrawToolsCommonAttributes(domElement, initData.id, initData.notes);
initData.originPointId = GetParametrUInt(domElement, AttrCenter, NULL_ID_STR);
initData.axisType = static_cast<AxisType>(GetParametrUInt(domElement, AttrAxisType, QChar('1')));
initData.suffix = GetParametrString(domElement, AttrSuffix, QString());
@ -4197,164 +4221,6 @@ QString VPattern::GenerateSuffix() const
return QString();
}
//---------------------------------------------------------------------------------------------------------------------
bool VPattern::IsDefCustom() const
{
QDomNodeList tags = elementsByTagName(TagGradation);
if (tags.size() == 0)
{
return false;
}
const QDomNode domNode = tags.at(0);
const QDomElement domElement = domNode.toElement();
if (domElement.isNull() == false)
{
return GetParametrBool(domElement, AttrCustom, falseStr);
}
else
{
return false;
}
}
//---------------------------------------------------------------------------------------------------------------------
void VPattern::SetDefCustom(bool value)
{
CheckTagExists(TagGradation);
QDomNodeList tags = elementsByTagName(TagGradation);
if (tags.isEmpty())
{
qDebug()<<"Can't save attribute "<<AttrCustom<<Q_FUNC_INFO;
return;
}
QDomNode domNode = tags.at(0);
QDomElement domElement = domNode.toElement();
if (domElement.isNull() == false)
{
if (value == false)
{
domElement.removeAttribute(AttrDefHeight);
SetDefCustomHeight(0);
SetDefCustomSize(0);
}
else
{
SetAttribute(domElement, AttrCustom, value);
}
modified = true;
}
else
{
qDebug()<<"Can't save attribute "<<AttrCustom<<Q_FUNC_INFO;
}
}
//---------------------------------------------------------------------------------------------------------------------
int VPattern::GetDefCustomHeight() const
{
if (IsDefCustom())
{
QDomNodeList tags = elementsByTagName(TagGradation);
if (tags.size() == 0)
{
return 0;
}
const QDomNode domNode = tags.at(0);
const QDomElement domElement = domNode.toElement();
if (domElement.isNull() == false)
{
return static_cast<int>(GetParametrUInt(domElement, AttrDefHeight, QChar('0')));
}
else
{
return 0;
}
}
else
{
return 0;
}
}
//---------------------------------------------------------------------------------------------------------------------
void VPattern::SetDefCustomHeight(int value)
{
CheckTagExists(TagGradation);
QDomNodeList tags = elementsByTagName(TagGradation);
if (tags.isEmpty())
{
qDebug()<<"Can't save attribute "<<AttrDefHeight<<Q_FUNC_INFO;
return;
}
QDomNode domNode = tags.at(0);
QDomElement domElement = domNode.toElement();
if (domElement.isNull() == false)
{
SetAttributeOrRemoveIf(domElement, AttrDefHeight, value, value == 0);
modified = true;
}
else
{
qDebug()<<"Can't save attribute "<<AttrDefHeight<<Q_FUNC_INFO;
}
}
//---------------------------------------------------------------------------------------------------------------------
int VPattern::GetDefCustomSize() const
{
if (IsDefCustom())
{
QDomNodeList tags = elementsByTagName(TagGradation);
if (tags.size() == 0)
{
return 0;
}
const QDomNode domNode = tags.at(0);
const QDomElement domElement = domNode.toElement();
if (domElement.isNull() == false)
{
return static_cast<int>(GetParametrUInt(domElement, AttrDefSize, QChar('0')));
}
else
{
return 0;
}
}
else
{
return 0;
}
}
//---------------------------------------------------------------------------------------------------------------------
void VPattern::SetDefCustomSize(int value)
{
CheckTagExists(TagGradation);
QDomNodeList tags = elementsByTagName(TagGradation);
if (tags.isEmpty())
{
qDebug()<<"Can't save attribute "<<AttrDefSize<<Q_FUNC_INFO;
return;
}
QDomNode domNode = tags.at(0);
QDomElement domElement = domNode.toElement();
if (domElement.isNull() == false)
{
SetAttributeOrRemoveIf(domElement, AttrDefSize, value, value == 0);
modified = true;
}
else
{
qDebug()<<"Can't save attribute "<<AttrDefSize<<Q_FUNC_INFO;
}
}
//---------------------------------------------------------------------------------------------------------------------
bool VPattern::IsReadOnly() const
{
@ -4457,6 +4323,13 @@ void VPattern::ToolsCommonAttributes(const QDomElement &domElement, quint32 &id)
id = GetParametrId(domElement);
}
//---------------------------------------------------------------------------------------------------------------------
void VPattern::DrawToolsCommonAttributes(const QDomElement &domElement, quint32 &id, QString &notes)
{
ToolsCommonAttributes(domElement, id);
notes = GetParametrEmptyString(domElement, AttrNotes);
}
//---------------------------------------------------------------------------------------------------------------------
QT_WARNING_PUSH
QT_WARNING_DISABLE_GCC("-Wswitch-default")

View File

@ -97,15 +97,6 @@ public:
virtual QString GenerateLabel(const LabelType &type, const QString &reservedName = QString())const override;
virtual QString GenerateSuffix() const override;
bool IsDefCustom() const;
void SetDefCustom(bool value);
int GetDefCustomHeight() const;
void SetDefCustomHeight(int value);
int GetDefCustomSize() const;
void SetDefCustomSize(int value);
bool IsReadOnly() const;
void SetReadOnly(bool rOnly);
@ -178,9 +169,12 @@ private:
void ParseIncrementsElement(const QDomNode& node, const Document &parse);
void PrepareForParse(const Document &parse);
void ToolsCommonAttributes(const QDomElement &domElement, quint32 &id);
void DrawToolsCommonAttributes(const QDomElement &domElement, quint32 &id, QString &notes);
void PointsWithLineCommonAttributes(const QDomElement &domElement, VToolLinePointInitData &initData);
void PointsCommonAttributes(const QDomElement &domElement, VToolSinglePointInitData &initData);
void PointsCommonAttributes(const QDomElement &domElement, quint32 &id, qreal &mx, qreal &my);
void DrawPointsCommonAttributes(const QDomElement &domElement, quint32 &id, qreal &mx, qreal &my,
QString &notes);
void SplinesCommonAttributes(const QDomElement &domElement, quint32 &id, quint32 &idObject,
quint32 &idTool);
template <typename T>

Some files were not shown because too many files have changed in this diff Show More