diff --git a/appveyor.yml b/appveyor.yml new file mode 100644 index 000000000..4524ae897 --- /dev/null +++ b/appveyor.yml @@ -0,0 +1,164 @@ + +# Notes: +# - Minimal appveyor.yml file is an empty file. All sections are optional. +# - Indent each level of configuration with 2 spaces. Do not use tabs! +# - All section names are case-sensitive. +# - Section names should be unique on each level. + +#---------------------------------# +# general configuration # +#---------------------------------# + +# version format +version: '{build}-{branch}' + +os: Visual Studio 2015 + +# branches to build +branches: + # whitelist + only: + - develop + - release + +# Do not build on tags (GitHub and BitBucket) +skip_tags: true + +#---------------------------------# +# environment configuration # +#---------------------------------# + +# set clone depth +clone_depth: 1 # clone entire repository history if not defined + +# fetch repository as zip archive +shallow_clone: false # default is "false" + +environment: + matrix: + - QT5: Qt\5.7\mingw53_32 + QMAKE_GENERATOR: "MinGW Makefiles" + MINGW_PATH: C:\Qt\Tools\mingw530_32\bin + - QT5: Qt\5.7\msvc2015_64 + QMAKE_GENERATOR: "NMake Makefiles JOM" + VSVER: 14 + - QT5: Qt\5.7\msvc2015 + QMAKE_GENERATOR: "NMake Makefiles JOM" + VSVER: 14 + - QT5: Qt\5.7\msvc2013_64 + QMAKE_GENERATOR: "NMake Makefiles JOM" + VSVER: 12 + - QT5: Qt\5.7\msvc2013 + QMAKE_GENERATOR: "NMake Makefiles JOM" + VSVER: 12 + - QT5: Qt\5.6\mingw49_32 + QMAKE_GENERATOR: "MinGW Makefiles" + MINGW_PATH: C:\Qt\Tools\mingw492_32\bin + - QT5: Qt\5.6\msvc2015_64 + QMAKE_GENERATOR: "NMake Makefiles JOM" + VSVER: 14 + - QT5: Qt\5.6\msvc2015 + QMAKE_GENERATOR: "NMake Makefiles JOM" + VSVER: 14 + - QT5: Qt\5.6\msvc2013_64 + QMAKE_GENERATOR: "NMake Makefiles JOM" + VSVER: 12 + - QT5: Qt\5.6\msvc2013 + QMAKE_GENERATOR: "NMake Makefiles JOM" + VSVER: 12 + - QT5: Qt\5.5\mingw492_32 + QMAKE_GENERATOR: "MinGW Makefiles" + MINGW_PATH: C:\Qt\Tools\mingw492_32\bin + - QT5: Qt\5.5\msvc2013_64 + QMAKE_GENERATOR: "NMake Makefiles JOM" + VSVER: 12 + - QT5: Qt\5.5\msvc2013 + QMAKE_GENERATOR: "NMake Makefiles JOM" + VSVER: 12 + - QT5: Qt\5.4\mingw491_32 + QMAKE_GENERATOR: "MinGW Makefiles" + MINGW_PATH: C:\Qt\Tools\mingw491_32\bin + - QT5: Qt\5.4\msvc2013_64_opengl + QMAKE_GENERATOR: "NMake Makefiles JOM" + VSVER: 12 + - QT5: Qt\5.4\msvc2013_opengl + QMAKE_GENERATOR: "NMake Makefiles JOM" + VSVER: 12 + - QT5: Qt\5.3\mingw482_32 + QMAKE_GENERATOR: "MinGW Makefiles" + MINGW_PATH: C:\Qt\Tools\mingw482_32\bin + - QT5: Qt\5.3\msvc2013_64_opengl + QMAKE_GENERATOR: "NMake Makefiles JOM" + VSVER: 12 + - QT5: Qt\5.3\msvc2013_opengl + QMAKE_GENERATOR: "NMake Makefiles JOM" + VSVER: 12 + +# scripts that are called at very beginning, before repo cloning +init: + # Path before + - path + # Installing various utilities + #- choco install cppcheck + #- if "%QMAKE_GENERATOR%" == "MinGW Makefiles" choco install -y InnoSetup + #- if "%QMAKE_GENERATOR%" == "MinGW Makefiles" if "%PLATFORM%" == "X86" set PATH="C:\Program Files\Inno Setup 5";%PATH% + #- if "%QMAKE_GENERATOR%" == "MinGW Makefiles" if "%PLATFORM%" == "X64" set PATH="C:\Program Files (x86)\Inno Setup 5";%PATH% + - set QTDIR=C:\%QT5% + - set PATH=%QTDIR%\bin;C:\Tools\PsTools;C:\Program Files\Mercurial\ #;%PATH% + - if "%QMAKE_GENERATOR%" == "MinGW Makefiles" set PATH=%MINGW_PATH%;%PATH% + - if "%QMAKE_GENERATOR%" == "NMake Makefiles JOM" set PATH=C:\Qt\Tools\QtCreator\bin;%PATH% + - set PATH=C:\projects\valentina\build\src\libs\vpropertyexplorer\bin;C:\projects\valentina\build\src\libs\qmuparser\bin;%PATH% + # Set VC variables for the platform + - if "%QMAKE_GENERATOR%" == "NMake Makefiles JOM" if %PLATFORM% == x64 call "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\x86_amd64\vcvarsx86_amd64.bat" + - if "%QMAKE_GENERATOR%" == "NMake Makefiles JOM" if %PLATFORM% == x86 call "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\vcvars32.bat" + - ps: $env:VSCOMNTOOLS=(Get-Content ("env:VS" + "$env:VSVER" + "0COMNTOOLS")) + - if NOT "%QMAKE_GENERATOR%" == "MinGW Makefiles" echo "Using Visual Studio %VSVER%.0 at %VSCOMNTOOLS%" + - if "%QMAKE_GENERATOR%" == "MinGW Makefiles" echo "Using MinGW" + - if "%CMAKE_GENERATOR%" == "NMake Makefiles JOM" if "%PLATFORM%" == "X86" call "%VSCOMNTOOLS%\..\..\VC\vcvarsall.bat" + - if "%CMAKE_GENERATOR%" == "NMake Makefiles JOM" if "%PLATFORM%" == "X64" "C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\SetEnv.cmd" /x64 + - if "%CMAKE_GENERATOR%" == "NMake Makefiles JOM" if "%PLATFORM%" == "X64" call "%VSCOMNTOOLS%\..\..\VC\vcvarsall.bat" x86_amd64 + # Path after + - path + - qmake -v + +#---------------------------------# +# build configuration # +#---------------------------------# + +before_build: + - cd c:\projects\valentina + - md build + +# to run your custom scripts instead of automatic MSBuild +build_script: + - cd build + #- cppcheck --error-exitcode=1 --quiet --inline-suppr --template '{file}:{line}:{message}:{id}' --force --report-progress --enable=performance,portability ..\src + - qmake ..\Valentina.pro -r CONFIG+=noDebugSymbols CONFIG+=no_ccache CONFIG+=checkWarnings + - if not "%QMAKE_GENERATOR%" == "MinGW Makefiles" (nmake) else (mingw32-make -j%NUMBER_OF_PROCESSORS%) + +# scripts to run after build +after_build: + #- if "%QMAKE_GENERATOR%" == "MinGW Makefiles" mingw32-make install + +# to run your custom scripts instead of automatic tests +test_script: + - if "%QMAKE_GENERATOR%" == "MinGW Makefiles" (mingw32-make check) + +# to disable automatic tests +#test: off + +matrix: + fast_finish: true + +#---------------------------------# +# notifications # +#---------------------------------# + +notifications: + # Email + - provider: Email + to: + - dismine@gmail.com + - susan.spencer@gmail.com + - zhuravska19@gmail.com + on_build_status_changed: true diff --git a/bitbucket-pipelines.yml b/bitbucket-pipelines.yml index 280d44d27..ca612ce6a 100644 --- a/bitbucket-pipelines.yml +++ b/bitbucket-pipelines.yml @@ -21,4 +21,4 @@ pipelines: - make -j$(nproc) - export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:"/opt/atlassian/bitbucketci/agent/build/build/src/libs/vpropertyexplorer/bin:/opt/atlassian/bitbucketci/agent/build/build/src/libs/qmuparser/bin" # QTestLib require GUI support for some tests - - xvfb-run -a make check \ No newline at end of file + - xvfb-run -a make check diff --git a/src/app/translations.pri b/src/app/translations.pri index 10e52c35f..bb620bfa2 100755 --- a/src/app/translations.pri +++ b/src/app/translations.pri @@ -45,7 +45,11 @@ for(lang, LANGUAGES) { # Some systems use special name for lrelease. For example opensuse 13.2 has lrelease-qt5. isEmpty(LRELEASE){ - LRELEASE = lrelease + win32{ + LRELEASE = lrelease.exe + } else { + LRELEASE = lrelease + } } # Run generation *.qm file for available *.ts files each time you run qmake. diff --git a/src/app/valentina/mainwindow.cpp b/src/app/valentina/mainwindow.cpp index dcae0ecf1..76077f3ee 100644 --- a/src/app/valentina/mainwindow.cpp +++ b/src/app/valentina/mainwindow.cpp @@ -680,6 +680,7 @@ void MainWindow::ClosedDialogWithApply(int result) { VDrawTool *vtool= static_cast(dialogTool->GetAssociatedTool()); vtool->DialogLinkDestroy(); + connect(vtool, &VDrawTool::ToolTip, this, &MainWindow::ShowToolTip); } ArrowTool(); // If insert not to the end of file call lite parse diff --git a/src/app/valentina/mainwindowsnogui.cpp b/src/app/valentina/mainwindowsnogui.cpp index 6fe592e43..d481ac942 100644 --- a/src/app/valentina/mainwindowsnogui.cpp +++ b/src/app/valentina/mainwindowsnogui.cpp @@ -59,7 +59,7 @@ //--------------------------------------------------------------------------------------------------------------------- MainWindowsNoGUI::MainWindowsNoGUI(QWidget *parent) - : QMainWindow(parent), listDetails(QVector()), currentScene(nullptr), tempSceneLayout(nullptr), + : VAbstractMainWindow(parent), listDetails(QVector()), currentScene(nullptr), tempSceneLayout(nullptr), pattern(new VContainer(qApp->TrVars(), qApp->patternUnitP())), doc(nullptr), papers(QList()), shadows(QList()), scenes(QList()), details(QList >()), undoAction(nullptr), redoAction(nullptr), actionDockWidgetToolOptions(nullptr), actionDockWidgetGroups(nullptr), diff --git a/src/app/valentina/mainwindowsnogui.h b/src/app/valentina/mainwindowsnogui.h index e1c4f41e4..4d5780319 100644 --- a/src/app/valentina/mainwindowsnogui.h +++ b/src/app/valentina/mainwindowsnogui.h @@ -37,13 +37,14 @@ #include "xml/vpattern.h" #include "dialogs/dialogsavelayout.h" #include "../vlayout/vlayoutgenerator.h" +#include "../vwidgets/vabstractmainwindow.h" class QGraphicsScene; class QPrinter; class PosterData; -class MainWindowsNoGUI : public QMainWindow +class MainWindowsNoGUI : public VAbstractMainWindow { Q_OBJECT public: diff --git a/src/app/valentina/xml/vpattern.cpp b/src/app/valentina/xml/vpattern.cpp index d4b209223..9a3169d1a 100644 --- a/src/app/valentina/xml/vpattern.cpp +++ b/src/app/valentina/xml/vpattern.cpp @@ -27,6 +27,7 @@ *************************************************************************/ #include "vpattern.h" +#include "../vwidgets/vabstractmainwindow.h" #include "../vtools/tools/vdatatool.h" #include "../vtools/tools/vtooldetail.h" #include "../vtools/tools/vtooluniondetails.h" @@ -1992,8 +1993,16 @@ void VPattern::ParseToolSpline(VMainGraphicsScene *scene, QDomElement &domElemen const QString color = GetParametrString(domElement, AttrColor, ColorBlack); const quint32 duplicate = GetParametrUInt(domElement, AttrDuplicate, "0"); - VToolSpline::Create(id, point1, point4, a1, a2, l1, l2, duplicate, color, scene, this, data, parse, - Source::FromFile); + VToolSpline *spl = VToolSpline::Create(id, point1, point4, a1, a2, l1, l2, duplicate, color, scene, this, + data, parse, Source::FromFile); + + if (spl != nullptr) + { + VAbstractMainWindow *window = qobject_cast(qApp->getMainWindow()); + SCASSERT(window != nullptr); + connect(spl, &VToolSpline::ToolTip, window, &VAbstractMainWindow::ShowToolTip); + } + //Rewrite attribute formula. Need for situation when we have wrong formula. if (a1 != angle1 || a2 != angle2 || l1 != length1 || l2 != length2) { @@ -2173,7 +2182,16 @@ void VPattern::ParseToolSplinePath(VMainGraphicsScene *scene, const QDomElement l1 = length1; l2 = length2; - VToolSplinePath::Create(id, points, a1, a2, l1, l2, color, scene, this, data, parse, Source::FromFile); + VToolSplinePath *spl = VToolSplinePath::Create(id, points, a1, a2, l1, l2, color, scene, this, data, parse, + Source::FromFile); + + if (spl != nullptr) + { + VAbstractMainWindow *window = qobject_cast(qApp->getMainWindow()); + SCASSERT(window != nullptr); + connect(spl, &VToolSplinePath::ToolTip, window, &VAbstractMainWindow::ShowToolTip); + } + //Rewrite attribute formula. Need for situation when we have wrong formula. int count = 0; for (qint32 i = 0; i < num; ++i) diff --git a/src/libs/vlayout/vbank.cpp b/src/libs/vlayout/vbank.cpp index 108c97a0b..53e402dc1 100644 --- a/src/libs/vlayout/vbank.cpp +++ b/src/libs/vlayout/vbank.cpp @@ -28,11 +28,28 @@ #include "vbank.h" #include "vlayoutdetail.h" +#include "../vmisc/logging.h" #include #include #include +#if defined(Q_CC_CLANG) + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wmissing-prototypes" +#elif defined(Q_CC_INTEL) + #pragma warning( push ) + #pragma warning( disable: 1418 ) +#endif + +Q_LOGGING_CATEGORY(lBank, "layout.bank") + +#if defined(Q_CC_CLANG) + #pragma clang diagnostic pop +#elif defined(Q_CC_INTEL) + #pragma warning( pop ) +#endif + //--------------------------------------------------------------------------------------------------------------------- VBank::VBank() :details(QVector()), unsorted(QHash()), big(QHash()), @@ -158,12 +175,14 @@ bool VBank::Prepare() { if (layoutWidth <= 0) { + qCDebug(lBank, "Preparing data for layout error: Layout paper sheet <= 0"); prepare = false; return prepare; } if (details.isEmpty()) { + qCDebug(lBank, "Preparing data for layout error: List of details is empty"); prepare = false; return prepare; } @@ -183,6 +202,7 @@ bool VBank::Prepare() const qint64 square = details.at(i).Square(); if (square <= 0) { + qCDebug(lBank, "Preparing data for layout error: Detail squere <= 0"); prepare = false; return prepare; } diff --git a/src/libs/vtools/dialogs/tools/dialogcubicbezierpath.cpp b/src/libs/vtools/dialogs/tools/dialogcubicbezierpath.cpp index 155ea6620..a0f1145c6 100644 --- a/src/libs/vtools/dialogs/tools/dialogcubicbezierpath.cpp +++ b/src/libs/vtools/dialogs/tools/dialogcubicbezierpath.cpp @@ -29,6 +29,7 @@ #include "dialogcubicbezierpath.h" #include "ui_dialogcubicbezierpath.h" #include "../../visualization/path/vistoolcubicbezierpath.h" +#include "../vwidgets/vabstractmainwindow.h" #if QT_VERSION < QT_VERSION_CHECK(5, 1, 0) # include "../vmisc/vmath.h" @@ -128,7 +129,9 @@ void DialogCubicBezierPath::ChosenObject(quint32 id, const SceneObject &type) if (path.CountPoints() == 1) { visPath->VisualMode(NULL_ID); - connect(visPath, &VisToolCubicBezierPath::ToolTip, [this](const QString &toolTip){emit ToolTip(toolTip);}); + VAbstractMainWindow *window = qobject_cast(qApp->getMainWindow()); + SCASSERT(window != nullptr); + connect(visPath, &VisToolCubicBezierPath::ToolTip, window, &VAbstractMainWindow::ShowToolTip); } else { diff --git a/src/libs/vtools/dialogs/tools/dialogcurveintersectaxis.cpp b/src/libs/vtools/dialogs/tools/dialogcurveintersectaxis.cpp index 2ed8d355f..df369c3ec 100644 --- a/src/libs/vtools/dialogs/tools/dialogcurveintersectaxis.cpp +++ b/src/libs/vtools/dialogs/tools/dialogcurveintersectaxis.cpp @@ -36,6 +36,7 @@ #include "../../../vwidgets/vmaingraphicsscene.h" #include "../../tools/vabstracttool.h" #include "../support/dialogeditwrongformula.h" +#include "../vwidgets/vabstractmainwindow.h" #include @@ -217,8 +218,10 @@ void DialogCurveIntersectAxis::ChosenObject(quint32 id, const SceneObject &type) { number++; line->VisualMode(id); - connect(line, &VisToolCurveIntersectAxis::ToolTip, - [this](const QString &toolTip){emit ToolTip(toolTip);}); + VAbstractMainWindow *window = qobject_cast(qApp->getMainWindow()); + SCASSERT(window != nullptr); + connect(line, &VisToolCurveIntersectAxis::ToolTip, window, &VAbstractMainWindow::ShowToolTip); + } } break; diff --git a/src/libs/vtools/dialogs/tools/dialogendline.cpp b/src/libs/vtools/dialogs/tools/dialogendline.cpp index a4dbe1a5e..4d45c0532 100644 --- a/src/libs/vtools/dialogs/tools/dialogendline.cpp +++ b/src/libs/vtools/dialogs/tools/dialogendline.cpp @@ -36,6 +36,7 @@ #include "../../../vwidgets/vmaingraphicsscene.h" #include "../../tools/vabstracttool.h" #include "../support/dialogeditwrongformula.h" +#include "../vwidgets/vabstractmainwindow.h" #include //--------------------------------------------------------------------------------------------------------------------- @@ -167,7 +168,9 @@ void DialogEndLine::ChosenObject(quint32 id, const SceneObject &type) if (SetObject(id, ui->comboBoxBasePoint, "")) { vis->VisualMode(id); - connect(vis.data(), &Visualization::ToolTip, [this](const QString &toolTip){emit ToolTip(toolTip);}); + VAbstractMainWindow *window = qobject_cast(qApp->getMainWindow()); + SCASSERT(window != nullptr); + connect(vis.data(), &Visualization::ToolTip, window, &VAbstractMainWindow::ShowToolTip); prepare = true; } } diff --git a/src/libs/vtools/dialogs/tools/dialoglineintersectaxis.cpp b/src/libs/vtools/dialogs/tools/dialoglineintersectaxis.cpp index 01a153a9b..870914df1 100644 --- a/src/libs/vtools/dialogs/tools/dialoglineintersectaxis.cpp +++ b/src/libs/vtools/dialogs/tools/dialoglineintersectaxis.cpp @@ -36,6 +36,7 @@ #include "../../../vwidgets/vmaingraphicsscene.h" #include "../../tools/vabstracttool.h" #include "../support/dialogeditwrongformula.h" +#include "../vwidgets/vabstractmainwindow.h" #include @@ -242,8 +243,9 @@ void DialogLineIntersectAxis::ChosenObject(quint32 id, const SceneObject &type) { number++; line->VisualMode(id); - connect(line, &VisToolLineIntersectAxis::ToolTip, - [this](const QString &toolTip){emit ToolTip(toolTip);}); + VAbstractMainWindow *window = qobject_cast(qApp->getMainWindow()); + SCASSERT(window != nullptr); + connect(line, &VisToolLineIntersectAxis::ToolTip, window, &VAbstractMainWindow::ShowToolTip); } break; case (1): diff --git a/src/libs/vtools/dialogs/tools/dialogrotation.cpp b/src/libs/vtools/dialogs/tools/dialogrotation.cpp index 69611de94..77b1a23fd 100644 --- a/src/libs/vtools/dialogs/tools/dialogrotation.cpp +++ b/src/libs/vtools/dialogs/tools/dialogrotation.cpp @@ -38,6 +38,7 @@ #include "../../visualization/line/vistoolrotation.h" #include "../support/dialogeditwrongformula.h" #include "../qmuparser/qmudef.h" +#include "../vwidgets/vabstractmainwindow.h" //--------------------------------------------------------------------------------------------------------------------- DialogRotation::DialogRotation(const VContainer *data, const quint32 &toolId, QWidget *parent) @@ -215,8 +216,9 @@ void DialogRotation::ChosenObject(quint32 id, const SceneObject &type) { VisToolRotation *operation = qobject_cast(vis); SCASSERT(operation != nullptr); - - connect(operation, &Visualization::ToolTip, [this](const QString &toolTip){emit ToolTip(toolTip);}); + VAbstractMainWindow *window = qobject_cast(qApp->getMainWindow()); + SCASSERT(window != nullptr); + connect(operation, &Visualization::ToolTip, window, &VAbstractMainWindow::ShowToolTip); operation->SetOriginPointId(id); operation->RefreshGeometry(); diff --git a/src/libs/vtools/dialogs/tools/dialogsplinepath.cpp b/src/libs/vtools/dialogs/tools/dialogsplinepath.cpp index 9355f8ca7..30fcc043b 100644 --- a/src/libs/vtools/dialogs/tools/dialogsplinepath.cpp +++ b/src/libs/vtools/dialogs/tools/dialogsplinepath.cpp @@ -33,6 +33,7 @@ #include "../../visualization/path/vistoolsplinepath.h" #include "../support/dialogeditwrongformula.h" #include "../qmuparser/qmuparsererror.h" +#include "../vwidgets/vabstractmainwindow.h" #include @@ -181,7 +182,10 @@ void DialogSplinePath::ChosenObject(quint32 id, const SceneObject &type) if (path.CountPoints() == 1) { visPath->VisualMode(NULL_ID); - connect(visPath, &VisToolSplinePath::ToolTip, [this](const QString &toolTip){emit ToolTip(toolTip);}); + VAbstractMainWindow *window = qobject_cast(qApp->getMainWindow()); + SCASSERT(window != nullptr); + connect(visPath, &VisToolSplinePath::ToolTip, window, &VAbstractMainWindow::ShowToolTip); + connect(visPath, &VisToolSplinePath::PathChanged, this, &DialogSplinePath::PathUpdated); } else diff --git a/src/libs/vtools/tools/drawTools/toolcurve/vabstractspline.cpp b/src/libs/vtools/tools/drawTools/toolcurve/vabstractspline.cpp index 57faed240..2bcfba7c3 100644 --- a/src/libs/vtools/tools/drawTools/toolcurve/vabstractspline.cpp +++ b/src/libs/vtools/tools/drawTools/toolcurve/vabstractspline.cpp @@ -261,6 +261,10 @@ VSpline VAbstractSpline::CorrectedSpline(const VSpline &spline, const SplinePoin if (position == SplinePointPosition::FirstPoint) { QLineF line(spline.GetP1(), pos); + if (QGuiApplication::keyboardModifiers() == Qt::ShiftModifier) + { + line.setAngle(VisLine::CorrectAngle(line.angle())); + } qreal newAngle1 = line.angle(); QString newAngle1F = QString().setNum(newAngle1); @@ -287,6 +291,10 @@ VSpline VAbstractSpline::CorrectedSpline(const VSpline &spline, const SplinePoin else { QLineF line(spline.GetP4(), pos); + if (QGuiApplication::keyboardModifiers() == Qt::ShiftModifier) + { + line.setAngle(VisLine::CorrectAngle(line.angle())); + } qreal newAngle2 = line.angle(); QString newAngle2F = QString().setNum(newAngle2); diff --git a/src/libs/vtools/tools/drawTools/toolcurve/vabstractspline.h b/src/libs/vtools/tools/drawTools/toolcurve/vabstractspline.h index 148d499b0..5b77b1dc9 100644 --- a/src/libs/vtools/tools/drawTools/toolcurve/vabstractspline.h +++ b/src/libs/vtools/tools/drawTools/toolcurve/vabstractspline.h @@ -30,6 +30,7 @@ #define VABSTRACTSPLINE_H #include "../vdrawtool.h" +#include "visualization/line/visline.h" #include diff --git a/src/libs/vtools/tools/vabstracttool.h b/src/libs/vtools/tools/vabstracttool.h index 8126fdfb8..526d03936 100644 --- a/src/libs/vtools/tools/vabstracttool.h +++ b/src/libs/vtools/tools/vabstracttool.h @@ -95,6 +95,8 @@ signals: * @brief FullUpdateTree emit if need reparse pattern file. */ void LiteUpdateTree(const Document &parse); + + void ToolTip(const QString &toolTip); protected: /** @brief doc dom document container */ VAbstractPattern *doc; @@ -166,6 +168,7 @@ inline void VAbstractTool::AddVisualization() scene->addItem(visual); vis = visual; + connect(vis, &Visualization::ToolTip, [=] (const QString &toolTip) {emit ToolTip(toolTip);}); } #endif // VABSTRACTTOOL_H diff --git a/src/libs/vtools/visualization/line/visline.cpp b/src/libs/vtools/visualization/line/visline.cpp index f8ccb91ce..7a245acdf 100644 --- a/src/libs/vtools/visualization/line/visline.cpp +++ b/src/libs/vtools/visualization/line/visline.cpp @@ -43,7 +43,7 @@ VisLine::~VisLine() {} //--------------------------------------------------------------------------------------------------------------------- -qreal VisLine::CorrectAngle(const qreal &angle) const +qreal VisLine::CorrectAngle(const qreal &angle) { qreal ang = angle; if (angle > 360) diff --git a/src/libs/vtools/visualization/line/visline.h b/src/libs/vtools/visualization/line/visline.h index 75c4783d6..80b2ca141 100644 --- a/src/libs/vtools/visualization/line/visline.h +++ b/src/libs/vtools/visualization/line/visline.h @@ -44,8 +44,8 @@ public: virtual int type() const Q_DECL_OVERRIDE {return Type;} enum { Type = UserType + static_cast(Vis::Line)}; + static qreal CorrectAngle(const qreal &angle); protected: - qreal CorrectAngle(const qreal &angle) const; QPointF Ray(const QPointF &firstPoint, const qreal &angle) const; QPointF Ray(const QPointF &firstPoint) const; QLineF Axis(const QPointF &p, const qreal &angle) const; diff --git a/src/libs/vtools/visualization/path/vistoolcubicbezierpath.cpp b/src/libs/vtools/visualization/path/vistoolcubicbezierpath.cpp index d394ec40b..708819cb3 100644 --- a/src/libs/vtools/visualization/path/vistoolcubicbezierpath.cpp +++ b/src/libs/vtools/visualization/path/vistoolcubicbezierpath.cpp @@ -275,6 +275,11 @@ void VisToolCubicBezierPath::RefreshToolTip() { Visualization::toolTip = tr("Curved path: select more points for complete segment"); } + + if (mode == Mode::Show) + { + Visualization::toolTip = ""; + } emit ToolTip(Visualization::toolTip); } } diff --git a/src/libs/vtools/visualization/path/vistoolspline.cpp b/src/libs/vtools/visualization/path/vistoolspline.cpp index 3c19651b7..b135f9009 100644 --- a/src/libs/vtools/visualization/path/vistoolspline.cpp +++ b/src/libs/vtools/visualization/path/vistoolspline.cpp @@ -66,7 +66,9 @@ VisToolSpline::VisToolSpline(const VContainer *data, QGraphicsItem *parent) //--------------------------------------------------------------------------------------------------------------------- VisToolSpline::~VisToolSpline() -{} +{ + emit ToolTip(""); +} //--------------------------------------------------------------------------------------------------------------------- void VisToolSpline::RefreshGeometry() @@ -150,6 +152,8 @@ void VisToolSpline::RefreshGeometry() { VSpline spline(*first, *second, angle1, angle2, kAsm1, kAsm2, kCurve); DrawPath(this, spline.GetPath(PathDirection::Show), mainColor, Qt::SolidLine, Qt::RoundCap); + Visualization::toolTip = tr("Use Shift for sticking angle!"); + emit ToolTip(Visualization::toolTip); } } } diff --git a/src/libs/vtools/visualization/path/vistoolsplinepath.cpp b/src/libs/vtools/visualization/path/vistoolsplinepath.cpp index 1842c8c1a..894305358 100644 --- a/src/libs/vtools/visualization/path/vistoolsplinepath.cpp +++ b/src/libs/vtools/visualization/path/vistoolsplinepath.cpp @@ -48,6 +48,7 @@ VisToolSplinePath::~VisToolSplinePath() { qDeleteAll(ctrlPoints); qDeleteAll(points); + emit ToolTip(""); } //--------------------------------------------------------------------------------------------------------------------- @@ -99,6 +100,11 @@ void VisToolSplinePath::RefreshGeometry() Visualization::toolTip = tr("Curved path: select three or more points, " "Enter - finish creation"); } + if (mode == Mode::Show) + { + Visualization::toolTip = tr("Use Shift for sticking angle!"); + emit ToolTip(Visualization::toolTip); + } } } diff --git a/src/libs/vwidgets/vabstractmainwindow.cpp b/src/libs/vwidgets/vabstractmainwindow.cpp new file mode 100644 index 000000000..350c1e98d --- /dev/null +++ b/src/libs/vwidgets/vabstractmainwindow.cpp @@ -0,0 +1,36 @@ +/************************************************************************ + ** + ** @file + ** @author Valentina Zhuravska + ** @date 19 7, 2016 + ** + ** @brief + ** @copyright + ** This source code is part of the Valentine project, a pattern making + ** program, whose allow create and modeling patterns of clothing. + ** Copyright (C) 2016 Valentina project + ** All Rights Reserved. + ** + ** Valentina is free software: you can redistribute it and/or modify + ** it under the terms of the GNU General Public License as published by + ** the Free Software Foundation, either version 3 of the License, or + ** (at your option) any later version. + ** + ** Valentina is distributed in the hope that it will be useful, + ** but WITHOUT ANY WARRANTY; without even the implied warranty of + ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + ** GNU General Public License for more details. + ** + ** You should have received a copy of the GNU General Public License + ** along with Valentina. If not, see . + ** + *************************************************************************/ + +#include "vabstractmainwindow.h" + +VAbstractMainWindow::VAbstractMainWindow(QWidget *parent) : QMainWindow(parent) +{} + +//--------------------------------------------------------------------------------------------------------------------- +VAbstractMainWindow::~VAbstractMainWindow() +{} diff --git a/src/libs/vwidgets/vabstractmainwindow.h b/src/libs/vwidgets/vabstractmainwindow.h new file mode 100644 index 000000000..c51aefb35 --- /dev/null +++ b/src/libs/vwidgets/vabstractmainwindow.h @@ -0,0 +1,45 @@ +/************************************************************************ + ** + ** @file + ** @author Valentina Zhuravska + ** @date 19 7, 2016 + ** + ** @brief + ** @copyright + ** This source code is part of the Valentine project, a pattern making + ** program, whose allow create and modeling patterns of clothing. + ** Copyright (C) 2016 Valentina project + ** All Rights Reserved. + ** + ** Valentina is free software: you can redistribute it and/or modify + ** it under the terms of the GNU General Public License as published by + ** the Free Software Foundation, either version 3 of the License, or + ** (at your option) any later version. + ** + ** Valentina is distributed in the hope that it will be useful, + ** but WITHOUT ANY WARRANTY; without even the implied warranty of + ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + ** GNU General Public License for more details. + ** + ** You should have received a copy of the GNU General Public License + ** along with Valentina. If not, see . + ** + *************************************************************************/ + +#ifndef VABSTRACTMAINWINDOW_H +#define VABSTRACTMAINWINDOW_H + +#include + +class VAbstractMainWindow : public QMainWindow +{ + Q_OBJECT +public: + explicit VAbstractMainWindow(QWidget *parent = nullptr); + virtual ~VAbstractMainWindow() Q_DECL_OVERRIDE; + +public slots: + virtual void ShowToolTip(const QString &toolTip)=0; +}; + +#endif // VABSTRACTMAINWINDOW_H diff --git a/src/libs/vwidgets/vwidgets.pri b/src/libs/vwidgets/vwidgets.pri index d80356e60..042607eb2 100644 --- a/src/libs/vwidgets/vwidgets.pri +++ b/src/libs/vwidgets/vwidgets.pri @@ -1,27 +1,29 @@ -# ADD TO EACH PATH $$PWD VARIABLE!!!!!! -# This need for corect working file translations.pro - -SOURCES += \ - $$PWD/vmaingraphicsscene.cpp \ - $$PWD/vmaingraphicsview.cpp \ - $$PWD/vwidgetpopup.cpp \ - $$PWD/vcontrolpointspline.cpp \ - $$PWD/vgraphicssimpletextitem.cpp \ - $$PWD/vsimplepoint.cpp \ - $$PWD/vabstractsimple.cpp \ - $$PWD/vnobrushscalepathitem.cpp \ - $$PWD/vsimplecurve.cpp - -win32-msvc*:SOURCES += $$PWD/stable.cpp - -HEADERS += \ - $$PWD/stable.h \ - $$PWD/vmaingraphicsscene.h \ - $$PWD/vmaingraphicsview.h \ - $$PWD/vwidgetpopup.h \ - $$PWD/vcontrolpointspline.h \ - $$PWD/vgraphicssimpletextitem.h \ - $$PWD/vsimplepoint.h \ - $$PWD/vabstractsimple.h \ - $$PWD/vnobrushscalepathitem.h \ - $$PWD/vsimplecurve.h +# ADD TO EACH PATH $$PWD VARIABLE!!!!!! +# This need for corect working file translations.pro + +SOURCES += \ + $$PWD/vmaingraphicsscene.cpp \ + $$PWD/vmaingraphicsview.cpp \ + $$PWD/vwidgetpopup.cpp \ + $$PWD/vcontrolpointspline.cpp \ + $$PWD/vgraphicssimpletextitem.cpp \ + $$PWD/vsimplepoint.cpp \ + $$PWD/vabstractsimple.cpp \ + $$PWD/vnobrushscalepathitem.cpp \ + $$PWD/vsimplecurve.cpp \ + $$PWD/vabstractmainwindow.cpp + +win32-msvc*:SOURCES += $$PWD/stable.cpp + +HEADERS += \ + $$PWD/stable.h \ + $$PWD/vmaingraphicsscene.h \ + $$PWD/vmaingraphicsview.h \ + $$PWD/vwidgetpopup.h \ + $$PWD/vcontrolpointspline.h \ + $$PWD/vgraphicssimpletextitem.h \ + $$PWD/vsimplepoint.h \ + $$PWD/vabstractsimple.h \ + $$PWD/vnobrushscalepathitem.h \ + $$PWD/vsimplecurve.h \ + $$PWD/vabstractmainwindow.h diff --git a/src/test/ValentinaTest/abstracttest.cpp b/src/test/ValentinaTest/abstracttest.cpp index c671f4d9f..dc60f451e 100644 --- a/src/test/ValentinaTest/abstracttest.cpp +++ b/src/test/ValentinaTest/abstracttest.cpp @@ -138,9 +138,11 @@ bool AbstractTest::CopyRecursively(const QString &srcFilePath, const QString &tg { QDir targetDir(tgtFilePath); targetDir.cdUp(); - if (not targetDir.mkdir(QFileInfo(tgtFilePath).fileName())) + const QString dirName = QFileInfo(tgtFilePath).fileName(); + if (not targetDir.mkdir(dirName)) { - QWARN("Can't create subdir./n"); + const QString msg = QString("Can't create dir '%1'.").arg(dirName); + QWARN(qUtf8Printable(msg)); return false; } QDir sourceDir(srcFilePath); @@ -158,9 +160,37 @@ bool AbstractTest::CopyRecursively(const QString &srcFilePath, const QString &tg } else { - if (not QFile::copy(srcFilePath, tgtFilePath)) + if (QFileInfo(tgtFilePath).exists()) { - QWARN("Can't copy file./n"); + const QString msg = QString("File '%1' exists.").arg(srcFilePath); + QWARN(qUtf8Printable(msg)); + + if (QFile::remove(tgtFilePath)) + { + QWARN("File successfully removed."); + } + else + { + QWARN("Can't remove file."); + return false; + } + } + + // Check error: Cannot open %file for input + QFile srcFile(srcFilePath); + if (not srcFile.open(QFile::ReadOnly)) + { + const QString msg = QString("Can't copy file '%1'. Error: %2").arg(srcFilePath).arg(srcFile.errorString()); + QWARN(qUtf8Printable(msg)); + return false; + } + srcFile.close(); + + if (not srcFile.copy(tgtFilePath)) + { + const QString msg = QString("Can't copy file '%1' to '%2'. Error: %3").arg(srcFilePath).arg(tgtFilePath) + .arg(srcFile.errorString()); + QWARN(qUtf8Printable(msg)); return false; } }