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

This commit is contained in:
Roman Telezhynskyi 2020-11-20 13:40:39 +02:00
commit b82d6f1bb1
82 changed files with 811 additions and 215 deletions

View File

@ -28,7 +28,27 @@ jobs:
compiler: clang
env:
- DEPLOY=true
- LEGACY=false
osx_image: xcode11
cache:
directories:
- $HOME/Library/Caches/Homebrew
- /usr/local/Homebrew
- os: osx
compiler: clang
env:
- DEPLOY=true
- LEGACY=true
osx_image: xcode8
cache:
directories:
- $HOME/Library/Caches/Homebrew
- /usr/local/Homebrew
before_cache:
- if [ "${TRAVIS_OS_NAME}" = "osx" ]; then brew cleanup; fi
# Credit https://discourse.brew.sh/t/best-practice-for-homebrew-on-travis-brew-update-is-5min-to-build-time/5215/9
# Cache only .git files under "/usr/local/Homebrew" so "brew update" does not take 5min every build
- if [ "${TRAVIS_OS_NAME}" = "osx" ]; then find /usr/local/Homebrew \! -regex ".+\.git.+" -delete; fi
before_install:
- |
if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then
@ -50,9 +70,16 @@ before_install:
wget https://launchpad.net/ubuntu/+archive/primary/+files/ccache_3.3.4-1_amd64.deb;
sudo dpkg -i ccache_3.3.4-1_amd64.deb;
else
brew update > /dev/null;
brew install qt5;
chmod -R 755 /usr/local/opt/qt5/*
if [[ "$LEGACY" = false ]]; then
brew update > /dev/null;
brew install qt5;
chmod -R 755 /usr/local/opt/qt5/*
else
unset SSL_CERT_FILE;
HOMEBREW_NO_AUTO_UPDATE=1 brew install https://gist.githubusercontent.com/dismine/c3ac01de38e12edcf22d9e05791adf82/raw/f553c39bbc5f3a2b231a767924e846bdd2a56d8d/qt.rb;
brew link qt --force;
chmod -R 755 /usr/local/opt/qt/*
fi
fi
before_script:
- |
@ -102,7 +129,11 @@ before_deploy:
- |
if [[ "$DEPLOY" == "true" ]]; then
../scripts/macfixqtdylibrpath.py $TRAVIS_BUILD_DIR/build/src/app/valentina/bin/Valentina.app;
tar -C $TRAVIS_BUILD_DIR/build/src/app/valentina/bin --exclude "*.DS_Store" -cvzf valentina-osx-${TRAVIS_COMMIT}.tar.gz Valentina.app/;
if [[ "$LEGACY" = false ]]; then
tar -C $TRAVIS_BUILD_DIR/build/src/app/valentina/bin --exclude "*.DS_Store" -cvzf valentina-osx-${TRAVIS_COMMIT}.tar.gz Valentina.app/;
else
tar -C $TRAVIS_BUILD_DIR/build/src/app/valentina/bin --exclude "*.DS_Store" -cvzf valentina-osx-${TRAVIS_COMMIT}-legacy.tar.gz Valentina.app/;
fi
fi
deploy:
provider: bintray

View File

@ -1,3 +1,11 @@
# Version 0.7.40 (unreleased)
- New function Warning.
# Version 0.7.39 Nov 17, 2020
- Fix crash for Line tool notes.
- Restored support for Mac OS 10.11+.
- Updated translations.
# Version 0.7.38 Nov 12, 2020
- Bug fixes.

View File

@ -258,7 +258,7 @@ deploy:
package: valentina-win_auto-upload
publish: true
override: true
version: 0.7.38
version: 0.7.39
on:
DEPLOY: true
artifact: valentina-win-$(QT_VERSION)-$(APPVEYOR_REPO_BRANCH)-$(APPVEYOR_REPO_COMMIT)

View File

@ -41,6 +41,9 @@ win32{
macx{
# Check which minimal OSX version supports current Qt version
# See page https://doc.qt.io/qt-5/supported-platforms-and-configurations.html
# For qt 5.14 https://doc.qt.io/qt-5.14/supported-platforms.html
# For Qt 5.13 https://doc.qt.io/archives/qt-5.13/supported-platforms.html
# For Qt 5.12 https://doc-snapshots.qt.io/qt5-5.12/supported-platforms.html
# For older versions https://doc.qt.io/qt-5.11/supported-platforms-and-configurations.html
equals(QT_MAJOR_VERSION, 5):greaterThan(QT_MINOR_VERSION, 13) {# Qt 5.14
QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.13

View File

@ -1,5 +1,5 @@
valentina (0.7.38) trusty; urgency=low
valentina (0.7.39) trusty; urgency=low
* Auto build.
-- dismine <dismine@dismine-To-be-filled-by-O-E-M> Thu, 12 Nov 2020 16:30:00 +0300
-- dismine <dismine@dismine-To-be-filled-by-O-E-M> Thu, 17 Nov 2020 16:30:00 +0300

View File

@ -1,5 +1,5 @@
valentina (0.7.38) trusty; urgency=low
valentina (0.7.39) trusty; urgency=low
* Auto build.
-- dismine <dismine@dismine-To-be-filled-by-O-E-M> Thu, 12 Nov 2020 16:30:00 +0300
-- dismine <dismine@dismine-To-be-filled-by-O-E-M> Thu, 17 Nov 2020 16:30:00 +0300

View File

@ -19,9 +19,9 @@
<key>CFBundleIdentifier</key>
<string>io.bitbucket.valentinaproject.@EXECUTABLE@</string>
<key>CFBundleShortVersionString</key>
<string>0.7.38</string>
<string>0.7.39</string>
<key>CFBundleVersion</key>
<string>0.7.38.0</string>
<string>0.7.39.0</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleDocumentTypes</key>

View File

@ -19,9 +19,9 @@
<key>CFBundleIdentifier</key>
<string>io.bitbucket.valentinaproject.@EXECUTABLE@</string>
<key>CFBundleShortVersionString</key>
<string>0.7.38</string>
<string>0.7.39</string>
<key>CFBundleVersion</key>
<string>0.7.38.0</string>
<string>0.7.39.0</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleDocumentTypes</key>

2
dist/rpm/_service vendored
View File

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

View File

@ -91,7 +91,7 @@ Requires: poppler-tools
Requires: poppler-utils
%endif
Version: 0.7.38
Version: 0.7.39
Release: 0
URL: https://gitlab.com/smart-pattern/valentina
License: GPL-3.0+

8
dist/valentina.dsc vendored
View File

@ -2,7 +2,7 @@ Format: 3.0 (native)
Source: valentina
Binary: valentina
Architecture: i386 amd64
Version: 0.7.38
Version: 0.7.39
Maintainer: Roman Telezhynskyi <dismine@gmail.com>
Homepage: https://valentinaproject.bitbucket.io
Standards-Version: 3.9.5
@ -18,8 +18,8 @@ Build-Depends: debhelper (>= 8.0.0),
Package-List:
valentina deb graphics optional
Checksums-Sha1:
581eb1bf36b4ab7126b5983d809130f15396859e 24838101 valentina_0.7.38.tar
581eb1bf36b4ab7126b5983d809130f15396859e 24838101 valentina_0.7.39.tar
Checksums-Sha256:
9b156c7120a69b90373efb8ca9998c3e0563a60ad337210166cfd41b00b0f13c 24838101 valentina_0.7.38.tar
9b156c7120a69b90373efb8ca9998c3e0563a60ad337210166cfd41b00b0f13c 24838101 valentina_0.7.39.tar
Files:
95677e29d3a59cf5b064f7be236a4b78 24838101 valentina_0.7.38.tar
95677e29d3a59cf5b064f7be236a4b78 24838101 valentina_0.7.39.tar

View File

@ -233,10 +233,6 @@ Source: ".\valentina\*.ini"; DestDir: "{app}"; Flags: ignoreversion
Type: filesandordirs; Name: "{app}\translations"
Type: files; Name: "{userappdata}\ValentinaTeam\*.ini"; Tasks: deletesettings
[UninstallDelete]
Type: files; Name: "{userappdata}\ValentinaTeam\*.ini"
Type: filesandordirs; Name: "{userappdata}\ValentinaTeam"
[Icons]
Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}"
@ -356,6 +352,12 @@ russian.ManageSettings = Управление настройками
ukrainian.ManageSettings = Керування налаштуваннями
german.ManageSettings = Einstellungen verwalten
QuestionRemoveAnyExistingSettings = Do you want to remove any existing settings?
english.QuestionRemoveAnyExistingSettings = Do you want to remove any existing settings?
russian.QuestionRemoveAnyExistingSettings = Вы хотите удалить существующие настройки?
ukrainian.QuestionRemoveAnyExistingSettings = Видалити будь-які існуючі налаштування?
german.QuestionRemoveAnyExistingSettings = Möchten Sie vorhandene Einstellungen entfernen?
[Code]
const
@ -563,3 +565,15 @@ var
end;
end;
end;
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep = usPostUninstall then
begin
if MsgBox(ExpandConstant('{cm:QuestionRemoveAnyExistingSettings}'), mbConfirmation, MB_YESNO or MB_DEFBUTTON2) = IDYES then
//this is the msg that will display after uninstall
begin
DelTree(ExpandConstant('{userappdata}\ValentinaTeam'), True, True, True);
end;
end;
end;

View File

@ -15,10 +15,10 @@
},
"version": {
"name": "0.7.38",
"name": "0.7.39",
"desc": "Test branch release",
"released": "2020-11-12",
"vcs_tag": "v0.7.38",
"released": "2020-11-17",
"vcs_tag": "v0.7.39",
"gpgSign": false
},

View File

@ -8031,6 +8031,10 @@ Apply settings anyway?</source>
<source>Invalid dimension C base value.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Formula warning: %1. Program will be terminated.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MainWindow</name>
@ -10738,6 +10742,10 @@ This option will take an affect after restart.</source>
<source>Cannot prepare passmark &apos;%1&apos; for piece &apos;%2&apos;. Passmark is empty.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Cannot get tokens from formula &apos;%1&apos;. Formula error: %2.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>QSaveFile</name>
@ -13284,6 +13292,10 @@ Do you want to save your changes?</translation>
<source>Invalid notch.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Formula warning: %1. Program will be terminated.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>VBank</name>
@ -17275,6 +17287,16 @@ Raw layout format compatibility error: actualFileVersion = %1 and fileVersion =
<comment>function fmod</comment>
<translation type="unfinished"></translation>
</message>
<message>
<source>warning</source>
<comment>Calculation warning</comment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Show a warning in calculations</source>
<comment>function warning</comment>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>VVITConverter</name>

View File

@ -7855,6 +7855,10 @@ Přesto použít nastavení?</translation>
<source>Invalid dimension C base value.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Formula warning: %1. Program will be terminated.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MainWindow</name>
@ -10539,6 +10543,10 @@ Tato volba se projeví po opětovném spuštění.</translation>
<source>Cannot prepare passmark &apos;%1&apos; for piece &apos;%2&apos;. Passmark is empty.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Cannot get tokens from formula &apos;%1&apos;. Formula error: %2.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>QSaveFile</name>
@ -12940,6 +12948,10 @@ Chcete uložit změny?</translation>
<source>Invalid notch.</source>
<translation>Neplatný zářez.</translation>
</message>
<message>
<source>Formula warning: %1. Program will be terminated.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>VBank</name>
@ -17023,6 +17035,16 @@ Raw layout format compatibility error: actualFileVersion = %1 and fileVersion =
<comment>function fmod</comment>
<translation type="unfinished"></translation>
</message>
<message>
<source>warning</source>
<comment>Calculation warning</comment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Show a warning in calculations</source>
<comment>function warning</comment>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>VVITConverter</name>

View File

@ -7852,6 +7852,10 @@ Einstellungen trotzdem anwenden?</translation>
<source>Invalid dimension C base value.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Formula warning: %1. Program will be terminated.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MainWindow</name>
@ -10536,6 +10540,10 @@ Diese Option wird nach einem Neustart aktiv.</translation>
<source>Cannot prepare passmark &apos;%1&apos; for piece &apos;%2&apos;. Passmark is empty.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Cannot get tokens from formula &apos;%1&apos;. Formula error: %2.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>QSaveFile</name>
@ -12942,6 +12950,10 @@ Do you want to save your changes?</source>
<source>Invalid notch.</source>
<translation>Fehlerhafter Einschnitt.</translation>
</message>
<message>
<source>Formula warning: %1. Program will be terminated.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>VBank</name>
@ -16848,6 +16860,16 @@ Raw layout format compatibility error: actualFileVersion = %1 and fileVersion =
<comment>function fmod</comment>
<translation type="unfinished"></translation>
</message>
<message>
<source>warning</source>
<comment>Calculation warning</comment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Show a warning in calculations</source>
<comment>function warning</comment>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>VVITConverter</name>

View File

@ -7732,6 +7732,10 @@ Apply settings anyway?</source>
<source>Invalid dimension C base value.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Formula warning: %1. Program will be terminated.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MainWindow</name>
@ -10308,6 +10312,10 @@ This option will take an affect after restart.</source>
<source>Cannot prepare passmark &apos;%1&apos; for piece &apos;%2&apos;. Passmark is empty.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Cannot get tokens from formula &apos;%1&apos;. Formula error: %2.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>QmuParser</name>
@ -12606,6 +12614,10 @@ Do you want to save your changes?</source>
<source>Invalid notch.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Formula warning: %1. Program will be terminated.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>VBank</name>
@ -16288,6 +16300,16 @@ Raw layout format compatibility error: actualFileVersion = %1 and fileVersion =
<comment>function fmod</comment>
<translation type="unfinished"></translation>
</message>
<message>
<source>warning</source>
<comment>Calculation warning</comment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Show a warning in calculations</source>
<comment>function warning</comment>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>VVITConverter</name>

View File

@ -7847,6 +7847,10 @@ Apply settings anyway?</source>
<source>Invalid dimension C base value.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Formula warning: %1. Program will be terminated.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MainWindow</name>
@ -10514,6 +10518,10 @@ This option will take an affect after restart.</source>
<source>Cannot prepare passmark &apos;%1&apos; for piece &apos;%2&apos;. Passmark is empty.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Cannot get tokens from formula &apos;%1&apos;. Formula error: %2.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>QSaveFile</name>
@ -12895,6 +12903,10 @@ Do you want to save your changes?</translation>
<source>Invalid notch.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Formula warning: %1. Program will be terminated.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>VBank</name>
@ -16845,6 +16857,16 @@ Raw layout format compatibility error: actualFileVersion = %1 and fileVersion =
<comment>function fmod</comment>
<translation>Returns the floating-point remainder of numer/denom (rounded towards zero)</translation>
</message>
<message>
<source>warning</source>
<comment>Calculation warning</comment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Show a warning in calculations</source>
<comment>function warning</comment>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>VVITConverter</name>

View File

@ -7847,6 +7847,10 @@ Apply settings anyway?</source>
<source>Invalid dimension C base value.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Formula warning: %1. Program will be terminated.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MainWindow</name>
@ -10514,6 +10518,10 @@ This option will take an affect after restart.</source>
<source>Cannot prepare passmark &apos;%1&apos; for piece &apos;%2&apos;. Passmark is empty.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Cannot get tokens from formula &apos;%1&apos;. Formula error: %2.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>QSaveFile</name>
@ -12895,6 +12903,10 @@ Do you want to save your changes?</translation>
<source>Invalid notch.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Formula warning: %1. Program will be terminated.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>VBank</name>
@ -16845,6 +16857,16 @@ Raw layout format compatibility error: actualFileVersion = %1 and fileVersion =
<comment>function fmod</comment>
<translation type="unfinished"></translation>
</message>
<message>
<source>warning</source>
<comment>Calculation warning</comment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Show a warning in calculations</source>
<comment>function warning</comment>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>VVITConverter</name>

View File

@ -7847,6 +7847,10 @@ Apply settings anyway?</source>
<source>Invalid dimension C base value.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Formula warning: %1. Program will be terminated.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MainWindow</name>
@ -10514,6 +10518,10 @@ This option will take an affect after restart.</source>
<source>Cannot prepare passmark &apos;%1&apos; for piece &apos;%2&apos;. Passmark is empty.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Cannot get tokens from formula &apos;%1&apos;. Formula error: %2.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>QSaveFile</name>
@ -12895,6 +12903,10 @@ Do you want to save your changes?</translation>
<source>Invalid notch.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Formula warning: %1. Program will be terminated.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>VBank</name>
@ -16845,6 +16857,16 @@ Raw layout format compatibility error: actualFileVersion = %1 and fileVersion =
<comment>function fmod</comment>
<translation type="unfinished"></translation>
</message>
<message>
<source>warning</source>
<comment>Calculation warning</comment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Show a warning in calculations</source>
<comment>function warning</comment>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>VVITConverter</name>

View File

@ -4200,7 +4200,7 @@ Aplicar características de todos modos?</translation>
</message>
<message>
<source>Ready</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Listo</translation>
</message>
<message>
<source>Name</source>
@ -6797,7 +6797,7 @@ Aplicar características de todos modos?</translation>
</message>
<message>
<source>Ready</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Listo</translation>
</message>
</context>
<context>
@ -7852,6 +7852,10 @@ Aplicar características de todos modos?</translation>
<source>Invalid dimension C base value.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Formula warning: %1. Program will be terminated.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MainWindow</name>
@ -8945,7 +8949,7 @@ el patrón.</translation>
</message>
<message>
<source>Variables Table</source>
<translation>Mesa de variables</translation>
<translation>Tabla de variables</translation>
</message>
<message>
<source>Contains information about increments and internal variables</source>
@ -10537,6 +10541,10 @@ Esta opción surtirá efecto después de reiniciar.</translation>
<source>Cannot prepare passmark &apos;%1&apos; for piece &apos;%2&apos;. Passmark is empty.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Cannot get tokens from formula &apos;%1&apos;. Formula error: %2.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>QSaveFile</name>
@ -12945,6 +12953,10 @@ Quieres guardar los cambios?</translation>
<source>Invalid notch.</source>
<translation>Pique invalido.</translation>
</message>
<message>
<source>Formula warning: %1. Program will be terminated.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>VBank</name>
@ -17028,6 +17040,16 @@ Raw layout format compatibility error: actualFileVersion = %1 and fileVersion =
<comment>function fmod</comment>
<translation>Devuelve el resto de punto flotante de numerador/denominador (redondeado hacia cero)</translation>
</message>
<message>
<source>warning</source>
<comment>Calculation warning</comment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Show a warning in calculations</source>
<comment>function warning</comment>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>VVITConverter</name>

View File

@ -7048,6 +7048,10 @@ Apply settings anyway?</source>
<source>Invalid dimension C base value.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Formula warning: %1. Program will be terminated.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MainWindow</name>
@ -9408,6 +9412,10 @@ This option will take an affect after restart.</source>
<source>Cannot prepare passmark &apos;%1&apos; for piece &apos;%2&apos;. Passmark is empty.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Cannot get tokens from formula &apos;%1&apos;. Formula error: %2.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>QmuParser</name>
@ -11544,6 +11552,10 @@ Do you want to save your changes?</source>
<source>Invalid notch.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Formula warning: %1. Program will be terminated.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>VBank</name>
@ -15171,6 +15183,16 @@ Raw layout format compatibility error: actualFileVersion = %1 and fileVersion =
<comment>function fmod</comment>
<translation type="unfinished"></translation>
</message>
<message>
<source>warning</source>
<comment>Calculation warning</comment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Show a warning in calculations</source>
<comment>function warning</comment>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>VVITConverter</name>

View File

@ -7844,6 +7844,10 @@ Apply settings anyway?</source>
<source>Invalid dimension C base value.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Formula warning: %1. Program will be terminated.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MainWindow</name>
@ -10495,6 +10499,10 @@ This option will take an affect after restart.</source>
<source>Cannot prepare passmark &apos;%1&apos; for piece &apos;%2&apos;. Passmark is empty.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Cannot get tokens from formula &apos;%1&apos;. Formula error: %2.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>QSaveFile</name>
@ -12867,6 +12875,10 @@ Voulez-vous enregistrer les changements?</translation>
<source>Invalid notch.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Formula warning: %1. Program will be terminated.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>VBank</name>
@ -16797,6 +16809,16 @@ Raw layout format compatibility error: actualFileVersion = %1 and fileVersion =
<comment>function fmod</comment>
<translation type="unfinished"></translation>
</message>
<message>
<source>warning</source>
<comment>Calculation warning</comment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Show a warning in calculations</source>
<comment>function warning</comment>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>VVITConverter</name>

View File

@ -6170,6 +6170,10 @@ Apply settings anyway?</source>
<source>Invalid dimension C base value.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Formula warning: %1. Program will be terminated.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MainWindow</name>
@ -8339,6 +8343,10 @@ This option will take an affect after restart.</source>
<source>Cannot prepare passmark &apos;%1&apos; for piece &apos;%2&apos;. Passmark is empty.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Cannot get tokens from formula &apos;%1&apos;. Formula error: %2.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>QmuParser</name>
@ -10316,6 +10324,10 @@ Do you want to save your changes?</source>
<source>Invalid notch.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Formula warning: %1. Program will be terminated.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>VBank</name>
@ -13755,6 +13767,16 @@ Raw layout format compatibility error: actualFileVersion = %1 and fileVersion =
<comment>function fmod</comment>
<translation type="unfinished"></translation>
</message>
<message>
<source>warning</source>
<comment>Calculation warning</comment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Show a warning in calculations</source>
<comment>function warning</comment>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>VValentinaSettings</name>

View File

@ -6507,6 +6507,10 @@ Apply settings anyway?</source>
<source>Invalid dimension C base value.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Formula warning: %1. Program will be terminated.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MainWindow</name>
@ -8677,6 +8681,10 @@ This option will take an affect after restart.</source>
<source>Cannot prepare passmark &apos;%1&apos; for piece &apos;%2&apos;. Passmark is empty.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Cannot get tokens from formula &apos;%1&apos;. Formula error: %2.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>QmuParser</name>
@ -10696,6 +10704,10 @@ Do you want to save your changes?</source>
<source>Invalid notch.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Formula warning: %1. Program will be terminated.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>VBank</name>
@ -14156,6 +14168,16 @@ Raw layout format compatibility error: actualFileVersion = %1 and fileVersion =
<comment>function fmod</comment>
<translation type="unfinished"></translation>
</message>
<message>
<source>warning</source>
<comment>Calculation warning</comment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Show a warning in calculations</source>
<comment>function warning</comment>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>VValentinaSettings</name>

View File

@ -7845,6 +7845,10 @@ Applicare la configurazione comunque?</translation>
<source>Invalid dimension C base value.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Formula warning: %1. Program will be terminated.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MainWindow</name>
@ -10521,6 +10525,10 @@ Questa opzione sarà effettiva dopo il riavvio del programma.</translation>
<source>Cannot prepare passmark &apos;%1&apos; for piece &apos;%2&apos;. Passmark is empty.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Cannot get tokens from formula &apos;%1&apos;. Formula error: %2.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>QSaveFile</name>
@ -12897,6 +12905,10 @@ Vuoi salvare le tue modifiche?</translation>
<source>Invalid notch.</source>
<translation>Tacca non valida.</translation>
</message>
<message>
<source>Formula warning: %1. Program will be terminated.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>VBank</name>
@ -16745,6 +16757,16 @@ Raw layout format compatibility error: actualFileVersion = %1 and fileVersion =
<comment>function fmod</comment>
<translation type="unfinished"></translation>
</message>
<message>
<source>warning</source>
<comment>Calculation warning</comment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Show a warning in calculations</source>
<comment>function warning</comment>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>VVITConverter</name>

View File

@ -4201,7 +4201,7 @@ Toch de instellingen aanpassen?</translation>
</message>
<message>
<source>Ready</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Klaar</translation>
</message>
<message>
<source>Name</source>
@ -6798,7 +6798,7 @@ Toch de instellingen aanpassen?</translation>
</message>
<message>
<source>Ready</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Klaar</translation>
</message>
</context>
<context>
@ -7853,6 +7853,10 @@ Toch de instellingen aanpassen?</translation>
<source>Invalid dimension C base value.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Formula warning: %1. Program will be terminated.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MainWindow</name>
@ -10536,6 +10540,10 @@ Deze optie wordt actief na een herstart..</translation>
<source>Cannot prepare passmark &apos;%1&apos; for piece &apos;%2&apos;. Passmark is empty.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Cannot get tokens from formula &apos;%1&apos;. Formula error: %2.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>QSaveFile</name>
@ -12944,6 +12952,10 @@ Wil je deze veranderingen opslaan?</translation>
<source>Invalid notch.</source>
<translation>Ongeldige inkeping.</translation>
</message>
<message>
<source>Formula warning: %1. Program will be terminated.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>VBank</name>
@ -17027,6 +17039,16 @@ Raw layout format compatibility error: actualFileVersion = %1 and fileVersion =
<comment>function fmod</comment>
<translation>Brengt het drijvende-punt restant van numerator/denominator terug ( afgerond naar nul)</translation>
</message>
<message>
<source>warning</source>
<comment>Calculation warning</comment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Show a warning in calculations</source>
<comment>function warning</comment>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>VVITConverter</name>

View File

@ -7134,6 +7134,10 @@ Apply settings anyway?</source>
<source>Invalid dimension C base value.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Formula warning: %1. Program will be terminated.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MainWindow</name>
@ -9503,6 +9507,10 @@ This option will take an affect after restart.</source>
<source>Cannot prepare passmark &apos;%1&apos; for piece &apos;%2&apos;. Passmark is empty.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Cannot get tokens from formula &apos;%1&apos;. Formula error: %2.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>QmuParser</name>
@ -11760,6 +11768,10 @@ Do you want to save your changes?</source>
<source>Invalid notch.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Formula warning: %1. Program will be terminated.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>VBank</name>
@ -15304,6 +15316,16 @@ Raw layout format compatibility error: actualFileVersion = %1 and fileVersion =
<comment>function fmod</comment>
<translation type="unfinished"></translation>
</message>
<message>
<source>warning</source>
<comment>Calculation warning</comment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Show a warning in calculations</source>
<comment>function warning</comment>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>VVITConverter</name>

View File

@ -7845,6 +7845,10 @@ Aplicar configurações de qualquer forma?</translation>
<source>Invalid dimension C base value.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Formula warning: %1. Program will be terminated.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MainWindow</name>
@ -10513,6 +10517,10 @@ Esta opção terá um efeito após o reinício.</translation>
<source>Cannot prepare passmark &apos;%1&apos; for piece &apos;%2&apos;. Passmark is empty.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Cannot get tokens from formula &apos;%1&apos;. Formula error: %2.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>QSaveFile</name>
@ -12902,6 +12910,10 @@ Deseja salvar suas mudanças?</translation>
<source>Invalid notch.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Formula warning: %1. Program will be terminated.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>VBank</name>
@ -16784,6 +16796,16 @@ Raw layout format compatibility error: actualFileVersion = %1 and fileVersion =
<comment>function fmod</comment>
<translation type="unfinished"></translation>
</message>
<message>
<source>warning</source>
<comment>Calculation warning</comment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Show a warning in calculations</source>
<comment>function warning</comment>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>VVITConverter</name>

View File

@ -7103,6 +7103,10 @@ Apply settings anyway?</source>
<source>Invalid dimension C base value.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Formula warning: %1. Program will be terminated.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MainWindow</name>
@ -9375,6 +9379,10 @@ This option will take an affect after restart.</source>
<source>Cannot prepare passmark &apos;%1&apos; for piece &apos;%2&apos;. Passmark is empty.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Cannot get tokens from formula &apos;%1&apos;. Formula error: %2.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>QmuParser</name>
@ -11477,6 +11485,10 @@ Do you want to save your changes?</source>
<source>Invalid notch.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Formula warning: %1. Program will be terminated.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>VBank</name>
@ -14983,6 +14995,16 @@ Raw layout format compatibility error: actualFileVersion = %1 and fileVersion =
<comment>function fmod</comment>
<translation type="unfinished"></translation>
</message>
<message>
<source>warning</source>
<comment>Calculation warning</comment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Show a warning in calculations</source>
<comment>function warning</comment>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>VValentinaSettings</name>

View File

@ -4201,7 +4201,7 @@ Apply settings anyway?</source>
</message>
<message>
<source>Ready</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Готово</translation>
</message>
<message>
<source>Name</source>
@ -6799,7 +6799,7 @@ Apply settings anyway?</source>
</message>
<message>
<source>Ready</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Готово</translation>
</message>
</context>
<context>
@ -7855,6 +7855,10 @@ Apply settings anyway?</source>
<source>Invalid dimension C base value.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Formula warning: %1. Program will be terminated.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MainWindow</name>
@ -10500,7 +10504,7 @@ This option will take an affect after restart.</source>
</message>
<message>
<source>Piece name &apos;%1&apos; is not unique.</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Имя детали &quot;%1&quot; не уникальное.</translation>
</message>
<message>
<source>Could not find the segment start.</source>
@ -10539,8 +10543,8 @@ This option will take an affect after restart.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Piece name &apos;%1&apos; is not unique.</source>
<translation>Имя детали &quot;%1&quot; не уникальное.</translation>
<source>Cannot get tokens from formula &apos;%1&apos;. Formula error: %2.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
@ -12950,6 +12954,10 @@ Do you want to save your changes?</source>
<source>Invalid notch.</source>
<translation>Неправильная надсечка.</translation>
</message>
<message>
<source>Formula warning: %1. Program will be terminated.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>VBank</name>
@ -17038,6 +17046,16 @@ Raw layout format compatibility error: actualFileVersion = %1 and fileVersion =
<comment>function fmod</comment>
<translation type="unfinished"></translation>
</message>
<message>
<source>warning</source>
<comment>Calculation warning</comment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Show a warning in calculations</source>
<comment>function warning</comment>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>VVITConverter</name>

View File

@ -7849,6 +7849,10 @@ Apply settings anyway?</source>
<source>Invalid dimension C base value.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Formula warning: %1. Program will be terminated.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MainWindow</name>
@ -10515,6 +10519,10 @@ This option will take an affect after restart.</source>
<source>Cannot prepare passmark &apos;%1&apos; for piece &apos;%2&apos;. Passmark is empty.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Cannot get tokens from formula &apos;%1&apos;. Formula error: %2.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>QSaveFile</name>
@ -12895,6 +12903,10 @@ Do you want to save your changes?</source>
<source>Invalid notch.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Formula warning: %1. Program will be terminated.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>VBank</name>
@ -16844,6 +16856,16 @@ Raw layout format compatibility error: actualFileVersion = %1 and fileVersion =
<comment>function fmod</comment>
<translation type="unfinished"></translation>
</message>
<message>
<source>warning</source>
<comment>Calculation warning</comment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Show a warning in calculations</source>
<comment>function warning</comment>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>VVITConverter</name>

View File

@ -6280,6 +6280,10 @@ Apply settings anyway?</source>
<source>Invalid dimension C base value.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Formula warning: %1. Program will be terminated.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MainWindow</name>
@ -8471,6 +8475,10 @@ This option will take an affect after restart.</source>
<source>Cannot prepare passmark &apos;%1&apos; for piece &apos;%2&apos;. Passmark is empty.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Cannot get tokens from formula &apos;%1&apos;. Formula error: %2.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>QmuParser</name>
@ -10517,6 +10525,10 @@ Do you want to save your changes?</source>
<source>Invalid notch.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Formula warning: %1. Program will be terminated.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>VBank</name>
@ -13947,6 +13959,16 @@ Raw layout format compatibility error: actualFileVersion = %1 and fileVersion =
<comment>function fmod</comment>
<translation type="unfinished"></translation>
</message>
<message>
<source>warning</source>
<comment>Calculation warning</comment>
<translation type="unfinished"></translation>
</message>
<message>
<source>Show a warning in calculations</source>
<comment>function warning</comment>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>VValentinaSettings</name>

View File

@ -150,23 +150,30 @@ inline void noisyFailureMsgHandler(QtMsgType type, const QMessageLogContext &con
type = QtDebugMsg;
}
QString logMsg = msg;
const bool isWarningMessage = qApp->IsWarningMessage(msg);
if (isWarningMessage)
{
logMsg = logMsg.remove(VAbstractApplication::warningMessageSignature);
}
switch (type)
{
case QtDebugMsg:
vStdOut() << QApplication::translate("mNoisyHandler", "DEBUG:") << msg << "\n";
vStdOut() << QApplication::translate("mNoisyHandler", "DEBUG:") << logMsg << "\n";
return;
case QtWarningMsg:
vStdErr() << QApplication::translate("mNoisyHandler", "WARNING:") << msg << "\n";
vStdErr() << QApplication::translate("mNoisyHandler", "WARNING:") << logMsg << "\n";
break;
case QtCriticalMsg:
vStdErr() << QApplication::translate("mNoisyHandler", "CRITICAL:") << msg << "\n";
vStdErr() << QApplication::translate("mNoisyHandler", "CRITICAL:") << logMsg << "\n";
break;
case QtFatalMsg:
vStdErr() << QApplication::translate("mNoisyHandler", "FATAL:") << msg << "\n";
vStdErr() << QApplication::translate("mNoisyHandler", "FATAL:") << logMsg << "\n";
break;
#if QT_VERSION >= QT_VERSION_CHECK(5, 5, 0)
case QtInfoMsg:
vStdOut() << QApplication::translate("mNoisyHandler", "INFO:") << msg << "\n";
vStdOut() << QApplication::translate("mNoisyHandler", "INFO:") << logMsg << "\n";
break;
#endif
default:
@ -216,7 +223,7 @@ inline void noisyFailureMsgHandler(QtMsgType type, const QMessageLogContext &con
{
if (topWinAllowsPop)
{
messageBox.setText(msg);
messageBox.setText(VAbstractApplication::ClearMessage(logMsg));
messageBox.setStandardButtons(QMessageBox::Ok);
messageBox.setWindowModality(Qt::ApplicationModal);
messageBox.setModal(true);
@ -335,6 +342,11 @@ bool MApplication::notify(QObject *receiver, QEvent *event)
qUtf8Printable(e.ErrorMessage()), qUtf8Printable(e.DetailedInformation()));
return true;
}
catch (const qmu::QmuParserWarning &e)
{
qCCritical(mApp, "%s", qUtf8Printable(tr("Formula warning: %1. Program will be terminated.").arg(e.GetMsg())));
exit(V_EX_DATAERR);
}
// These last two cases special. I found that we can't show here modal dialog with error message.
// Somehow program doesn't waite untile an error dialog will be closed. But if ignore this program will hang.
catch (const qmu::QmuParserError &e)

View File

@ -388,15 +388,6 @@ DEPENDPATH += $$PWD/../../libs/ifc
win32:!win32-g++: PRE_TARGETDEPS += $$OUT_PWD/../../libs/ifc/$${DESTDIR}/ifc.lib
else:unix|win32-g++: PRE_TARGETDEPS += $$OUT_PWD/../../libs/ifc/$${DESTDIR}/libifc.a
#VMisc static library
unix|win32: LIBS += -L$$OUT_PWD/../../libs/vmisc/$${DESTDIR}/ -lvmisc
INCLUDEPATH += $$PWD/../../libs/vmisc
DEPENDPATH += $$PWD/../../libs/vmisc
win32:!win32-g++: PRE_TARGETDEPS += $$OUT_PWD/../../libs/vmisc/$${DESTDIR}/vmisc.lib
else:unix|win32-g++: PRE_TARGETDEPS += $$OUT_PWD/../../libs/vmisc/$${DESTDIR}/libvmisc.a
# VGeometry static library (depend on ifc)
unix|win32: LIBS += -L$$OUT_PWD/../../libs/vgeometry/$${DESTDIR}/ -lvgeometry
@ -406,6 +397,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
#VMisc static library
unix|win32: LIBS += -L$$OUT_PWD/../../libs/vmisc/$${DESTDIR}/ -lvmisc
INCLUDEPATH += $$PWD/../../libs/vmisc
DEPENDPATH += $$PWD/../../libs/vmisc
win32:!win32-g++: PRE_TARGETDEPS += $$OUT_PWD/../../libs/vmisc/$${DESTDIR}/vmisc.lib
else:unix|win32-g++: PRE_TARGETDEPS += $$OUT_PWD/../../libs/vmisc/$${DESTDIR}/libvmisc.a
# QMuParser library
win32:CONFIG(release, debug|release): LIBS += -L$${OUT_PWD}/../../libs/qmuparser/$${DESTDIR} -lqmuparser2
else:win32:CONFIG(debug, debug|release): LIBS += -L$${OUT_PWD}/../../libs/qmuparser/$${DESTDIR} -lqmuparser2

View File

@ -169,10 +169,10 @@ inline void noisyFailureMsgHandler(QtMsgType type, const QMessageLogContext &con
}
QString logMsg = msg;
const bool isPatternMessage = qApp->IsPatternMessage(msg);
const bool isPatternMessage = qApp->IsWarningMessage(msg);
if (isPatternMessage)
{
logMsg = logMsg.remove(VAbstractValApplication::patternMessageSignature);
logMsg = logMsg.remove(VAbstractValApplication::warningMessageSignature);
}
{
@ -188,7 +188,7 @@ inline void noisyFailureMsgHandler(QtMsgType type, const QMessageLogContext &con
case QtWarningMsg:
if (isPatternMessage)
{
qApp->PostPatternMessage(logMsg, type);
qApp->PostWarningMessage(logMsg, type);
}
debugdate += QStringLiteral(":WARNING:%1(%2)] %3: %4: %5").arg(context.file).arg(context.line)
.arg(context.function, context.category, logMsg);
@ -197,7 +197,7 @@ inline void noisyFailureMsgHandler(QtMsgType type, const QMessageLogContext &con
case QtCriticalMsg:
if (isPatternMessage)
{
qApp->PostPatternMessage(logMsg, type);
qApp->PostWarningMessage(logMsg, type);
}
debugdate += QStringLiteral(":CRITICAL:%1(%2)] %3: %4: %5").arg(context.file).arg(context.line)
.arg(context.function, context.category, logMsg);
@ -212,7 +212,7 @@ inline void noisyFailureMsgHandler(QtMsgType type, const QMessageLogContext &con
case QtInfoMsg:
if (isPatternMessage)
{
qApp->PostPatternMessage(logMsg, type);
qApp->PostWarningMessage(logMsg, type);
}
debugdate += QStringLiteral(":INFO:%1(%2)] %3: %4: %5").arg(context.file).arg(context.line)
.arg(context.function, context.category, logMsg);
@ -434,6 +434,11 @@ bool VApplication::notify(QObject *receiver, QEvent *event)
qUtf8Printable(e.ErrorMessage()), qUtf8Printable(e.DetailedInformation()));
return true;
}
catch (const qmu::QmuParserWarning &e)
{
qCCritical(vApp, "%s", qUtf8Printable(tr("Formula warning: %1. Program will be terminated.").arg(e.GetMsg())));
exit(V_EX_DATAERR);
}
// These last two cases are special. I found that we can't show here a modal dialog with an error message.
// Somehow program doesn't wait until an error dialog will be closed. But if ignore the exception the program will
// hang.

View File

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

View File

@ -174,7 +174,7 @@ void WarningNotUniquePieceName(const QHash<quint32, VPiece> *allDetails)
{
const QString errorMsg = QObject::tr("Piece name '%1' is not unique.").arg(pieceName);
qApp->IsPedantic() ? throw VException(errorMsg) :
qWarning() << VAbstractValApplication::patternMessageSignature + errorMsg;
qWarning() << VAbstractValApplication::warningMessageSignature + errorMsg;
}
++i;
@ -1629,7 +1629,7 @@ void MainWindow::customEvent(QEvent *event)
{
ZoomFitBestCurrent();
}
else if (event->type() == PATTERN_MESSAGE_EVENT)
else if (event->type() == WARNING_MESSAGE_EVENT)
{
PrintPatternMessage(event);
}
@ -6669,7 +6669,7 @@ void MainWindow::ToolSelectDetail()
void MainWindow::PrintPatternMessage(QEvent *event)
{
SCASSERT(event != nullptr)
auto *patternMessage = static_cast<PatternMessageEvent *>(event);
auto *patternMessage = static_cast<WarningMessageEvent *>(event);
QString severity;

View File

@ -935,7 +935,7 @@ void MainWindowsNoGUI::PrintPages(QPrinter *printer)
{
const QString errorMsg = tr("File error.\n\n%1\n\n%2").arg(e.ErrorMessage(), e.DetailedInformation());
qApp->IsPedantic() ? throw VException(errorMsg) :
qWarning() << VAbstractValApplication::patternMessageSignature + errorMsg;
qWarning() << VAbstractValApplication::warningMessageSignature + errorMsg;
}
}

View File

@ -193,6 +193,12 @@ QList<QString> GetTokens(const VFormulaField &formula)
.arg(formula.expression, e.GetMsg());
return QList<QString>();
}
catch (const qmu::QmuParserWarning &e)
{
qWarning() << QObject::tr("Cannot get tokens from formula '%1'. Formula error: %2.")
.arg(formula.expression, e.GetMsg());
return QList<QString>();
}
}
//---------------------------------------------------------------------------------------------------------------------

View File

@ -29,6 +29,7 @@
#include <QtGlobal>
#include <sstream>
#include <string>
#include <QtDebug>
#include "qmuparserdef.h"
#include "qmuparsererror.h"
@ -414,10 +415,7 @@ QmuParser::QmuParser():QmuParserBase()
{
AddValIdent(IsVal);
InitCharSets();
InitFun();
InitConst();
InitOprt();
Init();
}
//---------------------------------------------------------------------------------------------------------------------

View File

@ -1383,7 +1383,6 @@ void QmuParserBase::CreateRPN() const
stVal.push(opt);
const QString &str = opt.GetAsString();
m_vStringBuf.push_back(str); // Store string in internal buffer
m_Tokens.insert(m_pTokenReader->GetPos()-str.length(), str);
break;
}
case cmVAR:

View File

@ -301,4 +301,45 @@ QmuParserError *QmuParserError::clone() const
return new QmuParserError(*this);
}
//---------------------------------------------------------------------------------------------------------------------
QmuParserWarning::QmuParserWarning(const QString &sMsg)
: QException(), m_sMsg ( sMsg )
{}
//---------------------------------------------------------------------------------------------------------------------
QmuParserWarning::QmuParserWarning(const QmuParserWarning &a_Obj)
: QException(), m_sMsg(a_Obj.m_sMsg)
{}
//---------------------------------------------------------------------------------------------------------------------
QmuParserWarning &QmuParserWarning::operator=(const QmuParserWarning &a_Obj)
{
if ( this == &a_Obj )
{
return *this;
}
m_sMsg = a_Obj.m_sMsg;
return *this;
}
//---------------------------------------------------------------------------------------------------------------------
/**
* @brief raise method raise for exception
*/
Q_NORETURN void QmuParserWarning::raise() const
{
throw *this;
}
//---------------------------------------------------------------------------------------------------------------------
/**
* @brief clone clone exception
* @return new exception
*/
QmuParserWarning *QmuParserWarning::clone() const
{
return new QmuParserWarning(*this);
}
} // namespace qmu

