New function Warning.

This commit is contained in:
Roman Telezhynskyi 2020-11-20 13:18:38 +02:00
parent b3ea7d69f4
commit 80d9fbc107
48 changed files with 283 additions and 176 deletions

View File

@ -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+.

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

@ -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.

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);
}
@ -6523,7 +6523,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

@ -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;
}
}

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

@ -269,7 +269,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;
}
@ -283,7 +283,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);
@ -300,7 +300,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;
}
};
@ -326,7 +326,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;
}
@ -346,7 +346,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;
}
@ -362,7 +362,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;
}
};
@ -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(),

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

@ -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

@ -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);

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