From 80d9fbc10758ec65adfc2a8363254f0ce7ee6a08 Mon Sep 17 00:00:00 2001 From: Roman Telezhynskyi Date: Fri, 20 Nov 2020 13:18:38 +0200 Subject: [PATCH] New function Warning. --- ChangeLog.txt | 3 + src/app/tape/mapplication.cpp | 24 ++++++-- src/app/tape/tape.pro | 18 +++--- src/app/valentina/core/vapplication.cpp | 15 +++-- src/app/valentina/dialogs/vwidgetdetails.cpp | 2 +- src/app/valentina/mainwindow.cpp | 6 +- src/app/valentina/mainwindowsnogui.cpp | 2 +- src/libs/ifc/xml/vabstractpattern.cpp | 6 ++ src/libs/qmuparser/qmuparser.cpp | 6 +- src/libs/qmuparser/qmuparserbase.cpp | 1 - src/libs/qmuparser/qmuparsererror.cpp | 41 +++++++++++++ src/libs/qmuparser/qmuparsererror.h | 25 ++++++++ src/libs/qmuparser/qmutokenparser.cpp | 10 +++ src/libs/qmuparser/qmutokenparser.h | 3 + .../vdxf/libdxfrw/intern/drw_textcodec.cpp | 2 +- src/libs/vformat/vpatternrecipe.cpp | 2 +- src/libs/vgeometry/vabstractcurve.cpp | 2 +- src/libs/vlayout/vabstractpiece.cpp | 2 +- src/libs/vlayout/vbank.cpp | 8 +-- src/libs/vlayout/vlayoutpiece.cpp | 14 ++--- src/libs/vlayout/vposter.cpp | 4 +- src/libs/vmisc/customevents.h | 18 +++--- src/libs/vmisc/def.cpp | 61 ++++++++----------- src/libs/vmisc/def.h | 1 + src/libs/vmisc/vabstractapplication.cpp | 25 ++++++++ src/libs/vmisc/vabstractapplication.h | 5 ++ src/libs/vmisc/vabstractvalapplication.cpp | 29 +-------- src/libs/vmisc/vabstractvalapplication.h | 7 +-- src/libs/vpatterndb/calculator.cpp | 13 ++++ src/libs/vpatterndb/calculator.h | 1 + src/libs/vpatterndb/vpassmark.cpp | 20 +++--- src/libs/vpatterndb/vpiece.cpp | 8 +-- src/libs/vpatterndb/vpiecenode.cpp | 10 +-- src/libs/vpatterndb/vpiecepath.cpp | 4 +- src/libs/vpatterndb/vtranslatevars.cpp | 3 + .../toollinepoint/vtoolcurveintersectaxis.cpp | 2 +- .../toollinepoint/vtoollineintersectaxis.cpp | 2 +- .../toolsinglepoint/vtoollineintersect.cpp | 2 +- .../vtoolpointfromarcandtangent.cpp | 2 +- .../vtoolpointfromcircleandtangent.cpp | 2 +- .../toolsinglepoint/vtoolpointofcontact.cpp | 2 +- .../vtoolpointofintersectionarcs.cpp | 2 +- .../vtoolpointofintersectioncircles.cpp | 2 +- .../vtoolpointofintersectioncurves.cpp | 2 +- .../toolsinglepoint/vtooltriangle.cpp | 2 +- src/libs/vtools/tools/vtoolseamallowance.cpp | 2 +- .../TranslationsTest/TranslationsTest.pro | 18 +++--- src/test/ValentinaTest/ValentinaTest.pro | 18 +++--- 48 files changed, 283 insertions(+), 176 deletions(-) diff --git a/ChangeLog.txt b/ChangeLog.txt index 59e374d1d..af5c298fe 100644 --- a/ChangeLog.txt +++ b/ChangeLog.txt @@ -1,3 +1,6 @@ +# 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+. diff --git a/src/app/tape/mapplication.cpp b/src/app/tape/mapplication.cpp index 444b31152..82e901109 100644 --- a/src/app/tape/mapplication.cpp +++ b/src/app/tape/mapplication.cpp @@ -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) diff --git a/src/app/tape/tape.pro b/src/app/tape/tape.pro index 24daaece2..a1bfd651e 100644 --- a/src/app/tape/tape.pro +++ b/src/app/tape/tape.pro @@ -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 diff --git a/src/app/valentina/core/vapplication.cpp b/src/app/valentina/core/vapplication.cpp index e76c3d7ab..2f62b18c1 100644 --- a/src/app/valentina/core/vapplication.cpp +++ b/src/app/valentina/core/vapplication.cpp @@ -147,10 +147,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); } { @@ -166,7 +166,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); @@ -175,7 +175,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); @@ -190,7 +190,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); @@ -412,6 +412,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. diff --git a/src/app/valentina/dialogs/vwidgetdetails.cpp b/src/app/valentina/dialogs/vwidgetdetails.cpp index 609d533a9..73ab8b76c 100644 --- a/src/app/valentina/dialogs/vwidgetdetails.cpp +++ b/src/app/valentina/dialogs/vwidgetdetails.cpp @@ -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; } } diff --git a/src/app/valentina/mainwindow.cpp b/src/app/valentina/mainwindow.cpp index 50208c723..e8ebf7c29 100644 --- a/src/app/valentina/mainwindow.cpp +++ b/src/app/valentina/mainwindow.cpp @@ -174,7 +174,7 @@ void WarningNotUniquePieceName(const QHash *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); } @@ -6523,7 +6523,7 @@ void MainWindow::ToolSelectDetail() void MainWindow::PrintPatternMessage(QEvent *event) { SCASSERT(event != nullptr) - auto *patternMessage = static_cast(event); + auto *patternMessage = static_cast(event); QString severity; diff --git a/src/app/valentina/mainwindowsnogui.cpp b/src/app/valentina/mainwindowsnogui.cpp index dc3ab1c3d..5333b149c 100644 --- a/src/app/valentina/mainwindowsnogui.cpp +++ b/src/app/valentina/mainwindowsnogui.cpp @@ -930,7 +930,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; } } diff --git a/src/libs/ifc/xml/vabstractpattern.cpp b/src/libs/ifc/xml/vabstractpattern.cpp index c12bf9233..4037bb40f 100644 --- a/src/libs/ifc/xml/vabstractpattern.cpp +++ b/src/libs/ifc/xml/vabstractpattern.cpp @@ -193,6 +193,12 @@ QList GetTokens(const VFormulaField &formula) .arg(formula.expression, e.GetMsg()); return QList(); } + catch (const qmu::QmuParserWarning &e) + { + qWarning() << QObject::tr("Cannot get tokens from formula '%1'. Formula error: %2.") + .arg(formula.expression, e.GetMsg()); + return QList(); + } } //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/libs/qmuparser/qmuparser.cpp b/src/libs/qmuparser/qmuparser.cpp index 06e76cb19..3ddf10a87 100644 --- a/src/libs/qmuparser/qmuparser.cpp +++ b/src/libs/qmuparser/qmuparser.cpp @@ -29,6 +29,7 @@ #include #include #include +#include #include "qmuparserdef.h" #include "qmuparsererror.h" @@ -414,10 +415,7 @@ QmuParser::QmuParser():QmuParserBase() { AddValIdent(IsVal); - InitCharSets(); - InitFun(); - InitConst(); - InitOprt(); + Init(); } //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/libs/qmuparser/qmuparserbase.cpp b/src/libs/qmuparser/qmuparserbase.cpp index e94a28a92..bc1d4c849 100644 --- a/src/libs/qmuparser/qmuparserbase.cpp +++ b/src/libs/qmuparser/qmuparserbase.cpp @@ -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: diff --git a/src/libs/qmuparser/qmuparsererror.cpp b/src/libs/qmuparser/qmuparsererror.cpp index 7e75c402a..987a09c4b 100644 --- a/src/libs/qmuparser/qmuparsererror.cpp +++ b/src/libs/qmuparser/qmuparsererror.cpp @@ -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 diff --git a/src/libs/qmuparser/qmuparsererror.h b/src/libs/qmuparser/qmuparsererror.h index 41dad2400..4fc6d35e9 100644 --- a/src/libs/qmuparser/qmuparsererror.h +++ b/src/libs/qmuparser/qmuparsererror.h @@ -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 diff --git a/src/libs/qmuparser/qmutokenparser.cpp b/src/libs/qmuparser/qmutokenparser.cpp index 45a6520dd..a8840561d 100644 --- a/src/libs/qmuparser/qmutokenparser.cpp +++ b/src/libs/qmuparser/qmutokenparser.cpp @@ -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::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 diff --git a/src/libs/qmuparser/qmutokenparser.h b/src/libs/qmuparser/qmutokenparser.h index 9f0f08b5e..407138d91 100644 --- a/src/libs/qmuparser/qmutokenparser.h +++ b/src/libs/qmuparser/qmutokenparser.h @@ -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(); diff --git a/src/libs/vdxf/libdxfrw/intern/drw_textcodec.cpp b/src/libs/vdxf/libdxfrw/intern/drw_textcodec.cpp index 3cfd120c0..307e4e81e 100644 --- a/src/libs/vdxf/libdxfrw/intern/drw_textcodec.cpp +++ b/src/libs/vdxf/libdxfrw/intern/drw_textcodec.cpp @@ -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") { diff --git a/src/libs/vformat/vpatternrecipe.cpp b/src/libs/vformat/vpatternrecipe.cpp index 61a66245b..c8f9304b9 100644 --- a/src/libs/vformat/vpatternrecipe.cpp +++ b/src/libs/vformat/vpatternrecipe.cpp @@ -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); diff --git a/src/libs/vgeometry/vabstractcurve.cpp b/src/libs/vgeometry/vabstractcurve.cpp index fac6f5c3b..e8bde1cd6 100644 --- a/src/libs/vgeometry/vabstractcurve.cpp +++ b/src/libs/vgeometry/vabstractcurve.cpp @@ -146,7 +146,7 @@ QVector 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; diff --git a/src/libs/vlayout/vabstractpiece.cpp b/src/libs/vlayout/vabstractpiece.cpp index 85f9d0d16..5415a4682 100644 --- a/src/libs/vlayout/vabstractpiece.cpp +++ b/src/libs/vlayout/vabstractpiece.cpp @@ -1072,7 +1072,7 @@ QVector VAbstractPiece::Equidistant(QVector 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(); } diff --git a/src/libs/vlayout/vbank.cpp b/src/libs/vlayout/vbank.cpp index 12861e401..8931bec50 100644 --- a/src/libs/vlayout/vbank.cpp +++ b/src/libs/vlayout/vbank.cpp @@ -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(); diff --git a/src/libs/vlayout/vlayoutpiece.cpp b/src/libs/vlayout/vlayoutpiece.cpp index 917bfad9a..f92062db1 100644 --- a/src/libs/vlayout/vlayoutpiece.cpp +++ b/src/libs/vlayout/vlayoutpiece.cpp @@ -269,7 +269,7 @@ QVector 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; } @@ -283,7 +283,7 @@ QVector 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); @@ -300,7 +300,7 @@ QVector 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; } }; @@ -326,7 +326,7 @@ QVector 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; } @@ -346,7 +346,7 @@ QVector 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; } @@ -362,7 +362,7 @@ QVector 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; } }; @@ -508,7 +508,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(), diff --git a/src/libs/vlayout/vposter.cpp b/src/libs/vlayout/vposter.cpp index f7d73c80e..13d8fdd51 100644 --- a/src/libs/vlayout/vposter.cpp +++ b/src/libs/vlayout/vposter.cpp @@ -310,7 +310,7 @@ QVector 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 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; } diff --git a/src/libs/vmisc/customevents.h b/src/libs/vmisc/customevents.h index 72638e16c..d99ca8b1a 100644 --- a/src/libs/vmisc/customevents.h +++ b/src/libs/vmisc/customevents.h @@ -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::User + - CustomEventType::PatternMessageEventType); +const QEvent::Type WARNING_MESSAGE_EVENT = static_cast(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; } diff --git a/src/libs/vmisc/def.cpp b/src/libs/vmisc/def.cpp index e7289a6d7..9da9d89e4 100644 --- a/src/libs/vmisc/def.cpp +++ b/src/libs/vmisc/def.cpp @@ -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"); diff --git a/src/libs/vmisc/def.h b/src/libs/vmisc/def.h index 9b4e76ae5..73f8f96ff 100644 --- a/src/libs/vmisc/def.h +++ b/src/libs/vmisc/def.h @@ -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; diff --git a/src/libs/vmisc/vabstractapplication.cpp b/src/libs/vmisc/vabstractapplication.cpp index 78d06a864..9c185d0e6 100644 --- a/src/libs/vmisc/vabstractapplication.cpp +++ b/src/libs/vmisc/vabstractapplication.cpp @@ -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); +} diff --git a/src/libs/vmisc/vabstractapplication.h b/src/libs/vmisc/vabstractapplication.h index b7f9e5231..6afaf899d 100644 --- a/src/libs/vmisc/vabstractapplication.h +++ b/src/libs/vmisc/vabstractapplication.h @@ -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 diff --git a/src/libs/vmisc/vabstractvalapplication.cpp b/src/libs/vmisc/vabstractvalapplication.cpp index f9bec265a..0e36f0891 100644 --- a/src/libs/vmisc/vabstractvalapplication.cpp +++ b/src/libs/vmisc/vabstractvalapplication.cpp @@ -30,8 +30,6 @@ #include -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)); } diff --git a/src/libs/vmisc/vabstractvalapplication.h b/src/libs/vmisc/vabstractvalapplication.h index 105040311..a188388c8 100644 --- a/src/libs/vmisc/vabstractvalapplication.h +++ b/src/libs/vmisc/vabstractvalapplication.h @@ -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); diff --git a/src/libs/vpatterndb/calculator.cpp b/src/libs/vpatterndb/calculator.cpp index 3139b2d8d..105877a47 100644 --- a/src/libs/vpatterndb/calculator.cpp +++ b/src/libs/vpatterndb/calculator.cpp @@ -33,10 +33,12 @@ #include #include #include +#include #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; +} diff --git a/src/libs/vpatterndb/calculator.h b/src/libs/vpatterndb/calculator.h index 08fd4dcfb..9848e6d19 100644 --- a/src/libs/vpatterndb/calculator.h +++ b/src/libs/vpatterndb/calculator.h @@ -66,6 +66,7 @@ public: qreal EvalFormula(const QHash > *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> m_varsValues; diff --git a/src/libs/vpatterndb/vpassmark.cpp b/src/libs/vpatterndb/vpassmark.cpp index f9ccf0085..d6eda48aa 100644 --- a/src/libs/vpatterndb/vpassmark.cpp +++ b/src/libs/vpatterndb/vpassmark.cpp @@ -579,7 +579,7 @@ QVector 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(); } @@ -788,7 +788,7 @@ QVector 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(); } } @@ -804,7 +804,7 @@ QVector 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(); } } @@ -848,7 +848,7 @@ QVector VPassmark::SAPassmarkBaseLine(const QVector &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(); // Something wrong } @@ -860,7 +860,7 @@ QVector VPassmark::SAPassmarkBaseLine(const QVector &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(); // Something wrong } @@ -870,7 +870,7 @@ QVector VPassmark::SAPassmarkBaseLine(const QVector &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 VPassmark::SAPassmarkBaseLine(const QVector &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 VPassmark::SAPassmarkBaseLine(const QVector &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 VPassmark::SAPassmarkBaseLine(const QVector &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 VPassmark::SAPassmarkBaseLine(const QVector &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 { diff --git a/src/libs/vpatterndb/vpiece.cpp b/src/libs/vpatterndb/vpiece.cpp index b5c7ff486..8f22261e9 100644 --- a/src/libs/vpatterndb/vpiece.cpp +++ b/src/libs/vpatterndb/vpiece.cpp @@ -937,7 +937,7 @@ bool VPiece::GetPassmarkPreviousSAPoints(const QVector &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 &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 &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 &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(); } diff --git a/src/libs/vpatterndb/vpiecenode.cpp b/src/libs/vpatterndb/vpiecenode.cpp index 1798f2a02..719d8f089 100644 --- a/src/libs/vpatterndb/vpiecenode.cpp +++ b/src/libs/vpatterndb/vpiecenode.cpp @@ -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; } diff --git a/src/libs/vpatterndb/vpiecepath.cpp b/src/libs/vpatterndb/vpiecepath.cpp index 59c2ebb73..0cd36482c 100644 --- a/src/libs/vpatterndb/vpiecepath.cpp +++ b/src/libs/vpatterndb/vpiecepath.cpp @@ -385,7 +385,7 @@ QVector VPiecePath::PathPoints(const VContainer *data, const QVectorIsPedantic() ? throw VExceptionObjectError(errorMsg) : - qWarning() << VAbstractValApplication::patternMessageSignature + errorMsg; + qWarning() << VAbstractValApplication::warningMessageSignature + errorMsg; } } @@ -402,7 +402,7 @@ QVector VPiecePath::PathPoints(const VContainer *data, const QVectorIsPedantic() ? throw VExceptionObjectError(errorMsg) : - qWarning() << VAbstractValApplication::patternMessageSignature + errorMsg; + qWarning() << VAbstractValApplication::warningMessageSignature + errorMsg; } } diff --git a/src/libs/vpatterndb/vtranslatevars.cpp b/src/libs/vpatterndb/vtranslatevars.cpp index 0931a12b2..d75078b84 100644 --- a/src/libs/vpatterndb/vtranslatevars.cpp +++ b/src/libs/vpatterndb/vtranslatevars.cpp @@ -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 diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolcurveintersectaxis.cpp b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolcurveintersectaxis.cpp index cd59ab249..662185787 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolcurveintersectaxis.cpp +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolcurveintersectaxis.cpp @@ -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); diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoollineintersectaxis.cpp b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoollineintersectaxis.cpp index 84d8b3830..5415067c1 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoollineintersectaxis.cpp +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoollineintersectaxis.cpp @@ -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); diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoollineintersect.cpp b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoollineintersect.cpp index 995acdaa5..fe63d38dd 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoollineintersect.cpp +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoollineintersect.cpp @@ -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); diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointfromarcandtangent.cpp b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointfromarcandtangent.cpp index ff1b81a74..a7536d80b 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointfromarcandtangent.cpp +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointfromarcandtangent.cpp @@ -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); diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointfromcircleandtangent.cpp b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointfromcircleandtangent.cpp index 19fb58a80..0890794a2 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointfromcircleandtangent.cpp +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointfromcircleandtangent.cpp @@ -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); diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointofcontact.cpp b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointofcontact.cpp index 56d0f0aa5..30bbda66c 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointofcontact.cpp +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointofcontact.cpp @@ -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); diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointofintersectionarcs.cpp b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointofintersectionarcs.cpp index 23dc7842e..33069a0b1 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointofintersectionarcs.cpp +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointofintersectionarcs.cpp @@ -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); diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointofintersectioncircles.cpp b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointofintersectioncircles.cpp index 164031486..dabd037bf 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointofintersectioncircles.cpp +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointofintersectioncircles.cpp @@ -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); diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointofintersectioncurves.cpp b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointofintersectioncurves.cpp index c9178c162..0a8e0cc5d 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointofintersectioncurves.cpp +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointofintersectioncurves.cpp @@ -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); diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtooltriangle.cpp b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtooltriangle.cpp index 12d8073fc..79833306d 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtooltriangle.cpp +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtooltriangle.cpp @@ -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); diff --git a/src/libs/vtools/tools/vtoolseamallowance.cpp b/src/libs/vtools/tools/vtoolseamallowance.cpp index e69c12bab..11eb6dd34 100644 --- a/src/libs/vtools/tools/vtoolseamallowance.cpp +++ b/src/libs/vtools/tools/vtoolseamallowance.cpp @@ -1321,7 +1321,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); diff --git a/src/test/TranslationsTest/TranslationsTest.pro b/src/test/TranslationsTest/TranslationsTest.pro index 5267100dd..5ef2c3862 100644 --- a/src/test/TranslationsTest/TranslationsTest.pro +++ b/src/test/TranslationsTest/TranslationsTest.pro @@ -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 diff --git a/src/test/ValentinaTest/ValentinaTest.pro b/src/test/ValentinaTest/ValentinaTest.pro index 6dd422899..7cff6b9be 100644 --- a/src/test/ValentinaTest/ValentinaTest.pro +++ b/src/test/ValentinaTest/ValentinaTest.pro @@ -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