View File

@ -129,6 +129,31 @@ inline QString QmuParserErrorMsg::operator[] ( int a_iIdx ) const
return m_vErrMsg.value(a_iIdx).translate(QString());
}
class QMUPARSERSHARED_EXPORT QmuParserWarning : public QException
{
public:
explicit QmuParserWarning ( const QString &sMsg );
QmuParserWarning ( const QmuParserWarning &a_Obj );
QmuParserWarning& operator= ( const QmuParserWarning &a_Obj );
virtual ~QmuParserWarning() QMUP_NOEXCEPT_EXPR (true) override {}
const QString& GetMsg() const;
Q_NORETURN virtual void raise() const override;
Q_REQUIRED_RESULT virtual QmuParserWarning *clone() const override;
private:
QString m_sMsg; ///< The message string
};
//---------------------------------------------------------------------------------------------------------------------
/**
* @brief Returns the message string for this error.
*/
inline const QString& QmuParserWarning::GetMsg() const
{
return m_sMsg;
}
//---------------------------------------------------------------------------
/** @brief Error class of the parser.
@author Ingo Berg

View File

@ -63,6 +63,8 @@ QmuTokenParser::QmuTokenParser(const QString &formula, bool osSeparator,
SetVarFactory(AddVariable, this);
SetSepForTr(osSeparator, fromUser);
DefineFun(QStringLiteral("warning"), Warning);
// Fix for issue #776. Valentina cannot recognize translated functions.
QMap<QString, QString>::const_iterator i = translatedFunctions.constBegin();
while (i != translatedFunctions.constEnd())
@ -100,4 +102,12 @@ bool QmuTokenParser::IsSingle(const QString &formula)
return ok;
}
//---------------------------------------------------------------------------------------------------------------------
qreal QmuTokenParser::Warning(const QString &warningMsg, qreal value)
{
Q_UNUSED(warningMsg);
return value;
}
}// namespace qmu

View File

@ -42,6 +42,9 @@ public:
static bool IsSingle(const QString &formula);
protected:
static qreal Warning(const QString &warningMsg, qreal value);
private:
Q_DISABLE_COPY(QmuTokenParser)
QmuTokenParser();

View File

@ -113,7 +113,7 @@ void DRW_TextCodec::setCodePage(const std::string *c, bool dxfFormat){
const QString errorMsg = QCoreApplication::translate("DRW_TextCodec", "No available codec for code page '%1'.")
.arg(cp.c_str());
qApp->IsPedantic() ? throw VException(errorMsg) :
qWarning() << VAbstractValApplication::patternMessageSignature + errorMsg;
qWarning() << VAbstractValApplication::warningMessageSignature + errorMsg;
if (version < DRW::AC1021 && cp == "UTF-8")
{

View File

@ -437,7 +437,7 @@ QDomElement VPatternRecipe::FinalMeasurement(const VFinalMeasurement &fm)
tr("Value for final measurtement '%1' is infinite or NaN. "
"Please, check your calculations.").arg(fm.name));
qApp->IsPedantic() ? throw VException(errorMsg) :
qWarning() << VAbstractValApplication::patternMessageSignature + errorMsg;
qWarning() << VAbstractValApplication::warningMessageSignature + errorMsg;
}
SetAttribute(recipeFinalMeasurement, QStringLiteral("value"), result);

View File

@ -146,7 +146,7 @@ QVector<QPointF> VAbstractCurve::GetSegmentPoints(const QPointF &begin, const QP
.arg(piece, name(), error);
}
qApp->IsPedantic() ? throw VExceptionObjectError(errorMsg) :
qWarning() << VAbstractValApplication::patternMessageSignature + errorMsg;
qWarning() << VAbstractValApplication::warningMessageSignature + errorMsg;
}
return segment;

View File

@ -1072,7 +1072,7 @@ QVector<QPointF> VAbstractPiece::Equidistant(QVector<VSAPoint> points, qreal wid
{
const QString errorMsg = tr("Piece '%1'. Not enough points to build seam allowance.").arg(name);
qApp->IsPedantic() ? throw VException(errorMsg) :
qWarning() << VAbstractValApplication::patternMessageSignature + errorMsg;
qWarning() << VAbstractValApplication::warningMessageSignature + errorMsg;
return QVector<QPointF>();
}

View File

@ -335,7 +335,7 @@ bool VBank::PrepareUnsorted()
const qint64 square = details.at(i).Square();
if (square <= 0)
{
qCCritical(lBank) << VAbstractValApplication::patternMessageSignature +
qCCritical(lBank) << VAbstractValApplication::warningMessageSignature +
tr("Preparing data for layout error: Detail '%1' square <= 0")
.arg(details.at(i).GetName());
prepare = false;
@ -360,7 +360,7 @@ bool VBank::PrepareDetails()
{
if (layoutWidth <= 0)
{
qCCritical(lBank) << VAbstractValApplication::patternMessageSignature +
qCCritical(lBank) << VAbstractValApplication::warningMessageSignature +
tr("Preparing data for layout error: Layout paper sheet <= 0");
prepare = false;
return prepare;
@ -368,7 +368,7 @@ bool VBank::PrepareDetails()
if (details.isEmpty())
{
qCCritical(lBank) << VAbstractValApplication::patternMessageSignature +
qCCritical(lBank) << VAbstractValApplication::warningMessageSignature +
tr("Preparing data for layout error: List of details is empty");
prepare = false;
return prepare;
@ -391,7 +391,7 @@ bool VBank::PrepareDetails()
const QString errorMsg = QObject::tr("Piece '%1' has invalid layout allowance. Please, check seam allowance"
" to check how seam allowance behave.").arg(details.at(i).GetName());
qApp->IsPedantic() ? throw VException(errorMsg) :
qWarning() << VAbstractValApplication::patternMessageSignature + errorMsg;
qWarning() << VAbstractValApplication::warningMessageSignature + errorMsg;
}
const qreal d = details.at(i).Diagonal();

View File

@ -270,7 +270,7 @@ QVector<VLayoutPassmark> ConvertPassmarks(const VPiece &piece, const VContainer
QObject::tr("Cannot prepare builtin passmark '%1' for piece '%2'. Passmark is empty.")
.arg(pData.nodeName, piece.GetName());
qApp->IsPedantic() ? throw VException(errorMsg) :
qWarning() << VAbstractValApplication::patternMessageSignature + errorMsg;
qWarning() << VAbstractValApplication::warningMessageSignature + errorMsg;
return;
}
@ -284,7 +284,7 @@ QVector<VLayoutPassmark> ConvertPassmarks(const VPiece &piece, const VContainer
"empty.")
.arg(pData.nodeName, piece.GetName());
qApp->IsPedantic() ? throw VException(errorMsg) :
qWarning() << VAbstractValApplication::patternMessageSignature + errorMsg;
qWarning() << VAbstractValApplication::warningMessageSignature + errorMsg;
return;
}
layoutPassmark.baseLine = ConstFirst (baseLines);
@ -301,7 +301,7 @@ QVector<VLayoutPassmark> ConvertPassmarks(const VPiece &piece, const VContainer
QObject::tr("Passmark '%1' is not part of piece '%2'.")
.arg(pData.nodeName, piece.GetName());
qApp->IsPedantic() ? throw VException(errorMsg) :
qWarning() << VAbstractValApplication::patternMessageSignature + errorMsg;
qWarning() << VAbstractValApplication::warningMessageSignature + errorMsg;
}
};
@ -327,7 +327,7 @@ QVector<VLayoutPassmark> ConvertPassmarks(const VPiece &piece, const VContainer
QObject::tr("Cannot prepare passmark '%1' for piece '%2'. Passmark base line is empty.")
.arg(pData.nodeName, piece.GetName());
qApp->IsPedantic() ? throw VException(errorMsg) :
qWarning() << VAbstractValApplication::patternMessageSignature + errorMsg;
qWarning() << VAbstractValApplication::warningMessageSignature + errorMsg;
return;
}
@ -347,7 +347,7 @@ QVector<VLayoutPassmark> ConvertPassmarks(const VPiece &piece, const VContainer
QObject::tr("Cannot prepare passmark '%1' for piece '%2'. Passmark is empty.")
.arg(pData.nodeName, piece.GetName());
qApp->IsPedantic() ? throw VException(errorMsg) :
qWarning() << VAbstractValApplication::patternMessageSignature + errorMsg;
qWarning() << VAbstractValApplication::warningMessageSignature + errorMsg;
return;
}
@ -363,7 +363,7 @@ QVector<VLayoutPassmark> ConvertPassmarks(const VPiece &piece, const VContainer
QObject::tr("Passmark '%1' is not part of piece '%2'.")
.arg(pData.nodeName, piece.GetName());
qApp->IsPedantic() ? throw VException(errorMsg) :
qWarning() << VAbstractValApplication::patternMessageSignature + errorMsg;
qWarning() << VAbstractValApplication::warningMessageSignature + errorMsg;
}
};
@ -510,7 +510,7 @@ VLayoutPiece VLayoutPiece::Create(const VPiece &piece, vidtype id, const VContai
const QString errorMsg = QObject::tr("Piece '%1'. Seam allowance is not valid.")
.arg(piece.GetName());
qApp->IsPedantic() ? throw VException(errorMsg) :
qWarning() << VAbstractValApplication::patternMessageSignature + errorMsg;
qWarning() << VAbstractValApplication::warningMessageSignature + errorMsg;
}
det.SetCountourPoints(futureMainPath.result(),

View File

@ -310,7 +310,7 @@ QVector<QGraphicsItem *> VPoster::ImageWatermark(QGraphicsItem *parent, const Po
{
const QString errorMsg = tr("Cannot open the watermark image.") + QChar(' ') + error;
qApp->IsPedantic() ? throw VException(errorMsg) :
qWarning() << VAbstractValApplication::patternMessageSignature + errorMsg;
qWarning() << VAbstractValApplication::warningMessageSignature + errorMsg;
return data;
}
@ -320,7 +320,7 @@ QVector<QGraphicsItem *> VPoster::ImageWatermark(QGraphicsItem *parent, const Po
{
const QString errorMsg = tr("Not supported file suffix '%1'").arg(f.suffix());
qApp->IsPedantic() ? throw VException(errorMsg) :
qWarning() << VAbstractValApplication::patternMessageSignature + errorMsg;
qWarning() << VAbstractValApplication::warningMessageSignature + errorMsg;
return data;
}

View File

@ -39,7 +39,7 @@ enum CustomEventType {
UndoEventType = 1,
LiteParseEventType = 2,
FitBestCurrentEventType = 3,
PatternMessageEventType = 4,
WarningMessageEventType = 4,
};
//---------------------------------------------------------------------------------------------------------------------
@ -84,19 +84,19 @@ public:
};
//---------------------------------------------------------------------------------------------------------------------
const QEvent::Type PATTERN_MESSAGE_EVENT = static_cast<QEvent::Type>(QEvent::User +
CustomEventType::PatternMessageEventType);
const QEvent::Type WARNING_MESSAGE_EVENT = static_cast<QEvent::Type>(QEvent::User +
CustomEventType::WarningMessageEventType);
class PatternMessageEvent : public QEvent
class WarningMessageEvent : public QEvent
{
public:
PatternMessageEvent(const QString &message, QtMsgType severity)
: QEvent(PATTERN_MESSAGE_EVENT),
WarningMessageEvent(const QString &message, QtMsgType severity)
: QEvent(WARNING_MESSAGE_EVENT),
m_message(message),
m_severity(severity)
{}
virtual ~PatternMessageEvent() =default;
virtual ~WarningMessageEvent() =default;
QString Message() const;
@ -107,12 +107,12 @@ private:
QtMsgType m_severity;
};
inline QString PatternMessageEvent::Message() const
inline QString WarningMessageEvent::Message() const
{
return m_message;
}
inline QtMsgType PatternMessageEvent::Severity() const
inline QtMsgType WarningMessageEvent::Severity() const
{
return m_severity;
}

View File

@ -108,44 +108,31 @@ const QString max_F = QStringLiteral("max");
const QString sum_F = QStringLiteral("sum");
const QString avg_F = QStringLiteral("avg");
const QString fmod_F = QStringLiteral("fmod");
const QString warning_F = QStringLiteral("warning");
const QStringList builInFunctions = QStringList() << degTorad_F
<< radTodeg_F
<< sin_F
<< cos_F
<< tan_F
<< asin_F
<< acos_F
<< atan_F
<< sinh_F
<< cosh_F
<< tanh_F
<< asinh_F
<< acosh_F
<< atanh_F
<< sinD_F
<< cosD_F
<< tanD_F
<< asinD_F
<< acosD_F
<< atanD_F
<< log2_F
<< log10_F
<< log_F
<< ln_F
<< exp_F
<< sqrt_F
<< sign_F
<< rint_F
<< r2cm_F
<< csrCm_F
<< csrInch_F
<< abs_F
<< min_F
<< max_F
<< sum_F
<< avg_F
<< fmod_F;
const QStringList builInFunctions
{
degTorad_F, radTodeg_F,
sin_F, cos_F, tan_F,
asin_F, acos_F, atan_F,
sinh_F, cosh_F, tanh_F,
asinh_F, acosh_F, atanh_F,
sinD_F, cosD_F, tanD_F,
asinD_F, acosD_F, atanD_F,
log2_F, log10_F, log_F,
ln_F,
exp_F,
sqrt_F,
sign_F,
rint_F, r2cm_F,
csrCm_F, csrInch_F,
abs_F,
min_F, max_F,
sum_F,
avg_F,
fmod_F,
warning_F
};
const QString pl_size = QStringLiteral("size");
const QString pl_height = QStringLiteral("height");

View File

@ -397,6 +397,7 @@ extern const QString max_F;
extern const QString sum_F;
extern const QString avg_F;
extern const QString fmod_F;
extern const QString warning_F;
extern const QStringList builInFunctions;

View File

@ -42,7 +42,7 @@
extern const int MAJOR_VERSION = 0;
extern const int MINOR_VERSION = 7;
extern const int DEBUG_VERSION = 38;
extern const int DEBUG_VERSION = 39;
extern const QString APP_VERSION_STR(QStringLiteral("%1.%2.%3.%4").arg(MAJOR_VERSION).arg(MINOR_VERSION)
.arg(DEBUG_VERSION).arg(LATEST_TAG_DISTANCE));

View File

@ -49,8 +49,8 @@ extern const QString APP_VERSION_STR;
// Change version number in projectversion.cpp too.
// Synchronize valentina.nsi
#define VER_FILEVERSION 0,7,38
#define VER_FILEVERSION_STR "0.7.38\0"
#define VER_FILEVERSION 0,7,39
#define VER_FILEVERSION_STR "0.7.39\0"
#define V_PRERELEASE // Mark prerelease builds

View File

@ -50,6 +50,8 @@
# include "appimage.h"
#endif // defined(APPIMAGE) && defined(Q_OS_LINUX)
const QString VAbstractApplication::warningMessageSignature = QStringLiteral("[PATTERN MESSAGE]");
//---------------------------------------------------------------------------------------------------------------------
VAbstractApplication::VAbstractApplication(int &argc, char **argv)
:QApplication(argc, argv),
@ -288,3 +290,26 @@ void VAbstractApplication::ClearTranslation()
delete pmsTranslator;
}
}
//---------------------------------------------------------------------------------------------------------------------
/**
* @brief ClearMessage helps to clear a message string from standard Qt function.
* @param msg the message that contains '"' at the start and at the end
* @return cleared string
*/
QString VAbstractApplication::ClearMessage(QString msg)
{
if (msg.startsWith('"') && msg.endsWith('"'))
{
msg.remove(0, 1);
msg.chop(1);
}
return msg;
}
//---------------------------------------------------------------------------------------------------------------------
bool VAbstractApplication::IsWarningMessage(const QString &message) const
{
return VAbstractApplication::ClearMessage(message).startsWith(warningMessageSignature);
}

