diff --git a/ChangeLog.txt b/ChangeLog.txt index 81933da38..e660ee814 100644 --- a/ChangeLog.txt +++ b/ChangeLog.txt @@ -34,6 +34,7 @@ - [#480] New tool: Midpoint between two points. - [#496] Selector for selecting which pieces to print. - [#520] Improve Union tool. An option to select about original pieces. +- [#262] Automatic Update notification. # Version 0.4.5 - [#435] Valentina doesn't change the cursor. @@ -49,6 +50,7 @@ - [#516] Valentina crashes when use "Point intersect line and axis" instrument. - [#483] File lost. - Fixed Bisector tool bug. The tool created internal variable for wrong segment. +- [#526] Dialog Detail is not on top after selection second object on Mac. # Version 0.4.4 April 12, 2016 - Updated measurement templates with all measurements. Added new template Aldrich/Women measurements. diff --git a/bitbucket-pipelines.yml b/bitbucket-pipelines.yml new file mode 100644 index 000000000..02e21f4fd --- /dev/null +++ b/bitbucket-pipelines.yml @@ -0,0 +1,28 @@ +image: gcc +pipelines: + default: + - step: + script: + - echo "This script runs on all branches that don't have any specific pipeline assigned in 'branches'." + branches: + develop: + - step: + script: + - cat /etc/*-release + - uname -a + - grep -i processor /proc/cpuinfo | wc -l + - gcc --version + - apt-get update # required to install qt + - apt-get install -y locales xvfb qtbase5-dev libqt5svg5-dev qt5-default qttools5-dev-tools libqt5xmlpatterns5-dev libqt5core5a libqt5gui5 libqt5printsupport5 libqt5svg5 libqt5widgets5 libqt5xml5 libqt5xmlpatterns5 xpdf + - locale + - echo "en_US.UTF-8 UTF-8" >> /etc/locale.gen + - locale-gen "en_US.UTF-8" + - update-locale LANG=en_US.UTF-8 LC_CTYPE=en_US.UTF-8 + - mkdir build + - cd build + - qmake --version + - qmake ../Valentina.pro -r CONFIG+=noDebugSymbols CONFIG+=no_ccache CONFIG+=checkWarnings + - make -j$(nproc) + - export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:"/opt/atlassian/bitbucketci/agent/build/build/src/libs/vpropertyexplorer/bin:/opt/atlassian/bitbucketci/agent/build/build/src/libs/qmuparser/bin" + # QTestLib require GUI support for some tests + - xvfb-run -a make check diff --git a/common.pri b/common.pri index 43c450566..e7cc828b0 100644 --- a/common.pri +++ b/common.pri @@ -238,9 +238,9 @@ GCC_DEBUG_CXXFLAGS += \ -Wmissing-include-dirs \ -Wpacked \ -Wredundant-decls \ - -Winline \ +# -Winline \ -Winvalid-pch \ - -Wunsafe-loop-optimizations \ +# -Wunsafe-loop-optimizations \ -Wlong-long \ -Wmissing-format-attribute \ -Wswitch-default \ @@ -427,7 +427,7 @@ CLANG_DEBUG_CXXFLAGS += \ -Winherited-variadic-ctor \ -Winit-self \ -Winitializer-overrides \ - -Winline \ +# -Winline \ -Wint-conversion \ -Wint-conversions \ -Wint-to-pointer-cast \ @@ -641,7 +641,7 @@ ICC_DEBUG_CXXFLAGS += \ -Weffc++ \ -Wextra-tokens \ -Wformat \ - #-Winline \ +# -Winline \ -Wmain \ -Wmissing-declarations \ -Wmissing-prototypes \ diff --git a/dist/SlackBuild/valentina/README b/dist/SlackBuild/valentina/README new file mode 100644 index 000000000..74f633b6d --- /dev/null +++ b/dist/SlackBuild/valentina/README @@ -0,0 +1,5 @@ +Valentina is a cross-platform patternmaking program which allows designers +to create and model patterns of clothing. This software allows pattern +creation, using either standard sizing tables or an individual’s set of +measurements. It blends new technologies with traditional methods to create +a unique pattern making tool. diff --git a/dist/SlackBuild/valentina/doinst.sh b/dist/SlackBuild/valentina/doinst.sh new file mode 100644 index 000000000..9424ce43f --- /dev/null +++ b/dist/SlackBuild/valentina/doinst.sh @@ -0,0 +1,13 @@ +if [ -x /usr/bin/update-desktop-database ]; then + /usr/bin/update-desktop-database -q usr/share/applications >/dev/null 2>&1 +fi + +if [ -x /usr/bin/update-mime-database ]; then + /usr/bin/update-mime-database usr/share/mime >/dev/null 2>&1 +fi + +if [ -e usr/share/icons/hicolor/icon-theme.cache ]; then + if [ -x /usr/bin/gtk-update-icon-cache ]; then + /usr/bin/gtk-update-icon-cache usr/share/icons/hicolor >/dev/null 2>&1 + fi +fi diff --git a/dist/SlackBuild/valentina/slack-desc b/dist/SlackBuild/valentina/slack-desc new file mode 100644 index 000000000..4f31ec368 --- /dev/null +++ b/dist/SlackBuild/valentina/slack-desc @@ -0,0 +1,21 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. +# Line up the first '|' above the ':' following the base package name, and +# the '|' on the right side marks the last column you can put a character in. +# You must make exactly 11 lines for the formatting to be correct. It's also +# customary to leave one space after the ':' except on otherwise blank lines. + + |-----handy-ruler------------------------------------------------------| +valentina: valentina (Cross-Platform patternmaking program) +valentina: +valentina: Valentina is a cross-platform patternmaking program which allows +valentina: designers to create and model patterns of clothing. This software +valentina: allows pattern creation, using either standard sizing tables or an +valentina: individual’s set of measurements. It blends new technologies with +valentina: traditional methods to create a unique pattern making tool. +valentina: +valentina: Homepage: http://www.valentina-project.org/ +valentina: +valentina: +valentina: +valentina: diff --git a/dist/SlackBuild/valentina/valentina.SlackBuild b/dist/SlackBuild/valentina/valentina.SlackBuild new file mode 100644 index 000000000..f15962a2b --- /dev/null +++ b/dist/SlackBuild/valentina/valentina.SlackBuild @@ -0,0 +1,117 @@ +#!/bin/sh + +# Slackware build script for valentina + +# Copyright 2016 Roman Telezhynskyi +# All rights reserved. +# +# Redistribution and use of this script, with or without modification, is +# permitted provided that the following conditions are met: +# +# 1. Redistributions of this script must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ''AS IS'' AND ANY EXPRESS OR IMPLIED +# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO +# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +PRGNAM=valentina +VERSION=${VERSION:-0.4.4} +BUILD=${BUILD:-1} +TAG=${TAG:-dismine} +COMMIT=610ac13345d7 + +# Use parallel building if possible +if [ -z "$NUMJOBS" ]; then + NUMJOBS=$(nproc) +fi + +# Automatically determine the architecture we're building on: +if [ -z "$ARCH" ]; then + case "$( uname -m )" in + i?86) ARCH=i486 ;; + arm*) ARCH=arm ;; + # Unless $ARCH is already set, use uname -m for all other archs: + *) ARCH=$( uname -m ) ;; + esac +fi + +CWD=$(pwd) +TMP=${TMP:-/tmp/SBo} +PKG=$TMP/package-$PRGNAM +OUTPUT=${OUTPUT:-/tmp} + +if [ "$ARCH" = "i486" ]; then + SLKCFLAGS="-O2 -march=i486 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "i686" ]; then + SLKCFLAGS="-O2 -march=i686 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "x86_64" ]; then + SLKCFLAGS="-O2 -fPIC" + LIBDIRSUFFIX="64" +else + SLKCFLAGS="-O2" + LIBDIRSUFFIX="" +fi + +set -e # Exit on most errors + +rm -rf $PKG +mkdir -p $TMP $PKG $OUTPUT +cd $TMP +rm -rf dismine-$PRGNAM-$COMMIT +tar xvf $CWD/v$VERSION.tar.gz +cd dismine-$PRGNAM-$COMMIT +chown -R root:root . +find -L . \ + \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \ + -o -perm 511 \) -exec chmod 755 {} \; -o \ + \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ + -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \; + +qmake-qt5 Valentina.pro \ + QMAKE_CXXFLAGS="$SLKCFLAGS" \ + PREFIX=/usr \ + PREFIX_LIB=${LIBDIRSUFFIX} \ + "CONFIG += noTests noRunPath no_ccache noDebugSymbols" + +make -j${NUMJOBS} +make install INSTALL_ROOT=$PKG + +# Strip binaries +find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \ + | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true + +# Install all the needed stuff to the package dir +mkdir -p $PKG/usr/man/man1 +install -m 644 dist/debian/valentina.1 $PKG/usr/man/man1/ +install -m 644 dist/debian/tape.1 $PKG/usr/man/man1/ + +# Compress man pages +find $PKG/usr/man -type f -exec gzip -9 {} \; +for i in $( find $PKG/usr/man -type l ) ; do ln -s $( readlink $i ).gz $i.gz ; rm $i ; done + +# Copy icon, desktop file and mime info +mkdir -p $PKG/usr/share/mime/packages +cat dist/debian/valentina.sharedmimeinfo > $PKG/usr/share/mime/packages/$PRGNAM.xml + +# Copy program documentation into the package +mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION +cp -a LICENSE_GPL.txt README.txt ChangeLog.txt $PKG/usr/doc/$PRGNAM-$VERSION +cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild + +mkdir -p $PKG/install +cat $CWD/slack-desc > $PKG/install/slack-desc +cat $CWD/doinst.sh > $PKG/install/doinst.sh + +# Make the package +cd $PKG +/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz} diff --git a/dist/SlackBuild/valentina/valentina.info b/dist/SlackBuild/valentina/valentina.info new file mode 100644 index 000000000..90e79da88 --- /dev/null +++ b/dist/SlackBuild/valentina/valentina.info @@ -0,0 +1,10 @@ +PRGNAM="valentina" +VERSION="0.4.4" +HOMEPAGE="http://www.valentina-project.org/" +DOWNLOAD="https://bitbucket.org/dismine/valentina/get/v0.4.4.tar.gz" +MD5SUM="4d2d030e7251bd5b2ca34d3e629831e3" +DOWNLOAD_x86_64="" +MD5SUM_x86_64="" +REQUIRES="qt5" +MAINTAINER="Roman Telezhynskyi" +EMAIL="dismine@gmail.com" diff --git a/share/measurement-body-diagram.svg b/share/measurement-body-diagram.svg index 712985755..480815879 100644 --- a/share/measurement-body-diagram.svg +++ b/share/measurement-body-diagram.svg @@ -12,8 +12,8 @@ id="svg2" version="1.1" inkscape:version="0.91 r" - width="3099.6279" - height="6715.0972" + width="90.57cm" + height="192.5cm" sodipodi:docname="measurement-body-diagram.svg" inkscape:export-filename="/home/susan/Documents/Valentina/Measurements/measurement-body-diagram_20150730_50dpi.png" inkscape:export-xdpi="50" @@ -26,7 +26,7 @@ image/svg+xml - + @@ -42,7 +42,7 @@ @@ -55,7 +55,7 @@ style="overflow:visible"> @@ -69,7 +69,7 @@ style="overflow:visible"> @@ -84,7 +84,7 @@ @@ -98,7 +98,7 @@ @@ -112,7 +112,7 @@ @@ -126,7 +126,7 @@ @@ -140,7 +140,7 @@ @@ -154,7 +154,7 @@ @@ -168,7 +168,7 @@ @@ -182,7 +182,7 @@ @@ -196,7 +196,7 @@ @@ -210,7 +210,7 @@ @@ -224,7 +224,7 @@ @@ -238,7 +238,7 @@ @@ -252,7 +252,7 @@ @@ -266,7 +266,7 @@ @@ -280,7 +280,7 @@ @@ -293,7 +293,7 @@ style="overflow:visible"> @@ -308,7 +308,7 @@ @@ -322,22 +322,22 @@ guidetolerance="10" inkscape:pageopacity="1" inkscape:pageshadow="2" - inkscape:window-width="1855" - inkscape:window-height="1056" + inkscape:window-width="709" + inkscape:window-height="437" id="ValentinaMeasurements" showgrid="false" - inkscape:zoom="2.1100067" - inkscape:cx="2841.9301" - inkscape:cy="80.298375" + inkscape:zoom="0.5338" + inkscape:cx="1946.4916" + inkscape:cy="3328" inkscape:window-x="65" - inkscape:window-y="24" - inkscape:window-maximized="1" + inkscape:window-y="615" + inkscape:window-maximized="0" inkscape:current-layer="layer2" - fit-margin-left="0" - fit-margin-top="0" - fit-margin-right="0" - fit-margin-bottom="0" - units="in" + fit-margin-left="1.5" + fit-margin-top="1.5" + fit-margin-right="1.5" + fit-margin-bottom="1.5" + units="cm" showguides="false" inkscape:guide-bbox="true" /> + transform="translate(132,-1412)"> ©2015 - 2016 Valentina Project©2015 - 2016 Valentina Projecthttp://www.valentina-project.org @@ -446,11 +446,11 @@ sodipodi:nodetypes="caasac" inkscape:connector-curvature="0" id="path3817-6-4" - d="m 744.9,1228 c -4,2 -16,0 -24,-2 -12,-4 -23,-13 -36,-17 -13,-3 -24,-1 -41,-3 -13,-1 -25,0 -38,3 -4,1 -11,4 -11,4" - style="fill:none;stroke:#dba981;stroke-width:0.89429998;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:2.6829, 0.8943;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 744.9,1228 c -4,2 -16,0 -24,-2 c -12,-4 -23,-13 -36,-17 c -13,-3 -24,-1 -41,-3 c -13,-1 -25,0 -38,3 c -4,1 -11,4 -11,4" + style="fill:none;stroke:#dba981;stroke-width:0.8943;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:2.6829, 0.8943;stroke-dashoffset:0;stroke-opacity:1" /> @@ -468,7 +468,7 @@ sodipodi:nodetypes="cc" /> @@ -476,40 +476,40 @@ sodipodi:nodetypes="csasc" inkscape:connector-curvature="0" id="path2993-6-7" - d="m 734.9,1229 c 2,3 -6,45 -14,66 -4,11 -8,20 -7,31 1,13 7,25 13,37 11,22 22,71 19,71" - style="fill:none;stroke:#dba981;stroke-width:1.48899996;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.467, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 734.9,1229 c 2,3 -6,45 -14,66 c -4,11 -8,20 -7,31 c 1,13 7,25 13,37 c 11,22 22,71 19,71" + style="fill:none;stroke:#dba981;stroke-width:1.489;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.467, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 749.9,1147 c -15,4 -19,9 -24,18 c -9,16 -18,40 -7,55 c 6,8 24,13 30,5" + style="fill:none;stroke:#dba981;stroke-width:3.721;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + d="m 637.9,1101 c 0,0 11,5 17,5 c 33,2 41,-9 41,-9" + style="fill:none;stroke:#dba981;stroke-width:3.721;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + d="m 658.9,1211 c 0,8 -6,14 -14,14 c -7,0 -13,-6 -13,-14 c 0,-7 6,-13 13,-13 c 8,0 14,6 14,13" + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.3414;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" /> + d="m 658.9,1241 c 0,8 -6,14 -14,14 c -7,0 -13,-6 -13,-14 c 0,-7 6,-13 13,-13 c 8,0 14,6 14,13" + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.3414;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" /> + d="m 657.9,1273 c 0,7 -6,13 -13,13 c -7,0 -13,-6 -13,-13 c 0,-8 6,-14 13,-14 c 7,0 13,6 13,14" + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.3414;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" /> + d="m 658.9,1343 c 0,8 -6,14 -13,14 c -7,0 -14,-6 -14,-14 c 0,-7 7,-13 14,-13 c 7,0 13,6 13,13" + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.3414;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" /> 17 @@ -612,11 +612,11 @@ sodipodi:nodetypes="ccccccscccccscccaccccccc" inkscape:connector-curvature="0" id="path4174" - d="m 1178,504 c -2,-28.4 -2,-38.6 0,-57.7 2,-16.4 5,-32.7 9,-48.5 3,-8.9 9,-16.7 10,-25.8 2,-13.3 -2,-26.8 -3,-40.2 0,-6.2 2,-10.8 0,-18.4 -9,-8.2 -17,-27.5 -17,-40.2 0,-12.5 8,-20.5 11,-33 2,-6 -6,-14.8 -8,-25.1 -3,-10.4 0,-22.4 5,-23.3 10,-2.1 26,-8.9 35,-16.2 8,-7.2 7,-37.3 7,-37.3 0,0 1,-5.3 17,-6.5 15,-1.1 43,2.4 43,2.4 0,0 -2,16.9 4,25.1 11,13.7 36,19.7 46,24.2 15,6.8 14,12.2 16,20.8 4,20.6 -8,44.3 -15,61.2 -6,13.6 -6,29.1 -10,43.4 -3,8.6 -6,16.9 -9,25.6 -2,8.9 -5,17.8 -4,27 0,12.1 4,24.5 10,35 6,11 16,31 20,47.5 5,15.6 6,31.7 7,47.8" - style="fill:none;stroke:#dba981;stroke-width:3.72099996;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + d="m 1178,504 c -2,-28.4 -2,-38.6 0,-57.7 c 2,-16.4 5,-32.7 9,-48.5 c 3,-8.9 9,-16.7 10,-25.8 c 2,-13.3 -2,-26.8 -3,-40.2 c 0,-6.2 2,-10.8 0,-18.4 c -9,-8.2 -17,-27.5 -17,-40.2 c 0,-12.5 8,-20.5 11,-33 c 2,-6 -6,-14.8 -8,-25.1 c -3,-10.4 0,-22.4 5,-23.3 c 10,-2.1 26,-8.9 35,-16.2 c 8,-7.2 7,-37.3 7,-37.3 c 0,0 1,-5.3 17,-6.5 c 15,-1.1 43,2.4 43,2.4 c 0,0 -2,16.9 4,25.1 c 11,13.7 36,19.7 46,24.2 c 15,6.8 14,12.2 16,20.8 c 4,20.6 -8,44.3 -15,61.2 c -6,13.6 -6,29.1 -10,43.4 c -3,8.6 -6,16.9 -9,25.6 c -2,8.9 -5,17.8 -4,27 c 0,12.1 4,24.5 10,35 c 6,11 16,31 20,47.5 c 5,15.6 6,31.7 7,47.8" + style="fill:none;stroke:#dba981;stroke-width:3.721;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + style="fill:none;stroke:#7dc832;stroke-width:2.4186;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + style="fill:none;stroke:#dba981;stroke-width:0.721;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:2.163, 0.721;stroke-dashoffset:0;stroke-opacity:1" /> @@ -685,27 +685,27 @@ sodipodi:nodetypes="caaaac" inkscape:connector-curvature="0" id="path6792-8" - d="m 403.9,2509 c 0,0 2.4,11 7.3,13 2.4,1 4.8,0 7.2,-2 5.7,-5 7.3,-14 8.1,-23 0,-5 -2.4,-12 -4.8,-18 -1.7,-6 -8.1,-17 -8.1,-17" - style="fill:none;stroke:#dba981;stroke-width:2.9999001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + d="m 403.9,2509 c 0,0 2.4,11 7.3,13 c 2.4,1 4.8,0 7.2,-2 c 5.7,-5 7.3,-14 8.1,-23 c 0,-5 -2.4,-12 -4.8,-18 c -1.7,-6 -8.1,-17 -8.1,-17" + style="fill:none;stroke:#dba981;stroke-width:2.9999;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + style="fill:none;stroke:#7dc832;stroke-width:2.4186;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + d="m 517.6,2563 c 0,6 -4.8,11 -11.3,11 c -5.6,0 -10.5,-5 -10.5,-11 c 0,-6 4.9,-10 10.5,-10 c 6.5,0 11.3,4 11.3,10" + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.0814;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" /> + d="m 489.4,2607 c 0,6 -4.9,11 -11.3,11 c -5.7,0 -10.5,-5 -10.5,-11 c 0,-6 4.8,-11 10.5,-11 c 6.4,0 11.3,5 11.3,11" + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.0814;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" /> @@ -714,52 +714,52 @@ inkscape:connector-curvature="0" id="path3878-7-3" d="m 421.7,2526 c 32.2,5 109.6,4 112,-4" - style="fill:none;stroke:#7dc832;stroke-width:2.41860008;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + style="fill:none;stroke:#7dc832;stroke-width:2.4186;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + d="m 457.9,2523 c 0,6 -4.8,11 -10.4,11 c -6.5,0 -11.3,-5 -11.3,-11 c 0,-6 4.8,-11 11.3,-11 c 5.6,0 10.4,5 10.4,11" + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.0814;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" /> + style="fill:none;stroke:#7dc832;stroke-width:2.4186;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + d="m 489.4,2433 c 0,6 -4.9,11 -10.5,11 c -6.5,0 -11.3,-5 -11.3,-11 c 0,-6 4.8,-11 11.3,-11 c 5.6,0 10.5,5 10.5,11" + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.0814;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" /> + style="fill:none;stroke:#7dc832;stroke-width:2.4186;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + d="m 517.6,2639 c 0,6 -4.8,11 -10.5,11 c -6.4,0 -11.3,-5 -11.3,-11 c 0,-6 4.9,-10 11.3,-10 c 5.7,0 10.5,4 10.5,10" + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.0814;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" /> + style="fill:none;stroke:#7dc832;stroke-width:2.4186;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + d="m 489.4,2694 c 0,6 -4.9,11 -10.5,11 c -6.5,0 -11.3,-5 -11.3,-11 c 0,-6 4.8,-11 11.3,-11 c 5.6,0 10.5,5 10.5,11" + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.0814;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" /> + style="fill:none;stroke:#7dc832;stroke-width:2.4186;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + d="m 489.4,2543 c 0,6 -4.9,11 -11.3,11 c -6.5,0 -10.5,-5 -10.5,-11 c 0,-6 4,-11 10.5,-11 c 6.4,0 11.3,5 11.3,11" + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.0814;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" /> 28 @@ -890,79 +890,79 @@ sodipodi:nodetypes="csc" inkscape:connector-curvature="0" id="path3825-9-6" - d="m 228.8,2559 c 2.8,-1 10.5,-3 27.6,-3 19.1,0 51.4,4 76.1,7" - style="fill:none;stroke:#dba981;stroke-width:0.72100002;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:2.163, 0.721;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 228.8,2559 c 2.8,-1 10.5,-3 27.6,-3 c 19.1,0 51.4,4 76.1,7" + style="fill:none;stroke:#dba981;stroke-width:0.721;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:2.163, 0.721;stroke-dashoffset:0;stroke-opacity:1" /> + style="fill:none;stroke:#000000;stroke-width:2.4186;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + d="m 347,2455 c -9.6,2 -15.7,7 -19.9,14 c -7.5,13 -15.3,33 -5.6,45 c 5.2,6 19.5,7 24.3,0" + style="fill:none;stroke:#dba981;stroke-width:2.9999;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + d="m 258,2410 c 0,0 5.9,4 16.8,4 c 24.2,-1 29.4,-7 29.4,-7" + style="fill:none;stroke:#dba981;stroke-width:2.9999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + d="m 219.7,2510 c 3.2,5 30,11 41.4,11 c 24.9,1 62,1 81.8,4" + style="fill:none;stroke:#aaaaaa;stroke-width:2.0155;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:8.062, 2.0155;stroke-dashoffset:0;stroke-opacity:1" /> + style="fill:none;stroke:#aaaaaa;stroke-width:2.0155;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:8.062, 2.0155;stroke-dashoffset:0;stroke-opacity:1" /> + style="fill:none;stroke:#aaaaaa;stroke-width:2.0155;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:8.062, 2.0155;stroke-dashoffset:0;stroke-opacity:1" /> + style="fill:none;stroke:#aaaaaa;stroke-width:2.0155;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:8.062, 2.0155;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 267.8,2612 c 0,6 -4.8,10 -10.9,10 c -5.9,0 -10.8,-4 -10.8,-10 c 0,-6 4.9,-11 10.8,-11 c 6,0 10.8,5 10.9,11" + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;stroke:#00000f;stroke-width:1.0814;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:0.9412;marker:none;enable-background:accumulate" /> 9 + style="fill:none;stroke:#000000;stroke-width:2.4186;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + d="m 230.5,2559 l 4.6,-1 l 21.7,-1 c 0,0 22,0 33.3,1 c 14.5,1 43.2,6 43.2,6" + style="fill:none;stroke:#000000;stroke-width:2.4186;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + style="fill:none;stroke:#000000;stroke-width:2.4186;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + d="m 267.8,2502 c 0,5 -4.8,10 -10.9,10 c -5.9,0 -10.8,-5 -10.8,-10 c 0,-7 4.9,-12 10.8,-12 c 6,0 10.8,5 10.9,11" + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;stroke:#00000f;stroke-width:1.0814;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:0.9412;marker:none;enable-background:accumulate" /> + d="m 267.8,2527 c 0,5 -4.8,10 -10.9,10 c -5.9,0 -10.8,-5 -10.8,-10 c 0,-7 4.9,-12 10.8,-12 c 6,0 10.8,5 10.9,12" + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;stroke:#00000f;stroke-width:1.0814;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:0.9412;marker:none;enable-background:accumulate" /> + d="m 267.8,2556 c 0,6 -4.8,11 -10.9,11 c -5.9,0 -10.8,-5 -10.8,-11 c 0,-5 4.9,-10 10.8,-10 c 6,0 10.8,5 10.9,10" + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;stroke:#00000f;stroke-width:1.0814;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:0.9412;marker:none;enable-background:accumulate" /> 5 + style="fill:none;stroke:#aaaaaa;stroke-width:1.6124;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:6.4496, 1.6124;stroke-dashoffset:0;stroke-opacity:1" /> + style="fill:none;stroke:#000000;stroke-width:2.4186;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> @@ -1193,8 +1193,8 @@ style="fill:none;stroke:#dba981;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:6, 2;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 1416,1175 l 0,1 l 1,0 l -1,1 l 1,1 l 0,1 l 0,1 l 0,1 l 1,0 l 13,-2 l 13,-3 l 1,-1 l -1,-1 l 0,-1 l -1,0 l 1,-2 l -1,0 l 0,-1 c 0,0 0,-1 0,-1 z" + style="fill:#ffc8c8;fill-opacity:1;stroke:#dba981;stroke-width:1.0189;stroke-linecap:round;stroke-opacity:1" /> + d="m 1427,1144 l 0,1 l -1,1 l 0,1 l 1,1 l -2,1 l 1,1 l 0,0 l 1,1 l 10,2 l 11,1 l 0,-1 l 0,-1 l 0,-1 l 0,-1 l 0,-1 l 0,0 l 0,-1 c 0,-1 0,-1 0,-1 z" + style="fill:#ffc8c8;fill-opacity:1;stroke:#dba981;stroke-width:0.9178;stroke-linecap:round;stroke-opacity:1" /> + transform="matrix(0.8062,0,0,0.8062,505.1,1869)"> + transform="matrix(0.8062,0,0,0.8062,579.2,1851)"> + style="fill:none;stroke:#dba981;stroke-width:3.6863;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + transform="matrix(0.8062,0,0,0.8062,-529.4,3036)"> + d="m 907.3,2757 l 154.7,1" + style="fill:none;stroke:#dba981;stroke-width:1.489;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.467, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 923,2831 l 126,0" + style="fill:none;stroke:#dba981;stroke-width:1.489;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.467, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> @@ -1482,8 +1482,8 @@ sodipodi:role="line">Front @@ -1491,11 +1491,11 @@ sodipodi:nodetypes="cc" inkscape:connector-curvature="0" id="path7494-1-6-3-5-81-64-9-2-9-5-3-0-6" - d="m 1069,2636 -80,194" + d="m 1069,2636 l -80,194" style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker7359);marker-end:url(#marker7359)" /> + transform="matrix(0.8062,0,0,0.8062,-751.3,3040)"> @@ -1559,8 +1559,8 @@ sodipodi:nodetypes="cc" inkscape:connector-curvature="0" id="path8471-6-6-6-8-7-8-3-3-9-1" - d="m 1729,2826 130,1" - style="fill:none;stroke:#dba981;stroke-width:1.48899996;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.467, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 1729,2826 l 130,1" + style="fill:none;stroke:#dba981;stroke-width:1.489;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.467, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 1881,2664 c 0,8 -7,14 -14,14 c -8,0 -14,-6 -14,-14 c 0,-7 6,-14 14,-14 c 7,0 13,7 14,14" + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;stroke:#00000f;stroke-width:1.3924;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:0.9412;marker:none;enable-background:accumulate" /> + transform="matrix(0.8062,0,0,0.8062,272.3,3046)"> + d="m 1965,2753 l 164,0" + style="fill:none;stroke:#dba981;stroke-width:1.489;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.467, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 1959,2714 l 177,0" + style="fill:none;stroke:#dba981;stroke-width:1.489;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.467, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> @@ -1638,13 +1638,13 @@ sodipodi:nodetypes="cc" inkscape:connector-curvature="0" id="path8471-6-6-6-8-7-8-3-3-9-1-2" - d="m 1983,2826 130,0" + d="m 1983,2826 l 130,0" style="fill:none;stroke:#dba981;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:6, 2;stroke-dashoffset:0;stroke-opacity:1" /> Back + transform="matrix(0.8062,0,0,0.8062,291.2,2743)"> + d="m 1186,3090 c 42,-2 18,-32 89,-32 c 66,-1 49,31 82,31" + style="fill:none;stroke:#dba981;stroke-width:1.489;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.467, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 1195,3125 l 151,0" + style="fill:none;stroke:#dba981;stroke-width:1.489;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.467, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 1205,3201 c -5,-23 -7,-40 -11,-60 c -3,-14 -2,-30 -8,-44 c -10,-26 -25,-61 -8,-87 c 8,-11 33,-10 53,-21 c 4,-3 5,-10 6,-14 c 1,-5 -1,-16 -1,-16 c 0,0 22,7 34,7 c 11,0 32,-6 32,-6 c 0,0 -2,10 -1,15 c 1,6 3,12 6,14 c 20,12 45,10 53,22 c 21,30 3,61 -8,86 c -6,14 -6,30 -8,44 c -4,20 -8,40 -11,60" + style="fill:none;stroke:#dba981;stroke-width:3.721;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + d="m 1207,3200 l 126,0" + style="fill:none;stroke:#dba981;stroke-width:1.489;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.467, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> Front + d="m 1338,3036 c 0,7 -7,14 -14,14 c -8,0 -14,-7 -14,-14 c 0,-8 6,-14 14,-14 c 7,0 13,6 14,14" + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;stroke:#00000f;stroke-width:1.3924;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:0.9412;marker:none;enable-background:accumulate" /> 8 + d="m 1965,2753 l 164,0" + style="fill:none;stroke:#dba981;stroke-width:1.489;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.467, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 1959,2714 l 177,0" + style="fill:none;stroke:#dba981;stroke-width:1.489;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.467, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> @@ -1814,7 +1814,7 @@ sodipodi:nodetypes="cc" inkscape:connector-curvature="0" id="path8471-6-6-6-8-7-8-3-3-9-1-2-5" - d="m 1983,2826 130,0" + d="m 1983,2826 l 130,0" style="fill:none;stroke:#dba981;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:6, 2;stroke-dashoffset:0;stroke-opacity:1" /> Back + transform="matrix(0.8062,0,0,0.8062,245.3,2743)"> + d="m 1491,3090 c 42,-2 18,-32 89,-32 c 66,-1 49,31 82,31" + style="fill:none;stroke:#dba981;stroke-width:1.489;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.467, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 1500,3125 l 151,0" + style="fill:none;stroke:#dba981;stroke-width:1.489;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.467, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 1510,3201 c -5,-23 -7,-40 -11,-60 c -3,-14 -2,-30 -8,-44 c -10,-26 -25,-61 -8,-87 c 8,-11 33,-10 53,-21 c 4,-3 5,-10 6,-14 c 1,-5 -1,-16 -1,-16 c 0,0 22,7 34,7 c 11,0 32,-6 32,-6 c 0,0 -2,10 -1,15 c 1,6 3,12 6,14 c 20,12 45,10 53,22 c 21,30 3,61 -8,86 c -6,14 -6,30 -8,44 c -4,20 -8,40 -11,60" + style="fill:none;stroke:#dba981;stroke-width:3.721;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + d="m 1512,3200 l 126,0" + style="fill:none;stroke:#dba981;stroke-width:1.489;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.467, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 1643,3036 c 0,7 -7,14 -14,14 c -8,0 -14,-7 -14,-14 c 0,-8 6,-14 14,-14 c 7,0 13,6 14,14" + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;stroke:#00000f;stroke-width:1.3924;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:0.9412;marker:none;enable-background:accumulate" /> 9 + d="m 1965,2753 l 164,0" + style="fill:none;stroke:#dba981;stroke-width:1.489;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.467, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 1959,2714 l 177,0" + style="fill:none;stroke:#dba981;stroke-width:1.489;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.467, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> @@ -1990,13 +1990,13 @@ sodipodi:nodetypes="cc" inkscape:connector-curvature="0" id="path8471-6-6-6-8-7-8-3-3-9-1-2-5-4-2" - d="m 1983,2826 130,0" + d="m 1983,2826 l 130,0" style="fill:none;stroke:#dba981;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:6, 2;stroke-dashoffset:0;stroke-opacity:1" /> Back + transform="matrix(0.8062,0,0,0.8062,-41.25,2743)"> + d="m 2101,3090 c 42,-2 18,-32 89,-32 c 66,-1 49,31 82,31" + style="fill:none;stroke:#dba981;stroke-width:1.489;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.467, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 2110,3125 l 151,0" + style="fill:none;stroke:#dba981;stroke-width:1.489;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.467, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 2120,3201 c -5,-23 -7,-40 -11,-60 c -3,-14 -2,-30 -8,-44 c -10,-26 -25,-61 -8,-87 c 8,-11 33,-10 53,-21 c 4,-3 5,-10 6,-14 c 1,-5 -1,-16 -1,-16 c 0,0 22,7 34,7 c 11,0 32,-6 32,-6 c 0,0 -2,10 -1,15 c 1,6 3,12 6,14 c 20,12 45,10 53,22 c 21,30 3,61 -8,86 c -6,14 -6,30 -8,44 c -4,20 -8,40 -11,60" + style="fill:none;stroke:#dba981;stroke-width:3.721;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + d="m 2122,3200 l 126,0" + style="fill:none;stroke:#dba981;stroke-width:1.489;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.467, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> Front + d="m 2253,3036 c 0,7 -7,14 -14,14 c -8,0 -14,-7 -14,-14 c 0,-8 6,-14 14,-14 c 7,0 13,6 14,14" + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;stroke:#00000f;stroke-width:1.3924;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:0.9412;marker:none;enable-background:accumulate" /> 10 + transform="matrix(0.8062,0,0,0.8062,-318,2743)"> + d="m 879.8,3114 l 155.2,1" + style="fill:none;stroke:#dba981;stroke-width:1.489;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.467, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 893.5,3189 c -5,-26 -7,-40 -11,-60 c -3,-14 -2,-30 -8,-44 c -10,-26 -25,-61 -8,-87 c 8,-11 33,-10 53,-21 c 4,-3 5,-10 6,-14 c 1,-5 -1,-16 -1,-16 c 0,0 22,7 34,7 c 11,0 32,-6 32,-6 c 0,0 -2,10 -1,15 c 1,6 3,12 6,14 c 20.5,12 45.5,10 53.5,22 c 21,30 3,61 -8,86 c -6,14 -6,30 -8,44 c -4,20 -8,36 -11,60" + style="fill:none;stroke:#dba981;stroke-width:3.721;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + d="m 895.5,3188 l 126.5,0" + style="fill:none;stroke:#dba981;stroke-width:1.489;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.467, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> Front @@ -2195,11 +2195,11 @@ sodipodi:nodetypes="cc" inkscape:connector-curvature="0" id="path7494-1-6-3-5-81-64-9-2-9-5-3-0-6-8" - d="m 996.5,2976 25.5,212" + d="m 996.5,2976 l 25.5,212" style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker7359);marker-end:url(#marker7359)" /> + transform="matrix(0.8062,0,0,0.8062,625.4,2763)"> @@ -2285,7 +2285,7 @@ sodipodi:nodetypes="cc" inkscape:connector-curvature="0" id="path8471-6-6-6-8-7-8-3-3-9-1-0" - d="m 539,3170 130,1" + d="m 539,3170 l 130,1" style="fill:none;stroke:#dba981;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:6, 2;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 661,3001 c 0,8 -7,14 -14,14 c -8,0 -14,-6 -14,-14 c 0,-7 6,-14 14,-14 c 7,0 13,7 14,14" + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;stroke:#00000f;stroke-width:1.3924;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:0.9412;marker:none;enable-background:accumulate" /> + d="m 634.1,3001 c 0,8 -7,14 -14,14 c -8,0 -14,-6 -14,-14 c 0,-7 6,-14 14,-14 c 7,0 13,7 14,14" + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;stroke:#00000f;stroke-width:1.3924;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:0.9412;marker:none;enable-background:accumulate" /> + transform="matrix(0.8062,0,0,0.8062,656.4,2723)"> + style="fill:none;stroke:#dba981;stroke-width:3.721;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + style="fill:none;stroke:#dba981;stroke-width:3.721;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> @@ -2413,7 +2413,7 @@ inkscape:connector-curvature="0" id="path3992-4-77-9-5-7-1-2" d="m 794,2250 c 12,12 69,13 73,4" - style="fill:none;stroke:#dba981;stroke-width:1.48899996;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.467, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> + style="fill:none;stroke:#dba981;stroke-width:1.489;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.467, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 747,2353 c 26,0 12,-25 84,-26 c 68,0 60,28 86,27" + style="fill:none;stroke:#dba981;stroke-width:1.489;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.467, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 750,2366 l 162,0" + style="fill:none;stroke:#dba981;stroke-width:1.489;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.467, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 767,2463 l 129,1" + style="fill:none;stroke:#dba981;stroke-width:1.489;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.467, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> + transform="matrix(0.8062,0,0,0.8062,693.9,2719)"> + style="fill:none;stroke:#dba981;stroke-width:1.489;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.467, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> + style="fill:none;stroke:#dba981;stroke-width:3.721;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + style="fill:none;stroke:#dba981;stroke-width:3.721;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + d="m 1015,2468 l 126,0" + style="fill:none;stroke:#dba981;stroke-width:1.489;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.467, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 992,2357 l 177,0" + style="fill:none;stroke:#dba981;stroke-width:1.489;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.467, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 997,2371 l 165,-1" + style="fill:none;stroke:#dba981;stroke-width:1.489;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.467, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> + transform="matrix(0.8062,0,0,0.8062,745.4,2723)"> + d="m 2181,1015 c 3,-21.3 -7,-40 -11,-60.8 c -3,-13.5 -2,-30.1 -8,-43.7 c -10,-26 -25,-61.3 -8,-87.3 c 8,-10.4 33,-9.4 53,-20.8 c 4,-3.1 5,-9.4 6,-13.5 c 1,-5.2 -1,-16.7 -1,-16.7 c 0,0 22,7.5 34,7.6 c 11,0.1 32,-6.5 32,-6.5 c 0,0 -2,10.4 -1,15.6 c 1,5.2 3,11.4 6,13.5 c 20,12.5 45,10.4 53,21.8 c 21,30.2 3,61.4 -8,86.3 c -6,13.6 -6,30.2 -8,43.7 c -4,20.8 -14,39.5 -11,60.8" + style="fill:none;stroke:#dba981;stroke-width:3.721;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> Front + d="m 2258,824.8 c 0,7.7 -7,13.9 -14,13.9 c -8,0 -14,-6.2 -14,-13.9 c 0,-7.7 6,-13.9 14,-13.9 c 7,0 13,6.2 14,13.8" + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;stroke:#00000f;stroke-width:1.3924;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:0.9412;marker:none;enable-background:accumulate" /> 14 + transform="translate(43.99,913.4)"> @@ -2720,19 +2720,19 @@ sodipodi:nodetypes="cc" inkscape:connector-curvature="0" id="path8471-6-6-6-8-7-8-3-3" - d="m 207,3798 101.5,0" - style="fill:none;stroke:#dba981;stroke-width:1.20039999;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.6013, 1.2004;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 207,3798 l 101.5,0" + style="fill:none;stroke:#dba981;stroke-width:1.2004;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.6013, 1.2004;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 227.9,3625 l -37.3,14" + style="fill:none;stroke:#000000;stroke-width:2.4186;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker7359);marker-end:url(#marker7359)" /> 1 Front + d="m 270.2,3672 c 0,6 -5.6,11 -11.2,11 c -6.5,0 -11.3,-5 -11.3,-11 c 0,-7 4.8,-11 11.3,-11 c 5.6,0 10.4,4 11.2,11" + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;stroke:#00000f;stroke-width:1.1226;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:0.9412;marker:none;enable-background:accumulate" /> + d="m 270.2,3640 c 0,7 -5.6,12 -11.2,12 c -6.5,0 -11.3,-5 -11.3,-12 c 0,-6 4.8,-11 11.3,-11 c 5.6,0 10.4,5 11.2,11" + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;stroke:#00000f;stroke-width:1.1226;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:0.9412;marker:none;enable-background:accumulate" /> 2 3 @@ -2817,25 +2817,25 @@ sodipodi:nodetypes="cc" inkscape:connector-curvature="0" id="path3992-4-77-9-5-7-1-28-0" - d="m 192.8,3739 129,0" - style="fill:none;stroke:#dba981;stroke-width:1.20039999;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.6013, 1.2004;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 192.8,3739 l 129,0" + style="fill:none;stroke:#dba981;stroke-width:1.2004;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.6013, 1.2004;stroke-dashoffset:0;stroke-opacity:1" /> + transform="matrix(0.8062,0,0,0.8062,-1358,3088)"> - - - - - - Front - - - - - - - - - - - - - 9 - QQPatternmaking measurements + transform="matrix(0.8062,0,0,0.8062,-154.8,3529)"> + d="m 790.2,5435 c 0,8 -7,14 -14,14 c -8,0 -14,-6 -14,-14 c 0,-7 6,-13 14,-13 c 7,0 13,6 14,13" + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;stroke:#00000f;stroke-width:1.3924;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:0.9412;marker:none;enable-background:accumulate" /> + transform="matrix(0.8062,0,0,0.8062,73.23,3539)"> @@ -3117,29 +2988,29 @@ id="text8558-1-0-4-9-9-0" y="7399.3989" x="54.927345" - style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:14.51089954px;line-height:125%;font-family:'Standard Symbols L';-inkscape-font-specification:'Standard Symbols L';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:14.5109px;line-height:125%;font-family:'Standard Symbols L';-inkscape-font-specification:'Standard Symbols L';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" xml:space="preserve">PHistorical &Specialty + transform="matrix(0.8224,0,0,0.8062,-90.26,3067)"> + d="m 408.5,5434 l 164.7,0" + style="fill:none;stroke:#dba981;stroke-width:1.4891;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.4674, 1.4891;stroke-dashoffset:0;stroke-opacity:1" /> + style="fill:none;stroke:#dba981;stroke-width:1.582;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.746, 1.582;stroke-dashoffset:0;stroke-opacity:1" /> + style="fill:none;stroke:#dba981;stroke-width:1.582;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.746, 1.582;stroke-dashoffset:0;stroke-opacity:1" /> + style="fill:none;stroke:#dba981;stroke-width:1.582;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.746, 1.582;stroke-dashoffset:0;stroke-opacity:1" /> @@ -3188,8 +3059,8 @@ sodipodi:nodetypes="cc" inkscape:connector-curvature="0" id="path3992-4-77-9-5-7-1-2-9-8-8-6-2-3" - d="m 420.8,5550 136.5,1" - style="fill:none;stroke:#dba981;stroke-width:1.48909998;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.4674, 1.4891;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 420.8,5550 l 136.5,1" + style="fill:none;stroke:#dba981;stroke-width:1.4891;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.4674, 1.4891;stroke-dashoffset:0;stroke-opacity:1" /> + transform="matrix(0.8264,0,0,0.8062,109.4,3067)"> + d="m 408.5,5434 l 164.7,0" + style="fill:none;stroke:#dba981;stroke-width:1.4891;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.4674, 1.4891;stroke-dashoffset:0;stroke-opacity:1" /> + style="fill:none;stroke:#dba981;stroke-width:1.582;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.746, 1.582;stroke-dashoffset:0;stroke-opacity:1" /> + style="fill:none;stroke:#dba981;stroke-width:1.582;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.746, 1.582;stroke-dashoffset:0;stroke-opacity:1" /> + style="fill:none;stroke:#dba981;stroke-width:1.582;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.746, 1.582;stroke-dashoffset:0;stroke-opacity:1" /> @@ -3275,8 +3146,8 @@ sodipodi:nodetypes="cc" inkscape:connector-curvature="0" id="path3992-4-77-9-5-7-1-2-9-8-8-6-2-3-1" - d="m 420.8,5550 136.5,1" - style="fill:none;stroke:#dba981;stroke-width:1.48909998;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.4674, 1.4891;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 420.8,5550 l 136.5,1" + style="fill:none;stroke:#dba981;stroke-width:1.4891;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.4674, 1.4891;stroke-dashoffset:0;stroke-opacity:1" /> + transform="matrix(0.8921,0,0,0.8921,-56.71,2048)"> + d="m 389.5,6443 c 0,0 2.8,-43 -0.9,-64 c -2.3,-13 -12,-24 -13,-37 c -0.9,-11 -0.9,-21 6.1,-33 c 9.9,-29 13,-41 18,-59" + style="fill:none;stroke:#dba981;stroke-width:1.489;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.467, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 480.6,6335 c 2,3 -6,45 -14,66 c -4,11 -6,31 -5,42" + style="fill:none;stroke:#dba981;stroke-width:1.489;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.467, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 495.6,6253 c -15,4 -19,9 -24,18 c -9,16 -18,40 -7,55 c 6,8 24,13 30,5" + style="fill:none;stroke:#dba981;stroke-width:3.721;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + d="m 383.6,6219 c 0,0 11,5 17,5 c 33,2 41,-9 41,-9" + style="fill:none;stroke:#dba981;stroke-width:3.721;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> @@ -3375,13 +3246,13 @@ sodipodi:nodetypes="cccscccccccacacccc" inkscape:connector-curvature="0" id="path15557-6" - d="m 351.6,6441 c 2,-13 -1,-29 -2,-42 0,-6 2,-11 0,-19 -9,-8 -17,-27 -17,-40 0,-12 8,-20 11,-33 2,-6 -6,-15 -8,-25 -3,-10 0,-22 5,-23 10,-2 26,-9 35,-16 8,-8 7,-24 7,-24 0,0 1,-5 17,-7 15,-1 43,3 43,3 0,0 -1,11 2,15 11,14 38,16 48,21 15,6 14,12 16,20 4,21 -8,45 -15,62 -6,13 -6,29 -10,43 -3,9 -6,17 -9,26 -2,8 -5,28 -4,37" - style="fill:none;stroke:#dba981;stroke-width:3.72099996;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + d="m 351.6,6441 c 2,-13 -1,-29 -2,-42 c 0,-6 2,-11 0,-19 c -9,-8 -17,-27 -17,-40 c 0,-12 8,-20 11,-33 c 2,-6 -6,-15 -8,-25 c -3,-10 0,-22 5,-23 c 10,-2 26,-9 35,-16 c 8,-8 7,-24 7,-24 c 0,0 1,-5 17,-7 c 15,-1 43,3 43,3 c 0,0 -1,11 2,15 c 11,14 38,16 48,21 c 15,6 14,12 16,20 c 4,21 -8,45 -15,62 c -6,13 -6,29 -10,43 c -3,9 -6,17 -9,26 c -2,8 -5,28 -4,37" + style="fill:none;stroke:#dba981;stroke-width:3.721;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + d="m 442.6,6333 c 0,8 -7,14 -14,14 c -8,0 -14,-6 -14,-14 c 0,-8 6,-14 14,-14 c 7,0 13,6 14,14" + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;stroke:#00000f;stroke-width:1.3924;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:0.9412;marker:none;enable-background:accumulate" /> + transform="matrix(0.8062,0,0,0.8062,38.56,2347)"> + d="m 1267,6340 l 165,0" + style="fill:none;stroke:#dba981;stroke-width:1.4891;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.4674, 1.4891;stroke-dashoffset:0;stroke-opacity:1" /> + style="fill:none;stroke:#dba981;stroke-width:1.582;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.746, 1.582;stroke-dashoffset:0;stroke-opacity:1" /> + style="fill:none;stroke:#dba981;stroke-width:1.582;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.746, 1.582;stroke-dashoffset:0;stroke-opacity:1" /> + style="fill:none;stroke:#dba981;stroke-width:1.582;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.746, 1.582;stroke-dashoffset:0;stroke-opacity:1" /> @@ -3461,8 +3332,8 @@ sodipodi:nodetypes="cc" inkscape:connector-curvature="0" id="path3992-4-77-9-5-7-1-2-9-8-8-6-2-3-1-9" - d="m 1279,6456 137,1" - style="fill:none;stroke:#dba981;stroke-width:1.48909998;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.4674, 1.4891;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 1279,6456 l 137,1" + style="fill:none;stroke:#dba981;stroke-width:1.4891;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.4674, 1.4891;stroke-dashoffset:0;stroke-opacity:1" /> 5 + d="m 1267,6340 l 165,0" + style="fill:none;stroke:#dba981;stroke-width:1.4891;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.4674, 1.4891;stroke-dashoffset:0;stroke-opacity:1" /> + style="fill:none;stroke:#dba981;stroke-width:1.582;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.746, 1.582;stroke-dashoffset:0;stroke-opacity:1" /> + style="fill:none;stroke:#dba981;stroke-width:1.582;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.746, 1.582;stroke-dashoffset:0;stroke-opacity:1" /> + style="fill:none;stroke:#dba981;stroke-width:1.582;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.746, 1.582;stroke-dashoffset:0;stroke-opacity:1" /> @@ -3548,8 +3419,8 @@ sodipodi:nodetypes="cc" inkscape:connector-curvature="0" id="path3992-4-77-9-5-7-1-2-9-8-8-6-2-3-1-9-0" - d="m 1279,6456 137,1" - style="fill:none;stroke:#dba981;stroke-width:1.48909998;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.4674, 1.4891;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 1279,6456 l 137,1" + style="fill:none;stroke:#dba981;stroke-width:1.4891;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.4674, 1.4891;stroke-dashoffset:0;stroke-opacity:1" /> + transform="matrix(0.8222,0,0,0.8062,1054,2094)"> + style="fill:none;stroke:#aaaaaa;stroke-width:2.9261;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:8.7783, 2.9261;stroke-dashoffset:0;stroke-opacity:1" /> + style="fill:none;stroke:#dba981;stroke-width:1.581;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.743, 1.581;stroke-dashoffset:0;stroke-opacity:1" /> + style="fill:none;stroke:#dba981;stroke-width:1.581;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.743, 1.581;stroke-dashoffset:0;stroke-opacity:1" /> + style="fill:none;stroke:#dba981;stroke-width:1.581;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.743, 1.581;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 608.1,6771 c -0.5,-25 -3.4,-40 -5.6,-60 c -1.9,-18 -1.2,-37 -6.7,-53 c -3.2,-9 -69.6,-37 -16.6,-77 c 11.1,-9 28.7,-6 40.3,-14 c 11.4,-8 25.3,-11 26.1,-33 c 7.7,-2 18.8,-3 29.9,-3 c 10.2,0 19.3,2 26.2,4 c 0.8,6 6.3,17 12.7,22 c 16.6,16 54.5,20 62.4,31 c 40.3,44 -3.9,51 -18.2,71 c -6.3,13 -5.5,37 -7.1,49 c -3.9,20 -8,45 -7.5,68" + style="fill:none;stroke:#dba981;stroke-width:3.7209;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + d="m 607.6,6773 l 136.5,1" + style="fill:none;stroke:#dba981;stroke-width:1.4882;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.4646, 1.4882;stroke-dashoffset:0;stroke-opacity:1" /> @@ -3647,17 +3518,17 @@ sodipodi:nodetypes="cc" inkscape:connector-curvature="0" id="path3992-4-77-9-5-7-1-2-9-8-8-6-2-3-7-6-31-8-2-4-2" - d="m 675.4,6548 -0.6,226" - style="fill:none;stroke:#dba981;stroke-width:1.48819995;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.4646, 1.4882;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 675.4,6548 l -0.6,226" + style="fill:none;stroke:#dba981;stroke-width:1.4882;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.4646, 1.4882;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 675.3,6609 l 85.7,0" + style="fill:none;stroke:#dba981;stroke-width:1.4882;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.4646, 1.4882;stroke-dashoffset:0;stroke-opacity:1" /> @@ -3665,7 +3536,7 @@ sodipodi:nodetypes="ccc" inkscape:connector-curvature="0" id="path7494-1-6-3-5-81-64-9-2-0-5-7-3-2-4-0-3-6-0" - d="m 763,6654 c -0.3,24 -70,-32 -86.5,-46 17.4,-17 44,-49 58.8,-42" + d="m 763,6654 c -0.3,24 -70,-32 -86.5,-46 c 17.4,-17 44,-49 58.8,-42" style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker7359);marker-end:url(#marker7359)" /> + transform="matrix(0.8302,0,0,0.8062,889.2,2086)"> + style="fill:none;stroke:#dba981;stroke-width:1.581;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.743, 1.581;stroke-dashoffset:0;stroke-opacity:1" /> + style="fill:none;stroke:#dba981;stroke-width:1.581;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.743, 1.581;stroke-dashoffset:0;stroke-opacity:1" /> + style="fill:none;stroke:#dba981;stroke-width:1.581;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.743, 1.581;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 1064,6777 c -1,-25 -4,-40 -6,-60 c -2,-18 -1,-37 -6,-53 c -4,-9 -70.1,-37 -17,-77 c 11,-9 29,-6 40,-14 c 12,-8 25,-11 26,-33 c 8,-2 19,-3 30,-3 c 10,0 19,2 26,4 c 1,6 7,17 13,22 c 17,16 55,20 63,31 c 40,44 -4,51 -19,71 c -6,13 -5,37 -7,49 c -4,20 -8,45 -7,68" + style="fill:none;stroke:#dba981;stroke-width:3.721;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + d="m 1063,6779 l 137,1" + style="fill:none;stroke:#dba981;stroke-width:1.4882;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.4646, 1.4882;stroke-dashoffset:0;stroke-opacity:1" /> @@ -3756,17 +3627,17 @@ sodipodi:nodetypes="cc" inkscape:connector-curvature="0" id="path3992-4-77-9-5-7-1-2-9-8-8-6-2-3-7-6-31-8-2-4-2-3" - d="m 1131,6554 0,226" - style="fill:none;stroke:#dba981;stroke-width:1.48819995;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.4646, 1.4882;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 1131,6554 l 0,226" + style="fill:none;stroke:#dba981;stroke-width:1.4882;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.4646, 1.4882;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 1131,6615 l 86,0" + style="fill:none;stroke:#dba981;stroke-width:1.4882;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.4646, 1.4882;stroke-dashoffset:0;stroke-opacity:1" /> @@ -3781,10 +3652,10 @@ inkscape:connector-curvature="0" id="path10713-0-7-06" d="m 1184,6571 c 24,9 37,56 35,89" - style="fill:none;stroke:#aaaaaa;stroke-width:2.92610002;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:8.7783, 2.9261;stroke-dashoffset:0;stroke-opacity:1" /> + style="fill:none;stroke:#aaaaaa;stroke-width:2.9261;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:8.7783, 2.9261;stroke-dashoffset:0;stroke-opacity:1" /> + transform="matrix(0.8343,0,0,0.8062,869.1,2093)"> + style="fill:none;stroke:#dba981;stroke-width:1.581;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.743, 1.581;stroke-dashoffset:0;stroke-opacity:1" /> + style="fill:none;stroke:#dba981;stroke-width:1.581;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.743, 1.581;stroke-dashoffset:0;stroke-opacity:1" /> + style="fill:none;stroke:#dba981;stroke-width:1.581;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.743, 1.581;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 554.5,6770 c -0.5,-25 -3.4,-40 -5.6,-60 c -1.9,-18 -1.2,-37 -6.7,-53 c -3.2,-9 -69.6,-37 -16.6,-77 c 11.1,-9 28.7,-6 40.3,-14 c 11.4,-8 25.3,-11 26.1,-33 c 7.7,-2 18.8,-3 29.9,-3 c 10.2,0 19.3,2 26.2,4 c 0.8,6 6.3,17 12.7,22 c 16.6,16 54.5,20 62.4,31 c 40.3,44 -3.9,51 -18.2,71 c -6.3,13 -5.5,37 -7.1,49 c -3.9,20 -8,45 -7.5,68" + style="fill:none;stroke:#dba981;stroke-width:3.7209;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + d="m 554,6772 l 136.5,1" + style="fill:none;stroke:#dba981;stroke-width:1.4882;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.4646, 1.4882;stroke-dashoffset:0;stroke-opacity:1" /> @@ -3856,17 +3727,17 @@ sodipodi:nodetypes="cc" inkscape:connector-curvature="0" id="path3992-4-77-9-5-7-1-2-9-8-8-6-2-3-7-6-31-8-2-4" - d="m 621.8,6547 -0.6,226" - style="fill:none;stroke:#dba981;stroke-width:1.48819995;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.4646, 1.4882;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 621.8,6547 l -0.6,226" + style="fill:none;stroke:#dba981;stroke-width:1.4882;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.4646, 1.4882;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 621.7,6608 l 85.7,0" + style="fill:none;stroke:#dba981;stroke-width:1.4882;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.4646, 1.4882;stroke-dashoffset:0;stroke-opacity:1" /> @@ -3874,14 +3745,14 @@ sodipodi:nodetypes="ccc" inkscape:connector-curvature="0" id="path7494-1-6-3-5-81-64-9-2-0-5-7-3-2-4-0-3-6" - d="m 705.6,6657 c -2.8,23 -66.2,-78 -82,-109 16.8,0 36.2,7 58.1,17" + d="m 705.6,6657 c -2.8,23 -66.2,-78 -82,-109 c 16.8,0 36.2,7 58.1,17" style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker7359);marker-end:url(#marker7359)" /> + style="fill:none;stroke:#aaaaaa;stroke-width:2.9261;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:8.7783, 2.9261;stroke-dashoffset:0;stroke-opacity:1" /> + transform="matrix(0.8921,0,0,0.8921,-63.91,2077)"> + d="m 702,6297 c 2,3 -6,45 -14,66 c -4,11 -6,31 -5,42" + style="fill:none;stroke:#dba981;stroke-width:1.489;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.467, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 717,6215 c -15,4 -19,9 -24,18 c -9,16 -18,40 -7,55 c 6,8 24,13 30,5" + style="fill:none;stroke:#dba981;stroke-width:3.721;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + d="m 605,6181 c 0,0 11,5 17,5 c 33,2 41,-9 41,-9" + style="fill:none;stroke:#dba981;stroke-width:3.721;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> @@ -3979,17 +3850,17 @@ sodipodi:nodetypes="cccscccccccacacccc" inkscape:connector-curvature="0" id="path15557-6-3" - d="m 573,6403 c 2,-13 -1,-29 -2,-42 0,-6 2,-11 0,-19 -9,-8 -17,-27 -17,-40 0,-12 8,-20 11,-33 2,-6 -6,-15 -8,-25 -3,-10 0,-22 5,-23 10,-2 26,-9 35,-16 8,-8 7,-24 7,-24 0,0 1,-5 17,-7 15,-1 43,3 43,3 0,0 -1,11 2,15 11,14 38,16 48,21 15,6 14,12 16,20 4,21 -8,45 -15,62 -6,13 -6,29 -10,43 -3,9 -6,17 -9,26 -2,8 -5,28 -4,37" - style="fill:none;stroke:#dba981;stroke-width:3.72099996;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + d="m 573,6403 c 2,-13 -1,-29 -2,-42 c 0,-6 2,-11 0,-19 c -9,-8 -17,-27 -17,-40 c 0,-12 8,-20 11,-33 c 2,-6 -6,-15 -8,-25 c -3,-10 0,-22 5,-23 c 10,-2 26,-9 35,-16 c 8,-8 7,-24 7,-24 c 0,0 1,-5 17,-7 c 15,-1 43,3 43,3 c 0,0 -1,11 2,15 c 11,14 38,16 48,21 c 15,6 14,12 16,20 c 4,21 -8,45 -15,62 c -6,13 -6,29 -10,43 c -3,9 -6,17 -9,26 c -2,8 -5,28 -4,37" + style="fill:none;stroke:#dba981;stroke-width:3.721;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + d="m 574,6367 l 6,-1 c 23,-3 45,-1 69,1 l 36,4" + style="fill:none;stroke:#dba981;stroke-width:1.489;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.467, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> @@ -3997,8 +3868,8 @@ sodipodi:nodetypes="csssc" inkscape:connector-curvature="0" id="path4050-8-0-5-3-4-0-7-3-0-68-5-6-5-9-3-0-9-0-4-8-6-7" - d="m 663,6293 c 0,8 -7,14 -14,14 -8,0 -14,-6 -14,-14 0,-8 6,-14 14,-14 7,0 13,6 14,14" - style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;stroke:#00000f;stroke-width:1.39240003;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:0.94120029;marker:none;enable-background:accumulate" /> + d="m 663,6293 c 0,8 -7,14 -14,14 c -8,0 -14,-6 -14,-14 c 0,-8 6,-14 14,-14 c 7,0 13,6 14,14" + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;stroke:#00000f;stroke-width:1.3924;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:0.9412;marker:none;enable-background:accumulate" /> + d="m 613.4,6406 c 0,0 2.8,-43 -0.9,-64 c -2.3,-13 -12,-24 -13,-37 c -0.9,-11 -0.9,-21 6.1,-33 c 9.9,-29 13,-41 18,-59" + style="fill:none;stroke:#dba981;stroke-width:1.489;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.467, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> + transform="matrix(0.8062,0,0,0.8062,321.9,3071)"> + d="m 408.5,5434 l 164.7,0" + style="fill:none;stroke:#dba981;stroke-width:1.4891;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.4674, 1.4891;stroke-dashoffset:0;stroke-opacity:1" /> + style="fill:none;stroke:#dba981;stroke-width:1.582;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.746, 1.582;stroke-dashoffset:0;stroke-opacity:1" /> + style="fill:none;stroke:#dba981;stroke-width:1.582;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.746, 1.582;stroke-dashoffset:0;stroke-opacity:1" /> + style="fill:none;stroke:#dba981;stroke-width:1.582;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.746, 1.582;stroke-dashoffset:0;stroke-opacity:1" /> @@ -4071,8 +3942,8 @@ sodipodi:nodetypes="cc" inkscape:connector-curvature="0" id="path3992-4-77-9-5-7-1-2-9-8-8-6-2-3-1-6" - d="m 420.8,5550 136.5,1" - style="fill:none;stroke:#dba981;stroke-width:1.48909998;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.4674, 1.4891;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 420.8,5550 l 136.5,1" + style="fill:none;stroke:#dba981;stroke-width:1.4891;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.4674, 1.4891;stroke-dashoffset:0;stroke-opacity:1" /> 2 + d="m 1996,6571 l 103,0" + style="fill:none;stroke:#dba981;stroke-width:1.489;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.467, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 2000,6596 l 101,0" + style="fill:none;stroke:#dba981;stroke-width:1.489;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.467, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 1993,6474 l 123,0" + style="fill:none;stroke:#dba981;stroke-width:1.489;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.467, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 2103,7086 l -1,-74" + style="fill:none;stroke:#dba981;stroke-width:3.108;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:9.324, 3.108;stroke-dashoffset:0;stroke-opacity:1;marker-start:url(#marker7359);marker-end:url(#marker7359)" /> @@ -4242,7 +4113,7 @@ sodipodi:cy="50.32" sodipodi:cx="57.75" id="path4050-8-0-9-9-5-9-1-2-36-7-2-2-02-4-8" - style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;stroke:#00000f;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.94120029;marker:none;enable-background:accumulate" + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;stroke:#00000f;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.9412;marker:none;enable-background:accumulate" sodipodi:type="arc" /> + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.5202px;line-height:125%;font-family:'Nimbus Sans L';-inkscape-font-specification:'Nimbus Sans L';text-align:start;writing-mode:lr-tb;text-anchor:start" /> CCIndentationIndentation + style="font-size:51.5968px" /> + transform="matrix(0.8062,0,0,0.8062,284.8,2671)"> + style="opacity:0.3;fill:none;stroke:#000000;stroke-width:2.6829;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:5.3658, 2.6829;stroke-dashoffset:0;stroke-opacity:1;marker-start:none;marker-end:none" /> 15 + style="fill:none;stroke:#000000;stroke-width:2.683;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:none;marker-end:none" /> + style="opacity:0.3;fill:none;stroke:#000000;stroke-width:2.6829;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:5.3658, 2.6829;stroke-dashoffset:0;stroke-opacity:1;marker-start:none;marker-end:none" /> + style="fill:none;stroke:#000000;stroke-width:2.6829;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:none;marker-end:none" /> + transform="matrix(0.8062,0,0,0.8062,278.7,2679)"> + transform="matrix(0.8062,0,0,0.8062,289.9,3536)"> @@ -4720,146 +4591,11 @@ y="5752.3369">3 - - - - Front - - - - - - - - - - - 7 - - - 8 - + transform="matrix(0.8062,0,0,0.8062,10.68,2732)"> + d="m 344.5,3940 c 3,-16 12,-36 20,-52 c 3,-8 9,-16 9,-24 c 2,-19 -8,-37 -11,-57 c -4,-20 -6,-33 -11.5,-52" + style="fill:none;stroke:#dba981;stroke-width:3.721;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + style="fill:none;stroke:#dba981;stroke-width:3.721;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> @@ -4898,22 +4634,22 @@ inkscape:connector-curvature="0" id="path5925-1-0-5" d="m 348.8,3944 c -2.7,7 -18.2,14 -20.6,12" - style="fill:none;stroke:#dba981;stroke-width:1.48899996;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:2.978, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> + style="fill:none;stroke:#dba981;stroke-width:1.489;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:2.978, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> 2 1 + style="display:inline;fill:none;stroke:#7dc832;stroke-width:2.683;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker7359);marker-end:url(#marker7359)" /> + transform="matrix(0.8062,0,0,0.8062,39.63,2724)"> + style="fill:none;stroke:#dba981;stroke-width:1.489;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:2.978, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> 5 + style="display:inline;fill:none;stroke:#7dc832;stroke-width:2.6829;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:none;marker-end:none" /> @@ -5162,16 +4898,16 @@ sodipodi:nodetypes="cccccccscccccccccscccc" inkscape:connector-curvature="0" id="path16196" - d="m 1718,616.9 c -5,-14.6 -9,-29.2 -11,-47.9 -2,-20.7 4,-40.5 3,-60.3 -2,-21.8 -18,-38.4 -19,-60.2 0,-10.4 9,-24.1 8,-34.5 0,-11.5 -1,-33.3 -2,-44.8 0,-12.5 2,-19.8 0,-28.1 -10,-8.3 -18,-21.8 -18,-35.4 0,-13.5 16,-31.2 20,-38.5 2,-6.2 30,-55.2 28,-64.5 1,1 -3,-17.4 -5,-22.6 17,0.2 30,-13.7 47,-22 0,7.3 8,23.7 11,26.9 8,15.6 25,47.8 30,72.8 7,20.9 2,35.4 -1,53.1 -3,18.8 -14,40.6 -17,54.2 -3,11.4 -8,30.1 -7,41.6 18,43.1 39,79.9 39,109.3 0,20.8 -18,45.7 -18,45.7 l 0,12.5 c 0,0 1,23.9 1,42.7 z" - style="fill:none;stroke:#dba981;stroke-width:3.72099996;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + d="m 1718,616.9 c -5,-14.6 -9,-29.2 -11,-47.9 c -2,-20.7 4,-40.5 3,-60.3 c -2,-21.8 -18,-38.4 -19,-60.2 c 0,-10.4 9,-24.1 8,-34.5 c 0,-11.5 -1,-33.3 -2,-44.8 c 0,-12.5 2,-19.8 0,-28.1 c -10,-8.3 -18,-21.8 -18,-35.4 c 0,-13.5 16,-31.2 20,-38.5 c 2,-6.2 30,-55.2 28,-64.5 c 1,1 -3,-17.4 -5,-22.6 c 17,0.2 30,-13.7 47,-22 c 0,7.3 8,23.7 11,26.9 c 8,15.6 25,47.8 30,72.8 c 7,20.9 2,35.4 -1,53.1 c -3,18.8 -14,40.6 -17,54.2 c -3,11.4 -8,30.1 -7,41.6 c 18,43.1 39,79.9 39,109.3 c 0,20.8 -18,45.7 -18,45.7 l 0,12.5 c 0,0 1,23.9 1,42.7 z" + style="fill:none;stroke:#dba981;stroke-width:3.721;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> Back @@ -5313,35 +5049,35 @@ sodipodi:nodetypes="cc" inkscape:connector-curvature="0" id="path3833-4-0-8-2-6-6-9-6-7-1-9-9-4-7-9-6" - d="M 1390,207.2 1436,153" + d="M 1390,207.2 L 1436,153" style="fill:none;stroke:#dba981;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:9, 3;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 1511,500.6 c 5,-2.1 10,-3.1 17,-10.5 c 3,3.2 5,7.4 12,9.5" + style="fill:none;stroke:#dba981;stroke-width:3.721;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> @@ -5349,49 +5085,49 @@ sodipodi:nodetypes="cc" inkscape:connector-curvature="0" id="path3992-4-77-9-5-7-1-0-9-7" - d="m 1446,251.8 165,-0.1" - style="display:inline;fill:none;stroke:#dba981;stroke-width:1.48899996;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:2.978, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 1446,251.8 l 165,-0.1" + style="display:inline;fill:none;stroke:#dba981;stroke-width:1.489;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:2.978, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> + d="M 1464,345.1 L 1592,345" + style="display:inline;fill:none;stroke:#dba981;stroke-width:1.489;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:2.978, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 1424,437 l 201,0.5" + style="display:inline;fill:none;stroke:#dba981;stroke-width:1.489;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:2.978, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 1495,206 c 0,8 -7,14 -14,14 c -8,0 -14,-6 -14,-14 c 0,-8 6,-14 14,-14 c 7,0 13,6 14,14" + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;stroke:#00000f;stroke-width:1.3924;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:0.9412;marker:none;enable-background:accumulate" /> 1 + d="m 1495,302.1 c 0,8 -7,14 -14,14 c -8,0 -14,-6 -14,-14 c 0,-8 6,-14 14,-14 c 7,0 13,6 14,14" + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;stroke:#00000f;stroke-width:1.3924;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:0.9412;marker:none;enable-background:accumulate" /> + d="m 1495,398.5 c 0,8 -7,14 -14,14 c -8,0 -14,-6 -14,-14 c 0,-8 6,-14 14,-14 c 7,0 13,6 14,14" + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;stroke:#00000f;stroke-width:1.3924;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:0.9412;marker:none;enable-background:accumulate" /> + transform="matrix(0.8062,0,0,0.8062,578.9,2717)"> + style="fill:none;stroke:#dba981;stroke-width:1.489;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.467, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> + style="fill:none;stroke:#dba981;stroke-width:1.489;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.467, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 1507,3809 l 0,142" + style="fill:none;stroke:#dba981;stroke-width:1.489;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.467, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 1479,3733 c -1,54 7,72 26,74 c 21,1 27,-26 24,-63 c 0,-9 2,-35 -22,-32 c -18,1 -28,8 -28,21 z" + style="fill:none;stroke:#dba981;stroke-width:3.721;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + style="fill:none;stroke:#dba981;stroke-width:1.489;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.467, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 1474,3783 l 1,-82" + style="fill:none;stroke:#dba981;stroke-width:3.696;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:11.088, 3.696;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 1534,3782 l -1,-80" + style="fill:none;stroke:#dba981;stroke-width:3.696;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:11.088, 3.696;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 1536,3672 c 36,57 35,131 25,180 c -6,32 -24,64 -23,94" + style="fill:none;stroke:#dba981;stroke-width:3.721;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + d="m 1566,3812 c -27,-2 -48,2 -75,0 c -16,-10 -55,-42 -55,-42" + style="fill:none;stroke:#dba981;stroke-width:1.489;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.467, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> + style="fill:none;stroke:#dba981;stroke-width:1.489;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.467, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> + transform="matrix(0.8062,0,0,0.8062,574.6,2717)"> + d="m 1232,3709 l 104,0" + style="fill:none;stroke:#dba981;stroke-width:3.696;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:11.088, 3.696;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 1233,3804 l 105,1" + style="fill:none;stroke:#dba981;stroke-width:3.696;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:11.088, 3.696;stroke-dashoffset:0;stroke-opacity:1" /> + style="fill:none;stroke:#dba981;stroke-width:1.489;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.467, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> + style="fill:none;stroke:#dba981;stroke-width:1.489;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.467, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 1235,3807 l 0,142" + style="fill:none;stroke:#dba981;stroke-width:1.489;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.467, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 1207,3731 c -1,54 7,72 26,74 c 21,1 27,-26 24,-63 c 0,-9 2,-35 -22,-32 c -18,1 -28,8 -28,21 z" + style="fill:none;stroke:#000000;stroke-width:2.683;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + style="fill:none;stroke:#dba981;stroke-width:1.489;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.467, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 1264,3670 c 36,57 35,131 25,180 c -6,32 -24,64 -23,94" + style="fill:none;stroke:#dba981;stroke-width:3.721;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + d="m 1294,3810 c -27,-2 -48,2 -75,0 c -16,-10 -55,-42 -55,-42" + style="fill:none;stroke:#dba981;stroke-width:1.489;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.467, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> + style="fill:none;stroke:#dba981;stroke-width:1.489;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.467, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> @@ -5638,7 +5374,7 @@ sodipodi:cy="50.32" sodipodi:cx="57.75" id="path4050-8-0-9-9-5-9-1-2-36-3-6-8" - style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;stroke:#00000f;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.94120029;marker:none;enable-background:accumulate" + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;stroke:#00000f;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.9412;marker:none;enable-background:accumulate" sodipodi:type="arc" /> 19 20 + style="fill:none;stroke:#dba981;stroke-width:1.489;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:2.978, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> 8 + style="display:inline;fill:none;stroke:#7dc832;stroke-width:2.6829;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:none;marker-end:none" /> + transform="matrix(0.8062,0,0,0.8062,90.65,3145)"> @@ -5852,7 +5588,7 @@ sodipodi:cy="50.32" sodipodi:cx="57.75" id="path4050-8-0-9-9-5-9-1-5-2-4-1" - style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;stroke:#00000f;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.94120029;marker:none;enable-background:accumulate" + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;stroke:#00000f;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.9412;marker:none;enable-background:accumulate" sodipodi:type="arc" /> 4 @@ -5911,7 +5647,7 @@ sodipodi:cy="50.32" sodipodi:cx="57.75" id="path4050-8-0-9-9-5-9-1-5-2-4-1-7" - style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;stroke:#00000f;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.94120029;marker:none;enable-background:accumulate" + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;stroke:#00000f;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.9412;marker:none;enable-background:accumulate" sodipodi:type="arc" /> + transform="matrix(0.8062,0,0,0.8062,-36.07,3236)"> @@ -5973,7 +5709,7 @@ sodipodi:cy="50.32" sodipodi:cx="57.75" id="path4050-8-0-9-9-5-9-1-5-2-4-1-8" - style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;stroke:#00000f;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.94120029;marker:none;enable-background:accumulate" + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;stroke:#00000f;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.9412;marker:none;enable-background:accumulate" sodipodi:type="arc" /> 7 @@ -6003,7 +5739,7 @@ sodipodi:cy="50.32" sodipodi:cx="57.75" id="path4050-8-0-9-9-5-9-1-5-2-4-1-8-2" - style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;stroke:#00000f;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.94120029;marker:none;enable-background:accumulate" + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;stroke:#00000f;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.9412;marker:none;enable-background:accumulate" sodipodi:type="arc" /> + d="m 1786,4111 c 10,41 77,44 106,17 c 10,-10 15,-25 18,-38" + style="fill:none;stroke:#dba981;stroke-width:1.489;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.467, 1.489;stroke-dashoffset:0;stroke-opacity:1;marker-start:url(#marker7359);marker-end:url(#marker7359)" /> + transform="matrix(0.8062,0,0,0.8062,227.6,2812)"> + transform="matrix(0.8062,0,0,0.8062,82.38,2812)"> 3 + transform="matrix(0.8062,0,0,0.8062,-62.42,2351)"> @@ -6220,7 +5956,7 @@ sodipodi:cy="50.32" sodipodi:cx="57.75" id="path4050-8-0-9-9-5-9-7-8-9-5-5-6-4" - style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;stroke:#00000f;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.94120029;marker:none;enable-background:accumulate" + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;stroke:#00000f;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.9412;marker:none;enable-background:accumulate" sodipodi:type="arc" /> OMen &Tailoring + transform="matrix(0.8464,0,0,0.8062,166.6,2355)"> + style="fill:none;stroke:#dba981;stroke-width:1.578;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.734, 1.578;stroke-dashoffset:0;stroke-opacity:1" /> + style="fill:none;stroke:#dba981;stroke-width:1.578;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.734, 1.578;stroke-dashoffset:0;stroke-opacity:1" /> + style="fill:none;stroke:#dba981;stroke-width:1.578;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.734, 1.578;stroke-dashoffset:0;stroke-opacity:1" /> + style="fill:none;stroke:#dba981;stroke-width:3.7138;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + d="m 704.9,5793 c -0.2,-26 3,-44 8.2,-29 c -3.3,-6 -7,-15 -4.5,-26 c -0.5,-24 -2.2,-41 -4.4,-61 c -1.9,-18 -1.2,-37 -6.7,-53 c -3.1,-9 -69.4,-36 -16.5,-77 c 11,-8 28.4,-5 40.2,-14 c 11.8,-8 25.2,-10 26,-33 c 5.6,4 17.4,8 28.4,8 c 10.3,0 17.9,-2 27.7,-6 c 0.7,5 6.3,16 12.6,22 c 16.5,15 54.4,19 62.3,30 c 40.2,44 -3.9,51 -18.1,71 c -6.4,13 -5.6,37 -7.1,49 c -4,20 -5.3,45 -8,66 c 1.8,6 -0.5,18 -1.8,24 c 1.8,-16 7.7,21 8.3,28" + style="fill:none;stroke:#dba981;stroke-width:3.7138;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + d="m 709.4,5739 l 136.1,1" + style="fill:none;stroke:#dba981;stroke-width:1.4854;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.4561, 1.4854;stroke-dashoffset:0;stroke-opacity:1" /> @@ -6350,7 +6086,7 @@ sodipodi:nodetypes="cc" /> + transform="matrix(0.8303,0,0,0.8062,743.5,2363)"> + style="fill:none;stroke:#dba981;stroke-width:1.578;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.734, 1.578;stroke-dashoffset:0;stroke-opacity:1" /> + style="fill:none;stroke:#dba981;stroke-width:1.578;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.734, 1.578;stroke-dashoffset:0;stroke-opacity:1" /> + style="fill:none;stroke:#dba981;stroke-width:1.578;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.734, 1.578;stroke-dashoffset:0;stroke-opacity:1" /> + style="fill:none;stroke:#dba981;stroke-width:3.7138;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + d="m 965.9,5794 c -0.2,-26 3,-44 8.2,-29 c -3.3,-6 -7,-15 -4.5,-26 c -0.5,-24 -2.2,-41 -4.4,-61 c -1.9,-18 -1.2,-37 -6.7,-53 c -3.1,-9 -69.4,-36 -16.5,-77 c 11,-8 28.4,-5 40.2,-14 c 11.8,-8 24.8,-10 25.8,-33 c 6,4 18,8 29,8 c 10,0 18,-2 27,-6 c 1,5 7,16 13,22 c 16,15 54,19 62,30 c 40,44 -4,51 -18,71 c -6,13 -5,37 -7,49 c -4,20 -5,45 -8,66 c 2,6 0,18 -2,24 c 2,-16 8,21 9,28" + style="fill:none;stroke:#dba981;stroke-width:3.7138;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + d="m 970.4,5740 l 136.6,1" + style="fill:none;stroke:#dba981;stroke-width:1.4854;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.4561, 1.4854;stroke-dashoffset:0;stroke-opacity:1" /> @@ -6439,11 +6175,11 @@ sodipodi:nodetypes="cc" inkscape:connector-curvature="0" id="path7494-1-6-3-5-81-64-9-2-9-5-3-0-6-1-6-8-3" - d="m 1082,5741 0,41" + d="m 1082,5741 l 0,41" style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker7359);marker-end:url(#marker7359)" /> + transform="matrix(0.8222,0,0,0.8062,808.7,2357)"> + style="fill:none;stroke:#dba981;stroke-width:1.581;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.743, 1.581;stroke-dashoffset:0;stroke-opacity:1" /> + style="fill:none;stroke:#dba981;stroke-width:1.581;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.743, 1.581;stroke-dashoffset:0;stroke-opacity:1" /> + style="fill:none;stroke:#dba981;stroke-width:1.581;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.743, 1.581;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 1232,5796 c 0,-6 1,-22 2,-33 c 2,-11 4,-19 3,-23 c 0,-25 -3,-40 -6,-60 c -1,-18 -1,-37 -6,-53 c -3,-9 -70,-37 -17,-77 c 11,-9 29,-6 40,-14 c 12,-8 26,-11 27,-33 c 7,-2 18,-3 29,-3 c 11,0 20,2 27,4 c 0,6 6,17 12,22 c 17,16 55,20 63,31 c 40,44 -4,51 -18,71 c -7,13 -6,37 -8,49 c -3,20 -8,45 -7,68 c 0,7 2,14 3,22 c 2,9 2,21 3,28" + style="fill:none;stroke:#dba981;stroke-width:3.7209;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + d="m 1237,5742 l 136,1" + style="fill:none;stroke:#dba981;stroke-width:1.488;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.464, 1.488;stroke-dashoffset:0;stroke-opacity:1" /> @@ -6549,11 +6285,11 @@ sodipodi:nodetypes="cc" inkscape:connector-curvature="0" id="path7494-1-6-3-5-81-64-9-2-9-5-3-0-6-1-6-8-3-8" - d="m 1349,5745 0,41" + d="m 1349,5745 l 0,41" style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker7359);marker-end:url(#marker7359)" /> + transform="matrix(0.8062,0,0,0.8062,-70.46,2354)"> @@ -6616,7 +6352,7 @@ sodipodi:cy="50.32" sodipodi:cx="57.75" id="path4050-8-0-9-9-5-9-7-8-9-5-5-6-4-1" - style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;stroke:#00000f;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.94120029;marker:none;enable-background:accumulate" + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;stroke:#00000f;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.9412;marker:none;enable-background:accumulate" sodipodi:type="arc" /> 11 @@ -6646,7 +6382,7 @@ sodipodi:cy="50.32" sodipodi:cx="57.75" id="path4050-8-0-9-9-5-9-7-8-9-5-5-6-4-1-4" - style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;stroke:#00000f;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.94120029;marker:none;enable-background:accumulate" + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;stroke:#00000f;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.9412;marker:none;enable-background:accumulate" sodipodi:type="arc" /> + transform="matrix(0.8062,0,0,0.8062,-75.26,2357)"> @@ -6705,7 +6441,7 @@ sodipodi:cy="50.32" sodipodi:cx="57.75" id="path4050-8-0-9-9-5-9-7-8-9-5-5-6-4-6" - style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;stroke:#00000f;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.94120029;marker:none;enable-background:accumulate" + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;stroke:#00000f;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.9412;marker:none;enable-background:accumulate" sodipodi:type="arc" /> 13 @@ -6735,7 +6471,7 @@ sodipodi:cy="50.32" sodipodi:cx="57.75" id="path4050-8-0-9-9-5-9-7-8-9-5-5-6-4-4" - style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;stroke:#00000f;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.94120029;marker:none;enable-background:accumulate" + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;stroke:#00000f;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.9412;marker:none;enable-background:accumulate" sodipodi:type="arc" /> + transform="matrix(0.8062,0,0,0.8062,-65.67,2358)"> @@ -6794,7 +6530,7 @@ sodipodi:cy="50.32" sodipodi:cx="57.75" id="path4050-8-0-9-9-5-9-7-8-9-5-5-6-4-6-6" - style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;stroke:#00000f;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.94120029;marker:none;enable-background:accumulate" + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;stroke:#00000f;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.9412;marker:none;enable-background:accumulate" sodipodi:type="arc" /> + transform="matrix(0.8062,0,0,0.8062,450.6,2358)"> + style="fill:none;stroke:#dba981;stroke-width:1.578;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.734, 1.578;stroke-dashoffset:0;stroke-opacity:1" /> + style="fill:none;stroke:#dba981;stroke-width:1.578;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.734, 1.578;stroke-dashoffset:0;stroke-opacity:1" /> + style="fill:none;stroke:#dba981;stroke-width:1.578;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.734, 1.578;stroke-dashoffset:0;stroke-opacity:1" /> + style="fill:none;stroke:#dba981;stroke-width:3.7138;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + d="m 704.9,5793 c -0.2,-26 3,-44 8.2,-29 c -3.3,-6 -7,-15 -4.5,-26 c -0.5,-24 -2.2,-41 -4.4,-61 c -1.9,-18 -1.2,-37 -6.7,-53 c -3.1,-9 -69.4,-36 -16.5,-77 c 11,-8 28.4,-5 40.2,-14 c 11.8,-8 25.2,-10 26,-33 c 5.6,4 17.4,8 28.4,8 c 10.3,0 17.9,-2 27.7,-6 c 0.7,5 6.3,16 12.6,22 c 16.5,15 54.4,19 62.3,30 c 40.2,44 -3.9,51 -18.1,71 c -6.4,13 -5.6,37 -7.1,49 c -4,20 -5.3,45 -8,66 c 1.8,6 -0.5,18 -1.8,24 c 1.8,-16 7.7,21 8.3,28" + style="fill:none;stroke:#dba981;stroke-width:3.7138;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + d="m 709.4,5739 l 136.1,1" + style="fill:none;stroke:#dba981;stroke-width:1.4854;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.4561, 1.4854;stroke-dashoffset:0;stroke-opacity:1" /> @@ -6873,7 +6609,7 @@ sodipodi:nodetypes="cc" /> + transform="matrix(0.8342,0,0,0.8062,255.2,2356)"> + style="fill:none;stroke:#dba981;stroke-width:1.581;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.743, 1.581;stroke-dashoffset:0;stroke-opacity:1" /> + style="fill:none;stroke:#dba981;stroke-width:1.581;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.743, 1.581;stroke-dashoffset:0;stroke-opacity:1" /> + style="fill:none;stroke:#dba981;stroke-width:1.581;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.743, 1.581;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 1232,5796 c 0,-6 1,-22 2,-33 c 2,-11 4,-19 3,-23 c 0,-25 -3,-40 -6,-60 c -1,-18 -1,-37 -6,-53 c -3,-9 -70,-37 -17,-77 c 11,-9 29,-6 40,-14 c 12,-8 26,-11 27,-33 c 7,-2 18,-3 29,-3 c 11,0 20,2 27,4 c 0,6 6,17 12,22 c 17,16 55,20 63,31 c 40,44 -4,51 -18,71 c -7,13 -6,37 -8,49 c -3,20 -8,45 -7,68 c 0,7 2,14 3,22 c 2,9 2,21 3,28" + style="fill:none;stroke:#dba981;stroke-width:3.7209;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + d="m 1237,5742 l 136,1" + style="fill:none;stroke:#dba981;stroke-width:1.4882;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.4646, 1.4882;stroke-dashoffset:0;stroke-opacity:1" /> @@ -6972,7 +6708,7 @@ sodipodi:nodetypes="cc" /> + transform="matrix(0.8263,0,0,0.8062,-63.13,2406)"> + style="fill:none;stroke:#dba981;stroke-width:1.578;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.734, 1.578;stroke-dashoffset:0;stroke-opacity:1" /> + style="fill:none;stroke:#dba981;stroke-width:1.578;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.734, 1.578;stroke-dashoffset:0;stroke-opacity:1" /> + style="fill:none;stroke:#dba981;stroke-width:1.578;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.734, 1.578;stroke-dashoffset:0;stroke-opacity:1" /> + style="fill:none;stroke:#dba981;stroke-width:3.7138;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + d="m 351.4,5730 c 0,-26 3,-44 8,-29 c -3,-6 -7,-15 -4,-26 c -1,-24 -3,-41 -5,-61 c -2,-18 -1,-37 -6,-53 c -4,-9 -70,-36 -17,-77 c 11,-8 28,-5 40,-14 c 12,-8 25,-10 26,-33 c 6,4 18,8 29,8 c 10,0 18,-2 27,-6 c 1,5 7,16 13,22 c 16,15 53.9,19 61.9,30 c 40,44 -4,51 -17.9,71 c -6,13 -5,37 -7,49 c -4,20 -5,45 -8,66 c 2,6 0,18 -2,24 c 2,-16 8,21 9,28" + style="fill:none;stroke:#dba981;stroke-width:3.7138;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + d="m 355.4,5676 l 137,1" + style="fill:none;stroke:#dba981;stroke-width:1.4854;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.4561, 1.4854;stroke-dashoffset:0;stroke-opacity:1" /> @@ -7061,7 +6797,7 @@ sodipodi:nodetypes="cc" inkscape:connector-curvature="0" id="path7494-1-6-3-5-81-64-9-2-9-5-3-0-6-1-6-0-1" - d="m 459.4,5458 -34,219" + d="m 459.4,5458 l -34,219" style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker7359);marker-end:url(#marker7359)" /> 1 @@ -7111,47 +6847,47 @@ sodipodi:nodetypes="ccccc" inkscape:connector-curvature="0" id="path3874-7-8-0-3-9-1-5" - d="m 285.9,1948 6.8,-1 29.4,-1 48.8,2 52.1,6" - style="fill:none;stroke:#dba981;stroke-width:1.48899996;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.467, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 285.9,1948 l 6.8,-1 l 29.4,-1 l 48.8,2 l 52.1,6" + style="fill:none;stroke:#dba981;stroke-width:1.489;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.467, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 271.2,1883 c 0,0 10.2,-7 15.8,-10 c 6.8,-2 14.8,-3 21.5,-3 c 22.7,-1 45.4,-2 66.9,3 c 20.4,5 45.3,25 58.9,26" + style="fill:none;stroke:#dba981;stroke-width:1.489;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.467, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> + style="fill:none;stroke:#dba981;stroke-width:1.489;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.467, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> + style="fill:none;stroke:#dba981;stroke-width:1.489;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.467, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 267.8,1904 c 0,0 17,-2 24.9,-3 c 23.8,-2 46.4,-3 70.2,0 c 23.8,2 51,9 69.1,13" + style="fill:none;stroke:#dba981;stroke-width:1.489;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.467, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> @@ -7159,41 +6895,41 @@ sodipodi:nodetypes="cac" inkscape:connector-curvature="0" id="path3992-4-9-6-1-0-0-1-02-4-0" - d="m 382.2,1767 c 3.4,11 1.1,10 4.5,14 11.4,13 35.1,19 49.9,22" - style="fill:none;stroke:#dba981;stroke-width:1.48899996;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.467, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 382.2,1767 c 3.4,11 1.1,10 4.5,14 c 11.4,13 35.1,19 49.9,22" + style="fill:none;stroke:#dba981;stroke-width:1.489;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.467, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> + style="fill:none;stroke:#dba981;stroke-width:1.489;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.467, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> 18 + style="fill:none;stroke:#dba981;stroke-width:1.489;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.467, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> + transform="matrix(0.8062,0,0,0.8062,-322.5,2330)"> @@ -7357,23 +7093,23 @@ sodipodi:nodetypes="csc" inkscape:connector-curvature="0" id="path2993-6-7-5-5-3-7-9" - d="m 1594,6653 c 2,3 -7,51 -16,75 -4,12 -6,35 -5,47" - style="fill:none;stroke:#dba981;stroke-width:1.48899996;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.467, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 1594,6653 c 2,3 -7,51 -16,75 c -4,12 -6,35 -5,47" + style="fill:none;stroke:#dba981;stroke-width:1.489;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.467, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 1611,6560 c -17,5 -21,10 -27,21 c -10,18 -20,45 -8,62 c 7,9 27,15 34,6" + style="fill:none;stroke:#dba981;stroke-width:3.721;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + d="m 1484,6522 c 0,0 13,5 20,5 c 37,3 46,-10 46,-10" + style="fill:none;stroke:#dba981;stroke-width:3.721;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> @@ -7381,32 +7117,32 @@ sodipodi:nodetypes="cccscccccccacacccc" inkscape:connector-curvature="0" id="path15557-4-6-8-5" - d="m 1448,6773 c 2,-15 -1,-33 -2,-47 0,-7 2,-13 0,-22 -10,-9 -19,-31 -19,-45 0,-14 9,-23 12,-38 2,-6 -7,-17 -9,-28 -3,-11 0,-25 6,-26 11,-2 29,-10 39,-18 9,-9 8,-27 8,-27 0,0 1,-6 19,-8 17,-1 49,3 49,3 0,0 -1,13 2,17 13,16 43,18 55,24 17,7 16,14 18,23 4,23 -9,51 -17,70 -7,15 -7,33 -11,49 -4,10 -7,19 -11,29 -2,9 -5,32 -4,42" - style="fill:none;stroke:#dba981;stroke-width:3.72099996;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + d="m 1448,6773 c 2,-15 -1,-33 -2,-47 c 0,-7 2,-13 0,-22 c -10,-9 -19,-31 -19,-45 c 0,-14 9,-23 12,-38 c 2,-6 -7,-17 -9,-28 c -3,-11 0,-25 6,-26 c 11,-2 29,-10 39,-18 c 9,-9 8,-27 8,-27 c 0,0 1,-6 19,-8 c 17,-1 49,3 49,3 c 0,0 -1,13 2,17 c 13,16 43,18 55,24 c 17,7 16,14 18,23 c 4,23 -9,51 -17,70 c -7,15 -7,33 -11,49 c -4,10 -7,19 -11,29 c -2,9 -5,32 -4,42" + style="fill:none;stroke:#dba981;stroke-width:3.721;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + d="m 1449,6732 l 7,-1 c 26,-3 51,-1 78,1 l 41,5" + style="fill:none;stroke:#dba981;stroke-width:1.489;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.467, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 1601,6581 c 0,9 -8,15 -16,15 c -9,0 -16,-6 -16,-15 c 0,-10 7,-16 16,-16 c 8,0 15,6 16,16" + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;stroke:#00000f;stroke-width:1.5776;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:0.9412;marker:none;enable-background:accumulate" /> @@ -7444,11 +7180,11 @@ sodipodi:nodetypes="cc" inkscape:connector-curvature="0" id="path3833-4-0-8-2-6-6-9" - d="m 226.6,432.8 289.9,-0.3" + d="m 226.6,432.8 l 289.9,-0.3" style="fill:none;stroke:#dba981;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:6, 2;stroke-dashoffset:0;stroke-opacity:1" /> @@ -7456,11 +7192,11 @@ sodipodi:nodetypes="cc" inkscape:connector-curvature="0" id="path3833-4-0-8-2-6-35" - d="m 122.7,212.5 370.9,-0.1" + d="m 122.7,212.5 l 370.9,-0.1" style="fill:none;stroke:#dba981;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:6, 2;stroke-dashoffset:0;stroke-opacity:1" /> @@ -7468,7 +7204,7 @@ sodipodi:nodetypes="cc" inkscape:connector-curvature="0" id="path7494-1-6-3-5-8-3-9-5-7-2-4" - d="M 839.7,966.5 839.5,225.9" + d="M 839.7,966.5 L 839.5,225.9" style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker7359);marker-end:url(#marker7359)" /> @@ -7512,13 +7248,13 @@ sodipodi:nodetypes="cc" inkscape:connector-curvature="0" id="path7494-1-6-3-5-8-3-9-5-7-2-4-60-0" - d="m 729.2,966.5 0,-635.2" + d="m 729.2,966.5 l 0,-635.2" style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker7359);marker-end:url(#marker7359)" /> 9 16 @@ -7775,11 +7511,11 @@ sodipodi:nodetypes="cc" inkscape:connector-curvature="0" id="path3833-4-0-8-2-6-7-4" - d="m 330.9,730.8 130.8,0.5" + d="m 330.9,730.8 l 130.8,0.5" style="fill:none;stroke:#dba981;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:6, 2;stroke-dashoffset:0;stroke-opacity:1" /> @@ -7813,11 +7549,11 @@ sodipodi:nodetypes="cc" inkscape:connector-curvature="0" id="path3833-4-0-8-2-6-1-7" - d="M 89.85,90.37 527.2,87.98" + d="M 89.85,90.37 L 527.2,87.98" style="opacity:0.5;fill:none;stroke:#dba981;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:6, 2;stroke-dashoffset:0;stroke-opacity:1" /> 1 @@ -7912,7 +7648,7 @@ sodipodi:nodetypes="cc" inkscape:connector-curvature="0" id="path7494-1-6-3-5-8-3-9-0-5-3" - d="m 586.9,967.5 -0.5,-56.1" + d="m 586.9,967.5 l -0.5,-56.1" style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker7359);marker-end:url(#marker7359)" /> + d="m 538.9,234.1 c -13,3 -17,-5 -24,-9 c -8,-4 -12.4,-12.8 -22,-13" + style="fill:none;stroke:#dba981;stroke-width:1.489;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:2.978, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 494.5,262 c -1,42 6,57 21,58 c 17,1 22,-20 20,-49 c 0,-7 1,-27 -18,-25 c -15,1 -23,6 -23,16 z" + style="fill:none;stroke:#dba981;stroke-width:3.721;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + style="fill:none;stroke:#dba981;stroke-width:1.489;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:2.978, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 517.6,321.2 l -0.2,192.7" + style="display:inline;fill:none;stroke:#dba981;stroke-width:1.489;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:2.978, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> @@ -8027,7 +7763,7 @@ sodipodi:cy="50.32" sodipodi:cx="57.75" id="path4050-8-0-9-9-5-9-1-2-3-2-1-8" - style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;stroke:#00000f;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.94120029;marker:none;enable-background:accumulate" + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;stroke:#00000f;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.9412;marker:none;enable-background:accumulate" sodipodi:type="arc" /> + transform="matrix(0.8544,0,0,0.8062,-1227,2114)"> + style="fill:none;stroke:#dba981;stroke-width:1.578;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.734, 1.578;stroke-dashoffset:0;stroke-opacity:1" /> + style="fill:none;stroke:#dba981;stroke-width:1.578;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.734, 1.578;stroke-dashoffset:0;stroke-opacity:1" /> + style="fill:none;stroke:#dba981;stroke-width:1.578;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.734, 1.578;stroke-dashoffset:0;stroke-opacity:1" /> + style="fill:none;stroke:#dba981;stroke-width:3.7138;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + d="m 2019,6100 c 0,-26 3,-44 8,-29 c -3,-6 -7,-15 -4,-26 c -1,-24 -3,-41 -5,-61 c -2,-18 -1,-37 -6,-53 c -4,-9 -70,-36 -17,-77 c 11,-8 28,-5 40,-14 c 12,-8 25,-10 26,-33 c 6,4 18,8 29,8 c 10,0 18,-2 27,-6 c 1,5 7,16 13,22 c 16,15 54,19 62,30 c 40,44 -4,51 -18,71 c -6,13 -5,37 -7,49 c -4,20 -5,45 -8,66 c 2,6 0,18 -2,24 c 2,-16 8,21 9,28" + style="fill:none;stroke:#dba981;stroke-width:3.7138;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + d="m 2023,6046 l 137,1" + style="fill:none;stroke:#dba981;stroke-width:1.4854;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.4561, 1.4854;stroke-dashoffset:0;stroke-opacity:1" /> @@ -8131,17 +7867,17 @@ sodipodi:nodetypes="cc" inkscape:connector-curvature="0" id="path7494-1-6-3-5-81-64-9-2-9-5-3-0-6-1-6-0-1-0" - d="m 2127,5828 1,218" + d="m 2127,5828 l 1,218" style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker7359);marker-end:url(#marker7359)" /> @@ -8156,7 +7892,7 @@ sodipodi:cy="50.32" sodipodi:cx="57.75" id="path4050-8-0-9-9-5-9-7-8-9-5-5-6-4-29-3-4-0" - style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;stroke:#00000f;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.94120029;marker:none;enable-background:accumulate" + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;stroke:#00000f;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.9412;marker:none;enable-background:accumulate" sodipodi:type="arc" /> 2 - - - - - - - - - - - 18 - - - - 19 - - - - 20 - - + + + + + + + + + + 18 + + + + 19 + + + + 20 + + d="m 920.3,2234 l 1.6,8 c 0,5 0.8,4 -3.2,7" + style="display:inline;fill:none;stroke:#dba981;stroke-width:2.4185;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> @@ -8337,17 +8066,17 @@ sodipodi:nodetypes="csasc" inkscape:connector-curvature="0" id="path2993-6-7-7" - d="m 328,394.7 c 2,3 -6,45 -14,66 -4,11 -8,20 -7,31 1,13 7,25 13,37 11,22 22,71 19,71" - style="fill:none;stroke:#dba981;stroke-width:1.48899996;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.467, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 328,394.7 c 2,3 -6,45 -14,66 c -4,11 -8,20 -7,31 c 1,13 7,25 13,37 c 11,22 22,71 19,71" + style="fill:none;stroke:#dba981;stroke-width:1.489;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.467, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> @@ -8355,11 +8084,11 @@ sodipodi:nodetypes="caac" inkscape:connector-curvature="0" id="path3817-6-4-2" - d="m 338,393.7 c -4,2 -16,0 -24,-2 -12,-4 -23,-13 -36,-17 -13,-3 -24,-1 -41,-3" - style="fill:none;stroke:#dba981;stroke-width:0.89429998;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:2.6829, 0.8943;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 338,393.7 c -4,2 -16,0 -24,-2 c -12,-4 -23,-13 -36,-17 c -13,-3 -24,-1 -41,-3" + style="fill:none;stroke:#dba981;stroke-width:0.8943;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:2.6829, 0.8943;stroke-dashoffset:0;stroke-opacity:1" /> @@ -8377,7 +8106,7 @@ sodipodi:nodetypes="cc" /> @@ -8385,34 +8114,34 @@ sodipodi:nodetypes="caac" inkscape:connector-curvature="0" id="path3009-0-7-2" - d="m 343,312.7 c -15,4 -19,9 -24,18 -9,16 -18,40 -7,55 6,8 24,13 30,5" - style="fill:none;stroke:#dba981;stroke-width:3.72099996;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + d="m 343,312.7 c -15,4 -19,9 -24,18 c -9,16 -18,40 -7,55 c 6,8 24,13 30,5" + style="fill:none;stroke:#dba981;stroke-width:3.721;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + d="m 231,266.7 c 0,0 11,5 17,5 c 33,2 41,-9 41,-9" + style="fill:none;stroke:#dba981;stroke-width:3.721;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + d="m 271.5,376.3 c 0,8 -6,14 -14,14 c -7,0 -13,-6 -13,-14 c 0,-7 6,-13 13,-13 c 8,0 14,6 14,13" + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.3414;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" /> + d="m 271.5,406.3 c 0,8 -6,14 -14,14 c -7,0 -13,-6 -13,-14 c 0,-7 6,-13 13,-13 c 8,0 14,6 14,13" + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.3414;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" /> + d="m 271,438.3 c 0,7 -6,13 -13,13 c -7,0 -13,-6 -13,-13 c 0,-8 6,-14 13,-14 c 7,0 13,6 13,14" + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.3414;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" /> + d="m 271.5,508.3 c 0,8 -6,14 -13,14 c -7,0 -14,-6 -14,-14 c 0,-7 7,-13 14,-13 c 7,0 13,6 13,13" + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.3414;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" /> 25 + d="m 287.5,311.2 c 0,7.4 -6,13.4 -13,13.4 c -8,0 -14,-6 -14,-13.4 c 0,-7.4 6,-13.4 14,-13.4 c 7,0 13,6 13,13.3" + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.3414;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" /> + d="m 529.2,259.3 c 0.5,2.7 1.5,11.8 2.2,29.1 c 6.6,36.1 26.5,55.8 24,120.9 c -0.5,32.3 -11.6,75.3 -8.3,95.7 c 5.8,35.3 27.2,52 26.5,105.4" + style="fill:none;stroke:#dba981;stroke-width:1.489;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.467, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 455,399.9 c 5,42 24,68.1 20,103.7 c -2,19.5 -17,28.8 -19,111.5" + style="fill:none;stroke:#dba981;stroke-width:1.489;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.467, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> @@ -8596,21 +8325,21 @@ inkscape:connector-curvature="0" sodipodi:nodetypes="cc" /> + d="m 493,270 c 2,10.8 5,19.9 0,28.3 c -6,12.7 -23,21.1 -35,24.2" + style="fill:none;stroke:#dba981;stroke-width:1.489;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.467, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> @@ -8641,8 +8370,8 @@ inkscape:connector-curvature="0" sodipodi:nodetypes="cc" /> + d="m 532.1,476.4 c 0,7.4 -6,13.5 -14,13.5 c -7,0 -13,-6.1 -13,-13.5 c 0,-7.4 6,-13.4 13,-13.4 c 8,0 14,6 14,13.4" + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.3414;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" /> - - - - - - - - Front - - - - - - - 5 - - + d="M 471.2,238.2 L 471,483.9" + style="display:inline;fill:none;stroke:#dba981;stroke-width:1.489;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.467, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> @@ -8910,8 +8528,8 @@ sodipodi:nodetypes="cc" inkscape:connector-curvature="0" id="path8471-6-6-6-8-7-8-3-3-9-81" - d="m 405.3,484 126,0" - style="fill:none;stroke:#dba981;stroke-width:1.48899996;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.467, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 405.3,484 l 126,0" + style="fill:none;stroke:#dba981;stroke-width:1.489;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.467, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> Back @@ -8939,11 +8557,11 @@ sodipodi:nodetypes="cc" inkscape:connector-curvature="0" id="path7494-1-6-3-5-81-64-9-2-0-5-7-0" - d="m 559.3,291 -90,0" + d="m 559.3,291 l -90,0" style="fill:none;stroke:#7dc832;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker7359);marker-end:url(#marker7359)" /> + d="m 523.3,336 c 0,8 -7,14 -14,14 c -8,0 -14,-6 -14,-14 c 0,-8 6,-14 14,-14 c 7,0 13,6 14,14" + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;stroke:#00000f;stroke-width:1.3924;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:0.9412;marker:none;enable-background:accumulate" /> 11 + d="m 222.4,245 l 0.2,233.7" + style="display:inline;fill:none;stroke:#dba981;stroke-width:1.489;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.467, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> @@ -9029,8 +8647,8 @@ sodipodi:nodetypes="cc" inkscape:connector-curvature="0" id="path8471-6-6-6-8-7-8-3-3-0" - d="m 159.5,478 126,0" - style="fill:none;stroke:#dba981;stroke-width:1.48899996;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.467, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 159.5,478 l 126,0" + style="fill:none;stroke:#dba981;stroke-width:1.489;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.467, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> Front + d="m 196.7,318 c 0,7 -7,14 -14,14 c -8,0 -14,-7 -14,-14 c 0,-8 6,-14 14,-14 c 7,0 13,6 14,14" + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;stroke:#00000f;stroke-width:1.3924;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:0.9412;marker:none;enable-background:accumulate" /> + d="m 196.7,284 c 0,8 -7,14 -14,14 c -8,0 -14,-6 -14,-14 c 0,-8 6,-14 14,-14 c 7,0 13,6 14,14" + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;stroke:#00000f;stroke-width:1.3924;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:0.9412;marker:none;enable-background:accumulate" /> 6 @@ -9096,18 +8714,18 @@ sodipodi:nodetypes="cc" inkscape:connector-curvature="0" id="path3992-4-77-9-5-7-1-28-0-7" - d="m 144.1,405 154.5,0" - style="fill:none;stroke:#dba981;stroke-width:1.48899996;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.467, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 144.1,405 l 154.5,0" + style="fill:none;stroke:#dba981;stroke-width:1.489;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.467, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> + transform="matrix(0.8062,0,0,0.8062,5.79,2787)"> @@ -9456,7 +9074,7 @@ inkscape:connector-curvature="0" id="path7494-1-6-3-5-8-3-1-1-8-7-7" d="m 832,4408 c 7,11 80,-46 74,-55" - style="fill:none;stroke:#000000;stroke-width:2.68300009;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker7359);marker-end:url(#marker7359)" + style="fill:none;stroke:#000000;stroke-width:2.683;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker7359);marker-end:url(#marker7359)" sodipodi:nodetypes="cc" /> + transform="translate(26.54,585.4)"> + d="m 172.3,5595 l 100,0" + style="fill:none;stroke:#dba981;stroke-width:1.6124;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.8372, 1.6124;stroke-dashoffset:0;stroke-opacity:1" /> 1 + transform="translate(69.44,582.7)"> + d="m 918,5843 l 71,0" + style="fill:none;stroke:#dba981;stroke-width:2.0155;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:6.0465, 2.0155;stroke-dashoffset:0;stroke-opacity:1" /> @@ -9626,11 +9244,11 @@ sodipodi:cy="50.32" sodipodi:cx="57.75" id="path4050-8-0-9-9-5-9-1-5-2-4-5-0" - style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;stroke:#00000f;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.94120029;marker:none;enable-background:accumulate" + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;stroke:#00000f;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.9412;marker:none;enable-background:accumulate" sodipodi:type="arc" /> @@ -9670,14 +9288,14 @@ sodipodi:nodetypes="ccccccccccccccccccccccccccccscccccccccccccccccc" inkscape:connector-curvature="0" id="path8426-8-4-0-4-0-8" - d="m 429,4208 c 1,9 6,16 10,23 7,17 17,32 21,50 5,19 7,39 6,59 -1,24 -7,48 -10,71 -5,25 -10,50 -14,75 -2,12 -6,25 -6,38 1,8 5,16 6,25 2,16 3,33 2,49 -1,15 -4,29 -5,43 -2,15 -6.4,34 -6.4,49 1,7 4.7,12 4.7,12 l -0.9,9 c 0.1,18 14.2,42 11.6,71 -10,12 -14,23 -31,11 -5,-6 -7,-18 -10,-27 -2,-10 -1.6,-43 -1,-53 l -4,-12 c 0,0 1,-5 1,-10 -1.8,-23 -15,-64 -17,-86 -3,-18 1,-37 0,-55 -1,-10 -3,-20 -3,-29 -3,-33 -2,-66 -6,-99 -3,-19 -10,-60 -10,-60 0,0 -6,38 -9,58 -4,33 -8,67 -10,100 -1,10 -3,19 -4,29 -1,19 3,37 0,55 -2,22 -11,43 -13,65 -1,11 -1,33 -1,33 l -1,15 c -4,13 -5,41 -5,49 -4,9 -5,21 -10,26 -22,12 -22,1 -32,-10 -10,-12 1,-31 6,-50 l 3,-24 c 0,0 2,-14 3,-22 0,-15 -1,-30 -3,-46 -1,-14 -4,-28 -5,-42 -1,-17 0,-34 2,-50 2,-8 5,-16 6,-25 0,-13 -4,-25 -6,-38 -4,-25 -9,-49 -14,-74 -3,-24 -9,-47 -10,-71 0,-20 1,-41 6,-60 4,-17 14,-33 21,-49 4,-8 9,-15 10,-23" - style="fill:none;stroke:#dba981;stroke-width:3.72099996;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + d="m 429,4208 c 1,9 6,16 10,23 c 7,17 17,32 21,50 c 5,19 7,39 6,59 c -1,24 -7,48 -10,71 c -5,25 -10,50 -14,75 c -2,12 -6,25 -6,38 c 1,8 5,16 6,25 c 2,16 3,33 2,49 c -1,15 -4,29 -5,43 c -2,15 -6.4,34 -6.4,49 c 1,7 4.7,12 4.7,12 l -0.9,9 c 0.1,18 14.2,42 11.6,71 c -10,12 -14,23 -31,11 c -5,-6 -7,-18 -10,-27 c -2,-10 -1.6,-43 -1,-53 l -4,-12 c 0,0 1,-5 1,-10 c -1.8,-23 -15,-64 -17,-86 c -3,-18 1,-37 0,-55 c -1,-10 -3,-20 -3,-29 c -3,-33 -2,-66 -6,-99 c -3,-19 -10,-60 -10,-60 c 0,0 -6,38 -9,58 c -4,33 -8,67 -10,100 c -1,10 -3,19 -4,29 c -1,19 3,37 0,55 c -2,22 -11,43 -13,65 c -1,11 -1,33 -1,33 l -1,15 c -4,13 -5,41 -5,49 c -4,9 -5,21 -10,26 c -22,12 -22,1 -32,-10 c -10,-12 1,-31 6,-50 l 3,-24 c 0,0 2,-14 3,-22 c 0,-15 -1,-30 -3,-46 c -1,-14 -4,-28 -5,-42 c -1,-17 0,-34 2,-50 c 2,-8 5,-16 6,-25 c 0,-13 -4,-25 -6,-38 c -4,-25 -9,-49 -14,-74 c -3,-24 -9,-47 -10,-71 c 0,-20 1,-41 6,-60 c 4,-17 14,-33 21,-49 c 4,-8 9,-15 10,-23" + style="fill:none;stroke:#dba981;stroke-width:3.721;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + d="m 488.5,4701 c 1,-26 -2.5,-254 -0.5,-377 c 1,-66 -31,-102 -39,-118" + style="fill:none;stroke:#7dc832;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.9412;marker-start:url(#marker7359);marker-end:url(#marker7359)" /> + d="M 367.4,4699 L 367,4370" + style="fill:none;stroke:#7dc832;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.9412;marker-start:url(#marker7359);marker-end:url(#marker7359)" /> + d="m 992.7,2245 l -0.3,-140" + style="display:inline;fill:none;stroke:#7dc832;stroke-width:2.4186;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker7359);marker-end:url(#marker7359)" /> + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;stroke:#00000f;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.9412;marker:none;enable-background:accumulate" + sodipodi:type="arc" + transform="matrix(0.721,0,0,0.721,950.4,2109)" /> + d="m 923.4,2245 l 69,0" + style="display:inline;fill:none;stroke:#dba981;stroke-width:1.6124;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.8372, 1.6124;stroke-dashoffset:0;stroke-opacity:1" /> + transform="translate(-529.5,684)"> + d="m 1711,2753 l 164,0" + style="fill:none;stroke:#dba981;stroke-width:1.489;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.467, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 1705,2714 l 176,0" + style="fill:none;stroke:#dba981;stroke-width:1.489;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.467, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> + style="fill:none;stroke:#dba981;stroke-width:1.489;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.467, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 1711,2729 l 164,0" + style="fill:none;stroke:#dba981;stroke-width:1.489;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.467, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> + style="fill:none;stroke:#dba981;stroke-width:3.721;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + style="fill:none;stroke:#dba981;stroke-width:3.721;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + d="m 1727,2827 c -6,-24 -7,-39 -12,-60 c -3,-14 -2,-30 -7,-44 c -12,-25 -26,-61 -9,-86 c 9,-11 35,-10 55,-22 c 4,-2 6,-8 7,-13 c 0,-6 -1,-16 -1,-16 c 0,0 22,-8 34,-8 c 11,0 33,8 33,8 c 0,0 -2,11 -1,16 c 1,5 3,11 7,14 c 20,11 46,10 55,21 c 22,30 2,61 -9,87 c -5,13 -5,29 -8,43 c -4,21 -7,36 -12,59" + style="fill:none;stroke:#dba981;stroke-width:3.721;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> @@ -9838,13 +9456,13 @@ sodipodi:role="line">Back + d="m 1432,4454 l 0,176" + style="display:inline;fill:none;stroke:#dba981;stroke-width:1.2004;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.6013, 1.2004;stroke-dashoffset:0;stroke-opacity:1" /> } - - - - - - - - - - Front - - - - - - - - 3 - - 1 - - 2 - - - 4 - + transform="translate(134.8,514.8)"> @@ -10128,11 +9545,11 @@ sodipodi:nodetypes="cc" inkscape:connector-curvature="0" id="path8471-6-6-6-8-7-8-3-3-9" - d="m 641.9,4197.5 101.6,0" - style="fill:none;stroke:#dba981;stroke-width:1.20039999;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.6013, 1.2004;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 641.9,4198 l 101.6,0" + style="fill:none;stroke:#dba981;stroke-width:1.2004;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.6013, 1.2004;stroke-dashoffset:0;stroke-opacity:1" /> Back @@ -10157,16 +9574,16 @@ sodipodi:nodetypes="cc" inkscape:connector-curvature="0" id="path7494-1-6-3-5-81-64-9-2-0-5-7" - d="m 766.1,4041.5 -145.1,0" - style="fill:none;stroke:#000000;stroke-width:2.41860008;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker7359);marker-end:url(#marker7359)" /> + d="M 766.1,4042 L 621,4042" + style="fill:none;stroke:#000000;stroke-width:2.4186;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker7359);marker-end:url(#marker7359)" /> + d="m 754,4078 l -118.5,-1" + style="fill:none;stroke:#000000;stroke-width:2.4186;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker7359);marker-end:url(#marker7359)" /> + d="m 704.8,4077 c 0,6 -5.6,11 -11.3,11 c -6.4,0 -11.3,-5 -11.3,-11 c 0,-7 4.9,-12 11.3,-12 c 5.7,0 10.5,5 11.3,12" + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;stroke:#00000f;stroke-width:1.1226;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:0.9412;marker:none;enable-background:accumulate" /> + d="m 754.8,4107 l -123,-1" + style="fill:none;stroke:#000000;stroke-width:2.4186;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker7359);marker-end:url(#marker7359)" /> + d="m 704.8,4101 c 0,6 -5.6,11 -11.3,11 c -6.4,0 -11.3,-5 -11.3,-11 c 0,-6 4.9,-11 11.3,-11 c 5.7,0 10.5,5 11.3,11" + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;stroke:#00000f;stroke-width:1.1226;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:0.9412;marker:none;enable-background:accumulate" /> 9 + d="m 572,2488 l 60,5" + style="display:inline;fill:none;stroke:#dba981;stroke-width:1.2004;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:2.4008, 1.2004;stroke-dashoffset:0;stroke-opacity:1" /> + transform="matrix(0.8062,0,0,0.8062,2,-1608)"> @@ -10401,7 +9818,7 @@ inkscape:connector-curvature="0" id="path8471-6-6-72-2-3-9-50-1" d="m 1262,5069 c -12,4 14,-70 29,-64" - style="fill:none;stroke:#000000;stroke-width:2.13249993;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + style="fill:none;stroke:#000000;stroke-width:2.1325;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + transform="matrix(0.8062,0,0,0.8062,-43,-1621)"> + d="m 1923,5278 c 9,-21 73,-20 96,-53 c 11,-19 12,-47 12,-64 c -1,-10 -47,-35 -49,-104 c -1,-44 27,-93 91,-94 c 60,0 94,49 92,93 c -3,66 -46,97 -46,106 c 0,19 4,47 16,62 c 30,33 103,33 112,54" + style="fill:none;stroke:#dba981;stroke-width:3.721;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + transform="matrix(0.8062,0,0,0.8062,-35,-1635)"> @@ -10622,19 +10039,19 @@ inkscape:connector-curvature="0" id="path8471-6-6-72-2-3-9-50-18" d="m 623,5125 c 0,-12 -84,-20 -82,-6" - style="opacity:0.3;fill:none;stroke:#000000;stroke-width:2.13249993;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:6.3974, 2.1325;stroke-dashoffset:0;stroke-opacity:1" /> + style="opacity:0.3;fill:none;stroke:#000000;stroke-width:2.1325;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:6.3974, 2.1325;stroke-dashoffset:0;stroke-opacity:1" /> + style="fill:none;stroke:#dba981;stroke-width:1.489;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:2.978, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 595,5069 c 12,16 18,15 29,19 c 5,5 13,14 16,16 c 8,5 19,10 27,6 c 3,-1 5,-10 5,-10 c -15,-11 -29,-23 -30,-36 c -2,-9 -2,-9 -4,-20 l -15,-24 c -4,-20 4,-43 9,-61 c -20,9 -40,7 -60,0 c -2,19 -4,34 -4,34 c -2,10 -2,20 -5,24 l -9,10 c -4,16 -7,34 -9,52 c -1,12 -2,24 -1,36 c 1,20 8,51 8,56 c 0,11 9,10 15,21 c 5,11 7,14 17,14 c 11,0 17,-3 22,-11 c 0,0 9,-31 12,-46 c 3,-20 4,-58 6,-60" + style="fill:none;stroke:#dba981;stroke-width:3.721;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + style="opacity:0.3;fill:none;stroke:#000000;stroke-width:2.132;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:6.396, 2.132;stroke-dashoffset:0;stroke-opacity:1" /> + style="fill:none;stroke:#dba981;stroke-width:1.489;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:2.978, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> + d="M 433.4,308.4 L 434.8,291 L 425,256.2 c -4,-20 4,-43 9,-61 c -20,9 -40,7 -60,0 c -2,19 -4,34 -4,34 c -2,10 -2,20 -5,24 l -9,10 c -4,16 -7,34 -9,52 c -1,12 -2,24 -1,36 c 1,20 8,51 8,56 c 0,11 9,10 15,21 c 5,11 7,14 17,14 c 11,0 17,-3 22,-11 c 0,0 9.8,-44.4 12.8,-59.4 c 3,-20 4,-58 6,-60" + style="fill:#ffffff;fill-opacity:0;stroke:#dba981;stroke-width:3.721;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + transform="matrix(0.8062,0,0,0.8062,2,-1608)"> @@ -10804,7 +10221,7 @@ sodipodi:cy="50.32" sodipodi:cx="57.75" id="path4050-8-0-9-9-5-9-1-5-2-4-8-7-6" - style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;stroke:#00000f;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.94120029;marker:none;enable-background:accumulate" + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;stroke:#00000f;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.9412;marker:none;enable-background:accumulate" sodipodi:type="arc" /> + transform="matrix(0.8062,0,0,0.8062,51,-1599)"> + style="fill:none;stroke:#dba981;stroke-width:1.489;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:2.978, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 294,5024 c 12,16 18,15 29,19 c 5,5 13,14 16,16 c 8,5 19,10 27,6 c 3,-1 5,-10 5,-10 c -15,-11 -29,-23 -30,-36 c -2,-9 -2,-9 -4,-20 l -15,-24 c -4,-20 4,-43 9,-61 c -20,9 -40,7 -60,0 c -2,19 -4,34 -4,34 c -2,10 -2,20 -5,24 l -9,10 c -4,16 -7,34 -9,52 c -1,12 -2,24 -1,36 c 1,20 8,51 8,56 c 0,11 9,10 15,21 c 5,11 7,14 17,14 c 11,0 17,-3 22,-11 c 0,0 9,-31 12,-46 c 3,-20 4,-58 6,-60" + style="fill:none;stroke:#dba981;stroke-width:3.721;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + d="m 244,5070 l 75,6" + style="fill:none;stroke:#dba981;stroke-width:1.489;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:2.978, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> @@ -10920,19 +10337,19 @@ sodipodi:nodetypes="cc" inkscape:connector-curvature="0" id="path8471-6-6-72-2-3-9-5-6" - d="m 242.9,5071 -6.7,110" + d="m 242.9,5071 l -6.7,110" style="display:inline;fill:none;stroke:#dba981;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:6, 3;stroke-dashoffset:0;stroke-opacity:1" /> + transform="matrix(0.8062,0,0,0.8062,51,-1599)"> @@ -10985,20 +10402,20 @@ sodipodi:nodetypes="cc" inkscape:connector-curvature="0" id="path3833-4-0-8-2-6-1-5-8" - d="m 2376,4933 -155,-1" + d="m 2376,4933 l -155,-1" style="fill:none;stroke:#dba981;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:9, 3;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 2377,4933 l 0,223" + style="fill:none;stroke:#7dc832;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.9412;marker-start:url(#marker7359);marker-end:url(#marker7359)" /> + d="m 2344,5156 l 0,-32" + style="fill:none;stroke:#7dc832;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.9412;marker-start:url(#marker7359);marker-end:url(#marker7359)" /> 5 + transform="matrix(0.8062,0,0,0.8062,51,-1599)"> @@ -11086,22 +10503,22 @@ sodipodi:nodetypes="cc" inkscape:connector-curvature="0" id="path3833-4-0-8-2-6-1-5" - d="m 1522,4933 139,1" + d="m 1522,4933 l 139,1" style="fill:none;stroke:#dba981;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:9, 3;stroke-dashoffset:0;stroke-opacity:1" /> 3 @@ -11213,168 +10630,56 @@ inkscape:connector-curvature="0" id="path3833-4-0-8-2-6-5-3-6-3-4" d="m 1634,5190 c 39,-2 63,-27 87,-33" - style="display:inline;fill:none;stroke:#dba981;stroke-width:1.48899996;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.467, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> + style="display:inline;fill:none;stroke:#dba981;stroke-width:1.489;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.467, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> DHand - - - - - - - - Front - - - - - - - 6 - - + transform="matrix(0.8062,0,0,0.8062,-478.3,2669)"> @@ -11403,23 +10708,23 @@ sodipodi:nodetypes="cc" inkscape:connector-curvature="0" id="path7494-1-6-3-5-81-64-9-1-8-9-2" - d="m 931.8,1967 0,-45" + d="m 931.8,1967 l 0,-45" style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker7359);marker-end:url(#marker7359)" /> + transform="matrix(0.8062,0,0,0.8062,-443.9,2631)"> @@ -11531,23 +10836,23 @@ sodipodi:nodetypes="cc" inkscape:connector-curvature="0" id="path7494-1-6-3-5-81-64-9-1-8-9-2-1" - d="m 1174,1849 0,-45" + d="m 1174,1849 l 0,-45" style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker7359);marker-end:url(#marker7359)" /> + d="m 1170,1950 c 5,-2 10,-3 16,-10 c 3,3 5,7 12,9" + style="fill:none;stroke:#dba981;stroke-width:3.721;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + transform="matrix(0.8062,0,0,0.8062,-646.7,2632)"> + style="fill:none;stroke:#dba981;stroke-width:3.721;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + style="fill:none;stroke:#dba981;stroke-width:3.721;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> @@ -11650,8 +10955,8 @@ sodipodi:nodetypes="cc" inkscape:connector-curvature="0" id="path8471-6-6-7-8-46-2-8-0-1-88-2-7-10-5-6" - d="m 1869,1825 107,0" - style="fill:none;stroke:#aaaaaa;stroke-width:3.00049996;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:6.001, 3.0005, 1.5002, 3.0005;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 1869,1825 l 107,0" + style="fill:none;stroke:#aaaaaa;stroke-width:3.0005;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:6.001, 3.0005, 1.5002, 3.0005;stroke-dashoffset:0;stroke-opacity:1" /> + style="fill:none;stroke:#000000;stroke-width:0.8943px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend)" /> + d="m 1976,1824 l 0,31" + style="fill:none;stroke:#000000;stroke-width:2.6824;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker7359);marker-end:url(#marker7359)" /> + style="fill:none;stroke:#000000;stroke-width:2.6829;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + style="fill:none;stroke:#dba981;stroke-width:1.489;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.467, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 1756,1956 l 220,1" + style="fill:none;stroke:#dba981;stroke-width:1.489;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.467, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 1762,1975 l 206,-1" + style="fill:none;stroke:#dba981;stroke-width:1.489;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.467, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> angle @@ -11843,7 +11148,7 @@ id="text6934-3-2" y="1775.4612" x="1838.6133" - style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:21.69000053px;line-height:125%;font-family:'Standard Symbols L';-inkscape-font-specification:'Standard Symbols L';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:21.69px;line-height:125%;font-family:'Standard Symbols L';-inkscape-font-specification:'Standard Symbols L';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" xml:space="preserve"> + transform="matrix(0.8062,0,0,0.8062,114.7,2309)"> @@ -11864,16 +11169,16 @@ inkscape:connector-curvature="0" id="path8584-0-8-6-3-4-9-7-3" d="m 1396,2358 c -18,-31 -10,-56 0,-100" - style="fill:none;stroke:#dba981;stroke-width:3.72099996;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + style="fill:none;stroke:#dba981;stroke-width:3.721;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + style="fill:none;stroke:#dba981;stroke-width:3.721;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> @@ -11888,14 +11193,14 @@ sodipodi:cy="50.32" sodipodi:cx="57.75" id="path4050-8-0-5-3-4-0-4-2-0-9-5-0-1" - style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;stroke:#00000f;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.94120029;marker:none;enable-background:accumulate" + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;stroke:#00000f;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.9412;marker:none;enable-background:accumulate" sodipodi:type="arc" /> + style="fill:none;stroke:#000000;stroke-width:0.8943px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend)" /> + style="fill:none;stroke:#000000;stroke-width:2.6829;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + style="fill:none;stroke:#dba981;stroke-width:1.489;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.467, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 1176,2357 l 220,1" + style="fill:none;stroke:#dba981;stroke-width:1.489;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.467, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 1182,2376 l 206,-1" + style="fill:none;stroke:#dba981;stroke-width:1.489;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.467, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> @@ -11960,7 +11265,7 @@ id="text6934-3-2-9" y="2176.5613" x="1258.5133" - style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:21.69000053px;line-height:125%;font-family:'Standard Symbols L';-inkscape-font-specification:'Standard Symbols L';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:21.69px;line-height:125%;font-family:'Standard Symbols L';-inkscape-font-specification:'Standard Symbols L';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" xml:space="preserve"> + transform="matrix(0.8062,0,0,0.8062,36.37,2236)"> @@ -12037,23 +11342,23 @@ sodipodi:nodetypes="csc" inkscape:connector-curvature="0" id="path2993-6-7-5" - d="m 658.5,1911 c 2.2,4 -6.8,51 -15.9,75 -4.5,13 -6.8,35 -5.6,48" - style="fill:none;stroke:#dba981;stroke-width:1.48899996;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.467, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 658.5,1911 c 2.2,4 -6.8,51 -15.9,75 c -4.5,13 -6.8,35 -5.6,48" + style="fill:none;stroke:#dba981;stroke-width:1.489;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.467, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 675.5,1819 c -17,4 -21.6,10 -27.2,20 c -10.2,18 -20.4,45 -7.9,62 c 6.7,9 27.1,15 33.9,6" + style="fill:none;stroke:#dba981;stroke-width:3.721;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + d="m 548.6,1780 c 0,0 12.4,6 19.2,6 c 37.4,2 46.5,-10 46.5,-10" + style="fill:none;stroke:#dba981;stroke-width:3.721;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> @@ -12061,16 +11366,16 @@ sodipodi:nodetypes="cccscccccccacacccc" inkscape:connector-curvature="0" id="path15557" - d="m 512.3,2032 c 2.3,-15 -1.1,-33 -2.2,-48 0,-7 2.2,-12 0,-22 -10.2,-9 -19.3,-30 -19.3,-45 0,-13 9.1,-22 12.5,-37 2.2,-7 -6.8,-17 -9.1,-29 -3.4,-11 0,-24 5.7,-26 11.3,-2 29.4,-10 39.6,-18 9.1,-9 7.9,-27 7.9,-27 0,0 1.2,-6 19.3,-8 17,-1 48.7,4 48.7,4 0,0 -1.1,12 2.3,17 12.5,15 43,18 54.4,23 17,7 15.8,14 18.1,23 4.5,24 -9.1,51 -17,70 -6.8,15 -6.8,33 -11.3,49 -3.4,10 -6.8,19 -10.2,29 -2.3,9 -5.7,32 -4.6,42" - style="fill:none;stroke:#dba981;stroke-width:3.72099996;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + d="m 512.3,2032 c 2.3,-15 -1.1,-33 -2.2,-48 c 0,-7 2.2,-12 0,-22 c -10.2,-9 -19.3,-30 -19.3,-45 c 0,-13 9.1,-22 12.5,-37 c 2.2,-7 -6.8,-17 -9.1,-29 c -3.4,-11 0,-24 5.7,-26 c 11.3,-2 29.4,-10 39.6,-18 c 9.1,-9 7.9,-27 7.9,-27 c 0,0 1.2,-6 19.3,-8 c 17,-1 48.7,4 48.7,4 c 0,0 -1.1,12 2.3,17 c 12.5,15 43,18 54.4,23 c 17,7 15.8,14 18.1,23 c 4.5,24 -9.1,51 -17,70 c -6.8,15 -6.8,33 -11.3,49 c -3.4,10 -6.8,19 -10.2,29 c -2.3,9 -5.7,32 -4.6,42" + style="fill:none;stroke:#dba981;stroke-width:3.721;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + d="m 513.5,1991 l 6.8,-1 c 26,-4 50.9,-1 78.1,1 l 40.8,4" + style="fill:none;stroke:#dba981;stroke-width:1.489;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.467, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 579.2,1856 c 0,9 -8,16 -15.9,16 c -9.1,0 -15.9,-7 -15.9,-16 c 0,-9 6.8,-16 15.9,-16 c 7.9,0 14.7,7 15.9,16" + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;stroke:#00000f;stroke-width:1.5776;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:0.9412;marker:none;enable-background:accumulate" /> + transform="matrix(0.8062,0,0,0.8062,-6.285,2225)"> @@ -12109,47 +11414,47 @@ sodipodi:nodetypes="ccccc" inkscape:connector-curvature="0" id="path3874-7-8-0-3-9" - d="m 285.9,1948 6.8,-1 29.4,-1 48.8,2 52.1,6" - style="fill:none;stroke:#dba981;stroke-width:1.48899996;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.467, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 285.9,1948 l 6.8,-1 l 29.4,-1 l 48.8,2 l 52.1,6" + style="fill:none;stroke:#dba981;stroke-width:1.489;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.467, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 271.2,1883 c 0,0 10.2,-7 15.8,-10 c 6.8,-2 14.8,-3 21.5,-3 c 22.7,-1 45.4,-2 66.9,3 c 20.4,5 45.3,25 58.9,26" + style="fill:none;stroke:#dba981;stroke-width:1.489;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.467, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> + style="fill:none;stroke:#dba981;stroke-width:1.489;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.467, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> + style="fill:none;stroke:#dba981;stroke-width:1.489;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.467, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 267.8,1904 c 0,0 17,-2 24.9,-3 c 23.8,-2 46.4,-3 70.2,0 c 23.8,2 51,9 69.1,13" + style="fill:none;stroke:#dba981;stroke-width:1.489;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.467, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> @@ -12157,17 +11462,17 @@ sodipodi:nodetypes="cac" inkscape:connector-curvature="0" id="path3992-4-9-6-1-0-0-1-02" - d="m 382.2,1767 c 3.4,11 1.1,10 4.5,14 11.4,13 35.1,19 49.9,22" - style="fill:none;stroke:#dba981;stroke-width:1.48899996;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.467, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 382.2,1767 c 3.4,11 1.1,10 4.5,14 c 11.4,13 35.1,19 49.9,22" + style="fill:none;stroke:#dba981;stroke-width:1.489;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.467, 1.489;stroke-dashoffset:0;stroke-opacity:1" /> @@ -12175,17 +11480,17 @@ sodipodi:nodetypes="ccc" inkscape:connector-curvature="0" id="path7494-1-6-3-5-81-64-9-2-0-5-7-3-2-4-0-9-7-9-10-7" - d="m 326.7,2022 c -4.6,-44 -15.9,-104 -15.9,-119 -2.3,-18 21.5,-58 35.1,-100" - style="fill:none;stroke:#000000;stroke-width:3.39899993;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker7359);marker-end:url(#marker7359)" /> + d="m 326.7,2022 c -4.6,-44 -15.9,-104 -15.9,-119 c -2.3,-18 21.5,-58 35.1,-100" + style="fill:none;stroke:#000000;stroke-width:3.399;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker7359);marker-end:url(#marker7359)" /> + transform="translate(107.3,702.3)"> + d="m 681.3,3089 l 14.7,14" + style="fill:none;stroke:#dba981;stroke-width:0.8275;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + d="m 696,3089 l -14.7,14" + style="fill:none;stroke:#dba981;stroke-width:0.8275;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + d="m 595.1,3140 l 114.6,0" + style="display:inline;fill:none;stroke:#dba981;stroke-width:1.2004;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.6013, 1.2004;stroke-dashoffset:0;stroke-opacity:1" /> @@ -12228,40 +11533,40 @@ inkscape:connector-curvature="0" id="path8584-1-4-6-3-4-4-4-4-7-8" d="m 723.4,3083 c -4.8,-2 -29,6 -3.2,-65" - style="fill:none;stroke:#dba981;stroke-width:2.9999001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + style="fill:none;stroke:#dba981;stroke-width:2.9999;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + style="fill:none;stroke:#dba981;stroke-width:2.9999;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + style="fill:none;stroke:#dba981;stroke-width:1.2004;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.6013, 1.2004;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 582.4,3086 c 15.3,0 16.7,-21 70.7,-21 c 54.6,0 50.2,22 69.5,22" + style="fill:none;stroke:#dba981;stroke-width:1.2004;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.6013, 1.2004;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 588.6,3097 l 130,0" + style="fill:none;stroke:#dba981;stroke-width:1.2004;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.6013, 1.2004;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 601.5,3175 l 101.8,0" + style="fill:none;stroke:#dba981;stroke-width:1.2004;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.6013, 1.2004;stroke-dashoffset:0;stroke-opacity:1" /> @@ -12269,14 +11574,14 @@ inkscape:connector-curvature="0" id="path4864-7" d="m 678.9,3003 c 7.5,57 12.3,115 16.3,173" - style="fill:none;stroke:#000000;stroke-width:2.41860008;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + style="fill:none;stroke:#000000;stroke-width:2.4186;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" sodipodi:nodetypes="cc" /> 6 + transform="translate(-83.55,267)"> @@ -12410,17 +11715,17 @@ sodipodi:nodetypes="cc" inkscape:connector-curvature="0" id="path3992-4-77-9-5-7-1-2-9-8-5-4-1-4-8-7-8-4" - d="m 988.7,3578 114.3,0" - style="display:inline;fill:none;stroke:#dba981;stroke-width:1.20039999;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.6013, 1.2004;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 988.7,3578 l 114.3,0" + style="display:inline;fill:none;stroke:#dba981;stroke-width:1.2004;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.6013, 1.2004;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 995.7,3611 l 102.3,1" + style="fill:none;stroke:#dba981;stroke-width:1.2004;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.6013, 1.2004;stroke-dashoffset:0;stroke-opacity:1" /> @@ -12431,8 +11736,8 @@ sodipodi:nodetypes="cc" inkscape:connector-curvature="0" id="path7494-1-6-3-5-81-64-9-2-0-5-7-3-2-4-0-9-7-9-3-2" - d="m 1449,3176 6,-35" - style="display:inline;fill:none;stroke:#000000;stroke-width:2.41860008;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker7359);marker-end:url(#marker7359)" /> + d="m 1449,3176 l 6,-35" + style="display:inline;fill:none;stroke:#000000;stroke-width:2.4186;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker7359);marker-end:url(#marker7359)" /> + style="fill:none;stroke:#dba981;stroke-width:2.9999;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + style="fill:none;stroke:#dba981;stroke-width:2.9999;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + style="fill:none;stroke:#dba981;stroke-width:1.2004;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.6013, 1.2004;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 978.7,3524 c 15,0 15,-23 69.3,-23 c 54,0 50,22 69,22" + style="fill:none;stroke:#dba981;stroke-width:1.2004;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.6013, 1.2004;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 982.7,3533 l 130.3,0" + style="fill:none;stroke:#dba981;stroke-width:1.2004;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.6013, 1.2004;stroke-dashoffset:0;stroke-opacity:1" /> 9 11 + transform="translate(-224.3,702.6)"> @@ -12676,40 +11981,40 @@ inkscape:connector-curvature="0" id="path8584-1-4-6-3-4-4-4-4-7-8-0" d="m 1477,3083 c -4,-2 -29,5 -3,-65" - style="fill:none;stroke:#dba981;stroke-width:2.9999001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + style="fill:none;stroke:#dba981;stroke-width:2.9999;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + style="fill:none;stroke:#dba981;stroke-width:2.9999;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + style="fill:none;stroke:#dba981;stroke-width:1.2004;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.6013, 1.2004;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 1338,3087 c 15,0 15,-20 69,-22 c 57,-1 49,21 69,21" + style="fill:none;stroke:#dba981;stroke-width:1.2004;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.6013, 1.2004;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 1343,3097 l 129,0" + style="fill:none;stroke:#dba981;stroke-width:1.2004;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.6013, 1.2004;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 1355,3175 l 103,0" + style="fill:none;stroke:#dba981;stroke-width:1.2004;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.6013, 1.2004;stroke-dashoffset:0;stroke-opacity:1" /> @@ -12718,7 +12023,7 @@ id="text6934-2-9-4-0-5-3-2" y="2971.208" x="1387.5156" - style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:14.51119995px;line-height:125%;font-family:'Standard Symbols L';-inkscape-font-specification:'Standard Symbols L';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:14.5112px;line-height:125%;font-family:'Standard Symbols L';-inkscape-font-specification:'Standard Symbols L';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" xml:space="preserve"> + d="m 1380,3003 l 0,94" + style="fill:none;stroke:#000000;stroke-width:2.4188;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker7359);marker-end:url(#marker7359)" /> 16 13 @@ -12835,7 +12140,7 @@ transform="matrix(0.8062,0,0,0.8062,1105,790.3)" /> + d="m 1349,3139 l 115,0" + style="display:inline;fill:none;stroke:#dba981;stroke-width:1.2004;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.6013, 1.2004;stroke-dashoffset:0;stroke-opacity:1" /> + transform="translate(619.1,702.7)"> @@ -12888,35 +12193,35 @@ sodipodi:nodetypes="cc" inkscape:connector-curvature="0" id="path8471-6-6-6-8-7-8-3-3-9-3-9-1-3-3-4-6-5" - d="m 775.9,3117 128.2,0" - style="fill:none;stroke:#dba981;stroke-width:1.20039999;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.6013, 1.2004;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 775.9,3117 l 128.2,0" + style="fill:none;stroke:#dba981;stroke-width:1.2004;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.6013, 1.2004;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 769.5,3085 l 142.7,0" + style="fill:none;stroke:#dba981;stroke-width:1.2004;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.6013, 1.2004;stroke-dashoffset:0;stroke-opacity:1" /> @@ -12924,11 +12229,11 @@ sodipodi:nodetypes="cc" inkscape:connector-curvature="0" id="path8471-6-6-6-8-7-8-3-3-9-1-2-5-4-2-0" - d="m 788.8,3175 104.8,0" - style="fill:none;stroke:#dba981;stroke-width:1.20039999;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.6013, 1.2004;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 788.8,3175 l 104.8,0" + style="fill:none;stroke:#dba981;stroke-width:1.2004;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.6013, 1.2004;stroke-dashoffset:0;stroke-opacity:1" /> Back @@ -12947,34 +12252,34 @@ sodipodi:nodetypes="cc" inkscape:connector-curvature="0" id="path7494-1-6-3-5-81-64-9-2-0-5-7-3-2-4-0-9-7" - d="M 882.3,3174 868.6,3003" - style="fill:none;stroke:#000000;stroke-width:2.41860008;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker7359);marker-end:url(#marker7359)" /> + d="M 882.3,3174 L 868.6,3003" + style="fill:none;stroke:#000000;stroke-width:2.4186;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker7359);marker-end:url(#marker7359)" /> + d="m 797.7,3139 c 0,7 -5.7,11 -11.3,11 c -6.5,0 -11.3,-4 -11.3,-11 c 0,-6 4.8,-11 11.3,-11 c 5.6,0 10.5,5 11.3,11" + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;stroke:#00000f;stroke-width:1.1226;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:0.9412;marker:none;enable-background:accumulate" /> + d="m 824.3,3139 c 0,7 -5.7,11 -11.3,11 c -6.5,0 -11.3,-4 -11.3,-11 c 0,-6 4.8,-11 11.3,-11 c 5.6,0 10.5,5 11.3,11" + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;stroke:#00000f;stroke-width:1.1226;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:0.9412;marker:none;enable-background:accumulate" /> + d="m 852.5,3139 c 0,7 -5.6,11 -11.3,11 c -6.4,0 -11.3,-4 -11.3,-11 c 0,-6 4.9,-11 11.3,-11 c 5.7,0 10.5,5 11.3,11" + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;stroke:#00000f;stroke-width:1.1226;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:0.9412;marker:none;enable-background:accumulate" /> + transform="translate(440.3,267.1)"> @@ -13051,35 +12356,35 @@ sodipodi:nodetypes="cc" inkscape:connector-curvature="0" id="path8471-6-6-6-8-7-8-3-3-9-3-9-1-3-3-4-6-5-0-7" - d="m 1166,3553 133,0" - style="fill:none;stroke:#dba981;stroke-width:1.20039999;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.6013, 1.2004;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 1166,3553 l 133,0" + style="fill:none;stroke:#dba981;stroke-width:1.2004;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.6013, 1.2004;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 1162,3522 l 142,0" + style="fill:none;stroke:#dba981;stroke-width:1.2004;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.6013, 1.2004;stroke-dashoffset:0;stroke-opacity:1" /> @@ -13087,11 +12392,11 @@ sodipodi:nodetypes="cc" inkscape:connector-curvature="0" id="path8471-6-6-6-8-7-8-3-3-9-1-2-5-4-2-0-8-1" - d="m 1181,3612 105,0" - style="fill:none;stroke:#dba981;stroke-width:1.20039999;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.6013, 1.2004;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 1181,3612 l 105,0" + style="fill:none;stroke:#dba981;stroke-width:1.2004;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.6013, 1.2004;stroke-dashoffset:0;stroke-opacity:1" /> Back @@ -13110,31 +12415,31 @@ sodipodi:nodetypes="cc" inkscape:connector-curvature="0" id="path7494-1-6-3-5-81-64-9-2-0-5-7-3-2-4-0-9-7-9-3" - d="m 1265,3613 0,-60" - style="fill:none;stroke:#000000;stroke-width:2.41860008;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker7359);marker-end:url(#marker7359)" /> + d="m 1265,3613 l 0,-60" + style="fill:none;stroke:#000000;stroke-width:2.4186;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker7359);marker-end:url(#marker7359)" /> + d="m 1252,3504 c 0,7 -5,12 -11,12 c -6,0 -11,-5 -11,-12 c 0,-6 5,-11 11,-11 c 6,0 11,5 11,11" + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;stroke:#00000f;stroke-width:1.1226;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:0.9412;marker:none;enable-background:accumulate" /> + d="m 1224,3612 l 0,-90" + style="display:inline;fill:none;stroke:#7dc832;stroke-width:3.2248;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker7359);marker-end:url(#marker7359)" /> @@ -13170,7 +12475,7 @@ id="text8512-9-6-3-7-2-5-4-8-3-9" y="3571.2363" x="1233.0699" - style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:14.51159954px;line-height:125%;font-family:'Standard Symbols L';-inkscape-font-specification:'Standard Symbols L';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#000000;fill-opacity:1;stroke:none" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:14.5116px;line-height:125%;font-family:'Standard Symbols L';-inkscape-font-specification:'Standard Symbols L';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#000000;fill-opacity:1;stroke:none" xml:space="preserve"> + transform="translate(304.6,701.7)"> @@ -13268,11 +12573,11 @@ sodipodi:nodetypes="cc" inkscape:connector-curvature="0" id="path8471-6-6-6-8-7-8-3-3-9-3-9-1-0-2-9-3-0-4" - d="m 1516,3086 143,0" - style="fill:none;stroke:#dba981;stroke-width:1.20039999;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.6013, 1.2004;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 1516,3086 l 143,0" + style="fill:none;stroke:#dba981;stroke-width:1.2004;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.6013, 1.2004;stroke-dashoffset:0;stroke-opacity:1" /> @@ -13280,29 +12585,29 @@ sodipodi:nodetypes="cc" inkscape:connector-curvature="0" id="path8471-6-6-6-8-7-8-3-3-9-3-9-1-3-3-4-6-5-0" - d="m 1522,3118 129,0" - style="fill:none;stroke:#dba981;stroke-width:1.20039999;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.6013, 1.2004;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 1522,3118 l 129,0" + style="fill:none;stroke:#dba981;stroke-width:1.2004;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.6013, 1.2004;stroke-dashoffset:0;stroke-opacity:1" /> @@ -13310,11 +12615,11 @@ sodipodi:nodetypes="cc" inkscape:connector-curvature="0" id="path8471-6-6-6-8-7-8-3-3-9-1-2-5-4-2-0-8" - d="m 1535,3177 105,0" - style="fill:none;stroke:#dba981;stroke-width:1.20039999;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.6013, 1.2004;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 1535,3177 l 105,0" + style="fill:none;stroke:#dba981;stroke-width:1.2004;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.6013, 1.2004;stroke-dashoffset:0;stroke-opacity:1" /> Back + d="m 1644,3048 c 0,6 -5,11 -11,11 c -6,0 -11,-5 -11,-11 c 0,-7 5,-12 11,-12 c 6,0 11,5 11,12" + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;stroke:#00000f;stroke-width:1.1226;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:0.9412;marker:none;enable-background:accumulate" /> + d="m 1618,3085 l 0,-80" + style="fill:none;stroke:#000000;stroke-width:2.4188;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker7359);marker-end:url(#marker7359)" /> @@ -13372,7 +12677,7 @@ transform="matrix(0.8062,0,0,0.8062,1290,788.1)" /> 28 @@ -13405,21 +12710,21 @@ id="text8512-9-6-3-7-2-5-4-8-9-7" y="3074.1987" x="1551.6572" - style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:14.51159954px;line-height:125%;font-family:'Standard Symbols L';-inkscape-font-specification:'Standard Symbols L';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:14.5116px;line-height:125%;font-family:'Standard Symbols L';-inkscape-font-specification:'Standard Symbols L';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" xml:space="preserve">27 @@ -13428,7 +12733,7 @@ inkscape:connector-curvature="0" id="path7494-1-6-3-5-81-64-9-2-0-5-7-3-2-4-0-9-7-74-7-7-3" d="m 1527,3085 c 0,-26 4,-42 -12,-66" - style="fill:none;stroke:#000000;stroke-width:2.41880012;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker7359);marker-end:url(#marker7359)" /> + style="fill:none;stroke:#000000;stroke-width:2.4188;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker7359);marker-end:url(#marker7359)" /> + transform="translate(103.9,368.2)"> @@ -13473,35 +12778,35 @@ sodipodi:nodetypes="cc" inkscape:connector-curvature="0" id="path8471-6-6-6-8-7-8-3-3-9-3-9-1-3-3-4-6-5-0-7-9" - d="m 1320,3820 133,0" - style="fill:none;stroke:#dba981;stroke-width:1.20039999;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.6013, 1.2004;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 1320,3820 l 133,0" + style="fill:none;stroke:#dba981;stroke-width:1.2004;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.6013, 1.2004;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 1316,3789 l 142,0" + style="fill:none;stroke:#dba981;stroke-width:1.2004;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.6013, 1.2004;stroke-dashoffset:0;stroke-opacity:1" /> @@ -13509,11 +12814,11 @@ sodipodi:nodetypes="cc" inkscape:connector-curvature="0" id="path8471-6-6-6-8-7-8-3-3-9-1-2-5-4-2-0-8-1-2" - d="m 1335,3879 105,0" - style="fill:none;stroke:#dba981;stroke-width:1.20039999;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.6013, 1.2004;stroke-dashoffset:0;stroke-opacity:1" /> + d="m 1335,3879 l 105,0" + style="fill:none;stroke:#dba981;stroke-width:1.2004;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.6013, 1.2004;stroke-dashoffset:0;stroke-opacity:1" /> Back @@ -13558,7 +12863,7 @@ id="text8512-9-6-3-7-2-5-4-7-0-8-4" y="3806.7283" x="1381.1267" - style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:14.51159954px;line-height:125%;font-family:'Standard Symbols L';-inkscape-font-specification:'Standard Symbols L';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:14.5116px;line-height:125%;font-family:'Standard Symbols L';-inkscape-font-specification:'Standard Symbols L';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" xml:space="preserve"> + d="m 1325,3756 l 123,0" + style="display:inline;fill:none;stroke:#dba981;stroke-width:1.2004;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.6013, 1.2004;stroke-dashoffset:0;stroke-opacity:1" /> + transform="translate(16.54,613.4)"> + d="m 1671,5834 l 103,0" + style="fill:none;stroke:#dba981;stroke-width:1.6124;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.8372, 1.6124;stroke-dashoffset:0;stroke-opacity:1" /> @@ -13626,22 +12931,22 @@ sodipodi:nodetypes="cc" inkscape:connector-curvature="0" id="path10369" - d="m 1823,5961 0,-128" - style="fill:none;stroke:#7dc832;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.94120029" /> + d="m 1823,5961 l 0,-128" + style="fill:none;stroke:#7dc832;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.9412" /> + transform="translate(79.05,495.9)"> @@ -13689,10 +12994,10 @@ inkscape:connector-curvature="0" id="path5925-1-0-54-7-6-9" d="m 1845,5415 c -5,4 -19,2 -19,0" - style="fill:none;stroke:#dba981;stroke-width:1.20039999;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.6013, 1.2004;stroke-dashoffset:0;stroke-opacity:1" /> + style="fill:none;stroke:#dba981;stroke-width:1.2004;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.6013, 1.2004;stroke-dashoffset:0;stroke-opacity:1" /> @@ -13707,11 +13012,11 @@ sodipodi:cy="50.32" sodipodi:cx="57.75" id="path4050-8-0-9-9-5-9-1-2-36-3-2-3-3" - style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;stroke:#00000f;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.94120029;marker:none;enable-background:accumulate" + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;stroke:#00000f;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.9412;marker:none;enable-background:accumulate" sodipodi:type="arc" /> + transform="translate(-1538,-464.2)"> @@ -13766,8 +13071,8 @@ sodipodi:nodetypes="cacccccccsscccscccccscccc" inkscape:connector-curvature="0" id="path2997-1-2-9-0-8-5-3" - d="m 2066,1193 c -2,13 -9,25 -14,37 -9,27 -30,52 -29,81 0,21 24,62 24,62 0,0 -3,64 -4,97 -1,20 -1,41 -3,61 -1,6 -2,10 -2,14 -5,18 -14,35 -15,54 -3,42 15,84 16,126 1,8 -1,16 -1,24 0,7 -3,15 1,19 3,5 9,6 14,8 5,2 10,2 16,4 11,3 22,10 35,11 17,3 46,0 52,-4 5,-3 0,-9 -2,-12 -4,-5 -13,-7 -17,-9 -12,-6 -24,-15 -35,-21 -8,-5 -16,-7 -21,-14 0,-4 -1,-14 1,-25 3,-25 5,-46 7,-86 1,-20 1,-40 6,-59 1,-9 6,-18 9,-26 7,-17 14,-34 18,-52 12,-38 28,-89 26,-129" - style="fill:none;stroke:#dba981;stroke-width:4.09130001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + d="m 2066,1193 c -2,13 -9,25 -14,37 c -9,27 -30,52 -29,81 c 0,21 24,62 24,62 c 0,0 -3,64 -4,97 c -1,20 -1,41 -3,61 c -1,6 -2,10 -2,14 c -5,18 -14,35 -15,54 c -3,42 15,84 16,126 c 1,8 -1,16 -1,24 c 0,7 -3,15 1,19 c 3,5 9,6 14,8 c 5,2 10,2 16,4 c 11,3 22,10 35,11 c 17,3 46,0 52,-4 c 5,-3 0,-9 -2,-12 c -4,-5 -13,-7 -17,-9 c -12,-6 -24,-15 -35,-21 c -8,-5 -16,-7 -21,-14 c 0,-4 -1,-14 1,-25 c 3,-25 5,-46 7,-86 c 1,-20 1,-40 6,-59 c 1,-9 6,-18 9,-26 c 7,-17 14,-34 18,-52 c 12,-38 28,-89 26,-129" + style="fill:none;stroke:#dba981;stroke-width:4.0913;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> A01 - Height: Total (height)A02 - Height: Neck Back (height_neck_back)A03 - Height: Scapula (height_scapula)A04 - Height: Armpit (height_armpit)A05 - Height: Waist Side (height_waist_side)A06 - Height: Hip (height_hip)A07 - Height: Gluteal Fold (height_gluteal_fold)A08 - Height: Knee (height_knee)A09 - Height: Calf (height_calf)A10 - Height: Ankle High (height_ankle_high)A11 - Height: Ankle (height_ankle)A12 - Height: Highhip (height_highhip)A13 - Height: Waist Front (height_waist_front)A14 - Height: Bustpoint (height_bustpoint)A15 - Height: Shoulder Tip (height_shoulder_tip)A16 - Height: Neck Front (height_neck_front)A17 - Height: Neck Side (height_neck_side)A18 - Height: Neck Back to Knee (height_neck_back_to_knee)A19 - Height: Waist Side to Knee (height_waist_side_to_knee)A20 - Height: Waist Side to Hip (height_waist_side_to_hip)A21 - Height: Knee to Ankle (height_knee_to_ankle)A22 - Height: Neck Back to Waist Side (height_neck_back_to_waist_side)A23 - Height: Waist Back (height_waist_back)B01 - Width: Shoulder (width_shoulder)B02 - Width: Bust (width_bust)B03 - Width: Waist (width_waist)B04 - Width: Hip (width_hip)B05 - Width: Abdomen to Hip (width_abdomen_to_hip)C01 - Indent: Neck Back (indent_neck_back)C02 - Indent: Waist Back (indent_waist_back)C03 - Indent: Ankle High (indent_ankle_high) head_chin_to_neck_back) hip_circ_with_abdomen) H05 - Neck Side to Waist level front (neck_side_to_waist_f)H42 - Across Back to Waist back (across_back_to_waist_b) + id="tspan6269">across_back_to_waist_b) arm_neck_side_to_outer_elbow) M01 - Leg: Crotch to floor (leg_crotch_to_floor)M02 - Leg: Waist Side to floor (leg_waist_side_to_floor)M03 - Leg: Thigh Upper circumference (leg_thigh_upper_circ)M04 - Leg: Thigh Middle circumference (leg_thigh_mid_circ)M05 - Leg: Knee circumference (leg_knee_circ)M06 - Leg: Knee Small circumference (leg_knee_small_circ)M07 - Leg: Calf circumference (leg_calf_circ)M08 - Leg: Ankle High circumference (leg_ankle_high_circ)M09 - Leg: Ankle circumference (leg_ankle_circ)M10 - Leg: Knee circumference bent (leg_knee_circ_bent)M11 - Leg: Ankle diagonal circumference (leg_ankle_diag_circ)M12 - Leg: Crotch to Ankle (leg_crotch_to_ankle)M13 - Leg: Waist Side to Ankle (leg_waist_side_to_ankle)M14 - Leg: Waist Side to Knee (leg_waist_side_to_knee)N01 - Crotch length (crotch_length)N02 - Crotch length back (crotch_length_b)N03 - Crotch length front (crotch_length_f)N04 - Rise length side sitting (rise_length_side_sitting)N05 - Rise length diagonal (rise_length_diag)N06 - Rise length back (rise_length_b)N07 - Rise length front (rise_length_f)N08 - Rise length side (rise_length_side) O01 - Neck Back to Waist Front (neck_back_to_waist_front)O02 - Waist to Waist Halter around Neck Back (waist_to_waist_halter)O03 - Natural Waist circumference (waist_natural_circ)O04 - Natural Waist arc front (waist_natural_arc_f)O05 - Natural Waist arc back (waist_natural_arc_b)O06 - Waist Front to Natural Waist Front (waist_to_natural_waist_f)O07 - Waist Back to Natural Waist Back (waist_to_natural_waist_b)O08 - Arm: Neck Back to Elbow high bend (arm_neck_back_to_elbow_bent)O09 - Arm: Neck Back to Wrist high bend (arm_neck_back_to_wrist_bent)O10 - Arm: Neck Side to Elbow high bend (arm_neck_side_to_elbow_bent)O11 - Arm: Neck Side to Wrist high bend (arm_neck_side_to_wrist_bent)O12 - Arm: Across Back Center to Elbow high bend (arm_across_back_center_to_elbow_bent)O13 - Arm: Across Back Center to Wrist high bend (arm_across_back_center_to_wrist_bent)O14 - Arm: Armscye Back Center to Wrist high bend (arm_armscye_back_center_to_wrist_bent) I01 - Shoulder length (shoulder_length)I02 - Shoulder Tip to Shoulder Tip front (shoulder_tip_to_shoulder_tip_f)I03 - Across Chest (across_chest_f)I04 - Armfold to Armfold front (armfold_to_armfold_f)I05 - Shoulder Tip to Shoulder Tip front half (shoulder_tip_to_shoulder_tip_half_f)I06 - Across Chest half (across_chest_half_f)I07 - Shoulder Tip to Shoulder Tip back (shoulder_tip_to_shoulder_tip_b)I08 - Across Back (across_back_b)I09 - Armfold to Armfold back (armfold_to_armfold_b)I10 - Shoulder Tip to Shoulder Tip back half (shoulder_tip_to_shoulder_tip_half_b)I11 - Across Back half (across_back_half_b)I12 - Neck Front to Shoulder Tip (neck_front_to_shoulder_tip_f)I13 - Neck Back to Shoulder Tip (neck_back_to_shoulder_tip_b)I14 - Neck Width (neck_width) J01 - Bustpoint to Bustpoint (bustpoint_to_bustpoint)J02 - Bustpoint to Neck Side (bustpoint_to_neck_side)J03 - Bustpoint to Lowbust (bustpoint_to_lowbust)J04 - Bustpoint to Waist level (bustpoint_to_waist)J05 - Bustpoint to Bustpoint half (bustpoint_to_bustpoint_half)J06 - Bustpoint Neck Side to Waist level (bustpoint_neck_side_to_waist)J07 - Bustpoint to Shoulder Tip (bustpoint_to_shoulder_tip)J08 - Bustpoint to Waist Front (bustpoint_to_waist_front)J09 - Bustpoint to Bustpoint Halter (bustpoint_to_bustpoint_halter) + style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:169%;font-family:Sans;-inkscape-font-specification:'Sans Italic'" + id="tspan6362">bustpoint_to_bustpoint_halter)J10 - Bustpoint to Shoulder center (bustpoint_to_shoulder_center) K01 - Shoulder Tip to Waist Front (shoulder_tip_to_waist_front) K02 - Neck Front to Waist Side (neck_front_to_waist_side) K03 - Neck Side to Waist Side front (neck_side_to_waist_side_f) K04 - Shoulder Tip to Waist Back (shoulder_tip_to_waist_back) K05 - Shoulder Tip to Waist Back with 1in (2.54cm) offset (shoulder_tip_to_waist_b_1in_offset)K06 - Neck Back to Waist Side (neck_back_to_waist_side)K07 - Neck Side to Waist Side back (neck_side_to_waist_side_b)K08 - Neck Side to Armfold Front (neck_side_to_armfold_f)K09 - Neck Side to Highbust Side front (neck_side_to_armpit_f)K10 - Neck Side to Bust Side front (neck_side_to_bust_side_f)K11 - Neck Side to Armfold Back (neck_side_to_armfold_b)K12 - Neck Side to Highbust Side back (neck_side_to_armpit_b)K13 - Neck Side to Bust Side back (neck_side_to_bust_side_b) P01 - Neck Back to Bust Front (neck_back_to_bust_front)P02 - Neck Back to Armfold Front (neck_back_to_armfold_front)P03 - Neck Back over Shoulder to Waist Side (neck_back_to_armfold_front_to_waist_side)P04 - Highbust Back over Shoulder to Armfold Front (highbust_back_over_shoulder_to_armfold_front)P05 - Highbust Back over Shoulder to Waist Front (highbust_back_over_shoulder_to_waist_front) P06 - Neck Back to Armfold Front to Neck Back (neck_back_to_armfold_front_to_neck_back)P07 - Across Back Center circled around Shoulder (across_back_center_to_armfold_front_to_across_back_center)P08 - Neck Back to Armfold Front to Highbust Back (neck_back_to_armfold_front_to_highbust_back)P09 - Armfold to Armfold front curved through Bust Front (armfold_to_armfold_bust)P10 - Armfold to Bust Front (armfold_to_bust_front)P11 - Highbust Back over Shoulder to Highbust level (highbust_b_over_shoulder_to_highbust_f)P12 - Armscye: Arc (armscye_arc) Q03 - Dart Width: Waist (dart_width_waist) + + + + 23 + + + + + + + + Front + + + + + + + + + + + + + 9 + + + + + Front + + + + + + + + + + + 7 + + + 8 + + + + + + + + + + Front + + + + + + + 5 + + + + + + + + + + + Front + + + + + + + + 3 + + 1 + + 2 + + + 4 + + + + + + + + + Front + + + + + + + 6 + + + + + + + + + + + + Front + + + 10 + + + + diff --git a/share/measurement-body-points.svg b/share/measurement-body-points.svg new file mode 100644 index 000000000..0e5037f50 --- /dev/null +++ b/share/measurement-body-points.svg @@ -0,0 +1,1508 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + Valentina Body Points + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Back + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Front + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Side + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/share/translations/measurements_p0_fi_FI.ts b/share/translations/measurements_p0_fi_FI.ts index d641416ce..89b802d3a 100644 --- a/share/translations/measurements_p0_fi_FI.ts +++ b/share/translations/measurements_p0_fi_FI.ts @@ -13,7 +13,7 @@ Height: Total Full measurement name. - + Pituus: Yhteensä diff --git a/share/translations/measurements_p10_fi_FI.ts b/share/translations/measurements_p10_fi_FI.ts index d641416ce..89b802d3a 100644 --- a/share/translations/measurements_p10_fi_FI.ts +++ b/share/translations/measurements_p10_fi_FI.ts @@ -13,7 +13,7 @@ Height: Total Full measurement name. - + Pituus: Yhteensä diff --git a/share/translations/measurements_p11_fi_FI.ts b/share/translations/measurements_p11_fi_FI.ts index d641416ce..89b802d3a 100644 --- a/share/translations/measurements_p11_fi_FI.ts +++ b/share/translations/measurements_p11_fi_FI.ts @@ -13,7 +13,7 @@ Height: Total Full measurement name. - + Pituus: Yhteensä diff --git a/share/translations/measurements_p12_fi_FI.ts b/share/translations/measurements_p12_fi_FI.ts index d641416ce..89b802d3a 100644 --- a/share/translations/measurements_p12_fi_FI.ts +++ b/share/translations/measurements_p12_fi_FI.ts @@ -13,7 +13,7 @@ Height: Total Full measurement name. - + Pituus: Yhteensä diff --git a/share/translations/measurements_p13_fi_FI.ts b/share/translations/measurements_p13_fi_FI.ts index d641416ce..89b802d3a 100644 --- a/share/translations/measurements_p13_fi_FI.ts +++ b/share/translations/measurements_p13_fi_FI.ts @@ -13,7 +13,7 @@ Height: Total Full measurement name. - + Pituus: Yhteensä diff --git a/share/translations/measurements_p14_fi_FI.ts b/share/translations/measurements_p14_fi_FI.ts index d641416ce..89b802d3a 100644 --- a/share/translations/measurements_p14_fi_FI.ts +++ b/share/translations/measurements_p14_fi_FI.ts @@ -13,7 +13,7 @@ Height: Total Full measurement name. - + Pituus: Yhteensä diff --git a/share/translations/measurements_p15_fi_FI.ts b/share/translations/measurements_p15_fi_FI.ts index d641416ce..89b802d3a 100644 --- a/share/translations/measurements_p15_fi_FI.ts +++ b/share/translations/measurements_p15_fi_FI.ts @@ -13,7 +13,7 @@ Height: Total Full measurement name. - + Pituus: Yhteensä diff --git a/share/translations/measurements_p16_fi_FI.ts b/share/translations/measurements_p16_fi_FI.ts index d641416ce..89b802d3a 100644 --- a/share/translations/measurements_p16_fi_FI.ts +++ b/share/translations/measurements_p16_fi_FI.ts @@ -13,7 +13,7 @@ Height: Total Full measurement name. - + Pituus: Yhteensä diff --git a/share/translations/measurements_p17_fi_FI.ts b/share/translations/measurements_p17_fi_FI.ts index d641416ce..89b802d3a 100644 --- a/share/translations/measurements_p17_fi_FI.ts +++ b/share/translations/measurements_p17_fi_FI.ts @@ -13,7 +13,7 @@ Height: Total Full measurement name. - + Pituus: Yhteensä diff --git a/share/translations/measurements_p18_fi_FI.ts b/share/translations/measurements_p18_fi_FI.ts index d641416ce..89b802d3a 100644 --- a/share/translations/measurements_p18_fi_FI.ts +++ b/share/translations/measurements_p18_fi_FI.ts @@ -13,7 +13,7 @@ Height: Total Full measurement name. - + Pituus: Yhteensä diff --git a/share/translations/measurements_p19_fi_FI.ts b/share/translations/measurements_p19_fi_FI.ts index d641416ce..89b802d3a 100644 --- a/share/translations/measurements_p19_fi_FI.ts +++ b/share/translations/measurements_p19_fi_FI.ts @@ -13,7 +13,7 @@ Height: Total Full measurement name. - + Pituus: Yhteensä diff --git a/share/translations/measurements_p1_fi_FI.ts b/share/translations/measurements_p1_fi_FI.ts index d641416ce..89b802d3a 100644 --- a/share/translations/measurements_p1_fi_FI.ts +++ b/share/translations/measurements_p1_fi_FI.ts @@ -13,7 +13,7 @@ Height: Total Full measurement name. - + Pituus: Yhteensä diff --git a/share/translations/measurements_p20_fi_FI.ts b/share/translations/measurements_p20_fi_FI.ts index d641416ce..89b802d3a 100644 --- a/share/translations/measurements_p20_fi_FI.ts +++ b/share/translations/measurements_p20_fi_FI.ts @@ -13,7 +13,7 @@ Height: Total Full measurement name. - + Pituus: Yhteensä diff --git a/share/translations/measurements_p21_fi_FI.ts b/share/translations/measurements_p21_fi_FI.ts index d641416ce..89b802d3a 100644 --- a/share/translations/measurements_p21_fi_FI.ts +++ b/share/translations/measurements_p21_fi_FI.ts @@ -13,7 +13,7 @@ Height: Total Full measurement name. - + Pituus: Yhteensä diff --git a/share/translations/measurements_p22_fi_FI.ts b/share/translations/measurements_p22_fi_FI.ts index d641416ce..89b802d3a 100644 --- a/share/translations/measurements_p22_fi_FI.ts +++ b/share/translations/measurements_p22_fi_FI.ts @@ -13,7 +13,7 @@ Height: Total Full measurement name. - + Pituus: Yhteensä diff --git a/share/translations/measurements_p23_fi_FI.ts b/share/translations/measurements_p23_fi_FI.ts index d641416ce..89b802d3a 100644 --- a/share/translations/measurements_p23_fi_FI.ts +++ b/share/translations/measurements_p23_fi_FI.ts @@ -13,7 +13,7 @@ Height: Total Full measurement name. - + Pituus: Yhteensä diff --git a/share/translations/measurements_p24_fi_FI.ts b/share/translations/measurements_p24_fi_FI.ts index d641416ce..89b802d3a 100644 --- a/share/translations/measurements_p24_fi_FI.ts +++ b/share/translations/measurements_p24_fi_FI.ts @@ -13,7 +13,7 @@ Height: Total Full measurement name. - + Pituus: Yhteensä diff --git a/share/translations/measurements_p25_fi_FI.ts b/share/translations/measurements_p25_fi_FI.ts index d641416ce..89b802d3a 100644 --- a/share/translations/measurements_p25_fi_FI.ts +++ b/share/translations/measurements_p25_fi_FI.ts @@ -13,7 +13,7 @@ Height: Total Full measurement name. - + Pituus: Yhteensä diff --git a/share/translations/measurements_p26_fi_FI.ts b/share/translations/measurements_p26_fi_FI.ts index d641416ce..89b802d3a 100644 --- a/share/translations/measurements_p26_fi_FI.ts +++ b/share/translations/measurements_p26_fi_FI.ts @@ -13,7 +13,7 @@ Height: Total Full measurement name. - + Pituus: Yhteensä diff --git a/share/translations/measurements_p27_fi_FI.ts b/share/translations/measurements_p27_fi_FI.ts index d641416ce..89b802d3a 100644 --- a/share/translations/measurements_p27_fi_FI.ts +++ b/share/translations/measurements_p27_fi_FI.ts @@ -13,7 +13,7 @@ Height: Total Full measurement name. - + Pituus: Yhteensä diff --git a/share/translations/measurements_p28_fi_FI.ts b/share/translations/measurements_p28_fi_FI.ts index d641416ce..89b802d3a 100644 --- a/share/translations/measurements_p28_fi_FI.ts +++ b/share/translations/measurements_p28_fi_FI.ts @@ -13,7 +13,7 @@ Height: Total Full measurement name. - + Pituus: Yhteensä diff --git a/share/translations/measurements_p29_fi_FI.ts b/share/translations/measurements_p29_fi_FI.ts index d641416ce..89b802d3a 100644 --- a/share/translations/measurements_p29_fi_FI.ts +++ b/share/translations/measurements_p29_fi_FI.ts @@ -13,7 +13,7 @@ Height: Total Full measurement name. - + Pituus: Yhteensä diff --git a/share/translations/measurements_p2_fi_FI.ts b/share/translations/measurements_p2_fi_FI.ts index d641416ce..89b802d3a 100644 --- a/share/translations/measurements_p2_fi_FI.ts +++ b/share/translations/measurements_p2_fi_FI.ts @@ -13,7 +13,7 @@ Height: Total Full measurement name. - + Pituus: Yhteensä diff --git a/share/translations/measurements_p30_fi_FI.ts b/share/translations/measurements_p30_fi_FI.ts index d641416ce..89b802d3a 100644 --- a/share/translations/measurements_p30_fi_FI.ts +++ b/share/translations/measurements_p30_fi_FI.ts @@ -13,7 +13,7 @@ Height: Total Full measurement name. - + Pituus: Yhteensä diff --git a/share/translations/measurements_p31_fi_FI.ts b/share/translations/measurements_p31_fi_FI.ts index d641416ce..89b802d3a 100644 --- a/share/translations/measurements_p31_fi_FI.ts +++ b/share/translations/measurements_p31_fi_FI.ts @@ -13,7 +13,7 @@ Height: Total Full measurement name. - + Pituus: Yhteensä diff --git a/share/translations/measurements_p32_fi_FI.ts b/share/translations/measurements_p32_fi_FI.ts index d641416ce..89b802d3a 100644 --- a/share/translations/measurements_p32_fi_FI.ts +++ b/share/translations/measurements_p32_fi_FI.ts @@ -13,7 +13,7 @@ Height: Total Full measurement name. - + Pituus: Yhteensä diff --git a/share/translations/measurements_p33_fi_FI.ts b/share/translations/measurements_p33_fi_FI.ts index d641416ce..89b802d3a 100644 --- a/share/translations/measurements_p33_fi_FI.ts +++ b/share/translations/measurements_p33_fi_FI.ts @@ -13,7 +13,7 @@ Height: Total Full measurement name. - + Pituus: Yhteensä diff --git a/share/translations/measurements_p34_fi_FI.ts b/share/translations/measurements_p34_fi_FI.ts index d641416ce..89b802d3a 100644 --- a/share/translations/measurements_p34_fi_FI.ts +++ b/share/translations/measurements_p34_fi_FI.ts @@ -13,7 +13,7 @@ Height: Total Full measurement name. - + Pituus: Yhteensä diff --git a/share/translations/measurements_p35_fi_FI.ts b/share/translations/measurements_p35_fi_FI.ts index d641416ce..89b802d3a 100644 --- a/share/translations/measurements_p35_fi_FI.ts +++ b/share/translations/measurements_p35_fi_FI.ts @@ -13,7 +13,7 @@ Height: Total Full measurement name. - + Pituus: Yhteensä diff --git a/share/translations/measurements_p36_fi_FI.ts b/share/translations/measurements_p36_fi_FI.ts index d641416ce..89b802d3a 100644 --- a/share/translations/measurements_p36_fi_FI.ts +++ b/share/translations/measurements_p36_fi_FI.ts @@ -13,7 +13,7 @@ Height: Total Full measurement name. - + Pituus: Yhteensä diff --git a/share/translations/measurements_p37_fi_FI.ts b/share/translations/measurements_p37_fi_FI.ts index d641416ce..89b802d3a 100644 --- a/share/translations/measurements_p37_fi_FI.ts +++ b/share/translations/measurements_p37_fi_FI.ts @@ -13,7 +13,7 @@ Height: Total Full measurement name. - + Pituus: Yhteensä diff --git a/share/translations/measurements_p38_fi_FI.ts b/share/translations/measurements_p38_fi_FI.ts index d641416ce..89b802d3a 100644 --- a/share/translations/measurements_p38_fi_FI.ts +++ b/share/translations/measurements_p38_fi_FI.ts @@ -13,7 +13,7 @@ Height: Total Full measurement name. - + Pituus: Yhteensä diff --git a/share/translations/measurements_p39_fi_FI.ts b/share/translations/measurements_p39_fi_FI.ts index d641416ce..89b802d3a 100644 --- a/share/translations/measurements_p39_fi_FI.ts +++ b/share/translations/measurements_p39_fi_FI.ts @@ -13,7 +13,7 @@ Height: Total Full measurement name. - + Pituus: Yhteensä diff --git a/share/translations/measurements_p3_fi_FI.ts b/share/translations/measurements_p3_fi_FI.ts index d641416ce..89b802d3a 100644 --- a/share/translations/measurements_p3_fi_FI.ts +++ b/share/translations/measurements_p3_fi_FI.ts @@ -13,7 +13,7 @@ Height: Total Full measurement name. - + Pituus: Yhteensä diff --git a/share/translations/measurements_p40_fi_FI.ts b/share/translations/measurements_p40_fi_FI.ts index d641416ce..89b802d3a 100644 --- a/share/translations/measurements_p40_fi_FI.ts +++ b/share/translations/measurements_p40_fi_FI.ts @@ -13,7 +13,7 @@ Height: Total Full measurement name. - + Pituus: Yhteensä diff --git a/share/translations/measurements_p41_fi_FI.ts b/share/translations/measurements_p41_fi_FI.ts index d641416ce..89b802d3a 100644 --- a/share/translations/measurements_p41_fi_FI.ts +++ b/share/translations/measurements_p41_fi_FI.ts @@ -13,7 +13,7 @@ Height: Total Full measurement name. - + Pituus: Yhteensä diff --git a/share/translations/measurements_p42_fi_FI.ts b/share/translations/measurements_p42_fi_FI.ts index d641416ce..89b802d3a 100644 --- a/share/translations/measurements_p42_fi_FI.ts +++ b/share/translations/measurements_p42_fi_FI.ts @@ -13,7 +13,7 @@ Height: Total Full measurement name. - + Pituus: Yhteensä diff --git a/share/translations/measurements_p43_fi_FI.ts b/share/translations/measurements_p43_fi_FI.ts index d641416ce..89b802d3a 100644 --- a/share/translations/measurements_p43_fi_FI.ts +++ b/share/translations/measurements_p43_fi_FI.ts @@ -13,7 +13,7 @@ Height: Total Full measurement name. - + Pituus: Yhteensä diff --git a/share/translations/measurements_p44_fi_FI.ts b/share/translations/measurements_p44_fi_FI.ts index d641416ce..89b802d3a 100644 --- a/share/translations/measurements_p44_fi_FI.ts +++ b/share/translations/measurements_p44_fi_FI.ts @@ -13,7 +13,7 @@ Height: Total Full measurement name. - + Pituus: Yhteensä diff --git a/share/translations/measurements_p45_fi_FI.ts b/share/translations/measurements_p45_fi_FI.ts index d641416ce..89b802d3a 100644 --- a/share/translations/measurements_p45_fi_FI.ts +++ b/share/translations/measurements_p45_fi_FI.ts @@ -13,7 +13,7 @@ Height: Total Full measurement name. - + Pituus: Yhteensä diff --git a/share/translations/measurements_p46_fi_FI.ts b/share/translations/measurements_p46_fi_FI.ts index d641416ce..89b802d3a 100644 --- a/share/translations/measurements_p46_fi_FI.ts +++ b/share/translations/measurements_p46_fi_FI.ts @@ -13,7 +13,7 @@ Height: Total Full measurement name. - + Pituus: Yhteensä diff --git a/share/translations/measurements_p47_fi_FI.ts b/share/translations/measurements_p47_fi_FI.ts index d641416ce..89b802d3a 100644 --- a/share/translations/measurements_p47_fi_FI.ts +++ b/share/translations/measurements_p47_fi_FI.ts @@ -13,7 +13,7 @@ Height: Total Full measurement name. - + Pituus: Yhteensä diff --git a/share/translations/measurements_p48_fi_FI.ts b/share/translations/measurements_p48_fi_FI.ts index d641416ce..89b802d3a 100644 --- a/share/translations/measurements_p48_fi_FI.ts +++ b/share/translations/measurements_p48_fi_FI.ts @@ -13,7 +13,7 @@ Height: Total Full measurement name. - + Pituus: Yhteensä diff --git a/share/translations/measurements_p49_fi_FI.ts b/share/translations/measurements_p49_fi_FI.ts index d641416ce..89b802d3a 100644 --- a/share/translations/measurements_p49_fi_FI.ts +++ b/share/translations/measurements_p49_fi_FI.ts @@ -13,7 +13,7 @@ Height: Total Full measurement name. - + Pituus: Yhteensä diff --git a/share/translations/measurements_p4_fi_FI.ts b/share/translations/measurements_p4_fi_FI.ts index d641416ce..89b802d3a 100644 --- a/share/translations/measurements_p4_fi_FI.ts +++ b/share/translations/measurements_p4_fi_FI.ts @@ -13,7 +13,7 @@ Height: Total Full measurement name. - + Pituus: Yhteensä diff --git a/share/translations/measurements_p50_fi_FI.ts b/share/translations/measurements_p50_fi_FI.ts index d641416ce..89b802d3a 100644 --- a/share/translations/measurements_p50_fi_FI.ts +++ b/share/translations/measurements_p50_fi_FI.ts @@ -13,7 +13,7 @@ Height: Total Full measurement name. - + Pituus: Yhteensä diff --git a/share/translations/measurements_p51_fi_FI.ts b/share/translations/measurements_p51_fi_FI.ts index d641416ce..89b802d3a 100644 --- a/share/translations/measurements_p51_fi_FI.ts +++ b/share/translations/measurements_p51_fi_FI.ts @@ -13,7 +13,7 @@ Height: Total Full measurement name. - + Pituus: Yhteensä diff --git a/share/translations/measurements_p52_fi_FI.ts b/share/translations/measurements_p52_fi_FI.ts index d641416ce..89b802d3a 100644 --- a/share/translations/measurements_p52_fi_FI.ts +++ b/share/translations/measurements_p52_fi_FI.ts @@ -13,7 +13,7 @@ Height: Total Full measurement name. - + Pituus: Yhteensä diff --git a/share/translations/measurements_p53_fi_FI.ts b/share/translations/measurements_p53_fi_FI.ts index d641416ce..89b802d3a 100644 --- a/share/translations/measurements_p53_fi_FI.ts +++ b/share/translations/measurements_p53_fi_FI.ts @@ -13,7 +13,7 @@ Height: Total Full measurement name. - + Pituus: Yhteensä diff --git a/share/translations/measurements_p54_fi_FI.ts b/share/translations/measurements_p54_fi_FI.ts index d641416ce..89b802d3a 100644 --- a/share/translations/measurements_p54_fi_FI.ts +++ b/share/translations/measurements_p54_fi_FI.ts @@ -13,7 +13,7 @@ Height: Total Full measurement name. - + Pituus: Yhteensä diff --git a/share/translations/measurements_p5_fi_FI.ts b/share/translations/measurements_p5_fi_FI.ts index d641416ce..89b802d3a 100644 --- a/share/translations/measurements_p5_fi_FI.ts +++ b/share/translations/measurements_p5_fi_FI.ts @@ -13,7 +13,7 @@ Height: Total Full measurement name. - + Pituus: Yhteensä diff --git a/share/translations/measurements_p6_fi_FI.ts b/share/translations/measurements_p6_fi_FI.ts index d641416ce..89b802d3a 100644 --- a/share/translations/measurements_p6_fi_FI.ts +++ b/share/translations/measurements_p6_fi_FI.ts @@ -13,7 +13,7 @@ Height: Total Full measurement name. - + Pituus: Yhteensä diff --git a/share/translations/measurements_p7_fi_FI.ts b/share/translations/measurements_p7_fi_FI.ts index d641416ce..89b802d3a 100644 --- a/share/translations/measurements_p7_fi_FI.ts +++ b/share/translations/measurements_p7_fi_FI.ts @@ -13,7 +13,7 @@ Height: Total Full measurement name. - + Pituus: Yhteensä diff --git a/share/translations/measurements_p8_fi_FI.ts b/share/translations/measurements_p8_fi_FI.ts index d641416ce..89b802d3a 100644 --- a/share/translations/measurements_p8_fi_FI.ts +++ b/share/translations/measurements_p8_fi_FI.ts @@ -13,7 +13,7 @@ Height: Total Full measurement name. - + Pituus: Yhteensä diff --git a/share/translations/measurements_p998_fi_FI.ts b/share/translations/measurements_p998_fi_FI.ts index 4a6f47b64..ac2483f08 100644 --- a/share/translations/measurements_p998_fi_FI.ts +++ b/share/translations/measurements_p998_fi_FI.ts @@ -13,7 +13,7 @@ Height: Total Full measurement name. - + Pituus: Yhteensä diff --git a/share/translations/measurements_p9_fi_FI.ts b/share/translations/measurements_p9_fi_FI.ts index d641416ce..89b802d3a 100644 --- a/share/translations/measurements_p9_fi_FI.ts +++ b/share/translations/measurements_p9_fi_FI.ts @@ -13,7 +13,7 @@ Height: Total Full measurement name. - + Pituus: Yhteensä diff --git a/share/translations/translations.pro b/share/translations/translations.pro index 9560676f8..4b6f1bee7 100644 --- a/share/translations/translations.pro +++ b/share/translations/translations.pro @@ -19,7 +19,8 @@ DEPENDPATH += \ ../../src/libs/vpatterndb \ ../../src/libs/vmisc \ ../../src/libs/vtools \ - ../../src/libs/vformat + ../../src/libs/vformat \ + ../../src/libs/fervor include(../../src/app/valentina/valentina.pri) include(../../src/app/tape/tape.pri) @@ -33,6 +34,7 @@ include(../../src/libs/vpatterndb/vpatterndb.pri) include(../../src/libs/vmisc/vmisc.pri) include(../../src/libs/vtools/vtools.pri) include(../../src/libs/vformat/vformat.pri) +include(../../src/libs/fervor/fervor.pri) # Add here path to new translation file with name "valentina_*_*.ts" if you want to add new language. # Same paths in variable INSTALL_TRANSLATIONS (translations.pri). diff --git a/share/translations/valentina.ts b/share/translations/valentina.ts index dd07aea6c..babda0ea8 100644 --- a/share/translations/valentina.ts +++ b/share/translations/valentina.ts @@ -347,6 +347,10 @@ Built on %1 at %2 Built on %1 at %2 + + Check For Updates + + DialogAboutTape @@ -386,6 +390,10 @@ Built on %1 at %2 Built on %1 at %2 + + Check For Updates + + DialogAlongLine @@ -2026,11 +2034,11 @@ Find: - Find: + Find: Search - Search + Search @@ -2913,6 +2921,26 @@ Apply settings anyway? untitled untitled + + Path: + Path: + + + Show in Explorer + Show in Explorer + + + <Empty> + <Empty> + + + File was not saved yet. + File was not saved yet. + + + Show in Finder + + DialogPatternXmlEdit @@ -4381,6 +4409,68 @@ Apply settings anyway? <html><head/><body><p>Do you really want to unite details?</p></body></html> <html><head/><body><p>Do you really want to unite details?</p></body></html> + + Retain original pieces + + + + + FvUpdateWindow + + Software Update + + + + A new version of %1 is available! + + + + %1 %2 is now available - you have %3. Would you like to download it now? + + + + Skip This Version + + + + Remind Me Later + + + + Get Update + + + + + FvUpdater + + Cannot open your default browser. + + + + Feed download failed: %1. + + + + Feed parsing failed: %1 %2. + + + + No updates were found. + + + + Feed error: invalid "enclosure" with the download link + + + + Error + Error + + + Information + Information + InternalStrings @@ -4740,11 +4830,11 @@ Apply settings anyway? Stop - Stop + Stop Stop using tool - Stop using tool + Stop using tool Repot Bug... @@ -5435,7 +5525,7 @@ Do you want to save your changes? Toolbar pointer - Toolbar pointer + Toolbar pointer Operations @@ -5447,7 +5537,7 @@ Do you want to save your changes? Groups - Groups + Groups Select one or more objects, <b>Enter</b> - finish creation @@ -5465,6 +5555,30 @@ Do you want to save your changes? Select one or more objects, <b>Enter</b> - confirm selection Select one or more objects, <b>Enter</b> - confirm selection + + Tool pointer + + + + Midpoint between two points + + + + Group + Group + + + Contains all visibility groups + + + + Show which details will go in layout + + + + You can't use now the Layout mode. Please, include at least one detail in layout. + + MainWindowsNoGUI @@ -6586,6 +6700,10 @@ Do you want to save your changes? Invalid value Invalid value + + Show in Finder + + TapeConfigDialog @@ -6708,6 +6826,13 @@ Do you want to save your changes? Templates + + ToggleDetailInLayout + + detail in layout list + + + Utils::CheckableMessageBox @@ -7819,6 +7944,17 @@ Do you want to save your changes? Suffix + + VToolUnionDetails + + union details + + + + United detail + + + VTranslateVars @@ -8906,6 +9042,11 @@ Do you want to save your changes? Segment. Left symbol _ in the name Seg_ + + CurrentLength + Do not add space between words + + VVITConverter @@ -8929,11 +9070,22 @@ Do you want to save your changes? Error restoring backup file: %1. + + VWidgetDetails + + Form + Form + + + Unnamed + + + VWidgetGroups Form - Form + Form Rename diff --git a/share/translations/valentina_cs_CZ.ts b/share/translations/valentina_cs_CZ.ts index c842a6731..f58110c74 100644 --- a/share/translations/valentina_cs_CZ.ts +++ b/share/translations/valentina_cs_CZ.ts @@ -340,6 +340,10 @@ Built on %1 at %2 Sestaveno %3 v %2 {1 ?} + + Check For Updates + + DialogAboutTape @@ -379,6 +383,10 @@ Built on %1 at %2 Sestaveno %3 v %2 {1 ?} + + Check For Updates + + DialogAlongLine @@ -2849,6 +2857,26 @@ Apply settings anyway? untitled bez názvu + + Path: + Cesta: + + + Show in Explorer + + + + <Empty> + + + + File was not saved yet. + + + + Show in Finder + + DialogPatternXmlEdit @@ -4213,6 +4241,68 @@ Apply settings anyway? <html><head/><body><p>Do you really want to unite details?</p></body></html> + + Retain original pieces + + + + + FvUpdateWindow + + Software Update + + + + A new version of %1 is available! + + + + %1 %2 is now available - you have %3. Would you like to download it now? + + + + Skip This Version + + + + Remind Me Later + + + + Get Update + + + + + FvUpdater + + Cannot open your default browser. + + + + Feed download failed: %1. + + + + Feed parsing failed: %1 %2. + + + + No updates were found. + + + + Feed error: invalid "enclosure" with the download link + + + + Error + Chyba + + + Information + + InternalStrings @@ -4568,11 +4658,11 @@ Apply settings anyway? Stop - Zastavit + Zastavit Stop using tool - Zastavit používání nástroje + Zastavit používání nástroje Repot Bug... @@ -5253,10 +5343,6 @@ Chcete uložit své změny? Select point of cubic bezier path - - Toolbar pointer - - Operations @@ -5265,10 +5351,6 @@ Chcete uložit své změny? Create new group - - Groups - - Select one or more objects, <b>Enter</b> - finish creation @@ -5285,6 +5367,30 @@ Chcete uložit své změny? Select one or more objects, <b>Enter</b> - confirm selection + + Tool pointer + + + + Midpoint between two points + + + + Group + + + + Contains all visibility groups + + + + Show which details will go in layout + + + + You can't use now the Layout mode. Please, include at least one detail in layout. + + MainWindowsNoGUI @@ -6365,6 +6471,10 @@ Do you want to save your changes? Invalid value + + Show in Finder + + TapeConfigDialog @@ -6487,6 +6597,13 @@ Do you want to save your changes? + + ToggleDetailInLayout + + detail in layout list + + + Utils::CheckableMessageBox @@ -7530,6 +7647,17 @@ Do you want to save your changes? + + VToolUnionDetails + + union details + + + + United detail + + + VTranslateVars @@ -8592,6 +8720,11 @@ Do you want to save your changes? Segment. Left symbol _ in the name + + CurrentLength + Do not add space between words + + VVITConverter @@ -8616,11 +8749,18 @@ Do you want to save your changes? - VWidgetGroups + VWidgetDetails Form + + Unnamed + + + + + VWidgetGroups Rename diff --git a/share/translations/valentina_de_DE.ts b/share/translations/valentina_de_DE.ts index 0f0c696cb..f3c70f619 100644 --- a/share/translations/valentina_de_DE.ts +++ b/share/translations/valentina_de_DE.ts @@ -347,6 +347,10 @@ Built on %1 at %2 Erstellt von %1 auf %2 + + Check For Updates + + DialogAboutTape @@ -386,6 +390,10 @@ Built on %1 at %2 Erstellt am %1 um %2 + + Check For Updates + + DialogAlongLine @@ -2913,6 +2921,26 @@ Einstellungen trotzdem anwenden? untitled unbenannt + + Path: + Verzeichnis: + + + Show in Explorer + Im Dateiexplorer anzeigen + + + <Empty> + <leer> + + + File was not saved yet. + Datei konnte nicht gespeichert werden. + + + Show in Finder + + DialogPatternXmlEdit @@ -4381,6 +4409,68 @@ Einstellungen trotzdem anwenden? <html><head/><body><p>Do you really want to unite details?</p></body></html> <html><head/><body><p>Sollen die Details wirklich vereinigt werden?</p></body></html> + + Retain original pieces + + + + + FvUpdateWindow + + Software Update + + + + A new version of %1 is available! + + + + %1 %2 is now available - you have %3. Would you like to download it now? + + + + Skip This Version + + + + Remind Me Later + + + + Get Update + + + + + FvUpdater + + Cannot open your default browser. + + + + Feed download failed: %1. + + + + Feed parsing failed: %1 %2. + + + + No updates were found. + + + + Feed error: invalid "enclosure" with the download link + + + + Error + Fehler + + + Information + Information + InternalStrings @@ -4740,11 +4830,11 @@ Einstellungen trotzdem anwenden? Stop - Stop + Stop Stop using tool - Aktives Werkzeug beenden + Aktives Werkzeug beenden Repot Bug... @@ -5435,7 +5525,7 @@ Sollen die Änderungen gespeichert werden? Toolbar pointer - Symbolleisten-Zeiger + Symbolleisten-Zeiger Operations @@ -5447,7 +5537,7 @@ Sollen die Änderungen gespeichert werden? Groups - Gruppen + Gruppen Select one or more objects, <b>Enter</b> - finish creation @@ -5465,6 +5555,30 @@ Sollen die Änderungen gespeichert werden? Select one or more objects, <b>Enter</b> - confirm selection + + Tool pointer + + + + Midpoint between two points + + + + Group + Gruppe + + + Contains all visibility groups + + + + Show which details will go in layout + + + + You can't use now the Layout mode. Please, include at least one detail in layout. + + MainWindowsNoGUI @@ -6585,6 +6699,10 @@ Do you want to save your changes? Invalid value + + Show in Finder + + TapeConfigDialog @@ -6707,6 +6825,13 @@ Do you want to save your changes? Vorlagen + + ToggleDetailInLayout + + detail in layout list + + + Utils::CheckableMessageBox @@ -7817,6 +7942,17 @@ Do you want to save your changes? + + VToolUnionDetails + + union details + + + + United detail + + + VTranslateVars @@ -8904,6 +9040,11 @@ Do you want to save your changes? Segment. Left symbol _ in the name Seg_ + + CurrentLength + Do not add space between words + + VVITConverter @@ -8927,11 +9068,22 @@ Do you want to save your changes? Fehler beim Wiederherstellen aus Backupdatei %1. + + VWidgetDetails + + Form + Form + + + Unnamed + + + VWidgetGroups Form - Form + Form Rename diff --git a/share/translations/valentina_en_CA.ts b/share/translations/valentina_en_CA.ts index a56c6e963..2eaa4a745 100644 --- a/share/translations/valentina_en_CA.ts +++ b/share/translations/valentina_en_CA.ts @@ -347,6 +347,10 @@ Built on %1 at %2 Built on %1 at %2 + + Check For Updates + + DialogAboutTape @@ -386,6 +390,10 @@ Built on %1 at %2 Built on %1 at %2 + + Check For Updates + + DialogAlongLine @@ -2913,6 +2921,26 @@ Apply settings anyway? untitled untitled + + Path: + Path: + + + Show in Explorer + Show in Explorer + + + <Empty> + <Empty> + + + File was not saved yet. + File was not saved yet. + + + Show in Finder + + DialogPatternXmlEdit @@ -4373,6 +4401,68 @@ Apply settings anyway? <html><head/><body><p>Do you really want to unite details?</p></body></html> <html><head/><body><p>Do you really want to unite details?</p></body></html> + + Retain original pieces + + + + + FvUpdateWindow + + Software Update + + + + A new version of %1 is available! + + + + %1 %2 is now available - you have %3. Would you like to download it now? + + + + Skip This Version + + + + Remind Me Later + + + + Get Update + + + + + FvUpdater + + Cannot open your default browser. + + + + Feed download failed: %1. + + + + Feed parsing failed: %1 %2. + + + + No updates were found. + + + + Feed error: invalid "enclosure" with the download link + + + + Error + Error + + + Information + Information + InternalStrings @@ -4732,11 +4822,11 @@ Apply settings anyway? Stop - Stop + Stop Stop using tool - Stop using tool + Stop using tool Repot Bug... @@ -5425,10 +5515,6 @@ Do you want to save your changes? Select point of cubic bezier path - - Toolbar pointer - - Operations @@ -5437,10 +5523,6 @@ Do you want to save your changes? Create new group - - Groups - - Select one or more objects, <b>Enter</b> - finish creation @@ -5457,6 +5539,30 @@ Do you want to save your changes? Select one or more objects, <b>Enter</b> - confirm selection + + Tool pointer + + + + Midpoint between two points + + + + Group + + + + Contains all visibility groups + + + + Show which details will go in layout + + + + You can't use now the Layout mode. Please, include at least one detail in layout. + + MainWindowsNoGUI @@ -6578,6 +6684,10 @@ Do you want to save your changes? Invalid value + + Show in Finder + + TapeConfigDialog @@ -6700,6 +6810,13 @@ Do you want to save your changes? Templates + + ToggleDetailInLayout + + detail in layout list + + + Utils::CheckableMessageBox @@ -7811,6 +7928,17 @@ Do you want to save your changes? + + VToolUnionDetails + + union details + + + + United detail + + + VTranslateVars @@ -8898,6 +9026,11 @@ Do you want to save your changes? Segment. Left symbol _ in the name + + CurrentLength + Do not add space between words + + VVITConverter @@ -8922,11 +9055,18 @@ Do you want to save your changes? - VWidgetGroups + VWidgetDetails Form + + Unnamed + + + + + VWidgetGroups Rename diff --git a/share/translations/valentina_en_IN.ts b/share/translations/valentina_en_IN.ts index bfef70a87..d8bc7931d 100644 --- a/share/translations/valentina_en_IN.ts +++ b/share/translations/valentina_en_IN.ts @@ -347,6 +347,10 @@ Built on %1 at %2 Built on %1 at %2 + + Check For Updates + + DialogAboutTape @@ -386,6 +390,10 @@ Built on %1 at %2 Built on %1 at %2 + + Check For Updates + + DialogAlongLine @@ -2913,6 +2921,26 @@ Apply settings anyway? untitled untitled + + Path: + Path: + + + Show in Explorer + Show in Explorer + + + <Empty> + <Empty> + + + File was not saved yet. + File was not saved yet. + + + Show in Finder + + DialogPatternXmlEdit @@ -4373,6 +4401,68 @@ Apply settings anyway? <html><head/><body><p>Do you really want to unite details?</p></body></html> <html><head/><body><p>Do you really want to unite details?</p></body></html> + + Retain original pieces + + + + + FvUpdateWindow + + Software Update + + + + A new version of %1 is available! + + + + %1 %2 is now available - you have %3. Would you like to download it now? + + + + Skip This Version + + + + Remind Me Later + + + + Get Update + + + + + FvUpdater + + Cannot open your default browser. + + + + Feed download failed: %1. + + + + Feed parsing failed: %1 %2. + + + + No updates were found. + + + + Feed error: invalid "enclosure" with the download link + + + + Error + Error + + + Information + Information + InternalStrings @@ -4732,11 +4822,11 @@ Apply settings anyway? Stop - Stop + Stop Stop using tool - Stop using tool + Stop using tool Repot Bug... @@ -5425,10 +5515,6 @@ Do you want to save your changes? Select point of cubic bezier path - - Toolbar pointer - - Operations @@ -5437,10 +5523,6 @@ Do you want to save your changes? Create new group - - Groups - - Select one or more objects, <b>Enter</b> - finish creation @@ -5457,6 +5539,30 @@ Do you want to save your changes? Select one or more objects, <b>Enter</b> - confirm selection + + Tool pointer + + + + Midpoint between two points + + + + Group + + + + Contains all visibility groups + + + + Show which details will go in layout + + + + You can't use now the Layout mode. Please, include at least one detail in layout. + + MainWindowsNoGUI @@ -6578,6 +6684,10 @@ Do you want to save your changes? Invalid value + + Show in Finder + + TapeConfigDialog @@ -6700,6 +6810,13 @@ Do you want to save your changes? Templates + + ToggleDetailInLayout + + detail in layout list + + + Utils::CheckableMessageBox @@ -7811,6 +7928,17 @@ Do you want to save your changes? + + VToolUnionDetails + + union details + + + + United detail + + + VTranslateVars @@ -8898,6 +9026,11 @@ Do you want to save your changes? Segment. Left symbol _ in the name + + CurrentLength + Do not add space between words + + VVITConverter @@ -8922,11 +9055,18 @@ Do you want to save your changes? - VWidgetGroups + VWidgetDetails Form + + Unnamed + + + + + VWidgetGroups Rename diff --git a/share/translations/valentina_en_US.ts b/share/translations/valentina_en_US.ts index 09f373767..78b554fee 100644 --- a/share/translations/valentina_en_US.ts +++ b/share/translations/valentina_en_US.ts @@ -347,6 +347,10 @@ Built on %1 at %2 Built on %1 at %2 + + Check For Updates + + DialogAboutTape @@ -386,6 +390,10 @@ Built on %1 at %2 Built on %1 at %2 + + Check For Updates + + DialogAlongLine @@ -2913,6 +2921,26 @@ Apply settings anyway? untitled untitled + + Path: + Path: + + + Show in Explorer + Show in Explorer + + + <Empty> + <Empty> + + + File was not saved yet. + File was not saved yet. + + + Show in Finder + + DialogPatternXmlEdit @@ -4381,6 +4409,68 @@ Apply settings anyway? <html><head/><body><p>Do you really want to unite details?</p></body></html> <html><head/><body><p>Do you really want to unite details?</p></body></html> + + Retain original pieces + + + + + FvUpdateWindow + + Software Update + + + + A new version of %1 is available! + + + + %1 %2 is now available - you have %3. Would you like to download it now? + + + + Skip This Version + + + + Remind Me Later + + + + Get Update + + + + + FvUpdater + + Cannot open your default browser. + + + + Feed download failed: %1. + + + + Feed parsing failed: %1 %2. + + + + No updates were found. + + + + Feed error: invalid "enclosure" with the download link + + + + Error + Error + + + Information + Information + InternalStrings @@ -4740,11 +4830,11 @@ Apply settings anyway? Stop - Stop + Stop Stop using tool - Stop using tool + Stop using tool Repot Bug... @@ -5435,7 +5525,7 @@ Do you want to save your changes? Toolbar pointer - Toolbar pointer + Toolbar pointer Operations @@ -5447,7 +5537,7 @@ Do you want to save your changes? Groups - Groups + Groups Select one or more objects, <b>Enter</b> - finish creation @@ -5465,6 +5555,30 @@ Do you want to save your changes? Select one or more objects, <b>Enter</b> - confirm selection + + Tool pointer + + + + Midpoint between two points + + + + Group + Group + + + Contains all visibility groups + + + + Show which details will go in layout + + + + You can't use now the Layout mode. Please, include at least one detail in layout. + + MainWindowsNoGUI @@ -6586,6 +6700,10 @@ Do you want to save your changes? Invalid value + + Show in Finder + + TapeConfigDialog @@ -6708,6 +6826,13 @@ Do you want to save your changes? Templates + + ToggleDetailInLayout + + detail in layout list + + + Utils::CheckableMessageBox @@ -7819,6 +7944,17 @@ Do you want to save your changes? + + VToolUnionDetails + + union details + + + + United detail + + + VTranslateVars @@ -8906,6 +9042,11 @@ Do you want to save your changes? Segment. Left symbol _ in the name Seg_ + + CurrentLength + Do not add space between words + + VVITConverter @@ -8929,11 +9070,22 @@ Do you want to save your changes? Error restoring backup file: %1. + + VWidgetDetails + + Form + Form + + + Unnamed + + + VWidgetGroups Form - Form + Form Rename diff --git a/share/translations/valentina_es_ES.ts b/share/translations/valentina_es_ES.ts index 30cb89041..bce7ba0de 100644 --- a/share/translations/valentina_es_ES.ts +++ b/share/translations/valentina_es_ES.ts @@ -347,6 +347,10 @@ Built on %1 at %2 Construido el %1 a la %2 + + Check For Updates + + DialogAboutTape @@ -386,6 +390,10 @@ Built on %1 at %2 Construido el %1 a la %2 + + Check For Updates + + DialogAlongLine @@ -2913,6 +2921,26 @@ Apply settings anyway? untitled sin título + + Path: + Ruta: + + + Show in Explorer + Mostrar en el explorador + + + <Empty> + <Vacio> + + + File was not saved yet. + Aun no se guardó el archivo + + + Show in Finder + + DialogPatternXmlEdit @@ -4381,6 +4409,68 @@ Apply settings anyway? <html><head/><body><p>Do you really want to unite details?</p></body></html> <html><head/><body><p>¿Desea unir los detalles?</p></body></html> + + Retain original pieces + + + + + FvUpdateWindow + + Software Update + + + + A new version of %1 is available! + + + + %1 %2 is now available - you have %3. Would you like to download it now? + + + + Skip This Version + + + + Remind Me Later + + + + Get Update + + + + + FvUpdater + + Cannot open your default browser. + + + + Feed download failed: %1. + + + + Feed parsing failed: %1 %2. + + + + No updates were found. + + + + Feed error: invalid "enclosure" with the download link + + + + Error + Error + + + Information + Información + InternalStrings @@ -4740,11 +4830,11 @@ Apply settings anyway? Stop - Parar + Parar Stop using tool - Parar de usar herramienta + Parar de usar herramienta Repot Bug... @@ -5433,10 +5523,6 @@ Quiere guardar los cambios? Select point of cubic bezier path - - Toolbar pointer - - Operations Operaciones @@ -5445,10 +5531,6 @@ Quiere guardar los cambios? Create new group - - Groups - - Select one or more objects, <b>Enter</b> - finish creation @@ -5465,6 +5547,30 @@ Quiere guardar los cambios? Select one or more objects, <b>Enter</b> - confirm selection + + Tool pointer + + + + Midpoint between two points + + + + Group + Grupo + + + Contains all visibility groups + + + + Show which details will go in layout + + + + You can't use now the Layout mode. Please, include at least one detail in layout. + + MainWindowsNoGUI @@ -6585,6 +6691,10 @@ Do you want to save your changes? Invalid value + + Show in Finder + + TapeConfigDialog @@ -6707,6 +6817,13 @@ Do you want to save your changes? Plantillas + + ToggleDetailInLayout + + detail in layout list + + + Utils::CheckableMessageBox @@ -7818,6 +7935,17 @@ Do you want to save your changes? + + VToolUnionDetails + + union details + + + + United detail + + + VTranslateVars @@ -8905,6 +9033,11 @@ Do you want to save your changes? Segment. Left symbol _ in the name + + CurrentLength + Do not add space between words + + VVITConverter @@ -8929,11 +9062,18 @@ Do you want to save your changes? - VWidgetGroups + VWidgetDetails Form + + Unnamed + + + + + VWidgetGroups Rename diff --git a/share/translations/valentina_fi_FI.ts b/share/translations/valentina_fi_FI.ts index cefd5af3b..401bfa21b 100644 --- a/share/translations/valentina_fi_FI.ts +++ b/share/translations/valentina_fi_FI.ts @@ -340,6 +340,10 @@ Built on %1 at %2 Käännetty %3 klo %2 {1 ?} + + Check For Updates + + DialogAboutTape @@ -379,6 +383,10 @@ Built on %1 at %2 Käännetty %3 klo %2 {1 ?} + + Check For Updates + + DialogAlongLine @@ -2849,6 +2857,26 @@ Apply settings anyway? untitled nimetön + + Path: + Polku: + + + Show in Explorer + + + + <Empty> + + + + File was not saved yet. + + + + Show in Finder + + DialogPatternXmlEdit @@ -4213,6 +4241,68 @@ Apply settings anyway? <html><head/><body><p>Do you really want to unite details?</p></body></html> + + Retain original pieces + + + + + FvUpdateWindow + + Software Update + + + + A new version of %1 is available! + + + + %1 %2 is now available - you have %3. Would you like to download it now? + + + + Skip This Version + + + + Remind Me Later + + + + Get Update + + + + + FvUpdater + + Cannot open your default browser. + + + + Feed download failed: %1. + + + + Feed parsing failed: %1 %2. + + + + No updates were found. + + + + Feed error: invalid "enclosure" with the download link + + + + Error + Virhe + + + Information + + InternalStrings @@ -4568,11 +4658,11 @@ Apply settings anyway? Stop - Lopeta + Lopeta Stop using tool - Lopeta työkalun käyttö + Lopeta työkalun käyttö Repot Bug... @@ -5253,10 +5343,6 @@ Haluatko tallentaa muutokset? Select point of cubic bezier path - - Toolbar pointer - - Operations @@ -5265,10 +5351,6 @@ Haluatko tallentaa muutokset? Create new group - - Groups - - Select one or more objects, <b>Enter</b> - finish creation @@ -5285,6 +5367,30 @@ Haluatko tallentaa muutokset? Select one or more objects, <b>Enter</b> - confirm selection + + Tool pointer + + + + Midpoint between two points + + + + Group + + + + Contains all visibility groups + + + + Show which details will go in layout + + + + You can't use now the Layout mode. Please, include at least one detail in layout. + + MainWindowsNoGUI @@ -6365,6 +6471,10 @@ Do you want to save your changes? Invalid value + + Show in Finder + + TapeConfigDialog @@ -6487,6 +6597,13 @@ Do you want to save your changes? + + ToggleDetailInLayout + + detail in layout list + + + Utils::CheckableMessageBox @@ -7530,6 +7647,17 @@ Do you want to save your changes? + + VToolUnionDetails + + union details + + + + United detail + + + VTranslateVars @@ -8582,6 +8710,11 @@ Do you want to save your changes? Segment. Left symbol _ in the name + + CurrentLength + Do not add space between words + + VVITConverter @@ -8606,11 +8739,18 @@ Do you want to save your changes? - VWidgetGroups + VWidgetDetails Form + + Unnamed + + + + + VWidgetGroups Rename diff --git a/share/translations/valentina_fr_FR.ts b/share/translations/valentina_fr_FR.ts index 46cdea17e..09ed11a4f 100644 --- a/share/translations/valentina_fr_FR.ts +++ b/share/translations/valentina_fr_FR.ts @@ -347,6 +347,10 @@ Built on %1 at %2 Compilé le %1 à %2 + + Check For Updates + + DialogAboutTape @@ -386,6 +390,10 @@ Built on %1 at %2 Compilé le %1 à %2 + + Check For Updates + + DialogAlongLine @@ -2907,6 +2915,26 @@ Appliquer les réglages quand-même ? untitled sans titre + + Path: + Chemin: + + + Show in Explorer + Montrer dans l'Explorer + + + <Empty> + + + + File was not saved yet. + + + + Show in Finder + + DialogPatternXmlEdit @@ -4363,6 +4391,68 @@ Appliquer les réglages quand-même ? <html><head/><body><p>Do you really want to unite details?</p></body></html> + + Retain original pieces + + + + + FvUpdateWindow + + Software Update + + + + A new version of %1 is available! + + + + %1 %2 is now available - you have %3. Would you like to download it now? + + + + Skip This Version + + + + Remind Me Later + + + + Get Update + + + + + FvUpdater + + Cannot open your default browser. + + + + Feed download failed: %1. + + + + Feed parsing failed: %1 %2. + + + + No updates were found. + + + + Feed error: invalid "enclosure" with the download link + + + + Error + Erreur + + + Information + Information + InternalStrings @@ -4719,11 +4809,11 @@ Appliquer les réglages quand-même ? Stop - stop + stop Stop using tool - Arrêter d'utiliser cet outil + Arrêter d'utiliser cet outil Repot Bug... @@ -5412,10 +5502,6 @@ Voulez-vous sauvegarder les changements ? Select point of cubic bezier path - - Toolbar pointer - - Operations @@ -5424,10 +5510,6 @@ Voulez-vous sauvegarder les changements ? Create new group - - Groups - - Select one or more objects, <b>Enter</b> - finish creation @@ -5444,6 +5526,30 @@ Voulez-vous sauvegarder les changements ? Select one or more objects, <b>Enter</b> - confirm selection + + Tool pointer + + + + Midpoint between two points + + + + Group + + + + Contains all visibility groups + + + + Show which details will go in layout + + + + You can't use now the Layout mode. Please, include at least one detail in layout. + + MainWindowsNoGUI @@ -6545,6 +6651,10 @@ Voulez-vous enregistrer les changements? Invalid value + + Show in Finder + + TapeConfigDialog @@ -6667,6 +6777,13 @@ Voulez-vous enregistrer les changements? Modèles + + ToggleDetailInLayout + + detail in layout list + + + Utils::CheckableMessageBox @@ -7714,6 +7831,17 @@ Voulez-vous enregistrer les changements? + + VToolUnionDetails + + union details + + + + United detail + + + VTranslateVars @@ -8782,6 +8910,11 @@ Voulez-vous enregistrer les changements? Segment. Left symbol _ in the name + + CurrentLength + Do not add space between words + + VVITConverter @@ -8806,11 +8939,18 @@ Voulez-vous enregistrer les changements? - VWidgetGroups + VWidgetDetails Form + + Unnamed + + + + + VWidgetGroups Rename diff --git a/share/translations/valentina_he_IL.ts b/share/translations/valentina_he_IL.ts index 06bbb1acd..717df3066 100644 --- a/share/translations/valentina_he_IL.ts +++ b/share/translations/valentina_he_IL.ts @@ -284,6 +284,10 @@ Built on %1 at %2 + + Check For Updates + + DialogAboutTape @@ -319,6 +323,10 @@ Built on %1 at %2 + + Check For Updates + + DialogAlongLine @@ -2493,6 +2501,26 @@ Apply settings anyway? untitled + + Path: + + + + Show in Explorer + + + + <Empty> + + + + File was not saved yet. + + + + Show in Finder + + DialogPatternXmlEdit @@ -3701,6 +3729,68 @@ Apply settings anyway? <html><head/><body><p>Do you really want to unite details?</p></body></html> + + Retain original pieces + + + + + FvUpdateWindow + + Software Update + + + + A new version of %1 is available! + + + + %1 %2 is now available - you have %3. Would you like to download it now? + + + + Skip This Version + + + + Remind Me Later + + + + Get Update + + + + + FvUpdater + + Cannot open your default browser. + + + + Feed download failed: %1. + + + + Feed parsing failed: %1 %2. + + + + No updates were found. + + + + Feed error: invalid "enclosure" with the download link + + + + Error + + + + Information + + InternalStrings @@ -4054,14 +4144,6 @@ Apply settings anyway? Zoom fit best - - Stop - - - - Stop using tool - - Report bug @@ -4728,10 +4810,6 @@ Do you want to save your changes? Select point of cubic bezier path - - Toolbar pointer - - Operations @@ -4740,10 +4818,6 @@ Do you want to save your changes? Create new group - - Groups - - Select one or more objects, <b>Enter</b> - finish creation @@ -4760,6 +4834,30 @@ Do you want to save your changes? Select one or more objects, <b>Enter</b> - confirm selection + + Tool pointer + + + + Midpoint between two points + + + + Group + + + + Contains all visibility groups + + + + Show which details will go in layout + + + + You can't use now the Layout mode. Please, include at least one detail in layout. + + MainWindowsNoGUI @@ -5832,6 +5930,10 @@ Do you want to save your changes? Invalid value + + Show in Finder + + TapeConfigDialog @@ -5946,6 +6048,13 @@ Do you want to save your changes? + + ToggleDetailInLayout + + detail in layout list + + + Utils::CheckableMessageBox @@ -6959,6 +7068,17 @@ Do you want to save your changes? + + VToolUnionDetails + + union details + + + + United detail + + + VTranslateVars @@ -7986,6 +8106,11 @@ Do you want to save your changes? Segment. Left symbol _ in the name + + CurrentLength + Do not add space between words + + VVITConverter @@ -8002,11 +8127,18 @@ Do you want to save your changes? - VWidgetGroups + VWidgetDetails Form + + Unnamed + + + + + VWidgetGroups Rename diff --git a/share/translations/valentina_id_ID.ts b/share/translations/valentina_id_ID.ts index 6f9db7d78..865a794f8 100644 --- a/share/translations/valentina_id_ID.ts +++ b/share/translations/valentina_id_ID.ts @@ -336,6 +336,10 @@ Built on %1 at %2 Dibuat pada %3 at %2 {1 ?} + + Check For Updates + + DialogAboutTape @@ -375,6 +379,10 @@ Built on %1 at %2 Dibuat pada %3 at %2 {1 ?} + + Check For Updates + + DialogAlongLine @@ -2688,6 +2696,26 @@ Apply settings anyway? untitled + + Path: + + + + Show in Explorer + + + + <Empty> + + + + File was not saved yet. + + + + Show in Finder + + DialogPatternXmlEdit @@ -3942,6 +3970,68 @@ Apply settings anyway? <html><head/><body><p>Do you really want to unite details?</p></body></html> + + Retain original pieces + + + + + FvUpdateWindow + + Software Update + + + + A new version of %1 is available! + + + + %1 %2 is now available - you have %3. Would you like to download it now? + + + + Skip This Version + + + + Remind Me Later + + + + Get Update + + + + + FvUpdater + + Cannot open your default browser. + + + + Feed download failed: %1. + + + + Feed parsing failed: %1 %2. + + + + No updates were found. + + + + Feed error: invalid "enclosure" with the download link + + + + Error + + + + Information + + InternalStrings @@ -4295,14 +4385,6 @@ Apply settings anyway? Zoom fit best - - Stop - - - - Stop using tool - - Report bug @@ -4970,10 +5052,6 @@ Apakah anda ingin menyimpan perubahan anda? Select point of cubic bezier path - - Toolbar pointer - - Operations @@ -4982,10 +5060,6 @@ Apakah anda ingin menyimpan perubahan anda? Create new group - - Groups - - Select one or more objects, <b>Enter</b> - finish creation @@ -5002,6 +5076,30 @@ Apakah anda ingin menyimpan perubahan anda? Select one or more objects, <b>Enter</b> - confirm selection + + Tool pointer + + + + Midpoint between two points + + + + Group + + + + Contains all visibility groups + + + + Show which details will go in layout + + + + You can't use now the Layout mode. Please, include at least one detail in layout. + + MainWindowsNoGUI @@ -6074,6 +6172,10 @@ Do you want to save your changes? Invalid value + + Show in Finder + + TapeConfigDialog @@ -6196,6 +6298,13 @@ Do you want to save your changes? + + ToggleDetailInLayout + + detail in layout list + + + Utils::CheckableMessageBox @@ -7210,6 +7319,17 @@ Do you want to save your changes? + + VToolUnionDetails + + union details + + + + United detail + + + VTranslateVars @@ -8237,6 +8357,11 @@ Do you want to save your changes? Segment. Left symbol _ in the name + + CurrentLength + Do not add space between words + + VVITConverter @@ -8253,11 +8378,18 @@ Do you want to save your changes? - VWidgetGroups + VWidgetDetails Form + + Unnamed + + + + + VWidgetGroups Rename diff --git a/share/translations/valentina_it_IT.ts b/share/translations/valentina_it_IT.ts index a42782aa7..90dbc6956 100644 --- a/share/translations/valentina_it_IT.ts +++ b/share/translations/valentina_it_IT.ts @@ -347,6 +347,10 @@ Built on %1 at %2 Aumentato dall' %1 al %2 + + Check For Updates + + DialogAboutTape @@ -386,6 +390,10 @@ Built on %1 at %2 Aumentato dall' %1 al %2 + + Check For Updates + + DialogAlongLine @@ -2914,6 +2922,26 @@ Applicare le impostazioni comunque? untitled senza titolo + + Path: + Path: + + + Show in Explorer + Mostra in Explorer + + + <Empty> + <Empty> + + + File was not saved yet. + Il file non è stato ancora salvato + + + Show in Finder + + DialogPatternXmlEdit @@ -4374,6 +4402,68 @@ Applicare le impostazioni comunque? <html><head/><body><p>Do you really want to unite details?</p></body></html> <html><head/><body><p>Vuoi veramente unire i dettagli?</p></body></html> + + Retain original pieces + + + + + FvUpdateWindow + + Software Update + + + + A new version of %1 is available! + + + + %1 %2 is now available - you have %3. Would you like to download it now? + + + + Skip This Version + + + + Remind Me Later + + + + Get Update + + + + + FvUpdater + + Cannot open your default browser. + + + + Feed download failed: %1. + + + + Feed parsing failed: %1 %2. + + + + No updates were found. + + + + Feed error: invalid "enclosure" with the download link + + + + Error + Errore + + + Information + Informazione + InternalStrings @@ -4733,11 +4823,11 @@ Applicare le impostazioni comunque? Stop - Stop + Stop Stop using tool - Stop utilizzo strumento + Stop utilizzo strumento Repot Bug... @@ -5426,10 +5516,6 @@ Vuoi salvare i cambiamenti? Select point of cubic bezier path - - Toolbar pointer - - Operations @@ -5438,10 +5524,6 @@ Vuoi salvare i cambiamenti? Create new group - - Groups - - Select one or more objects, <b>Enter</b> - finish creation @@ -5458,6 +5540,30 @@ Vuoi salvare i cambiamenti? Select one or more objects, <b>Enter</b> - confirm selection + + Tool pointer + + + + Midpoint between two points + + + + Group + + + + Contains all visibility groups + + + + Show which details will go in layout + + + + You can't use now the Layout mode. Please, include at least one detail in layout. + + MainWindowsNoGUI @@ -6579,6 +6685,10 @@ Vuoi salvare le tue modifiche? Invalid value + + Show in Finder + + TapeConfigDialog @@ -6701,6 +6811,13 @@ Vuoi salvare le tue modifiche? Templates + + ToggleDetailInLayout + + detail in layout list + + + Utils::CheckableMessageBox @@ -7790,6 +7907,17 @@ Vuoi salvare le tue modifiche? + + VToolUnionDetails + + union details + + + + United detail + + + VTranslateVars @@ -8832,6 +8960,11 @@ Vuoi salvare le tue modifiche? Segment. Left symbol _ in the name + + CurrentLength + Do not add space between words + + VVITConverter @@ -8856,11 +8989,18 @@ Vuoi salvare le tue modifiche? - VWidgetGroups + VWidgetDetails Form + + Unnamed + + + + + VWidgetGroups Rename diff --git a/share/translations/valentina_nl_NL.ts b/share/translations/valentina_nl_NL.ts index 6f8438bdb..49cf00d44 100644 --- a/share/translations/valentina_nl_NL.ts +++ b/share/translations/valentina_nl_NL.ts @@ -347,6 +347,10 @@ Built on %1 at %2 Gebouwd op %3 op %2 {1 ?} + + Check For Updates + + DialogAboutTape @@ -386,6 +390,10 @@ Built on %1 at %2 Gebouwd op %3 op %2 {1 ?} + + Check For Updates + + DialogAlongLine @@ -2892,6 +2900,26 @@ Apply settings anyway? untitled Zonder titel + + Path: + Pad: + + + Show in Explorer + Toon in Explorer + + + <Empty> + <Leeg> + + + File was not saved yet. + + + + Show in Finder + + DialogPatternXmlEdit @@ -4344,6 +4372,68 @@ Apply settings anyway? <html><head/><body><p>Do you really want to unite details?</p></body></html> + + Retain original pieces + + + + + FvUpdateWindow + + Software Update + + + + A new version of %1 is available! + + + + %1 %2 is now available - you have %3. Would you like to download it now? + + + + Skip This Version + + + + Remind Me Later + + + + Get Update + + + + + FvUpdater + + Cannot open your default browser. + + + + Feed download failed: %1. + + + + Feed parsing failed: %1 %2. + + + + No updates were found. + + + + Feed error: invalid "enclosure" with the download link + + + + Error + Error + + + Information + Informatie + InternalStrings @@ -4703,11 +4793,11 @@ Apply settings anyway? Stop - Stop + Stop Stop using tool - Stop gebruik gereedschap + Stop gebruik gereedschap Repot Bug... @@ -5395,10 +5485,6 @@ Do you want to save your changes? Select point of cubic bezier path - - Toolbar pointer - - Operations @@ -5407,10 +5493,6 @@ Do you want to save your changes? Create new group - - Groups - - Select one or more objects, <b>Enter</b> - finish creation @@ -5427,6 +5509,30 @@ Do you want to save your changes? Select one or more objects, <b>Enter</b> - confirm selection + + Tool pointer + + + + Midpoint between two points + + + + Group + + + + Contains all visibility groups + + + + Show which details will go in layout + + + + You can't use now the Layout mode. Please, include at least one detail in layout. + + MainWindowsNoGUI @@ -6544,6 +6650,10 @@ Wil je deze veranderingen opslaan? Invalid value + + Show in Finder + + TapeConfigDialog @@ -6666,6 +6776,13 @@ Wil je deze veranderingen opslaan? Sjablonen + + ToggleDetailInLayout + + detail in layout list + + + Utils::CheckableMessageBox @@ -7721,6 +7838,17 @@ Wil je deze veranderingen opslaan? + + VToolUnionDetails + + union details + + + + United detail + + + VTranslateVars @@ -8773,6 +8901,11 @@ Wil je deze veranderingen opslaan? Segment. Left symbol _ in the name + + CurrentLength + Do not add space between words + + VVITConverter @@ -8797,11 +8930,18 @@ Wil je deze veranderingen opslaan? - VWidgetGroups + VWidgetDetails Form + + Unnamed + + + + + VWidgetGroups Rename diff --git a/share/translations/valentina_pt_BR.ts b/share/translations/valentina_pt_BR.ts index e43c54a7b..13d93bdb7 100644 --- a/share/translations/valentina_pt_BR.ts +++ b/share/translations/valentina_pt_BR.ts @@ -335,6 +335,10 @@ Built on %1 at %2 Construído de %3 a %2 {1 ?} + + Check For Updates + + DialogAboutTape @@ -374,6 +378,10 @@ Built on %1 at %2 Construído de %3 a %2 {1 ?} + + Check For Updates + + DialogAlongLine @@ -2792,6 +2800,26 @@ Apply settings anyway? untitled + + Path: + + + + Show in Explorer + + + + <Empty> + + + + File was not saved yet. + + + + Show in Finder + + DialogPatternXmlEdit @@ -4060,6 +4088,68 @@ Apply settings anyway? <html><head/><body><p>Do you really want to unite details?</p></body></html> + + Retain original pieces + + + + + FvUpdateWindow + + Software Update + + + + A new version of %1 is available! + + + + %1 %2 is now available - you have %3. Would you like to download it now? + + + + Skip This Version + + + + Remind Me Later + + + + Get Update + + + + + FvUpdater + + Cannot open your default browser. + + + + Feed download failed: %1. + + + + Feed parsing failed: %1 %2. + + + + No updates were found. + + + + Feed error: invalid "enclosure" with the download link + + + + Error + Erro + + + Information + + InternalStrings @@ -4413,14 +4503,6 @@ Apply settings anyway? Zoom fit best - - Stop - - - - Stop using tool - - Report bug @@ -5087,10 +5169,6 @@ Do you want to save your changes? Select point of cubic bezier path - - Toolbar pointer - - Operations @@ -5099,10 +5177,6 @@ Do you want to save your changes? Create new group - - Groups - - Select one or more objects, <b>Enter</b> - finish creation @@ -5119,6 +5193,30 @@ Do you want to save your changes? Select one or more objects, <b>Enter</b> - confirm selection + + Tool pointer + + + + Midpoint between two points + + + + Group + + + + Contains all visibility groups + + + + Show which details will go in layout + + + + You can't use now the Layout mode. Please, include at least one detail in layout. + + MainWindowsNoGUI @@ -6191,6 +6289,10 @@ Do you want to save your changes? Invalid value + + Show in Finder + + TapeConfigDialog @@ -6309,6 +6411,13 @@ Do you want to save your changes? + + ToggleDetailInLayout + + detail in layout list + + + Utils::CheckableMessageBox @@ -7326,6 +7435,17 @@ Do you want to save your changes? + + VToolUnionDetails + + union details + + + + United detail + + + VTranslateVars @@ -8368,6 +8488,11 @@ Do you want to save your changes? Segment. Left symbol _ in the name Segmento_ + + CurrentLength + Do not add space between words + + VVITConverter @@ -8391,11 +8516,22 @@ Do you want to save your changes? Erro, restaurando backup do documento: %1. + + VWidgetDetails + + Form + Forma + + + Unnamed + + + VWidgetGroups Form - Forma + Forma Rename diff --git a/share/translations/valentina_ro_RO.ts b/share/translations/valentina_ro_RO.ts index acd82bb51..f1e291032 100644 --- a/share/translations/valentina_ro_RO.ts +++ b/share/translations/valentina_ro_RO.ts @@ -348,6 +348,10 @@ Built on %1 at %2 Construit pe %1 la %2 + + Check For Updates + + DialogAboutTape @@ -387,6 +391,10 @@ Built on %1 at %2 Construit pe %1 la %2 + + Check For Updates + + DialogAlongLine @@ -2877,6 +2885,26 @@ Apply settings anyway? untitled + + Path: + Rută + + + Show in Explorer + + + + <Empty> + + + + File was not saved yet. + + + + Show in Finder + + DialogPatternXmlEdit @@ -4217,6 +4245,68 @@ Apply settings anyway? <html><head/><body><p>Do you really want to unite details?</p></body></html> + + Retain original pieces + + + + + FvUpdateWindow + + Software Update + + + + A new version of %1 is available! + + + + %1 %2 is now available - you have %3. Would you like to download it now? + + + + Skip This Version + + + + Remind Me Later + + + + Get Update + + + + + FvUpdater + + Cannot open your default browser. + + + + Feed download failed: %1. + + + + Feed parsing failed: %1 %2. + + + + No updates were found. + + + + Feed error: invalid "enclosure" with the download link + + + + Error + Eroare + + + Information + + InternalStrings @@ -4572,11 +4662,11 @@ Apply settings anyway? Stop - Stop + Stop Stop using tool - Nu mai folosii instrumentul + Nu mai folosii instrumentul Repot Bug... @@ -5252,10 +5342,6 @@ Do you want to save your changes? Select point of cubic bezier path - - Toolbar pointer - - Operations @@ -5264,10 +5350,6 @@ Do you want to save your changes? Create new group - - Groups - - Select one or more objects, <b>Enter</b> - finish creation @@ -5284,6 +5366,30 @@ Do you want to save your changes? Select one or more objects, <b>Enter</b> - confirm selection + + Tool pointer + + + + Midpoint between two points + + + + Group + + + + Contains all visibility groups + + + + Show which details will go in layout + + + + You can't use now the Layout mode. Please, include at least one detail in layout. + + MainWindowsNoGUI @@ -6356,6 +6462,10 @@ Do you want to save your changes? Invalid value + + Show in Finder + + TapeConfigDialog @@ -6478,6 +6588,13 @@ Do you want to save your changes? + + ToggleDetailInLayout + + detail in layout list + + + Utils::CheckableMessageBox @@ -7491,6 +7608,17 @@ Do you want to save your changes? + + VToolUnionDetails + + union details + + + + United detail + + + VTranslateVars @@ -8518,6 +8646,11 @@ Do you want to save your changes? Segment. Left symbol _ in the name + + CurrentLength + Do not add space between words + + VVITConverter @@ -8534,11 +8667,18 @@ Do you want to save your changes? - VWidgetGroups + VWidgetDetails Form + + Unnamed + + + + + VWidgetGroups Rename diff --git a/share/translations/valentina_ru_RU.ts b/share/translations/valentina_ru_RU.ts index 6fde7adee..fa2c61ce9 100644 --- a/share/translations/valentina_ru_RU.ts +++ b/share/translations/valentina_ru_RU.ts @@ -347,6 +347,10 @@ Built on %1 at %2 Собрано %1 в %2 + + Check For Updates + + DialogAboutTape @@ -386,6 +390,10 @@ Built on %1 at %2 Собрано %1 в %2 + + Check For Updates + + DialogAlongLine @@ -2913,6 +2921,26 @@ Apply settings anyway? untitled безымянный + + Path: + Путь: + + + Show in Explorer + Показать в файловом менеджере + + + <Empty> + <Пусто> + + + File was not saved yet. + Файл еще не был сохранен. + + + Show in Finder + + DialogPatternXmlEdit @@ -4373,6 +4401,68 @@ Apply settings anyway? <html><head/><body><p>Do you really want to unite details?</p></body></html> <html><head/><body><р>Вы действительно хотите объединить детали?</p></body></html> + + Retain original pieces + + + + + FvUpdateWindow + + Software Update + + + + A new version of %1 is available! + + + + %1 %2 is now available - you have %3. Would you like to download it now? + + + + Skip This Version + + + + Remind Me Later + + + + Get Update + + + + + FvUpdater + + Cannot open your default browser. + + + + Feed download failed: %1. + + + + Feed parsing failed: %1 %2. + + + + No updates were found. + + + + Feed error: invalid "enclosure" with the download link + + + + Error + Ошибка + + + Information + Информация + InternalStrings @@ -4732,11 +4822,11 @@ Apply settings anyway? Stop - Стоп + Стоп Stop using tool - Прекратить использование инструмента + Прекратить использование инструмента Repot Bug... @@ -5425,10 +5515,6 @@ Do you want to save your changes? Select point of cubic bezier path - - Toolbar pointer - - Operations @@ -5437,10 +5523,6 @@ Do you want to save your changes? Create new group - - Groups - - Select one or more objects, <b>Enter</b> - finish creation @@ -5457,6 +5539,30 @@ Do you want to save your changes? Select one or more objects, <b>Enter</b> - confirm selection + + Tool pointer + + + + Midpoint between two points + + + + Group + + + + Contains all visibility groups + + + + Show which details will go in layout + + + + You can't use now the Layout mode. Please, include at least one detail in layout. + + MainWindowsNoGUI @@ -6578,6 +6684,10 @@ Do you want to save your changes? Invalid value + + Show in Finder + + TapeConfigDialog @@ -6700,6 +6810,13 @@ Do you want to save your changes? Шаблоны + + ToggleDetailInLayout + + detail in layout list + + + Utils::CheckableMessageBox @@ -7811,6 +7928,17 @@ Do you want to save your changes? + + VToolUnionDetails + + union details + + + + United detail + + + VTranslateVars @@ -8905,6 +9033,11 @@ Do you want to save your changes? Segment. Left symbol _ in the name + + CurrentLength + Do not add space between words + + VVITConverter @@ -8929,11 +9062,18 @@ Do you want to save your changes? - VWidgetGroups + VWidgetDetails Form + + Unnamed + + + + + VWidgetGroups Rename diff --git a/share/translations/valentina_uk_UA.ts b/share/translations/valentina_uk_UA.ts index 327016d3a..ec2574cd2 100644 --- a/share/translations/valentina_uk_UA.ts +++ b/share/translations/valentina_uk_UA.ts @@ -347,6 +347,10 @@ Built on %1 at %2 Зібрано %1 в %2 + + Check For Updates + + DialogAboutTape @@ -386,6 +390,10 @@ Built on %1 at %2 Зібрано %1 в %2 + + Check For Updates + + DialogAlongLine @@ -2915,6 +2923,26 @@ Apply settings anyway? untitled без імені + + Path: + Шлях: + + + Show in Explorer + Показати в Провіднику + + + <Empty> + <Пусто> + + + File was not saved yet. + Файл ще не було збережено. + + + Show in Finder + + DialogPatternXmlEdit @@ -4375,6 +4403,68 @@ Apply settings anyway? <html><head/><body><p>Do you really want to unite details?</p></body></html> <html><head/><body><p>Чи ви справді хочете об'єднати деталі?</p></body></html> + + Retain original pieces + + + + + FvUpdateWindow + + Software Update + + + + A new version of %1 is available! + + + + %1 %2 is now available - you have %3. Would you like to download it now? + + + + Skip This Version + + + + Remind Me Later + + + + Get Update + + + + + FvUpdater + + Cannot open your default browser. + + + + Feed download failed: %1. + + + + Feed parsing failed: %1 %2. + + + + No updates were found. + + + + Feed error: invalid "enclosure" with the download link + + + + Error + Помилка + + + Information + Інформація + InternalStrings @@ -4734,11 +4824,11 @@ Apply settings anyway? Stop - Зупинити + Зупинити Stop using tool - Зупинити використання інструменту + Зупинити використання інструменту Repot Bug... @@ -5426,10 +5516,6 @@ Do you want to save your changes? Select point of cubic bezier path - - Toolbar pointer - - Operations @@ -5438,10 +5524,6 @@ Do you want to save your changes? Create new group - - Groups - - Select one or more objects, <b>Enter</b> - finish creation @@ -5458,6 +5540,30 @@ Do you want to save your changes? Select one or more objects, <b>Enter</b> - confirm selection + + Tool pointer + + + + Midpoint between two points + + + + Group + + + + Contains all visibility groups + + + + Show which details will go in layout + + + + You can't use now the Layout mode. Please, include at least one detail in layout. + + MainWindowsNoGUI @@ -6579,6 +6685,10 @@ Do you want to save your changes? Invalid value + + Show in Finder + + TapeConfigDialog @@ -6701,6 +6811,13 @@ Do you want to save your changes? Шаблони + + ToggleDetailInLayout + + detail in layout list + + + Utils::CheckableMessageBox @@ -7811,6 +7928,17 @@ Do you want to save your changes? + + VToolUnionDetails + + union details + + + + United detail + + + VTranslateVars @@ -8898,6 +9026,11 @@ Do you want to save your changes? Segment. Left symbol _ in the name + + CurrentLength + Do not add space between words + + VVITConverter @@ -8922,11 +9055,18 @@ Do you want to save your changes? - VWidgetGroups + VWidgetDetails Form + + Unnamed + + + + + VWidgetGroups Rename diff --git a/share/translations/valentina_zh_CN.ts b/share/translations/valentina_zh_CN.ts index ccfd1a61f..b80d3fde0 100644 --- a/share/translations/valentina_zh_CN.ts +++ b/share/translations/valentina_zh_CN.ts @@ -296,6 +296,10 @@ Built on %1 at %2 + + Check For Updates + + DialogAboutTape @@ -331,6 +335,10 @@ Built on %1 at %2 + + Check For Updates + + DialogAlongLine @@ -2441,6 +2449,26 @@ Apply settings anyway? untitled + + Path: + + + + Show in Explorer + + + + <Empty> + + + + File was not saved yet. + + + + Show in Finder + + DialogPatternXmlEdit @@ -3605,6 +3633,68 @@ Apply settings anyway? <html><head/><body><p>Do you really want to unite details?</p></body></html> + + Retain original pieces + + + + + FvUpdateWindow + + Software Update + + + + A new version of %1 is available! + + + + %1 %2 is now available - you have %3. Would you like to download it now? + + + + Skip This Version + + + + Remind Me Later + + + + Get Update + + + + + FvUpdater + + Cannot open your default browser. + + + + Feed download failed: %1. + + + + Feed parsing failed: %1 %2. + + + + No updates were found. + + + + Feed error: invalid "enclosure" with the download link + + + + Error + 错误 + + + Information + 信息 + InternalStrings @@ -3958,14 +4048,6 @@ Apply settings anyway? Zoom fit best - - Stop - - - - Stop using tool - - Report bug @@ -4632,10 +4714,6 @@ Do you want to save your changes? Select point of cubic bezier path - - Toolbar pointer - - Operations @@ -4644,10 +4722,6 @@ Do you want to save your changes? Create new group - - Groups - - Select one or more objects, <b>Enter</b> - finish creation @@ -4664,6 +4738,30 @@ Do you want to save your changes? Select one or more objects, <b>Enter</b> - confirm selection + + Tool pointer + + + + Midpoint between two points + + + + Group + + + + Contains all visibility groups + + + + Show which details will go in layout + + + + You can't use now the Layout mode. Please, include at least one detail in layout. + + MainWindowsNoGUI @@ -5740,6 +5838,10 @@ Do you want to save your changes? Invalid value + + Show in Finder + + TapeConfigDialog @@ -5858,6 +5960,13 @@ Do you want to save your changes? 草稿 + + ToggleDetailInLayout + + detail in layout list + + + Utils::CheckableMessageBox @@ -6871,6 +6980,17 @@ Do you want to save your changes? + + VToolUnionDetails + + union details + + + + United detail + + + VTranslateVars @@ -7898,6 +8018,11 @@ Do you want to save your changes? Segment. Left symbol _ in the name + + CurrentLength + Do not add space between words + + VVITConverter @@ -7914,11 +8039,18 @@ Do you want to save your changes? - VWidgetGroups + VWidgetDetails Form + + Unnamed + + + + + VWidgetGroups Rename diff --git a/src/app/tape/dialogs/configpages/tapeconfigurationpage.cpp b/src/app/tape/dialogs/configpages/tapeconfigurationpage.cpp index c218ba4d4..c34398fbd 100644 --- a/src/app/tape/dialogs/configpages/tapeconfigurationpage.cpp +++ b/src/app/tape/dialogs/configpages/tapeconfigurationpage.cpp @@ -49,13 +49,10 @@ TapeConfigurationPage::TapeConfigurationPage(QWidget *parent) langCombo(nullptr), systemCombo(nullptr), labelCombo(nullptr), - unitCombo(nullptr), osOptionCheck(nullptr), langChanged(false), systemChanged(false), defGradationChanged(false), - unitChanged(false), - labelLangChanged(false), sendReportCheck(nullptr), askPointDeletionCheck(nullptr), toolBarStyleCheck(nullptr), @@ -118,49 +115,6 @@ void TapeConfigurationPage::Apply() } } -//--------------------------------------------------------------------------------------------------------------------- -void TapeConfigurationPage::LangChanged() -{ - langChanged = true; -} - -//--------------------------------------------------------------------------------------------------------------------- -void TapeConfigurationPage::SystemChanged() -{ - systemChanged = true; -#if QT_VERSION < QT_VERSION_CHECK(5, 2, 0) - QString text = qApp->TrVars()->PMSystemAuthor(systemCombo->itemData(systemCombo->currentIndex()).toString()); -#else - QString text = qApp->TrVars()->PMSystemAuthor(systemCombo->currentData().toString()); -#endif - systemAuthorValueLabel->setText(text); - systemAuthorValueLabel->setToolTip(text); -#if QT_VERSION < QT_VERSION_CHECK(5, 2, 0) - text = qApp->TrVars()->PMSystemBook(systemCombo->itemData(systemCombo->currentIndex()).toString()); -#else - text = qApp->TrVars()->PMSystemBook(systemCombo->currentData().toString()); -#endif - systemBookValueLabel->setPlainText(text); -} - -//--------------------------------------------------------------------------------------------------------------------- -void TapeConfigurationPage::DefGradationChanged() -{ - defGradationChanged = true; -} - -//--------------------------------------------------------------------------------------------------------------------- -void TapeConfigurationPage::UnitChanged() -{ - this->unitChanged = true; -} - -//--------------------------------------------------------------------------------------------------------------------- -void TapeConfigurationPage::LabelLangChanged() -{ - labelLangChanged = true; -} - //--------------------------------------------------------------------------------------------------------------------- void TapeConfigurationPage::changeEvent(QEvent *event) { @@ -219,8 +173,10 @@ QGroupBox *TapeConfigurationPage::LangGroup() { langCombo->setCurrentIndex(index); } - connect(langCombo, static_cast(&QComboBox::currentIndexChanged), this, - &TapeConfigurationPage::LangChanged); + connect(langCombo, static_cast(&QComboBox::currentIndexChanged), [this]() + { + langChanged = true; + }); QFormLayout *langLayout = new QFormLayout; langLayout->setFieldGrowthPolicy(QFormLayout::ExpandingFieldsGrow); @@ -267,8 +223,23 @@ QGroupBox *TapeConfigurationPage::PMSystemGroup() pmSystemLayout->addRow(systemBookLabel, systemBookValueLabel); - connect(systemCombo, static_cast(&QComboBox::currentIndexChanged), this, - &TapeConfigurationPage::SystemChanged); + connect(systemCombo, static_cast(&QComboBox::currentIndexChanged), [this]() + { + systemChanged = true; + #if QT_VERSION < QT_VERSION_CHECK(5, 2, 0) + QString text = qApp->TrVars()->PMSystemAuthor(systemCombo->itemData(systemCombo->currentIndex()).toString()); + #else + QString text = qApp->TrVars()->PMSystemAuthor(systemCombo->currentData().toString()); + #endif + systemAuthorValueLabel->setText(text); + systemAuthorValueLabel->setToolTip(text); + #if QT_VERSION < QT_VERSION_CHECK(5, 2, 0) + text = qApp->TrVars()->PMSystemBook(systemCombo->itemData(systemCombo->currentIndex()).toString()); + #else + text = qApp->TrVars()->PMSystemBook(systemCombo->currentData().toString()); + #endif + systemBookValueLabel->setPlainText(text); + }); // set default pattern making system const VTapeSettings *settings = qApp->TapeSettings(); @@ -300,8 +271,14 @@ QGroupBox *TapeConfigurationPage::GradationGroup() { defHeightCombo->setCurrentIndex(index); } - connect(defHeightCombo, static_cast(&QComboBox::currentIndexChanged), this, - &TapeConfigurationPage::DefGradationChanged); + + auto DefGradationChanged = [this]() + { + defGradationChanged = true; + }; + + connect(defHeightCombo, static_cast(&QComboBox::currentIndexChanged), + DefGradationChanged); gradationLayout->addRow(defHeightLabel, defHeightCombo); @@ -314,7 +291,7 @@ QGroupBox *TapeConfigurationPage::GradationGroup() defSizeCombo->setCurrentIndex(index); } connect(defHeightCombo, static_cast(&QComboBox::currentIndexChanged), this, - &TapeConfigurationPage::DefGradationChanged); + DefGradationChanged); gradationLayout->addRow(defSizeLabel, defSizeCombo); gradationGroup->setLayout(gradationLayout); diff --git a/src/app/tape/dialogs/configpages/tapeconfigurationpage.h b/src/app/tape/dialogs/configpages/tapeconfigurationpage.h index b21760a67..f2aa0083c 100644 --- a/src/app/tape/dialogs/configpages/tapeconfigurationpage.h +++ b/src/app/tape/dialogs/configpages/tapeconfigurationpage.h @@ -45,12 +45,6 @@ class TapeConfigurationPage : public QWidget public: explicit TapeConfigurationPage(QWidget *parent = nullptr); void Apply(); -public slots: - void LangChanged(); - void SystemChanged(); - void DefGradationChanged(); - void UnitChanged(); - void LabelLangChanged(); protected: virtual void changeEvent(QEvent* event) Q_DECL_OVERRIDE; private: @@ -58,13 +52,10 @@ private: QComboBox *langCombo; QComboBox *systemCombo; QComboBox *labelCombo; - QComboBox *unitCombo; QCheckBox *osOptionCheck; bool langChanged; bool systemChanged; bool defGradationChanged; - bool unitChanged; - bool labelLangChanged; QCheckBox *sendReportCheck; QCheckBox *askPointDeletionCheck; QCheckBox *toolBarStyleCheck; diff --git a/src/app/tape/dialogs/configpages/tapepathpage.cpp b/src/app/tape/dialogs/configpages/tapepathpage.cpp index 389f81451..0aff9cf42 100644 --- a/src/app/tape/dialogs/configpages/tapepathpage.cpp +++ b/src/app/tape/dialogs/configpages/tapepathpage.cpp @@ -71,16 +71,6 @@ void TapePathPage::Apply() settings->SetPathTemplate(pathTable->item(2, 1)->text()); } -//--------------------------------------------------------------------------------------------------------------------- -void TapePathPage::TableActivated() -{ - defaultButton->setEnabled(true); - defaultButton->setDefault(false); - - editButton->setEnabled(true); - editButton->setDefault(true); -} - //--------------------------------------------------------------------------------------------------------------------- void TapePathPage::DefaultPath() { @@ -129,8 +119,8 @@ void TapePathPage::EditPath() default: break; } - QString dir = QFileDialog::getExistingDirectory(this, tr("Open Directory"), path, - QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks); + const QString dir = QFileDialog::getExistingDirectory(this, tr("Open Directory"), path, + QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks); if (dir.isEmpty()) { DefaultPath(); @@ -223,7 +213,14 @@ void TapePathPage::InitTable() pathTable->resizeRowsToContents(); pathTable->horizontalHeader()->setStretchLastSection(true); - connect(pathTable, &QTableWidget::itemSelectionChanged, this, &TapePathPage::TableActivated); + connect(pathTable, &QTableWidget::itemSelectionChanged, [this] + { + defaultButton->setEnabled(true); + defaultButton->setDefault(false); + + editButton->setEnabled(true); + editButton->setDefault(true); + }); } //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/app/tape/dialogs/configpages/tapepathpage.h b/src/app/tape/dialogs/configpages/tapepathpage.h index d6a2b75fe..89771d2a2 100644 --- a/src/app/tape/dialogs/configpages/tapepathpage.h +++ b/src/app/tape/dialogs/configpages/tapepathpage.h @@ -42,12 +42,11 @@ class TapePathPage : public QWidget public: explicit TapePathPage(QWidget *parent = nullptr); void Apply(); -public slots: - void TableActivated(); - void DefaultPath(); - void EditPath(); protected: virtual void changeEvent(QEvent* event) Q_DECL_OVERRIDE; +private slots: + void DefaultPath(); + void EditPath(); private: Q_DISABLE_COPY(TapePathPage) QPushButton *defaultButton; diff --git a/src/app/tape/dialogs/dialogabouttape.cpp b/src/app/tape/dialogs/dialogabouttape.cpp index 841d0c9f1..b3f45edd9 100644 --- a/src/app/tape/dialogs/dialogabouttape.cpp +++ b/src/app/tape/dialogs/dialogabouttape.cpp @@ -30,6 +30,7 @@ #include "ui_dialogabouttape.h" #include "../version.h" #include "../vmisc/def.h" +#include "../fervor/fvupdater.h" #include #include @@ -49,8 +50,17 @@ DialogAboutTape::DialogAboutTape(QWidget *parent) //mApp->Settings()->GetOsSeparator() ? setLocale(QLocale::system()) : setLocale(QLocale(QLocale::C)); RetranslateUi(); - connect(ui->pushButton_Web_Site, &QPushButton::clicked, this, &DialogAboutTape::WebButtonClicked); + connect(ui->pushButton_Web_Site, &QPushButton::clicked, [this]() + { + if ( QDesktopServices::openUrl(QUrl(VER_COMPANYDOMAIN_STR)) == false) + { + qWarning() << tr("Cannot open your default browser"); + } + }); connect(ui->buttonBox, &QDialogButtonBox::accepted, this, &DialogAboutTape::close); + connect(ui->pushButtonCheckUpdate, &QPushButton::clicked, [](){ + FvUpdater::sharedUpdater()->CheckForUpdatesNotSilent(); + }); // By default on Windows font point size 8 points we need 11 like on Linux. FontPointSize(ui->label_Legal_Stuff, 11); @@ -99,15 +109,6 @@ void DialogAboutTape::showEvent(QShowEvent *event) isInitialized = true;//first show windows are held } -//--------------------------------------------------------------------------------------------------------------------- -void DialogAboutTape::WebButtonClicked() -{ - if ( QDesktopServices::openUrl(QUrl(VER_COMPANYDOMAIN_STR)) == false) - { - qWarning() << tr("Cannot open your default browser"); - } -} - //--------------------------------------------------------------------------------------------------------------------- void DialogAboutTape::FontPointSize(QWidget *w, int pointSize) { diff --git a/src/app/tape/dialogs/dialogabouttape.h b/src/app/tape/dialogs/dialogabouttape.h index 64039ed04..286f7e2af 100644 --- a/src/app/tape/dialogs/dialogabouttape.h +++ b/src/app/tape/dialogs/dialogabouttape.h @@ -31,8 +31,9 @@ #include -namespace Ui { -class DialogAboutTape; +namespace Ui +{ + class DialogAboutTape; } class DialogAboutTape : public QDialog @@ -40,16 +41,13 @@ class DialogAboutTape : public QDialog Q_OBJECT public: - explicit DialogAboutTape(QWidget *parent = 0); + explicit DialogAboutTape(QWidget *parent = nullptr); virtual ~DialogAboutTape(); protected: virtual void changeEvent(QEvent* event) Q_DECL_OVERRIDE; virtual void showEvent(QShowEvent *event) Q_DECL_OVERRIDE; -private slots: - void WebButtonClicked(); - private: Q_DISABLE_COPY(DialogAboutTape) Ui::DialogAboutTape *ui; diff --git a/src/app/tape/dialogs/dialogabouttape.ui b/src/app/tape/dialogs/dialogabouttape.ui index 5a00d3df0..e070f0d65 100644 --- a/src/app/tape/dialogs/dialogabouttape.ui +++ b/src/app/tape/dialogs/dialogabouttape.ui @@ -6,7 +6,7 @@ 0 0 - 559 + 376 320 @@ -248,20 +248,31 @@ - - - true - - - Qt::Horizontal - - - QDialogButtonBox::Ok - - - true - - + + + + + Check For Updates + + + + + + + true + + + Qt::Horizontal + + + QDialogButtonBox::Ok + + + false + + + + diff --git a/src/app/tape/dialogs/dialogexporttocsv.cpp b/src/app/tape/dialogs/dialogexporttocsv.cpp index eb11edb7c..b00b67bf1 100644 --- a/src/app/tape/dialogs/dialogexporttocsv.cpp +++ b/src/app/tape/dialogs/dialogexporttocsv.cpp @@ -57,7 +57,13 @@ DialogExportToCSV::DialogExportToCSV(QWidget *parent) QPushButton *bDefaults = ui->buttonBox->button(QDialogButtonBox::RestoreDefaults); SCASSERT(bDefaults != nullptr); - connect(bDefaults, &QPushButton::clicked, this, &DialogExportToCSV::RestoreDefaults); + connect(bDefaults, &QPushButton::clicked, [this]() + { + ui->checkBoxWithHeader->setChecked(qApp->TapeSettings()->GetDefCSVWithHeader()); + ui->comboBoxCodec->setCurrentIndex(ui->comboBoxCodec->findData(qApp->TapeSettings()->GetDefCSVCodec())); + + SetSeparator(qApp->TapeSettings()->GetDefCSVSeparator()); + }); } //--------------------------------------------------------------------------------------------------------------------- @@ -137,15 +143,6 @@ void DialogExportToCSV::showEvent(QShowEvent *event) isInitialized = true;//first show windows are held } -//--------------------------------------------------------------------------------------------------------------------- -void DialogExportToCSV::RestoreDefaults() -{ - ui->checkBoxWithHeader->setChecked(qApp->TapeSettings()->GetDefCSVWithHeader()); - ui->comboBoxCodec->setCurrentIndex(ui->comboBoxCodec->findData(qApp->TapeSettings()->GetDefCSVCodec())); - - SetSeparator(qApp->TapeSettings()->GetDefCSVSeparator()); -} - //--------------------------------------------------------------------------------------------------------------------- void DialogExportToCSV::SetSeparator(const QChar &separator) { diff --git a/src/app/tape/dialogs/dialogexporttocsv.h b/src/app/tape/dialogs/dialogexporttocsv.h index 3630ab57f..5c684d934 100644 --- a/src/app/tape/dialogs/dialogexporttocsv.h +++ b/src/app/tape/dialogs/dialogexporttocsv.h @@ -51,9 +51,6 @@ protected: virtual void changeEvent(QEvent* event) Q_DECL_OVERRIDE; virtual void showEvent(QShowEvent *event) Q_DECL_OVERRIDE; -private slots: - void RestoreDefaults(); - private: Q_DISABLE_COPY(DialogExportToCSV) Ui::DialogExportToCSV *ui; diff --git a/src/app/tape/dialogs/tapeconfigdialog.cpp b/src/app/tape/dialogs/tapeconfigdialog.cpp index cf60198e1..ca20cd121 100644 --- a/src/app/tape/dialogs/tapeconfigdialog.cpp +++ b/src/app/tape/dialogs/tapeconfigdialog.cpp @@ -70,7 +70,15 @@ TapeConfigDialog::TapeConfigDialog(QWidget *parent) okButton = new QPushButton(tr("&Ok")); createIcons(); - connect(contentsWidget, &QListWidget::currentItemChanged, this, &TapeConfigDialog::changePage); + connect(contentsWidget, &QListWidget::currentItemChanged, + [this](QListWidgetItem *current, QListWidgetItem *previous) + { + if (current == nullptr) + { + current = previous; + } + pagesWidget->setCurrentIndex(contentsWidget->row(current)); + }); contentsWidget->setCurrentRow(0); connect(cancelButton, &QPushButton::clicked, this, &TapeConfigDialog::close); @@ -100,16 +108,6 @@ TapeConfigDialog::TapeConfigDialog(QWidget *parent) qApp->TapeSettings()->GetOsSeparator() ? setLocale(QLocale::system()) : setLocale(QLocale(QLocale::C)); } -//--------------------------------------------------------------------------------------------------------------------- -void TapeConfigDialog::changePage(QListWidgetItem *current, QListWidgetItem *previous) -{ - if (current == nullptr) - { - current = previous; - } - pagesWidget->setCurrentIndex(contentsWidget->row(current)); -} - //--------------------------------------------------------------------------------------------------------------------- void TapeConfigDialog::closeEvent(QCloseEvent *event) { diff --git a/src/app/tape/dialogs/tapeconfigdialog.h b/src/app/tape/dialogs/tapeconfigdialog.h index 54e2f6ac8..b7367f216 100644 --- a/src/app/tape/dialogs/tapeconfigdialog.h +++ b/src/app/tape/dialogs/tapeconfigdialog.h @@ -42,15 +42,13 @@ class TapeConfigDialog : public QDialog Q_OBJECT public: explicit TapeConfigDialog(QWidget *parent = nullptr); -public slots: - void changePage(QListWidgetItem *current, QListWidgetItem *previous); signals: - void UpdateProperties(); + void UpdateProperties(); protected: - virtual void closeEvent(QCloseEvent *event) Q_DECL_OVERRIDE; - virtual void changeEvent(QEvent* event) Q_DECL_OVERRIDE; - virtual void showEvent(QShowEvent *event) Q_DECL_OVERRIDE; - virtual void resizeEvent(QResizeEvent *event) Q_DECL_OVERRIDE; + virtual void closeEvent(QCloseEvent *event) Q_DECL_OVERRIDE; + virtual void changeEvent(QEvent* event) Q_DECL_OVERRIDE; + virtual void showEvent(QShowEvent *event) Q_DECL_OVERRIDE; + virtual void resizeEvent(QResizeEvent *event) Q_DECL_OVERRIDE; private: Q_DISABLE_COPY(TapeConfigDialog) QListWidget *contentsWidget; diff --git a/src/app/tape/main.cpp b/src/app/tape/main.cpp index d1ef6b158..42e1d5e4f 100644 --- a/src/app/tape/main.cpp +++ b/src/app/tape/main.cpp @@ -28,6 +28,7 @@ #include "tmainwindow.h" #include "mapplication.h" +#include "../fervor/fvupdater.h" #include // For QT_REQUIRE_VERSION #include @@ -51,6 +52,9 @@ int main(int argc, char *argv[]) MApplication app(argc, argv); app.InitOptions(); + // Set feed URL before doing anything else + FvUpdater::sharedUpdater()->SetFeedURL(defaultFeedURL); + QTimer::singleShot(0, &app, SLOT(ProcessCMD())); return app.exec(); diff --git a/src/app/tape/mapplication.cpp b/src/app/tape/mapplication.cpp index a01addf1b..fd4b07c3e 100644 --- a/src/app/tape/mapplication.cpp +++ b/src/app/tape/mapplication.cpp @@ -79,25 +79,25 @@ inline void noisyFailureMsgHandler(QtMsgType type, const QMessageLogContext &con Q_UNUSED(context) // Why on earth didn't Qt want to make failed signal/slot connections qWarning? - if ((type == QtDebugMsg) && msg.contains("::connect")) + if ((type == QtDebugMsg) && msg.contains(QStringLiteral("::connect"))) { type = QtWarningMsg; } -#if !defined(V_NO_DEBUG) +#if !defined(V_NO_ASSERT) // I have decided to hide this annoing message for release builds. - if ((type == QtWarningMsg) && msg.contains("setGeometryDp: Unable to set geometry")) + if ((type == QtWarningMsg) && msg.contains(QStringLiteral("setGeometry: Unable to set geometry"))) { type = QtDebugMsg; } -#endif //!defined(V_NO_DEBUG) +#endif //!defined(V_NO_ASSERT) #if defined(Q_OS_MAC) # if QT_VERSION >= QT_VERSION_CHECK(5, 4, 0) && QT_VERSION < QT_VERSION_CHECK(5, 7, 0) // Try hide very annoying, Qt related, warnings in Mac OS X // QNSView mouseDragged: Internal mouse button tracking invalid (missing Qt::LeftButton) // https://bugreports.qt.io/browse/QTBUG-42846 - if ((type == QtWarningMsg) && msg.contains("QNSView")) + if ((type == QtWarningMsg) && msg.contains(QStringLiteral("QNSView"))) { type = QtDebugMsg; } @@ -106,7 +106,7 @@ inline void noisyFailureMsgHandler(QtMsgType type, const QMessageLogContext &con // Hide Qt bug 'Assertion when reading an icns file' // https://bugreports.qt.io/browse/QTBUG-45537 // Remove after Qt fix will be released - if ((type == QtWarningMsg) && msg.contains("QICNSHandler::read()")) + if ((type == QtWarningMsg) && msg.contains(QStringLiteral("QICNSHandler::read()"))) { type = QtDebugMsg; } @@ -115,7 +115,8 @@ inline void noisyFailureMsgHandler(QtMsgType type, const QMessageLogContext &con // this is another one that doesn't make sense as just a debug message. pretty serious // sign of a problem // http://www.developer.nokia.com/Community/Wiki/QPainter::begin:Paint_device_returned_engine_%3D%3D_0_(Known_Issue) - if ((type == QtDebugMsg) && msg.contains("QPainter::begin") && msg.contains("Paint device returned engine")) + if ((type == QtDebugMsg) && msg.contains(QStringLiteral("QPainter::begin")) + && msg.contains(QStringLiteral("Paint device returned engine"))) { type = QtWarningMsg; } @@ -123,8 +124,8 @@ inline void noisyFailureMsgHandler(QtMsgType type, const QMessageLogContext &con // This qWarning about "Cowardly refusing to send clipboard message to hung application..." // is something that can easily happen if you are debugging and the application is paused. // As it is so common, not worth popping up a dialog. - if ((type == QtWarningMsg) && QString(msg).contains("QClipboard::event") - && QString(msg).contains("Cowardly refusing")) + if ((type == QtWarningMsg) && msg.contains(QStringLiteral("QClipboard::event")) + && msg.contains(QStringLiteral("Cowardly refusing"))) { type = QtDebugMsg; } @@ -760,12 +761,6 @@ void MApplication::ProcessCMD() ParseCommandLine(SocketConnection::Client, arguments()); } -//--------------------------------------------------------------------------------------------------------------------- -void MApplication::OpenFile(const QString &path) -{ - MainWindow()->LoadFile(path); -} - //--------------------------------------------------------------------------------------------------------------------- void MApplication::NewLocalSocketConnection() { diff --git a/src/app/tape/mapplication.h b/src/app/tape/mapplication.h index 17cd27d84..af2d47641 100644 --- a/src/app/tape/mapplication.h +++ b/src/app/tape/mapplication.h @@ -60,6 +60,7 @@ public: virtual bool IsAppInGUIMode() const Q_DECL_OVERRIDE; TMainWindow *MainWindow(); QList MainWindows(); + TMainWindow *NewMainWindow(); void InitOptions(); @@ -77,7 +78,6 @@ public: void ParseCommandLine(const SocketConnection &connection, const QStringList &arguments); public slots: - TMainWindow *NewMainWindow(); void ProcessCMD(); protected: @@ -85,7 +85,6 @@ protected: virtual bool event(QEvent *e) Q_DECL_OVERRIDE; private slots: - void OpenFile(const QString &path); void NewLocalSocketConnection(); private: diff --git a/src/app/tape/tape.pro b/src/app/tape/tape.pro index a04fbeb47..8acecf751 100644 --- a/src/app/tape/tape.pro +++ b/src/app/tape/tape.pro @@ -200,7 +200,17 @@ unix{ # Some macx stuff QMAKE_MAC_SDK = macosx - QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.7 + # Check which minimal OSX version supports current Qt version + equals(QT_MAJOR_VERSION, 5):greaterThan(QT_MINOR_VERSION, 6) { + QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.8 + } else { + equals(QT_MAJOR_VERSION, 5):greaterThan(QT_MINOR_VERSION, 3) { + QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.7 + } else { + QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.6 + } + } + # Path to resources in app bundle #RESOURCES_DIR = "Contents/Resources" defined in translation.pri FRAMEWORKS_DIR = "Contents/Frameworks" @@ -257,46 +267,7 @@ $$enable_ccache() CONFIG(debug, debug|release){ # Debug mode unix { - #Turn on compilers warnings. - *-g++{ - QMAKE_CXXFLAGS += \ - # Key -isystem disable checking errors in system headers. - -isystem "$${OUT_PWD}/$${UI_DIR}" \ - -isystem "$${OUT_PWD}/$${MOC_DIR}" \ - -isystem "$${OUT_PWD}/$${RCC_DIR}" \ - $$GCC_DEBUG_CXXFLAGS # See common.pri for more details. - - noAddressSanitizer{ # For enable run qmake with CONFIG+=noAddressSanitizer - # do nothing - } else { - #gcc’s 4.8.0 Address Sanitizer - #http://blog.qt.digia.com/blog/2013/04/17/using-gccs-4-8-0-address-sanitizer-with-qt/ - QMAKE_CXXFLAGS += -fsanitize=address -fno-omit-frame-pointer - QMAKE_CFLAGS += -fsanitize=address -fno-omit-frame-pointer - QMAKE_LFLAGS += -fsanitize=address - } - } - clang*{ - QMAKE_CXXFLAGS += \ - # Key -isystem disable checking errors in system headers. - -isystem "$${OUT_PWD}/$${UI_DIR}" \ - -isystem "$${OUT_PWD}/$${MOC_DIR}" \ - -isystem "$${OUT_PWD}/$${RCC_DIR}" \ - $$CLANG_DEBUG_CXXFLAGS # See common.pri for more details. - - # -isystem key works only for headers. In some cases it's not enough. But we can't delete this warnings and - # want them in global list. Compromise decision delete them from local list. - QMAKE_CXXFLAGS -= \ - -Wundefined-reinterpret-cast \ - -Wmissing-prototypes # rcc folder - } - *-icc-*{ - QMAKE_CXXFLAGS += \ - -isystem "$${OUT_PWD}/$${UI_DIR}" \ - -isystem "$${OUT_PWD}/$${MOC_DIR}" \ - -isystem "$${OUT_PWD}/$${RCC_DIR}" \ - $$ICC_DEBUG_CXXFLAGS - } + include(warnings.pri) } else { *-g++{ QMAKE_CXXFLAGS += $$GCC_DEBUG_CXXFLAGS # See common.pri for more details. @@ -311,6 +282,10 @@ CONFIG(debug, debug|release){ QMAKE_CXXFLAGS += -fno-omit-frame-pointer # Need for exchndl.dll } + checkWarnings{ + unix:include(warnings.pri) + } + noDebugSymbols{ # For enable run qmake with CONFIG+=noDebugSymbols DEFINES += V_NO_DEBUG } else { @@ -401,6 +376,15 @@ 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 +# Fervor static library (depend on VMisc, IFC) +unix|win32: LIBS += -L$$OUT_PWD/../../libs/fervor/$${DESTDIR}/ -lfervor + +INCLUDEPATH += $$PWD/../../libs/fervor +DEPENDPATH += $$PWD/../../libs/fervor + +win32:!win32-g++: PRE_TARGETDEPS += $$OUT_PWD/../../libs/fervor/$${DESTDIR}/fervor.lib +else:unix|win32-g++: PRE_TARGETDEPS += $$OUT_PWD/../../libs/fervor/$${DESTDIR}/libfervor.a + #VMisc static library unix|win32: LIBS += -L$$OUT_PWD/../../libs/vmisc/$${DESTDIR}/ -lvmisc diff --git a/src/app/tape/tmainwindow.cpp b/src/app/tape/tmainwindow.cpp index 1ab6241e6..1a632e3be 100644 --- a/src/app/tape/tmainwindow.cpp +++ b/src/app/tape/tmainwindow.cpp @@ -462,6 +462,13 @@ void TMainWindow::CreateFromExisting() } } +//--------------------------------------------------------------------------------------------------------------------- +void TMainWindow::Preferences() +{ + TapeConfigDialog dlg(this); + dlg.exec(); +} + //--------------------------------------------------------------------------------------------------------------------- void TMainWindow::closeEvent(QCloseEvent *event) { @@ -750,7 +757,7 @@ void TMainWindow::AboutToShowWindowMenu() } //--------------------------------------------------------------------------------------------------------------------- -void TMainWindow::ShowWindow() +void TMainWindow::ShowWindow() const { if (QAction *action = qobject_cast(sender())) { @@ -758,27 +765,13 @@ void TMainWindow::ShowWindow() if (v.canConvert()) { const int offset = qvariant_cast(v); - QList windows = qApp->MainWindows(); + const QList windows = qApp->MainWindows(); windows.at(offset)->raise(); windows.at(offset)->activateWindow(); } } } -//--------------------------------------------------------------------------------------------------------------------- -void TMainWindow::AboutApplication() -{ - DialogAboutTape * aboutDialog = new DialogAboutTape(this); - aboutDialog->setAttribute(Qt::WA_DeleteOnClose, true); - aboutDialog->show(); -} - -//--------------------------------------------------------------------------------------------------------------------- -void TMainWindow::AboutQt() -{ - QMessageBox::aboutQt(this, tr("About Qt")); -} - //--------------------------------------------------------------------------------------------------------------------- #if defined(Q_OS_MAC) void TMainWindow::AboutToShowDockMenu() @@ -1720,20 +1713,6 @@ void TMainWindow::SaveMFullName() } } -//--------------------------------------------------------------------------------------------------------------------- -void TMainWindow::NewWindow() -{ - qApp->NewMainWindow(); - qApp->MainWindow()->activateWindow(); -} - -//--------------------------------------------------------------------------------------------------------------------- -void TMainWindow::Preferences() -{ - TapeConfigDialog dlg(this); - dlg.exec(); -} - //--------------------------------------------------------------------------------------------------------------------- void TMainWindow::PatternUnitChanged(int index) { @@ -1767,7 +1746,17 @@ void TMainWindow::SetupMenu() for (int i = 0; i < MaxRecentFiles; ++i) { recentFileActs[i] = new QAction(this); - connect(recentFileActs[i], &QAction::triggered, this, &TMainWindow::OpenRecentFile); + connect(recentFileActs[i], &QAction::triggered, this, [this]() + { + if (auto action = qobject_cast(sender())) + { + const QString filePath = action->data().toString(); + if (not filePath.isEmpty()) + { + LoadFile(filePath); + } + } + }); ui->menuFile->insertAction(ui->actionPreferences, recentFileActs[i]); recentFileActs[i]->setVisible(false); } @@ -1798,8 +1787,13 @@ void TMainWindow::SetupMenu() AboutToShowWindowMenu(); // Help - connect(ui->actionAboutQt, &QAction::triggered, this, &TMainWindow::AboutQt); - connect(ui->actionAboutTape, &QAction::triggered, this, &TMainWindow::AboutApplication); + connect(ui->actionAboutQt, &QAction::triggered, [this](){QMessageBox::aboutQt(this, tr("About Qt"));}); + connect(ui->actionAboutTape, &QAction::triggered, [this]() + { + DialogAboutTape *aboutDialog = new DialogAboutTape(this); + aboutDialog->setAttribute(Qt::WA_DeleteOnClose, true); + aboutDialog->show(); + }); //Actions for recent files loaded by a tape window application. UpdateRecentFileActions(); @@ -2011,7 +2005,7 @@ void TMainWindow::ShowHeaderUnits(QTableWidget *table, int column, const QString SCASSERT(table != nullptr); QString header = table->horizontalHeaderItem(column)->text(); - const int index = header.indexOf(QLatin1Literal("(")); + const int index = header.indexOf(QLatin1String("(")); if (index != -1) { header.remove(index-1, 100); @@ -2035,7 +2029,7 @@ void TMainWindow::SetCurrentFile(const QString &fileName) if (curFile.isEmpty()) { shownName = tr("untitled"); - mType == MeasurementsType::Standard ? shownName += QLatin1Literal(".vst") : shownName += QLatin1Literal(".vit"); + mType == MeasurementsType::Standard ? shownName += QLatin1String(".vst") : shownName += QLatin1String(".vit"); ui->lineEditPathToFile->setText(tr("")); ui->lineEditPathToFile->setToolTip(tr("File was not saved yet.")); ui->lineEditPathToFile->setCursorPosition(0); @@ -2064,7 +2058,7 @@ void TMainWindow::SetCurrentFile(const QString &fileName) #if defined(Q_OS_MAC) static QIcon fileIcon = QIcon(QApplication::applicationDirPath() + - QLatin1Literal("/../Resources/measurements.icns")); + QLatin1String("/../Resources/measurements.icns")); QIcon icon; if (not curFile.isEmpty()) { @@ -2765,11 +2759,16 @@ void TMainWindow::CreateWindowMenu(QMenu *menu) { SCASSERT(menu != nullptr); - QAction *action = menu->addAction(tr("&New Window"), this, SLOT(NewWindow())); + QAction *action = menu->addAction(tr("&New Window")); + connect(action, &QAction::triggered, [this]() + { + qApp->NewMainWindow(); + qApp->MainWindow()->activateWindow(); + }); action->setMenuRole(QAction::NoRole); menu->addSeparator(); - QList windows = qApp->MainWindows(); + const QList windows = qApp->MainWindows(); for (int i = 0; i < windows.count(); ++i) { TMainWindow *window = windows.at(i); @@ -2792,19 +2791,6 @@ void TMainWindow::CreateWindowMenu(QMenu *menu) } } -//--------------------------------------------------------------------------------------------------------------------- -void TMainWindow::OpenRecentFile() -{ - if (auto action=qobject_cast(sender())) - { - const QString filePath = action->data().toString(); - if (not filePath.isEmpty()) - { - LoadFile(filePath); - } - } -} - //--------------------------------------------------------------------------------------------------------------------- bool TMainWindow::IgnoreLocking(int error, const QString &path) { diff --git a/src/app/tape/tmainwindow.h b/src/app/tape/tmainwindow.h index 93fd342e5..c9a5eb8ae 100644 --- a/src/app/tape/tmainwindow.h +++ b/src/app/tape/tmainwindow.h @@ -62,14 +62,7 @@ public: void SetBaseMSize(int size); void SetPUnit(Unit unit); -public slots: bool LoadFile(const QString &path); - void FileNew(); - void OpenIndividual(); - void OpenStandard(); - void OpenTemplate(); - void CreateFromExisting(); - void OpenRecentFile(); protected: virtual void closeEvent(QCloseEvent *event) Q_DECL_OVERRIDE; @@ -77,13 +70,18 @@ protected: virtual void showEvent(QShowEvent *event) Q_DECL_OVERRIDE; private slots: + void FileNew(); + void OpenIndividual(); + void OpenStandard(); + void OpenTemplate(); + void CreateFromExisting(); + void Preferences(); + void FileSave(); void FileSaveAs(); void ExportToCSV(); void AboutToShowWindowMenu(); - void ShowWindow(); - void AboutApplication(); - void AboutQt(); + void ShowWindow() const; #if defined(Q_OS_MAC) void AboutToShowDockMenu(); @@ -125,8 +123,6 @@ private slots: void SaveMDescription(); void SaveMFullName(); - void NewWindow(); - void Preferences(); void PatternUnitChanged(int index); private: diff --git a/src/app/tape/warnings.pri b/src/app/tape/warnings.pri new file mode 100644 index 000000000..9a4697481 --- /dev/null +++ b/src/app/tape/warnings.pri @@ -0,0 +1,54 @@ +#Turn on compilers warnings. +*-g++{ + QMAKE_CXXFLAGS += \ + # Key -isystem disable checking errors in system headers. + -isystem "$${OUT_PWD}/$${UI_DIR}" \ + -isystem "$${OUT_PWD}/$${MOC_DIR}" \ + -isystem "$${OUT_PWD}/$${RCC_DIR}" \ + $$GCC_DEBUG_CXXFLAGS # See common.pri for more details. + + checkWarnings{ # For enable run qmake with CONFIG+=checkWarnings + QMAKE_CXXFLAGS += -Werror + } + + noAddressSanitizer{ # For enable run qmake with CONFIG+=noAddressSanitizer + # do nothing + } else { + #gcc’s 4.8.0 Address Sanitizer + #http://blog.qt.digia.com/blog/2013/04/17/using-gccs-4-8-0-address-sanitizer-with-qt/ + QMAKE_CXXFLAGS += -fsanitize=address -fno-omit-frame-pointer + QMAKE_CFLAGS += -fsanitize=address -fno-omit-frame-pointer + QMAKE_LFLAGS += -fsanitize=address + } +} + +clang*{ + QMAKE_CXXFLAGS += \ + # Key -isystem disable checking errors in system headers. + -isystem "$${OUT_PWD}/$${UI_DIR}" \ + -isystem "$${OUT_PWD}/$${MOC_DIR}" \ + -isystem "$${OUT_PWD}/$${RCC_DIR}" \ + $$CLANG_DEBUG_CXXFLAGS # See common.pri for more details. + + checkWarnings{ # For enable run qmake with CONFIG+=checkWarnings + QMAKE_CXXFLAGS += -Werror + } + + # -isystem key works only for headers. In some cases it's not enough. But we can't delete this warnings and + # want them in global list. Compromise decision delete them from local list. + QMAKE_CXXFLAGS -= \ + -Wundefined-reinterpret-cast \ + -Wmissing-prototypes # rcc folder +} + +*-icc-*{ + QMAKE_CXXFLAGS += \ + -isystem "$${OUT_PWD}/$${UI_DIR}" \ + -isystem "$${OUT_PWD}/$${MOC_DIR}" \ + -isystem "$${OUT_PWD}/$${RCC_DIR}" \ + $$ICC_DEBUG_CXXFLAGS + + checkWarnings{ # For enable run qmake with CONFIG+=checkWarnings + QMAKE_CXXFLAGS += -Werror + } +} diff --git a/src/app/valentina/core/vapplication.cpp b/src/app/valentina/core/vapplication.cpp index a50edb882..a263c0b5f 100644 --- a/src/app/valentina/core/vapplication.cpp +++ b/src/app/valentina/core/vapplication.cpp @@ -75,25 +75,25 @@ Q_DECL_CONSTEXPR auto DAYS_TO_KEEP_LOGS = 3; inline void noisyFailureMsgHandler(QtMsgType type, const QMessageLogContext &context, const QString &msg) { // Why on earth didn't Qt want to make failed signal/slot connections qWarning? - if ((type == QtDebugMsg) && msg.contains("::connect")) + if ((type == QtDebugMsg) && msg.contains(QStringLiteral("::connect"))) { type = QtWarningMsg; } -#if !defined(V_NO_DEBUG) +#if !defined(V_NO_ASSERT) // I have decided to hide this annoing message for release builds. - if ((type == QtWarningMsg) && msg.contains("setGeometryDp: Unable to set geometry")) + if ((type == QtWarningMsg) && msg.contains(QStringLiteral("setGeometry: Unable to set geometry"))) { type = QtDebugMsg; } -#endif //!defined(V_NO_DEBUG) +#endif //!defined(V_NO_ASSERT) #if defined(Q_OS_MAC) # if QT_VERSION >= QT_VERSION_CHECK(5, 4, 0) && QT_VERSION < QT_VERSION_CHECK(5, 7, 0) // Try hide very annoying, Qt related, warnings in Mac OS X // QNSView mouseDragged: Internal mouse button tracking invalid (missing Qt::LeftButton) // https://bugreports.qt.io/browse/QTBUG-42846 - if ((type == QtWarningMsg) && msg.contains("QNSView")) + if ((type == QtWarningMsg) && msg.contains(QStringLiteral("QNSView"))) { type = QtDebugMsg; } @@ -102,7 +102,7 @@ inline void noisyFailureMsgHandler(QtMsgType type, const QMessageLogContext &con // Hide Qt bug 'Assertion when reading an icns file' // https://bugreports.qt.io/browse/QTBUG-45537 // Remove after Qt fix will be released - if ((type == QtWarningMsg) && msg.contains("QICNSHandler::read()")) + if ((type == QtWarningMsg) && msg.contains(QStringLiteral("QICNSHandler::read()"))) { type = QtDebugMsg; } @@ -111,7 +111,8 @@ inline void noisyFailureMsgHandler(QtMsgType type, const QMessageLogContext &con // this is another one that doesn't make sense as just a debug message. pretty serious // sign of a problem // http://www.developer.nokia.com/Community/Wiki/QPainter::begin:Paint_device_returned_engine_%3D%3D_0_(Known_Issue) - if ((type == QtDebugMsg) && msg.contains("QPainter::begin") && msg.contains("Paint device returned engine")) + if ((type == QtDebugMsg) && msg.contains(QStringLiteral("QPainter::begin")) + && msg.contains(QStringLiteral("Paint device returned engine"))) { type = QtWarningMsg; } @@ -119,8 +120,8 @@ inline void noisyFailureMsgHandler(QtMsgType type, const QMessageLogContext &con // This qWarning about "Cowardly refusing to send clipboard message to hung application..." // is something that can easily happen if you are debugging and the application is paused. // As it is so common, not worth popping up a dialog. - if ((type == QtWarningMsg) && QString(msg).contains("QClipboard::event") - && QString(msg).contains("Cowardly refusing")) + if ((type == QtWarningMsg) && msg.contains(QStringLiteral("QClipboard::event")) + && msg.contains(QStringLiteral("Cowardly refusing"))) { type = QtDebugMsg; } @@ -132,7 +133,7 @@ inline void noisyFailureMsgHandler(QtMsgType type, const QMessageLogContext &con const bool isGuiThread = instance && (QThread::currentThread() == instance->thread()); { - QString debugdate = "[" + QDateTime::currentDateTime().toString("yyyy.MM.dd hh:mm:ss"); + QString debugdate = "[" + QDateTime::currentDateTime().toString(QStringLiteral("yyyy.MM.dd hh:mm:ss")); switch (type) { diff --git a/src/app/valentina/core/vtooloptionspropertybrowser.h b/src/app/valentina/core/vtooloptionspropertybrowser.h index e8ba646e1..2c69b5513 100644 --- a/src/app/valentina/core/vtooloptionspropertybrowser.h +++ b/src/app/valentina/core/vtooloptionspropertybrowser.h @@ -49,9 +49,10 @@ public: void ClearPropertyBrowser(); public slots: void itemClicked(QGraphicsItem *item); - void userChangedData(VPE::VProperty* property); void UpdateOptions(); void RefreshOptions(); +private slots: + void userChangedData(VPE::VProperty* property); private: Q_DISABLE_COPY(VToolOptionsPropertyBrowser) diff --git a/src/app/valentina/dialogs/configdialog.cpp b/src/app/valentina/dialogs/configdialog.cpp index 5ae67a90a..339107245 100644 --- a/src/app/valentina/dialogs/configdialog.cpp +++ b/src/app/valentina/dialogs/configdialog.cpp @@ -97,16 +97,6 @@ ConfigDialog::ConfigDialog(QWidget *parent) : qApp->Settings()->GetOsSeparator() ? setLocale(QLocale::system()) : setLocale(QLocale(QLocale::C)); } -//--------------------------------------------------------------------------------------------------------------------- -void ConfigDialog::changePage(QListWidgetItem *current, QListWidgetItem *previous) -{ - if (current == nullptr) - { - current = previous; - } - pagesWidget->setCurrentIndex(contentsWidget->row(current)); -} - //--------------------------------------------------------------------------------------------------------------------- void ConfigDialog::closeEvent(QCloseEvent *event) { @@ -177,7 +167,15 @@ void ConfigDialog::createIcons() createIcon("://icon/community_config.png", tr("Community")); createIcon("://icon/path_config.png", tr("Paths")); - connect(contentsWidget, &QListWidget::currentItemChanged, this, &ConfigDialog::changePage); + connect(contentsWidget, &QListWidget::currentItemChanged, + [this](QListWidgetItem *current, QListWidgetItem *previous) + { + if (current == nullptr) + { + current = previous; + } + pagesWidget->setCurrentIndex(contentsWidget->row(current)); + }); } //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/app/valentina/dialogs/configdialog.h b/src/app/valentina/dialogs/configdialog.h index f64321588..7f289a5e8 100644 --- a/src/app/valentina/dialogs/configdialog.h +++ b/src/app/valentina/dialogs/configdialog.h @@ -41,15 +41,13 @@ class ConfigDialog : public QDialog Q_OBJECT public: explicit ConfigDialog(QWidget *parent = nullptr); -public slots: - void changePage(QListWidgetItem *current, QListWidgetItem *previous); signals: - void UpdateProperties(); + void UpdateProperties(); protected: - virtual void closeEvent(QCloseEvent *event) Q_DECL_OVERRIDE; - virtual void changeEvent(QEvent* event) Q_DECL_OVERRIDE; - virtual void showEvent(QShowEvent *event) Q_DECL_OVERRIDE; - virtual void resizeEvent(QResizeEvent *event) Q_DECL_OVERRIDE; + virtual void closeEvent(QCloseEvent *event) Q_DECL_OVERRIDE; + virtual void changeEvent(QEvent* event) Q_DECL_OVERRIDE; + virtual void showEvent(QShowEvent *event) Q_DECL_OVERRIDE; + virtual void resizeEvent(QResizeEvent *event) Q_DECL_OVERRIDE; private: Q_DISABLE_COPY(ConfigDialog) QListWidget *contentsWidget; diff --git a/src/app/valentina/dialogs/configpages/pathpage.cpp b/src/app/valentina/dialogs/configpages/pathpage.cpp index d72a5c316..97128b929 100644 --- a/src/app/valentina/dialogs/configpages/pathpage.cpp +++ b/src/app/valentina/dialogs/configpages/pathpage.cpp @@ -70,16 +70,6 @@ void PathPage::Apply() settings->SetPathTemplate(pathTable->item(4, 1)->text()); } -//--------------------------------------------------------------------------------------------------------------------- -void PathPage::TableActivated() -{ - defaultButton->setEnabled(true); - defaultButton->setDefault(false); - - editButton->setEnabled(true); - editButton->setDefault(true); -} - //--------------------------------------------------------------------------------------------------------------------- void PathPage::DefaultPath() { @@ -243,7 +233,14 @@ void PathPage::InitTable() pathTable->resizeRowsToContents(); pathTable->horizontalHeader()->setStretchLastSection(true); - connect(pathTable, &QTableWidget::itemSelectionChanged, this, &PathPage::TableActivated); + connect(pathTable, &QTableWidget::itemSelectionChanged, [this]() + { + defaultButton->setEnabled(true); + defaultButton->setDefault(false); + + editButton->setEnabled(true); + editButton->setDefault(true); + }); } //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/app/valentina/dialogs/configpages/pathpage.h b/src/app/valentina/dialogs/configpages/pathpage.h index 9145a82aa..9bcedd9e5 100644 --- a/src/app/valentina/dialogs/configpages/pathpage.h +++ b/src/app/valentina/dialogs/configpages/pathpage.h @@ -42,12 +42,11 @@ class PathPage : public QWidget public: explicit PathPage(QWidget *parent = nullptr); void Apply(); -public slots: - void TableActivated(); - void DefaultPath(); - void EditPath(); protected: virtual void changeEvent(QEvent* event) Q_DECL_OVERRIDE; +private slots: + void DefaultPath(); + void EditPath(); private: Q_DISABLE_COPY(PathPage) QPushButton *defaultButton; diff --git a/src/app/valentina/dialogs/dialogaboutapp.cpp b/src/app/valentina/dialogs/dialogaboutapp.cpp index 7081726ff..e0cdeca31 100644 --- a/src/app/valentina/dialogs/dialogaboutapp.cpp +++ b/src/app/valentina/dialogs/dialogaboutapp.cpp @@ -35,6 +35,7 @@ #include #include "../options.h" #include "../core/vapplication.h" +#include "../fervor/fvupdater.h" //--------------------------------------------------------------------------------------------------------------------- DialogAboutApp::DialogAboutApp(QWidget *parent) : @@ -60,7 +61,17 @@ DialogAboutApp::DialogAboutApp(QWidget *parent) : ui->pushButton_Web_Site->setText(tr("Web site : %1").arg(VER_COMPANYDOMAIN_STR)); - connect(ui->pushButton_Web_Site, &QPushButton::clicked, this, &DialogAboutApp::webButtonClicked ); + connect(ui->pushButton_Web_Site, &QPushButton::clicked, [this]() + { + if ( QDesktopServices::openUrl(QUrl(VER_COMPANYDOMAIN_STR)) == false) + { + qWarning() << tr("Cannot open your default browser"); + } + }); + + connect(ui->pushButtonCheckUpdate, &QPushButton::clicked, [](){ + FvUpdater::sharedUpdater()->CheckForUpdatesNotSilent(); + }); // By default on Windows font point size 8 points we need 11 like on Linux. FontPointSize(ui->label_Legal_Stuff, 11); @@ -105,16 +116,3 @@ void DialogAboutApp::FontPointSize(QWidget *w, int pointSize) font.setPointSize(pointSize); w->setFont(font); } - -//--------------------------------------------------------------------------------------------------------------------- -/** - * @brief Fake button clicked - */ -void DialogAboutApp::webButtonClicked() -{ - if ( QDesktopServices::openUrl(QUrl(VER_COMPANYDOMAIN_STR)) == false) - { - qWarning() << tr("Cannot open your default browser"); - } - -} diff --git a/src/app/valentina/dialogs/dialogaboutapp.h b/src/app/valentina/dialogs/dialogaboutapp.h index 5e8ce6b17..e635be942 100644 --- a/src/app/valentina/dialogs/dialogaboutapp.h +++ b/src/app/valentina/dialogs/dialogaboutapp.h @@ -41,8 +41,8 @@ class DialogAboutApp : public QDialog Q_OBJECT public: - explicit DialogAboutApp(QWidget *parent = 0); - ~DialogAboutApp(); + explicit DialogAboutApp(QWidget *parent = nullptr); + virtual ~DialogAboutApp(); protected: virtual void showEvent(QShowEvent *event) Q_DECL_OVERRIDE; @@ -53,9 +53,6 @@ private: Q_DISABLE_COPY(DialogAboutApp) void FontPointSize(QWidget *w, int pointSize); - -private slots: - void webButtonClicked(); }; #endif // DIALOGABOUTAPP_H diff --git a/src/app/valentina/dialogs/dialogaboutapp.ui b/src/app/valentina/dialogs/dialogaboutapp.ui index 6b6ae2a24..dfa407174 100644 --- a/src/app/valentina/dialogs/dialogaboutapp.ui +++ b/src/app/valentina/dialogs/dialogaboutapp.ui @@ -294,20 +294,31 @@ Bettina Gatzlaff - - - true - - - Qt::Horizontal - - - QDialogButtonBox::Ok - - - true - - + + + + + Check For Updates + + + + + + + true + + + Qt::Horizontal + + + QDialogButtonBox::Ok + + + false + + + + diff --git a/src/app/valentina/dialogs/dialoghistory.cpp b/src/app/valentina/dialogs/dialoghistory.cpp index 45dff4255..097235731 100644 --- a/src/app/valentina/dialogs/dialoghistory.cpp +++ b/src/app/valentina/dialogs/dialoghistory.cpp @@ -59,7 +59,7 @@ DialogHistory::DialogHistory(VContainer *data, VPattern *doc, QWidget *parent) FillTable(); InitialTable(); connect(ui->tableWidget, &QTableWidget::cellClicked, this, &DialogHistory::cellClicked); - connect(this, &DialogHistory::ShowHistoryTool, doc, &VPattern::ShowHistoryTool); + connect(this, &DialogHistory::ShowHistoryTool, [doc](quint32 id, bool enable){emit doc->ShowTool(id, enable);}); connect(doc, &VPattern::ChangedCursor, this, &DialogHistory::ChangedCursor); connect(doc, &VPattern::patternChanged, this, &DialogHistory::UpdateHistory); ShowPoint(); @@ -99,9 +99,9 @@ void DialogHistory::cellClicked(int row, int column) item = ui->tableWidget->item(row, 0); cursorRow = row; item->setIcon(QIcon("://icon/32x32/put_after.png")); - quint32 id = qvariant_cast(item->data(Qt::UserRole)); + const quint32 id = qvariant_cast(item->data(Qt::UserRole)); doc->blockSignals(true); - doc->setCursor(id); + row == ui->tableWidget->rowCount()-1 ? doc->setCursor(0) : doc->setCursor(id); doc->blockSignals(false); } else @@ -185,7 +185,7 @@ void DialogHistory::FillTable() ui->tableWidget->setRowCount(count);//Real row count if (count>0) { - cursorRow = currentRow; + cursorRow = CursorRow(); QTableWidgetItem *item = ui->tableWidget->item(cursorRow, 0); SCASSERT(item != nullptr); item->setIcon(QIcon("://icon/32x32/put_after.png")); @@ -232,35 +232,35 @@ QString DialogHistory::Record(const VToolRecord &tool) Q_UNREACHABLE(); //-V501 break; case Tool::BasePoint: - return QString(tr("%1 - Base point")).arg(PointName(tool.getId())); + return tr("%1 - Base point").arg(PointName(tool.getId())); case Tool::EndLine: - return QString(tr("%1_%2 - Line from point %1 to point %2")) + return tr("%1_%2 - Line from point %1 to point %2") .arg(PointName(AttrUInt(domElem, AttrBasePoint))) .arg(PointName(tool.getId())); case Tool::Line: - return QString(tr("%1_%2 - Line from point %1 to point %2")) + return tr("%1_%2 - Line from point %1 to point %2") .arg(PointName(AttrUInt(domElem, AttrFirstPoint))) .arg(PointName(AttrUInt(domElem, AttrSecondPoint))); case Tool::AlongLine: - return QString(tr("%3 - Point along line %1_%2")) + return tr("%3 - Point along line %1_%2") .arg(PointName(AttrUInt(domElem, AttrFirstPoint))) .arg(PointName(AttrUInt(domElem, AttrSecondPoint))) .arg(PointName(tool.getId())); case Tool::ShoulderPoint: - return QString(tr("%1 - Point of shoulder")).arg(PointName(tool.getId())); + return tr("%1 - Point of shoulder").arg(PointName(tool.getId())); case Tool::Normal: - return QString(tr("%3 - normal to line %1_%2")) + return tr("%3 - normal to line %1_%2") .arg(PointName(AttrUInt(domElem, AttrFirstPoint))) .arg(PointName(AttrUInt(domElem, AttrSecondPoint))) .arg(PointName(tool.getId())); case Tool::Bisector: - return QString(tr("%4 - bisector of angle %1_%2_%3")) + return tr("%4 - bisector of angle %1_%2_%3") .arg(PointName(AttrUInt(domElem, AttrFirstPoint))) .arg(PointName(AttrUInt(domElem, AttrSecondPoint))) .arg(PointName(AttrUInt(domElem, AttrThirdPoint))) .arg(PointName(tool.getId())); case Tool::LineIntersect: - return QString(tr("%5 - intersection of lines %1_%2 and %3_%4")) + return tr("%5 - intersection of lines %1_%2 and %3_%4") .arg(PointName(AttrUInt(domElem, AttrP1Line1))) .arg(PointName(AttrUInt(domElem, AttrP2Line1))) .arg(PointName(AttrUInt(domElem, AttrP1Line2))) @@ -288,7 +288,7 @@ QString DialogHistory::Record(const VToolRecord &tool) { const QSharedPointer arc = data->GeometricObject(tool.getId()); SCASSERT(arc != nullptr); - return QString(tr("%1 with length %2")) + return tr("%1 with length %2") .arg(arc->NameForHistory(tr("Arc"))) .arg(arc->GetLength()); } @@ -305,24 +305,24 @@ QString DialogHistory::Record(const VToolRecord &tool) return splPath->NameForHistory(tr("Cubic bezier curve path")); } case Tool::PointOfContact: - return QString(tr("%4 - point of contact of arc with the center in point %1 and line %2_%3")) + return tr("%4 - point of contact of arc with the center in point %1 and line %2_%3") .arg(PointName(AttrUInt(domElem, AttrCenter))) .arg(PointName(AttrUInt(domElem, AttrFirstPoint))) .arg(PointName(AttrUInt(domElem, AttrSecondPoint))) .arg(PointName(tool.getId())); case Tool::Height: - return QString(tr("Point of perpendicular from point %1 to line %2_%3")) + return tr("Point of perpendicular from point %1 to line %2_%3") .arg(PointName(AttrUInt(domElem, AttrBasePoint))) .arg(PointName(AttrUInt(domElem, AttrP1Line))) .arg(PointName(AttrUInt(domElem, AttrP2Line))); case Tool::Triangle: - return QString(tr("Triangle: axis %1_%2, points %3 and %4")) + return tr("Triangle: axis %1_%2, points %3 and %4") .arg(PointName(AttrUInt(domElem, AttrAxisP1))) .arg(PointName(AttrUInt(domElem, AttrAxisP2))) .arg(PointName(AttrUInt(domElem, AttrFirstPoint))) .arg(PointName(AttrUInt(domElem, AttrSecondPoint))); case Tool::PointOfIntersection: - return QString(tr("%1 - point of intersection %2 and %3")) + return tr("%1 - point of intersection %2 and %3") .arg(PointName(tool.getId())) .arg(PointName(AttrUInt(domElem, AttrFirstPoint))) .arg(PointName(AttrUInt(domElem, AttrSecondPoint))); @@ -330,7 +330,7 @@ QString DialogHistory::Record(const VToolRecord &tool) { const QSharedPointer arc = data->GeometricObject(AttrUInt(domElem, AttrArc)); SCASSERT(arc != nullptr); - return QString(tr("%1 - cut %2")) + return tr("%1 - cut %2") .arg(PointName(tool.getId())) .arg(arc->NameForHistory(tr("arc"))); } @@ -339,7 +339,7 @@ QString DialogHistory::Record(const VToolRecord &tool) const quint32 splineId = AttrUInt(domElem, VToolCutSpline::AttrSpline); const QSharedPointer spl = data->GeometricObject(splineId); SCASSERT(spl != nullptr); - return QString(tr("%1 - cut %2")) + return tr("%1 - cut %2") .arg(PointName(tool.getId())) .arg(spl->NameForHistory(tr("curve"))); } @@ -349,32 +349,32 @@ QString DialogHistory::Record(const VToolRecord &tool) const QSharedPointer splPath = data->GeometricObject(splinePathId); SCASSERT(splPath != nullptr); - return QString(tr("%1 - cut %2")) + return tr("%1 - cut %2") .arg(PointName(tool.getId())) .arg(splPath->NameForHistory(tr("curve path"))); } case Tool::LineIntersectAxis: - return QString(tr("%1 - point of intersection line %2_%3 and axis through point %4")) + return tr("%1 - point of intersection line %2_%3 and axis through point %4") .arg(PointName(tool.getId())) .arg(PointName(AttrUInt(domElem, AttrP1Line))) .arg(PointName(AttrUInt(domElem, AttrP2Line))) .arg(PointName(AttrUInt(domElem, AttrBasePoint))); case Tool::CurveIntersectAxis: - return QString(tr("%1 - point of intersection curve and axis through point %2")) + return tr("%1 - point of intersection curve and axis through point %2") .arg(PointName(tool.getId())) .arg(PointName(AttrUInt(domElem, AttrBasePoint))); case Tool::PointOfIntersectionArcs: - return QString(tr("%1 - point of arcs intersection")).arg(PointName(tool.getId())); + return tr("%1 - point of arcs intersection").arg(PointName(tool.getId())); case Tool::PointOfIntersectionCircles: - return QString(tr("%1 - point of circles intersection")).arg(PointName(tool.getId())); + return tr("%1 - point of circles intersection").arg(PointName(tool.getId())); case Tool::PointOfIntersectionCurves: - return QString(tr("%1 - point of curves intersection")).arg(PointName(tool.getId())); + return tr("%1 - point of curves intersection").arg(PointName(tool.getId())); case Tool::PointFromCircleAndTangent: - return QString(tr("%1 - point from circle and tangent")).arg(PointName(tool.getId())); + return tr("%1 - point from circle and tangent").arg(PointName(tool.getId())); case Tool::PointFromArcAndTangent: - return QString(tr("%1 - point from arc and tangent")).arg(PointName(tool.getId())); + return tr("%1 - point from arc and tangent").arg(PointName(tool.getId())); case Tool::TrueDarts: - return QString(tr("Correction the dart %1_%2_%3")) + return tr("Correction the dart %1_%2_%3") .arg(PointName(AttrUInt(domElem, AttrDartP1))) .arg(PointName(AttrUInt(domElem, AttrDartP2))) .arg(PointName(AttrUInt(domElem, AttrDartP2))); @@ -492,3 +492,24 @@ void DialogHistory::RetranslateUi() cursorRow = currentRow; cellClicked(cursorRow, 0); } + +//--------------------------------------------------------------------------------------------------------------------- +int DialogHistory::CursorRow() const +{ + const quint32 cursor = doc->getCursor(); + if (cursor == 0) + { + return ui->tableWidget->rowCount()-1; + } + + for (int i = 0; i < ui->tableWidget->rowCount(); ++i) + { + QTableWidgetItem *item = ui->tableWidget->item(i, 0); + const quint32 id = qvariant_cast(item->data(Qt::UserRole)); + if (cursor == id) + { + return i; + } + } + return ui->tableWidget->rowCount()-1; +} diff --git a/src/app/valentina/dialogs/dialoghistory.h b/src/app/valentina/dialogs/dialoghistory.h index e306f8ebf..fbe5bba14 100644 --- a/src/app/valentina/dialogs/dialoghistory.h +++ b/src/app/valentina/dialogs/dialoghistory.h @@ -91,6 +91,7 @@ private: QString PointName(quint32 pointId); quint32 AttrUInt(const QDomElement &domElement, const QString &name); void RetranslateUi(); + int CursorRow() const; }; #endif // DIALOGHISTORY_H diff --git a/src/app/valentina/dialogs/dialoglayoutprogress.cpp b/src/app/valentina/dialogs/dialoglayoutprogress.cpp index 0f236b912..d7de471bd 100644 --- a/src/app/valentina/dialogs/dialoglayoutprogress.cpp +++ b/src/app/valentina/dialogs/dialoglayoutprogress.cpp @@ -55,7 +55,7 @@ DialogLayoutProgress::DialogLayoutProgress(int count, QWidget *parent) QPushButton *bCancel = ui->buttonBox->button(QDialogButtonBox::Cancel); SCASSERT(bCancel != nullptr); - connect(bCancel, &QPushButton::clicked, this, &DialogLayoutProgress::StopWorking); + connect(bCancel, &QPushButton::clicked, [this](){emit Abort();}); setModal(true); this->setWindowFlags(Qt::Dialog | Qt::WindowTitleHint | Qt::CustomizeWindowHint); @@ -109,12 +109,6 @@ void DialogLayoutProgress::Finished() done(QDialog::Accepted); } -//--------------------------------------------------------------------------------------------------------------------- -void DialogLayoutProgress::StopWorking() -{ - emit Abort(); -} - //--------------------------------------------------------------------------------------------------------------------- void DialogLayoutProgress::showEvent(QShowEvent *event) { diff --git a/src/app/valentina/dialogs/dialoglayoutprogress.h b/src/app/valentina/dialogs/dialoglayoutprogress.h index 38eb0b96e..7f339e44f 100644 --- a/src/app/valentina/dialogs/dialoglayoutprogress.h +++ b/src/app/valentina/dialogs/dialoglayoutprogress.h @@ -54,7 +54,6 @@ public slots: void Arranged(int count); void Error(const LayoutErrors &state); void Finished(); - void StopWorking(); protected: virtual void showEvent(QShowEvent *event) Q_DECL_OVERRIDE; diff --git a/src/app/valentina/dialogs/dialoglayoutsettings.cpp b/src/app/valentina/dialogs/dialoglayoutsettings.cpp index b786d92b7..99e9ba304 100644 --- a/src/app/valentina/dialogs/dialoglayoutsettings.cpp +++ b/src/app/valentina/dialogs/dialoglayoutsettings.cpp @@ -43,11 +43,11 @@ //must be the same order as PaperSizeTemplate constants const DialogLayoutSettings::FormatsVector DialogLayoutSettings::pageFormatNames = - DialogLayoutSettings::FormatsVector () << QLatin1Literal("A0") - << QLatin1Literal("A1") - << QLatin1Literal("A2") - << QLatin1Literal("A3") - << QLatin1Literal("A4") + DialogLayoutSettings::FormatsVector () << QLatin1String("A0") + << QLatin1String("A1") + << QLatin1String("A2") + << QLatin1String("A3") + << QLatin1String("A4") << QApplication::translate("DialogLayoutSettings", "Letter") << QApplication::translate("DialogLayoutSettings", "Legal") << QApplication::translate("DialogLayoutSettings", "Roll 24in") diff --git a/src/app/valentina/dialogs/dialoglayoutsettings.h b/src/app/valentina/dialogs/dialoglayoutsettings.h index a3684a00b..c5d2ca605 100644 --- a/src/app/valentina/dialogs/dialoglayoutsettings.h +++ b/src/app/valentina/dialogs/dialoglayoutsettings.h @@ -122,17 +122,16 @@ public: protected: virtual void showEvent(QShowEvent *event) Q_DECL_OVERRIDE; public slots: + void DialogAccepted(); +private slots: void ConvertPaperSize(); void ConvertLayoutSize(); - void TemplateSelected(); void FindTemplate(); void PaperSizeChanged(); void Swap(bool checked); - - void DialogAccepted(); void RestoreDefaults(); -private slots: + void CorrectMaxFileds(); void IgnoreAllFields(int state); private: diff --git a/src/app/valentina/dialogs/dialognewpattern.h b/src/app/valentina/dialogs/dialognewpattern.h index aeb171b74..aeb81563f 100644 --- a/src/app/valentina/dialogs/dialognewpattern.h +++ b/src/app/valentina/dialogs/dialognewpattern.h @@ -45,13 +45,13 @@ class DialogNewPattern : public QDialog Q_OBJECT public: DialogNewPattern(VContainer *data, const QString &patternPieceName, QWidget *parent = nullptr); - ~DialogNewPattern(); + virtual ~DialogNewPattern(); QString name() const; Unit PatternUnit() const; -public slots: - void CheckState(); protected: virtual void showEvent(QShowEvent *event) Q_DECL_OVERRIDE; +private slots: + void CheckState(); private: Q_DISABLE_COPY(DialogNewPattern) Ui::DialogNewPattern *ui; diff --git a/src/app/valentina/dialogs/dialogpatternproperties.cpp b/src/app/valentina/dialogs/dialogpatternproperties.cpp index ed57b6819..373158a44 100644 --- a/src/app/valentina/dialogs/dialogpatternproperties.cpp +++ b/src/app/valentina/dialogs/dialogpatternproperties.cpp @@ -133,22 +133,27 @@ DialogPatternProperties::DialogPatternProperties(const QString &filePath, VPatte const QString size = QString().setNum(doc->GetDefCustomSize()); SetDefaultSize(size); - connect(ui->radioButtonDefFromP, &QRadioButton::toggled, this, &DialogPatternProperties::ToggleComboBox); - connect(ui->radioButtonDefFromP, &QRadioButton::toggled, this, &DialogPatternProperties::DefValueChanged); + connect(ui->radioButtonDefFromP, &QRadioButton::toggled, [this]() + { + ui->comboBoxHeight->setEnabled(ui->radioButtonDefFromP->isChecked()); + ui->comboBoxSize->setEnabled(ui->radioButtonDefFromP->isChecked()); + }); + + auto DefValueChanged = [this](){defaultChanged = true;}; + + connect(ui->radioButtonDefFromP, &QRadioButton::toggled, DefValueChanged); ui->radioButtonDefFromP->setChecked(doc->IsDefCustom()); - connect(ui->comboBoxHeight, static_cast(&QComboBox::currentIndexChanged), this, - &DialogPatternProperties::DefValueChanged); - connect(ui->comboBoxSize, static_cast(&QComboBox::currentIndexChanged), this, - &DialogPatternProperties::DefValueChanged); + connect(ui->comboBoxHeight, static_cast(&QComboBox::currentIndexChanged), + DefValueChanged); + connect(ui->comboBoxSize, static_cast(&QComboBox::currentIndexChanged), DefValueChanged); const bool readOnly = doc->IsReadOnly(); ui->checkBoxPatternReadOnly->setChecked(readOnly); if (not readOnly) { - connect(ui->checkBoxPatternReadOnly, &QRadioButton::toggled, this, - &DialogPatternProperties::SecurityValueChanged); + connect(ui->checkBoxPatternReadOnly, &QRadioButton::toggled, [this](){securityChanged = true;}); } else { @@ -359,25 +364,6 @@ void DialogPatternProperties::DescEdited() descriptionChanged = true; } -//--------------------------------------------------------------------------------------------------------------------- -void DialogPatternProperties::ToggleComboBox() -{ - ui->comboBoxHeight->setEnabled(ui->radioButtonDefFromP->isChecked()); - ui->comboBoxSize->setEnabled(ui->radioButtonDefFromP->isChecked()); -} - -//--------------------------------------------------------------------------------------------------------------------- -void DialogPatternProperties::DefValueChanged() -{ - defaultChanged = true; -} - -//--------------------------------------------------------------------------------------------------------------------- -void DialogPatternProperties::SecurityValueChanged() -{ - securityChanged = true; -} - //--------------------------------------------------------------------------------------------------------------------- void DialogPatternProperties::SetHeightsChecked(bool enabled) { @@ -642,17 +628,41 @@ void DialogPatternProperties::InitImage() { ui->imageLabel->setContextMenuPolicy(Qt::CustomContextMenu); ui->imageLabel->setScaledContents(true); - connect(ui->imageLabel, &QWidget::customContextMenuRequested, this, &DialogPatternProperties::ShowContextMenu); + connect(ui->imageLabel, &QWidget::customContextMenuRequested, [this]() + { + QMenu menu(this); + menu.addAction(deleteAction); + menu.addAction(changeImageAction); + menu.addAction(saveImageAction); + menu.addAction(showImageAction); + menu.exec(QCursor::pos()); + menu.show(); + }); deleteAction = new QAction(tr("Delete image"), this); changeImageAction = new QAction(tr("Change image"), this); saveImageAction = new QAction(tr("Save image to file"), this); showImageAction = new QAction(tr("Show image"), this); - connect(deleteAction, &QAction::triggered, this, &DialogPatternProperties::DeleteImage); + connect(deleteAction, &QAction::triggered, [this]() + { + doc->DeleteImage(); + ui->imageLabel->setText(tr("Change image")); + deleteAction->setEnabled(false); + saveImageAction->setEnabled(false); + showImageAction->setEnabled(false); + }); + connect(changeImageAction, &QAction::triggered, this, &DialogPatternProperties::ChangeImage); connect(saveImageAction, &QAction::triggered, this, &DialogPatternProperties::SaveImage); - connect(showImageAction, &QAction::triggered, this, &DialogPatternProperties::ShowImage); + connect(showImageAction, &QAction::triggered, [this]() + { + QLabel *label = new QLabel(this, Qt::Window); + const QImage image = GetImage(); + label->setPixmap(QPixmap::fromImage(image)); + label->setGeometry(QRect(QCursor::pos(), image.size())); + label->show(); + }); const QImage image = GetImage(); if (not image.isNull()) @@ -708,16 +718,6 @@ void DialogPatternProperties::ChangeImage() } } -//--------------------------------------------------------------------------------------------------------------------- -void DialogPatternProperties::DeleteImage() -{ - doc->DeleteImage(); - ui->imageLabel->setText(tr("Change image")); - deleteAction->setEnabled(false); - saveImageAction->setEnabled(false); - showImageAction->setEnabled(false); -} - //--------------------------------------------------------------------------------------------------------------------- void DialogPatternProperties::SaveImage() { @@ -741,25 +741,3 @@ void DialogPatternProperties::SaveImage() } } } - -//--------------------------------------------------------------------------------------------------------------------- -void DialogPatternProperties::ShowImage() -{ - QLabel *label = new QLabel(this, Qt::Window); - const QImage image = GetImage(); - label->setPixmap(QPixmap::fromImage(image)); - label->setGeometry(QRect(QCursor::pos(), image.size())); - label->show(); -} - -//--------------------------------------------------------------------------------------------------------------------- -void DialogPatternProperties::ShowContextMenu() -{ - QMenu menu(this); - menu.addAction(deleteAction); - menu.addAction(changeImageAction); - menu.addAction(saveImageAction); - menu.addAction(showImageAction); - menu.exec(QCursor::pos()); - menu.show(); -} diff --git a/src/app/valentina/dialogs/dialogpatternproperties.h b/src/app/valentina/dialogs/dialogpatternproperties.h index 9cac4d3fc..b3e2cc731 100644 --- a/src/app/valentina/dialogs/dialogpatternproperties.h +++ b/src/app/valentina/dialogs/dialogpatternproperties.h @@ -50,23 +50,16 @@ public: QWidget *parent = nullptr); virtual ~DialogPatternProperties() Q_DECL_OVERRIDE; signals: - void UpdateGradation(); -public slots: - void Apply(); - void Ok(); - void SelectAll(int state); - void CheckStateHeight(int state); - void CheckStateSize(int state); - void DescEdited(); - void ChangeImage(); - void ShowContextMenu(); + void UpdateGradation(); private slots: - void ToggleComboBox(); - void DefValueChanged(); - void SecurityValueChanged(); - void DeleteImage(); + void Apply(); + void Ok(); + void SelectAll(int state); + void CheckStateHeight(int state); + void CheckStateSize(int state); + void DescEdited(); + void ChangeImage(); void SaveImage(); - void ShowImage(); private: Q_DISABLE_COPY(DialogPatternProperties) Ui::DialogPatternProperties *ui; diff --git a/src/app/valentina/dialogs/dialogsavelayout.cpp b/src/app/valentina/dialogs/dialogsavelayout.cpp index e02c06fa1..3e6415850 100644 --- a/src/app/valentina/dialogs/dialogsavelayout.cpp +++ b/src/app/valentina/dialogs/dialogsavelayout.cpp @@ -67,7 +67,7 @@ DialogSaveLayout::DialogSaveLayout(int count, const QString &fileName, QWidget * ui->lineEditFileName->setValidator( new QRegExpValidator(QRegExp(baseFilenameRegExp), this)); #endif - const QString mask = fileName+QLatin1Literal("_"); + const QString mask = fileName+QLatin1String("_"); if (VApplication::IsGUIMode()) { ui->lineEditFileName->setText(mask); @@ -90,10 +90,17 @@ DialogSaveLayout::DialogSaveLayout(int count, const QString &fileName, QWidget * ui->comboBoxFormat->addItem(v.first, QVariant(v.second)); } connect(bOk, &QPushButton::clicked, this, &DialogSaveLayout::Save); - connect(ui->lineEditFileName, &QLineEdit::textChanged, this, &DialogSaveLayout::ShowExample); - connect(ui->comboBoxFormat, static_cast(&QComboBox::currentIndexChanged), this, - &DialogSaveLayout::ShowExample); - connect(ui->pushButtonBrowse, &QPushButton::clicked, this, &DialogSaveLayout::Browse); + + auto ShowExample = [this](){ui->labelExample->setText(tr("Example:") + FileName() + "1" + Formate());}; + + connect(ui->lineEditFileName, &QLineEdit::textChanged, ShowExample); + connect(ui->comboBoxFormat, static_cast(&QComboBox::currentIndexChanged), ShowExample); + connect(ui->pushButtonBrowse, &QPushButton::clicked, [this]() + { + const QString dir = QFileDialog::getExistingDirectory(this, tr("Select folder"), QDir::homePath(), + QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks); + ui->lineEditPath->setText(dir); + }); connect(ui->lineEditPath, &QLineEdit::textChanged, this, &DialogSaveLayout::PathChanged); ui->lineEditPath->setText(qApp->ValentinaSettings()->GetPathLayout()); @@ -210,20 +217,6 @@ void DialogSaveLayout::Save() accept(); } -//--------------------------------------------------------------------------------------------------------------------- -void DialogSaveLayout::ShowExample() -{ - ui->labelExample->setText(tr("Example:") + FileName() + "1" + Formate()); -} - -//--------------------------------------------------------------------------------------------------------------------- -void DialogSaveLayout::Browse() -{ - const QString dir = QFileDialog::getExistingDirectory(this, tr("Select folder"), QDir::homePath(), - QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks); - ui->lineEditPath->setText(dir); -} - //--------------------------------------------------------------------------------------------------------------------- void DialogSaveLayout::PathChanged(const QString &text) { @@ -306,15 +299,15 @@ bool DialogSaveLayout::TestPdf() QVector> DialogSaveLayout::InitAvailFormats() { QVector> list; - list.append(std::make_pair(tr("Svg files (*.svg)"), QLatin1Literal(".svg"))); - list.append(std::make_pair(tr("PDF files (*.pdf)"), QLatin1Literal(".pdf"))); - list.append(std::make_pair(tr("Images (*.png)"), QLatin1Literal(".png"))); - list.append(std::make_pair(tr("Wavefront OBJ (*.obj)"), QLatin1Literal(".obj"))); + list.append(std::make_pair(tr("Svg files (*.svg)"), QLatin1String(".svg"))); + list.append(std::make_pair(tr("PDF files (*.pdf)"), QLatin1String(".pdf"))); + list.append(std::make_pair(tr("Images (*.png)"), QLatin1String(".png"))); + list.append(std::make_pair(tr("Wavefront OBJ (*.obj)"), QLatin1String(".obj"))); if (SupportPSTest()) { - list.append(std::make_pair(tr("PS files (*.ps)"), QLatin1Literal(".ps"))); - list.append(std::make_pair(tr("EPS files (*.eps)"), QLatin1Literal(".eps"))); + list.append(std::make_pair(tr("PS files (*.ps)"), QLatin1String(".ps"))); + list.append(std::make_pair(tr("EPS files (*.eps)"), QLatin1String(".eps"))); } - list.append(std::make_pair(tr("DXF files (*.dxf)"), QLatin1Literal(".dxf"))); + list.append(std::make_pair(tr("DXF files (*.dxf)"), QLatin1String(".dxf"))); return list; } diff --git a/src/app/valentina/dialogs/dialogsavelayout.h b/src/app/valentina/dialogs/dialogsavelayout.h index 2d384e4b9..9a3739bb8 100644 --- a/src/app/valentina/dialogs/dialogsavelayout.h +++ b/src/app/valentina/dialogs/dialogsavelayout.h @@ -57,13 +57,11 @@ public: void SelectFormate(const int formate); static QString MakeHelpFormatList(); void SetDestinationPath(const QString& cmdDestinationPath); -public slots: - void Save(); - void ShowExample(); - void Browse(); - void PathChanged(const QString &text); protected: virtual void showEvent(QShowEvent *event) Q_DECL_OVERRIDE; +private slots: + void Save(); + void PathChanged(const QString &text); private: Q_DISABLE_COPY(DialogSaveLayout) Ui::DialogSaveLAyout *ui; diff --git a/src/app/valentina/main.cpp b/src/app/valentina/main.cpp index bdc2b26d0..353e33aae 100644 --- a/src/app/valentina/main.cpp +++ b/src/app/valentina/main.cpp @@ -28,6 +28,8 @@ #include "mainwindow.h" #include "core/vapplication.h" +#include "../fervor/fvupdater.h" + #include // For QT_REQUIRE_VERSION #include @@ -55,6 +57,15 @@ int main(int argc, char *argv[]) app.InitOptions(); + if (VApplication::IsGUIMode()) + { + // Set feed URL before doing anything else + FvUpdater::sharedUpdater()->SetFeedURL(defaultFeedURL); + + // Check for updates automatically + FvUpdater::sharedUpdater()->CheckForUpdatesSilent(); + } + MainWindow w; #if !defined(Q_OS_MAC) app.setWindowIcon(QIcon(":/icon/64x64/icon64x64.png")); diff --git a/src/app/valentina/mainwindow.cpp b/src/app/valentina/mainwindow.cpp index a7995d608..76077f3ee 100644 --- a/src/app/valentina/mainwindow.cpp +++ b/src/app/valentina/mainwindow.cpp @@ -137,10 +137,11 @@ MainWindow::MainWindow(QWidget *parent) doc = new VPattern(pattern, &mode, sceneDraw, sceneDetails); connect(doc, &VPattern::ClearMainWindow, this, &MainWindow::Clear); - connect(doc, &VPattern::patternChanged, this, &MainWindow::PatternWasModified); + connect(doc, &VPattern::patternChanged, this, &MainWindow::PatternChangesWereSaved); connect(doc, &VPattern::UndoCommand, this, &MainWindow::FullParseFile); connect(doc, &VPattern::SetEnabledGUI, this, &MainWindow::SetEnabledGUI); - connect(doc, &VPattern::CheckLayout, [this](){ + connect(doc, &VPattern::CheckLayout, [this]() + { if (pattern->DataDetails()->count() == 0) { if(not ui->actionDraw->isChecked()) @@ -163,7 +164,7 @@ MainWindow::MainWindow(QWidget *parent) ToolBarTools(); - connect(qApp->getUndoStack(), &QUndoStack::cleanChanged, this, &MainWindow::PatternWasModified); + connect(qApp->getUndoStack(), &QUndoStack::cleanChanged, this, &MainWindow::PatternChangesWereSaved); InitAutoSave(); @@ -178,11 +179,30 @@ MainWindow::MainWindow(QWidget *parent) ui->dockWidgetLayoutPages->setVisible(false); connect(watcher, &QFileSystemWatcher::fileChanged, this, &MainWindow::MeasurementsChanged); - connect(qApp, &QApplication::focusChanged, this, &MainWindow::OnWindowFocusChanged); + connect(qApp, &QApplication::focusChanged, [this](QWidget *old, QWidget *now) + { + if (old == nullptr && isAncestorOf(now) == true) + {// focus IN + if (mChanges && not mChangesAsked) + { + mChangesAsked = true; + const auto answer = QMessageBox::question(this, tr("Measurements"), + tr("Measurements was changed. Do you want to sync measurements now?"), + QMessageBox::Yes|QMessageBox::No, QMessageBox::Yes); + if (answer == QMessageBox::Yes) + { + SyncMeasurements(); + } + } + } + + // In case we will need it + // else if (isAncestorOf(old) == true && now == nullptr) + // focus OUT + }); #if defined(Q_OS_MAC) // On Mac deafault icon size is 32x32. - ui->toolBarArrows->setIconSize(QSize(24, 24)); ui->toolBarDraws->setIconSize(QSize(24, 24)); ui->toolBarOption->setIconSize(QSize(24, 24)); ui->toolBarStages->setIconSize(QSize(24, 24)); @@ -216,28 +236,6 @@ MainWindow::MainWindow(QWidget *parent) #endif //defined(Q_OS_MAC) } -//--------------------------------------------------------------------------------------------------------------------- -/** - * @brief ActionNewPP add to scene new pattern piece. - */ -void MainWindow::NewPP() -{ - qCDebug(vMainWindow, "New PP."); - QString patternPieceName = QString(tr("Pattern piece %1")).arg(comboBoxDraws->count()+1); - qCDebug(vMainWindow, "Generated PP name: %s", qUtf8Printable(patternPieceName)); - - qCDebug(vMainWindow, "PP count %d", comboBoxDraws->count()); - patternPieceName = PatternPieceName(patternPieceName); - qCDebug(vMainWindow, "PP name: %s", qUtf8Printable(patternPieceName)); - if (patternPieceName.isEmpty()) - { - qCDebug(vMainWindow, "Name empty."); - return; - } - - AddPP(patternPieceName); -} - //--------------------------------------------------------------------------------------------------------------------- void MainWindow::AddPP(const QString &PPName) { @@ -336,7 +334,7 @@ void MainWindow::InitScenes() connect(this, &MainWindow::EnableSplineHover, sceneDraw, &VMainGraphicsScene::ToggleSplineHover); connect(this, &MainWindow::EnableSplinePathHover, sceneDraw, &VMainGraphicsScene::ToggleSplinePathHover); - connect(sceneDraw, &VMainGraphicsScene::mouseMove, this, &MainWindow::mouseMove); + connect(sceneDraw, &VMainGraphicsScene::mouseMove, this, &MainWindow::MouseMove); sceneDetails = new VMainGraphicsScene(); connect(this, &MainWindow::EnableItemMove, sceneDetails, &VMainGraphicsScene::EnableItemMove); @@ -349,7 +347,7 @@ void MainWindow::InitScenes() connect(this, &MainWindow::EnableNodePointHover, sceneDetails, &VMainGraphicsScene::ToggleNodePointHover); connect(this, &MainWindow::EnableDetailHover, sceneDetails, &VMainGraphicsScene::ToggleDetailHover); - connect(sceneDetails, &VMainGraphicsScene::mouseMove, this, &MainWindow::mouseMove); + connect(sceneDetails, &VMainGraphicsScene::mouseMove, this, &MainWindow::MouseMove); ui->view->setScene(currentScene); @@ -526,22 +524,6 @@ bool MainWindow::UpdateMeasurements(const QString &path, int size, int height) return true; } -//--------------------------------------------------------------------------------------------------------------------- -/** - * @brief OptionDraw help change name of pattern piece. - */ -void MainWindow::DrawOption() -{ - const QString activDraw = doc->GetNameActivPP(); - const QString nameDraw = PatternPieceName(activDraw); - if (nameDraw.isEmpty()) - { - return; - } - RenamePP *renamePP = new RenamePP(doc, nameDraw, comboBoxDraws); - qApp->getUndoStack()->push(renamePP); -} - //--------------------------------------------------------------------------------------------------------------------- /** * @brief SetToolButton set tool and show dialog. @@ -570,10 +552,10 @@ void MainWindow::SetToolButton(bool checked, Tool t, const QString &cursor, cons VMainGraphicsScene *scene = qobject_cast(currentScene); SCASSERT(scene != nullptr); - connect(scene, &VMainGraphicsScene::ChoosedObject, dialogTool, &DialogTool::ChosenObject); - connect(scene, &VMainGraphicsScene::SelectedObject, dialogTool, &DialogTool::SelectedObject); - connect(dialogTool, &DialogTool::DialogClosed, this, closeDialogSlot); - connect(dialogTool, &DialogTool::ToolTip, this, &MainWindow::ShowToolTip); + connect(scene, &VMainGraphicsScene::ChoosedObject, dialogTool.data(), &DialogTool::ChosenObject); + connect(scene, &VMainGraphicsScene::SelectedObject, dialogTool.data(), &DialogTool::SelectedObject); + connect(dialogTool.data(), &DialogTool::DialogClosed, this, closeDialogSlot); + connect(dialogTool.data(), &DialogTool::ToolTip, this, &MainWindow::ShowToolTip); ui->view->itemClicked(nullptr); } else @@ -629,12 +611,12 @@ void MainWindow::SetToolButtonWithApply(bool checked, Tool t, const QString &cur VMainGraphicsScene *scene = qobject_cast(currentScene); SCASSERT(scene != nullptr); - connect(scene, &VMainGraphicsScene::ChoosedObject, dialogTool, &DialogTool::ChosenObject); - connect(scene, &VMainGraphicsScene::SelectedObject, dialogTool, &DialogTool::SelectedObject); - connect(dialogTool, &DialogTool::DialogClosed, this, closeDialogSlot); - connect(dialogTool, &DialogTool::DialogApplied, this, applyDialogSlot); - connect(dialogTool, &DialogTool::ToolTip, this, &MainWindow::ShowToolTip); - connect(ui->view, &VMainGraphicsView::MouseRelease, this, &MainWindow::ClickEndVisualization); + connect(scene, &VMainGraphicsScene::ChoosedObject, dialogTool.data(), &DialogTool::ChosenObject); + connect(scene, &VMainGraphicsScene::SelectedObject, dialogTool.data(), &DialogTool::SelectedObject); + connect(dialogTool.data(), &DialogTool::DialogClosed, this, closeDialogSlot); + connect(dialogTool.data(), &DialogTool::DialogApplied, this, applyDialogSlot); + connect(dialogTool.data(), &DialogTool::ToolTip, this, &MainWindow::ShowToolTip); + connect(ui->view, &VMainGraphicsView::MouseRelease, [this](){EndVisualization(true);}); ui->view->itemClicked(nullptr); } else @@ -653,7 +635,7 @@ void MainWindow::SetToolButtonWithApply(bool checked, Tool t, const QString &cur template void MainWindow::ClosedDialog(int result) { - SCASSERT(dialogTool != nullptr); + SCASSERT(not dialogTool.isNull()); if (result == QDialog::Accepted) { VMainGraphicsScene *scene = qobject_cast(currentScene); @@ -673,7 +655,7 @@ void MainWindow::ClosedDialog(int result) template void MainWindow::ClosedDialogWithApply(int result) { - SCASSERT(dialogTool != nullptr); + SCASSERT(not dialogTool.isNull()); if (result == QDialog::Accepted) { // Only create tool if not already created with apply @@ -691,7 +673,7 @@ void MainWindow::ClosedDialogWithApply(int result) vtool->FullUpdateFromGuiApply(); } } - SCASSERT(dialogTool != nullptr); + SCASSERT(not dialogTool.isNull()); QGraphicsItem *tool = dynamic_cast(dialogTool->GetAssociatedTool()); ui->view->itemClicked(tool); if (dialogTool->GetAssociatedTool() != nullptr) @@ -701,6 +683,15 @@ void MainWindow::ClosedDialogWithApply(int result) connect(vtool, &VDrawTool::ToolTip, this, &MainWindow::ShowToolTip); } ArrowTool(); + // If insert not to the end of file call lite parse + if (doc->getCursor() > 0) + { + doc->LiteParseTree(Document::LiteParse); + if (dialogHistory) + { + dialogHistory->UpdateHistory(); + } + } } //--------------------------------------------------------------------------------------------------------------------- @@ -710,7 +701,7 @@ void MainWindow::ClosedDialogWithApply(int result) template void MainWindow::ApplyDialog() { - SCASSERT(dialogTool != nullptr); + SCASSERT(not dialogTool.isNull()); // Only create tool if not already created with apply if (dialogTool->GetAssociatedTool() == nullptr) @@ -1193,26 +1184,6 @@ void MainWindow::ToolTrueDarts(bool checked) &MainWindow::ApplyDialog); } -//--------------------------------------------------------------------------------------------------------------------- -/** - * @brief About show widows about. - */ -void MainWindow::About() -{ - DialogAboutApp * about_dialog = new DialogAboutApp(this); - about_dialog->setAttribute(Qt::WA_DeleteOnClose, true); - about_dialog->show(); -} - -//--------------------------------------------------------------------------------------------------------------------- -/** - * @brief AboutQt show widows aboutQt. - */ -void MainWindow::AboutQt() -{ - QMessageBox::aboutQt(this, tr("About Qt")); -} - //--------------------------------------------------------------------------------------------------------------------- /** * @brief ShowTool highlight tool.Tip show tools tooltip. @@ -1223,36 +1194,6 @@ void MainWindow::ShowToolTip(const QString &toolTip) helpLabel->setText(toolTip); } -//--------------------------------------------------------------------------------------------------------------------- -void MainWindow::OpenRecentFile() -{ - QAction *action = qobject_cast(sender()); - if (action) - { - const QString filePath = action->data().toString(); - if (filePath.isEmpty() == false) - { - LoadPattern(filePath); - } - } -} - -//--------------------------------------------------------------------------------------------------------------------- -void MainWindow::PatternProperties() -{ - DialogPatternProperties proper(curFile, doc, pattern, this); - connect(&proper, &DialogPatternProperties::UpdateGradation, this, &MainWindow::UpdateGradation); - proper.exec(); -} - -//--------------------------------------------------------------------------------------------------------------------- -void MainWindow::EditPatternCode() -{ - DialogPatternXmlEdit *Pattern = new DialogPatternXmlEdit (this, doc); - Pattern->setAttribute(Qt::WA_DeleteOnClose, true); - Pattern->show(); -} - //--------------------------------------------------------------------------------------------------------------------- /** * @brief showEvent handle after show window. @@ -1372,7 +1313,7 @@ void MainWindow::LoadIndividual() ui->actionUnloadMeasurements->setEnabled(true); doc->SetPath(RelativeMPath(curFile, mPath)); watcher->addPath(mPath); - PatternWasModified(false); + PatternChangesWereSaved(false); ui->actionShowM->setEnabled(true); helpLabel->setText(tr("Measurements loaded")); doc->LiteParseTree(Document::LiteParse); @@ -1412,7 +1353,7 @@ void MainWindow::LoadStandard() ui->actionUnloadMeasurements->setEnabled(true); doc->SetPath(RelativeMPath(curFile, mPath)); watcher->addPath(mPath); - PatternWasModified(false); + PatternChangesWereSaved(false); ui->actionShowM->setEnabled(true); helpLabel->setText(tr("Measurements loaded")); doc->LiteParseTree(Document::LiteParse); @@ -1448,7 +1389,7 @@ void MainWindow::UnloadMeasurements() { watcher->removePath(AbsoluteMPath(curFile, doc->MPath())); doc->SetPath(QString()); - PatternWasModified(false); + PatternChangesWereSaved(false); ui->actionShowM->setEnabled(false); ui->actionUnloadMeasurements->setDisabled(true); helpLabel->setText(tr("Measurements unloaded")); @@ -1462,14 +1403,6 @@ void MainWindow::UnloadMeasurements() } } -//--------------------------------------------------------------------------------------------------------------------- -void MainWindow::CreateMeasurements() -{ - const QString tape = qApp->TapeFilePath(); - const QString workingDirectory = QFileInfo(tape).absoluteDir().absolutePath(); - QProcess::startDetached(tape, QStringList(), workingDirectory); -} - //--------------------------------------------------------------------------------------------------------------------- void MainWindow::ShowMeasurements() { @@ -1565,29 +1498,6 @@ void MainWindow::SyncMeasurements() } } -//--------------------------------------------------------------------------------------------------------------------- -void MainWindow::OnWindowFocusChanged(QWidget *old, QWidget *now) -{ - if (old == nullptr && isAncestorOf(now) == true) - {// focus IN - if (mChanges && not mChangesAsked) - { - mChangesAsked = true; - const auto answer = QMessageBox::question(this, tr("Measurements"), - tr("Measurements was changed. Do you want to sync measurements now?"), - QMessageBox::Yes|QMessageBox::No, QMessageBox::Yes); - if (answer == QMessageBox::Yes) - { - SyncMeasurements(); - } - } - } - - // In case we will need it - // else if (isAncestorOf(old) == true && now == nullptr) - // focus OUT -} - //--------------------------------------------------------------------------------------------------------------------- #if defined(Q_OS_MAC) void MainWindow::OpenAt(QAction *where) @@ -1702,10 +1612,19 @@ void MainWindow::ToolBarDraws() comboBoxDraws->setSizeAdjustPolicy(QComboBox::AdjustToContents); comboBoxDraws->setEnabled(false); connect(comboBoxDraws, static_cast(&QComboBox::currentIndexChanged), - this, &MainWindow::currentPPChanged); + [this](int index){ChangePP(index);}); - ui->toolBarDraws->addAction(ui->actionOptionDraw); - connect(ui->actionOptionDraw, &QAction::triggered, this, &MainWindow::DrawOption); + connect(ui->actionOptionDraw, &QAction::triggered, [this]() + { + const QString activDraw = doc->GetNameActivPP(); + const QString nameDraw = PatternPieceName(activDraw); + if (nameDraw.isEmpty()) + { + return; + } + RenamePP *renamePP = new RenamePP(doc, nameDraw, comboBoxDraws); + qApp->getUndoStack()->push(renamePP); + }); } void MainWindow::ToolBarTools() @@ -1794,30 +1713,19 @@ void MainWindow::InitToolButtons() connect(ui->toolButtonMidpoint, &QToolButton::clicked, this, &MainWindow::ToolMidpoint); } -//--------------------------------------------------------------------------------------------------------------------- -/** - * @brief currentPPChanged change active pattern piece. - * @param index index in combobox. - */ -void MainWindow::currentPPChanged(int index) -{ - ChangePP(index); -} - //--------------------------------------------------------------------------------------------------------------------- /** * @brief mouseMove save mouse position and show user. * @param scenePos position mouse. */ -void MainWindow::mouseMove(const QPointF &scenePos) +void MainWindow::MouseMove(const QPointF &scenePos) { - //: Coords in status line: "X, Y (units)" - QString string = QString(tr("%1, %2 (%3)")).arg(static_cast(qApp->fromPixel(scenePos.x()))) - .arg(static_cast(qApp->fromPixel(scenePos.y()))) - .arg(doc->UnitsToStr(qApp->patternUnit(), true)); - if (mouseCoordinate != nullptr) + if (mouseCoordinate) { - mouseCoordinate->setText(string); + //: Coords in status line: "X, Y (units)" + mouseCoordinate->setText(QString("%1, %2 (%3)").arg(static_cast(qApp->fromPixel(scenePos.x()))) + .arg(static_cast(qApp->fromPixel(scenePos.y()))) + .arg(doc->UnitsToStr(qApp->patternUnit(), true))); } } @@ -1836,7 +1744,6 @@ void MainWindow::CancelTool() qCDebug(vMainWindow, "Canceling tool."); delete dialogTool; - dialogTool = nullptr; qCDebug(vMainWindow, "Dialog closed."); currentScene->setFocus(Qt::OtherFocusReason); @@ -1850,7 +1757,6 @@ void MainWindow::CancelTool() pointer->setChecked(false); } helpLabel->setText(""); - ui->actionStopTool->setEnabled(true); // Crash: using CRTL+Z while using line tool. // related bug report: @@ -1999,7 +1905,6 @@ void MainWindow::ArrowTool() { pointer->setChecked(true); } - ui->actionStopTool->setEnabled(false); currentTool = Tool::Arrow; emit EnableItemMove(true); emit ItemsSelection(SelectionType::ByMouseRelease); @@ -2494,36 +2399,6 @@ void MainWindow::Open() LoadPattern(filePath); } -//--------------------------------------------------------------------------------------------------------------------- -/** - * @brief Preferences config dialog. - */ -void MainWindow::Preferences() -{ - ConfigDialog dlg(this); - connect(&dlg, &ConfigDialog::UpdateProperties, this, &MainWindow::WindowsLocale); // Must be first - connect(&dlg, &ConfigDialog::UpdateProperties, toolOptions, &VToolOptionsPropertyBrowser::RefreshOptions); - connect(&dlg, &ConfigDialog::UpdateProperties, this, &MainWindow::ToolBarStyles); - if (dlg.exec() == QDialog::Accepted) - { - InitAutoSave(); - } -} - -//--------------------------------------------------------------------------------------------------------------------- -void MainWindow::RepotBug() -{ - qCDebug(vMainWindow, "Reporting bug"); - QDesktopServices::openUrl(QUrl("https://bitbucket.org/dismine/valentina/issues/new")); -} - -//--------------------------------------------------------------------------------------------------------------------- -void MainWindow::OnlineHelp() -{ - qCDebug(vMainWindow, "Showing online help"); - QDesktopServices::openUrl(QUrl("https://bitbucket.org/dismine/valentina/wiki/manual/Content")); -} - //--------------------------------------------------------------------------------------------------------------------- /** * @brief Clear reset to default window. @@ -2604,20 +2479,6 @@ void MainWindow::FileClosedCorrect() qCDebug(vMainWindow, "File %s closed correct.", qUtf8Printable(curFile)); } -//--------------------------------------------------------------------------------------------------------------------- -void MainWindow::ResetWindow() -{ - if (MaybeSave()) - { - FileClosedCorrect(); - } - else - { - return; - } - Clear(); -} - //--------------------------------------------------------------------------------------------------------------------- void MainWindow::FullParseFile() { @@ -2837,19 +2698,6 @@ void MainWindow::SetEnableWidgets(bool enable) ui->view->setEnabled(enable); } -//--------------------------------------------------------------------------------------------------------------------- -void MainWindow::ClickEndVisualization() -{ - EndVisualization(true); -} - -//--------------------------------------------------------------------------------------------------------------------- -void MainWindow::UpdateGradation() -{ - UpdateHeightsList(VMeasurement::ListHeights(doc->GetGradationHeights(), qApp->patternUnit())); - UpdateSizesList(VMeasurement::ListSizes(doc->GetGradationSizes(), qApp->patternUnit())); -} - //--------------------------------------------------------------------------------------------------------------------- void MainWindow::UpdateHeightsList(const QStringList &list) { @@ -2909,7 +2757,7 @@ void MainWindow::New() if (comboBoxDraws->count() == 0) { qCDebug(vMainWindow, "New PP."); - QString patternPieceName = QString(tr("Pattern piece %1")).arg(comboBoxDraws->count()+1); + QString patternPieceName = tr("Pattern piece %1").arg(comboBoxDraws->count()+1); qCDebug(vMainWindow, "Generated PP name: %s", qUtf8Printable(patternPieceName)); qCDebug(vMainWindow, "First PP"); @@ -2945,7 +2793,7 @@ void MainWindow::New() /** * @brief haveChange enable action save if we have unsaved change. */ -void MainWindow::PatternWasModified(bool saved) +void MainWindow::PatternChangesWereSaved(bool saved) { if (guiEnabled) { @@ -3052,76 +2900,6 @@ void MainWindow::SetDefaultSize() pattern->SetSize(gradationSizes->currentText().toInt()); } -//--------------------------------------------------------------------------------------------------------------------- -/** - * @brief ActionTable show table with variables. - * @param checked true - button checked. - */ -void MainWindow::ActionTable(bool checked) -{ - if (checked) - { - dialogTable = new DialogIncrements(pattern, doc, this); - connect(dialogTable, &DialogIncrements::DialogClosed, this, &MainWindow::ClosedActionTable); - dialogTable->show(); - } - else - { - ui->actionTable->setChecked(true); - dialogTable->activateWindow(); - } -} - -//--------------------------------------------------------------------------------------------------------------------- -/** - * @brief ClosedActionTable actions after closing table with variables. - */ -void MainWindow::ClosedActionTable() -{ - ui->actionTable->setChecked(false); - delete dialogTable; - dialogTable = nullptr; -} - -//--------------------------------------------------------------------------------------------------------------------- -/** - * @brief ActionHistory show tool history. - * @param checked true - button checked. - */ -void MainWindow::ActionHistory(bool checked) -{ - if (checked) - { - dialogHistory = new DialogHistory(pattern, doc, this); - dialogHistory->setWindowFlags(Qt::Window); - connect(this, &MainWindow::RefreshHistory, dialogHistory, &DialogHistory::UpdateHistory); - connect(dialogHistory, &DialogHistory::DialogClosed, this, &MainWindow::ClosedActionHistory); - dialogHistory->show(); - } - else - { - ui->actionHistory->setChecked(true); - dialogHistory->activateWindow(); - } -} - -//--------------------------------------------------------------------------------------------------------------------- -void MainWindow::ActionCurveDetailsMode(bool checked) -{ - ui->view->itemClicked(nullptr); - sceneDraw->EnableDetailsMode(checked); -} - -//--------------------------------------------------------------------------------------------------------------------- -/** - * @brief ClosedActionHistory actions after closing history window with variables. - */ -void MainWindow::ClosedActionHistory() -{ - ui->actionHistory->setChecked(false); - delete dialogHistory; -} - //--------------------------------------------------------------------------------------------------------------------- /** * @brief SetEnableTool enable button. @@ -3243,12 +3021,12 @@ bool MainWindow::SavePattern(const QString &fileName, QString &error) const bool result = doc->SaveDocument(fileName, error); if (result) { - if (tempInfo.suffix() != QLatin1Literal("autosave")) + if (tempInfo.suffix() != QLatin1String("autosave")) { setCurrentFile(fileName); helpLabel->setText(tr("File saved")); qCDebug(vMainWindow, "File %s saved.", qUtf8Printable(fileName)); - PatternWasModified(result); + PatternChangesWereSaved(result); } } else @@ -3692,33 +3470,149 @@ void MainWindow::CreateActions() { ui->setupUi(this); - connect(ui->actionStopTool, &QAction::triggered, this, &MainWindow::ArrowTool); connect(ui->actionArrowTool, &QAction::triggered, this, &MainWindow::ArrowTool); connect(ui->actionDraw, &QAction::triggered, this, &MainWindow::ActionDraw); connect(ui->actionDetails, &QAction::triggered, this, &MainWindow::ActionDetails); connect(ui->actionLayout, &QAction::triggered, this, &MainWindow::ActionLayout); - connect(ui->actionHistory, &QAction::triggered, this, &MainWindow::ActionHistory); - connect(ui->actionNewDraw, &QAction::triggered, this, &MainWindow::NewPP); + + connect(ui->actionHistory, &QAction::triggered, [this](bool checked) + { + if (checked) + { + dialogHistory = new DialogHistory(pattern, doc, this); + dialogHistory->setWindowFlags(Qt::Window); + connect(this, &MainWindow::RefreshHistory, dialogHistory.data(), &DialogHistory::UpdateHistory); + connect(dialogHistory.data(), &DialogHistory::DialogClosed, [this]() + { + ui->actionHistory->setChecked(false); + delete dialogHistory; + }); + // Fix issue #526. Dialog Detail is not on top after selection second object on Mac. + dialogHistory->setWindowFlags(dialogHistory->windowFlags() | Qt::WindowStaysOnTopHint); + dialogHistory->show(); + } + else + { + ui->actionHistory->setChecked(true); + dialogHistory->activateWindow(); + } + }); + + connect(ui->actionNewDraw, &QAction::triggered, [this]() + { + qCDebug(vMainWindow, "New PP."); + QString patternPieceName = tr("Pattern piece %1").arg(comboBoxDraws->count()+1); + qCDebug(vMainWindow, "Generated PP name: %s", qUtf8Printable(patternPieceName)); + + qCDebug(vMainWindow, "PP count %d", comboBoxDraws->count()); + patternPieceName = PatternPieceName(patternPieceName); + qCDebug(vMainWindow, "PP name: %s", qUtf8Printable(patternPieceName)); + if (patternPieceName.isEmpty()) + { + qCDebug(vMainWindow, "Name empty."); + return; + } + + AddPP(patternPieceName); + }); + connect(ui->actionSaveAs, &QAction::triggered, this, &MainWindow::SaveAs); connect(ui->actionSave, &QAction::triggered, this, &MainWindow::Save); connect(ui->actionOpen, &QAction::triggered, this, &MainWindow::Open); connect(ui->actionNew, &QAction::triggered, this, &MainWindow::New); - connect(ui->actionTable, &QAction::triggered, this, &MainWindow::ActionTable); - connect(ui->actionAbout_Qt, &QAction::triggered, this, &MainWindow::AboutQt); - connect(ui->actionAbout_Valentina, &QAction::triggered, this, &MainWindow::About); + + connect(ui->actionTable, &QAction::triggered, [this](bool checked) + { + if (checked) + { + dialogTable = new DialogIncrements(pattern, doc, this); + connect(dialogTable.data(), &DialogIncrements::DialogClosed, [this]() + { + ui->actionTable->setChecked(false); + delete dialogTable; + }); + dialogTable->show(); + } + else + { + ui->actionTable->setChecked(true); + dialogTable->activateWindow(); + } + }); + + connect(ui->actionAbout_Qt, &QAction::triggered, [this]() + { + QMessageBox::aboutQt(this, tr("About Qt")); + }); + + connect(ui->actionAbout_Valentina, &QAction::triggered, [this]() + { + DialogAboutApp *aboutDialog = new DialogAboutApp(this); + aboutDialog->setAttribute(Qt::WA_DeleteOnClose, true); + aboutDialog->show(); + }); + connect(ui->actionExit, &QAction::triggered, this, &MainWindow::close); + connect(ui->actionPreferences, &QAction::triggered, this, &MainWindow::Preferences); - connect(ui->actionReportBug, &QAction::triggered, this, &MainWindow::RepotBug); - connect(ui->actionOnlineHelp, &QAction::triggered, this, &MainWindow::OnlineHelp); + connect(ui->actionReportBug, &QAction::triggered, [this]() + { + qCDebug(vMainWindow, "Reporting bug"); + QDesktopServices::openUrl(QUrl(QStringLiteral("https://bitbucket.org/dismine/valentina/issues/new"))); + }); + + connect(ui->actionOnlineHelp, &QAction::triggered, [this]() + { + qCDebug(vMainWindow, "Showing online help"); + QDesktopServices::openUrl(QUrl(QStringLiteral("https://bitbucket.org/dismine/valentina/wiki/manual/Content"))); + }); + connect(ui->actionLast_tool, &QAction::triggered, this, &MainWindow::LastUsedTool); - connect(ui->actionPattern_properties, &QAction::triggered, this, &MainWindow::PatternProperties); + + connect(ui->actionPattern_properties, &QAction::triggered, [this]() + { + DialogPatternProperties proper(curFile, doc, pattern, this); + connect(&proper, &DialogPatternProperties::UpdateGradation, [this]() + { + UpdateHeightsList(VMeasurement::ListHeights(doc->GetGradationHeights(), qApp->patternUnit())); + UpdateSizesList(VMeasurement::ListSizes(doc->GetGradationSizes(), qApp->patternUnit())); + }); + proper.exec(); + }); + ui->actionPattern_properties->setEnabled(false); - connect(ui->actionEdit_pattern_code, &QAction::triggered, this, &MainWindow::EditPatternCode); - connect(ui->actionClosePattern, &QAction::triggered, this, &MainWindow::ResetWindow); - connect(ui->actionShowCurveDetails, &QAction::triggered, this, &MainWindow::ActionCurveDetailsMode); + connect(ui->actionEdit_pattern_code, &QAction::triggered, [this]() + { + DialogPatternXmlEdit *pattern = new DialogPatternXmlEdit (this, doc); + pattern->setAttribute(Qt::WA_DeleteOnClose, true); + pattern->show(); + }); + + connect(ui->actionClosePattern, &QAction::triggered, [this]() + { + if (MaybeSave()) + { + FileClosedCorrect(); + Clear(); + } + }); + + connect(ui->actionShowCurveDetails, &QAction::triggered, [this](bool checked) + { + ui->view->itemClicked(nullptr); + sceneDraw->EnableDetailsMode(checked); + }); + connect(ui->actionLoadIndividual, &QAction::triggered, this, &MainWindow::LoadIndividual); connect(ui->actionLoadStandard, &QAction::triggered, this, &MainWindow::LoadStandard); - connect(ui->actionCreateNew, &QAction::triggered, this, &MainWindow::CreateMeasurements); + + connect(ui->actionCreateNew, &QAction::triggered, [this]() + { + const QString tape = qApp->TapeFilePath(); + const QString workingDirectory = QFileInfo(tape).absoluteDir().absolutePath(); + QProcess::startDetached(tape, QStringList(), workingDirectory); + }); + connect(ui->actionShowM, &QAction::triggered, this, &MainWindow::ShowMeasurements); connect(ui->actionExportAs, &QAction::triggered, this, &MainWindow::ExportLayoutAs); connect(ui->actionPrintPreview, &QAction::triggered, this, &MainWindow::PrintPreviewOrigin); @@ -3733,7 +3627,17 @@ void MainWindow::CreateActions() { recentFileActs[i] = new QAction(this); recentFileActs[i]->setVisible(false); - connect(recentFileActs[i], &QAction::triggered, this, &MainWindow::OpenRecentFile); + connect(recentFileActs[i], &QAction::triggered, this, [this]() + { + if (QAction *action = qobject_cast(sender())) + { + const QString filePath = action->data().toString(); + if (not filePath.isEmpty()) + { + LoadPattern(filePath); + } + } + }); } connect(ui->actionSyncMeasurements, &QAction::triggered, this, &MainWindow::SyncMeasurements); @@ -4040,6 +3944,27 @@ void MainWindow::ShowPaper(int index) ui->view->fitInView(ui->view->scene()->sceneRect(), Qt::KeepAspectRatio); } +//--------------------------------------------------------------------------------------------------------------------- +void MainWindow::Preferences() +{ + ConfigDialog dlg(this); + connect(&dlg, &ConfigDialog::UpdateProperties, this, &MainWindow::WindowsLocale); // Must be first + connect(&dlg, &ConfigDialog::UpdateProperties, toolOptions, &VToolOptionsPropertyBrowser::RefreshOptions); + connect(&dlg, &ConfigDialog::UpdateProperties, this, &MainWindow::ToolBarStyles); + if (dlg.exec() == QDialog::Accepted) + { + InitAutoSave(); + } +} + +//--------------------------------------------------------------------------------------------------------------------- +void MainWindow::CreateMeasurements() +{ + const QString tape = qApp->TapeFilePath(); + const QString workingDirectory = QFileInfo(tape).absoluteDir().absolutePath(); + QProcess::startDetached(tape, QStringList(), workingDirectory); +} + //--------------------------------------------------------------------------------------------------------------------- void MainWindow::ToolBarStyle(QToolBar *bar) { @@ -4074,8 +3999,8 @@ void MainWindow::ReopenFilesAfterCrash(QStringList &args) if (restoreFiles.size() > 0) { QMessageBox::StandardButton reply; - QString mes=QString(tr("Valentina didn't shut down correctly. " - "Do you want reopen files (%1) you had open?")).arg(restoreFiles.size()); + const QString mes = tr("Valentina didn't shut down correctly. Do you want reopen files (%1) you had open?") + .arg(restoreFiles.size()); reply = QMessageBox::question(this, tr("Reopen files."), mes, QMessageBox::Yes|QMessageBox::No, QMessageBox::Yes); if (reply == QMessageBox::Yes) @@ -4224,7 +4149,7 @@ QString MainWindow::CheckPathToMeasurements(const QString &patternPath, const QS } doc->SetPath(RelativeMPath(patternPath, mPath)); - PatternWasModified(false); + PatternChangesWereSaved(false); qApp->setPatternType(patternType); return mPath; } @@ -4259,7 +4184,7 @@ void MainWindow::ChangePP(int index, bool zoomBestFit) //--------------------------------------------------------------------------------------------------------------------- void MainWindow::EndVisualization(bool click) { - if (dialogTool != nullptr) + if (not dialogTool.isNull()) { dialogTool->ShowDialog(click); } @@ -4505,7 +4430,7 @@ QString MainWindow::GetPatternFileName() { shownName = StrippedName(curFile); } - shownName += QLatin1Literal("[*]"); + shownName += QLatin1String("[*]"); return shownName; } @@ -4523,10 +4448,10 @@ QString MainWindow::GetMeasurementFileName() if(mChanges) { - shownName += QLatin1Literal("*"); + shownName += QLatin1String("*"); } - shownName += QLatin1Literal("]"); + shownName += QLatin1String("]"); return shownName; } } @@ -4546,7 +4471,7 @@ void MainWindow::UpdateWindowTitle() #if defined(Q_OS_MAC) static QIcon fileIcon = QIcon(QApplication::applicationDirPath() + - QLatin1Literal("/../Resources/Valentina.icns")); + QLatin1String("/../Resources/Valentina.icns")); QIcon icon; if (not curFile.isEmpty()) { diff --git a/src/app/valentina/mainwindow.h b/src/app/valentina/mainwindow.h index 88d59c8de..581159fae 100644 --- a/src/app/valentina/mainwindow.h +++ b/src/app/valentina/mainwindow.h @@ -62,151 +62,119 @@ public: explicit MainWindow(QWidget *parent = nullptr); virtual ~MainWindow() Q_DECL_OVERRIDE; - bool LoadPattern(const QString &curFile, const QString &customMeasureFile = QString()); + bool LoadPattern(const QString &curFile, const QString &customMeasureFile = QString()); public slots: - void ProcessCMD(); + void ProcessCMD(); + void ShowToolTip(const QString &toolTip); - void mouseMove(const QPointF &scenePos); - void ArrowTool(); - - void ActionDraw(bool checked); - void ActionDetails(bool checked); - void ActionLayout(bool checked); - - void ActionTable(bool checked); - void ActionHistory(bool checked); - void ActionCurveDetailsMode(bool checked); - void DrawOption(); - - void ClosedActionTable(); - void ClosedActionHistory(); - - void New(); - bool SaveAs(); - bool Save(); - void Open(); - void NewPP(); - - void Preferences(); - void RepotBug(); - void OnlineHelp(); - void About(); - void AboutQt(); - void PatternProperties(); - void ShowToolTip(const QString &toolTip); - void OpenRecentFile(); - void Clear(); - void ResetWindow(); - - void currentPPChanged(int index); - - void PatternWasModified(bool saved); - - void ToolEndLine(bool checked); - void ToolLine(bool checked); - void ToolAlongLine(bool checked); - void ToolMidpoint(bool checked); - void ToolShoulderPoint(bool checked); - void ToolNormal(bool checked); - void ToolBisector(bool checked); - void ToolLineIntersect(bool checked); - void ToolSpline(bool checked); - void ToolCubicBezier(bool checked); - void ToolCutSpline(bool checked); - void ToolArc(bool checked); - void ToolSplinePath(bool checked); - void ToolCubicBezierPath(bool checked); - void ToolCutSplinePath(bool checked); - void ToolPointOfContact(bool checked); - void ToolDetail(bool checked); - void ToolHeight(bool checked); - void ToolTriangle(bool checked); - void ToolPointOfIntersection(bool checked); - void ToolUnionDetails(bool checked); - void ToolGroup(bool checked); - void ToolRotation(bool checked); - void ToolCutArc(bool checked); - void ToolLineIntersectAxis(bool checked); - void ToolCurveIntersectAxis(bool checked); - void ToolArcIntersectAxis(bool checked); - void ToolPointOfIntersectionArcs(bool checked); - void ToolPointOfIntersectionCircles(bool checked); - void ToolPointOfIntersectionCurves(bool checked); - void ToolPointFromCircleAndTangent(bool checked); - void ToolPointFromArcAndTangent(bool checked); - void ToolArcWithLength(bool checked); - void ToolTrueDarts(bool checked); - - void ClosedDialogDetail(int result); - void ClosedDialogUnionDetails(int result); - void ClosedDialogGroup(int result); - -//tmp - void LastUsedTool(); - - /** - * @brief Edit XML code of pattern - */ - void EditPatternCode(); - void FullParseFile(); - - void SetEnabledGUI(bool enabled); - - void ClickEndVisualization(); - void UpdateGradation(); - void GlobalChangePP(const QString &patternPiece); - void WindowsLocale(); - void ToolBarStyles(); - - void ShowPaper(int index); signals: - void RefreshHistory(); - void EnableItemMove(bool move); - void ItemsSelection(SelectionType type) const; + void RefreshHistory(); + void EnableItemMove(bool move); + void ItemsSelection(SelectionType type) const; - void EnableLabelSelection(bool enable) const; - void EnablePointSelection(bool enable) const; - void EnableLineSelection(bool enable) const; - void EnableArcSelection(bool enable) const; - void EnableSplineSelection(bool enable) const; - void EnableSplinePathSelection(bool enable) const; - void EnableNodeLabelSelection(bool enable) const; - void EnableNodePointSelection(bool enable) const; - void EnableDetailSelection(bool enable) const; + void EnableLabelSelection(bool enable) const; + void EnablePointSelection(bool enable) const; + void EnableLineSelection(bool enable) const; + void EnableArcSelection(bool enable) const; + void EnableSplineSelection(bool enable) const; + void EnableSplinePathSelection(bool enable) const; + void EnableNodeLabelSelection(bool enable) const; + void EnableNodePointSelection(bool enable) const; + void EnableDetailSelection(bool enable) const; - void EnableLabelHover(bool enable) const; - void EnablePointHover(bool enable) const; - void EnableLineHover(bool enable) const; - void EnableArcHover(bool enable) const; - void EnableSplineHover(bool enable) const; - void EnableSplinePathHover(bool enable) const; - void EnableNodeLabelHover(bool enable) const; - void EnableNodePointHover(bool enable) const; - void EnableDetailHover(bool enable) const; + void EnableLabelHover(bool enable) const; + void EnablePointHover(bool enable) const; + void EnableLineHover(bool enable) const; + void EnableArcHover(bool enable) const; + void EnableSplineHover(bool enable) const; + void EnableSplinePathHover(bool enable) const; + void EnableNodeLabelHover(bool enable) const; + void EnableNodePointHover(bool enable) const; + void EnableDetailHover(bool enable) const; protected: - virtual void keyPressEvent(QKeyEvent *event) Q_DECL_OVERRIDE; - virtual void showEvent(QShowEvent *event) Q_DECL_OVERRIDE; - virtual void changeEvent(QEvent* event) Q_DECL_OVERRIDE; - virtual void closeEvent(QCloseEvent *event) Q_DECL_OVERRIDE; - virtual void customEvent(QEvent * event) Q_DECL_OVERRIDE; - virtual void CleanLayout() Q_DECL_OVERRIDE; - virtual void PrepareSceneList() Q_DECL_OVERRIDE; + virtual void keyPressEvent(QKeyEvent *event) Q_DECL_OVERRIDE; + virtual void showEvent(QShowEvent *event) Q_DECL_OVERRIDE; + virtual void changeEvent(QEvent* event) Q_DECL_OVERRIDE; + virtual void closeEvent(QCloseEvent *event) Q_DECL_OVERRIDE; + virtual void customEvent(QEvent * event) Q_DECL_OVERRIDE; + virtual void CleanLayout() Q_DECL_OVERRIDE; + virtual void PrepareSceneList() Q_DECL_OVERRIDE; private slots: + void MouseMove(const QPointF &scenePos); + void Clear(); + void PatternChangesWereSaved(bool saved); + void LastUsedTool(); + void FullParseFile(); + void SetEnabledGUI(bool enabled); + void GlobalChangePP(const QString &patternPiece); + void WindowsLocale(); + void ToolBarStyles(); + void ShowPaper(int index); + void Preferences(); + void CreateMeasurements(); + + void ArrowTool(); + void ToolEndLine(bool checked); + void ToolLine(bool checked); + void ToolAlongLine(bool checked); + void ToolMidpoint(bool checked); + void ToolShoulderPoint(bool checked); + void ToolNormal(bool checked); + void ToolBisector(bool checked); + void ToolLineIntersect(bool checked); + void ToolSpline(bool checked); + void ToolCubicBezier(bool checked); + void ToolCutSpline(bool checked); + void ToolArc(bool checked); + void ToolSplinePath(bool checked); + void ToolCubicBezierPath(bool checked); + void ToolCutSplinePath(bool checked); + void ToolPointOfContact(bool checked); + void ToolDetail(bool checked); + void ToolHeight(bool checked); + void ToolTriangle(bool checked); + void ToolPointOfIntersection(bool checked); + void ToolUnionDetails(bool checked); + void ToolGroup(bool checked); + void ToolRotation(bool checked); + void ToolCutArc(bool checked); + void ToolLineIntersectAxis(bool checked); + void ToolCurveIntersectAxis(bool checked); + void ToolArcIntersectAxis(bool checked); + void ToolPointOfIntersectionArcs(bool checked); + void ToolPointOfIntersectionCircles(bool checked); + void ToolPointOfIntersectionCurves(bool checked); + void ToolPointFromCircleAndTangent(bool checked); + void ToolPointFromArcAndTangent(bool checked); + void ToolArcWithLength(bool checked); + void ToolTrueDarts(bool checked); + + void ActionDraw(bool checked); + void ActionDetails(bool checked); + void ActionLayout(bool checked); + + void New(); + bool SaveAs(); + bool Save(); + void Open(); + + void ClosedDialogDetail(int result); + void ClosedDialogUnionDetails(int result); + void ClosedDialogGroup(int result); + void LoadIndividual(); void LoadStandard(); void UnloadMeasurements(); - void CreateMeasurements(); void ShowMeasurements(); void MeasurementsChanged(const QString &path); void SyncMeasurements(); - void OnWindowFocusChanged(QWidget* old, QWidget* now); #if defined(Q_OS_MAC) void OpenAt(QAction *where); #endif //defined(Q_OS_MAC) void ChangedSize(const QString &text); - void ChangedHeight(const QString & text); + void ChangedHeight(const QString &text); private: Q_DISABLE_COPY(MainWindow) @@ -242,9 +210,9 @@ private: bool patternReadOnly; - DialogIncrements *dialogTable; - DialogTool *dialogTool; - DialogHistory *dialogHistory; + QPointer dialogTable; + QPointer dialogTool; + QPointer dialogHistory; /** @brief comboBoxDraws comboc who show name of pattern peaces. */ QComboBox *comboBoxDraws; diff --git a/src/app/valentina/mainwindow.ui b/src/app/valentina/mainwindow.ui index 0bad623ad..cf7b63e29 100644 --- a/src/app/valentina/mainwindow.ui +++ b/src/app/valentina/mainwindow.ui @@ -1558,9 +1558,7 @@ - - @@ -2091,28 +2089,6 @@ QAction::NoRole - - - false - - - false - - - - - - - - Stop - - - Stop using tool - - - - - Report Bug... diff --git a/src/app/valentina/mainwindowsnogui.cpp b/src/app/valentina/mainwindowsnogui.cpp index 326fbb387..121990bfb 100644 --- a/src/app/valentina/mainwindowsnogui.cpp +++ b/src/app/valentina/mainwindowsnogui.cpp @@ -714,7 +714,7 @@ void MainWindowsNoGUI::PdfToPs(const QStringList ¶ms) const QFile f(params.last()); if (f.exists() == false) { - QString msg = QString(tr("Creating file '%1' failed! %2")).arg(params.last()).arg(proc.errorString()); + const QString msg = tr("Creating file '%1' failed! %2").arg(params.last()).arg(proc.errorString()); QMessageBox msgBox(QMessageBox::Critical, tr("Critical error!"), msg, QMessageBox::Ok | QMessageBox::Default); msgBox.exec(); } @@ -958,7 +958,7 @@ void MainWindowsNoGUI::SetPrinterSettings(QPrinter *printer, const PrintType &pr #ifdef Q_OS_WIN printer->setOutputFileName(outputFileName); #else - printer->setOutputFileName(outputFileName + QLatin1Literal(".pdf")); + printer->setOutputFileName(outputFileName + QLatin1String(".pdf")); #endif #ifdef Q_OS_MAC diff --git a/src/app/valentina/mainwindowsnogui.h b/src/app/valentina/mainwindowsnogui.h index 25b446e37..4d5780319 100644 --- a/src/app/valentina/mainwindowsnogui.h +++ b/src/app/valentina/mainwindowsnogui.h @@ -55,12 +55,10 @@ public slots: void ToolLayoutSettings(bool checked); void ExportLayoutAs(); void SaveAsTiledPDF(); - void PrintPages (QPrinter *printer); void PrintPreviewOrigin(); void PrintPreviewTiled(); void PrintOrigin(); void PrintTiled(); - void ErrorConsoleMode(const LayoutErrors &state); protected: QVector listDetails; @@ -100,6 +98,9 @@ protected: virtual void PrepareSceneList()=0; QIcon ScenePreview(int i) const; bool LayoutSettings(VLayoutGenerator& lGenerator); +private slots: + void PrintPages (QPrinter *printer); + void ErrorConsoleMode(const LayoutErrors &state); private: Q_DISABLE_COPY(MainWindowsNoGUI) diff --git a/src/app/valentina/valentina.pro b/src/app/valentina/valentina.pro index f1c0ba838..79d7dc143 100644 --- a/src/app/valentina/valentina.pro +++ b/src/app/valentina/valentina.pro @@ -67,52 +67,10 @@ $$enable_ccache() CONFIG(debug, debug|release){ # Debug mode unix { - #Turn on compilers warnings. - *-g++{ - QMAKE_CXXFLAGS += \ - # Key -isystem disable checking errors in system headers. - -isystem "$${OUT_PWD}/$${UI_DIR}" \ - -isystem "$${OUT_PWD}/$${MOC_DIR}" \ - -isystem "$${OUT_PWD}/$${RCC_DIR}" \ - -isystem "$${OUT_PWD}/../../libs/vtools/$${UI_DIR}" \ # For VTools UI files - $$GCC_DEBUG_CXXFLAGS # See common.pri for more details. - - noAddressSanitizer{ # For enable run qmake with CONFIG+=noAddressSanitizer - # do nothing - } else { - #gcc’s 4.8.0 Address Sanitizer - #http://blog.qt.digia.com/blog/2013/04/17/using-gccs-4-8-0-address-sanitizer-with-qt/ - QMAKE_CXXFLAGS += -fsanitize=address -fno-omit-frame-pointer - QMAKE_CFLAGS += -fsanitize=address -fno-omit-frame-pointer - QMAKE_LFLAGS += -fsanitize=address - } - } - clang*{ - QMAKE_CXXFLAGS += \ - # Key -isystem disable checking errors in system headers. - -isystem "$${OUT_PWD}/$${UI_DIR}" \ - -isystem "$${OUT_PWD}/$${MOC_DIR}" \ - -isystem "$${OUT_PWD}/$${RCC_DIR}" \ - -isystem "$${OUT_PWD}/../../libs/vtools/$${UI_DIR}" \ # For VTools UI files - $$CLANG_DEBUG_CXXFLAGS # See common.pri for more details. - - # -isystem key works only for headers. In some cases it's not enough. But we can't delete this warnings and - # want them in global list. Compromise decision delete them from local list. - QMAKE_CXXFLAGS -= \ - -Wmissing-prototypes \ - -Wundefined-reinterpret-cast - } - *-icc-*{ - QMAKE_CXXFLAGS+= \ - -isystem "$${OUT_PWD}/$${UI_DIR}" \ - -isystem "$${OUT_PWD}/$${MOC_DIR}" \ - -isystem "$${OUT_PWD}/$${RCC_DIR}" \ - -isystem "$${OUT_PWD}/../../libs/vtools/$${UI_DIR}" \ # For VTools UI files - $$ICC_DEBUG_CXXFLAGS - } + include(warnings.pri) } else { *-g++{ - QMAKE_CXXFLAGS += $$GCC_DEBUG_CXXFLAGS # See common.pri for more details. + QMAKE_CXXFLAGS += $$GCC_DEBUG_CXXFLAGS # See common.pri for more details. } } @@ -128,6 +86,10 @@ CONFIG(debug, debug|release){ QMAKE_CXXFLAGS += -fno-omit-frame-pointer # Need for exchndl.dll } + checkWarnings{ + unix:include(warnings.pri) + } + noDebugSymbols{ # For enable run qmake with CONFIG+=noDebugSymbols DEFINES += V_NO_DEBUG } else { @@ -252,7 +214,17 @@ unix{ # Some macx stuff QMAKE_MAC_SDK = macosx - QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.7 + # Check which minimal OSX version supports current Qt version + equals(QT_MAJOR_VERSION, 5):greaterThan(QT_MINOR_VERSION, 6) { + QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.8 + } else { + equals(QT_MAJOR_VERSION, 5):greaterThan(QT_MINOR_VERSION, 3) { + QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.7 + } else { + QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.6 + } + } + # Path to resources in app bundle #RESOURCES_DIR = "Contents/Resources" defined in translation.pri FRAMEWORKS_DIR = "Contents/Frameworks" @@ -536,6 +508,15 @@ DEPENDPATH += $$PWD/../../libs/vgeometry win32:!win32-g++: PRE_TARGETDEPS += $$OUT_PWD/../../libs/vgeometry/$${DESTDIR}/vgeometry.lib else:unix|win32-g++: PRE_TARGETDEPS += $$OUT_PWD/../../libs/vgeometry/$${DESTDIR}/libvgeometry.a +# Fervor static library (depend on VMisc, IFC) +unix|win32: LIBS += -L$$OUT_PWD/../../libs/fervor/$${DESTDIR}/ -lfervor + +INCLUDEPATH += $$PWD/../../libs/fervor +DEPENDPATH += $$PWD/../../libs/fervor + +win32:!win32-g++: PRE_TARGETDEPS += $$OUT_PWD/../../libs/fervor/$${DESTDIR}/fervor.lib +else:unix|win32-g++: PRE_TARGETDEPS += $$OUT_PWD/../../libs/fervor/$${DESTDIR}/libfervor.a + # IFC static library (depend on QMuParser, VMisc) unix|win32: LIBS += -L$$OUT_PWD/../../libs/ifc/$${DESTDIR}/ -lifc diff --git a/src/app/valentina/warnings.pri b/src/app/valentina/warnings.pri new file mode 100644 index 000000000..2e87a116f --- /dev/null +++ b/src/app/valentina/warnings.pri @@ -0,0 +1,57 @@ +#Turn on compilers warnings. +*-g++{ + QMAKE_CXXFLAGS += \ + # Key -isystem disable checking errors in system headers. + -isystem "$${OUT_PWD}/$${UI_DIR}" \ + -isystem "$${OUT_PWD}/$${MOC_DIR}" \ + -isystem "$${OUT_PWD}/$${RCC_DIR}" \ + -isystem "$${OUT_PWD}/../../libs/vtools/$${UI_DIR}" \ # For VTools UI files + $$GCC_DEBUG_CXXFLAGS # See common.pri for more details. + + checkWarnings{ # For enable run qmake with CONFIG+=checkWarnings + QMAKE_CXXFLAGS += -Werror + } + + noAddressSanitizer{ # For enable run qmake with CONFIG+=noAddressSanitizer + # do nothing + } else { + #gcc’s 4.8.0 Address Sanitizer + #http://blog.qt.digia.com/blog/2013/04/17/using-gccs-4-8-0-address-sanitizer-with-qt/ + QMAKE_CXXFLAGS += -fsanitize=address -fno-omit-frame-pointer + QMAKE_CFLAGS += -fsanitize=address -fno-omit-frame-pointer + QMAKE_LFLAGS += -fsanitize=address + } +} + +clang*{ + QMAKE_CXXFLAGS += \ + # Key -isystem disable checking errors in system headers. + -isystem "$${OUT_PWD}/$${UI_DIR}" \ + -isystem "$${OUT_PWD}/$${MOC_DIR}" \ + -isystem "$${OUT_PWD}/$${RCC_DIR}" \ + -isystem "$${OUT_PWD}/../../libs/vtools/$${UI_DIR}" \ # For VTools UI files + $$CLANG_DEBUG_CXXFLAGS # See common.pri for more details. + + checkWarnings{ # For enable run qmake with CONFIG+=checkWarnings + QMAKE_CXXFLAGS += -Werror + } + + # -isystem key works only for headers. In some cases it's not enough. But we can't delete this warnings and + # want them in global list. Compromise decision delete them from local list. + QMAKE_CXXFLAGS -= \ + -Wmissing-prototypes \ + -Wundefined-reinterpret-cast +} + +*-icc-*{ + QMAKE_CXXFLAGS+= \ + -isystem "$${OUT_PWD}/$${UI_DIR}" \ + -isystem "$${OUT_PWD}/$${MOC_DIR}" \ + -isystem "$${OUT_PWD}/$${RCC_DIR}" \ + -isystem "$${OUT_PWD}/../../libs/vtools/$${UI_DIR}" \ # For VTools UI files + $$ICC_DEBUG_CXXFLAGS + + checkWarnings{ # For enable run qmake with CONFIG+=checkWarnings + QMAKE_CXXFLAGS += -Werror + } +} diff --git a/src/app/valentina/xml/vpattern.cpp b/src/app/valentina/xml/vpattern.cpp index 89b6d2aaa..ad6ef18a1 100644 --- a/src/app/valentina/xml/vpattern.cpp +++ b/src/app/valentina/xml/vpattern.cpp @@ -334,7 +334,7 @@ bool VPattern::SaveDocument(const QString &fileName, QString &error) const } const bool saved = VAbstractPattern::SaveDocument(fileName, error); - if (saved && QFileInfo(fileName).suffix() != QLatin1Literal("autosave")) + if (saved && QFileInfo(fileName).suffix() != QLatin1String("autosave")) { modified = false; } diff --git a/src/app/valentina/xml/vpattern.h b/src/app/valentina/xml/vpattern.h index c23accf08..9ccf41aa6 100644 --- a/src/app/valentina/xml/vpattern.h +++ b/src/app/valentina/xml/vpattern.h @@ -32,6 +32,7 @@ #include "../ifc/xml/vabstractpattern.h" #include "../ifc/xml/vtoolrecord.h" #include "../vpatterndb/vcontainer.h" +#include "../ifc/xml/vpatternconverter.h" class VDataTool; class VMainGraphicsScene; @@ -171,12 +172,16 @@ private: void ParseToolTrueDarts(VMainGraphicsScene *scene, const QDomElement &domElement, const Document &parse); // TODO. Delete if minimal supported version is 0.2.7 + Q_STATIC_ASSERT_X(VPatternConverter::PatternMinVer < CONVERTER_VERSION_CHECK(0, 2, 7), + "Time to refactor the code."); void ParseOldToolSpline(VMainGraphicsScene *scene, const QDomElement &domElement, const Document &parse); void ParseToolSpline(VMainGraphicsScene *scene, QDomElement &domElement, const Document &parse); void ParseToolCubicBezier(VMainGraphicsScene *scene, const QDomElement &domElement, const Document &parse); // TODO. Delete if minimal supported version is 0.2.7 + Q_STATIC_ASSERT_X(VPatternConverter::PatternMinVer < CONVERTER_VERSION_CHECK(0, 2, 7), + "Time to refactor the code."); void ParseOldToolSplinePath(VMainGraphicsScene *scene, const QDomElement &domElement, const Document &parse); void ParseToolSplinePath(VMainGraphicsScene *scene, const QDomElement &domElement, const Document &parse); diff --git a/src/libs/fervor/LICENSE b/src/libs/fervor/LICENSE new file mode 100644 index 000000000..d9c310de8 --- /dev/null +++ b/src/libs/fervor/LICENSE @@ -0,0 +1,7 @@ +Copyright (c) 2012 Linas Valiukas and others. + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/src/libs/fervor/data/Appcast.xml b/src/libs/fervor/data/Appcast.xml new file mode 100644 index 000000000..5812aa0d8 --- /dev/null +++ b/src/libs/fervor/data/Appcast.xml @@ -0,0 +1,48 @@ + + + + + Valentina + http://valentina-project.org/ + Valentina is a cross-platform patternmaking program which allows designers +to create and model patterns of clothing. This software allows pattern +creation, using either standard sizing tables or an individual’s set of +measurements. It blends new technologies with traditional methods to create +a unique pattern making tool. + en + + + + Version 0.4.4 + https://bitbucket.org/dismine/valentina/raw/default/ChangeLog.txt + New minor release + + + + + + + + + + + + + + + diff --git a/src/libs/fervor/fervor.pri b/src/libs/fervor/fervor.pri new file mode 100644 index 000000000..b2b217475 --- /dev/null +++ b/src/libs/fervor/fervor.pri @@ -0,0 +1,18 @@ +# ADD TO EACH PATH $$PWD VARIABLE!!!!!! +# This need for corect working file translations.pro + +SOURCES += \ + $$PWD/fvupdatewindow.cpp \ + $$PWD/fvupdater.cpp \ + $$PWD/fvavailableupdate.cpp + +win32-msvc*:SOURCES += $$PWD/stable.cpp + +HEADERS += \ + $$PWD/fvupdatewindow.h \ + $$PWD/fvupdater.h \ + $$PWD/fvavailableupdate.h \ + $$PWD/stable.h + +FORMS += \ + $$PWD/fvupdatewindow.ui diff --git a/src/libs/fervor/fervor.pro b/src/libs/fervor/fervor.pro new file mode 100644 index 000000000..63eaae37e --- /dev/null +++ b/src/libs/fervor/fervor.pro @@ -0,0 +1,81 @@ +#------------------------------------------------- +# +# Project created by QtCreator 2016-07-14T11:55:03 +# +#------------------------------------------------- + +# File with common stuff for whole project +include(../../../common.pri) + +QT += network widgets xml + +# Name of library +TARGET = fervor + +# We want to create a library +TEMPLATE = lib + +CONFIG += \ + staticlib \# Making static library + c++11 # We use C++11 standard + +# Use out-of-source builds (shadow builds) +CONFIG -= debug_and_release debug_and_release_target + +# Since Qt 5.4.0 the source code location is recorded only in debug builds. +# We need this information also in release builds. For this need define QT_MESSAGELOGCONTEXT. +DEFINES += QT_MESSAGELOGCONTEXT + +include(fervor.pri) + +# This is static library so no need in "make install" + +# directory for executable file +DESTDIR = bin + +# files created moc +MOC_DIR = moc + +# objecs files +OBJECTS_DIR = obj + +# Directory for files created uic +UI_DIR = uic + +# Set using ccache. Function enable_ccache() defined in common.pri. +$$enable_ccache() + +CONFIG(debug, debug|release){ + # Debug mode + unix { + include(warnings.pri) + } else { + *-g++{ + QMAKE_CXXFLAGS += $$GCC_DEBUG_CXXFLAGS # See common.pri for more details. + } + } + +}else{ + # Release mode + !win32-msvc*:CONFIG += silent + DEFINES += V_NO_ASSERT + !unix:*-g++{ + QMAKE_CXXFLAGS += -fno-omit-frame-pointer # Need for exchndl.dll + } + + checkWarnings{ + unix:include(warnings.pri) + } + + noDebugSymbols{ # For enable run qmake with CONFIG+=noDebugSymbols + # do nothing + } else { + !macx:!win32-msvc*{ + # Turn on debug symbols in release mode on Unix systems. + # On Mac OS X temporarily disabled. TODO: find way how to strip binary file. + QMAKE_CXXFLAGS_RELEASE += -g -gdwarf-3 + QMAKE_CFLAGS_RELEASE += -g -gdwarf-3 + QMAKE_LFLAGS_RELEASE = + } + } +} diff --git a/src/libs/fervor/fvavailableupdate.cpp b/src/libs/fervor/fvavailableupdate.cpp new file mode 100644 index 000000000..daf5e0997 --- /dev/null +++ b/src/libs/fervor/fvavailableupdate.cpp @@ -0,0 +1,74 @@ +/*************************************************************************************************** + ** + ** Copyright (c) 2012 Linas Valiukas and others. + ** + ** Permission is hereby granted, free of charge, to any person obtaining a copy of this + ** software and associated documentation files (the "Software"), to deal in the Software + ** without restriction, including without limitation the rights to use, copy, modify, + ** merge, publish, distribute, sublicense, and/or sell copies of the Software, and to + ** permit persons to whom the Software is furnished to do so, subject to the following conditions: + ** + ** The above copyright notice and this permission notice shall be included in all copies or + ** substantial portions of the Software. + ** + ** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT + ** NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + ** NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + ** DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + ** OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + ** + ******************************************************************************************************/ + +#include "fvavailableupdate.h" + +//--------------------------------------------------------------------------------------------------------------------- +FvAvailableUpdate::FvAvailableUpdate(QObject *parent) + : QObject(parent), + m_enclosureUrl(), + m_enclosureVersion(), + m_enclosurePlatform() +{ + // noop +} + +//--------------------------------------------------------------------------------------------------------------------- +QUrl FvAvailableUpdate::GetEnclosureUrl() const +{ + return m_enclosureUrl; +} + +//--------------------------------------------------------------------------------------------------------------------- +void FvAvailableUpdate::SetEnclosureUrl(const QUrl &enclosureUrl) +{ + m_enclosureUrl = enclosureUrl; +} + +//--------------------------------------------------------------------------------------------------------------------- +void FvAvailableUpdate::SetEnclosureUrl(const QString &enclosureUrl) +{ + SetEnclosureUrl(QUrl(enclosureUrl)); +} + +//--------------------------------------------------------------------------------------------------------------------- +QString FvAvailableUpdate::GetEnclosureVersion() const +{ + return m_enclosureVersion; +} + +//--------------------------------------------------------------------------------------------------------------------- +void FvAvailableUpdate::SetEnclosureVersion(const QString &enclosureVersion) +{ + m_enclosureVersion = enclosureVersion; +} + +//--------------------------------------------------------------------------------------------------------------------- +QString FvAvailableUpdate::GetEnclosurePlatform() const +{ + return m_enclosurePlatform; +} + +//--------------------------------------------------------------------------------------------------------------------- +void FvAvailableUpdate::SetEnclosurePlatform(const QString &enclosurePlatform) +{ + m_enclosurePlatform = enclosurePlatform; +} diff --git a/src/libs/fervor/fvavailableupdate.h b/src/libs/fervor/fvavailableupdate.h new file mode 100644 index 000000000..7192df064 --- /dev/null +++ b/src/libs/fervor/fvavailableupdate.h @@ -0,0 +1,52 @@ +/*************************************************************************************************** + ** + ** Copyright (c) 2012 Linas Valiukas and others. + ** + ** Permission is hereby granted, free of charge, to any person obtaining a copy of this + ** software and associated documentation files (the "Software"), to deal in the Software + ** without restriction, including without limitation the rights to use, copy, modify, + ** merge, publish, distribute, sublicense, and/or sell copies of the Software, and to + ** permit persons to whom the Software is furnished to do so, subject to the following conditions: + ** + ** The above copyright notice and this permission notice shall be included in all copies or + ** substantial portions of the Software. + ** + ** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT + ** NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + ** NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + ** DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + ** OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + ** + ******************************************************************************************************/ + +#ifndef FVAVAILABLEUPDATE_H +#define FVAVAILABLEUPDATE_H + +#include +#include + +class FvAvailableUpdate : public QObject +{ + Q_OBJECT +public: + explicit FvAvailableUpdate(QObject *parent = nullptr); + + QUrl GetEnclosureUrl() const; + void SetEnclosureUrl(const QUrl &enclosureUrl); + void SetEnclosureUrl(const QString &enclosureUrl); + + QString GetEnclosureVersion() const; + void SetEnclosureVersion(const QString &enclosureVersion); + + QString GetEnclosurePlatform() const; + void SetEnclosurePlatform(const QString &enclosurePlatform); + +private: + Q_DISABLE_COPY(FvAvailableUpdate) + + QUrl m_enclosureUrl; + QString m_enclosureVersion; + QString m_enclosurePlatform; +}; + +#endif // FVAVAILABLEUPDATE_H diff --git a/src/libs/fervor/fvupdater.cpp b/src/libs/fervor/fvupdater.cpp new file mode 100644 index 000000000..b8646397b --- /dev/null +++ b/src/libs/fervor/fvupdater.cpp @@ -0,0 +1,594 @@ +/*************************************************************************************************** + ** + ** Copyright (c) 2012 Linas Valiukas and others. + ** + ** Permission is hereby granted, free of charge, to any person obtaining a copy of this + ** software and associated documentation files (the "Software"), to deal in the Software + ** without restriction, including without limitation the rights to use, copy, modify, + ** merge, publish, distribute, sublicense, and/or sell copies of the Software, and to + ** permit persons to whom the Software is furnished to do so, subject to the following conditions: + ** + ** The above copyright notice and this permission notice shall be included in all copies or + ** substantial portions of the Software. + ** + ** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT + ** NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + ** NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + ** DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + ** OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + ** + ******************************************************************************************************/ + +#include "fvupdater.h" +#include "../vmisc/projectversion.h" +#include "../vmisc/vabstractapplication.h" +#include "../ifc/xml/vabstractconverter.h" +#include "../ifc/exception/vexception.h" + +#include +#include +#include +#include + +const QString defaultFeedURL = QStringLiteral("http://valentinaproject.bitbucket.org/Appcast.xml"); + +QPointer FvUpdater::m_Instance; + +//--------------------------------------------------------------------------------------------------------------------- +FvUpdater* FvUpdater::sharedUpdater() +{ + static QMutex mutex; + if (m_Instance.isNull()) + { + mutex.lock(); + + if (m_Instance.isNull()) + { + m_Instance = new FvUpdater; + } + + mutex.unlock(); + } + + return m_Instance.data(); +} + +//--------------------------------------------------------------------------------------------------------------------- +void FvUpdater::drop() +{ + static QMutex mutex; + mutex.lock(); + delete m_Instance; + mutex.unlock(); +} + +//--------------------------------------------------------------------------------------------------------------------- +FvUpdater::FvUpdater() + : QObject(nullptr), + m_updaterWindow(nullptr), + m_proposedUpdate(nullptr), + m_silentAsMuchAsItCouldGet(true), + m_feedURL(), + m_qnam(), + m_reply(nullptr), + m_httpRequestAborted(false), + m_xml() +{ + // noop +} + +//--------------------------------------------------------------------------------------------------------------------- +FvUpdater::~FvUpdater() +{ + hideUpdaterWindow(); +} + +//--------------------------------------------------------------------------------------------------------------------- +void FvUpdater::showUpdaterWindowUpdatedWithCurrentUpdateProposal() +{ + // Destroy window if already exists + hideUpdaterWindow(); + + // Create a new window + m_updaterWindow = new FvUpdateWindow(qApp->getMainWindow()); + m_updaterWindow->UpdateWindowWithCurrentProposedUpdate(); + m_updaterWindow->show(); +} + +//--------------------------------------------------------------------------------------------------------------------- +void FvUpdater::hideUpdaterWindow() +{ + if (m_updaterWindow) + { + m_updaterWindow->close(); + } +} + +//--------------------------------------------------------------------------------------------------------------------- +void FvUpdater::SetFeedURL(const QUrl &feedURL) +{ + m_feedURL = feedURL; +} + +//--------------------------------------------------------------------------------------------------------------------- +void FvUpdater::SetFeedURL(const QString &feedURL) +{ + SetFeedURL(QUrl(feedURL)); +} + +//--------------------------------------------------------------------------------------------------------------------- +QString FvUpdater::GetFeedURL() const +{ + return m_feedURL.toString(); +} + +//--------------------------------------------------------------------------------------------------------------------- +QPointer FvUpdater::GetProposedUpdate() +{ + return m_proposedUpdate; +} + +//--------------------------------------------------------------------------------------------------------------------- +void FvUpdater::InstallUpdate() +{ + qDebug() << "Install update"; + + UpdateInstallationConfirmed(); +} + +//--------------------------------------------------------------------------------------------------------------------- +void FvUpdater::SkipUpdate() +{ + qDebug() << "Skip update"; + + QPointer proposedUpdate = GetProposedUpdate(); + if (proposedUpdate.isNull()) + { + qWarning() << "Proposed update is NULL (shouldn't be at this point)"; + return; + } + + // Start ignoring this particular version + IgnoreVersion(proposedUpdate->GetEnclosureVersion()); + + hideUpdaterWindow(); +} + +//--------------------------------------------------------------------------------------------------------------------- +void FvUpdater::RemindMeLater() +{ + qDebug() << "Remind me later"; + + qApp->Settings()->SetDateOfLastRemind(QDate::currentDate()); + + hideUpdaterWindow(); +} + +//--------------------------------------------------------------------------------------------------------------------- +void FvUpdater::UpdateInstallationConfirmed() +{ + qDebug() << "Confirm update installation"; + + QPointer proposedUpdate = GetProposedUpdate(); + if (proposedUpdate.isNull()) + { + qWarning() << "Proposed update is NULL (shouldn't be at this point)"; + return; + } + + // Open a link + if (not QDesktopServices::openUrl(proposedUpdate->GetEnclosureUrl())) + { + showErrorDialog(tr("Cannot open your default browser."), true); + return; + } + + hideUpdaterWindow(); +} + +//--------------------------------------------------------------------------------------------------------------------- +bool FvUpdater::CheckForUpdates(bool silentAsMuchAsItCouldGet) +{ + if (m_feedURL.isEmpty()) + { + qCritical() << "Please set feed URL via setFeedURL() before calling CheckForUpdates()."; + return false; + } + + m_silentAsMuchAsItCouldGet = silentAsMuchAsItCouldGet; + + // Check if application's organization name and domain are set, fail otherwise + // (nowhere to store QSettings to) + if (QApplication::organizationName().isEmpty()) + { + qCritical() << "QApplication::organizationName is not set. Please do that."; + return false; + } + if (QApplication::organizationDomain().isEmpty()) + { + qCritical() << "QApplication::organizationDomain is not set. Please do that."; + return false; + } + + // Set application name / version is not set yet + if (QApplication::applicationName().isEmpty()) + { + qCritical() << "QApplication::applicationName is not set. Please do that."; + return false; + } + + if (QApplication::applicationVersion().isEmpty()) + { + qCritical() << "QApplication::applicationVersion is not set. Please do that."; + return false; + } + + cancelDownloadFeed(); + m_httpRequestAborted = false; + startDownloadFeed(m_feedURL); + + return true; +} + +//--------------------------------------------------------------------------------------------------------------------- +bool FvUpdater::CheckForUpdatesSilent() +{ + if (qApp->Settings()->GetDateOfLastRemind().daysTo(QDate::currentDate()) >= 1) + { + return CheckForUpdates(true); + } + else + { + return true; + } +} + +//--------------------------------------------------------------------------------------------------------------------- +bool FvUpdater::CheckForUpdatesNotSilent() +{ + return CheckForUpdates(false); +} + +//--------------------------------------------------------------------------------------------------------------------- +void FvUpdater::startDownloadFeed(const QUrl &url) +{ + m_xml.clear(); + + QNetworkRequest request; + request.setHeader(QNetworkRequest::ContentTypeHeader, QStringLiteral("application/xml")); + request.setHeader(QNetworkRequest::UserAgentHeader, QApplication::applicationName()); + request.setUrl(url); + + m_reply = m_qnam.get(request); + + connect(m_reply, &QNetworkReply::readyRead, [this]() + { + // this slot gets called every time the QNetworkReply has new data. + // We read all of its new data and write it into the file. + // That way we use less RAM than when reading it at the finished() + // signal of the QNetworkReply + m_xml.addData(m_reply->readAll()); + }); + connect(m_reply, &QNetworkReply::downloadProgress, [this](qint64 bytesRead, qint64 totalBytes) + { + Q_UNUSED(bytesRead); + Q_UNUSED(totalBytes); + + if (m_httpRequestAborted) + { + return; + } + }); + connect(m_reply, &QNetworkReply::finished, this, &FvUpdater::httpFeedDownloadFinished); +} + +//--------------------------------------------------------------------------------------------------------------------- +void FvUpdater::cancelDownloadFeed() +{ + if (m_reply) + { + m_httpRequestAborted = true; + m_reply->abort(); + } +} + +//--------------------------------------------------------------------------------------------------------------------- +void FvUpdater::httpFeedDownloadFinished() +{ + if (m_httpRequestAborted) + { + m_reply->deleteLater(); + return; + } + + const QVariant redirectionTarget = m_reply->attribute(QNetworkRequest::RedirectionTargetAttribute); + if (m_reply->error()) + { + // Error. + showErrorDialog(tr("Feed download failed: %1.").arg(m_reply->errorString()), false); + } + else if (not redirectionTarget.isNull()) + { + const QUrl newUrl = m_feedURL.resolved(redirectionTarget.toUrl()); + + m_feedURL = newUrl; + m_reply->deleteLater(); + + startDownloadFeed(m_feedURL); + return; + } + else + { + // Done. + xmlParseFeed(); + } + + m_reply->deleteLater(); + m_reply = 0; +} + +//--------------------------------------------------------------------------------------------------------------------- +bool FvUpdater::xmlParseFeed() +{ + QString xmlEnclosureUrl, xmlEnclosureVersion, xmlEnclosurePlatform; + + // Parse + while (not m_xml.atEnd()) + { + m_xml.readNext(); + + if (m_xml.isStartElement()) + { + if (m_xml.name() == QLatin1String("item")) + { + xmlEnclosureUrl.clear(); + xmlEnclosureVersion.clear(); + xmlEnclosurePlatform.clear(); + } + else if (m_xml.name() == QLatin1String("enclosure")) + { + const QXmlStreamAttributes attribs = m_xml.attributes(); + const QString fervorPlatform = QStringLiteral("fervor:platform"); + + if (attribs.hasAttribute(fervorPlatform)) + { + if (CurrentlyRunningOnPlatform(attribs.value(fervorPlatform).toString().trimmed())) + { + xmlEnclosurePlatform = attribs.value(fervorPlatform).toString().trimmed(); + + const QString attributeUrl = QStringLiteral("url"); + if (attribs.hasAttribute(attributeUrl)) + { + xmlEnclosureUrl = attribs.value(attributeUrl).toString().trimmed(); + } + else + { + xmlEnclosureUrl.clear(); + } + + const QString fervorVersion = QStringLiteral("fervor:version"); + if (attribs.hasAttribute(fervorVersion)) + { + const QString candidateVersion = attribs.value(fervorVersion).toString().trimmed(); + if (not candidateVersion.isEmpty()) + { + xmlEnclosureVersion = candidateVersion; + } + } + } + } + } + } + else if (m_xml.isEndElement()) + { + if (m_xml.name() == QLatin1String("item")) + { + // That's it - we have analyzed a single and we'll stop + // here (because the topmost is the most recent one, and thus + // the newest version. + + return searchDownloadedFeedForUpdates(xmlEnclosureUrl, + xmlEnclosureVersion, + xmlEnclosurePlatform); + } + } + + if (m_xml.error() && m_xml.error() != QXmlStreamReader::PrematureEndOfDocumentError) + { + showErrorDialog(tr("Feed parsing failed: %1 %2.").arg(QString::number(m_xml.lineNumber()), + m_xml.errorString()), false); + return false; + + } + } + + // No updates were found if we're at this point + // (not a single element found) + showInformationDialog(tr("No updates were found."), false); + + return false; +} + +//--------------------------------------------------------------------------------------------------------------------- +bool FvUpdater::searchDownloadedFeedForUpdates(const QString &xmlEnclosureUrl, + const QString &xmlEnclosureVersion, + const QString &xmlEnclosurePlatform) +{ + qDebug() << "Enclosure URL:" << xmlEnclosureUrl; + qDebug() << "Enclosure version:" << xmlEnclosureVersion; + qDebug() << "Enclosure platform:" << xmlEnclosurePlatform; + + // Validate + if (xmlEnclosureUrl.isEmpty() || xmlEnclosureVersion.isEmpty() || xmlEnclosurePlatform.isEmpty()) + { + showErrorDialog(tr("Feed error: invalid \"enclosure\" with the download link"), false); + return false; + } + + // Relevant version? + if (VersionIsIgnored(xmlEnclosureVersion)) + { + qDebug() << "Version '" << xmlEnclosureVersion << "' is ignored, too old or something like that."; + + showInformationDialog(tr("No updates were found."), false); + + return true; // Things have succeeded when you think of it. + } + + // + // Success! At this point, we have found an update that can be proposed + // to the user. + // + + if (m_proposedUpdate) + { + delete m_proposedUpdate; + } + m_proposedUpdate = new FvAvailableUpdate(this); + m_proposedUpdate->SetEnclosureUrl(xmlEnclosureUrl); + m_proposedUpdate->SetEnclosureVersion(xmlEnclosureVersion); + m_proposedUpdate->SetEnclosurePlatform(xmlEnclosurePlatform); + + // Show "look, there's an update" window + showUpdaterWindowUpdatedWithCurrentUpdateProposal(); + + return true; +} + +//--------------------------------------------------------------------------------------------------------------------- +bool FvUpdater::VersionIsIgnored(const QString &version) +{ + // We assume that variable 'version' contains either: + // 1) The current version of the application (ignore) + // 2) The version that was skipped before and thus stored in QSettings (ignore) + // 3) A newer version (don't ignore) + // 'version' is not likely to contain an older version in any case. + + int decVersion = 0x0; + try + { + decVersion = VAbstractConverter::GetVersion(version); + } + catch (const VException &e) + { + Q_UNUSED(e) + return true; // Ignore invalid version + } + + if (decVersion == APP_VERSION) + { + return true; + } + + const int lastSkippedVersion = qApp->Settings()->GetLatestSkippedVersion(); + if (lastSkippedVersion != 0x0) + { + if (decVersion == lastSkippedVersion) + { + // Implicitly skipped version - skip + return true; + } + } + + if (decVersion > APP_VERSION) + { + // Newer version - do not skip + return false; + } + + // Fallback - skip + return true; +} + +//--------------------------------------------------------------------------------------------------------------------- +void FvUpdater::IgnoreVersion(const QString &version) +{ + int decVersion = 0x0; + try + { + decVersion = VAbstractConverter::GetVersion(version); + } + catch (const VException &e) + { + Q_UNUSED(e) + return ; // Ignore invalid version + } + + if (decVersion == APP_VERSION) + { + // Don't ignore the current version + return; + } + + qApp->Settings()->SetLatestSkippedVersion(decVersion); +} + +//--------------------------------------------------------------------------------------------------------------------- +bool FvUpdater::CurrentlyRunningOnPlatform(const QString &platform) +{ + const QStringList platforms = QStringList() << "Q_OS_LINUX" + << "Q_OS_MAC" + << "Q_OS_WIN32"; + + switch (platforms.indexOf(platform.toUpper().trimmed())) + { + case 0: // Q_OS_LINUX +#ifdef Q_OS_LINUX // Defined on Linux. + return true; +#endif + break; + case 1: // Q_OS_MAC +#ifdef Q_OS_MAC // Defined on MAC OS (synonym for Darwin). + return true; +#endif + break; + case 2: // Q_OS_WIN32 +#ifdef Q_OS_WIN32 // Defined on all supported versions of Windows. + return true; +#endif + break; + default: + break; + } + + // Fallback + return false; +} + +//--------------------------------------------------------------------------------------------------------------------- +void FvUpdater::showErrorDialog(const QString &message, bool showEvenInSilentMode) +{ + if (m_silentAsMuchAsItCouldGet) + { + if (not showEvenInSilentMode) + { + // Don't show errors in the silent mode + return; + } + } + + QMessageBox dlFailedMsgBox; + dlFailedMsgBox.setIcon(QMessageBox::Critical); + dlFailedMsgBox.setText(tr("Error")); + dlFailedMsgBox.setInformativeText(message); + dlFailedMsgBox.exec(); +} + +//--------------------------------------------------------------------------------------------------------------------- +void FvUpdater::showInformationDialog(const QString &message, bool showEvenInSilentMode) +{ + if (m_silentAsMuchAsItCouldGet) + { + if (not showEvenInSilentMode) + { + // Don't show information dialogs in the silent mode + return; + } + } + + QMessageBox dlInformationMsgBox; + dlInformationMsgBox.setIcon(QMessageBox::Information); + dlInformationMsgBox.setText(tr("Information")); + dlInformationMsgBox.setInformativeText(message); + dlInformationMsgBox.exec(); +} diff --git a/src/libs/fervor/fvupdater.h b/src/libs/fervor/fvupdater.h new file mode 100644 index 000000000..47879dc13 --- /dev/null +++ b/src/libs/fervor/fvupdater.h @@ -0,0 +1,128 @@ +/*************************************************************************************************** + ** + ** Copyright (c) 2012 Linas Valiukas and others. + ** + ** Permission is hereby granted, free of charge, to any person obtaining a copy of this + ** software and associated documentation files (the "Software"), to deal in the Software + ** without restriction, including without limitation the rights to use, copy, modify, + ** merge, publish, distribute, sublicense, and/or sell copies of the Software, and to + ** permit persons to whom the Software is furnished to do so, subject to the following conditions: + ** + ** The above copyright notice and this permission notice shall be included in all copies or + ** substantial portions of the Software. + ** + ** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT + ** NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + ** NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + ** DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + ** OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + ** + ******************************************************************************************************/ + +#ifndef FVUPDATER_H +#define FVUPDATER_H + +#include +#include +#include +#include +#include +#include + +#include "fvupdatewindow.h" +#include "fvavailableupdate.h" + +extern const QString defaultFeedURL; + +class FvUpdater : public QObject +{ + Q_OBJECT + +public: + // Singleton + static FvUpdater* sharedUpdater(); + static void drop(); + + // Set / get feed URL + void SetFeedURL(const QUrl &feedURL); + void SetFeedURL(const QString &feedURL); + QString GetFeedURL() const; + +public slots: + // Check for updates + bool CheckForUpdates(bool silentAsMuchAsItCouldGet = true); + + // Aliases + bool CheckForUpdatesSilent(); + bool CheckForUpdatesNotSilent(); + +protected: + friend class FvUpdateWindow; // Uses GetProposedUpdate() and others + QPointer GetProposedUpdate(); + +protected slots: + // Update window button slots + void InstallUpdate(); + void SkipUpdate(); + void RemindMeLater(); + + // Update confirmation dialog button slots + void UpdateInstallationConfirmed(); + +private slots: + void httpFeedDownloadFinished(); + +private: + // + // Singleton business + // + Q_DISABLE_COPY(FvUpdater) + FvUpdater(); // Hide main constructor + virtual ~FvUpdater(); // Hide main destructor + + static QPointer m_Instance; // Singleton instance + + QPointer m_updaterWindow; // Updater window (NULL if not shown) + + // Available update (NULL if not fetched) + QPointer m_proposedUpdate; + + // If true, don't show the error dialogs and the "no updates." dialog + // (silentAsMuchAsItCouldGet from CheckForUpdates() goes here) + // Useful for automatic update checking upon application startup. + bool m_silentAsMuchAsItCouldGet; + + // + // HTTP feed fetcher infrastructure + // + QUrl m_feedURL; // Feed URL that will be fetched + QNetworkAccessManager m_qnam; + QNetworkReply* m_reply; + bool m_httpRequestAborted; + + QXmlStreamReader m_xml; // XML data collector and parser + + void showUpdaterWindowUpdatedWithCurrentUpdateProposal(); // Show updater window + void hideUpdaterWindow(); // Hide + destroy m_updaterWindow + + void startDownloadFeed(const QUrl &url); // Start downloading feed + void cancelDownloadFeed(); // Stop downloading the current feed + + // Dialogs (notifications) + // Show an error message + void showErrorDialog(const QString &message, bool showEvenInSilentMode = false); + // Show an informational message + void showInformationDialog(const QString &message, bool showEvenInSilentMode = false); + + + bool xmlParseFeed(); // Parse feed in m_xml + bool searchDownloadedFeedForUpdates(const QString &xmlEnclosureUrl, + const QString &xmlEnclosureVersion, + const QString &xmlEnclosurePlatform); + + static bool VersionIsIgnored(const QString &version); + static void IgnoreVersion(const QString &version); + static bool CurrentlyRunningOnPlatform(const QString &platform); +}; + +#endif // FVUPDATER_H diff --git a/src/libs/fervor/fvupdatewindow.cpp b/src/libs/fervor/fvupdatewindow.cpp new file mode 100644 index 000000000..16525e05e --- /dev/null +++ b/src/libs/fervor/fvupdatewindow.cpp @@ -0,0 +1,72 @@ +/*************************************************************************************************** + ** + ** Copyright (c) 2012 Linas Valiukas and others. + ** + ** Permission is hereby granted, free of charge, to any person obtaining a copy of this + ** software and associated documentation files (the "Software"), to deal in the Software + ** without restriction, including without limitation the rights to use, copy, modify, + ** merge, publish, distribute, sublicense, and/or sell copies of the Software, and to + ** permit persons to whom the Software is furnished to do so, subject to the following conditions: + ** + ** The above copyright notice and this permission notice shall be included in all copies or + ** substantial portions of the Software. + ** + ** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT + ** NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + ** NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + ** DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + ** OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + ** + ******************************************************************************************************/ + +#include "fvupdatewindow.h" +#include "ui_fvupdatewindow.h" +#include "fvupdater.h" +#include "fvavailableupdate.h" + +#include +#include +#include + +//--------------------------------------------------------------------------------------------------------------------- +FvUpdateWindow::FvUpdateWindow(QWidget *parent) + : QDialog(parent), + m_ui(new Ui::FvUpdateWindow), + m_appIconScene(nullptr) +{ + m_ui->setupUi(this); + + // Delete on close + setAttribute(Qt::WA_DeleteOnClose, true); + + // Set the "new version is available" string + const QString newVersString = m_ui->newVersionIsAvailableLabel->text().arg(qApp->applicationDisplayName()); + m_ui->newVersionIsAvailableLabel->setText(newVersString); + + // Connect buttons + connect(m_ui->installUpdateButton, &QPushButton::clicked, FvUpdater::sharedUpdater(), &FvUpdater::InstallUpdate); + connect(m_ui->skipThisVersionButton, &QPushButton::clicked, FvUpdater::sharedUpdater(), &FvUpdater::SkipUpdate); + connect(m_ui->remindMeLaterButton, &QPushButton::clicked, FvUpdater::sharedUpdater(), &FvUpdater::RemindMeLater); +} + +//--------------------------------------------------------------------------------------------------------------------- +FvUpdateWindow::~FvUpdateWindow() +{ + delete m_ui; +} + +//--------------------------------------------------------------------------------------------------------------------- +bool FvUpdateWindow::UpdateWindowWithCurrentProposedUpdate() +{ + QPointer proposedUpdate = FvUpdater::sharedUpdater()->GetProposedUpdate(); + if (proposedUpdate.isNull()) + { + return false; + } + + const QString downloadString = m_ui->wouldYouLikeToDownloadLabel->text() + .arg(qApp->applicationDisplayName(), proposedUpdate->GetEnclosureVersion(), qApp->applicationVersion()); + m_ui->wouldYouLikeToDownloadLabel->setText(downloadString); + + return true; +} diff --git a/src/libs/fervor/fvupdatewindow.h b/src/libs/fervor/fvupdatewindow.h new file mode 100644 index 000000000..37cbacd4c --- /dev/null +++ b/src/libs/fervor/fvupdatewindow.h @@ -0,0 +1,53 @@ +/*************************************************************************************************** + ** + ** Copyright (c) 2012 Linas Valiukas and others. + ** + ** Permission is hereby granted, free of charge, to any person obtaining a copy of this + ** software and associated documentation files (the "Software"), to deal in the Software + ** without restriction, including without limitation the rights to use, copy, modify, + ** merge, publish, distribute, sublicense, and/or sell copies of the Software, and to + ** permit persons to whom the Software is furnished to do so, subject to the following conditions: + ** + ** The above copyright notice and this permission notice shall be included in all copies or + ** substantial portions of the Software. + ** + ** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT + ** NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + ** NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + ** DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + ** OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + ** + ******************************************************************************************************/ + +#ifndef FVUPDATEWINDOW_H +#define FVUPDATEWINDOW_H + +#include + +class QGraphicsScene; + +namespace Ui +{ + class FvUpdateWindow; +} + +class FvUpdateWindow : public QDialog +{ + Q_OBJECT + +public: + explicit FvUpdateWindow(QWidget *parent = nullptr); + virtual ~FvUpdateWindow(); + + // Update the current update proposal from FvUpdater + bool UpdateWindowWithCurrentProposedUpdate(); + +private: + Q_DISABLE_COPY(FvUpdateWindow) + + Ui::FvUpdateWindow* m_ui; + QGraphicsScene* m_appIconScene; + +}; + +#endif // FVUPDATEWINDOW_H diff --git a/src/libs/fervor/fvupdatewindow.ui b/src/libs/fervor/fvupdatewindow.ui new file mode 100644 index 000000000..da38a53f5 --- /dev/null +++ b/src/libs/fervor/fvupdatewindow.ui @@ -0,0 +1,98 @@ + + + FvUpdateWindow + + + + 0 + 0 + 520 + 95 + + + + Software Update + + + + :/icon/64x64/icon64x64.png:/icon/64x64/icon64x64.png + + + + + + + + + 75 + true + + + + A new version of %1 is available! + + + + + + + %1 %2 is now available - you have %3. Would you like to download it now? + + + + + + + + + Skip This Version + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Remind Me Later + + + + + + + + + + Get Update + + + true + + + true + + + + + + + + + + + + + + diff --git a/src/libs/fervor/stable.cpp b/src/libs/fervor/stable.cpp new file mode 100644 index 000000000..a42d3fd7c --- /dev/null +++ b/src/libs/fervor/stable.cpp @@ -0,0 +1,30 @@ +/************************************************************************ + ** + ** @file stable.cpp + ** @author Roman Telezhynskyi + ** @date 10 12, 2014 + ** + ** @brief + ** @copyright + ** This source code is part of the Valentine project, a pattern making + ** program, whose allow create and modeling patterns of clothing. + ** Copyright (C) 2013-2015 Valentina project + ** 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 . + ** + *************************************************************************/ + +// Build the precompiled headers. +#include "stable.h" diff --git a/src/libs/fervor/stable.h b/src/libs/fervor/stable.h new file mode 100644 index 000000000..30cc6b879 --- /dev/null +++ b/src/libs/fervor/stable.h @@ -0,0 +1,65 @@ +/************************************************************************ + ** + ** @file stable.h + ** @author Roman Telezhynskyi + ** @date 10 12, 2014 + ** + ** @brief + ** @copyright + ** This source code is part of the Valentine project, a pattern making + ** program, whose allow create and modeling patterns of clothing. + ** Copyright (C) 2013-2015 Valentina project + ** 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 . + ** + *************************************************************************/ + +#ifndef STABLE_H +#define STABLE_H + +/* I like to include this pragma too, so the build log indicates if pre-compiled headers were in use. */ +#pragma message("Compiling precompiled headers for Fervor library.\n") + +/* Add C includes here */ + +#if defined __cplusplus +/* Add C++ includes here */ + +#ifdef QT_CORE_LIB +#include +#endif + +#ifdef QT_XML_LIB +# include +#endif + +//In Windows you can't use those headers in all modes. +#if !defined(Q_OS_WIN) +# ifdef QT_PRINTSUPPORT_LIB +# include +# endif + +# ifdef QT_XMLPATTERNS_LIB +# include +# endif + +# ifdef QT_NETWORK_LIB +# include +# endif +#endif/*Q_OS_WIN*/ + +#endif/*__cplusplus*/ + +#endif // STABLE_H diff --git a/src/libs/fervor/warnings.pri b/src/libs/fervor/warnings.pri new file mode 100644 index 000000000..8bd738583 --- /dev/null +++ b/src/libs/fervor/warnings.pri @@ -0,0 +1,45 @@ +#Turn on compilers warnings. +*-g++{ + QMAKE_CXXFLAGS += \ + # Key -isystem disable checking errors in system headers. + -isystem "$${OUT_PWD}/$${MOC_DIR}" \ + -isystem "$${OUT_PWD}/$${UI_DIR}" \ + $$GCC_DEBUG_CXXFLAGS # See common.pri for more details. + + checkWarnings{ # For enable run qmake with CONFIG+=checkWarnings + QMAKE_CXXFLAGS += -Werror + } + + noAddressSanitizer{ # For enable run qmake with CONFIG+=noAddressSanitizer + # do nothing + } else { + #gcc’s 4.8.0 Address Sanitizer + #http://blog.qt.digia.com/blog/2013/04/17/using-gccs-4-8-0-address-sanitizer-with-qt/ + QMAKE_CXXFLAGS += -fsanitize=address -fno-omit-frame-pointer + QMAKE_CFLAGS += -fsanitize=address -fno-omit-frame-pointer + QMAKE_LFLAGS += -fsanitize=address + } +} + +clang*{ + QMAKE_CXXFLAGS += \ + # Key -isystem disable checking errors in system headers. + -isystem "$${OUT_PWD}/$${MOC_DIR}" \ + -isystem "$${OUT_PWD}/$${UI_DIR}" \ + $$CLANG_DEBUG_CXXFLAGS # See common.pri for more details. + + checkWarnings{ # For enable run qmake with CONFIG+=checkWarnings + QMAKE_CXXFLAGS += -Werror + } +} + +*-icc-*{ + QMAKE_CXXFLAGS += \ + -isystem "$${OUT_PWD}/$${MOC_DIR}" \ + -isystem "$${OUT_PWD}/$${UI_DIR}" \ + $$ICC_DEBUG_CXXFLAGS + + checkWarnings{ # For enable run qmake with CONFIG+=checkWarnings + QMAKE_CXXFLAGS += -Werror + } +} diff --git a/src/libs/ifc/ifc.pro b/src/libs/ifc/ifc.pro index aa213c227..b115a0547 100644 --- a/src/libs/ifc/ifc.pro +++ b/src/libs/ifc/ifc.pro @@ -56,43 +56,7 @@ $$enable_ccache() CONFIG(debug, debug|release){ # Debug mode unix { - #Turn on compilers warnings. - *-g++{ - QMAKE_CXXFLAGS += \ - # Key -isystem disable checking errors in system headers. - -isystem "$${OUT_PWD}/$${MOC_DIR}" \ - -isystem "$${OUT_PWD}/$${RCC_DIR}" \ - $$GCC_DEBUG_CXXFLAGS # See common.pri for more details. - - noAddressSanitizer{ # For enable run qmake with CONFIG+=noAddressSanitizer - # do nothing - } else { - #gcc’s 4.8.0 Address Sanitizer - #http://blog.qt.digia.com/blog/2013/04/17/using-gccs-4-8-0-address-sanitizer-with-qt/ - QMAKE_CXXFLAGS += -fsanitize=address -fno-omit-frame-pointer - QMAKE_CFLAGS += -fsanitize=address -fno-omit-frame-pointer - QMAKE_LFLAGS += -fsanitize=address - } - } - clang*{ - QMAKE_CXXFLAGS += \ - # Key -isystem disable checking errors in system headers. - -isystem "$${OUT_PWD}/$${MOC_DIR}" \ - -isystem "$${OUT_PWD}/$${RCC_DIR}" \ - $$CLANG_DEBUG_CXXFLAGS # See common.pri for more details. - - # -isystem key works only for headers. In some cases it's not enough. But we can't delete these warnings and - # want them in global list. Compromise decision delete them from local list. - QMAKE_CXXFLAGS -= \ - -Wmissing-prototypes \ - -Wundefined-reinterpret-cast - } - *-icc-*{ - QMAKE_CXXFLAGS += \ - -isystem "$${OUT_PWD}/$${MOC_DIR}" \ - -isystem "$${OUT_PWD}/$${RCC_DIR}" \ - $$ICC_DEBUG_CXXFLAGS - } + include(warnings.pri) } else { *-g++{ QMAKE_CXXFLAGS += $$GCC_DEBUG_CXXFLAGS # See common.pri for more details. @@ -107,6 +71,10 @@ CONFIG(debug, debug|release){ QMAKE_CXXFLAGS += -fno-omit-frame-pointer # Need for exchndl.dll } + checkWarnings{ + unix:include(warnings.pri) + } + noDebugSymbols{ # For enable run qmake with CONFIG+=noDebugSymbols # do nothing } else { diff --git a/src/libs/ifc/warnings.pri b/src/libs/ifc/warnings.pri new file mode 100644 index 000000000..be993a88e --- /dev/null +++ b/src/libs/ifc/warnings.pri @@ -0,0 +1,51 @@ +#Turn on compilers warnings. +*-g++{ + QMAKE_CXXFLAGS += \ + # Key -isystem disable checking errors in system headers. + -isystem "$${OUT_PWD}/$${MOC_DIR}" \ + -isystem "$${OUT_PWD}/$${RCC_DIR}" \ + $$GCC_DEBUG_CXXFLAGS # See common.pri for more details. + + checkWarnings{ # For enable run qmake with CONFIG+=checkWarnings + QMAKE_CXXFLAGS += -Werror + } + + noAddressSanitizer{ # For enable run qmake with CONFIG+=noAddressSanitizer + # do nothing + } else { + #gcc’s 4.8.0 Address Sanitizer + #http://blog.qt.digia.com/blog/2013/04/17/using-gccs-4-8-0-address-sanitizer-with-qt/ + QMAKE_CXXFLAGS += -fsanitize=address -fno-omit-frame-pointer + QMAKE_CFLAGS += -fsanitize=address -fno-omit-frame-pointer + QMAKE_LFLAGS += -fsanitize=address + } +} + +clang*{ + QMAKE_CXXFLAGS += \ + # Key -isystem disable checking errors in system headers. + -isystem "$${OUT_PWD}/$${MOC_DIR}" \ + -isystem "$${OUT_PWD}/$${RCC_DIR}" \ + $$CLANG_DEBUG_CXXFLAGS # See common.pri for more details. + + checkWarnings{ # For enable run qmake with CONFIG+=checkWarnings + QMAKE_CXXFLAGS += -Werror + } + + # -isystem key works only for headers. In some cases it's not enough. But we can't delete these warnings and + # want them in global list. Compromise decision delete them from local list. + QMAKE_CXXFLAGS -= \ + -Wmissing-prototypes \ + -Wundefined-reinterpret-cast +} + +*-icc-*{ + QMAKE_CXXFLAGS += \ + -isystem "$${OUT_PWD}/$${MOC_DIR}" \ + -isystem "$${OUT_PWD}/$${RCC_DIR}" \ + $$ICC_DEBUG_CXXFLAGS + + checkWarnings{ # For enable run qmake with CONFIG+=checkWarnings + QMAKE_CXXFLAGS += -Werror + } +} diff --git a/src/libs/ifc/xml/vabstractconverter.cpp b/src/libs/ifc/xml/vabstractconverter.cpp index 2c89eda77..3f057de70 100644 --- a/src/libs/ifc/xml/vabstractconverter.cpp +++ b/src/libs/ifc/xml/vabstractconverter.cpp @@ -33,6 +33,7 @@ #include #include #include +#include //--------------------------------------------------------------------------------------------------------------------- VAbstractConverter::VAbstractConverter(const QString &fileName) @@ -56,7 +57,7 @@ void VAbstractConverter::Convert() } QString error; - const QString backupFileName = fileName + QLatin1Literal(".backup"); + const QString backupFileName = fileName + QLatin1String(".backup"); if (SafeCopy(fileName, backupFileName, error) == false) { const QString errorMsg(tr("Error creating a backup file: %1.").arg(error)); @@ -107,7 +108,7 @@ QString VAbstractConverter::GetVersionStr() const } //--------------------------------------------------------------------------------------------------------------------- -int VAbstractConverter::GetVersion(const QString &version) const +int VAbstractConverter::GetVersion(const QString &version) { ValidateVersion(version); @@ -138,11 +139,11 @@ int VAbstractConverter::GetVersion(const QString &version) const } //--------------------------------------------------------------------------------------------------------------------- -void VAbstractConverter::ValidateVersion(const QString &version) const +void VAbstractConverter::ValidateVersion(const QString &version) { - const QRegExp rx(QStringLiteral("^(0|([1-9][0-9]*)).(0|([1-9][0-9]*)).(0|([1-9][0-9]*))$")); + const QRegularExpression rx(QStringLiteral("^(0|([1-9][0-9]*)).(0|([1-9][0-9]*)).(0|([1-9][0-9]*))$")); - if (rx.exactMatch(version) == false) + if (rx.match(version).hasMatch() == false) { const QString errorMsg(tr("Version \"%1\" invalid.").arg(version)); throw VException(errorMsg); diff --git a/src/libs/ifc/xml/vabstractconverter.h b/src/libs/ifc/xml/vabstractconverter.h index 6fa3599ee..6a7a28992 100644 --- a/src/libs/ifc/xml/vabstractconverter.h +++ b/src/libs/ifc/xml/vabstractconverter.h @@ -31,6 +31,8 @@ #include "vdomdocument.h" +#define CONVERTER_VERSION_CHECK(major, minor, patch) ((major<<16)|(minor<<8)|(patch)) + class VAbstractConverter :public VDomDocument { Q_DECLARE_TR_FUNCTIONS(VAbstractConverter) @@ -41,12 +43,13 @@ public: void Convert(); virtual bool SaveDocument(const QString &fileName, QString &error) const Q_DECL_OVERRIDE; + static int GetVersion(const QString &version); + protected: int ver; QString fileName; void ValidateInputFile(const QString ¤tSchema) const; - int GetVersion(const QString &version) const; Q_NORETURN void InvalidVersion(int ver) const; void Save() const; void SetVersion(const QString &version); @@ -70,7 +73,7 @@ private: QString GetVersionStr() const; - void ValidateVersion(const QString &version) const; + static void ValidateVersion(const QString &version); void ReserveFile() const; }; diff --git a/src/libs/ifc/xml/vabstractpattern.cpp b/src/libs/ifc/xml/vabstractpattern.cpp index db7b7d50b..015f57b62 100644 --- a/src/libs/ifc/xml/vabstractpattern.cpp +++ b/src/libs/ifc/xml/vabstractpattern.cpp @@ -149,7 +149,7 @@ QStringList VAbstractPattern::ListMeasurements() const const QList tValues = tokens.values(); for (int j = 0; j < tValues.size(); ++j) { - if (tValues.at(j) == QLatin1Literal("-")) + if (tValues.at(j) == QLatin1String("-")) { continue; } @@ -1052,17 +1052,6 @@ void VAbstractPattern::haveLiteChange() emit patternChanged(false); } -//--------------------------------------------------------------------------------------------------------------------- -/** - * @brief ShowHistoryTool hightlight tool. - * @param id tool id. - * @param enable enable or diasable hightlight. - */ -void VAbstractPattern::ShowHistoryTool(quint32 id, bool enable) -{ - emit ShowTool(id, enable); -} - //--------------------------------------------------------------------------------------------------------------------- void VAbstractPattern::NeedFullParsing() { @@ -1137,11 +1126,11 @@ QDomElement VAbstractPattern::CheckTagExists(const QString &tag) element = createElement(TagGradation); QDomElement heights = createElement(TagHeights); - heights.setAttribute(AttrAll, QLatin1Literal("true")); + heights.setAttribute(AttrAll, QLatin1String("true")); element.appendChild(heights); QDomElement sizes = createElement(TagSizes); - sizes.setAttribute(AttrAll, QLatin1Literal("true")); + sizes.setAttribute(AttrAll, QLatin1String("true")); element.appendChild(sizes); break; } diff --git a/src/libs/ifc/xml/vabstractpattern.h b/src/libs/ifc/xml/vabstractpattern.h index 172f7cce3..1788c8ca9 100644 --- a/src/libs/ifc/xml/vabstractpattern.h +++ b/src/libs/ifc/xml/vabstractpattern.h @@ -253,7 +253,6 @@ signals: public slots: virtual void LiteParseTree(const Document &parse)=0; void haveLiteChange(); - void ShowHistoryTool(quint32 id, bool enable); void NeedFullParsing(); void ClearScene(); diff --git a/src/libs/ifc/xml/vdomdocument.cpp b/src/libs/ifc/xml/vdomdocument.cpp index 0a44f9841..11eaef7cc 100644 --- a/src/libs/ifc/xml/vdomdocument.cpp +++ b/src/libs/ifc/xml/vdomdocument.cpp @@ -771,7 +771,7 @@ bool VDomDocument::SafeCopy(const QString &source, const QString &destination, Q qt_ntfs_permission_lookup++; // turn checking on #endif /*Q_OS_WIN32*/ - QTemporaryFile destFile(destination + QLatin1Literal(".XXXXXX")); + QTemporaryFile destFile(destination + QLatin1String(".XXXXXX")); destFile.setAutoRemove(false); if (not destFile.open()) { diff --git a/src/libs/ifc/xml/vdomdocument.h b/src/libs/ifc/xml/vdomdocument.h index 4972d7796..6c51cacee 100644 --- a/src/libs/ifc/xml/vdomdocument.h +++ b/src/libs/ifc/xml/vdomdocument.h @@ -139,9 +139,7 @@ template */ inline void VDomDocument::SetAttribute(QDomElement &domElement, const QString &name, const T &value) const { - QString val = QString().setNum(value); - val = val.replace(",", "."); - domElement.setAttribute(name, val); + domElement.setAttribute(name, QString().setNum(value).replace(QLatin1String(","), QLatin1String("."))); } //--------------------------------------------------------------------------------------------------------------------- @@ -156,16 +154,7 @@ inline void VDomDocument::SetAttribute(QDomElement &domElement, const Q template <> inline void VDomDocument::SetAttribute(QDomElement &domElement, const QString &name, const bool &value) const { - QString string; - if (value) - { - string = "true"; - } - else - { - string = "false"; - } - domElement.setAttribute(name, string); + domElement.setAttribute(name, value ? QStringLiteral("true") : QStringLiteral("false")); } //--------------------------------------------------------------------------------------------------------------------- @@ -173,14 +162,8 @@ template <> inline void VDomDocument::SetAttribute(QDomElement &domElement, const QString &name, const MeasurementsType &value) const { - if (value == MeasurementsType::Standard) - { - domElement.setAttribute(name, "standard"); - } - else - { - domElement.setAttribute(name, "individual"); - } + domElement.setAttribute(name, value == MeasurementsType::Standard ? QStringLiteral("standard") : + QStringLiteral("individual")); } #ifdef Q_CC_GNU diff --git a/src/libs/ifc/xml/vpatternconverter.cpp b/src/libs/ifc/xml/vpatternconverter.cpp index cb16a65fc..f9170188c 100644 --- a/src/libs/ifc/xml/vpatternconverter.cpp +++ b/src/libs/ifc/xml/vpatternconverter.cpp @@ -46,6 +46,9 @@ const QString VPatternConverter::PatternMinVerStr = QStringLiteral("0.1.0"); const QString VPatternConverter::PatternMaxVerStr = QStringLiteral("0.3.2"); const QString VPatternConverter::CurrentSchema = QStringLiteral("://schema/pattern/v0.3.2.xsd"); +constexpr int VPatternConverter::PatternMinVer; // <== DON'T FORGET TO UPDATE TOO!!!! +constexpr int VPatternConverter::PatternMaxVer; // <== DON'T FORGET TO UPDATE TOO!!!! + //--------------------------------------------------------------------------------------------------------------------- VPatternConverter::VPatternConverter(const QString &fileName) :VAbstractConverter(fileName) @@ -57,30 +60,6 @@ VPatternConverter::VPatternConverter(const QString &fileName) VPatternConverter::~VPatternConverter() {} -//--------------------------------------------------------------------------------------------------------------------- -int VPatternConverter::MinVer() const -{ - return GetVersion(PatternMinVerStr); -} - -//--------------------------------------------------------------------------------------------------------------------- -int VPatternConverter::MaxVer() const -{ - return GetVersion(PatternMaxVerStr); -} - -//--------------------------------------------------------------------------------------------------------------------- -QString VPatternConverter::MinVerStr() const -{ - return PatternMinVerStr; -} - -//--------------------------------------------------------------------------------------------------------------------- -QString VPatternConverter::MaxVerStr() const -{ - return PatternMaxVerStr; -} - //--------------------------------------------------------------------------------------------------------------------- QString VPatternConverter::XSDSchema(int ver) const { @@ -200,7 +179,7 @@ void VPatternConverter::ApplyPatches() catch (VException &e) { QString error; - const QString backupFileName = fileName + QLatin1Literal(".backup"); + const QString backupFileName = fileName + QLatin1String(".backup"); if (SafeCopy(backupFileName, fileName, error) == false) { const QString errorMsg(tr("Error restoring backup file: %1.").arg(error)); @@ -915,7 +894,7 @@ void VPatternConverter::ParseModelingToV0_2_4(const QDomElement &modeling) QDomElement node = modeling.firstChild().toElement(); while (not node.isNull()) { - if (node.tagName() == QLatin1Literal("tools")) + if (node.tagName() == QLatin1String("tools")) { const quint32 toolId = node.attribute(QStringLiteral("id")).toUInt(); QVector children; diff --git a/src/libs/ifc/xml/vpatternconverter.h b/src/libs/ifc/xml/vpatternconverter.h index 99f3f5638..cbecfa5f0 100644 --- a/src/libs/ifc/xml/vpatternconverter.h +++ b/src/libs/ifc/xml/vpatternconverter.h @@ -38,8 +38,10 @@ public: explicit VPatternConverter(const QString &fileName); virtual ~VPatternConverter() Q_DECL_OVERRIDE; - static const QString PatternMaxVerStr; - static const QString CurrentSchema; + static const QString PatternMaxVerStr; + static const QString CurrentSchema; + static constexpr int PatternMinVer = CONVERTER_VERSION_CHECK(0, 1, 0); + static constexpr int PatternMaxVer = CONVERTER_VERSION_CHECK(0, 3, 2); protected: virtual int MinVer() const Q_DECL_OVERRIDE; @@ -54,7 +56,7 @@ protected: private: Q_DISABLE_COPY(VPatternConverter) - static const QString PatternMinVerStr; + static const QString PatternMinVerStr; void ToV0_1_1(); void ToV0_1_2(); @@ -105,4 +107,28 @@ private: static QMap OldNamesToNewNames_InV0_2_1(); }; +//--------------------------------------------------------------------------------------------------------------------- +inline int VPatternConverter::MinVer() const +{ + return PatternMinVer; +} + +//--------------------------------------------------------------------------------------------------------------------- +inline int VPatternConverter::MaxVer() const +{ + return PatternMaxVer; +} + +//--------------------------------------------------------------------------------------------------------------------- +inline QString VPatternConverter::MinVerStr() const +{ + return PatternMinVerStr; +} + +//--------------------------------------------------------------------------------------------------------------------- +inline QString VPatternConverter::MaxVerStr() const +{ + return PatternMaxVerStr; +} + #endif // VPATTERNCONVERTER_H diff --git a/src/libs/ifc/xml/vvitconverter.cpp b/src/libs/ifc/xml/vvitconverter.cpp index 0cf65d017..94c317b49 100644 --- a/src/libs/ifc/xml/vvitconverter.cpp +++ b/src/libs/ifc/xml/vvitconverter.cpp @@ -43,6 +43,9 @@ const QString VVITConverter::MeasurementMinVerStr = QStringLiteral("0.2.0"); const QString VVITConverter::MeasurementMaxVerStr = QStringLiteral("0.3.3"); const QString VVITConverter::CurrentSchema = QStringLiteral("://schema/individual_measurements/v0.3.3.xsd"); +constexpr int VVITConverter::MeasurementMinVer; // <== DON'T FORGET TO UPDATE TOO!!!! +constexpr int VVITConverter::MeasurementMaxVer; // <== DON'T FORGET TO UPDATE TOO!!!! + //--------------------------------------------------------------------------------------------------------------------- VVITConverter::VVITConverter(const QString &fileName) :VAbstractMConverter(fileName) @@ -54,30 +57,6 @@ VVITConverter::VVITConverter(const QString &fileName) VVITConverter::~VVITConverter() {} -//--------------------------------------------------------------------------------------------------------------------- -int VVITConverter::MinVer() const -{ - return GetVersion(MeasurementMinVerStr); -} - -//--------------------------------------------------------------------------------------------------------------------- -int VVITConverter::MaxVer() const -{ - return GetVersion(MeasurementMaxVerStr); -} - -//--------------------------------------------------------------------------------------------------------------------- -QString VVITConverter::MinVerStr() const -{ - return MeasurementMinVerStr; -} - -//--------------------------------------------------------------------------------------------------------------------- -QString VVITConverter::MaxVerStr() const -{ - return MeasurementMaxVerStr; -} - //--------------------------------------------------------------------------------------------------------------------- QString VVITConverter::XSDSchema(int ver) const { @@ -131,7 +110,7 @@ void VVITConverter::ApplyPatches() catch (VException &e) { QString error; - const QString backupFileName = fileName + QLatin1Literal(".backup"); + const QString backupFileName = fileName + QLatin1String(".backup"); if (SafeCopy(backupFileName, fileName, error) == false) { const QString errorMsg(tr("Error restoring backup file: %1.").arg(error)); diff --git a/src/libs/ifc/xml/vvitconverter.h b/src/libs/ifc/xml/vvitconverter.h index ac6fa638e..b72d43e5c 100644 --- a/src/libs/ifc/xml/vvitconverter.h +++ b/src/libs/ifc/xml/vvitconverter.h @@ -38,8 +38,10 @@ public: explicit VVITConverter(const QString &fileName); virtual ~VVITConverter() Q_DECL_OVERRIDE; - static const QString MeasurementMaxVerStr; - static const QString CurrentSchema; + static const QString MeasurementMaxVerStr; + static const QString CurrentSchema; + static constexpr int MeasurementMinVer = CONVERTER_VERSION_CHECK(0, 2, 0); + static constexpr int MeasurementMaxVer = CONVERTER_VERSION_CHECK(0, 3, 3); protected: virtual int MinVer() const Q_DECL_OVERRIDE; @@ -54,7 +56,7 @@ protected: private: Q_DISABLE_COPY(VVITConverter) - static const QString MeasurementMinVerStr; + static const QString MeasurementMinVerStr; void AddNewTagsForV0_3_0(); QString MUnitV0_2_0(); @@ -70,4 +72,28 @@ private: void ToV0_3_3(); }; +//--------------------------------------------------------------------------------------------------------------------- +inline int VVITConverter::MinVer() const +{ + return MeasurementMinVer; +} + +//--------------------------------------------------------------------------------------------------------------------- +inline int VVITConverter::MaxVer() const +{ + return MeasurementMaxVer; +} + +//--------------------------------------------------------------------------------------------------------------------- +inline QString VVITConverter::MinVerStr() const +{ + return MeasurementMinVerStr; +} + +//--------------------------------------------------------------------------------------------------------------------- +inline QString VVITConverter::MaxVerStr() const +{ + return MeasurementMaxVerStr; +} + #endif // VVITCONVERTER_H diff --git a/src/libs/ifc/xml/vvstconverter.cpp b/src/libs/ifc/xml/vvstconverter.cpp index e1385205c..37136c3f9 100644 --- a/src/libs/ifc/xml/vvstconverter.cpp +++ b/src/libs/ifc/xml/vvstconverter.cpp @@ -43,6 +43,9 @@ const QString VVSTConverter::MeasurementMinVerStr = QStringLiteral("0.3.0"); const QString VVSTConverter::MeasurementMaxVerStr = QStringLiteral("0.4.2"); const QString VVSTConverter::CurrentSchema = QStringLiteral("://schema/standard_measurements/v0.4.2.xsd"); +constexpr int VVSTConverter::MeasurementMinVer; // <== DON'T FORGET TO UPDATE TOO!!!! +constexpr int VVSTConverter::MeasurementMaxVer; // <== DON'T FORGET TO UPDATE TOO!!!! + //--------------------------------------------------------------------------------------------------------------------- VVSTConverter::VVSTConverter(const QString &fileName) :VAbstractMConverter(fileName) @@ -54,30 +57,6 @@ VVSTConverter::VVSTConverter(const QString &fileName) VVSTConverter::~VVSTConverter() {} -//--------------------------------------------------------------------------------------------------------------------- -int VVSTConverter::MinVer() const -{ - return GetVersion(MeasurementMinVerStr); -} - -//--------------------------------------------------------------------------------------------------------------------- -int VVSTConverter::MaxVer() const -{ - return GetVersion(MeasurementMaxVerStr); -} - -//--------------------------------------------------------------------------------------------------------------------- -QString VVSTConverter::MinVerStr() const -{ - return MeasurementMinVerStr; -} - -//--------------------------------------------------------------------------------------------------------------------- -QString VVSTConverter::MaxVerStr() const -{ - return MeasurementMaxVerStr; -} - //--------------------------------------------------------------------------------------------------------------------- QString VVSTConverter::XSDSchema(int ver) const { @@ -125,7 +104,7 @@ void VVSTConverter::ApplyPatches() catch (VException &e) { QString error; - const QString backupFileName = fileName + QLatin1Literal(".backup"); + const QString backupFileName = fileName + QLatin1String(".backup"); if (SafeCopy(backupFileName, fileName, error) == false) { const QString errorMsg(tr("Error restoring backup file: %1.").arg(error)); diff --git a/src/libs/ifc/xml/vvstconverter.h b/src/libs/ifc/xml/vvstconverter.h index 2d1672250..7619f3ebe 100644 --- a/src/libs/ifc/xml/vvstconverter.h +++ b/src/libs/ifc/xml/vvstconverter.h @@ -38,8 +38,10 @@ public: explicit VVSTConverter(const QString &fileName); virtual ~VVSTConverter() Q_DECL_OVERRIDE; - static const QString MeasurementMaxVerStr; - static const QString CurrentSchema; + static const QString MeasurementMaxVerStr; + static const QString CurrentSchema; + static constexpr int MeasurementMinVer = CONVERTER_VERSION_CHECK(0, 3, 0); + static constexpr int MeasurementMaxVer = CONVERTER_VERSION_CHECK(0, 4, 2); protected: virtual int MinVer() const Q_DECL_OVERRIDE; @@ -54,7 +56,7 @@ protected: private: Q_DISABLE_COPY(VVSTConverter) - static const QString MeasurementMinVerStr; + static const QString MeasurementMinVerStr; void AddNewTagsForV0_4_0(); void RemoveTagsForV0_4_0(); @@ -68,4 +70,28 @@ private: void ToV0_4_2(); }; +//--------------------------------------------------------------------------------------------------------------------- +inline int VVSTConverter::MinVer() const +{ + return MeasurementMinVer; +} + +//--------------------------------------------------------------------------------------------------------------------- +inline int VVSTConverter::MaxVer() const +{ + return MeasurementMaxVer; +} + +//--------------------------------------------------------------------------------------------------------------------- +inline QString VVSTConverter::MinVerStr() const +{ + return MeasurementMinVerStr; +} + +//--------------------------------------------------------------------------------------------------------------------- +inline QString VVSTConverter::MaxVerStr() const +{ + return MeasurementMaxVerStr; +} + #endif // VMEASUREMENTCONVERTER_H diff --git a/src/libs/libs.pro b/src/libs/libs.pro index af365e150..334d77b84 100644 --- a/src/libs/libs.pro +++ b/src/libs/libs.pro @@ -11,4 +11,5 @@ SUBDIRS = \ vmisc \ vwidgets \ vtools \ - vformat + vformat \ + fervor diff --git a/src/libs/qmuparser/qmuparser.pro b/src/libs/qmuparser/qmuparser.pro index 026c57a4f..154b90fea 100644 --- a/src/libs/qmuparser/qmuparser.pro +++ b/src/libs/qmuparser/qmuparser.pro @@ -41,6 +41,9 @@ include(qmuparser.pri) VERSION = 2.4.1 +# Allow MAC OS X to find library inside a bundle +macx:QMAKE_SONAME_PREFIX = @rpath + # Set "make install" command for Unix-like systems. unix:!macx{ isEmpty(PREFIX_LIB){ @@ -65,34 +68,7 @@ $$enable_ccache() CONFIG(debug, debug|release){ # Debug mode unix { - #Turn on compilers warnings. - *-g++{ - QMAKE_CXXFLAGS += \ - # Key -isystem disable checking errors in system headers. - -isystem "$${OUT_PWD}/$${MOC_DIR}" \ - $$GCC_DEBUG_CXXFLAGS # See common.pri for more details. - - noAddressSanitizer{ # For enable run qmake with CONFIG+=noAddressSanitizer - # do nothing - } else { - #gcc’s 4.8.0 Address Sanitizer - #http://blog.qt.digia.com/blog/2013/04/17/using-gccs-4-8-0-address-sanitizer-with-qt/ - QMAKE_CXXFLAGS += -fsanitize=address -fno-omit-frame-pointer - QMAKE_CFLAGS += -fsanitize=address -fno-omit-frame-pointer - QMAKE_LFLAGS += -fsanitize=address - } - } - clang*{ - QMAKE_CXXFLAGS += \ - # Key -isystem disable checking errors in system headers. - -isystem "$${OUT_PWD}/$${MOC_DIR}" \ - $$CLANG_DEBUG_CXXFLAGS # See common.pri for more details. - } - *-icc-*{ - QMAKE_CXXFLAGS += \ - -isystem "$${OUT_PWD}/$${MOC_DIR}" \ - $$ICC_DEBUG_CXXFLAGS - } + include(warnings.pri) } else { *-g++{ QMAKE_CXXFLAGS += $$GCC_DEBUG_CXXFLAGS # See common.pri for more details. @@ -107,6 +83,10 @@ CONFIG(debug, debug|release){ QMAKE_CXXFLAGS += -fno-omit-frame-pointer # Need for exchndl.dll } + checkWarnings{ + unix:include(warnings.pri) + } + noStripDebugSymbols { # do nothing } else { diff --git a/src/libs/qmuparser/qmuparsertest.h b/src/libs/qmuparser/qmuparsertest.h index 220de68fe..46b0711c1 100644 --- a/src/libs/qmuparser/qmuparsertest.h +++ b/src/libs/qmuparser/qmuparsertest.h @@ -52,7 +52,7 @@ public: QmuParserTester(QObject *parent = nullptr); -public slots: +private slots: void Run(); private: diff --git a/src/libs/qmuparser/warnings.pri b/src/libs/qmuparser/warnings.pri new file mode 100644 index 000000000..5e56557c8 --- /dev/null +++ b/src/libs/qmuparser/warnings.pri @@ -0,0 +1,42 @@ +#Turn on compilers warnings. +*-g++{ + QMAKE_CXXFLAGS += \ + # Key -isystem disable checking errors in system headers. + -isystem "$${OUT_PWD}/$${MOC_DIR}" \ + $$GCC_DEBUG_CXXFLAGS # See common.pri for more details. + + checkWarnings{ # For enable run qmake with CONFIG+=checkWarnings + QMAKE_CXXFLAGS += -Werror + } + + noAddressSanitizer{ # For enable run qmake with CONFIG+=noAddressSanitizer + # do nothing + } else { + #gcc’s 4.8.0 Address Sanitizer + #http://blog.qt.digia.com/blog/2013/04/17/using-gccs-4-8-0-address-sanitizer-with-qt/ + QMAKE_CXXFLAGS += -fsanitize=address -fno-omit-frame-pointer + QMAKE_CFLAGS += -fsanitize=address -fno-omit-frame-pointer + QMAKE_LFLAGS += -fsanitize=address + } +} + +clang*{ + QMAKE_CXXFLAGS += \ + # Key -isystem disable checking errors in system headers. + -isystem "$${OUT_PWD}/$${MOC_DIR}" \ + $$CLANG_DEBUG_CXXFLAGS # See common.pri for more details. + + checkWarnings{ # For enable run qmake with CONFIG+=checkWarnings + QMAKE_CXXFLAGS += -Werror + } +} + +*-icc-*{ + QMAKE_CXXFLAGS += \ + -isystem "$${OUT_PWD}/$${MOC_DIR}" \ + $$ICC_DEBUG_CXXFLAGS + + checkWarnings{ # For enable run qmake with CONFIG+=checkWarnings + QMAKE_CXXFLAGS += -Werror + } +} diff --git a/src/libs/vdxf/vdxf.pro b/src/libs/vdxf/vdxf.pro index 7155fcaf7..311cf10bc 100644 --- a/src/libs/vdxf/vdxf.pro +++ b/src/libs/vdxf/vdxf.pro @@ -43,34 +43,7 @@ $$enable_ccache() CONFIG(debug, debug|release){ # Debug mode unix { - #Turn on compilers warnings. - *-g++{ - QMAKE_CXXFLAGS += \ - # Key -isystem disable checking errors in system headers. - -isystem "$${OUT_PWD}/$${MOC_DIR}" \ - $$GCC_DEBUG_CXXFLAGS # See common.pri for more details. - - noAddressSanitizer{ # For enable run qmake with CONFIG+=noAddressSanitizer - # do nothing - } else { - #gcc’s 4.8.0 Address Sanitizer - #http://blog.qt.digia.com/blog/2013/04/17/using-gccs-4-8-0-address-sanitizer-with-qt/ - QMAKE_CXXFLAGS += -fsanitize=address -fno-omit-frame-pointer - QMAKE_CFLAGS += -fsanitize=address -fno-omit-frame-pointer - QMAKE_LFLAGS += -fsanitize=address - } - } - clang*{ - QMAKE_CXXFLAGS += \ - # Key -isystem disable checking errors in system headers. - -isystem "$${OUT_PWD}/$${MOC_DIR}" \ - $$CLANG_DEBUG_CXXFLAGS # See common.pri for more details. - } - *-icc-*{ - QMAKE_CXXFLAGS += \ - -isystem "$${OUT_PWD}/$${MOC_DIR}" \ - $$ICC_DEBUG_CXXFLAGS - } + include(warnings.pri) } else { *-g++{ QMAKE_CXXFLAGS += $$GCC_DEBUG_CXXFLAGS # See common.pri for more details. @@ -85,6 +58,10 @@ CONFIG(debug, debug|release){ QMAKE_CXXFLAGS += -fno-omit-frame-pointer # Need for exchndl.dll } + checkWarnings{ + unix:include(warnings.pri) + } + noDebugSymbols{ # For enable run qmake with CONFIG+=noDebugSymbols # do nothing } else { diff --git a/src/libs/vdxf/warnings.pri b/src/libs/vdxf/warnings.pri new file mode 100644 index 000000000..5e56557c8 --- /dev/null +++ b/src/libs/vdxf/warnings.pri @@ -0,0 +1,42 @@ +#Turn on compilers warnings. +*-g++{ + QMAKE_CXXFLAGS += \ + # Key -isystem disable checking errors in system headers. + -isystem "$${OUT_PWD}/$${MOC_DIR}" \ + $$GCC_DEBUG_CXXFLAGS # See common.pri for more details. + + checkWarnings{ # For enable run qmake with CONFIG+=checkWarnings + QMAKE_CXXFLAGS += -Werror + } + + noAddressSanitizer{ # For enable run qmake with CONFIG+=noAddressSanitizer + # do nothing + } else { + #gcc’s 4.8.0 Address Sanitizer + #http://blog.qt.digia.com/blog/2013/04/17/using-gccs-4-8-0-address-sanitizer-with-qt/ + QMAKE_CXXFLAGS += -fsanitize=address -fno-omit-frame-pointer + QMAKE_CFLAGS += -fsanitize=address -fno-omit-frame-pointer + QMAKE_LFLAGS += -fsanitize=address + } +} + +clang*{ + QMAKE_CXXFLAGS += \ + # Key -isystem disable checking errors in system headers. + -isystem "$${OUT_PWD}/$${MOC_DIR}" \ + $$CLANG_DEBUG_CXXFLAGS # See common.pri for more details. + + checkWarnings{ # For enable run qmake with CONFIG+=checkWarnings + QMAKE_CXXFLAGS += -Werror + } +} + +*-icc-*{ + QMAKE_CXXFLAGS += \ + -isystem "$${OUT_PWD}/$${MOC_DIR}" \ + $$ICC_DEBUG_CXXFLAGS + + checkWarnings{ # For enable run qmake with CONFIG+=checkWarnings + QMAKE_CXXFLAGS += -Werror + } +} diff --git a/src/libs/vformat/vformat.pro b/src/libs/vformat/vformat.pro index e75fc6c3d..3c62a9720 100644 --- a/src/libs/vformat/vformat.pro +++ b/src/libs/vformat/vformat.pro @@ -49,34 +49,7 @@ $$enable_ccache() CONFIG(debug, debug|release){ # Debug mode unix { - #Turn on compilers warnings. - *-g++{ - QMAKE_CXXFLAGS += \ - # Key -isystem disable checking errors in system headers. - -isystem "$${OUT_PWD}/$${MOC_DIR}" \ - $$GCC_DEBUG_CXXFLAGS # See common.pri for more details. - - noAddressSanitizer{ # For enable run qmake with CONFIG+=noAddressSanitizer - # do nothing - } else { - #gcc’s 4.8.0 Address Sanitizer - #http://blog.qt.digia.com/blog/2013/04/17/using-gccs-4-8-0-address-sanitizer-with-qt/ - QMAKE_CXXFLAGS += -fsanitize=address -fno-omit-frame-pointer - QMAKE_CFLAGS += -fsanitize=address -fno-omit-frame-pointer - QMAKE_LFLAGS += -fsanitize=address - } - } - clang*{ - QMAKE_CXXFLAGS += \ - # Key -isystem disable checking errors in system headers. - -isystem "$${OUT_PWD}/$${MOC_DIR}" \ - $$CLANG_DEBUG_CXXFLAGS # See common.pri for more details. - } - *-icc-*{ - QMAKE_CXXFLAGS += \ - -isystem "$${OUT_PWD}/$${MOC_DIR}" \ - $$ICC_DEBUG_CXXFLAGS - } + include(warnings.pri) } else { *-g++{ QMAKE_CXXFLAGS += $$GCC_DEBUG_CXXFLAGS # See common.pri for more details. @@ -91,6 +64,10 @@ CONFIG(debug, debug|release){ QMAKE_CXXFLAGS += -fno-omit-frame-pointer # Need for exchndl.dll } + checkWarnings{ + unix:include(warnings.pri) + } + noDebugSymbols{ # For enable run qmake with CONFIG+=noDebugSymbols # do nothing } else { diff --git a/src/libs/vformat/warnings.pri b/src/libs/vformat/warnings.pri new file mode 100644 index 000000000..5e56557c8 --- /dev/null +++ b/src/libs/vformat/warnings.pri @@ -0,0 +1,42 @@ +#Turn on compilers warnings. +*-g++{ + QMAKE_CXXFLAGS += \ + # Key -isystem disable checking errors in system headers. + -isystem "$${OUT_PWD}/$${MOC_DIR}" \ + $$GCC_DEBUG_CXXFLAGS # See common.pri for more details. + + checkWarnings{ # For enable run qmake with CONFIG+=checkWarnings + QMAKE_CXXFLAGS += -Werror + } + + noAddressSanitizer{ # For enable run qmake with CONFIG+=noAddressSanitizer + # do nothing + } else { + #gcc’s 4.8.0 Address Sanitizer + #http://blog.qt.digia.com/blog/2013/04/17/using-gccs-4-8-0-address-sanitizer-with-qt/ + QMAKE_CXXFLAGS += -fsanitize=address -fno-omit-frame-pointer + QMAKE_CFLAGS += -fsanitize=address -fno-omit-frame-pointer + QMAKE_LFLAGS += -fsanitize=address + } +} + +clang*{ + QMAKE_CXXFLAGS += \ + # Key -isystem disable checking errors in system headers. + -isystem "$${OUT_PWD}/$${MOC_DIR}" \ + $$CLANG_DEBUG_CXXFLAGS # See common.pri for more details. + + checkWarnings{ # For enable run qmake with CONFIG+=checkWarnings + QMAKE_CXXFLAGS += -Werror + } +} + +*-icc-*{ + QMAKE_CXXFLAGS += \ + -isystem "$${OUT_PWD}/$${MOC_DIR}" \ + $$ICC_DEBUG_CXXFLAGS + + checkWarnings{ # For enable run qmake with CONFIG+=checkWarnings + QMAKE_CXXFLAGS += -Werror + } +} diff --git a/src/libs/vgeometry/vgeometry.pro b/src/libs/vgeometry/vgeometry.pro index 327e1d802..524c6379f 100644 --- a/src/libs/vgeometry/vgeometry.pro +++ b/src/libs/vgeometry/vgeometry.pro @@ -45,34 +45,7 @@ $$enable_ccache() CONFIG(debug, debug|release){ # Debug mode unix { - #Turn on compilers warnings. - *-g++{ - QMAKE_CXXFLAGS += \ - # Key -isystem disable checking errors in system headers. - -isystem "$${OUT_PWD}/$${MOC_DIR}" \ - $$GCC_DEBUG_CXXFLAGS # See common.pri for more details. - - noAddressSanitizer{ # For enable run qmake with CONFIG+=noAddressSanitizer - # do nothing - } else { - #gcc’s 4.8.0 Address Sanitizer - #http://blog.qt.digia.com/blog/2013/04/17/using-gccs-4-8-0-address-sanitizer-with-qt/ - QMAKE_CXXFLAGS += -fsanitize=address -fno-omit-frame-pointer - QMAKE_CFLAGS += -fsanitize=address -fno-omit-frame-pointer - QMAKE_LFLAGS += -fsanitize=address - } - } - clang*{ - QMAKE_CXXFLAGS += \ - # Key -isystem disable checking errors in system headers. - -isystem "$${OUT_PWD}/$${MOC_DIR}" \ - $$CLANG_DEBUG_CXXFLAGS # See common.pri for more details. - } - *-icc-*{ - QMAKE_CXXFLAGS += \ - -isystem "$${OUT_PWD}/$${MOC_DIR}" \ - $$ICC_DEBUG_CXXFLAGS - } + include(warnings.pri) } else { *-g++{ QMAKE_CXXFLAGS += $$GCC_DEBUG_CXXFLAGS # See common.pri for more details. @@ -87,6 +60,10 @@ CONFIG(debug, debug|release){ QMAKE_CXXFLAGS += -fno-omit-frame-pointer # Need for exchndl.dll } + checkWarnings{ + unix:include(warnings.pri) + } + noDebugSymbols{ # For enable run qmake with CONFIG+=noDebugSymbols # do nothing } else { diff --git a/src/libs/vgeometry/warnings.pri b/src/libs/vgeometry/warnings.pri new file mode 100644 index 000000000..5e56557c8 --- /dev/null +++ b/src/libs/vgeometry/warnings.pri @@ -0,0 +1,42 @@ +#Turn on compilers warnings. +*-g++{ + QMAKE_CXXFLAGS += \ + # Key -isystem disable checking errors in system headers. + -isystem "$${OUT_PWD}/$${MOC_DIR}" \ + $$GCC_DEBUG_CXXFLAGS # See common.pri for more details. + + checkWarnings{ # For enable run qmake with CONFIG+=checkWarnings + QMAKE_CXXFLAGS += -Werror + } + + noAddressSanitizer{ # For enable run qmake with CONFIG+=noAddressSanitizer + # do nothing + } else { + #gcc’s 4.8.0 Address Sanitizer + #http://blog.qt.digia.com/blog/2013/04/17/using-gccs-4-8-0-address-sanitizer-with-qt/ + QMAKE_CXXFLAGS += -fsanitize=address -fno-omit-frame-pointer + QMAKE_CFLAGS += -fsanitize=address -fno-omit-frame-pointer + QMAKE_LFLAGS += -fsanitize=address + } +} + +clang*{ + QMAKE_CXXFLAGS += \ + # Key -isystem disable checking errors in system headers. + -isystem "$${OUT_PWD}/$${MOC_DIR}" \ + $$CLANG_DEBUG_CXXFLAGS # See common.pri for more details. + + checkWarnings{ # For enable run qmake with CONFIG+=checkWarnings + QMAKE_CXXFLAGS += -Werror + } +} + +*-icc-*{ + QMAKE_CXXFLAGS += \ + -isystem "$${OUT_PWD}/$${MOC_DIR}" \ + $$ICC_DEBUG_CXXFLAGS + + checkWarnings{ # For enable run qmake with CONFIG+=checkWarnings + QMAKE_CXXFLAGS += -Werror + } +} diff --git a/src/libs/vlayout/vbank.cpp b/src/libs/vlayout/vbank.cpp index 108c97a0b..53e402dc1 100644 --- a/src/libs/vlayout/vbank.cpp +++ b/src/libs/vlayout/vbank.cpp @@ -28,11 +28,28 @@ #include "vbank.h" #include "vlayoutdetail.h" +#include "../vmisc/logging.h" #include #include #include +#if defined(Q_CC_CLANG) + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wmissing-prototypes" +#elif defined(Q_CC_INTEL) + #pragma warning( push ) + #pragma warning( disable: 1418 ) +#endif + +Q_LOGGING_CATEGORY(lBank, "layout.bank") + +#if defined(Q_CC_CLANG) + #pragma clang diagnostic pop +#elif defined(Q_CC_INTEL) + #pragma warning( pop ) +#endif + //--------------------------------------------------------------------------------------------------------------------- VBank::VBank() :details(QVector()), unsorted(QHash()), big(QHash()), @@ -158,12 +175,14 @@ bool VBank::Prepare() { if (layoutWidth <= 0) { + qCDebug(lBank, "Preparing data for layout error: Layout paper sheet <= 0"); prepare = false; return prepare; } if (details.isEmpty()) { + qCDebug(lBank, "Preparing data for layout error: List of details is empty"); prepare = false; return prepare; } @@ -183,6 +202,7 @@ bool VBank::Prepare() const qint64 square = details.at(i).Square(); if (square <= 0) { + qCDebug(lBank, "Preparing data for layout error: Detail squere <= 0"); prepare = false; return prepare; } diff --git a/src/libs/vlayout/vlayout.pro b/src/libs/vlayout/vlayout.pro index 5380d9df3..0a77c8638 100644 --- a/src/libs/vlayout/vlayout.pro +++ b/src/libs/vlayout/vlayout.pro @@ -48,48 +48,7 @@ $$enable_ccache() CONFIG(debug, debug|release){ # Debug mode unix { - #Turn on compilers warnings. - *-g++{ - QMAKE_CXXFLAGS += \ - # Key -isystem disable checking errors in system headers. - -isystem "$${OUT_PWD}/$${MOC_DIR}" \ - -isystem "$${OUT_PWD}/$${RCC_DIR}" \ - $$GCC_DEBUG_CXXFLAGS # See common.pri for more details. - - # -isystem key works only for headers. In some cases it's not enough. But we can't delete these warnings and - # want them in the global list. Compromise decision is to delete them from the local list. - QMAKE_CXXFLAGS -= \ - -Wlong-long \ - - noAddressSanitizer{ # For enable run qmake with CONFIG+=noAddressSanitizer - # do nothing - } else { - #gcc’s 4.8.0 Address Sanitizer - #http://blog.qt.digia.com/blog/2013/04/17/using-gccs-4-8-0-address-sanitizer-with-qt/ - QMAKE_CXXFLAGS += -fsanitize=address -fno-omit-frame-pointer - QMAKE_CFLAGS += -fsanitize=address -fno-omit-frame-pointer - QMAKE_LFLAGS += -fsanitize=address - } - } - clang*{ - QMAKE_CXXFLAGS += \ - # Key -isystem disable checking errors in system headers. - -isystem "$${OUT_PWD}/$${MOC_DIR}" \ - -isystem "$${OUT_PWD}/$${RCC_DIR}" \ - $$CLANG_DEBUG_CXXFLAGS # See common.pri for more details. - - # -isystem key works only for headers. In some cases it's not enough. But we can't delete this warnings and - # want them in global list. Compromise decision delete them from local list. - QMAKE_CXXFLAGS -= \ - -Wundefined-reinterpret-cast \ - -Wmissing-prototypes # rcc folder - } - *-icc-*{ - QMAKE_CXXFLAGS += \ - -isystem "$${OUT_PWD}/$${MOC_DIR}" \ - -isystem "$${OUT_PWD}/$${RCC_DIR}" \ - $$ICC_DEBUG_CXXFLAGS - } + include(warnings.pri) } else { *-g++{ QMAKE_CXXFLAGS += $$GCC_DEBUG_CXXFLAGS # See common.pri for more details. @@ -104,6 +63,10 @@ CONFIG(debug, debug|release){ QMAKE_CXXFLAGS += -fno-omit-frame-pointer # Need for exchndl.dll } + checkWarnings{ + unix:include(warnings.pri) + } + QMAKE_CXXFLAGS -= -O2 # Disable default optimization level QMAKE_CXXFLAGS += -O3 # For vlayout library enable speed optimizations diff --git a/src/libs/vlayout/warnings.pri b/src/libs/vlayout/warnings.pri new file mode 100644 index 000000000..a3e5bcdf5 --- /dev/null +++ b/src/libs/vlayout/warnings.pri @@ -0,0 +1,56 @@ +#Turn on compilers warnings. +*-g++{ + QMAKE_CXXFLAGS += \ + # Key -isystem disable checking errors in system headers. + -isystem "$${OUT_PWD}/$${MOC_DIR}" \ + -isystem "$${OUT_PWD}/$${RCC_DIR}" \ + $$GCC_DEBUG_CXXFLAGS # See common.pri for more details. + + checkWarnings{ # For enable run qmake with CONFIG+=checkWarnings + QMAKE_CXXFLAGS += -Werror + } + + # -isystem key works only for headers. In some cases it's not enough. But we can't delete these warnings and + # want them in the global list. Compromise decision is to delete them from the local list. + QMAKE_CXXFLAGS -= \ + -Wlong-long \ + + noAddressSanitizer{ # For enable run qmake with CONFIG+=noAddressSanitizer + # do nothing + } else { + #gcc’s 4.8.0 Address Sanitizer + #http://blog.qt.digia.com/blog/2013/04/17/using-gccs-4-8-0-address-sanitizer-with-qt/ + QMAKE_CXXFLAGS += -fsanitize=address -fno-omit-frame-pointer + QMAKE_CFLAGS += -fsanitize=address -fno-omit-frame-pointer + QMAKE_LFLAGS += -fsanitize=address + } +} + +clang*{ + QMAKE_CXXFLAGS += \ + # Key -isystem disable checking errors in system headers. + -isystem "$${OUT_PWD}/$${MOC_DIR}" \ + -isystem "$${OUT_PWD}/$${RCC_DIR}" \ + $$CLANG_DEBUG_CXXFLAGS # See common.pri for more details. + + checkWarnings{ # For enable run qmake with CONFIG+=checkWarnings + QMAKE_CXXFLAGS += -Werror + } + + # -isystem key works only for headers. In some cases it's not enough. But we can't delete this warnings and + # want them in global list. Compromise decision delete them from local list. + QMAKE_CXXFLAGS -= \ + -Wundefined-reinterpret-cast \ + -Wmissing-prototypes # rcc folder +} + +*-icc-*{ + QMAKE_CXXFLAGS += \ + -isystem "$${OUT_PWD}/$${MOC_DIR}" \ + -isystem "$${OUT_PWD}/$${RCC_DIR}" \ + $$ICC_DEBUG_CXXFLAGS + + checkWarnings{ # For enable run qmake with CONFIG+=checkWarnings + QMAKE_CXXFLAGS += -Werror + } +} diff --git a/src/libs/vmisc/projectversion.cpp b/src/libs/vmisc/projectversion.cpp index 89d73c2cd..ab620ce3f 100644 --- a/src/libs/vmisc/projectversion.cpp +++ b/src/libs/vmisc/projectversion.cpp @@ -44,13 +44,13 @@ QString compilerString() #if defined(Q_CC_INTEL) // must be before GNU, Clang and MSVC because ICC/ICL claim to be them QString iccCompact; #ifdef __INTEL_CLANG_COMPILER - iccCompact = QLatin1Literal("Clang"); + iccCompact = QLatin1String("Clang"); #elif defined(__INTEL_MS_COMPAT_LEVEL) - iccCompact = QLatin1Literal("Microsoft"); + iccCompact = QLatin1String("Microsoft"); #elif defined(__GNUC__) - iccCompact = QLatin1Literal("GCC"); + iccCompact = QLatin1String("GCC"); #else - iccCompact = QLatin1Literal("no"); + iccCompact = QLatin1String("no"); #endif QString iccVersion; if (__INTEL_COMPILER >= 1300) diff --git a/src/libs/vmisc/vabstractapplication.cpp b/src/libs/vmisc/vabstractapplication.cpp index 4fdc30c88..c8e7ea71f 100644 --- a/src/libs/vmisc/vabstractapplication.cpp +++ b/src/libs/vmisc/vabstractapplication.cpp @@ -72,7 +72,19 @@ VAbstractApplication::VAbstractApplication(int &argc, char **argv) // Enable support for HiDPI bitmap resources setAttribute(Qt::AA_UseHighDpiPixmaps); - connect(this, &QApplication::aboutToQuit, this, &VAbstractApplication::SyncSettings); + connect(this, &QApplication::aboutToQuit, [this]() + { + // If try to use the method QApplication::exit program can't sync settings and show warning about QApplication + // instance. Solution is to call sync() before quit. + // Connect this slot with VApplication::aboutToQuit. + Settings()->sync(); + }); + +#if !defined(V_NO_ASSERT) + // Ignore SSL-related warnings + // See issue #528: Error: QSslSocket: cannot resolve SSLv2_client_method. + qputenv("QT_LOGGING_RULES", "qt.network.ssl.warning=false"); +#endif //!defined(V_NO_ASSERT) } //--------------------------------------------------------------------------------------------------------------------- @@ -96,12 +108,12 @@ QString VAbstractApplication::translationsPath(const QString &locale) const QString mainPath; if (locale.isEmpty()) { - mainPath = QApplication::applicationDirPath() + QLatin1Literal("/../Resources") + trPath; + mainPath = QApplication::applicationDirPath() + QLatin1String("/../Resources") + trPath; } else { - mainPath = QApplication::applicationDirPath() + QLatin1Literal("/../Resources") + trPath + QLatin1Literal("/") - + locale + QLatin1Literal(".lproj"); + mainPath = QApplication::applicationDirPath() + QLatin1String("/../Resources") + trPath + QLatin1String("/") + + locale + QLatin1String(".lproj"); } QDir dirBundle(mainPath); if (dirBundle.exists()) @@ -256,15 +268,6 @@ double VAbstractApplication::fromPixel(double pix) const return FromPixel(pix, _patternUnit); } -//--------------------------------------------------------------------------------------------------------------------- -void VAbstractApplication::SyncSettings() -{ - // If try to use the method QApplication::exit program can't sync settings and show warning about QApplication - // instance. Solution is to call sync() before quit. - // Connect this slot with VApplication::aboutToQuit. - Settings()->sync(); -} - //--------------------------------------------------------------------------------------------------------------------- void VAbstractApplication::LoadTranslation(const QString &locale) { diff --git a/src/libs/vmisc/vabstractapplication.h b/src/libs/vmisc/vabstractapplication.h index f8b02e013..13dbbaf05 100644 --- a/src/libs/vmisc/vabstractapplication.h +++ b/src/libs/vmisc/vabstractapplication.h @@ -96,9 +96,6 @@ public: virtual bool IsAppInGUIMode()const =0; -protected slots: - void SyncSettings(); - protected: QUndoStack *undoStack; diff --git a/src/libs/vmisc/vcommonsettings.cpp b/src/libs/vmisc/vcommonsettings.cpp index 82daa3b75..179754b4e 100644 --- a/src/libs/vmisc/vcommonsettings.cpp +++ b/src/libs/vmisc/vcommonsettings.cpp @@ -32,6 +32,7 @@ #include #include #include +#include #include "../ifc/ifcdef.h" @@ -65,6 +66,8 @@ const QString VCommonSettings::SettingGeneralGeometry = QString const QString VCommonSettings::SettingGeneralWindowState = QStringLiteral("windowState"); const QString VCommonSettings::SettingGeneralToolbarsState = QStringLiteral("toolbarsState"); const QString VCommonSettings::SettingPreferenceDialogSize = QStringLiteral("preferenceDialogSize"); +const QString VCommonSettings::SettingLatestSkippedVersion = QStringLiteral("lastestSkippedVersion"); +const QString VCommonSettings::SettingDateOfLastRemind = QStringLiteral("dateOfLastRemind"); static const QString commonIniFilename = QStringLiteral("common"); @@ -429,3 +432,33 @@ void VCommonSettings::SetPreferenceDialogSize(const QSize& sz) { setValue(SettingPreferenceDialogSize, sz); } + +//--------------------------------------------------------------------------------------------------------------------- +int VCommonSettings::GetLatestSkippedVersion() const +{ + QSettings settings(this->format(), this->scope(), this->organizationName(), commonIniFilename); + return settings.value(SettingLatestSkippedVersion, 0x0).toInt(); +} + +//--------------------------------------------------------------------------------------------------------------------- +void VCommonSettings::SetLatestSkippedVersion(int value) +{ + QSettings settings(this->format(), this->scope(), this->organizationName(), commonIniFilename); + settings.setValue(SettingLatestSkippedVersion, value); + settings.sync(); +} + +//--------------------------------------------------------------------------------------------------------------------- +QDate VCommonSettings::GetDateOfLastRemind() const +{ + QSettings settings(this->format(), this->scope(), this->organizationName(), commonIniFilename); + return settings.value(SettingDateOfLastRemind, QDate(1900, 1, 1)).toDate(); +} + +//--------------------------------------------------------------------------------------------------------------------- +void VCommonSettings::SetDateOfLastRemind(const QDate &date) +{ + QSettings settings(this->format(), this->scope(), this->organizationName(), commonIniFilename); + settings.setValue(SettingDateOfLastRemind, date); + settings.sync(); +} diff --git a/src/libs/vmisc/vcommonsettings.h b/src/libs/vmisc/vcommonsettings.h index d8e516282..0755b11a1 100644 --- a/src/libs/vmisc/vcommonsettings.h +++ b/src/libs/vmisc/vcommonsettings.h @@ -99,8 +99,14 @@ public: QByteArray GetToolbarsState() const; void SetToolbarsState(const QByteArray &value); - QSize GetPreferenceDialogSize() const; - void SetPreferenceDialogSize(const QSize& sz); + QSize GetPreferenceDialogSize() const; + void SetPreferenceDialogSize(const QSize& sz); + + int GetLatestSkippedVersion() const; + void SetLatestSkippedVersion(int value); + + QDate GetDateOfLastRemind() const; + void SetDateOfLastRemind(const QDate &date); private: Q_DISABLE_COPY(VCommonSettings) @@ -128,6 +134,8 @@ private: static const QString SettingGeneralWindowState; static const QString SettingGeneralToolbarsState; static const QString SettingPreferenceDialogSize; + static const QString SettingLatestSkippedVersion; + static const QString SettingDateOfLastRemind; }; #endif // VCOMMONSETTINGS_H diff --git a/src/libs/vmisc/vlockguard.h b/src/libs/vmisc/vlockguard.h index bb87e26aa..a266ff2a4 100644 --- a/src/libs/vmisc/vlockguard.h +++ b/src/libs/vmisc/vlockguard.h @@ -156,10 +156,10 @@ bool VLockGuard::TryLock(const QString &lockName, int stale, int timeou #if QT_VERSION >= QT_VERSION_CHECK(5, 1, 0) - lockFile = lockName + QLatin1Literal(".lock"); + lockFile = lockName + QLatin1String(".lock"); #if defined(Q_OS_UNIX) QFileInfo info(lockFile); - lockFile = info.absolutePath() + QLatin1Literal("/.") + info.fileName(); + lockFile = info.absolutePath() + QLatin1String("/.") + info.fileName(); #endif lock.reset(new QLockFile(lockFile)); diff --git a/src/libs/vmisc/vmisc.pro b/src/libs/vmisc/vmisc.pro index a674a672f..3f5ccb29b 100644 --- a/src/libs/vmisc/vmisc.pro +++ b/src/libs/vmisc/vmisc.pro @@ -51,39 +51,7 @@ $$enable_ccache() CONFIG(debug, debug|release){ # Debug mode unix { - #Turn on compilers warnings. - *-g++{ - QMAKE_CXXFLAGS += \ - # Key -isystem disable checking errors in system headers. - -isystem "$${OUT_PWD}/$${MOC_DIR}" \ - $$GCC_DEBUG_CXXFLAGS # See common.pri for more details. - - noAddressSanitizer{ # For enable run qmake with CONFIG+=noAddressSanitizer - # do nothing - } else { - #gcc’s 4.8.0 Address Sanitizer - #http://blog.qt.digia.com/blog/2013/04/17/using-gccs-4-8-0-address-sanitizer-with-qt/ - QMAKE_CXXFLAGS += -fsanitize=address -fno-omit-frame-pointer - QMAKE_CFLAGS += -fsanitize=address -fno-omit-frame-pointer - QMAKE_LFLAGS += -fsanitize=address - } - } - clang*{ - QMAKE_CXXFLAGS += \ - # Key -isystem disable checking errors in system headers. - -isystem "$${OUT_PWD}/$${MOC_DIR}" \ - $$CLANG_DEBUG_CXXFLAGS # See common.pri for more details. - - # -isystem key works only for headers. In some cases it's not enough. But we can't delete these warnings and - # want them in global list. Compromise decision delete them from local list. - QMAKE_CXXFLAGS -= \ - -Wmissing-prototypes - } - *-icc-*{ - QMAKE_CXXFLAGS += \ - -isystem "$${OUT_PWD}/$${MOC_DIR}" \ - $$ICC_DEBUG_CXXFLAGS - } + include(warnings.pri) } else { *-g++{ QMAKE_CXXFLAGS += $$GCC_DEBUG_CXXFLAGS # See common.pri for more details. @@ -102,12 +70,13 @@ CONFIG(debug, debug|release){ QMAKE_CXXFLAGS += -fno-omit-frame-pointer # Need for exchndl.dll } + checkWarnings{ + unix:include(warnings.pri) + } + noDebugSymbols{ # For enable run qmake with CONFIG+=noDebugSymbols - DEFINES += V_NO_DEBUG + # do nothing } else { - noCrashReports{ - DEFINES += V_NO_DEBUG - } !macx:!win32-msvc*{ # Turn on debug symbols in release mode on Unix systems. # On Mac OS X temporarily disabled. TODO: find way how to strip binary file. diff --git a/src/libs/vmisc/warnings.pri b/src/libs/vmisc/warnings.pri new file mode 100644 index 000000000..e94434007 --- /dev/null +++ b/src/libs/vmisc/warnings.pri @@ -0,0 +1,47 @@ +#Turn on compilers warnings. +*-g++{ + QMAKE_CXXFLAGS += \ + # Key -isystem disable checking errors in system headers. + -isystem "$${OUT_PWD}/$${MOC_DIR}" \ + $$GCC_DEBUG_CXXFLAGS # See common.pri for more details. + + checkWarnings{ # For enable run qmake with CONFIG+=checkWarnings + QMAKE_CXXFLAGS += -Werror + } + + noAddressSanitizer{ # For enable run qmake with CONFIG+=noAddressSanitizer + # do nothing + } else { + #gcc’s 4.8.0 Address Sanitizer + #http://blog.qt.digia.com/blog/2013/04/17/using-gccs-4-8-0-address-sanitizer-with-qt/ + QMAKE_CXXFLAGS += -fsanitize=address -fno-omit-frame-pointer + QMAKE_CFLAGS += -fsanitize=address -fno-omit-frame-pointer + QMAKE_LFLAGS += -fsanitize=address + } +} + +clang*{ + QMAKE_CXXFLAGS += \ + # Key -isystem disable checking errors in system headers. + -isystem "$${OUT_PWD}/$${MOC_DIR}" \ + $$CLANG_DEBUG_CXXFLAGS # See common.pri for more details. + + checkWarnings{ # For enable run qmake with CONFIG+=checkWarnings + QMAKE_CXXFLAGS += -Werror + } + + # -isystem key works only for headers. In some cases it's not enough. But we can't delete these warnings and + # want them in global list. Compromise decision delete them from local list. + QMAKE_CXXFLAGS -= \ + -Wmissing-prototypes +} + +*-icc-*{ + QMAKE_CXXFLAGS += \ + -isystem "$${OUT_PWD}/$${MOC_DIR}" \ + $$ICC_DEBUG_CXXFLAGS + + checkWarnings{ # For enable run qmake with CONFIG+=checkWarnings + QMAKE_CXXFLAGS += -Werror + } +} diff --git a/src/libs/vobj/predicates.cpp b/src/libs/vobj/predicates.cpp index 0e08ed674..b46aa05a3 100644 --- a/src/libs/vobj/predicates.cpp +++ b/src/libs/vobj/predicates.cpp @@ -498,6 +498,10 @@ qreal estimate(int elen, qreal *e) return Q; } +#if defined(Q_CC_GNU) + #pragma GCC diagnostic push + #pragma GCC diagnostic ignored "-Wmaybe-uninitialized" +#endif qreal incircleadapt(qreal *pa, qreal *pb, qreal *pc, qreal *pd, qreal permanent) { INEXACT qreal adx, bdx, cdx, ady, bdy, cdy; @@ -1031,6 +1035,9 @@ qreal incircleadapt(qreal *pa, qreal *pb, qreal *pc, qreal *pd, qreal permanent) return finnow[finlength - 1]; } +#if defined(Q_CC_GNU) + #pragma GCC diagnostic pop +#endif qreal incircle(qreal *pa, qreal *pb, qreal *pc, qreal *pd) { diff --git a/src/libs/vobj/vobj.pro b/src/libs/vobj/vobj.pro index 7008b2559..bee46b371 100644 --- a/src/libs/vobj/vobj.pro +++ b/src/libs/vobj/vobj.pro @@ -43,34 +43,7 @@ $$enable_ccache() CONFIG(debug, debug|release){ # Debug mode unix { - #Turn on compilers warnings. - *-g++{ - QMAKE_CXXFLAGS += \ - # Key -isystem disable checking errors in system headers. - -isystem "$${OUT_PWD}/$${MOC_DIR}" \ - $$GCC_DEBUG_CXXFLAGS # See common.pri for more details. - - noAddressSanitizer{ # For enable run qmake with CONFIG+=noAddressSanitizer - # do nothing - } else { - #gcc’s 4.8.0 Address Sanitizer - #http://blog.qt.digia.com/blog/2013/04/17/using-gccs-4-8-0-address-sanitizer-with-qt/ - QMAKE_CXXFLAGS += -fsanitize=address -fno-omit-frame-pointer - QMAKE_CFLAGS += -fsanitize=address -fno-omit-frame-pointer - QMAKE_LFLAGS += -fsanitize=address - } - } - clang*{ - QMAKE_CXXFLAGS += \ - # Key -isystem disable checking errors in system headers. - -isystem "$${OUT_PWD}/$${MOC_DIR}" \ - $$CLANG_DEBUG_CXXFLAGS # See common.pri for more details. - } - *-icc-*{ - QMAKE_CXXFLAGS += \ - -isystem "$${OUT_PWD}/$${MOC_DIR}" \ - $$ICC_DEBUG_CXXFLAGS - } + include(warnings.pri) } else { *-g++{ QMAKE_CXXFLAGS += $$GCC_DEBUG_CXXFLAGS # See common.pri for more details. @@ -85,6 +58,10 @@ CONFIG(debug, debug|release){ QMAKE_CXXFLAGS += -fno-omit-frame-pointer # Need for exchndl.dll } + checkWarnings{ + unix:include(warnings.pri) + } + noDebugSymbols{ # For enable run qmake with CONFIG+=noDebugSymbols # do nothing } else { diff --git a/src/libs/vobj/warnings.pri b/src/libs/vobj/warnings.pri new file mode 100644 index 000000000..5e56557c8 --- /dev/null +++ b/src/libs/vobj/warnings.pri @@ -0,0 +1,42 @@ +#Turn on compilers warnings. +*-g++{ + QMAKE_CXXFLAGS += \ + # Key -isystem disable checking errors in system headers. + -isystem "$${OUT_PWD}/$${MOC_DIR}" \ + $$GCC_DEBUG_CXXFLAGS # See common.pri for more details. + + checkWarnings{ # For enable run qmake with CONFIG+=checkWarnings + QMAKE_CXXFLAGS += -Werror + } + + noAddressSanitizer{ # For enable run qmake with CONFIG+=noAddressSanitizer + # do nothing + } else { + #gcc’s 4.8.0 Address Sanitizer + #http://blog.qt.digia.com/blog/2013/04/17/using-gccs-4-8-0-address-sanitizer-with-qt/ + QMAKE_CXXFLAGS += -fsanitize=address -fno-omit-frame-pointer + QMAKE_CFLAGS += -fsanitize=address -fno-omit-frame-pointer + QMAKE_LFLAGS += -fsanitize=address + } +} + +clang*{ + QMAKE_CXXFLAGS += \ + # Key -isystem disable checking errors in system headers. + -isystem "$${OUT_PWD}/$${MOC_DIR}" \ + $$CLANG_DEBUG_CXXFLAGS # See common.pri for more details. + + checkWarnings{ # For enable run qmake with CONFIG+=checkWarnings + QMAKE_CXXFLAGS += -Werror + } +} + +*-icc-*{ + QMAKE_CXXFLAGS += \ + -isystem "$${OUT_PWD}/$${MOC_DIR}" \ + $$ICC_DEBUG_CXXFLAGS + + checkWarnings{ # For enable run qmake with CONFIG+=checkWarnings + QMAKE_CXXFLAGS += -Werror + } +} diff --git a/src/libs/vpatterndb/vformula.cpp b/src/libs/vpatterndb/vformula.cpp index 703146d8b..58a660578 100644 --- a/src/libs/vpatterndb/vformula.cpp +++ b/src/libs/vpatterndb/vformula.cpp @@ -39,14 +39,14 @@ //VFormula //--------------------------------------------------------------------------------------------------------------------- VFormula::VFormula() - :formula(QString()), value(QString(tr("Error"))), checkZero(true), data(nullptr), toolId(NULL_ID), + :formula(QString()), value(tr("Error")), checkZero(true), data(nullptr), toolId(NULL_ID), postfix(QString()), _error(true), dValue(0) {} //--------------------------------------------------------------------------------------------------------------------- VFormula::VFormula(const QString &formula, const VContainer *container) : formula(qApp->TrVars()->FormulaToUser(formula, qApp->Settings()->GetOsSeparator())), - value(QString(tr("Error"))), + value(tr("Error")), checkZero(true), data(container), toolId(NULL_ID), @@ -226,7 +226,7 @@ void VFormula::Eval() } if (formula.isEmpty()) { - value = QString(tr("Error")); + value = tr("Error"); _error = true; dValue = 0; } @@ -240,7 +240,7 @@ void VFormula::Eval() if (qIsInf(result) || qIsNaN(result)) { - value = QString(tr("Error")); + value = tr("Error"); _error = true; dValue = 0; } @@ -263,7 +263,7 @@ void VFormula::Eval() } catch (qmu::QmuParserError &e) { - value = QString(tr("Error")); + value = tr("Error"); _error = true; dValue = 0; qDebug() << "\nMath parser error:\n" diff --git a/src/libs/vpatterndb/vpatterndb.pro b/src/libs/vpatterndb/vpatterndb.pro index 28d254840..9460a67d6 100644 --- a/src/libs/vpatterndb/vpatterndb.pro +++ b/src/libs/vpatterndb/vpatterndb.pro @@ -46,34 +46,7 @@ $$enable_ccache() CONFIG(debug, debug|release){ # Debug mode unix { - #Turn on compilers warnings. - *-g++{ - QMAKE_CXXFLAGS += \ - # Key -isystem disable checking errors in system headers. - -isystem "$${OUT_PWD}/$${MOC_DIR}" \ - $$GCC_DEBUG_CXXFLAGS # See common.pri for more details. - - noAddressSanitizer{ # For enable run qmake with CONFIG+=noAddressSanitizer - # do nothing - } else { - #gcc’s 4.8.0 Address Sanitizer - #http://blog.qt.digia.com/blog/2013/04/17/using-gccs-4-8-0-address-sanitizer-with-qt/ - QMAKE_CXXFLAGS += -fsanitize=address -fno-omit-frame-pointer - QMAKE_CFLAGS += -fsanitize=address -fno-omit-frame-pointer - QMAKE_LFLAGS += -fsanitize=address - } - } - clang*{ - QMAKE_CXXFLAGS += \ - # Key -isystem disable checking errors in system headers. - -isystem "$${OUT_PWD}/$${MOC_DIR}" \ - $$CLANG_DEBUG_CXXFLAGS # See common.pri for more details. - } - *-icc-*{ - QMAKE_CXXFLAGS += \ - -isystem "$${OUT_PWD}/$${MOC_DIR}" \ - $$ICC_DEBUG_CXXFLAGS - } + include(warnings.pri) } else { *-g++{ QMAKE_CXXFLAGS += $$GCC_DEBUG_CXXFLAGS # See common.pri for more details. @@ -88,6 +61,10 @@ CONFIG(debug, debug|release){ QMAKE_CXXFLAGS += -fno-omit-frame-pointer # Need for exchndl.dll } + checkWarnings{ + unix:include(warnings.pri) + } + noDebugSymbols{ # For enable run qmake with CONFIG+=noDebugSymbols # do nothing } else { diff --git a/src/libs/vpatterndb/warnings.pri b/src/libs/vpatterndb/warnings.pri new file mode 100644 index 000000000..5e56557c8 --- /dev/null +++ b/src/libs/vpatterndb/warnings.pri @@ -0,0 +1,42 @@ +#Turn on compilers warnings. +*-g++{ + QMAKE_CXXFLAGS += \ + # Key -isystem disable checking errors in system headers. + -isystem "$${OUT_PWD}/$${MOC_DIR}" \ + $$GCC_DEBUG_CXXFLAGS # See common.pri for more details. + + checkWarnings{ # For enable run qmake with CONFIG+=checkWarnings + QMAKE_CXXFLAGS += -Werror + } + + noAddressSanitizer{ # For enable run qmake with CONFIG+=noAddressSanitizer + # do nothing + } else { + #gcc’s 4.8.0 Address Sanitizer + #http://blog.qt.digia.com/blog/2013/04/17/using-gccs-4-8-0-address-sanitizer-with-qt/ + QMAKE_CXXFLAGS += -fsanitize=address -fno-omit-frame-pointer + QMAKE_CFLAGS += -fsanitize=address -fno-omit-frame-pointer + QMAKE_LFLAGS += -fsanitize=address + } +} + +clang*{ + QMAKE_CXXFLAGS += \ + # Key -isystem disable checking errors in system headers. + -isystem "$${OUT_PWD}/$${MOC_DIR}" \ + $$CLANG_DEBUG_CXXFLAGS # See common.pri for more details. + + checkWarnings{ # For enable run qmake with CONFIG+=checkWarnings + QMAKE_CXXFLAGS += -Werror + } +} + +*-icc-*{ + QMAKE_CXXFLAGS += \ + -isystem "$${OUT_PWD}/$${MOC_DIR}" \ + $$ICC_DEBUG_CXXFLAGS + + checkWarnings{ # For enable run qmake with CONFIG+=checkWarnings + QMAKE_CXXFLAGS += -Werror + } +} diff --git a/src/libs/vpropertyexplorer/vpropertyexplorer.pro b/src/libs/vpropertyexplorer/vpropertyexplorer.pro index 36302808b..2af77b837 100644 --- a/src/libs/vpropertyexplorer/vpropertyexplorer.pro +++ b/src/libs/vpropertyexplorer/vpropertyexplorer.pro @@ -37,6 +37,9 @@ MOC_DIR = moc # objecs files OBJECTS_DIR = obj +# Allow MAC OS X to find library inside a bundle +macx:QMAKE_SONAME_PREFIX = @rpath + include(vpropertyexplorer.pri) # Set "make install" command for Unix-like systems. @@ -63,45 +66,7 @@ $$enable_ccache() CONFIG(debug, debug|release){ # Debug mode unix { - #Turn on compilers warnings. - *-g++{ - QMAKE_CXXFLAGS += \ - -isystem "$${OUT_PWD}/$${MOC_DIR}" \ - # Key -isystem disable checking errors in system headers. - $$GCC_DEBUG_CXXFLAGS \ # See common.pri for more details. - - # -isystem key works only for headers. In some cases it's not enough. But we can't delete this warnings and - # want them in global list. Compromise decision delete them from local list. - QMAKE_CXXFLAGS -= \ - -Wswitch-default - - noAddressSanitizer{ # For enable run qmake with CONFIG+=noAddressSanitizer - # do nothing - } else { - #gcc’s 4.8.0 Address Sanitizer - #http://blog.qt.digia.com/blog/2013/04/17/using-gccs-4-8-0-address-sanitizer-with-qt/ - QMAKE_CXXFLAGS += -fsanitize=address -fno-omit-frame-pointer - QMAKE_CFLAGS += -fsanitize=address -fno-omit-frame-pointer - QMAKE_LFLAGS += -fsanitize=address - } - } - - clang*{ - QMAKE_CXXFLAGS += \ - # Key -isystem disable checking errors in system headers. - -isystem "$${OUT_PWD}/$${MOC_DIR}" \ - $$CLANG_DEBUG_CXXFLAGS # See common.pri for more details. - - # -isystem key works only for headers. In some cases it's not enough. But we can't delete this warnings and - # want them in global list. Compromise decision delete them from local list. - QMAKE_CXXFLAGS -= \ - -Wundefined-reinterpret-cast - } - *-icc-*{ - QMAKE_CXXFLAGS += \ - -isystem "$${OUT_PWD}/$${MOC_DIR}" \ - $$ICC_DEBUG_CXXFLAGS - } + include(warnings.pri) } else { *-g++{ QMAKE_CXXFLAGS += $$CLANG_DEBUG_CXXFLAGS # See common.pri for more details. @@ -116,6 +81,10 @@ CONFIG(debug, debug|release){ QMAKE_CXXFLAGS += -fno-omit-frame-pointer # Need for exchndl.dll } + checkWarnings{ + unix:include(warnings.pri) + } + !macx:!win32-msvc*{ noDebugSymbols{ # For enable run qmake with CONFIG+=noDebugSymbols # do nothing diff --git a/src/libs/vpropertyexplorer/warnings.pri b/src/libs/vpropertyexplorer/warnings.pri new file mode 100644 index 000000000..fcf8e2aeb --- /dev/null +++ b/src/libs/vpropertyexplorer/warnings.pri @@ -0,0 +1,52 @@ +#Turn on compilers warnings. +*-g++{ + QMAKE_CXXFLAGS += \ + -isystem "$${OUT_PWD}/$${MOC_DIR}" \ + # Key -isystem disable checking errors in system headers. + $$GCC_DEBUG_CXXFLAGS \ # See common.pri for more details. + + checkWarnings{ # For enable run qmake with CONFIG+=checkWarnings + QMAKE_CXXFLAGS += -Werror + } + + # -isystem key works only for headers. In some cases it's not enough. But we can't delete this warnings and + # want them in global list. Compromise decision delete them from local list. + QMAKE_CXXFLAGS -= \ + -Wswitch-default + + noAddressSanitizer{ # For enable run qmake with CONFIG+=noAddressSanitizer + # do nothing + } else { + #gcc’s 4.8.0 Address Sanitizer + #http://blog.qt.digia.com/blog/2013/04/17/using-gccs-4-8-0-address-sanitizer-with-qt/ + QMAKE_CXXFLAGS += -fsanitize=address -fno-omit-frame-pointer + QMAKE_CFLAGS += -fsanitize=address -fno-omit-frame-pointer + QMAKE_LFLAGS += -fsanitize=address + } +} + +clang*{ + QMAKE_CXXFLAGS += \ + # Key -isystem disable checking errors in system headers. + -isystem "$${OUT_PWD}/$${MOC_DIR}" \ + $$CLANG_DEBUG_CXXFLAGS # See common.pri for more details. + + checkWarnings{ # For enable run qmake with CONFIG+=checkWarnings + QMAKE_CXXFLAGS += -Werror + } + + # -isystem key works only for headers. In some cases it's not enough. But we can't delete this warnings and + # want them in global list. Compromise decision delete them from local list. + QMAKE_CXXFLAGS -= \ + -Wundefined-reinterpret-cast +} + +*-icc-*{ + QMAKE_CXXFLAGS += \ + -isystem "$${OUT_PWD}/$${MOC_DIR}" \ + $$ICC_DEBUG_CXXFLAGS + + checkWarnings{ # For enable run qmake with CONFIG+=checkWarnings + QMAKE_CXXFLAGS += -Werror + } +} diff --git a/src/libs/vtools/dialogs/support/dialogundo.cpp b/src/libs/vtools/dialogs/support/dialogundo.cpp index f915051be..4b858a632 100644 --- a/src/libs/vtools/dialogs/support/dialogundo.cpp +++ b/src/libs/vtools/dialogs/support/dialogundo.cpp @@ -48,9 +48,17 @@ DialogUndo::DialogUndo(QWidget *parent) } else { - connect(ui->pushButtonUndo, &QPushButton::clicked, this, &DialogUndo::Undo); + connect(ui->pushButtonUndo, &QPushButton::clicked, [this]() + { + result = UndoButton::Undo; + accept(); + }); } - connect(ui->pushButtonFix, &QPushButton::clicked, this, &DialogUndo::Fix); + connect(ui->pushButtonFix, &QPushButton::clicked, [this]() + { + result = UndoButton::Fix; + accept(); + }); connect(ui->pushButtonCancel, &QPushButton::clicked, this, &DialogUndo::Cancel); setCursor(Qt::ArrowCursor); @@ -62,20 +70,6 @@ DialogUndo::~DialogUndo() delete ui; } -//--------------------------------------------------------------------------------------------------------------------- -void DialogUndo::Undo() -{ - result = UndoButton::Undo; - accept(); -} - -//--------------------------------------------------------------------------------------------------------------------- -void DialogUndo::Fix() -{ - result = UndoButton::Fix; - accept(); -} - //--------------------------------------------------------------------------------------------------------------------- void DialogUndo::Cancel() { diff --git a/src/libs/vtools/dialogs/support/dialogundo.h b/src/libs/vtools/dialogs/support/dialogundo.h index ccb20873d..be9ef5c34 100644 --- a/src/libs/vtools/dialogs/support/dialogundo.h +++ b/src/libs/vtools/dialogs/support/dialogundo.h @@ -42,15 +42,13 @@ class DialogUndo : public QDialog { Q_OBJECT public: - explicit DialogUndo(QWidget *parent = 0); + explicit DialogUndo(QWidget *parent = nullptr); UndoButton Result() const; virtual ~DialogUndo() Q_DECL_OVERRIDE; -public slots: - void Undo(); - void Fix(); - void Cancel(); protected: - virtual void closeEvent ( QCloseEvent * event ) Q_DECL_OVERRIDE; + virtual void closeEvent ( QCloseEvent *event ) Q_DECL_OVERRIDE; +private slots: + void Cancel(); private: Q_DISABLE_COPY(DialogUndo) Ui::DialogUndo *ui; diff --git a/src/libs/vtools/dialogs/tools/dialogalongline.cpp b/src/libs/vtools/dialogs/tools/dialogalongline.cpp index f9ddcb36d..3b0f14df4 100644 --- a/src/libs/vtools/dialogs/tools/dialogalongline.cpp +++ b/src/libs/vtools/dialogs/tools/dialogalongline.cpp @@ -142,7 +142,6 @@ DialogAlongLine::~DialogAlongLine() VContainer *locData = const_cast (data); locData->RemoveVariable(currentLength); - DeleteVisualization(); delete ui; } @@ -180,7 +179,7 @@ void DialogAlongLine::ChosenObject(quint32 id, const SceneObject &type) line->RefreshGeometry(); if (buildMidpoint) { - SetFormula(currentLength + QLatin1Literal("/2")); + SetFormula(currentLength + QLatin1String("/2")); } prepare = true; this->setModal(true); diff --git a/src/libs/vtools/dialogs/tools/dialogarc.cpp b/src/libs/vtools/dialogs/tools/dialogarc.cpp index 28b4e8e5a..38e592113 100644 --- a/src/libs/vtools/dialogs/tools/dialogarc.cpp +++ b/src/libs/vtools/dialogs/tools/dialogarc.cpp @@ -113,7 +113,6 @@ void DialogArc::DeployF2TextEdit() //--------------------------------------------------------------------------------------------------------------------- DialogArc::~DialogArc() { - DeleteVisualization(); delete ui; } diff --git a/src/libs/vtools/dialogs/tools/dialogarcwithlength.cpp b/src/libs/vtools/dialogs/tools/dialogarcwithlength.cpp index 294aef428..46dae81de 100644 --- a/src/libs/vtools/dialogs/tools/dialogarcwithlength.cpp +++ b/src/libs/vtools/dialogs/tools/dialogarcwithlength.cpp @@ -90,7 +90,6 @@ DialogArcWithLength::DialogArcWithLength(const VContainer *data, const quint32 & //--------------------------------------------------------------------------------------------------------------------- DialogArcWithLength::~DialogArcWithLength() { - DeleteVisualization(); delete ui; } diff --git a/src/libs/vtools/dialogs/tools/dialogbisector.cpp b/src/libs/vtools/dialogs/tools/dialogbisector.cpp index 88b8313f0..d8e7d08ac 100644 --- a/src/libs/vtools/dialogs/tools/dialogbisector.cpp +++ b/src/libs/vtools/dialogs/tools/dialogbisector.cpp @@ -142,7 +142,6 @@ void DialogBisector::DeployFormulaTextEdit() //--------------------------------------------------------------------------------------------------------------------- DialogBisector::~DialogBisector() { - DeleteVisualization(); delete ui; } diff --git a/src/libs/vtools/dialogs/tools/dialogcubicbezier.cpp b/src/libs/vtools/dialogs/tools/dialogcubicbezier.cpp index c33761b7e..0f4103100 100644 --- a/src/libs/vtools/dialogs/tools/dialogcubicbezier.cpp +++ b/src/libs/vtools/dialogs/tools/dialogcubicbezier.cpp @@ -63,7 +63,6 @@ DialogCubicBezier::DialogCubicBezier(const VContainer *data, const quint32 &tool //--------------------------------------------------------------------------------------------------------------------- DialogCubicBezier::~DialogCubicBezier() { - DeleteVisualization(); delete ui; } diff --git a/src/libs/vtools/dialogs/tools/dialogcubicbezierpath.cpp b/src/libs/vtools/dialogs/tools/dialogcubicbezierpath.cpp index 7bb13d604..a0f1145c6 100644 --- a/src/libs/vtools/dialogs/tools/dialogcubicbezierpath.cpp +++ b/src/libs/vtools/dialogs/tools/dialogcubicbezierpath.cpp @@ -62,7 +62,6 @@ DialogCubicBezierPath::DialogCubicBezierPath(const VContainer *data, const quint //--------------------------------------------------------------------------------------------------------------------- DialogCubicBezierPath::~DialogCubicBezierPath() { - DeleteVisualization(); delete ui; } diff --git a/src/libs/vtools/dialogs/tools/dialogcurveintersectaxis.cpp b/src/libs/vtools/dialogs/tools/dialogcurveintersectaxis.cpp index ba14e3565..df369c3ec 100644 --- a/src/libs/vtools/dialogs/tools/dialogcurveintersectaxis.cpp +++ b/src/libs/vtools/dialogs/tools/dialogcurveintersectaxis.cpp @@ -78,7 +78,6 @@ DialogCurveIntersectAxis::DialogCurveIntersectAxis(const VContainer *data, const //--------------------------------------------------------------------------------------------------------------------- DialogCurveIntersectAxis::~DialogCurveIntersectAxis() { - DeleteVisualization(); delete ui; } @@ -222,6 +221,7 @@ void DialogCurveIntersectAxis::ChosenObject(quint32 id, const SceneObject &type) VAbstractMainWindow *window = qobject_cast(qApp->getMainWindow()); SCASSERT(window != nullptr); connect(line, &VisToolCurveIntersectAxis::ToolTip, window, &VAbstractMainWindow::ShowToolTip); + } } break; diff --git a/src/libs/vtools/dialogs/tools/dialogcutarc.cpp b/src/libs/vtools/dialogs/tools/dialogcutarc.cpp index c247013aa..531e3da96 100644 --- a/src/libs/vtools/dialogs/tools/dialogcutarc.cpp +++ b/src/libs/vtools/dialogs/tools/dialogcutarc.cpp @@ -106,7 +106,6 @@ void DialogCutArc::DeployFormulaTextEdit() //--------------------------------------------------------------------------------------------------------------------- DialogCutArc::~DialogCutArc() { - DeleteVisualization(); delete ui; } diff --git a/src/libs/vtools/dialogs/tools/dialogcutspline.cpp b/src/libs/vtools/dialogs/tools/dialogcutspline.cpp index fe6f2ffc7..f5c8a46a2 100644 --- a/src/libs/vtools/dialogs/tools/dialogcutspline.cpp +++ b/src/libs/vtools/dialogs/tools/dialogcutspline.cpp @@ -73,7 +73,6 @@ DialogCutSpline::DialogCutSpline(const VContainer *data, const quint32 &toolId, //--------------------------------------------------------------------------------------------------------------------- DialogCutSpline::~DialogCutSpline() { - DeleteVisualization(); delete ui; } diff --git a/src/libs/vtools/dialogs/tools/dialogcutsplinepath.cpp b/src/libs/vtools/dialogs/tools/dialogcutsplinepath.cpp index 181f958c2..d240740bc 100644 --- a/src/libs/vtools/dialogs/tools/dialogcutsplinepath.cpp +++ b/src/libs/vtools/dialogs/tools/dialogcutsplinepath.cpp @@ -73,7 +73,6 @@ DialogCutSplinePath::DialogCutSplinePath(const VContainer *data, const quint32 & //--------------------------------------------------------------------------------------------------------------------- DialogCutSplinePath::~DialogCutSplinePath() { - DeleteVisualization(); delete ui; } diff --git a/src/libs/vtools/dialogs/tools/dialogdetail.cpp b/src/libs/vtools/dialogs/tools/dialogdetail.cpp index 0cc6bb33c..7119afdaa 100644 --- a/src/libs/vtools/dialogs/tools/dialogdetail.cpp +++ b/src/libs/vtools/dialogs/tools/dialogdetail.cpp @@ -130,6 +130,8 @@ void DialogDetail::ChosenObject(quint32 id, const SceneObject &type) } ValidObjects(DetailIsValid()); + // Fix issue #526. Dialog Detail is not on top after selection second object on Mac. + setWindowFlags(windowFlags() | Qt::WindowStaysOnTopHint); this->show(); } } @@ -187,6 +189,7 @@ void DialogDetail::NameDetailChanged() void DialogDetail::NewItem(quint32 id, const Tool &typeTool, const NodeDetail &typeNode, qreal mx, qreal my, bool reverse) { + SCASSERT(id > NULL_ID); QString name; switch (typeTool) { @@ -214,8 +217,7 @@ void DialogDetail::NewItem(quint32 id, const Tool &typeTool, const NodeDetail &t } else { - const QString previousItemName = ui.listWidget->item(ui.listWidget->count()-1)->text(); - if(QString::compare(previousItemName, name) != 0) + if(RowId(ui.listWidget->count()-1) != id) { canAddNewPoint = true; } @@ -289,6 +291,15 @@ void DialogDetail::EnableObjectGUI(bool value) } } +//--------------------------------------------------------------------------------------------------------------------- +quint32 DialogDetail::RowId(int i) const +{ + const QListWidgetItem *rowItem = ui.listWidget->item(i); + SCASSERT(rowItem != nullptr); + const VNodeDetail rowNode = qvariant_cast(rowItem->data(Qt::UserRole)); + return rowNode.getId(); +} + //--------------------------------------------------------------------------------------------------------------------- /** * @brief setDetails set detail @@ -497,7 +508,7 @@ bool DialogDetail::DetailIsValid() const QByteArray byteArray; QBuffer buffer(&byteArray); pixmap.save(&buffer, "PNG"); - QString url = QString(" "); + QString url = QString(" "); if(CreateDetail().ContourPoints(data).count() < 3) { @@ -523,10 +534,7 @@ bool DialogDetail::DetailIsValid() const { for (int i=0, sz = ui.listWidget->count()-1; iitem(i)->text(); - const QString nextRow = ui.listWidget->item(i+1)->text(); - - if (QString::compare(previousRow, nextRow) == 0) + if (RowId(i) == RowId(i+1)) { url += tr("You have double points!"); ui.helpLabel->setText(url); @@ -544,10 +552,7 @@ bool DialogDetail::FirstPointEqualLast() const { if (ui.listWidget->count() > 1) { - const QString firstDetailPoint = ui.listWidget->item(0)->text(); - const QString lastDetailPoint = ui.listWidget->item(ui.listWidget->count()-1)->text(); - - if (QString::compare(firstDetailPoint, lastDetailPoint) == 0) + if (RowId(0) == RowId(ui.listWidget->count()-1)) { return true; } diff --git a/src/libs/vtools/dialogs/tools/dialogdetail.h b/src/libs/vtools/dialogs/tools/dialogdetail.h index 11286af08..d6d31c803 100644 --- a/src/libs/vtools/dialogs/tools/dialogdetail.h +++ b/src/libs/vtools/dialogs/tools/dialogdetail.h @@ -87,6 +87,7 @@ private: VDetail CreateDetail() const; void ValidObjects(bool value); void EnableObjectGUI(bool value); + quint32 RowId(int i) const; }; //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/libs/vtools/dialogs/tools/dialogendline.cpp b/src/libs/vtools/dialogs/tools/dialogendline.cpp index 63941d0fb..422388c3a 100644 --- a/src/libs/vtools/dialogs/tools/dialogendline.cpp +++ b/src/libs/vtools/dialogs/tools/dialogendline.cpp @@ -346,7 +346,6 @@ void DialogEndLine::closeEvent(QCloseEvent *event) //--------------------------------------------------------------------------------------------------------------------- DialogEndLine::~DialogEndLine() { - DeleteVisualization(); delete ui; } diff --git a/src/libs/vtools/dialogs/tools/dialogheight.cpp b/src/libs/vtools/dialogs/tools/dialogheight.cpp index 81e0b40b8..9cb4fad5d 100644 --- a/src/libs/vtools/dialogs/tools/dialogheight.cpp +++ b/src/libs/vtools/dialogs/tools/dialogheight.cpp @@ -75,7 +75,6 @@ DialogHeight::DialogHeight(const VContainer *data, const quint32 &toolId, QWidge //--------------------------------------------------------------------------------------------------------------------- DialogHeight::~DialogHeight() { - DeleteVisualization(); delete ui; } diff --git a/src/libs/vtools/dialogs/tools/dialogline.cpp b/src/libs/vtools/dialogs/tools/dialogline.cpp index 10a908252..298937b69 100644 --- a/src/libs/vtools/dialogs/tools/dialogline.cpp +++ b/src/libs/vtools/dialogs/tools/dialogline.cpp @@ -68,7 +68,6 @@ DialogLine::DialogLine(const VContainer *data, const quint32 &toolId, QWidget *p //--------------------------------------------------------------------------------------------------------------------- DialogLine::~DialogLine() { - DeleteVisualization(); delete ui; } diff --git a/src/libs/vtools/dialogs/tools/dialoglineintersect.cpp b/src/libs/vtools/dialogs/tools/dialoglineintersect.cpp index 0688571d1..5fe9c1f4b 100644 --- a/src/libs/vtools/dialogs/tools/dialoglineintersect.cpp +++ b/src/libs/vtools/dialogs/tools/dialoglineintersect.cpp @@ -75,7 +75,6 @@ DialogLineIntersect::DialogLineIntersect(const VContainer *data, const quint32 & //--------------------------------------------------------------------------------------------------------------------- DialogLineIntersect::~DialogLineIntersect() { - DeleteVisualization(); delete ui; } diff --git a/src/libs/vtools/dialogs/tools/dialoglineintersectaxis.cpp b/src/libs/vtools/dialogs/tools/dialoglineintersectaxis.cpp index 932571b49..870914df1 100644 --- a/src/libs/vtools/dialogs/tools/dialoglineintersectaxis.cpp +++ b/src/libs/vtools/dialogs/tools/dialoglineintersectaxis.cpp @@ -87,7 +87,6 @@ DialogLineIntersectAxis::DialogLineIntersectAxis(const VContainer *data, const q //--------------------------------------------------------------------------------------------------------------------- DialogLineIntersectAxis::~DialogLineIntersectAxis() { - DeleteVisualization(); delete ui; } diff --git a/src/libs/vtools/dialogs/tools/dialognormal.cpp b/src/libs/vtools/dialogs/tools/dialognormal.cpp index d219318fd..11505b5b4 100644 --- a/src/libs/vtools/dialogs/tools/dialognormal.cpp +++ b/src/libs/vtools/dialogs/tools/dialognormal.cpp @@ -132,7 +132,6 @@ void DialogNormal::DeployFormulaTextEdit() //--------------------------------------------------------------------------------------------------------------------- DialogNormal::~DialogNormal() { - DeleteVisualization(); delete ui; } diff --git a/src/libs/vtools/dialogs/tools/dialogpointfromarcandtangent.cpp b/src/libs/vtools/dialogs/tools/dialogpointfromarcandtangent.cpp index 70899b26b..b35e26fcf 100644 --- a/src/libs/vtools/dialogs/tools/dialogpointfromarcandtangent.cpp +++ b/src/libs/vtools/dialogs/tools/dialogpointfromarcandtangent.cpp @@ -63,7 +63,6 @@ DialogPointFromArcAndTangent::DialogPointFromArcAndTangent(const VContainer *dat //--------------------------------------------------------------------------------------------------------------------- DialogPointFromArcAndTangent::~DialogPointFromArcAndTangent() { - DeleteVisualization(); delete ui; } diff --git a/src/libs/vtools/dialogs/tools/dialogpointfromcircleandtangent.cpp b/src/libs/vtools/dialogs/tools/dialogpointfromcircleandtangent.cpp index 9b0d84830..ed7ce0ac8 100644 --- a/src/libs/vtools/dialogs/tools/dialogpointfromcircleandtangent.cpp +++ b/src/libs/vtools/dialogs/tools/dialogpointfromcircleandtangent.cpp @@ -88,7 +88,6 @@ DialogPointFromCircleAndTangent::DialogPointFromCircleAndTangent(const VContaine //--------------------------------------------------------------------------------------------------------------------- DialogPointFromCircleAndTangent::~DialogPointFromCircleAndTangent() { - DeleteVisualization(); delete ui; } diff --git a/src/libs/vtools/dialogs/tools/dialogpointofcontact.cpp b/src/libs/vtools/dialogs/tools/dialogpointofcontact.cpp index e20065ab2..29d367c0e 100644 --- a/src/libs/vtools/dialogs/tools/dialogpointofcontact.cpp +++ b/src/libs/vtools/dialogs/tools/dialogpointofcontact.cpp @@ -81,7 +81,6 @@ DialogPointOfContact::DialogPointOfContact(const VContainer *data, const quint32 //--------------------------------------------------------------------------------------------------------------------- DialogPointOfContact::~DialogPointOfContact() { - DeleteVisualization(); delete ui; } diff --git a/src/libs/vtools/dialogs/tools/dialogpointofintersection.cpp b/src/libs/vtools/dialogs/tools/dialogpointofintersection.cpp index dc62a0b03..869af1e5e 100644 --- a/src/libs/vtools/dialogs/tools/dialogpointofintersection.cpp +++ b/src/libs/vtools/dialogs/tools/dialogpointofintersection.cpp @@ -71,7 +71,6 @@ DialogPointOfIntersection::DialogPointOfIntersection(const VContainer *data, con //--------------------------------------------------------------------------------------------------------------------- DialogPointOfIntersection::~DialogPointOfIntersection() { - DeleteVisualization(); delete ui; } diff --git a/src/libs/vtools/dialogs/tools/dialogpointofintersectionarcs.cpp b/src/libs/vtools/dialogs/tools/dialogpointofintersectionarcs.cpp index 08e2d66a9..00b31ca68 100644 --- a/src/libs/vtools/dialogs/tools/dialogpointofintersectionarcs.cpp +++ b/src/libs/vtools/dialogs/tools/dialogpointofintersectionarcs.cpp @@ -67,7 +67,6 @@ DialogPointOfIntersectionArcs::DialogPointOfIntersectionArcs(const VContainer *d //--------------------------------------------------------------------------------------------------------------------- DialogPointOfIntersectionArcs::~DialogPointOfIntersectionArcs() { - DeleteVisualization(); delete ui; } diff --git a/src/libs/vtools/dialogs/tools/dialogpointofintersectioncircles.cpp b/src/libs/vtools/dialogs/tools/dialogpointofintersectioncircles.cpp index 90abbd364..d43be12c0 100644 --- a/src/libs/vtools/dialogs/tools/dialogpointofintersectioncircles.cpp +++ b/src/libs/vtools/dialogs/tools/dialogpointofintersectioncircles.cpp @@ -104,7 +104,6 @@ DialogPointOfIntersectionCircles::DialogPointOfIntersectionCircles(const VContai //--------------------------------------------------------------------------------------------------------------------- DialogPointOfIntersectionCircles::~DialogPointOfIntersectionCircles() { - DeleteVisualization(); delete ui; } diff --git a/src/libs/vtools/dialogs/tools/dialogpointofintersectioncurves.cpp b/src/libs/vtools/dialogs/tools/dialogpointofintersectioncurves.cpp index c6c09102c..2a0bb2e9b 100644 --- a/src/libs/vtools/dialogs/tools/dialogpointofintersectioncurves.cpp +++ b/src/libs/vtools/dialogs/tools/dialogpointofintersectioncurves.cpp @@ -65,7 +65,6 @@ DialogPointOfIntersectionCurves::DialogPointOfIntersectionCurves(const VContaine //--------------------------------------------------------------------------------------------------------------------- DialogPointOfIntersectionCurves::~DialogPointOfIntersectionCurves() { - DeleteVisualization(); delete ui; } diff --git a/src/libs/vtools/dialogs/tools/dialogrotation.cpp b/src/libs/vtools/dialogs/tools/dialogrotation.cpp index 310b49eda..77b1a23fd 100644 --- a/src/libs/vtools/dialogs/tools/dialogrotation.cpp +++ b/src/libs/vtools/dialogs/tools/dialogrotation.cpp @@ -82,7 +82,6 @@ DialogRotation::DialogRotation(const VContainer *data, const quint32 &toolId, QW //--------------------------------------------------------------------------------------------------------------------- DialogRotation::~DialogRotation() { - DeleteVisualization(); delete ui; } @@ -217,7 +216,6 @@ void DialogRotation::ChosenObject(quint32 id, const SceneObject &type) { VisToolRotation *operation = qobject_cast(vis); SCASSERT(operation != nullptr); - VAbstractMainWindow *window = qobject_cast(qApp->getMainWindow()); SCASSERT(window != nullptr); connect(operation, &Visualization::ToolTip, window, &VAbstractMainWindow::ShowToolTip); diff --git a/src/libs/vtools/dialogs/tools/dialogshoulderpoint.cpp b/src/libs/vtools/dialogs/tools/dialogshoulderpoint.cpp index 79f4ff42b..881944dd8 100644 --- a/src/libs/vtools/dialogs/tools/dialogshoulderpoint.cpp +++ b/src/libs/vtools/dialogs/tools/dialogshoulderpoint.cpp @@ -143,7 +143,6 @@ void DialogShoulderPoint::DeployFormulaTextEdit() //--------------------------------------------------------------------------------------------------------------------- DialogShoulderPoint::~DialogShoulderPoint() { - DeleteVisualization(); delete ui; } diff --git a/src/libs/vtools/dialogs/tools/dialogspline.cpp b/src/libs/vtools/dialogs/tools/dialogspline.cpp index ffd05e80d..cc74e38e2 100644 --- a/src/libs/vtools/dialogs/tools/dialogspline.cpp +++ b/src/libs/vtools/dialogs/tools/dialogspline.cpp @@ -122,7 +122,6 @@ DialogSpline::DialogSpline(const VContainer *data, const quint32 &toolId, QWidge //--------------------------------------------------------------------------------------------------------------------- DialogSpline::~DialogSpline() { - DeleteVisualization(); delete ui; } diff --git a/src/libs/vtools/dialogs/tools/dialogsplinepath.cpp b/src/libs/vtools/dialogs/tools/dialogsplinepath.cpp index 918f649bf..30fcc043b 100644 --- a/src/libs/vtools/dialogs/tools/dialogsplinepath.cpp +++ b/src/libs/vtools/dialogs/tools/dialogsplinepath.cpp @@ -109,7 +109,6 @@ DialogSplinePath::DialogSplinePath(const VContainer *data, const quint32 &toolId //--------------------------------------------------------------------------------------------------------------------- DialogSplinePath::~DialogSplinePath() { - DeleteVisualization(); delete ui; } @@ -939,6 +938,6 @@ void DialogSplinePath::ShowPointIssue(const QString &pName) } else { - item->setText(pName + QLatin1Literal("(!)")); + item->setText(pName + QLatin1String("(!)")); } } diff --git a/src/libs/vtools/dialogs/tools/dialogtool.cpp b/src/libs/vtools/dialogs/tools/dialogtool.cpp index 01e24c86a..5e56b1c0f 100644 --- a/src/libs/vtools/dialogs/tools/dialogtool.cpp +++ b/src/libs/vtools/dialogs/tools/dialogtool.cpp @@ -78,6 +78,11 @@ DialogTool::DialogTool(const VContainer *data, const quint32 &toolId, QWidget *p DialogTool::~DialogTool() { emit ToolTip(""); + + if (not vis.isNull()) + { + delete vis; + } } //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/libs/vtools/dialogs/tools/dialogtool.h b/src/libs/vtools/dialogs/tools/dialogtool.h index 279479857..b227794ee 100644 --- a/src/libs/vtools/dialogs/tools/dialogtool.h +++ b/src/libs/vtools/dialogs/tools/dialogtool.h @@ -180,7 +180,7 @@ protected: /** @brief number number of handled objects */ qint32 number; - Visualization *vis; + QPointer vis; virtual void closeEvent ( QCloseEvent * event ) Q_DECL_OVERRIDE; virtual void showEvent( QShowEvent *event ) Q_DECL_OVERRIDE; @@ -240,9 +240,6 @@ protected: template void AddVisualization(); - template - void DeleteVisualization(); - void ChangeColor(QWidget *widget, const QColor &color); virtual void ShowVisualization() {} /** @@ -359,19 +356,6 @@ inline void DialogTool::AddVisualization() } } -//--------------------------------------------------------------------------------------------------------------------- -template -inline void DialogTool::DeleteVisualization() -{ - T *toolVis = qobject_cast(vis); - SCASSERT(toolVis != nullptr); - - if (qApp->getCurrentScene()->items().contains(toolVis)) - { // In some cases scene delete object yourself. If not make check program will crash. - delete vis; - } -} - //--------------------------------------------------------------------------------------------------------------------- template inline T DialogTool::getCurrentCrossPoint(QComboBox *box) const diff --git a/src/libs/vtools/dialogs/tools/dialogtriangle.cpp b/src/libs/vtools/dialogs/tools/dialogtriangle.cpp index 4076937cf..248390888 100644 --- a/src/libs/vtools/dialogs/tools/dialogtriangle.cpp +++ b/src/libs/vtools/dialogs/tools/dialogtriangle.cpp @@ -75,7 +75,6 @@ DialogTriangle::DialogTriangle(const VContainer *data, const quint32 &toolId, QW //--------------------------------------------------------------------------------------------------------------------- DialogTriangle::~DialogTriangle() { - DeleteVisualization(); delete ui; } diff --git a/src/libs/vtools/dialogs/tools/dialogtruedarts.cpp b/src/libs/vtools/dialogs/tools/dialogtruedarts.cpp index ba909e210..cb8c310b4 100644 --- a/src/libs/vtools/dialogs/tools/dialogtruedarts.cpp +++ b/src/libs/vtools/dialogs/tools/dialogtruedarts.cpp @@ -80,7 +80,6 @@ DialogTrueDarts::DialogTrueDarts(const VContainer *data, const quint32 &toolId, //--------------------------------------------------------------------------------------------------------------------- DialogTrueDarts::~DialogTrueDarts() { - DeleteVisualization(); delete ui; } diff --git a/src/libs/vtools/tools/drawTools/toolpoint/tooldoublepoint/vtooldoublepoint.cpp b/src/libs/vtools/tools/drawTools/toolpoint/tooldoublepoint/vtooldoublepoint.cpp index 830fa8982..5ef6e7e6d 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/tooldoublepoint/vtooldoublepoint.cpp +++ b/src/libs/vtools/tools/drawTools/toolpoint/tooldoublepoint/vtooldoublepoint.cpp @@ -89,7 +89,7 @@ void VToolDoublePoint::setNameP2(const QString &name) //--------------------------------------------------------------------------------------------------------------------- void VToolDoublePoint::SetEnabled(bool enabled) { - SetToolEnabled(this, enabled); + SetToolEnabled(this, baseColor, enabled); } //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolbasepoint.cpp b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolbasepoint.cpp index 238703690..7e1c32dab 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolbasepoint.cpp +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolbasepoint.cpp @@ -379,8 +379,7 @@ void VToolBasePoint::contextMenuEvent ( QGraphicsSceneContextMenuEvent * event ) */ void VToolBasePoint::FullUpdateFromFile() { - VPointF point = *VAbstractTool::data.GeometricObject(id); - RefreshPointGeometry(point); + RefreshPointGeometry(*VAbstractTool::data.GeometricObject(id)); } //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolsinglepoint.cpp b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolsinglepoint.cpp index 6a880c460..3778ffffe 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolsinglepoint.cpp +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolsinglepoint.cpp @@ -94,8 +94,8 @@ void VToolSinglePoint::setName(const QString &name) //--------------------------------------------------------------------------------------------------------------------- void VToolSinglePoint::SetEnabled(bool enabled) { - SetToolEnabled(this, enabled); - SetToolEnabled(lineName, enabled); + SetToolEnabled(this, baseColor, enabled); + SetToolEnabled(lineName, Qt::black, enabled); } //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/libs/vtools/tools/drawTools/toolpoint/vabstractpoint.h b/src/libs/vtools/tools/drawTools/toolpoint/vabstractpoint.h index ecb7e5c64..c818f6c66 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/vabstractpoint.h +++ b/src/libs/vtools/tools/drawTools/toolpoint/vabstractpoint.h @@ -60,7 +60,7 @@ protected: virtual void RefreshLine(quint32 id)=0; template - void SetToolEnabled(T *item, bool enabled); + void SetToolEnabled(T *item, const QColor &color, bool enabled); template static void InitToolConnections(VMainGraphicsScene *scene, T *tool); @@ -97,12 +97,12 @@ void VAbstractPoint::ShowToolVisualization(bool show) //--------------------------------------------------------------------------------------------------------------------- template -void VAbstractPoint::SetToolEnabled(T *item, bool enabled) +void VAbstractPoint::SetToolEnabled(T *item, const QColor &color, bool enabled) { item->setEnabled(enabled); if (enabled) { - item->setPen(QPen(QColor(baseColor), + item->setPen(QPen(color, qApp->toPixel(WidthHairLine(*VAbstractTool::data.GetPatternUnit()))/factor)); } else diff --git a/src/libs/vtools/tools/vtooldetail.cpp b/src/libs/vtools/tools/vtooldetail.cpp index 0c918a14b..9eed8d8c3 100644 --- a/src/libs/vtools/tools/vtooldetail.cpp +++ b/src/libs/vtools/tools/vtooldetail.cpp @@ -140,8 +140,7 @@ void VToolDetail::setDialog() SCASSERT(dialog != nullptr); DialogDetail *dialogTool = qobject_cast(dialog); SCASSERT(dialogTool != nullptr); - VDetail detail = VAbstractTool::data.GetDetail(id); - dialogTool->setDetail(detail); + dialogTool->setDetail(VAbstractTool::data.GetDetail(id)); } //--------------------------------------------------------------------------------------------------------------------- @@ -298,8 +297,8 @@ void VToolDetail::FullUpdateFromGuiOk(int result) SCASSERT(dialog != nullptr); DialogDetail *dialogTool = qobject_cast(dialog); SCASSERT(dialogTool != nullptr); - VDetail newDet = dialogTool->getDetail(); - VDetail oldDet = VAbstractTool::data.GetDetail(id); + const VDetail newDet = dialogTool->getDetail(); + const VDetail oldDet = VAbstractTool::data.GetDetail(id); SaveDetailOptions *saveCommand = new SaveDetailOptions(oldDet, newDet, doc, id, this->scene()); connect(saveCommand, &SaveDetailOptions::NeedLiteParsing, doc, &VAbstractPattern::LiteParseTree); @@ -315,7 +314,7 @@ void VToolDetail::FullUpdateFromGuiOk(int result) */ void VToolDetail::AddToFile() { - VDetail detail = VAbstractTool::data.GetDetail(id); + const VDetail detail = VAbstractTool::data.GetDetail(id); QDomElement domElement = doc->createElement(getTagName()); doc->SetAttribute(domElement, VDomDocument::AttrId, id); @@ -379,7 +378,7 @@ QVariant VToolDetail::itemChange(QGraphicsItem::GraphicsItemChange change, const // value - this is new position. const QPointF newPos = value.toPointF(); - MoveDetail *moveDet = new MoveDetail(doc, newPos.x(), newPos.y(), id); + MoveDetail *moveDet = new MoveDetail(doc, newPos.x(), newPos.y(), id, scene()); connect(moveDet, &MoveDetail::NeedLiteParsing, doc, &VAbstractPattern::LiteParseTree); qApp->getUndoStack()->push(moveDet); diff --git a/src/libs/vtools/tools/vtooluniondetails.cpp b/src/libs/vtools/tools/vtooluniondetails.cpp index 6630a8f3f..dffd23f26 100644 --- a/src/libs/vtools/tools/vtooluniondetails.cpp +++ b/src/libs/vtools/tools/vtooluniondetails.cpp @@ -33,6 +33,7 @@ #include "../../vgeometry/varc.h" #include "../../vgeometry/vsplinepath.h" #include "../dialogs/tools/dialoguniondetails.h" +#include "../ifc/xml/vpatternconverter.h" #include @@ -112,165 +113,144 @@ void VToolUnionDetails::AddToNewDetail(VMainGraphicsScene *scene, VAbstractPatte { case (Tool::NodePoint): { - if ( qFuzzyIsNull(dx) && qFuzzyIsNull(dy) && (pRotate == 0)) + VPointF *point = new VPointF(*data->GeometricObject(det.at(i).getId())); + point->setMode(Draw::Modeling); + + if (not qFuzzyIsNull(dx) || not qFuzzyIsNull(dy) || pRotate != NULL_ID) { - id = det.at(i).getId(); - } - else - { - VPointF *point = new VPointF(*data->GeometricObject(det.at(i).getId())); - point->setMode(Draw::Modeling); BiasRotatePoint(point, dx, dy, *data->GeometricObject(pRotate), angle); - idObject = data->AddGObject(point); - children.append(idObject); - VPointF *point1 = new VPointF(*point); - point1->setMode(Draw::Modeling); - id = data->AddGObject(point1); - VNodePoint::Create(doc, data, scene, id, idObject, Document::FullParse, Source::FromGui, drawName, - idTool); } + + idObject = data->AddGObject(point); + children.append(idObject); + VPointF *point1 = new VPointF(*point); + point1->setMode(Draw::Modeling); + id = data->AddGObject(point1); + VNodePoint::Create(doc, data, scene, id, idObject, Document::FullParse, Source::FromGui, drawName, idTool); } break; case (Tool::NodeArc): { - if (qFuzzyIsNull(dx) && qFuzzyIsNull(dy) && pRotate == 0) + const QPointF p = *data->GeometricObject(pRotate); + const QSharedPointer arc = data->GeometricObject(det.at(i).getId()); + VPointF p1 = VPointF(arc->GetP1(), "A", 0, 0); + VPointF p2 = VPointF(arc->GetP2(), "A", 0, 0); + VPointF *center = new VPointF(arc->GetCenter()); + + if (not qFuzzyIsNull(dx) || not qFuzzyIsNull(dy) || pRotate != NULL_ID) { - id = det.at(i).getId(); - } - else - { - const QPointF p = *data->GeometricObject(pRotate); - const QSharedPointer arc = data->GeometricObject(det.at(i).getId()); - VPointF p1 = VPointF(arc->GetP1(), "A", 0, 0); BiasRotatePoint(&p1, dx, dy, p, angle); - VPointF p2 = VPointF(arc->GetP2(), "A", 0, 0); BiasRotatePoint(&p2, dx, dy, p, angle); - VPointF *center = new VPointF(arc->GetCenter()); BiasRotatePoint(center, dx, dy, p, angle); - - QLineF l1(*center, p1); - QLineF l2(*center, p2); - center->setMode(Draw::Modeling); - quint32 idCenter = data->AddGObject(center); - Q_UNUSED(idCenter); - VArc *arc1 = new VArc(*center, arc->GetRadius(), arc->GetFormulaRadius(), - l1.angle(), QString().setNum(l1.angle()), l2.angle(), - QString().setNum(l2.angle())); - arc1->setMode(Draw::Modeling); - idObject = data->AddGObject(arc1); - children.append(idObject); - - VArc *arc2 = new VArc(*arc1); - arc2->setMode(Draw::Modeling); - id = data->AddGObject(arc2); - - VNodeArc::Create(doc, data, id, idObject, Document::FullParse, Source::FromGui, drawName, idTool); } + + QLineF l1(*center, p1); + QLineF l2(*center, p2); + center->setMode(Draw::Modeling); + quint32 idCenter = data->AddGObject(center); + Q_UNUSED(idCenter); + VArc *arc1 = new VArc(*center, arc->GetRadius(), arc->GetFormulaRadius(), l1.angle(), + QString().setNum(l1.angle()), l2.angle(), QString().setNum(l2.angle())); + arc1->setMode(Draw::Modeling); + idObject = data->AddGObject(arc1); + children.append(idObject); + + VArc *arc2 = new VArc(*arc1); + arc2->setMode(Draw::Modeling); + id = data->AddGObject(arc2); + + VNodeArc::Create(doc, data, id, idObject, Document::FullParse, Source::FromGui, drawName, idTool); } break; case (Tool::NodeSpline): { - if (qFuzzyIsNull(dx) && qFuzzyIsNull(dy) && pRotate == 0) - { - id = det.at(i).getId(); - } - else - { - const QSharedPointer spline = - data->GeometricObject(det.at(i).getId()); + const QSharedPointer spline = + data->GeometricObject(det.at(i).getId()); - const QPointF p = *data->GeometricObject(pRotate); - VPointF *p1 = new VPointF(spline->GetP1()); + const QPointF p = *data->GeometricObject(pRotate); + VPointF *p1 = new VPointF(spline->GetP1()); + VPointF p2 = VPointF(spline->GetP2()); + VPointF p3 = VPointF(spline->GetP3()); + VPointF *p4 = new VPointF(spline->GetP4()); + + if (not qFuzzyIsNull(dx) || not qFuzzyIsNull(dy) || pRotate != NULL_ID) + { BiasRotatePoint(p1, dx, dy, p, angle); - - VPointF p2 = VPointF(spline->GetP2()); BiasRotatePoint(&p2, dx, dy, p, angle); - - VPointF p3 = VPointF(spline->GetP3()); BiasRotatePoint(&p3, dx, dy, p, angle); - - VPointF *p4 = new VPointF(spline->GetP4()); BiasRotatePoint(p4, dx, dy, p, angle); - - VSpline *spl = new VSpline(*p1, p2, p3, *p4, 0, Draw::Modeling); - idObject = data->AddGObject(spl); - children.append(idObject); - - VSpline *spl1 = new VSpline(*spl); - spl1->setMode(Draw::Modeling); - id = data->AddGObject(spl1); - VNodeSpline::Create(doc, data, id, idObject, Document::FullParse, Source::FromGui, drawName, idTool); - - delete p4; - delete p1; } + + VSpline *spl = new VSpline(*p1, p2, p3, *p4, 0, Draw::Modeling); + idObject = data->AddGObject(spl); + children.append(idObject); + + VSpline *spl1 = new VSpline(*spl); + spl1->setMode(Draw::Modeling); + id = data->AddGObject(spl1); + VNodeSpline::Create(doc, data, id, idObject, Document::FullParse, Source::FromGui, drawName, idTool); + + delete p4; + delete p1; } break; case (Tool::NodeSplinePath): { - if (qFuzzyIsNull(dx) && qFuzzyIsNull(dy) && pRotate == 0) + VSplinePath *path = new VSplinePath(); + path->setMode(Draw::Modeling); + const QSharedPointer splinePath = + data->GeometricObject(det.at(i).getId()); + for (qint32 i = 1; i <= splinePath->CountSubSpl(); ++i) { - id = det.at(i).getId(); - } - else - { - VSplinePath *path = new VSplinePath(); - path->setMode(Draw::Modeling); - const QSharedPointer splinePath = - data->GeometricObject(det.at(i).getId()); - for (qint32 i = 1; i <= splinePath->CountSubSpl(); ++i) + const VSpline spline = splinePath->GetSpline(i); + + const QPointF p = *data->GeometricObject(pRotate); + VPointF *p1 = new VPointF(spline.GetP1()); + VPointF p2 = VPointF(spline.GetP2()); + VPointF p3 = VPointF(spline.GetP3()); + VPointF *p4 = new VPointF(spline.GetP4()); + if (not qFuzzyIsNull(dx) || not qFuzzyIsNull(dy) || pRotate != NULL_ID) { - const VSpline spline = splinePath->GetSpline(i); - - const QPointF p = *data->GeometricObject(pRotate); - VPointF *p1 = new VPointF(spline.GetP1()); BiasRotatePoint(p1, dx, dy, p, angle); - - VPointF p2 = VPointF(spline.GetP2()); BiasRotatePoint(&p2, dx, dy, p, angle); - - VPointF p3 = VPointF(spline.GetP3()); BiasRotatePoint(&p3, dx, dy, p, angle); - - VPointF *p4 = new VPointF(spline.GetP4()); BiasRotatePoint(p4, dx, dy, p, angle); - - VSpline spl = VSpline(*p1, p2, p3, *p4); - if (i==1) - { - const qreal angle1 = spl.GetStartAngle()+180; - const QString angle1F = QString().number(angle1); - - path->append(VSplinePoint(*p1, angle1, angle1F, spl.GetStartAngle(), spl.GetStartAngleFormula(), - 0, "0", spline.GetC1Length(), spline.GetC1LengthFormula())); - } - - const qreal angle2 = spl.GetEndAngle()+180; - const QString angle2F = QString().number(angle2); - qreal pL2 = 0; - QString pL2F("0"); - if (i+1 <= splinePath->CountSubSpl()) - { - const VSpline nextSpline = splinePath->GetSpline(i+1); - pL2 = nextSpline.GetC1Length(); - pL2F = nextSpline.GetC1LengthFormula(); - } - - path->append(VSplinePoint(*p4, spl.GetEndAngle(), spl.GetEndAngleFormula(), angle2, angle2F, - spline.GetC2Length(), spline.GetC2LengthFormula(), pL2, pL2F)); - - delete p4; - delete p1; } - idObject = data->AddGObject(path); - children.append(idObject); - VSplinePath *path1 = new VSplinePath(*path); - path1->setMode(Draw::Modeling); - id = data->AddGObject(path1); - VNodeSplinePath::Create(doc, data, id, idObject, Document::FullParse, Source::FromGui, drawName, - idTool); + VSpline spl = VSpline(*p1, p2, p3, *p4); + if (i==1) + { + const qreal angle1 = spl.GetStartAngle()+180; + const QString angle1F = QString().number(angle1); + + path->append(VSplinePoint(*p1, angle1, angle1F, spl.GetStartAngle(), spl.GetStartAngleFormula(), + 0, "0", spline.GetC1Length(), spline.GetC1LengthFormula())); + } + + const qreal angle2 = spl.GetEndAngle()+180; + const QString angle2F = QString().number(angle2); + qreal pL2 = 0; + QString pL2F("0"); + if (i+1 <= splinePath->CountSubSpl()) + { + const VSpline nextSpline = splinePath->GetSpline(i+1); + pL2 = nextSpline.GetC1Length(); + pL2F = nextSpline.GetC1LengthFormula(); + } + + path->append(VSplinePoint(*p4, spl.GetEndAngle(), spl.GetEndAngleFormula(), angle2, angle2F, + spline.GetC2Length(), spline.GetC2LengthFormula(), pL2, pL2F)); + + delete p4; + delete p1; } + idObject = data->AddGObject(path); + children.append(idObject); + + VSplinePath *path1 = new VSplinePath(*path); + path1->setMode(Draw::Modeling); + id = data->AddGObject(path1); + VNodeSplinePath::Create(doc, data, id, idObject, Document::FullParse, Source::FromGui, drawName, idTool); } break; default: @@ -301,124 +281,119 @@ void VToolUnionDetails::UpdatePoints(VContainer *data, const VDetail &det, const { case (Tool::NodePoint): { - if (not qFuzzyIsNull(dx) || not qFuzzyIsNull(dy) || pRotate != 0) + VPointF *point = new VPointF(*data->GeometricObject(det.at(i).getId())); + point->setMode(Draw::Modeling); + if (not qFuzzyIsNull(dx) || not qFuzzyIsNull(dy) || pRotate != NULL_ID) { - VPointF *point = new VPointF(*data->GeometricObject(det.at(i).getId())); - point->setMode(Draw::Modeling); BiasRotatePoint(point, dx, dy, *data->GeometricObject(pRotate), angle); - data->UpdateGObject(TakeNextId(children), point); } + data->UpdateGObject(TakeNextId(children), point); } break; case (Tool::NodeArc): { - if (not qFuzzyIsNull(dx) || not qFuzzyIsNull(dy) || pRotate != 0) + const QPointF p = *data->GeometricObject(pRotate); + const QSharedPointer arc = data->GeometricObject(det.at(i).getId()); + VPointF p1 = VPointF(arc->GetP1()); + VPointF p2 = VPointF(arc->GetP2()); + VPointF *center = new VPointF(arc->GetCenter()); + + if (not qFuzzyIsNull(dx) || not qFuzzyIsNull(dy) || pRotate != NULL_ID) { - const QPointF p = *data->GeometricObject(pRotate); - const QSharedPointer arc = data->GeometricObject(det.at(i).getId()); - VPointF p1 = VPointF(arc->GetP1()); BiasRotatePoint(&p1, dx, dy, p, angle); - - VPointF p2 = VPointF(arc->GetP2()); BiasRotatePoint(&p2, dx, dy, p, angle); - - VPointF *center = new VPointF(arc->GetCenter()); BiasRotatePoint(center, dx, dy, p, angle); - - QLineF l1(*center, p1); - QLineF l2(*center, p2); - - VArc *arc1 = new VArc(*center, arc->GetRadius(), arc->GetFormulaRadius(), l1.angle(), - QString().setNum(l1.angle()), l2.angle(), QString().setNum(l2.angle())); - arc1->setMode(Draw::Modeling); - data->UpdateGObject(TakeNextId(children), arc1); - delete center; } + + QLineF l1(*center, p1); + QLineF l2(*center, p2); + + VArc *arc1 = new VArc(*center, arc->GetRadius(), arc->GetFormulaRadius(), l1.angle(), + QString().setNum(l1.angle()), l2.angle(), QString().setNum(l2.angle())); + arc1->setMode(Draw::Modeling); + data->UpdateGObject(TakeNextId(children), arc1); + delete center; } break; case (Tool::NodeSpline): { - if (not qFuzzyIsNull(dx) || not qFuzzyIsNull(dy) || pRotate != 0) + const QSharedPointer spline = + data->GeometricObject(det.at(i).getId()); + + const QPointF p = *data->GeometricObject(pRotate); + VPointF *p1 = new VPointF(spline->GetP1()); + VPointF p2 = VPointF(spline->GetP2()); + VPointF p3 = VPointF(spline->GetP3()); + VPointF *p4 = new VPointF(spline->GetP4()); + + if (not qFuzzyIsNull(dx) || not qFuzzyIsNull(dy) || pRotate != NULL_ID) { - const QSharedPointer spline = - data->GeometricObject(det.at(i).getId()); - - const QPointF p = *data->GeometricObject(pRotate); - VPointF *p1 = new VPointF(spline->GetP1()); BiasRotatePoint(p1, dx, dy, p, angle); - - VPointF p2 = VPointF(spline->GetP2()); BiasRotatePoint(&p2, dx, dy, p, angle); - - VPointF p3 = VPointF(spline->GetP3()); BiasRotatePoint(&p3, dx, dy, p, angle); - - VPointF *p4 = new VPointF(spline->GetP4()); BiasRotatePoint(p4, dx, dy, p, angle); - - VSpline *spl = new VSpline(*p1, p2, p3, *p4, 0, Draw::Modeling); - data->UpdateGObject(TakeNextId(children), spl); - delete p1; - delete p4; } + + VSpline *spl = new VSpline(*p1, p2, p3, *p4, 0, Draw::Modeling); + data->UpdateGObject(TakeNextId(children), spl); + delete p1; + delete p4; } break; case (Tool::NodeSplinePath): { - if (not qFuzzyIsNull(dx) || not qFuzzyIsNull(dy) || pRotate != 0) + VSplinePath *path = new VSplinePath(); + path->setMode(Draw::Modeling); + const QSharedPointer splinePath = + data->GeometricObject(det.at(i).getId()); + SCASSERT(splinePath != nullptr); + for (qint32 i = 1; i <= splinePath->CountSubSpl(); ++i) { - VSplinePath *path = new VSplinePath(); - path->setMode(Draw::Modeling); - const QSharedPointer splinePath = - data->GeometricObject(det.at(i).getId()); - SCASSERT(splinePath != nullptr); - for (qint32 i = 1; i <= splinePath->CountSubSpl(); ++i) + const VSpline spline = splinePath->GetSpline(i); + + const QPointF p = *data->GeometricObject(pRotate); + VPointF *p1 = new VPointF(spline.GetP1()); + VPointF p2 = VPointF(spline.GetP2()); + VPointF p3 = VPointF(spline.GetP3()); + VPointF *p4 = new VPointF(spline.GetP4()); + + if (not qFuzzyIsNull(dx) || not qFuzzyIsNull(dy) || pRotate != NULL_ID) { - const VSpline spline = splinePath->GetSpline(i); - - const QPointF p = *data->GeometricObject(pRotate); - VPointF *p1 = new VPointF(spline.GetP1()); BiasRotatePoint(p1, dx, dy, p, angle); - - VPointF p2 = VPointF(spline.GetP2()); BiasRotatePoint(&p2, dx, dy, p, angle); - - VPointF p3 = VPointF(spline.GetP3()); BiasRotatePoint(&p3, dx, dy, p, angle); - - VPointF *p4 = new VPointF(spline.GetP4()); BiasRotatePoint(p4, dx, dy, p, angle); - - VSpline spl = VSpline(*p1, p2, p3, *p4); - if (i==1) - { - const qreal angle1 = spl.GetStartAngle()+180; - const QString angle1F = QString().number(angle1); - - path->append(VSplinePoint(*p1, angle1, angle1F, spl.GetStartAngle(), spl.GetStartAngleFormula(), - 0, "0", spline.GetC1Length(), spline.GetC1LengthFormula())); - } - - const qreal angle2 = spl.GetEndAngle()+180; - const QString angle2F = QString().number(angle2); - - qreal pL2 = 0; - QString pL2F("0"); - if (i+1 <= splinePath->CountSubSpl()) - { - const VSpline nextSpline = splinePath->GetSpline(i+1); - pL2 = nextSpline.GetC1Length(); - pL2F = nextSpline.GetC1LengthFormula(); - } - - path->append(VSplinePoint(*p4, spl.GetEndAngle(), spl.GetEndAngleFormula(), angle2, angle2F, - spline.GetC2Length(), spline.GetC2LengthFormula(), pL2, pL2F)); - - delete p1; - delete p4; } - data->UpdateGObject(TakeNextId(children), path); + + VSpline spl = VSpline(*p1, p2, p3, *p4); + if (i==1) + { + const qreal angle1 = spl.GetStartAngle()+180; + const QString angle1F = QString().number(angle1); + + path->append(VSplinePoint(*p1, angle1, angle1F, spl.GetStartAngle(), spl.GetStartAngleFormula(), + 0, "0", spline.GetC1Length(), spline.GetC1LengthFormula())); + } + + const qreal angle2 = spl.GetEndAngle()+180; + const QString angle2F = QString().number(angle2); + + qreal pL2 = 0; + QString pL2F("0"); + if (i+1 <= splinePath->CountSubSpl()) + { + const VSpline nextSpline = splinePath->GetSpline(i+1); + pL2 = nextSpline.GetC1Length(); + pL2F = nextSpline.GetC1LengthFormula(); + } + + path->append(VSplinePoint(*p4, spl.GetEndAngle(), spl.GetEndAngleFormula(), angle2, angle2F, + spline.GetC2Length(), spline.GetC2LengthFormula(), pL2, pL2F)); + + delete p1; + delete p4; } + data->UpdateGObject(TakeNextId(children), path); } break; default: @@ -671,11 +646,19 @@ VToolUnionDetails* VToolUnionDetails::Create(const quint32 _id, const VDetail &d qint32 i = 0; do { - //UpdatePoints(data, d1.RemoveEdge(indexD1), i, children); - ++i; - if (i > d1.indexOfNode(det1p1.getId())) + // This check need for backward compatibility + // Remove it if min version is 0.3.2 + // Instead: + // UpdatePoints(data, d1.RemoveEdge(indexD1), i, children); + Q_STATIC_ASSERT_X(VPatternConverter::PatternMinVer < CONVERTER_VERSION_CHECK(0, 3, 2), + "Time to refactor the code."); + if (children.size() != countNodeD2) + { + UpdatePoints(data, d1.RemoveEdge(indexD1), i, children); + } + ++i; + if (i > d1.indexOfNode(det1p1.getId()) && pointsD2 < countNodeD2-1) { - const int childrenCount = children.size(); VDetail d2REdge = d2.RemoveEdge(indexD2); qint32 j = 0; FindIndexJ(pointsD2, d2, indexD2, j); @@ -688,8 +671,15 @@ VToolUnionDetails* VToolUnionDetails::Create(const quint32 _id, const VDetail &d UpdatePoints(data, d2REdge, j, children, dx, dy, det1p1.getId(), angle); ++pointsD2; ++j; - } while (pointsD2 < childrenCount); - break; + } while (pointsD2 < countNodeD2-1); + // This check need for backward compatibility + // Remove it if min version is 0.3.2 + Q_STATIC_ASSERT_X(VPatternConverter::PatternMinVer < CONVERTER_VERSION_CHECK(0, 3, 2), + "Time to refactor the code."); + if (children.size() == countNodeD2) + { + break; + } } } while (i &children, const QString &drawName, const qreal &dx = 0, - const qreal &dy = 0, const quint32 &pRotate = 0, const qreal &angle = 0); + const qreal &dy = 0, const quint32 &pRotate = NULL_ID, const qreal &angle = 0); static void UpdatePoints(VContainer *data, const VDetail &det, const int &i, QVector &children, const qreal &dx = 0, const qreal &dy = 0, - const quint32 &pRotate = 0, const qreal &angle = 0); + const quint32 &pRotate = NULL_ID, const qreal &angle = 0); static void BiasRotatePoint(VPointF *point, const qreal &dx, const qreal &dy, const QPointF &pRotate, const qreal &angle); virtual QString getTagName() const Q_DECL_OVERRIDE; diff --git a/src/libs/vtools/undocommands/addtocalc.cpp b/src/libs/vtools/undocommands/addtocalc.cpp index 04d3aa966..4e5ab15a5 100644 --- a/src/libs/vtools/undocommands/addtocalc.cpp +++ b/src/libs/vtools/undocommands/addtocalc.cpp @@ -49,7 +49,6 @@ void AddToCalc::undo() qCDebug(vUndo, "Undo."); doc->ChangeActivPP(nameActivDraw);//Without this user will not see this change - doc->setCursor(cursor); QDomElement calcElement; if (doc->GetActivNodeElement(VAbstractPattern::TagCalculation, calcElement)) @@ -74,10 +73,6 @@ void AddToCalc::undo() qCDebug(vUndo, "Can't find tag Calculation."); return; } - if (cursor > 0) - { - doc->setCursor(0); - } emit NeedFullParsing(); VMainGraphicsView::NewSceneRect(qApp->getCurrentScene(), qApp->getSceneView()); doc->SetCurrentPP(nameActivDraw);//Return current pattern piece after undo @@ -104,7 +99,6 @@ void AddToCalc::redo() if (refElement.isElement()) { calcElement.insertAfter(xml, refElement); - doc->setCursor(0); } else { diff --git a/src/libs/vtools/undocommands/movedetail.cpp b/src/libs/vtools/undocommands/movedetail.cpp index a7390230a..603db86a7 100644 --- a/src/libs/vtools/undocommands/movedetail.cpp +++ b/src/libs/vtools/undocommands/movedetail.cpp @@ -35,8 +35,8 @@ //--------------------------------------------------------------------------------------------------------------------- MoveDetail::MoveDetail(VAbstractPattern *doc, const double &x, const double &y, const quint32 &id, - QUndoCommand *parent) - : VUndoCommand(QDomElement(), doc, parent), oldX(0.0), oldY(0.0), newX(x), newY(y), scene(qApp->getCurrentScene()) + QGraphicsScene *scene, QUndoCommand *parent) + : VUndoCommand(QDomElement(), doc, parent), oldX(0.0), oldY(0.0), newX(x), newY(y), scene(scene) { setText(QObject::tr("move detail")); nodeId = id; diff --git a/src/libs/vtools/undocommands/movedetail.h b/src/libs/vtools/undocommands/movedetail.h index d5d9ebdd1..a8e306c4d 100644 --- a/src/libs/vtools/undocommands/movedetail.h +++ b/src/libs/vtools/undocommands/movedetail.h @@ -37,7 +37,7 @@ class MoveDetail : public VUndoCommand { Q_OBJECT public: - MoveDetail(VAbstractPattern *doc, const double &x, const double &y, const quint32 &id, + MoveDetail(VAbstractPattern *doc, const double &x, const double &y, const quint32 &id, QGraphicsScene *scene, QUndoCommand *parent = 0); virtual ~MoveDetail() Q_DECL_OVERRIDE; virtual void undo() Q_DECL_OVERRIDE; diff --git a/src/libs/vtools/visualization/line/vistoolcurveintersectaxis.cpp b/src/libs/vtools/visualization/line/vistoolcurveintersectaxis.cpp index 1f10d0ad6..356886fb4 100644 --- a/src/libs/vtools/visualization/line/vistoolcurveintersectaxis.cpp +++ b/src/libs/vtools/visualization/line/vistoolcurveintersectaxis.cpp @@ -78,8 +78,8 @@ void VisToolCurveIntersectAxis::RefreshGeometry() DrawPoint(point, p, mainColor); - Visualization::toolTip = QString(tr("Intersection curve and axis: angle = %1°; Shift - " - "sticking angle, Enter - finish creation")) + Visualization::toolTip = tr("Intersection curve and axis: angle = %1°; Shift - " + "sticking angle, Enter - finish creation") .arg(this->line().angle()); } } diff --git a/src/libs/vtools/visualization/line/vistoolendline.cpp b/src/libs/vtools/visualization/line/vistoolendline.cpp index 0365ab7cc..ca9d7e373 100644 --- a/src/libs/vtools/visualization/line/vistoolendline.cpp +++ b/src/libs/vtools/visualization/line/vistoolendline.cpp @@ -70,8 +70,8 @@ void VisToolEndLine::RefreshGeometry() } DrawLine(this, line, mainColor, lineStyle); static const QString prefix = VDomDocument::UnitsToStr(qApp->patternUnit(), true); - Visualization::toolTip = QString(tr("Point at distance and angle: angle = %1°, length = %2%3; " - "Shift - sticking angle, Enter - finish creation")) + Visualization::toolTip = tr("Point at distance and angle: angle = %1°, length = %2%3; " + "Shift - sticking angle, Enter - finish creation") .arg(this->line().angle()) .arg(qApp->TrVars()->FormulaToUser(QString::number(qApp->fromPixel(this->line().length())), qApp->Settings()->GetOsSeparator())) diff --git a/src/libs/vtools/visualization/line/vistoollineintersectaxis.cpp b/src/libs/vtools/visualization/line/vistoollineintersectaxis.cpp index 8481818c4..b2b7becfa 100644 --- a/src/libs/vtools/visualization/line/vistoollineintersectaxis.cpp +++ b/src/libs/vtools/visualization/line/vistoollineintersectaxis.cpp @@ -93,8 +93,8 @@ void VisToolLineIntersectAxis::RefreshGeometry() DrawPoint(point, p, mainColor); ShowIntersection(axis_line, base_line); - Visualization::toolTip = QString(tr("Intersection line and axis: angle = %1°; Shift - " - "sticking angle, Enter - finish creation")) + Visualization::toolTip = tr("Intersection line and axis: angle = %1°; Shift - " + "sticking angle, Enter - finish creation") .arg(this->line().angle()); } } diff --git a/src/libs/vtools/vtools.pro b/src/libs/vtools/vtools.pro index fe30de8e8..0041fa51d 100644 --- a/src/libs/vtools/vtools.pro +++ b/src/libs/vtools/vtools.pro @@ -53,42 +53,7 @@ INCLUDEPATH += $$PWD/../vpatterndb CONFIG(debug, debug|release){ # Debug mode unix { - #Turn on compilers warnings. - *-g++{ - QMAKE_CXXFLAGS += \ - # Key -isystem disable checking errors in system headers. - -isystem "$${OUT_PWD}/$${UI_DIR}" \ - -isystem "$${OUT_PWD}/$${MOC_DIR}" \ -# -isystem "$${OUT_PWD}/$${RCC_DIR}" \ - $$GCC_DEBUG_CXXFLAGS # See common.pri for more details. - - noAddressSanitizer{ # For enable run qmake with CONFIG+=noAddressSanitizer - # do nothing - } else { - #gcc’s 4.8.0 Address Sanitizer - #http://blog.qt.digia.com/blog/2013/04/17/using-gccs-4-8-0-address-sanitizer-with-qt/ - QMAKE_CXXFLAGS += -fsanitize=address -fno-omit-frame-pointer - QMAKE_CFLAGS += -fsanitize=address -fno-omit-frame-pointer - QMAKE_LFLAGS += -fsanitize=address - } - } - clang*{ - QMAKE_CXXFLAGS += \ - # Key -isystem disable checking errors in system headers. - -isystem "$${OUT_PWD}/$${MOC_DIR}" \ - $$CLANG_DEBUG_CXXFLAGS # See common.pri for more details. - - # -isystem key works only for headers. In some cases it's not enough. But we can't delete these warnings and - # want them in global list. Compromise decision delete them from local list. - QMAKE_CXXFLAGS -= \ - -Wundefined-reinterpret-cast - } - *-icc-*{ - QMAKE_CXXFLAGS += \ - -isystem "$${OUT_PWD}/$${UI_DIR}" \ - -isystem "$${OUT_PWD}/$${MOC_DIR}" \ - $$ICC_DEBUG_CXXFLAGS - } + include(warnings.pri) } else { *-g++{ QMAKE_CXXFLAGS += $$GCC_DEBUG_CXXFLAGS # See common.pri for more details. @@ -103,6 +68,10 @@ CONFIG(debug, debug|release){ QMAKE_CXXFLAGS += -fno-omit-frame-pointer # Need for exchndl.dll } + checkWarnings{ + unix:include(warnings.pri) + } + noDebugSymbols{ # For enable run qmake with CONFIG+=noDebugSymbols # do nothing } else { diff --git a/src/libs/vtools/warnings.pri b/src/libs/vtools/warnings.pri new file mode 100644 index 000000000..ac67d588c --- /dev/null +++ b/src/libs/vtools/warnings.pri @@ -0,0 +1,50 @@ +#Turn on compilers warnings. +*-g++{ + QMAKE_CXXFLAGS += \ + # Key -isystem disable checking errors in system headers. + -isystem "$${OUT_PWD}/$${UI_DIR}" \ + -isystem "$${OUT_PWD}/$${MOC_DIR}" \ +# -isystem "$${OUT_PWD}/$${RCC_DIR}" \ + $$GCC_DEBUG_CXXFLAGS # See common.pri for more details. + + checkWarnings{ # For enable run qmake with CONFIG+=checkWarnings + QMAKE_CXXFLAGS += -Werror + } + + noAddressSanitizer{ # For enable run qmake with CONFIG+=noAddressSanitizer + # do nothing + } else { + #gcc’s 4.8.0 Address Sanitizer + #http://blog.qt.digia.com/blog/2013/04/17/using-gccs-4-8-0-address-sanitizer-with-qt/ + QMAKE_CXXFLAGS += -fsanitize=address -fno-omit-frame-pointer + QMAKE_CFLAGS += -fsanitize=address -fno-omit-frame-pointer + QMAKE_LFLAGS += -fsanitize=address + } +} + +clang*{ + QMAKE_CXXFLAGS += \ + # Key -isystem disable checking errors in system headers. + -isystem "$${OUT_PWD}/$${MOC_DIR}" \ + $$CLANG_DEBUG_CXXFLAGS # See common.pri for more details. + + checkWarnings{ # For enable run qmake with CONFIG+=checkWarnings + QMAKE_CXXFLAGS += -Werror + } + + # -isystem key works only for headers. In some cases it's not enough. But we can't delete these warnings and + # want them in global list. Compromise decision delete them from local list. + QMAKE_CXXFLAGS -= \ + -Wundefined-reinterpret-cast +} + +*-icc-*{ + QMAKE_CXXFLAGS += \ + -isystem "$${OUT_PWD}/$${UI_DIR}" \ + -isystem "$${OUT_PWD}/$${MOC_DIR}" \ + $$ICC_DEBUG_CXXFLAGS + + checkWarnings{ # For enable run qmake with CONFIG+=checkWarnings + QMAKE_CXXFLAGS += -Werror + } +} diff --git a/src/libs/vwidgets/vwidgets.pro b/src/libs/vwidgets/vwidgets.pro index 8eb426b73..8dd99831c 100644 --- a/src/libs/vwidgets/vwidgets.pro +++ b/src/libs/vwidgets/vwidgets.pro @@ -45,39 +45,7 @@ $$enable_ccache() CONFIG(debug, debug|release){ # Debug mode unix { - #Turn on compilers warnings. - *-g++{ - QMAKE_CXXFLAGS += \ - # Key -isystem disable checking errors in system headers. - -isystem "$${OUT_PWD}/$${MOC_DIR}" \ - $$GCC_DEBUG_CXXFLAGS # See common.pri for more details. - - noAddressSanitizer{ # For enable run qmake with CONFIG+=noAddressSanitizer - # do nothing - } else { - #gcc’s 4.8.0 Address Sanitizer - #http://blog.qt.digia.com/blog/2013/04/17/using-gccs-4-8-0-address-sanitizer-with-qt/ - QMAKE_CXXFLAGS += -fsanitize=address -fno-omit-frame-pointer - QMAKE_CFLAGS += -fsanitize=address -fno-omit-frame-pointer - QMAKE_LFLAGS += -fsanitize=address - } - } - clang*{ - QMAKE_CXXFLAGS += \ - # Key -isystem disable checking errors in system headers. - -isystem "$${OUT_PWD}/$${MOC_DIR}" \ - $$CLANG_DEBUG_CXXFLAGS # See common.pri for more details. - - # -isystem key works only for headers. In some cases it's not enough. But we can't delete these warnings and - # want them in global list. Compromise decision delete them from local list. - QMAKE_CXXFLAGS -= \ - -Wundefined-reinterpret-cast - } - *-icc-*{ - QMAKE_CXXFLAGS += \ - -isystem "$${OUT_PWD}/$${MOC_DIR}" \ - $$ICC_DEBUG_CXXFLAGS - } + include(warnings.pri) } else { *-g++{ QMAKE_CXXFLAGS += $$GCC_DEBUG_CXXFLAGS # See common.pri for more details. @@ -92,6 +60,10 @@ CONFIG(debug, debug|release){ QMAKE_CXXFLAGS += -fno-omit-frame-pointer # Need for exchndl.dll } + checkWarnings{ + unix:include(warnings.pri) + } + noDebugSymbols{ # For enable run qmake with CONFIG+=noDebugSymbols # do nothing } else { diff --git a/src/libs/vwidgets/warnings.pri b/src/libs/vwidgets/warnings.pri new file mode 100644 index 000000000..9c68dfe1c --- /dev/null +++ b/src/libs/vwidgets/warnings.pri @@ -0,0 +1,47 @@ +#Turn on compilers warnings. +*-g++{ + QMAKE_CXXFLAGS += \ + # Key -isystem disable checking errors in system headers. + -isystem "$${OUT_PWD}/$${MOC_DIR}" \ + $$GCC_DEBUG_CXXFLAGS # See common.pri for more details. + + checkWarnings{ # For enable run qmake with CONFIG+=checkWarnings + QMAKE_CXXFLAGS += -Werror + } + + noAddressSanitizer{ # For enable run qmake with CONFIG+=noAddressSanitizer + # do nothing + } else { + #gcc’s 4.8.0 Address Sanitizer + #http://blog.qt.digia.com/blog/2013/04/17/using-gccs-4-8-0-address-sanitizer-with-qt/ + QMAKE_CXXFLAGS += -fsanitize=address -fno-omit-frame-pointer + QMAKE_CFLAGS += -fsanitize=address -fno-omit-frame-pointer + QMAKE_LFLAGS += -fsanitize=address + } +} + +clang*{ + QMAKE_CXXFLAGS += \ + # Key -isystem disable checking errors in system headers. + -isystem "$${OUT_PWD}/$${MOC_DIR}" \ + $$CLANG_DEBUG_CXXFLAGS # See common.pri for more details. + + checkWarnings{ # For enable run qmake with CONFIG+=checkWarnings + QMAKE_CXXFLAGS += -Werror + } + + # -isystem key works only for headers. In some cases it's not enough. But we can't delete these warnings and + # want them in global list. Compromise decision delete them from local list. + QMAKE_CXXFLAGS -= \ + -Wundefined-reinterpret-cast +} + +*-icc-*{ + QMAKE_CXXFLAGS += \ + -isystem "$${OUT_PWD}/$${MOC_DIR}" \ + $$ICC_DEBUG_CXXFLAGS + + checkWarnings{ # For enable run qmake with CONFIG+=checkWarnings + QMAKE_CXXFLAGS += -Werror + } +} diff --git a/src/test/ParserTest/ParserTest.pro b/src/test/ParserTest/ParserTest.pro index bd360e7f6..0a7a88068 100644 --- a/src/test/ParserTest/ParserTest.pro +++ b/src/test/ParserTest/ParserTest.pro @@ -51,34 +51,7 @@ $$enable_ccache() CONFIG(debug, debug|release){ # Debug mode unix { - #Turn on compilers warnings. - *-g++{ - QMAKE_CXXFLAGS += \ - $$GCC_DEBUG_CXXFLAGS # See common.pri for more details. - - noAddressSanitizer{ # For enable run qmake with CONFIG+=noAddressSanitizer - # do nothing - } else { - #gcc’s 4.8.0 Address Sanitizer - #http://blog.qt.digia.com/blog/2013/04/17/using-gccs-4-8-0-address-sanitizer-with-qt/ - QMAKE_CXXFLAGS += -fsanitize=address -fno-omit-frame-pointer - QMAKE_CFLAGS += -fsanitize=address -fno-omit-frame-pointer - QMAKE_LFLAGS += -fsanitize=address - } - } - clang*{ - QMAKE_CXXFLAGS += \ - $$CLANG_DEBUG_CXXFLAGS # See common.pri for more details. - - # -isystem key works only for headers. In some cases it's not enough. But we can't delete this warnings and - # want them in global list. Compromise decision delete them from local list. - QMAKE_CXXFLAGS -= \ - -Wmissing-prototypes - } - *-icc-*{ - QMAKE_CXXFLAGS += \ - $$ICC_DEBUG_CXXFLAGS - } + include(warnings.pri) } else { *-g++{ QMAKE_CXXFLAGS += $$GCC_DEBUG_CXXFLAGS # See common.pri for more details. @@ -90,6 +63,10 @@ CONFIG(debug, debug|release){ !win32-msvc*:CONFIG += silent DEFINES += QT_NO_DEBUG_OUTPUT + checkWarnings{ + unix:include(warnings.pri) + } + noDebugSymbols{ # For enable run qmake with CONFIG+=noDebugSymbols # do nothing } else { diff --git a/src/test/ParserTest/warnings.pri b/src/test/ParserTest/warnings.pri new file mode 100644 index 000000000..9f37c06ac --- /dev/null +++ b/src/test/ParserTest/warnings.pri @@ -0,0 +1,42 @@ +#Turn on compilers warnings. +*-g++{ + QMAKE_CXXFLAGS += \ + $$GCC_DEBUG_CXXFLAGS # See common.pri for more details. + + checkWarnings{ # For enable run qmake with CONFIG+=checkWarnings + QMAKE_CXXFLAGS += -Werror + } + + noAddressSanitizer{ # For enable run qmake with CONFIG+=noAddressSanitizer + # do nothing + } else { + #gcc’s 4.8.0 Address Sanitizer + #http://blog.qt.digia.com/blog/2013/04/17/using-gccs-4-8-0-address-sanitizer-with-qt/ + QMAKE_CXXFLAGS += -fsanitize=address -fno-omit-frame-pointer + QMAKE_CFLAGS += -fsanitize=address -fno-omit-frame-pointer + QMAKE_LFLAGS += -fsanitize=address + } +} + +clang*{ + QMAKE_CXXFLAGS += \ + $$CLANG_DEBUG_CXXFLAGS # See common.pri for more details. + + checkWarnings{ # For enable run qmake with CONFIG+=checkWarnings + QMAKE_CXXFLAGS += -Werror + } + + # -isystem key works only for headers. In some cases it's not enough. But we can't delete this warnings and + # want them in global list. Compromise decision delete them from local list. + QMAKE_CXXFLAGS -= \ + -Wmissing-prototypes +} + +*-icc-*{ + QMAKE_CXXFLAGS += \ + $$ICC_DEBUG_CXXFLAGS + + checkWarnings{ # For enable run qmake with CONFIG+=checkWarnings + QMAKE_CXXFLAGS += -Werror + } +} diff --git a/src/test/ValentinaTest/ValentinaTest.pro b/src/test/ValentinaTest/ValentinaTest.pro index 360fb8853..8c7272185 100644 --- a/src/test/ValentinaTest/ValentinaTest.pro +++ b/src/test/ValentinaTest/ValentinaTest.pro @@ -92,41 +92,7 @@ DEFINES += TS_DIR=\\\"$${PWD}/../../../share/translations\\\" CONFIG(debug, debug|release){ # Debug mode unix { - #Turn on compilers warnings. - *-g++{ - QMAKE_CXXFLAGS += \ - # Key -isystem disable checking errors in system headers. - -isystem "$${OUT_PWD}/$${UI_DIR}" \ - -isystem "$${OUT_PWD}/$${MOC_DIR}" \ - -isystem "$${OUT_PWD}/$${RCC_DIR}" \ - $$GCC_DEBUG_CXXFLAGS # See common.pri for more details. - - noAddressSanitizer{ # For enable run qmake with CONFIG+=noAddressSanitizer - # do nothing - } else { - #gcc’s 4.8.0 Address Sanitizer - #http://blog.qt.digia.com/blog/2013/04/17/using-gccs-4-8-0-address-sanitizer-with-qt/ - QMAKE_CXXFLAGS += -fsanitize=address -fno-omit-frame-pointer - QMAKE_CFLAGS += -fsanitize=address -fno-omit-frame-pointer - QMAKE_LFLAGS += -fsanitize=address - } - } - clang*{ - QMAKE_CXXFLAGS += \ - # Key -isystem disable checking errors in system headers. - -isystem "$${OUT_PWD}/$${UI_DIR}" \ - -isystem "$${OUT_PWD}/$${MOC_DIR}" \ - -isystem "$${OUT_PWD}/$${RCC_DIR}" \ - $$CLANG_DEBUG_CXXFLAGS \ # See common.pri for more details. - -Wno-gnu-zero-variadic-macro-arguments\ # See macros QSKIP - } - *-icc-*{ - QMAKE_CXXFLAGS += \ - -isystem "$${OUT_PWD}/$${UI_DIR}" \ - -isystem "$${OUT_PWD}/$${MOC_DIR}" \ - -isystem "$${OUT_PWD}/$${RCC_DIR}" \ - $$ICC_DEBUG_CXXFLAGS - } + include(warnings.pri) } else { *-g++{ QMAKE_CXXFLAGS += $$GCC_DEBUG_CXXFLAGS # See common.pri for more details. @@ -140,6 +106,10 @@ CONFIG(debug, debug|release){ QMAKE_CXXFLAGS += -fno-omit-frame-pointer # Need for exchndl.dll } + checkWarnings{ + unix:include(warnings.pri) + } + noDebugSymbols{ # For enable run qmake with CONFIG+=noDebugSymbols # do nothing } else { diff --git a/src/test/ValentinaTest/abstracttest.cpp b/src/test/ValentinaTest/abstracttest.cpp index a54d1b1b2..920b396a9 100644 --- a/src/test/ValentinaTest/abstracttest.cpp +++ b/src/test/ValentinaTest/abstracttest.cpp @@ -55,7 +55,7 @@ QString AbstractTest::ValentinaPath() const { const QString path = QStringLiteral("/../../../app/valentina/bin/valentina"); #ifdef Q_OS_WIN - return QApplication::applicationDirPath() + path + QLatin1Literal(".exe"); + return QApplication::applicationDirPath() + path + QLatin1String(".exe"); #else return QApplication::applicationDirPath() + path; #endif @@ -66,7 +66,7 @@ QString AbstractTest::TapePath() const { const QString path = QStringLiteral("/../../../app/tape/bin/tape"); #ifdef Q_OS_WIN - return QApplication::applicationDirPath() + path + QLatin1Literal(".exe"); + return QApplication::applicationDirPath() + path + QLatin1String(".exe"); #else return QApplication::applicationDirPath() + path; #endif @@ -138,8 +138,11 @@ bool AbstractTest::CopyRecursively(const QString &srcFilePath, const QString &tg { QDir targetDir(tgtFilePath); targetDir.cdUp(); - if (not targetDir.mkdir(QFileInfo(tgtFilePath).fileName())) + const QString dirName = QFileInfo(tgtFilePath).fileName(); + if (not targetDir.mkdir(dirName)) { + const QString msg = QString("Can't create dir '%1'.").arg(dirName); + QWARN(qUtf8Printable(msg)); return false; } QDir sourceDir(srcFilePath); @@ -154,10 +157,29 @@ bool AbstractTest::CopyRecursively(const QString &srcFilePath, const QString &tg return false; } } - } else + } + else { + if (QFileInfo(tgtFilePath).exists()) + { + const QString msg = QString("File '%1' exists.").arg(srcFilePath); + QWARN(qUtf8Printable(msg)); + + if (QFile::remove(tgtFilePath)) + { + QWARN("File successfully removed."); + } + else + { + QWARN("Can't remove file."); + return false; + } + } + if (not QFile::copy(srcFilePath, tgtFilePath)) { + const QString msg = QString("Can't copy file '%1' to '%2'.").arg(srcFilePath).arg(tgtFilePath); + QWARN(qUtf8Printable(msg)); return false; } } diff --git a/src/test/ValentinaTest/tst_measurementregexp.cpp b/src/test/ValentinaTest/tst_measurementregexp.cpp index f71d54a91..0cafa210c 100644 --- a/src/test/ValentinaTest/tst_measurementregexp.cpp +++ b/src/test/ValentinaTest/tst_measurementregexp.cpp @@ -431,7 +431,7 @@ int TST_MeasurementRegExp::LoadMeasurements(const QString &checkedSystem, const const QString path = TranslationsPath(); const QString file = QString("measurements_%1_%2.qm").arg(checkedSystem).arg(checkedLocale); - if (QFileInfo(path+QLatin1Literal("/")+file).size() <= 34) + if (QFileInfo(path+QLatin1String("/")+file).size() <= 34) { const QString message = QString("Translation for system = %1 and locale = %2 is empty. \nFull path: %3/%4") .arg(checkedSystem) @@ -482,7 +482,7 @@ int TST_MeasurementRegExp::LoadVariables(const QString &checkedLocale) const QString path = TranslationsPath(); const QString file = QString("valentina_%1.qm").arg(checkedLocale); - if (QFileInfo(path+QLatin1Literal("/")+file).size() <= 34) + if (QFileInfo(path+QLatin1String("/")+file).size() <= 34) { const QString message = QString("Translation variables for locale = %1 is empty. \nFull path: %2/%3") .arg(checkedLocale) @@ -660,7 +660,7 @@ void TST_MeasurementRegExp::CheckUnderlineExists() const while (i != data.constEnd()) { const QString translated = trMs->InternalVarToUser(i.key()); - if ((translated.right(1) == QLatin1Literal("_")) != i.value()) + if ((translated.right(1) == QLatin1String("_")) != i.value()) { const QString message = QString("String '%1' doesn't contain underline. Original string is '%2'") .arg(translated).arg(i.key()); @@ -676,11 +676,11 @@ void TST_MeasurementRegExp::CheckInternalVaribleRegExp() const const QString regex = QStringLiteral("(.){1,}_(.){1,}$"); foreach(const QString &var, builInVariables) { - const QString sourceRegex = QLatin1Literal("^") + var + regex; + const QString sourceRegex = QLatin1String("^") + var + regex; const QRegularExpression sourceRe(sourceRegex); const QString translated = trMs->InternalVarToUser(var); - const QString translationRegex = QLatin1Literal("^") + translated + regex; + const QString translationRegex = QLatin1String("^") + translated + regex; const QRegularExpression translationRe(translationRegex); const QStringList originalNames = AllGroupNames() + builInFunctions + builInVariables; diff --git a/src/test/ValentinaTest/tst_qmuparsererrormsg.cpp b/src/test/ValentinaTest/tst_qmuparsererrormsg.cpp index b2dbcaffe..89fe8ce07 100644 --- a/src/test/ValentinaTest/tst_qmuparsererrormsg.cpp +++ b/src/test/ValentinaTest/tst_qmuparsererrormsg.cpp @@ -212,6 +212,6 @@ void TST_QmuParserErrorMsg::CheckStrings(int code, bool tok, bool pos) const QString translated = (*msg)[code]; const QString message = QString("String: '%1'.").arg(translated); - QVERIFY2((translated.indexOf(QLatin1Literal("$TOK$")) != -1) == tok, qUtf8Printable(message)); - QVERIFY2((translated.indexOf(QLatin1Literal("$POS$")) != -1) == pos, qUtf8Printable(message)); + QVERIFY2((translated.indexOf(QLatin1String("$TOK$")) != -1) == tok, qUtf8Printable(message)); + QVERIFY2((translated.indexOf(QLatin1String("$POS$")) != -1) == pos, qUtf8Printable(message)); } diff --git a/src/test/ValentinaTest/tst_tapecommandline.cpp b/src/test/ValentinaTest/tst_tapecommandline.cpp index f4842fb39..1e9f7728c 100644 --- a/src/test/ValentinaTest/tst_tapecommandline.cpp +++ b/src/test/ValentinaTest/tst_tapecommandline.cpp @@ -40,7 +40,7 @@ TST_TapeCommandLine::TST_TapeCommandLine(QObject *parent) } //--------------------------------------------------------------------------------------------------------------------- -void TST_TapeCommandLine::init() +void TST_TapeCommandLine::initTestCase() { QDir tmpDir(tmpTestFolder); if (not tmpDir.removeRecursively()) @@ -141,7 +141,7 @@ void TST_TapeCommandLine::OpenMeasurements() } //--------------------------------------------------------------------------------------------------------------------- -void TST_TapeCommandLine::cleanup() +void TST_TapeCommandLine::cleanupTestCase() { QDir tmpDir(tmpTestFolder); if (not tmpDir.removeRecursively()) diff --git a/src/test/ValentinaTest/tst_tapecommandline.h b/src/test/ValentinaTest/tst_tapecommandline.h index 0206497e4..2cc434706 100644 --- a/src/test/ValentinaTest/tst_tapecommandline.h +++ b/src/test/ValentinaTest/tst_tapecommandline.h @@ -38,10 +38,10 @@ public: explicit TST_TapeCommandLine(QObject *parent = nullptr); private slots: - void init(); + void initTestCase(); void OpenMeasurements_data() const; void OpenMeasurements(); - void cleanup(); + void cleanupTestCase(); private: Q_DISABLE_COPY(TST_TapeCommandLine) diff --git a/src/test/ValentinaTest/tst_tstranslation.cpp b/src/test/ValentinaTest/tst_tstranslation.cpp index 8015a8b2a..1e789e98f 100644 --- a/src/test/ValentinaTest/tst_tstranslation.cpp +++ b/src/test/ValentinaTest/tst_tstranslation.cpp @@ -116,7 +116,7 @@ void TST_TSTranslation::CheckEmptyToolButton() continue; } - if (source == QLatin1Literal("...")) + if (source == QLatin1String("...")) { const QDomElement translationTag = message.firstChildElement(TagTranslation); if (translationTag.hasAttribute(AttrType)) @@ -210,7 +210,7 @@ void TST_TSTranslation::CheckPlaceMarkerExist() for (int i = 1; i <= 99; ++i) { - const QString marker = QLatin1Literal("%") + QString().setNum(i); + const QString marker = QLatin1String("%") + QString().setNum(i); const bool sourceMark = source.indexOf(marker) != -1; if (sourceMark) { @@ -218,8 +218,8 @@ void TST_TSTranslation::CheckPlaceMarkerExist() if (sourceMarkCount != i) { const QString message = QString("In source string '%1' was missed place marker ") - .arg(source) + QLatin1Literal("'%") + QString().setNum(sourceMarkCount) + - QLatin1Literal("'."); + .arg(source) + QLatin1String("'%") + QString().setNum(sourceMarkCount) + + QLatin1String("'."); QFAIL(qUtf8Printable(message)); } } @@ -231,8 +231,8 @@ void TST_TSTranslation::CheckPlaceMarkerExist() if (translationMarkCount != i) { const QString message = QString("In translation string '%1' was missed place marker ") - .arg(translation) + QLatin1Literal("'%") + QString().setNum(translationMarkCount) + - QLatin1Literal("'."); + .arg(translation) + QLatin1String("'%") + QString().setNum(translationMarkCount) + + QLatin1String("'."); QFAIL(qUtf8Printable(message)); } } @@ -241,8 +241,8 @@ void TST_TSTranslation::CheckPlaceMarkerExist() { const QString message = QString("Compare to source string in the translation string '%1' was missed place marker ") - .arg(translation) + QLatin1Literal("'%") + QString().setNum(sourceMarkCount) + - QLatin1Literal("'."); + .arg(translation) + QLatin1String("'%") + QString().setNum(sourceMarkCount) + + QLatin1String("'."); QFAIL(qUtf8Printable(message)); } } diff --git a/src/test/ValentinaTest/tst_valentinacommandline.cpp b/src/test/ValentinaTest/tst_valentinacommandline.cpp index a9c7283f7..2319118a7 100644 --- a/src/test/ValentinaTest/tst_valentinacommandline.cpp +++ b/src/test/ValentinaTest/tst_valentinacommandline.cpp @@ -41,7 +41,7 @@ TST_ValentinaCommandLine::TST_ValentinaCommandLine(QObject *parent) //--------------------------------------------------------------------------------------------------------------------- // cppcheck-suppress unusedFunction -void TST_ValentinaCommandLine::init() +void TST_ValentinaCommandLine::initTestCase() { {// Test files QDir tmpDir(tmpTestFolder); @@ -51,7 +51,7 @@ void TST_ValentinaCommandLine::init() } if (not CopyRecursively(QApplication::applicationDirPath() + QDir::separator() + - QLatin1Literal("tst_valentina"), + QLatin1String("tst_valentina"), QApplication::applicationDirPath() + QDir::separator() + tmpTestFolder)) { QFAIL("Fail to prepare test files for testing."); @@ -66,7 +66,7 @@ void TST_ValentinaCommandLine::init() } if (not CopyRecursively(QApplication::applicationDirPath() + QDir::separator() + - QLatin1Literal("tst_valentina_collection"), + QLatin1String("tst_valentina_collection"), QApplication::applicationDirPath() + QDir::separator() + tmpTestCollectionFolder)) { QFAIL("Fail to prepare collection files for testing."); @@ -199,25 +199,25 @@ void TST_ValentinaCommandLine::TestMode_data() const QTest::newRow("Issue #256. Correct individual measurements.")<< "issue_256.val" << QString("--test;;-m;;%1").arg(tmp + QDir::separator() + - QLatin1Literal("issue_256_correct.vit")) + QLatin1String("issue_256_correct.vit")) << true << V_EX_OK; QTest::newRow("Issue #256. Wrong individual measurements.")<< "issue_256.val" << QString("--test;;-m;;%1").arg(tmp + QDir::separator() + - QLatin1Literal("issue_256_wrong.vit")) + QLatin1String("issue_256_wrong.vit")) << false << V_EX_NOINPUT; QTest::newRow("Issue #256. Correct standard measurements.")<< "issue_256.val" << QString("--test;;-m;;%1").arg(tmp + QDir::separator() + - QLatin1Literal("issue_256_correct.vst")) + QLatin1String("issue_256_correct.vst")) << true << V_EX_OK; QTest::newRow("Issue #256. Wrong standard measurements.")<< "issue_256.val" << QString("--test;;-m;;%1").arg(tmp + QDir::separator() + - QLatin1Literal("issue_256_wrong.vst")) + QLatin1String("issue_256_wrong.vst")) << false << V_EX_NOINPUT; @@ -254,7 +254,7 @@ void TST_ValentinaCommandLine::TestOpenCollection_data() const QTest::addColumn("exitCode"); const QString tmp = QApplication::applicationDirPath() + QDir::separator() + tmpTestCollectionFolder; - const QString testGOST = QString("--test;;-m;;%1").arg(tmp + QDir::separator() + QLatin1Literal("GOST_man_ru.vst")); + const QString testGOST = QString("--test;;-m;;%1").arg(tmp + QDir::separator() + QLatin1String("GOST_man_ru.vst")); const QString keyTest = QStringLiteral("--test"); QTest::newRow("bra") << "bra.val" << keyTest << true << V_EX_OK; @@ -308,7 +308,7 @@ void TST_ValentinaCommandLine::TestOpenCollection() //--------------------------------------------------------------------------------------------------------------------- // cppcheck-suppress unusedFunction -void TST_ValentinaCommandLine::cleanup() +void TST_ValentinaCommandLine::cleanupTestCase() { { QDir tmpDir(tmpTestFolder); diff --git a/src/test/ValentinaTest/tst_valentinacommandline.h b/src/test/ValentinaTest/tst_valentinacommandline.h index 92c3db54a..53c0cb034 100644 --- a/src/test/ValentinaTest/tst_valentinacommandline.h +++ b/src/test/ValentinaTest/tst_valentinacommandline.h @@ -38,7 +38,7 @@ public: explicit TST_ValentinaCommandLine(QObject *parent = nullptr); private slots: - void init(); + void initTestCase(); void OpenPatterns_data() const; void OpenPatterns(); void ExportMode_data() const; @@ -47,7 +47,7 @@ private slots: void TestMode(); void TestOpenCollection_data() const; void TestOpenCollection(); - void cleanup(); + void cleanupTestCase(); private: Q_DISABLE_COPY(TST_ValentinaCommandLine) diff --git a/src/test/ValentinaTest/warnings.pri b/src/test/ValentinaTest/warnings.pri new file mode 100644 index 000000000..3d7b19eed --- /dev/null +++ b/src/test/ValentinaTest/warnings.pri @@ -0,0 +1,49 @@ +#Turn on compilers warnings. +*-g++{ + QMAKE_CXXFLAGS += \ + # Key -isystem disable checking errors in system headers. + -isystem "$${OUT_PWD}/$${UI_DIR}" \ + -isystem "$${OUT_PWD}/$${MOC_DIR}" \ + -isystem "$${OUT_PWD}/$${RCC_DIR}" \ + $$GCC_DEBUG_CXXFLAGS # See common.pri for more details. + + checkWarnings{ # For enable run qmake with CONFIG+=checkWarnings + QMAKE_CXXFLAGS += -Werror + } + + noAddressSanitizer{ # For enable run qmake with CONFIG+=noAddressSanitizer + # do nothing + } else { + #gcc’s 4.8.0 Address Sanitizer + #http://blog.qt.digia.com/blog/2013/04/17/using-gccs-4-8-0-address-sanitizer-with-qt/ + QMAKE_CXXFLAGS += -fsanitize=address -fno-omit-frame-pointer + QMAKE_CFLAGS += -fsanitize=address -fno-omit-frame-pointer + QMAKE_LFLAGS += -fsanitize=address + } +} + +clang*{ + QMAKE_CXXFLAGS += \ + # Key -isystem disable checking errors in system headers. + -isystem "$${OUT_PWD}/$${UI_DIR}" \ + -isystem "$${OUT_PWD}/$${MOC_DIR}" \ + -isystem "$${OUT_PWD}/$${RCC_DIR}" \ + $$CLANG_DEBUG_CXXFLAGS \ # See common.pri for more details. + -Wno-gnu-zero-variadic-macro-arguments\ # See macros QSKIP + + checkWarnings{ # For enable run qmake with CONFIG+=checkWarnings + QMAKE_CXXFLAGS += -Werror + } +} + +*-icc-*{ + QMAKE_CXXFLAGS += \ + -isystem "$${OUT_PWD}/$${UI_DIR}" \ + -isystem "$${OUT_PWD}/$${MOC_DIR}" \ + -isystem "$${OUT_PWD}/$${RCC_DIR}" \ + $$ICC_DEBUG_CXXFLAGS + + checkWarnings{ # For enable run qmake with CONFIG+=checkWarnings + QMAKE_CXXFLAGS += -Werror + } +}