View File

@ -77,6 +77,11 @@ public:
virtual bool IsAppInGUIMode()const =0;
virtual bool IsPedantic() const;
static QString ClearMessage(QString msg);
static const QString warningMessageSignature;
bool IsWarningMessage(const QString &message) const;
#if defined(Q_OS_WIN)
static void WinAttachConsole();
#endif

View File

@ -30,8 +30,6 @@
#include <QWidget>
const QString VAbstractValApplication::patternMessageSignature = QStringLiteral("[PATTERN MESSAGE]");
//---------------------------------------------------------------------------------------------------------------------
VAbstractValApplication::VAbstractValApplication(int &argc, char **argv)
: VAbstractApplication(argc, argv)
@ -50,31 +48,8 @@ double VAbstractValApplication::fromPixel(double pix) const
}
//---------------------------------------------------------------------------------------------------------------------
void VAbstractValApplication::PostPatternMessage(const QString &message, QtMsgType severity) const
void VAbstractValApplication::PostWarningMessage(const QString &message, QtMsgType severity) const
{
QApplication::postEvent(mainWindow,
new PatternMessageEvent(VAbstractValApplication::ClearMessage(message), severity));
}
//---------------------------------------------------------------------------------------------------------------------
/**
* @brief ClearMessage helps to clear a message string from standard Qt function.
* @param msg the message that contains '"' at the start and at the end
* @return cleared string
*/
QString VAbstractValApplication::ClearMessage(QString msg)
{
if (msg.startsWith('"') && msg.endsWith('"'))
{
msg.remove(0, 1);
msg.chop(1);
}
return msg;
}
//---------------------------------------------------------------------------------------------------------------------
bool VAbstractValApplication::IsPatternMessage(const QString &message) const
{
return VAbstractValApplication::ClearMessage(message).startsWith(patternMessageSignature);
new WarningMessageEvent(VAbstractValApplication::ClearMessage(message), severity));
}

View File

@ -98,12 +98,7 @@ public:
bool getOpeningPattern() const;
void setOpeningPattern();
void PostPatternMessage(const QString &message, QtMsgType severity) const;
static QString ClearMessage(QString msg);
static const QString patternMessageSignature;
bool IsPatternMessage(const QString &message) const;
void PostWarningMessage(const QString &message, QtMsgType severity) const;
qreal GetDimensionHeight() const;
void SetDimensionHeight(qreal dimensionHeight);

View File

@ -33,10 +33,12 @@
#include <QStringDataPtr>
#include <QStringList>
#include <QSharedPointer>
#include <QtDebug>
#include "../vmisc/def.h"
#include "../qmuparser/qmuparsererror.h"
#include "variables/vinternalvariable.h"
#include "../vmisc/vabstractapplication.h"
//---------------------------------------------------------------------------------------------------------------------
/**
@ -63,6 +65,8 @@ Calculator::Calculator()
// set value to 0.
SetVarFactory(VarFactory, this);
SetSepForEval();
DefineFun(QStringLiteral("warning"), Warning);
}
//---------------------------------------------------------------------------------------------------------------------
@ -116,3 +120,12 @@ qreal *Calculator::VarFactory(const QString &a_szName, void *a_pUserData)
throw qmu::QmuParserError (qmu::ecUNASSIGNABLE_TOKEN);
}
//---------------------------------------------------------------------------------------------------------------------
qreal Calculator::Warning(const QString &warningMsg, qreal value)
{
qApp->IsPedantic() ? throw qmu::QmuParserWarning(warningMsg)
: qWarning() << VAbstractApplication::warningMessageSignature + warningMsg;
return value;
}

View File

@ -66,6 +66,7 @@ public:
qreal EvalFormula(const QHash<QString, QSharedPointer<VInternalVariable> > *vars, const QString &formula);
protected:
static qreal* VarFactory(const QString &a_szName, void *a_pUserData);
static qreal Warning(const QString &warningMsg, qreal value);
private:
Q_DISABLE_COPY(Calculator)
QVector<QSharedPointer<qreal>> m_varsValues;

View File

@ -579,7 +579,7 @@ QVector<QLineF> PassmarkBisectorBaseLine(PassmarkStatus seamPassmarkType, const
"than minimal allowed.")
.arg(passmarkData.nodeName, passmarkData.pieceName);
qApp->IsPedantic() ? throw VException(errorMsg) :
qWarning() << VAbstractValApplication::patternMessageSignature + errorMsg;
qWarning() << VAbstractValApplication::warningMessageSignature + errorMsg;
return QVector<QLineF>();
}
@ -788,7 +788,7 @@ QVector<QLineF> VPassmark::BuiltInSAPassmarkBaseLine(const VPiece &piece) const
"than minimal allowed.")
.arg(m_data.nodeName, m_data.pieceName);
qApp->IsPedantic() ? throw VExceptionInvalidNotch(errorMsg) :
qWarning() << VAbstractValApplication::patternMessageSignature + errorMsg;
qWarning() << VAbstractValApplication::warningMessageSignature + errorMsg;
return QVector<QLineF>();
}
}
@ -804,7 +804,7 @@ QVector<QLineF> VPassmark::BuiltInSAPassmarkBaseLine(const VPiece &piece) const
"seam allowance. User must manually provide length.")
.arg(m_data.nodeName, m_data.pieceName);
qApp->IsPedantic() ? throw VExceptionInvalidNotch(errorMsg) :
qWarning() << VAbstractValApplication::patternMessageSignature + errorMsg;
qWarning() << VAbstractValApplication::warningMessageSignature + errorMsg;
return QVector<QLineF>();
}
}
@ -848,7 +848,7 @@ QVector<QLineF> VPassmark::SAPassmarkBaseLine(const QVector<QPointF> &seamAllowa
const QString errorMsg = QObject::tr("Cannot calculate a notch for point '%1' in piece '%2'. Seam allowance is "
"empty.").arg(m_data.nodeName, m_data.pieceName);
qApp->IsPedantic() ? throw VExceptionInvalidNotch(errorMsg) :
qWarning() << VAbstractValApplication::patternMessageSignature + errorMsg;
qWarning() << VAbstractValApplication::warningMessageSignature + errorMsg;
return QVector<QLineF>(); // Something wrong
}
@ -860,7 +860,7 @@ QVector<QLineF> VPassmark::SAPassmarkBaseLine(const QVector<QPointF> &seamAllowa
"position for a notch.")
.arg(m_data.nodeName, m_data.pieceName);
qApp->IsPedantic() ? throw VExceptionInvalidNotch(errorMsg) :
qWarning() << VAbstractValApplication::patternMessageSignature + errorMsg;
qWarning() << VAbstractValApplication::warningMessageSignature + errorMsg;
return QVector<QLineF>(); // Something wrong
}
@ -870,7 +870,7 @@ QVector<QLineF> VPassmark::SAPassmarkBaseLine(const QVector<QPointF> &seamAllowa
"notch position.")
.arg(m_data.nodeName, m_data.pieceName);
qApp->IsPedantic() ? throw VExceptionInvalidNotch(errorMsg) :
qWarning() << VAbstractValApplication::patternMessageSignature + errorMsg;
qWarning() << VAbstractValApplication::warningMessageSignature + errorMsg;
}
auto PassmarkIntersection = [this, seamAllowance] (QLineF line, qreal width)
@ -897,7 +897,7 @@ QVector<QLineF> VPassmark::SAPassmarkBaseLine(const QVector<QPointF> &seamAllowa
"less than minimal allowed.")
.arg(m_data.nodeName, m_data.pieceName);
qApp->IsPedantic() ? throw VException(errorMsg) :
qWarning() << VAbstractValApplication::patternMessageSignature + errorMsg;
qWarning() << VAbstractValApplication::warningMessageSignature + errorMsg;
return QLineF();
}
line.setLength(length);
@ -914,7 +914,7 @@ QVector<QLineF> VPassmark::SAPassmarkBaseLine(const QVector<QPointF> &seamAllowa
"collapse.")
.arg(m_data.nodeName, m_data.pieceName);
qApp->IsPedantic() ? throw VExceptionInvalidNotch(errorMsg) :
qWarning() << VAbstractValApplication::patternMessageSignature + errorMsg;
qWarning() << VAbstractValApplication::warningMessageSignature + errorMsg;
}
}
else
@ -923,7 +923,7 @@ QVector<QLineF> VPassmark::SAPassmarkBaseLine(const QVector<QPointF> &seamAllowa
"intersection.")
.arg(m_data.nodeName, m_data.pieceName);
qApp->IsPedantic() ? throw VExceptionInvalidNotch(errorMsg) :
qWarning() << VAbstractValApplication::patternMessageSignature + errorMsg;
qWarning() << VAbstractValApplication::warningMessageSignature + errorMsg;
}
return QLineF();
@ -938,7 +938,7 @@ QVector<QLineF> VPassmark::SAPassmarkBaseLine(const QVector<QPointF> &seamAllowa
"than minimal allowed.")
.arg(m_data.nodeName, m_data.pieceName);
qApp->IsPedantic() ? throw VExceptionInvalidNotch(errorMsg) :
qWarning() << VAbstractValApplication::patternMessageSignature + errorMsg;
qWarning() << VAbstractValApplication::warningMessageSignature + errorMsg;
}
else
{

View File

@ -937,7 +937,7 @@ bool VPiece::GetPassmarkPreviousSAPoints(const QVector<VPieceNode> &path, int in
const QString errorMsg = tr("Cannot calculate a notch for point '%1' in piece '%2'.")
.arg(VPiecePath::NodeName(path, passmarkIndex, data), GetName());
qApp->IsPedantic() ? throw VExceptionInvalidNotch(errorMsg) :
qWarning() << VAbstractValApplication::patternMessageSignature + errorMsg;
qWarning() << VAbstractValApplication::warningMessageSignature + errorMsg;
return false; // Something wrong
}
@ -976,7 +976,7 @@ bool VPiece::GetPassmarkNextSAPoints(const QVector<VPieceNode> &path, int index,
const QString errorMsg = tr("Cannot calculate a notch for point '%1' in piece '%2'.")
.arg(VPiecePath::NodeName(path, passmarkIndex, data), GetName());
qApp->IsPedantic() ? throw VExceptionInvalidNotch(errorMsg) :
qWarning() << VAbstractValApplication::patternMessageSignature + errorMsg;
qWarning() << VAbstractValApplication::warningMessageSignature + errorMsg;
return false; // Something wrong
}
@ -1060,7 +1060,7 @@ VPassmark VPiece::CreatePassmark(const QVector<VPieceNode> &path, int previousIn
const QString errorMsg = tr("Cannot calculate a notch for point '%1' in piece '%2'.")
.arg(VPiecePath::NodeName(path, passmarkIndex, data), GetName());
qApp->IsPedantic() ? throw VExceptionInvalidNotch(errorMsg) :
qWarning() << VAbstractValApplication::patternMessageSignature + errorMsg;
qWarning() << VAbstractValApplication::warningMessageSignature + errorMsg;
return VPassmark();
}
@ -1089,7 +1089,7 @@ VPassmark VPiece::CreatePassmark(const QVector<VPieceNode> &path, int previousIn
const QString infoMsg = tr("Notch for point '%1' in piece '%2' will be disabled. Manual length is less than "
"allowed value.")
.arg(VPiecePath::NodeName(path, passmarkIndex, data), GetName());
qInfo() << VAbstractValApplication::patternMessageSignature + infoMsg;
qInfo() << VAbstractValApplication::warningMessageSignature + infoMsg;
return VPassmark();
}

View File

@ -162,7 +162,7 @@ qreal VPieceNode::GetSABefore(const VContainer *data) const
const QString errorMsg = QObject::tr("Cannot calculate seam allowance before for point '%1'. Reason: %2.")
.arg(nodeName, formula.Reason());
qApp->IsPedantic() ? throw VException(errorMsg) :
qWarning() << VAbstractValApplication::patternMessageSignature + errorMsg;
qWarning() << VAbstractValApplication::warningMessageSignature + errorMsg;
return -1;
}
return formula.getDoubleValue();
@ -193,7 +193,7 @@ qreal VPieceNode::GetSABefore(const VContainer *data, Unit unit) const
const QString errorMsg = QObject::tr("Cannot calculate seam allowance before for point '%1'. Reason: %2.")
.arg(nodeName, formula.Reason());
qApp->IsPedantic() ? throw VException(errorMsg) :
qWarning() << VAbstractValApplication::patternMessageSignature + errorMsg;
qWarning() << VAbstractValApplication::warningMessageSignature + errorMsg;
return -1;
}
@ -245,7 +245,7 @@ qreal VPieceNode::GetSAAfter(const VContainer *data) const
const QString errorMsg = QObject::tr("Cannot calculate seam allowance after for point '%1'. Reason: %2.")
.arg(nodeName, formula.Reason());
qApp->IsPedantic() ? throw VException(errorMsg) :
qWarning() << VAbstractValApplication::patternMessageSignature + errorMsg;
qWarning() << VAbstractValApplication::warningMessageSignature + errorMsg;
return -1;
}
@ -277,7 +277,7 @@ qreal VPieceNode::GetSAAfter(const VContainer *data, Unit unit) const
const QString errorMsg = QObject::tr("Cannot calculate seam allowance after for point '%1'. Reason: ")
.arg(nodeName, formula.Reason());
qApp->IsPedantic() ? throw VException(errorMsg) :
qWarning() << VAbstractValApplication::patternMessageSignature + errorMsg;
qWarning() << VAbstractValApplication::warningMessageSignature + errorMsg;
return -1;
}
@ -343,7 +343,7 @@ qreal VPieceNode::GetPassmarkLength(const VContainer *data, Unit unit) const
const QString errorMsg = QObject::tr("Cannot calculate passmark length for point '%1'. Reason: %2.")
.arg(nodeName, formula.Reason());
qApp->IsPedantic() ? throw VException(errorMsg) :
qWarning() << VAbstractValApplication::patternMessageSignature + errorMsg;
qWarning() << VAbstractValApplication::warningMessageSignature + errorMsg;
return VSAPoint::maxPassmarkLength;
}

View File

@ -385,7 +385,7 @@ QVector<QPointF> VPiecePath::PathPoints(const VContainer *data, const QVector<QP
"point with cutting countour")
.arg(GetName());
qApp->IsPedantic() ? throw VExceptionObjectError(errorMsg) :
qWarning() << VAbstractValApplication::patternMessageSignature + errorMsg;
qWarning() << VAbstractValApplication::warningMessageSignature + errorMsg;
}
}
@ -402,7 +402,7 @@ QVector<QPointF> VPiecePath::PathPoints(const VContainer *data, const QVector<QP
"point with cutting countour")
.arg(GetName());
qApp->IsPedantic() ? throw VExceptionObjectError(errorMsg) :
qWarning() << VAbstractValApplication::patternMessageSignature + errorMsg;
qWarning() << VAbstractValApplication::warningMessageSignature + errorMsg;
}
}

View File

@ -533,6 +533,9 @@ void VTranslateVars::InitFunctions()
functionsDescriptions.insert(fmod_F, translate("VTranslateVars", "Returns the floating-point remainder of "
"numer/denom (rounded towards zero)",
"function fmod"));
functions.insert(warning_F, translate("VTranslateVars", "warning", "Calculation warning"));
functionsDescriptions.insert(warning_F, translate("VTranslateVars", "Show a warning in calculations",
"function warning"));
}
#undef translate

View File

@ -145,7 +145,7 @@ VToolCurveIntersectAxis *VToolCurveIntersectAxis::Create(VToolCurveIntersectAxis
" through point '%3' with angle %4°")
.arg(initData.name, curve->ObjectName(), basePoint->name()).arg(angle);
qApp->IsPedantic() ? throw VExceptionObjectError(errorMsg) :
qWarning() << VAbstractValApplication::patternMessageSignature + errorMsg;
qWarning() << VAbstractValApplication::warningMessageSignature + errorMsg;
}
const qreal segLength = curve->GetLengthByPoint(fPoint);

View File

@ -137,7 +137,7 @@ VToolLineIntersectAxis *VToolLineIntersectAxis::Create(VToolLineIntersectAxisIni
"through point '%4' and angle %5°")
.arg(initData.name, firstPoint->name(), secondPoint->name(), basePoint->name()).arg(axis.angle());
qApp->IsPedantic() ? throw VExceptionObjectError(errorMsg) :
qWarning() << VAbstractValApplication::patternMessageSignature + errorMsg;
qWarning() << VAbstractValApplication::warningMessageSignature + errorMsg;
}
VPointF *p = new VPointF(fPoint, initData.name, initData.mx, initData.my);

View File

@ -152,7 +152,7 @@ VToolLineIntersect* VToolLineIntersect::Create(VToolLineIntersectInitData initDa
"intersection")
.arg(initData.name, p1Line1->name(), p2Line1->name(), p1Line2->name(), p2Line2->name());
qApp->IsPedantic() ? throw VExceptionObjectError(errorMsg) :
qWarning() << VAbstractValApplication::patternMessageSignature + errorMsg;
qWarning() << VAbstractValApplication::warningMessageSignature + errorMsg;
}
VPointF *p = new VPointF(fPoint, initData.name, initData.mx, initData.my);

View File

@ -124,7 +124,7 @@ VToolPointFromArcAndTangent *VToolPointFromArcAndTangent::Create(VToolPointFromA
const QString errorMsg = tr("Error calculating point '%1'. Tangent to arc '%2' from point '%3' cannot be found")
.arg(initData.name, arc.ObjectName(), tPoint.name());
qApp->IsPedantic() ? throw VExceptionObjectError(errorMsg) :
qWarning() << VAbstractValApplication::patternMessageSignature + errorMsg;
qWarning() << VAbstractValApplication::warningMessageSignature + errorMsg;
}
VPointF *p = new VPointF(point, initData.name, initData.mx, initData.my);

View File

@ -133,7 +133,7 @@ VToolPointFromCircleAndTangent *VToolPointFromCircleAndTangent::Create(VToolPoin
.arg(initData.name, cPoint.name()).arg(radius).arg(tPoint.name());
qApp->IsPedantic() ? throw VExceptionObjectError(errorMsg) :
qWarning() << VAbstractValApplication::patternMessageSignature + errorMsg;
qWarning() << VAbstractValApplication::warningMessageSignature + errorMsg;
}
VPointF *p = new VPointF(point, initData.name, initData.mx, initData.my);

View File

@ -219,7 +219,7 @@ VToolPointOfContact* VToolPointOfContact::Create(VToolPointOfContactInitData &in
"intersection with line (%4;%5)")
.arg(initData.name, centerP->name()).arg(result).arg(firstP->name(), secondP->name());
qApp->IsPedantic() ? throw VExceptionObjectError(errorMsg) :
qWarning() << VAbstractValApplication::patternMessageSignature + errorMsg;
qWarning() << VAbstractValApplication::warningMessageSignature + errorMsg;
}
VPointF *p = new VPointF(fPoint, initData.name, initData.mx, initData.my);

View File

@ -123,7 +123,7 @@ VToolPointOfIntersectionArcs *VToolPointOfIntersectionArcs::Create(VToolPointOfI
const QString errorMsg = tr("Error calculating point '%1'. Arcs '%2' and '%3' have no point of intersection")
.arg(initData.name, firstArc->ObjectName(), secondArc->ObjectName());
qApp->IsPedantic() ? throw VExceptionObjectError(errorMsg) :
qWarning() << VAbstractValApplication::patternMessageSignature + errorMsg;
qWarning() << VAbstractValApplication::warningMessageSignature + errorMsg;
}
VPointF *p = new VPointF(point, initData.name, initData.mx, initData.my);

View File

@ -137,7 +137,7 @@ VToolPointOfIntersectionCircles::Create(VToolPointOfIntersectionCirclesInitData
const QString errorMsg = tr("Error calculating point '%1'. Circles with centers in points '%2' and '%3' have "
"no point of intersection").arg(initData.name, c1Point.name(), c2Point.name());
qApp->IsPedantic() ? throw VExceptionObjectError(errorMsg) :
qWarning() << VAbstractValApplication::patternMessageSignature + errorMsg;
qWarning() << VAbstractValApplication::warningMessageSignature + errorMsg;
}
VPointF *p = new VPointF(point, initData.name, initData.mx, initData.my);

View File

@ -128,7 +128,7 @@ VToolPointOfIntersectionCurves *VToolPointOfIntersectionCurves::Create(VToolPoin
const QString errorMsg = tr("Error calculating point '%1'. Curves '%2' and '%3' have no point of intersection")
.arg(initData.name, curve1->name(), curve2->name());
qApp->IsPedantic() ? throw VExceptionObjectError(errorMsg) :
qWarning() << VAbstractValApplication::patternMessageSignature + errorMsg;
qWarning() << VAbstractValApplication::warningMessageSignature + errorMsg;
}
VPointF *p = new VPointF(point, initData.name, initData.mx, initData.my);

View File

@ -150,7 +150,7 @@ VToolTriangle* VToolTriangle::Create(VToolTriangleInitData initData)
const QString errorMsg = tr("Error calculating point '%1'. Point of intersection cannot be found")
.arg(initData.name);
qApp->IsPedantic() ? throw VExceptionObjectError(errorMsg) :
qWarning() << VAbstractValApplication::patternMessageSignature + errorMsg;
qWarning() << VAbstractValApplication::warningMessageSignature + errorMsg;
}
VPointF *p = new VPointF(point, initData.name, initData.mx, initData.my);

View File

@ -1323,7 +1323,7 @@ void VToolSeamAllowance::RefreshGeometry(bool updateChildren)
const QString errorMsg = QObject::tr("Piece '%1'. Seam allowance is not valid.")
.arg(detail.GetName());
qApp->IsPedantic() ? throw VException(errorMsg) :
qWarning() << VAbstractValApplication::patternMessageSignature + errorMsg;
qWarning() << VAbstractValApplication::warningMessageSignature + errorMsg;
}
path.addPath(detail.SeamAllowancePath(futureSeamAllowance.result()));
path.setFillRule(Qt::OddEvenFill);

View File

@ -129,15 +129,6 @@ 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
#VMisc static library
unix|win32: LIBS += -L$$OUT_PWD/../../libs/vmisc/$${DESTDIR} -lvmisc
INCLUDEPATH += $$PWD/../../libs/vmisc
DEPENDPATH += $$PWD/../../libs/vmisc
win32:!win32-g++: PRE_TARGETDEPS += $$OUT_PWD/../../libs/vmisc/$${DESTDIR}/vmisc.lib
else:unix|win32-g++: PRE_TARGETDEPS += $$OUT_PWD/../../libs/vmisc/$${DESTDIR}/libvmisc.a
## VGeometry static library (depend on ifc)
unix|win32: LIBS += -L$$OUT_PWD/../../libs/vgeometry/$${DESTDIR} -lvgeometry
@ -156,6 +147,15 @@ DEPENDPATH += $$PWD/../../libs/ifc
win32:!win32-g++: PRE_TARGETDEPS += $$OUT_PWD/../../libs/ifc/$${DESTDIR}/ifc.lib
else:unix|win32-g++: PRE_TARGETDEPS += $$OUT_PWD/../../libs/ifc/$${DESTDIR}/libifc.a
#VMisc static library
unix|win32: LIBS += -L$$OUT_PWD/../../libs/vmisc/$${DESTDIR} -lvmisc
INCLUDEPATH += $$PWD/../../libs/vmisc
DEPENDPATH += $$PWD/../../libs/vmisc
win32:!win32-g++: PRE_TARGETDEPS += $$OUT_PWD/../../libs/vmisc/$${DESTDIR}/vmisc.lib
else:unix|win32-g++: PRE_TARGETDEPS += $$OUT_PWD/../../libs/vmisc/$${DESTDIR}/libvmisc.a
# QMuParser library
win32:CONFIG(release, debug|release): LIBS += -L$${OUT_PWD}/../../libs/qmuparser/$${DESTDIR} -lqmuparser2
else:win32:CONFIG(debug, debug|release): LIBS += -L$${OUT_PWD}/../../libs/qmuparser/$${DESTDIR} -lqmuparser2

View File

@ -186,6 +186,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
# VGeometry static library (depend on ifc, VMisc)
unix|win32: LIBS += -L$$OUT_PWD/../../libs/vgeometry/$${DESTDIR} -lvgeometry
INCLUDEPATH += $$PWD/../../libs/vgeometry
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
# IFC static library (depend on QMuParser, VMisc)
unix|win32: LIBS += -L$$OUT_PWD/../../libs/ifc/$${DESTDIR}/ -lifc
@ -204,15 +213,6 @@ DEPENDPATH += $$PWD/../../libs/vmisc
win32:!win32-g++: PRE_TARGETDEPS += $$OUT_PWD/../../libs/vmisc/$${DESTDIR}/vmisc.lib
else:unix|win32-g++: PRE_TARGETDEPS += $$OUT_PWD/../../libs/vmisc/$${DESTDIR}/libvmisc.a
# VGeometry static library (depend on ifc)
unix|win32: LIBS += -L$$OUT_PWD/../../libs/vgeometry/$${DESTDIR} -lvgeometry
INCLUDEPATH += $$PWD/../../libs/vgeometry
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
# VDxf static library
unix|win32: LIBS += -L$$OUT_PWD/../../libs/vdxf/$${DESTDIR}/ -lvdxf