diff --git a/.hgignore b/.hgignore index 6f58ef173..2e058acbc 100644 --- a/.hgignore +++ b/.hgignore @@ -22,3 +22,6 @@ latex/ # Ignore file used QtCreator for user profile. *.pro.user + +# Ignore file Qt translation. +*.qm diff --git a/Valentina.pro b/Valentina.pro index 14e0c70e0..b523128a3 100644 --- a/Valentina.pro +++ b/Valentina.pro @@ -11,7 +11,8 @@ QT += core gui widgets xml svg TARGET = Valentina TEMPLATE = app CONFIG -= debug_and_release debug_and_release_target -CONFIG += c++11 +CONFIG += c++11 precompile_header +QMAKE_CXX = ccache g++ SOURCES += main.cpp\ mainwindow.cpp \ @@ -95,7 +96,17 @@ SOURCES += main.cpp\ exception/vexceptionconversionerror.cpp \ exception/vexceptionemptyparameter.cpp \ exception/vexceptionobjecterror.cpp \ - widgets/vapplication.cpp + widgets/vapplication.cpp \ + exception/vexceptionuniqueid.cpp \ + tools/drawTools/vtoolheight.cpp \ + tools/modelingTools/vmodelingheight.cpp \ + dialogs/dialogheight.cpp \ + tools/drawTools/vtooltriangle.cpp \ + tools/modelingTools/vmodelingtriangle.cpp \ + dialogs/dialogtriangle.cpp \ + dialogs/dialogpointofintersection.cpp \ + tools/drawTools/vtoolpointofintersection.cpp \ + tools/modelingTools/vmodelingpointofintersection.cpp HEADERS += mainwindow.h \ widgets/vmaingraphicsscene.h \ @@ -185,7 +196,18 @@ HEADERS += mainwindow.h \ exception/vexceptionconversionerror.h \ exception/vexceptionemptyparameter.h \ exception/vexceptionobjecterror.h \ - widgets/vapplication.h + widgets/vapplication.h \ + exception/vexceptionuniqueid.h \ + tools/drawTools/vtoolheight.h \ + tools/modelingTools/vmodelingheight.h \ + dialogs/dialogheight.h \ + tools/drawTools/vtooltriangle.h \ + tools/modelingTools/vmodelingtriangle.h \ + dialogs/dialogtriangle.h \ + dialogs/dialogpointofintersection.h \ + tools/drawTools/vtoolpointofintersection.h \ + tools/modelingTools/vmodelingpointofintersection.h \ + version.h FORMS += mainwindow.ui \ dialogs/dialogsinglepoint.ui \ @@ -203,7 +225,10 @@ FORMS += mainwindow.ui \ dialogs/dialoghistory.ui \ dialogs/dialogpointofcontact.ui \ dialogs/dialogdetail.ui \ - tablewindow.ui + tablewindow.ui \ + dialogs/dialogheight.ui \ + dialogs/dialogtriangle.ui \ + dialogs/dialogpointofintersection.ui RESOURCES += \ icon.qrc \ @@ -245,7 +270,7 @@ CONFIG(debug, debug|release){ QMAKE_EXTRA_COMPILERS += lrelease lrelease.input = TRANSLATIONS lrelease.output = ${QMAKE_FILE_BASE}.qm - lrelease.commands = $$[QT_INSTALL_BINS]/lrelease ${QMAKE_FILE_IN} -qm ${DESTDIR}${QMAKE_FILE_BASE}.qm + lrelease.commands = $$[QT_INSTALL_BINS]/lrelease ${QMAKE_FILE_IN} -qm "bin/"${QMAKE_FILE_BASE}.qm lrelease.CONFIG += no_link target_predeps } @@ -261,5 +286,3 @@ message(Data files: $$[QT_INSTALL_DATA]) message(Translation files: $$[QT_INSTALL_TRANSLATIONS]) message(Settings: $$[QT_INSTALL_SETTINGS]) message(Examples: $$[QT_INSTALL_EXAMPLES]) - - diff --git a/container/calculator.cpp b/container/calculator.cpp index d161724bb..36e7202e9 100644 --- a/container/calculator.cpp +++ b/container/calculator.cpp @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -20,7 +20,6 @@ ****************************************************************************/ #include "calculator.h" -#include #define DELIMITER 1 #define VARIABLE 2 diff --git a/container/calculator.h b/container/calculator.h index ad16c7f65..607dd648e 100644 --- a/container/calculator.h +++ b/container/calculator.h @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -22,50 +22,48 @@ #ifndef CALCULATOR_H #define CALCULATOR_H -#include #include "vcontainer.h" /** * @brief The Calculator клас калькулятора формул лекал. Виконує розрахунок формул з підставлянням * значеннь зміних. */ -class Calculator -{ +class Calculator{ public: /** * @brief Calculator конструктор класу. Використовується при розрахунку лекала. * @param data покажчик на контейнер змінних */ - explicit Calculator(const VContainer *data); + explicit Calculator(const VContainer *data); /** * @brief eval виконує розрахунок формули. * @param prog рядко в якому зберігається формула. * @return значення формули. */ - qreal eval(QString prog, QString *errorMsg); + qreal eval(QString prog, QString *errorMsg); private: Q_DISABLE_COPY(Calculator) - QString *errorMsg; + QString *errorMsg; /** * @brief token теперішня лексема. */ - QString token; + QString token; /** * @brief tok внутрішне представлення лексеми. */ - qint32 tok; + qint32 tok; /** * @brief token_type тип лексеми. */ - qint32 token_type; + qint32 token_type; /** * @brief prog рядок в якому зберігається формула. */ - QString prog; /* Содержит анализируемое выражение */ + QString prog; /* Содержит анализируемое выражение */ /** * @brief index номер символу в рядку формули. */ - qint32 index; /* Индекс символа в строке*/ + qint32 index; /* Индекс символа в строке*/ /** * @brief data контейнер усіх змінних. */ @@ -73,16 +71,16 @@ private: /** * @brief debugFormula рядок розшифрованої формули. */ - QString debugFormula; + QString debugFormula; /** * @brief get_exp виконує розрахунок формули. * @return значення формули. */ - qreal get_exp(); + qreal get_exp(); /** * @brief get_token повертає наступну лексему. */ - void get_token();/* Получить лексему */ + void get_token();/* Получить лексему */ /** * @brief StrChr перевіряє чи символ належить рядку. * @param string рядок @@ -93,37 +91,37 @@ private: /** * @brief putback повертає зчитану лексему назад у потік. */ - void putback(); + void putback(); /** * @brief level2 метод додавання і віднімання двух термів. * @param result результат операції. */ - void level2(qreal *result); + void level2(qreal *result); /** * @brief level3 метод множення, ділення, знаходження процентів. * @param result результат операції. */ - void level3(qreal *result); + void level3(qreal *result); /** * @brief level4 метод знаходження степені двох чисел. * @param result результат операції. */ - void level4(qreal *result); + void level4(qreal *result); /** * @brief level5 метод знаходження унарного плюса чи мінуса. * @param result результат операції. */ - void level5(qreal *result); + void level5(qreal *result); /** * @brief level6 метод обробки виразу в круглих лапках. * @param result результат операції. */ - void level6(qreal *result); + void level6(qreal *result); /** * @brief primitive метод визначення значення зміної по її імені. * @param result результат операції. */ - void primitive(qreal *result); + void primitive(qreal *result); /** * @brief arith виконання специфікованої арифметики. Результат записується в перший елемент. * @param o знак операції. @@ -142,8 +140,8 @@ private: * @param s ім'я змінної. * @return значення зміної. */ - qreal find_var(QString s); - void serror(qint32 error); + qreal find_var(QString s); + void serror(qint32 error); /** * @brief look_up пошук відповідного внутрішнього формату для теперішньої лексеми в таблиці лексем. текущей лексемы в таблице лексем * @param s ім'я лексеми. diff --git a/container/vcontainer.cpp b/container/vcontainer.cpp index 8f20e2036..7b94c7ab2 100644 --- a/container/vcontainer.cpp +++ b/container/vcontainer.cpp @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -20,21 +20,19 @@ ****************************************************************************/ #include "vcontainer.h" -#include -#include "options.h" #include qint64 VContainer::_id = 0; -VContainer::VContainer():base(QMap()), points(QMap()), - modelingPoints(QMap()), - standartTable(QMap()), incrementTable(QMap()), - lengthLines(QMap()), lineAngles(QMap()), splines(QMap()), - modelingSplines(QMap()), - lengthSplines(QMap()), arcs(QMap()), modelingArcs(QMap()), - lengthArcs(QMap()), - splinePaths(QMap()), modelingSplinePaths(QMap()), - details(QMap()){ +VContainer::VContainer():base(QHash()), points(QHash()), + modelingPoints(QHash()), + standartTable(QHash()), incrementTable(QHash()), + lengthLines(QHash()), lineAngles(QHash()), splines(QHash()), + modelingSplines(QHash()), + lengthSplines(QHash()), arcs(QHash()), modelingArcs(QHash()), + lengthArcs(QHash()), + splinePaths(QHash()), modelingSplinePaths(QHash()), + details(QHash()){ SetSize(500); SetGrowth(1760); CreateManTableIGroup (); @@ -45,15 +43,15 @@ VContainer &VContainer::operator =(const VContainer &data){ return *this; } -VContainer::VContainer(const VContainer &data):base(QMap()), points(QMap()), - modelingPoints(QMap()), - standartTable(QMap()), incrementTable(QMap()), - lengthLines(QMap()), lineAngles(QMap()), splines(QMap()), - modelingSplines(QMap()), - lengthSplines(QMap()), arcs(QMap()), modelingArcs(QMap()), - lengthArcs(QMap()), - splinePaths(QMap()), modelingSplinePaths(QMap()), - details(QMap()){ +VContainer::VContainer(const VContainer &data):base(QHash()), points(QHash()), + modelingPoints(QHash()), + standartTable(QHash()), incrementTable(QHash()), + lengthLines(QHash()), lineAngles(QHash()), splines(QHash()), + modelingSplines(QHash()), + lengthSplines(QHash()), arcs(QHash()), modelingArcs(QHash()), + lengthArcs(QHash()), + splinePaths(QHash()), modelingSplinePaths(QHash()), + details(QHash()){ setData(data); } @@ -64,7 +62,7 @@ void VContainer::setData(const VContainer &data){ standartTable = *data.DataStandartTable(); incrementTable = *data.DataIncrementTable(); lengthLines = *data.DataLengthLines(); - lineAngles = *data.DataLengthArcs(); + lineAngles = *data.DataLineAngles(); splines = *data.DataSplines(); modelingSplines = *data.DataModelingSplines(); lengthSplines = *data.DataLengthSplines(); @@ -77,7 +75,7 @@ void VContainer::setData(const VContainer &data){ } template -val VContainer::GetObject(const QMap &obj, key id){ +val VContainer::GetObject(const QHash &obj, key id){ if(obj.contains(id)){ return obj.value(id); } else { @@ -85,15 +83,6 @@ val VContainer::GetObject(const QMap &obj, key id){ } } - -VPointF VContainer::GetPoint(qint64 id) const{ - return GetObject(points, id); -} - -VPointF VContainer::GetModelingPoint(qint64 id) const{ - return GetObject(modelingPoints, id); -} - VStandartTableCell VContainer::GetStandartTableCell(const QString &name) const{ Q_ASSERT(!name.isEmpty()); return GetObject(standartTable, name); @@ -109,49 +98,31 @@ qreal VContainer::GetLine(const QString &name) const{ return GetObject(lengthLines, name); } -qreal VContainer::GetLineArc(const QString &name) const{ +qreal VContainer::GetLengthArc(const QString &name) const{ + Q_ASSERT(!name.isEmpty()); + return GetObject(lengthArcs, name); +} + +qreal VContainer::GetLengthSpline(const QString &name) const{ + Q_ASSERT(!name.isEmpty()); + return GetObject(lengthSplines, name); +} + +qreal VContainer::GetLineAngle(const QString &name) const{ Q_ASSERT(!name.isEmpty()); return GetObject(lineAngles, name); } -VSpline VContainer::GetSpline(qint64 id) const{ - return GetObject(splines, id); +qint64 VContainer::AddPoint(const VPointF &point){ + return AddObject(points, point); } -VSpline VContainer::GetModelingSpline(qint64 id) const{ - return GetObject(modelingSplines, id); +qint64 VContainer::AddModelingPoint(const VPointF &point){ +return AddObject(modelingPoints, point); } -VArc VContainer::GetArc(qint64 id) const{ - return GetObject(arcs, id); -} - -VArc VContainer::GetModelingArc(qint64 id) const{ - return GetObject(modelingArcs, id); -} - -VSplinePath VContainer::GetSplinePath(qint64 id) const{ - return GetObject(splinePaths, id); -} - -VSplinePath VContainer::GetModelingSplinePath(qint64 id) const{ - return GetObject(modelingSplinePaths, id); -} - -VDetail VContainer::GetDetail(qint64 id) const{ - return GetObject(details, id); -} - -void VContainer::AddStandartTableCell(const QString& name, const VStandartTableCell& cell){ - standartTable[name] = cell; -} - -void VContainer::AddIncrementTableRow(const QString& name, const VIncrementTableRow& cell){ - incrementTable[name] = cell; -} - -qint64 VContainer::getId(){ - return _id; +qint64 VContainer::AddDetail(const VDetail &detail){ + return AddObject(details, detail); } qint64 VContainer::getNextId(){ @@ -168,11 +139,18 @@ void VContainer::UpdateId(qint64 newId){ QPainterPath VContainer::ContourPath(qint64 idDetail) const{ VDetail detail = GetDetail(idDetail); QVector points; + QVector pointsEkv; for(qint32 i = 0; i< detail.CountNode(); ++i){ switch(detail[i].getTypeTool()){ case(Tool::NodePoint):{ VPointF point = GetModelingPoint(detail[i].getId()); points.append(point.toQPointF()); + if(detail.getSupplement() == true){ + QPointF pEkv = point.toQPointF(); + pEkv.setX(pEkv.x()+detail[i].getMx()); + pEkv.setY(pEkv.y()+detail[i].getMy()); + pointsEkv.append(pEkv); + } } break; case(Tool::NodeArc):{ @@ -181,8 +159,15 @@ QPainterPath VContainer::ContourPath(qint64 idDetail) const{ qreal lenReverse = GetLengthContour(points, GetReversePoint(arc.GetPoints())); if(len1 <= lenReverse){ points << arc.GetPoints(); + if(detail.getSupplement() == true){ + pointsEkv << biasPoints(arc.GetPoints(), detail[i].getMx(), detail[i].getMy()); + } } else { points << GetReversePoint(arc.GetPoints()); + if(detail.getSupplement() == true){ + pointsEkv << biasPoints(GetReversePoint(arc.GetPoints()), detail[i].getMx(), + detail[i].getMy()); + } } } break; @@ -192,8 +177,15 @@ QPainterPath VContainer::ContourPath(qint64 idDetail) const{ qreal lenReverse = GetLengthContour(points, GetReversePoint(spline.GetPoints())); if(len1 <= lenReverse){ points << spline.GetPoints(); + if(detail.getSupplement() == true){ + pointsEkv << biasPoints(spline.GetPoints(), detail[i].getMx(), detail[i].getMy()); + } } else { points << GetReversePoint(spline.GetPoints()); + if(detail.getSupplement() == true){ + pointsEkv << biasPoints(GetReversePoint(spline.GetPoints()), detail[i].getMx(), + detail[i].getMy()); + } } } break; @@ -203,27 +195,57 @@ QPainterPath VContainer::ContourPath(qint64 idDetail) const{ qreal lenReverse = GetLengthContour(points, GetReversePoint(splinePath.GetPathPoints())); if(len1 <= lenReverse){ points << splinePath.GetPathPoints(); + if(detail.getSupplement() == true){ + pointsEkv << biasPoints(splinePath.GetPathPoints(), detail[i].getMx(), detail[i].getMy()); + } } else { points << GetReversePoint(splinePath.GetPathPoints()); + if(detail.getSupplement() == true){ + pointsEkv << biasPoints(GetReversePoint(splinePath.GetPathPoints()), detail[i].getMx(), + detail[i].getMy()); + } } } break; + case(Tool::SplineTool): + break;//Nothing to do, just ignore. default: qWarning()<<"Get wrong tool type. Ignore."< VContainer::biasPoints(const QVector &points, const qreal &mx, const qreal &my) const{ + QVector p; + for(qint32 i = 0; i < points.size(); ++i){ + QPointF point = points.at(i); + point.setX(point.x() + mx); + point.setY(point.x() + my); + p.append(point); + } + return p; +} + QPainterPath VContainer::Equidistant(QVector points, const Detail::Equidistant &eqv, const qreal &width) const{ QPainterPath ekv; @@ -377,75 +399,27 @@ QVector VContainer::CheckLoops(const QVector &points) const{ } void VContainer::PrepareDetails(QVector &list) const{ - QMapIterator iDetail(details); + QHashIterator iDetail(details); while (iDetail.hasNext()) { iDetail.next(); list.append(new VItem(ContourPath(iDetail.key()), list.size())); } } -void VContainer::RemoveIncrementTableRow(const QString& name){ - incrementTable.remove(name); -} - template -void VContainer::UpdateObject(QMap &obj, const qint64 &id, const val& point){ +void VContainer::UpdateObject(QHash &obj, const qint64 &id, const val& point){ Q_ASSERT_X(id > 0, Q_FUNC_INFO, "id <= 0"); obj[id] = point; UpdateId(id); } -void VContainer::UpdatePoint(qint64 id, const VPointF& point){ - UpdateObject(points, id, point); -} - -void VContainer::UpdateModelingPoint(qint64 id, const VPointF &point){ - UpdateObject(modelingPoints, id, point); -} - -void VContainer::UpdateDetail(qint64 id, const VDetail &detail){ - UpdateObject(details, id, detail); -} - -void VContainer::UpdateSpline(qint64 id, const VSpline &spl){ - UpdateObject(splines, id, spl); -} - -void VContainer::UpdateModelingSpline(qint64 id, const VSpline &spl){ - UpdateObject(modelingSplines, id, spl); -} - -void VContainer::UpdateSplinePath(qint64 id, const VSplinePath &splPath){ - UpdateObject(splinePaths, id, splPath); -} - -void VContainer::UpdateModelingSplinePath(qint64 id, const VSplinePath &splPath){ - UpdateObject(modelingSplinePaths, id, splPath); -} - -void VContainer::UpdateArc(qint64 id, const VArc &arc){ - UpdateObject(arcs, id, arc); -} - -void VContainer::UpdateModelingArc(qint64 id, const VArc &arc){ - UpdateObject(modelingArcs, id, arc); -} - -void VContainer::UpdateStandartTableCell(const QString& name, const VStandartTableCell& cell){ - standartTable[name] = cell; -} - -void VContainer::UpdateIncrementTableRow(const QString& name, const VIncrementTableRow& cell){ - incrementTable[name] = cell; -} - void VContainer::AddLengthSpline(const QString &name, const qreal &value){ Q_ASSERT(!name.isEmpty()); lengthSplines[name] = value; } void VContainer::AddLengthArc(const qint64 ¢er, const qint64 &id){ - AddLengthArc(GetNameArc(center, id), GetArc(id).GetLength()); + AddLengthArc(GetNameArc(center, id), toMM(GetArc(id).GetLength())); } void VContainer::AddLengthArc(const QString &name, const qreal &value){ @@ -497,46 +471,6 @@ void VContainer::ClearObject(){ splinePaths.clear(); } -void VContainer::ClearIncrementTable(){ - incrementTable.clear(); -} - -void VContainer::ClearLengthLines(){ - lengthLines.clear(); -} - -void VContainer::ClearLengthSplines(){ - lengthSplines.clear(); -} - -void VContainer::ClearLengthArcs(){ - lengthArcs.clear(); -} - -void VContainer::ClearLineAngles(){ - lineAngles.clear(); -} - -void VContainer::SetSize(qint32 size){ - base["Сг"] = size; -} - -void VContainer::SetGrowth(qint32 growth){ - base["Р"] = growth; -} - -qint32 VContainer::size() const{ - return base.value("Сг"); -} - -qint32 VContainer::growth() const{ - return base.value("Р"); -} - -bool VContainer::IncrementTableContains(const QString& name){ - return incrementTable.contains(name); -} - qreal VContainer::FindVar(const QString &name, bool *ok)const{ if(base.contains(name)){ *ok = true; @@ -563,74 +497,14 @@ qreal VContainer::FindVar(const QString &name, bool *ok)const{ *ok = true; return lineAngles.value(name); } + if(lengthSplines.contains(name)){ + *ok = true; + return lengthSplines.value(name); + } *ok = false; return 0; } -const QMap *VContainer::DataPoints() const{ - return &points; -} - -const QMap *VContainer::DataModelingPoints() const{ - return &modelingPoints; -} - -const QMap *VContainer::DataSplines() const{ - return &splines; -} - -const QMap *VContainer::DataModelingSplines() const{ - return &modelingSplines; -} - -const QMap *VContainer::DataArcs() const{ - return &arcs; -} - -const QMap *VContainer::DataModelingArcs() const{ - return &modelingArcs; -} - -const QMap *VContainer::DataBase() const{ - return &base; -} - -const QMap *VContainer::DataStandartTable() const{ - return &standartTable; -} - -const QMap *VContainer::DataIncrementTable() const{ - return &incrementTable; -} - -const QMap *VContainer::DataLengthLines() const{ - return &lengthLines; -} - -const QMap *VContainer::DataLengthSplines() const{ - return &lengthSplines; -} - -const QMap *VContainer::DataLengthArcs() const{ - return &lengthArcs; -} - -const QMap *VContainer::DataLineAngles() const{ - return &lineAngles; -} - -const QMap *VContainer::DataSplinePaths() const{ - return &splinePaths; -} - -const QMap *VContainer::DataModelingSplinePaths() const{ - return &modelingSplinePaths; -} - -const QMap *VContainer::DataDetails() const{ - return &details; -} - void VContainer::AddLine(const qint64 &firstPointId, const qint64 &secondPointId, Draw::Draws mode){ QString nameLine = GetNameLine(firstPointId, secondPointId, mode); VPointF first; @@ -642,30 +516,11 @@ void VContainer::AddLine(const qint64 &firstPointId, const qint64 &secondPointId first = GetModelingPoint(firstPointId); second = GetModelingPoint(secondPointId); } - AddLengthLine(nameLine, QLineF(first.toQPointF(), second.toQPointF()).length()/PrintDPI*25.4); + AddLengthLine(nameLine, toMM(QLineF(first.toQPointF(), second.toQPointF()).length())); nameLine = GetNameLineAngle(firstPointId, secondPointId, mode); AddLineAngle(nameLine, QLineF(first.toQPointF(), second.toQPointF()).angle()); } -template -qint64 VContainer::AddObject(QMap &obj, const val& value){ - qint64 id = getNextId(); - obj[id] = value; - return id; -} - -qint64 VContainer::AddPoint(const VPointF& point){ - return AddObject(points, point); -} - -qint64 VContainer::AddModelingPoint(const VPointF &point){ - return AddObject(modelingPoints, point); -} - -qint64 VContainer::AddDetail(const VDetail &detail){ - return AddObject(details, detail); -} - qint64 VContainer::AddSpline(const VSpline &spl){ return AddObject(splines, spl); } @@ -690,6 +545,13 @@ qint64 VContainer::AddModelingArc(const VArc &arc){ return AddObject(modelingArcs, arc); } +template +qint64 VContainer::AddObject(QHash &obj, const val& value){ + qint64 id = getNextId(); + obj[id] = value; + return id; +} + QString VContainer::GetNameLine(const qint64 &firstPoint, const qint64 &secondPoint, Draw::Draws mode) const{ VPointF first; VPointF second; @@ -760,7 +622,43 @@ QString VContainer::GetNameArc(const qint64 ¢er, const qint64 &id, Draw::Dra } else { centerPoint = GetModelingPoint(center); } - return QString ("Arc(%1)%2").arg(centerPoint.name()).arg(id); + return QString ("Arc_%1_%2").arg(centerPoint.name()).arg(id); +} + +void VContainer::UpdatePoint(qint64 id, const VPointF &point){ + UpdateObject(points, id, point); +} + +void VContainer::UpdateModelingPoint(qint64 id, const VPointF &point){ + UpdateObject(modelingPoints, id, point); +} + +void VContainer::UpdateDetail(qint64 id, const VDetail &detail){ + UpdateObject(details, id, detail); +} + +void VContainer::UpdateSpline(qint64 id, const VSpline &spl){ + UpdateObject(splines, id, spl); +} + +void VContainer::UpdateModelingSpline(qint64 id, const VSpline &spl){ + UpdateObject(modelingSplines, id, spl); +} + +void VContainer::UpdateSplinePath(qint64 id, const VSplinePath &splPath){ + UpdateObject(splinePaths, id, splPath); +} + +void VContainer::UpdateModelingSplinePath(qint64 id, const VSplinePath &splPath){ + UpdateObject(modelingSplinePaths, id, splPath); +} + +void VContainer::UpdateArc(qint64 id, const VArc &arc){ + UpdateObject(arcs, id, arc); +} + +void VContainer::UpdateModelingArc(qint64 id, const VArc &arc){ + UpdateObject(modelingArcs, id, arc); } void VContainer::AddLengthLine(const QString &name, const qreal &value){ @@ -768,20 +666,6 @@ void VContainer::AddLengthLine(const QString &name, const qreal &value){ lengthLines[name] = value; } -void VContainer::AddLengthSpline(const qint64 &firstPointId, const qint64 &secondPointId, Draw::Draws mode){ - QString nameLine = GetNameSpline(firstPointId, secondPointId, mode); - VPointF first; - VPointF second; - if(mode == Draw::Calculation){ - first = GetPoint(firstPointId); - second = GetPoint(secondPointId); - } else { - first = GetModelingPoint(firstPointId); - second = GetModelingPoint(secondPointId); - } - AddLengthSpline(nameLine, QLineF(first.toQPointF(), second.toQPointF()).length()); -} - void VContainer::CreateManTableIGroup (){ AddStandartTableCell("Pkor", VStandartTableCell(84, 0, 3)); AddStandartTableCell("Pkor", VStandartTableCell(84, 0, 3)); @@ -795,18 +679,17 @@ void VContainer::CreateManTableIGroup (){ AddStandartTableCell("Vzy", VStandartTableCell(1328, 0, 49)); AddStandartTableCell("Vlop", VStandartTableCell(1320, 0, 49)); AddStandartTableCell("Vps", VStandartTableCell(811, -1, 36)); - AddStandartTableCell("Osh", VStandartTableCell(404,8, 2)); - AddStandartTableCell("OgI", VStandartTableCell(1034, 36, 4)); - AddStandartTableCell("OgII", VStandartTableCell(1044, 38, 2)); - AddStandartTableCell("OgIII", VStandartTableCell(1000, 40, 0)); - AddStandartTableCell("Ot", VStandartTableCell(780, 40, 0)); - AddStandartTableCell("Ob", VStandartTableCell(984, 30, 10)); - AddStandartTableCell("ObI", VStandartTableCell(964, 24, 12)); + AddStandartTableCell("Ssh", VStandartTableCell(202,4, 1)); + AddStandartTableCell("SgI", VStandartTableCell(517, 18, 2)); + AddStandartTableCell("SgII", VStandartTableCell(522, 19, 1)); + AddStandartTableCell("SgIII", VStandartTableCell(500, 20, 0)); + AddStandartTableCell("St", VStandartTableCell(390, 20, 0)); + AddStandartTableCell("Sb", VStandartTableCell(492, 15, 5)); + AddStandartTableCell("SbI", VStandartTableCell(482, 12, 6)); AddStandartTableCell("Obed", VStandartTableCell(566, 18, 6)); AddStandartTableCell("Ok", VStandartTableCell(386, 8, 8)); AddStandartTableCell("Oi", VStandartTableCell(380, 8, 6)); AddStandartTableCell("Osch", VStandartTableCell(234, 4, 4)); - AddStandartTableCell("Os", VStandartTableCell(350, 2, 8)); AddStandartTableCell("Dsb", VStandartTableCell(1120, 0, 44)); AddStandartTableCell("Dsp", VStandartTableCell(1110, 0, 43)); AddStandartTableCell("Dn", VStandartTableCell(826, -3, 37)); diff --git a/container/vcontainer.h b/container/vcontainer.h index fce8a378a..94c02498e 100644 --- a/container/vcontainer.h +++ b/container/vcontainer.h @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -22,156 +22,155 @@ #ifndef VCONTAINER_H #define VCONTAINER_H -#include #include "vstandarttablecell.h" #include "vincrementtablerow.h" #include "geometry/varc.h" #include "geometry/vsplinepath.h" #include "geometry/vdetail.h" #include "widgets/vitem.h" -#include /** * @brief The VContainer class */ -class VContainer -{ +class VContainer{ Q_DECLARE_TR_FUNCTIONS(VContainer) public: /** * @brief VContainer */ - VContainer(); - VContainer &operator=(const VContainer &data); - VContainer(const VContainer &data); - void setData(const VContainer &data); + VContainer(); + VContainer &operator=(const VContainer &data); + VContainer(const VContainer &data); + void setData(const VContainer &data); /** * @brief GetPoint * @param id * @return */ - VPointF GetPoint(qint64 id) const; - VPointF GetModelingPoint(qint64 id) const; - VStandartTableCell GetStandartTableCell(const QString& name) const; - VIncrementTableRow GetIncrementTableRow(const QString& name) const; - qreal GetLine(const QString &name) const; - qreal GetLineArc(const QString &name) const; - VSpline GetSpline(qint64 id) const; - VSpline GetModelingSpline(qint64 id) const; - VArc GetArc(qint64 id) const; - VArc GetModelingArc(qint64 id) const; - VSplinePath GetSplinePath(qint64 id) const; - VSplinePath GetModelingSplinePath(qint64 id) const; - VDetail GetDetail(qint64 id) const; - static qint64 getId(); - qint64 AddPoint(const VPointF& point); - qint64 AddModelingPoint(const VPointF& point); - qint64 AddDetail(const VDetail& detail); - void AddStandartTableCell(const QString& name, const VStandartTableCell& cell); - void AddIncrementTableRow(const QString& name, const VIncrementTableRow &cell); - void AddLengthLine(const QString &name, const qreal &value); - void AddLengthSpline(const qint64 &firstPointId, const qint64 &secondPointId, - Draw::Draws mode = Draw::Calculation); - void AddLengthSpline(const QString &name, const qreal &value); - void AddLengthArc(const qint64 ¢er, const qint64 &id); - void AddLengthArc(const QString &name, const qreal &value); - void AddLineAngle(const QString &name, const qreal &value); - void AddLine(const qint64 &firstPointId, const qint64 &secondPointId, - Draw::Draws mode = Draw::Calculation); - qint64 AddSpline(const VSpline& spl); - qint64 AddModelingSpline(const VSpline& spl); - qint64 AddSplinePath(const VSplinePath& splPath); - qint64 AddModelingSplinePath(const VSplinePath& splPath); - qint64 AddArc(const VArc& arc); - qint64 AddModelingArc(const VArc& arc); - QString GetNameLine(const qint64 &firstPoint, const qint64 &secondPoint, - Draw::Draws mode = Draw::Calculation) const; - QString GetNameLineAngle(const qint64 &firstPoint, const qint64 &secondPoint, - Draw::Draws mode = Draw::Calculation) const; - QString GetNameSpline(const qint64 &firstPoint, const qint64 &secondPoint, - Draw::Draws mode = Draw::Calculation) const; - QString GetNameSplinePath(const VSplinePath &path, - Draw::Draws mode = Draw::Calculation) const; - QString GetNameArc(const qint64 ¢er, const qint64 &id, + inline VPointF GetPoint(qint64 id) const {return GetObject(points, id);} + inline VPointF GetModelingPoint(qint64 id) const {return GetObject(modelingPoints, id);} + VStandartTableCell GetStandartTableCell(const QString& name) const; + VIncrementTableRow GetIncrementTableRow(const QString& name) const; + qreal GetLine(const QString &name) const; + qreal GetLengthArc(const QString &name) const; + qreal GetLengthSpline(const QString &name) const; + qreal GetLineAngle(const QString &name) const; + inline VSpline GetSpline(qint64 id) const {return GetObject(splines, id);} + inline VSpline GetModelingSpline(qint64 id) const {return GetObject(modelingSplines, id);} + inline VArc GetArc(qint64 id) const {return GetObject(arcs, id);} + inline VArc GetModelingArc(qint64 id) const {return GetObject(modelingArcs, id);} + inline VSplinePath GetSplinePath(qint64 id) const {return GetObject(splinePaths, id);} + inline VSplinePath GetModelingSplinePath(qint64 id) const {return GetObject(modelingSplinePaths, id);} + inline VDetail GetDetail(qint64 id) const {return GetObject(details, id);} + static qint64 getId() {return _id;} + qint64 AddPoint(const VPointF& point); + qint64 AddModelingPoint(const VPointF& point); + qint64 AddDetail(const VDetail& detail); + inline void AddStandartTableCell(const QString& name, const VStandartTableCell& cell) + {standartTable[name] = cell;} + inline void AddIncrementTableRow(const QString& name, const VIncrementTableRow &cell) + {incrementTable[name] = cell;} + void AddLengthLine(const QString &name, const qreal &value); + void AddLengthSpline(const QString &name, const qreal &value); + void AddLengthArc(const qint64 ¢er, const qint64 &id); + void AddLengthArc(const QString &name, const qreal &value); + void AddLineAngle(const QString &name, const qreal &value); + void AddLine(const qint64 &firstPointId, const qint64 &secondPointId, + Draw::Draws mode = Draw::Calculation); + qint64 AddSpline(const VSpline& spl); + qint64 AddModelingSpline(const VSpline& spl); + qint64 AddSplinePath(const VSplinePath& splPath); + qint64 AddModelingSplinePath(const VSplinePath& splPath); + qint64 AddArc(const VArc& arc); + qint64 AddModelingArc(const VArc& arc); + QString GetNameLine(const qint64 &firstPoint, const qint64 &secondPoint, Draw::Draws mode = Draw::Calculation) const; - void UpdatePoint(qint64 id, const VPointF& point); - void UpdateModelingPoint(qint64 id, const VPointF& point); - void UpdateDetail(qint64 id, const VDetail& detail); - void UpdateSpline(qint64 id, const VSpline& spl); - void UpdateModelingSpline(qint64 id, const VSpline& spl); - void UpdateSplinePath(qint64 id, const VSplinePath& splPath); - void UpdateModelingSplinePath(qint64 id, const VSplinePath& splPath); - void UpdateArc(qint64 id, const VArc& arc); - void UpdateModelingArc(qint64 id, const VArc& arc); - void UpdateStandartTableCell(const QString& name, const VStandartTableCell& cell); - void UpdateIncrementTableRow(const QString& name, const VIncrementTableRow& cell); - qreal GetValueStandartTableCell(const QString& name) const; - qreal GetValueIncrementTableRow(const QString& name) const; - void Clear(); - void ClearObject(); - void ClearIncrementTable(); - void ClearLengthLines(); - void ClearLengthSplines(); - void ClearLengthArcs(); - void ClearLineAngles(); - void SetSize(qint32 size); - void SetGrowth(qint32 growth); - qint32 size() const; - qint32 growth() const; - qreal FindVar(const QString& name, bool *ok)const; - bool IncrementTableContains(const QString& name); - static qint64 getNextId(); - void RemoveIncrementTableRow(const QString& name); - const QMap *DataPoints() const; - const QMap *DataModelingPoints() const; - const QMap *DataSplines() const; - const QMap *DataModelingSplines() const; - const QMap *DataArcs() const; - const QMap *DataModelingArcs() const; - const QMap *DataBase() const; - const QMap *DataStandartTable() const; - const QMap *DataIncrementTable() const; - const QMap *DataLengthLines() const; - const QMap *DataLengthSplines() const; - const QMap *DataLengthArcs() const; - const QMap *DataLineAngles() const; - const QMap *DataSplinePaths() const; - const QMap *DataModelingSplinePaths() const; - const QMap *DataDetails() const; - static void UpdateId(qint64 newId); - QPainterPath ContourPath(qint64 idDetail) const; - QPainterPath Equidistant(QVector points, const Detail::Equidistant &eqv, - const qreal &width)const; - static QLineF ParallelLine(const QLineF &line, qreal width ); - static QPointF SingleParallelPoint(const QLineF &line, const qreal &angle, const qreal &width); - QVector EkvPoint(const QLineF &line1, const QLineF &line2, const qreal &width)const; - QVector CheckLoops(const QVector &points) const; - void PrepareDetails(QVector & list)const; + QString GetNameLineAngle(const qint64 &firstPoint, const qint64 &secondPoint, + Draw::Draws mode = Draw::Calculation) const; + QString GetNameSpline(const qint64 &firstPoint, const qint64 &secondPoint, + Draw::Draws mode = Draw::Calculation) const; + QString GetNameSplinePath(const VSplinePath &path, + Draw::Draws mode = Draw::Calculation) const; + QString GetNameArc(const qint64 ¢er, const qint64 &id, Draw::Draws mode = Draw::Calculation) const; + void UpdatePoint(qint64 id, const VPointF& point); + void UpdateModelingPoint(qint64 id, const VPointF& point); + void UpdateDetail(qint64 id, const VDetail& detail); + void UpdateSpline(qint64 id, const VSpline& spl); + void UpdateModelingSpline(qint64 id, const VSpline& spl); + void UpdateSplinePath(qint64 id, const VSplinePath& splPath); + void UpdateModelingSplinePath(qint64 id, const VSplinePath& splPath); + void UpdateArc(qint64 id, const VArc& arc); + void UpdateModelingArc(qint64 id, const VArc& arc); + inline void UpdateStandartTableCell(const QString& name, const VStandartTableCell& cell) + {standartTable[name] = cell;} + inline void UpdateIncrementTableRow(const QString& name, const VIncrementTableRow& cell) + {incrementTable[name] = cell;} + qreal GetValueStandartTableCell(const QString& name) const; + qreal GetValueIncrementTableRow(const QString& name) const; + void Clear(); + void ClearObject(); + inline void ClearIncrementTable() {incrementTable.clear();} + inline void ClearLengthLines() {lengthLines.clear();} + inline void ClearLengthSplines() {lengthSplines.clear();} + inline void ClearLengthArcs() {lengthArcs.clear();} + inline void ClearLineAngles() {lineAngles.clear();} + inline void SetSize(qint32 size) {base["Сг"] = size;} + inline void SetGrowth(qint32 growth) {base["Р"] = growth;} + inline qint32 size() const {return base.value("Сг");} + inline qint32 growth() const {return base.value("Р");} + qreal FindVar(const QString& name, bool *ok)const; + inline bool IncrementTableContains(const QString& name) {return incrementTable.contains(name);} + static qint64 getNextId(); + inline void RemoveIncrementTableRow(const QString& name) {incrementTable.remove(name);} + inline const QHash *DataPoints() const {return &points;} + inline const QHash *DataModelingPoints() const {return &modelingPoints;} + inline const QHash *DataSplines() const {return &splines;} + inline const QHash *DataModelingSplines() const {return &modelingSplines;} + inline const QHash *DataArcs() const {return &arcs;} + inline const QHash *DataModelingArcs() const {return &modelingArcs;} + inline const QHash *DataBase() const {return &base;} + inline const QHash *DataStandartTable() const {return &standartTable;} + inline const QHash *DataIncrementTable() const {return &incrementTable;} + inline const QHash *DataLengthLines() const {return &lengthLines;} + inline const QHash *DataLengthSplines() const {return &lengthSplines;} + inline const QHash *DataLengthArcs() const {return &lengthArcs;} + inline const QHash *DataLineAngles() const {return &lineAngles;} + inline const QHash *DataSplinePaths() const {return &splinePaths;} + inline const QHash *DataModelingSplinePaths() const {return &modelingSplinePaths;} + inline const QHash *DataDetails() const {return &details;} + static void UpdateId(qint64 newId); + QPainterPath ContourPath(qint64 idDetail) const; + QVector biasPoints(const QVector &points, const qreal &mx, const qreal &my) const; + QPainterPath Equidistant(QVector points, const Detail::Equidistant &eqv, const qreal &width)const; + static QLineF ParallelLine(const QLineF &line, qreal width ); + static QPointF SingleParallelPoint(const QLineF &line, const qreal &angle, const qreal &width); + QVector EkvPoint(const QLineF &line1, const QLineF &line2, const qreal &width)const; + QVector CheckLoops(const QVector &points) const; + void PrepareDetails(QVector & list) const; private: - static qint64 _id; - QMap base; - QMap points; - QMap modelingPoints; - QMap standartTable; - QMap incrementTable; - QMap lengthLines; - QMap lineAngles; - QMap splines; - QMap modelingSplines; - QMap lengthSplines; - QMap arcs; - QMap modelingArcs; - QMap lengthArcs; - QMap splinePaths; - QMap modelingSplinePaths; - QMap details; - template static val GetObject(const QMap &obj, key id); - template static void UpdateObject(QMap &obj, const qint64 &id, - const val& point); - template static qint64 AddObject(QMap &obj, const val& value); - void CreateManTableIGroup (); - QVector GetReversePoint(const QVector &points)const; - qreal GetLengthContour(const QVector &contour, const QVector &newPoints)const; + static qint64 _id; + QHash base; + QHash points; + QHash modelingPoints; + QHash standartTable; + QHash incrementTable; + QHash lengthLines; + QHash lineAngles; + QHash splines; + QHash modelingSplines; + QHash lengthSplines; + QHash arcs; + QHash modelingArcs; + QHash lengthArcs; + QHash splinePaths; + QHash modelingSplinePaths; + QHash details; + void CreateManTableIGroup (); + QVector GetReversePoint(const QVector &points)const; + qreal GetLengthContour(const QVector &contour, const QVector &newPoints)const; + template static val GetObject(const QHash &obj, key id); + template static void UpdateObject(QHash &obj, const qint64 &id, const val& point); + template static qint64 AddObject(QHash &obj, const val& value); }; #endif // VCONTAINER_H diff --git a/container/vincrementtablerow.cpp b/container/vincrementtablerow.cpp index 5240da150..e6e3670a4 100644 --- a/container/vincrementtablerow.cpp +++ b/container/vincrementtablerow.cpp @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -29,42 +29,4 @@ VIncrementTableRow::VIncrementTableRow(qint64 id, qreal base, qreal ksize, qreal kgrowth(kgrowth), description(description){ } -QString VIncrementTableRow::getDescription() const{ - return description; -} -void VIncrementTableRow::setDescription(const QString &value){ - description = value; -} - -qreal VIncrementTableRow::getKgrowth() const{ - return kgrowth; -} - -void VIncrementTableRow::setKgrowth(const qreal &value){ - kgrowth = value; -} - -qreal VIncrementTableRow::getKsize() const{ - return ksize; -} - -void VIncrementTableRow::setKsize(const qreal &value){ - ksize = value; -} - -qreal VIncrementTableRow::getBase() const{ - return base; -} - -void VIncrementTableRow::setBase(const qreal &value){ - base = value; -} - -qint64 VIncrementTableRow::getId() const{ - return id; -} - -void VIncrementTableRow::setId(const qint64 &value){ - id = value; -} diff --git a/container/vincrementtablerow.h b/container/vincrementtablerow.h index 3896340fb..f04abd8bf 100644 --- a/container/vincrementtablerow.h +++ b/container/vincrementtablerow.h @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -22,35 +22,27 @@ #ifndef VINCREMENTTABLEROW_H #define VINCREMENTTABLEROW_H -#include - -class VIncrementTableRow -{ +class VIncrementTableRow{ public: - VIncrementTableRow(); - VIncrementTableRow(qint64 id, qreal base, qreal ksize, qreal kgrowth, - QString description = QString()); - qint64 getId() const; - void setId(const qint64 &value); - - qreal getBase() const; - void setBase(const qreal &value); - - qreal getKsize() const; - void setKsize(const qreal &value); - - qreal getKgrowth() const; - void setKgrowth(const qreal &value); - - QString getDescription() const; - void setDescription(const QString &value); - + VIncrementTableRow(); + VIncrementTableRow(qint64 id, qreal base, qreal ksize, qreal kgrowth, + QString description = QString()); + inline qint64 getId() const {return id;} + inline void setId(const qint64 &value) {id = value;} + inline qreal getBase() const {return base;} + inline void setBase(const qreal &value) {base = value;} + inline qreal getKsize() const {return ksize;} + inline void setKsize(const qreal &value) {ksize = value;} + inline qreal getKgrowth() const {return kgrowth;} + inline void setKgrowth(const qreal &value) {kgrowth = value;} + inline QString getDescription() const {return description;} + inline void setDescription(const QString &value) {description = value;} private: - qint64 id; - qreal base; - qreal ksize; - qreal kgrowth; - QString description; + qint64 id; + qreal base; + qreal ksize; + qreal kgrowth; + QString description; }; #endif // VINCREMENTTABLEROW_H diff --git a/container/vpointf.cpp b/container/vpointf.cpp index b9ae72544..14f5aa2d6 100644 --- a/container/vpointf.cpp +++ b/container/vpointf.cpp @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. diff --git a/container/vpointf.h b/container/vpointf.h index cfe7c8f1a..d51c13789 100644 --- a/container/vpointf.h +++ b/container/vpointf.h @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -22,10 +22,6 @@ #ifndef VPOINTF_H #define VPOINTF_H -#include -#include -#include "options.h" - class VPointF{ public: inline VPointF () diff --git a/container/vstandarttablecell.cpp b/container/vstandarttablecell.cpp index 201aa4481..1eb2ff2f9 100644 --- a/container/vstandarttablecell.cpp +++ b/container/vstandarttablecell.cpp @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -27,19 +27,3 @@ VStandartTableCell::VStandartTableCell():base(0), ksize(0), kgrowth(0), descript VStandartTableCell::VStandartTableCell(qint32 base, qreal ksize, qreal kgrowth, QString description):base(base), ksize(ksize), kgrowth(kgrowth), description(description){ } - -qint32 VStandartTableCell::GetBase() const{ - return base; -} - -qreal VStandartTableCell::GetKsize() const{ - return ksize; -} - -qreal VStandartTableCell::GetKgrowth() const{ - return kgrowth; -} - -QString VStandartTableCell::GetDescription() const{ - return description; -} diff --git a/container/vstandarttablecell.h b/container/vstandarttablecell.h index c165fbca4..d74f683ad 100644 --- a/container/vstandarttablecell.h +++ b/container/vstandarttablecell.h @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -22,22 +22,19 @@ #ifndef VSTANDARTTABLECELL_H #define VSTANDARTTABLECELL_H -#include - -class VStandartTableCell -{ +class VStandartTableCell{ public: - VStandartTableCell(); - VStandartTableCell(qint32 base, qreal ksize, qreal kgrowth, QString description = QString()); - qint32 GetBase() const; - qreal GetKsize() const; - qreal GetKgrowth() const; - QString GetDescription() const; + VStandartTableCell(); + VStandartTableCell(qint32 base, qreal ksize, qreal kgrowth, QString description = QString()); + inline qint32 GetBase() const {return base;} + inline qreal GetKsize() const {return ksize;} + inline qreal GetKgrowth() const {return kgrowth;} + inline QString GetDescription() const {return description;} private: - qint32 base; - qreal ksize; - qreal kgrowth; - QString description; + qint32 base; + qreal ksize; + qreal kgrowth; + QString description; }; #endif // VSTANDARTTABLECELL_H diff --git a/cursor.qrc b/cursor.qrc index ece04dd88..785c3ddd8 100644 --- a/cursor.qrc +++ b/cursor.qrc @@ -12,5 +12,8 @@ cursor/splinepath_cursor.png cursor/pointcontact_cursor.png cursor/new_detail_cursor.png + cursor/height_cursor.png + cursor/triangle_cursor.png + cursor/pointofintersect_cursor.png diff --git a/cursor/height_cursor.png b/cursor/height_cursor.png new file mode 100644 index 000000000..05da2a5ae Binary files /dev/null and b/cursor/height_cursor.png differ diff --git a/cursor/pointofintersect_cursor.png b/cursor/pointofintersect_cursor.png new file mode 100644 index 000000000..c01923887 Binary files /dev/null and b/cursor/pointofintersect_cursor.png differ diff --git a/cursor/triangle_cursor.png b/cursor/triangle_cursor.png new file mode 100644 index 000000000..2fc657ce8 Binary files /dev/null and b/cursor/triangle_cursor.png differ diff --git a/dialogs/dialogalongline.cpp b/dialogs/dialogalongline.cpp index 7633d0e30..969107db7 100644 --- a/dialogs/dialogalongline.cpp +++ b/dialogs/dialogalongline.cpp @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -33,7 +33,11 @@ DialogAlongLine::DialogAlongLine(const VContainer *data, Draw::Draws mode, QWidg radioButtonStandartTable = ui->radioButtonStandartTable; radioButtonIncrements = ui->radioButtonIncrements; radioButtonLengthLine = ui->radioButtonLengthLine; + radioButtonLengthArc = ui->radioButtonLengthArc; + radioButtonLengthCurve = ui->radioButtonLengthSpline; lineEditFormula = ui->lineEditFormula; + labelEditFormula = ui->labelEditFormula; + labelEditNamePoint = ui->labelEditNamePoint; flagFormula = false; bOk = ui->buttonBox->button(QDialogButtonBox::Ok); connect(bOk, &QPushButton::clicked, this, &DialogAlongLine::DialogAccepted); @@ -42,6 +46,7 @@ DialogAlongLine::DialogAlongLine(const VContainer *data, Draw::Draws mode, QWidg QPushButton *bCansel = ui->buttonBox->button(QDialogButtonBox::Cancel); connect(bCansel, &QPushButton::clicked, this, &DialogAlongLine::DialogRejected); FillComboBoxTypeLine(ui->comboBoxLineType); + ui->comboBoxLineType->setCurrentIndex(1); FillComboBoxPoints(ui->comboBoxFirstPoint); FillComboBoxPoints(ui->comboBoxSecondPoint); @@ -54,13 +59,14 @@ DialogAlongLine::DialogAlongLine(const VContainer *data, Draw::Draws mode, QWidg connect(ui->radioButtonStandartTable, &QRadioButton::clicked, this, &DialogAlongLine::StandartTable); connect(ui->radioButtonIncrements, &QRadioButton::clicked, this, &DialogAlongLine::Increments); connect(ui->radioButtonLengthLine, &QRadioButton::clicked, this, &DialogAlongLine::LengthLines); + connect(ui->radioButtonLengthArc, &QRadioButton::clicked, this, &DialogAlongLine::LengthArcs); + connect(ui->radioButtonLengthSpline, &QRadioButton::clicked, this, &DialogAlongLine::LengthCurves); connect(ui->toolButtonEqual, &QPushButton::clicked, this, &DialogAlongLine::EvalFormula); connect(ui->lineEditNamePoint, &QLineEdit::textChanged, this, &DialogAlongLine::NamePointChanged); connect(ui->lineEditFormula, &QLineEdit::textChanged, this, &DialogAlongLine::FormulaChanged); } -DialogAlongLine::~DialogAlongLine() -{ +DialogAlongLine::~DialogAlongLine(){ delete ui; } @@ -88,6 +94,7 @@ void DialogAlongLine::ChoosedObject(qint64 id, Scene::Scenes type){ if ( index != -1 ) { // -1 for not found ui->comboBoxFirstPoint->setCurrentIndex(index); number++; + emit ToolTip(tr("Select second point of line")); return; } } @@ -96,6 +103,7 @@ void DialogAlongLine::ChoosedObject(qint64 id, Scene::Scenes type){ if ( index != -1 ) { // -1 for not found ui->comboBoxSecondPoint->setCurrentIndex(index); number = 0; + emit ToolTip(""); } if(!isInitialized){ this->show(); @@ -113,44 +121,24 @@ void DialogAlongLine::DialogAccepted(){ emit DialogClosed(QDialog::Accepted); } -qint64 DialogAlongLine::getSecondPointId() const{ - return secondPointId; -} - void DialogAlongLine::setSecondPointId(const qint64 &value, const qint64 &id){ setCurrentPointId(ui->comboBoxSecondPoint, secondPointId, value, id); } -qint64 DialogAlongLine::getFirstPointId() const{ - return firstPointId; -} - void DialogAlongLine::setFirstPointId(const qint64 &value, const qint64 &id){ setCurrentPointId(ui->comboBoxFirstPoint, firstPointId, value, id); } -QString DialogAlongLine::getFormula() const{ - return formula; -} - void DialogAlongLine::setFormula(const QString &value){ formula = value; ui->lineEditFormula->setText(formula); } -QString DialogAlongLine::getTypeLine() const{ - return typeLine; -} - void DialogAlongLine::setTypeLine(const QString &value){ typeLine = value; SetupTypeLine(ui->comboBoxLineType, value); } -QString DialogAlongLine::getPointName() const{ - return pointName; -} - void DialogAlongLine::setPointName(const QString &value){ pointName = value; ui->lineEditNamePoint->setText(pointName); diff --git a/dialogs/dialogalongline.h b/dialogs/dialogalongline.h index 3f004fb52..4b13fb25d 100644 --- a/dialogs/dialogalongline.h +++ b/dialogs/dialogalongline.h @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -23,32 +23,30 @@ #define DIALOGALONGLINE_H #include "dialogtool.h" -#include "container/calculator.h" namespace Ui { class DialogAlongLine; } -class DialogAlongLine : public DialogTool -{ +class DialogAlongLine : public DialogTool{ Q_OBJECT public: - explicit DialogAlongLine(const VContainer *data, Draw::Draws mode = Draw::Calculation, + DialogAlongLine(const VContainer *data, Draw::Draws mode = Draw::Calculation, QWidget *parent = 0); ~DialogAlongLine(); - QString getPointName() const; + inline QString getPointName() const {return pointName;} void setPointName(const QString &value); - QString getTypeLine() const; + inline QString getTypeLine() const {return typeLine;} void setTypeLine(const QString &value); - QString getFormula() const; + inline QString getFormula() const {return formula;} void setFormula(const QString &value); - qint64 getFirstPointId() const; + inline qint64 getFirstPointId() const {return firstPointId;} void setFirstPointId(const qint64 &value, const qint64 &id); - qint64 getSecondPointId() const; + inline qint64 getSecondPointId() const {return secondPointId;} void setSecondPointId(const qint64 &value, const qint64 &id); public slots: virtual void ChoosedObject(qint64 id, Scene::Scenes type); - virtual void DialogAccepted(); + virtual void DialogAccepted(); private: Q_DISABLE_COPY(DialogAlongLine) Ui::DialogAlongLine *ui; diff --git a/dialogs/dialogalongline.ui b/dialogs/dialogalongline.ui index ee782b6ec..3030f22ba 100644 --- a/dialogs/dialogalongline.ui +++ b/dialogs/dialogalongline.ui @@ -24,23 +24,67 @@ - + 0 0 + + + + + + + 255 + 0 + 0 + + + + + + + + + 255 + 0 + 0 + + + + + + + + + 159 + 158 + 158 + + + + + + Length - + + + Formula calculation of length of line + + + + Calculate formula + ... @@ -76,6 +120,9 @@ 0 + + Value of length + _ @@ -90,7 +137,44 @@ - + + + + + + + + 255 + 0 + 0 + + + + + + + + + 255 + 0 + 0 + + + + + + + + + 159 + 158 + 158 + + + + + + Name new point @@ -101,6 +185,9 @@ + + Put variable into formula + ... @@ -128,7 +215,11 @@ - + + + First point of line + + @@ -142,7 +233,11 @@ - + + + Second point of line + + @@ -156,7 +251,11 @@ - + + + Show line from first point to our point + + @@ -203,7 +302,7 @@ - false + true Length of arcs @@ -213,7 +312,7 @@ - false + true Length of curves @@ -225,7 +324,11 @@ - + + + Variables. Click twice to select. + + @@ -248,6 +351,23 @@ + + lineEditFormula + toolButtonEqual + lineEditNamePoint + comboBoxFirstPoint + comboBoxSecondPoint + comboBoxLineType + radioButtonSizeGrowth + radioButtonStandartTable + radioButtonIncrements + radioButtonLengthLine + radioButtonLengthArc + radioButtonLengthSpline + listWidget + toolButtonPutHere + buttonBox + diff --git a/dialogs/dialogarc.cpp b/dialogs/dialogarc.cpp index cb547949a..dbd6eff99 100644 --- a/dialogs/dialogarc.cpp +++ b/dialogs/dialogarc.cpp @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -21,7 +21,6 @@ #include "dialogarc.h" #include "ui_dialogarc.h" -#include "../container/calculator.h" DialogArc::DialogArc(const VContainer *data, Draw::Draws mode, QWidget *parent) : DialogTool(data, mode, parent), ui(new Ui::DialogArc), flagRadius(false), flagF1(false), flagF2(false), @@ -52,6 +51,8 @@ DialogArc::DialogArc(const VContainer *data, Draw::Draws mode, QWidget *parent) radioButtonStandartTable = ui->radioButtonStandartTable; radioButtonIncrements = ui->radioButtonIncrements; radioButtonLengthLine = ui->radioButtonLengthLine; + radioButtonLengthArc = ui->radioButtonLengthArc; + radioButtonLengthCurve = ui->radioButtonLengthSpline; connect(ui->toolButtonPutHereRadius, &QPushButton::clicked, this, &DialogArc::PutRadius); connect(ui->toolButtonPutHereF1, &QPushButton::clicked, this, &DialogArc::PutF1); @@ -63,7 +64,9 @@ DialogArc::DialogArc(const VContainer *data, Draw::Draws mode, QWidget *parent) connect(ui->radioButtonStandartTable, &QRadioButton::clicked, this, &DialogArc::StandartTable); connect(ui->radioButtonIncrements, &QRadioButton::clicked, this, &DialogArc::Increments); connect(ui->radioButtonLengthLine, &QRadioButton::clicked, this, &DialogArc::LengthLines); - connect(ui->radioButtonLineAngles, &QRadioButton::clicked, this, &DialogArc::LineArcs); + connect(ui->radioButtonLineAngles, &QRadioButton::clicked, this, &DialogArc::LineAngles); + connect(ui->radioButtonLengthArc, &QRadioButton::clicked, this, &DialogArc::LengthArcs); + connect(ui->radioButtonLengthSpline, &QRadioButton::clicked, this, &DialogArc::LengthCurves); connect(ui->toolButtonEqualRadius, &QPushButton::clicked, this, &DialogArc::EvalRadius); connect(ui->toolButtonEqualF1, &QPushButton::clicked, this, &DialogArc::EvalF1); @@ -74,8 +77,8 @@ DialogArc::DialogArc(const VContainer *data, Draw::Draws mode, QWidget *parent) connect(ui->lineEditF2, &QLineEdit::textChanged, this, &DialogArc::F2Changed); } -qint64 DialogArc::GetCenter() const{ - return center; +DialogArc::~DialogArc(){ + delete ui; } void DialogArc::SetCenter(const qint64 &value){ @@ -83,37 +86,21 @@ void DialogArc::SetCenter(const qint64 &value){ ChangeCurrentData(ui->comboBoxBasePoint, center); } -QString DialogArc::GetF2() const{ - return f2; -} - void DialogArc::SetF2(const QString &value){ f2 = value; ui->lineEditF2->setText(f2); } -QString DialogArc::GetF1() const{ - return f1; -} - void DialogArc::SetF1(const QString &value){ f1 = value; ui->lineEditF1->setText(f1); } -QString DialogArc::GetRadius() const{ - return radius; -} - void DialogArc::SetRadius(const QString &value){ radius = value; ui->lineEditRadius->setText(radius); } -DialogArc::~DialogArc(){ -delete ui; -} - void DialogArc::ChoosedObject(qint64 id, Scene::Scenes type){ if(idDetail == 0 && mode == Draw::Modeling){ if(type == Scene::Detail){ @@ -134,6 +121,7 @@ void DialogArc::ChoosedObject(qint64 id, Scene::Scenes type){ point = data->GetModelingPoint(id); } ChangeCurrentText(ui->comboBoxBasePoint, point.name()); + emit ToolTip(""); this->show(); } } @@ -152,8 +140,8 @@ void DialogArc::ValChenged(int row){ } QListWidgetItem *item = ui->listWidget->item( row ); if(ui->radioButtonLineAngles->isChecked()){ - QString desc = QString("%1(%2) - %3").arg(item->text()).arg(data->GetLineArc(item->text())) - .arg("Значення кута лінії."); + QString desc = QString("%1(%2) - %3").arg(item->text()).arg(data->GetLineAngle(item->text())) + .arg(tr("Value angle of line.")); ui->labelDescription->setText(desc); return; } @@ -172,45 +160,52 @@ void DialogArc::PutF2(){ PutValHere(ui->lineEditF2, ui->listWidget); } -void DialogArc::LineArcs(){ - ShowLineArcs(); +void DialogArc::LineAngles(){ + ShowLineAngles(); } void DialogArc::RadiusChanged(){ + labelEditFormula = ui->labelEditRadius; ValFormulaChanged(flagRadius, ui->lineEditRadius, timerRadius); } void DialogArc::F1Changed(){ + labelEditFormula = ui->labelEditF1; ValFormulaChanged(flagF1, ui->lineEditF1, timerF1); } void DialogArc::F2Changed(){ + labelEditFormula = ui->labelEditF2; ValFormulaChanged(flagF2, ui->lineEditF2, timerF2); } void DialogArc::CheckState(){ - Q_CHECK_PTR(bOk); + Q_ASSERT(bOk != 0); bOk->setEnabled(flagRadius && flagF1 && flagF2); } void DialogArc::EvalRadius(){ + labelEditFormula = ui->labelEditRadius; Eval(ui->lineEditRadius, flagRadius, timerRadius, ui->labelResultRadius); } void DialogArc::EvalF1(){ + labelEditFormula = ui->labelEditF1; Eval(ui->lineEditF1, flagF1, timerF1, ui->labelResultF1); } void DialogArc::EvalF2(){ + labelEditFormula = ui->labelEditF2; Eval(ui->lineEditF2, flagF2, timerF2, ui->labelResultF2); } -void DialogArc::ShowLineArcs(){ +void DialogArc::ShowLineAngles(){ disconnect(ui->listWidget, &QListWidget::currentRowChanged, this, &DialogArc::ValChenged); ui->listWidget->clear(); connect(ui->listWidget, &QListWidget::currentRowChanged, this, &DialogArc::ValChenged); - const QMap *lineArcsTable = data->DataLineAngles(); - QMapIterator i(*lineArcsTable); + const QHash *lineAnglesTable = data->DataLineAngles(); + Q_ASSERT(lineAnglesTable != 0); + QHashIterator i(*lineAnglesTable); while (i.hasNext()) { i.next(); QListWidgetItem *item = new QListWidgetItem(i.key()); diff --git a/dialogs/dialogarc.h b/dialogs/dialogarc.h index 00f23e8e5..302737d50 100644 --- a/dialogs/dialogarc.h +++ b/dialogs/dialogarc.h @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -28,24 +28,19 @@ namespace Ui { class DialogArc; } -class DialogArc : public DialogTool -{ +class DialogArc : public DialogTool{ Q_OBJECT public: - explicit DialogArc(const VContainer *data, Draw::Draws mode = Draw::Calculation, QWidget *parent = 0); - ~DialogArc(); - qint64 GetCenter() const; - void SetCenter(const qint64 &value); - - QString GetRadius() const; - void SetRadius(const QString &value); - - QString GetF1() const; - void SetF1(const QString &value); - - QString GetF2() const; - void SetF2(const QString &value); - + DialogArc(const VContainer *data, Draw::Draws mode = Draw::Calculation, QWidget *parent = 0); + ~DialogArc(); + inline qint64 GetCenter() const {return center;} + void SetCenter(const qint64 &value); + inline QString GetRadius() const {return radius;} + void SetRadius(const QString &value); + inline QString GetF1() const {return f1;} + void SetF1(const QString &value); + inline QString GetF2() const {return f2;} + void SetF2(const QString &value); public slots: virtual void ChoosedObject(qint64 id, Scene::Scenes type); virtual void DialogAccepted(); @@ -53,7 +48,7 @@ public slots: void PutRadius(); void PutF1(); void PutF2(); - void LineArcs(); + void LineAngles(); void RadiusChanged(); void F1Changed(); void F2Changed(); @@ -75,7 +70,7 @@ private: void EvalRadius(); void EvalF1(); void EvalF2(); - void ShowLineArcs(); + void ShowLineAngles(); }; #endif // DIALOGARC_H diff --git a/dialogs/dialogarc.ui b/dialogs/dialogarc.ui index e8cbd4ad8..65ab8d07b 100644 --- a/dialogs/dialogarc.ui +++ b/dialogs/dialogarc.ui @@ -24,13 +24,50 @@ - + 0 0 + + + + + + + 255 + 0 + 0 + + + + + + + + + 255 + 0 + 0 + + + + + + + + + 159 + 158 + 158 + + + + + + Radius @@ -44,10 +81,16 @@ 0 + + Formula calculation of radius of arc + + + Put variable into formula + ... @@ -65,6 +108,9 @@ + + Calculate formula + ... @@ -94,6 +140,9 @@ 0 + + Value of radius + _ @@ -104,13 +153,50 @@ - + 0 0 + + + + + + + 255 + 0 + 0 + + + + + + + + + 255 + 0 + 0 + + + + + + + + + 159 + 158 + 158 + + + + + + First angle degree @@ -124,10 +210,16 @@ 0 + + First angle of arc counterclockwise + + + Put variable into formula + ... @@ -145,6 +237,9 @@ + + Calculate formula + ... @@ -174,6 +269,9 @@ 0 + + Value of first angle + _ @@ -184,13 +282,50 @@ - + 0 0 + + + + + + + 255 + 0 + 0 + + + + + + + + + 255 + 0 + 0 + + + + + + + + + 159 + 158 + 158 + + + + + + Second angle degree @@ -204,10 +339,16 @@ 0 + + Second angle of arc counterclockwise + + + Put variable into formula + ... @@ -225,6 +366,9 @@ + + Calculate formula + ... @@ -254,6 +398,9 @@ 0 + + Value of second angle + _ @@ -281,7 +428,11 @@ - + + + Select point of center of arc + + @@ -344,7 +495,7 @@ true - Length of arcs + Length of curves @@ -363,7 +514,11 @@ - + + + Variables + + @@ -386,6 +541,27 @@ + + lineEditRadius + lineEditF1 + lineEditF2 + comboBoxBasePoint + radioButtonSizeGrowth + radioButtonStandartTable + radioButtonIncrements + radioButtonLengthLine + radioButtonLengthArc + radioButtonLengthSpline + radioButtonLineAngles + listWidget + toolButtonPutHereRadius + toolButtonPutHereF1 + toolButtonPutHereF2 + toolButtonEqualRadius + toolButtonEqualF1 + toolButtonEqualF2 + buttonBox + diff --git a/dialogs/dialogbisector.cpp b/dialogs/dialogbisector.cpp index c03837c6a..e975b8559 100644 --- a/dialogs/dialogbisector.cpp +++ b/dialogs/dialogbisector.cpp @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -33,7 +33,11 @@ DialogBisector::DialogBisector(const VContainer *data, Draw::Draws mode, QWidget radioButtonStandartTable = ui->radioButtonStandartTable; radioButtonIncrements = ui->radioButtonIncrements; radioButtonLengthLine = ui->radioButtonLengthLine; + radioButtonLengthArc = ui->radioButtonLengthArc; + radioButtonLengthCurve = ui->radioButtonLengthSpline; lineEditFormula = ui->lineEditFormula; + labelEditFormula = ui->labelEditFormula; + labelEditNamePoint = ui->labelEditNamePoint; flagFormula = false; bOk = ui->buttonBox->button(QDialogButtonBox::Ok); connect(bOk, &QPushButton::clicked, this, &DialogBisector::DialogAccepted); @@ -55,6 +59,8 @@ DialogBisector::DialogBisector(const VContainer *data, Draw::Draws mode, QWidget connect(ui->radioButtonStandartTable, &QRadioButton::clicked, this, &DialogBisector::StandartTable); connect(ui->radioButtonIncrements, &QRadioButton::clicked, this, &DialogBisector::Increments); connect(ui->radioButtonLengthLine, &QRadioButton::clicked, this, &DialogBisector::LengthLines); + connect(ui->radioButtonLengthArc, &QRadioButton::clicked, this, &DialogBisector::LengthArcs); + connect(ui->radioButtonLengthSpline, &QRadioButton::clicked, this, &DialogBisector::LengthCurves); connect(ui->toolButtonEqual, &QPushButton::clicked, this, &DialogBisector::EvalFormula); connect(ui->lineEditNamePoint, &QLineEdit::textChanged, this, &DialogBisector::NamePointChanged); connect(ui->lineEditFormula, &QLineEdit::textChanged, this, &DialogBisector::FormulaChanged); @@ -88,6 +94,7 @@ void DialogBisector::ChoosedObject(qint64 id, Scene::Scenes type){ if ( index != -1 ) { // -1 for not found ui->comboBoxFirstPoint->setCurrentIndex(index); number++; + emit ToolTip(tr("Select second point of angle")); return; } } @@ -96,6 +103,7 @@ void DialogBisector::ChoosedObject(qint64 id, Scene::Scenes type){ if ( index != -1 ) { // -1 for not found ui->comboBoxSecondPoint->setCurrentIndex(index); number++; + emit ToolTip(tr("Select third point of angle")); return; } } @@ -104,6 +112,7 @@ void DialogBisector::ChoosedObject(qint64 id, Scene::Scenes type){ if ( index != -1 ) { // -1 for not found ui->comboBoxThirdPoint->setCurrentIndex(index); number = 0; + emit ToolTip(""); } if(!isInitialized){ this->show(); @@ -112,53 +121,29 @@ void DialogBisector::ChoosedObject(qint64 id, Scene::Scenes type){ } } -QString DialogBisector::getPointName() const{ - return pointName; -} - void DialogBisector::setPointName(const QString &value){ pointName = value; ui->lineEditNamePoint->setText(pointName); } -QString DialogBisector::getTypeLine() const{ - return typeLine; -} - void DialogBisector::setTypeLine(const QString &value){ typeLine = value; SetupTypeLine(ui->comboBoxLineType, value); } -QString DialogBisector::getFormula() const{ - return formula; -} - void DialogBisector::setFormula(const QString &value){ formula = value; ui->lineEditFormula->setText(formula); } -qint64 DialogBisector::getFirstPointId() const{ - return firstPointId; -} - void DialogBisector::setFirstPointId(const qint64 &value, const qint64 &id){ setCurrentPointId(ui->comboBoxFirstPoint, firstPointId, value, id); } -qint64 DialogBisector::getSecondPointId() const{ - return secondPointId; -} - void DialogBisector::setSecondPointId(const qint64 &value, const qint64 &id){ setCurrentPointId(ui->comboBoxSecondPoint, secondPointId, value, id); } -qint64 DialogBisector::getThirdPointId() const{ - return thirdPointId; -} - void DialogBisector::setThirdPointId(const qint64 &value, const qint64 &id){ setCurrentPointId(ui->comboBoxThirdPoint, thirdPointId, value, id); } diff --git a/dialogs/dialogbisector.h b/dialogs/dialogbisector.h index aa7f529f2..87b409421 100644 --- a/dialogs/dialogbisector.h +++ b/dialogs/dialogbisector.h @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -23,32 +23,29 @@ #define DIALOGBISECTOR_H #include "dialogtool.h" -#include -#include "container/calculator.h" namespace Ui { class DialogBisector; } -class DialogBisector : public DialogTool -{ +class DialogBisector : public DialogTool{ Q_OBJECT public: explicit DialogBisector(const VContainer *data, Draw::Draws mode = Draw::Calculation, QWidget *parent = 0); - ~DialogBisector(); - QString getPointName() const; + ~DialogBisector(); + QString getPointName() const {return pointName;} void setPointName(const QString &value); - QString getTypeLine() const; + inline QString getTypeLine() const {return typeLine;} void setTypeLine(const QString &value); - QString getFormula() const; + inline QString getFormula() const {return formula;} void setFormula(const QString &value); - qint64 getFirstPointId() const; + inline qint64 getFirstPointId() const {return firstPointId;} void setFirstPointId(const qint64 &value, const qint64 &id); - qint64 getSecondPointId() const; + inline qint64 getSecondPointId() const {return secondPointId;} void setSecondPointId(const qint64 &value, const qint64 &id); - qint64 getThirdPointId() const; + inline qint64 getThirdPointId() const {return thirdPointId;} void setThirdPointId(const qint64 &value, const qint64 &id); public slots: virtual void ChoosedObject(qint64 id, Scene::Scenes type); diff --git a/dialogs/dialogbisector.ui b/dialogs/dialogbisector.ui index 203e6492d..c33b41537 100644 --- a/dialogs/dialogbisector.ui +++ b/dialogs/dialogbisector.ui @@ -21,13 +21,50 @@ - + 0 0 + + + + + + + 255 + 0 + 0 + + + + + + + + + 255 + 0 + 0 + + + + + + + + + 159 + 158 + 158 + + + + + + Length @@ -41,10 +78,16 @@ 0 + + Formula calculation of length of bisector + + + Calculate formula + ... @@ -74,6 +117,9 @@ 0 + + Value of length + _ @@ -88,13 +134,50 @@ - + 0 0 + + + + + + + 255 + 0 + 0 + + + + + + + + + 255 + 0 + 0 + + + + + + + + + 159 + 158 + 158 + + + + + + Name new point @@ -105,6 +188,9 @@ + + Put variable into formula + ... @@ -138,7 +224,11 @@ - + + + First point of angle + + @@ -158,7 +248,11 @@ - + + + Second point of angle + + @@ -178,7 +272,11 @@ - + + + Third point of angle + + @@ -192,7 +290,11 @@ - + + + Show line from second point to our point + + @@ -242,7 +344,7 @@ - false + true Length of arcs @@ -252,7 +354,7 @@ - false + true Length of curves @@ -264,7 +366,11 @@ - + + + Variables. Click twice to select. + + @@ -290,6 +396,24 @@ + + lineEditFormula + lineEditNamePoint + comboBoxFirstPoint + comboBoxSecondPoint + comboBoxThirdPoint + comboBoxLineType + radioButtonSizeGrowth + radioButtonStandartTable + radioButtonIncrements + radioButtonLengthLine + radioButtonLengthArc + radioButtonLengthSpline + listWidget + toolButtonPutHere + toolButtonEqual + buttonBox + diff --git a/dialogs/dialogdetail.cpp b/dialogs/dialogdetail.cpp index fc5a36543..fb66961c5 100644 --- a/dialogs/dialogdetail.cpp +++ b/dialogs/dialogdetail.cpp @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -20,16 +20,26 @@ ****************************************************************************/ #include "dialogdetail.h" -#include DialogDetail::DialogDetail(const VContainer *data, Draw::Draws mode, QWidget *parent) : - DialogTool(data, mode, parent), ui(), details(VDetail()){ + DialogTool(data, mode, parent), ui(), details(VDetail()), supplement(true), closed(true){ ui.setupUi(this); + labelEditNamePoint = ui.labelEditNameDetail; bOk = ui.buttonBox->button(QDialogButtonBox::Ok); connect(bOk, &QPushButton::clicked, this, &DialogDetail::DialogAccepted); - + flagName = false; + CheckState(); QPushButton *bCansel = ui.buttonBox->button(QDialogButtonBox::Cancel); connect(bCansel, &QPushButton::clicked, this, &DialogDetail::DialogRejected); + + connect(ui.listWidget, &QListWidget::currentRowChanged, this, &DialogDetail::ObjectChanged); + connect(ui.doubleSpinBoxBiasX, static_cast(&QDoubleSpinBox::valueChanged), + this, &DialogDetail::BiasXChanged); + connect(ui.doubleSpinBoxBiasY, static_cast(&QDoubleSpinBox::valueChanged), + this, &DialogDetail::BiasYChanged); + connect(ui.checkBoxSeams, &QCheckBox::clicked, this, &DialogDetail::ClickedSeams); + connect(ui.checkBoxClosed, &QCheckBox::clicked, this, &DialogDetail::ClickedClosed); + connect(ui.lineEditNameDetail, &QLineEdit::textChanged, this, &DialogDetail::NamePointChanged); } void DialogDetail::ChoosedObject(qint64 id, Scene::Scenes type){ @@ -59,7 +69,7 @@ void DialogDetail::ChoosedObject(qint64 id, Scene::Scenes type){ NewItem(id, Tool::NodeSplinePath, mode, NodeDetail::Contour); break; default: - qWarning()<<"Get wrong scene object. Ignore."; + qWarning()<show(); @@ -72,11 +82,16 @@ void DialogDetail::DialogAccepted(){ QListWidgetItem *item = ui.listWidget->item(i); details.append( qvariant_cast(item->data(Qt::UserRole))); } + details.setWidth(ui.doubleSpinBoxSeams->value()); details.setName(ui.lineEditNameDetail->text()); + details.setSupplement(supplement); + details.setClosed(closed); + emit ToolTip(""); emit DialogClosed(QDialog::Accepted); } -void DialogDetail::NewItem(qint64 id, Tool::Tools typeTool, Draw::Draws mode, NodeDetail::NodeDetails typeNode){ +void DialogDetail::NewItem(qint64 id, Tool::Tools typeTool, Draw::Draws mode, NodeDetail::NodeDetails typeNode, qreal mx, + qreal my){ QString name; switch(typeTool){ case(Tool::NodePoint):{ @@ -120,28 +135,74 @@ void DialogDetail::NewItem(qint64 id, Tool::Tools typeTool, Draw::Draws mode, No break; } default: - qWarning()<<"Get wrong tools. Ignore."; + qWarning()<setFont(QFont("Times", 12, QFont::Bold)); - VNodeDetail node(id, typeTool, mode, typeNode); + VNodeDetail node(id, typeTool, mode, typeNode, mx, my); item->setData(Qt::UserRole, QVariant::fromValue(node)); ui.listWidget->addItem(item); -} - -VDetail DialogDetail::getDetails() const{ - return details; + disconnect(ui.doubleSpinBoxBiasX, static_cast(&QDoubleSpinBox::valueChanged), + this, &DialogDetail::BiasXChanged); + disconnect(ui.doubleSpinBoxBiasY, static_cast(&QDoubleSpinBox::valueChanged), + this, &DialogDetail::BiasYChanged); + ui.doubleSpinBoxBiasX->setValue(toMM(node.getMx())); + ui.doubleSpinBoxBiasY->setValue(toMM(node.getMy())); + connect(ui.doubleSpinBoxBiasX, static_cast(&QDoubleSpinBox::valueChanged), + this, &DialogDetail::BiasXChanged); + connect(ui.doubleSpinBoxBiasY, static_cast(&QDoubleSpinBox::valueChanged), + this, &DialogDetail::BiasYChanged); } void DialogDetail::setDetails(const VDetail &value){ details = value; ui.listWidget->clear(); for(qint32 i = 0; i < details.CountNode(); ++i){ - NewItem(details[i].getId(), details[i].getTypeTool(),details[i].getMode(), details[i].getTypeNode()); + NewItem(details[i].getId(), details[i].getTypeTool(), details[i].getMode(), details[i].getTypeNode(), details[i].getMx(), + details[i].getMy()); } - details.setName(ui.lineEditNameDetail->text()); + ui.lineEditNameDetail->setText(details.getName()); + ui.checkBoxSeams->setChecked(details.getSupplement()); + ui.checkBoxClosed->setChecked(details.getClosed()); + ui.doubleSpinBoxSeams->setValue(details.getWidth()); + ui.listWidget->setCurrentRow(0); ui.listWidget->setFocus(Qt::OtherFocusReason); } +void DialogDetail::BiasXChanged(qreal d){ + qint32 row = ui.listWidget->currentRow(); + QListWidgetItem *item = ui.listWidget->item( row ); + VNodeDetail node = qvariant_cast(item->data(Qt::UserRole)); + node.setMx(toPixel(d)); + item->setData(Qt::UserRole, QVariant::fromValue(node)); +} + +void DialogDetail::BiasYChanged(qreal d){ + qint32 row = ui.listWidget->currentRow(); + QListWidgetItem *item = ui.listWidget->item( row ); + VNodeDetail node = qvariant_cast(item->data(Qt::UserRole)); + node.setMy(toPixel(d)); + item->setData(Qt::UserRole, QVariant::fromValue(node)); +} + +void DialogDetail::ClickedSeams(bool checked){ + supplement = checked; + ui.checkBoxClosed->setEnabled(checked); + ui.doubleSpinBoxSeams->setEnabled(checked); +} + +void DialogDetail::ClickedClosed(bool checked){ + closed = checked; +} + +void DialogDetail::ObjectChanged(int row){ + if(ui.listWidget->count() == 0){ + return; + } + QListWidgetItem *item = ui.listWidget->item( row ); + VNodeDetail node = qvariant_cast(item->data(Qt::UserRole)); + ui.doubleSpinBoxBiasX->setValue(toMM(node.getMx())); + ui.doubleSpinBoxBiasY->setValue(toMM(node.getMy())); +} diff --git a/dialogs/dialogdetail.h b/dialogs/dialogdetail.h index 79cc1b55e..43a518e90 100644 --- a/dialogs/dialogdetail.h +++ b/dialogs/dialogdetail.h @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -24,22 +24,28 @@ #include "ui_dialogdetail.h" #include "dialogtool.h" -#include "geometry/vdetail.h" class DialogDetail : public DialogTool{ Q_OBJECT public: - explicit DialogDetail(const VContainer *data, Draw::Draws mode, QWidget *parent = 0); - VDetail getDetails() const; - void setDetails(const VDetail &value); - + DialogDetail(const VContainer *data, Draw::Draws mode, QWidget *parent = 0); + inline VDetail getDetails() const {return details;} + void setDetails(const VDetail &value); public slots: - virtual void ChoosedObject(qint64 id, Scene::Scenes type); - virtual void DialogAccepted(); + virtual void ChoosedObject(qint64 id, Scene::Scenes type); + virtual void DialogAccepted(); + void BiasXChanged(qreal d); + void BiasYChanged(qreal d); + void ClickedSeams(bool checked); + void ClickedClosed(bool checked); + void ObjectChanged(int row); private: Ui::DialogDetail ui; - VDetail details; - void NewItem(qint64 id, Tool::Tools typeTool, Draw::Draws mode, NodeDetail::NodeDetails typeNode); + VDetail details; + bool supplement; + bool closed; + void NewItem(qint64 id, Tool::Tools typeTool, Draw::Draws mode, NodeDetail::NodeDetails typeNode, qreal mx = 0, + qreal my = 0); }; #endif // DIALOGDETAIL_H diff --git a/dialogs/dialogdetail.ui b/dialogs/dialogdetail.ui index a88fa06ba..08aba5839 100644 --- a/dialogs/dialogdetail.ui +++ b/dialogs/dialogdetail.ui @@ -6,8 +6,8 @@ 0 0 - 340 - 298 + 544 + 327 @@ -20,47 +20,196 @@ - + - + - + - + + + 6 + + + QLayout::SetDefaultConstraint + + + 0 + + + 0 + + + Bias X + + + + + + + -10000.000000000000000 + + + 10000.000000000000000 + + + + + + + + + 0 0 - - - - Name detail + Bias Y - + + + -10000.000000000000000 + + + 10000.000000000000000 + + - - - - - Closed - - - true - - - - + + + Option + + + + + + + + + 0 + 0 + + + + + + + + + 255 + 0 + 0 + + + + + + + + + 255 + 0 + 0 + + + + + + + + + 159 + 158 + 158 + + + + + + + + + + + Name of detail + + + + + + + + 0 + 0 + + + + + + + + + + Supplement for seams + + + true + + + + + + + + + + 0 + 0 + + + + + + + Width + + + + + + + -10000.000000000000000 + + + 10.000000000000000 + + + + + + + + + Closed + + + true + + + + + @@ -81,6 +230,11 @@ + + lineEditNameDetail + listWidget + buttonBox + diff --git a/dialogs/dialogendline.cpp b/dialogs/dialogendline.cpp index def24c322..011784d5c 100644 --- a/dialogs/dialogendline.cpp +++ b/dialogs/dialogendline.cpp @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -21,10 +21,6 @@ #include "dialogendline.h" #include "ui_dialogendline.h" -#include -#include -#include "container/vpointf.h" -#include "container/calculator.h" DialogEndLine::DialogEndLine(const VContainer *data, Draw::Draws mode, QWidget *parent) : DialogTool(data, mode, parent), ui(new Ui::DialogEndLine), pointName(QString()), typeLine(QString()), @@ -38,7 +34,11 @@ DialogEndLine::DialogEndLine(const VContainer *data, Draw::Draws mode, QWidget * radioButtonStandartTable = ui->radioButtonStandartTable; radioButtonIncrements = ui->radioButtonIncrements; radioButtonLengthLine = ui->radioButtonLengthLine; + radioButtonLengthArc = ui->radioButtonLengthArc; + radioButtonLengthCurve = ui->radioButtonLengthSpline; lineEditFormula = ui->lineEditFormula; + labelEditFormula = ui->labelEditFormula; + labelEditNamePoint = ui->labelEditNamePoint; flagFormula = false; bOk = ui->buttonBox->button(QDialogButtonBox::Ok); connect(bOk, &QPushButton::clicked, this, &DialogEndLine::DialogAccepted); @@ -74,6 +74,8 @@ DialogEndLine::DialogEndLine(const VContainer *data, Draw::Draws mode, QWidget * connect(ui->radioButtonStandartTable, &QRadioButton::clicked, this, &DialogEndLine::StandartTable); connect(ui->radioButtonIncrements, &QRadioButton::clicked, this, &DialogEndLine::Increments); connect(ui->radioButtonLengthLine, &QRadioButton::clicked, this, &DialogEndLine::LengthLines); + connect(ui->radioButtonLengthArc, &QRadioButton::clicked, this, &DialogEndLine::LengthArcs); + connect(ui->radioButtonLengthSpline, &QRadioButton::clicked, this, &DialogEndLine::LengthCurves); connect(ui->toolButtonEqual, &QPushButton::clicked, this, &DialogEndLine::EvalFormula); connect(ui->lineEditNamePoint, &QLineEdit::textChanged, this, &DialogEndLine::NamePointChanged); connect(ui->lineEditFormula, &QLineEdit::textChanged, this, &DialogEndLine::FormulaChanged); @@ -99,50 +101,31 @@ void DialogEndLine::ChoosedObject(qint64 id, Scene::Scenes type){ point = data->GetModelingPoint(id); } ChangeCurrentText(ui->comboBoxBasePoint, point.name()); + emit ToolTip(""); this->show(); } } -QString DialogEndLine::getPointName() const{ - return pointName; -} - void DialogEndLine::setPointName(const QString &value){ pointName = value; ui->lineEditNamePoint->setText(pointName); } -QString DialogEndLine::getTypeLine() const{ - return typeLine; -} - void DialogEndLine::setTypeLine(const QString &value){ typeLine = value; SetupTypeLine(ui->comboBoxLineType, value); } -QString DialogEndLine::getFormula() const{ - return formula; -} - void DialogEndLine::setFormula(const QString &value){ formula = value; ui->lineEditFormula->setText(formula); } -qreal DialogEndLine::getAngle() const{ - return angle; -} - void DialogEndLine::setAngle(const qreal &value){ angle = value; ui->doubleSpinBoxAngle->setValue(angle); } -qint64 DialogEndLine::getBasePointId() const{ - return basePointId; -} - void DialogEndLine::setBasePointId(const qint64 &value, const qint64 &id){ setCurrentPointId(ui->comboBoxBasePoint, basePointId, value, id); } @@ -156,7 +139,6 @@ void DialogEndLine::DialogAccepted(){ emit DialogClosed(QDialog::Accepted); } -DialogEndLine::~DialogEndLine() -{ +DialogEndLine::~DialogEndLine(){ delete ui; } diff --git a/dialogs/dialogendline.h b/dialogs/dialogendline.h index 5053e6462..4996f8fb8 100644 --- a/dialogs/dialogendline.h +++ b/dialogs/dialogendline.h @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -23,29 +23,26 @@ #define DIALOGENDLINE_H #include "dialogtool.h" -#include -#include "container/calculator.h" namespace Ui { class DialogEndLine; } -class DialogEndLine : public DialogTool -{ +class DialogEndLine : public DialogTool{ Q_OBJECT public: explicit DialogEndLine(const VContainer *data, Draw::Draws mode = Draw::Calculation, QWidget *parent = 0); ~DialogEndLine(); - QString getPointName() const; + inline QString getPointName() const {return pointName;} void setPointName(const QString &value); - QString getTypeLine() const; + inline QString getTypeLine() const {return typeLine;} void setTypeLine(const QString &value); - QString getFormula() const; + inline QString getFormula() const {return formula;} void setFormula(const QString &value); - qreal getAngle() const; + inline qreal getAngle() const {return angle;} void setAngle(const qreal &value); - qint64 getBasePointId() const; + inline qint64 getBasePointId() const {return basePointId;} void setBasePointId(const qint64 &value, const qint64 &id); public slots: virtual void ChoosedObject(qint64 id, Scene::Scenes type); diff --git a/dialogs/dialogendline.ui b/dialogs/dialogendline.ui index baf7f4979..ad99685ca 100644 --- a/dialogs/dialogendline.ui +++ b/dialogs/dialogendline.ui @@ -24,13 +24,50 @@ - + 0 0 + + + + + + + 255 + 0 + 0 + + + + + + + + + 255 + 0 + 0 + + + + + + + + + 159 + 158 + 158 + + + + + + Length @@ -44,10 +81,16 @@ 0 + + Formula calculation of length of line + + + Calculate formula + ... @@ -77,6 +120,9 @@ 0 + + Value of length + _ @@ -104,7 +150,11 @@ - + + + First point of line + + @@ -128,13 +178,50 @@ - + 0 0 + + + + + + + 255 + 0 + 0 + + + + + + + + + 255 + 0 + 0 + + + + + + + + + 159 + 158 + 158 + + + + + + Name new point @@ -335,6 +422,9 @@ 0 + + Angle of line + 360.000000000000000 @@ -356,7 +446,11 @@ - + + + Show line from first point to our point + + @@ -406,7 +500,7 @@ - false + true Length of arcs @@ -416,7 +510,7 @@ - false + true Length of curves @@ -428,7 +522,11 @@ - + + + Variables. Click twice to select. + + @@ -451,6 +549,31 @@ + + lineEditFormula + comboBoxBasePoint + lineEditNamePoint + doubleSpinBoxAngle + toolButtonArrowRight + toolButtonArrowRightUp + toolButtonArrowUp + toolButtonArrowLeftUp + toolButtonArrowLeft + toolButtonArrowLeftDown + toolButtonArrowDown + toolButtonArrowRightDown + comboBoxLineType + radioButtonSizeGrowth + radioButtonStandartTable + radioButtonIncrements + radioButtonLengthLine + radioButtonLengthArc + radioButtonLengthSpline + listWidget + toolButtonPutHere + toolButtonEqual + buttonBox + diff --git a/dialogs/dialogheight.cpp b/dialogs/dialogheight.cpp new file mode 100644 index 000000000..7024d94c1 --- /dev/null +++ b/dialogs/dialogheight.cpp @@ -0,0 +1,101 @@ +#include "dialogheight.h" +#include "ui_dialogheight.h" + +DialogHeight::DialogHeight(const VContainer *data, Draw::Draws mode, QWidget *parent) : + DialogTool(data, mode, parent), ui(new Ui::DialogHeight), number(0), pointName(QString()), + typeLine(QString()), basePointId(0), p1LineId(0), p2LineId(0){ + ui->setupUi(this); + labelEditNamePoint = ui->labelEditNamePoint; + bOk = ui->buttonBox->button(QDialogButtonBox::Ok); + connect(bOk, &QPushButton::clicked, this, &DialogHeight::DialogAccepted); + flagName = false; + CheckState(); + QPushButton *bCansel = ui->buttonBox->button(QDialogButtonBox::Cancel); + connect(bCansel, &QPushButton::clicked, this, &DialogHeight::DialogRejected); + FillComboBoxPoints(ui->comboBoxBasePoint); + FillComboBoxPoints(ui->comboBoxP1Line); + FillComboBoxPoints(ui->comboBoxP2Line); + FillComboBoxTypeLine(ui->comboBoxLineType); + connect(ui->lineEditNamePoint, &QLineEdit::textChanged, this, &DialogHeight::NamePointChanged); +} + +DialogHeight::~DialogHeight(){ + delete ui; +} + +void DialogHeight::setPointName(const QString &value){ + pointName = value; + ui->lineEditNamePoint->setText(pointName); +} + +void DialogHeight::setTypeLine(const QString &value){ + typeLine = value; + SetupTypeLine(ui->comboBoxLineType, value); +} + +void DialogHeight::setBasePointId(const qint64 &value, const qint64 &id){ + basePointId = value; + setCurrentPointId(ui->comboBoxBasePoint, basePointId, value, id); +} + +void DialogHeight::setP1LineId(const qint64 &value, const qint64 &id){ + p1LineId = value; + setCurrentPointId(ui->comboBoxP1Line, p1LineId, value, id); +} + +void DialogHeight::setP2LineId(const qint64 &value, const qint64 &id){ + p2LineId = value; + setCurrentPointId(ui->comboBoxP2Line, p2LineId, value, id); +} + +void DialogHeight::ChoosedObject(qint64 id, Scene::Scenes type){ + if(idDetail == 0 && mode == Draw::Modeling){ + if(type == Scene::Detail){ + idDetail = id; + return; + } + } + if(mode == Draw::Modeling){ + if(!CheckObject(id)){ + return; + } + } + if(type == Scene::Point){ + VPointF point; + if(mode == Draw::Calculation){ + point = data->GetPoint(id); + } else { + point = data->GetModelingPoint(id); + } + switch(number){ + case(0): + ChangeCurrentText(ui->comboBoxBasePoint, point.name()); + number++; + emit ToolTip(tr("Select first point of line")); + break; + case(1): + ChangeCurrentText(ui->comboBoxP1Line, point.name()); + number++; + emit ToolTip(tr("Select second point of line")); + break; + case(2): + ChangeCurrentText(ui->comboBoxP2Line, point.name()); + number = 0; + emit ToolTip(tr("")); + if(!isInitialized){ + this->show(); + } + break; + } + } +} + +void DialogHeight::DialogAccepted(){ + pointName = ui->lineEditNamePoint->text(); + typeLine = GetTypeLine(ui->comboBoxLineType); + basePointId = getCurrentPointId(ui->comboBoxBasePoint); + p1LineId = getCurrentPointId(ui->comboBoxP1Line); + p2LineId = getCurrentPointId(ui->comboBoxP2Line); + emit DialogClosed(QDialog::Accepted); +} + diff --git a/dialogs/dialogheight.h b/dialogs/dialogheight.h new file mode 100644 index 000000000..933b2d786 --- /dev/null +++ b/dialogs/dialogheight.h @@ -0,0 +1,61 @@ +/**************************************************************************** + ** + ** Copyright (C) 2013 Valentina project All Rights Reserved. + ** + ** This file is part of Valentina. + ** + ** Tox 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 DIALOGHEIGHT_H +#define DIALOGHEIGHT_H + +#include "dialogtool.h" + +namespace Ui { +class DialogHeight; +} + +class DialogHeight : public DialogTool{ + Q_OBJECT +public: + explicit DialogHeight(const VContainer *data, Draw::Draws mode = Draw::Calculation, + QWidget *parent = 0); + ~DialogHeight(); + inline QString getPointName() const {return pointName;} + void setPointName(const QString &value); + inline QString getTypeLine() const {return typeLine;} + void setTypeLine(const QString &value); + inline qint64 getBasePointId() const {return basePointId;} + void setBasePointId(const qint64 &value, const qint64 &id); + inline qint64 getP1LineId() const {return p1LineId;} + void setP1LineId(const qint64 &value, const qint64 &id); + inline qint64 getP2LineId() const{return p2LineId;} + void setP2LineId(const qint64 &value, const qint64 &id); +public slots: + virtual void ChoosedObject(qint64 id, Scene::Scenes type); + virtual void DialogAccepted(); +private: + Q_DISABLE_COPY(DialogHeight) + Ui::DialogHeight *ui; + qint32 number; + QString pointName; + QString typeLine; + qint64 basePointId; + qint64 p1LineId; + qint64 p2LineId; +}; + +#endif // DIALOGHEIGHT_H diff --git a/dialogs/dialogheight.ui b/dialogs/dialogheight.ui new file mode 100644 index 000000000..9c4900050 --- /dev/null +++ b/dialogs/dialogheight.ui @@ -0,0 +1,214 @@ + + + DialogHeight + + + + 0 + 0 + 247 + 220 + + + + Dialog + + + + + + + + + + + + 0 + 0 + + + + + + + + + 255 + 0 + 0 + + + + + + + + + 255 + 0 + 0 + + + + + + + + + 159 + 158 + 158 + + + + + + + + Name new point + + + + + + + + + + + + + + + 0 + 0 + + + + Base point + + + + + + + First point of line + + + + + + + + + + + + 0 + 0 + + + + First point of line + + + + + + + First point of line + + + + + + + + + + + + 0 + 0 + + + + Second point of line + + + + + + + First point of line + + + + + + + + + + + Type line + + + + + + + Show line from first point to our point + + + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + + + buttonBox + accepted() + DialogHeight + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + DialogHeight + reject() + + + 316 + 260 + + + 286 + 274 + + + + + diff --git a/dialogs/dialoghistory.cpp b/dialogs/dialoghistory.cpp index d343e09f6..80b71d293 100644 --- a/dialogs/dialoghistory.cpp +++ b/dialogs/dialoghistory.cpp @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -147,15 +147,15 @@ QString DialogHistory::Record(const VToolRecord &tool){ case Tool::ArrowTool: break; case Tool::SinglePointTool: - record = QString("%1 - Базова точка").arg(data->GetPoint(tool.getId()).name()); + record = QString(tr("%1 - Base point")).arg(data->GetPoint(tool.getId()).name()); break; case Tool::EndLineTool: domElement = doc->elementById(QString().setNum(tool.getId())); if(domElement.isElement()){ basePointId = domElement.attribute("basePoint", "").toLongLong(); } - record = QString("%1_%2 - Відрізок з точки %1 до точки %2").arg(data->GetPoint(basePointId).name(), - data->GetPoint(tool.getId()).name()); + record = QString(tr("%1_%2 - Line from point %1 to point %2")).arg(data->GetPoint(basePointId).name(), + data->GetPoint(tool.getId()).name()); break; case Tool::LineTool: domElement = doc->elementById(QString().setNum(tool.getId())); @@ -163,8 +163,8 @@ QString DialogHistory::Record(const VToolRecord &tool){ firstPointId = domElement.attribute("firstPoint", "").toLongLong(); secondPointId = domElement.attribute("secondPoint", "").toLongLong(); } - record = QString("%1_%2 - Лінія з точки %1 до точки %2").arg(data->GetPoint(firstPointId).name(), - data->GetPoint(secondPointId).name()); + record = QString(tr("%1_%2 - Line from point %1 to point %2")).arg(data->GetPoint(firstPointId).name(), + data->GetPoint(secondPointId).name()); break; case Tool::AlongLineTool: domElement = doc->elementById(QString().setNum(tool.getId())); @@ -172,12 +172,12 @@ QString DialogHistory::Record(const VToolRecord &tool){ basePointId = domElement.attribute("firstPoint", "").toLongLong(); secondPointId = domElement.attribute("secondPoint", "").toLongLong(); } - record = QString("%3 - Точка на відрізку %1_%2").arg(data->GetPoint(basePointId).name(), - data->GetPoint(secondPointId).name(), - data->GetPoint(tool.getId()).name()); + record = QString(tr("%3 - Point along line %1_%2")).arg(data->GetPoint(basePointId).name(), + data->GetPoint(secondPointId).name(), + data->GetPoint(tool.getId()).name()); break; case Tool::ShoulderPointTool: - record = QString("%1 - Плечева точка").arg(data->GetPoint(tool.getId()).name()); + record = QString(tr("%1 - Point of soulder")).arg(data->GetPoint(tool.getId()).name()); break; case Tool::NormalTool: domElement = doc->elementById(QString().setNum(tool.getId())); @@ -185,9 +185,9 @@ QString DialogHistory::Record(const VToolRecord &tool){ basePointId = domElement.attribute("firstPoint", "").toLongLong(); secondPointId = domElement.attribute("secondPoint", "").toLongLong(); } - record = QString("%3 - Перпендикуляр до відрузку %1_%2").arg(data->GetPoint(basePointId).name(), - data->GetPoint(secondPointId).name(), - data->GetPoint(tool.getId()).name()); + record = QString(tr("%3 - Normal to line %1_%2")).arg(data->GetPoint(basePointId).name(), + data->GetPoint(secondPointId).name(), + data->GetPoint(tool.getId()).name()); break; case Tool::BisectorTool: domElement = doc->elementById(QString().setNum(tool.getId())); @@ -196,10 +196,10 @@ QString DialogHistory::Record(const VToolRecord &tool){ basePointId = domElement.attribute("secondPoint", "").toLongLong(); thirdPointId = domElement.attribute("thirdPoint", "").toLongLong(); } - record = QString("%4 - Бісектриса кута %1_%2_%3").arg(data->GetPoint(firstPointId).name(), - data->GetPoint(basePointId).name(), - data->GetPoint(thirdPointId).name(), - data->GetPoint(tool.getId()).name()); + record = QString(tr("%4 - Bisector of angle %1_%2_%3")).arg(data->GetPoint(firstPointId).name(), + data->GetPoint(basePointId).name(), + data->GetPoint(thirdPointId).name(), + data->GetPoint(tool.getId()).name()); break; case Tool::LineIntersectTool: domElement = doc->elementById(QString().setNum(tool.getId())); @@ -209,28 +209,28 @@ QString DialogHistory::Record(const VToolRecord &tool){ p1Line2 = domElement.attribute("p1Line2", "").toLongLong(); p2Line2 = domElement.attribute("p2Line2", "").toLongLong(); } - record = QString("%5 - Точка перетину відрузку %1_%2 і %3_%4").arg(data->GetPoint(p1Line1).name(), - data->GetPoint(p2Line1).name(), - data->GetPoint(p1Line2).name(), - data->GetPoint(p2Line2).name(), - data->GetPoint(tool.getId()).name()); + record = QString(tr("%5 - Point of intersection lines %1_%2 and %3_%4")).arg(data->GetPoint(p1Line1).name(), + data->GetPoint(p2Line1).name(), + data->GetPoint(p1Line2).name(), + data->GetPoint(p2Line2).name(), + data->GetPoint(tool.getId()).name()); break; case Tool::SplineTool:{ VSpline spl = data->GetSpline(tool.getId()); - record = QString("Сплайн %1_%2").arg(data->GetPoint(spl.GetP1()).name(), + record = QString(tr("Curve %1_%2")).arg(data->GetPoint(spl.GetP1()).name(), data->GetPoint(spl.GetP4()).name()); } break; case Tool::ArcTool:{ VArc arc = data->GetArc(tool.getId()); - record = QString("Дуга з центром в точці %1").arg(data->GetPoint(arc.GetCenter()).name()); + record = QString(tr("Arc with center in point %1")).arg(data->GetPoint(arc.GetCenter()).name()); } break; case Tool::SplinePathTool:{ VSplinePath splPath = data->GetSplinePath(tool.getId()); QVector points = splPath.GetSplinePath(); if(points.size() != 0 ){ - record = QString("Шлях сплайну %1").arg(data->GetPoint(points[0].P()).name()); + record = QString(tr("Curve point %1")).arg(data->GetPoint(points[0].P()).name()); for(qint32 i = 1; i< points.size(); ++i){ QString name = QString("_%1").arg(data->GetPoint(points[i].P()).name()); record.append(name); @@ -245,13 +245,42 @@ QString DialogHistory::Record(const VToolRecord &tool){ firstPointId = domElement.attribute("firstPoint", "").toLongLong(); secondPointId = domElement.attribute("secondPoint", "").toLongLong(); } - record = QString("%4 - Точка дотику дуги з центром в точці %1 і відрізку %2_%3").arg(data->GetPoint(center).name(), - data->GetPoint(firstPointId).name(), - data->GetPoint(secondPointId).name(), - data->GetPoint(tool.getId()).name()); + record = QString(tr("%4 - Point of contact arc with center in point %1 and line %2_%3")).arg(data->GetPoint(center).name(), + data->GetPoint(firstPointId).name(), + data->GetPoint(secondPointId).name(), + data->GetPoint(tool.getId()).name()); break; + case Tool::Height:{ + qint64 p1LineId = 0; + qint64 p2LineId = 0; + domElement = doc->elementById(QString().setNum(tool.getId())); + if(domElement.isElement()){ + basePointId = domElement.attribute("basePoint", "").toLongLong(); + p1LineId = domElement.attribute("p1Line", "").toLongLong(); + p2LineId = domElement.attribute("p2Line", "").toLongLong(); + } + record = QString(tr("Point of perpendical from point %1 to line %2_%3")).arg(data->GetPoint(basePointId).name(), + data->GetPoint(p1LineId).name(), + data->GetPoint(p2LineId).name()); + break; + } + case Tool::Triangle:{ + qint64 axisP1Id = 0; + qint64 axisP2Id = 0; + domElement = doc->elementById(QString().setNum(tool.getId())); + if(domElement.isElement()){ + axisP1Id = domElement.attribute("axisP1", "").toLongLong(); + axisP2Id = domElement.attribute("axisP2", "").toLongLong(); + firstPointId = domElement.attribute("firstPoint", "").toLongLong(); + secondPointId = domElement.attribute("secondPoint", "").toLongLong(); + } + record = QString(tr("Triangle: axis %1_%2, points %3 and %4")).arg( + data->GetPoint(axisP1Id).name(),data->GetPoint(axisP2Id).name(), + data->GetPoint(firstPointId).name(), data->GetPoint(secondPointId).name()); + break; + } default: - qWarning()<<"Get wrong tool type. Ignore."; + qWarning()<tableWidget->setSortingEnabled(false); ui->tableWidget->setHorizontalHeaderItem(0, new QTableWidgetItem(" ")); - ui->tableWidget->setHorizontalHeaderItem(1, new QTableWidgetItem("Інструмент")); + ui->tableWidget->setHorizontalHeaderItem(1, new QTableWidgetItem(tr("Tool"))); } void DialogHistory::ShowPoint(){ @@ -275,7 +304,6 @@ void DialogHistory::ShowPoint(){ } } - void DialogHistory::closeEvent(QCloseEvent *event){ QTableWidgetItem *item = ui->tableWidget->item(cursorToolRecordRow, 0); qint64 id = qvariant_cast(item->data(Qt::UserRole)); diff --git a/dialogs/dialoghistory.h b/dialogs/dialoghistory.h index a515a94a2..bd650452e 100644 --- a/dialogs/dialoghistory.h +++ b/dialogs/dialoghistory.h @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -29,32 +29,30 @@ namespace Ui { class DialogHistory; } -class DialogHistory : public DialogTool -{ +class DialogHistory : public DialogTool{ Q_OBJECT - public: - explicit DialogHistory(VContainer *data, VDomDocument *doc, QWidget *parent = 0); - virtual ~DialogHistory(); + DialogHistory(VContainer *data, VDomDocument *doc, QWidget *parent = 0); + virtual ~DialogHistory(); public slots: - virtual void DialogAccepted(); - void cellClicked(int row, int column); - void ChangedCursor(qint64 id); - void UpdateHistory(); + virtual void DialogAccepted(); + void cellClicked(int row, int column); + void ChangedCursor(qint64 id); + void UpdateHistory(); signals: - void ShowHistoryTool(qint64 id, Qt::GlobalColor color, bool enable); + void ShowHistoryTool(qint64 id, Qt::GlobalColor color, bool enable); protected: - virtual void closeEvent ( QCloseEvent * event ); + virtual void closeEvent ( QCloseEvent * event ); private: Q_DISABLE_COPY(DialogHistory) Ui::DialogHistory *ui; - VDomDocument *doc; - qint32 cursorRow; - qint32 cursorToolRecordRow; - void FillTable(); - QString Record(const VToolRecord &tool); - void InitialTable(); - void ShowPoint(); + VDomDocument *doc; + qint32 cursorRow; + qint32 cursorToolRecordRow; + void FillTable(); + QString Record(const VToolRecord &tool); + void InitialTable(); + void ShowPoint(); }; #endif // DIALOGHISTORY_H diff --git a/dialogs/dialoghistory.ui b/dialogs/dialoghistory.ui index 8730daa26..20eaac344 100644 --- a/dialogs/dialoghistory.ui +++ b/dialogs/dialoghistory.ui @@ -68,6 +68,10 @@ + + tableWidget + buttonBox + diff --git a/dialogs/dialogincrements.cpp b/dialogs/dialogincrements.cpp index 7f5847f24..86f2348c6 100644 --- a/dialogs/dialogincrements.cpp +++ b/dialogs/dialogincrements.cpp @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -21,17 +21,18 @@ #include "dialogincrements.h" #include "ui_dialogincrements.h" -#include -#include -#include "widgets/doubledelegate.h" -#include "container/vincrementtablerow.h" +#include +#include DialogIncrements::DialogIncrements(VContainer *data, VDomDocument *doc, QWidget *parent) : - DialogTool(data, Draw::Calculation, parent), ui(new Ui::DialogIncrements), data(data), doc(doc){ + DialogTool(data, Draw::Calculation, parent), ui(new Ui::DialogIncrements), data(data), doc(doc), + row(0), column(0){ ui->setupUi(this); InitialStandartTable(); InitialIncrementTable(); InitialLinesTable(); + InitialSplinesTable(); + InitialArcsTable(); DoubleSpinBoxDelegate *doubleDelegate = new DoubleSpinBoxDelegate(ui->tableWidgetIncrement); ui->tableWidgetIncrement->setItemDelegateForColumn(2, doubleDelegate); ui->tableWidgetIncrement->setItemDelegateForColumn(3, doubleDelegate); @@ -39,7 +40,10 @@ DialogIncrements::DialogIncrements(VContainer *data, VDomDocument *doc, QWidget FillStandartTable(); FillIncrementTable(); FillLengthLines(); + FillLengthSplines(); + FillLengthArcs(); + connect(ui->tableWidgetIncrement, &QTableWidget::cellChanged, this, &DialogIncrements::cellChanged); connect(ui->toolButtonAdd, &QPushButton::clicked, this, &DialogIncrements::clickedToolButtonAdd); connect(ui->toolButtonRemove, &QPushButton::clicked, this, &DialogIncrements::clickedToolButtonRemove); @@ -51,12 +55,13 @@ DialogIncrements::DialogIncrements(VContainer *data, VDomDocument *doc, QWidget bOk = ui->buttonBox->button(QDialogButtonBox::Ok); connect(bOk, &QPushButton::clicked, this, &DialogIncrements::DialogAccepted); + ui->tabWidget->setCurrentIndex(0); } void DialogIncrements::FillStandartTable(){ - const QMap *standartTable = data->DataStandartTable(); + const QHash *standartTable = data->DataStandartTable(); qint32 currentRow = -1; - QMapIterator i(*standartTable); + QHashIterator i(*standartTable); ui->tableWidgetStandart->setRowCount ( standartTable->size() ); while (i.hasNext()) { i.next(); @@ -94,22 +99,31 @@ void DialogIncrements::FillStandartTable(){ } void DialogIncrements::FillIncrementTable(){ - const QMap *incrementTable = data->DataIncrementTable(); - qint32 currentRow = -1; - QMapIterator i(*incrementTable); + const QHash *incrementTable = data->DataIncrementTable(); + QHashIterator i(*incrementTable); + QMap map; + //Sorting QHash by id while (i.hasNext()) { i.next(); VIncrementTableRow cell = i.value(); + map.insert(cell.getId(), i.key()); + } + + qint32 currentRow = -1; + QMapIterator iMap(map); + while (iMap.hasNext()) { + iMap.next(); + VIncrementTableRow cell = incrementTable->value(iMap.value()); currentRow++; ui->tableWidgetIncrement->setRowCount ( incrementTable->size() ); - QTableWidgetItem *item = new QTableWidgetItem(QString(i.key())); + QTableWidgetItem *item = new QTableWidgetItem(iMap.value()); item->setTextAlignment(Qt::AlignHCenter); item->setFont(QFont("Times", 12, QFont::Bold)); item->setData(Qt::UserRole, cell.getId()); ui->tableWidgetIncrement->setItem(currentRow, 0, item); - item = new QTableWidgetItem(QString().setNum(data->GetValueIncrementTableRow(i.key()))); + item = new QTableWidgetItem(QString().setNum(data->GetValueIncrementTableRow(iMap.value()))); item->setTextAlignment(Qt::AlignHCenter); // set the item non-editable (view only), and non-selectable Qt::ItemFlags flags = item->flags(); @@ -130,7 +144,7 @@ void DialogIncrements::FillIncrementTable(){ ui->tableWidgetIncrement->setItem(currentRow, 4, item); item = new QTableWidgetItem(cell.getDescription()); - item->setTextAlignment(Qt::AlignHCenter); + item->setTextAlignment(Qt::AlignLeft); ui->tableWidgetIncrement->setItem(currentRow, 5, item); } if(ui->tableWidgetIncrement->rowCount()>0){ @@ -138,13 +152,21 @@ void DialogIncrements::FillIncrementTable(){ } ui->tableWidgetIncrement->resizeColumnsToContents(); ui->tableWidgetIncrement->resizeRowsToContents(); - ui->tableWidgetIncrement->verticalHeader()->setDefaultSectionSize(20); + ui->tableWidgetIncrement->setCurrentCell( row, column ); } void DialogIncrements::FillLengthLines(){ - const QMap *linesTable = data->DataLengthLines(); + const QHash *linesTable = data->DataLengthLines(); + QHashIterator iHash(*linesTable); + QMap map; + //Sorting QHash by name + while (iHash.hasNext()) { + iHash.next(); + map.insert(iHash.key(), iHash.value()); + } + qint32 currentRow = -1; - QMapIterator i(*linesTable); + QMapIterator i(map); while (i.hasNext()) { i.next(); qreal length = i.value(); @@ -166,9 +188,17 @@ void DialogIncrements::FillLengthLines(){ } void DialogIncrements::FillLengthSplines(){ - const QMap *splinesTable = data->DataLengthSplines(); + const QHash *splinesTable = data->DataLengthSplines(); + QHashIterator iHash(*splinesTable); + QMap map; + //Sorting QHash by name + while (iHash.hasNext()) { + iHash.next(); + map.insert(iHash.key(), iHash.value()); + } + qint32 currentRow = -1; - QMapIterator i(*splinesTable); + QMapIterator i(map); while (i.hasNext()) { i.next(); qreal length = i.value(); @@ -176,7 +206,7 @@ void DialogIncrements::FillLengthSplines(){ ui->tableWidgetSplines->setRowCount ( splinesTable->size() ); QTableWidgetItem *item = new QTableWidgetItem(QString(i.key())); - item->setTextAlignment(Qt::AlignHCenter); + item->setTextAlignment(Qt::AlignLeft); item->setFont(QFont("Times", 12, QFont::Bold)); ui->tableWidgetSplines->setItem(currentRow, 0, item); @@ -190,9 +220,17 @@ void DialogIncrements::FillLengthSplines(){ } void DialogIncrements::FillLengthArcs(){ - const QMap *arcsTable = data->DataLengthArcs(); + const QHash *arcsTable = data->DataLengthArcs(); + QHashIterator iHash(*arcsTable); + QMap map; + //Sorting QHash by name + while (iHash.hasNext()) { + iHash.next(); + map.insert(iHash.key(), iHash.value()); + } + qint32 currentRow = -1; - QMapIterator i(*arcsTable); + QMapIterator i(map); while (i.hasNext()) { i.next(); qreal length = i.value(); @@ -251,15 +289,15 @@ void DialogIncrements::clickedToolButtonAdd(){ qint32 num = 1; QString name; do{ - name = QString("Позначення %1").arg(num); + name = QString(tr("Denotation %1")).arg(num); num++; }while(data->IncrementTableContains(name)); qint64 id = data->getNextId(); - qint32 base = 0; + qreal base = 0; qreal ksize = 0; qreal kgrowth = 0; - QString description = QString("Опис"); + QString description = QString(tr("Description")); VIncrementTableRow incrementRow = VIncrementTableRow(id, base, ksize, kgrowth, description); data->AddIncrementTableRow(name, incrementRow); @@ -292,13 +330,14 @@ void DialogIncrements::clickedToolButtonAdd(){ item->setTextAlignment(Qt::AlignHCenter); ui->tableWidgetIncrement->setItem(currentRow, 4, item); - item = new QTableWidgetItem("Опис"); + item = new QTableWidgetItem(tr("Description")); item->setTextAlignment(Qt::AlignHCenter); ui->tableWidgetIncrement->setItem(currentRow, 5, item); ui->toolButtonRemove->setEnabled(true); connect(ui->tableWidgetIncrement, &QTableWidget::cellChanged, this, &DialogIncrements::cellChanged); + emit haveLiteChange(); } void DialogIncrements::clickedToolButtonRemove(){ @@ -320,9 +359,10 @@ void DialogIncrements::clickedToolButtonRemove(){ } connect(ui->tableWidgetIncrement, &QTableWidget::cellChanged, this, &DialogIncrements::cellChanged); + emit haveLiteChange(); } -void DialogIncrements::AddIncrementToFile(qint64 id, QString name, qint32 base, qreal ksize, +void DialogIncrements::AddIncrementToFile(qint64 id, QString name, qreal base, qreal ksize, qreal kgrowth, QString description){ QDomNodeList list = doc->elementsByTagName("increments"); QDomElement element = doc->createElement("increment"); @@ -355,10 +395,11 @@ void DialogIncrements::AddIncrementToFile(qint64 id, QString name, qint32 base, } void DialogIncrements::cellChanged ( qint32 row, qint32 column ){ - QTableWidgetItem *item; - QTableWidgetItem *itemName; + QTableWidgetItem *item = 0; + QTableWidgetItem *itemName = 0; qint64 id; QDomElement domElement; + this->row = row; switch(column) { case 0: item = ui->tableWidgetIncrement->item(row, 0); @@ -367,6 +408,7 @@ void DialogIncrements::cellChanged ( qint32 row, qint32 column ){ if(domElement.isElement()){ domElement.setAttribute("name", item->text()); data->ClearIncrementTable(); + this->column = 2; emit FullUpdateTree(); } break; @@ -376,8 +418,15 @@ void DialogIncrements::cellChanged ( qint32 row, qint32 column ){ id = qvariant_cast(itemName->data(Qt::UserRole)); domElement = doc->elementById(QString().setNum(id)); if(domElement.isElement()){ - domElement.setAttribute("base", item->text().toDouble()); - emit FullUpdateTree(); + bool ok = false; + qreal value = item->text().toDouble(&ok); + if(ok){ + domElement.setAttribute("base", value); + this->column = 3; + emit FullUpdateTree(); + } else { + throw VException(tr("Can't convert toDouble value.")); + } } break; case 3: @@ -387,6 +436,7 @@ void DialogIncrements::cellChanged ( qint32 row, qint32 column ){ domElement = doc->elementById(QString().setNum(id)); if(domElement.isElement()){ domElement.setAttribute("ksize", item->text().toDouble()); + this->column = 4; emit FullUpdateTree(); } break; @@ -397,6 +447,7 @@ void DialogIncrements::cellChanged ( qint32 row, qint32 column ){ domElement = doc->elementById(QString().setNum(id)); if(domElement.isElement()){ domElement.setAttribute("kgrowth", item->text().toDouble()); + this->column = 5; emit FullUpdateTree(); } break; @@ -410,6 +461,9 @@ void DialogIncrements::cellChanged ( qint32 row, qint32 column ){ VIncrementTableRow incr = data->GetIncrementTableRow(itemName->text()); incr.setDescription(item->text()); data->UpdateIncrementTableRow(itemName->text(), incr); + ui->tableWidgetIncrement->resizeColumnsToContents(); + ui->tableWidgetIncrement->resizeRowsToContents(); + ui->tableWidgetIncrement->setCurrentCell( row, 0 ); emit haveLiteChange(); } break; @@ -418,37 +472,38 @@ void DialogIncrements::cellChanged ( qint32 row, qint32 column ){ void DialogIncrements::InitialStandartTable(){ ui->tableWidgetStandart->setSortingEnabled(false); - ui->tableWidgetStandart->setHorizontalHeaderItem(0, new QTableWidgetItem("Позначення")); - ui->tableWidgetStandart->setHorizontalHeaderItem(1, new QTableWidgetItem("Розрах. знач.")); - ui->tableWidgetStandart->setHorizontalHeaderItem(2, new QTableWidgetItem("Базове знач.")); - ui->tableWidgetStandart->setHorizontalHeaderItem(3, new QTableWidgetItem("В розмірі")); - ui->tableWidgetStandart->setHorizontalHeaderItem(4, new QTableWidgetItem("В рості")); - ui->tableWidgetStandart->setHorizontalHeaderItem(5, new QTableWidgetItem("Опис")); + ui->tableWidgetStandart->setHorizontalHeaderItem(0, new QTableWidgetItem(tr("Denotation"))); + ui->tableWidgetStandart->setHorizontalHeaderItem(1, new QTableWidgetItem(tr("Calculated value"))); + ui->tableWidgetStandart->setHorizontalHeaderItem(2, new QTableWidgetItem(tr("Base value"))); + ui->tableWidgetStandart->setHorizontalHeaderItem(3, new QTableWidgetItem(tr("In size"))); + ui->tableWidgetStandart->setHorizontalHeaderItem(4, new QTableWidgetItem(tr("In growth"))); + ui->tableWidgetStandart->setHorizontalHeaderItem(5, new QTableWidgetItem(tr("Description"))); } void DialogIncrements::InitialIncrementTable(){ ui->tableWidgetIncrement->setSortingEnabled(false); - ui->tableWidgetIncrement->setHorizontalHeaderItem(0, new QTableWidgetItem("Позначення")); - ui->tableWidgetIncrement->setHorizontalHeaderItem(1, new QTableWidgetItem("Розрах. знач.")); - ui->tableWidgetIncrement->setHorizontalHeaderItem(2, new QTableWidgetItem("Базове знач.")); - ui->tableWidgetIncrement->setHorizontalHeaderItem(3, new QTableWidgetItem("В розмірі")); - ui->tableWidgetIncrement->setHorizontalHeaderItem(4, new QTableWidgetItem("В рості")); - ui->tableWidgetIncrement->setHorizontalHeaderItem(5, new QTableWidgetItem("Опис")); + ui->tableWidgetIncrement->setHorizontalHeaderItem(0, new QTableWidgetItem(tr("Denotation"))); + ui->tableWidgetIncrement->setHorizontalHeaderItem(1, new QTableWidgetItem(tr("Calculated value"))); + ui->tableWidgetIncrement->setHorizontalHeaderItem(2, new QTableWidgetItem(tr("Base value"))); + ui->tableWidgetIncrement->setHorizontalHeaderItem(3, new QTableWidgetItem(tr("In size"))); + ui->tableWidgetIncrement->setHorizontalHeaderItem(4, new QTableWidgetItem(tr("In growth"))); + ui->tableWidgetIncrement->setHorizontalHeaderItem(5, new QTableWidgetItem(tr("Description"))); + ui->tableWidgetIncrement->verticalHeader()->setDefaultSectionSize(20); } void DialogIncrements::InitialLinesTable(){ - ui->tableWidgetLines->setHorizontalHeaderItem(0, new QTableWidgetItem("Лінія")); - ui->tableWidgetLines->setHorizontalHeaderItem(1, new QTableWidgetItem("Довжина")); + ui->tableWidgetLines->setHorizontalHeaderItem(0, new QTableWidgetItem(tr("Line"))); + ui->tableWidgetLines->setHorizontalHeaderItem(1, new QTableWidgetItem(tr("Length"))); } void DialogIncrements::InitialSplinesTable(){ - ui->tableWidgetSplines->setHorizontalHeaderItem(0, new QTableWidgetItem("Лінія")); - ui->tableWidgetSplines->setHorizontalHeaderItem(1, new QTableWidgetItem("Довжина")); + ui->tableWidgetSplines->setHorizontalHeaderItem(0, new QTableWidgetItem(tr("Curve"))); + ui->tableWidgetSplines->setHorizontalHeaderItem(1, new QTableWidgetItem(tr("Length"))); } void DialogIncrements::InitialArcsTable(){ - ui->tableWidgetArcs->setHorizontalHeaderItem(0, new QTableWidgetItem("Лінія")); - ui->tableWidgetArcs->setHorizontalHeaderItem(1, new QTableWidgetItem("Довжина")); + ui->tableWidgetArcs->setHorizontalHeaderItem(0, new QTableWidgetItem(tr("Arc"))); + ui->tableWidgetArcs->setHorizontalHeaderItem(1, new QTableWidgetItem(tr("Length"))); } void DialogIncrements::DialogAccepted(){ diff --git a/dialogs/dialogincrements.h b/dialogs/dialogincrements.h index b7569b787..a9f5d9e8a 100644 --- a/dialogs/dialogincrements.h +++ b/dialogs/dialogincrements.h @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -29,38 +29,39 @@ namespace Ui { class DialogIncrements; } -class DialogIncrements : public DialogTool -{ +class DialogIncrements : public DialogTool{ Q_OBJECT public: - explicit DialogIncrements(VContainer *data, VDomDocument *doc, QWidget *parent = 0); - ~DialogIncrements(); + DialogIncrements(VContainer *data, VDomDocument *doc, QWidget *parent = 0); + ~DialogIncrements(); public slots: - void clickedToolButtonAdd(); - void clickedToolButtonRemove(); - void cellChanged ( qint32 row, qint32 column ); - void FullUpdateFromFile(); - virtual void DialogAccepted(); + void clickedToolButtonAdd(); + void clickedToolButtonRemove(); + void cellChanged ( qint32 row, qint32 column ); + void FullUpdateFromFile(); + virtual void DialogAccepted(); signals: - void FullUpdateTree(); - void haveLiteChange(); + void FullUpdateTree(); + void haveLiteChange(); private: Q_DISABLE_COPY(DialogIncrements) Ui::DialogIncrements *ui; - VContainer *data; // need because we must change data - VDomDocument *doc; - void InitialStandartTable(); - void InitialIncrementTable(); - void InitialLinesTable(); - void InitialSplinesTable(); - void InitialArcsTable(); - void FillStandartTable(); - void FillIncrementTable(); - void FillLengthLines(); - void FillLengthSplines(); - void FillLengthArcs(); - void AddIncrementToFile(qint64 id, QString name, qint32 base, qreal ksize, qreal kgrowth, - QString description); + VContainer *data; // need because we must change data + VDomDocument *doc; + qint32 row; + qint32 column; + void InitialStandartTable(); + void InitialIncrementTable(); + void InitialLinesTable(); + void InitialSplinesTable(); + void InitialArcsTable(); + void FillStandartTable(); + void FillIncrementTable(); + void FillLengthLines(); + void FillLengthSplines(); + void FillLengthArcs(); + void AddIncrementToFile(qint64 id, QString name, qreal base, qreal ksize, qreal kgrowth, + QString description); }; #endif // DIALOGINCREMENTS_H diff --git a/dialogs/dialogincrements.ui b/dialogs/dialogincrements.ui index 2de0226b4..74203d5cc 100644 --- a/dialogs/dialogincrements.ui +++ b/dialogs/dialogincrements.ui @@ -27,7 +27,7 @@ QTabWidget::North - 4 + 1 @@ -149,9 +149,15 @@ false + + false + 45 + + false + Denotation @@ -338,6 +344,17 @@ + + tabWidget + tableWidgetStandart + tableWidgetIncrement + toolButtonAdd + toolButtonRemove + tableWidgetLines + tableWidgetSplines + tableWidgetArcs + buttonBox + diff --git a/dialogs/dialogline.cpp b/dialogs/dialogline.cpp index 3c0da94b8..a94b65fd5 100644 --- a/dialogs/dialogline.cpp +++ b/dialogs/dialogline.cpp @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -21,8 +21,6 @@ #include "dialogline.h" #include "ui_dialogline.h" -#include -#include DialogLine::DialogLine(const VContainer *data, Draw::Draws mode, QWidget *parent) : DialogTool(data, mode, parent), ui(new Ui::DialogLine), number(0), firstPoint(0), secondPoint(0){ @@ -40,10 +38,6 @@ DialogLine::~DialogLine(){ delete ui; } -qint64 DialogLine::getSecondPoint() const{ - return secondPoint; -} - void DialogLine::setSecondPoint(const qint64 &value){ secondPoint = value; VPointF point = data->GetPoint(value); @@ -53,10 +47,6 @@ void DialogLine::setSecondPoint(const qint64 &value){ } } -qint64 DialogLine::getFirstPoint() const{ - return firstPoint; -} - void DialogLine::setFirstPoint(const qint64 &value){ firstPoint = value; VPointF point = data->GetPoint(value); @@ -99,6 +89,7 @@ void DialogLine::ChoosedObject(qint64 id, Scene::Scenes type){ if ( index != -1 ) { // -1 for not found ui->comboBoxFirstPoint->setCurrentIndex(index); number++; + emit ToolTip(tr("Select second point")); return; } } @@ -107,6 +98,7 @@ void DialogLine::ChoosedObject(qint64 id, Scene::Scenes type){ if ( index != -1 ) { // -1 for not found ui->comboBoxSecondPoint->setCurrentIndex(index); number = 0; + emit ToolTip(""); } if(!isInitialized){ this->show(); diff --git a/dialogs/dialogline.h b/dialogs/dialogline.h index dca627eaa..99bc99d1a 100644 --- a/dialogs/dialogline.h +++ b/dialogs/dialogline.h @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -28,16 +28,15 @@ namespace Ui { class DialogLine; } -class DialogLine : public DialogTool -{ +class DialogLine : public DialogTool{ Q_OBJECT public: explicit DialogLine(const VContainer *data, Draw::Draws mode = Draw::Calculation, QWidget *parent = 0); ~DialogLine(); - qint64 getFirstPoint() const; + inline qint64 getFirstPoint() const {return firstPoint;} void setFirstPoint(const qint64 &value); - qint64 getSecondPoint() const; + inline qint64 getSecondPoint() const {return secondPoint;} void setSecondPoint(const qint64 &value); public slots: void ChoosedObject(qint64 id, Scene::Scenes type); diff --git a/dialogs/dialogline.ui b/dialogs/dialogline.ui index a449002d8..b575f1d52 100644 --- a/dialogs/dialogline.ui +++ b/dialogs/dialogline.ui @@ -61,6 +61,11 @@ + + comboBoxFirstPoint + comboBoxSecondPoint + buttonBox + diff --git a/dialogs/dialoglineintersect.cpp b/dialogs/dialoglineintersect.cpp index 795a6f132..347c45815 100644 --- a/dialogs/dialoglineintersect.cpp +++ b/dialogs/dialoglineintersect.cpp @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -29,6 +29,7 @@ DialogLineIntersect::DialogLineIntersect(const VContainer *data, Draw::Draws mod number = 0; bOk = ui->buttonBox->button(QDialogButtonBox::Ok); connect(bOk, &QPushButton::clicked, this, &DialogLineIntersect::DialogAccepted); + labelEditNamePoint = ui->labelEditNamePoint; flagName = false; QPushButton *bCansel = ui->buttonBox->button(QDialogButtonBox::Cancel); connect(bCansel, &QPushButton::clicked, this, &DialogLineIntersect::DialogRejected); @@ -40,8 +41,7 @@ DialogLineIntersect::DialogLineIntersect(const VContainer *data, Draw::Draws mod connect(ui->lineEditNamePoint, &QLineEdit::textChanged, this, &DialogLineIntersect::NamePointChanged); } -DialogLineIntersect::~DialogLineIntersect() -{ +DialogLineIntersect::~DialogLineIntersect(){ delete ui; } @@ -70,6 +70,7 @@ void DialogLineIntersect::ChoosedObject(qint64 id, Scene::Scenes type){ ui->comboBoxP1Line1->setCurrentIndex(index); p1Line1 = id; number++; + emit ToolTip(tr("Select second point of first line")); return; } } @@ -79,6 +80,7 @@ void DialogLineIntersect::ChoosedObject(qint64 id, Scene::Scenes type){ ui->comboBoxP2Line1->setCurrentIndex(index); p2Line1 = id; number++; + emit ToolTip(tr("Select first point of second line")); return; } } @@ -88,6 +90,7 @@ void DialogLineIntersect::ChoosedObject(qint64 id, Scene::Scenes type){ ui->comboBoxP1Line2->setCurrentIndex(index); p1Line2 = id; number++; + emit ToolTip(tr("Select second point of second line")); return; } } @@ -97,6 +100,7 @@ void DialogLineIntersect::ChoosedObject(qint64 id, Scene::Scenes type){ ui->comboBoxP2Line2->setCurrentIndex(index); p2Line2 = id; number = 0; + emit ToolTip(""); } if(!isInitialized){ flagPoint = CheckIntersecion(); @@ -153,7 +157,7 @@ void DialogLineIntersect::P2Line2Changed(int index){ } void DialogLineIntersect::CheckState(){ - Q_CHECK_PTR(bOk); + Q_ASSERT(bOk != 0); bOk->setEnabled(flagName && flagPoint); } @@ -174,46 +178,26 @@ bool DialogLineIntersect::CheckIntersecion(){ } } -qint64 DialogLineIntersect::getP2Line2() const{ - return p2Line2; -} - void DialogLineIntersect::setP2Line2(const qint64 &value){ p2Line2 = value; ChangeCurrentData(ui->comboBoxP2Line2, value); } -qint64 DialogLineIntersect::getP1Line2() const{ - return p1Line2; -} - void DialogLineIntersect::setP1Line2(const qint64 &value){ p1Line2 = value; ChangeCurrentData(ui->comboBoxP1Line2, value); } -qint64 DialogLineIntersect::getP2Line1() const{ - return p2Line1; -} - void DialogLineIntersect::setP2Line1(const qint64 &value){ p2Line1 = value; ChangeCurrentData(ui->comboBoxP2Line1, value); } -qint64 DialogLineIntersect::getP1Line1() const{ - return p1Line1; -} - void DialogLineIntersect::setP1Line1(const qint64 &value){ p1Line1 = value; ChangeCurrentData(ui->comboBoxP1Line1, value); } -QString DialogLineIntersect::getPointName() const{ - return pointName; -} - void DialogLineIntersect::setPointName(const QString &value){ pointName = value; ui->lineEditNamePoint->setText(pointName); diff --git a/dialogs/dialoglineintersect.h b/dialogs/dialoglineintersect.h index 4f2f586b8..34cb19aeb 100644 --- a/dialogs/dialoglineintersect.h +++ b/dialogs/dialoglineintersect.h @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -28,22 +28,21 @@ namespace Ui { class DialogLineIntersect; } -class DialogLineIntersect : public DialogTool -{ +class DialogLineIntersect : public DialogTool{ Q_OBJECT public: explicit DialogLineIntersect(const VContainer *data, Draw::Draws mode = Draw::Calculation, QWidget *parent = 0); ~DialogLineIntersect(); - qint64 getP1Line1() const; + inline qint64 getP1Line1() const {return p1Line1;} void setP1Line1(const qint64 &value); - qint64 getP2Line1() const; + inline qint64 getP2Line1() const {return p2Line1;} void setP2Line1(const qint64 &value); - qint64 getP1Line2() const; + inline qint64 getP1Line2() const {return p1Line2;} void setP1Line2(const qint64 &value); - qint64 getP2Line2() const; + inline qint64 getP2Line2() const {return p2Line2;} void setP2Line2(const qint64 &value); - QString getPointName() const; + inline QString getPointName() const {return pointName;} void setPointName(const QString &value); public slots: virtual void ChoosedObject(qint64 id, Scene::Scenes type); diff --git a/dialogs/dialoglineintersect.ui b/dialogs/dialoglineintersect.ui index d67a62b82..25b5f8e95 100644 --- a/dialogs/dialoglineintersect.ui +++ b/dialogs/dialoglineintersect.ui @@ -24,13 +24,50 @@ - + 0 0 + + + + + + + 255 + 0 + 0 + + + + + + + + + 255 + 0 + 0 + + + + + + + + + 159 + 158 + 158 + + + + + + Name new point @@ -127,6 +164,14 @@ + + lineEditNamePoint + comboBoxP1Line1 + comboBoxP2Line1 + comboBoxP1Line2 + comboBoxP2Line2 + buttonBox + diff --git a/dialogs/dialognormal.cpp b/dialogs/dialognormal.cpp index 8e79ee9d4..0b467145e 100644 --- a/dialogs/dialognormal.cpp +++ b/dialogs/dialognormal.cpp @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -21,7 +21,6 @@ #include "dialognormal.h" #include "ui_dialognormal.h" -#include DialogNormal::DialogNormal(const VContainer *data, Draw::Draws mode, QWidget *parent) : DialogTool(data, mode, parent), ui(new Ui::DialogNormal), number(0), pointName(QString()), @@ -35,7 +34,11 @@ DialogNormal::DialogNormal(const VContainer *data, Draw::Draws mode, QWidget *pa radioButtonStandartTable = ui->radioButtonStandartTable; radioButtonIncrements = ui->radioButtonIncrements; radioButtonLengthLine = ui->radioButtonLengthLine; + radioButtonLengthArc = ui->radioButtonLengthArc; + radioButtonLengthCurve = ui->radioButtonLengthSpline; lineEditFormula = ui->lineEditFormula; + labelEditFormula = ui->labelEditFormula; + labelEditNamePoint = ui->labelEditNamePoint; flagFormula = false; bOk = ui->buttonBox->button(QDialogButtonBox::Ok); connect(bOk, &QPushButton::clicked, this, &DialogNormal::DialogAccepted); @@ -72,13 +75,14 @@ DialogNormal::DialogNormal(const VContainer *data, Draw::Draws mode, QWidget *pa connect(ui->radioButtonStandartTable, &QRadioButton::clicked, this, &DialogNormal::StandartTable); connect(ui->radioButtonIncrements, &QRadioButton::clicked, this, &DialogNormal::Increments); connect(ui->radioButtonLengthLine, &QRadioButton::clicked, this, &DialogNormal::LengthLines); + connect(ui->radioButtonLengthArc, &QRadioButton::clicked, this, &DialogNormal::LengthArcs); + connect(ui->radioButtonLengthSpline, &QRadioButton::clicked, this, &DialogNormal::LengthCurves); connect(ui->toolButtonEqual, &QPushButton::clicked, this, &DialogNormal::EvalFormula); connect(ui->lineEditNamePoint, &QLineEdit::textChanged, this, &DialogNormal::NamePointChanged); connect(ui->lineEditFormula, &QLineEdit::textChanged, this, &DialogNormal::FormulaChanged); } -DialogNormal::~DialogNormal() -{ +DialogNormal::~DialogNormal(){ delete ui; } @@ -106,6 +110,7 @@ void DialogNormal::ChoosedObject(qint64 id, Scene::Scenes type){ if ( index != -1 ) { // -1 for not found ui->comboBoxFirstPoint->setCurrentIndex(index); number++; + emit ToolTip(tr("Select second point of line")); return; } } @@ -114,6 +119,7 @@ void DialogNormal::ChoosedObject(qint64 id, Scene::Scenes type){ if ( index != -1 ) { // -1 for not found ui->comboBoxSecondPoint->setCurrentIndex(index); number = 0; + emit ToolTip(""); } if(!isInitialized){ this->show(); @@ -132,53 +138,29 @@ void DialogNormal::DialogAccepted(){ emit DialogClosed(QDialog::Accepted); } -qint64 DialogNormal::getSecondPointId() const{ - return secondPointId; -} - void DialogNormal::setSecondPointId(const qint64 &value, const qint64 &id){ setCurrentPointId(ui->comboBoxSecondPoint, secondPointId, value, id); } -qint64 DialogNormal::getFirstPointId() const{ - return firstPointId; -} - void DialogNormal::setFirstPointId(const qint64 &value, const qint64 &id){ setCurrentPointId(ui->comboBoxFirstPoint, firstPointId, value, id); } -qreal DialogNormal::getAngle() const{ - return angle; -} - void DialogNormal::setAngle(const qreal &value){ angle = value; ui->doubleSpinBoxAngle->setValue(angle); } -QString DialogNormal::getFormula() const{ - return formula; -} - void DialogNormal::setFormula(const QString &value){ formula = value; ui->lineEditFormula->setText(formula); } -QString DialogNormal::getTypeLine() const{ - return typeLine; -} - void DialogNormal::setTypeLine(const QString &value){ typeLine = value; SetupTypeLine(ui->comboBoxLineType, value); } -QString DialogNormal::getPointName() const{ - return pointName; -} - void DialogNormal::setPointName(const QString &value){ pointName = value; ui->lineEditNamePoint->setText(pointName); diff --git a/dialogs/dialognormal.h b/dialogs/dialognormal.h index 5586ae825..e1f685e7f 100644 --- a/dialogs/dialognormal.h +++ b/dialogs/dialognormal.h @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -23,31 +23,28 @@ #define DIALOGNORMAL_H #include "dialogtool.h" -#include -#include "container/calculator.h" namespace Ui { class DialogNormal; } -class DialogNormal : public DialogTool -{ +class DialogNormal : public DialogTool{ Q_OBJECT public: explicit DialogNormal(const VContainer *data, Draw::Draws mode = Draw::Calculation, QWidget *parent = 0); ~DialogNormal(); - QString getPointName() const; + inline QString getPointName() const{return pointName;} void setPointName(const QString &value); - QString getTypeLine() const; + inline QString getTypeLine() const {return typeLine;} void setTypeLine(const QString &value); - QString getFormula() const; + inline QString getFormula() const {return formula;} void setFormula(const QString &value); - qreal getAngle() const; + inline qreal getAngle() const {return angle;} void setAngle(const qreal &value); - qint64 getFirstPointId() const; + inline qint64 getFirstPointId() const {return firstPointId;} void setFirstPointId(const qint64 &value, const qint64 &id); - qint64 getSecondPointId() const; + inline qint64 getSecondPointId() const {return secondPointId;} void setSecondPointId(const qint64 &value, const qint64 &id); public slots: virtual void ChoosedObject(qint64 id, Scene::Scenes type); diff --git a/dialogs/dialognormal.ui b/dialogs/dialognormal.ui index b01f58aba..2283dbe55 100644 --- a/dialogs/dialognormal.ui +++ b/dialogs/dialognormal.ui @@ -24,13 +24,50 @@ - + 0 0 + + + + + + + 255 + 0 + 0 + + + + + + + + + 255 + 0 + 0 + + + + + + + + + 159 + 158 + 158 + + + + + + Length @@ -44,10 +81,16 @@ 0 + + Formula calculation of length of normal + + + Calculate formula + ... @@ -77,6 +120,9 @@ 0 + + Value of length + _ @@ -91,13 +137,50 @@ - + 0 0 + + + + + + + 255 + 0 + 0 + + + + + + + + + 255 + 0 + 0 + + + + + + + + + 159 + 158 + 158 + + + + + + Name new point @@ -108,6 +191,9 @@ + + Put variable into formula + ... @@ -379,7 +465,11 @@ - + + + Show line from first point to our point + + @@ -429,7 +519,7 @@ - false + true Length of arcs @@ -439,7 +529,7 @@ - false + true Length of curves @@ -451,7 +541,11 @@ - + + + Variables. Click twice to select. + + @@ -474,6 +568,32 @@ + + lineEditFormula + lineEditNamePoint + comboBoxFirstPoint + comboBoxSecondPoint + doubleSpinBoxAngle + toolButtonArrowRight + toolButtonArrowRightUp + toolButtonArrowUp + toolButtonArrowLeftUp + toolButtonArrowLeft + toolButtonArrowLeftDown + toolButtonArrowDown + toolButtonArrowRightDown + comboBoxLineType + radioButtonSizeGrowth + radioButtonStandartTable + radioButtonIncrements + radioButtonLengthLine + radioButtonLengthArc + radioButtonLengthSpline + listWidget + toolButtonPutHere + toolButtonEqual + buttonBox + diff --git a/dialogs/dialogpointofcontact.cpp b/dialogs/dialogpointofcontact.cpp index 2c7151103..d09b7b021 100644 --- a/dialogs/dialogpointofcontact.cpp +++ b/dialogs/dialogpointofcontact.cpp @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -32,7 +32,11 @@ DialogPointOfContact::DialogPointOfContact(const VContainer *data, Draw::Draws m radioButtonStandartTable = ui.radioButtonStandartTable; radioButtonIncrements = ui.radioButtonIncrements; radioButtonLengthLine = ui.radioButtonLengthLine; + radioButtonLengthArc = ui.radioButtonLengthArc; + radioButtonLengthCurve = ui.radioButtonLengthSpline; lineEditFormula = ui.lineEditFormula; + labelEditFormula = ui.labelEditFormula; + labelEditNamePoint = ui.labelEditNamePoint; flagFormula = false; bOk = ui.buttonBox->button(QDialogButtonBox::Ok); connect(bOk, &QPushButton::clicked, this, &DialogPointOfContact::DialogAccepted); @@ -53,6 +57,8 @@ DialogPointOfContact::DialogPointOfContact(const VContainer *data, Draw::Draws m connect(ui.radioButtonStandartTable, &QRadioButton::clicked, this, &DialogPointOfContact::StandartTable); connect(ui.radioButtonIncrements, &QRadioButton::clicked, this, &DialogPointOfContact::Increments); connect(ui.radioButtonLengthLine, &QRadioButton::clicked, this, &DialogPointOfContact::LengthLines); + connect(ui.radioButtonLengthArc, &QRadioButton::clicked, this, &DialogPointOfContact::LengthArcs); + connect(ui.radioButtonLengthSpline, &QRadioButton::clicked, this, &DialogPointOfContact::LengthCurves); connect(ui.toolButtonEqual, &QPushButton::clicked, this, &DialogPointOfContact::EvalFormula); connect(ui.lineEditNamePoint, &QLineEdit::textChanged, this, &DialogPointOfContact::NamePointChanged); connect(ui.lineEditFormula, &QLineEdit::textChanged, this, &DialogPointOfContact::FormulaChanged); @@ -82,6 +88,7 @@ void DialogPointOfContact::ChoosedObject(qint64 id, Scene::Scenes type){ if ( index != -1 ) { // -1 for not found ui.comboBoxFirstPoint->setCurrentIndex(index); number++; + emit ToolTip(tr("Select second point of line")); return; } } @@ -90,6 +97,7 @@ void DialogPointOfContact::ChoosedObject(qint64 id, Scene::Scenes type){ if ( index != -1 ) { // -1 for not found ui.comboBoxSecondPoint->setCurrentIndex(index); number++; + emit ToolTip(tr("Select point of center of arc")); return; } } @@ -98,6 +106,7 @@ void DialogPointOfContact::ChoosedObject(qint64 id, Scene::Scenes type){ if ( index != -1 ) { // -1 for not found ui.comboBoxCenter->setCurrentIndex(index); number = 0; + emit ToolTip(""); } if(!isInitialized){ this->show(); @@ -106,7 +115,6 @@ void DialogPointOfContact::ChoosedObject(qint64 id, Scene::Scenes type){ } } - void DialogPointOfContact::DialogAccepted(){ pointName = ui.lineEditNamePoint->text(); radius = ui.lineEditFormula->text(); @@ -116,44 +124,24 @@ void DialogPointOfContact::DialogAccepted(){ emit DialogClosed(QDialog::Accepted); } -qint64 DialogPointOfContact::getSecondPoint() const{ - return secondPoint; -} - void DialogPointOfContact::setSecondPoint(const qint64 &value, const qint64 &id){ setCurrentPointId(ui.comboBoxSecondPoint, secondPoint, value, id); } -qint64 DialogPointOfContact::getFirstPoint() const{ - return firstPoint; -} - void DialogPointOfContact::setFirstPoint(const qint64 &value, const qint64 &id){ setCurrentPointId(ui.comboBoxFirstPoint, firstPoint, value, id); } -qint64 DialogPointOfContact::getCenter() const{ - return center; -} - void DialogPointOfContact::setCenter(const qint64 &value, const qint64 &id){ setCurrentPointId(ui.comboBoxCenter, center, value, id); center = value; } -QString DialogPointOfContact::getRadius() const{ - return radius; -} - void DialogPointOfContact::setRadius(const QString &value){ radius = value; ui.lineEditFormula->setText(radius); } -QString DialogPointOfContact::getPointName() const{ - return pointName; -} - void DialogPointOfContact::setPointName(const QString &value){ pointName = value; ui.lineEditNamePoint->setText(pointName); diff --git a/dialogs/dialogpointofcontact.h b/dialogs/dialogpointofcontact.h index 7d85ddcb3..003c16001 100644 --- a/dialogs/dialogpointofcontact.h +++ b/dialogs/dialogpointofcontact.h @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -24,42 +24,35 @@ #include "ui_dialogpointofcontact.h" #include "dialogtool.h" -#include "container/calculator.h" -class DialogPointOfContact : public DialogTool -{ +class DialogPointOfContact : public DialogTool{ Q_OBJECT public: - explicit DialogPointOfContact(const VContainer *data, Draw::Draws mode = Draw::Calculation, - QWidget *parent = 0); - QString getPointName() const; - void setPointName(const QString &value); - - QString getRadius() const; - void setRadius(const QString &value); - - qint64 getCenter() const; - void setCenter(const qint64 &value, const qint64 &id); - - qint64 getFirstPoint() const; - void setFirstPoint(const qint64 &value, const qint64 &id); - - qint64 getSecondPoint() const; - void setSecondPoint(const qint64 &value, const qint64 &id); - + DialogPointOfContact(const VContainer *data, Draw::Draws mode = Draw::Calculation, + QWidget *parent = 0); + inline QString getPointName() const {return pointName;} + void setPointName(const QString &value); + inline QString getRadius() const {return radius;} + void setRadius(const QString &value); + inline qint64 getCenter() const {return center;} + void setCenter(const qint64 &value, const qint64 &id); + inline qint64 getFirstPoint() const {return firstPoint;} + void setFirstPoint(const qint64 &value, const qint64 &id); + inline qint64 getSecondPoint() const {return secondPoint;} + void setSecondPoint(const qint64 &value, const qint64 &id); public slots: - virtual void ChoosedObject(qint64 id, Scene::Scenes type); - virtual void DialogAccepted(); + virtual void ChoosedObject(qint64 id, Scene::Scenes type); + virtual void DialogAccepted(); private: Q_DISABLE_COPY(DialogPointOfContact) Ui::DialogPointOfContact ui; - qint32 number; - QString pointName; - QString radius; - qint64 center; - qint64 firstPoint; - qint64 secondPoint; + qint32 number; + QString pointName; + QString radius; + qint64 center; + qint64 firstPoint; + qint64 secondPoint; }; #endif // DIALOGPOINTOFCONTACT_H diff --git a/dialogs/dialogpointofcontact.ui b/dialogs/dialogpointofcontact.ui index ea9af6336..e4f1fba75 100644 --- a/dialogs/dialogpointofcontact.ui +++ b/dialogs/dialogpointofcontact.ui @@ -24,13 +24,50 @@ - + 0 0 + + + + + + + 255 + 0 + 0 + + + + + + + + + 255 + 0 + 0 + + + + + + + + + 159 + 158 + 158 + + + + + + Radius @@ -44,10 +81,16 @@ 0 + + Formula calculation of radius of arc + + + Calculate formula + ... @@ -77,6 +120,9 @@ 0 + + Value of radius + _ @@ -91,13 +137,50 @@ - + 0 0 + + + + + + + 255 + 0 + 0 + + + + + + + + + 255 + 0 + 0 + + + + + + + + + 159 + 158 + 158 + + + + + + Name new point @@ -108,6 +191,9 @@ + + Put variable into formula + ... @@ -154,6 +240,9 @@ 0 + + Slect point of center of arc + @@ -270,7 +359,7 @@ - false + true Length of arcs @@ -280,7 +369,7 @@ - false + true Length of curves @@ -292,7 +381,11 @@ - + + + Variables. Click twice to select. + + @@ -315,6 +408,23 @@ + + lineEditFormula + lineEditNamePoint + comboBoxCenter + comboBoxFirstPoint + comboBoxSecondPoint + radioButtonSizeGrowth + radioButtonStandartTable + radioButtonIncrements + radioButtonLengthLine + radioButtonLengthArc + radioButtonLengthSpline + listWidget + toolButtonPutHere + toolButtonEqual + buttonBox + diff --git a/dialogs/dialogpointofintersection.cpp b/dialogs/dialogpointofintersection.cpp new file mode 100644 index 000000000..1172284fe --- /dev/null +++ b/dialogs/dialogpointofintersection.cpp @@ -0,0 +1,86 @@ +#include "dialogpointofintersection.h" +#include "ui_dialogpointofintersection.h" + +DialogPointOfIntersection::DialogPointOfIntersection(const VContainer *data, Draw::Draws mode, QWidget *parent) : + DialogTool(data, mode, parent), ui(new Ui::DialogPointOfIntersection), number(0), pointName(QString()), + firstPointId(0), secondPointId(0){ + ui->setupUi(this); + labelEditNamePoint = ui->labelEditNamePoint; + bOk = ui->buttonBox->button(QDialogButtonBox::Ok); + connect(bOk, &QPushButton::clicked, this, &DialogPointOfIntersection::DialogAccepted); + flagName = false; + CheckState(); + QPushButton *bCansel = ui->buttonBox->button(QDialogButtonBox::Cancel); + connect(bCansel, &QPushButton::clicked, this, &DialogPointOfIntersection::DialogRejected); + FillComboBoxPoints(ui->comboBoxFirstPoint); + FillComboBoxPoints(ui->comboBoxSecondPoint); + connect(ui->lineEditNamePoint, &QLineEdit::textChanged, this, &DialogPointOfIntersection::NamePointChanged); +} + +DialogPointOfIntersection::~DialogPointOfIntersection(){ + delete ui; +} + +void DialogPointOfIntersection::setSecondPointId(const qint64 &value, const qint64 &id){ + secondPointId = value; + setCurrentPointId(ui->comboBoxSecondPoint, secondPointId, value, id); +} + +void DialogPointOfIntersection::ChoosedObject(qint64 id, Scene::Scenes type){ + if(idDetail == 0 && mode == Draw::Modeling){ + if(type == Scene::Detail){ + idDetail = id; + return; + } + } + if(mode == Draw::Modeling){ + if(!CheckObject(id)){ + return; + } + } + if(type == Scene::Point){ + VPointF point; + if(mode == Draw::Calculation){ + point = data->GetPoint(id); + } else { + point = data->GetModelingPoint(id); + } + if(number == 0){ + qint32 index = ui->comboBoxFirstPoint->findText(point.name()); + if ( index != -1 ) { // -1 for not found + ui->comboBoxFirstPoint->setCurrentIndex(index); + number++; + emit ToolTip(tr("Select point horizontally")); + return; + } + } + if(number == 1){ + qint32 index = ui->comboBoxSecondPoint->findText(point.name()); + if ( index != -1 ) { // -1 for not found + ui->comboBoxSecondPoint->setCurrentIndex(index); + number = 0; + emit ToolTip(""); + } + if(!isInitialized){ + this->show(); + } + } + } +} + +void DialogPointOfIntersection::DialogAccepted(){ + pointName = ui->lineEditNamePoint->text(); + firstPointId = getCurrentPointId(ui->comboBoxFirstPoint); + secondPointId = getCurrentPointId(ui->comboBoxSecondPoint); + emit DialogClosed(QDialog::Accepted); +} + +void DialogPointOfIntersection::setFirstPointId(const qint64 &value, const qint64 &id){ + firstPointId = value; + setCurrentPointId(ui->comboBoxFirstPoint, firstPointId, value, id); +} + +void DialogPointOfIntersection::setPointName(const QString &value){ + pointName = value; + ui->lineEditNamePoint->setText(pointName); +} diff --git a/dialogs/dialogpointofintersection.h b/dialogs/dialogpointofintersection.h new file mode 100644 index 000000000..432105400 --- /dev/null +++ b/dialogs/dialogpointofintersection.h @@ -0,0 +1,34 @@ +#ifndef DIALOGPOINTOFINTERSECTION_H +#define DIALOGPOINTOFINTERSECTION_H + +#include "dialogtool.h" + +namespace Ui { +class DialogPointOfIntersection; +} + +class DialogPointOfIntersection : public DialogTool{ + Q_OBJECT +public: + DialogPointOfIntersection(const VContainer *data, Draw::Draws mode = Draw::Calculation, + QWidget *parent = 0); + ~DialogPointOfIntersection(); + inline QString getPointName() const {return pointName;} + void setPointName(const QString &value); + inline qint64 getFirstPointId() const {return firstPointId;} + void setFirstPointId(const qint64 &value, const qint64 &id); + inline qint64 getSecondPointId() const {return secondPointId;} + void setSecondPointId(const qint64 &value, const qint64 &id); +public slots: + virtual void ChoosedObject(qint64 id, Scene::Scenes type); + virtual void DialogAccepted(); +private: + Q_DISABLE_COPY(DialogPointOfIntersection) + Ui::DialogPointOfIntersection *ui; + qint32 number; + QString pointName; + qint64 firstPointId; + qint64 secondPointId; +}; + +#endif // DIALOGPOINTOFINTERSECTION_H diff --git a/dialogs/dialogpointofintersection.ui b/dialogs/dialogpointofintersection.ui new file mode 100644 index 000000000..303aa8cc0 --- /dev/null +++ b/dialogs/dialogpointofintersection.ui @@ -0,0 +1,169 @@ + + + DialogPointOfIntersection + + + + 0 + 0 + 293 + 180 + + + + Dialog + + + + + + + + + 0 + 0 + + + + + + + + + 255 + 0 + 0 + + + + + + + + + 255 + 0 + 0 + + + + + + + + + 159 + 158 + 158 + + + + + + + + Name new point + + + + + + + + + + + + + + + 0 + 0 + + + + Point vertically + + + + + + + First point of angle + + + + + + + + + + + + 0 + 0 + + + + Point horizontally + + + + + + + Second point of angle + + + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + + + buttonBox + accepted() + DialogPointOfIntersection + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + DialogPointOfIntersection + reject() + + + 316 + 260 + + + 286 + 274 + + + + + diff --git a/dialogs/dialogs.h b/dialogs/dialogs.h index 78716df81..82faf687b 100644 --- a/dialogs/dialogs.h +++ b/dialogs/dialogs.h @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -37,5 +37,6 @@ #include "dialogsinglepoint.h" #include "dialogspline.h" #include "dialogsplinepath.h" +#include "dialogheight.h" #endif // DIALOGS_H diff --git a/dialogs/dialogshoulderpoint.cpp b/dialogs/dialogshoulderpoint.cpp index be28ab325..9c65ec76a 100644 --- a/dialogs/dialogshoulderpoint.cpp +++ b/dialogs/dialogshoulderpoint.cpp @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -34,7 +34,11 @@ DialogShoulderPoint::DialogShoulderPoint(const VContainer *data, Draw::Draws mod radioButtonStandartTable = ui->radioButtonStandartTable; radioButtonIncrements = ui->radioButtonIncrements; radioButtonLengthLine = ui->radioButtonLengthLine; + radioButtonLengthArc = ui->radioButtonLengthArc; + radioButtonLengthCurve = ui->radioButtonLengthSpline; lineEditFormula = ui->lineEditFormula; + labelEditFormula = ui->labelEditFormula; + labelEditNamePoint = ui->labelEditNamePoint; flagFormula = false; bOk = ui->buttonBox->button(QDialogButtonBox::Ok); connect(bOk, &QPushButton::clicked, this, &DialogShoulderPoint::DialogAccepted); @@ -56,13 +60,14 @@ DialogShoulderPoint::DialogShoulderPoint(const VContainer *data, Draw::Draws mod connect(ui->radioButtonStandartTable, &QRadioButton::clicked, this, &DialogShoulderPoint::StandartTable); connect(ui->radioButtonIncrements, &QRadioButton::clicked, this, &DialogShoulderPoint::Increments); connect(ui->radioButtonLengthLine, &QRadioButton::clicked, this, &DialogShoulderPoint::LengthLines); + connect(ui->radioButtonLengthArc, &QRadioButton::clicked, this, &DialogShoulderPoint::LengthArcs); + connect(ui->radioButtonLengthSpline, &QRadioButton::clicked, this, &DialogShoulderPoint::LengthCurves); connect(ui->toolButtonEqual, &QPushButton::clicked, this, &DialogShoulderPoint::EvalFormula); connect(ui->lineEditNamePoint, &QLineEdit::textChanged, this, &DialogShoulderPoint::NamePointChanged); connect(ui->lineEditFormula, &QLineEdit::textChanged, this, &DialogShoulderPoint::FormulaChanged); } -DialogShoulderPoint::~DialogShoulderPoint() -{ +DialogShoulderPoint::~DialogShoulderPoint(){ delete ui; } @@ -90,6 +95,7 @@ void DialogShoulderPoint::ChoosedObject(qint64 id, Scene::Scenes type){ if ( index != -1 ) { // -1 for not found ui->comboBoxP1Line->setCurrentIndex(index); number++; + emit ToolTip(tr("Select second point of line")); return; } } @@ -98,6 +104,7 @@ void DialogShoulderPoint::ChoosedObject(qint64 id, Scene::Scenes type){ if ( index != -1 ) { // -1 for not found ui->comboBoxP2Line->setCurrentIndex(index); number++; + emit ToolTip(tr("Select point of shoulder")); return; } } @@ -106,6 +113,7 @@ void DialogShoulderPoint::ChoosedObject(qint64 id, Scene::Scenes type){ if ( index != -1 ) { // -1 for not found ui->comboBoxPShoulder->setCurrentIndex(index); number = 0; + emit ToolTip(""); } if(!isInitialized){ this->show(); @@ -124,52 +132,28 @@ void DialogShoulderPoint::DialogAccepted(){ emit DialogClosed(QDialog::Accepted); } -qint64 DialogShoulderPoint::getPShoulder() const{ - return pShoulder; -} - void DialogShoulderPoint::setPShoulder(const qint64 &value, const qint64 &id){ setCurrentPointId(ui->comboBoxPShoulder, pShoulder, value, id); } -qint64 DialogShoulderPoint::getP2Line() const{ - return p2Line; -} - void DialogShoulderPoint::setP2Line(const qint64 &value, const qint64 &id){ setCurrentPointId(ui->comboBoxP2Line, p2Line, value, id); } -qint64 DialogShoulderPoint::getP1Line() const{ - return p1Line; -} - void DialogShoulderPoint::setP1Line(const qint64 &value, const qint64 &id){ setCurrentPointId(ui->comboBoxP1Line, p1Line, value, id); } -QString DialogShoulderPoint::getFormula() const{ - return formula; -} - void DialogShoulderPoint::setFormula(const QString &value){ formula = value; ui->lineEditFormula->setText(formula); } -QString DialogShoulderPoint::getTypeLine() const{ - return typeLine; -} - void DialogShoulderPoint::setTypeLine(const QString &value){ typeLine = value; SetupTypeLine(ui->comboBoxLineType, value); } -QString DialogShoulderPoint::getPointName() const{ - return pointName; -} - void DialogShoulderPoint::setPointName(const QString &value){ pointName = value; ui->lineEditNamePoint->setText(pointName); diff --git a/dialogs/dialogshoulderpoint.h b/dialogs/dialogshoulderpoint.h index 49df44255..44b315738 100644 --- a/dialogs/dialogshoulderpoint.h +++ b/dialogs/dialogshoulderpoint.h @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -23,44 +23,42 @@ #define DIALOGSHOULDERPOINT_H #include "dialogtool.h" -#include "container/calculator.h" namespace Ui { class DialogShoulderPoint; } -class DialogShoulderPoint : public DialogTool -{ +class DialogShoulderPoint : public DialogTool{ Q_OBJECT public: - explicit DialogShoulderPoint(const VContainer *data, Draw::Draws mode = Draw::Calculation, - QWidget *parent = 0); - ~DialogShoulderPoint(); - QString getPointName() const; - void setPointName(const QString &value); - QString getTypeLine() const; - void setTypeLine(const QString &value); - QString getFormula() const; - void setFormula(const QString &value); - qint64 getP1Line() const; - void setP1Line(const qint64 &value, const qint64 &id); - qint64 getP2Line() const; - void setP2Line(const qint64 &value, const qint64 &id); - qint64 getPShoulder() const; - void setPShoulder(const qint64 &value, const qint64 &id); + DialogShoulderPoint(const VContainer *data, Draw::Draws mode = Draw::Calculation, + QWidget *parent = 0); + ~DialogShoulderPoint(); + inline QString getPointName() const {return pointName;} + void setPointName(const QString &value); + inline QString getTypeLine() const {return typeLine;} + void setTypeLine(const QString &value); + inline QString getFormula() const {return formula;} + void setFormula(const QString &value); + inline qint64 getP1Line() const {return p1Line;} + void setP1Line(const qint64 &value, const qint64 &id); + inline qint64 getP2Line() const {return p2Line;} + void setP2Line(const qint64 &value, const qint64 &id); + inline qint64 getPShoulder() const {return pShoulder;} + void setPShoulder(const qint64 &value, const qint64 &id); public slots: - virtual void ChoosedObject(qint64 id, Scene::Scenes type); - virtual void DialogAccepted(); + virtual void ChoosedObject(qint64 id, Scene::Scenes type); + virtual void DialogAccepted(); private: Q_DISABLE_COPY(DialogShoulderPoint) Ui::DialogShoulderPoint *ui; - qint32 number; - QString pointName; - QString typeLine; - QString formula; - qint64 p1Line; - qint64 p2Line; - qint64 pShoulder; + qint32 number; + QString pointName; + QString typeLine; + QString formula; + qint64 p1Line; + qint64 p2Line; + qint64 pShoulder; }; #endif // DIALOGSHOULDERPOINT_H diff --git a/dialogs/dialogshoulderpoint.ui b/dialogs/dialogshoulderpoint.ui index 1df9dd194..b1865211e 100644 --- a/dialogs/dialogshoulderpoint.ui +++ b/dialogs/dialogshoulderpoint.ui @@ -24,13 +24,50 @@ - + 0 0 + + + + + + + 255 + 0 + 0 + + + + + + + + + 255 + 0 + 0 + + + + + + + + + 159 + 158 + 158 + + + + + + Length @@ -44,10 +81,16 @@ 0 + + Formula calculation of length of line + + + Calculate formula + ... @@ -77,6 +120,9 @@ 0 + + Value of length + _ @@ -91,13 +137,50 @@ - + 0 0 + + + + + + + 255 + 0 + 0 + + + + + + + + + 255 + 0 + 0 + + + + + + + + + 159 + 158 + 158 + + + + + + Name new point @@ -108,6 +191,9 @@ + + Put variable into formula + ... @@ -240,7 +326,11 @@ - + + + Show line from first point to our point + + @@ -290,7 +380,7 @@ - false + true Length of lines @@ -300,7 +390,7 @@ - false + true Length of curves @@ -312,7 +402,11 @@ - + + + Variables. Click twice to select. + + @@ -335,6 +429,24 @@ + + lineEditFormula + lineEditNamePoint + comboBoxP1Line + comboBoxP2Line + comboBoxPShoulder + comboBoxLineType + radioButtonSizeGrowth + radioButtonStandartTable + radioButtonIncrements + radioButtonLengthLine + radioButtonLengthArc + radioButtonLengthSpline + listWidget + toolButtonPutHere + toolButtonEqual + buttonBox + diff --git a/dialogs/dialogsinglepoint.cpp b/dialogs/dialogsinglepoint.cpp index b6807a1ec..9bb6914d1 100644 --- a/dialogs/dialogsinglepoint.cpp +++ b/dialogs/dialogsinglepoint.cpp @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -21,18 +21,15 @@ #include "dialogsinglepoint.h" #include "ui_dialogsinglepoint.h" -#include -#include -#include -#include "options.h" DialogSinglePoint::DialogSinglePoint(const VContainer *data, QWidget *parent) : DialogTool(data, Draw::Calculation, parent), ui(new Ui::DialogSinglePoint), name(QString()), point(QPointF()){ ui->setupUi(this); - ui->doubleSpinBoxX->setRange(0,PaperSize/PrintDPI*25.4); - ui->doubleSpinBoxY->setRange(0,PaperSize/PrintDPI*25.4); + ui->doubleSpinBoxX->setRange(0,toMM(PaperSize)); + ui->doubleSpinBoxY->setRange(0,toMM(PaperSize)); bOk = ui->buttonBox->button(QDialogButtonBox::Ok); + labelEditNamePoint = ui->labelEditName; flagName = false; CheckState(); connect(bOk, &QPushButton::clicked, this, &DialogSinglePoint::DialogAccepted); @@ -43,18 +40,17 @@ DialogSinglePoint::DialogSinglePoint(const VContainer *data, QWidget *parent) : void DialogSinglePoint::mousePress(QPointF scenePos){ if(isInitialized == false){ - ui->doubleSpinBoxX->setValue(scenePos.x()/PrintDPI*25.4); - ui->doubleSpinBoxY->setValue(scenePos.y()/PrintDPI*25.4); + ui->doubleSpinBoxX->setValue(toMM(scenePos.x())); + ui->doubleSpinBoxY->setValue(toMM(scenePos.y())); this->show(); } else { - ui->doubleSpinBoxX->setValue(scenePos.x()/PrintDPI*25.4); - ui->doubleSpinBoxY->setValue(scenePos.y()/PrintDPI*25.4); + ui->doubleSpinBoxX->setValue(toMM(scenePos.x())); + ui->doubleSpinBoxY->setValue(toMM(scenePos.y())); } } void DialogSinglePoint::DialogAccepted(){ - point = QPointF(ui->doubleSpinBoxX->value()*PrintDPI/25.4, - ui->doubleSpinBoxY->value()*PrintDPI/25.4); + point = QPointF(toPixel(ui->doubleSpinBoxX->value()), toPixel(ui->doubleSpinBoxY->value())); name = ui->lineEditName->text(); emit DialogClosed(QDialog::Accepted); } @@ -64,16 +60,8 @@ void DialogSinglePoint::setData(const QString name, const QPointF point){ this->point = point; isInitialized = true; ui->lineEditName->setText(name); - ui->doubleSpinBoxX->setValue(point.x()/PrintDPI*25.4); - ui->doubleSpinBoxY->setValue(point.y()/PrintDPI*25.4); -} - -QString DialogSinglePoint::getName()const{ - return name; -} - -QPointF DialogSinglePoint::getPoint()const{ - return point; + ui->doubleSpinBoxX->setValue(toMM(point.x())); + ui->doubleSpinBoxY->setValue(toMM(point.y())); } DialogSinglePoint::~DialogSinglePoint(){ diff --git a/dialogs/dialogsinglepoint.h b/dialogs/dialogsinglepoint.h index 02c064386..3a4d1b860 100644 --- a/dialogs/dialogsinglepoint.h +++ b/dialogs/dialogsinglepoint.h @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -28,23 +28,22 @@ namespace Ui { class DialogSinglePoint; } -class DialogSinglePoint : public DialogTool -{ +class DialogSinglePoint : public DialogTool{ Q_OBJECT public: - explicit DialogSinglePoint(const VContainer *data, QWidget *parent = 0); - void setData(const QString name, const QPointF point); - QString getName()const; - QPointF getPoint()const; - ~DialogSinglePoint(); + DialogSinglePoint(const VContainer *data, QWidget *parent = 0); + void setData(const QString name, const QPointF point); + inline QString getName()const {return name;} + inline QPointF getPoint()const {return point;} + ~DialogSinglePoint(); public slots: - void mousePress(QPointF scenePos); - virtual void DialogAccepted(); + void mousePress(QPointF scenePos); + virtual void DialogAccepted(); private: Q_DISABLE_COPY(DialogSinglePoint) Ui::DialogSinglePoint *ui; - QString name; - QPointF point; + QString name; + QPointF point; }; #endif // DIALOGSINGLEPOINT_H diff --git a/dialogs/dialogsinglepoint.ui b/dialogs/dialogsinglepoint.ui index 2060d1ef5..eb2d385d1 100644 --- a/dialogs/dialogsinglepoint.ui +++ b/dialogs/dialogsinglepoint.ui @@ -9,7 +9,7 @@ 0 0 - 249 + 250 202 @@ -35,8 +35,11 @@ 129 + + Coordinates on the sheet + - Координати + Coordinates @@ -61,15 +64,52 @@ - + 170 10 - 72 + 81 17 + + + + + + + 255 + 0 + 0 + + + + + + + + + 255 + 0 + 0 + + + + + + + + + 159 + 158 + 158 + + + + + + Point name diff --git a/dialogs/dialogspline.cpp b/dialogs/dialogspline.cpp index c264d0424..08f8f331b 100644 --- a/dialogs/dialogspline.cpp +++ b/dialogs/dialogspline.cpp @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -67,6 +67,7 @@ void DialogSpline::ChoosedObject(qint64 id, Scene::Scenes type){ if ( index != -1 ) { // -1 for not found ui->comboBoxP1->setCurrentIndex(index); number++; + emit ToolTip(tr("Select last point of curve")); return; } } @@ -75,6 +76,7 @@ void DialogSpline::ChoosedObject(qint64 id, Scene::Scenes type){ if ( index != -1 ) { // -1 for not found ui->comboBoxP4->setCurrentIndex(index); number = 0; + emit ToolTip(""); index = ui->comboBoxP1->currentIndex(); qint64 p1Id = qvariant_cast(ui->comboBoxP1->itemData(index)); QPointF p1; @@ -107,64 +109,36 @@ void DialogSpline::DialogAccepted(){ emit DialogClosed(QDialog::Accepted); } -qreal DialogSpline::getKCurve() const{ - return kCurve; -} - void DialogSpline::setKCurve(const qreal &value){ kCurve = value; ui->doubleSpinBoxKcurve->setValue(value); } -qreal DialogSpline::getKAsm2() const{ - return kAsm2; -} - void DialogSpline::setKAsm2(const qreal &value){ kAsm2 = value; ui->doubleSpinBoxKasm2->setValue(value); } -qreal DialogSpline::getKAsm1() const{ - return kAsm1; -} - void DialogSpline::setKAsm1(const qreal &value){ kAsm1 = value; ui->doubleSpinBoxKasm1->setValue(value); } -qreal DialogSpline::getAngle2() const{ - return angle2; -} - void DialogSpline::setAngle2(const qreal &value){ angle2 = value; ui->spinBoxAngle2->setValue(static_cast(value)); } -qreal DialogSpline::getAngle1() const{ - return angle1; -} - void DialogSpline::setAngle1(const qreal &value){ angle1 = value; ui->spinBoxAngle1->setValue(static_cast(value)); } -qint64 DialogSpline::getP4() const{ - return p4; -} - void DialogSpline::setP4(const qint64 &value){ p4 = value; ChangeCurrentData(ui->comboBoxP4, value); } -qint64 DialogSpline::getP1() const{ - return p1; -} - void DialogSpline::setP1(const qint64 &value){ p1 = value; ChangeCurrentData(ui->comboBoxP1, value); diff --git a/dialogs/dialogspline.h b/dialogs/dialogspline.h index 180f3a455..310a679dc 100644 --- a/dialogs/dialogspline.h +++ b/dialogs/dialogspline.h @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -28,41 +28,40 @@ namespace Ui { class DialogSpline; } -class DialogSpline : public DialogTool -{ +class DialogSpline : public DialogTool{ Q_OBJECT public: - explicit DialogSpline(const VContainer *data, Draw::Draws mode = Draw::Calculation, - QWidget *parent = 0); - ~DialogSpline(); - qint64 getP1() const; - void setP1(const qint64 &value); - qint64 getP4() const; - void setP4(const qint64 &value); - qreal getAngle1() const; - void setAngle1(const qreal &value); - qreal getAngle2() const; - void setAngle2(const qreal &value); - qreal getKAsm1() const; - void setKAsm1(const qreal &value); - qreal getKAsm2() const; - void setKAsm2(const qreal &value); - qreal getKCurve() const; - void setKCurve(const qreal &value); + explicit DialogSpline(const VContainer *data, Draw::Draws mode = Draw::Calculation, + QWidget *parent = 0); + ~DialogSpline(); + inline qint64 getP1() const {return p1;} + void setP1(const qint64 &value); + inline qint64 getP4() const {return p4;} + void setP4(const qint64 &value); + inline qreal getAngle1() const {return angle1;} + void setAngle1(const qreal &value); + inline qreal getAngle2() const {return angle2;} + void setAngle2(const qreal &value); + inline qreal getKAsm1() const {return kAsm1;} + void setKAsm1(const qreal &value); + inline qreal getKAsm2() const {return kAsm2;} + void setKAsm2(const qreal &value); + inline qreal getKCurve() const {return kCurve;} + void setKCurve(const qreal &value); public slots: - virtual void ChoosedObject(qint64 id, Scene::Scenes type); - virtual void DialogAccepted(); + virtual void ChoosedObject(qint64 id, Scene::Scenes type); + virtual void DialogAccepted(); private: Q_DISABLE_COPY(DialogSpline) Ui::DialogSpline *ui; - qint32 number; - qint64 p1; // перша точка - qint64 p4; // четверта точка - qreal angle1; // кут нахилу дотичної в першій точці - qreal angle2; // кут нахилу дотичної в другій точці - qreal kAsm1; - qreal kAsm2; - qreal kCurve; + qint32 number; + qint64 p1; // перша точка + qint64 p4; // четверта точка + qreal angle1; // кут нахилу дотичної в першій точці + qreal angle2; // кут нахилу дотичної в другій точці + qreal kAsm1; + qreal kAsm2; + qreal kCurve; }; #endif // DIALOGSPLINE_H diff --git a/dialogs/dialogspline.ui b/dialogs/dialogspline.ui index ce10cb6e7..b347954e9 100644 --- a/dialogs/dialogspline.ui +++ b/dialogs/dialogspline.ui @@ -199,6 +199,16 @@ + + comboBoxP1 + comboBoxP4 + doubleSpinBoxKasm1 + doubleSpinBoxKasm2 + spinBoxAngle1 + spinBoxAngle2 + doubleSpinBoxKcurve + buttonBox + diff --git a/dialogs/dialogsplinepath.cpp b/dialogs/dialogsplinepath.cpp index aa889010b..e3d45bdd0 100644 --- a/dialogs/dialogsplinepath.cpp +++ b/dialogs/dialogsplinepath.cpp @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -48,15 +48,10 @@ DialogSplinePath::DialogSplinePath(const VContainer *data, Draw::Draws mode, QWi this, &DialogSplinePath::KAsm2Changed); } -DialogSplinePath::~DialogSplinePath() -{ +DialogSplinePath::~DialogSplinePath(){ delete ui; } -VSplinePath DialogSplinePath::GetPath() const{ - return path; -} - void DialogSplinePath::SetPath(const VSplinePath &value){ this->path = value; ui->listWidget->clear(); @@ -82,6 +77,7 @@ void DialogSplinePath::ChoosedObject(qint64 id, Scene::Scenes type){ } if(type == Scene::Point){ NewItem(id, 1, 0, 1); + emit ToolTip(tr("Select point of curve path")); this->show(); } } @@ -93,6 +89,7 @@ void DialogSplinePath::DialogAccepted(){ path.append( qvariant_cast(item->data(Qt::UserRole))); } path.setKCurve(ui->doubleSpinBoxKcurve->value()); + emit ToolTip(""); emit DialogClosed(QDialog::Accepted); } diff --git a/dialogs/dialogsplinepath.h b/dialogs/dialogsplinepath.h index 41cfeb0c2..922351a31 100644 --- a/dialogs/dialogsplinepath.h +++ b/dialogs/dialogsplinepath.h @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -29,32 +29,31 @@ namespace Ui { class DialogSplinePath; } -class DialogSplinePath : public DialogTool -{ +class DialogSplinePath : public DialogTool{ Q_OBJECT public: - explicit DialogSplinePath(const VContainer *data, Draw::Draws mode = Draw::Calculation, - QWidget *parent = 0); - ~DialogSplinePath(); - VSplinePath GetPath() const; - void SetPath(const VSplinePath &value); + DialogSplinePath(const VContainer *data, Draw::Draws mode = Draw::Calculation, + QWidget *parent = 0); + ~DialogSplinePath(); + inline VSplinePath GetPath() const {return path;} + void SetPath(const VSplinePath &value); public slots: - virtual void ChoosedObject(qint64 id, Scene::Scenes type); - virtual void DialogAccepted(); - void PointChenged(int row); - void currentPointChanged( int index ); - void Angle1Changed( int index ); - void Angle2Changed( int index ); - void KAsm1Changed(qreal d); - void KAsm2Changed(qreal d); + virtual void ChoosedObject(qint64 id, Scene::Scenes type); + virtual void DialogAccepted(); + void PointChenged(int row); + void currentPointChanged( int index ); + void Angle1Changed( int index ); + void Angle2Changed( int index ); + void KAsm1Changed(qreal d); + void KAsm2Changed(qreal d); private: Q_DISABLE_COPY(DialogSplinePath) Ui::DialogSplinePath *ui; - VSplinePath path; - void NewItem(qint64 id, qreal kAsm1, qreal angle, qreal kAsm2); - void DataPoint(qint64 id, qreal kAsm1, qreal angle1, qreal kAsm2, qreal angle2); - void EnableFields(); - void SetAngle(qint32 angle); + VSplinePath path; + void NewItem(qint64 id, qreal kAsm1, qreal angle, qreal kAsm2); + void DataPoint(qint64 id, qreal kAsm1, qreal angle1, qreal kAsm2, qreal angle2); + void EnableFields(); + void SetAngle(qint32 angle); }; #endif // DIALOGSPLINEPATH_H diff --git a/dialogs/dialogsplinepath.ui b/dialogs/dialogsplinepath.ui index 98f66474c..68c7c2795 100644 --- a/dialogs/dialogsplinepath.ui +++ b/dialogs/dialogsplinepath.ui @@ -126,7 +126,11 @@ - + + + List of points + + @@ -184,6 +188,16 @@ + + comboBoxPoint + doubleSpinBoxKasm1 + spinBoxAngle1 + doubleSpinBoxKasm2 + spinBoxAngle2 + doubleSpinBoxKcurve + listWidget + buttonBox + diff --git a/dialogs/dialogtool.cpp b/dialogs/dialogtool.cpp index 2c9db774e..c527cb383 100644 --- a/dialogs/dialogtool.cpp +++ b/dialogs/dialogtool.cpp @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -20,25 +20,18 @@ ****************************************************************************/ #include "dialogtool.h" -#include -#include -#include "container/calculator.h" -#include "geometry/vdetail.h" -#include +#include DialogTool::DialogTool(const VContainer *data, Draw::Draws mode, QWidget *parent):QDialog(parent), data(data), isInitialized(false), flagName(true), flagFormula(true), timerFormula(0), bOk(0), spinBoxAngle(0), - lineEditFormula(0), listWidget(0), labelResultCalculation(0), labelDescription(0), - radioButtonSizeGrowth(0), radioButtonStandartTable(0), radioButtonIncrements(0), - radioButtonLengthLine(0), idDetail(0), mode(mode){ - Q_CHECK_PTR(data); + lineEditFormula(0), listWidget(0), labelResultCalculation(0), labelDescription(0), labelEditNamePoint(0), + labelEditFormula(0), radioButtonSizeGrowth(0), radioButtonStandartTable(0), radioButtonIncrements(0), + radioButtonLengthLine(0), radioButtonLengthArc(0), radioButtonLengthCurve(0), idDetail(0), mode(mode){ + Q_ASSERT(data != 0); timerFormula = new QTimer(this); connect(timerFormula, &QTimer::timeout, this, &DialogTool::EvalFormula); } -DialogTool::~DialogTool(){ -} - void DialogTool::closeEvent(QCloseEvent *event){ DialogClosed(QDialog::Rejected); event->accept(); @@ -52,14 +45,14 @@ void DialogTool::showEvent(QShowEvent *event){ if(isInitialized){ return; } - isInitialized = true;//перший показ вікна вже відбувся + isInitialized = true;//first show windows are held } void DialogTool::FillComboBoxPoints(QComboBox *box, const qint64 &id) const{ box->clear(); if(mode == Draw::Calculation){ - const QMap *points = data->DataPoints(); - QMapIterator i(*points); + const QHash *points = data->DataPoints(); + QHashIterator i(*points); while (i.hasNext()) { i.next(); if(i.key() != id){ @@ -69,7 +62,7 @@ void DialogTool::FillComboBoxPoints(QComboBox *box, const qint64 &id) const{ } } else { if(idDetail <= 0){ - qWarning()<<"Wrong details id."<GetDetail(idDetail); @@ -92,13 +85,14 @@ void DialogTool::FillComboBoxPoints(QComboBox *box, const qint64 &id) const{ } void DialogTool::FillComboBoxTypeLine(QComboBox *box) const{ + Q_ASSERT(box != 0); QStringList list; - list<<"Лінія"<<"Без лінії"; + list<addItems(list); } QString DialogTool::GetTypeLine(const QComboBox *box) const{ - if(box->currentText()=="Лінія"){ + if(box->currentText()==tr("Line")){ return QString("hair"); } else { return QString("none"); @@ -107,13 +101,13 @@ QString DialogTool::GetTypeLine(const QComboBox *box) const{ void DialogTool::SetupTypeLine(QComboBox *box, const QString &value){ if(value == "hair"){ - qint32 index = box->findText("Лінія"); + qint32 index = box->findText(tr("Line")); if(index != -1){ box->setCurrentIndex(index); } } if(value == "none"){ - qint32 index = box->findText("Без лінії"); + qint32 index = box->findText(tr("No line")); if(index != -1){ box->setCurrentIndex(index); } @@ -124,6 +118,8 @@ void DialogTool::ChangeCurrentText(QComboBox *box, const QString &value){ qint32 index = box->findText(value); if(index != -1){ box->setCurrentIndex(index); + } else { + qWarning()<currentItem(); - QString val = item->text(); - lineEdit->setText(lineEdit->text().append(val)); + int pos = lineEdit->cursorPosition(); + lineEdit->setText(lineEdit->text().insert(lineEdit->cursorPosition(), item->text())); + lineEdit->setFocus(); + lineEdit->setCursorPosition(pos + item->text().size()); } void DialogTool::ValFormulaChanged(bool &flag, QLineEdit *edit, QTimer *timer){ - Q_CHECK_PTR(edit); - Q_CHECK_PTR(timer); + Q_ASSERT(edit != 0); + Q_ASSERT(timer != 0); + Q_ASSERT(labelEditFormula != 0); if(edit->text().isEmpty()){ flag = false; CheckState(); + QPalette palette = labelEditFormula->palette(); + palette.setColor(labelEditFormula->foregroundRole(), Qt::red); + labelEditFormula->setPalette(palette); return; } timer->start(1000); } void DialogTool::Eval(QLineEdit *edit, bool &flag, QTimer *timer, QLabel *label){ - Q_CHECK_PTR(edit); - Q_CHECK_PTR(timer); - Q_CHECK_PTR(label); + Q_ASSERT(edit != 0); + Q_ASSERT(timer != 0); + Q_ASSERT(label != 0); + Q_ASSERT(labelEditFormula != 0); + QPalette palette = labelEditFormula->palette(); if(edit->text().isEmpty()){ flag = false; + palette.setColor(labelEditFormula->foregroundRole(), Qt::red); } else { Calculator cal(data); QString errorMsg; qreal result = cal.eval(edit->text(),&errorMsg); if(!errorMsg.isEmpty()){ - label->setText("Помилка."); + label->setText(tr("Error")); flag = false; + palette.setColor(labelEditFormula->foregroundRole(), Qt::red); } else { label->setText(QString().setNum(result)); flag = true; + palette.setColor(labelEditFormula->foregroundRole(), QColor(76,76,76)); } } CheckState(); timer->stop(); + labelEditFormula->setPalette(palette); } void DialogTool::setCurrentPointId(QComboBox *box, qint64 &pointId, const qint64 &value, const qint64 &id) const{ - Q_CHECK_PTR(box); + Q_ASSERT(box != 0); FillComboBoxPoints(box, id); pointId = value; ChangeCurrentData(box, value); } qint64 DialogTool::getCurrentPointId(QComboBox *box) const{ - Q_CHECK_PTR(box); + Q_ASSERT(box != 0); qint32 index = box->currentIndex(); Q_ASSERT(index != -1); if(index != -1){ @@ -195,24 +203,30 @@ qint64 DialogTool::getCurrentPointId(QComboBox *box) const{ } void DialogTool::CheckState(){ - Q_CHECK_PTR(bOk); + Q_ASSERT(bOk != 0); bOk->setEnabled(flagFormula && flagName); } - void DialogTool::ChoosedObject(qint64 id, Scene::Scenes type){ Q_UNUSED(id); Q_UNUSED(type); } void DialogTool::NamePointChanged(){ + Q_ASSERT(labelEditNamePoint != 0); QLineEdit* edit = qobject_cast(sender()); if (edit){ QString name = edit->text(); if(name.isEmpty() || name.contains(" ")){ flagName = false; + QPalette palette = labelEditNamePoint->palette(); + palette.setColor(labelEditNamePoint->foregroundRole(), Qt::red); + labelEditNamePoint->setPalette(palette); } else { flagName = true; + QPalette palette = labelEditNamePoint->palette(); + palette.setColor(labelEditNamePoint->foregroundRole(), QColor(76,76,76)); + labelEditNamePoint->setPalette(palette); } } CheckState(); @@ -234,48 +248,48 @@ void DialogTool::FormulaChanged(){ } void DialogTool::ArrowUp(){ - Q_CHECK_PTR(spinBoxAngle); + Q_ASSERT(spinBoxAngle != 0); spinBoxAngle->setValue(90); } void DialogTool::ArrowDown(){ - Q_CHECK_PTR(spinBoxAngle); + Q_ASSERT(spinBoxAngle != 0); spinBoxAngle->setValue(270); } void DialogTool::ArrowLeft(){ - Q_CHECK_PTR(spinBoxAngle); + Q_ASSERT(spinBoxAngle != 0); spinBoxAngle->setValue(180); } void DialogTool::ArrowRight(){ - Q_CHECK_PTR(spinBoxAngle); + Q_ASSERT(spinBoxAngle != 0); spinBoxAngle->setValue(0); } void DialogTool::ArrowLeftUp(){ - Q_CHECK_PTR(spinBoxAngle); + Q_ASSERT(spinBoxAngle != 0); spinBoxAngle->setValue(135); } void DialogTool::ArrowLeftDown(){ - Q_CHECK_PTR(spinBoxAngle); + Q_ASSERT(spinBoxAngle != 0); spinBoxAngle->setValue(225); } void DialogTool::ArrowRightUp(){ - Q_CHECK_PTR(spinBoxAngle); + Q_ASSERT(spinBoxAngle != 0); spinBoxAngle->setValue(45); } void DialogTool::ArrowRightDown(){ - Q_CHECK_PTR(spinBoxAngle); + Q_ASSERT(spinBoxAngle != 0); spinBoxAngle->setValue(315); } void DialogTool::EvalFormula(){ - Q_CHECK_PTR(lineEditFormula); - Q_CHECK_PTR(labelResultCalculation); + Q_ASSERT(lineEditFormula != 0); + Q_ASSERT(labelResultCalculation != 0); Eval(lineEditFormula, flagFormula, timerFormula, labelResultCalculation); } @@ -291,6 +305,14 @@ void DialogTool::LengthLines(){ ShowVariable(data->DataLengthLines()); } +void DialogTool::LengthArcs(){ + ShowVariable(data->DataLengthArcs()); +} + +void DialogTool::LengthCurves(){ + ShowVariable(data->DataLengthSplines()); +} + void DialogTool::Increments(){ ShowVariable(data->DataIncrementTable()); } @@ -300,29 +322,35 @@ void DialogTool::PutHere(){ } void DialogTool::PutVal(QListWidgetItem *item){ - Q_CHECK_PTR(lineEditFormula); - QString val = item->text(); - lineEditFormula->setText(lineEditFormula->text().append(val)); + Q_ASSERT(lineEditFormula != 0); + Q_ASSERT(item != 0); + int pos = lineEditFormula->cursorPosition(); + lineEditFormula->setText(lineEditFormula->text().insert(lineEditFormula->cursorPosition(), + item->text())); + lineEditFormula->setFocus(); + lineEditFormula->setCursorPosition(pos + item->text().size()); } void DialogTool::ValChenged(int row){ - Q_CHECK_PTR(listWidget); - Q_CHECK_PTR(labelDescription); - Q_CHECK_PTR(radioButtonSizeGrowth); - Q_CHECK_PTR(radioButtonStandartTable); - Q_CHECK_PTR(radioButtonIncrements); - Q_CHECK_PTR(radioButtonLengthLine); + Q_ASSERT(listWidget != 0); + Q_ASSERT(labelDescription != 0); + Q_ASSERT(radioButtonSizeGrowth != 0); + Q_ASSERT(radioButtonStandartTable != 0); + Q_ASSERT(radioButtonIncrements != 0); + Q_ASSERT(radioButtonLengthLine != 0); + Q_ASSERT(radioButtonLengthArc != 0); + Q_ASSERT(radioButtonLengthCurve != 0); if(listWidget->count() == 0){ return; } QListWidgetItem *item = listWidget->item( row ); if(radioButtonSizeGrowth->isChecked()){ if(item->text()=="Р"){ - QString desc = QString("%1(%2) - %3").arg(item->text()).arg(data->growth()).arg("Зріст"); + QString desc = QString("%1(%2) - %3").arg(item->text()).arg(data->growth()).arg(tr("Growth")); labelDescription->setText(desc); } if(item->text()=="Сг"){ - QString desc = QString("%1(%2) - %3").arg(item->text()).arg(data->size()).arg("Розмір"); + QString desc = QString("%1(%2) - %3").arg(item->text()).arg(data->size()).arg(tr("Size")); labelDescription->setText(desc); } return; @@ -343,16 +371,32 @@ void DialogTool::ValChenged(int row){ } if(radioButtonLengthLine->isChecked()){ QString desc = QString("%1(%2) - %3").arg(item->text()).arg(data->GetLine(item->text())) - .arg("Довжина лінії"); + .arg(tr("Line length")); + labelDescription->setText(desc); + return; + } + if(radioButtonLengthArc->isChecked()){ + QString desc = QString("%1(%2) - %3").arg(item->text()).arg(data->GetLengthArc(item->text())) + .arg(tr("Arc length")); + labelDescription->setText(desc); + return; + } + if(radioButtonLengthCurve->isChecked()){ + QString desc = QString("%1(%2) - %3").arg(item->text()).arg(data->GetLengthSpline(item->text())) + .arg(tr("Curve length")); labelDescription->setText(desc); return; } } void DialogTool::UpdateList(){ - if(radioButtonSizeGrowth == 0 || radioButtonStandartTable == 0 || radioButtonIncrements == 0){ - return; - } + Q_ASSERT(radioButtonSizeGrowth != 0); + Q_ASSERT(radioButtonStandartTable != 0); + Q_ASSERT(radioButtonIncrements != 0); + Q_ASSERT(radioButtonLengthLine != 0); + Q_ASSERT(radioButtonLengthArc != 0); + Q_ASSERT(radioButtonLengthCurve != 0); + if(radioButtonSizeGrowth->isChecked()){ ShowVariable(data->DataBase()); } @@ -362,6 +406,15 @@ void DialogTool::UpdateList(){ if(radioButtonIncrements->isChecked()){ ShowVariable(data->DataIncrementTable()); } + if(radioButtonLengthLine->isChecked()){ + ShowVariable(data->DataLengthLines()); + } + if(radioButtonLengthArc->isChecked()){ + ShowVariable(data->DataLengthArcs()); + } + if(radioButtonLengthCurve->isChecked()){ + ShowVariable(data->DataLengthSplines()); + } } bool DialogTool::CheckObject(const qint64 &id){ @@ -373,25 +426,25 @@ bool DialogTool::CheckObject(const qint64 &id){ } template -void DialogTool::ShowVariable(const QMap *var){ - Q_CHECK_PTR(listWidget); +void DialogTool::ShowVariable(const QHash *var){ + Q_ASSERT(listWidget != 0); disconnect(listWidget, &QListWidget::currentRowChanged, this, &DialogTool::ValChenged); listWidget->clear(); - connect(listWidget, &QListWidget::currentRowChanged, this, &DialogTool::ValChenged); - QMapIterator i(*var); + + QHashIterator i(*var); + QMap map; while (i.hasNext()) { i.next(); - QListWidgetItem *item = new QListWidgetItem(i.key()); + map.insert(i.key(), i.value()); + } + + QMapIterator iMap(map); + while (iMap.hasNext()) { + iMap.next(); + QListWidgetItem *item = new QListWidgetItem(iMap.key()); item->setFont(QFont("Times", 12, QFont::Bold)); listWidget->addItem(item); } + connect(listWidget, &QListWidget::currentRowChanged, this, &DialogTool::ValChenged); listWidget->setCurrentRow (0); } - -qint64 DialogTool::getIdDetail() const{ - return idDetail; -} - -void DialogTool::setIdDetail(const qint64 &value){ - idDetail = value; -} diff --git a/dialogs/dialogtool.h b/dialogs/dialogtool.h index a6168934b..02b3d56f6 100644 --- a/dialogs/dialogtool.h +++ b/dialogs/dialogtool.h @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -23,26 +23,19 @@ #define DIALOGTOOL_H #include -#include -#include -#include -#include -#include -#include -#include -#include -#include "container/vcontainer.h" +#include class DialogTool : public QDialog{ Q_OBJECT public: DialogTool(const VContainer *data, Draw::Draws mode = Draw::Calculation, QWidget *parent = 0); - virtual ~DialogTool(); - qint64 getIdDetail() const; - void setIdDetail(const qint64 &value); + virtual ~DialogTool() {} + inline qint64 getIdDetail() const {return idDetail;} + inline void setIdDetail(const qint64 &value) {idDetail = value;} signals: void DialogClosed(int result); + void ToolTip(const QString &toolTip); public slots: virtual void ChoosedObject(qint64 id, Scene::Scenes type); void NamePointChanged(); @@ -61,6 +54,8 @@ public slots: void SizeGrowth(); void StandartTable(); void LengthLines(); + void LengthArcs(); + void LengthCurves(); void Increments(); void PutHere(); void PutVal(QListWidgetItem * item); @@ -79,12 +74,16 @@ protected: QListWidget *listWidget; QLabel *labelResultCalculation; QLabel *labelDescription; + QLabel *labelEditNamePoint; + QLabel *labelEditFormula; QRadioButton *radioButtonSizeGrowth; QRadioButton *radioButtonStandartTable; QRadioButton *radioButtonIncrements; QRadioButton *radioButtonLengthLine; + QRadioButton *radioButtonLengthArc; + QRadioButton *radioButtonLengthCurve; qint64 idDetail; - Draw::Draws mode; + Draw::Draws mode; bool CheckObject(const qint64 &id); virtual void closeEvent ( QCloseEvent * event ); virtual void showEvent( QShowEvent *event ); @@ -92,7 +91,7 @@ protected: void FillComboBoxTypeLine(QComboBox *box) const; virtual void CheckState(); QString GetTypeLine(const QComboBox *box)const; - template void ShowVariable(const QMap *var); + template void ShowVariable(const QHash *var); void SetupTypeLine(QComboBox *box, const QString &value); void ChangeCurrentText(QComboBox *box, const QString &value); void ChangeCurrentData(QComboBox *box, const qint64 &value) const; diff --git a/dialogs/dialogtriangle.cpp b/dialogs/dialogtriangle.cpp new file mode 100644 index 000000000..c86e3c008 --- /dev/null +++ b/dialogs/dialogtriangle.cpp @@ -0,0 +1,106 @@ +#include "dialogtriangle.h" +#include "ui_dialogtriangle.h" + +DialogTriangle::DialogTriangle(const VContainer *data, Draw::Draws mode, QWidget *parent) : + DialogTool(data, mode, parent), ui(new Ui::DialogTriangle), number(0), pointName(QString()), axisP1Id(0), + axisP2Id(0), firstPointId(0), secondPointId(0){ + ui->setupUi(this); + labelEditNamePoint = ui->labelEditNamePoint; + bOk = ui->buttonBox->button(QDialogButtonBox::Ok); + connect(bOk, &QPushButton::clicked, this, &DialogTriangle::DialogAccepted); + flagName = false; + CheckState(); + QPushButton *bCansel = ui->buttonBox->button(QDialogButtonBox::Cancel); + connect(bCansel, &QPushButton::clicked, this, &DialogTriangle::DialogRejected); + FillComboBoxPoints(ui->comboBoxAxisP1); + FillComboBoxPoints(ui->comboBoxAxisP2); + FillComboBoxPoints(ui->comboBoxFirstPoint); + FillComboBoxPoints(ui->comboBoxSecondPoint); + connect(ui->lineEditNamePoint, &QLineEdit::textChanged, this, &DialogTriangle::NamePointChanged); +} + +DialogTriangle::~DialogTriangle(){ + delete ui; +} + +void DialogTriangle::ChoosedObject(qint64 id, Scene::Scenes type){ + if(idDetail == 0 && mode == Draw::Modeling){ + if(type == Scene::Detail){ + idDetail = id; + return; + } + } + if(mode == Draw::Modeling){ + if(!CheckObject(id)){ + return; + } + } + if(type == Scene::Point){ + VPointF point; + if(mode == Draw::Calculation){ + point = data->GetPoint(id); + } else { + point = data->GetModelingPoint(id); + } + switch(number){ + case(0): + ChangeCurrentText(ui->comboBoxAxisP1, point.name()); + number++; + emit ToolTip(tr("Select second point of axis")); + break; + case(1): + ChangeCurrentText(ui->comboBoxAxisP2, point.name()); + number++; + emit ToolTip(tr("Select first point")); + break; + case(2): + ChangeCurrentText(ui->comboBoxFirstPoint, point.name()); + number++; + emit ToolTip(tr("Select second point")); + break; + case(3): + ChangeCurrentText(ui->comboBoxSecondPoint, point.name()); + number = 0; + emit ToolTip(tr("")); + if(!isInitialized){ + this->show(); + } + break; + } + } +} + +void DialogTriangle::DialogAccepted(){ + pointName = ui->lineEditNamePoint->text(); + firstPointId = getCurrentPointId(ui->comboBoxFirstPoint); + secondPointId = getCurrentPointId(ui->comboBoxSecondPoint); + axisP1Id = getCurrentPointId(ui->comboBoxAxisP1); + axisP2Id = getCurrentPointId(ui->comboBoxAxisP2); + emit DialogClosed(QDialog::Accepted); +} + +void DialogTriangle::setPointName(const QString &value){ + pointName = value; + ui->lineEditNamePoint->setText(pointName); +} + +void DialogTriangle::setSecondPointId(const qint64 &value, const qint64 &id){ + secondPointId = value; + setCurrentPointId(ui->comboBoxSecondPoint, secondPointId, value, id); +} + +void DialogTriangle::setFirstPointId(const qint64 &value, const qint64 &id){ + firstPointId = value; + setCurrentPointId(ui->comboBoxFirstPoint, firstPointId, value, id); +} + +void DialogTriangle::setAxisP2Id(const qint64 &value, const qint64 &id){ + axisP2Id = value; + setCurrentPointId(ui->comboBoxAxisP2, axisP2Id, value, id); +} + +void DialogTriangle::setAxisP1Id(const qint64 &value, const qint64 &id){ + axisP1Id = value; + setCurrentPointId(ui->comboBoxAxisP1, axisP1Id, value, id); +} + diff --git a/dialogs/dialogtriangle.h b/dialogs/dialogtriangle.h new file mode 100644 index 000000000..13b7c0c9d --- /dev/null +++ b/dialogs/dialogtriangle.h @@ -0,0 +1,61 @@ +/**************************************************************************** + ** + ** Copyright (C) 2013 Valentina project All Rights Reserved. + ** + ** This file is part of Valentina. + ** + ** Tox 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 DIALOGTRIANGLE_H +#define DIALOGTRIANGLE_H + +#include "dialogtool.h" + +namespace Ui { +class DialogTriangle; +} + +class DialogTriangle : public DialogTool{ + Q_OBJECT +public: + DialogTriangle(const VContainer *data, Draw::Draws mode = Draw::Calculation, + QWidget *parent = 0); + ~DialogTriangle(); + inline qint64 getAxisP1Id() const {return axisP1Id;} + void setAxisP1Id(const qint64 &value, const qint64 &id); + inline qint64 getAxisP2Id() const {return axisP2Id;} + void setAxisP2Id(const qint64 &value, const qint64 &id); + inline qint64 getFirstPointId() const {return firstPointId;} + void setFirstPointId(const qint64 &value, const qint64 &id); + inline qint64 getSecondPointId() const {return secondPointId;} + void setSecondPointId(const qint64 &value, const qint64 &id); + inline QString getPointName() const {return pointName;} + void setPointName(const QString &value); +public slots: + virtual void ChoosedObject(qint64 id, Scene::Scenes type); + virtual void DialogAccepted(); +private: + Q_DISABLE_COPY(DialogTriangle) + Ui::DialogTriangle *ui; + qint32 number; + QString pointName; + qint64 axisP1Id; + qint64 axisP2Id; + qint64 firstPointId; + qint64 secondPointId; +}; + +#endif // DIALOGTRIANGLE_H diff --git a/dialogs/dialogtriangle.ui b/dialogs/dialogtriangle.ui new file mode 100644 index 000000000..7e788b2f0 --- /dev/null +++ b/dialogs/dialogtriangle.ui @@ -0,0 +1,196 @@ + + + DialogTriangle + + + + 0 + 0 + 267 + 220 + + + + Dialog + + + + + + + + + + + + 0 + 0 + + + + + + + + + 255 + 0 + 0 + + + + + + + + + 255 + 0 + 0 + + + + + + + + + 159 + 158 + 158 + + + + + + + + Name new point + + + + + + + + + + + + + + First point of axis + + + + + + + First point of line + + + + + + + + + + + Second point of axis + + + + + + + First point of line + + + + + + + + + + + First point + + + + + + + First point of line + + + + + + + + + + + Second point + + + + + + + First point of line + + + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + + + buttonBox + accepted() + DialogTriangle + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + DialogTriangle + reject() + + + 316 + 260 + + + 286 + 274 + + + + + diff --git a/exception/vexception.cpp b/exception/vexception.cpp index a22df35a3..a32b8ebde 100644 --- a/exception/vexception.cpp +++ b/exception/vexception.cpp @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -25,9 +25,6 @@ VException::VException(const QString &what):QException(), what(what){ Q_ASSERT_X(!what.isEmpty(), Q_FUNC_INFO, "Error message is empty"); } -VException::VException(const VException &e):what(e.What()){ -} - QString VException::ErrorMessage() const{ QString error = QString("Exception: %1").arg(what); return error; diff --git a/exception/vexception.h b/exception/vexception.h index fc53c3d77..28fa4c037 100644 --- a/exception/vexception.h +++ b/exception/vexception.h @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -24,21 +24,19 @@ #define VEXCEPTION_H #include -#include -class VException : public QException -{ +class VException : public QException{ public: - VException(const QString &what); - VException(const VException &e); - virtual ~VException() noexcept(true){} - void raise() const { throw *this; } - VException *clone() const { return new VException(*this); } - virtual QString ErrorMessage() const; - virtual QString DetailedInformation() const { return QString(); } - QString What() const {return what;} + VException(const QString &what); + VException(const VException &e):what(e.What()){} + virtual ~VException() noexcept(true){} + inline void raise() const { throw *this; } + inline VException *clone() const { return new VException(*this); } + virtual QString ErrorMessage() const; + virtual QString DetailedInformation() const { return QString(); } + inline QString What() const {return what;} protected: - QString what; + QString what; }; #endif // VEXCEPTION_H diff --git a/exception/vexceptionbadid.cpp b/exception/vexceptionbadid.cpp index 82f686f48..02bf10a76 100644 --- a/exception/vexceptionbadid.cpp +++ b/exception/vexceptionbadid.cpp @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -21,17 +21,6 @@ #include "vexceptionbadid.h" -VExceptionBadId::VExceptionBadId(const QString &what, const qint64 &id):VException(what), id(id), - key(QString()){ -} - -VExceptionBadId::VExceptionBadId(const QString &what, const QString &key):VException(what), id(0), key(key) -{ -} - -VExceptionBadId::VExceptionBadId(const VExceptionBadId &e):VException(e), id(e.BadId()), key(e.BadKey()){ -} - QString VExceptionBadId::ErrorMessage() const{ QString error; if(key.isEmpty()){ diff --git a/exception/vexceptionbadid.h b/exception/vexceptionbadid.h index caa9fcd54..89959d5d8 100644 --- a/exception/vexceptionbadid.h +++ b/exception/vexceptionbadid.h @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -24,19 +24,19 @@ #include "vexception.h" -class VExceptionBadId : public VException -{ +class VExceptionBadId : public VException{ public: - VExceptionBadId(const QString &what, const qint64 &id); - VExceptionBadId(const QString &what, const QString &key); - VExceptionBadId(const VExceptionBadId &e); - virtual ~VExceptionBadId() noexcept(true){} + VExceptionBadId(const QString &what, const qint64 &id):VException(what), id(id), + key(QString()){} + VExceptionBadId(const QString &what, const QString &key):VException(what), id(0), key(key){} + VExceptionBadId(const VExceptionBadId &e):VException(e), id(e.BadId()), key(e.BadKey()){} + virtual ~VExceptionBadId() noexcept(true){} virtual QString ErrorMessage() const; - qint64 BadId() const {return id; } - QString BadKey() const {return key; } + inline qint64 BadId() const {return id; } + inline QString BadKey() const {return key; } protected: - qint64 id; - QString key; + qint64 id; + QString key; }; #endif // VEXCEPTIONBADID_H diff --git a/exception/vexceptionconversionerror.cpp b/exception/vexceptionconversionerror.cpp index 7bfbf1366..487d7ad3b 100644 --- a/exception/vexceptionconversionerror.cpp +++ b/exception/vexceptionconversionerror.cpp @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -26,10 +26,6 @@ VExceptionConversionError::VExceptionConversionError(const QString &what, const Q_ASSERT_X(!str.isEmpty(), Q_FUNC_INFO, "Error converting string is empty"); } -VExceptionConversionError::VExceptionConversionError(const VExceptionConversionError &e): - VException(e), str(e.String()){ -} - QString VExceptionConversionError::ErrorMessage() const{ QString error = QString("ExceptionConversionError: %1 %2").arg(what, str); return error; diff --git a/exception/vexceptionconversionerror.h b/exception/vexceptionconversionerror.h index f0650a50d..904093e63 100644 --- a/exception/vexceptionconversionerror.h +++ b/exception/vexceptionconversionerror.h @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -24,16 +24,15 @@ #include "vexception.h" -class VExceptionConversionError : public VException -{ +class VExceptionConversionError : public VException{ public: - VExceptionConversionError(const QString &what, const QString &str); - VExceptionConversionError(const VExceptionConversionError &e); - virtual ~VExceptionConversionError() noexcept(true) {} + VExceptionConversionError(const QString &what, const QString &str); + VExceptionConversionError(const VExceptionConversionError &e):VException(e), str(e.String()){} + virtual ~VExceptionConversionError() noexcept(true) {} virtual QString ErrorMessage() const; - QString String() const {return str;} + inline QString String() const {return str;} protected: - QString str; + QString str; }; #endif // VEXCEPTIONCONVERSIONERROR_H diff --git a/exception/vexceptionemptyparameter.cpp b/exception/vexceptionemptyparameter.cpp index 72c645724..31dc1550f 100644 --- a/exception/vexceptionemptyparameter.cpp +++ b/exception/vexceptionemptyparameter.cpp @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -20,25 +20,18 @@ ****************************************************************************/ #include "vexceptionemptyparameter.h" -#include VExceptionEmptyParameter::VExceptionEmptyParameter(const QString &what, const QString &name, const QDomElement &domElement): VException(what), name(name), tagText(QString()), tagName(QString()), lineNumber(-1){ Q_ASSERT_X(!domElement.isNull(), Q_FUNC_INFO, "domElement is null"); Q_ASSERT_X(!name.isEmpty(), Q_FUNC_INFO, "Parameter name is empty"); - if(domElement.isText()){ - QDomText text = domElement.toText(); - tagText = text.data(); - } + QTextStream stream(&tagText); + domElement.save(stream, 4); tagName = domElement.tagName(); lineNumber = domElement.lineNumber(); } -VExceptionEmptyParameter::VExceptionEmptyParameter(const VExceptionEmptyParameter &e):VException(e), - name(e.Name()), tagText(e.TagText()), tagName(e.TagName()), lineNumber(e.LineNumber()){ -} - QString VExceptionEmptyParameter::ErrorMessage() const{ QString error = QString("ExceptionEmptyParameter: %1 %2").arg(what, name); return error; diff --git a/exception/vexceptionemptyparameter.h b/exception/vexceptionemptyparameter.h index 5e2ad973f..f03be1cec 100644 --- a/exception/vexceptionemptyparameter.h +++ b/exception/vexceptionemptyparameter.h @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -23,25 +23,25 @@ #define VEXCEPTIONEMPTYPARAMETER_H #include "vexception.h" -#include -class VExceptionEmptyParameter : public VException -{ +class VExceptionEmptyParameter : public VException{ public: - VExceptionEmptyParameter(const QString &what, const QString &name, const QDomElement &domElement); - VExceptionEmptyParameter(const VExceptionEmptyParameter &e); - virtual ~VExceptionEmptyParameter() noexcept(true) {} + VExceptionEmptyParameter(const QString &what, const QString &name, + const QDomElement &domElement); + VExceptionEmptyParameter(const VExceptionEmptyParameter &e):VException(e), name(e.Name()), + tagText(e.TagText()), tagName(e.TagName()), lineNumber(e.LineNumber()){} + virtual ~VExceptionEmptyParameter() noexcept(true) {} virtual QString ErrorMessage() const; virtual QString DetailedInformation() const; - QString Name() const {return name;} - QString TagText() const {return tagText;} - QString TagName() const {return tagName;} - qint32 LineNumber() const {return lineNumber;} + inline QString Name() const {return name;} + inline QString TagText() const {return tagText;} + inline QString TagName() const {return tagName;} + inline qint32 LineNumber() const {return lineNumber;} protected: - QString name; - QString tagText; - QString tagName; - qint32 lineNumber; + QString name; + QString tagText; + QString tagName; + qint32 lineNumber; }; #endif // VEXCEPTIONEMPTYPARAMETER_H diff --git a/exception/vexceptionobjecterror.cpp b/exception/vexceptionobjecterror.cpp index 9c4f36c83..11d5be2b6 100644 --- a/exception/vexceptionobjecterror.cpp +++ b/exception/vexceptionobjecterror.cpp @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -25,18 +25,12 @@ VExceptionObjectError::VExceptionObjectError(const QString &what, const QDomElement &domElement): VException(what), tagText(QString()), tagName(QString()), lineNumber(-1), moreInfo(QString()){ Q_ASSERT_X(!domElement.isNull(), Q_FUNC_INFO, "domElement is null"); - if(domElement.isText()){ - QDomText text = domElement.toText(); - tagText = text.data(); - } + QTextStream stream(&tagText); + domElement.save(stream, 4); tagName = domElement.tagName(); lineNumber = domElement.lineNumber(); } -VExceptionObjectError::VExceptionObjectError(const VExceptionObjectError &e):VException(e), - tagText(e.TagText()), tagName(e.TagName()), lineNumber(e.LineNumber()), moreInfo(e.MoreInformation()){ -} - QString VExceptionObjectError::ErrorMessage() const{ QString error = QString("ExceptionObjectError: %1").arg(what); return error; diff --git a/exception/vexceptionobjecterror.h b/exception/vexceptionobjecterror.h index f0e36bb99..db12bb943 100644 --- a/exception/vexceptionobjecterror.h +++ b/exception/vexceptionobjecterror.h @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -23,26 +23,25 @@ #define VEXCEPTIONOBJECTERROR_H #include "vexception.h" -#include -class VExceptionObjectError : public VException -{ +class VExceptionObjectError : public VException{ public: - VExceptionObjectError(const QString &what, const QDomElement &domElement); - VExceptionObjectError(const VExceptionObjectError &e); - virtual ~VExceptionObjectError() noexcept(true) {} + VExceptionObjectError(const QString &what, const QDomElement &domElement); + VExceptionObjectError(const VExceptionObjectError &e):VException(e), tagText(e.TagText()), + tagName(e.TagName()), lineNumber(e.LineNumber()), moreInfo(e.MoreInformation()){} + virtual ~VExceptionObjectError() noexcept(true) {} virtual QString ErrorMessage() const; virtual QString DetailedInformation() const; - QString TagText() const {return tagText;} - QString TagName() const {return tagName;} - qint32 LineNumber() const {return lineNumber;} - void AddMoreInformation(const QString &info); - QString MoreInformation() const {return moreInfo;} + inline QString TagText() const {return tagText;} + inline QString TagName() const {return tagName;} + inline qint32 LineNumber() const {return lineNumber;} + void AddMoreInformation(const QString &info); + inline QString MoreInformation() const {return moreInfo;} protected: - QString tagText; - QString tagName; - qint32 lineNumber; - QString moreInfo; + QString tagText; + QString tagName; + qint32 lineNumber; + QString moreInfo; }; #endif // VEXCEPTIONOBJECTERROR_H diff --git a/exception/vexceptionuniqueid.cpp b/exception/vexceptionuniqueid.cpp new file mode 100644 index 000000000..c33fb592d --- /dev/null +++ b/exception/vexceptionuniqueid.cpp @@ -0,0 +1,20 @@ +#include "vexceptionuniqueid.h" + +VExceptionUniqueId::VExceptionUniqueId(const QString &what, const QDomElement &domElement) + :VException(what), tagText(QString()), tagName(QString()), lineNumber(-1){ + Q_ASSERT_X(!domElement.isNull(), Q_FUNC_INFO, "domElement is null"); + QTextStream stream(&tagText); + domElement.save(stream, 4); + tagName = domElement.tagName(); + lineNumber = domElement.lineNumber(); +} + +QString VExceptionUniqueId::ErrorMessage() const{ + QString error = QString("ExceptionUniqueId: %1").arg(what); + return error; +} + +QString VExceptionUniqueId::DetailedInformation() const{ + QString detail = QString("tag: %1 in line %2\nFull tag:\n%3").arg(tagName).arg(lineNumber).arg(tagText); + return detail; +} diff --git a/exception/vexceptionuniqueid.h b/exception/vexceptionuniqueid.h new file mode 100644 index 000000000..d2e9cb5bd --- /dev/null +++ b/exception/vexceptionuniqueid.h @@ -0,0 +1,23 @@ +#ifndef VEXCEPTIONUNIQUEID_H +#define VEXCEPTIONUNIQUEID_H + +#include "vexception.h" + +class VExceptionUniqueId : public VException{ +public: + VExceptionUniqueId(const QString &what, const QDomElement &domElement); + VExceptionUniqueId(const VExceptionUniqueId &e):VException(e), tagText(e.TagText()), + tagName(e.TagName()), lineNumber(e.LineNumber()){} + virtual ~VExceptionUniqueId() noexcept(true){} + virtual QString ErrorMessage() const; + virtual QString DetailedInformation() const; + inline QString TagText() const {return tagText;} + inline QString TagName() const {return tagName;} + inline qint32 LineNumber() const {return lineNumber;} +protected: + QString tagText; + QString tagName; + qint32 lineNumber; +}; + +#endif // VEXCEPTIONUNIQUEID_H diff --git a/exception/vexceptionwrongparameterid.cpp b/exception/vexceptionwrongparameterid.cpp index 31b3d95e4..1ee8d090b 100644 --- a/exception/vexceptionwrongparameterid.cpp +++ b/exception/vexceptionwrongparameterid.cpp @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -25,18 +25,12 @@ VExceptionWrongParameterId::VExceptionWrongParameterId(const QString &what, const QDomElement &domElement): VException(what), tagText(QString()), tagName(QString()), lineNumber(-1){ Q_ASSERT_X(!domElement.isNull(), Q_FUNC_INFO, "domElement is null"); - if(domElement.isText()){ - QDomText text = domElement.toText(); - tagText = text.data(); - } + QTextStream stream(&tagText); + domElement.save(stream, 4); tagName = domElement.tagName(); lineNumber = domElement.lineNumber(); } -VExceptionWrongParameterId::VExceptionWrongParameterId(const VExceptionWrongParameterId &e):VException(e), - tagText(e.TagText()), tagName(e.TagName()), lineNumber(e.LineNumber()){ -} - QString VExceptionWrongParameterId::ErrorMessage() const{ QString error = QString("ExceptionWrongParameterId: %1").arg(what); return error; diff --git a/exception/vexceptionwrongparameterid.h b/exception/vexceptionwrongparameterid.h index 1b8e611f6..6e81fcb43 100644 --- a/exception/vexceptionwrongparameterid.h +++ b/exception/vexceptionwrongparameterid.h @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -23,23 +23,22 @@ #define VEXCEPTIONWRONGPARAMETERID_H #include "vexception.h" -#include -class VExceptionWrongParameterId : public VException -{ +class VExceptionWrongParameterId : public VException{ public: - VExceptionWrongParameterId(const QString &what, const QDomElement &domElement); - VExceptionWrongParameterId(const VExceptionWrongParameterId &e); - virtual ~VExceptionWrongParameterId() noexcept(true){} + VExceptionWrongParameterId(const QString &what, const QDomElement &domElement); + VExceptionWrongParameterId(const VExceptionWrongParameterId &e):VException(e),tagText(e.TagText()), + tagName(e.TagName()), lineNumber(e.LineNumber()){} + virtual ~VExceptionWrongParameterId() noexcept(true){} virtual QString ErrorMessage() const; virtual QString DetailedInformation() const; - QString TagText() const {return tagText;} - QString TagName() const {return tagName;} - qint32 LineNumber() const {return lineNumber;} + inline QString TagText() const {return tagText;} + inline QString TagName() const {return tagName;} + inline qint32 LineNumber() const {return lineNumber;} protected: - QString tagText; - QString tagName; - qint32 lineNumber; + QString tagText; + QString tagName; + qint32 lineNumber; }; #endif // VEXCEPTIONWRONGPARAMETERID_H diff --git a/geometry/varc.cpp b/geometry/varc.cpp index 3ab6180c9..cff5c6119 100644 --- a/geometry/varc.cpp +++ b/geometry/varc.cpp @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -20,16 +20,16 @@ ****************************************************************************/ #include "varc.h" -#include +#include VArc::VArc () : f1(0), formulaF1(QString()), f2(0), formulaF2(QString()), radius(0), formulaRadius(QString()), - center(0), points(0), mode(Draw::Calculation), idObject(0){ + center(0), points(QHash()), mode(Draw::Calculation), idObject(0){ } -VArc::VArc (const QMap *points, qint64 center, qreal radius, QString formulaRadius, +VArc::VArc (const QHash *points, qint64 center, qreal radius, QString formulaRadius, qreal f1, QString formulaF1, qreal f2, QString formulaF2, Draw::Draws mode, qint64 idObject) : f1(f1), formulaF1(formulaF1), f2(f2), formulaF2(formulaF2), radius(radius), formulaRadius(formulaRadius), - center(center), points(points), mode(mode), idObject(idObject){ + center(center), points(*points), mode(mode), idObject(idObject){ } VArc::VArc(const VArc &arc): f1(arc.GetF1()), formulaF1(arc.GetFormulaF1()), f2(arc.GetF2()), @@ -52,44 +52,12 @@ VArc &VArc::operator =(const VArc &arc){ return *this; } -qreal VArc::GetF1() const{ - return f1; -} - -QString VArc::GetFormulaF1() const{ - return formulaF1; -} - -qreal VArc::GetF2() const{ - return f2; -} - -QString VArc::GetFormulaF2() const{ - return formulaF2; -} - -qreal VArc::GetLength () const{ - return M_PI * radius/180 * (f2-f1); -} - -qreal VArc::GetRadius() const{ - return radius; -} - -QString VArc::GetFormulaRadius() const{ - return formulaRadius; -} - -qint64 VArc::GetCenter() const{ - return center; -} - QPointF VArc::GetCenterPoint() const{ - if(points->contains(center)){ - return points->value(center).toQPointF(); + if(points.contains(center)){ + return points.value(center).toQPointF(); } else { - qCritical()<<"Не можу знайти id = "< *VArc::GetDataPoints() const{ +const QHash VArc::GetDataPoints() const{ return points; } @@ -133,9 +101,10 @@ qreal VArc::AngleArc() const{ qint32 VArc::NumberSplOfArc() const{ qint32 angArc = static_cast (AngleArc ()); switch( angArc ){ - case 0: - throw "Кут дуги не може бути 0 градусів."; - break; + case 0:{ + QString error = QString(tr("Angle of arc can't be 0 degree.")); + throw VException(error); + } case 90: return 1; case 180: @@ -161,7 +130,8 @@ QVector VArc::GetPoints() const{ QVector VArc::SplOfArc(qint32 number) const{ qint32 n = NumberSplOfArc (); if( number > n ){ - throw "Дуга не складається з такої кількості сплайнів."; + QString error = QString(tr("Arc have not this number of part.")); + throw VException(error); } qreal f1 = GetF1 (); qreal f2 = GetF2 (); @@ -194,19 +164,3 @@ QVector VArc::SplOfArc(qint32 number) const{ } return QVector(); } - -Draw::Draws VArc::getMode() const{ - return mode; -} - -void VArc::setMode(const Draw::Draws &value){ - mode = value; -} - -qint64 VArc::getIdObject() const{ - return idObject; -} - -void VArc::setIdObject(const qint64 &value){ - idObject = value; -} diff --git a/geometry/varc.h b/geometry/varc.h index d0f0b1285..1de78e3fd 100644 --- a/geometry/varc.h +++ b/geometry/varc.h @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -28,11 +28,12 @@ * @brief VArc клас, що реалізує дугу. Дуга розраховується за годиниковою стрілкою. */ class VArc{ + Q_DECLARE_TR_FUNCTIONS(VArc) public: /** * @brief VArc конструктор по замовчуванню. */ - VArc (); + VArc (); /** * @brief VArc конструктор. * @param center точка центру. @@ -40,88 +41,87 @@ public: * @param f1 початковий кут в градусах. * @param f2 кінцевий кут в градусах. */ - VArc (const QMap *points, qint64 center, qreal radius, QString formulaRadius, - qreal f1, QString formulaF1, qreal f2 , QString formulaF2, - Draw::Draws mode = Draw::Calculation, qint64 idObject = 0); - VArc(const VArc &arc); - VArc& operator= (const VArc &arc); + VArc (const QHash *points, qint64 center, qreal radius, QString formulaRadius, + qreal f1, QString formulaF1, qreal f2 , QString formulaF2, + Draw::Draws mode = Draw::Calculation, qint64 idObject = 0); + VArc(const VArc &arc); + VArc& operator= (const VArc &arc); /** * @brief GetF1 повертає початковий кут дуги. * @return повертає кут в градусах. */ - QString GetFormulaF1 () const; - qreal GetF1 () const; + inline QString GetFormulaF1 () const {return formulaF1;} + inline qreal GetF1 () const {return f1;} /** * @brief GetF2 повертає кінцевий кут дуги. * @return повертає кут в градусах. */ - QString GetFormulaF2 () const;\ - qreal GetF2 () const; + inline QString GetFormulaF2 () const {return formulaF2;} + inline qreal GetF2 () const {return f2;} /** * @brief GetLength повертає довжину дуги. * @return повертає довжину дуги. */ - qreal GetLength () const; + inline qreal GetLength () const {return M_PI * radius/180 * (f2-f1);} /** * @brief GetRadius повертає радіус дуги. * @return повертає радіус дуги. */ - QString GetFormulaRadius () const; - qreal GetRadius () const; + inline QString GetFormulaRadius () const {return formulaRadius;} + inline qreal GetRadius () const {return radius;} /** * @brief GetCenter повертає точку центра дуги. * @return повертає точку центра дуги. */ - qint64 GetCenter () const; - QPointF GetCenterPoint() const; + inline qint64 GetCenter () const {return center;} + QPointF GetCenterPoint() const; /** * @brief GetP1 повертає першу точку з якої починається дуга. * @return точку початку дуги. */ - QPointF GetP1 () const; + QPointF GetP1 () const; /** * @brief GetP2 повертає другу точку в якій закінчується дуга. * @return точку кінця дуги. */ - QPointF GetP2 () const; - const QMap *GetDataPoints() const; + QPointF GetP2 () const; + const QHash GetDataPoints() const; /** * @brief GetPath будує шлях по даній дузі. * @return повертає шлях. */ - QPainterPath GetPath() const; - qreal AngleArc()const; - qint32 NumberSplOfArc () const; - QVector GetPoints () const; - QVector SplOfArc( qint32 number ) const; - Draw::Draws getMode() const; - void setMode(const Draw::Draws &value); - qint64 getIdObject() const; - void setIdObject(const qint64 &value); - + QPainterPath GetPath() const; + qreal AngleArc() const; + qint32 NumberSplOfArc () const; + QVector GetPoints () const; + QVector SplOfArc( qint32 number ) const; + inline Draw::Draws getMode() const {return mode;} + inline void setMode(const Draw::Draws &value) {mode = value;} + inline qint64 getIdObject() const {return idObject;} + inline void setIdObject(const qint64 &value) {idObject = value;} private: /** * @brief f1 початковий кут в градусах */ - qreal f1; // початковий кут нахилу дуги (градуси) - QString formulaF1; + qreal f1; // початковий кут нахилу дуги (градуси) + QString formulaF1; /** * @brief f2 кінцевий кут в градусах */ - qreal f2; // кінцевий кут нахилу дуги (градуси) - QString formulaF2; + qreal f2; // кінцевий кут нахилу дуги (градуси) + QString formulaF2; /** * @brief radius радіус дуги. */ - qreal radius; - QString formulaRadius; + qreal radius; + QString formulaRadius; /** * @brief center центральна точка дуги. */ - qint64 center; - const QMap *points; - Draw::Draws mode; - qint64 idObject; + qint64 center; + QHash points; + Draw::Draws mode; + qint64 idObject; }; #endif // VARC_H diff --git a/geometry/vdetail.cpp b/geometry/vdetail.cpp index 509fa073d..2b4433444 100644 --- a/geometry/vdetail.cpp +++ b/geometry/vdetail.cpp @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -21,16 +21,28 @@ #include "vdetail.h" -VDetail::VDetail():nodes(QVector()),name(QString()), mx(0), my(0){ +VDetail::VDetail():nodes(QVector()),name(QString()), mx(0), my(0), supplement(true), closed(true), + width(10){ } VDetail::VDetail(const QString &name, const QVector &nodes):nodes(QVector()), - name(name), mx(0), my(0){ + name(name), mx(0), my(0), supplement(true), closed(true), width(10){ this->nodes = nodes; } -void VDetail::append(const VNodeDetail &node){ - nodes.append(node); +VDetail::VDetail(const VDetail &detail):nodes(detail.getNodes()), name(detail.getName()), mx(detail.getMx()), + my(detail.getMy()), supplement(detail.getSupplement()), closed(detail.getClosed()), width(detail.getWidth()){ +} + +VDetail &VDetail::operator =(const VDetail &detail){ + nodes = detail.getNodes(); + name = detail.getName(); + mx = detail.getMx(); + my = detail.getMy(); + supplement = detail.getSupplement(); + closed = detail.getClosed(); + width = detail.getWidth(); + return *this; } void VDetail::Clear(){ @@ -38,10 +50,9 @@ void VDetail::Clear(){ name.clear(); mx = 0; my = 0; -} - -qint32 VDetail::CountNode() const{ - return nodes.size(); + supplement = true; + closed = true; + width = 10; } bool VDetail::Containes(const qint64 &id) const{ @@ -58,26 +69,3 @@ VNodeDetail &VDetail::operator [](int indx){ return nodes[indx]; } -qreal VDetail::getMy() const{ - return my; -} - -void VDetail::setMy(const qreal &value){ - my = value; -} - -qreal VDetail::getMx() const{ - return mx; -} - -void VDetail::setMx(const qreal &value){ - mx = value; -} - -QString VDetail::getName() const{ - return name; -} - -void VDetail::setName(const QString &value){ - name = value; -} diff --git a/geometry/vdetail.h b/geometry/vdetail.h index 45cf841fb..f042f93a9 100644 --- a/geometry/vdetail.h +++ b/geometry/vdetail.h @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -23,9 +23,6 @@ #define VDETAIL_H #include "vnodedetail.h" -#include -#include -#include namespace Detail { enum Contour { OpenContour, CloseContour }; @@ -39,24 +36,37 @@ Q_DECLARE_OPERATORS_FOR_FLAGS(Detail::Equidistants) class VDetail{ public: - VDetail(); - VDetail(const QString &name, const QVector &nodes); - void append(const VNodeDetail &node); - void Clear(); - qint32 CountNode() const; - bool Containes(const qint64 &id)const; - VNodeDetail & operator[](int indx); - QString getName() const; - void setName(const QString &value); - qreal getMx() const; - void setMx(const qreal &value); - qreal getMy() const; - void setMy(const qreal &value); + VDetail(); + VDetail(const QString &name, const QVector &nodes); + VDetail(const VDetail &detail); + VDetail &operator=(const VDetail &detail); + inline void append(const VNodeDetail &node) {nodes.append(node);} + void Clear(); + inline qint32 CountNode() const {return nodes.size();} + bool Containes(const qint64 &id)const; + VNodeDetail & operator[](int indx); + inline QString getName() const {return name;} + inline void setName(const QString &value) {name = value;} + inline qreal getMx() const {return mx;} + inline void setMx(const qreal &value) {mx = value;} + inline qreal getMy() const {return my;} + inline void setMy(const qreal &value) {my = value;} + inline bool getSupplement() const {return supplement;} + inline void setSupplement(bool value) {supplement = value;} + inline bool getClosed() const {return closed;} + inline void setClosed(bool value) {closed = value;} + inline qreal getWidth() const {return width;} + inline void setWidth(const qreal &value) {width = value;} + inline QVector getNodes() const {return nodes;} + inline void setNodes(const QVector &value) {nodes = value;} private: QVector nodes; - QString name; - qreal mx; - qreal my; + QString name; + qreal mx; + qreal my; + bool supplement; + bool closed; + qreal width; }; #endif // VDETAIL_H diff --git a/geometry/vnodedetail.cpp b/geometry/vnodedetail.cpp index e1392e22e..33a5a1407 100644 --- a/geometry/vnodedetail.cpp +++ b/geometry/vnodedetail.cpp @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -21,46 +21,25 @@ #include "vnodedetail.h" -VNodeDetail::VNodeDetail():id(0), typeTool(Tool::NodePoint), mode(Draw::Calculation), - typeNode(NodeDetail::Contour){ +VNodeDetail::VNodeDetail():id(0), typeTool(Tool::NodePoint), mode(Draw::Modeling), + typeNode(NodeDetail::Contour), mx(0), my(0){ } -VNodeDetail::VNodeDetail(qint64 id, Tool::Tools typeTool, Draw::Draws mode, NodeDetail::NodeDetails typeNode):id(id), - typeTool(typeTool), mode(mode), typeNode(typeNode){ +VNodeDetail::VNodeDetail(qint64 id, Tool::Tools typeTool, Draw::Draws mode, NodeDetail::NodeDetails typeNode, + qreal mx, qreal my):id(id), typeTool(typeTool), mode(mode), typeNode(typeNode), + mx(mx), my(my){ } VNodeDetail::VNodeDetail(const VNodeDetail &node):id(node.getId()), typeTool(node.getTypeTool()), - mode(node.getMode()), typeNode(node.getTypeNode()){ + mode(node.getMode()), typeNode(node.getTypeNode()), mx(node.getMx()), my(node.getMy()){ } -Tool::Tools VNodeDetail::getTypeTool() const{ - return typeTool; -} - -void VNodeDetail::setTypeTool(const Tool::Tools &value){ - typeTool = value; -} - -qint64 VNodeDetail::getId() const{ - return id; -} - -void VNodeDetail::setId(const qint64 &value){ - id = value; -} - -Draw::Draws VNodeDetail::getMode() const{ - return mode; -} - -void VNodeDetail::setMode(const Draw::Draws &value){ - mode = value; -} - -NodeDetail::NodeDetails VNodeDetail::getTypeNode() const{ - return typeNode; -} - -void VNodeDetail::setTypeNode(const NodeDetail::NodeDetails &value){ - typeNode = value; +VNodeDetail &VNodeDetail::operator =(const VNodeDetail &node){ + id = node.getId(); + typeTool = node.getTypeTool(); + mode = node.getMode(); + typeNode = node.getTypeNode(); + mx = node.getMx(); + my = node.getMy(); + return *this; } diff --git a/geometry/vnodedetail.h b/geometry/vnodedetail.h index 71763a677..1b433aaa9 100644 --- a/geometry/vnodedetail.h +++ b/geometry/vnodedetail.h @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -31,26 +31,32 @@ namespace NodeDetail { } Q_DECLARE_OPERATORS_FOR_FLAGS(NodeDetail::NodeDetails) -class VNodeDetail -{ +class VNodeDetail{ public: - VNodeDetail(); - VNodeDetail(qint64 id, Tool::Tools typeTool, Draw::Draws mode, NodeDetail::NodeDetails typeNode); - VNodeDetail(const VNodeDetail &node); - qint64 getId() const; - void setId(const qint64 &value); - Tool::Tools getTypeTool() const; - void setTypeTool(const Tool::Tools &value); - Draw::Draws getMode() const; - void setMode(const Draw::Draws &value); - NodeDetail::NodeDetails getTypeNode() const; - void setTypeNode(const NodeDetail::NodeDetails &value); - + VNodeDetail(); + VNodeDetail(qint64 id, Tool::Tools typeTool, Draw::Draws mode, NodeDetail::NodeDetails typeNode, + qreal mx = 0, qreal my = 0); + VNodeDetail(const VNodeDetail &node); + VNodeDetail &operator=(const VNodeDetail &node); + inline qint64 getId() const {return id;} + inline void setId(const qint64 &value) {id = value;} + inline Tool::Tools getTypeTool() const {return typeTool;} + inline void setTypeTool(const Tool::Tools &value) {typeTool = value;} + inline Draw::Draws getMode() const {return mode;} + inline void setMode(const Draw::Draws &value) {mode = value;} + inline NodeDetail::NodeDetails getTypeNode() const {return typeNode;} + inline void setTypeNode(const NodeDetail::NodeDetails &value) {typeNode = value;} + inline qreal getMx() const {return mx;} + inline void setMx(const qreal &value) {mx = value;} + inline qreal getMy() const {return my;} + inline void setMy(const qreal &value) {my = value;} private: - qint64 id; - Tool::Tools typeTool; - Draw::Draws mode; + qint64 id; + Tool::Tools typeTool; + Draw::Draws mode; NodeDetail::NodeDetails typeNode; + qreal mx; + qreal my; }; Q_DECLARE_METATYPE(VNodeDetail) diff --git a/geometry/vspline.cpp b/geometry/vspline.cpp index 69f6ff495..1273a7f30 100644 --- a/geometry/vspline.cpp +++ b/geometry/vspline.cpp @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -20,10 +20,9 @@ ****************************************************************************/ #include "vspline.h" -#include VSpline::VSpline():p1(0), p2(QPointF()), p3(QPointF()), p4(0), angle1(0), angle2(0), kAsm1(1), kAsm2(1), - kCurve(1), points(0), mode(Draw::Calculation), idObject(0){ + kCurve(1), points(QHash()), mode(Draw::Calculation), idObject(0){ } VSpline::VSpline ( const VSpline & spline ):p1(spline.GetP1 ()), p2(spline.GetP2 ()), p3(spline.GetP3 ()), @@ -32,16 +31,16 @@ VSpline::VSpline ( const VSpline & spline ):p1(spline.GetP1 ()), p2(spline.GetP2 mode(spline.getMode()), idObject(spline.getIdObject()){ } -VSpline::VSpline (const QMap *points, qint64 p1, qint64 p4, qreal angle1, qreal angle2, - qreal kAsm1, qreal kAsm2 , qreal kCurve, Draw::Draws mode, qint64 idObject):p1(p1), p2(QPointF()), p3(QPointF()), - p4(p4), angle1(angle1), angle2(angle2), kAsm1(kAsm1), kAsm2(kAsm2), kCurve(kCurve), points(points), +VSpline::VSpline (const QHash *points, qint64 p1, qint64 p4, qreal angle1, qreal angle2, + qreal kAsm1, qreal kAsm2 , qreal kCurve, Draw::Draws mode, qint64 idObject):p1(p1), p2(QPointF()), + p3(QPointF()), p4(p4), angle1(angle1), angle2(angle2), kAsm1(kAsm1), kAsm2(kAsm2), kCurve(kCurve), points(*points), mode(mode), idObject(idObject){ ModifiSpl ( p1, p4, angle1, angle2, kAsm1, kAsm2, kCurve ); } -VSpline::VSpline (const QMap *points, qint64 p1, QPointF p2, QPointF p3, qint64 p4, +VSpline::VSpline (const QHash *points, qint64 p1, QPointF p2, QPointF p3, qint64 p4, qreal kCurve, Draw::Draws mode, qint64 idObject):p1(p1), p2(p2), p3(p3), p4(p4), angle1(0), - angle2(0), kAsm1(1), kAsm2(1), kCurve(1), points(points), mode(mode), idObject(idObject){ + angle2(0), kAsm1(1), kAsm2(1), kCurve(1), points(*points), mode(mode), idObject(idObject){ ModifiSpl ( p1, p2, p3, p4, kCurve); } @@ -124,13 +123,9 @@ void VSpline::ModifiSpl (qint64 p1, QPointF p2, QPointF p3, qint64 p4, qreal kCu // p4 = QPointF(p4.x()+mx, p4.y()+my); //} -qint64 VSpline::GetP1 () const{ - return p1; -} - VPointF VSpline::GetPointP1() const{ - if(points->contains(p1)){ - return points->value(p1); + if(points.contains(p1)){ + return points.value(p1); } else { qCritical()<<"Не можу знайти id = "<contains(p4)){ - return points->value(p4); + if(points.contains(p4)){ + return points.value(p4); } else { qCritical()<<"Не можу знайти id = "<p2, this->p3, GetPointP4().toQPointF()); } @@ -178,22 +153,6 @@ QString VSpline::GetName() const{ return QString("Spl_%1_%2").arg(first.name(), second.name()); } -qreal VSpline::GetKasm1() const{ - return kAsm1; -} - -qreal VSpline::GetKasm2() const{ - return kAsm2; -} - -qreal VSpline::GetKcurve() const{ - return kCurve; -} - -const QMap *VSpline::GetDataPoints() const{ - return points; -} - QLineF::IntersectType VSpline::CrossingSplLine ( const QLineF &line, QPointF *intersectionPoint ) const{ QVector px; QVector py; @@ -320,25 +279,6 @@ QVector VSpline::GetPoints (QPointF p1, QPointF p2, QPointF p3, QPointF } qreal VSpline::LengthBezier ( QPointF p1, QPointF p2, QPointF p3, QPointF p4 ) const{ - /*QVector px; - QVector py; - QVector& wpx = px; - QVector& wpy = py; - px.append ( p1.x () ); - py.append ( p1.y () ); - PointBezier_r ( p1.x (), p1.y (), p2.x (), p2.y (), - p3.x (), p3.y (), p4.x (), p4.y (), 0, wpx, wpy); - px.append ( p4.x () ); - py.append ( p4.y () ); - qint32 i = 0; - qreal length = 0.0; - * - * Наприклад маємо 10 точок. Від 0 до 9 і останню точку не опрацьовуємо. - * Тому від 0 до 8(<10-1). - * - for ( i = 0; i < px.count() - 1; ++i ){ - length += QLineF ( QPointF ( px[i], py[i] ), QPointF ( px[i+1], py[i+1] ) ).length (); - }*/ QPainterPath splinePath; QVector points = GetPoints (p1, p2, p3, p4); splinePath.moveTo(points[0]); @@ -620,9 +560,13 @@ qreal VSpline::CalcSqDistance (qreal x1, qreal y1, qreal x2, qreal y2){ QPainterPath VSpline::GetPath() const{ QPainterPath splinePath; QVector points = GetPoints (); - splinePath.moveTo(points[0]); - for (qint32 i = 1; i < points.count(); ++i){ - splinePath.lineTo(points[i]); + if(points.count() >= 2){ + for (qint32 i = 0; i < points.count()-1; ++i){ + splinePath.moveTo(points[i]); + splinePath.lineTo(points[i+1]); + } + } else { + qWarning()<<"points.count() < 2"<ModifiSpl(P1, P2, P3, P4); //} -Draw::Draws VSpline::getMode() const{ - return mode; -} - -void VSpline::setMode(const Draw::Draws &value){ - mode = value; -} - QVector VSpline::SplinePoints(QPointF p1, QPointF p4, qreal angle1, qreal angle2, qreal kAsm1, qreal kAsm2, qreal kCurve){ QLineF p1pX(p1.x(), p1.y(), p1.x() + 100, p1.y()); @@ -776,14 +712,6 @@ QVector VSpline::SplinePoints(QPointF p1, QPointF p4, qreal angle1, qre return GetPoints(p1, p2, p3, p4); } -qint64 VSpline::getIdObject() const{ - return idObject; -} - -void VSpline::setIdObject(const qint64 &value){ - idObject = value; -} - VSpline &VSpline::operator =(const VSpline &spline){ this->p1 = spline.GetP1 (); this->p2 = spline.GetP2 (); diff --git a/geometry/vspline.h b/geometry/vspline.h index 6c7cf59c0..0b2b6dd40 100644 --- a/geometry/vspline.h +++ b/geometry/vspline.h @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -22,24 +22,21 @@ #ifndef VSPLINE_H #define VSPLINE_H -#define M_2PI 6.28318530717958647692528676655900576 +#include -#include -#include -#include -#include "container/vpointf.h" +#define M_2PI 6.28318530717958647692528676655900576 /** * @brief VSpline клас, що реалізує сплайн. */ class VSpline{ public: - VSpline(); + VSpline(); /** * @brief VSpline конструктор. * @param spline сплайн з якого копіюємо. */ - VSpline (const VSpline &spline ); + VSpline (const VSpline &spline ); /** * @brief VSpline конструктор. * @param p1 початкова точка сплайна. @@ -50,9 +47,9 @@ public: * @param kAsm1 коефіцієнт довжини першої напрямної. * @param kAsm2 коефіцієнт довжини другої напрямної. */ - VSpline (const QMap *points, qint64 p1, qint64 p4, qreal angle1, - qreal angle2, qreal kAsm1, qreal kAsm2, qreal kCurve, - Draw::Draws mode = Draw::Calculation, qint64 idObject = 0); + VSpline (const QHash *points, qint64 p1, qint64 p4, qreal angle1, qreal angle2, + qreal kAsm1, qreal kAsm2, qreal kCurve, Draw::Draws mode = Draw::Calculation, + qint64 idObject = 0); /** * @brief VSpline конструктор. * @param p1 початкова точка сплайну. @@ -60,9 +57,8 @@ public: * @param p3 друга контролююча точка сплайну. * @param p4 кінцева точка сплайну. */ - VSpline (const QMap *points, qint64 p1, QPointF p2, QPointF p3, - qint64 p4, qreal kCurve, Draw::Draws mode = Draw::Calculation, - qint64 idObject = 0); + VSpline (const QHash *points, qint64 p1, QPointF p2, QPointF p3, qint64 p4, + qreal kCurve, Draw::Draws mode = Draw::Calculation, qint64 idObject = 0); /** * @brief ModifiSpl модифікує сплайн. * @param p1 початкова точка сплайну. @@ -73,7 +69,7 @@ public: * @param kAsm1 коефіцієнт довжини першої напрямної. * @param kAsm2 коефіцієнт довжини другої напрямної. */ - void ModifiSpl ( qint64 p1, qint64 p4, qreal angle1, qreal angle2, qreal kAsm1, qreal kAsm2, + void ModifiSpl ( qint64 p1, qint64 p4, qreal angle1, qreal angle2, qreal kAsm1, qreal kAsm2, qreal kCurve); /** * @brief ModifiSpl модифікує сплайн. @@ -82,61 +78,61 @@ public: * @param p3 друга контролююча точка сплайну. * @param p4 кінцева точка сплайну. */ - void ModifiSpl (qint64 p1, QPointF p2, QPointF p3, qint64 p4, qreal kCurve); + void ModifiSpl (qint64 p1, QPointF p2, QPointF p3, qint64 p4, qreal kCurve); /** * @brief RotationSpl поворот сплайна навколо точки на кут в градусах проти годиникової стрілки. * @param pRotate точка навколо якої повертаємо. * @param angle кут в градусах. */ -// void RotationSpl ( QPointF pRotate, qreal angle ); +// void RotationSpl ( QPointF pRotate, qreal angle ); /** * @brief BiasSpl зміщує сплайн. * @param mx зміщення по х координаті. * @param my зміщення по у координаті. */ -// void BiasSpl ( qreal mx, qreal my ); +// void BiasSpl ( qreal mx, qreal my ); /** * @brief GetP1 повертає першу точку сплайну. * @return перша точка сплайну. */ - qint64 GetP1 () const; - VPointF GetPointP1() const; + qint64 GetP1 () const {return p1;} + VPointF GetPointP1() const; /** * @brief GetP2 повертує першу контрольну точку сплайну. * @return перша контрольна точка сплайну. */ - QPointF GetP2 () const; + inline QPointF GetP2 () const {return p2;} /** * @brief GetP3 повертає другу контрольну точку сплайну. * @return друга контрольна точка сплайну. */ - QPointF GetP3 () const; + inline QPointF GetP3 () const {return p3;} /** * @brief GetP4 повертає останню точку сплайну. * @return остання точка сплайну. */ - qint64 GetP4 () const; - VPointF GetPointP4 () const; + inline qint64 GetP4 () const {return p4;} + VPointF GetPointP4 () const; /** * @brief GetAngle1 повертає кут першої напрямної. * @return кут в градусах. */ - qreal GetAngle1 () const; + inline qreal GetAngle1 () const {return angle1;} /** * @brief GetAngle2 повертає кут другої напрямної. * @return кут в градусах. */ - qreal GetAngle2() const; + inline qreal GetAngle2() const {return angle2;} /** * @brief GetLength повертає довжину сплайну. * @return довжина сплайну. */ - qreal GetLength () const; - QString GetName () const; - qreal GetKasm1() const; - qreal GetKasm2() const; - qreal GetKcurve() const; - const QMap *GetDataPoints() const; + qreal GetLength () const; + QString GetName () const; + inline qreal GetKasm1() const {return kAsm1;} + inline qreal GetKasm2() const {return kAsm2;} + inline qreal GetKcurve() const {return kCurve;} + inline const QHash GetDataPoints() const {return points;} /** * @brief CrossingSplLine перевіряє перетин сплайну з лінією. * @param line лінія з якою перевіряється перетин. @@ -150,20 +146,20 @@ public: * @param curFir перший сплайн. * @param curSec другий сплайн. */ -// void CutSpline ( qreal length, VSpline* curFir, VSpline* curSec ) const; +// void CutSpline ( qreal length, VSpline* curFir, VSpline* curSec ) const; /** * @brief CutSpline розрізає сплайн. * @param point точка що ділить сплайн. * @param curFir перший сплайн. * @param curSec другий сплайн. */ -// void CutSpline (QPointF point, VSpline* curFir, VSpline* curSec ) const; +// void CutSpline (QPointF point, VSpline* curFir, VSpline* curSec ) const; /** * @brief PutAlongSpl розміщає точку на сплайні. * @param moveP точка яка розміщується на сплайні. * @param move довжина від початку сплайну. */ -// void PutAlongSpl ( QPointF &moveP, qreal move ) const; +// void PutAlongSpl ( QPointF &moveP, qreal move ) const; /** * @brief GetPoints повертає точки з яких складається сплайн. * @return список точок. @@ -173,19 +169,19 @@ public: * @brief GetPath повертає шлях сплайну. * @return шлях. */ - QPainterPath GetPath() const; + QPainterPath GetPath() const; /** * @brief Mirror вертикальне дзеркалення сплайну відносно точки. * @param Pmirror точка відносно якої відбувається вертикальне дзеркалення сплайну. */ -// void Mirror(const QPointF Pmirror); - Draw::Draws getMode() const; - void setMode(const Draw::Draws &value); - static QVector SplinePoints(QPointF p1, QPointF p4, qreal angle1, - qreal angle2, qreal kAsm1, qreal kAsm2, qreal kCurve); - qint64 getIdObject() const; - void setIdObject(const qint64 &value); - VSpline &operator=(const VSpline &spl); +// void Mirror(const QPointF Pmirror); + inline Draw::Draws getMode() const {return mode;} + inline void setMode(const Draw::Draws &value) {mode = value;} + static QVector SplinePoints(QPointF p1, QPointF p4, qreal angle1, qreal angle2, qreal kAsm1, qreal kAsm2, + qreal kCurve); + inline qint64 getIdObject() const {return idObject;} + inline void setIdObject(const qint64 &value) {idObject = value;} + VSpline &operator=(const VSpline &spl); protected: /** * @brief GetPoints повертає точки з яких складається сплайн. @@ -200,33 +196,33 @@ private: /** * @brief p1 початкова точка сплайну */ - qint64 p1; // перша точка + qint64 p1; // перша точка /** * @brief p2 перша контрольна точка сплайну. */ - QPointF p2; // друга точка + QPointF p2; // друга точка /** * @brief p3 друга контрольна точка сплайну. */ - QPointF p3; // третя точка + QPointF p3; // третя точка /** * @brief p4 кінцеві точка сплайну. */ - qint64 p4; // четверта точка + qint64 p4; // четверта точка /** * @brief angle1 кут в градусах першої напрямної. */ - qreal angle1; // кут нахилу дотичної в першій точці + qreal angle1; // кут нахилу дотичної в першій точці /** * @brief angle2 кут в градусах другої напрямної. */ - qreal angle2; // кут нахилу дотичної в другій точці - qreal kAsm1; - qreal kAsm2; - qreal kCurve; - const QMap *points; - Draw::Draws mode; - qint64 idObject; + qreal angle2; // кут нахилу дотичної в другій точці + qreal kAsm1; + qreal kAsm2; + qreal kCurve; + QHash points; + Draw::Draws mode; + qint64 idObject; /** * @brief LengthBezier повертає дожину сплайну за його чотирьма точками. * @param p1 початкова точка сплайну. @@ -235,7 +231,7 @@ private: * @param p4 кінцева точка сплайну. * @return дожина сплайну. */ - qreal LengthBezier ( QPointF p1, QPointF p2, QPointF p3, QPointF p4 ) const; + qreal LengthBezier ( QPointF p1, QPointF p2, QPointF p3, QPointF p4 ) const; /** * @brief PointBezier_r знаходить точки сплайну по його чотирьом точках. * @param x1 х координата першої точки сплайну. @@ -250,9 +246,8 @@ private: * @param px список х координат точок сплайну. * @param py список у коодринат сплайну. */ - static void PointBezier_r ( qreal x1, qreal y1, qreal x2, qreal y2, - qreal x3, qreal y3, qreal x4, qreal y4, - qint16 level, QVector &px, QVector &py); + static void PointBezier_r ( qreal x1, qreal y1, qreal x2, qreal y2, qreal x3, qreal y3, qreal x4, qreal y4, + qint16 level, QVector &px, QVector &py); /** * @brief CalcSqDistance розраховує довжину між точками. * @param x1 х координата першої точки. @@ -261,16 +256,16 @@ private: * @param y2 у координата другої точки. * @return довжину. */ - static qreal CalcSqDistance ( qreal x1, qreal y1, qreal x2, qreal y2); - /** - * @brief Cubic знаходить розв'язок кубічного рівняння. - * @param x коефіцієнт. - * @param a коефіцієнт. - * @param b коефіцієнт. - * @param c коефіцієнт. - * @return повертає корені рівняння. - */ - static qint32 Cubic(qreal *x, qreal a, qreal b, qreal c); + static qreal CalcSqDistance ( qreal x1, qreal y1, qreal x2, qreal y2); +// /** +// * @brief Cubic знаходить розв'язок кубічного рівняння. +// * @param x коефіцієнт. +// * @param a коефіцієнт. +// * @param b коефіцієнт. +// * @param c коефіцієнт. +// * @return повертає корені рівняння. +// */ +// static qint32 Cubic(qreal *x, qreal a, qreal b, qreal c); /** * @brief calc_t знаходить параметр t якому відповідає точка на сплайні. * @param curve_coord1 координата Х або У кривої. @@ -280,14 +275,14 @@ private: * @param point_coord координата Х або У точки на кривій. * @return */ -// static qreal calc_t (qreal curve_coord1, qreal curve_coord2, qreal curve_coord3, -// qreal curve_coord4, qreal point_coord)const; +// static qreal calc_t (qreal curve_coord1, qreal curve_coord2, qreal curve_coord3, qreal curve_coord4, +// qreal point_coord)const; /** * @brief param_t знаходить підходяще значення параметра t якому відповідає точка на сплайні * @param pBt точка для якої шукається значення параметра t. * @return підходяще значення t. */ -// qreal param_t (QPointF pBt)const; +// qreal param_t (QPointF pBt)const; }; #endif // VSPLINE_H diff --git a/geometry/vsplinepath.cpp b/geometry/vsplinepath.cpp index 8e3823ee3..bfd448753 100644 --- a/geometry/vsplinepath.cpp +++ b/geometry/vsplinepath.cpp @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -20,29 +20,21 @@ ****************************************************************************/ #include "vsplinepath.h" -#include "exception/vexception.h" +#include -VSplinePath::VSplinePath(): path(QVector()), kCurve(1), mode(Draw::Calculation), points(0), - idObject(0){ +VSplinePath::VSplinePath(): path(QVector()), kCurve(1), mode(Draw::Calculation), + points(QHash()), idObject(0){ } -VSplinePath::VSplinePath(const QMap *points, qreal kCurve, Draw::Draws mode, qint64 idObject): path(QVector()), - kCurve(kCurve), mode(mode), points(points), idObject(idObject){ +VSplinePath::VSplinePath(const QHash *points, qreal kCurve, Draw::Draws mode, qint64 idObject): path(QVector()), + kCurve(kCurve), mode(mode), points(*points), idObject(idObject){ } VSplinePath::VSplinePath(const VSplinePath &splPath): path(*splPath.GetPoint()), - kCurve(splPath.getKCurve()), mode(splPath.getMode()), points( splPath.GetDataPoints()), + kCurve(splPath.getKCurve()), mode(splPath.getMode()), points(splPath.GetDataPoints()), idObject(splPath.getIdObject()){ } -Draw::Draws VSplinePath::getMode() const{ - return mode; -} - -void VSplinePath::setMode(const Draw::Draws &value){ - mode = value; -} - void VSplinePath::append(VSplinePoint point){ path.append(point); } @@ -55,10 +47,6 @@ qint32 VSplinePath::Count() const{ } } -qint32 VSplinePath::CountPoint() const{ - return path.size(); -} - VSpline VSplinePath::GetSpline(qint32 index) const{ if(Count()<1){ throw VException(tr("Not enough points to create the spline.")); @@ -66,7 +54,7 @@ VSpline VSplinePath::GetSpline(qint32 index) const{ if(index < 1 || index > Count()){ throw VException(tr("This spline is not exist.")); } - VSpline spl(points, path[index-1].P(), path[index].P(), path[index-1].Angle2(), path[index].Angle1(), + VSpline spl(&points, path[index-1].P(), path[index].P(), path[index-1].Angle2(), path[index].Angle1(), path[index-1].KAsm2(), path[index].KAsm1(), this->kCurve); return spl; } @@ -74,8 +62,8 @@ VSpline VSplinePath::GetSpline(qint32 index) const{ QPainterPath VSplinePath::GetPath() const{ QPainterPath painterPath; for(qint32 i = 1; i <= Count(); ++i){ - VSpline spl(points, path[i-1].P(), path[i].P(), path[i-1].Angle2(), path[i].Angle1(), path[i-1].KAsm2(), - path[i].KAsm1(), this->kCurve); + VSpline spl(&points, path[i-1].P(), path[i].P(), path[i-1].Angle2(), path[i].Angle1(), + path[i-1].KAsm2(), path[i].KAsm1(), this->kCurve); painterPath.addPath(spl.GetPath()); } return painterPath; @@ -84,34 +72,26 @@ QPainterPath VSplinePath::GetPath() const{ QVector VSplinePath::GetPathPoints() const{ QVector pathPoints; for(qint32 i = 1; i <= Count(); ++i){ - VSpline spl(points, path[i-1].P(), path[i].P(), path[i-1].Angle2(), path[i].Angle1(), path[i-1].KAsm2(), - path[i].KAsm1(), this->kCurve); + VSpline spl(&points, path[i-1].P(), path[i].P(), path[i-1].Angle2(), path[i].Angle1(), + path[i-1].KAsm2(), path[i].KAsm1(), this->kCurve); QVector splP = spl.GetPoints(); - for(qint32 j = 0; i < splP.size(); ++j){ + for(qint32 j = 0; j < splP.size(); ++j){ pathPoints.append(splP[j]); } } return pathPoints; } -QVector VSplinePath::GetSplinePath() const{ - return path; -} - qreal VSplinePath::GetLength() const{ qreal length = 0; for(qint32 i = 1; i <= Count(); ++i){ - VSpline spl(points, path[i-1].P(), path[i].P(), path[i-1].Angle2(), path[i].Angle1(), path[i-1].KAsm2(), + VSpline spl(&points, path[i-1].P(), path[i].P(), path[i-1].Angle2(), path[i].Angle1(), path[i-1].KAsm2(), path[i].KAsm1(), kCurve); length += spl.GetLength(); } return length; } -const QMap *VSplinePath::GetDataPoints() const{ - return points; -} - void VSplinePath::UpdatePoint(qint32 indexSpline, SplinePoint::Position pos, VSplinePoint point){ if(indexSpline < 1 || indexSpline > Count()){ throw VException(tr("This spline is not exist.")); @@ -134,22 +114,6 @@ VSplinePoint VSplinePath::GetSplinePoint(qint32 indexSpline, SplinePoint::Positi } } -void VSplinePath::Clear(){ - path.clear(); -} - -qreal VSplinePath::getKCurve() const{ - return kCurve; -} - -void VSplinePath::setKCurve(const qreal &value){ - kCurve = value; -} - -const QVector *VSplinePath::GetPoint() const{ - return &path; -} - VSplinePath &VSplinePath::operator =(const VSplinePath &path){ this->path = path.GetSplinePath(); this->kCurve = path.getKCurve(); @@ -162,11 +126,3 @@ VSplinePath &VSplinePath::operator =(const VSplinePath &path){ VSplinePoint & VSplinePath::operator[](int indx){ return path[indx]; } - -qint64 VSplinePath::getIdObject() const{ - return idObject; -} - -void VSplinePath::setIdObject(const qint64 &value){ - idObject = value; -} diff --git a/geometry/vsplinepath.h b/geometry/vsplinepath.h index c6d6330f9..d8012b1ce 100644 --- a/geometry/vsplinepath.h +++ b/geometry/vsplinepath.h @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -23,8 +23,9 @@ #define VSPLINEPATH_H #include "vsplinepoint.h" +#include #include "vspline.h" -#include +#include namespace SplinePoint{ enum Position { FirstPoint, LastPoint }; @@ -41,52 +42,52 @@ public: /** * @brief VSplinePath конструктор по замовчуванню. */ - VSplinePath(); + VSplinePath(); /** * @brief VSplinePath конструктор по замовчуванню. */ - VSplinePath(const QMap *points, qreal kCurve = 1, - Draw::Draws mode = Draw::Calculation, qint64 idObject = 0); - VSplinePath(const VSplinePath& splPath); + VSplinePath(const QHash *points, qreal kCurve = 1, + Draw::Draws mode = Draw::Calculation, qint64 idObject = 0); + VSplinePath(const VSplinePath& splPath); /** * @brief append додає точку сплайну до шляху. * @param point точка. */ - void append(VSplinePoint point); - qint32 Count() const; - qint32 CountPoint() const; - VSpline GetSpline(qint32 index) const; - QPainterPath GetPath() const; - QVector GetPathPoints() const; - QVector GetSplinePath() const; - qreal GetLength() const; - const QMap *GetDataPoints() const; - void UpdatePoint(qint32 indexSpline, SplinePoint::Position pos, VSplinePoint point); - VSplinePoint GetSplinePoint(qint32 indexSpline, SplinePoint::Position pos) const; + void append(VSplinePoint point); + qint32 Count() const; + inline qint32 CountPoint() const {return path.size();} + VSpline GetSpline(qint32 index) const; + QPainterPath GetPath() const; + QVector GetPathPoints() const; + inline QVector GetSplinePath() const {return path;} + qreal GetLength() const; + inline QHash GetDataPoints() const {return points;} + void UpdatePoint(qint32 indexSpline, SplinePoint::Position pos, VSplinePoint point); + VSplinePoint GetSplinePoint(qint32 indexSpline, SplinePoint::Position pos) const; /** * @brief Clear очищає шлях сплайнів. */ - void Clear(); - qreal getKCurve() const; - void setKCurve(const qreal &value); - const QVector *GetPoint() const; - VSplinePath& operator=(const VSplinePath &path); - VSplinePoint & operator[](int indx); - Draw::Draws getMode() const; - void setMode(const Draw::Draws &value); + inline void Clear() {path.clear();} + inline qreal getKCurve() const {return kCurve;} + inline void setKCurve(const qreal &value) {kCurve = value;} + inline const QVector *GetPoint() const {return &path;} + VSplinePath &operator=(const VSplinePath &path); + VSplinePoint &operator[](int indx); + inline Draw::Draws getMode() const {return mode;} + inline void setMode(const Draw::Draws &value) {mode = value;} - qint64 getIdObject() const; - void setIdObject(const qint64 &value); + inline qint64 getIdObject() const {return idObject;} + inline void setIdObject(const qint64 &value) {idObject = value;} protected: /** * @brief path вектор з точок сплайна. */ QVector path; - qreal kCurve; - Draw::Draws mode; - const QMap *points; - qint64 idObject; + qreal kCurve; + Draw::Draws mode; + QHash points; + qint64 idObject; }; #endif // VSPLINEPATH_H diff --git a/geometry/vsplinepoint.cpp b/geometry/vsplinepoint.cpp index 6409eb5d5..93ad612ab 100644 --- a/geometry/vsplinepoint.cpp +++ b/geometry/vsplinepoint.cpp @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -32,41 +32,8 @@ VSplinePoint::VSplinePoint(const VSplinePoint &point):pSpline(point.P()), angle( kAsm1(point.KAsm1()), kAsm2(point.KAsm2()){ } -VSplinePoint::~VSplinePoint(){ -} -qint64 VSplinePoint::P() const{ - return pSpline; -} -void VSplinePoint::SetP(const qint64 &value){ - pSpline = value; -} -qreal VSplinePoint::Angle1() const{ - return angle+180; -} -void VSplinePoint::SetAngle(const qreal &value){ - angle = value; -} -qreal VSplinePoint::Angle2() const{ - return angle; -} - -qreal VSplinePoint::KAsm1() const{ - return kAsm1; -} - -void VSplinePoint::SetKAsm1(const qreal &value){ - kAsm1 = value; -} - -qreal VSplinePoint::KAsm2() const{ - return kAsm2; -} - -void VSplinePoint::SetKAsm2(const qreal &value){ - kAsm2 = value; -} diff --git a/geometry/vsplinepoint.h b/geometry/vsplinepoint.h index 219e9fa96..58fb845c8 100644 --- a/geometry/vsplinepoint.h +++ b/geometry/vsplinepoint.h @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -32,62 +32,62 @@ public: /** * @brief VSplinePoint конструктор по замповчуванню. */ - VSplinePoint(); + VSplinePoint(); /** * @brief VSplinePoint конструктор. * @param pSpline точка сплайну. * @param angle кут дотичної сплайна. * @param factor коефіцієнт довжини дотичної. */ - VSplinePoint(qint64 pSpline, qreal kAsm1, qreal angle, qreal kAsm2); - VSplinePoint(const VSplinePoint &point); - ~VSplinePoint(); + VSplinePoint(qint64 pSpline, qreal kAsm1, qreal angle, qreal kAsm2); + VSplinePoint(const VSplinePoint &point); + ~VSplinePoint() {} /** * @brief P повертає точку. * @return точка. */ - qint64 P() const; - void SetP(const qint64 &value); + inline qint64 P() const {return pSpline;} + inline void SetP(const qint64 &value) {pSpline = value;} /** * @brief Angle1 повертає кут дотичної сплайна. * @return кут в градусах. */ - qreal Angle1() const; - void SetAngle(const qreal &value); + inline qreal Angle1() const {return angle+180;} + inline void SetAngle(const qreal &value) {angle = value;} /** * @brief Angle2 повертає кут дотичної сплайна. * @return кут в градусах. */ - qreal Angle2() const; + inline qreal Angle2() const {return angle;} /** * @brief KAsm1 повертає коефіцієнт довжини дотичної. * @return коефіцієнт. */ - qreal KAsm1() const; - void SetKAsm1(const qreal &value); + inline qreal KAsm1() const {return kAsm1;} + inline void SetKAsm1(const qreal &value) {kAsm1 = value;} /** * @brief KAsm2 повертає коефіцієнт довжини дотичної. * @return коефіцієнт. */ - qreal KAsm2() const; - void SetKAsm2(const qreal &value); + inline qreal KAsm2() const {return kAsm2;} + inline void SetKAsm2(const qreal &value) {kAsm2 = value;} protected: /** * @brief pSpline точка сплайну. */ - qint64 pSpline; + qint64 pSpline; /** * @brief angle кут дотичної сплайну. */ - qreal angle; + qreal angle; /** * @brief kAsm1 коефіцієнт довжини дотичної сплайну. */ - qreal kAsm1; + qreal kAsm1; /** * @brief kAsm2 коефіцієнт довжини дотичної сплайну. */ - qreal kAsm2; + qreal kAsm2; }; Q_DECLARE_METATYPE(VSplinePoint) diff --git a/icon.qrc b/icon.qrc index 739f4bdee..66b939f04 100644 --- a/icon.qrc +++ b/icon.qrc @@ -34,5 +34,8 @@ icon/32x32/new_detail.png icon/32x32/layout.png icon/16x16/mirror.png + icon/32x32/height.png + icon/32x32/triangle.png + icon/32x32/point_of_intersection.png diff --git a/icon/32x32/height.png b/icon/32x32/height.png new file mode 100644 index 000000000..c44de68bc Binary files /dev/null and b/icon/32x32/height.png differ diff --git a/icon/32x32/point_of_intersection.png b/icon/32x32/point_of_intersection.png new file mode 100644 index 000000000..7ab757dde Binary files /dev/null and b/icon/32x32/point_of_intersection.png differ diff --git a/icon/32x32/triangle.png b/icon/32x32/triangle.png new file mode 100644 index 000000000..c409b3b41 Binary files /dev/null and b/icon/32x32/triangle.png differ diff --git a/main.cpp b/main.cpp index 6ed51ac57..0ff386dd9 100644 --- a/main.cpp +++ b/main.cpp @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -60,6 +60,7 @@ int main(int argc, char *argv[]){ app.installTranslator(&appTranslator); MainWindow w; + w.setWindowState(w.windowState() ^ Qt::WindowMaximized); app.setWindowIcon(QIcon(":/icon/64x64/icon64x64.png")); TableWindow table; QObject::connect(&w, &MainWindow::ModelChosen, &table, &TableWindow::ModelChosen); diff --git a/mainwindow.cpp b/mainwindow.cpp index 65cdfb791..536c86482 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -21,20 +21,13 @@ #include "mainwindow.h" #include "ui_mainwindow.h" -#include -#include -#include -#include -#include -#include -#include -#include #include "geometry/vspline.h" -#include #include "exception/vexceptionobjecterror.h" #include "exception/vexceptionconversionerror.h" #include "exception/vexceptionemptyparameter.h" #include "exception/vexceptionwrongparameterid.h" +#include "exception/vexceptionuniqueid.h" +#include "version.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow), tool(Tool::ArrowTool), currentScene(0), sceneDraw(0), @@ -43,10 +36,12 @@ MainWindow::MainWindow(QWidget *parent) : dialogAlongLine(QSharedPointer()), dialogShoulderPoint(QSharedPointer()), dialogNormal(QSharedPointer()), dialogBisector(QSharedPointer()), - dialogLineIntersect(QSharedPointer()), - dialogSpline(QSharedPointer()), + dialogLineIntersect(QSharedPointer()), dialogSpline(QSharedPointer()), dialogArc(QSharedPointer()), dialogSplinePath(QSharedPointer()), - dialogPointOfContact(QSharedPointer()), dialogDetail(QSharedPointer()), + dialogPointOfContact(QSharedPointer()), + dialogDetail(QSharedPointer()), dialogHeight(QSharedPointer()), + dialogTriangle(QSharedPointer()), + dialogPointOfIntersection(QSharedPointer()), dialogHistory(0), doc(0), data(0), comboBoxDraws(0), fileName(QString()), changeInFile(false), mode(Draw::Calculation){ ui->setupUi(this); @@ -61,10 +56,11 @@ MainWindow::MainWindow(QWidget *parent) : view = new VMainGraphicsView(); ui->LayoutView->addWidget(view); view->setScene(currentScene); + connect(view, &VMainGraphicsView::NewFactor, sceneDraw, &VMainGraphicsScene::SetFactor); QSizePolicy policy(QSizePolicy::Expanding, QSizePolicy::Expanding); policy.setHorizontalStretch(12); view->setSizePolicy(policy); - helpLabel = new QLabel("Створіть новий файл для початку роботи."); + helpLabel = new QLabel(tr("Create new drawing for start working.")); ui->statusBar->addWidget(helpLabel); connect(ui->actionArrowTool, &QAction::triggered, this, &MainWindow::ActionAroowTool); @@ -89,6 +85,9 @@ MainWindow::MainWindow(QWidget *parent) : connect(ui->toolButtonSplinePath, &QToolButton::clicked, this, &MainWindow::ToolSplinePath); connect(ui->toolButtonPointOfContact, &QToolButton::clicked, this, &MainWindow::ToolPointOfContact); connect(ui->toolButtonNewDetail, &QToolButton::clicked, this, &MainWindow::ToolDetail); + connect(ui->toolButtonHeight, &QToolButton::clicked, this, &MainWindow::ToolHeight); + connect(ui->toolButtonTriangle, &QToolButton::clicked, this, &MainWindow::ToolTriangle); + connect(ui->toolButtonPointOfIntersection, &QToolButton::clicked, this, &MainWindow::ToolPointOfIntersection); data = new VContainer; @@ -99,6 +98,17 @@ MainWindow::MainWindow(QWidget *parent) : fileName.clear(); changeInFile = false; + //Autosaving file each 5 minutes + QTimer *timer = new QTimer(this); + timer->setTimerType(Qt::VeryCoarseTimer); + connect(timer, &QTimer::timeout, this, &MainWindow::AutoSavePattern); + timer->start(300000); + + connect(ui->actionAbout_Qt, &QAction::triggered, this, &MainWindow::AboutQt); + connect(ui->actionAbout_Valentina, &QAction::triggered, this, &MainWindow::About); + connect(ui->actionExit, &QAction::triggered, this, &MainWindow::close); + + ui->toolBox->setCurrentIndex(0); } void MainWindow::ActionNewDraw(){ @@ -141,16 +151,16 @@ void MainWindow::ActionNewDraw(){ comboBoxDraws->setCurrentIndex(index); currentDrawChanged( index ); } - connect(comboBoxDraws, static_cast(&QComboBox::currentIndexChanged), - this, &MainWindow::currentDrawChanged); + connect(comboBoxDraws, static_cast(&QComboBox::currentIndexChanged), this, + &MainWindow::currentDrawChanged); data->ClearObject(); //Create single point - qint64 id = data->AddPoint(VPointF((10+comboBoxDraws->count()*5)*PrintDPI/25.4, 10*PrintDPI/25.4, "А", 5, - 10)); + qint64 id = data->AddPoint(VPointF(toPixel((10+comboBoxDraws->count()*5)), toPixel(10), "А", 5, 10)); VToolSinglePoint *spoint = new VToolSinglePoint(doc, data, id, Tool::FromGui); sceneDraw->addItem(spoint); connect(spoint, &VToolPoint::ChoosedTool, sceneDraw, &VMainGraphicsScene::ChoosedItem); - QMap* tools = doc->getTools(); + connect(sceneDraw, &VMainGraphicsScene::NewFactor, spoint, &VToolSinglePoint::SetFactor); + QHash* tools = doc->getTools(); tools->insert(id, spoint); VDrawTool::AddRecord(id, Tool::SinglePointTool, doc); SetEnableTool(true); @@ -160,7 +170,7 @@ void MainWindow::ActionNewDraw(){ void MainWindow::OptionDraw(){ QString nameDraw; - bool bOk; + bool bOk = false; qint32 index; QString nDraw = doc->GetNameActivDraw(); QInputDialog *dlg = new QInputDialog(this); @@ -186,12 +196,16 @@ void MainWindow::OptionDraw(){ } delete dlg; index = comboBoxDraws->findText(doc->GetNameActivDraw()); - doc->SetNameDraw(nameDraw); - comboBoxDraws->setItemText(index, nameDraw); + if(doc->SetNameDraw(nameDraw)){ + comboBoxDraws->setItemText(index, nameDraw); + } else { + QMessageBox::warning(this, tr("Error saving change!!!"), tr("Can't save new name of drawing")); + } + } template -void MainWindow::SetToolButton(bool checked, Tool::Tools t, const QString &cursor, +void MainWindow::SetToolButton(bool checked, Tool::Tools t, const QString &cursor, const QString &toolTip, QSharedPointer &dialog, Func closeDialogSlot){ if(checked){ CanselTool(); @@ -199,216 +213,142 @@ void MainWindow::SetToolButton(bool checked, Tool::Tools t, const QString &curso QPixmap pixmap(cursor); QCursor cur(pixmap, 2, 3); view->setCursor(cur); - helpLabel->setText("Виберіть точки."); + helpLabel->setText(toolTip); dialog = QSharedPointer(new Dialog(data, mode)); connect(currentScene, &VMainGraphicsScene::ChoosedObject, dialog.data(), &Dialog::ChoosedObject); connect(dialog.data(), &Dialog::DialogClosed, this, closeDialogSlot); + connect(dialog.data(), &Dialog::ToolTip, this, &MainWindow::ShowToolTip); connect(doc, &VDomDocument::FullUpdateFromFile, dialog.data(), &Dialog::UpdateList); } else { if(QToolButton *tButton = qobject_cast< QToolButton * >(this->sender())){ + Q_ASSERT(tButton != 0); tButton->setChecked(true); } } } template -void MainWindow::AddToolToDetail(T *tool, const qint64 &id, Tool::Tools typeTool, - const qint64 &idDetail){ - QMap* tools = doc->getTools(); +void MainWindow::AddToolToDetail(T *tool, const qint64 &id, Tool::Tools typeTool, const qint64 &idDetail){ + QHash* tools = doc->getTools(); VToolDetail *det = qobject_cast(tools->value(idDetail)); - Q_CHECK_PTR(det); + Q_ASSERT(det != 0); det->AddTool(tool, id, typeTool); } +template +void MainWindow::ClosedDialog(QSharedPointer &dialog, int result){ + if(result == QDialog::Accepted){ + if(mode == Draw::Calculation){ + DrawTool::Create(dialog, currentScene, doc, data); + } else { + ModelingTool *endLine = ModelingTool::Create(dialog, doc, data); + AddToolToDetail(endLine, endLine->getId(), tool, dialog->getIdDetail()); + } + } + ArrowTool(); +} + void MainWindow::ToolEndLine(bool checked){ - SetToolButton(checked, Tool::EndLineTool, ":/cursor/endline_cursor.png", dialogEndLine, - &MainWindow::ClosedDialogEndLine); + SetToolButton(checked, Tool::EndLineTool, ":/cursor/endline_cursor.png", tr("Select point"), + dialogEndLine, &MainWindow::ClosedDialogEndLine); } void MainWindow::ClosedDialogEndLine(int result){ - if(result == QDialog::Accepted){ - if(mode == Draw::Calculation){ - VToolEndLine::Create(dialogEndLine, currentScene, doc, data); - } else { - VModelingEndLine *endLine = VModelingEndLine::Create(dialogEndLine, doc, data); - AddToolToDetail(endLine, endLine->getId(), Tool::EndLineTool, dialogEndLine->getIdDetail()); - } - } - ArrowTool(); + ClosedDialog(dialogEndLine, result); } void MainWindow::ToolLine(bool checked){ - SetToolButton(checked, Tool::LineTool, ":/cursor/line_cursor.png", dialogLine, - &MainWindow::ClosedDialogLine); + SetToolButton(checked, Tool::LineTool, ":/cursor/line_cursor.png", tr("Select first point"), + dialogLine, &MainWindow::ClosedDialogLine); } void MainWindow::ClosedDialogLine(int result){ - if(result == QDialog::Accepted){ - if(mode == Draw::Calculation){ - VToolLine::Create(dialogLine, currentScene, doc, data); - } else { - VModelingLine *line = VModelingLine::Create(dialogLine, doc, data); - AddToolToDetail(line, line->getId(), Tool::LineTool, dialogLine->getIdDetail()); - } - } - ArrowTool(); + ClosedDialog(dialogLine, result); } void MainWindow::ToolAlongLine(bool checked){ - SetToolButton(checked, Tool::AlongLineTool, ":/cursor/alongline_cursor.png", dialogAlongLine, - &MainWindow::ClosedDialogAlongLine); + SetToolButton(checked, Tool::AlongLineTool, ":/cursor/alongline_cursor.png", tr("Select point"), + dialogAlongLine, &MainWindow::ClosedDialogAlongLine); } void MainWindow::ClosedDialogAlongLine(int result){ - if(result == QDialog::Accepted){ - if(mode == Draw::Calculation){ - VToolAlongLine::Create(dialogAlongLine, currentScene, doc, data); - } else{ - VModelingAlongLine *point = VModelingAlongLine::Create(dialogAlongLine, doc, data); - AddToolToDetail(point, point->getId(), Tool::AlongLineTool, dialogAlongLine->getIdDetail()); - } - } - ArrowTool(); + ClosedDialog(dialogAlongLine, result); } void MainWindow::ToolShoulderPoint(bool checked){ - SetToolButton(checked, Tool::ShoulderPointTool, ":/cursor/shoulder_cursor.png", dialogShoulderPoint, + SetToolButton(checked, Tool::ShoulderPointTool, ":/cursor/shoulder_cursor.png", + tr("Select first point of line"), dialogShoulderPoint, &MainWindow::ClosedDialogShoulderPoint); } void MainWindow::ClosedDialogShoulderPoint(int result){ - if(result == QDialog::Accepted){ - if(mode == Draw::Calculation){ - VToolShoulderPoint::Create(dialogShoulderPoint, currentScene, doc, data); - } else { - VModelingShoulderPoint *point = VModelingShoulderPoint::Create(dialogShoulderPoint, doc, data); - AddToolToDetail(point, point->getId(), Tool::ShoulderPointTool, - dialogShoulderPoint->getIdDetail()); - } - } - ArrowTool(); + ClosedDialog(dialogShoulderPoint, result); } void MainWindow::ToolNormal(bool checked){ - SetToolButton(checked, Tool::NormalTool, ":/cursor/normal_cursor.png", dialogNormal, - &MainWindow::ClosedDialogNormal); + SetToolButton(checked, Tool::NormalTool, ":/cursor/normal_cursor.png", + tr("Select first point of line"), dialogNormal, &MainWindow::ClosedDialogNormal); } void MainWindow::ClosedDialogNormal(int result){ - if(result == QDialog::Accepted){ - if(mode == Draw::Calculation){ - VToolNormal::Create(dialogNormal, currentScene, doc, data); - } else { - VModelingNormal *point = VModelingNormal::Create(dialogNormal, doc, data); - AddToolToDetail(point, point->getId(), Tool::NormalTool, dialogNormal->getIdDetail()); - } - } - ArrowTool(); + ClosedDialog(dialogNormal, result); } void MainWindow::ToolBisector(bool checked){ - SetToolButton(checked, Tool::BisectorTool, ":/cursor/bisector_cursor.png", dialogBisector, - &MainWindow::ClosedDialogBisector); + SetToolButton(checked, Tool::BisectorTool, ":/cursor/bisector_cursor.png", + tr("Select first point of angle"), dialogBisector, &MainWindow::ClosedDialogBisector); } void MainWindow::ClosedDialogBisector(int result){ - if(result == QDialog::Accepted){ - if(mode == Draw::Calculation){ - VToolBisector::Create(dialogBisector, currentScene, doc, data); - } else { - VModelingBisector *point = VModelingBisector::Create(dialogBisector, doc, data); - AddToolToDetail(point, point->getId(), Tool::BisectorTool, dialogBisector->getIdDetail()); - } - } - ArrowTool(); + ClosedDialog(dialogBisector, result); } void MainWindow::ToolLineIntersect(bool checked){ - SetToolButton(checked, Tool::LineIntersectTool, ":/cursor/intersect_cursor.png", dialogLineIntersect, + SetToolButton(checked, Tool::LineIntersectTool, ":/cursor/intersect_cursor.png", + tr("Select first point of first line"), dialogLineIntersect, &MainWindow::ClosedDialogLineIntersect); } void MainWindow::ClosedDialogLineIntersect(int result){ - if(result == QDialog::Accepted){ - if(mode == Draw::Calculation){ - VToolLineIntersect::Create(dialogLineIntersect, currentScene, doc, data); - } else { - VModelingLineIntersect *point = VModelingLineIntersect::Create(dialogLineIntersect, doc, data); - AddToolToDetail(point, point->getId(), Tool::LineIntersectTool, - dialogLineIntersect->getIdDetail()); - } - } - ArrowTool(); + ClosedDialog(dialogLineIntersect, result); } void MainWindow::ToolSpline(bool checked){ - SetToolButton(checked, Tool::SplineTool, ":/cursor/spline_cursor.png", dialogSpline, - &MainWindow::ClosedDialogSpline); + SetToolButton(checked, Tool::SplineTool, ":/cursor/spline_cursor.png", + tr("Select first point curve"), dialogSpline, &MainWindow::ClosedDialogSpline); } void MainWindow::ClosedDialogSpline(int result){ - if(result == QDialog::Accepted){ - if(mode == Draw::Calculation){ - VToolSpline::Create(dialogSpline, currentScene, doc, data); - } else { - VModelingSpline *spl = VModelingSpline::Create(dialogSpline, doc, data); - AddToolToDetail(spl, spl->getId(), Tool::SplineTool, dialogSpline->getIdDetail()); - } - } - ArrowTool(); + ClosedDialog(dialogSpline, result); } void MainWindow::ToolArc(bool checked){ - SetToolButton(checked, Tool::ArcTool, ":/cursor/arc_cursor.png", dialogArc, - &MainWindow::ClosedDialogArc); + SetToolButton(checked, Tool::ArcTool, ":/cursor/arc_cursor.png", + tr("Select point of center of arc"), dialogArc, &MainWindow::ClosedDialogArc); } void MainWindow::ClosedDialogArc(int result){ - if(result == QDialog::Accepted){ - if(mode == Draw::Calculation){ - VToolArc::Create(dialogArc, currentScene, doc, data); - } else { - VModelingArc *arc = VModelingArc::Create(dialogArc, doc, data); - AddToolToDetail(arc, arc->getId(), Tool::ArcTool, dialogArc->getIdDetail()); - } - } - ArrowTool(); + ClosedDialog(dialogArc, result); } void MainWindow::ToolSplinePath(bool checked){ - SetToolButton(checked, Tool::SplinePathTool, ":/cursor/splinepath_cursor.png", dialogSplinePath, + SetToolButton(checked, Tool::SplinePathTool, ":/cursor/splinepath_cursor.png", + tr("Select point of curve path"), dialogSplinePath, &MainWindow::ClosedDialogSplinePath); } void MainWindow::ClosedDialogSplinePath(int result){ - if(result == QDialog::Accepted){ - if(mode == Draw::Calculation){ - VToolSplinePath::Create(dialogSplinePath, currentScene, doc, data); - } else { - VModelingSplinePath *spl = VModelingSplinePath::Create(dialogSplinePath, doc, data); - AddToolToDetail(spl, spl->getId(), Tool::SplinePathTool, dialogSplinePath->getIdDetail()); - } - } - ArrowTool(); + ClosedDialog(dialogSplinePath, result); } void MainWindow::ToolPointOfContact(bool checked){ - SetToolButton(checked, Tool::PointOfContact, ":/cursor/pointcontact_cursor.png", dialogPointOfContact, + SetToolButton(checked, Tool::PointOfContact, ":/cursor/pointcontact_cursor.png", + tr("Select first point of line"), dialogPointOfContact, &MainWindow::ClosedDialogPointOfContact); } void MainWindow::ClosedDialogPointOfContact(int result){ - if(result == QDialog::Accepted){ - if(mode == Draw::Calculation){ - VToolPointOfContact::Create(dialogPointOfContact, currentScene, doc, data); - } else { - VModelingPointOfContact *point = VModelingPointOfContact::Create(dialogPointOfContact, doc, - data); - AddToolToDetail(point, point->getId(), Tool::PointOfContact, - dialogPointOfContact->getIdDetail()); - } - } - ArrowTool(); + ClosedDialog(dialogPointOfContact, result); } void MainWindow::ToolDetail(bool checked){ @@ -418,7 +358,7 @@ void MainWindow::ToolDetail(bool checked){ QPixmap pixmap("://cursor/new_detail_cursor.png"); QCursor cur(pixmap, 2, 3); view->setCursor(cur); - helpLabel->setText("Виберіть точки."); + helpLabel->setText(tr("Select points, arcs, curves clockwise.")); dialogDetail = QSharedPointer(new DialogDetail(data, mode)); connect(currentScene, &VMainGraphicsScene::ChoosedObject, dialogDetail.data(), &DialogDetail::ChoosedObject); @@ -438,6 +378,50 @@ void MainWindow::ClosedDialogDetail(int result){ ArrowTool(); } +void MainWindow::ToolHeight(bool checked){ + SetToolButton(checked, Tool::Height, ":/cursor/height_cursor.png", tr("Select base point"), + dialogHeight, &MainWindow::ClosedDialogHeight); +} + +void MainWindow::ClosedDialogHeight(int result){ + ClosedDialog(dialogHeight, result); +} + +void MainWindow::ToolTriangle(bool checked){ + SetToolButton(checked, Tool::Triangle, ":/cursor/triangle_cursor.png", tr("Select first point of axis"), + dialogTriangle, &MainWindow::ClosedDialogTriangle); +} + +void MainWindow::ClosedDialogTriangle(int result){ + ClosedDialog(dialogTriangle, result); +} + +void MainWindow::ToolPointOfIntersection(bool checked){ + SetToolButton(checked, Tool::PointOfIntersection, ":/cursor/pointofintersect_cursor.png", + tr("Select point vertically"), + dialogPointOfIntersection, &MainWindow::ClosedDialogPointOfIntersection); +} + +void MainWindow::ClosedDialogPointOfIntersection(int result){ + ClosedDialog(dialogPointOfIntersection, result); +} + +void MainWindow::About(){ + QString fullName = QString("Valentina %1").arg(APP_VERSION); + QString qtBase(tr("Based on Qt %2 (32 bit)").arg(QT_VERSION_STR)); + QString buildOn(tr("Built on %3 at %4").arg(__DATE__).arg(__TIME__)); + QString about = QString(tr("

%1

%2

%3

%4")).arg(fullName).arg(qtBase).arg(buildOn).arg(WARRANTY); + QMessageBox::about(this, tr("About Valentina"), about); +} + +void MainWindow::AboutQt(){ + QMessageBox::aboutQt(this, tr("About Qt")); +} + +void MainWindow::ShowToolTip(const QString &toolTip){ + helpLabel->setText(toolTip); +} + void MainWindow::tableClosed(){ show(); MinimumScrollBar(); @@ -461,8 +445,8 @@ void MainWindow::showEvent( QShowEvent *event ){ void MainWindow::closeEvent(QCloseEvent *event){ if(changeInFile == true){ QMessageBox msgBox; - msgBox.setText("The pattern has been modified."); - msgBox.setInformativeText("Do you want to save your changes?"); + msgBox.setText(tr("The pattern has been modified.")); + msgBox.setInformativeText(tr("Do you want to save your changes?")); msgBox.setStandardButtons(QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel); msgBox.setDefaultButton(QMessageBox::Save); msgBox.setIcon(QMessageBox::Question); @@ -475,7 +459,13 @@ void MainWindow::closeEvent(QCloseEvent *event){ } else { ActionSave(); } - event->accept(); + if(changeInFile){ + // We did't save file + event->ignore(); + } else { + // We have successfully saved the file + event->accept(); + } break; case QMessageBox::Discard: // Don't Save was clicked @@ -567,93 +557,112 @@ void MainWindow::currentDrawChanged( int index ){ void MainWindow::mouseMove(QPointF scenePos){ QString string = QString("%1, %2") - .arg(static_cast(scenePos.x()/PrintDPI*25.4)) - .arg(static_cast(scenePos.y()/PrintDPI*25.4)); + .arg(static_cast(toMM(scenePos.x()))) + .arg(static_cast(toMM(scenePos.y()))); mouseCoordinate->setText(string); } void MainWindow::CanselTool(){ - switch( tool ) - { - case Tool::ArrowTool: - ui->actionArrowTool->setChecked(false); - break; - case Tool::SinglePointTool: - //Nothing to do here because we can't create this tool from main window. - break; - case Tool::EndLineTool: - dialogEndLine.clear(); - ui->toolButtonEndLine->setChecked(false); - currentScene->setFocus(Qt::OtherFocusReason); - currentScene->clearSelection(); - break; - case Tool::LineTool: - dialogLine.clear(); - ui->toolButtonLine->setChecked(false); - currentScene->setFocus(Qt::OtherFocusReason); - currentScene->clearFocus(); - break; - case Tool::AlongLineTool: - dialogAlongLine.clear(); - ui->toolButtonAlongLine->setChecked(false); - currentScene->setFocus(Qt::OtherFocusReason); - currentScene->clearSelection(); - break; - case Tool::ShoulderPointTool: - dialogShoulderPoint.clear(); - ui->toolButtonShoulderPoint->setChecked(false); - currentScene->setFocus(Qt::OtherFocusReason); - currentScene->clearSelection(); - break; - case Tool::NormalTool: - dialogNormal.clear(); - ui->toolButtonNormal->setChecked(false); - currentScene->setFocus(Qt::OtherFocusReason); - currentScene->clearSelection(); - break; - case Tool::BisectorTool: - dialogBisector.clear(); - ui->toolButtonBisector->setChecked(false); - currentScene->setFocus(Qt::OtherFocusReason); - currentScene->clearSelection(); - break; - case Tool::LineIntersectTool: - dialogLineIntersect.clear(); - ui->toolButtonLineIntersect->setChecked(false); - currentScene->setFocus(Qt::OtherFocusReason); - currentScene->clearSelection(); - break; - case Tool::SplineTool: - dialogSpline.clear(); - ui->toolButtonSpline->setChecked(false); - currentScene->setFocus(Qt::OtherFocusReason); - currentScene->clearSelection(); - break; - case Tool::ArcTool: - dialogArc.clear(); - ui->toolButtonArc->setChecked(false); - currentScene->setFocus(Qt::OtherFocusReason); - currentScene->clearSelection(); - break; - case Tool::SplinePathTool: - dialogSplinePath.clear(); - ui->toolButtonSplinePath->setChecked(false); - currentScene->setFocus(Qt::OtherFocusReason); - currentScene->clearSelection(); - break; - case Tool::PointOfContact: - dialogPointOfContact.clear(); - ui->toolButtonPointOfContact->setChecked(false); - currentScene->setFocus(Qt::OtherFocusReason); - currentScene->clearSelection(); - break; - case Tool::Detail: - dialogDetail.clear(); - ui->toolButtonNewDetail->setChecked(false); - break; - default: - qWarning()<<"Get wrong tool type. Ignore."; - break; + switch( tool ){ + case Tool::ArrowTool: + ui->actionArrowTool->setChecked(false); + helpLabel->setText(""); + break; + case Tool::SinglePointTool: + Q_UNREACHABLE(); + //Nothing to do here because we can't create this tool from main window. + break; + case Tool::EndLineTool: + dialogEndLine.clear(); + ui->toolButtonEndLine->setChecked(false); + currentScene->setFocus(Qt::OtherFocusReason); + currentScene->clearSelection(); + break; + case Tool::LineTool: + dialogLine.clear(); + ui->toolButtonLine->setChecked(false); + currentScene->setFocus(Qt::OtherFocusReason); + currentScene->clearFocus(); + break; + case Tool::AlongLineTool: + dialogAlongLine.clear(); + ui->toolButtonAlongLine->setChecked(false); + currentScene->setFocus(Qt::OtherFocusReason); + currentScene->clearSelection(); + break; + case Tool::ShoulderPointTool: + dialogShoulderPoint.clear(); + ui->toolButtonShoulderPoint->setChecked(false); + currentScene->setFocus(Qt::OtherFocusReason); + currentScene->clearSelection(); + break; + case Tool::NormalTool: + dialogNormal.clear(); + ui->toolButtonNormal->setChecked(false); + currentScene->setFocus(Qt::OtherFocusReason); + currentScene->clearSelection(); + break; + case Tool::BisectorTool: + dialogBisector.clear(); + ui->toolButtonBisector->setChecked(false); + currentScene->setFocus(Qt::OtherFocusReason); + currentScene->clearSelection(); + break; + case Tool::LineIntersectTool: + dialogLineIntersect.clear(); + ui->toolButtonLineIntersect->setChecked(false); + currentScene->setFocus(Qt::OtherFocusReason); + currentScene->clearSelection(); + break; + case Tool::SplineTool: + dialogSpline.clear(); + ui->toolButtonSpline->setChecked(false); + currentScene->setFocus(Qt::OtherFocusReason); + currentScene->clearSelection(); + break; + case Tool::ArcTool: + dialogArc.clear(); + ui->toolButtonArc->setChecked(false); + currentScene->setFocus(Qt::OtherFocusReason); + currentScene->clearSelection(); + break; + case Tool::SplinePathTool: + dialogSplinePath.clear(); + ui->toolButtonSplinePath->setChecked(false); + currentScene->setFocus(Qt::OtherFocusReason); + currentScene->clearSelection(); + break; + case Tool::PointOfContact: + dialogPointOfContact.clear(); + ui->toolButtonPointOfContact->setChecked(false); + currentScene->setFocus(Qt::OtherFocusReason); + currentScene->clearSelection(); + break; + case Tool::Detail: + dialogDetail.clear(); + ui->toolButtonNewDetail->setChecked(false); + break; + case Tool::Height: + dialogHeight.clear(); + ui->toolButtonHeight->setChecked(false); + currentScene->setFocus(Qt::OtherFocusReason); + currentScene->clearSelection(); + break; + case Tool::Triangle: + dialogTriangle.clear(); + ui->toolButtonTriangle->setChecked(false); + currentScene->setFocus(Qt::OtherFocusReason); + currentScene->clearSelection(); + break; + case Tool::PointOfIntersection: + dialogPointOfIntersection.clear(); + ui->toolButtonPointOfIntersection->setChecked(false); + currentScene->setFocus(Qt::OtherFocusReason); + currentScene->clearSelection(); + break; + default: + qWarning()<<"Get wrong tool type. Ignore."; + break; } } @@ -726,9 +735,9 @@ void MainWindow::ActionDetails(bool checked){ } void MainWindow::ActionSaveAs(){ - QString filters("Lekalo files (*.xml);;All files (*.*)"); - QString defaultFilter("Lekalo files (*.xml)"); - QString fName = QFileDialog::getSaveFileName(this, "Зберегти файл як", QDir::homePath(), + QString filters(tr("Lekalo files (*.xml);;All files (*.*)")); + QString defaultFilter(tr("Lekalo files (*.xml)")); + QString fName = QFileDialog::getSaveFileName(this, tr("Save as"), QDir::homePath(), filters, &defaultFilter); if(fName.isEmpty()) return; @@ -736,35 +745,29 @@ void MainWindow::ActionSaveAs(){ fName.append(".xml"); } fileName = fName; - QFileInfo info(fileName); - QString title(info.fileName()); - title.append("-Valentina"); - setWindowTitle(title); - QFile file(fileName); - if(file.open(QIODevice::WriteOnly| QIODevice::Truncate)){ - doc->GarbageCollector(); - const int Indent = 4; - QTextStream out(&file); - doc->save(out, Indent); - file.close(); - } - ui->actionSave->setEnabled(false); - changeInFile = false; + ActionSave(); } void MainWindow::ActionSave(){ if(!fileName.isEmpty()){ - QFile file(fileName); - if(file.open(QIODevice::WriteOnly| QIODevice::Truncate)){ - doc->GarbageCollector(); - const int Indent = 4; - QTextStream out(&file); - doc->save(out, Indent); - file.close(); + bool result = SafeSaveing(fileName); + if(result){ + ui->actionSave->setEnabled(false); + changeInFile = false; + QFileInfo info(fileName); + QString title(info.fileName()); + title.append("-Valentina"); + setWindowTitle(title); + } else { + QMessageBox msgBox; + msgBox.setWindowTitle(tr("Error!")); + msgBox.setText(tr("Error saving file. Can't save file.")); + msgBox.setStandardButtons(QMessageBox::Ok); + msgBox.setDefaultButton(QMessageBox::Ok); + msgBox.setIcon(QMessageBox::Warning); + msgBox.exec(); } - ui->actionSave->setEnabled(false); - changeInFile = false; } } @@ -810,6 +813,10 @@ void MainWindow::haveChange(){ if(!fileName.isEmpty()){ ui->actionSave->setEnabled(true); changeInFile = true; + QFileInfo info(fileName); + QString title(info.fileName()); + title.append("*-Valentina"); + setWindowTitle(title); } } @@ -893,6 +900,9 @@ void MainWindow::SetEnableTool(bool enable){ ui->toolButtonSplinePath->setEnabled(enable); ui->toolButtonPointOfContact->setEnabled(enable); ui->toolButtonNewDetail->setEnabled(enable); + ui->toolButtonHeight->setEnabled(enable); + ui->toolButtonTriangle->setEnabled(enable); + ui->toolButtonPointOfIntersection->setEnabled(enable); } void MainWindow::MinimumScrollBar(){ @@ -902,18 +912,81 @@ void MainWindow::MinimumScrollBar(){ verScrollBar->setValue(verScrollBar->minimum()); } +bool MainWindow::SafeSaveing(const QString &fileName) const{ + try{ + doc->TestUniqueId(); + } + catch(const VExceptionUniqueId &e){ + QMessageBox msgBox; + msgBox.setWindowTitle(tr("Error!")); + msgBox.setText(tr("Error don't unique id.")); + msgBox.setInformativeText(e.ErrorMessage()); + msgBox.setStandardButtons(QMessageBox::Ok); + msgBox.setDefaultButton(QMessageBox::Ok); + msgBox.setDetailedText(e.DetailedInformation()); + msgBox.setIcon(QMessageBox::Critical); + msgBox.exec(); + return false; + } + if(fileName.isEmpty()){ + qWarning()<save(out, Indent); + tempFile.close(); + } + //Replace temp file our + bool result = false; + QFile patternFile(fileName); + // We need here temporary file because we need restore pattern after error of copying temp file. + QTemporaryFile tempOfPattern; + if (tempOfPattern.open()) { + patternFile.copy(tempOfPattern.fileName()); + } + if ( !patternFile.exists() || patternFile.remove() ) { + if ( !tempFile.copy(patternFile.fileName()) ){ + qCritical()<actionSave->setEnabled(false); + changeInFile = false; + QFileInfo info(fileName); + QString title(info.fileName()); + title.append("-Valentina"); + setWindowTitle(title); + } + } +} + MainWindow::~MainWindow(){ CanselTool(); delete ui; - QFile file("lekalo.xml"); - if(file.open(QIODevice::WriteOnly | QIODevice::Truncate)){ - const int Indent = 4; - QTextStream out(&file); - doc->save(out, Indent); - file.close(); - } - delete data; if(!doc->isNull()){ delete doc; @@ -932,7 +1005,7 @@ void MainWindow::OpenPattern(const QString &fileName){ if(file.open(QIODevice::ReadOnly)){ if(doc->setContent(&file, &errorMsg, &errorLine, &errorColumn)){ disconnect(comboBoxDraws, static_cast(&QComboBox::currentIndexChanged), - this, &MainWindow::currentDrawChanged); + this, &MainWindow::currentDrawChanged); try{ doc->Parse(Document::FullParse, sceneDraw, sceneDetails); } @@ -991,6 +1064,20 @@ void MainWindow::OpenPattern(const QString &fileName){ Clear(); return; } + catch(const VExceptionUniqueId &e){ + QMessageBox msgBox; + msgBox.setWindowTitle(tr("Error!")); + msgBox.setText(tr("Error don't unique id.")); + msgBox.setInformativeText(e.ErrorMessage()); + msgBox.setStandardButtons(QMessageBox::Ok); + msgBox.setDefaultButton(QMessageBox::Ok); + msgBox.setDetailedText(e.DetailedInformation()); + msgBox.setIcon(QMessageBox::Critical); + msgBox.exec(); + file.close(); + Clear(); + return; + } connect(comboBoxDraws, static_cast(&QComboBox::currentIndexChanged), this, &MainWindow::currentDrawChanged); QString nameDraw = doc->GetNameActivDraw(); @@ -1025,4 +1112,5 @@ void MainWindow::OpenPattern(const QString &fileName){ QString title(info.fileName()); title.append("-Valentina"); setWindowTitle(title); + helpLabel->setText(""); } diff --git a/mainwindow.h b/mainwindow.h index 00cf115f8..76a331375 100644 --- a/mainwindow.h +++ b/mainwindow.h @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -23,26 +23,20 @@ #define MAINWINDOW_H #include -#include -#include -#include -#include -#include #include "widgets/vmaingraphicsscene.h" #include "widgets/vmaingraphicsview.h" #include "widgets/vitem.h" #include "dialogs/dialogs.h" +#include "tools/vtooldetail.h" #include "tools/drawTools/drawtools.h" #include "tools/modelingTools/modelingtools.h" #include "xml/vdomdocument.h" -#include "tools/vtooldetail.h" namespace Ui { class MainWindow; } -class MainWindow : public QMainWindow -{ +class MainWindow : public QMainWindow{ Q_OBJECT public: explicit MainWindow(QWidget *parent = 0); @@ -80,6 +74,9 @@ public slots: void ToolSplinePath(bool checked); void ToolPointOfContact(bool checked); void ToolDetail(bool checked); + void ToolHeight(bool checked); + void ToolTriangle(bool checked); + void ToolPointOfIntersection(bool checked); void ClosedDialogEndLine(int result); void ClosedDialogLine(int result); void ClosedDialogAlongLine(int result); @@ -92,6 +89,12 @@ public slots: void ClosedDialogSplinePath(int result); void ClosedDialogPointOfContact(int result); void ClosedDialogDetail(int result); + void ClosedDialogHeight(int result); + void ClosedDialogTriangle(int result); + void ClosedDialogPointOfIntersection(int result); + void About(); + void AboutQt(); + void ShowToolTip(const QString &toolTip); /** * @brief tableClosed Слот, що виконується при отриманні сигналу закриття вікна укладання *деталей моделі. @@ -120,25 +123,28 @@ private: VMainGraphicsView *view; bool isInitialized; DialogIncrements *dialogTable; - QSharedPointer dialogEndLine; - QSharedPointer dialogLine; - QSharedPointer dialogAlongLine; - QSharedPointer dialogShoulderPoint; - QSharedPointer dialogNormal; - QSharedPointer dialogBisector; - QSharedPointer dialogLineIntersect; - QSharedPointer dialogSpline; - QSharedPointer dialogArc; - QSharedPointer dialogSplinePath; - QSharedPointer dialogPointOfContact; - QSharedPointer dialogDetail; + QSharedPointer dialogEndLine; + QSharedPointer dialogLine; + QSharedPointer dialogAlongLine; + QSharedPointer dialogShoulderPoint; + QSharedPointer dialogNormal; + QSharedPointer dialogBisector; + QSharedPointer dialogLineIntersect; + QSharedPointer dialogSpline; + QSharedPointer dialogArc; + QSharedPointer dialogSplinePath; + QSharedPointer dialogPointOfContact; + QSharedPointer dialogDetail; + QSharedPointer dialogHeight; + QSharedPointer dialogTriangle; + QSharedPointer dialogPointOfIntersection; DialogHistory *dialogHistory; VDomDocument *doc; VContainer *data; QComboBox *comboBoxDraws; QString fileName; bool changeInFile; - Draw::Draws mode; + Draw::Draws mode; void ToolBarOption(); void ToolBarDraws(); void CanselTool(); @@ -147,12 +153,16 @@ private: void SetEnableTool(bool enable); template void SetToolButton(bool checked, Tool::Tools t, const QString &cursor, - QSharedPointer &dialog, - Func closeDialogSlot); + const QString &toolTip,QSharedPointer &dialog, + Func closeDialogSlot); void MinimumScrollBar(); template void AddToolToDetail(T *tool, const qint64 &id, Tool::Tools typeTool, const qint64 &idDetail); + template + void ClosedDialog(QSharedPointer &dialog, int result); + bool SafeSaveing(const QString &fileName)const; + void AutoSavePattern(); }; #endif // MAINWINDOW_H diff --git a/mainwindow.ui b/mainwindow.ui index 90d48db99..2ea6899fd 100644 --- a/mainwindow.ui +++ b/mainwindow.ui @@ -36,8 +36,11 @@ 0 + + + - 4 + 0 @@ -45,7 +48,7 @@ 0 0 150 - 104 + 150 @@ -54,61 +57,21 @@ 0 + + Tools for creating points. + Point - - - - false - - - ... - - - - :/icon/32x32/normal.png:/icon/32x32/normal.png - - - - 32 - 32 - - - - true - - - - - - - false - - - ... - - - - :/icon/32x32/shoulder.png:/icon/32x32/shoulder.png - - - - 32 - 32 - - - - true - - - false + + Tool point on the end line. + ... @@ -127,17 +90,46 @@ - - + + false + + Tool point of shoulder. + ... - :/icon/32x32/along_line.png:/icon/32x32/along_line.png + :/icon/32x32/shoulder.png:/icon/32x32/shoulder.png + + + + 32 + 32 + + + + true + + + + + + + false + + + Tool point of contact. + + + ... + + + + :/icon/32x32/point_of_contact.png:/icon/32x32/point_of_contact.png @@ -155,6 +147,9 @@ false + + Tool point of bisector. + ... @@ -173,8 +168,112 @@ - - + + + + false + + + Tool point of normal. + + + ... + + + + :/icon/32x32/normal.png:/icon/32x32/normal.png + + + + 32 + 32 + + + + true + + + + + + + false + + + Tool point along line. + + + ... + + + + :/icon/32x32/along_line.png:/icon/32x32/along_line.png + + + + 32 + 32 + + + + true + + + + + + + false + + + Tool point of height. + + + ... + + + + :/icon/32x32/height.png:/icon/32x32/height.png + + + + 32 + 32 + + + + true + + + + + + + false + + + Tool triangle. + + + ... + + + + :/icon/32x32/triangle.png:/icon/32x32/triangle.png + + + + 32 + 32 + + + + true + + + + + false @@ -183,7 +282,7 @@ - :/icon/32x32/point_of_contact.png:/icon/32x32/point_of_contact.png + :/icon/32x32/point_of_intersection.png:/icon/32x32/point_of_intersection.png @@ -213,6 +312,9 @@ 0 + + Tools for creating lines. + Line @@ -222,6 +324,9 @@ false + + Tool line. + ... @@ -245,6 +350,9 @@ false + + Tool point of line intersection. + ... @@ -280,6 +388,9 @@ 0 + + Tools for creating curves. + Curve @@ -289,6 +400,9 @@ false + + Tool curve. + ... @@ -312,6 +426,9 @@ false + + Tool path curve. + ... @@ -347,6 +464,9 @@ 0 + + Tools for creating arcs. + Arc @@ -356,6 +476,9 @@ false + + Tool arc. + ... @@ -382,15 +505,27 @@ 0 0 150 - 427 + 58 + + + 0 + 0 + + + + Tools for creating details. + Detail + + Tool new detail. + ... @@ -434,6 +569,37 @@ 25 + + + File + + + + + + + + + + + Help + + + + + + + Drawing + + + + + + + + + + @@ -666,8 +832,37 @@ Create layout + + + About Qt + + + + + About Valentina + + + + + Exit + + + + toolButtonEndLine + toolButtonAlongLine + toolButtonBisector + toolButtonNormal + toolButtonShoulderPoint + toolButtonPointOfContact + toolButtonLine + toolButtonLineIntersect + toolButtonSpline + toolButtonSplinePath + toolButtonArc + toolButtonNewDetail + diff --git a/options.h b/options.h index d2620f3dd..06dcc5a69 100644 --- a/options.h +++ b/options.h @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -28,7 +28,7 @@ #define PaperSize 50000 #define toPixel(mm) ((mm / 25.4) * PrintDPI) #define toMM(pix) ((pix / PrintDPI) * 25.4) -#define widthMainLine toPixel(0.8) +#define widthMainLine toPixel(1.2) #define widthHairLine widthMainLine/3 namespace Scene{ @@ -55,7 +55,10 @@ enum Tool {ArrowTool, NodePoint, NodeArc, NodeSpline, - NodeSplinePath + NodeSplinePath, + Height, + Triangle, + PointOfIntersection }; Q_DECLARE_FLAGS(Tools, Tool) diff --git a/stable.h b/stable.h index fba2585c6..32c6762e7 100644 --- a/stable.h +++ b/stable.h @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. diff --git a/tablewindow.cpp b/tablewindow.cpp index 3189b9845..c23c5c1f1 100644 --- a/tablewindow.cpp +++ b/tablewindow.cpp @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -21,12 +21,8 @@ #include "tablewindow.h" #include "ui_tablewindow.h" -#include -#include #include "widgets/vtablegraphicsview.h" -#include #include "options.h" -#include TableWindow::TableWindow(QWidget *parent) : QMainWindow(parent), numberDetal(0), colission(0), ui(new Ui::TableWindow), @@ -39,7 +35,7 @@ TableWindow::TableWindow(QWidget *parent) : ui->statusBar->addWidget(numberDetal); ui->statusBar->addWidget(colission); outItems = collidingItems = false; - //sceneRect = QRectF(0, 0, 203*PrintDPI/25.4, 287*PrintDPI/25.4); + //sceneRect = QRectF(0, 0, toPixel(203), toPixel(287)); sceneRect = QRectF(0, 0, toPixel(823), toPixel(1171)); currentScene = new QGraphicsScene(sceneRect); QBrush *brush = new QBrush(); @@ -141,7 +137,7 @@ void TableWindow::StopTable(){ } void TableWindow::saveScene(){ - QString name = QFileDialog::getSaveFileName(0, "Зберегти розкладку", "", "Images (*.png);;Svg files (*.svg)"); + QString name = QFileDialog::getSaveFileName(0, tr("Save layout"), "", "Images (*.png);;Svg files (*.svg)"); if(name.isNull()){ return; } @@ -149,12 +145,11 @@ void TableWindow::saveScene(){ QBrush *brush = new QBrush(); brush->setColor( QColor( Qt::white ) ); currentScene->setBackgroundBrush( *brush ); - currentScene->clearSelection(); // Selections would also render to the file + currentScene->clearSelection(); // Selections would also render to the file shadowPaper->setBrush(QBrush(Qt::white)); shadowPaper->setPen(QPen(Qt::white, 0.1)); paper->setPen(QPen(Qt::white, 0.1)); paper->setBrush(QBrush(Qt::white)); - currentScene->setSceneRect(QRectF(10,10,590,590)); currentScene->setSceneRect(currentScene->itemsBoundingRect()); QFileInfo fi(name); @@ -163,9 +158,6 @@ void TableWindow::saveScene(){ } else if(fi.suffix() == "png"){ PngFile(name); } -// if(name.indexOf(".svg",name.size()-4)<0){ -// name.append(".svg"); -// } brush->setColor( QColor( Qt::gray ) ); brush->setStyle( Qt::SolidPattern ); diff --git a/tablewindow.h b/tablewindow.h index a8604a8bf..bda643db8 100644 --- a/tablewindow.h +++ b/tablewindow.h @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -23,7 +23,6 @@ #define TABLEWINDOW_H #include -#include #include "widgets/vitem.h" namespace Ui { diff --git a/tools/drawTools/drawtools.h b/tools/drawTools/drawtools.h index 0d2c5b613..4889ad878 100644 --- a/tools/drawTools/drawtools.h +++ b/tools/drawTools/drawtools.h @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -34,5 +34,8 @@ #include "vtoolsinglepoint.h" #include "vtoolspline.h" #include "vtoolsplinepath.h" +#include "vtoolheight.h" +#include "vtooltriangle.h" +#include "vtoolpointofintersection.h" #endif // DRAWTOOLS_H diff --git a/tools/drawTools/vdrawtool.cpp b/tools/drawTools/vdrawtool.cpp index 89164341b..b6290d45a 100644 --- a/tools/drawTools/vdrawtool.cpp +++ b/tools/drawTools/vdrawtool.cpp @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -20,22 +20,17 @@ ****************************************************************************/ #include "vdrawtool.h" -#include + +qreal VDrawTool::factor = 1; VDrawTool::VDrawTool(VDomDocument *doc, VContainer *data, qint64 id, QObject *parent) : - VAbstractTool(doc, data, id, parent), ignoreContextMenuEvent(false), + VAbstractTool(doc, data, id, parent), ignoreContextMenuEvent(false), ignoreFullUpdate(false), nameActivDraw(doc->GetNameActivDraw()){ connect(this->doc, &VDomDocument::ChangedActivDraw, this, &VDrawTool::ChangedActivDraw); connect(this->doc, &VDomDocument::ChangedNameDraw, this, &VDrawTool::ChangedNameDraw); connect(this->doc, &VDomDocument::ShowTool, this, &VDrawTool::ShowTool); } -VDrawTool::~VDrawTool(){ -} - -void VDrawTool::setDialog(){ -} - void VDrawTool::AddRecord(const qint64 id, Tool::Tools toolType, VDomDocument *doc){ qint64 cursor = doc->getCursor(); QVector *history = doc->getHistory(); @@ -54,10 +49,6 @@ void VDrawTool::AddRecord(const qint64 id, Tool::Tools toolType, VDomDocument *d } } -void VDrawTool::ignoreContextMenu(bool enable){ - ignoreContextMenuEvent = enable; -} - void VDrawTool::ShowTool(qint64 id, Qt::GlobalColor color, bool enable){ Q_UNUSED(id); Q_UNUSED(color); @@ -78,6 +69,12 @@ void VDrawTool::ChangedNameDraw(const QString oldName, const QString newName){ } } +void VDrawTool::SetFactor(qreal factor){ + if(factor <= 2 && factor >= 0.5){ + this->factor = factor; + } +} + void VDrawTool::AddToCalculation(const QDomElement &domElement){ QDomElement calcElement; bool ok = doc->GetActivCalculationElement(calcElement); @@ -91,11 +88,11 @@ void VDrawTool::AddToCalculation(const QDomElement &domElement){ calcElement.insertAfter(domElement,refElement); doc->setCursor(0); } else { - qCritical()<<"Не можу знайти елемент після якого потрібно вставляти."<< Q_FUNC_INFO; + qCritical()< class VDrawTool : public VAbstractTool{ Q_OBJECT public: VDrawTool(VDomDocument *doc, VContainer *data, qint64 id, QObject *parent = 0); - virtual ~VDrawTool(); - virtual void setDialog(); + virtual ~VDrawTool() {} + virtual void setDialog() {} static void AddRecord(const qint64 id, Tool::Tools toolType, VDomDocument *doc); - void ignoreContextMenu(bool enable); + void ignoreContextMenu(bool enable) {ignoreContextMenuEvent = enable;} public slots: virtual void ShowTool(qint64 id, Qt::GlobalColor color, bool enable); virtual void ChangedActivDraw(const QString newName); void ChangedNameDraw(const QString oldName, const QString newName); virtual void FullUpdateFromGui(int result)=0; -signals: - void RemoveTool(QGraphicsItem *tool); + virtual void SetFactor(qreal factor); protected: bool ignoreContextMenuEvent; + bool ignoreFullUpdate; QString nameActivDraw; + static qreal factor; void AddToCalculation(const QDomElement &domElement); template void ContextMenu(QSharedPointer &dialog, Tool *tool, QGraphicsSceneContextMenuEvent *event, bool showRemove = true){ + Q_ASSERT(tool != 0); + Q_ASSERT(event != 0); if(!ignoreContextMenuEvent){ QMenu menu; QAction *actionOption = menu.addAction(tr("Options")); @@ -63,35 +65,50 @@ protected: if(selectedAction == actionOption){ dialog = QSharedPointer(new Dialog(getData())); - connect(qobject_cast< VMainGraphicsScene * >(tool->scene()), &VMainGraphicsScene::ChoosedObject, - dialog.data(), &Dialog::ChoosedObject); - connect(dialog.data(), &Dialog::DialogClosed, tool, - &Tool::FullUpdateFromGui); - connect(doc, &VDomDocument::FullUpdateFromFile, dialog.data(), &Dialog::UpdateList); + connect(qobject_cast< VMainGraphicsScene * >(tool->scene()), + &VMainGraphicsScene::ChoosedObject, dialog.data(), &Dialog::ChoosedObject); + connect(dialog.data(), &Dialog::DialogClosed, tool, &Tool::FullUpdateFromGui); + if(!ignoreFullUpdate){ + connect(doc, &VDomDocument::FullUpdateFromFile, dialog.data(), &Dialog::UpdateList); + } tool->setDialog(); dialog->show(); } - if(selectedAction == actionRemove){ - //deincrement referens - RemoveReferens(); - //remove form xml file - QDomElement domElement = doc->elementById(QString().setNum(id)); - if(domElement.isElement()){ - QDomElement element; - bool ok = doc->GetActivCalculationElement(element); - if(ok){ - element.removeChild(domElement); - //update xml file - emit FullUpdateTree(); - //remove form scene - emit RemoveTool(tool); + if(showRemove){ + if(selectedAction == actionRemove){ + //deincrement referens + RemoveReferens(); + //remove form xml file + QDomElement domElement = doc->elementById(QString().setNum(id)); + if(domElement.isElement()){ + QDomElement element; + bool ok = doc->GetActivCalculationElement(element); + if(ok){ + element.removeChild(domElement); + //update xml file + emit FullUpdateTree(); + //remove form scene + emit RemoveTool(tool); + } } } } } } + template + void ShowItem(Item *item, qint64 id, Qt::GlobalColor color, bool enable){ + Q_ASSERT(item != 0); + if(id == item->id){ + if(enable == false){ + currentColor = baseColor; + } else { + currentColor = color; + } + item->setPen(QPen(currentColor, widthHairLine/factor)); + } + } }; #endif // VDRAWTOOL_H diff --git a/tools/drawTools/vtoolalongline.cpp b/tools/drawTools/vtoolalongline.cpp index e0237cbdd..3df25583e 100644 --- a/tools/drawTools/vtoolalongline.cpp +++ b/tools/drawTools/vtoolalongline.cpp @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -20,10 +20,10 @@ ****************************************************************************/ #include "vtoolalongline.h" -#include -#include #include "container/calculator.h" +const QString VToolAlongLine::ToolType = QStringLiteral("alongLine"); + VToolAlongLine::VToolAlongLine(VDomDocument *doc, VContainer *data, qint64 id, const QString &formula, const qint64 &firstPointId, const qint64 &secondPointId, const QString &typeLine, Tool::Sources typeCreation, @@ -39,10 +39,10 @@ VToolAlongLine::VToolAlongLine(VDomDocument *doc, VContainer *data, qint64 id, c void VToolAlongLine::FullUpdateFromFile(){ QDomElement domElement = doc->elementById(QString().setNum(id)); if(domElement.isElement()){ - typeLine = domElement.attribute("typeLine", ""); - formula = domElement.attribute("length", ""); - basePointId = domElement.attribute("firstPoint", "").toLongLong(); - secondPointId = domElement.attribute("secondPoint", "").toLongLong(); + typeLine = domElement.attribute(AttrTypeLine, ""); + formula = domElement.attribute(AttrLength, ""); + basePointId = domElement.attribute(AttrFirstPoint, "").toLongLong(); + secondPointId = domElement.attribute(AttrSecondPoint, "").toLongLong(); } RefreshGeometry(); } @@ -51,36 +51,40 @@ void VToolAlongLine::FullUpdateFromGui(int result){ if(result == QDialog::Accepted){ QDomElement domElement = doc->elementById(QString().setNum(id)); if(domElement.isElement()){ - domElement.setAttribute("name", dialogAlongLine->getPointName()); - domElement.setAttribute("typeLine", dialogAlongLine->getTypeLine()); - domElement.setAttribute("length", dialogAlongLine->getFormula()); - domElement.setAttribute("firstPoint", QString().setNum(dialogAlongLine->getFirstPointId())); - domElement.setAttribute("secondPoint", QString().setNum(dialogAlongLine->getSecondPointId())); + domElement.setAttribute(AttrName, dialogAlongLine->getPointName()); + domElement.setAttribute(AttrTypeLine, dialogAlongLine->getTypeLine()); + domElement.setAttribute(AttrLength, dialogAlongLine->getFormula()); + domElement.setAttribute(AttrFirstPoint, QString().setNum(dialogAlongLine->getFirstPointId())); + domElement.setAttribute(AttrSecondPoint, QString().setNum(dialogAlongLine->getSecondPointId())); emit FullUpdateTree(); } - } dialogAlongLine.clear(); } +void VToolAlongLine::SetFactor(qreal factor){ + VDrawTool::SetFactor(factor); + RefreshGeometry(); +} + void VToolAlongLine::contextMenuEvent(QGraphicsSceneContextMenuEvent *event){ ContextMenu(dialogAlongLine, this, event); } void VToolAlongLine::AddToFile(){ VPointF point = VAbstractTool::data.GetPoint(id); - QDomElement domElement = doc->createElement("point"); + QDomElement domElement = doc->createElement(TagName); - AddAttribute(domElement, "id", id); - AddAttribute(domElement, "type", "alongLine"); - AddAttribute(domElement, "name", point.name()); - AddAttribute(domElement, "mx", point.mx()/PrintDPI*25.4); - AddAttribute(domElement, "my", point.my()/PrintDPI*25.4); + AddAttribute(domElement, AttrId, id); + AddAttribute(domElement, AttrType, ToolType); + AddAttribute(domElement, AttrName, point.name()); + AddAttribute(domElement, AttrMx, toMM(point.mx())); + AddAttribute(domElement, AttrMy, toMM(point.my())); - AddAttribute(domElement, "typeLine", typeLine); - AddAttribute(domElement, "length", formula); - AddAttribute(domElement, "firstPoint", basePointId); - AddAttribute(domElement, "secondPoint", secondPointId); + AddAttribute(domElement, AttrTypeLine, typeLine); + AddAttribute(domElement, AttrLength, formula); + AddAttribute(domElement, AttrFirstPoint, basePointId); + AddAttribute(domElement, AttrSecondPoint, secondPointId); AddToCalculation(domElement); } @@ -128,21 +132,24 @@ void VToolAlongLine::Create(const qint64 _id, const QString &pointName, const QS qint64 id = _id; if(typeCreation == Tool::FromGui){ id = data->AddPoint(VPointF(line.p2().x(), line.p2().y(), pointName, mx, my)); + data->AddLine(firstPointId, id); + data->AddLine(id, secondPointId); } else { data->UpdatePoint(id, VPointF(line.p2().x(), line.p2().y(), pointName, mx, my)); + data->AddLine(firstPointId, id); + data->AddLine(id, secondPointId); if(parse != Document::FullParse){ doc->UpdateToolData(id, data); } } VDrawTool::AddRecord(id, Tool::AlongLineTool, doc); - data->AddLine(firstPointId, id); - data->AddLine(id, secondPointId); if(parse == Document::FullParse){ VToolAlongLine *point = new VToolAlongLine(doc, data, id, formula, firstPointId, secondPointId, typeLine, typeCreation); scene->addItem(point); connect(point, &VToolAlongLine::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem); connect(point, &VToolAlongLine::RemoveTool, scene, &VMainGraphicsScene::RemoveTool); + connect(scene, &VMainGraphicsScene::NewFactor, point, &VToolAlongLine::SetFactor); doc->AddTool(id, point); doc->IncrementReferens(firstPointId); doc->IncrementReferens(secondPointId); diff --git a/tools/drawTools/vtoolalongline.h b/tools/drawTools/vtoolalongline.h index aede99661..35734aab9 100644 --- a/tools/drawTools/vtoolalongline.h +++ b/tools/drawTools/vtoolalongline.h @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -25,29 +25,30 @@ #include "vtoollinepoint.h" #include "dialogs/dialogalongline.h" -class VToolAlongLine : public VToolLinePoint -{ +class VToolAlongLine : public VToolLinePoint{ Q_OBJECT public: - VToolAlongLine(VDomDocument *doc, VContainer *data, qint64 id, const QString &formula, - const qint64 &firstPointId, const qint64 &secondPointId, const QString &typeLine, - Tool::Sources typeCreation, QGraphicsItem * parent = 0); - virtual void setDialog(); - static void Create(QSharedPointer &dialog, VMainGraphicsScene *scene, VDomDocument *doc, - VContainer *data); - static void Create(const qint64 _id, const QString &pointName, const QString &typeLine, - const QString &formula, const qint64 &firstPointId, const qint64 &secondPointId, - const qreal &mx, const qreal &my, VMainGraphicsScene *scene, VDomDocument *doc, - VContainer *data, const Document::Documents &parse, Tool::Sources typeCreation); + VToolAlongLine(VDomDocument *doc, VContainer *data, qint64 id, const QString &formula, + const qint64 &firstPointId, const qint64 &secondPointId, const QString &typeLine, + Tool::Sources typeCreation, QGraphicsItem * parent = 0); + virtual void setDialog(); + static void Create(QSharedPointer &dialog, VMainGraphicsScene *scene, VDomDocument *doc, + VContainer *data); + static void Create(const qint64 _id, const QString &pointName, const QString &typeLine, const QString &formula, + const qint64 &firstPointId, const qint64 &secondPointId, const qreal &mx, const qreal &my, + VMainGraphicsScene *scene, VDomDocument *doc, VContainer *data, + const Document::Documents &parse, Tool::Sources typeCreation); + static const QString ToolType; public slots: - virtual void FullUpdateFromFile(); - virtual void FullUpdateFromGui(int result); + virtual void FullUpdateFromFile(); + virtual void FullUpdateFromGui(int result); + virtual void SetFactor(qreal factor); protected: - virtual void contextMenuEvent ( QGraphicsSceneContextMenuEvent * event ); - virtual void AddToFile(); - virtual void RemoveReferens(); + virtual void contextMenuEvent ( QGraphicsSceneContextMenuEvent * event ); + virtual void AddToFile(); + virtual void RemoveReferens(); private: - qint64 secondPointId; + qint64 secondPointId; QSharedPointer dialogAlongLine; }; diff --git a/tools/drawTools/vtoolarc.cpp b/tools/drawTools/vtoolarc.cpp index 84d453f8e..149560c3d 100644 --- a/tools/drawTools/vtoolarc.cpp +++ b/tools/drawTools/vtoolarc.cpp @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -22,6 +22,9 @@ #include "vtoolarc.h" #include "container/calculator.h" +const QString VToolArc::TagName = QStringLiteral("arc"); +const QString VToolArc::ToolType = QStringLiteral("simple"); + VToolArc::VToolArc(VDomDocument *doc, VContainer *data, qint64 id, Tool::Sources typeCreation, QGraphicsItem *parent):VDrawTool(doc, data, id), QGraphicsPathItem(parent), dialogArc(QSharedPointer()){ @@ -30,7 +33,7 @@ VToolArc::VToolArc(VDomDocument *doc, VContainer *data, qint64 id, Tool::Sources path.addPath(arc.GetPath()); path.setFillRule( Qt::WindingFill ); this->setPath(path); - this->setPen(QPen(Qt::black, widthHairLine)); + this->setPen(QPen(Qt::black, widthHairLine/factor)); this->setFlag(QGraphicsItem::ItemIsSelectable, true); this->setAcceptHoverEvents(true); @@ -44,9 +47,9 @@ void VToolArc::setDialog(){ if(!dialogArc.isNull()){ VArc arc = VAbstractTool::data.GetArc(id); dialogArc->SetCenter(arc.GetCenter()); - dialogArc->SetRadius(arc.GetFormulaRadius()); dialogArc->SetF1(arc.GetFormulaF1()); dialogArc->SetF2(arc.GetFormulaF2()); + dialogArc->SetRadius(arc.GetFormulaRadius()); } } @@ -68,7 +71,7 @@ void VToolArc::Create(const qint64 _id, const qint64 ¢er, const QString &rad QString errorMsg; qreal result = cal.eval(radius, &errorMsg); if(errorMsg.isEmpty()){ - calcRadius = result*PrintDPI/25.4; + calcRadius = toPixel(result); } errorMsg.clear(); @@ -87,13 +90,14 @@ void VToolArc::Create(const qint64 _id, const qint64 ¢er, const QString &rad qint64 id = _id; if(typeCreation == Tool::FromGui){ id = data->AddArc(arc); + data->AddLengthArc(data->GetNameArc(center,id), toMM(arc.GetLength())); } else { data->UpdateArc(id, arc); + data->AddLengthArc(data->GetNameArc(center,id), toMM(arc.GetLength())); if(parse != Document::FullParse){ doc->UpdateToolData(id, data); } } - data->AddLengthArc(data->GetNameArc(center,id), arc.GetLength()); VDrawTool::AddRecord(id, Tool::ArcTool, doc); if(parse == Document::FullParse){ VToolArc *toolArc = new VToolArc(doc, data, id, typeCreation); @@ -113,10 +117,10 @@ void VToolArc::FullUpdateFromGui(int result){ if(result == QDialog::Accepted){ QDomElement domElement = doc->elementById(QString().setNum(id)); if(domElement.isElement()){ - domElement.setAttribute("center", QString().setNum(dialogArc->GetCenter())); - domElement.setAttribute("radius", dialogArc->GetRadius()); - domElement.setAttribute("angle1", dialogArc->GetF1()); - domElement.setAttribute("angle2", dialogArc->GetF2()); + domElement.setAttribute(AttrCenter, QString().setNum(dialogArc->GetCenter())); + domElement.setAttribute(AttrRadius, dialogArc->GetRadius()); + domElement.setAttribute(AttrAngle1, dialogArc->GetF1()); + domElement.setAttribute(AttrAngle2, dialogArc->GetF2()); emit FullUpdateTree(); } } @@ -124,29 +128,27 @@ void VToolArc::FullUpdateFromGui(int result){ } void VToolArc::ChangedActivDraw(const QString newName){ + bool selectable = false; if(nameActivDraw == newName){ - this->setPen(QPen(Qt::black, widthHairLine)); - this->setFlag(QGraphicsItem::ItemIsSelectable, true); - this->setAcceptHoverEvents(true); - VDrawTool::ChangedActivDraw(newName); + selectable = true; + currentColor = Qt::black; } else { - this->setPen(QPen(Qt::gray, widthHairLine)); - this->setFlag(QGraphicsItem::ItemIsSelectable, false); - this->setAcceptHoverEvents (false); - VDrawTool::ChangedActivDraw(newName); + selectable = false; + currentColor = Qt::gray; } + this->setPen(QPen(currentColor, widthHairLine/factor)); + this->setFlag(QGraphicsItem::ItemIsSelectable, selectable); + this->setAcceptHoverEvents (selectable); + VDrawTool::ChangedActivDraw(newName); } void VToolArc::ShowTool(qint64 id, Qt::GlobalColor color, bool enable){ - if(id == this->id){ - if(enable == false){ - this->setPen(QPen(baseColor, widthHairLine)); - currentColor = baseColor; - } else { - this->setPen(QPen(color, widthHairLine)); - currentColor = color; - } - } + ShowItem(this, id, color, enable); +} + +void VToolArc::SetFactor(qreal factor){ + VDrawTool::SetFactor(factor); + RefreshGeometry(); } void VToolArc::contextMenuEvent(QGraphicsSceneContextMenuEvent *event){ @@ -155,14 +157,14 @@ void VToolArc::contextMenuEvent(QGraphicsSceneContextMenuEvent *event){ void VToolArc::AddToFile(){ VArc arc = VAbstractTool::data.GetArc(id); - QDomElement domElement = doc->createElement("arc"); + QDomElement domElement = doc->createElement(TagName); - AddAttribute(domElement, "id", id); - AddAttribute(domElement, "type", "simple"); - AddAttribute(domElement, "center", arc.GetCenter()); - AddAttribute(domElement, "radius", arc.GetFormulaRadius()); - AddAttribute(domElement, "angle1", arc.GetFormulaF1()); - AddAttribute(domElement, "angle2", arc.GetFormulaF2()); + AddAttribute(domElement, AttrId, id); + AddAttribute(domElement, AttrType, ToolType); + AddAttribute(domElement, AttrCenter, arc.GetCenter()); + AddAttribute(domElement, AttrRadius, arc.GetFormulaRadius()); + AddAttribute(domElement, AttrAngle1, arc.GetFormulaF1()); + AddAttribute(domElement, AttrAngle2, arc.GetFormulaF2()); AddToCalculation(domElement); } @@ -176,12 +178,12 @@ void VToolArc::mouseReleaseEvent(QGraphicsSceneMouseEvent *event){ void VToolArc::hoverMoveEvent(QGraphicsSceneHoverEvent *event){ Q_UNUSED(event); - this->setPen(QPen(currentColor, widthMainLine)); + this->setPen(QPen(currentColor, widthMainLine/factor)); } void VToolArc::hoverLeaveEvent(QGraphicsSceneHoverEvent *event){ Q_UNUSED(event); - this->setPen(QPen(currentColor, widthHairLine)); + this->setPen(QPen(currentColor, widthHairLine/factor)); } void VToolArc::RemoveReferens(){ @@ -190,6 +192,7 @@ void VToolArc::RemoveReferens(){ } void VToolArc::RefreshGeometry(){ + this->setPen(QPen(currentColor, widthHairLine/factor)); VArc arc = VAbstractTool::data.GetArc(id); QPainterPath path; path.addPath(arc.GetPath()); diff --git a/tools/drawTools/vtoolarc.h b/tools/drawTools/vtoolarc.h index f78f26bbc..a743b96e1 100644 --- a/tools/drawTools/vtoolarc.h +++ b/tools/drawTools/vtoolarc.h @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -30,31 +30,32 @@ class VToolArc :public VDrawTool, public QGraphicsPathItem{ Q_OBJECT public: - VToolArc(VDomDocument *doc, VContainer *data, qint64 id, - Tool::Sources typeCreation, QGraphicsItem * parent = 0); - virtual void setDialog(); - static void Create(QSharedPointer &dialog, VMainGraphicsScene *scene, - VDomDocument *doc, - VContainer *data); - static void Create(const qint64 _id, const qint64 ¢er, const QString &radius, - const QString &f1, const QString &f2, VMainGraphicsScene *scene, - VDomDocument *doc, VContainer *data, const Document::Documents &parse, - Tool::Sources typeCreation); + VToolArc(VDomDocument *doc, VContainer *data, qint64 id, Tool::Sources typeCreation, + QGraphicsItem * parent = 0); + virtual void setDialog(); + static void Create(QSharedPointer &dialog, VMainGraphicsScene *scene, VDomDocument *doc, + VContainer *data); + static void Create(const qint64 _id, const qint64 ¢er, const QString &radius, const QString &f1, + const QString &f2, VMainGraphicsScene *scene, VDomDocument *doc, VContainer *data, + const Document::Documents &parse, Tool::Sources typeCreation); + static const QString TagName; + static const QString ToolType; public slots: - virtual void FullUpdateFromFile(); - virtual void FullUpdateFromGui(int result); - virtual void ChangedActivDraw(const QString newName); - virtual void ShowTool(qint64 id, Qt::GlobalColor color, bool enable); + virtual void FullUpdateFromFile(); + virtual void FullUpdateFromGui(int result); + virtual void ChangedActivDraw(const QString newName); + virtual void ShowTool(qint64 id, Qt::GlobalColor color, bool enable); + virtual void SetFactor(qreal factor); protected: - virtual void contextMenuEvent ( QGraphicsSceneContextMenuEvent * event ); - virtual void AddToFile(); - virtual void mouseReleaseEvent ( QGraphicsSceneMouseEvent * event ); - virtual void hoverMoveEvent ( QGraphicsSceneHoverEvent * event ); - virtual void hoverLeaveEvent ( QGraphicsSceneHoverEvent * event ); - virtual void RemoveReferens(); + virtual void contextMenuEvent ( QGraphicsSceneContextMenuEvent * event ); + virtual void AddToFile(); + virtual void mouseReleaseEvent ( QGraphicsSceneMouseEvent * event ); + virtual void hoverMoveEvent ( QGraphicsSceneHoverEvent * event ); + virtual void hoverLeaveEvent ( QGraphicsSceneHoverEvent * event ); + virtual void RemoveReferens(); private: QSharedPointer dialogArc; - void RefreshGeometry(); + void RefreshGeometry(); }; #endif // VTOOLARC_H diff --git a/tools/drawTools/vtoolbisector.cpp b/tools/drawTools/vtoolbisector.cpp index 80ee7453d..9e21737ab 100644 --- a/tools/drawTools/vtoolbisector.cpp +++ b/tools/drawTools/vtoolbisector.cpp @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -20,6 +20,9 @@ ****************************************************************************/ #include "vtoolbisector.h" +#include + +const QString VToolBisector::ToolType = QStringLiteral("bisector"); VToolBisector::VToolBisector(VDomDocument *doc, VContainer *data, const qint64 &id, const QString &typeLine, const QString &formula, const qint64 &firstPointId, @@ -42,8 +45,10 @@ QPointF VToolBisector::FindPoint(const QPointF &firstPoint, const QPointF &secon qreal angle = line1.angleTo(line2); if(angle>180){ angle = 360 - angle; + line1.setAngle(line1.angle()-angle/2); + } else { + line1.setAngle(line1.angle()+angle/2); } - line1.setAngle(line1.angle()-angle/2); line1.setLength(length); return line1.p2(); } @@ -87,25 +92,26 @@ void VToolBisector::Create(const qint64 _id, const QString &formula, const qint6 qreal result = cal.eval(formula, &errorMsg); if(errorMsg.isEmpty()){ QPointF fPoint = VToolBisector::FindPoint(firstPoint.toQPointF(), secondPoint.toQPointF(), - thirdPoint.toQPointF(), result*PrintDPI/25.4); + thirdPoint.toQPointF(), toPixel(result)); qint64 id = _id; if(typeCreation == Tool::FromGui){ id = data->AddPoint(VPointF(fPoint.x(), fPoint.y(), pointName, mx, my)); + data->AddLine(firstPointId, id); } else { data->UpdatePoint(id, VPointF(fPoint.x(), fPoint.y(), pointName, mx, my)); + data->AddLine(firstPointId, id); if(parse != Document::FullParse){ doc->UpdateToolData(id, data); } } - data->AddLine(firstPointId, id); VDrawTool::AddRecord(id, Tool::BisectorTool, doc); if(parse == Document::FullParse){ - VToolBisector *point = new VToolBisector(doc, data, id, typeLine, formula, - firstPointId, secondPointId, thirdPointId, - typeCreation); + VToolBisector *point = new VToolBisector(doc, data, id, typeLine, formula, firstPointId, secondPointId, + thirdPointId, typeCreation); scene->addItem(point); connect(point, &VToolBisector::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem); connect(point, &VToolBisector::RemoveTool, scene, &VMainGraphicsScene::RemoveTool); + connect(scene, &VMainGraphicsScene::NewFactor, point, &VToolBisector::SetFactor); doc->AddTool(id, point); doc->IncrementReferens(firstPointId); doc->IncrementReferens(secondPointId); @@ -117,11 +123,11 @@ void VToolBisector::Create(const qint64 _id, const QString &formula, const qint6 void VToolBisector::FullUpdateFromFile(){ QDomElement domElement = doc->elementById(QString().setNum(id)); if(domElement.isElement()){ - typeLine = domElement.attribute("typeLine", ""); - formula = domElement.attribute("length", ""); - firstPointId = domElement.attribute("firstPoint", "").toLongLong(); - basePointId = domElement.attribute("secondPoint", "").toLongLong(); - thirdPointId = domElement.attribute("thirdPoint", "").toLongLong(); + typeLine = domElement.attribute(AttrTypeLine, ""); + formula = domElement.attribute(AttrLength, ""); + firstPointId = domElement.attribute(AttrFirstPoint, "").toLongLong(); + basePointId = domElement.attribute(AttrSecondPoint, "").toLongLong(); + thirdPointId = domElement.attribute(AttrThirdPoint, "").toLongLong(); } RefreshGeometry(); } @@ -130,37 +136,42 @@ void VToolBisector::FullUpdateFromGui(int result){ if(result == QDialog::Accepted){ QDomElement domElement = doc->elementById(QString().setNum(id)); if(domElement.isElement()){ - domElement.setAttribute("name", dialogBisector->getPointName()); - domElement.setAttribute("typeLine", dialogBisector->getTypeLine()); - domElement.setAttribute("length", dialogBisector->getFormula()); - domElement.setAttribute("firstPoint", QString().setNum(dialogBisector->getFirstPointId())); - domElement.setAttribute("secondPoint", QString().setNum(dialogBisector->getSecondPointId())); - domElement.setAttribute("thirdPoint", QString().setNum(dialogBisector->getThirdPointId())); + domElement.setAttribute(AttrName, dialogBisector->getPointName()); + domElement.setAttribute(AttrTypeLine, dialogBisector->getTypeLine()); + domElement.setAttribute(AttrLength, dialogBisector->getFormula()); + domElement.setAttribute(AttrFirstPoint, QString().setNum(dialogBisector->getFirstPointId())); + domElement.setAttribute(AttrSecondPoint, QString().setNum(dialogBisector->getSecondPointId())); + domElement.setAttribute(AttrThirdPoint, QString().setNum(dialogBisector->getThirdPointId())); emit FullUpdateTree(); } } dialogBisector.clear(); } +void VToolBisector::SetFactor(qreal factor){ + VDrawTool::SetFactor(factor); + RefreshGeometry(); +} + void VToolBisector::contextMenuEvent(QGraphicsSceneContextMenuEvent *event){ ContextMenu(dialogBisector, this, event); } void VToolBisector::AddToFile(){ VPointF point = VAbstractTool::data.GetPoint(id); - QDomElement domElement = doc->createElement("point"); + QDomElement domElement = doc->createElement(TagName); - AddAttribute(domElement, "id", id); - AddAttribute(domElement, "type", "bisector"); - AddAttribute(domElement, "name", point.name()); - AddAttribute(domElement, "mx", point.mx()/PrintDPI*25.4); - AddAttribute(domElement, "my", point.my()/PrintDPI*25.4); + AddAttribute(domElement, AttrId, id); + AddAttribute(domElement, AttrType, ToolType); + AddAttribute(domElement, AttrName, point.name()); + AddAttribute(domElement, AttrMx, toMM(point.mx())); + AddAttribute(domElement, AttrMy, toMM(point.my())); - AddAttribute(domElement, "typeLine", typeLine); - AddAttribute(domElement, "length", formula); - AddAttribute(domElement, "firstPoint", firstPointId); - AddAttribute(domElement, "secondPoint", basePointId); - AddAttribute(domElement, "thirdPoint", thirdPointId); + AddAttribute(domElement, AttrTypeLine, typeLine); + AddAttribute(domElement, AttrLength, formula); + AddAttribute(domElement, AttrFirstPoint, firstPointId); + AddAttribute(domElement, AttrSecondPoint, basePointId); + AddAttribute(domElement, AttrThirdPoint, thirdPointId); AddToCalculation(domElement); } diff --git a/tools/drawTools/vtoolbisector.h b/tools/drawTools/vtoolbisector.h index 1c88f670d..6e0603f01 100644 --- a/tools/drawTools/vtoolbisector.h +++ b/tools/drawTools/vtoolbisector.h @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -27,30 +27,31 @@ class VToolBisector : public VToolLinePoint{ public: - VToolBisector(VDomDocument *doc, VContainer *data, const qint64 &id, - const QString &typeLine, const QString &formula, const qint64 &firstPointId, - const qint64 &secondPointId, const qint64 &thirdPointId, Tool::Sources typeCreation, - QGraphicsItem * parent = 0); - static QPointF FindPoint(const QPointF &firstPoint, const QPointF &secondPoint, - const QPointF &thirdPoint, const qreal& length); - virtual void setDialog(); - static void Create(QSharedPointer &dialog, VMainGraphicsScene *scene, VDomDocument *doc, - VContainer *data); - static void Create(const qint64 _id, const QString &formula, const qint64 &firstPointId, - const qint64 &secondPointId, const qint64 &thirdPointId, const QString &typeLine, - const QString &pointName, const qreal &mx, const qreal &my, VMainGraphicsScene *scene, - VDomDocument *doc, VContainer *data, const Document::Documents &parse, - Tool::Sources typeCreation); + VToolBisector(VDomDocument *doc, VContainer *data, const qint64 &id, const QString &typeLine, + const QString &formula, const qint64 &firstPointId, const qint64 &secondPointId, + const qint64 &thirdPointId, Tool::Sources typeCreation, QGraphicsItem * parent = 0); + static QPointF FindPoint(const QPointF &firstPoint, const QPointF &secondPoint, const QPointF &thirdPoint, + const qreal& length); + virtual void setDialog(); + static void Create(QSharedPointer &dialog, VMainGraphicsScene *scene, + VDomDocument *doc, VContainer *data); + static void Create(const qint64 _id, const QString &formula, const qint64 &firstPointId, + const qint64 &secondPointId, const qint64 &thirdPointId, const QString &typeLine, + const QString &pointName, const qreal &mx, const qreal &my, VMainGraphicsScene *scene, + VDomDocument *doc, VContainer *data, const Document::Documents &parse, + Tool::Sources typeCreation); + static const QString ToolType; public slots: - virtual void FullUpdateFromFile(); - virtual void FullUpdateFromGui(int result); + virtual void FullUpdateFromFile(); + virtual void FullUpdateFromGui(int result); + virtual void SetFactor(qreal factor); protected: - virtual void contextMenuEvent ( QGraphicsSceneContextMenuEvent * event ); - virtual void AddToFile(); - virtual void RemoveReferens(); + virtual void contextMenuEvent ( QGraphicsSceneContextMenuEvent * event ); + virtual void AddToFile(); + virtual void RemoveReferens(); private: - qint64 firstPointId; - qint64 thirdPointId; + qint64 firstPointId; + qint64 thirdPointId; QSharedPointer dialogBisector; }; diff --git a/tools/drawTools/vtoolendline.cpp b/tools/drawTools/vtoolendline.cpp index a118ba707..d2b58d931 100644 --- a/tools/drawTools/vtoolendline.cpp +++ b/tools/drawTools/vtoolendline.cpp @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -20,9 +20,10 @@ ****************************************************************************/ #include "vtoolendline.h" -#include -#include #include "widgets/vmaingraphicsscene.h" +#include + +const QString VToolEndLine::ToolType = QStringLiteral("endLine"); VToolEndLine::VToolEndLine(VDomDocument *doc, VContainer *data, const qint64 &id, const QString &typeLine, const QString &formula, const qreal &angle, const qint64 &basePointId, @@ -37,14 +38,12 @@ VToolEndLine::VToolEndLine(VDomDocument *doc, VContainer *data, const qint64 &id void VToolEndLine::setDialog(){ Q_ASSERT(!dialogEndLine.isNull()); - if(!dialogEndLine.isNull()){ - VPointF p = VAbstractTool::data.GetPoint(id); - dialogEndLine->setTypeLine(typeLine); - dialogEndLine->setFormula(formula); - dialogEndLine->setAngle(angle); - dialogEndLine->setBasePointId(basePointId, id); - dialogEndLine->setPointName(p.name()); - } + VPointF p = VAbstractTool::data.GetPoint(id); + dialogEndLine->setTypeLine(typeLine); + dialogEndLine->setFormula(formula); + dialogEndLine->setAngle(angle); + dialogEndLine->setBasePointId(basePointId, id); + dialogEndLine->setPointName(p.name()); } void VToolEndLine::Create(QSharedPointer &dialog, VMainGraphicsScene *scene, @@ -69,18 +68,19 @@ void VToolEndLine::Create(const qint64 _id, const QString &pointName, const QStr QString errorMsg; qreal result = cal.eval(formula, &errorMsg); if(errorMsg.isEmpty()){ - line.setLength(result*PrintDPI/25.4); + line.setLength(toPixel(result)); line.setAngle(angle); qint64 id = _id; if(typeCreation == Tool::FromGui){ id = data->AddPoint(VPointF(line.p2().x(), line.p2().y(), pointName, mx, my)); + data->AddLine(basePointId, id); } else { data->UpdatePoint(id, VPointF(line.p2().x(), line.p2().y(), pointName, mx, my)); + data->AddLine(basePointId, id); if(parse != Document::FullParse){ doc->UpdateToolData(id, data); } } - data->AddLine(basePointId, id); VDrawTool::AddRecord(id, Tool::EndLineTool, doc); if(parse == Document::FullParse){ VToolEndLine *point = new VToolEndLine(doc, data, id, typeLine, formula, angle, @@ -88,6 +88,7 @@ void VToolEndLine::Create(const qint64 _id, const QString &pointName, const QStr scene->addItem(point); connect(point, &VToolPoint::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem); connect(point, &VToolPoint::RemoveTool, scene, &VMainGraphicsScene::RemoveTool); + connect(scene, &VMainGraphicsScene::NewFactor, point, &VToolPoint::SetFactor); doc->AddTool(id, point); doc->IncrementReferens(basePointId); } @@ -97,10 +98,10 @@ void VToolEndLine::Create(const qint64 _id, const QString &pointName, const QStr void VToolEndLine::FullUpdateFromFile(){ QDomElement domElement = doc->elementById(QString().setNum(id)); if(domElement.isElement()){ - typeLine = domElement.attribute("typeLine", ""); - formula = domElement.attribute("length", ""); - basePointId = domElement.attribute("basePoint", "").toLongLong(); - angle = domElement.attribute("angle", "").toInt(); + typeLine = domElement.attribute(AttrTypeLine, ""); + formula = domElement.attribute(AttrLength, ""); + basePointId = domElement.attribute(AttrBasePoint, "").toLongLong(); + angle = domElement.attribute(AttrAngle, "").toInt(); } RefreshGeometry(); } @@ -113,11 +114,11 @@ void VToolEndLine::FullUpdateFromGui(int result){ if(result == QDialog::Accepted){ QDomElement domElement = doc->elementById(QString().setNum(id)); if(domElement.isElement()){ - domElement.setAttribute("name", dialogEndLine->getPointName()); - domElement.setAttribute("typeLine", dialogEndLine->getTypeLine()); - domElement.setAttribute("length", dialogEndLine->getFormula()); - domElement.setAttribute("angle", QString().setNum(dialogEndLine->getAngle())); - domElement.setAttribute("basePoint", QString().setNum(dialogEndLine->getBasePointId())); + domElement.setAttribute(AttrName, dialogEndLine->getPointName()); + domElement.setAttribute(AttrTypeLine, dialogEndLine->getTypeLine()); + domElement.setAttribute(AttrLength, dialogEndLine->getFormula()); + domElement.setAttribute(AttrAngle, QString().setNum(dialogEndLine->getAngle())); + domElement.setAttribute(AttrBasePoint, QString().setNum(dialogEndLine->getBasePointId())); emit FullUpdateTree(); } } @@ -126,18 +127,18 @@ void VToolEndLine::FullUpdateFromGui(int result){ void VToolEndLine::AddToFile(){ VPointF point = VAbstractTool::data.GetPoint(id); - QDomElement domElement = doc->createElement("point"); + QDomElement domElement = doc->createElement(TagName); - AddAttribute(domElement, "id", id); - AddAttribute(domElement, "type", "endLine"); - AddAttribute(domElement, "name", point.name()); - AddAttribute(domElement, "mx", toMM(point.mx())); - AddAttribute(domElement, "my", toMM(point.my())); + AddAttribute(domElement, AttrId, id); + AddAttribute(domElement, AttrType, ToolType); + AddAttribute(domElement, AttrName, point.name()); + AddAttribute(domElement, AttrMx, toMM(point.mx())); + AddAttribute(domElement, AttrMy, toMM(point.my())); - AddAttribute(domElement, "typeLine", typeLine); - AddAttribute(domElement, "length", formula); - AddAttribute(domElement, "angle", angle); - AddAttribute(domElement, "basePoint", basePointId); + AddAttribute(domElement, AttrTypeLine, typeLine); + AddAttribute(domElement, AttrLength, formula); + AddAttribute(domElement, AttrAngle, angle); + AddAttribute(domElement, AttrBasePoint, basePointId); AddToCalculation(domElement); } diff --git a/tools/drawTools/vtoolendline.h b/tools/drawTools/vtoolendline.h index 4cd89b31b..75ce3cfeb 100644 --- a/tools/drawTools/vtoolendline.h +++ b/tools/drawTools/vtoolendline.h @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -28,23 +28,23 @@ class VToolEndLine : public VToolLinePoint{ Q_OBJECT public: - VToolEndLine(VDomDocument *doc, VContainer *data, const qint64 &id, - const QString &typeLine, const QString &formula, const qreal &angle, - const qint64 &basePointId, Tool::Sources typeCreation, - QGraphicsItem * parent = 0); + VToolEndLine(VDomDocument *doc, VContainer *data, const qint64 &id, const QString &typeLine, + const QString &formula, const qreal &angle, const qint64 &basePointId, + Tool::Sources typeCreation, QGraphicsItem * parent = 0); virtual void setDialog(); - static void Create(QSharedPointer &dialog, VMainGraphicsScene *scene, VDomDocument *doc, - VContainer *data); - static void Create(const qint64 _id, const QString &pointName, const QString &typeLine, - const QString &formula, const qreal &angle, const qint64 &basePointId, const qreal &mx, const qreal &my, - VMainGraphicsScene *scene, VDomDocument *doc, VContainer *data, - const Document::Documents &parse, Tool::Sources typeCreation); + static void Create(QSharedPointer &dialog, VMainGraphicsScene *scene, VDomDocument *doc, + VContainer *data); + static void Create(const qint64 _id, const QString &pointName, const QString &typeLine, + const QString &formula, const qreal &angle, const qint64 &basePointId, const qreal &mx, + const qreal &my, VMainGraphicsScene *scene, VDomDocument *doc, VContainer *data, + const Document::Documents &parse, Tool::Sources typeCreation); + static const QString ToolType; public slots: - virtual void FullUpdateFromFile(); - virtual void FullUpdateFromGui(int result); + virtual void FullUpdateFromFile(); + virtual void FullUpdateFromGui(int result); protected: - virtual void contextMenuEvent ( QGraphicsSceneContextMenuEvent * event ); - virtual void AddToFile(); + virtual void contextMenuEvent ( QGraphicsSceneContextMenuEvent * event ); + virtual void AddToFile(); private: QSharedPointer dialogEndLine; }; diff --git a/tools/drawTools/vtoolheight.cpp b/tools/drawTools/vtoolheight.cpp new file mode 100644 index 000000000..0ab9ff998 --- /dev/null +++ b/tools/drawTools/vtoolheight.cpp @@ -0,0 +1,140 @@ +#include "vtoolheight.h" + +const QString VToolHeight::ToolType = QStringLiteral("height"); + +VToolHeight::VToolHeight(VDomDocument *doc, VContainer *data, const qint64 &id, const QString &typeLine, + const qint64 &basePointId, const qint64 &p1LineId, const qint64 &p2LineId, + Tool::Sources typeCreation, QGraphicsItem * parent) + :VToolLinePoint(doc, data, id, typeLine, QString(), basePointId, 0, parent), + dialogHeight(QSharedPointer()), p1LineId(p1LineId), p2LineId(p2LineId){ + ignoreFullUpdate = true; + if(typeCreation == Tool::FromGui){ + AddToFile(); + } +} + +void VToolHeight::setDialog(){ + Q_ASSERT(!dialogHeight.isNull()); + VPointF p = VAbstractTool::data.GetPoint(id); + dialogHeight->setTypeLine(typeLine); + dialogHeight->setBasePointId(basePointId, id); + dialogHeight->setP1LineId(p1LineId, id); + dialogHeight->setP2LineId(p2LineId, id); + dialogHeight->setPointName(p.name()); +} + +void VToolHeight::Create(QSharedPointer &dialog, VMainGraphicsScene *scene, VDomDocument *doc, + VContainer *data){ + disconnect(doc, &VDomDocument::FullUpdateFromFile, dialog.data(), &DialogHeight::UpdateList); + QString pointName = dialog->getPointName(); + QString typeLine = dialog->getTypeLine(); + qint64 basePointId = dialog->getBasePointId(); + qint64 p1LineId = dialog->getP1LineId(); + qint64 p2LineId = dialog->getP2LineId(); + Create(0, pointName, typeLine, basePointId, p1LineId, p2LineId, 5, 10, scene, doc, data, + Document::FullParse, Tool::FromGui); +} + +void VToolHeight::Create(const qint64 _id, const QString &pointName, const QString &typeLine, + const qint64 &basePointId, const qint64 &p1LineId, const qint64 &p2LineId, + const qreal &mx, const qreal &my, VMainGraphicsScene *scene, VDomDocument *doc, + VContainer *data, const Document::Documents &parse, Tool::Sources typeCreation){ + VPointF basePoint = data->GetPoint(basePointId); + VPointF p1Line = data->GetPoint(p1LineId); + VPointF p2Line = data->GetPoint(p2LineId); + + QPointF pHeight = FindPoint(QLineF(p1Line.toQPointF(), p2Line.toQPointF()), basePoint.toQPointF()); + qint64 id = _id; + if(typeCreation == Tool::FromGui){ + id = data->AddPoint(VPointF(pHeight.x(), pHeight.y(), pointName, mx, my)); + data->AddLine(basePointId, id); + data->AddLine(p1LineId, id); + data->AddLine(p2LineId, id); + } else { + data->UpdatePoint(id, VPointF(pHeight.x(), pHeight.y(), pointName, mx, my)); + data->AddLine(basePointId, id); + data->AddLine(p1LineId, id); + data->AddLine(p2LineId, id); + if(parse != Document::FullParse){ + doc->UpdateToolData(id, data); + } + } + VDrawTool::AddRecord(id, Tool::Height, doc); + if(parse == Document::FullParse){ + VToolHeight *point = new VToolHeight(doc, data, id, typeLine, basePointId, p1LineId, p2LineId, + typeCreation); + scene->addItem(point); + connect(point, &VToolPoint::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem); + connect(point, &VToolPoint::RemoveTool, scene, &VMainGraphicsScene::RemoveTool); + connect(scene, &VMainGraphicsScene::NewFactor, point, &VToolPoint::SetFactor); + doc->AddTool(id, point); + doc->IncrementReferens(basePointId); + doc->IncrementReferens(p1LineId); + doc->IncrementReferens(p2LineId); + } +} + +QPointF VToolHeight::FindPoint(const QLineF &line, const QPointF &point){ + qreal a = 0, b = 0, c = 0; + LineCoefficients(line, &a, &b, &c); + qreal x = point.x() + a; + qreal y = b + point.y(); + QLineF l (point, QPointF(x, y)); + QPointF p; + QLineF::IntersectType intersect = line.intersect(l, &p); + if(intersect == QLineF::UnboundedIntersection || intersect == QLineF::BoundedIntersection){ + return p; + } else { + return QPointF(); + } +} + +void VToolHeight::FullUpdateFromFile(){ + QDomElement domElement = doc->elementById(QString().setNum(id)); + if(domElement.isElement()){ + typeLine = domElement.attribute(AttrTypeLine, ""); + basePointId = domElement.attribute(AttrBasePoint, "").toLongLong(); + p1LineId = domElement.attribute(AttrP1Line, "").toLongLong(); + p2LineId = domElement.attribute(AttrP2Line, "").toLongLong(); + } + RefreshGeometry(); + +} + +void VToolHeight::FullUpdateFromGui(int result){ + if(result == QDialog::Accepted){ + QDomElement domElement = doc->elementById(QString().setNum(id)); + if(domElement.isElement()){ + domElement.setAttribute(AttrName, dialogHeight->getPointName()); + domElement.setAttribute(AttrTypeLine, dialogHeight->getTypeLine()); + domElement.setAttribute(AttrBasePoint, QString().setNum(dialogHeight->getBasePointId())); + domElement.setAttribute(AttrP1Line, QString().setNum(dialogHeight->getP1LineId())); + domElement.setAttribute(AttrP2Line, QString().setNum(dialogHeight->getP2LineId())); + emit FullUpdateTree(); + } + } + dialogHeight.clear(); +} + +void VToolHeight::contextMenuEvent(QGraphicsSceneContextMenuEvent *event){ + ContextMenu(dialogHeight, this, event); +} + +void VToolHeight::AddToFile(){ + VPointF point = VAbstractTool::data.GetPoint(id); + QDomElement domElement = doc->createElement(TagName); + + AddAttribute(domElement, AttrId, id); + AddAttribute(domElement, AttrType, ToolType); + AddAttribute(domElement, AttrName, point.name()); + AddAttribute(domElement, AttrMx, toMM(point.mx())); + AddAttribute(domElement, AttrMy, toMM(point.my())); + + AddAttribute(domElement, AttrTypeLine, typeLine); + AddAttribute(domElement, AttrBasePoint, basePointId); + AddAttribute(domElement, AttrP1Line, p1LineId); + AddAttribute(domElement, AttrP2Line, p2LineId); + + AddToCalculation(domElement); + +} diff --git a/tools/drawTools/vtoolheight.h b/tools/drawTools/vtoolheight.h new file mode 100644 index 000000000..06158aca4 --- /dev/null +++ b/tools/drawTools/vtoolheight.h @@ -0,0 +1,55 @@ +/**************************************************************************** + ** + ** Copyright (C) 2013 Valentina project All Rights Reserved. + ** + ** This file is part of Valentina. + ** + ** Tox 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 VTOOLHEIGHT_H +#define VTOOLHEIGHT_H + +#include "vtoollinepoint.h" +#include "dialogs/dialogheight.h" + +class VToolHeight: public VToolLinePoint{ + Q_OBJECT +public: + VToolHeight(VDomDocument *doc, VContainer *data, const qint64 &id, const QString &typeLine, + const qint64 &basePointId, const qint64 &p1LineId, const qint64 &p2LineId, + Tool::Sources typeCreation, QGraphicsItem * parent = 0); + virtual void setDialog(); + static void Create(QSharedPointer &dialog, VMainGraphicsScene *scene, + VDomDocument *doc, VContainer *data); + static void Create(const qint64 _id, const QString &pointName, const QString &typeLine, + const qint64 &basePointId, const qint64 &p1LineId, const qint64 &p2LineId, + const qreal &mx, const qreal &my, VMainGraphicsScene *scene, VDomDocument *doc, + VContainer *data, const Document::Documents &parse, Tool::Sources typeCreation); + static QPointF FindPoint(const QLineF &line, const QPointF &point); + static const QString ToolType; +public slots: + virtual void FullUpdateFromFile(); + virtual void FullUpdateFromGui(int result); +protected: + virtual void contextMenuEvent ( QGraphicsSceneContextMenuEvent * event ); + virtual void AddToFile(); +private: + QSharedPointer dialogHeight; + qint64 p1LineId; + qint64 p2LineId; +}; + +#endif // VTOOLHEIGHT_H diff --git a/tools/drawTools/vtoolline.cpp b/tools/drawTools/vtoolline.cpp index fc5cc7577..98d24fb94 100644 --- a/tools/drawTools/vtoolline.cpp +++ b/tools/drawTools/vtoolline.cpp @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -20,12 +20,14 @@ ****************************************************************************/ #include "vtoolline.h" -#include + +const QString VToolLine::TagName = QStringLiteral("line"); VToolLine::VToolLine(VDomDocument *doc, VContainer *data, qint64 id, qint64 firstPoint, qint64 secondPoint, Tool::Sources typeCreation, QGraphicsItem *parent):VDrawTool(doc, data, id), QGraphicsLineItem(parent), firstPoint(firstPoint), secondPoint(secondPoint), dialogLine(QSharedPointer()){ + ignoreFullUpdate = true; //Лінія VPointF first = data->GetPoint(firstPoint); VPointF second = data->GetPoint(secondPoint); @@ -33,6 +35,7 @@ VToolLine::VToolLine(VDomDocument *doc, VContainer *data, qint64 id, qint64 firs this->setFlag(QGraphicsItem::ItemStacksBehindParent, true); this->setFlag(QGraphicsItem::ItemIsSelectable, true); this->setAcceptHoverEvents(true); + this->setPen(QPen(Qt::black, widthHairLine/factor)); if(typeCreation == Tool::FromGui){ AddToFile(); @@ -51,24 +54,31 @@ void VToolLine::Create(QSharedPointer &dialog, VMainGraphicsScene *s Create(0, firstPoint, secondPoint, scene, doc, data, Document::FullParse, Tool::FromGui); } -void VToolLine::Create(const qint64 &id, const qint64 &firstPoint, const qint64 &secondPoint, +void VToolLine::Create(const qint64 &_id, const qint64 &firstPoint, const qint64 &secondPoint, VMainGraphicsScene *scene, VDomDocument *doc, VContainer *data, const Document::Documents &parse, Tool::Sources typeCreation){ - Q_CHECK_PTR(scene); - Q_CHECK_PTR(doc); - Q_CHECK_PTR(data); - data->AddLine(firstPoint, secondPoint); - if(parse != Document::FullParse){ - doc->UpdateToolData(id, data); + Q_ASSERT(scene != 0); + Q_ASSERT(doc != 0); + Q_ASSERT(data != 0); + qint64 id = _id; + if(typeCreation == Tool::FromGui){ + id = data->getNextId(); + data->AddLine(firstPoint, secondPoint); + } else { + data->UpdateId(id); + data->AddLine(firstPoint, secondPoint); + if(parse != Document::FullParse){ + doc->UpdateToolData(id, data); + } } VDrawTool::AddRecord(id, Tool::LineTool, doc); if(parse == Document::FullParse){ - qint64 id = data->getNextId(); VToolLine *line = new VToolLine(doc, data, id, firstPoint, secondPoint, typeCreation); - Q_CHECK_PTR(line); + Q_ASSERT(line != 0); scene->addItem(line); connect(line, &VToolLine::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem); connect(line, &VToolLine::RemoveTool, scene, &VMainGraphicsScene::RemoveTool); + connect(scene, &VMainGraphicsScene::NewFactor, line, &VToolLine::SetFactor); doc->AddTool(id, line); doc->IncrementReferens(firstPoint); doc->IncrementReferens(secondPoint); @@ -76,22 +86,15 @@ void VToolLine::Create(const qint64 &id, const qint64 &firstPoint, const qint64 } void VToolLine::FullUpdateFromFile(){ - QDomElement domElement = doc->elementById(QString().setNum(id)); - if(domElement.isElement()){ - firstPoint = domElement.attribute("firstPoint", "").toLongLong(); - secondPoint = domElement.attribute("secondPoint", "").toLongLong(); - } - VPointF first = VAbstractTool::data.GetPoint(firstPoint); - VPointF second = VAbstractTool::data.GetPoint(secondPoint); - this->setLine(QLineF(first.toQPointF(), second.toQPointF())); + RefreshGeometry(); } void VToolLine::FullUpdateFromGui(int result){ if(result == QDialog::Accepted){ QDomElement domElement = doc->elementById(QString().setNum(id)); if(domElement.isElement()){ - domElement.setAttribute("firstPoint", QString().setNum(dialogLine->getFirstPoint())); - domElement.setAttribute("secondPoint", QString().setNum(dialogLine->getSecondPoint())); + domElement.setAttribute(AttrFirstPoint, QString().setNum(dialogLine->getFirstPoint())); + domElement.setAttribute(AttrSecondPoint, QString().setNum(dialogLine->getSecondPoint())); emit FullUpdateTree(); } } @@ -99,51 +102,49 @@ void VToolLine::FullUpdateFromGui(int result){ } void VToolLine::ShowTool(qint64 id, Qt::GlobalColor color, bool enable){ - if(id == this->id){ - if(enable == false){ - this->setPen(QPen(baseColor, widthHairLine)); - currentColor = baseColor; - } else { - this->setPen(QPen(color, widthHairLine)); - currentColor = color; - } - } + ShowItem(this, id, color, enable); +} + +void VToolLine::SetFactor(qreal factor){ + VDrawTool::SetFactor(factor); + RefreshGeometry(); } void VToolLine::ChangedActivDraw(const QString newName){ + bool selectable = false; if(nameActivDraw == newName){ - this->setPen(QPen(Qt::black, widthHairLine)); - this->setAcceptHoverEvents (true); - VDrawTool::ChangedActivDraw(newName); + selectable = true; + currentColor = Qt::black; } else { - this->setPen(QPen(Qt::gray, widthHairLine)); - this->setAcceptHoverEvents (false); - VDrawTool::ChangedActivDraw(newName); + selectable = false; + currentColor = Qt::gray; } + this->setPen(QPen(currentColor, widthHairLine/factor)); + this->setAcceptHoverEvents (selectable); + VDrawTool::ChangedActivDraw(newName); } void VToolLine::contextMenuEvent(QGraphicsSceneContextMenuEvent *event){ ContextMenu(dialogLine, this, event); } - void VToolLine::AddToFile(){ - QDomElement domElement = doc->createElement("line"); - AddAttribute(domElement, "id", id); - AddAttribute(domElement, "firstPoint", firstPoint); - AddAttribute(domElement, "secondPoint", secondPoint); + QDomElement domElement = doc->createElement(TagName); + AddAttribute(domElement, AttrId, id); + AddAttribute(domElement, AttrFirstPoint, firstPoint); + AddAttribute(domElement, AttrSecondPoint, secondPoint); AddToCalculation(domElement); } void VToolLine::hoverMoveEvent(QGraphicsSceneHoverEvent *event){ Q_UNUSED(event); - this->setPen(QPen(currentColor, widthMainLine)); + this->setPen(QPen(currentColor, widthMainLine/factor)); } void VToolLine::hoverLeaveEvent(QGraphicsSceneHoverEvent *event){ Q_UNUSED(event); - this->setPen(QPen(currentColor, widthHairLine)); + this->setPen(QPen(currentColor, widthHairLine/factor)); } void VToolLine::RemoveReferens(){ @@ -151,3 +152,15 @@ void VToolLine::RemoveReferens(){ doc->DecrementReferens(secondPoint); } +void VToolLine::RefreshGeometry(){ + QDomElement domElement = doc->elementById(QString().setNum(id)); + if(domElement.isElement()){ + firstPoint = domElement.attribute(AttrFirstPoint, "").toLongLong(); + secondPoint = domElement.attribute(AttrSecondPoint, "").toLongLong(); + } + VPointF first = VAbstractTool::data.GetPoint(firstPoint); + VPointF second = VAbstractTool::data.GetPoint(secondPoint); + this->setLine(QLineF(first.toQPointF(), second.toQPointF())); + this->setPen(QPen(currentColor, widthHairLine/factor)); +} + diff --git a/tools/drawTools/vtoolline.h b/tools/drawTools/vtoolline.h index 799f09c8b..c88e6fb21 100644 --- a/tools/drawTools/vtoolline.h +++ b/tools/drawTools/vtoolline.h @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -29,29 +29,32 @@ class VToolLine: public VDrawTool, public QGraphicsLineItem{ Q_OBJECT public: - VToolLine(VDomDocument *doc, VContainer *data, qint64 id, qint64 firstPoint, - qint64 secondPoint, Tool::Sources typeCreation, QGraphicsItem * parent = 0); + VToolLine(VDomDocument *doc, VContainer *data, qint64 id, qint64 firstPoint, + qint64 secondPoint, Tool::Sources typeCreation, QGraphicsItem * parent = 0); virtual void setDialog(); - static void Create(QSharedPointer &dialog, VMainGraphicsScene *scene, VDomDocument *doc, - VContainer *data); - static void Create(const qint64 &id, const qint64 &firstPoint, const qint64 &secondPoint, - VMainGraphicsScene *scene, VDomDocument *doc, VContainer *data, - const Document::Documents &parse, Tool::Sources typeCreation); + static void Create(QSharedPointer &dialog, VMainGraphicsScene *scene, VDomDocument *doc, + VContainer *data); + static void Create(const qint64 &_id, const qint64 &firstPoint, const qint64 &secondPoint, + VMainGraphicsScene *scene, VDomDocument *doc, VContainer *data, + const Document::Documents &parse, Tool::Sources typeCreation); + static const QString TagName; public slots: - virtual void FullUpdateFromFile(); - virtual void ChangedActivDraw(const QString newName); - virtual void FullUpdateFromGui(int result); - virtual void ShowTool(qint64 id, Qt::GlobalColor color, bool enable); + virtual void FullUpdateFromFile(); + virtual void ChangedActivDraw(const QString newName); + virtual void FullUpdateFromGui(int result); + virtual void ShowTool(qint64 id, Qt::GlobalColor color, bool enable); + virtual void SetFactor(qreal factor); protected: - virtual void contextMenuEvent ( QGraphicsSceneContextMenuEvent * event ); - virtual void AddToFile(); - virtual void hoverMoveEvent ( QGraphicsSceneHoverEvent * event ); - virtual void hoverLeaveEvent ( QGraphicsSceneHoverEvent * event ); - virtual void RemoveReferens(); + virtual void contextMenuEvent ( QGraphicsSceneContextMenuEvent * event ); + virtual void AddToFile(); + virtual void hoverMoveEvent ( QGraphicsSceneHoverEvent * event ); + virtual void hoverLeaveEvent ( QGraphicsSceneHoverEvent * event ); + virtual void RemoveReferens(); private: - qint64 firstPoint; - qint64 secondPoint; + qint64 firstPoint; + qint64 secondPoint; QSharedPointer dialogLine; + void RefreshGeometry(); }; #endif // VTOOLLINE_H diff --git a/tools/drawTools/vtoollineintersect.cpp b/tools/drawTools/vtoollineintersect.cpp index e1a0abbd0..b0eb6696a 100644 --- a/tools/drawTools/vtoollineintersect.cpp +++ b/tools/drawTools/vtoollineintersect.cpp @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -20,13 +20,16 @@ ****************************************************************************/ #include "vtoollineintersect.h" -#include + +const QString VToolLineIntersect::ToolType = QStringLiteral("lineIntersect"); VToolLineIntersect::VToolLineIntersect(VDomDocument *doc, VContainer *data, const qint64 &id, const qint64 &p1Line1, const qint64 &p2Line1, const qint64 &p1Line2, - const qint64 &p2Line2, Tool::Sources typeCreation, QGraphicsItem *parent): + const qint64 &p2Line2, Tool::Sources typeCreation, + QGraphicsItem *parent): VToolPoint(doc, data, id, parent), p1Line1(p1Line1), p2Line1(p2Line1), p1Line2(p1Line2), p2Line2(p2Line2), dialogLineIntersect(QSharedPointer()){ + ignoreFullUpdate = true; if(typeCreation == Tool::FromGui){ AddToFile(); } @@ -57,8 +60,9 @@ void VToolLineIntersect::Create(QSharedPointer &dialog, VMa void VToolLineIntersect::Create(const qint64 _id, const qint64 &p1Line1Id, const qint64 &p2Line1Id, const qint64 &p1Line2Id, const qint64 &p2Line2Id, const QString &pointName, - const qreal &mx, const qreal &my, VMainGraphicsScene *scene, VDomDocument *doc, - VContainer *data, const Document::Documents &parse, Tool::Sources typeCreation){ + const qreal &mx, const qreal &my, VMainGraphicsScene *scene, + VDomDocument *doc, VContainer *data, const Document::Documents &parse, + Tool::Sources typeCreation){ VPointF p1Line1 = data->GetPoint(p1Line1Id); VPointF p2Line1 = data->GetPoint(p2Line1Id); VPointF p1Line2 = data->GetPoint(p1Line2Id); @@ -72,16 +76,20 @@ void VToolLineIntersect::Create(const qint64 _id, const qint64 &p1Line1Id, const qint64 id = _id; if(typeCreation == Tool::FromGui){ id = data->AddPoint(VPointF(fPoint.x(), fPoint.y(), pointName, mx, my)); + data->AddLine(p1Line1Id, id); + data->AddLine(id, p2Line1Id); + data->AddLine(p1Line2Id, id); + data->AddLine(id, p2Line2Id); } else { data->UpdatePoint(id, VPointF(fPoint.x(), fPoint.y(), pointName, mx, my)); + data->AddLine(p1Line1Id, id); + data->AddLine(id, p2Line1Id); + data->AddLine(p1Line2Id, id); + data->AddLine(id, p2Line2Id); if(parse != Document::FullParse){ doc->UpdateToolData(id, data); } } - data->AddLine(p1Line1Id, id); - data->AddLine(id, p2Line1Id); - data->AddLine(p1Line2Id, id); - data->AddLine(id, p2Line2Id); VDrawTool::AddRecord(id, Tool::LineIntersectTool, doc); if(parse == Document::FullParse){ VToolLineIntersect *point = new VToolLineIntersect(doc, data, id, p1Line1Id, @@ -90,6 +98,7 @@ void VToolLineIntersect::Create(const qint64 _id, const qint64 &p1Line1Id, const scene->addItem(point); connect(point, &VToolLineIntersect::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem); connect(point, &VToolLineIntersect::RemoveTool, scene, &VMainGraphicsScene::RemoveTool); + connect(scene, &VMainGraphicsScene::NewFactor, point, &VToolLineIntersect::SetFactor); doc->AddTool(id, point); doc->IncrementReferens(p1Line1Id); doc->IncrementReferens(p2Line1Id); @@ -102,10 +111,10 @@ void VToolLineIntersect::Create(const qint64 _id, const qint64 &p1Line1Id, const void VToolLineIntersect::FullUpdateFromFile(){ QDomElement domElement = doc->elementById(QString().setNum(id)); if(domElement.isElement()){ - p1Line1 = domElement.attribute("p1Line1", "").toLongLong(); - p2Line1 = domElement.attribute("p2Line1", "").toLongLong(); - p1Line2 = domElement.attribute("p1Line2", "").toLongLong(); - p2Line2 = domElement.attribute("p2Line2", "").toLongLong(); + p1Line1 = domElement.attribute(AttrP1Line1, "").toLongLong(); + p2Line1 = domElement.attribute(AttrP2Line1, "").toLongLong(); + p1Line2 = domElement.attribute(AttrP1Line2, "").toLongLong(); + p2Line2 = domElement.attribute(AttrP2Line2, "").toLongLong(); } RefreshPointGeometry(VAbstractTool::data.GetPoint(id)); } @@ -114,35 +123,40 @@ void VToolLineIntersect::FullUpdateFromGui(int result){ if(result == QDialog::Accepted){ QDomElement domElement = doc->elementById(QString().setNum(id)); if(domElement.isElement()){ - domElement.setAttribute("name", dialogLineIntersect->getPointName()); - domElement.setAttribute("p1Line1", QString().setNum(dialogLineIntersect->getP1Line1())); - domElement.setAttribute("p2Line1", QString().setNum(dialogLineIntersect->getP2Line1())); - domElement.setAttribute("p1Line2", QString().setNum(dialogLineIntersect->getP1Line2())); - domElement.setAttribute("p2Line2", QString().setNum(dialogLineIntersect->getP2Line2())); + domElement.setAttribute(AttrName, dialogLineIntersect->getPointName()); + domElement.setAttribute(AttrP1Line1, QString().setNum(dialogLineIntersect->getP1Line1())); + domElement.setAttribute(AttrP2Line1, QString().setNum(dialogLineIntersect->getP2Line1())); + domElement.setAttribute(AttrP1Line2, QString().setNum(dialogLineIntersect->getP1Line2())); + domElement.setAttribute(AttrP2Line2, QString().setNum(dialogLineIntersect->getP2Line2())); emit FullUpdateTree(); } } dialogLineIntersect.clear(); } +void VToolLineIntersect::SetFactor(qreal factor){ + VDrawTool::SetFactor(factor); + RefreshPointGeometry(VAbstractTool::data.GetPoint(id)); +} + void VToolLineIntersect::contextMenuEvent(QGraphicsSceneContextMenuEvent *event){ ContextMenu(dialogLineIntersect, this, event); } void VToolLineIntersect::AddToFile(){ VPointF point = VAbstractTool::data.GetPoint(id); - QDomElement domElement = doc->createElement("point"); + QDomElement domElement = doc->createElement(TagName); - AddAttribute(domElement, "id", id); - AddAttribute(domElement, "type", "lineIntersect"); - AddAttribute(domElement, "name", point.name()); - AddAttribute(domElement, "mx", point.mx()/PrintDPI*25.4); - AddAttribute(domElement, "my", point.my()/PrintDPI*25.4); + AddAttribute(domElement, AttrId, id); + AddAttribute(domElement, AttrType, ToolType); + AddAttribute(domElement, AttrName, point.name()); + AddAttribute(domElement, AttrMx, toMM(point.mx())); + AddAttribute(domElement, AttrMy, toMM(point.my())); - AddAttribute(domElement, "p1Line1", p1Line1); - AddAttribute(domElement, "p2Line1", p2Line1); - AddAttribute(domElement, "p1Line2", p1Line2); - AddAttribute(domElement, "p2Line2", p2Line2); + AddAttribute(domElement, AttrP1Line1, p1Line1); + AddAttribute(domElement, AttrP2Line1, p2Line1); + AddAttribute(domElement, AttrP1Line2, p1Line2); + AddAttribute(domElement, AttrP2Line2, p2Line2); AddToCalculation(domElement); } diff --git a/tools/drawTools/vtoollineintersect.h b/tools/drawTools/vtoollineintersect.h index 1c5b36cfd..2cea55c28 100644 --- a/tools/drawTools/vtoollineintersect.h +++ b/tools/drawTools/vtoollineintersect.h @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -28,34 +28,30 @@ class VToolLineIntersect:public VToolPoint{ Q_OBJECT public: - VToolLineIntersect(VDomDocument *doc, VContainer *data, - const qint64 &id, - const qint64 &p1Line1, - const qint64 &p2Line1, const qint64 &p1Line2, - const qint64 &p2Line2, Tool::Sources typeCreation, - QGraphicsItem * parent = 0); - virtual void setDialog(); - static void Create(QSharedPointer &dialog, - VMainGraphicsScene *scene, VDomDocument *doc, - VContainer *data); - static void Create(const qint64 _id, const qint64 &p1Line1Id, - const qint64 &p2Line1Id, const qint64 &p1Line2Id, - const qint64 &p2Line2Id, const QString &pointName, - const qreal &mx, const qreal &my, VMainGraphicsScene *scene, - VDomDocument *doc, VContainer *data, - const Document::Documents &parse, Tool::Sources typeCreation); + VToolLineIntersect(VDomDocument *doc, VContainer *data, const qint64 &id, const qint64 &p1Line1, + const qint64 &p2Line1, const qint64 &p1Line2, const qint64 &p2Line2, + Tool::Sources typeCreation, QGraphicsItem * parent = 0); + virtual void setDialog(); + static void Create(QSharedPointer &dialog, VMainGraphicsScene *scene, VDomDocument *doc, + VContainer *data); + static void Create(const qint64 _id, const qint64 &p1Line1Id, const qint64 &p2Line1Id, const qint64 &p1Line2Id, + const qint64 &p2Line2Id, const QString &pointName, const qreal &mx, const qreal &my, + VMainGraphicsScene *scene, VDomDocument *doc, VContainer *data, + const Document::Documents &parse, Tool::Sources typeCreation); + static const QString ToolType; public slots: - virtual void FullUpdateFromFile(); - virtual void FullUpdateFromGui(int result); + virtual void FullUpdateFromFile(); + virtual void FullUpdateFromGui(int result); + virtual void SetFactor(qreal factor); protected: - virtual void contextMenuEvent ( QGraphicsSceneContextMenuEvent * event ); - virtual void AddToFile(); - virtual void RemoveReferens(); + virtual void contextMenuEvent ( QGraphicsSceneContextMenuEvent * event ); + virtual void AddToFile(); + virtual void RemoveReferens(); private: - qint64 p1Line1; - qint64 p2Line1; - qint64 p1Line2; - qint64 p2Line2; + qint64 p1Line1; + qint64 p2Line1; + qint64 p1Line2; + qint64 p2Line2; QSharedPointer dialogLineIntersect; }; diff --git a/tools/drawTools/vtoollinepoint.cpp b/tools/drawTools/vtoollinepoint.cpp index b7536c1ae..3c5c11785 100644 --- a/tools/drawTools/vtoollinepoint.cpp +++ b/tools/drawTools/vtoollinepoint.cpp @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -30,9 +30,9 @@ VToolLinePoint::VToolLinePoint(VDomDocument *doc, VContainer *data, const qint64 QPointF point1 = data->GetPoint(basePointId).toQPointF(); QPointF point2 = data->GetPoint(id).toQPointF(); mainLine = new QGraphicsLineItem(QLineF(point1 - point2, QPointF()), this); - mainLine->setPen(QPen(Qt::black, widthHairLine)); + mainLine->setPen(QPen(Qt::black, widthHairLine/factor)); mainLine->setFlag(QGraphicsItem::ItemStacksBehindParent, true); - if(typeLine == "none"){ + if(typeLine == TypeLineNone){ mainLine->setVisible(false); } else { mainLine->setVisible(true); @@ -41,26 +41,28 @@ VToolLinePoint::VToolLinePoint(VDomDocument *doc, VContainer *data, const qint64 void VToolLinePoint::ChangedActivDraw(const QString newName){ if(nameActivDraw == newName){ - mainLine->setPen(QPen(Qt::black, widthHairLine)); - VToolPoint::ChangedActivDraw(newName); + currentColor = Qt::black; } else { - mainLine->setPen(QPen(Qt::gray, widthHairLine)); - VToolPoint::ChangedActivDraw(newName); + currentColor = Qt::gray; } + mainLine->setPen(QPen(currentColor, widthHairLine/factor)); + VToolPoint::ChangedActivDraw(newName); } void VToolLinePoint::RefreshGeometry(){ + mainLine->setPen(QPen(currentColor, widthHairLine/factor)); VToolPoint::RefreshPointGeometry(VDrawTool::data.GetPoint(id)); QPointF point = VDrawTool::data.GetPoint(id).toQPointF(); QPointF basePoint = VDrawTool::data.GetPoint(basePointId).toQPointF(); mainLine->setLine(QLineF(basePoint - point, QPointF())); - if(typeLine == "none"){ + if(typeLine == TypeLineNone){ mainLine->setVisible(false); } else { mainLine->setVisible(true); } } -void VToolLinePoint::RemoveReferens(){ - doc->DecrementReferens(basePointId); +void VToolLinePoint::SetFactor(qreal factor){ + VDrawTool::SetFactor(factor); + RefreshGeometry(); } diff --git a/tools/drawTools/vtoollinepoint.h b/tools/drawTools/vtoollinepoint.h index a298bc5f1..b349fac6c 100644 --- a/tools/drawTools/vtoollinepoint.h +++ b/tools/drawTools/vtoollinepoint.h @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -27,11 +27,12 @@ class VToolLinePoint : public VToolPoint{ Q_OBJECT public: - VToolLinePoint(VDomDocument *doc, VContainer *data, const qint64 &id, - const QString &typeLine, const QString &formula, - const qint64 &basePointId, const qreal &angle, QGraphicsItem * parent = 0); + VToolLinePoint(VDomDocument *doc, VContainer *data, const qint64 &id, const QString &typeLine, + const QString &formula, const qint64 &basePointId, const qreal &angle, + QGraphicsItem * parent = 0); public slots: virtual void ChangedActivDraw(const QString newName); + virtual void SetFactor(qreal factor); protected: QString typeLine; QString formula; @@ -39,7 +40,7 @@ protected: qint64 basePointId; QGraphicsLineItem *mainLine; virtual void RefreshGeometry(); - virtual void RemoveReferens(); + virtual void RemoveReferens() {doc->DecrementReferens(basePointId);} private: Q_DISABLE_COPY(VToolLinePoint) }; diff --git a/tools/drawTools/vtoolnormal.cpp b/tools/drawTools/vtoolnormal.cpp index 2fd033e3c..0dd4fd809 100644 --- a/tools/drawTools/vtoolnormal.cpp +++ b/tools/drawTools/vtoolnormal.cpp @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -20,9 +20,11 @@ ****************************************************************************/ #include "vtoolnormal.h" +#include -VToolNormal::VToolNormal(VDomDocument *doc, VContainer *data, const qint64 &id, - const QString &typeLine, +const QString VToolNormal::ToolType = QStringLiteral("normal"); + +VToolNormal::VToolNormal(VDomDocument *doc, VContainer *data, const qint64 &id, const QString &typeLine, const QString &formula, const qreal &angle, const qint64 &firstPointId, const qint64 &secondPointId, Tool::Sources typeCreation, QGraphicsItem *parent): VToolLinePoint(doc, data, id, typeLine, formula, firstPointId, angle, parent), @@ -62,7 +64,8 @@ void VToolNormal::Create(QSharedPointer &dialog, VMainGraphicsScen void VToolNormal::Create(const qint64 _id, const QString &formula, const qint64 &firstPointId, const qint64 &secondPointId, const QString typeLine, const QString pointName, const qreal angle, const qreal &mx, const qreal &my, VMainGraphicsScene *scene, - VDomDocument *doc, VContainer *data, const Document::Documents &parse, Tool::Sources typeCreation){ + VDomDocument *doc, VContainer *data, const Document::Documents &parse, + Tool::Sources typeCreation){ VPointF firstPoint = data->GetPoint(firstPointId); VPointF secondPoint = data->GetPoint(secondPointId); Calculator cal(data); @@ -70,17 +73,18 @@ void VToolNormal::Create(const qint64 _id, const QString &formula, const qint64 qreal result = cal.eval(formula, &errorMsg); if(errorMsg.isEmpty()){ QPointF fPoint = VToolNormal::FindPoint(firstPoint.toQPointF(), secondPoint.toQPointF(), - result*PrintDPI/25.4, angle); + toPixel(result), angle); qint64 id = _id; if(typeCreation == Tool::FromGui){ id = data->AddPoint(VPointF(fPoint.x(), fPoint.y(), pointName, mx, my)); + data->AddLine(firstPointId, id); } else { data->UpdatePoint(id, VPointF(fPoint.x(), fPoint.y(), pointName, mx, my)); + data->AddLine(firstPointId, id); if(parse != Document::FullParse){ doc->UpdateToolData(id, data); } } - data->AddLine(firstPointId, id); VDrawTool::AddRecord(id, Tool::NormalTool, doc); if(parse == Document::FullParse){ VToolNormal *point = new VToolNormal(doc, data, id, typeLine, formula, angle, @@ -88,6 +92,7 @@ void VToolNormal::Create(const qint64 _id, const QString &formula, const qint64 scene->addItem(point); connect(point, &VToolNormal::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem); connect(point, &VToolNormal::RemoveTool, scene, &VMainGraphicsScene::RemoveTool); + connect(scene, &VMainGraphicsScene::NewFactor, point, &VToolNormal::SetFactor); doc->AddTool(id, point); doc->IncrementReferens(firstPointId); doc->IncrementReferens(secondPointId); @@ -107,11 +112,11 @@ QPointF VToolNormal::FindPoint(const QPointF &firstPoint, const QPointF &secondP void VToolNormal::FullUpdateFromFile(){ QDomElement domElement = doc->elementById(QString().setNum(id)); if(domElement.isElement()){ - typeLine = domElement.attribute("typeLine", ""); - formula = domElement.attribute("length", ""); - basePointId = domElement.attribute("firstPoint", "").toLongLong(); - secondPointId = domElement.attribute("secondPoint", "").toLongLong(); - angle = domElement.attribute("angle", "").toInt(); + typeLine = domElement.attribute(AttrTypeLine, ""); + formula = domElement.attribute(AttrLength, ""); + basePointId = domElement.attribute(AttrFirstPoint, "").toLongLong(); + secondPointId = domElement.attribute(AttrSecondPoint, "").toLongLong(); + angle = domElement.attribute(AttrAngle, "").toDouble(); } RefreshGeometry(); } @@ -120,37 +125,42 @@ void VToolNormal::FullUpdateFromGui(int result){ if(result == QDialog::Accepted){ QDomElement domElement = doc->elementById(QString().setNum(id)); if(domElement.isElement()){ - domElement.setAttribute("name", dialogNormal->getPointName()); - domElement.setAttribute("typeLine", dialogNormal->getTypeLine()); - domElement.setAttribute("length", dialogNormal->getFormula()); - domElement.setAttribute("angle", QString().setNum(dialogNormal->getAngle())); - domElement.setAttribute("firstPoint", QString().setNum(dialogNormal->getFirstPointId())); - domElement.setAttribute("secondPoint", QString().setNum(dialogNormal->getSecondPointId())); + domElement.setAttribute(AttrName, dialogNormal->getPointName()); + domElement.setAttribute(AttrTypeLine, dialogNormal->getTypeLine()); + domElement.setAttribute(AttrLength, dialogNormal->getFormula()); + domElement.setAttribute(AttrAngle, QString().setNum(dialogNormal->getAngle())); + domElement.setAttribute(AttrFirstPoint, QString().setNum(dialogNormal->getFirstPointId())); + domElement.setAttribute(AttrSecondPoint, QString().setNum(dialogNormal->getSecondPointId())); emit FullUpdateTree(); } } dialogNormal.clear(); } +void VToolNormal::SetFactor(qreal factor){ + VDrawTool::SetFactor(factor); + RefreshGeometry(); +} + void VToolNormal::contextMenuEvent(QGraphicsSceneContextMenuEvent *event){ ContextMenu(dialogNormal, this, event); } void VToolNormal::AddToFile(){ VPointF point = VAbstractTool::data.GetPoint(id); - QDomElement domElement = doc->createElement("point"); + QDomElement domElement = doc->createElement(TagName); - AddAttribute(domElement, "id", id); - AddAttribute(domElement, "type", "normal"); - AddAttribute(domElement, "name", point.name()); - AddAttribute(domElement, "mx", point.mx()/PrintDPI*25.4); - AddAttribute(domElement, "my", point.my()/PrintDPI*25.4); + AddAttribute(domElement, AttrId, id); + AddAttribute(domElement, AttrType, ToolType); + AddAttribute(domElement, AttrName, point.name()); + AddAttribute(domElement, AttrMx, toMM(point.mx())); + AddAttribute(domElement, AttrMy, toMM(point.my())); - AddAttribute(domElement, "typeLine", typeLine); - AddAttribute(domElement, "length", formula); - AddAttribute(domElement, "angle", angle); - AddAttribute(domElement, "firstPoint", basePointId); - AddAttribute(domElement, "secondPoint", secondPointId); + AddAttribute(domElement, AttrTypeLine, typeLine); + AddAttribute(domElement, AttrLength, formula); + AddAttribute(domElement, AttrAngle, angle); + AddAttribute(domElement, AttrFirstPoint, basePointId); + AddAttribute(domElement, AttrSecondPoint, secondPointId); AddToCalculation(domElement); } diff --git a/tools/drawTools/vtoolnormal.h b/tools/drawTools/vtoolnormal.h index 217328744..3370d2c90 100644 --- a/tools/drawTools/vtoolnormal.h +++ b/tools/drawTools/vtoolnormal.h @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -25,33 +25,33 @@ #include "vtoollinepoint.h" #include "dialogs/dialognormal.h" -class VToolNormal : public VToolLinePoint -{ +class VToolNormal : public VToolLinePoint{ Q_OBJECT public: - VToolNormal(VDomDocument *doc, VContainer *data, const qint64 &id, - const QString &typeLine, const QString &formula, - const qreal &angle, const qint64 &firstPointId, - const qint64 &secondPointId, Tool::Sources typeCreation, - QGraphicsItem * parent = 0); - virtual void setDialog(); - static void Create(QSharedPointer &dialog, VMainGraphicsScene *scene, VDomDocument *doc, - VContainer *data); - static void Create(const qint64 _id, const QString &formula, const qint64 &firstPointId, - const qint64 &secondPointId, const QString typeLine, const QString pointName, - const qreal angle, const qreal &mx, const qreal &my, VMainGraphicsScene *scene, - VDomDocument *doc, VContainer *data, const Document::Documents &parse, Tool::Sources typeCreation); - static QPointF FindPoint(const QPointF &firstPoint, const QPointF &secondPoint, - const qreal &length, const qreal &angle = 0); + VToolNormal(VDomDocument *doc, VContainer *data, const qint64 &id, const QString &typeLine, + const QString &formula, const qreal &angle, const qint64 &firstPointId, + const qint64 &secondPointId, Tool::Sources typeCreation, QGraphicsItem * parent = 0); + virtual void setDialog(); + static void Create(QSharedPointer &dialog, VMainGraphicsScene *scene, VDomDocument *doc, + VContainer *data); + static void Create(const qint64 _id, const QString &formula, const qint64 &firstPointId, + const qint64 &secondPointId, const QString typeLine, const QString pointName, + const qreal angle, const qreal &mx, const qreal &my, VMainGraphicsScene *scene, + VDomDocument *doc, VContainer *data, const Document::Documents &parse, + Tool::Sources typeCreation); + static QPointF FindPoint(const QPointF &firstPoint, const QPointF &secondPoint, const qreal &length, + const qreal &angle = 0); + static const QString ToolType; public slots: - virtual void FullUpdateFromFile(); - virtual void FullUpdateFromGui(int result); + virtual void FullUpdateFromFile(); + virtual void FullUpdateFromGui(int result); + virtual void SetFactor(qreal factor); protected: - virtual void contextMenuEvent ( QGraphicsSceneContextMenuEvent * event ); - virtual void AddToFile(); - virtual void RemoveReferens(); + virtual void contextMenuEvent ( QGraphicsSceneContextMenuEvent * event ); + virtual void AddToFile(); + virtual void RemoveReferens(); private: - qint64 secondPointId; + qint64 secondPointId; QSharedPointer dialogNormal; }; diff --git a/tools/drawTools/vtoolpoint.cpp b/tools/drawTools/vtoolpoint.cpp index afd581fd4..fc94cd91a 100644 --- a/tools/drawTools/vtoolpoint.cpp +++ b/tools/drawTools/vtoolpoint.cpp @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -20,20 +20,16 @@ ****************************************************************************/ #include "vtoolpoint.h" -#include -#include -#include -#include +const QString VToolPoint::TagName = QStringLiteral("point"); VToolPoint::VToolPoint(VDomDocument *doc, VContainer *data, qint64 id, QGraphicsItem *parent):VDrawTool(doc, data, id), - QGraphicsEllipseItem(parent), radius(toPixel(1.5)), namePoint(0), lineName(0){ + QGraphicsEllipseItem(parent), radius(toPixel(2)), namePoint(0), lineName(0){ namePoint = new VGraphicsSimpleTextItem(this); lineName = new QGraphicsLineItem(this); connect(namePoint, &VGraphicsSimpleTextItem::NameChangePosition, this, &VToolPoint::NameChangePosition); - this->setPen(QPen(Qt::black, widthHairLine)); this->setBrush(QBrush(Qt::NoBrush)); this->setFlag(QGraphicsItem::ItemIsSelectable, true); this->setAcceptHoverEvents(true); @@ -53,48 +49,40 @@ void VToolPoint::NameChangePosition(const QPointF pos){ void VToolPoint::UpdateNamePosition(qreal mx, qreal my){ QDomElement domElement = doc->elementById(QString().setNum(id)); if(domElement.isElement()){ - domElement.setAttribute("mx", QString().setNum(toMM(mx))); - domElement.setAttribute("my", QString().setNum(toMM(my))); + domElement.setAttribute(AttrMx, QString().setNum(toMM(mx))); + domElement.setAttribute(AttrMy, QString().setNum(toMM(my))); emit toolhaveChange(); } } void VToolPoint::ChangedActivDraw(const QString newName){ + bool selectable = false; if(nameActivDraw == newName){ - this->setPen(QPen(Qt::black, widthHairLine)); - this->setFlag(QGraphicsItem::ItemIsSelectable, true); - this->setAcceptHoverEvents(true); - namePoint->setFlag(QGraphicsItem::ItemIsMovable, true); - namePoint->setFlag(QGraphicsItem::ItemIsSelectable, true); - namePoint->setFlag(QGraphicsItem::ItemSendsGeometryChanges, true); - namePoint->setBrush(QBrush(Qt::black)); - namePoint->setAcceptHoverEvents(true); - lineName->setPen(QPen(Qt::black, widthHairLine)); - VDrawTool::ChangedActivDraw(newName); + selectable = true; + currentColor = Qt::black; } else { - this->setPen(QPen(Qt::gray, widthHairLine)); - this->setFlag(QGraphicsItem::ItemIsSelectable, false); - this->setAcceptHoverEvents (false); - namePoint->setFlag(QGraphicsItem::ItemIsMovable, false); - namePoint->setFlag(QGraphicsItem::ItemIsSelectable, false); - namePoint->setFlag(QGraphicsItem::ItemSendsGeometryChanges, false); - namePoint->setBrush(QBrush(Qt::gray)); - namePoint->setAcceptHoverEvents(false); - lineName->setPen(QPen(Qt::gray, widthHairLine)); - VDrawTool::ChangedActivDraw(newName); + selectable = false; + currentColor = Qt::gray; } + this->setPen(QPen(currentColor, widthHairLine/factor)); + this->setFlag(QGraphicsItem::ItemIsSelectable, selectable); + this->setAcceptHoverEvents (selectable); + namePoint->setFlag(QGraphicsItem::ItemIsMovable, selectable); + namePoint->setFlag(QGraphicsItem::ItemIsSelectable, selectable); + namePoint->setFlag(QGraphicsItem::ItemSendsGeometryChanges, selectable); + namePoint->setBrush(QBrush(currentColor)); + namePoint->setAcceptHoverEvents(selectable); + lineName->setPen(QPen(currentColor, widthHairLine/factor)); + VDrawTool::ChangedActivDraw(newName); } void VToolPoint::ShowTool(qint64 id, Qt::GlobalColor color, bool enable){ - if(id == this->id){ - if(enable == false){ - this->setPen(QPen(baseColor, widthHairLine)); - currentColor = baseColor; - } else { - this->setPen(QPen(color, widthHairLine)); - currentColor = color; - } - } + ShowItem(this, id, color, enable); +} + +void VToolPoint::SetFactor(qreal factor){ + VDrawTool::SetFactor(factor); + RefreshPointGeometry(VAbstractTool::data.GetPoint(id)); } void VToolPoint::mouseReleaseEvent(QGraphicsSceneMouseEvent *event){ @@ -106,21 +94,25 @@ void VToolPoint::mouseReleaseEvent(QGraphicsSceneMouseEvent *event){ void VToolPoint::hoverMoveEvent(QGraphicsSceneHoverEvent *event){ Q_UNUSED(event); - this->setPen(QPen(currentColor, widthMainLine)); + this->setPen(QPen(currentColor, widthMainLine/factor)); } void VToolPoint::hoverLeaveEvent(QGraphicsSceneHoverEvent *event){ Q_UNUSED(event); - this->setPen(QPen(currentColor, widthHairLine)); + this->setPen(QPen(currentColor, widthHairLine/factor)); } void VToolPoint::RefreshPointGeometry(const VPointF &point){ - QRectF rec = QRectF(0, 0, radius*2, radius*2); + this->setPen(QPen(currentColor, widthHairLine/factor)); + QRectF rec = QRectF(0, 0, radius*2/factor, radius*2/factor); rec.translate(-rec.center().x(), -rec.center().y()); this->setRect(rec); this->setPos(point.toQPointF()); disconnect(namePoint, &VGraphicsSimpleTextItem::NameChangePosition, this, &VToolPoint::NameChangePosition); + QFont font = namePoint->font(); + font.setPointSize(static_cast(namePoint->FontSize()/factor)); + namePoint->setFont(font); namePoint->setText(point.name()); namePoint->setPos(QPointF(point.mx(), point.my())); connect(namePoint, &VGraphicsSimpleTextItem::NameChangePosition, this, @@ -131,15 +123,13 @@ void VToolPoint::RefreshPointGeometry(const VPointF &point){ void VToolPoint::RefreshLine(){ QRectF nameRec = namePoint->sceneBoundingRect(); QPointF p1, p2; - LineIntersectCircle(QPointF(), radius, QLineF(QPointF(), nameRec.center()- scenePos()), p1, p2); + LineIntersectCircle(QPointF(), radius/factor, QLineF(QPointF(), nameRec.center()- scenePos()), p1, p2); QPointF pRec = LineIntersectRect(nameRec, QLineF(scenePos(), nameRec.center())); lineName->setLine(QLineF(p1, pRec - scenePos())); + lineName->setPen(QPen(currentColor, widthHairLine/factor)); if(QLineF(p1, pRec - scenePos()).length() <= toPixel(4)){ lineName->setVisible(false); } else { lineName->setVisible(true); } } - -VToolPoint::~VToolPoint(){ -} diff --git a/tools/drawTools/vtoolpoint.h b/tools/drawTools/vtoolpoint.h index 4b740bd74..924f5c593 100644 --- a/tools/drawTools/vtoolpoint.h +++ b/tools/drawTools/vtoolpoint.h @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -28,14 +28,15 @@ class VToolPoint: public VDrawTool, public QGraphicsEllipseItem{ Q_OBJECT public: - VToolPoint(VDomDocument *doc, VContainer *data, qint64 id, - QGraphicsItem * parent = 0); - virtual ~VToolPoint(); + VToolPoint(VDomDocument *doc, VContainer *data, qint64 id, QGraphicsItem * parent = 0); + virtual ~VToolPoint(){} + static const QString TagName; public slots: void NameChangePosition(const QPointF pos); virtual void ChangedActivDraw(const QString newName); virtual void FullUpdateFromGui(int result) = 0; virtual void ShowTool(qint64 id, Qt::GlobalColor color, bool enable); + virtual void SetFactor(qreal factor); protected: qreal radius; VGraphicsSimpleTextItem *namePoint; diff --git a/tools/drawTools/vtoolpointofcontact.cpp b/tools/drawTools/vtoolpointofcontact.cpp index a87391f74..f068aecb2 100644 --- a/tools/drawTools/vtoolpointofcontact.cpp +++ b/tools/drawTools/vtoolpointofcontact.cpp @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -20,6 +20,9 @@ ****************************************************************************/ #include "vtoolpointofcontact.h" +#include + +const QString VToolPointOfContact::ToolType = QStringLiteral("pointOfContact"); VToolPointOfContact::VToolPointOfContact(VDomDocument *doc, VContainer *data, const qint64 &id, const QString &radius, const qint64 ¢er, @@ -91,13 +94,19 @@ void VToolPointOfContact::Create(const qint64 _id, const QString &radius, const QString errorMsg; qreal result = cal.eval(radius, &errorMsg); if(errorMsg.isEmpty()){ - QPointF fPoint = VToolPointOfContact::FindPoint(result*PrintDPI/25.4, centerP.toQPointF(), + QPointF fPoint = VToolPointOfContact::FindPoint(toPixel(result), centerP.toQPointF(), firstP.toQPointF(), secondP.toQPointF()); qint64 id = _id; if(typeCreation == Tool::FromGui){ id = data->AddPoint(VPointF(fPoint.x(), fPoint.y(), pointName, mx, my)); + data->AddLine(firstPointId, id); + data->AddLine(secondPointId, id); + data->AddLine(center, id); } else { data->UpdatePoint(id,VPointF(fPoint.x(), fPoint.y(), pointName, mx, my)); + data->AddLine(firstPointId, id); + data->AddLine(secondPointId, id); + data->AddLine(center, id); if(parse != Document::FullParse){ doc->UpdateToolData(id, data); } @@ -109,6 +118,7 @@ void VToolPointOfContact::Create(const qint64 _id, const QString &radius, const scene->addItem(point); connect(point, &VToolPointOfContact::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem); connect(point, &VToolPointOfContact::RemoveTool, scene, &VMainGraphicsScene::RemoveTool); + connect(scene, &VMainGraphicsScene::NewFactor, point, &VToolPointOfContact::SetFactor); doc->AddTool(id, point); doc->IncrementReferens(center); doc->IncrementReferens(firstPointId); @@ -120,10 +130,10 @@ void VToolPointOfContact::Create(const qint64 _id, const QString &radius, const void VToolPointOfContact::FullUpdateFromFile(){ QDomElement domElement = doc->elementById(QString().setNum(id)); if(domElement.isElement()){ - radius = domElement.attribute("radius", ""); - center = domElement.attribute("center", "").toLongLong(); - firstPointId = domElement.attribute("firstPoint", "").toLongLong(); - secondPointId = domElement.attribute("secondPoint", "").toLongLong(); + radius = domElement.attribute(AttrRadius, ""); + center = domElement.attribute(AttrCenter, "").toLongLong(); + firstPointId = domElement.attribute(AttrFirstPoint, "").toLongLong(); + secondPointId = domElement.attribute(AttrSecondPoint, "").toLongLong(); } RefreshPointGeometry(VAbstractTool::data.GetPoint(id)); } @@ -132,35 +142,40 @@ void VToolPointOfContact::FullUpdateFromGui(int result){ if(result == QDialog::Accepted){ QDomElement domElement = doc->elementById(QString().setNum(id)); if(domElement.isElement()){ - domElement.setAttribute("name", dialogPointOfContact->getPointName()); - domElement.setAttribute("radius", dialogPointOfContact->getRadius()); - domElement.setAttribute("center", QString().setNum(dialogPointOfContact->getCenter())); - domElement.setAttribute("firstPoint", QString().setNum(dialogPointOfContact->getFirstPoint())); - domElement.setAttribute("secondPoint", QString().setNum(dialogPointOfContact->getSecondPoint())); + domElement.setAttribute(AttrName, dialogPointOfContact->getPointName()); + domElement.setAttribute(AttrRadius, dialogPointOfContact->getRadius()); + domElement.setAttribute(AttrCenter, QString().setNum(dialogPointOfContact->getCenter())); + domElement.setAttribute(AttrFirstPoint, QString().setNum(dialogPointOfContact->getFirstPoint())); + domElement.setAttribute(AttrSecondPoint, QString().setNum(dialogPointOfContact->getSecondPoint())); emit FullUpdateTree(); } } dialogPointOfContact.clear(); } +void VToolPointOfContact::SetFactor(qreal factor){ + VDrawTool::SetFactor(factor); + RefreshPointGeometry(VAbstractTool::data.GetPoint(id)); +} + void VToolPointOfContact::contextMenuEvent(QGraphicsSceneContextMenuEvent *event){ ContextMenu(dialogPointOfContact, this, event); } void VToolPointOfContact::AddToFile(){ VPointF point = VAbstractTool::data.GetPoint(id); - QDomElement domElement = doc->createElement("point"); + QDomElement domElement = doc->createElement(TagName); - AddAttribute(domElement, "id", id); - AddAttribute(domElement, "type", "pointOfContact"); - AddAttribute(domElement, "name", point.name()); - AddAttribute(domElement, "mx", point.mx()/PrintDPI*25.4); - AddAttribute(domElement, "my", point.my()/PrintDPI*25.4); + AddAttribute(domElement, AttrId, id); + AddAttribute(domElement, AttrType, ToolType); + AddAttribute(domElement, AttrName, point.name()); + AddAttribute(domElement, AttrMx, toMM(point.mx())); + AddAttribute(domElement, AttrMy, toMM(point.my())); - AddAttribute(domElement, "radius", radius); - AddAttribute(domElement, "center", center); - AddAttribute(domElement, "firstPoint", firstPointId); - AddAttribute(domElement, "secondPoint", secondPointId); + AddAttribute(domElement, AttrRadius, radius); + AddAttribute(domElement, AttrCenter, center); + AddAttribute(domElement, AttrFirstPoint, firstPointId); + AddAttribute(domElement, AttrSecondPoint, secondPointId); AddToCalculation(domElement); } diff --git a/tools/drawTools/vtoolpointofcontact.h b/tools/drawTools/vtoolpointofcontact.h index 4ed8e0c97..852329aa5 100644 --- a/tools/drawTools/vtoolpointofcontact.h +++ b/tools/drawTools/vtoolpointofcontact.h @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -25,33 +25,35 @@ #include "vtoolpoint.h" #include "dialogs/dialogpointofcontact.h" -class VToolPointOfContact : public VToolPoint -{ +class VToolPointOfContact : public VToolPoint{ public: - VToolPointOfContact(VDomDocument *doc, VContainer *data, const qint64 &id, - const QString &radius, const qint64 ¢er, const qint64 &firstPointId, - const qint64 &secondPointId, Tool::Sources typeCreation, QGraphicsItem * parent = 0); - virtual void setDialog(); - static QPointF FindPoint(const qreal &radius, const QPointF ¢er, const QPointF &firstPoint, - const QPointF &secondPoint); - static void Create(QSharedPointer &dialog, VMainGraphicsScene *scene, - VDomDocument *doc, VContainer *data); - static void Create(const qint64 _id, const QString &radius, const qint64 ¢er, const qint64 &firstPointId, - const qint64 &secondPointId, const QString &pointName, - const qreal &mx, const qreal &my, VMainGraphicsScene *scene, VDomDocument *doc, - VContainer *data, const Document::Documents &parse, Tool::Sources typeCreation); + VToolPointOfContact(VDomDocument *doc, VContainer *data, const qint64 &id, + const QString &radius, const qint64 ¢er, + const qint64 &firstPointId, const qint64 &secondPointId, + Tool::Sources typeCreation, QGraphicsItem * parent = 0); + virtual void setDialog(); + static QPointF FindPoint(const qreal &radius, const QPointF ¢er, const QPointF &firstPoint, + const QPointF &secondPoint); + static void Create(QSharedPointer &dialog, VMainGraphicsScene *scene, + VDomDocument *doc, VContainer *data); + static void Create(const qint64 _id, const QString &radius, const qint64 ¢er, + const qint64 &firstPointId, const qint64 &secondPointId, const QString &pointName, + const qreal &mx, const qreal &my, VMainGraphicsScene *scene, VDomDocument *doc, + VContainer *data, const Document::Documents &parse, Tool::Sources typeCreation); + static const QString ToolType; public slots: - virtual void FullUpdateFromFile(); - virtual void FullUpdateFromGui(int result); + virtual void FullUpdateFromFile(); + virtual void FullUpdateFromGui(int result); + virtual void SetFactor(qreal factor); protected: - virtual void contextMenuEvent ( QGraphicsSceneContextMenuEvent * event ); - virtual void AddToFile(); - virtual void RemoveReferens(); + virtual void contextMenuEvent ( QGraphicsSceneContextMenuEvent * event ); + virtual void AddToFile(); + virtual void RemoveReferens(); private: - QString radius; - qint64 center; - qint64 firstPointId; - qint64 secondPointId; + QString radius; + qint64 center; + qint64 firstPointId; + qint64 secondPointId; QSharedPointer dialogPointOfContact; }; diff --git a/tools/drawTools/vtoolpointofintersection.cpp b/tools/drawTools/vtoolpointofintersection.cpp new file mode 100644 index 000000000..ceff574c3 --- /dev/null +++ b/tools/drawTools/vtoolpointofintersection.cpp @@ -0,0 +1,108 @@ +#include "vtoolpointofintersection.h" + +const QString VToolPointOfIntersection::ToolType = QStringLiteral("pointOfIntersection"); + +VToolPointOfIntersection::VToolPointOfIntersection(VDomDocument *doc, VContainer *data, const qint64 &id, + const qint64 &firstPointId, const qint64 &secondPointId, + Tool::Sources typeCreation, QGraphicsItem *parent) + :VToolPoint(doc, data, id, parent), firstPointId(firstPointId), secondPointId(secondPointId), + dialogPointOfIntersection(QSharedPointer()) { + ignoreFullUpdate = true; + if(typeCreation == Tool::FromGui){ + AddToFile(); + } +} + +void VToolPointOfIntersection::setDialog(){ + Q_ASSERT(!dialogPointOfIntersection.isNull()); + VPointF p = VAbstractTool::data.GetPoint(id); + dialogPointOfIntersection->setFirstPointId(firstPointId, id); + dialogPointOfIntersection->setSecondPointId(secondPointId, id); + dialogPointOfIntersection->setPointName(p.name()); +} + +void VToolPointOfIntersection::Create(QSharedPointer &dialog, VMainGraphicsScene *scene, + VDomDocument *doc, VContainer *data){ + qint64 firstPointId = dialog->getFirstPointId(); + qint64 secondPointId = dialog->getSecondPointId(); + QString pointName = dialog->getPointName(); + Create(0, pointName, firstPointId, secondPointId, 5, 10, scene, doc, data, Document::FullParse, Tool::FromGui); +} + +void VToolPointOfIntersection::Create(const qint64 _id, const QString &pointName, const qint64 &firstPointId, + const qint64 &secondPointId, const qreal &mx, const qreal &my, + VMainGraphicsScene *scene, VDomDocument *doc, VContainer *data, + const Document::Documents &parse, Tool::Sources typeCreation){ + VPointF firstPoint = data->GetPoint(firstPointId); + VPointF secondPoint = data->GetPoint(secondPointId); + + QPointF point(firstPoint.x(), secondPoint.y()); + qint64 id = _id; + if(typeCreation == Tool::FromGui){ + id = data->AddPoint(VPointF(point.x(), point.y(), pointName, mx, my)); + } else { + data->UpdatePoint(id, VPointF(point.x(), point.y(), pointName, mx, my)); + if(parse != Document::FullParse){ + doc->UpdateToolData(id, data); + } + } + VDrawTool::AddRecord(id, Tool::Triangle, doc); + if(parse == Document::FullParse){ + VToolPointOfIntersection *point = new VToolPointOfIntersection(doc, data, id, firstPointId, + secondPointId, typeCreation); + scene->addItem(point); + connect(point, &VToolPointOfIntersection::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem); + connect(point, &VToolPointOfIntersection::RemoveTool, scene, &VMainGraphicsScene::RemoveTool); + connect(scene, &VMainGraphicsScene::NewFactor, point, &VToolPointOfIntersection::SetFactor); + doc->AddTool(id, point); + doc->IncrementReferens(firstPointId); + doc->IncrementReferens(secondPointId); + } +} + +void VToolPointOfIntersection::FullUpdateFromFile(){ + QDomElement domElement = doc->elementById(QString().setNum(id)); + if(domElement.isElement()){ + firstPointId = domElement.attribute(AttrFirstPoint, "").toLongLong(); + secondPointId = domElement.attribute(AttrSecondPoint, "").toLongLong(); + } + VToolPoint::RefreshPointGeometry(VDrawTool::data.GetPoint(id)); +} + +void VToolPointOfIntersection::FullUpdateFromGui(int result){ + if(result == QDialog::Accepted){ + QDomElement domElement = doc->elementById(QString().setNum(id)); + if(domElement.isElement()){ + domElement.setAttribute(AttrName, dialogPointOfIntersection->getPointName()); + domElement.setAttribute(AttrFirstPoint, QString().setNum(dialogPointOfIntersection->getFirstPointId())); + domElement.setAttribute(AttrSecondPoint, QString().setNum(dialogPointOfIntersection->getSecondPointId())); + emit FullUpdateTree(); + } + } + dialogPointOfIntersection.clear(); +} + +void VToolPointOfIntersection::RemoveReferens(){ + doc->DecrementReferens(firstPointId); + doc->DecrementReferens(secondPointId); +} + +void VToolPointOfIntersection::contextMenuEvent(QGraphicsSceneContextMenuEvent *event){ + ContextMenu(dialogPointOfIntersection, this, event); +} + +void VToolPointOfIntersection::AddToFile(){ + VPointF point = VAbstractTool::data.GetPoint(id); + QDomElement domElement = doc->createElement(TagName); + + AddAttribute(domElement, AttrId, id); + AddAttribute(domElement, AttrType, ToolType); + AddAttribute(domElement, AttrName, point.name()); + AddAttribute(domElement, AttrMx, toMM(point.mx())); + AddAttribute(domElement, AttrMy, toMM(point.my())); + + AddAttribute(domElement, AttrFirstPoint, firstPointId); + AddAttribute(domElement, AttrSecondPoint, secondPointId); + + AddToCalculation(domElement); +} diff --git a/tools/drawTools/vtoolpointofintersection.h b/tools/drawTools/vtoolpointofintersection.h new file mode 100644 index 000000000..6aa69cd3c --- /dev/null +++ b/tools/drawTools/vtoolpointofintersection.h @@ -0,0 +1,35 @@ +#ifndef VTOOLPOINTOFINTERSECTION_H +#define VTOOLPOINTOFINTERSECTION_H + +#include "vtoolpoint.h" +#include "dialogs/dialogpointofintersection.h" + +class VToolPointOfIntersection : public VToolPoint{ + Q_OBJECT +public: + VToolPointOfIntersection(VDomDocument *doc, VContainer *data, const qint64 &id, + const qint64 &firstPointId, const qint64 &secondPointId, + Tool::Sources typeCreation, QGraphicsItem * parent = 0); + virtual void setDialog(); + static void Create(QSharedPointer &dialog, VMainGraphicsScene *scene, + VDomDocument *doc, VContainer *data); + static void Create(const qint64 _id, const QString &pointName, const qint64 &firstPointId, + const qint64 &secondPointId, const qreal &mx, const qreal &my, VMainGraphicsScene *scene, + VDomDocument *doc, VContainer *data, const Document::Documents &parse, + Tool::Sources typeCreation); + static const QString ToolType; +public slots: + virtual void FullUpdateFromFile(); + virtual void FullUpdateFromGui(int result); +protected: + virtual void RemoveReferens(); + virtual void contextMenuEvent ( QGraphicsSceneContextMenuEvent * event ); + virtual void AddToFile(); +private: + Q_DISABLE_COPY(VToolPointOfIntersection) + qint64 firstPointId; + qint64 secondPointId; + QSharedPointer dialogPointOfIntersection; +}; + +#endif // VTOOLPOINTOFINTERSECTION_H diff --git a/tools/drawTools/vtoolshoulderpoint.cpp b/tools/drawTools/vtoolshoulderpoint.cpp index 3b41fe3ef..77b2510e9 100644 --- a/tools/drawTools/vtoolshoulderpoint.cpp +++ b/tools/drawTools/vtoolshoulderpoint.cpp @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -20,7 +20,9 @@ ****************************************************************************/ #include "vtoolshoulderpoint.h" -#include +#include + +const QString VToolShoulderPoint::ToolType = QStringLiteral("shoulder"); VToolShoulderPoint::VToolShoulderPoint(VDomDocument *doc, VContainer *data, const qint64 &id, const QString &typeLine, const QString &formula, const qint64 &p1Line, @@ -32,7 +34,6 @@ VToolShoulderPoint::VToolShoulderPoint(VDomDocument *doc, VContainer *data, cons if(typeCreation == Tool::FromGui){ AddToFile(); } - } void VToolShoulderPoint::setDialog(){ @@ -51,22 +52,22 @@ void VToolShoulderPoint::setDialog(){ QPointF VToolShoulderPoint::FindPoint(const QPointF &p1Line, const QPointF &p2Line, const QPointF &pShoulder, const qreal &length){ QLineF line = QLineF(p1Line, p2Line); - qreal dist = line.length(); - if(dist>length){ - qDebug()<<"A3П2="<length){ + qDebug()<<"A3П2="<=length){ return line.p2(); } - qreal step = 0.01; - while(1){ - line.setLength(line.length()+step); - QLineF line2 = QLineF(pShoulder, line.p2()); - if(line2.length()>=length){ - return line.p2(); - } - } + } } void VToolShoulderPoint::Create(QSharedPointer &dialog, VMainGraphicsScene *scene, @@ -95,18 +96,20 @@ void VToolShoulderPoint::Create(const qint64 _id, const QString &formula, const qreal result = cal.eval(formula, &errorMsg); if(errorMsg.isEmpty()){ QPointF fPoint = VToolShoulderPoint::FindPoint(firstPoint.toQPointF(), secondPoint.toQPointF(), - shoulderPoint.toQPointF(), result*PrintDPI/25.4); + shoulderPoint.toQPointF(), toPixel(result)); qint64 id = _id; if(typeCreation == Tool::FromGui){ id = data->AddPoint(VPointF(fPoint.x(), fPoint.y(), pointName, mx, my)); + data->AddLine(p1Line, id); + data->AddLine(p2Line, id); } else { data->UpdatePoint(id,VPointF(fPoint.x(), fPoint.y(), pointName, mx, my)); + data->AddLine(p1Line, id); + data->AddLine(p2Line, id); if(parse != Document::FullParse){ doc->UpdateToolData(id, data); } } - data->AddLine(p1Line, id); - data->AddLine(p2Line, id); VDrawTool::AddRecord(id, Tool::ShoulderPointTool, doc); if(parse == Document::FullParse){ VToolShoulderPoint *point = new VToolShoulderPoint(doc, data, id, typeLine, formula, @@ -115,6 +118,7 @@ void VToolShoulderPoint::Create(const qint64 _id, const QString &formula, const scene->addItem(point); connect(point, &VToolShoulderPoint::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem); connect(point, &VToolShoulderPoint::RemoveTool, scene, &VMainGraphicsScene::RemoveTool); + connect(scene, &VMainGraphicsScene::NewFactor, point, &VToolShoulderPoint::SetFactor); doc->AddTool(id, point); doc->IncrementReferens(p1Line); doc->IncrementReferens(p2Line); @@ -126,11 +130,11 @@ void VToolShoulderPoint::Create(const qint64 _id, const QString &formula, const void VToolShoulderPoint::FullUpdateFromFile(){ QDomElement domElement = doc->elementById(QString().setNum(id)); if(domElement.isElement()){ - typeLine = domElement.attribute("typeLine", ""); - formula = domElement.attribute("length", ""); - basePointId = domElement.attribute("p1Line", "").toLongLong(); - p2Line = domElement.attribute("p2Line", "").toLongLong(); - pShoulder = domElement.attribute("pShoulder", "").toLongLong(); + typeLine = domElement.attribute(AttrTypeLine, ""); + formula = domElement.attribute(AttrLength, ""); + basePointId = domElement.attribute(AttrP1Line, "").toLongLong(); + p2Line = domElement.attribute(AttrP2Line, "").toLongLong(); + pShoulder = domElement.attribute(AttrPShoulder, "").toLongLong(); } RefreshGeometry(); } @@ -139,37 +143,42 @@ void VToolShoulderPoint::FullUpdateFromGui(int result){ if(result == QDialog::Accepted){ QDomElement domElement = doc->elementById(QString().setNum(id)); if(domElement.isElement()){ - domElement.setAttribute("name", dialogShoulderPoint->getPointName()); - domElement.setAttribute("typeLine", dialogShoulderPoint->getTypeLine()); - domElement.setAttribute("length", dialogShoulderPoint->getFormula()); - domElement.setAttribute("p1Line", QString().setNum(dialogShoulderPoint->getP1Line())); - domElement.setAttribute("p2Line", QString().setNum(dialogShoulderPoint->getP2Line())); - domElement.setAttribute("pShoulder", QString().setNum(dialogShoulderPoint->getPShoulder())); + domElement.setAttribute(AttrName, dialogShoulderPoint->getPointName()); + domElement.setAttribute(AttrTypeLine, dialogShoulderPoint->getTypeLine()); + domElement.setAttribute(AttrLength, dialogShoulderPoint->getFormula()); + domElement.setAttribute(AttrP1Line, QString().setNum(dialogShoulderPoint->getP1Line())); + domElement.setAttribute(AttrP2Line, QString().setNum(dialogShoulderPoint->getP2Line())); + domElement.setAttribute(AttrPShoulder, QString().setNum(dialogShoulderPoint->getPShoulder())); emit FullUpdateTree(); } } dialogShoulderPoint.clear(); } +void VToolShoulderPoint::SetFactor(qreal factor){ + VDrawTool::SetFactor(factor); + RefreshGeometry(); +} + void VToolShoulderPoint::contextMenuEvent(QGraphicsSceneContextMenuEvent *event){ ContextMenu(dialogShoulderPoint, this, event); } void VToolShoulderPoint::AddToFile(){ VPointF point = VAbstractTool::data.GetPoint(id); - QDomElement domElement = doc->createElement("point"); + QDomElement domElement = doc->createElement(TagName); - AddAttribute(domElement, "id", id); - AddAttribute(domElement, "type", "shoulder"); - AddAttribute(domElement, "name", point.name()); - AddAttribute(domElement, "mx", point.mx()/PrintDPI*25.4); - AddAttribute(domElement, "my", point.my()/PrintDPI*25.4); + AddAttribute(domElement, AttrId, id); + AddAttribute(domElement, AttrType, ToolType); + AddAttribute(domElement, AttrName, point.name()); + AddAttribute(domElement, AttrMx, toMM(point.mx())); + AddAttribute(domElement, AttrMy, toMM(point.my())); - AddAttribute(domElement, "typeLine", typeLine); - AddAttribute(domElement, "length", formula); - AddAttribute(domElement, "p1Line", basePointId); - AddAttribute(domElement, "p2Line", p2Line); - AddAttribute(domElement, "pShoulder", pShoulder); + AddAttribute(domElement, AttrTypeLine, typeLine); + AddAttribute(domElement, AttrLength, formula); + AddAttribute(domElement, AttrP1Line, basePointId); + AddAttribute(domElement, AttrP2Line, p2Line); + AddAttribute(domElement, AttrPShoulder, pShoulder); AddToCalculation(domElement); } diff --git a/tools/drawTools/vtoolshoulderpoint.h b/tools/drawTools/vtoolshoulderpoint.h index 91f682ecb..c56277620 100644 --- a/tools/drawTools/vtoolshoulderpoint.h +++ b/tools/drawTools/vtoolshoulderpoint.h @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -25,32 +25,32 @@ #include "vtoollinepoint.h" #include "dialogs/dialogshoulderpoint.h" -class VToolShoulderPoint : public VToolLinePoint -{ +class VToolShoulderPoint : public VToolLinePoint{ public: - VToolShoulderPoint(VDomDocument *doc, VContainer *data, const qint64 &id, - const QString &typeLine, const QString &formula, const qint64 &p1Line, - const qint64 &p2Line, const qint64 &pShoulder, Tool::Sources typeCreation, - QGraphicsItem * parent = 0); - virtual void setDialog(); - static QPointF FindPoint(const QPointF &p1Line, const QPointF &p2Line, const QPointF &pShoulder, - const qreal &length); - static void Create(QSharedPointer &dialog, VMainGraphicsScene *scene, - VDomDocument *doc, VContainer *data); - static void Create(const qint64 _id, const QString &formula, const qint64 &p1Line, const qint64 &p2Line, - const qint64 &pShoulder, const QString &typeLine, const QString &pointName, - const qreal &mx, const qreal &my, VMainGraphicsScene *scene, VDomDocument *doc, - VContainer *data, const Document::Documents &parse, Tool::Sources typeCreation); + VToolShoulderPoint(VDomDocument *doc, VContainer *data, const qint64 &id, const QString &typeLine, + const QString &formula, const qint64 &p1Line, const qint64 &p2Line, + const qint64 &pShoulder, Tool::Sources typeCreation, QGraphicsItem * parent = 0); + virtual void setDialog(); + static QPointF FindPoint(const QPointF &p1Line, const QPointF &p2Line, const QPointF &pShoulder, + const qreal &length); + static void Create(QSharedPointer &dialog, VMainGraphicsScene *scene, VDomDocument *doc, + VContainer *data); + static void Create(const qint64 _id, const QString &formula, const qint64 &p1Line, const qint64 &p2Line, + const qint64 &pShoulder, const QString &typeLine, const QString &pointName, const qreal &mx, + const qreal &my, VMainGraphicsScene *scene, VDomDocument *doc, VContainer *data, + const Document::Documents &parse, Tool::Sources typeCreation); + static const QString ToolType; public slots: - virtual void FullUpdateFromFile(); - virtual void FullUpdateFromGui(int result); + virtual void FullUpdateFromFile(); + virtual void FullUpdateFromGui(int result); + virtual void SetFactor(qreal factor); protected: - virtual void contextMenuEvent ( QGraphicsSceneContextMenuEvent * event ); - virtual void AddToFile(); - virtual void RemoveReferens(); + virtual void contextMenuEvent ( QGraphicsSceneContextMenuEvent * event ); + virtual void AddToFile(); + virtual void RemoveReferens(); private: - qint64 p2Line; - qint64 pShoulder; + qint64 p2Line; + qint64 pShoulder; QSharedPointer dialogShoulderPoint; }; diff --git a/tools/drawTools/vtoolsinglepoint.cpp b/tools/drawTools/vtoolsinglepoint.cpp index f244d0104..79f39759e 100644 --- a/tools/drawTools/vtoolsinglepoint.cpp +++ b/tools/drawTools/vtoolsinglepoint.cpp @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -20,15 +20,13 @@ ****************************************************************************/ #include "vtoolsinglepoint.h" -#include -#include -#include -#include -#include + +const QString VToolSinglePoint::ToolType = QStringLiteral("single"); VToolSinglePoint::VToolSinglePoint (VDomDocument *doc, VContainer *data, qint64 id, Tool::Sources typeCreation, QGraphicsItem * parent ):VToolPoint(doc, data, id, parent), dialogSinglePoint(QSharedPointer()){ + ignoreFullUpdate = true; this->setFlag(QGraphicsItem::ItemIsMovable, true); this->setFlag(QGraphicsItem::ItemSendsGeometryChanges, true); if(typeCreation == Tool::FromGui){ @@ -46,15 +44,15 @@ void VToolSinglePoint::setDialog(){ void VToolSinglePoint::AddToFile(){ VPointF point = VAbstractTool::data.GetPoint(id); - QDomElement domElement = doc->createElement("point"); + QDomElement domElement = doc->createElement(TagName); - AddAttribute(domElement, "id", id); - AddAttribute(domElement, "type", "single"); - AddAttribute(domElement, "name", point.name()); - AddAttribute(domElement, "x", toMM(point.x())); - AddAttribute(domElement, "y", toMM(point.y())); - AddAttribute(domElement, "mx", toMM(point.mx())); - AddAttribute(domElement, "my", toMM(point.my())); + AddAttribute(domElement, AttrId, id); + AddAttribute(domElement, AttrType, ToolType); + AddAttribute(domElement, AttrName, point.name()); + AddAttribute(domElement, AttrX, toMM(point.x())); + AddAttribute(domElement, AttrY, toMM(point.y())); + AddAttribute(domElement, AttrMx, toMM(point.mx())); + AddAttribute(domElement, AttrMy, toMM(point.my())); AddToCalculation(domElement); } @@ -76,8 +74,8 @@ QVariant VToolSinglePoint::itemChange(QGraphicsItem::GraphicsItemChange change, QPointF newPos = value.toPointF(); QDomElement domElement = doc->elementById(QString().setNum(id)); if(domElement.isElement()){ - domElement.setAttribute("x", QString().setNum(toMM(newPos.x()))); - domElement.setAttribute("y", QString().setNum(toMM(newPos.y()))); + domElement.setAttribute(AttrX, QString().setNum(toMM(newPos.x()))); + domElement.setAttribute(AttrY, QString().setNum(toMM(newPos.y()))); //I don't now why but signal does not work. doc->FullUpdateTree(); } @@ -105,9 +103,9 @@ void VToolSinglePoint::FullUpdateFromGui(int result){ QString name = dialogSinglePoint->getName(); QDomElement domElement = doc->elementById(QString().setNum(id)); if(domElement.isElement()){ - domElement.setAttribute("name", name); - domElement.setAttribute("x", QString().setNum(toMM(p.x()))); - domElement.setAttribute("y", QString().setNum(toMM(p.y()))); + domElement.setAttribute(AttrName, name); + domElement.setAttribute(AttrX, QString().setNum(toMM(p.x()))); + domElement.setAttribute(AttrY, QString().setNum(toMM(p.y()))); //I don't now why but signal does not work. doc->FullUpdateTree(); } @@ -124,3 +122,8 @@ void VToolSinglePoint::ChangedActivDraw(const QString newName){ VToolPoint::ChangedActivDraw(newName); } } + +void VToolSinglePoint::SetFactor(qreal factor){ + VDrawTool::SetFactor(factor); + RefreshPointGeometry(VAbstractTool::data.GetPoint(id)); +} diff --git a/tools/drawTools/vtoolsinglepoint.h b/tools/drawTools/vtoolsinglepoint.h index f5b2dad67..65b9365cc 100644 --- a/tools/drawTools/vtoolsinglepoint.h +++ b/tools/drawTools/vtoolsinglepoint.h @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -25,24 +25,25 @@ #include "dialogs/dialogsinglepoint.h" #include "vtoolpoint.h" -class VToolSinglePoint : public VToolPoint -{ +class VToolSinglePoint : public VToolPoint{ Q_OBJECT public: - VToolSinglePoint (VDomDocument *doc, VContainer *data, qint64 id, - Tool::Sources typeCreation, QGraphicsItem * parent = 0 ); - virtual void setDialog(); + VToolSinglePoint (VDomDocument *doc, VContainer *data, qint64 id, Tool::Sources typeCreation, + QGraphicsItem * parent = 0 ); + virtual void setDialog(); + static const QString ToolType; public slots: - virtual void FullUpdateFromFile(); - virtual void FullUpdateFromGui(int result); - virtual void ChangedActivDraw(const QString newName); + virtual void FullUpdateFromFile(); + virtual void FullUpdateFromGui(int result); + virtual void ChangedActivDraw(const QString newName); + virtual void SetFactor(qreal factor); signals: - void FullUpdateTree(); + void FullUpdateTree(); protected: - virtual void contextMenuEvent ( QGraphicsSceneContextMenuEvent * event ); - virtual void AddToFile(); - QVariant itemChange ( GraphicsItemChange change, const QVariant &value ); - virtual void decrementReferens(); + virtual void contextMenuEvent ( QGraphicsSceneContextMenuEvent * event ); + virtual void AddToFile(); + QVariant itemChange ( GraphicsItemChange change, const QVariant &value ); + virtual void decrementReferens(); private: QSharedPointer dialogSinglePoint; }; diff --git a/tools/drawTools/vtoolspline.cpp b/tools/drawTools/vtoolspline.cpp index 85d80d197..60ed17a35 100644 --- a/tools/drawTools/vtoolspline.cpp +++ b/tools/drawTools/vtoolspline.cpp @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -20,21 +20,23 @@ ****************************************************************************/ #include "vtoolspline.h" -#include #include "geometry/vspline.h" +const QString VToolSpline::TagName = QStringLiteral("spline"); +const QString VToolSpline::ToolType = QStringLiteral("simple"); VToolSpline::VToolSpline(VDomDocument *doc, VContainer *data, qint64 id, Tool::Sources typeCreation, QGraphicsItem *parent):VDrawTool(doc, data, id), QGraphicsPathItem(parent), dialogSpline(QSharedPointer()), controlPoints(QVector()){ + ignoreFullUpdate = true; VSpline spl = data->GetSpline(id); QPainterPath path; path.addPath(spl.GetPath()); path.setFillRule( Qt::WindingFill ); this->setPath(path); - this->setPen(QPen(Qt::black, widthHairLine)); + this->setPen(QPen(Qt::black, widthHairLine/factor)); this->setFlag(QGraphicsItem::ItemIsSelectable, true); this->setAcceptHoverEvents(true); @@ -94,19 +96,21 @@ void VToolSpline::Create(const qint64 _id, const qint64 &p1, const qint64 &p4, c qint64 id = _id; if(typeCreation == Tool::FromGui){ id = data->AddSpline(spline); + data->AddLengthSpline(data->GetNameSpline(p1, p4), toMM(spline.GetLength())); } else { data->UpdateSpline(id, spline); + data->AddLengthSpline(data->GetNameSpline(p1, p4), toMM(spline.GetLength())); if(parse != Document::FullParse){ doc->UpdateToolData(id, data); } } - data->AddLengthSpline(data->GetNameSpline(p1, p4), spline.GetLength()); VDrawTool::AddRecord(id, Tool::SplineTool, doc); if(parse == Document::FullParse){ VToolSpline *spl = new VToolSpline(doc, data, id, typeCreation); scene->addItem(spl); connect(spl, &VToolSpline::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem); connect(spl, &VToolSpline::RemoveTool, scene, &VMainGraphicsScene::RemoveTool); + connect(scene, &VMainGraphicsScene::NewFactor, spl, &VToolSpline::SetFactor); doc->AddTool(id, spl); doc->IncrementReferens(p1); doc->IncrementReferens(p4); @@ -138,13 +142,13 @@ void VToolSpline::FullUpdateFromGui(int result){ controlPoints[1]->pos(), dialogSpline->getP4(), dialogSpline->getKCurve()); QDomElement domElement = doc->elementById(QString().setNum(id)); if(domElement.isElement()){ - domElement.setAttribute("point1", QString().setNum(spl.GetP1())); - domElement.setAttribute("point4", QString().setNum(spl.GetP4())); - domElement.setAttribute("angle1", QString().setNum(spl.GetAngle1())); - domElement.setAttribute("angle2", QString().setNum(spl.GetAngle2())); - domElement.setAttribute("kAsm1", QString().setNum(spl.GetKasm1())); - domElement.setAttribute("kAsm2", QString().setNum(spl.GetKasm2())); - domElement.setAttribute("kCurve", QString().setNum(spl.GetKcurve())); + domElement.setAttribute(AttrPoint1, QString().setNum(spl.GetP1())); + domElement.setAttribute(AttrPoint4, QString().setNum(spl.GetP4())); + domElement.setAttribute(AttrAngle1, QString().setNum(spl.GetAngle1())); + domElement.setAttribute(AttrAngle2, QString().setNum(spl.GetAngle2())); + domElement.setAttribute(AttrKAsm1, QString().setNum(spl.GetKasm1())); + domElement.setAttribute(AttrKAsm2, QString().setNum(spl.GetKasm2())); + domElement.setAttribute(AttrKCurve, QString().setNum(spl.GetKcurve())); emit FullUpdateTree(); } } @@ -162,11 +166,11 @@ void VToolSpline::ControlPointChangePosition(const qint32 &indexSpline, SplinePo } QDomElement domElement = doc->elementById(QString().setNum(id)); if(domElement.isElement()){ - domElement.setAttribute("angle1", QString().setNum(spl.GetAngle1())); - domElement.setAttribute("angle2", QString().setNum(spl.GetAngle2())); - domElement.setAttribute("kAsm1", QString().setNum(spl.GetKasm1())); - domElement.setAttribute("kAsm2", QString().setNum(spl.GetKasm2())); - domElement.setAttribute("kCurve", QString().setNum(spl.GetKcurve())); + domElement.setAttribute(AttrAngle1, QString().setNum(spl.GetAngle1())); + domElement.setAttribute(AttrAngle2, QString().setNum(spl.GetAngle2())); + domElement.setAttribute(AttrKAsm1, QString().setNum(spl.GetKasm1())); + domElement.setAttribute(AttrKAsm2, QString().setNum(spl.GetKasm2())); + domElement.setAttribute(AttrKCurve, QString().setNum(spl.GetKcurve())); emit FullUpdateTree(); } } @@ -177,17 +181,17 @@ void VToolSpline::contextMenuEvent(QGraphicsSceneContextMenuEvent *event){ void VToolSpline::AddToFile(){ VSpline spl = VAbstractTool::data.GetSpline(id); - QDomElement domElement = doc->createElement("spline"); + QDomElement domElement = doc->createElement(TagName); - AddAttribute(domElement, "id", id); - AddAttribute(domElement, "type", "simple"); - AddAttribute(domElement, "point1", spl.GetP1()); - AddAttribute(domElement, "point4", spl.GetP4()); - AddAttribute(domElement, "angle1", spl.GetAngle1()); - AddAttribute(domElement, "angle2", spl.GetAngle2()); - AddAttribute(domElement, "kAsm1", spl.GetKasm1()); - AddAttribute(domElement, "kAsm2", spl.GetKasm2()); - AddAttribute(domElement, "kCurve", spl.GetKcurve()); + AddAttribute(domElement, AttrId, id); + AddAttribute(domElement, AttrType, ToolType); + AddAttribute(domElement, AttrPoint1, spl.GetP1()); + AddAttribute(domElement, AttrPoint4, spl.GetP4()); + AddAttribute(domElement, AttrAngle1, spl.GetAngle1()); + AddAttribute(domElement, AttrAngle2, spl.GetAngle2()); + AddAttribute(domElement, AttrKAsm1, spl.GetKasm1()); + AddAttribute(domElement, AttrKAsm2, spl.GetKasm2()); + AddAttribute(domElement, AttrKCurve, spl.GetKcurve()); AddToCalculation(domElement); } @@ -201,12 +205,12 @@ void VToolSpline::mouseReleaseEvent(QGraphicsSceneMouseEvent *event){ void VToolSpline::hoverMoveEvent(QGraphicsSceneHoverEvent *event){ Q_UNUSED(event); - this->setPen(QPen(currentColor, widthMainLine)); + this->setPen(QPen(currentColor, widthMainLine/factor)); } void VToolSpline::hoverLeaveEvent(QGraphicsSceneHoverEvent *event){ Q_UNUSED(event); - this->setPen(QPen(currentColor, widthHairLine)); + this->setPen(QPen(currentColor, widthHairLine/factor)); } void VToolSpline::RemoveReferens(){ @@ -216,6 +220,7 @@ void VToolSpline::RemoveReferens(){ } void VToolSpline::RefreshGeometry(){ + this->setPen(QPen(currentColor, widthHairLine/factor)); VSpline spl = VAbstractTool::data.GetSpline(id); QPainterPath path; path.addPath(spl.GetPath()); @@ -242,29 +247,26 @@ void VToolSpline::RefreshGeometry(){ void VToolSpline::ChangedActivDraw(const QString newName){ + bool selectable = false; if(nameActivDraw == newName){ - this->setPen(QPen(Qt::black, widthHairLine)); - this->setFlag(QGraphicsItem::ItemIsSelectable, true); - this->setAcceptHoverEvents(true); - emit setEnabledPoint(true); - VDrawTool::ChangedActivDraw(newName); + selectable = true; + currentColor = Qt::black; } else { - this->setPen(QPen(Qt::gray, widthHairLine)); - this->setFlag(QGraphicsItem::ItemIsSelectable, false); - this->setAcceptHoverEvents (false); - emit setEnabledPoint(false); - VDrawTool::ChangedActivDraw(newName); + selectable = false; + currentColor = Qt::gray; } + this->setPen(QPen(currentColor, widthHairLine/factor)); + this->setFlag(QGraphicsItem::ItemIsSelectable, selectable); + this->setAcceptHoverEvents (selectable); + emit setEnabledPoint(selectable); + VDrawTool::ChangedActivDraw(newName); } void VToolSpline::ShowTool(qint64 id, Qt::GlobalColor color, bool enable){ - if(id == this->id){ - if(enable == false){ - this->setPen(QPen(baseColor, widthHairLine)); - currentColor = baseColor; - } else { - this->setPen(QPen(color, widthHairLine)); - currentColor = color; - } - } + ShowItem(this, id, color, enable); +} + +void VToolSpline::SetFactor(qreal factor){ + VDrawTool::SetFactor(factor); + RefreshGeometry(); } diff --git a/tools/drawTools/vtoolspline.h b/tools/drawTools/vtoolspline.h index b421b35a0..a298b7ae4 100644 --- a/tools/drawTools/vtoolspline.h +++ b/tools/drawTools/vtoolspline.h @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -28,42 +28,43 @@ #include "widgets/vcontrolpointspline.h" #include "geometry/vsplinepath.h" -class VToolSpline:public VDrawTool, public QGraphicsPathItem -{ +class VToolSpline:public VDrawTool, public QGraphicsPathItem{ Q_OBJECT public: - VToolSpline (VDomDocument *doc, VContainer *data, qint64 id, - Tool::Sources typeCreation, QGraphicsItem * parent = 0 ); + VToolSpline (VDomDocument *doc, VContainer *data, qint64 id, Tool::Sources typeCreation, + QGraphicsItem * parent = 0 ); virtual void setDialog(); - static void Create(QSharedPointer &dialog, VMainGraphicsScene *scene, VDomDocument *doc, - VContainer *data); - static void Create(const qint64 _id, const qint64 &p1, const qint64 &p4, const qreal &kAsm1, - const qreal kAsm2, const qreal &angle1, const qreal &angle2, const qreal &kCurve, - VMainGraphicsScene *scene, VDomDocument *doc, VContainer *data, const Document::Documents &parse, - Tool::Sources typeCreation); + static void Create(QSharedPointer &dialog, VMainGraphicsScene *scene, VDomDocument *doc, + VContainer *data); + static void Create(const qint64 _id, const qint64 &p1, const qint64 &p4, const qreal &kAsm1, + const qreal kAsm2, const qreal &angle1, const qreal &angle2, const qreal &kCurve, + VMainGraphicsScene *scene, VDomDocument *doc, VContainer *data, + const Document::Documents &parse, Tool::Sources typeCreation); + static const QString TagName; + static const QString ToolType; signals: - void RefreshLine ( const qint32 &indexSpline, SplinePoint::Position position, - const QPointF &controlPoint, const QPointF &splinePoint ); - void setEnabledPoint ( bool enable ); + void RefreshLine ( const qint32 &indexSpline, SplinePoint::Position position, const QPointF &controlPoint, + const QPointF &splinePoint ); + void setEnabledPoint ( bool enable ); public slots: - virtual void FullUpdateFromFile (); - virtual void FullUpdateFromGui ( int result ); - void ControlPointChangePosition ( const qint32 &indexSpline, - SplinePoint::Position position, - const QPointF pos); - virtual void ChangedActivDraw ( const QString newName ); - virtual void ShowTool(qint64 id, Qt::GlobalColor color, bool enable); + virtual void FullUpdateFromFile (); + virtual void FullUpdateFromGui ( int result ); + void ControlPointChangePosition ( const qint32 &indexSpline, SplinePoint::Position position, + const QPointF pos); + virtual void ChangedActivDraw ( const QString newName ); + virtual void ShowTool(qint64 id, Qt::GlobalColor color, bool enable); + virtual void SetFactor(qreal factor); protected: - virtual void contextMenuEvent ( QGraphicsSceneContextMenuEvent * event ); - virtual void AddToFile (); - virtual void mouseReleaseEvent ( QGraphicsSceneMouseEvent * event ); - virtual void hoverMoveEvent ( QGraphicsSceneHoverEvent * event ); - virtual void hoverLeaveEvent ( QGraphicsSceneHoverEvent * event ); - virtual void RemoveReferens(); + virtual void contextMenuEvent ( QGraphicsSceneContextMenuEvent * event ); + virtual void AddToFile (); + virtual void mouseReleaseEvent ( QGraphicsSceneMouseEvent * event ); + virtual void hoverMoveEvent ( QGraphicsSceneHoverEvent * event ); + virtual void hoverLeaveEvent ( QGraphicsSceneHoverEvent * event ); + virtual void RemoveReferens(); private: QSharedPointer dialogSpline; QVector controlPoints; - void RefreshGeometry (); + void RefreshGeometry (); }; #endif // VTOOLSPLINE_H diff --git a/tools/drawTools/vtoolsplinepath.cpp b/tools/drawTools/vtoolsplinepath.cpp index b862f6815..3e8cb0bee 100644 --- a/tools/drawTools/vtoolsplinepath.cpp +++ b/tools/drawTools/vtoolsplinepath.cpp @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -20,19 +20,22 @@ ****************************************************************************/ #include "vtoolsplinepath.h" -#include + +const QString VToolSplinePath::TagName = QStringLiteral("spline"); +const QString VToolSplinePath::ToolType = QStringLiteral("path"); VToolSplinePath::VToolSplinePath(VDomDocument *doc, VContainer *data, qint64 id, Tool::Sources typeCreation, QGraphicsItem *parent):VDrawTool(doc, data, id), QGraphicsPathItem(parent), dialogSplinePath(QSharedPointer()), controlPoints(QVector()){ + ignoreFullUpdate = true; VSplinePath splPath = data->GetSplinePath(id); QPainterPath path; path.addPath(splPath.GetPath()); path.setFillRule( Qt::WindingFill ); this->setPath(path); - this->setPen(QPen(Qt::black, widthHairLine)); + this->setPen(QPen(Qt::black, widthHairLine/factor)); this->setFlag(QGraphicsItem::ItemIsSelectable, true); this->setAcceptHoverEvents(true); @@ -82,19 +85,21 @@ void VToolSplinePath::Create(const qint64 _id, const VSplinePath &path, VMainGra qint64 id = _id; if(typeCreation == Tool::FromGui){ id = data->AddSplinePath(path); + data->AddLengthSpline(data->GetNameSplinePath(path), toMM(path.GetLength())); } else { data->UpdateSplinePath(id, path); + data->AddLengthSpline(data->GetNameSplinePath(path), toMM(path.GetLength())); if(parse != Document::FullParse){ doc->UpdateToolData(id, data); } } - data->AddLengthSpline(data->GetNameSplinePath(path), path.GetLength()); VDrawTool::AddRecord(id, Tool::SplinePathTool, doc); if(parse == Document::FullParse){ VToolSplinePath *spl = new VToolSplinePath(doc, data, id, typeCreation); scene->addItem(spl); connect(spl, &VToolSplinePath::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem); connect(spl, &VToolSplinePath::RemoveTool, scene, &VMainGraphicsScene::RemoveTool); + connect(scene, &VMainGraphicsScene::NewFactor, spl, &VToolSplinePath::SetFactor); doc->AddTool(id, spl); } } @@ -127,7 +132,7 @@ void VToolSplinePath::FullUpdateFromGui(int result){ QDomElement domElement = doc->elementById(QString().setNum(id)); if(domElement.isElement()){ - domElement.setAttribute("kCurve", QString().setNum(splPath.getKCurve())); + domElement.setAttribute(AttrKCurve, QString().setNum(splPath.getKCurve())); UpdatePathPoint(domElement, splPath); emit FullUpdateTree(); } @@ -150,7 +155,7 @@ void VToolSplinePath::ControlPointChangePosition(const qint32 &indexSpline, Spli CorectControlPoints(spl, splPath, indexSpline); QDomElement domElement = doc->elementById(QString().setNum(id)); if(domElement.isElement()){ - domElement.setAttribute("kCurve", QString().setNum(splPath.getKCurve())); + domElement.setAttribute(AttrKCurve, QString().setNum(splPath.getKCurve())); UpdatePathPoint(domElement, splPath); emit FullUpdateTree(); } @@ -176,40 +181,37 @@ void VToolSplinePath::UpdatePathPoint(QDomNode& node, VSplinePath &path){ QDomElement domElement = nodeList.at(i).toElement(); if(!domElement.isNull()){ VSplinePoint p = path[i]; - domElement.setAttribute("pSpline", QString().setNum(p.P())); - domElement.setAttribute("kAsm1", QString().setNum(p.KAsm1())); - domElement.setAttribute("kAsm2", QString().setNum(p.KAsm2())); - domElement.setAttribute("angle", QString().setNum(p.Angle2())); + domElement.setAttribute(AttrPSpline, QString().setNum(p.P())); + domElement.setAttribute(AttrKAsm1, QString().setNum(p.KAsm1())); + domElement.setAttribute(AttrKAsm2, QString().setNum(p.KAsm2())); + domElement.setAttribute(AttrAngle, QString().setNum(p.Angle2())); } } } void VToolSplinePath::ChangedActivDraw(const QString newName){ + bool selectable = false; if(nameActivDraw == newName){ - this->setPen(QPen(Qt::black, widthHairLine)); - this->setFlag(QGraphicsItem::ItemIsSelectable, true); - this->setAcceptHoverEvents(true); - emit setEnabledPoint(true); - VDrawTool::ChangedActivDraw(newName); + selectable = true; + currentColor = Qt::black; } else { - this->setPen(QPen(Qt::gray, widthHairLine)); - this->setFlag(QGraphicsItem::ItemIsSelectable, false); - this->setAcceptHoverEvents (false); - emit setEnabledPoint(false); - VDrawTool::ChangedActivDraw(newName); + selectable = false; + currentColor = Qt::gray; } + this->setPen(QPen(currentColor, widthHairLine/factor)); + this->setFlag(QGraphicsItem::ItemIsSelectable, selectable); + this->setAcceptHoverEvents (selectable); + emit setEnabledPoint(selectable); + VDrawTool::ChangedActivDraw(newName); } void VToolSplinePath::ShowTool(qint64 id, Qt::GlobalColor color, bool enable){ - if(id == this->id){ - if(enable == false){ - this->setPen(QPen(baseColor, widthHairLine)); - currentColor = baseColor; - } else { - this->setPen(QPen(color, widthHairLine)); - currentColor = color; - } - } + ShowItem(this, id, color, enable); +} + +void VToolSplinePath::SetFactor(qreal factor){ + VDrawTool::SetFactor(factor); + RefreshGeometry(); } void VToolSplinePath::contextMenuEvent(QGraphicsSceneContextMenuEvent *event){ @@ -218,11 +220,11 @@ void VToolSplinePath::contextMenuEvent(QGraphicsSceneContextMenuEvent *event){ void VToolSplinePath::AddToFile(){ VSplinePath splPath = VAbstractTool::data.GetSplinePath(id); - QDomElement domElement = doc->createElement("spline"); + QDomElement domElement = doc->createElement(TagName); - AddAttribute(domElement, "id", id); - AddAttribute(domElement, "type", "path"); - AddAttribute(domElement, "kCurve", splPath.getKCurve()); + AddAttribute(domElement, AttrId, id); + AddAttribute(domElement, AttrType, ToolType); + AddAttribute(domElement, AttrKCurve, splPath.getKCurve()); for(qint32 i = 0; i < splPath.CountPoint(); ++i){ AddPathPoint(domElement, splPath[i]); @@ -232,12 +234,12 @@ void VToolSplinePath::AddToFile(){ } void VToolSplinePath::AddPathPoint(QDomElement &domElement, const VSplinePoint &splPoint){ - QDomElement pathPoint = doc->createElement("pathPoint"); + QDomElement pathPoint = doc->createElement(AttrPathPoint); - AddAttribute(pathPoint, "pSpline", splPoint.P()); - AddAttribute(pathPoint, "kAsm1", splPoint.KAsm1()); - AddAttribute(pathPoint, "kAsm2", splPoint.KAsm2()); - AddAttribute(pathPoint, "angle", splPoint.Angle2()); + AddAttribute(pathPoint, AttrPSpline, splPoint.P()); + AddAttribute(pathPoint, AttrKAsm1, splPoint.KAsm1()); + AddAttribute(pathPoint, AttrKAsm2, splPoint.KAsm2()); + AddAttribute(pathPoint, AttrAngle, splPoint.Angle2()); domElement.appendChild(pathPoint); } @@ -251,12 +253,12 @@ void VToolSplinePath::mouseReleaseEvent(QGraphicsSceneMouseEvent *event){ void VToolSplinePath::hoverMoveEvent(QGraphicsSceneHoverEvent *event){ Q_UNUSED(event); - this->setPen(QPen(currentColor, widthMainLine)); + this->setPen(QPen(currentColor, widthMainLine/factor)); } void VToolSplinePath::hoverLeaveEvent(QGraphicsSceneHoverEvent *event){ Q_UNUSED(event); - this->setPen(QPen(currentColor, widthHairLine)); + this->setPen(QPen(currentColor, widthHairLine/factor)); } void VToolSplinePath::RemoveReferens(){ @@ -267,6 +269,7 @@ void VToolSplinePath::RemoveReferens(){ } void VToolSplinePath::RefreshGeometry(){ + this->setPen(QPen(currentColor, widthHairLine/factor)); VSplinePath splPath = VAbstractTool::data.GetSplinePath(id); QPainterPath path; path.addPath(splPath.GetPath()); diff --git a/tools/drawTools/vtoolsplinepath.h b/tools/drawTools/vtoolsplinepath.h index b880bdfd2..3bc9974e5 100644 --- a/tools/drawTools/vtoolsplinepath.h +++ b/tools/drawTools/vtoolsplinepath.h @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -30,42 +30,42 @@ class VToolSplinePath:public VDrawTool, public QGraphicsPathItem{ Q_OBJECT public: - VToolSplinePath(VDomDocument *doc, VContainer *data, qint64 id, - Tool::Sources typeCreation, - QGraphicsItem * parent = 0); - virtual void setDialog(); - static void Create(QSharedPointer &dialog, - VMainGraphicsScene *scene, VDomDocument *doc, VContainer *data); - static void Create(const qint64 _id, const VSplinePath &path, - VMainGraphicsScene *scene, VDomDocument *doc, VContainer *data, - const Document::Documents &parse, Tool::Sources typeCreation); + VToolSplinePath(VDomDocument *doc, VContainer *data, qint64 id, Tool::Sources typeCreation, + QGraphicsItem * parent = 0); + virtual void setDialog(); + static void Create(QSharedPointer &dialog, VMainGraphicsScene *scene, + VDomDocument *doc, VContainer *data); + static void Create(const qint64 _id, const VSplinePath &path, VMainGraphicsScene *scene, + VDomDocument *doc, VContainer *data, const Document::Documents &parse, + Tool::Sources typeCreation); + static const QString TagName; + static const QString ToolType; signals: - void RefreshLine(const qint32 &indexSpline, SplinePoint::Position pos, - const QPointF &controlPoint, const QPointF &splinePoint); - void setEnabledPoint(bool enable); + void RefreshLine(const qint32 &indexSpline, SplinePoint::Position pos, + const QPointF &controlPoint, const QPointF &splinePoint); + void setEnabledPoint(bool enable); public slots: - virtual void FullUpdateFromFile(); - virtual void FullUpdateFromGui(int result); - void ControlPointChangePosition(const qint32 &indexSpline, - SplinePoint::Position position, - const QPointF pos); - virtual void ChangedActivDraw(const QString newName); - virtual void ShowTool(qint64 id, Qt::GlobalColor color, bool enable); + virtual void FullUpdateFromFile(); + virtual void FullUpdateFromGui(int result); + void ControlPointChangePosition(const qint32 &indexSpline, SplinePoint::Position position, + const QPointF pos); + virtual void ChangedActivDraw(const QString newName); + virtual void ShowTool(qint64 id, Qt::GlobalColor color, bool enable); + virtual void SetFactor(qreal factor); protected: - virtual void contextMenuEvent ( QGraphicsSceneContextMenuEvent * event ); - virtual void AddToFile(); - virtual void mouseReleaseEvent ( QGraphicsSceneMouseEvent * event ); - virtual void hoverMoveEvent ( QGraphicsSceneHoverEvent * event ); - virtual void hoverLeaveEvent ( QGraphicsSceneHoverEvent * event ); - virtual void RemoveReferens(); + virtual void contextMenuEvent ( QGraphicsSceneContextMenuEvent * event ); + virtual void AddToFile(); + virtual void mouseReleaseEvent ( QGraphicsSceneMouseEvent * event ); + virtual void hoverMoveEvent ( QGraphicsSceneHoverEvent * event ); + virtual void hoverLeaveEvent ( QGraphicsSceneHoverEvent * event ); + virtual void RemoveReferens(); private: QSharedPointer dialogSplinePath; QVector controlPoints; - void RefreshGeometry(); - void AddPathPoint(QDomElement &domElement, const VSplinePoint &splPoint); - void UpdatePathPoint(QDomNode& node, VSplinePath &path); - void CorectControlPoints(const VSpline &spl, VSplinePath &splPath, - const qint32 &indexSpline); + void RefreshGeometry(); + void AddPathPoint(QDomElement &domElement, const VSplinePoint &splPoint); + void UpdatePathPoint(QDomNode& node, VSplinePath &path); + void CorectControlPoints(const VSpline &spl, VSplinePath &splPath, const qint32 &indexSpline); }; #endif // VTOOLSPLINEPATH_H diff --git a/tools/drawTools/vtooltriangle.cpp b/tools/drawTools/vtooltriangle.cpp new file mode 100644 index 000000000..6c9c74b3b --- /dev/null +++ b/tools/drawTools/vtooltriangle.cpp @@ -0,0 +1,160 @@ +#include "vtooltriangle.h" + +const QString VToolTriangle::ToolType = QStringLiteral("triangle"); + +VToolTriangle::VToolTriangle(VDomDocument *doc, VContainer *data, const qint64 &id, + const qint64 &axisP1Id, const qint64 &axisP2Id, const qint64 &firstPointId, + const qint64 &secondPointId, Tool::Sources typeCreation, QGraphicsItem *parent) + :VToolPoint(doc, data, id, parent), axisP1Id(axisP1Id), axisP2Id(axisP2Id), firstPointId(firstPointId), + secondPointId(secondPointId), dialogTriangle(QSharedPointer()) { + ignoreFullUpdate = true; + if(typeCreation == Tool::FromGui){ + AddToFile(); + } +} + +void VToolTriangle::setDialog(){ + Q_ASSERT(!dialogTriangle.isNull()); + VPointF p = VAbstractTool::data.GetPoint(id); + dialogTriangle->setAxisP1Id(axisP1Id, id); + dialogTriangle->setAxisP2Id(axisP2Id, id); + dialogTriangle->setFirstPointId(firstPointId, id); + dialogTriangle->setSecondPointId(secondPointId, id); + dialogTriangle->setPointName(p.name()); +} + +void VToolTriangle::Create(QSharedPointer &dialog, VMainGraphicsScene *scene, + VDomDocument *doc, VContainer *data){ + qint64 axisP1Id = dialog->getAxisP1Id(); + qint64 axisP2Id = dialog->getAxisP2Id(); + qint64 firstPointId = dialog->getFirstPointId(); + qint64 secondPointId = dialog->getSecondPointId(); + QString pointName = dialog->getPointName(); + Create(0, pointName, axisP1Id, axisP2Id, firstPointId, secondPointId, 5, 10, scene, doc, data, + Document::FullParse, Tool::FromGui); +} + +void VToolTriangle::Create(const qint64 _id, const QString &pointName, const qint64 &axisP1Id, + const qint64 &axisP2Id, const qint64 &firstPointId, const qint64 &secondPointId, + const qreal &mx, const qreal &my, VMainGraphicsScene *scene, VDomDocument *doc, + VContainer *data, const Document::Documents &parse, Tool::Sources typeCreation){ + VPointF axisP1 = data->GetPoint(axisP1Id); + VPointF axisP2 = data->GetPoint(axisP2Id); + VPointF firstPoint = data->GetPoint(firstPointId); + VPointF secondPoint = data->GetPoint(secondPointId); + + QPointF point = FindPoint(axisP1.toQPointF(), axisP2.toQPointF(), firstPoint.toQPointF(), + secondPoint.toQPointF()); + qint64 id = _id; + if(typeCreation == Tool::FromGui){ + id = data->AddPoint(VPointF(point.x(), point.y(), pointName, mx, my)); + } else { + data->UpdatePoint(id, VPointF(point.x(), point.y(), pointName, mx, my)); + if(parse != Document::FullParse){ + doc->UpdateToolData(id, data); + } + } + VDrawTool::AddRecord(id, Tool::Triangle, doc); + if(parse == Document::FullParse){ + VToolTriangle *point = new VToolTriangle(doc, data, id, axisP1Id, axisP2Id, firstPointId, + secondPointId, typeCreation); + scene->addItem(point); + connect(point, &VToolTriangle::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem); + connect(point, &VToolTriangle::RemoveTool, scene, &VMainGraphicsScene::RemoveTool); + connect(scene, &VMainGraphicsScene::NewFactor, point, &VToolTriangle::SetFactor); + doc->AddTool(id, point); + doc->IncrementReferens(axisP1Id); + doc->IncrementReferens(axisP2Id); + doc->IncrementReferens(firstPointId); + doc->IncrementReferens(secondPointId); + } +} + +QPointF VToolTriangle::FindPoint(const QPointF axisP1, const QPointF axisP2, const QPointF firstPoint, + const QPointF secondPoint){ + qreal c = QLineF(firstPoint, secondPoint).length(); + qreal a = QLineF(axisP2, firstPoint).length(); + qreal b = QLineF(axisP2, secondPoint).length(); + if(c*c == a*a + b*b){ + QLineF l1(axisP2, firstPoint); + QLineF l2(axisP2, secondPoint); + if(l1.angleTo(l2) == 90 || l2.angleTo(l1) == 90){ + return axisP2; + } + } + + QLineF line = QLineF(axisP1, axisP2); + qreal step = 0.01; + while(1){ + line.setLength(line.length()+step); + a = QLineF(line.p2(), firstPoint).length(); + b = QLineF(line.p2(), secondPoint).length(); + if(static_cast(c*c) == static_cast(a*a + b*b)){ + QLineF l1(axisP2, firstPoint); + QLineF l2(axisP2, secondPoint); + if(l1.angleTo(l2) == 90 || l2.angleTo(l1) == 90){ + return line.p2(); + } + } + if(c*c < a*a + b*b){ + qWarning()<elementById(QString().setNum(id)); + if(domElement.isElement()){ + axisP1Id = domElement.attribute(AttrAxisP1, "").toLongLong(); + axisP2Id = domElement.attribute(AttrAxisP2, "").toLongLong(); + firstPointId = domElement.attribute(AttrFirstPoint, "").toLongLong(); + secondPointId = domElement.attribute(AttrSecondPoint, "").toLongLong(); + } + VToolPoint::RefreshPointGeometry(VDrawTool::data.GetPoint(id)); +} + +void VToolTriangle::FullUpdateFromGui(int result){ + if(result == QDialog::Accepted){ + QDomElement domElement = doc->elementById(QString().setNum(id)); + if(domElement.isElement()){ + domElement.setAttribute(AttrName, dialogTriangle->getPointName()); + domElement.setAttribute(AttrAxisP1, QString().setNum(dialogTriangle->getAxisP1Id())); + domElement.setAttribute(AttrAxisP2, QString().setNum(dialogTriangle->getAxisP2Id())); + domElement.setAttribute(AttrFirstPoint, QString().setNum(dialogTriangle->getFirstPointId())); + domElement.setAttribute(AttrSecondPoint, QString().setNum(dialogTriangle->getSecondPointId())); + emit FullUpdateTree(); + } + + } + dialogTriangle.clear(); +} + +void VToolTriangle::RemoveReferens(){ + doc->DecrementReferens(axisP1Id); + doc->DecrementReferens(axisP2Id); + doc->DecrementReferens(firstPointId); + doc->DecrementReferens(secondPointId); +} + +void VToolTriangle::contextMenuEvent(QGraphicsSceneContextMenuEvent *event){ + ContextMenu(dialogTriangle, this, event); +} + +void VToolTriangle::AddToFile(){ + VPointF point = VAbstractTool::data.GetPoint(id); + QDomElement domElement = doc->createElement(TagName); + + AddAttribute(domElement, AttrId, id); + AddAttribute(domElement, AttrType, ToolType); + AddAttribute(domElement, AttrName, point.name()); + AddAttribute(domElement, AttrMx, toMM(point.mx())); + AddAttribute(domElement, AttrMy, toMM(point.my())); + + AddAttribute(domElement, AttrAxisP1, axisP1Id); + AddAttribute(domElement, AttrAxisP2, axisP2Id); + AddAttribute(domElement, AttrFirstPoint, firstPointId); + AddAttribute(domElement, AttrSecondPoint, secondPointId); + + AddToCalculation(domElement); +} diff --git a/tools/drawTools/vtooltriangle.h b/tools/drawTools/vtooltriangle.h new file mode 100644 index 000000000..63b07c06a --- /dev/null +++ b/tools/drawTools/vtooltriangle.h @@ -0,0 +1,60 @@ +/**************************************************************************** + ** + ** Copyright (C) 2013 Valentina project All Rights Reserved. + ** + ** This file is part of Valentina. + ** + ** Tox 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 VTOOLTRIANGLE_H +#define VTOOLTRIANGLE_H + +#include "vtoolpoint.h" +#include "dialogs/dialogtriangle.h" + +class VToolTriangle : public VToolPoint{ + Q_OBJECT +public: + VToolTriangle(VDomDocument *doc, VContainer *data, const qint64 &id, const qint64 &axisP1Id, + const qint64 &axisP2Id, const qint64 &firstPointId, const qint64 &secondPointId, + Tool::Sources typeCreation, QGraphicsItem * parent = 0); + virtual void setDialog(); + static void Create(QSharedPointer &dialog, VMainGraphicsScene *scene, VDomDocument *doc, + VContainer *data); + static void Create(const qint64 _id, const QString &pointName, const qint64 &axisP1Id, const qint64 &axisP2Id, + const qint64 &firstPointId, const qint64 &secondPointId, const qreal &mx, const qreal &my, + VMainGraphicsScene *scene, VDomDocument *doc, VContainer *data, + const Document::Documents &parse, Tool::Sources typeCreation); + static QPointF FindPoint(const QPointF axisP1, const QPointF axisP2, const QPointF firstPoint, + const QPointF secondPoint); + static const QString ToolType; +public slots: + virtual void FullUpdateFromFile(); + virtual void FullUpdateFromGui(int result); +protected: + virtual void RemoveReferens(); + virtual void contextMenuEvent ( QGraphicsSceneContextMenuEvent * event ); + virtual void AddToFile(); +private: + Q_DISABLE_COPY(VToolTriangle) + qint64 axisP1Id; + qint64 axisP2Id; + qint64 firstPointId; + qint64 secondPointId; + QSharedPointer dialogTriangle; +}; + +#endif // VTOOLTRIANGLE_H diff --git a/tools/modelingTools/modelingtools.h b/tools/modelingTools/modelingtools.h index 2a051f87a..b7c755edc 100644 --- a/tools/modelingTools/modelingtools.h +++ b/tools/modelingTools/modelingtools.h @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -34,5 +34,8 @@ #include "vmodelingsinglepoint.h" #include "vmodelingspline.h" #include "vmodelingsplinepath.h" +#include "vmodelingheight.h" +#include "vmodelingtriangle.h" +#include "vmodelingpointofintersection.h" #endif // MODELINGTOOLS_H diff --git a/tools/modelingTools/vmodelingalongline.cpp b/tools/modelingTools/vmodelingalongline.cpp index 76d448dad..30da7536d 100644 --- a/tools/modelingTools/vmodelingalongline.cpp +++ b/tools/modelingTools/vmodelingalongline.cpp @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -20,10 +20,10 @@ ****************************************************************************/ #include "vmodelingalongline.h" -#include -#include #include "container/calculator.h" +const QString VModelingAlongLine::ToolType = QStringLiteral("alongLine"); + VModelingAlongLine::VModelingAlongLine(VDomDocument *doc, VContainer *data, qint64 id, const QString &formula, const qint64 &firstPointId, const qint64 &secondPointId, const QString &typeLine, @@ -39,10 +39,10 @@ VModelingAlongLine::VModelingAlongLine(VDomDocument *doc, VContainer *data, qint void VModelingAlongLine::FullUpdateFromFile(){ QDomElement domElement = doc->elementById(QString().setNum(id)); if(domElement.isElement()){ - typeLine = domElement.attribute("typeLine", ""); - formula = domElement.attribute("length", ""); - basePointId = domElement.attribute("firstPoint", "").toLongLong(); - secondPointId = domElement.attribute("secondPoint", "").toLongLong(); + typeLine = domElement.attribute(AttrTypeLine, ""); + formula = domElement.attribute(AttrLength, ""); + basePointId = domElement.attribute(AttrFirstPoint, "").toLongLong(); + secondPointId = domElement.attribute(AttrSecondPoint, "").toLongLong(); } RefreshGeometry(); } @@ -51,11 +51,11 @@ void VModelingAlongLine::FullUpdateFromGui(int result){ if(result == QDialog::Accepted){ QDomElement domElement = doc->elementById(QString().setNum(id)); if(domElement.isElement()){ - domElement.setAttribute("name", dialogAlongLine->getPointName()); - domElement.setAttribute("typeLine", dialogAlongLine->getTypeLine()); - domElement.setAttribute("length", dialogAlongLine->getFormula()); - domElement.setAttribute("firstPoint", QString().setNum(dialogAlongLine->getFirstPointId())); - domElement.setAttribute("secondPoint", QString().setNum(dialogAlongLine->getSecondPointId())); + domElement.setAttribute(AttrName, dialogAlongLine->getPointName()); + domElement.setAttribute(AttrTypeLine, dialogAlongLine->getTypeLine()); + domElement.setAttribute(AttrLength, dialogAlongLine->getFormula()); + domElement.setAttribute(AttrFirstPoint, QString().setNum(dialogAlongLine->getFirstPointId())); + domElement.setAttribute(AttrSecondPoint, QString().setNum(dialogAlongLine->getSecondPointId())); emit FullUpdateTree(); } @@ -69,18 +69,18 @@ void VModelingAlongLine::contextMenuEvent(QGraphicsSceneContextMenuEvent *event) void VModelingAlongLine::AddToFile(){ VPointF point = VAbstractTool::data.GetModelingPoint(id); - QDomElement domElement = doc->createElement("point"); + QDomElement domElement = doc->createElement(TagName); - AddAttribute(domElement, "id", id); - AddAttribute(domElement, "type", "alongLine"); - AddAttribute(domElement, "name", point.name()); - AddAttribute(domElement, "mx", point.mx()/PrintDPI*25.4); - AddAttribute(domElement, "my", point.my()/PrintDPI*25.4); + AddAttribute(domElement, AttrId, id); + AddAttribute(domElement, AttrType, ToolType); + AddAttribute(domElement, AttrName, point.name()); + AddAttribute(domElement, AttrMx, toMM(point.mx())); + AddAttribute(domElement, AttrMy, toMM(point.my())); - AddAttribute(domElement, "typeLine", typeLine); - AddAttribute(domElement, "length", formula); - AddAttribute(domElement, "firstPoint", basePointId); - AddAttribute(domElement, "secondPoint", secondPointId); + AddAttribute(domElement, AttrTypeLine, typeLine); + AddAttribute(domElement, AttrLength, formula); + AddAttribute(domElement, AttrFirstPoint, basePointId); + AddAttribute(domElement, AttrSecondPoint, secondPointId); AddToModeling(domElement); } diff --git a/tools/modelingTools/vmodelingalongline.h b/tools/modelingTools/vmodelingalongline.h index c5d88407d..eceb805b3 100644 --- a/tools/modelingTools/vmodelingalongline.h +++ b/tools/modelingTools/vmodelingalongline.h @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -28,27 +28,26 @@ class VModelingAlongLine : public VModelingLinePoint{ Q_OBJECT public: - VModelingAlongLine(VDomDocument *doc, VContainer *data, qint64 id, - const QString &formula, const qint64 &firstPointId, - const qint64 &secondPointId, const QString &typeLine, - Tool::Sources typeCreation, QGraphicsItem * parent = 0); - virtual void setDialog(); - static VModelingAlongLine* Create(QSharedPointer &dialog, VDomDocument *doc, - VContainer *data); - static VModelingAlongLine* Create(const qint64 _id, const QString &pointName, const QString &typeLine, - const QString &formula, const qint64 &firstPointId, - const qint64 &secondPointId, const qreal &mx, const qreal &my, - VDomDocument *doc, VContainer *data, - const Document::Documents &parse, Tool::Sources typeCreation); + VModelingAlongLine(VDomDocument *doc, VContainer *data, qint64 id, + const QString &formula, const qint64 &firstPointId, + const qint64 &secondPointId, const QString &typeLine, + Tool::Sources typeCreation, QGraphicsItem * parent = 0); + virtual void setDialog(); + static VModelingAlongLine* Create(QSharedPointer &dialog, VDomDocument *doc, VContainer *data); + static VModelingAlongLine* Create(const qint64 _id, const QString &pointName, const QString &typeLine, + const QString &formula, const qint64 &firstPointId, const qint64 &secondPointId, + const qreal &mx, const qreal &my, VDomDocument *doc, VContainer *data, + const Document::Documents &parse, Tool::Sources typeCreation); + static const QString ToolType; public slots: - virtual void FullUpdateFromFile(); - virtual void FullUpdateFromGui(int result); + virtual void FullUpdateFromFile(); + virtual void FullUpdateFromGui(int result); protected: - virtual void contextMenuEvent ( QGraphicsSceneContextMenuEvent * event ); - virtual void AddToFile(); - virtual void RemoveReferens(); + virtual void contextMenuEvent ( QGraphicsSceneContextMenuEvent * event ); + virtual void AddToFile(); + virtual void RemoveReferens(); private: - qint64 secondPointId; + qint64 secondPointId; QSharedPointer dialogAlongLine; }; diff --git a/tools/modelingTools/vmodelingarc.cpp b/tools/modelingTools/vmodelingarc.cpp index a04ed9310..6181db5c7 100644 --- a/tools/modelingTools/vmodelingarc.cpp +++ b/tools/modelingTools/vmodelingarc.cpp @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -20,20 +20,18 @@ ****************************************************************************/ #include "vmodelingarc.h" -#include #include "container/calculator.h" +const QString VModelingArc::TagName = QStringLiteral("arc"); +const QString VModelingArc::ToolType = QStringLiteral("simple"); + VModelingArc::VModelingArc(VDomDocument *doc, VContainer *data, qint64 id, Tool::Sources typeCreation, QGraphicsItem *parent):VModelingTool(doc, data, id), QGraphicsPathItem(parent), dialogArc(QSharedPointer()){ - VArc arc = data->GetModelingArc(id); - QPainterPath path; - path.addPath(arc.GetPath()); - path.setFillRule( Qt::WindingFill ); - this->setPath(path); - this->setPen(QPen(Qt::black, widthHairLine)); + this->setPen(QPen(baseColor, widthHairLine)); this->setFlag(QGraphicsItem::ItemIsSelectable, true); this->setAcceptHoverEvents(true); + RefreshGeometry(); if(typeCreation == Tool::FromGui){ AddToFile(); @@ -69,7 +67,7 @@ VModelingArc* VModelingArc::Create(const qint64 _id, const qint64 ¢er, const QString errorMsg; qreal result = cal.eval(radius, &errorMsg); if(errorMsg.isEmpty()){ - calcRadius = result*PrintDPI/25.4; + calcRadius = toPixel(result); } errorMsg.clear(); @@ -94,7 +92,7 @@ VModelingArc* VModelingArc::Create(const qint64 _id, const qint64 ¢er, const doc->UpdateToolData(id, data); } } - data->AddLengthArc(data->GetNameArc(center,id, Draw::Modeling), arc.GetLength()); + data->AddLengthArc(data->GetNameArc(center,id, Draw::Modeling), toMM(arc.GetLength())); if(parse == Document::FullParse){ toolArc = new VModelingArc(doc, data, id, typeCreation); doc->AddTool(id, toolArc); @@ -111,10 +109,10 @@ void VModelingArc::FullUpdateFromGui(int result){ if(result == QDialog::Accepted){ QDomElement domElement = doc->elementById(QString().setNum(id)); if(domElement.isElement()){ - domElement.setAttribute("center", QString().setNum(dialogArc->GetCenter())); - domElement.setAttribute("radius", dialogArc->GetRadius()); - domElement.setAttribute("angle1", dialogArc->GetF1()); - domElement.setAttribute("angle2", dialogArc->GetF2()); + domElement.setAttribute(AttrCenter, QString().setNum(dialogArc->GetCenter())); + domElement.setAttribute(AttrRadius, dialogArc->GetRadius()); + domElement.setAttribute(AttrAngle1, dialogArc->GetF1()); + domElement.setAttribute(AttrAngle2, dialogArc->GetF2()); emit FullUpdateTree(); } } @@ -127,14 +125,14 @@ void VModelingArc::contextMenuEvent(QGraphicsSceneContextMenuEvent *event){ void VModelingArc::AddToFile(){ VArc arc = VAbstractTool::data.GetModelingArc(id); - QDomElement domElement = doc->createElement("arc"); + QDomElement domElement = doc->createElement(TagName); - AddAttribute(domElement, "id", id); - AddAttribute(domElement, "type", "simple"); - AddAttribute(domElement, "center", arc.GetCenter()); - AddAttribute(domElement, "radius", arc.GetFormulaRadius()); - AddAttribute(domElement, "angle1", arc.GetFormulaF1()); - AddAttribute(domElement, "angle2", arc.GetFormulaF2()); + AddAttribute(domElement, AttrId, id); + AddAttribute(domElement, AttrType, ToolType); + AddAttribute(domElement, AttrCenter, arc.GetCenter()); + AddAttribute(domElement, AttrRadius, arc.GetFormulaRadius()); + AddAttribute(domElement, AttrAngle1, arc.GetFormulaF1()); + AddAttribute(domElement, AttrAngle2, arc.GetFormulaF2()); AddToModeling(domElement); } diff --git a/tools/modelingTools/vmodelingarc.h b/tools/modelingTools/vmodelingarc.h index e452f59e1..18c20f897 100644 --- a/tools/modelingTools/vmodelingarc.h +++ b/tools/modelingTools/vmodelingarc.h @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -30,26 +30,28 @@ class VModelingArc :public VModelingTool, public QGraphicsPathItem{ Q_OBJECT public: - VModelingArc(VDomDocument *doc, VContainer *data, qint64 id, - Tool::Sources typeCreation, QGraphicsItem * parent = 0); - virtual void setDialog(); - static VModelingArc* Create(QSharedPointer &dialog, VDomDocument *doc, VContainer *data); - static VModelingArc* Create(const qint64 _id, const qint64 ¢er, const QString &radius, - const QString &f1, const QString &f2, VDomDocument *doc, VContainer *data, - const Document::Documents &parse, Tool::Sources typeCreation); + VModelingArc(VDomDocument *doc, VContainer *data, qint64 id, Tool::Sources typeCreation, + QGraphicsItem * parent = 0); + virtual void setDialog(); + static VModelingArc* Create(QSharedPointer &dialog, VDomDocument *doc, VContainer *data); + static VModelingArc* Create(const qint64 _id, const qint64 ¢er, const QString &radius, const QString &f1, + const QString &f2, VDomDocument *doc, VContainer *data, + const Document::Documents &parse, Tool::Sources typeCreation); + static const QString TagName; + static const QString ToolType; public slots: - virtual void FullUpdateFromFile(); - virtual void FullUpdateFromGui(int result); + virtual void FullUpdateFromFile(); + virtual void FullUpdateFromGui(int result); protected: - virtual void contextMenuEvent ( QGraphicsSceneContextMenuEvent * event ); - virtual void AddToFile(); - virtual void mouseReleaseEvent ( QGraphicsSceneMouseEvent * event ); - virtual void hoverMoveEvent ( QGraphicsSceneHoverEvent * event ); - virtual void hoverLeaveEvent ( QGraphicsSceneHoverEvent * event ); - virtual void RemoveReferens(); + virtual void contextMenuEvent ( QGraphicsSceneContextMenuEvent * event ); + virtual void AddToFile(); + virtual void mouseReleaseEvent ( QGraphicsSceneMouseEvent * event ); + virtual void hoverMoveEvent ( QGraphicsSceneHoverEvent * event ); + virtual void hoverLeaveEvent ( QGraphicsSceneHoverEvent * event ); + virtual void RemoveReferens(); private: QSharedPointer dialogArc; - void RefreshGeometry(); + void RefreshGeometry(); }; #endif // VMODELINGARC_H diff --git a/tools/modelingTools/vmodelingbisector.cpp b/tools/modelingTools/vmodelingbisector.cpp index 158b19ad0..fa84f937b 100644 --- a/tools/modelingTools/vmodelingbisector.cpp +++ b/tools/modelingTools/vmodelingbisector.cpp @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -20,7 +20,10 @@ ****************************************************************************/ #include "vmodelingbisector.h" -#include +#include "../drawTools/vtoolbisector.h" +#include + +const QString VModelingBisector::ToolType = QStringLiteral("bisector"); VModelingBisector::VModelingBisector(VDomDocument *doc, VContainer *data, const qint64 &id, const QString &typeLine, const QString &formula, const qint64 &firstPointId, @@ -36,19 +39,6 @@ VModelingBisector::VModelingBisector(VDomDocument *doc, VContainer *data, const } } -QPointF VModelingBisector::FindPoint(const QPointF &firstPoint, const QPointF &secondPoint, - const QPointF &thirdPoint, const qreal &length){ - QLineF line1(secondPoint, firstPoint); - QLineF line2(secondPoint, thirdPoint); - qreal angle = line1.angleTo(line2); - if(angle>180){ - angle = 360 - angle; - } - line1.setAngle(line1.angle()-angle/2); - line1.setLength(length); - return line1.p2(); -} - void VModelingBisector::setDialog(){ Q_ASSERT(!dialogBisector.isNull()); if(!dialogBisector.isNull()){ @@ -89,8 +79,8 @@ VModelingBisector *VModelingBisector::Create(const qint64 _id, const QString &fo QString errorMsg; qreal result = cal.eval(formula, &errorMsg); if(errorMsg.isEmpty()){ - QPointF fPoint = VModelingBisector::FindPoint(firstPoint.toQPointF(), secondPoint.toQPointF(), - thirdPoint.toQPointF(), result*PrintDPI/25.4); + QPointF fPoint = VToolBisector::FindPoint(firstPoint.toQPointF(), secondPoint.toQPointF(), + thirdPoint.toQPointF(), toPixel(result)); qint64 id = _id; if(typeCreation == Tool::FromGui){ id = data->AddModelingPoint(VPointF(fPoint.x(), fPoint.y(), pointName, mx, my)); @@ -116,11 +106,11 @@ VModelingBisector *VModelingBisector::Create(const qint64 _id, const QString &fo void VModelingBisector::FullUpdateFromFile(){ QDomElement domElement = doc->elementById(QString().setNum(id)); if(domElement.isElement()){ - typeLine = domElement.attribute("typeLine", ""); - formula = domElement.attribute("length", ""); - firstPointId = domElement.attribute("firstPoint", "").toLongLong(); - basePointId = domElement.attribute("secondPoint", "").toLongLong(); - thirdPointId = domElement.attribute("thirdPoint", "").toLongLong(); + typeLine = domElement.attribute(AttrTypeLine, ""); + formula = domElement.attribute(AttrLength, ""); + firstPointId = domElement.attribute(AttrFirstPoint, "").toLongLong(); + basePointId = domElement.attribute(AttrSecondPoint, "").toLongLong(); + thirdPointId = domElement.attribute(AttrThirdPoint, "").toLongLong(); } RefreshGeometry(); } @@ -129,12 +119,12 @@ void VModelingBisector::FullUpdateFromGui(int result){ if(result == QDialog::Accepted){ QDomElement domElement = doc->elementById(QString().setNum(id)); if(domElement.isElement()){ - domElement.setAttribute("name", dialogBisector->getPointName()); - domElement.setAttribute("typeLine", dialogBisector->getTypeLine()); - domElement.setAttribute("length", dialogBisector->getFormula()); - domElement.setAttribute("firstPoint", QString().setNum(dialogBisector->getFirstPointId())); - domElement.setAttribute("secondPoint", QString().setNum(dialogBisector->getSecondPointId())); - domElement.setAttribute("thirdPoint", QString().setNum(dialogBisector->getThirdPointId())); + domElement.setAttribute(AttrName, dialogBisector->getPointName()); + domElement.setAttribute(AttrTypeLine, dialogBisector->getTypeLine()); + domElement.setAttribute(AttrLength, dialogBisector->getFormula()); + domElement.setAttribute(AttrFirstPoint, QString().setNum(dialogBisector->getFirstPointId())); + domElement.setAttribute(AttrSecondPoint, QString().setNum(dialogBisector->getSecondPointId())); + domElement.setAttribute(AttrThirdPoint, QString().setNum(dialogBisector->getThirdPointId())); emit FullUpdateTree(); } } @@ -147,19 +137,19 @@ void VModelingBisector::contextMenuEvent(QGraphicsSceneContextMenuEvent *event){ void VModelingBisector::AddToFile(){ VPointF point = VAbstractTool::data.GetModelingPoint(id); - QDomElement domElement = doc->createElement("point"); + QDomElement domElement = doc->createElement(TagName); - AddAttribute(domElement, "id", id); - AddAttribute(domElement, "type", "bisector"); - AddAttribute(domElement, "name", point.name()); - AddAttribute(domElement, "mx", point.mx()/PrintDPI*25.4); - AddAttribute(domElement, "my", point.my()/PrintDPI*25.4); + AddAttribute(domElement, AttrId, id); + AddAttribute(domElement, AttrType, ToolType); + AddAttribute(domElement, AttrName, point.name()); + AddAttribute(domElement, AttrMx, toMM(point.mx())); + AddAttribute(domElement, AttrMy, toMM(point.my())); - AddAttribute(domElement, "typeLine", typeLine); - AddAttribute(domElement, "length", formula); - AddAttribute(domElement, "firstPoint", firstPointId); - AddAttribute(domElement, "secondPoint", basePointId); - AddAttribute(domElement, "thirdPoint", thirdPointId); + AddAttribute(domElement, AttrTypeLine, typeLine); + AddAttribute(domElement, AttrLength, formula); + AddAttribute(domElement, AttrFirstPoint, firstPointId); + AddAttribute(domElement, AttrSecondPoint, basePointId); + AddAttribute(domElement, AttrThirdPoint, thirdPointId); AddToModeling(domElement); } diff --git a/tools/modelingTools/vmodelingbisector.h b/tools/modelingTools/vmodelingbisector.h index 8795d90de..2a84ac1fc 100644 --- a/tools/modelingTools/vmodelingbisector.h +++ b/tools/modelingTools/vmodelingbisector.h @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -28,31 +28,28 @@ class VModelingBisector : public VModelingLinePoint{ Q_OBJECT public: - VModelingBisector(VDomDocument *doc, VContainer *data, const qint64 &id, - const QString &typeLine, const QString &formula, - const qint64 &firstPointId, const qint64 &secondPointId, - const qint64 &thirdPointId, Tool::Sources typeCreation, - QGraphicsItem * parent = 0); - static QPointF FindPoint(const QPointF &firstPoint, const QPointF &secondPoint, - const QPointF &thirdPoint, const qreal& length); - virtual void setDialog(); - static VModelingBisector* Create(QSharedPointer &dialog, VDomDocument *doc, - VContainer *data); - static VModelingBisector* Create(const qint64 _id, const QString &formula, const qint64 &firstPointId, - const qint64 &secondPointId, const qint64 &thirdPointId, - const QString &typeLine, const QString &pointName, const qreal &mx, - const qreal &my, VDomDocument *doc, VContainer *data, - const Document::Documents &parse, Tool::Sources typeCreation); + VModelingBisector(VDomDocument *doc, VContainer *data, const qint64 &id, + const QString &typeLine, const QString &formula, + const qint64 &firstPointId, const qint64 &secondPointId, + const qint64 &thirdPointId, Tool::Sources typeCreation, + QGraphicsItem * parent = 0); + virtual void setDialog(); + static VModelingBisector* Create(QSharedPointer &dialog, VDomDocument *doc, VContainer *data); + static VModelingBisector* Create(const qint64 _id, const QString &formula, const qint64 &firstPointId, + const qint64 &secondPointId, const qint64 &thirdPointId, const QString &typeLine, + const QString &pointName, const qreal &mx, const qreal &my, VDomDocument *doc, + VContainer *data, const Document::Documents &parse, Tool::Sources typeCreation); + static const QString ToolType; public slots: - virtual void FullUpdateFromFile(); - virtual void FullUpdateFromGui(int result); + virtual void FullUpdateFromFile(); + virtual void FullUpdateFromGui(int result); protected: - virtual void contextMenuEvent ( QGraphicsSceneContextMenuEvent * event ); - virtual void AddToFile(); - virtual void RemoveReferens(); + virtual void contextMenuEvent ( QGraphicsSceneContextMenuEvent * event ); + virtual void AddToFile(); + virtual void RemoveReferens(); private: - qint64 firstPointId; - qint64 thirdPointId; + qint64 firstPointId; + qint64 thirdPointId; QSharedPointer dialogBisector; }; diff --git a/tools/modelingTools/vmodelingendline.cpp b/tools/modelingTools/vmodelingendline.cpp index 17021859d..fa4b51f5f 100644 --- a/tools/modelingTools/vmodelingendline.cpp +++ b/tools/modelingTools/vmodelingendline.cpp @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -20,13 +20,14 @@ ****************************************************************************/ #include "vmodelingendline.h" -#include -#include -#include "widgets/vmaingraphicsscene.h" +#include -VModelingEndLine::VModelingEndLine(VDomDocument *doc, VContainer *data, const qint64 &id, const QString &typeLine, - const QString &formula, const qreal &angle, const qint64 &basePointId, - Tool::Sources typeCreation, QGraphicsItem *parent): +const QString VModelingEndLine::ToolType = QStringLiteral("endLine"); + +VModelingEndLine::VModelingEndLine(VDomDocument *doc, VContainer *data, const qint64 &id, + const QString &typeLine, const QString &formula, const qreal &angle, + const qint64 &basePointId, Tool::Sources typeCreation, + QGraphicsItem *parent): VModelingLinePoint(doc, data, id, typeLine, formula, basePointId, angle, parent), dialogEndLine(QSharedPointer()){ @@ -37,18 +38,16 @@ VModelingEndLine::VModelingEndLine(VDomDocument *doc, VContainer *data, const qi void VModelingEndLine::setDialog(){ Q_ASSERT(!dialogEndLine.isNull()); - if(!dialogEndLine.isNull()){ - VPointF p = VAbstractTool::data.GetModelingPoint(id); - dialogEndLine->setTypeLine(typeLine); - dialogEndLine->setFormula(formula); - dialogEndLine->setAngle(angle); - dialogEndLine->setBasePointId(basePointId, id); - dialogEndLine->setPointName(p.name()); - } + VPointF p = VAbstractTool::data.GetModelingPoint(id); + dialogEndLine->setTypeLine(typeLine); + dialogEndLine->setFormula(formula); + dialogEndLine->setAngle(angle); + dialogEndLine->setBasePointId(basePointId, id); + dialogEndLine->setPointName(p.name()); } VModelingEndLine *VModelingEndLine::Create(QSharedPointer &dialog, VDomDocument *doc, - VContainer *data){ + VContainer *data){ QString pointName = dialog->getPointName(); QString typeLine = dialog->getTypeLine(); QString formula = dialog->getFormula(); @@ -70,7 +69,7 @@ VModelingEndLine *VModelingEndLine::Create(const qint64 _id, const QString &poin QString errorMsg; qreal result = cal.eval(formula, &errorMsg); if(errorMsg.isEmpty()){ - line.setLength(result*PrintDPI/25.4); + line.setLength(toPixel(result)); line.setAngle(angle); qint64 id = _id; if(typeCreation == Tool::FromGui){ @@ -94,10 +93,10 @@ VModelingEndLine *VModelingEndLine::Create(const qint64 _id, const QString &poin void VModelingEndLine::FullUpdateFromFile(){ QDomElement domElement = doc->elementById(QString().setNum(id)); if(domElement.isElement()){ - typeLine = domElement.attribute("typeLine", ""); - formula = domElement.attribute("length", ""); - basePointId = domElement.attribute("basePoint", "").toLongLong(); - angle = domElement.attribute("angle", "").toInt(); + typeLine = domElement.attribute(AttrTypeLine, ""); + formula = domElement.attribute(AttrLength, ""); + basePointId = domElement.attribute(AttrBasePoint, "").toLongLong(); + angle = domElement.attribute(AttrAngle, "").toDouble(); } RefreshGeometry(); } @@ -110,11 +109,11 @@ void VModelingEndLine::FullUpdateFromGui(int result){ if(result == QDialog::Accepted){ QDomElement domElement = doc->elementById(QString().setNum(id)); if(domElement.isElement()){ - domElement.setAttribute("name", dialogEndLine->getPointName()); - domElement.setAttribute("typeLine", dialogEndLine->getTypeLine()); - domElement.setAttribute("length", dialogEndLine->getFormula()); - domElement.setAttribute("angle", QString().setNum(dialogEndLine->getAngle())); - domElement.setAttribute("basePoint", QString().setNum(dialogEndLine->getBasePointId())); + domElement.setAttribute(AttrName, dialogEndLine->getPointName()); + domElement.setAttribute(AttrTypeLine, dialogEndLine->getTypeLine()); + domElement.setAttribute(AttrLength, dialogEndLine->getFormula()); + domElement.setAttribute(AttrAngle, QString().setNum(dialogEndLine->getAngle())); + domElement.setAttribute(AttrBasePoint, QString().setNum(dialogEndLine->getBasePointId())); emit FullUpdateTree(); } } @@ -123,18 +122,18 @@ void VModelingEndLine::FullUpdateFromGui(int result){ void VModelingEndLine::AddToFile(){ VPointF point = VAbstractTool::data.GetModelingPoint(id); - QDomElement domElement = doc->createElement("point"); + QDomElement domElement = doc->createElement(TagName); - AddAttribute(domElement, "id", id); - AddAttribute(domElement, "type", "endLine"); - AddAttribute(domElement, "name", point.name()); - AddAttribute(domElement, "mx", toMM(point.mx())); - AddAttribute(domElement, "my", toMM(point.my())); + AddAttribute(domElement, AttrId, id); + AddAttribute(domElement, AttrType, ToolType); + AddAttribute(domElement, AttrName, point.name()); + AddAttribute(domElement, AttrMx, toMM(point.mx())); + AddAttribute(domElement, AttrMy, toMM(point.my())); - AddAttribute(domElement, "typeLine", typeLine); - AddAttribute(domElement, "length", formula); - AddAttribute(domElement, "angle", angle); - AddAttribute(domElement, "basePoint", basePointId); + AddAttribute(domElement, AttrTypeLine, typeLine); + AddAttribute(domElement, AttrLength, formula); + AddAttribute(domElement, AttrAngle, angle); + AddAttribute(domElement, AttrBasePoint, basePointId); AddToModeling(domElement); } diff --git a/tools/modelingTools/vmodelingendline.h b/tools/modelingTools/vmodelingendline.h index 6bd9d110b..edf57b266 100644 --- a/tools/modelingTools/vmodelingendline.h +++ b/tools/modelingTools/vmodelingendline.h @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -28,24 +28,23 @@ class VModelingEndLine : public VModelingLinePoint{ Q_OBJECT public: - VModelingEndLine(VDomDocument *doc, VContainer *data, const qint64 &id, - const QString &typeLine, const QString &formula, - const qreal &angle, const qint64 &basePointId, - Tool::Sources typeCreation, - QGraphicsItem * parent = 0); - virtual void setDialog(); - static VModelingEndLine* Create(QSharedPointer &dialog, VDomDocument *doc, - VContainer *data); - static VModelingEndLine* Create(const qint64 _id, const QString &pointName, const QString &typeLine, - const QString &formula, const qreal &angle, const qint64 &basePointId, - const qreal &mx, const qreal &my, VDomDocument *doc, VContainer *data, - const Document::Documents &parse, Tool::Sources typeCreation); + VModelingEndLine(VDomDocument *doc, VContainer *data, const qint64 &id, + const QString &typeLine, const QString &formula, const qreal &angle, + const qint64 &basePointId, Tool::Sources typeCreation, + QGraphicsItem * parent = 0); + virtual void setDialog(); + static VModelingEndLine* Create(QSharedPointer &dialog, VDomDocument *doc, VContainer *data); + static VModelingEndLine* Create(const qint64 _id, const QString &pointName, const QString &typeLine, + const QString &formula, const qreal &angle, const qint64 &basePointId, + const qreal &mx, const qreal &my, VDomDocument *doc, VContainer *data, + const Document::Documents &parse, Tool::Sources typeCreation); + static const QString ToolType; public slots: - virtual void FullUpdateFromFile(); - virtual void FullUpdateFromGui(int result); + virtual void FullUpdateFromFile(); + virtual void FullUpdateFromGui(int result); protected: - virtual void contextMenuEvent ( QGraphicsSceneContextMenuEvent * event ); - virtual void AddToFile(); + virtual void contextMenuEvent ( QGraphicsSceneContextMenuEvent * event ); + virtual void AddToFile(); private: QSharedPointer dialogEndLine; }; diff --git a/tools/modelingTools/vmodelingheight.cpp b/tools/modelingTools/vmodelingheight.cpp new file mode 100644 index 000000000..b71a69276 --- /dev/null +++ b/tools/modelingTools/vmodelingheight.cpp @@ -0,0 +1,140 @@ +/**************************************************************************** + ** + ** Copyright (C) 2013 Valentina project All Rights Reserved. + ** + ** This file is part of Valentina. + ** + ** Tox 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 "vmodelingheight.h" +#include "../drawTools/vtoolheight.h" + +const QString VModelingHeight::ToolType = QStringLiteral("height"); + +VModelingHeight::VModelingHeight(VDomDocument *doc, VContainer *data, const qint64 &id, + const QString &typeLine, const qint64 &basePointId, const qint64 &p1LineId, + const qint64 &p2LineId, Tool::Sources typeCreation, + QGraphicsItem * parent) + :VModelingLinePoint(doc, data, id, typeLine, QString(), basePointId, 0, parent), + dialogHeight(QSharedPointer()), p1LineId(p1LineId), p2LineId(p2LineId){ + ignoreFullUpdate = true; + if(typeCreation == Tool::FromGui){ + AddToFile(); + } +} + +void VModelingHeight::setDialog(){ + Q_ASSERT(!dialogHeight.isNull()); + VPointF p = VAbstractTool::data.GetModelingPoint(id); + dialogHeight->setTypeLine(typeLine); + dialogHeight->setBasePointId(basePointId, id); + dialogHeight->setP1LineId(p1LineId, id); + dialogHeight->setP2LineId(p2LineId, id); + dialogHeight->setPointName(p.name()); +} + +VModelingHeight *VModelingHeight::Create(QSharedPointer &dialog, VDomDocument *doc, + VContainer *data){ + disconnect(doc, &VDomDocument::FullUpdateFromFile, dialog.data(), &DialogHeight::UpdateList); + QString pointName = dialog->getPointName(); + QString typeLine = dialog->getTypeLine(); + qint64 basePointId = dialog->getBasePointId(); + qint64 p1LineId = dialog->getP1LineId(); + qint64 p2LineId = dialog->getP2LineId(); + return Create(0, pointName, typeLine, basePointId, p1LineId, p2LineId, 5, 10, doc, data, + Document::FullParse, Tool::FromGui); +} + +VModelingHeight *VModelingHeight::Create(const qint64 _id, const QString &pointName, const QString &typeLine, + const qint64 &basePointId, const qint64 &p1LineId, + const qint64 &p2LineId, const qreal &mx, const qreal &my, + VDomDocument *doc, VContainer *data, + const Document::Documents &parse, Tool::Sources typeCreation){ + VModelingHeight *point = 0; + VPointF basePoint = data->GetModelingPoint(basePointId); + VPointF p1Line = data->GetModelingPoint(p1LineId); + VPointF p2Line = data->GetModelingPoint(p2LineId); + + QPointF pHeight = VToolHeight::FindPoint(QLineF(p1Line.toQPointF(), p2Line.toQPointF()), + basePoint.toQPointF()); + QLineF line = QLineF(basePoint.toQPointF(), pHeight); + qint64 id = _id; + if(typeCreation == Tool::FromGui){ + id = data->AddModelingPoint(VPointF(line.p2().x(), line.p2().y(), pointName, mx, my)); + } else { + data->UpdateModelingPoint(id, VPointF(line.p2().x(), line.p2().y(), pointName, mx, my)); + if(parse != Document::FullParse){ + doc->UpdateToolData(id, data); + } + } + data->AddLine(basePointId, id, Draw::Modeling); + if(parse == Document::FullParse){ + point = new VModelingHeight(doc, data, id, typeLine, basePointId, p1LineId, p2LineId, typeCreation); + doc->AddTool(id, point); + doc->IncrementReferens(basePointId); + doc->IncrementReferens(p1LineId); + doc->IncrementReferens(p2LineId); + } + return point; +} + +void VModelingHeight::FullUpdateFromFile(){ + QDomElement domElement = doc->elementById(QString().setNum(id)); + if(domElement.isElement()){ + typeLine = domElement.attribute(AttrTypeLine, ""); + basePointId = domElement.attribute(AttrBasePoint, "").toLongLong(); + p1LineId = domElement.attribute(AttrP1Line, "").toLongLong(); + p2LineId = domElement.attribute(AttrP2Line, "").toLongLong(); + } + RefreshGeometry(); +} + +void VModelingHeight::FullUpdateFromGui(int result){ + if(result == QDialog::Accepted){ + QDomElement domElement = doc->elementById(QString().setNum(id)); + if(domElement.isElement()){ + domElement.setAttribute(AttrName, dialogHeight->getPointName()); + domElement.setAttribute(AttrTypeLine, dialogHeight->getTypeLine()); + domElement.setAttribute(AttrBasePoint, QString().setNum(dialogHeight->getBasePointId())); + domElement.setAttribute(AttrP1Line, QString().setNum(dialogHeight->getP1LineId())); + domElement.setAttribute(AttrP2Line, QString().setNum(dialogHeight->getP2LineId())); + emit FullUpdateTree(); + } + } + dialogHeight.clear(); +} + +void VModelingHeight::contextMenuEvent(QGraphicsSceneContextMenuEvent *event){ + ContextMenu(dialogHeight, this, event); +} + +void VModelingHeight::AddToFile(){ + VPointF point = VAbstractTool::data.GetModelingPoint(id); + QDomElement domElement = doc->createElement(TagName); + + AddAttribute(domElement, AttrId, id); + AddAttribute(domElement, AttrType, ToolType); + AddAttribute(domElement, AttrName, point.name()); + AddAttribute(domElement, AttrMx, toMM(point.mx())); + AddAttribute(domElement, AttrMy, toMM(point.my())); + + AddAttribute(domElement, AttrTypeLine, typeLine); + AddAttribute(domElement, AttrBasePoint, basePointId); + AddAttribute(domElement, AttrP1Line, p1LineId); + AddAttribute(domElement, AttrP2Line, p2LineId); + + AddToModeling(domElement); +} diff --git a/tools/modelingTools/vmodelingheight.h b/tools/modelingTools/vmodelingheight.h new file mode 100644 index 000000000..7ad09f6e3 --- /dev/null +++ b/tools/modelingTools/vmodelingheight.h @@ -0,0 +1,54 @@ +/**************************************************************************** + ** + ** Copyright (C) 2013 Valentina project All Rights Reserved. + ** + ** This file is part of Valentina. + ** + ** Tox 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 VMODELINGHEIGHT_H +#define VMODELINGHEIGHT_H + +#include "vmodelinglinepoint.h" +#include "dialogs/dialogheight.h" + +class VModelingHeight : public VModelingLinePoint{ + Q_OBJECT +public: + VModelingHeight(VDomDocument *doc, VContainer *data, const qint64 &id, + const QString &typeLine, const qint64 &basePointId, const qint64 &p1LineId, + const qint64 &p2LineId, Tool::Sources typeCreation, + QGraphicsItem * parent = 0); + virtual void setDialog(); + static VModelingHeight* Create(QSharedPointer &dialog, VDomDocument *doc, VContainer *data); + static VModelingHeight* Create(const qint64 _id, const QString &pointName, const QString &typeLine, + const qint64 &basePointId, const qint64 &p1LineId, const qint64 &p2LineId, + const qreal &mx, const qreal &my, VDomDocument *doc, VContainer *data, + const Document::Documents &parse, Tool::Sources typeCreation); + static const QString ToolType; +public slots: + virtual void FullUpdateFromFile(); + virtual void FullUpdateFromGui(int result); +protected: + virtual void contextMenuEvent ( QGraphicsSceneContextMenuEvent * event ); + virtual void AddToFile(); +private: + QSharedPointer dialogHeight; + qint64 p1LineId; + qint64 p2LineId; +}; + +#endif // VMODELINGHEIGHT_H diff --git a/tools/modelingTools/vmodelingline.cpp b/tools/modelingTools/vmodelingline.cpp index 06614bf09..6acd7cdd7 100644 --- a/tools/modelingTools/vmodelingline.cpp +++ b/tools/modelingTools/vmodelingline.cpp @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -20,12 +20,14 @@ ****************************************************************************/ #include "vmodelingline.h" -#include + +const QString VModelingLine::TagName = QStringLiteral("line"); VModelingLine::VModelingLine(VDomDocument *doc, VContainer *data, qint64 id, qint64 firstPoint, qint64 secondPoint, Tool::Sources typeCreation, QGraphicsItem *parent): VModelingTool(doc, data, id), QGraphicsLineItem(parent), firstPoint(firstPoint), secondPoint(secondPoint), dialogLine(QSharedPointer()){ + ignoreFullUpdate = true; //Лінія VPointF first = data->GetModelingPoint(firstPoint); VPointF second = data->GetModelingPoint(secondPoint); @@ -51,18 +53,23 @@ VModelingLine *VModelingLine::Create(QSharedPointer &dialog, VDomDoc return Create(0, firstPoint, secondPoint, doc, data, Document::FullParse, Tool::FromGui); } -VModelingLine *VModelingLine::Create(const qint64 &id, const qint64 &firstPoint, const qint64 &secondPoint, +VModelingLine *VModelingLine::Create(const qint64 &_id, const qint64 &firstPoint, const qint64 &secondPoint, VDomDocument *doc, VContainer *data, const Document::Documents &parse, Tool::Sources typeCreation){ VModelingLine *line = 0; - Q_CHECK_PTR(doc); - Q_CHECK_PTR(data); - data->AddLine(firstPoint, secondPoint, Draw::Modeling); - if(parse != Document::FullParse){ - doc->UpdateToolData(id, data); + Q_ASSERT(doc != 0); + Q_ASSERT(data != 0); + qint64 id = _id; + if(typeCreation == Tool::FromGui){ + id = data->getNextId(); + } else { + if(parse != Document::FullParse){ + data->UpdateId(id); + doc->UpdateToolData(id, data); + } } + data->AddLine(firstPoint, secondPoint, Draw::Modeling); if(parse == Document::FullParse){ - qint64 id = data->getNextId(); line = new VModelingLine(doc, data, id, firstPoint, secondPoint, typeCreation); doc->AddTool(id, line); doc->IncrementReferens(firstPoint); @@ -74,8 +81,8 @@ VModelingLine *VModelingLine::Create(const qint64 &id, const qint64 &firstPoint, void VModelingLine::FullUpdateFromFile(){ QDomElement domElement = doc->elementById(QString().setNum(id)); if(domElement.isElement()){ - firstPoint = domElement.attribute("firstPoint", "").toLongLong(); - secondPoint = domElement.attribute("secondPoint", "").toLongLong(); + firstPoint = domElement.attribute(AttrFirstPoint, "").toLongLong(); + secondPoint = domElement.attribute(AttrSecondPoint, "").toLongLong(); } VPointF first = VAbstractTool::data.GetModelingPoint(firstPoint); VPointF second = VAbstractTool::data.GetModelingPoint(secondPoint); @@ -86,8 +93,8 @@ void VModelingLine::FullUpdateFromGui(int result){ if(result == QDialog::Accepted){ QDomElement domElement = doc->elementById(QString().setNum(id)); if(domElement.isElement()){ - domElement.setAttribute("firstPoint", QString().setNum(dialogLine->getFirstPoint())); - domElement.setAttribute("secondPoint", QString().setNum(dialogLine->getSecondPoint())); + domElement.setAttribute(AttrFirstPoint, QString().setNum(dialogLine->getFirstPoint())); + domElement.setAttribute(AttrSecondPoint, QString().setNum(dialogLine->getSecondPoint())); emit FullUpdateTree(); } } @@ -99,10 +106,10 @@ void VModelingLine::contextMenuEvent(QGraphicsSceneContextMenuEvent *event){ } void VModelingLine::AddToFile(){ - QDomElement domElement = doc->createElement("line"); - AddAttribute(domElement, "id", id); - AddAttribute(domElement, "firstPoint", firstPoint); - AddAttribute(domElement, "secondPoint", secondPoint); + QDomElement domElement = doc->createElement(TagName); + AddAttribute(domElement, AttrId, id); + AddAttribute(domElement, AttrFirstPoint, firstPoint); + AddAttribute(domElement, AttrSecondPoint, secondPoint); AddToModeling(domElement); } diff --git a/tools/modelingTools/vmodelingline.h b/tools/modelingTools/vmodelingline.h index 9ffe7e440..8bee26207 100644 --- a/tools/modelingTools/vmodelingline.h +++ b/tools/modelingTools/vmodelingline.h @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -29,26 +29,27 @@ class VModelingLine: public VModelingTool, public QGraphicsLineItem{ Q_OBJECT public: - VModelingLine(VDomDocument *doc, VContainer *data, qint64 id, qint64 firstPoint, - qint64 secondPoint, Tool::Sources typeCreation, - QGraphicsItem * parent = 0); - virtual void setDialog(); - static VModelingLine* Create(QSharedPointer &dialog, VDomDocument *doc, VContainer *data); - static VModelingLine* Create(const qint64 &id, const qint64 &firstPoint, const qint64 &secondPoint, - VDomDocument *doc, VContainer *data, const Document::Documents &parse, - Tool::Sources typeCreation); + VModelingLine(VDomDocument *doc, VContainer *data, qint64 id, qint64 firstPoint, + qint64 secondPoint, Tool::Sources typeCreation, QGraphicsItem * parent = 0); + virtual void setDialog(); + static VModelingLine* Create(QSharedPointer &dialog, VDomDocument *doc, VContainer *data); + static VModelingLine* Create(const qint64 &_id, const qint64 &firstPoint, const qint64 &secondPoint, + VDomDocument *doc, VContainer *data, const Document::Documents &parse, + Tool::Sources typeCreation); + static const QString TagName; + static const QString ToolType; public slots: - virtual void FullUpdateFromFile(); - virtual void FullUpdateFromGui(int result); + virtual void FullUpdateFromFile(); + virtual void FullUpdateFromGui(int result); protected: - virtual void contextMenuEvent ( QGraphicsSceneContextMenuEvent * event ); - virtual void AddToFile(); - virtual void hoverMoveEvent ( QGraphicsSceneHoverEvent * event ); - virtual void hoverLeaveEvent ( QGraphicsSceneHoverEvent * event ); - virtual void RemoveReferens(); + virtual void contextMenuEvent ( QGraphicsSceneContextMenuEvent * event ); + virtual void AddToFile(); + virtual void hoverMoveEvent ( QGraphicsSceneHoverEvent * event ); + virtual void hoverLeaveEvent ( QGraphicsSceneHoverEvent * event ); + virtual void RemoveReferens(); private: - qint64 firstPoint; - qint64 secondPoint; + qint64 firstPoint; + qint64 secondPoint; QSharedPointer dialogLine; }; diff --git a/tools/modelingTools/vmodelinglineintersect.cpp b/tools/modelingTools/vmodelinglineintersect.cpp index 51a45e7d0..af78014b6 100644 --- a/tools/modelingTools/vmodelinglineintersect.cpp +++ b/tools/modelingTools/vmodelinglineintersect.cpp @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -21,11 +21,14 @@ #include "vmodelinglineintersect.h" +const QString VModelingLineIntersect::ToolType = QStringLiteral("lineIntersect"); + VModelingLineIntersect::VModelingLineIntersect(VDomDocument *doc, VContainer *data, const qint64 &id, const qint64 &p1Line1, const qint64 &p2Line1, const qint64 &p1Line2, const qint64 &p2Line2, Tool::Sources typeCreation, QGraphicsItem *parent): VModelingPoint(doc, data, id, parent), p1Line1(p1Line1), p2Line1(p2Line1), p1Line2(p1Line2), p2Line2(p2Line2), dialogLineIntersect(QSharedPointer()){ + ignoreFullUpdate = true; if(typeCreation == Tool::FromGui){ AddToFile(); } @@ -100,10 +103,10 @@ VModelingLineIntersect *VModelingLineIntersect::Create(const qint64 _id, const q void VModelingLineIntersect::FullUpdateFromFile(){ QDomElement domElement = doc->elementById(QString().setNum(id)); if(domElement.isElement()){ - p1Line1 = domElement.attribute("p1Line1", "").toLongLong(); - p2Line1 = domElement.attribute("p2Line1", "").toLongLong(); - p1Line2 = domElement.attribute("p1Line2", "").toLongLong(); - p2Line2 = domElement.attribute("p2Line2", "").toLongLong(); + p1Line1 = domElement.attribute(AttrP1Line1, "").toLongLong(); + p2Line1 = domElement.attribute(AttrP2Line1, "").toLongLong(); + p1Line2 = domElement.attribute(AttrP1Line2, "").toLongLong(); + p2Line2 = domElement.attribute(AttrP2Line2, "").toLongLong(); } RefreshPointGeometry(VAbstractTool::data.GetModelingPoint(id)); } @@ -112,11 +115,11 @@ void VModelingLineIntersect::FullUpdateFromGui(int result){ if(result == QDialog::Accepted){ QDomElement domElement = doc->elementById(QString().setNum(id)); if(domElement.isElement()){ - domElement.setAttribute("name", dialogLineIntersect->getPointName()); - domElement.setAttribute("p1Line1", QString().setNum(dialogLineIntersect->getP1Line1())); - domElement.setAttribute("p2Line1", QString().setNum(dialogLineIntersect->getP2Line1())); - domElement.setAttribute("p1Line2", QString().setNum(dialogLineIntersect->getP1Line2())); - domElement.setAttribute("p2Line2", QString().setNum(dialogLineIntersect->getP2Line2())); + domElement.setAttribute(AttrName, dialogLineIntersect->getPointName()); + domElement.setAttribute(AttrP1Line1, QString().setNum(dialogLineIntersect->getP1Line1())); + domElement.setAttribute(AttrP2Line1, QString().setNum(dialogLineIntersect->getP2Line1())); + domElement.setAttribute(AttrP1Line2, QString().setNum(dialogLineIntersect->getP1Line2())); + domElement.setAttribute(AttrP2Line2, QString().setNum(dialogLineIntersect->getP2Line2())); emit FullUpdateTree(); } } @@ -129,18 +132,18 @@ void VModelingLineIntersect::contextMenuEvent(QGraphicsSceneContextMenuEvent *ev void VModelingLineIntersect::AddToFile(){ VPointF point = VAbstractTool::data.GetModelingPoint(id); - QDomElement domElement = doc->createElement("point"); + QDomElement domElement = doc->createElement(TagName); - AddAttribute(domElement, "id", id); - AddAttribute(domElement, "type", "lineIntersect"); - AddAttribute(domElement, "name", point.name()); - AddAttribute(domElement, "mx", point.mx()/PrintDPI*25.4); - AddAttribute(domElement, "my", point.my()/PrintDPI*25.4); + AddAttribute(domElement, AttrId, id); + AddAttribute(domElement, AttrType, ToolType); + AddAttribute(domElement, AttrName, point.name()); + AddAttribute(domElement, AttrMx, toMM(point.mx())); + AddAttribute(domElement, AttrMy, toMM(point.my())); - AddAttribute(domElement, "p1Line1", p1Line1); - AddAttribute(domElement, "p2Line1", p2Line1); - AddAttribute(domElement, "p1Line2", p1Line2); - AddAttribute(domElement, "p2Line2", p2Line2); + AddAttribute(domElement, AttrP1Line1, p1Line1); + AddAttribute(domElement, AttrP2Line1, p2Line1); + AddAttribute(domElement, AttrP1Line2, p1Line2); + AddAttribute(domElement, AttrP2Line2, p2Line2); AddToModeling(domElement); } diff --git a/tools/modelingTools/vmodelinglineintersect.h b/tools/modelingTools/vmodelinglineintersect.h index e2af48470..7051104d1 100644 --- a/tools/modelingTools/vmodelinglineintersect.h +++ b/tools/modelingTools/vmodelinglineintersect.h @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -28,33 +28,30 @@ class VModelingLineIntersect:public VModelingPoint{ Q_OBJECT public: - VModelingLineIntersect(VDomDocument *doc, VContainer *data, - const qint64 &id, const qint64 &p1Line1, - const qint64 &p2Line1, const qint64 &p1Line2, - const qint64 &p2Line2, - Tool::Sources typeCreation, - QGraphicsItem * parent = 0); - virtual void setDialog(); - static VModelingLineIntersect* Create(QSharedPointer &dialog, - VDomDocument *doc,VContainer *data); - static VModelingLineIntersect* Create(const qint64 _id, const qint64 &p1Line1Id, - const qint64 &p2Line1Id, const qint64 &p1Line2Id, - const qint64 &p2Line2Id, const QString &pointName, - const qreal &mx, const qreal &my, VDomDocument *doc, - VContainer *data, const Document::Documents &parse, - Tool::Sources typeCreation); + VModelingLineIntersect(VDomDocument *doc, VContainer *data, const qint64 &id, + const qint64 &p1Line1, const qint64 &p2Line1, + const qint64 &p1Line2, const qint64 &p2Line2, + Tool::Sources typeCreation, QGraphicsItem * parent = 0); + virtual void setDialog(); + static VModelingLineIntersect* Create(QSharedPointer &dialog, VDomDocument *doc, + VContainer *data); + static VModelingLineIntersect* Create(const qint64 _id, const qint64 &p1Line1Id, const qint64 &p2Line1Id, + const qint64 &p1Line2Id, const qint64 &p2Line2Id, const QString &pointName, + const qreal &mx, const qreal &my, VDomDocument *doc, VContainer *data, + const Document::Documents &parse, Tool::Sources typeCreation); + static const QString ToolType; public slots: - virtual void FullUpdateFromFile(); - virtual void FullUpdateFromGui(int result); + virtual void FullUpdateFromFile(); + virtual void FullUpdateFromGui(int result); protected: - virtual void contextMenuEvent ( QGraphicsSceneContextMenuEvent * event ); - virtual void AddToFile(); - virtual void RemoveReferens(); + virtual void contextMenuEvent ( QGraphicsSceneContextMenuEvent * event ); + virtual void AddToFile(); + virtual void RemoveReferens(); private: - qint64 p1Line1; - qint64 p2Line1; - qint64 p1Line2; - qint64 p2Line2; + qint64 p1Line1; + qint64 p2Line1; + qint64 p1Line2; + qint64 p2Line2; QSharedPointer dialogLineIntersect; }; diff --git a/tools/modelingTools/vmodelinglinepoint.cpp b/tools/modelingTools/vmodelinglinepoint.cpp index c326a4079..e8c05adb2 100644 --- a/tools/modelingTools/vmodelinglinepoint.cpp +++ b/tools/modelingTools/vmodelinglinepoint.cpp @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -32,7 +32,7 @@ VModelingLinePoint::VModelingLinePoint(VDomDocument *doc, VContainer *data, cons mainLine = new QGraphicsLineItem(QLineF(point1 - point2, QPointF()), this); mainLine->setPen(QPen(Qt::black, widthHairLine)); mainLine->setFlag(QGraphicsItem::ItemStacksBehindParent, true); - if(typeLine == "none"){ + if(typeLine == TypeLineNone){ mainLine->setVisible(false); } else { mainLine->setVisible(true); @@ -44,13 +44,9 @@ void VModelingLinePoint::RefreshGeometry(){ QPointF point = VModelingTool::data.GetModelingPoint(id).toQPointF(); QPointF basePoint = VModelingTool::data.GetModelingPoint(basePointId).toQPointF(); mainLine->setLine(QLineF(basePoint - point, QPointF())); - if(typeLine == "none"){ + if(typeLine == TypeLineNone){ mainLine->setVisible(false); } else { mainLine->setVisible(true); } } - -void VModelingLinePoint::RemoveReferens(){ - doc->DecrementReferens(basePointId); -} diff --git a/tools/modelingTools/vmodelinglinepoint.h b/tools/modelingTools/vmodelinglinepoint.h index 762ce1fc5..2fc252b99 100644 --- a/tools/modelingTools/vmodelinglinepoint.h +++ b/tools/modelingTools/vmodelinglinepoint.h @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -27,9 +27,8 @@ class VModelingLinePoint : public VModelingPoint{ Q_OBJECT public: - VModelingLinePoint(VDomDocument *doc, VContainer *data, const qint64 &id, - const QString &typeLine, const QString &formula, - const qint64 &basePointId, const qreal &angle, + VModelingLinePoint(VDomDocument *doc, VContainer *data, const qint64 &id, const QString &typeLine, + const QString &formula, const qint64 &basePointId, const qreal &angle, QGraphicsItem * parent = 0); protected: QString typeLine; @@ -38,7 +37,7 @@ protected: qint64 basePointId; QGraphicsLineItem *mainLine; virtual void RefreshGeometry(); - virtual void RemoveReferens(); + virtual void RemoveReferens() {doc->DecrementReferens(basePointId);} private: Q_DISABLE_COPY(VModelingLinePoint) }; diff --git a/tools/modelingTools/vmodelingnormal.cpp b/tools/modelingTools/vmodelingnormal.cpp index 55edddd10..c9a9c2cad 100644 --- a/tools/modelingTools/vmodelingnormal.cpp +++ b/tools/modelingTools/vmodelingnormal.cpp @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -20,6 +20,10 @@ ****************************************************************************/ #include "vmodelingnormal.h" +#include "../drawTools/vtoolnormal.h" +#include + +const QString VModelingNormal::ToolType = QStringLiteral("normal"); VModelingNormal::VModelingNormal(VDomDocument *doc, VContainer *data, const qint64 &id, const QString &typeLine, @@ -31,7 +35,6 @@ VModelingNormal::VModelingNormal(VDomDocument *doc, VContainer *data, const qint if(typeCreation == Tool::FromGui){ AddToFile(); } - } void VModelingNormal::setDialog(){ @@ -72,8 +75,8 @@ VModelingNormal *VModelingNormal::Create(const qint64 _id, const QString &formul QString errorMsg; qreal result = cal.eval(formula, &errorMsg); if(errorMsg.isEmpty()){ - QPointF fPoint = VModelingNormal::FindPoint(firstPoint.toQPointF(), secondPoint.toQPointF(), - result*PrintDPI/25.4, angle); + QPointF fPoint = VToolNormal::FindPoint(firstPoint.toQPointF(), secondPoint.toQPointF(), + toPixel(result), angle); qint64 id = _id; if(typeCreation == Tool::FromGui){ id = data->AddModelingPoint(VPointF(fPoint.x(), fPoint.y(), pointName, mx, my)); @@ -95,23 +98,14 @@ VModelingNormal *VModelingNormal::Create(const qint64 _id, const QString &formul return point; } -QPointF VModelingNormal::FindPoint(const QPointF &firstPoint, const QPointF &secondPoint, const qreal &length, - const qreal &angle){ - QLineF line(firstPoint, secondPoint); - QLineF normal = line.normalVector(); - normal.setAngle(normal.angle()+angle); - normal.setLength(length); - return normal.p2(); -} - void VModelingNormal::FullUpdateFromFile(){ QDomElement domElement = doc->elementById(QString().setNum(id)); if(domElement.isElement()){ - typeLine = domElement.attribute("typeLine", ""); - formula = domElement.attribute("length", ""); - basePointId = domElement.attribute("firstPoint", "").toLongLong(); - secondPointId = domElement.attribute("secondPoint", "").toLongLong(); - angle = domElement.attribute("angle", "").toInt(); + typeLine = domElement.attribute(AttrTypeLine, ""); + formula = domElement.attribute(AttrLength, ""); + basePointId = domElement.attribute(AttrFirstPoint, "").toLongLong(); + secondPointId = domElement.attribute(AttrSecondPoint, "").toLongLong(); + angle = domElement.attribute(AttrAngle, "").toInt(); } RefreshGeometry(); } @@ -120,12 +114,12 @@ void VModelingNormal::FullUpdateFromGui(int result){ if(result == QDialog::Accepted){ QDomElement domElement = doc->elementById(QString().setNum(id)); if(domElement.isElement()){ - domElement.setAttribute("name", dialogNormal->getPointName()); - domElement.setAttribute("typeLine", dialogNormal->getTypeLine()); - domElement.setAttribute("length", dialogNormal->getFormula()); - domElement.setAttribute("angle", QString().setNum(dialogNormal->getAngle())); - domElement.setAttribute("firstPoint", QString().setNum(dialogNormal->getFirstPointId())); - domElement.setAttribute("secondPoint", QString().setNum(dialogNormal->getSecondPointId())); + domElement.setAttribute(AttrName, dialogNormal->getPointName()); + domElement.setAttribute(AttrTypeLine, dialogNormal->getTypeLine()); + domElement.setAttribute(AttrLength, dialogNormal->getFormula()); + domElement.setAttribute(AttrAngle, QString().setNum(dialogNormal->getAngle())); + domElement.setAttribute(AttrFirstPoint, QString().setNum(dialogNormal->getFirstPointId())); + domElement.setAttribute(AttrSecondPoint, QString().setNum(dialogNormal->getSecondPointId())); emit FullUpdateTree(); } } @@ -138,19 +132,19 @@ void VModelingNormal::contextMenuEvent(QGraphicsSceneContextMenuEvent *event){ void VModelingNormal::AddToFile(){ VPointF point = VAbstractTool::data.GetModelingPoint(id); - QDomElement domElement = doc->createElement("point"); + QDomElement domElement = doc->createElement(TagName); - AddAttribute(domElement, "id", id); - AddAttribute(domElement, "type", "normal"); - AddAttribute(domElement, "name", point.name()); - AddAttribute(domElement, "mx", point.mx()/PrintDPI*25.4); - AddAttribute(domElement, "my", point.my()/PrintDPI*25.4); + AddAttribute(domElement, AttrId, id); + AddAttribute(domElement, AttrType, ToolType); + AddAttribute(domElement, AttrName, point.name()); + AddAttribute(domElement, AttrMx, toMM(point.mx())); + AddAttribute(domElement, AttrMy, toMM(point.my())); - AddAttribute(domElement, "typeLine", typeLine); - AddAttribute(domElement, "length", formula); - AddAttribute(domElement, "angle", angle); - AddAttribute(domElement, "firstPoint", basePointId); - AddAttribute(domElement, "secondPoint", secondPointId); + AddAttribute(domElement, AttrTypeLine, typeLine); + AddAttribute(domElement, AttrLength, formula); + AddAttribute(domElement, AttrAngle, angle); + AddAttribute(domElement, AttrFirstPoint, basePointId); + AddAttribute(domElement, AttrSecondPoint, secondPointId); AddToModeling(domElement); } diff --git a/tools/modelingTools/vmodelingnormal.h b/tools/modelingTools/vmodelingnormal.h index 906aa797f..c1ef9c146 100644 --- a/tools/modelingTools/vmodelingnormal.h +++ b/tools/modelingTools/vmodelingnormal.h @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -28,30 +28,26 @@ class VModelingNormal : public VModelingLinePoint{ Q_OBJECT public: - VModelingNormal(VDomDocument *doc, VContainer *data, const qint64 &id, - const QString &typeLine, const QString &formula, - const qreal &angle, const qint64 &firstPointId, - const qint64 &secondPointId, Tool::Sources typeCreation, - QGraphicsItem * parent = 0); - virtual void setDialog(); - static VModelingNormal* Create(QSharedPointer &dialog, VDomDocument *doc, - VContainer *data); - static VModelingNormal* Create(const qint64 _id, const QString &formula, const qint64 &firstPointId, - const qint64 &secondPointId, const QString typeLine, - const QString pointName, const qreal angle, const qreal &mx, - const qreal &my, VDomDocument *doc, VContainer *data, - const Document::Documents &parse, Tool::Sources typeCreation); - static QPointF FindPoint(const QPointF &firstPoint, const QPointF &secondPoint, - const qreal &length, const qreal &angle = 0); + VModelingNormal(VDomDocument *doc, VContainer *data, const qint64 &id, + const QString &typeLine, const QString &formula, const qreal &angle, + const qint64 &firstPointId, const qint64 &secondPointId, + Tool::Sources typeCreation, QGraphicsItem * parent = 0); + virtual void setDialog(); + static VModelingNormal* Create(QSharedPointer &dialog, VDomDocument *doc, VContainer *data); + static VModelingNormal* Create(const qint64 _id, const QString &formula, const qint64 &firstPointId, + const qint64 &secondPointId, const QString typeLine, const QString pointName, + const qreal angle, const qreal &mx, const qreal &my, VDomDocument *doc, + VContainer *data, const Document::Documents &parse, Tool::Sources typeCreation); + static const QString ToolType; public slots: - virtual void FullUpdateFromFile(); - virtual void FullUpdateFromGui(int result); + virtual void FullUpdateFromFile(); + virtual void FullUpdateFromGui(int result); protected: - virtual void contextMenuEvent ( QGraphicsSceneContextMenuEvent * event ); - virtual void AddToFile(); - virtual void RemoveReferens(); + virtual void contextMenuEvent ( QGraphicsSceneContextMenuEvent * event ); + virtual void AddToFile(); + virtual void RemoveReferens(); private: - qint64 secondPointId; + qint64 secondPointId; QSharedPointer dialogNormal; }; diff --git a/tools/modelingTools/vmodelingpoint.cpp b/tools/modelingTools/vmodelingpoint.cpp index a6222e27b..4bb1741fa 100644 --- a/tools/modelingTools/vmodelingpoint.cpp +++ b/tools/modelingTools/vmodelingpoint.cpp @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -20,12 +20,10 @@ ****************************************************************************/ #include "vmodelingpoint.h" -#include -#include -#include -#include #include "container/vpointf.h" +const QString VModelingPoint::TagName = QStringLiteral("point"); + VModelingPoint::VModelingPoint(VDomDocument *doc, VContainer *data, qint64 id, QGraphicsItem *parent):VModelingTool(doc, data, id), QGraphicsEllipseItem(parent), radius(toPixel(1.5)), namePoint(0), lineName(0){ @@ -53,8 +51,8 @@ void VModelingPoint::NameChangePosition(const QPointF pos){ void VModelingPoint::UpdateNamePosition(qreal mx, qreal my){ QDomElement domElement = doc->elementById(QString().setNum(id)); if(domElement.isElement()){ - domElement.setAttribute("mx", QString().setNum(toMM(mx))); - domElement.setAttribute("my", QString().setNum(toMM(my))); + domElement.setAttribute(AttrMx, QString().setNum(toMM(mx))); + domElement.setAttribute(AttrMy, QString().setNum(toMM(my))); emit toolhaveChange(); } } @@ -102,6 +100,3 @@ void VModelingPoint::RefreshLine(){ lineName->setVisible(true); } } - -VModelingPoint::~VModelingPoint(){ -} diff --git a/tools/modelingTools/vmodelingpoint.h b/tools/modelingTools/vmodelingpoint.h index e3bef5073..03a8abe6c 100644 --- a/tools/modelingTools/vmodelingpoint.h +++ b/tools/modelingTools/vmodelingpoint.h @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -28,9 +28,9 @@ class VModelingPoint: public VModelingTool, public QGraphicsEllipseItem{ Q_OBJECT public: - VModelingPoint(VDomDocument *doc, VContainer *data, qint64 id, - QGraphicsItem * parent = 0); - virtual ~VModelingPoint(); + VModelingPoint(VDomDocument *doc, VContainer *data, qint64 id, QGraphicsItem * parent = 0); + virtual ~VModelingPoint() {} + static const QString TagName; public slots: void NameChangePosition(const QPointF pos); virtual void FullUpdateFromGui(int result) = 0; diff --git a/tools/modelingTools/vmodelingpointofcontact.cpp b/tools/modelingTools/vmodelingpointofcontact.cpp index 35d6e9c2e..11e9bd5ac 100644 --- a/tools/modelingTools/vmodelingpointofcontact.cpp +++ b/tools/modelingTools/vmodelingpointofcontact.cpp @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -20,6 +20,10 @@ ****************************************************************************/ #include "vmodelingpointofcontact.h" +#include "../drawTools/vtoolpointofcontact.h" +#include + +const QString VModelingPointOfContact::ToolType = QStringLiteral("pointOfContact"); VModelingPointOfContact::VModelingPointOfContact(VDomDocument *doc, VContainer *data, const qint64 &id, const QString &radius, const qint64 ¢er, @@ -45,28 +49,6 @@ void VModelingPointOfContact::setDialog(){ } } -QPointF VModelingPointOfContact::FindPoint(const qreal &radius, const QPointF ¢er, const QPointF &firstPoint, - const QPointF &secondPoint){ - QPointF pArc; - qreal s = 0.0, s_x, s_y, step = 0.01, distans; - while( s < 1){ - s_x = secondPoint.x()-(qAbs(secondPoint.x()-firstPoint.x()))*s; - s_y = secondPoint.y()-(qAbs(secondPoint.y()-firstPoint.y()))*s; - distans = QLineF(center.x(), center.y(), s_x, s_y).length(); - if(ceil(distans*10) == ceil(radius*10)){ - pArc.rx() = s_x; - pArc.ry() = s_y; - break; - } - if(distans &dialog, VDomDocument *doc, VContainer *data){ QString radius = dialog->getRadius(); @@ -94,8 +76,8 @@ VModelingPointOfContact *VModelingPointOfContact::Create(const qint64 _id, const QString errorMsg; qreal result = cal.eval(radius, &errorMsg); if(errorMsg.isEmpty()){ - QPointF fPoint = VModelingPointOfContact::FindPoint(result*PrintDPI/25.4, centerP.toQPointF(), - firstP.toQPointF(), secondP.toQPointF()); + QPointF fPoint = VToolPointOfContact::FindPoint(toPixel(result), centerP.toQPointF(), + firstP.toQPointF(), secondP.toQPointF()); qint64 id = _id; if(typeCreation == Tool::FromGui){ id = data->AddModelingPoint(VPointF(fPoint.x(), fPoint.y(), pointName, mx, my)); @@ -120,10 +102,10 @@ VModelingPointOfContact *VModelingPointOfContact::Create(const qint64 _id, const void VModelingPointOfContact::FullUpdateFromFile(){ QDomElement domElement = doc->elementById(QString().setNum(id)); if(domElement.isElement()){ - radius = domElement.attribute("radius", ""); - center = domElement.attribute("center", "").toLongLong(); - firstPointId = domElement.attribute("firstPoint", "").toLongLong(); - secondPointId = domElement.attribute("secondPoint", "").toLongLong(); + radius = domElement.attribute(AttrRadius, ""); + center = domElement.attribute(AttrCenter, "").toLongLong(); + firstPointId = domElement.attribute(AttrFirstPoint, "").toLongLong(); + secondPointId = domElement.attribute(AttrSecondPoint, "").toLongLong(); } RefreshPointGeometry(VAbstractTool::data.GetModelingPoint(id)); } @@ -132,11 +114,11 @@ void VModelingPointOfContact::FullUpdateFromGui(int result){ if(result == QDialog::Accepted){ QDomElement domElement = doc->elementById(QString().setNum(id)); if(domElement.isElement()){ - domElement.setAttribute("name", dialogPointOfContact->getPointName()); - domElement.setAttribute("radius", dialogPointOfContact->getRadius()); - domElement.setAttribute("center", QString().setNum(dialogPointOfContact->getCenter())); - domElement.setAttribute("firstPoint", QString().setNum(dialogPointOfContact->getFirstPoint())); - domElement.setAttribute("secondPoint", QString().setNum(dialogPointOfContact->getSecondPoint())); + domElement.setAttribute(AttrName, dialogPointOfContact->getPointName()); + domElement.setAttribute(AttrRadius, dialogPointOfContact->getRadius()); + domElement.setAttribute(AttrCenter, QString().setNum(dialogPointOfContact->getCenter())); + domElement.setAttribute(AttrFirstPoint, QString().setNum(dialogPointOfContact->getFirstPoint())); + domElement.setAttribute(AttrSecondPoint, QString().setNum(dialogPointOfContact->getSecondPoint())); emit FullUpdateTree(); } } @@ -149,18 +131,18 @@ void VModelingPointOfContact::contextMenuEvent(QGraphicsSceneContextMenuEvent *e void VModelingPointOfContact::AddToFile(){ VPointF point = VAbstractTool::data.GetModelingPoint(id); - QDomElement domElement = doc->createElement("point"); + QDomElement domElement = doc->createElement(TagName); - AddAttribute(domElement, "id", id); - AddAttribute(domElement, "type", "pointOfContact"); - AddAttribute(domElement, "name", point.name()); - AddAttribute(domElement, "mx", point.mx()/PrintDPI*25.4); - AddAttribute(domElement, "my", point.my()/PrintDPI*25.4); + AddAttribute(domElement, AttrId, id); + AddAttribute(domElement, AttrType, ToolType); + AddAttribute(domElement, AttrName, point.name()); + AddAttribute(domElement, AttrMx, toMM(point.mx())); + AddAttribute(domElement, AttrMy, toMM(point.my())); - AddAttribute(domElement, "radius", radius); - AddAttribute(domElement, "center", center); - AddAttribute(domElement, "firstPoint", firstPointId); - AddAttribute(domElement, "secondPoint", secondPointId); + AddAttribute(domElement, AttrRadius, radius); + AddAttribute(domElement, AttrCenter, center); + AddAttribute(domElement, AttrFirstPoint, firstPointId); + AddAttribute(domElement, AttrSecondPoint, secondPointId); AddToModeling(domElement); } diff --git a/tools/modelingTools/vmodelingpointofcontact.h b/tools/modelingTools/vmodelingpointofcontact.h index 02302bc45..6eebac9ec 100644 --- a/tools/modelingTools/vmodelingpointofcontact.h +++ b/tools/modelingTools/vmodelingpointofcontact.h @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -28,35 +28,31 @@ class VModelingPointOfContact : public VModelingPoint{ Q_OBJECT public: - VModelingPointOfContact(VDomDocument *doc, VContainer *data, - const qint64 &id, const QString &radius, - const qint64 ¢er, - const qint64 &firstPointId, - const qint64 &secondPointId, - Tool::Sources typeCreation, - QGraphicsItem * parent = 0); - virtual void setDialog(); - static QPointF FindPoint(const qreal &radius, const QPointF ¢er, - const QPointF &firstPoint, const QPointF &secondPoint); - static VModelingPointOfContact* Create(QSharedPointer &dialog, - VDomDocument *doc, VContainer *data); - static VModelingPointOfContact* Create(const qint64 _id, const QString &radius, const qint64 ¢er, - const qint64 &firstPointId, const qint64 &secondPointId, - const QString &pointName, const qreal &mx, const qreal &my, - VDomDocument *doc, VContainer *data, - const Document::Documents &parse, Tool::Sources typeCreation); + VModelingPointOfContact(VDomDocument *doc, VContainer *data, const qint64 &id, + const QString &radius, const qint64 ¢er, + const qint64 &firstPointId, const qint64 &secondPointId, + Tool::Sources typeCreation, QGraphicsItem * parent = 0); + virtual void setDialog(); + static VModelingPointOfContact* Create(QSharedPointer &dialog, VDomDocument *doc, + VContainer *data); + static VModelingPointOfContact* Create(const qint64 _id, const QString &radius, const qint64 ¢er, + const qint64 &firstPointId, const qint64 &secondPointId, + const QString &pointName, const qreal &mx, const qreal &my, + VDomDocument *doc, VContainer *data, + const Document::Documents &parse, Tool::Sources typeCreation); + static const QString ToolType; public slots: - virtual void FullUpdateFromFile(); - virtual void FullUpdateFromGui(int result); + virtual void FullUpdateFromFile(); + virtual void FullUpdateFromGui(int result); protected: - virtual void contextMenuEvent ( QGraphicsSceneContextMenuEvent * event ); - virtual void AddToFile(); - virtual void RemoveReferens(); + virtual void contextMenuEvent ( QGraphicsSceneContextMenuEvent * event ); + virtual void AddToFile(); + virtual void RemoveReferens(); private: - QString radius; - qint64 center; - qint64 firstPointId; - qint64 secondPointId; + QString radius; + qint64 center; + qint64 firstPointId; + qint64 secondPointId; QSharedPointer dialogPointOfContact; }; diff --git a/tools/modelingTools/vmodelingpointofintersection.cpp b/tools/modelingTools/vmodelingpointofintersection.cpp new file mode 100644 index 000000000..e22e97c7b --- /dev/null +++ b/tools/modelingTools/vmodelingpointofintersection.cpp @@ -0,0 +1,107 @@ +#include "vmodelingpointofintersection.h" + +const QString VModelingPointOfIntersection::ToolType = QStringLiteral("pointOfIntersection"); + +VModelingPointOfIntersection::VModelingPointOfIntersection(VDomDocument *doc, VContainer *data, const qint64 &id, + const qint64 &firstPointId, const qint64 &secondPointId, + Tool::Sources typeCreation, QGraphicsItem *parent) + :VModelingPoint(doc, data, id, parent), firstPointId(firstPointId), secondPointId(secondPointId), + dialogPointOfIntersection(QSharedPointer()) { + ignoreFullUpdate = true; + if(typeCreation == Tool::FromGui){ + AddToFile(); + } +} + +void VModelingPointOfIntersection::setDialog(){ + Q_ASSERT(!dialogPointOfIntersection.isNull()); + VPointF p = VAbstractTool::data.GetPoint(id); + dialogPointOfIntersection->setFirstPointId(firstPointId, id); + dialogPointOfIntersection->setSecondPointId(secondPointId, id); + dialogPointOfIntersection->setPointName(p.name()); +} + +VModelingPointOfIntersection *VModelingPointOfIntersection::Create(QSharedPointer &dialog, + VDomDocument *doc, VContainer *data){ + qint64 firstPointId = dialog->getFirstPointId(); + qint64 secondPointId = dialog->getSecondPointId(); + QString pointName = dialog->getPointName(); + return Create(0, pointName, firstPointId, secondPointId, 5, 10, doc, data, Document::FullParse, Tool::FromGui); +} + +VModelingPointOfIntersection *VModelingPointOfIntersection::Create(const qint64 _id, const QString &pointName, + const qint64 &firstPointId, + const qint64 &secondPointId, const qreal &mx, + const qreal &my, VDomDocument *doc, + VContainer *data, + const Document::Documents &parse, + Tool::Sources typeCreation){ + VModelingPointOfIntersection *tool = 0; + VPointF firstPoint = data->GetPoint(firstPointId); + VPointF secondPoint = data->GetPoint(secondPointId); + + QPointF point(firstPoint.x(), secondPoint.y()); + qint64 id = _id; + if(typeCreation == Tool::FromGui){ + id = data->AddPoint(VPointF(point.x(), point.y(), pointName, mx, my)); + } else { + data->UpdatePoint(id, VPointF(point.x(), point.y(), pointName, mx, my)); + if(parse != Document::FullParse){ + doc->UpdateToolData(id, data); + } + } + if(parse == Document::FullParse){ + tool = new VModelingPointOfIntersection(doc, data, id, firstPointId, secondPointId, typeCreation); + doc->AddTool(id, tool); + doc->IncrementReferens(firstPointId); + doc->IncrementReferens(secondPointId); + } + return tool; +} + +void VModelingPointOfIntersection::FullUpdateFromFile(){ + QDomElement domElement = doc->elementById(QString().setNum(id)); + if(domElement.isElement()){ + firstPointId = domElement.attribute(AttrFirstPoint, "").toLongLong(); + secondPointId = domElement.attribute(AttrSecondPoint, "").toLongLong(); + } + VModelingPoint::RefreshPointGeometry(VModelingTool::data.GetPoint(id)); +} + +void VModelingPointOfIntersection::FullUpdateFromGui(int result){ + if(result == QDialog::Accepted){ + QDomElement domElement = doc->elementById(QString().setNum(id)); + if(domElement.isElement()){ + domElement.setAttribute(AttrName, dialogPointOfIntersection->getPointName()); + domElement.setAttribute(AttrFirstPoint, QString().setNum(dialogPointOfIntersection->getFirstPointId())); + domElement.setAttribute(AttrSecondPoint, QString().setNum(dialogPointOfIntersection->getSecondPointId())); + emit FullUpdateTree(); + } + } + dialogPointOfIntersection.clear(); +} + +void VModelingPointOfIntersection::RemoveReferens(){ + doc->DecrementReferens(firstPointId); + doc->DecrementReferens(secondPointId); +} + +void VModelingPointOfIntersection::contextMenuEvent(QGraphicsSceneContextMenuEvent *event){ + ContextMenu(dialogPointOfIntersection, this, event); +} + +void VModelingPointOfIntersection::AddToFile(){ + VPointF point = VAbstractTool::data.GetPoint(id); + QDomElement domElement = doc->createElement(TagName); + + AddAttribute(domElement, AttrId, id); + AddAttribute(domElement, AttrType, ToolType); + AddAttribute(domElement, AttrName, point.name()); + AddAttribute(domElement, AttrMx, toMM(point.mx())); + AddAttribute(domElement, AttrMy, toMM(point.my())); + + AddAttribute(domElement, AttrFirstPoint, firstPointId); + AddAttribute(domElement, AttrSecondPoint, secondPointId); + + AddToModeling(domElement); +} diff --git a/tools/modelingTools/vmodelingpointofintersection.h b/tools/modelingTools/vmodelingpointofintersection.h new file mode 100644 index 000000000..b2c00f4f2 --- /dev/null +++ b/tools/modelingTools/vmodelingpointofintersection.h @@ -0,0 +1,36 @@ +#ifndef VMODELINGPOINTOFINTERSECTION_H +#define VMODELINGPOINTOFINTERSECTION_H + +#include "vmodelingpoint.h" +#include "dialogs/dialogpointofintersection.h" + +class VModelingPointOfIntersection : public VModelingPoint{ + Q_OBJECT +public: + VModelingPointOfIntersection(VDomDocument *doc, VContainer *data, const qint64 &id, + const qint64 &firstPointId, const qint64 &secondPointId, + Tool::Sources typeCreation, QGraphicsItem * parent = 0); + virtual void setDialog(); + static VModelingPointOfIntersection* Create(QSharedPointer &dialog, VDomDocument *doc, + VContainer *data); + static VModelingPointOfIntersection* Create(const qint64 _id, const QString &pointName, + const qint64 &firstPointId, const qint64 &secondPointId, + const qreal &mx, const qreal &my, VDomDocument *doc, + VContainer *data, const Document::Documents &parse, + Tool::Sources typeCreation); + static const QString ToolType; +public slots: + virtual void FullUpdateFromFile(); + virtual void FullUpdateFromGui(int result); +protected: + virtual void RemoveReferens(); + virtual void contextMenuEvent ( QGraphicsSceneContextMenuEvent * event ); + virtual void AddToFile(); +private: + Q_DISABLE_COPY(VModelingPointOfIntersection) + qint64 firstPointId; + qint64 secondPointId; + QSharedPointer dialogPointOfIntersection; +}; + +#endif // VMODELINGPOINTOFINTERSECTION_H diff --git a/tools/modelingTools/vmodelingshoulderpoint.cpp b/tools/modelingTools/vmodelingshoulderpoint.cpp index d96b5ccdf..d0f32ebfb 100644 --- a/tools/modelingTools/vmodelingshoulderpoint.cpp +++ b/tools/modelingTools/vmodelingshoulderpoint.cpp @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -20,7 +20,10 @@ ****************************************************************************/ #include "vmodelingshoulderpoint.h" -#include +#include "../drawTools/vtoolshoulderpoint.h" +#include + +const QString VModelingShoulderPoint::ToolType = QStringLiteral("shoulder"); VModelingShoulderPoint::VModelingShoulderPoint(VDomDocument *doc, VContainer *data, const qint64 &id, const QString &typeLine, const QString &formula, const qint64 &p1Line, @@ -32,7 +35,6 @@ VModelingShoulderPoint::VModelingShoulderPoint(VDomDocument *doc, VContainer *da if(typeCreation == Tool::FromGui){ AddToFile(); } - } void VModelingShoulderPoint::setDialog(){ @@ -48,27 +50,6 @@ void VModelingShoulderPoint::setDialog(){ } } -QPointF VModelingShoulderPoint::FindPoint(const QPointF &p1Line, const QPointF &p2Line, const QPointF &pShoulder, - const qreal &length){ - QLineF line = QLineF(p1Line, p2Line); - qreal dist = line.length(); - if(dist>length){ - qDebug()<<"A3П2="<=length){ - return line.p2(); - } - } -} - VModelingShoulderPoint *VModelingShoulderPoint::Create(QSharedPointer &dialog, VDomDocument *doc, VContainer *data){ QString formula = dialog->getFormula(); @@ -97,8 +78,8 @@ VModelingShoulderPoint *VModelingShoulderPoint::Create(const qint64 _id, const Q QString errorMsg; qreal result = cal.eval(formula, &errorMsg); if(errorMsg.isEmpty()){ - QPointF fPoint = VModelingShoulderPoint::FindPoint(firstPoint.toQPointF(), secondPoint.toQPointF(), - shoulderPoint.toQPointF(), result*PrintDPI/25.4); + QPointF fPoint = VToolShoulderPoint::FindPoint(firstPoint.toQPointF(), secondPoint.toQPointF(), + shoulderPoint.toQPointF(), toPixel(result)); qint64 id = _id; if(typeCreation == Tool::FromGui){ id = data->AddModelingPoint(VPointF(fPoint.x(), fPoint.y(), pointName, mx, my)); @@ -125,11 +106,11 @@ VModelingShoulderPoint *VModelingShoulderPoint::Create(const qint64 _id, const Q void VModelingShoulderPoint::FullUpdateFromFile(){ QDomElement domElement = doc->elementById(QString().setNum(id)); if(domElement.isElement()){ - typeLine = domElement.attribute("typeLine", ""); - formula = domElement.attribute("length", ""); - basePointId = domElement.attribute("p1Line", "").toLongLong(); - p2Line = domElement.attribute("p2Line", "").toLongLong(); - pShoulder = domElement.attribute("pShoulder", "").toLongLong(); + typeLine = domElement.attribute(AttrTypeLine, ""); + formula = domElement.attribute(AttrLength, ""); + basePointId = domElement.attribute(AttrP1Line, "").toLongLong(); + p2Line = domElement.attribute(AttrP2Line, "").toLongLong(); + pShoulder = domElement.attribute(AttrPShoulder, "").toLongLong(); } RefreshGeometry(); } @@ -138,12 +119,12 @@ void VModelingShoulderPoint::FullUpdateFromGui(int result){ if(result == QDialog::Accepted){ QDomElement domElement = doc->elementById(QString().setNum(id)); if(domElement.isElement()){ - domElement.setAttribute("name", dialogShoulderPoint->getPointName()); - domElement.setAttribute("typeLine", dialogShoulderPoint->getTypeLine()); - domElement.setAttribute("length", dialogShoulderPoint->getFormula()); - domElement.setAttribute("p1Line", QString().setNum(dialogShoulderPoint->getP1Line())); - domElement.setAttribute("p2Line", QString().setNum(dialogShoulderPoint->getP2Line())); - domElement.setAttribute("pShoulder", QString().setNum(dialogShoulderPoint->getPShoulder())); + domElement.setAttribute(AttrName, dialogShoulderPoint->getPointName()); + domElement.setAttribute(AttrTypeLine, dialogShoulderPoint->getTypeLine()); + domElement.setAttribute(AttrLength, dialogShoulderPoint->getFormula()); + domElement.setAttribute(AttrP1Line, QString().setNum(dialogShoulderPoint->getP1Line())); + domElement.setAttribute(AttrP2Line, QString().setNum(dialogShoulderPoint->getP2Line())); + domElement.setAttribute(AttrPShoulder, QString().setNum(dialogShoulderPoint->getPShoulder())); emit FullUpdateTree(); } } @@ -156,19 +137,19 @@ void VModelingShoulderPoint::contextMenuEvent(QGraphicsSceneContextMenuEvent *ev void VModelingShoulderPoint::AddToFile(){ VPointF point = VAbstractTool::data.GetModelingPoint(id); - QDomElement domElement = doc->createElement("point"); + QDomElement domElement = doc->createElement(TagName); - AddAttribute(domElement, "id", id); - AddAttribute(domElement, "type", "shoulder"); - AddAttribute(domElement, "name", point.name()); - AddAttribute(domElement, "mx", point.mx()/PrintDPI*25.4); - AddAttribute(domElement, "my", point.my()/PrintDPI*25.4); + AddAttribute(domElement, AttrId, id); + AddAttribute(domElement, AttrType, ToolType); + AddAttribute(domElement, AttrName, point.name()); + AddAttribute(domElement, AttrMx, toMM(point.mx())); + AddAttribute(domElement, AttrMy, toMM(point.my())); - AddAttribute(domElement, "typeLine", typeLine); - AddAttribute(domElement, "length", formula); - AddAttribute(domElement, "p1Line", basePointId); - AddAttribute(domElement, "p2Line", p2Line); - AddAttribute(domElement, "pShoulder", pShoulder); + AddAttribute(domElement, AttrTypeLine, typeLine); + AddAttribute(domElement, AttrLength, formula); + AddAttribute(domElement, AttrP1Line, basePointId); + AddAttribute(domElement, AttrP2Line, p2Line); + AddAttribute(domElement, AttrPShoulder, pShoulder); AddToModeling(domElement); } diff --git a/tools/modelingTools/vmodelingshoulderpoint.h b/tools/modelingTools/vmodelingshoulderpoint.h index 399c95868..a9cee71cd 100644 --- a/tools/modelingTools/vmodelingshoulderpoint.h +++ b/tools/modelingTools/vmodelingshoulderpoint.h @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -28,33 +28,29 @@ class VModelingShoulderPoint : public VModelingLinePoint{ Q_OBJECT public: - VModelingShoulderPoint(VDomDocument *doc, VContainer *data, - const qint64 &id, const QString &typeLine, - const QString &formula, const qint64 &p1Line, - const qint64 &p2Line, const qint64 &pShoulder, - Tool::Sources typeCreation, - QGraphicsItem * parent = 0); - virtual void setDialog(); - static QPointF FindPoint(const QPointF &p1Line, const QPointF &p2Line, - const QPointF &pShoulder, const qreal &length); - static VModelingShoulderPoint* Create(QSharedPointer &dialog, - VDomDocument *doc, VContainer *data); - static VModelingShoulderPoint* Create(const qint64 _id, const QString &formula, const qint64 &p1Line, - const qint64 &p2Line, const qint64 &pShoulder, - const QString &typeLine, const QString &pointName, - const qreal &mx, const qreal &my, VDomDocument *doc, - VContainer *data, const Document::Documents &parse, - const Tool::Sources &typeCreation); + VModelingShoulderPoint(VDomDocument *doc, VContainer *data, const qint64 &id, const QString &typeLine, + const QString &formula, const qint64 &p1Line, const qint64 &p2Line, + const qint64 &pShoulder, Tool::Sources typeCreation, + QGraphicsItem * parent = 0); + virtual void setDialog(); + static VModelingShoulderPoint* Create(QSharedPointer &dialog, VDomDocument *doc, + VContainer *data); + static VModelingShoulderPoint* Create(const qint64 _id, const QString &formula, const qint64 &p1Line, + const qint64 &p2Line, const qint64 &pShoulder, const QString &typeLine, + const QString &pointName, const qreal &mx, const qreal &my, VDomDocument *doc, + VContainer *data, const Document::Documents &parse, + const Tool::Sources &typeCreation); + static const QString ToolType; public slots: - virtual void FullUpdateFromFile(); - virtual void FullUpdateFromGui(int result); + virtual void FullUpdateFromFile(); + virtual void FullUpdateFromGui(int result); protected: - virtual void contextMenuEvent ( QGraphicsSceneContextMenuEvent * event ); - virtual void AddToFile(); - virtual void RemoveReferens(); + virtual void contextMenuEvent ( QGraphicsSceneContextMenuEvent * event ); + virtual void AddToFile(); + virtual void RemoveReferens(); private: - qint64 p2Line; - qint64 pShoulder; + qint64 p2Line; + qint64 pShoulder; QSharedPointer dialogShoulderPoint; }; diff --git a/tools/modelingTools/vmodelingspline.cpp b/tools/modelingTools/vmodelingspline.cpp index ddefbc81d..4cd48e3c8 100644 --- a/tools/modelingTools/vmodelingspline.cpp +++ b/tools/modelingTools/vmodelingspline.cpp @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -20,16 +20,15 @@ ****************************************************************************/ #include "vmodelingspline.h" -#include -#include #include "geometry/vspline.h" +const QString VModelingSpline::TagName = QStringLiteral("spline"); +const QString VModelingSpline::ToolType = QStringLiteral("simple"); -VModelingSpline::VModelingSpline(VDomDocument *doc, VContainer *data, qint64 id, - Tool::Sources typeCreation, - QGraphicsItem *parent):VModelingTool(doc, data, id), QGraphicsPathItem(parent), +VModelingSpline::VModelingSpline(VDomDocument *doc, VContainer *data, qint64 id, Tool::Sources typeCreation, + QGraphicsItem *parent):VModelingTool(doc, data, id), QGraphicsPathItem(parent), dialogSpline(QSharedPointer()), controlPoints(QVector()){ - + ignoreFullUpdate = true; VSpline spl = data->GetModelingSpline(id); QPainterPath path; path.addPath(spl.GetPath()); @@ -102,7 +101,7 @@ VModelingSpline *VModelingSpline::Create(const qint64 _id, const qint64 &p1, con doc->UpdateToolData(id, data); } } - data->AddLengthSpline(data->GetNameSpline(p1, p4, Draw::Modeling), spline.GetLength()); + data->AddLengthSpline(data->GetNameSpline(p1, p4, Draw::Modeling), toMM(spline.GetLength())); if(parse == Document::FullParse){ spl = new VModelingSpline(doc, data, id, typeCreation); doc->AddTool(id, spl); @@ -138,13 +137,13 @@ void VModelingSpline::FullUpdateFromGui(int result){ dialogSpline->getKCurve()); QDomElement domElement = doc->elementById(QString().setNum(id)); if(domElement.isElement()){ - domElement.setAttribute("point1", QString().setNum(spl.GetP1())); - domElement.setAttribute("point4", QString().setNum(spl.GetP4())); - domElement.setAttribute("angle1", QString().setNum(spl.GetAngle1())); - domElement.setAttribute("angle2", QString().setNum(spl.GetAngle2())); - domElement.setAttribute("kAsm1", QString().setNum(spl.GetKasm1())); - domElement.setAttribute("kAsm2", QString().setNum(spl.GetKasm2())); - domElement.setAttribute("kCurve", QString().setNum(spl.GetKcurve())); + domElement.setAttribute(AttrPoint1, QString().setNum(spl.GetP1())); + domElement.setAttribute(AttrPoint4, QString().setNum(spl.GetP4())); + domElement.setAttribute(AttrAngle1, QString().setNum(spl.GetAngle1())); + domElement.setAttribute(AttrAngle2, QString().setNum(spl.GetAngle2())); + domElement.setAttribute(AttrKAsm1, QString().setNum(spl.GetKasm1())); + domElement.setAttribute(AttrKAsm2, QString().setNum(spl.GetKasm2())); + domElement.setAttribute(AttrKCurve, QString().setNum(spl.GetKcurve())); emit FullUpdateTree(); } } @@ -162,11 +161,11 @@ void VModelingSpline::ControlPointChangePosition(const qint32 &indexSpline, Spli } QDomElement domElement = doc->elementById(QString().setNum(id)); if(domElement.isElement()){ - domElement.setAttribute("angle1", QString().setNum(spl.GetAngle1())); - domElement.setAttribute("angle2", QString().setNum(spl.GetAngle2())); - domElement.setAttribute("kAsm1", QString().setNum(spl.GetKasm1())); - domElement.setAttribute("kAsm2", QString().setNum(spl.GetKasm2())); - domElement.setAttribute("kCurve", QString().setNum(spl.GetKcurve())); + domElement.setAttribute(AttrAngle1, QString().setNum(spl.GetAngle1())); + domElement.setAttribute(AttrAngle2, QString().setNum(spl.GetAngle2())); + domElement.setAttribute(AttrKAsm1, QString().setNum(spl.GetKasm1())); + domElement.setAttribute(AttrKAsm2, QString().setNum(spl.GetKasm2())); + domElement.setAttribute(AttrKCurve, QString().setNum(spl.GetKcurve())); emit FullUpdateTree(); } } @@ -177,17 +176,17 @@ void VModelingSpline::contextMenuEvent(QGraphicsSceneContextMenuEvent *event){ void VModelingSpline::AddToFile(){ VSpline spl = VAbstractTool::data.GetModelingSpline(id); - QDomElement domElement = doc->createElement("spline"); + QDomElement domElement = doc->createElement(TagName); - AddAttribute(domElement, "id", id); - AddAttribute(domElement, "type", "simple"); - AddAttribute(domElement, "point1", spl.GetP1()); - AddAttribute(domElement, "point4", spl.GetP4()); - AddAttribute(domElement, "angle1", spl.GetAngle1()); - AddAttribute(domElement, "angle2", spl.GetAngle2()); - AddAttribute(domElement, "kAsm1", spl.GetKasm1()); - AddAttribute(domElement, "kAsm2", spl.GetKasm2()); - AddAttribute(domElement, "kCurve", spl.GetKcurve()); + AddAttribute(domElement, AttrId, id); + AddAttribute(domElement, AttrType, ToolType); + AddAttribute(domElement, AttrPoint1, spl.GetP1()); + AddAttribute(domElement, AttrPoint4, spl.GetP4()); + AddAttribute(domElement, AttrAngle1, spl.GetAngle1()); + AddAttribute(domElement, AttrAngle2, spl.GetAngle2()); + AddAttribute(domElement, AttrKAsm1, spl.GetKasm1()); + AddAttribute(domElement, AttrKAsm2, spl.GetKasm2()); + AddAttribute(domElement, AttrKCurve, spl.GetKcurve()); AddToModeling(domElement); } diff --git a/tools/modelingTools/vmodelingspline.h b/tools/modelingTools/vmodelingspline.h index bffdb148b..b4417fb66 100644 --- a/tools/modelingTools/vmodelingspline.h +++ b/tools/modelingTools/vmodelingspline.h @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -31,37 +31,36 @@ class VModelingSpline:public VModelingTool, public QGraphicsPathItem{ Q_OBJECT public: - VModelingSpline (VDomDocument *doc, VContainer *data, qint64 id, - Tool::Sources typeCreation, QGraphicsItem * parent = 0 ); - virtual void setDialog(); - static VModelingSpline* Create(QSharedPointer &dialog, VDomDocument *doc, - VContainer *data); - static VModelingSpline* Create(const qint64 _id, const qint64 &p1, const qint64 &p4, - const qreal &kAsm1, const qreal kAsm2, const qreal &angle1, - const qreal &angle2, const qreal &kCurve, VDomDocument *doc, - VContainer *data, const Document::Documents &parse, - Tool::Sources typeCreation); + VModelingSpline (VDomDocument *doc, VContainer *data, qint64 id, Tool::Sources typeCreation, + QGraphicsItem * parent = 0 ); + virtual void setDialog(); + static VModelingSpline* Create(QSharedPointer &dialog, VDomDocument *doc, VContainer *data); + static VModelingSpline* Create(const qint64 _id, const qint64 &p1, const qint64 &p4, const qreal &kAsm1, + const qreal kAsm2, const qreal &angle1, const qreal &angle2, const qreal &kCurve, + VDomDocument *doc, VContainer *data, const Document::Documents &parse, + Tool::Sources typeCreation); + static const QString TagName; + static const QString ToolType; signals: - void RefreshLine ( const qint32 &indexSpline, SplinePoint::Position position, - const QPointF &controlPoint, const QPointF &splinePoint ); - void setEnabledPoint ( bool enable ); + void RefreshLine (const qint32 &indexSpline, SplinePoint::Position position, + const QPointF &controlPoint, const QPointF &splinePoint ); + void setEnabledPoint ( bool enable ); public slots: - virtual void FullUpdateFromFile (); - virtual void FullUpdateFromGui ( int result ); - void ControlPointChangePosition ( const qint32 &indexSpline, - SplinePoint::Position position, - const QPointF pos); + virtual void FullUpdateFromFile (); + virtual void FullUpdateFromGui ( int result ); + void ControlPointChangePosition (const qint32 &indexSpline, SplinePoint::Position position, + const QPointF pos); protected: - virtual void contextMenuEvent ( QGraphicsSceneContextMenuEvent * event ); - virtual void AddToFile (); - virtual void mouseReleaseEvent ( QGraphicsSceneMouseEvent * event ); - virtual void hoverMoveEvent ( QGraphicsSceneHoverEvent * event ); - virtual void hoverLeaveEvent ( QGraphicsSceneHoverEvent * event ); - virtual void RemoveReferens(); + virtual void contextMenuEvent ( QGraphicsSceneContextMenuEvent * event ); + virtual void AddToFile (); + virtual void mouseReleaseEvent ( QGraphicsSceneMouseEvent * event ); + virtual void hoverMoveEvent ( QGraphicsSceneHoverEvent * event ); + virtual void hoverLeaveEvent ( QGraphicsSceneHoverEvent * event ); + virtual void RemoveReferens(); private: - QSharedPointer dialogSpline; + QSharedPointer dialogSpline; QVector controlPoints; - void RefreshGeometry (); + void RefreshGeometry (); }; #endif // VMODELINGSPLINE_H diff --git a/tools/modelingTools/vmodelingsplinepath.cpp b/tools/modelingTools/vmodelingsplinepath.cpp index 2b024389a..04e1d5c01 100644 --- a/tools/modelingTools/vmodelingsplinepath.cpp +++ b/tools/modelingTools/vmodelingsplinepath.cpp @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -20,13 +20,16 @@ ****************************************************************************/ #include "vmodelingsplinepath.h" -#include + +const QString VModelingSplinePath::TagName = QStringLiteral("spline"); +const QString VModelingSplinePath::ToolType = QStringLiteral("path"); VModelingSplinePath::VModelingSplinePath(VDomDocument *doc, VContainer *data, qint64 id, Tool::Sources typeCreation, QGraphicsItem *parent):VModelingTool(doc, data, id), QGraphicsPathItem(parent), dialogSplinePath(QSharedPointer()), controlPoints(QVector()){ + ignoreFullUpdate = true; VSplinePath splPath = data->GetModelingSplinePath(id); QPainterPath path; path.addPath(splPath.GetPath()); @@ -89,7 +92,7 @@ VModelingSplinePath * VModelingSplinePath::Create(const qint64 _id, const VSplin doc->UpdateToolData(id, data); } } - data->AddLengthSpline(data->GetNameSplinePath(path), path.GetLength()); + data->AddLengthSpline(data->GetNameSplinePath(path), toMM(path.GetLength())); if(parse == Document::FullParse){ spl = new VModelingSplinePath(doc, data, id, typeCreation); doc->AddTool(id, spl); @@ -125,7 +128,7 @@ void VModelingSplinePath::FullUpdateFromGui(int result){ QDomElement domElement = doc->elementById(QString().setNum(id)); if(domElement.isElement()){ - domElement.setAttribute("kCurve", QString().setNum(splPath.getKCurve())); + domElement.setAttribute(AttrKCurve, QString().setNum(splPath.getKCurve())); UpdatePathPoint(domElement, splPath); emit FullUpdateTree(); } @@ -148,7 +151,7 @@ void VModelingSplinePath::ControlPointChangePosition(const qint32 &indexSpline, CorectControlPoints(spl, splPath, indexSpline); QDomElement domElement = doc->elementById(QString().setNum(id)); if(domElement.isElement()){ - domElement.setAttribute("kCurve", QString().setNum(splPath.getKCurve())); + domElement.setAttribute(AttrKCurve, QString().setNum(splPath.getKCurve())); UpdatePathPoint(domElement, splPath); emit FullUpdateTree(); } @@ -174,10 +177,10 @@ void VModelingSplinePath::UpdatePathPoint(QDomNode& node, VSplinePath &path){ QDomElement domElement = nodeList.at(i).toElement(); if(!domElement.isNull()){ VSplinePoint p = path[i]; - domElement.setAttribute("pSpline", QString().setNum(p.P())); - domElement.setAttribute("kAsm1", QString().setNum(p.KAsm1())); - domElement.setAttribute("kAsm2", QString().setNum(p.KAsm2())); - domElement.setAttribute("angle", QString().setNum(p.Angle2())); + domElement.setAttribute(AttrPSpline, QString().setNum(p.P())); + domElement.setAttribute(AttrKAsm1, QString().setNum(p.KAsm1())); + domElement.setAttribute(AttrKAsm2, QString().setNum(p.KAsm2())); + domElement.setAttribute(AttrAngle, QString().setNum(p.Angle2())); } } } @@ -188,11 +191,11 @@ void VModelingSplinePath::contextMenuEvent(QGraphicsSceneContextMenuEvent *event void VModelingSplinePath::AddToFile(){ VSplinePath splPath = VAbstractTool::data.GetModelingSplinePath(id); - QDomElement domElement = doc->createElement("spline"); + QDomElement domElement = doc->createElement(TagName); - AddAttribute(domElement, "id", id); - AddAttribute(domElement, "type", "path"); - AddAttribute(domElement, "kCurve", splPath.getKCurve()); + AddAttribute(domElement, AttrId, id); + AddAttribute(domElement, AttrType, ToolType); + AddAttribute(domElement, AttrKCurve, splPath.getKCurve()); for(qint32 i = 0; i < splPath.CountPoint(); ++i){ AddPathPoint(domElement, splPath[i]); @@ -202,12 +205,12 @@ void VModelingSplinePath::AddToFile(){ } void VModelingSplinePath::AddPathPoint(QDomElement &domElement, const VSplinePoint &splPoint){ - QDomElement pathPoint = doc->createElement("pathPoint"); + QDomElement pathPoint = doc->createElement(AttrPathPoint); - AddAttribute(pathPoint, "pSpline", splPoint.P()); - AddAttribute(pathPoint, "kAsm1", splPoint.KAsm1()); - AddAttribute(pathPoint, "kAsm2", splPoint.KAsm2()); - AddAttribute(pathPoint, "angle", splPoint.Angle2()); + AddAttribute(pathPoint, AttrPSpline, splPoint.P()); + AddAttribute(pathPoint, AttrKAsm1, splPoint.KAsm1()); + AddAttribute(pathPoint, AttrKAsm2, splPoint.KAsm2()); + AddAttribute(pathPoint, AttrAngle, splPoint.Angle2()); domElement.appendChild(pathPoint); } diff --git a/tools/modelingTools/vmodelingsplinepath.h b/tools/modelingTools/vmodelingsplinepath.h index de3ea52c8..19f44235f 100644 --- a/tools/modelingTools/vmodelingsplinepath.h +++ b/tools/modelingTools/vmodelingsplinepath.h @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -30,40 +30,37 @@ class VModelingSplinePath:public VModelingTool, public QGraphicsPathItem{ Q_OBJECT public: - VModelingSplinePath(VDomDocument *doc, VContainer *data, qint64 id, - Tool::Sources typeCreation, - QGraphicsItem * parent = 0); - virtual void setDialog(); - static VModelingSplinePath* Create(QSharedPointer &dialog, - VDomDocument *doc, VContainer *data); - static VModelingSplinePath* Create(const qint64 _id, const VSplinePath &path, VDomDocument *doc, - VContainer *data, const Document::Documents &parse, - Tool::Sources typeCreation); + VModelingSplinePath(VDomDocument *doc, VContainer *data, qint64 id, Tool::Sources typeCreation, + QGraphicsItem * parent = 0); + virtual void setDialog(); + static VModelingSplinePath* Create(QSharedPointer &dialog, VDomDocument *doc, VContainer *data); + static VModelingSplinePath* Create(const qint64 _id, const VSplinePath &path, VDomDocument *doc, + VContainer *data, const Document::Documents &parse, Tool::Sources typeCreation); + static const QString TagName; + static const QString ToolType; signals: - void RefreshLine(const qint32 &indexSpline, SplinePoint::Position pos, - const QPointF &controlPoint, const QPointF &splinePoint); - void setEnabledPoint(bool enable); + void RefreshLine(const qint32 &indexSpline, SplinePoint::Position pos, const QPointF &controlPoint, + const QPointF &splinePoint); + void setEnabledPoint(bool enable); public slots: - virtual void FullUpdateFromFile(); - virtual void FullUpdateFromGui(int result); - void ControlPointChangePosition(const qint32 &indexSpline, - SplinePoint::Position position, - const QPointF pos); + virtual void FullUpdateFromFile(); + virtual void FullUpdateFromGui(int result); + void ControlPointChangePosition(const qint32 &indexSpline, SplinePoint::Position position, + const QPointF pos); protected: - virtual void contextMenuEvent ( QGraphicsSceneContextMenuEvent * event ); - virtual void AddToFile(); - virtual void mouseReleaseEvent ( QGraphicsSceneMouseEvent * event ); - virtual void hoverMoveEvent ( QGraphicsSceneHoverEvent * event ); - virtual void hoverLeaveEvent ( QGraphicsSceneHoverEvent * event ); - virtual void RemoveReferens(); + virtual void contextMenuEvent ( QGraphicsSceneContextMenuEvent * event ); + virtual void AddToFile(); + virtual void mouseReleaseEvent ( QGraphicsSceneMouseEvent * event ); + virtual void hoverMoveEvent ( QGraphicsSceneHoverEvent * event ); + virtual void hoverLeaveEvent ( QGraphicsSceneHoverEvent * event ); + virtual void RemoveReferens(); private: QSharedPointer dialogSplinePath; QVector controlPoints; - void RefreshGeometry(); - void AddPathPoint(QDomElement &domElement, const VSplinePoint &splPoint); - void UpdatePathPoint(QDomNode& node, VSplinePath &path); - void CorectControlPoints(const VSpline &spl, VSplinePath &splPath, - const qint32 &indexSpline); + void RefreshGeometry(); + void AddPathPoint(QDomElement &domElement, const VSplinePoint &splPoint); + void UpdatePathPoint(QDomNode& node, VSplinePath &path); + void CorectControlPoints(const VSpline &spl, VSplinePath &splPath, const qint32 &indexSpline); }; #endif // VMODELINGSPLINEPATH_H diff --git a/tools/modelingTools/vmodelingtool.cpp b/tools/modelingTools/vmodelingtool.cpp index c651880dd..fd38f2088 100644 --- a/tools/modelingTools/vmodelingtool.cpp +++ b/tools/modelingTools/vmodelingtool.cpp @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -23,20 +23,10 @@ #include VModelingTool::VModelingTool(VDomDocument *doc, VContainer *data, qint64 id, QObject *parent): -VAbstractTool(doc, data, id, parent), ignoreContextMenuEvent(false){ +VAbstractTool(doc, data, id, parent), ignoreContextMenuEvent(false), ignoreFullUpdate(false) { _referens = 0; } -VModelingTool::~VModelingTool(){ -} - -void VModelingTool::setDialog(){ -} - -void VModelingTool::ignoreContextMenu(bool enable){ - ignoreContextMenuEvent = enable; -} - void VModelingTool::AddToModeling(const QDomElement &domElement){ QDomElement modelingElement; bool ok = doc->GetActivModelingElement(modelingElement); diff --git a/tools/modelingTools/vmodelingtool.h b/tools/modelingTools/vmodelingtool.h index f5bb4bbc7..014ff996d 100644 --- a/tools/modelingTools/vmodelingtool.h +++ b/tools/modelingTools/vmodelingtool.h @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -25,20 +25,18 @@ #include "../vabstracttool.h" #include -class VModelingTool: public VAbstractTool -{ +class VModelingTool: public VAbstractTool{ Q_OBJECT public: - VModelingTool(VDomDocument *doc, VContainer *data, qint64 id, QObject *parent = 0); - virtual ~VModelingTool(); - virtual void setDialog(); - void ignoreContextMenu(bool enable); + VModelingTool(VDomDocument *doc, VContainer *data, qint64 id, QObject *parent = 0); + virtual ~VModelingTool(){} + virtual void setDialog(){} + inline void ignoreContextMenu(bool enable) {ignoreContextMenuEvent = enable;} public slots: virtual void FullUpdateFromGui(int result)=0; -signals: - void RemoveTool(QGraphicsItem *tool); protected: bool ignoreContextMenuEvent; + bool ignoreFullUpdate; void AddToModeling(const QDomElement &domElement); virtual void decrementReferens(); template @@ -46,39 +44,49 @@ protected: bool showRemove = true){ if(!ignoreContextMenuEvent){ QMenu menu; - QAction *actionOption = menu.addAction("Властивості"); - QAction *actionRemove; + QAction *actionOption = menu.addAction(tr("Option")); + QAction *actionRemove = 0; if(showRemove){ - actionRemove = menu.addAction("Видалити"); + actionRemove = menu.addAction(tr("Delete")); + if(_referens > 1){ + actionRemove->setEnabled(false); + } else { + actionRemove->setEnabled(true); + } } QAction *selectedAction = menu.exec(event->screenPos()); if(selectedAction == actionOption){ - dialog = QSharedPointer(new Dialog(getData())); + dialog = QSharedPointer(new Dialog(getData())); - connect(qobject_cast< VMainGraphicsScene * >(tool->scene()), &VMainGraphicsScene::ChoosedObject, - dialog.data(), &Dialog::ChoosedObject); - connect(dialog.data(), &Dialog::DialogClosed, tool, - &Tool::FullUpdateFromGui); - connect(doc, &VDomDocument::FullUpdateFromFile, dialog.data(), &Dialog::UpdateList); + connect(qobject_cast< VMainGraphicsScene * >(tool->scene()), + &VMainGraphicsScene::ChoosedObject, dialog.data(), &Dialog::ChoosedObject); + connect(dialog.data(), &Dialog::DialogClosed, tool, &Tool::FullUpdateFromGui); + if(!ignoreFullUpdate){ + connect(doc, &VDomDocument::FullUpdateFromFile, dialog.data(), &Dialog::UpdateList); + } tool->setDialog(); dialog->show(); } - if(selectedAction == actionRemove){ - //remove form xml file - QDomElement domElement = doc->elementById(QString().setNum(id)); - if(domElement.isElement()){ - QDomElement element; - bool ok = doc->GetActivCalculationElement(element); - if(ok){ - element.removeChild(domElement); - //update xml file - emit FullUpdateTree(); - //remove form scene - emit RemoveTool(tool); - } - } + if(showRemove){ + if(selectedAction == actionRemove){ + //deincrement referens + RemoveReferens(); + //remove form xml file + QDomElement domElement = doc->elementById(QString().setNum(id)); + if(domElement.isElement()){ + QDomElement element; + bool ok = doc->GetActivCalculationElement(element); + if(ok){ + element.removeChild(domElement); + //update xml file + emit FullUpdateTree(); + //remove form scene + emit RemoveTool(tool); + } + } + } } } } diff --git a/tools/modelingTools/vmodelingtriangle.cpp b/tools/modelingTools/vmodelingtriangle.cpp new file mode 100644 index 000000000..2e068ab85 --- /dev/null +++ b/tools/modelingTools/vmodelingtriangle.cpp @@ -0,0 +1,145 @@ +/**************************************************************************** + ** + ** Copyright (C) 2013 Valentina project All Rights Reserved. + ** + ** This file is part of Valentina. + ** + ** Tox 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 "vmodelingtriangle.h" +#include "../drawTools/vtooltriangle.h" + +const QString VModelingTriangle::ToolType = QStringLiteral("triangle"); + +VModelingTriangle::VModelingTriangle(VDomDocument *doc, VContainer *data, const qint64 &id, const qint64 &axisP1Id, + const qint64 &axisP2Id, const qint64 &firstPointId, const qint64 &secondPointId, + Tool::Sources typeCreation, QGraphicsItem *parent) + :VModelingPoint(doc, data, id, parent), axisP1Id(axisP1Id), axisP2Id(axisP2Id), firstPointId(firstPointId), + secondPointId(secondPointId), dialogTriangle(QSharedPointer()) { + if(typeCreation == Tool::FromGui){ + AddToFile(); + } +} + +void VModelingTriangle::setDialog(){ + Q_ASSERT(!dialogTriangle.isNull()); + VPointF p = VAbstractTool::data.GetPoint(id); + dialogTriangle->setAxisP1Id(axisP1Id, id); + dialogTriangle->setAxisP2Id(axisP2Id, id); + dialogTriangle->setFirstPointId(firstPointId, id); + dialogTriangle->setSecondPointId(secondPointId, id); + dialogTriangle->setPointName(p.name()); +} + +VModelingTriangle *VModelingTriangle::Create(QSharedPointer &dialog, VDomDocument *doc, + VContainer *data){ + qint64 axisP1Id = dialog->getAxisP1Id(); + qint64 axisP2Id = dialog->getAxisP2Id(); + qint64 firstPointId = dialog->getFirstPointId(); + qint64 secondPointId = dialog->getSecondPointId(); + QString pointName = dialog->getPointName(); + return Create(0, pointName, axisP1Id, axisP2Id, firstPointId, secondPointId, 5, 10, doc, data, Document::FullParse, + Tool::FromGui); +} + +VModelingTriangle *VModelingTriangle::Create(const qint64 _id, const QString &pointName, const qint64 &axisP1Id, + const qint64 &axisP2Id, const qint64 &firstPointId, + const qint64 &secondPointId, const qreal &mx, const qreal &my, + VDomDocument *doc, VContainer *data, const Document::Documents &parse, + Tool::Sources typeCreation){ + VModelingTriangle *tool = 0; + VPointF axisP1 = data->GetPoint(axisP1Id); + VPointF axisP2 = data->GetPoint(axisP2Id); + VPointF firstPoint = data->GetPoint(firstPointId); + VPointF secondPoint = data->GetPoint(secondPointId); + + QPointF point = VToolTriangle::FindPoint(axisP1.toQPointF(), axisP2.toQPointF(), firstPoint.toQPointF(), + secondPoint.toQPointF()); + qint64 id = _id; + if(typeCreation == Tool::FromGui){ + id = data->AddPoint(VPointF(point.x(), point.y(), pointName, mx, my)); + } else { + data->UpdatePoint(id, VPointF(point.x(), point.y(), pointName, mx, my)); + if(parse != Document::FullParse){ + doc->UpdateToolData(id, data); + } + } + if(parse == Document::FullParse){ + tool = new VModelingTriangle(doc, data, id, axisP1Id, axisP2Id, firstPointId, secondPointId, typeCreation); + doc->AddTool(id, tool); + doc->IncrementReferens(axisP1Id); + doc->IncrementReferens(axisP2Id); + doc->IncrementReferens(firstPointId); + doc->IncrementReferens(secondPointId); + } + return tool; +} + +void VModelingTriangle::FullUpdateFromFile(){ + QDomElement domElement = doc->elementById(QString().setNum(id)); + if(domElement.isElement()){ + axisP1Id = domElement.attribute(AttrAxisP1, "").toLongLong(); + axisP2Id = domElement.attribute(AttrAxisP2, "").toLongLong(); + firstPointId = domElement.attribute(AttrFirstPoint, "").toLongLong(); + secondPointId = domElement.attribute(AttrSecondPoint, "").toLongLong(); + } + VModelingPoint::RefreshPointGeometry(VModelingTool::data.GetPoint(id)); +} + +void VModelingTriangle::FullUpdateFromGui(int result){ + if(result == QDialog::Accepted){ + QDomElement domElement = doc->elementById(QString().setNum(id)); + if(domElement.isElement()){ + domElement.setAttribute(AttrName, dialogTriangle->getPointName()); + domElement.setAttribute(AttrAxisP1, QString().setNum(dialogTriangle->getAxisP1Id())); + domElement.setAttribute(AttrAxisP2, QString().setNum(dialogTriangle->getAxisP2Id())); + domElement.setAttribute(AttrFirstPoint, QString().setNum(dialogTriangle->getFirstPointId())); + domElement.setAttribute(AttrSecondPoint, QString().setNum(dialogTriangle->getSecondPointId())); + emit FullUpdateTree(); + } + + } + dialogTriangle.clear(); +} + +void VModelingTriangle::RemoveReferens(){ + doc->DecrementReferens(axisP1Id); + doc->DecrementReferens(axisP2Id); + doc->DecrementReferens(firstPointId); + doc->DecrementReferens(secondPointId); +} + +void VModelingTriangle::contextMenuEvent(QGraphicsSceneContextMenuEvent *event){ + ContextMenu(dialogTriangle, this, event); +} + +void VModelingTriangle::AddToFile(){ + VPointF point = VAbstractTool::data.GetPoint(id); + QDomElement domElement = doc->createElement(TagName); + + AddAttribute(domElement, AttrId, id); + AddAttribute(domElement, AttrType, ToolType); + AddAttribute(domElement, AttrName, point.name()); + AddAttribute(domElement, AttrMx, toMM(point.mx())); + AddAttribute(domElement, AttrMy, toMM(point.my())); + + AddAttribute(domElement, AttrAxisP1, axisP1Id); + AddAttribute(domElement, AttrAxisP2, axisP2Id); + AddAttribute(domElement, AttrFirstPoint, firstPointId); + AddAttribute(domElement, AttrSecondPoint, secondPointId); + + AddToModeling(domElement); +} diff --git a/tools/modelingTools/vmodelingtriangle.h b/tools/modelingTools/vmodelingtriangle.h new file mode 100644 index 000000000..069544bd7 --- /dev/null +++ b/tools/modelingTools/vmodelingtriangle.h @@ -0,0 +1,58 @@ +/**************************************************************************** + ** + ** Copyright (C) 2013 Valentina project All Rights Reserved. + ** + ** This file is part of Valentina. + ** + ** Tox 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 VMODELINGTRIANGLE_H +#define VMODELINGTRIANGLE_H + +#include "vmodelingpoint.h" +#include "../drawTools/vtooltriangle.h" +#include "dialogs/dialogtriangle.h" + +class VModelingTriangle : public VModelingPoint{ + Q_OBJECT +public: + VModelingTriangle(VDomDocument *doc, VContainer *data, const qint64 &id, const qint64 &axisP1Id, + const qint64 &axisP2Id, const qint64 &firstPointId, const qint64 &secondPointId, + Tool::Sources typeCreation, QGraphicsItem * parent = 0); + virtual void setDialog(); + static VModelingTriangle* Create(QSharedPointer &dialog, VDomDocument *doc, VContainer *data); + static VModelingTriangle* Create(const qint64 _id, const QString &pointName, const qint64 &axisP1Id, + const qint64 &axisP2Id, const qint64 &firstPointId, const qint64 &secondPointId, + const qreal &mx, const qreal &my, VDomDocument *doc, VContainer *data, + const Document::Documents &parse, Tool::Sources typeCreation); + static const QString ToolType; +public slots: + virtual void FullUpdateFromFile(); + virtual void FullUpdateFromGui(int result); +protected: + virtual void RemoveReferens(); + virtual void contextMenuEvent ( QGraphicsSceneContextMenuEvent * event ); + virtual void AddToFile(); +private: + Q_DISABLE_COPY(VModelingTriangle) + qint64 axisP1Id; + qint64 axisP2Id; + qint64 firstPointId; + qint64 secondPointId; + QSharedPointer dialogTriangle; +}; + +#endif // VMODELINGTRIANGLE_H diff --git a/tools/nodeDetails/nodedetails.h b/tools/nodeDetails/nodedetails.h index a331e94b2..e9ed16c37 100644 --- a/tools/nodeDetails/nodedetails.h +++ b/tools/nodeDetails/nodedetails.h @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. diff --git a/tools/nodeDetails/vabstractnode.cpp b/tools/nodeDetails/vabstractnode.cpp index ddd667825..2e671ea9d 100644 --- a/tools/nodeDetails/vabstractnode.cpp +++ b/tools/nodeDetails/vabstractnode.cpp @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -22,9 +22,14 @@ #include "vabstractnode.h" #include -VAbstractNode::VAbstractNode(VDomDocument *doc, VContainer *data, qint64 id, qint64 idNode, - Draw::Draws typeobject, QObject *parent) : - VAbstractTool(doc, data, id, parent), idNode(idNode), typeobject(typeobject){ +const QString VAbstractNode::AttrIdObject = QStringLiteral("idObject"); +const QString VAbstractNode::AttrTypeObject = QStringLiteral("typeObject"); +const QString VAbstractNode::TypeObjectCalculation = QStringLiteral("Calculation"); +const QString VAbstractNode::TypeObjectModeling = QStringLiteral("Modeling"); + +VAbstractNode::VAbstractNode(VDomDocument *doc, VContainer *data, qint64 id, qint64 idNode, Draw::Draws typeobject, + QObject *parent) : VAbstractTool(doc, data, id, parent), idNode(idNode), + typeobject(typeobject){ _referens = 0; } @@ -34,7 +39,7 @@ void VAbstractNode::AddToModeling(const QDomElement &domElement){ if(ok){ modelingElement.appendChild(domElement); } else { - qCritical()<<"Can't find tag Modeling"<< Q_FUNC_INFO; + qCritical()<AddTool(id, arc); doc->IncrementReferens(idArc); } else { @@ -51,15 +54,15 @@ void VNodeArc::FullUpdateFromFile(){ } void VNodeArc::AddToFile(){ - QDomElement domElement = doc->createElement("arc"); + QDomElement domElement = doc->createElement(TagName); - AddAttribute(domElement, "id", id); - AddAttribute(domElement, "type", "modeling"); - AddAttribute(domElement, "idObject", idNode); + AddAttribute(domElement, AttrId, id); + AddAttribute(domElement, AttrType, ToolType); + AddAttribute(domElement, AttrIdObject, idNode); if(typeobject == Draw::Calculation){ - AddAttribute(domElement, "typeObject", "Calculation"); + AddAttribute(domElement, AttrTypeObject, TypeObjectCalculation); } else { - AddAttribute(domElement, "typeObject", "Modeling"); + AddAttribute(domElement, AttrTypeObject, ToolType ); } AddToModeling(domElement); diff --git a/tools/nodeDetails/vnodearc.h b/tools/nodeDetails/vnodearc.h index 6776776ad..e206e2c6a 100644 --- a/tools/nodeDetails/vnodearc.h +++ b/tools/nodeDetails/vnodearc.h @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -25,14 +25,15 @@ #include "vabstractnode.h" #include -class VNodeArc :public VAbstractNode, public QGraphicsPathItem -{ +class VNodeArc :public VAbstractNode, public QGraphicsPathItem{ Q_OBJECT public: VNodeArc(VDomDocument *doc, VContainer *data, qint64 id, qint64 idArc, Draw::Draws typeobject, Tool::Sources typeCreation, QGraphicsItem * parent = 0); static void Create(VDomDocument *doc, VContainer *data, qint64 id, qint64 idArc, Draw::Draws typeobject, const Document::Documents &parse, Tool::Sources typeCreation); + static const QString TagName; + static const QString ToolType; public slots: virtual void FullUpdateFromFile(); protected: diff --git a/tools/nodeDetails/vnodepoint.cpp b/tools/nodeDetails/vnodepoint.cpp index 21426313f..c5b1056f8 100644 --- a/tools/nodeDetails/vnodepoint.cpp +++ b/tools/nodeDetails/vnodepoint.cpp @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -21,6 +21,9 @@ #include "vnodepoint.h" +const QString VNodePoint::TagName = QStringLiteral("point"); +const QString VNodePoint::ToolType = QStringLiteral("modeling"); + VNodePoint::VNodePoint(VDomDocument *doc, VContainer *data, qint64 id, qint64 idPoint, Draw::Draws typeobject, Tool::Sources typeCreation, QGraphicsItem *parent) :VAbstractNode(doc, data, id, idPoint, typeobject), QGraphicsEllipseItem(parent), @@ -43,7 +46,7 @@ void VNodePoint::Create(VDomDocument *doc, VContainer *data, qint64 id, qint64 i Draw::Draws typeobject, const Document::Documents &parse, Tool::Sources typeCreation){ if(parse == Document::FullParse){ VNodePoint *point = new VNodePoint(doc, data, id, idPoint, typeobject, typeCreation); - Q_CHECK_PTR(point); + Q_ASSERT(point != 0); doc->AddTool(id, point); doc->IncrementReferens(idPoint); } else { @@ -57,18 +60,18 @@ void VNodePoint::FullUpdateFromFile(){ void VNodePoint::AddToFile(){ VPointF point = VAbstractTool::data.GetModelingPoint(id); - QDomElement domElement = doc->createElement("point"); + QDomElement domElement = doc->createElement(TagName); - AddAttribute(domElement, "id", id); - AddAttribute(domElement, "type", "modeling"); - AddAttribute(domElement, "idObject", idNode); + AddAttribute(domElement, AttrId, id); + AddAttribute(domElement, AttrType, ToolType); + AddAttribute(domElement, AttrIdObject, idNode); if(typeobject == Draw::Calculation){ - AddAttribute(domElement, "typeObject", "Calculation"); + AddAttribute(domElement, AttrTypeObject, TypeObjectCalculation); } else { - AddAttribute(domElement, "typeObject", "Modeling"); + AddAttribute(domElement, AttrTypeObject, TypeObjectModeling); } - AddAttribute(domElement, "mx", toMM(point.mx())); - AddAttribute(domElement, "my", toMM(point.my())); + AddAttribute(domElement, AttrMx, toMM(point.mx())); + AddAttribute(domElement, AttrMy, toMM(point.my())); AddToModeling(domElement); } @@ -104,8 +107,8 @@ void VNodePoint::NameChangePosition(const QPointF pos){ void VNodePoint::UpdateNamePosition(qreal mx, qreal my){ QDomElement domElement = doc->elementById(QString().setNum(id)); if(domElement.isElement()){ - domElement.setAttribute("mx", QString().setNum(toMM(mx))); - domElement.setAttribute("my", QString().setNum(toMM(my))); + domElement.setAttribute(AttrMx, QString().setNum(toMM(mx))); + domElement.setAttribute(AttrMy, QString().setNum(toMM(my))); emit toolhaveChange(); } } diff --git a/tools/nodeDetails/vnodepoint.h b/tools/nodeDetails/vnodepoint.h index f7e963a97..e1a6d75e0 100644 --- a/tools/nodeDetails/vnodepoint.h +++ b/tools/nodeDetails/vnodepoint.h @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -25,30 +25,29 @@ #include "vabstractnode.h" #include "widgets/vgraphicssimpletextitem.h" -class VNodePoint: public VAbstractNode, public QGraphicsEllipseItem -{ +class VNodePoint: public VAbstractNode, public QGraphicsEllipseItem{ Q_OBJECT public: - VNodePoint(VDomDocument *doc, VContainer *data, qint64 id, qint64 idPoint, - Draw::Draws typeobject, Tool::Sources typeCreation, - QGraphicsItem * parent = 0 ); - static void Create(VDomDocument *doc, VContainer *data, qint64 id, qint64 idPoint, - Draw::Draws typeobject, const Document::Documents &parse, - Tool::Sources typeCreation); + VNodePoint(VDomDocument *doc, VContainer *data, qint64 id, qint64 idPoint, Draw::Draws typeobject, + Tool::Sources typeCreation, QGraphicsItem * parent = 0 ); + static void Create(VDomDocument *doc, VContainer *data, qint64 id, qint64 idPoint, Draw::Draws typeobject, + const Document::Documents &parse, Tool::Sources typeCreation); + static const QString TagName; + static const QString ToolType; public slots: - virtual void FullUpdateFromFile(); - void NameChangePosition(const QPointF pos); + virtual void FullUpdateFromFile(); + void NameChangePosition(const QPointF pos); protected: - qreal radius; + qreal radius; VGraphicsSimpleTextItem *namePoint; QGraphicsLineItem *lineName; - virtual void AddToFile(); - virtual void mouseReleaseEvent ( QGraphicsSceneMouseEvent * event ); - virtual void hoverMoveEvent ( QGraphicsSceneHoverEvent * event ); - virtual void hoverLeaveEvent ( QGraphicsSceneHoverEvent * event ); - virtual void UpdateNamePosition(qreal mx, qreal my); - virtual void RefreshPointGeometry(const VPointF &point); - void RefreshLine(); + virtual void AddToFile(); + virtual void mouseReleaseEvent ( QGraphicsSceneMouseEvent * event ); + virtual void hoverMoveEvent ( QGraphicsSceneHoverEvent * event ); + virtual void hoverLeaveEvent ( QGraphicsSceneHoverEvent * event ); + virtual void UpdateNamePosition(qreal mx, qreal my); + virtual void RefreshPointGeometry(const VPointF &point); + void RefreshLine(); private: Q_DISABLE_COPY(VNodePoint) }; diff --git a/tools/nodeDetails/vnodespline.cpp b/tools/nodeDetails/vnodespline.cpp index cf4960b6f..cf6092c73 100644 --- a/tools/nodeDetails/vnodespline.cpp +++ b/tools/nodeDetails/vnodespline.cpp @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -21,6 +21,9 @@ #include "vnodespline.h" +const QString VNodeSpline::TagName = QStringLiteral("spline"); +const QString VNodeSpline::ToolType = QStringLiteral("modelingSpline"); + VNodeSpline::VNodeSpline(VDomDocument *doc, VContainer *data, qint64 id, qint64 idSpline, Draw::Draws typeobject, Tool::Sources typeCreation, QGraphicsItem * parent) : VAbstractNode(doc, data, id, idSpline, typeobject), QGraphicsPathItem(parent){ @@ -35,7 +38,8 @@ VNodeSpline::VNodeSpline(VDomDocument *doc, VContainer *data, qint64 id, qint64 } VNodeSpline *VNodeSpline::Create(VDomDocument *doc, VContainer *data, qint64 id, qint64 idSpline, - Draw::Draws typeobject, const Document::Documents &parse, Tool::Sources typeCreation){ + Draw::Draws typeobject, const Document::Documents &parse, + Tool::Sources typeCreation){ VNodeSpline *spl = 0; if(parse == Document::FullParse){ spl = new VNodeSpline(doc, data, id, idSpline, typeobject, typeCreation); @@ -52,15 +56,15 @@ void VNodeSpline::FullUpdateFromFile(){ } void VNodeSpline::AddToFile(){ - QDomElement domElement = doc->createElement("spline"); + QDomElement domElement = doc->createElement(TagName); - AddAttribute(domElement, "id", id); - AddAttribute(domElement, "type", "modelingSpline"); - AddAttribute(domElement, "idObject", idNode); + AddAttribute(domElement, AttrId, id); + AddAttribute(domElement, AttrType, ToolType); + AddAttribute(domElement, AttrIdObject, idNode); if(typeobject == Draw::Calculation){ - AddAttribute(domElement, "typeObject", "Calculation"); + AddAttribute(domElement, AttrTypeObject, TypeObjectCalculation); } else { - AddAttribute(domElement, "typeObject", "Modeling"); + AddAttribute(domElement, AttrTypeObject, TypeObjectModeling); } AddToModeling(domElement); diff --git a/tools/nodeDetails/vnodespline.h b/tools/nodeDetails/vnodespline.h index 5e076f9ec..3e1d381bc 100644 --- a/tools/nodeDetails/vnodespline.h +++ b/tools/nodeDetails/vnodespline.h @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -25,23 +25,24 @@ #include "vabstractnode.h" #include -class VNodeSpline:public VAbstractNode, public QGraphicsPathItem -{ +class VNodeSpline:public VAbstractNode, public QGraphicsPathItem{ Q_OBJECT public: - VNodeSpline(VDomDocument *doc, VContainer *data, qint64 id, qint64 idSpline, Draw::Draws typeobject, - Tool::Sources typeCreation, QGraphicsItem * parent = 0); - static VNodeSpline *Create(VDomDocument *doc, VContainer *data, qint64 id, qint64 idSpline, - Draw::Draws typeobject, const Document::Documents &parse, Tool::Sources typeCreation); + VNodeSpline(VDomDocument *doc, VContainer *data, qint64 id, qint64 idSpline, Draw::Draws typeobject, + Tool::Sources typeCreation, QGraphicsItem * parent = 0); + static VNodeSpline *Create(VDomDocument *doc, VContainer *data, qint64 id, qint64 idSpline, Draw::Draws typeobject, + const Document::Documents &parse, Tool::Sources typeCreation); + static const QString TagName; + static const QString ToolType; public slots: - virtual void FullUpdateFromFile (); + virtual void FullUpdateFromFile (); protected: - virtual void AddToFile (); - virtual void mouseReleaseEvent ( QGraphicsSceneMouseEvent * event ); + virtual void AddToFile (); + virtual void mouseReleaseEvent ( QGraphicsSceneMouseEvent * event ); virtual void hoverMoveEvent ( QGraphicsSceneHoverEvent * event ); virtual void hoverLeaveEvent ( QGraphicsSceneHoverEvent * event ); private: - void RefreshGeometry (); + void RefreshGeometry (); }; #endif // VNODESPLINE_H diff --git a/tools/nodeDetails/vnodesplinepath.cpp b/tools/nodeDetails/vnodesplinepath.cpp index 493f5a397..07ac92b53 100644 --- a/tools/nodeDetails/vnodesplinepath.cpp +++ b/tools/nodeDetails/vnodesplinepath.cpp @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -21,6 +21,9 @@ #include "vnodesplinepath.h" +const QString VNodeSplinePath::TagName = QStringLiteral("spline"); +const QString VNodeSplinePath::ToolType = QStringLiteral("modelingPath"); + VNodeSplinePath::VNodeSplinePath(VDomDocument *doc, VContainer *data, qint64 id, qint64 idSpline, Draw::Draws typeobject, Tool::Sources typeCreation, QGraphicsItem * parent) : @@ -40,7 +43,7 @@ void VNodeSplinePath::Create(VDomDocument *doc, VContainer *data, qint64 id, qin Tool::Sources typeCreation){ if(parse == Document::FullParse){ VNodeSplinePath *splPath = new VNodeSplinePath(doc, data, id, idSpline, typeobject, typeCreation); - Q_CHECK_PTR(splPath); + Q_ASSERT(splPath != 0); doc->AddTool(id, splPath); VSplinePath path = data->GetModelingSplinePath(id); const QVector *points = path.GetPoint(); @@ -57,15 +60,15 @@ void VNodeSplinePath::FullUpdateFromFile(){ } void VNodeSplinePath::AddToFile(){ - QDomElement domElement = doc->createElement("spline"); + QDomElement domElement = doc->createElement(TagName); - AddAttribute(domElement, "id", id); - AddAttribute(domElement, "type", "modelingPath"); - AddAttribute(domElement, "idObject", idNode); + AddAttribute(domElement, AttrId, id); + AddAttribute(domElement, AttrType, ToolType); + AddAttribute(domElement, AttrIdObject, idNode); if(typeobject == Draw::Calculation){ - AddAttribute(domElement, "typeObject", "Calculation"); + AddAttribute(domElement, AttrTypeObject, TypeObjectCalculation); } else { - AddAttribute(domElement, "typeObject", "Modeling"); + AddAttribute(domElement, AttrTypeObject, TypeObjectModeling); } AddToModeling(domElement); diff --git a/tools/nodeDetails/vnodesplinepath.h b/tools/nodeDetails/vnodesplinepath.h index 21b09dd36..5e623b65c 100644 --- a/tools/nodeDetails/vnodesplinepath.h +++ b/tools/nodeDetails/vnodesplinepath.h @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -25,15 +25,15 @@ #include "vabstractnode.h" #include -class VNodeSplinePath : public VAbstractNode, public QGraphicsPathItem -{ +class VNodeSplinePath : public VAbstractNode, public QGraphicsPathItem{ Q_OBJECT public: VNodeSplinePath(VDomDocument *doc, VContainer *data, qint64 id, qint64 idSpline, - Draw::Draws typeobject, Tool::Sources typeCreation, - QGraphicsItem * parent = 0); - static void Create(VDomDocument *doc, VContainer *data, qint64 id, qint64 idSpline, - Draw::Draws typeobject, const Document::Documents &parse, Tool::Sources typeCreation); + Draw::Draws typeobject, Tool::Sources typeCreation, QGraphicsItem * parent = 0); + static void Create(VDomDocument *doc, VContainer *data, qint64 id, qint64 idSpline, Draw::Draws typeobject, + const Document::Documents &parse, Tool::Sources typeCreation); + static const QString TagName; + static const QString ToolType; public slots: virtual void FullUpdateFromFile(); protected: diff --git a/tools/tools.h b/tools/tools.h index 0c2a63142..998771f91 100644 --- a/tools/tools.h +++ b/tools/tools.h @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. diff --git a/tools/vabstracttool.cpp b/tools/vabstracttool.cpp index 50838f4d7..634a3a73f 100644 --- a/tools/vabstracttool.cpp +++ b/tools/vabstracttool.cpp @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -20,7 +20,43 @@ ****************************************************************************/ #include "vabstracttool.h" -#include + +const QString VAbstractTool::AttrId = QStringLiteral("id"); +const QString VAbstractTool::AttrType = QStringLiteral("type"); +const QString VAbstractTool::AttrMx = QStringLiteral("mx"); +const QString VAbstractTool::AttrMy = QStringLiteral("my"); +const QString VAbstractTool::AttrName = QStringLiteral("name"); +const QString VAbstractTool::AttrX = QStringLiteral("x"); +const QString VAbstractTool::AttrY = QStringLiteral("y"); +const QString VAbstractTool::AttrTypeLine = QStringLiteral("typeLine"); +const QString VAbstractTool::AttrLength = QStringLiteral("length"); +const QString VAbstractTool::AttrBasePoint = QStringLiteral("basePoint"); +const QString VAbstractTool::AttrFirstPoint = QStringLiteral("firstPoint"); +const QString VAbstractTool::AttrSecondPoint = QStringLiteral("secondPoint"); +const QString VAbstractTool::AttrThirdPoint = QStringLiteral("thirdPoint"); +const QString VAbstractTool::AttrCenter = QStringLiteral("center"); +const QString VAbstractTool::AttrRadius = QStringLiteral("radius"); +const QString VAbstractTool::AttrAngle = QStringLiteral("angle"); +const QString VAbstractTool::AttrAngle1 = QStringLiteral("angle1"); +const QString VAbstractTool::AttrAngle2 = QStringLiteral("angle2"); +const QString VAbstractTool::AttrP1Line = QStringLiteral("p1Line"); +const QString VAbstractTool::AttrP2Line = QStringLiteral("p2Line"); +const QString VAbstractTool::AttrP1Line1 = QStringLiteral("p1Line1"); +const QString VAbstractTool::AttrP2Line1 = QStringLiteral("p2Line1"); +const QString VAbstractTool::AttrP1Line2 = QStringLiteral("p1Line2"); +const QString VAbstractTool::AttrP2Line2 = QStringLiteral("p2Line2"); +const QString VAbstractTool::AttrPShoulder = QStringLiteral("pShoulder"); +const QString VAbstractTool::AttrPoint1 = QStringLiteral("point1"); +const QString VAbstractTool::AttrPoint4 = QStringLiteral("point4"); +const QString VAbstractTool::AttrKAsm1 = QStringLiteral("kAsm1"); +const QString VAbstractTool::AttrKAsm2 = QStringLiteral("kAsm2"); +const QString VAbstractTool::AttrKCurve = QStringLiteral("kCurve"); +const QString VAbstractTool::AttrPathPoint = QStringLiteral("pathPoint"); +const QString VAbstractTool::AttrPSpline = QStringLiteral("pSpline"); +const QString VAbstractTool::AttrAxisP1 = QStringLiteral("axisP1"); +const QString VAbstractTool::AttrAxisP2 = QStringLiteral("axisP2"); +const QString VAbstractTool::TypeLineNone = QStringLiteral("none"); +const QString VAbstractTool::TypeLineLine = QStringLiteral("hair"); VAbstractTool::VAbstractTool(VDomDocument *doc, VContainer *data, qint64 id, QObject *parent): VDataTool(data, parent), doc(doc), id(id), baseColor(Qt::black), currentColor(Qt::black){ @@ -30,33 +66,6 @@ VAbstractTool::VAbstractTool(VDomDocument *doc, VContainer *data, qint64 id, QOb connect(this, &VAbstractTool::FullUpdateTree, this->doc, &VDomDocument::FullUpdateTree); } -void VAbstractTool::AddAttribute(QDomElement &domElement, const QString &name, const qint64 &value){ - QDomAttr domAttr = doc->createAttribute(name); - domAttr.setValue(QString().setNum(value)); - domElement.setAttributeNode(domAttr); -} - -void VAbstractTool::AddAttribute(QDomElement &domElement, const QString &name, const qint32 &value){ - QDomAttr domAttr = doc->createAttribute(name); - domAttr.setValue(QString().setNum(value)); - domElement.setAttributeNode(domAttr); -} - -void VAbstractTool::AddAttribute(QDomElement &domElement, const QString &name, const qreal &value){ - QDomAttr domAttr = doc->createAttribute(name); - domAttr.setValue(QString().setNum(value)); - domElement.setAttributeNode(domAttr); -} - -void VAbstractTool::AddAttribute(QDomElement &domElement, const QString &name, const QString &value){ - QDomAttr domAttr = doc->createAttribute(name); - domAttr.setValue(value); - domElement.setAttributeNode(domAttr); -} - -VAbstractTool::~VAbstractTool(){ -} - QPointF VAbstractTool::LineIntersectRect(QRectF rec, QLineF line){ qreal x1, y1, x2, y2; rec.getCoords(&x1, &y1, &x2, &y2); @@ -77,7 +86,7 @@ QPointF VAbstractTool::LineIntersectRect(QRectF rec, QLineF line){ if ( type == QLineF::BoundedIntersection ){ return point; } - Q_ASSERT_X(type != QLineF::BoundedIntersection, Q_FUNC_INFO, "Немає точки перетину."); + Q_ASSERT_X(type != QLineF::BoundedIntersection, Q_FUNC_INFO, "There is no point of intersection."); return point; } @@ -85,10 +94,8 @@ qint32 VAbstractTool::LineIntersectCircle(QPointF center, qreal radius, QLineF l QPointF &p2){ const qreal eps = 1e-8; //коефіцієнти для рівняння відрізку - qreal a = line.p2().y() - line.p1().y(); - qreal b = line.p1().x() - line.p2().x(); - // В даному випадку не використовується. - //qreal c = - a * line.p1().x() - b * line.p1().y(); + qreal a = 0, b = 0, c = 0; + LineCoefficients(line, &a, &b, &c); // проекция центра окружности на прямую QPointF p = ClosestPoint (line, center); // сколько всего решений? @@ -134,10 +141,17 @@ QPointF VAbstractTool::addVector(QPointF p, QPointF p1, QPointF p2, qreal k){ return QPointF (p.x() + (p2.x() - p1.x()) * k, p.y() + (p2.y() - p1.y()) * k); } -const VContainer *VAbstractTool::getData()const{ - return &data; +void VAbstractTool::RemoveAllChild(QDomElement &domElement){ + if ( domElement.hasChildNodes() ){ + while ( domElement.childNodes().length() >= 1 ){ + domElement.removeChild( domElement.firstChild() ); + } + } } -qint64 VAbstractTool::getId() const{ - return id; +void VAbstractTool::LineCoefficients(const QLineF &line, qreal *a, qreal *b, qreal *c){ + //коефіцієнти для рівняння відрізку + *a = line.p2().y() - line.p1().y(); + *b = line.p1().x() - line.p2().x(); + *c = - *a * line.p1().x() - *b * line.p1().y(); } diff --git a/tools/vabstracttool.h b/tools/vabstracttool.h index 2391e053b..511e43f31 100644 --- a/tools/vabstracttool.h +++ b/tools/vabstracttool.h @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -22,40 +22,86 @@ #ifndef VABSTRACTTOOL_H #define VABSTRACTTOOL_H -#include "xml/vdomdocument.h" #include "vdatatool.h" +#include class VAbstractTool: public VDataTool{ Q_OBJECT public: - VAbstractTool(VDomDocument *doc, VContainer *data, qint64 id, QObject *parent = 0); - virtual ~VAbstractTool(); - static QPointF LineIntersectRect(QRectF rec, QLineF line); - static qint32 LineIntersectCircle(QPointF center, qreal radius, QLineF line, QPointF &p1, - QPointF &p2); - static QPointF ClosestPoint(QLineF line, QPointF p); - static QPointF addVector (QPointF p, QPointF p1, QPointF p2, qreal k); - qint64 getId() const; - + VAbstractTool(VDomDocument *doc, VContainer *data, qint64 id, QObject *parent = 0); + virtual ~VAbstractTool() {} + static QPointF LineIntersectRect(QRectF rec, QLineF line); + static qint32 LineIntersectCircle(QPointF center, qreal radius, QLineF line, QPointF &p1, QPointF &p2); + static QPointF ClosestPoint(QLineF line, QPointF p); + static QPointF addVector (QPointF p, QPointF p1, QPointF p2, qreal k); + inline qint64 getId() const {return id;} + static void LineCoefficients(const QLineF &line, qreal *a, qreal *b, qreal *c); + static const QString AttrId; + static const QString AttrType; + static const QString AttrMx; + static const QString AttrMy; + static const QString AttrName; + static const QString AttrX; + static const QString AttrY; + static const QString AttrTypeLine; + static const QString AttrLength; + static const QString AttrBasePoint; + static const QString AttrFirstPoint; + static const QString AttrSecondPoint; + static const QString AttrThirdPoint; + static const QString AttrCenter; + static const QString AttrRadius; + static const QString AttrAngle; + static const QString AttrAngle1; + static const QString AttrAngle2; + static const QString AttrP1Line; + static const QString AttrP2Line; + static const QString AttrP1Line1; + static const QString AttrP2Line1; + static const QString AttrP1Line2; + static const QString AttrP2Line2; + static const QString AttrPShoulder; + static const QString AttrPoint1; + static const QString AttrPoint4; + static const QString AttrKAsm1; + static const QString AttrKAsm2; + static const QString AttrKCurve; + static const QString AttrPathPoint; + static const QString AttrPSpline; + static const QString AttrAxisP1; + static const QString AttrAxisP2; + static const QString TypeLineNone; + static const QString TypeLineLine; public slots: - virtual void FullUpdateFromFile()=0; + virtual void FullUpdateFromFile()=0; signals: - void toolhaveChange(); - void ChoosedTool(qint64 id, Scene::Scenes type); - void FullUpdateTree(); + void toolhaveChange(); + void ChoosedTool(qint64 id, Scene::Scenes type); + void FullUpdateTree(); + void RemoveTool(QGraphicsItem *tool); protected: - VDomDocument *doc; - const qint64 id; - const Qt::GlobalColor baseColor; - Qt::GlobalColor currentColor; - virtual void AddToFile()=0; - void AddAttribute(QDomElement &domElement, const QString &name, const qint64 &value); - void AddAttribute(QDomElement &domElement, const QString &name, const qint32 &value); - void AddAttribute(QDomElement &domElement, const QString &name, const qreal &value); - void AddAttribute(QDomElement &domElement, const QString &name, const QString &value); - const VContainer *getData() const; - virtual void RemoveReferens(){} + VDomDocument *doc; + const qint64 id; + const Qt::GlobalColor baseColor; + Qt::GlobalColor currentColor; + virtual void AddToFile()=0; + inline const VContainer *getData() const {return &data;} + virtual void RemoveReferens(){} + void RemoveAllChild(QDomElement &domElement); + template + void AddAttribute(QDomElement &domElement, const QString &name, const T &value){ + QDomAttr domAttr = doc->createAttribute(name); + domAttr.setValue(QString().setNum(value)); + domElement.setAttributeNode(domAttr); + } private: Q_DISABLE_COPY(VAbstractTool) }; + +template <> +inline void VAbstractTool::AddAttribute(QDomElement &domElement, const QString &name, const QString &value){ + QDomAttr domAttr = doc->createAttribute(name); + domAttr.setValue(value); + domElement.setAttributeNode(domAttr); +} #endif // VABSTRACTTOOL_H diff --git a/tools/vdatatool.cpp b/tools/vdatatool.cpp index eb5d6cf20..60dba8c40 100644 --- a/tools/vdatatool.cpp +++ b/tools/vdatatool.cpp @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -27,10 +27,6 @@ VDataTool &VDataTool::operator =(const VDataTool &tool){ return *this; } -void VDataTool::setData(const VContainer *value){ - data = *value; -} - void VDataTool::decrementReferens(){ if(_referens > 0){ --_referens; diff --git a/tools/vdatatool.h b/tools/vdatatool.h index eed3f4e60..f0519762f 100644 --- a/tools/vdatatool.h +++ b/tools/vdatatool.h @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -22,18 +22,17 @@ #ifndef VDATATOOL_H #define VDATATOOL_H -#include "container/vcontainer.h" +#include //We need QObject class because we use qobject_cast. class VDataTool : public QObject{ Q_OBJECT public: - explicit VDataTool(VContainer *data, QObject *parent = 0) - : QObject(parent), data(*data), _referens(1){} + explicit VDataTool(VContainer *data, QObject *parent = 0): QObject(parent), data(*data), _referens(1){} virtual ~VDataTool(){} VDataTool &operator= (const VDataTool &tool); inline VContainer getData() const { return data; } - void setData(const VContainer *value); + inline void setData(const VContainer *value) {data = *value;} virtual inline qint64 referens() const {return _referens;} virtual inline void incrementReferens(){++_referens;} virtual void decrementReferens(); diff --git a/tools/vtooldetail.cpp b/tools/vtooldetail.cpp index 06b9d8da7..de0d48269 100644 --- a/tools/vtooldetail.cpp +++ b/tools/vtooldetail.cpp @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -21,135 +21,79 @@ #include "vtooldetail.h" #include "nodeDetails/nodedetails.h" -#include #include "modelingTools/vmodelingtool.h" #include "modelingTools/modelingtools.h" +const QString VToolDetail::TagName = QStringLiteral("detail"); +const QString VToolDetail::TagNode = QStringLiteral("node"); +const QString VToolDetail::AttrSupplement = QStringLiteral("supplement"); +const QString VToolDetail::AttrClosed = QStringLiteral("closed"); +const QString VToolDetail::AttrWidth = QStringLiteral("width"); +const QString VToolDetail::AttrIdObject = QStringLiteral("idObject"); +const QString VToolDetail::AttrNodeType = QStringLiteral("nodeType"); +const QString VToolDetail::NodeTypeContour = QStringLiteral("Contour"); +const QString VToolDetail::NodeTypeModeling = QStringLiteral("Modeling"); + VToolDetail::VToolDetail(VDomDocument *doc, VContainer *data, const qint64 &id, Tool::Sources typeCreation, - VMainGraphicsScene *scene, QGraphicsItem *parent) - :VAbstractTool(doc, data, id), QGraphicsPathItem(parent), dialogDetail(QSharedPointer()), - sceneDetails(scene){ + VMainGraphicsScene *scene, QGraphicsItem *parent) :VAbstractTool(doc, data, id), + QGraphicsPathItem(parent), dialogDetail(QSharedPointer()), sceneDetails(scene){ VDetail detail = data->GetDetail(id); - QMap* tools = doc->getTools(); - Q_CHECK_PTR(tools); for(qint32 i = 0; i< detail.CountNode(); ++i){ switch(detail[i].getTypeTool()){ - case(Tool::NodePoint):{ - VNodePoint *point = qobject_cast(tools->value(detail[i].getId())); - Q_CHECK_PTR(point); - connect(point, &VNodePoint::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem); - point->setParentItem(this); + case(Tool::NodePoint): + InitTool(scene, detail[i]); break; - } - case(Tool::NodeArc):{ - VNodeArc *arc = qobject_cast(tools->value(detail[i].getId())); - Q_CHECK_PTR(arc); - connect(arc, &VNodeArc::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem); - arc->setParentItem(this); + case(Tool::NodeArc): + InitTool(scene, detail[i]); break; - } - case(Tool::NodeSpline):{ - VNodeSpline *spl = qobject_cast(tools->value(detail[i].getId())); - Q_CHECK_PTR(spl); - connect(spl, &VNodeSpline::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem); - spl->setParentItem(this); + case(Tool::NodeSpline): + InitTool(scene, detail[i]); break; - } - case(Tool::NodeSplinePath):{ - VNodeSplinePath *splPath = qobject_cast(tools->value(detail[i].getId())); - Q_CHECK_PTR(splPath); - connect(splPath, &VNodeSplinePath::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem); - splPath->setParentItem(this); + case(Tool::NodeSplinePath): + InitTool(scene, detail[i]); break; - } - case(Tool::AlongLineTool):{ - VModelingAlongLine *tool = qobject_cast(tools->value(detail[i].getId())); - Q_CHECK_PTR(tool); - connect(tool, &VModelingAlongLine::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem); - connect(tool, &VModelingAlongLine::RemoveTool, scene, &VMainGraphicsScene::RemoveTool); - tool->setParentItem(this); + case(Tool::AlongLineTool): + InitTool(scene, detail[i]); break; - } - case(Tool::ArcTool):{ - VModelingArc *tool = qobject_cast(tools->value(detail[i].getId())); - Q_CHECK_PTR(tool); - connect(tool, &VModelingArc::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem); - connect(tool, &VModelingArc::RemoveTool, scene, &VMainGraphicsScene::RemoveTool); - tool->setParentItem(this); + case(Tool::ArcTool): + InitTool(scene, detail[i]); break; - } - case(Tool::BisectorTool):{ - VModelingBisector *tool = qobject_cast(tools->value(detail[i].getId())); - Q_CHECK_PTR(tool); - connect(tool, &VModelingBisector::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem); - connect(tool, &VModelingBisector::RemoveTool, scene, &VMainGraphicsScene::RemoveTool); - tool->setParentItem(this); + case(Tool::BisectorTool): + InitTool(scene, detail[i]); break; - } - case(Tool::EndLineTool):{ - VModelingEndLine *tool = qobject_cast(tools->value(detail[i].getId())); - Q_CHECK_PTR(tool); - connect(tool, &VModelingEndLine::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem); - connect(tool, &VModelingEndLine::RemoveTool, scene, &VMainGraphicsScene::RemoveTool); - tool->setParentItem(this); + case(Tool::EndLineTool): + InitTool(scene, detail[i]); break; - } - case(Tool::LineIntersectTool):{ - VModelingLineIntersect *tool = qobject_cast(tools->value(detail[i].getId())); - Q_CHECK_PTR(tool); - connect(tool, &VModelingLineIntersect::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem); - connect(tool, &VModelingLineIntersect::RemoveTool, scene, &VMainGraphicsScene::RemoveTool); - tool->setParentItem(this); + case(Tool::LineIntersectTool): + InitTool(scene, detail[i]); break; - } - case(Tool::LineTool):{ - VModelingLine *tool = qobject_cast(tools->value(detail[i].getId())); - Q_CHECK_PTR(tool); - connect(tool, &VModelingLine::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem); - connect(tool, &VModelingLine::RemoveTool, scene, &VMainGraphicsScene::RemoveTool); - tool->setParentItem(this); + case(Tool::LineTool): + InitTool(scene, detail[i]); break; - } - case(Tool::NormalTool):{ - VModelingNormal *tool = qobject_cast(tools->value(detail[i].getId())); - Q_CHECK_PTR(tool); - connect(tool, &VModelingNormal::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem); - connect(tool, &VModelingNormal::RemoveTool, scene, &VMainGraphicsScene::RemoveTool); - tool->setParentItem(this); + case(Tool::NormalTool): + InitTool(scene, detail[i]); break; - } - case(Tool::PointOfContact):{ - VModelingPointOfContact *tool = qobject_cast(tools->value(detail[i].getId())); - Q_CHECK_PTR(tool); - connect(tool, &VModelingPointOfContact::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem); - connect(tool, &VModelingPointOfContact::RemoveTool, scene, &VMainGraphicsScene::RemoveTool); - tool->setParentItem(this); + case(Tool::PointOfContact): + InitTool(scene, detail[i]); break; - } - case(Tool::ShoulderPointTool):{ - VModelingShoulderPoint *tool = qobject_cast(tools->value(detail[i].getId())); - Q_CHECK_PTR(tool); - connect(tool, &VModelingShoulderPoint::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem); - connect(tool, &VModelingShoulderPoint::RemoveTool, scene, &VMainGraphicsScene::RemoveTool); - tool->setParentItem(this); + case(Tool::ShoulderPointTool): + InitTool(scene, detail[i]); break; - } - case(Tool::SplinePathTool):{ - VModelingSplinePath *tool = qobject_cast(tools->value(detail[i].getId())); - Q_CHECK_PTR(tool); - connect(tool, &VModelingSplinePath::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem); - connect(tool, &VModelingSplinePath::RemoveTool, scene, &VMainGraphicsScene::RemoveTool); - tool->setParentItem(this); + case(Tool::SplinePathTool): + InitTool(scene, detail[i]); break; - } - case(Tool::SplineTool):{ - VModelingSpline *tool = qobject_cast(tools->value(detail[i].getId())); - Q_CHECK_PTR(tool); - connect(tool, &VModelingSpline::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem); - connect(tool, &VModelingSpline::RemoveTool, scene, &VMainGraphicsScene::RemoveTool); - tool->setParentItem(this); + case(Tool::SplineTool): + InitTool(scene, detail[i]); + break; + case(Tool::Height): + InitTool(scene, detail[i]); + break; + case(Tool::Triangle): + InitTool(scene, detail[i]); + break; + case(Tool::PointOfIntersection): + InitTool(scene, detail[i]); break; - } default: qWarning()<<"Get wrong tool type. Ignore."; break; @@ -168,10 +112,8 @@ VToolDetail::VToolDetail(VDomDocument *doc, VContainer *data, const qint64 &id, void VToolDetail::setDialog(){ Q_ASSERT(!dialogDetail.isNull()); - if(!dialogDetail.isNull()){ - VDetail detail = VAbstractTool::data.GetDetail(id); - dialogDetail->setDetails(detail); - } + VDetail detail = VAbstractTool::data.GetDetail(id); + dialogDetail->setDetails(detail); } void VToolDetail::Create(QSharedPointer &dialog, VMainGraphicsScene *scene, @@ -189,6 +131,8 @@ void VToolDetail::Create(QSharedPointer &dialog, VMainGraphicsScen point = data->GetModelingPoint(detail[i].getId()); } id = data->AddModelingPoint(point); + VNodePoint::Create(doc, data, id, detail[i].getId(), detail[i].getMode(), + Document::FullParse, Tool::FromGui); } break; case(Tool::NodeArc):{ @@ -199,6 +143,8 @@ void VToolDetail::Create(QSharedPointer &dialog, VMainGraphicsScen arc = data->GetModelingArc(detail[i].getId()); } id = data->AddModelingArc(arc); + VNodeArc::Create(doc, data, id, detail[i].getId(), detail[i].getMode(), + Document::FullParse, Tool::FromGui); } break; case(Tool::NodeSpline):{ @@ -209,6 +155,8 @@ void VToolDetail::Create(QSharedPointer &dialog, VMainGraphicsScen spline = data->GetModelingSpline(detail[i].getId()); } id = data->AddModelingSpline(spline); + VNodeSpline::Create(doc, data, id, detail[i].getId(), detail[i].getMode(), + Document::FullParse, Tool::FromGui); } break; case(Tool::NodeSplinePath):{ @@ -219,13 +167,15 @@ void VToolDetail::Create(QSharedPointer &dialog, VMainGraphicsScen splinePath = data->GetModelingSplinePath(detail[i].getId()); } id = data->AddModelingSplinePath(splinePath); + VNodeSplinePath::Create(doc, data, id, detail[i].getId(), detail[i].getMode(), + Document::FullParse, Tool::FromGui); } break; default: qWarning()<<"May be wrong tool type!!! Ignoring."<addItem(detail); connect(detail, &VToolDetail::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem); connect(detail, &VToolDetail::RemoveTool, scene, &VMainGraphicsScene::RemoveTool); - QMap* tools = doc->getTools(); + QHash* tools = doc->getTools(); tools->insert(id, detail); } } @@ -258,17 +208,35 @@ void VToolDetail::FullUpdateFromFile(){ } void VToolDetail::FullUpdateFromGui(int result){ - Q_UNUSED(result); + if(result == QDialog::Accepted){ + QDomElement domElement = doc->elementById(QString().setNum(id)); + if(domElement.isElement()){ + VDetail det = dialogDetail->getDetails(); + domElement.setAttribute(AttrName, det.getName()); + domElement.setAttribute(AttrSupplement, QString().setNum(det.getSupplement())); + domElement.setAttribute(AttrClosed, QString().setNum(det.getClosed())); + domElement.setAttribute(AttrWidth, QString().setNum(det.getWidth())); + RemoveAllChild(domElement); + for(qint32 i = 0; i < det.CountNode(); ++i){ + AddNode(domElement, det[i]); + } + emit FullUpdateTree(); + } + } + dialogDetail.clear(); } void VToolDetail::AddToFile(){ VDetail detail = VAbstractTool::data.GetDetail(id); - QDomElement domElement = doc->createElement("detail"); + QDomElement domElement = doc->createElement(TagName); - AddAttribute(domElement, "id", id); - AddAttribute(domElement, "name", detail.getName()); - AddAttribute(domElement, "mx", detail.getMx()); - AddAttribute(domElement, "my", detail.getMy()); + AddAttribute(domElement, AttrId, id); + AddAttribute(domElement, AttrName, detail.getName()); + AddAttribute(domElement, AttrMx, toMM(detail.getMx())); + AddAttribute(domElement, AttrMy, toMM(detail.getMy())); + AddAttribute(domElement, AttrSupplement, detail.getSupplement()); + AddAttribute(domElement, AttrClosed, detail.getClosed()); + AddAttribute(domElement, AttrWidth, detail.getWidth()); for(qint32 i = 0; i < detail.CountNode(); ++i){ AddNode(domElement, detail[i]); @@ -288,8 +256,8 @@ QVariant VToolDetail::itemChange(QGraphicsItem::GraphicsItemChange change, const //qDebug()<elementById(QString().setNum(id)); if(domElement.isElement()){ - domElement.setAttribute("mx", QString().setNum(toMM(newPos.x()))); - domElement.setAttribute("my", QString().setNum(toMM(newPos.y()))); + domElement.setAttribute(AttrMx, QString().setNum(toMM(newPos.x()))); + domElement.setAttribute(AttrMy, QString().setNum(toMM(newPos.y()))); //I don't now why but signal does not work. doc->FullUpdateTree(); } @@ -306,7 +274,7 @@ void VToolDetail::mouseReleaseEvent(QGraphicsSceneMouseEvent *event){ void VToolDetail::contextMenuEvent(QGraphicsSceneContextMenuEvent *event){ QMenu menu; - //QAction *actionOption = menu.addAction(tr("Options")); + QAction *actionOption = menu.addAction(tr("Options")); QAction *actionRemove = menu.addAction(tr("Delete")); if(_referens > 1){ actionRemove->setEnabled(false); @@ -314,33 +282,32 @@ void VToolDetail::contextMenuEvent(QGraphicsSceneContextMenuEvent *event){ actionRemove->setEnabled(true); } QAction *selectedAction = menu.exec(event->screenPos()); -// if(selectedAction == actionOption){ -// dialog = QSharedPointer(new Dialog(getData())); - -// connect(qobject_cast< VMainGraphicsScene * >(tool->scene()), &VMainGraphicsScene::ChoosedObject, -// dialog.data(), &Dialog::ChoosedObject); -// connect(dialog.data(), &Dialog::DialogClosed, tool, -// &Tool::FullUpdateFromGui); -// connect(doc, &VDomDocument::FullUpdateFromFile, dialog.data(), &Dialog::UpdateList); - -// tool->setDialog(); - -// dialog->show(); -// } + if(selectedAction == actionOption){ + dialogDetail = QSharedPointer(new DialogDetail(getData(), Draw::Modeling)); + connect(qobject_cast< VMainGraphicsScene * >(this->scene()), &VMainGraphicsScene::ChoosedObject, + dialogDetail.data(), &DialogDetail::ChoosedObject); + connect(dialogDetail.data(), &DialogDetail::DialogClosed, this, &VToolDetail::FullUpdateFromGui); + setDialog(); + dialogDetail->show(); + } if(selectedAction == actionRemove){ - //deincrement referens - RemoveReferens(); //remove form xml file QDomElement domElement = doc->elementById(QString().setNum(id)); if(domElement.isElement()){ QDomNode element = domElement.parentNode(); if(!element.isNull()){ + //deincrement referens + RemoveReferens(); element.removeChild(domElement); //update xml file emit FullUpdateTree(); //remove form scene emit RemoveTool(this); + } else { + qWarning()<<"parentNode isNull"<createElement(TagNode); - AddAttribute(nod, "idObject", node.getId()); + AddAttribute(nod, AttrIdObject, node.getId()); + AddAttribute(nod, AttrMx, toMM(node.getMx())); + AddAttribute(nod, AttrMy, toMM(node.getMy())); if(node.getTypeNode() == NodeDetail::Contour){ - AddAttribute(nod, "nodeType", "Contour"); + AddAttribute(nod, AttrNodeType, NodeTypeContour); } else { - AddAttribute(nod, "nodeType", "Modeling"); + AddAttribute(nod, AttrNodeType, NodeTypeModeling); } switch(node.getTypeTool()){ case(Tool::AlongLineTool): - AddAttribute(nod, "type", "AlongLineTool"); + AddAttribute(nod, AttrType, QStringLiteral("AlongLineTool")); break; case(Tool::ArcTool): - AddAttribute(nod, "type", "ArcTool"); + AddAttribute(nod, AttrType, QStringLiteral("ArcTool")); break; case(Tool::BisectorTool): - AddAttribute(nod, "type", "BisectorTool"); + AddAttribute(nod, AttrType, QStringLiteral("BisectorTool")); break; case(Tool::EndLineTool): - AddAttribute(nod, "type", "EndLineTool"); + AddAttribute(nod, AttrType, QStringLiteral("EndLineTool")); break; case(Tool::LineIntersectTool): - AddAttribute(nod, "type", "LineIntersectTool"); + AddAttribute(nod, AttrType, QStringLiteral("LineIntersectTool")); break; case(Tool::LineTool): - AddAttribute(nod, "type", "LineTool"); + AddAttribute(nod, AttrType, QStringLiteral("LineTool")); break; case(Tool::NodeArc): - AddAttribute(nod, "type", "NodeArc"); + AddAttribute(nod, AttrType, QStringLiteral("NodeArc")); break; case(Tool::NodePoint): - AddAttribute(nod, "type", "NodePoint"); + AddAttribute(nod, AttrType, QStringLiteral("NodePoint")); break; case(Tool::NodeSpline): - AddAttribute(nod, "type", "NodeSpline"); + AddAttribute(nod, AttrType, QStringLiteral("NodeSpline")); break; case(Tool::NodeSplinePath): - AddAttribute(nod, "type", "NodeSplinePath"); + AddAttribute(nod, AttrType, QStringLiteral("NodeSplinePath")); break; case(Tool::NormalTool): - AddAttribute(nod, "type", "NormalTool"); + AddAttribute(nod, AttrType, QStringLiteral("NormalTool")); break; case(Tool::PointOfContact): - AddAttribute(nod, "type", "PointOfContact"); + AddAttribute(nod, AttrType, QStringLiteral("PointOfContact")); break; case(Tool::ShoulderPointTool): - AddAttribute(nod, "type", "ShoulderPointTool"); + AddAttribute(nod, AttrType, QStringLiteral("ShoulderPointTool")); break; case(Tool::SplinePathTool): - AddAttribute(nod, "type", "SplinePathTool"); + AddAttribute(nod, AttrType, QStringLiteral("SplinePathTool")); break; case(Tool::SplineTool): - AddAttribute(nod, "type", "SplineTool"); + AddAttribute(nod, AttrType, QStringLiteral("SplineTool")); + break; + case(Tool::Height): + AddAttribute(nod, AttrType, QStringLiteral("Height")); + break; + case(Tool::Triangle): + AddAttribute(nod, AttrType, QStringLiteral("Triangle")); + break; + case(Tool::PointOfIntersection): + AddAttribute(nod, AttrType, QStringLiteral("PointOfIntersection")); break; default: qWarning()<<"May be wrong tool type!!! Ignoring."<setPath(path); } + +template +void VToolDetail::InitTool(VMainGraphicsScene *scene, const VNodeDetail &node){ + QHash* tools = doc->getTools(); + Q_ASSERT(tools != 0); + Tool *tool = qobject_cast(tools->value(node.getId())); + Q_ASSERT(tool != 0); + connect(tool, &Tool::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem); + connect(tool, &Tool::RemoveTool, scene, &VMainGraphicsScene::RemoveTool); + tool->setParentItem(this); +} diff --git a/tools/vtooldetail.h b/tools/vtooldetail.h index a0441e48f..4a877e8e6 100644 --- a/tools/vtooldetail.h +++ b/tools/vtooldetail.h @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -51,6 +51,15 @@ public: AddNode(domElement, node); } } + static const QString TagName; + static const QString TagNode; + static const QString AttrSupplement; + static const QString AttrClosed; + static const QString AttrWidth; + static const QString AttrIdObject; + static const QString AttrNodeType; + static const QString NodeTypeContour; + static const QString NodeTypeModeling; public slots: virtual void FullUpdateFromFile (); virtual void FullUpdateFromGui(int result); @@ -68,6 +77,8 @@ private: VMainGraphicsScene *sceneDetails; void RefreshGeometry (); void AddNode(QDomElement &domElement, VNodeDetail &node); + template + void InitTool(VMainGraphicsScene *scene, const VNodeDetail &node); }; #endif // VTOOLDETAIL_H diff --git a/translations/valentina_ru.ts b/translations/valentina_ru.ts index f828a3d13..72d64a1ff 100644 --- a/translations/valentina_ru.ts +++ b/translations/valentina_ru.ts @@ -9,76 +9,121 @@ Точка вдоль линии - + Length Длина - - + + Formula calculation of length of line + + + + + Calculate formula + + + + + ... - + + Value of length + + + + _ - + Name new point Имя новой точки - + + Put variable into formula + + + + First point Первая точка - + + First point of line + + + + Second point Вторая точка - + + Second point of line + + + + Type line Тип линии - + + Show line from first point to our point + + + + Input data Входные данные - + Size and growth Размер и рост - + Standart table Стандартная таблица - + Increments Прибавки - + Length of lines Длина линий - + Length of arcs Длина дуг - + Length of curves Длина кривых + + + Variables. Click twice to select. + + + + + Select second point of line + + DialogArc @@ -88,78 +133,141 @@ Дуга - + Radius Радиус - - - - - - + + Formula calculation of radius of arc + + + + + + + Put variable into formula + + + + + + + + + ... - - - + + + + Calculate formula + + + + + Value of radius + + + + + + _ - + First angle degree Первый угол градусы - + + First angle of arc counterclockwise + + + + + Value of first angle + + + + Second angle degree Второй угол градусы - + + Second angle of arc counterclockwise + + + + + Value of second angle + + + + Center point Центральная точка - + + Select point of center of arc + + + + Input data Входные данные - + Size and growth Размер и рост - + Standart table Стандартная таблица - + Increments Прибавки - + Length of lines Длина линий - - + Length of arcs Длина дуг - + + Length of curves + Длина кривых + + + Angle of lines Уголы линий + + + Variables + + + + + Value angle of line. + + DialogBisector @@ -169,81 +277,136 @@ Бисектриса - + Length Длина - - + + Formula calculation of length of bisector + + + + + Calculate formula + + + + + ... - + + Value of length + + + + _ - + Name new point Имя новой точки - + + Put variable into formula + + + + First point Первая точка - + + First point of angle + + + + Second point Вторая точка - + + Second point of angle + + + + Third point Треться точка - + + Third point of angle + + + + Type line Тип линии - + + Show line from second point to our point + + + + Input data Входные данные - + Size and growth Размер и рост - + Standart table Стандартная таблица - + Increments Прибавки - + Length of lines Длина линий - + Length of arcs Длина дуг - + Length of curves Длина кривых + + + Variables. Click twice to select. + + + + + Select second point of angle + + + + + Select third point of angle + + DialogDetail @@ -253,15 +416,54 @@ Деталь - - Name detail - Имя детали + + Bias X + - + + Bias Y + + + + + Option + + + + + Name of detail + + + + + Supplement for seams + + + + + Width + + + + Name detail + Имя детали + + + Closed Замкнутая + + + Get wrong scene object. Ignore. + + + + + Get wrong tools. Ignore. + + DialogEndLine @@ -271,84 +473,170 @@ Точка на конце линии - + Length Длина - - - - - - - - - - + + Formula calculation of length of line + + + + + Calculate formula + + + + + + + + + + + + + ... - + + Value of length + + + + _ - + Base point Базовая точка - + + First point of line + + + + Name new point Имя новой точки - + Angle degree Угол градусы - + + Angle of line + + + + Type line Тип линии - + + Show line from first point to our point + + + + Input data Входные данные - + Size and growth Размер и рост - + Standart table Стандартная таблица - + Increments Прибавки - + Length of lines Длина линий - + Length of arcs Длина дуг - + Length of curves Длина кривых + + + Variables. Click twice to select. + + + + + DialogHeight + + + Dialog + + + + + Name new point + Имя новой точки + + + + Base point + Базовая точка + + + + + + + First point of line + + + + + Second point of line + + + + + Type line + Тип линии + + + + Show line from first point to our point + + + + + Select first point of line + + + + + Select second point of line + + DialogHistory @@ -359,9 +647,81 @@ + Tool Инструмент + + + %1 - Base point + + + + + + %1_%2 - Line from point %1 to point %2 + + + + + %3 - Point along line %1_%2 + + + + + %1 - Point of soulder + + + + + %3 - Normal to line %1_%2 + + + + + %4 - Bisector of angle %1_%2_%3 + + + + + %5 - Point of intersection lines %1_%2 and %3_%4 + + + + + Curve %1_%2 + + + + + Arc with center in point %1 + + + + + Curve point %1 + + + + + %4 - Point of contact arc with center in point %1 and line %2_%3 + + + + + Point of perpendical from point %1 to line %2_%3 + + + + + Triangle: axis %1_%2, points %3 and %4 + + + + + Get wrong tool type. Ignore. + + DialogIncrements @@ -378,19 +738,23 @@ - + + + Denotation Обозначение - + The calculated value Расчитаное значение - + + + Base value Базовое значение @@ -406,71 +770,105 @@ - + + + + + Description Опис - + + + In size В размерах - + + + In growth В ростах - - + + ... - + Lines Линии - + + Line Линия - + Length of the line Длина линии - + Curves Кривые - + + Curve Кривая - + Length of the curve Длина кривой - + Arcs Дуги - + + Arc Дуга - + Length of arc Длина дуги + + + Denotation %1 + + + + + Can't convert toDouble value. + + + + + + Calculated value + + + + + + + Length + Длина + DialogLine @@ -489,6 +887,11 @@ Second point Вторая точка + + + Select second point + + DialogLineIntersect @@ -498,32 +901,47 @@ Точка пересичения линий - + Name new point Имя новой точки - + First line Первая линия - + First point Первая точка - + Second point Вторая точка - + Second line Вторая линия + + + Select second point of first line + + + + + Select first point of second line + + + + + Select second point of second line + + DialogNormal @@ -533,89 +951,124 @@ Перпендикуляр - + Length Длина - - - - - - - - - - + + Formula calculation of length of normal + + + + + Calculate formula + + + + + + + + + + + + + ... - + + Value of length + + + + _ - + Name new point Имя новой точки - + + Put variable into formula + + + + First point Первая точка - + Second point Вторая точка - + Additional angle degrees Дополнительные угол градусы - + Type line Тип линии - + + Show line from first point to our point + + + + Input data Входные данные - + Size and growth Размер и рост - + Standart table Стандартная таблица - + Increments Прибавки - + Length of lines Длина линий - + Length of arcs Длина дуг - + Length of curves Длина кривых + + + Variables. Click twice to select. + + + + + Select second point of line + + DialogPointOfContact @@ -625,152 +1078,270 @@ Точка касания - + Radius Радиус - - + + Formula calculation of radius of arc + + + + + Calculate formula + + + + + ... - + + Value of radius + + + + _ - + Name new point Имя новой точки - + + Put variable into formula + + + + Center of arc Центр дуги - + + Slect point of center of arc + + + + Top of the line Начало линии - + End of the line Конец линии - + Input data Входные данные - + Size and growth Размер и рост - + Standart table Стандартная таблица - + Increments Прибавки - + Length of lines Длина линий - + Length of arcs Длина дуг - + Length of curves Длина кривых + + + Variables. Click twice to select. + + + + + Select second point of line + + + + + Select point of center of arc + + + + + DialogPointOfIntersection + + + Dialog + + + + + Name new point + Имя новой точки + + + + Point vertically + + + + + First point of angle + + + + + Point horizontally + + + + + Second point of angle + + + + + Select point horizontally + + DialogShoulderPoint - + Point of shoulder Точка плеча - + Length Длина - - + + Formula calculation of length of line + + + + + Calculate formula + + + + + ... - + + Value of length + + + + _ - + Name new point Имя новой точки - + + Put variable into formula + + + + First point Первая точка - + Second point Вторая точка - + Type of line Тип линии - + + Show line from first point to our point + + + + Input data Входные данные - + Size and growth Размер и рост - + Standart table Стандартная таблица - + Increments Прибавки - - + + Length of lines Длина линий - + Length of curves Длина кривых + + + Variables. Click twice to select. + + + + + Select second point of line + + + + + Select point of shoulder + + DialogSinglePoint @@ -780,22 +1351,31 @@ Одиночная точка - Координати - Координаты + Координаты - + + Coordinates on the sheet + + + + + Coordinates + + + + Y coordinate Y координата - + X coordinate Х координата - + Point name Имя точки @@ -842,6 +1422,11 @@ Coefficient of curvature of the curve Коефициент кривизные кривой + + + Select last point of curve + + DialogSplinePath @@ -876,10 +1461,132 @@ Угол второй контрольной точки - + + List of points + + + + Coefficient of curvature of the curve Коефициент кривизные кривой + + + Select point of curve path + + + + + DialogTool + + + Wrong details id. + + + + + + + Line + Линия + + + + + No line + + + + + Can't find point by name + + + + + Error + + + + + Growth + + + + + Size + + + + + Line length + + + + + Arc length + + + + + Curve length + + + + + DialogTriangle + + + Dialog + + + + + Name new point + Имя новой точки + + + + First point of axis + + + + + + + + First point of line + + + + + Second point of axis + + + + + First point + Первая точка + + + + Second point + Вторая точка + + + + Select second point of axis + + + + + Select first point + + + + + Select second point + + MainWindow @@ -889,266 +1596,535 @@ Valentina - + + Tools for creating points. + + + + Point Точка - - - - - - - - - - - - + + Tool point of normal. + + + + + + + + + + + + + + + + + + ... - + + Tool point of shoulder. + + + + + Tool point on the end line. + + + + + Tool point along line. + + + + + Tool point of bisector. + + + + + Tool point of contact. + + + + + Tool point of height. + + + + + Tool triangle. + + + + + Tools for creating lines. + + + + Line Линия - + + Tool line. + + + + + Tool point of line intersection. + + + + + Tools for creating curves. + + + + Curve Кривая - + + Tool curve. + + + + + Tool path curve. + + + + + Tools for creating arcs. + + + + Arc Дуга - + + Tool arc. + + + + + Tools for creating details. + + + + Detail Деталь - + + Tool new detail. + + + + + File + + + + + Help + + + + + Drawing + + + + toolBar - + toolBar_2 - + toolBar_3 - + New Новое - + Create a new pattern Создать новое лекало - + Open Открыть - + Open file with pattern Открыть файл с лекалом - + Save Сохранить - + Save pattern Сохранить лекало - + + Save as Сохранить как - + Save not yet saved pattern Сохранить еще не сохраненное лекало - + Draw Рисование - + Draw mode Режим рисования - + Details Детали - + Deatils mode Режим деталей - - + + Tools pointer Инструмент указатель - + New drawing Новый чертеж - + Add new drawing Добавить новый чертеж - - + + Change the name of drawing Изменить имя чертежа - + Table of variables Таблица переменных - + Tables of variables Таблици переменных - + History История - + Layout Роскладка - + Create layout Создать раскладку - + + + About Qt + + + + + + About Valentina + + + + + Exit + + + + Drawing %1 Чертеж %1 - - + + Drawing: Чертеж: - + Enter a name for the drawing. Введите имя чертежа. - - + + Error. Drawing of same name already exists. Ошибка. Чертеж с таким именем уже существует. - + Error creating drawing with the name Ошибка создания чертежа с именем - + Enter a new name for the drawing. Введите новое имя для чертежа. - + + Error saving change!!! + + + + + Can't save new name of drawing + + + + + + Select point + + + + + Select first point + + + + + + + Select first point of line + + + + + Select first point of angle + + + + + Select first point of first line + + + + + Select first point curve + + + + + Select point of center of arc + + + + + Select point of curve path + + + + + The pattern has been modified. + + + + + Do you want to save your changes? + + + + Growth: Рост: - + Size: Размер: - + Drawing: Чертеж: - + + Lekalo files (*.xml);;All files (*.*) + + + + + Lekalo files (*.xml) Файл лекала (*.xml) - + + Error saving file. Can't save file. + + + + Open file Открыть файл - + + Got empty file name. + + + + + Could not copy temp file to pattern file + + + + + Could not remove pattern file + + + + Can't open pattern file. File name empty Не могу открыть файл лекала. Пустое имя файла - - - - - + + + + + + + + Error! Ошибка! - + + Create new drawing for start working. + + + + + Select points, arcs, curves clockwise. + + + + + Select base point + + + + + Select first point of axis + + + + + Select point vertically + + + + + Based on Qt %2 (32 bit) + + + + + Built on %3 at %4 + + + + + <h1>%1</h1> %2 <br/><br/> %3 <br/><br/> %4 + + + + Error parsing file. Ошибка парсинга файла. - + Error can't convert value. Ошибка, не могу конвертовать значение. - + Error empty parameter. Ошибка, пустой параметр. - + Error wrong id. Ошибка, неправильный id. - + + + Error don't unique id. + + + + Error parsing pattern file. Ошибка парсинга файла лекала. - + Error in line %1 column %2 Ошибка в линии %1 столбец %2 @@ -1172,6 +2148,7 @@ + Save layout Создать раскладку @@ -1244,57 +2221,89 @@ Стоп - + SVG Generator Example Drawing SVG Generator Example Drawing - + An SVG drawing created by the SVG Generator Example provided with Qt. An SVG drawing created by the SVG Generator Example provided with Qt. + + VAbstractNode + + + Can't find tag Modeling + + + VApplication - - - - - + + + + + + Error! Ошибка! - + Error parsing file. Program will be terminated. Ошибка парсинга файла. Програма будет закрыта. - + Error bad id. Program will be terminated. Ошибка, неправильный id. Програма будет закрыта. - + Error can't convert value. Program will be terminated. Ошибка не могу конвертировать значение. Програма будет закрыта. - + Error empty parameter. Program will be terminated. Ошибка пустой параметр. Програма будет закрыта. - + Error wrong id. Program will be terminated. Ошибка неправельный id. Програма будет закрыта. + + + Something wrong!! + + + + + VArc + + + Can't find id = %1 in table. + + + + + Angle of arc can't be 0 degree. + + + + + Arc have not this number of part. + + VContainer - + Can't find object Не могу найти объект @@ -1302,150 +2311,228 @@ VDomDocument - + Got wrong parameter id. Need only id > 0. Получен неправельный параметр id. Допустимы только id > 0. - + Can't convert toLongLong parameter Не могу конвертировать toLongLong параметр - + Got empty parameter Получен пустой параметр - + Can't convert toDouble parameter Не могу конвертировать toDouble параметр - + + This id is not unique. + + + + Error creating or updating detail Ошибка создания или обновления детали - + Error creating or updating single point Ошибка создания или обновления базовой точки - + Error creating or updating point of end line Ошибка создания или обновления точки на конце линии - + Error creating or updating point along line Ошибка создания или обновления точки вдоль линии - + Error creating or updating point of shoulder Ошибка создания или обновления точки плеча - + Error creating or updating point of normal Ошибка создания или обновления точки нормали - + Error creating or updating point of bisector Ошибка создания или обновления точки бисектрисы - + Error creating or updating point of lineintersection Ошибка создания или обновления точки пересичения линий - + Error creating or updating point of contact Ошибка создания или обновления точки прикосновения - + Error creating or updating modeling point Ошибка создания или обновления точки - + + Error creating or updating height + + + + + Error creating or updating triangle + + + + + Error creating or updating point of intersection + + + + Error creating or updating line Ошибка создания или обновления линии - + Error creating or updating simple curve Ошибка создания или обновления кривой - + Error creating or updating curve path Ошибка создания или обновления сложной кривой - + Error creating or updating modeling simple curve Ошибка создания или обновления модельной кривой - + Error creating or updating modeling curve path Ошибка создания или обновления сложной модельной кривой - + Error creating or updating simple arc Ошибка создания или обновления дуги - + Error creating or updating modeling arc Ошибка создания или обновления модельной дуги - + + Error! + Ошибка! + + + + Error parsing file. + Ошибка парсинга файла. + + Can't get parent for object id = %1 - Не могу получить родителя объекта id = %1 + Не могу получить родителя объекта id = %1 VDrawTool - + Options Параметры - + Delete Удалить + + + Can not find the element after which you want to insert. + + + + + Can't find tag Calculation + + + + + VModelingTool + + + Option + + + + + Delete + Удалить + VSplinePath - + Not enough points to create the spline. Не достаточно точок для создания кривой. - - - + + + This spline is not exist. Такой кривой не существует. + + VTableGraphicsView + + + detail don't find + + + + + detail find + + + VToolDetail - + + Options + Параметры + + + Delete Удалить + + VToolTriangle + + + Can't find point. + + + diff --git a/translations/valentina_uk.ts b/translations/valentina_uk.ts index ce7eedba7..6d8446548 100644 --- a/translations/valentina_uk.ts +++ b/translations/valentina_uk.ts @@ -9,76 +9,121 @@ Точка вздовж лінії - + Length Довжина - - + + Formula calculation of length of line + Формула розрахунку довжини лінії + + + + Calculate formula + Розрахувати формулу + + + + ... - + + Value of length + Значення довжини + + + _ - + Name new point Ім'я нової точки - + + Put variable into formula + Вставити змінну в формулу + + + First point Перша точка - + + First point of line + Перша точка лінії + + + Second point Друга точка - + + Second point of line + Друга точка лінії + + + Type line Тип лінії - + + Show line from first point to our point + Показати лінію від першої точки до нашої точки + + + Input data Вхідні данні - + Size and growth Розмір і зріст - + Standart table Стандартна таблиця - + Increments Прибавки - + Length of lines Довжина ліній - + Length of arcs Довжина дуг - + Length of curves Довжина кривих + + + Variables. Click twice to select. + Змінні. Подвійний клік для вибору. + + + + Select second point of line + Виберіть другу точку лінії + DialogArc @@ -88,78 +133,141 @@ Дуга - + Radius Радіус - - - - - - + + Formula calculation of radius of arc + Формула калькуляції радіуса дуги + + + + + + Put variable into formula + Вставити змінну в формулу + + + + + + + + ... - - - + + + + Calculate formula + Розрахувати формулу + + + + Value of radius + Значення радіусу + + + + + _ - + First angle degree Перший кут градуси - + + First angle of arc counterclockwise + Перший кут дуги проти годинникової стрілки + + + + Value of first angle + Значення першого кута + + + Second angle degree Другий кут градуси - + + Second angle of arc counterclockwise + Другий кут дуги проти годинникової стрілки + + + + Value of second angle + Значення другого кута + + + Center point Точка центру - + + Select point of center of arc + Виберіть точку центра дуги + + + Input data Вхідні данні - + Size and growth Розмір і зріст - + Standart table Стандартна таблиця - + Increments Прибавки - + Length of lines Довжина ліній - - + Length of arcs Довжина дуг - + + Length of curves + + + + Angle of lines Кут ліній + + + Variables + Змінні + + + + Value angle of line. + Значення дуги лінії. + DialogBisector @@ -169,81 +277,136 @@ Бісектриса - + Length Довжина - - + + Formula calculation of length of bisector + Формула калькуляції довжини бісектриси + + + + Calculate formula + Розрахувати формулу + + + + ... - + + Value of length + Значення довжини + + + _ - + Name new point Ім'я нової точки - + + Put variable into formula + Вставити змінну в формулу + + + First point Перша точка - + + First point of angle + Перша точка кута + + + Second point Друга точка - + + Second point of angle + Друга точка кута + + + Third point Третя точка - + + Third point of angle + Третя точка кута + + + Type line Тип лінії - + + Show line from second point to our point + Показати лінію з другої точки кута до нашої точки + + + Input data Вхідні данні - + Size and growth Розмір і зріст - + Standart table Стандартна таблиця - + Increments Прибавки - + Length of lines Довжина ліній - + Length of arcs Довжина дуг - + Length of curves Довжина кривих + + + Variables. Click twice to select. + Змінні. Подвійний клік для вибору. + + + + Select second point of angle + Виберіть другу точку кута + + + + Select third point of angle + Виберіть третю точку кута + DialogDetail @@ -253,15 +416,54 @@ Деталь - - Name detail - Ім'я деталі + + Bias X + - + + Bias Y + + + + + Option + + + + + Name of detail + + + + + Supplement for seams + + + + + Width + + + + Name detail + Ім'я деталі + + + Closed Замкнена + + + Get wrong scene object. Ignore. + Отримано непаравильний об'єкт сцени. Ігноровано. + + + + Get wrong tools. Ignore. + Отримано неправильний інструмент. Ігноровано. + DialogEndLine @@ -271,84 +473,170 @@ Точка на кінці відрізку - + Length Довжина - - - - - - - - - - + + Formula calculation of length of line + Формула розрахунку довжини лінії + + + + Calculate formula + Розрахувати формулу + + + + + + + + + + + + ... - + + Value of length + Значення довжини + + + _ - + Base point Базова точка - + + First point of line + Перша точка лінії + + + Name new point Ім'я нової точки - + Angle degree Кут градуси - + + Angle of line + Кут лінії + + + Type line Тип лінії - + + Show line from first point to our point + Показати лінію від першої точки до нашої точки + + + Input data Вхідні данні - + Size and growth Розмір і зріст - + Standart table Стандартна таблиця - + Increments Прибавки - + Length of lines Довжина ліній - + Length of arcs Довжина дуг - + Length of curves Довжина кривих + + + Variables. Click twice to select. + Змінні. Подвійний клік для вибору. + + + + DialogHeight + + + Dialog + + + + + Name new point + Ім'я нової точки + + + + Base point + Базова точка + + + + + + + First point of line + Перша точка лінії + + + + Second point of line + Друга точка лінії + + + + Type line + Тип лінії + + + + Show line from first point to our point + Показати лінію від першої точки до нашої точки + + + + Select first point of line + Виберість першу точку лінії + + + + Select second point of line + Виберіть другу точку лінії + DialogHistory @@ -359,9 +647,81 @@ + Tool Інструмент + + + %1 - Base point + %1 - Базова точка + + + + + %1_%2 - Line from point %1 to point %2 + %1_%2 - Лінія від точки %1 до точки %2 + + + + %3 - Point along line %1_%2 + %3 - Точка вздовж лінії %1_%2 + + + + %1 - Point of soulder + %1 - Точка плеча + + + + %3 - Normal to line %1_%2 + %3 - Перпедикуляр до лінії %1_%2 + + + + %4 - Bisector of angle %1_%2_%3 + %4 - Бісектриса кута %1_%2_%3 + + + + %5 - Point of intersection lines %1_%2 and %3_%4 + %5 - Точка перетину лінії %1_%2 і %3_%4 + + + + Curve %1_%2 + Крива %1_%2 + + + + Arc with center in point %1 + Дуга з центром в точці %1 + + + + Curve point %1 + Точка кривої %1 + + + + %4 - Point of contact arc with center in point %1 and line %2_%3 + %4 - Точка дотику дуги з центром в точці %1 і лінії %2_%3 + + + + Point of perpendical from point %1 to line %2_%3 + + + + + Triangle: axis %1_%2, points %3 and %4 + + + + + Get wrong tool type. Ignore. + Отримано неправильний тип інструменту. Ігноруємо. + DialogIncrements @@ -378,19 +738,23 @@ - + + + Denotation Позначення - + The calculated value Розраховане значення - + + + Base value Базове значення @@ -406,71 +770,105 @@ - + + + + + Description Опис - + + + In size В розмірах - + + + In growth В ростах - - + + ... - + Lines Лінії - + + Line Лінія - + Length of the line Довжина лінії - + Curves Криві - + + Curve Крива - + Length of the curve Довжина кривої - + Arcs Дуги - + + Arc Дуга - + Length of arc Довжина дуги + + + Denotation %1 + Позначення %1 + + + + Can't convert toDouble value. + + + + + + Calculated value + Розраховане значення + + + + + + Length + Довжина + DialogLine @@ -489,6 +887,11 @@ Second point Друга точка + + + Select second point + Виберіть другу точку + DialogLineIntersect @@ -498,32 +901,47 @@ Точка перетину ліній - + Name new point Ім'я нової точки - + First line Перша лінія - + First point Перша точка - + Second point Друга точка - + Second line Друга лінія + + + Select second point of first line + Виберіть другу точка першої лінії + + + + Select first point of second line + Виберіть першу точку другої лінії + + + + Select second point of second line + Виберіть другу точку другої лінії + DialogNormal @@ -533,89 +951,124 @@ Перпендикуляр - + Length Довжина - - - - - - - - - - + + Formula calculation of length of normal + Формула розрахунку довжини перпендикуляра + + + + Calculate formula + Розрахувати формулу + + + + + + + + + + + + ... - + + Value of length + Значення довжини + + + _ - + Name new point Ім'я нової точки - + + Put variable into formula + Вставити змінну в формулу + + + First point Перша точка - + Second point Друга точка - + Additional angle degrees Додатковий кут градуси - + Type line Тип лінії - + + Show line from first point to our point + Показати лінію від першої точки до нашої точки + + + Input data Вхідні данні - + Size and growth Розмір і зріст - + Standart table Стандартна таблиця - + Increments Прибавки - + Length of lines Довжини ліній - + Length of arcs Довжини дуг - + Length of curves Довжини кривих + + + Variables. Click twice to select. + Змінні. Подвійний клік для вибору. + + + + Select second point of line + Виберіть другу точку лінії + DialogPointOfContact @@ -625,152 +1078,270 @@ Точка дотику - + Radius Радіус - - + + Formula calculation of radius of arc + Формула розрахунку радіуса дуги + + + + Calculate formula + Розрахувати формулу + + + + ... - + + Value of radius + Значення радіусу + + + _ - + Name new point Ім'я нової точки - + + Put variable into formula + Вставити змінну в формулу + + + Center of arc Центер дуги - + + Slect point of center of arc + Виберіть точку центру дуги + + + Top of the line Початок лінії - + End of the line Кінець лінії - + Input data Вхідні данні - + Size and growth Розмір і зріст - + Standart table Стандартна таблиця - + Increments Прибавки - + Length of lines Довжини ліній - + Length of arcs Довжини дуг - + Length of curves Довжини кривих + + + Variables. Click twice to select. + Змінні. Подвійний клік для вибору. + + + + Select second point of line + Виберіть другу точку лінії + + + + Select point of center of arc + Виберіть точку центру дуги + + + + DialogPointOfIntersection + + + Dialog + + + + + Name new point + Ім'я нової точки + + + + Point vertically + + + + + First point of angle + Перша точка кута + + + + Point horizontally + + + + + Second point of angle + Друга точка кута + + + + Select point horizontally + + DialogShoulderPoint - + Point of shoulder Точка плеча - + Length Довжина - - + + Formula calculation of length of line + Формула розрахунку довжини лінії + + + + Calculate formula + Розрахувати формулу + + + + ... - + + Value of length + Значення довжини + + + _ - + Name new point Ім'я нової точки - + + Put variable into formula + Вставити змінну в формулу + + + First point Перша точка - + Second point Друга точка - + Type of line Тип лінії - + + Show line from first point to our point + Показати лінію від першої точки до нашої точки + + + Input data Вхідні данні - + Size and growth Розмір і зріст - + Standart table Стандартна таблиця - + Increments Прибавки - - + + Length of lines Довжини лінії - + Length of curves Довжни кривих + + + Variables. Click twice to select. + Змінні. Подвійний клік для вибору. + + + + Select second point of line + Виберіть другу точку лінії + + + + Select point of shoulder + Виберіть точку плеча + DialogSinglePoint @@ -780,22 +1351,31 @@ Точка - Координати + Координати + + + + Coordinates on the sheet + Координати на листі + + + + Coordinates Координати - + Y coordinate Y координата - + X coordinate Х координата - + Point name Ім'я точки @@ -842,6 +1422,11 @@ Coefficient of curvature of the curve Коефіцієнт кривизни кривої + + + Select last point of curve + Виберість останню точку кривої + DialogSplinePath @@ -876,10 +1461,132 @@ Кут другої контрольної точки - + + List of points + Список точок + + + Coefficient of curvature of the curve Коефіцієнт кривизни кривої + + + Select point of curve path + Виберіть точку складної кривої + + + + DialogTool + + + Wrong details id. + Неправильний id деталі. + + + + + + Line + Лінія + + + + + No line + Без лінії + + + + Can't find point by name + + + + + Error + Помилка + + + + Growth + + + + + Size + + + + + Line length + Довжина лінії + + + + Arc length + + + + + Curve length + + + + + DialogTriangle + + + Dialog + + + + + Name new point + Ім'я нової точки + + + + First point of axis + + + + + + + + First point of line + Перша точка лінії + + + + Second point of axis + + + + + First point + Перша точка + + + + Second point + Друга точка + + + + Select second point of axis + + + + + Select first point + Виберість першу точку + + + + Select second point + Виберіть другу точку + MainWindow @@ -889,266 +1596,543 @@ Valentina - + + Tools for creating points. + Інструмент створення точок. + + + Point Точка - - - - - - - - - - - - + + Tool point of normal. + Інструмент точка перпендикуляра. + + + + + + + + + + + + + + + + + ... - + + Tool point of shoulder. + Інструмент точка плеча. + + + + Tool point on the end line. + Інструмент точка на кінці лінії. + + + + Tool point along line. + Інструмент точка вздовж лінії. + + + + Tool point of bisector. + Інструмент точка бісектриси кута. + + + + Tool point of contact. + Інструмент точка дотику. + + + + Tool point of height. + + + + + Tool triangle. + + + + + Tools for creating lines. + Інструменти для створення ліній. + + + Line Лінія - + + Tool line. + Інструмент лінія. + + + + Tool point of line intersection. + Інструмент точка перетину ліній. + + + + Tools for creating curves. + Інструменти для створення кривих. + + + Curve Крива - + + Tool curve. + Інструмент крива. + + + + Tool path curve. + Інструмент складна крива. + + + + Tools for creating arcs. + Інструменти для створення дуг. + + + Arc Дуга - + + Tool arc. + Інструмент дуга. + + + + Tools for creating details. + Інструменти для створення деталей. + + + Detail Деталь - + + Tool new detail. + Інструмент нова деталь. + + + + File + Файл + + + + Help + Допомога + + + + Drawing + Креслення + + + toolBar - + toolBar_2 - + toolBar_3 - + New Новий - + Create a new pattern Створити нове лекало - + Open Відкрити - + Open file with pattern Відкрити файл з лекалами - + Save Зберегти - + Save pattern Зберегти лекало - + + Save as Зберегти як - + Save not yet saved pattern Зберегти ще не збережене лекало - + Draw Малювання - + Draw mode Режим малювання - + Details Деталь - + Deatils mode Режим деталей - - + + Tools pointer Інструмент вказівник - + New drawing Нове креслення - + Add new drawing Додати нове креслення - - + + Change the name of drawing Змінити ім'я креслення - + Table of variables Таблиця змінних - + Tables of variables Таблиці змінних - + History Історія - + Layout Розкладки - + Create layout Створити розкладку - + + + About Qt + Про Qt + + + + + About Valentina + Про Valentina + + + + Exit + Вихід + + + Drawing %1 Креслення %1 - - + + Drawing: Креслення: - + Enter a name for the drawing. Введіть ім'я креслення. - - + + Error. Drawing of same name already exists. Помилка. Креслення з таким ім'ям вже існує. - + Error creating drawing with the name Помилка створення креслення з ім'ям - + Enter a new name for the drawing. Введіть нове ім'я креслення. - + + Error saving change!!! + + + + + Can't save new name of drawing + + + + + + Select point + Виберість точку + + + + Select first point + Виберість першу точку + + + + + + Select first point of line + Виберість першу точку лінії + + + + Select first point of angle + Виберіть першу точку кута + + + + Select first point of first line + Виберіть першу точку першої лінії + + + + Select first point curve + Виберіть першу точку кривої + + + + Select point of center of arc + Виберіть точку центру дуги + + + + Select point of curve path + Виберіть точку складної кривої + + + Select points, arcs, curves and details clockwise. + Виберіть точки, дуги, криві і д + + + Valentina v.0.1.0 + Valentina v.0.1.0 + + + + The pattern has been modified. + Лекало було зміненно. + + + + Do you want to save your changes? + Ви хочете зберегти зміни? + + + Growth: Зріст: - + Size: Розмір: - + Drawing: Креслення: - + + Lekalo files (*.xml);;All files (*.*) + Файли лекала (*.xml);;Всі файли (*.*) + + + + Lekalo files (*.xml) Файл лекала (*.xml) - + + Error saving file. Can't save file. + Помилка збереження файлу. Не можу зберегти файл. + + + Open file Відкрити файл - + + Got empty file name. + Отримано пусте імя файлу. + + + + Could not copy temp file to pattern file + Не можу копіювати тимчасовий файл до файлу лекала + + + + Could not remove pattern file + Не можу видалити файл лекала + + + Can't open pattern file. File name empty Не можу відкрити файл лекала. Пусте ім'я файлу - - - - - + + + + + + + + Error! Помилка! - + + Create new drawing for start working. + Створіть нове креслення для початку роботи. + + + + Select points, arcs, curves clockwise. + Виберіть точки, дуги, криві загодинниковою стрілкою. + + + + Select base point + + + + + Select first point of axis + + + + + Select point vertically + + + + + Based on Qt %2 (32 bit) + + + + + Built on %3 at %4 + + + + + <h1>%1</h1> %2 <br/><br/> %3 <br/><br/> %4 + + + + Error parsing file. Помилка парсингу файла. - + Error can't convert value. Помилка, не можу конвертувати значення. - + Error empty parameter. Помилка, пустий параметр. - + Error wrong id. Помикла, неправильний id. - + + + Error don't unique id. + Помилка, не унікальний id. + + + Error parsing pattern file. Помилка парсінгу файлу лекала. - + Error in line %1 column %2 Помилка в лінії %1 стовпчик %2 @@ -1172,6 +2156,7 @@ + Save layout Зберегти розкладку @@ -1244,57 +2229,89 @@ Зупинити - + SVG Generator Example Drawing - + An SVG drawing created by the SVG Generator Example provided with Qt. + + VAbstractNode + + + Can't find tag Modeling + + + VApplication - - - - - + + + + + + Error! Помилка! - + Error parsing file. Program will be terminated. Помилка парсінгу файла. Програма буде закрита. - + Error bad id. Program will be terminated. Помилка неправильний id. Програма буде закрита. - + Error can't convert value. Program will be terminated. Помилка конвертації значення. Програма буде закрита. - + Error empty parameter. Program will be terminated. Помилка пустий параметр. Програма буде закрита. - + Error wrong id. Program will be terminated. Помилка неправильний id. Програма буде закрита. + + + Something wrong!! + + + + + VArc + + + Can't find id = %1 in table. + + + + + Angle of arc can't be 0 degree. + + + + + Arc have not this number of part. + + VContainer - + Can't find object Не можу знайти об'єкт @@ -1302,150 +2319,228 @@ VDomDocument - + Got wrong parameter id. Need only id > 0. Отримано неправильний id. Допускаються тільки id > 0. - + Can't convert toLongLong parameter Не можу конвертувати toLongLong параметру - + Got empty parameter Отримано пустий параметр - + Can't convert toDouble parameter Не можу конвертувати toDouble параметру - + + This id is not unique. + Цей id не унікальний. + + + Error creating or updating detail Помилка створення чи оновлення деталі - + Error creating or updating single point Помилка створення чи оновлення простої точки - + Error creating or updating point of end line Помилка створення чи оновлення точки кінця відрізку - + Error creating or updating point along line Помилка створення чи оновлення точки вздовж лінії - + Error creating or updating point of shoulder Помилка створення чи оновлення точки плеча - + Error creating or updating point of normal Помилка створення чи оновлення точки нормалі - + Error creating or updating point of bisector Помилка створення чи оновлення точки бісектриси - + Error creating or updating point of lineintersection Помилка створення чи оновлення точки перетину ліній - + Error creating or updating point of contact Помилка створення чи оновлення точки дотику - + Error creating or updating modeling point Помилка створення чи оновлення модельної точки - + + Error creating or updating height + + + + + Error creating or updating triangle + + + + + Error creating or updating point of intersection + + + + Error creating or updating line Помилка створення чи оновлення лінії - + Error creating or updating simple curve Помилка створення чи оновлення кривої - + Error creating or updating curve path Помилка створення чи оновлення шляху кривих - + Error creating or updating modeling simple curve Помилка створення чи оновлення модельної кривої - + Error creating or updating modeling curve path Помилка створення чи оновлення модельного шляху кривих - + Error creating or updating simple arc Помилка створення чи оновлення дуги - + Error creating or updating modeling arc Помилка створення чи оновлення модельної дуги - + + Error! + Помилка! + + + + Error parsing file. + Помилка парсингу файла. + + Can't get parent for object id = %1 - Не можу отримати батька для об'єкту id = %1 + Не можу отримати батька для об'єкту id = %1 VDrawTool - + Options Параметри - + Delete Видалити + + + Can not find the element after which you want to insert. + + + + + Can't find tag Calculation + + + + + VModelingTool + + + Option + + + + + Delete + Видалити + VSplinePath - + Not enough points to create the spline. Не достатньо точок для створення кривої. - - - + + + This spline is not exist. Такий сплайн не існує. + + VTableGraphicsView + + + detail don't find + + + + + detail find + + + VToolDetail - + + Options + Параметри + + + Delete Видалити + + VToolTriangle + + + Can't find point. + + + diff --git a/version.h b/version.h new file mode 100644 index 000000000..f988bb497 --- /dev/null +++ b/version.h @@ -0,0 +1,12 @@ +#ifndef VERSION_H +#define VERSION_H + +#include + +extern const int MAJOR_VERSION = 0; +extern const int MINOR_VERSION = 2; +extern const int DEBUG_VERSION = 0; + +extern const QString APP_VERSION(QStringLiteral("%1.%2.%3").arg(MAJOR_VERSION).arg(MINOR_VERSION).arg(DEBUG_VERSION)); +extern const QString WARRANTY(QT_TR_NOOP("The program is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.")); +#endif // VERSION_H diff --git a/widgets/doubledelegate.cpp b/widgets/doubledelegate.cpp index 3b0932624..612f38b5a 100644 --- a/widgets/doubledelegate.cpp +++ b/widgets/doubledelegate.cpp @@ -45,46 +45,35 @@ using a spin box widget. */ -#include #include "doubledelegate.h" - DoubleSpinBoxDelegate::DoubleSpinBoxDelegate(QObject *parent) - : QItemDelegate(parent) - { - } - - QWidget *DoubleSpinBoxDelegate::createEditor(QWidget *parent, - const QStyleOptionViewItem &/* option */, - const QModelIndex &/* index */) const - { - QDoubleSpinBox *editor = new QDoubleSpinBox(parent); - editor->setMinimum(-1000.0); - editor->setMaximum(1000.0); - - return editor; - } - - void DoubleSpinBoxDelegate::setEditorData(QWidget *editor, - const QModelIndex &index) const - { - int value = index.model()->data(index, Qt::EditRole).toInt(); - - QDoubleSpinBox *spinBox = static_cast(editor); - spinBox->setValue(value); - } - - void DoubleSpinBoxDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, - const QModelIndex &index) const - { - QDoubleSpinBox *spinBox = static_cast(editor); - spinBox->interpretText(); - qreal value = spinBox->value(); - - model->setData(index, value, Qt::EditRole); - } - - void DoubleSpinBoxDelegate::updateEditorGeometry(QWidget *editor, - const QStyleOptionViewItem &option, const QModelIndex &/* index */) const - { - editor->setGeometry(option.rect); +QWidget *DoubleSpinBoxDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, + const QModelIndex &index ) const{ + Q_UNUSED(option); + Q_UNUSED(index); + QDoubleSpinBox *editor = new QDoubleSpinBox(parent); + editor->setMinimum(-10000.0); + editor->setMaximum(10000.0); + return editor; +} + +void DoubleSpinBoxDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const{ + qreal value = index.model()->data(index, Qt::EditRole).toDouble(); + + QDoubleSpinBox *spinBox = static_cast(editor); + spinBox->setValue(value); +} + +void DoubleSpinBoxDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const{ + QDoubleSpinBox *spinBox = static_cast(editor); + spinBox->interpretText(); + qreal value = spinBox->value(); + + model->setData(index, value, Qt::EditRole); +} + +void DoubleSpinBoxDelegate::updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, + const QModelIndex &index) const{ + Q_UNUSED(index) + editor->setGeometry(option.rect); } diff --git a/widgets/doubledelegate.h b/widgets/doubledelegate.h index a86b54f63..a4c7a536e 100644 --- a/widgets/doubledelegate.h +++ b/widgets/doubledelegate.h @@ -42,26 +42,15 @@ #define DOUBLEDELEGATE_H #include -#include -#include -#include -#include class DoubleSpinBoxDelegate : public QItemDelegate{ Q_OBJECT - public: - DoubleSpinBoxDelegate(QObject *parent = 0); - - QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, - const QModelIndex &index) const; - - void setEditorData(QWidget *editor, const QModelIndex &index) const; - void setModelData(QWidget *editor, QAbstractItemModel *model, - const QModelIndex &index) const; - - void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, - const QModelIndex &index) const; + DoubleSpinBoxDelegate(QObject *parent = 0): QItemDelegate(parent){} + QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const; + void setEditorData(QWidget *editor, const QModelIndex &index) const; + void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const; + void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const; }; #endif diff --git a/widgets/vapplication.cpp b/widgets/vapplication.cpp index b8f658bcc..e53617b6f 100644 --- a/widgets/vapplication.cpp +++ b/widgets/vapplication.cpp @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -20,18 +20,12 @@ ****************************************************************************/ #include "vapplication.h" -#include -#include #include "exception/vexceptionobjecterror.h" #include "exception/vexceptionbadid.h" #include "exception/vexceptionconversionerror.h" #include "exception/vexceptionemptyparameter.h" #include "exception/vexceptionwrongparameterid.h" -VApplication::VApplication(int & argc, char ** argv) : - QApplication(argc, argv){ -} - // reimplemented from QApplication so we can throw exceptions in slots bool VApplication::notify(QObject *receiver, QEvent *event){ try { @@ -95,6 +89,16 @@ bool VApplication::notify(QObject *receiver, QEvent *event){ msgBox.exec(); abort(); } + catch(const VException &e){ + QMessageBox msgBox; + msgBox.setWindowTitle(tr("Error!")); + msgBox.setText(tr("Something wrong!!")); + msgBox.setInformativeText(e.ErrorMessage()); + msgBox.setStandardButtons(QMessageBox::Ok); + msgBox.setDefaultButton(QMessageBox::Ok); + msgBox.setIcon(QMessageBox::Critical); + msgBox.exec(); + } catch(std::exception& e) { qCritical() << "Exception thrown:" << e.what(); } diff --git a/widgets/vapplication.h b/widgets/vapplication.h index 80d3f516c..3192cb658 100644 --- a/widgets/vapplication.h +++ b/widgets/vapplication.h @@ -3,12 +3,11 @@ #include -class VApplication : public QApplication -{ +class VApplication : public QApplication{ Q_OBJECT public: - VApplication(int &argc, char ** argv); - virtual ~VApplication() { } + VApplication(int &argc, char ** argv): QApplication(argc, argv){} + virtual ~VApplication() {} virtual bool notify(QObject * receiver, QEvent * event); }; diff --git a/widgets/vcontrolpointspline.cpp b/widgets/vcontrolpointspline.cpp index fceaac561..4e3e378b9 100644 --- a/widgets/vcontrolpointspline.cpp +++ b/widgets/vcontrolpointspline.cpp @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -20,15 +20,11 @@ ****************************************************************************/ #include "vcontrolpointspline.h" -#include -#include -#include -#include VControlPointSpline::VControlPointSpline(const qint32 &indexSpline, SplinePoint::Position position, const QPointF &controlPoint, const QPointF &splinePoint, QGraphicsItem *parent):QGraphicsEllipseItem(parent), - radius(1.5*PrintDPI/25.4), controlLine(0), indexSpline(indexSpline), position(position){ + radius(toPixel(1.5)), controlLine(0), indexSpline(indexSpline), position(position){ //create circle QRectF rec = QRectF(0, 0, radius*2, radius*2); rec.translate(-rec.center().x(), -rec.center().y()); diff --git a/widgets/vcontrolpointspline.h b/widgets/vcontrolpointspline.h index 231f8220a..9ed7e1cbb 100644 --- a/widgets/vcontrolpointspline.h +++ b/widgets/vcontrolpointspline.h @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -23,38 +23,35 @@ #define VCONTROLPOINTSPLINE_H #include -#include #include #include "geometry/vsplinepath.h" -class VControlPointSpline : public QObject, public QGraphicsEllipseItem -{ +class VControlPointSpline : public QObject, public QGraphicsEllipseItem{ Q_OBJECT public: - VControlPointSpline(const qint32 &indexSpline, SplinePoint::Position position, - const QPointF &controlPoint, const QPointF &splinePoint, - QGraphicsItem * parent = 0); + VControlPointSpline(const qint32 &indexSpline, SplinePoint::Position position, + const QPointF &controlPoint, const QPointF &splinePoint, + QGraphicsItem * parent = 0); signals: - void ControlPointChangePosition(const qint32 &indexSpline, SplinePoint::Position position, - const QPointF pos); + void ControlPointChangePosition(const qint32 &indexSpline, SplinePoint::Position position, + const QPointF pos); public slots: - void RefreshLine(const qint32 &indexSpline, SplinePoint::Position pos, - const QPointF &controlPoint, const QPointF &splinePoint); - void setEnabledPoint(bool enable); + void RefreshLine(const qint32 &indexSpline, SplinePoint::Position pos, const QPointF &controlPoint, + const QPointF &splinePoint); + void setEnabledPoint(bool enable); protected: - qreal radius; - QGraphicsLineItem *controlLine; - virtual void hoverMoveEvent ( QGraphicsSceneHoverEvent * event ); - virtual void hoverLeaveEvent ( QGraphicsSceneHoverEvent * event ); - QVariant itemChange ( GraphicsItemChange change, const QVariant &value ); + qreal radius; + QGraphicsLineItem *controlLine; + virtual void hoverMoveEvent ( QGraphicsSceneHoverEvent * event ); + virtual void hoverLeaveEvent ( QGraphicsSceneHoverEvent * event ); + QVariant itemChange ( GraphicsItemChange change, const QVariant &value ); private: Q_DISABLE_COPY(VControlPointSpline) - qint32 indexSpline; + qint32 indexSpline; SplinePoint::Position position; - qint32 LineIntersectCircle(QPointF center, qreal radius, QLineF line, QPointF &p1, - QPointF &p2) const; - QPointF ClosestPoint(QLineF line, QPointF p) const; - QPointF addVector (QPointF p, QPointF p1, QPointF p2, qreal k) const; + qint32 LineIntersectCircle(QPointF center, qreal radius, QLineF line, QPointF &p1, QPointF &p2) const; + QPointF ClosestPoint(QLineF line, QPointF p) const; + QPointF addVector (QPointF p, QPointF p1, QPointF p2, qreal k) const; }; diff --git a/widgets/vgraphicssimpletextitem.cpp b/widgets/vgraphicssimpletextitem.cpp index a37aba2fc..52a74973e 100644 --- a/widgets/vgraphicssimpletextitem.cpp +++ b/widgets/vgraphicssimpletextitem.cpp @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -20,18 +20,21 @@ ****************************************************************************/ #include "vgraphicssimpletextitem.h" -#include -#include -VGraphicsSimpleTextItem::VGraphicsSimpleTextItem(QGraphicsItem * parent):QGraphicsSimpleTextItem(parent){ +VGraphicsSimpleTextItem::VGraphicsSimpleTextItem(QGraphicsItem * parent):QGraphicsSimpleTextItem(parent), + fontSize(0){ this->setFlag(QGraphicsItem::ItemIsMovable, true); this->setFlag(QGraphicsItem::ItemIsSelectable, true); this->setFlag(QGraphicsItem::ItemSendsGeometryChanges, true); this->setAcceptHoverEvents(true); + QFont font = this->font(); + font.setPointSize(font.pointSize()+3); + fontSize = font.pointSize(); + this->setFont(font); } VGraphicsSimpleTextItem::VGraphicsSimpleTextItem( const QString & text, QGraphicsItem * parent ) - :QGraphicsSimpleTextItem(text, parent){ + :QGraphicsSimpleTextItem(text, parent), fontSize(0){ this->setFlag(QGraphicsItem::ItemIsMovable, true); this->setFlag(QGraphicsItem::ItemIsSelectable, true); this->setFlag(QGraphicsItem::ItemSendsGeometryChanges, true); diff --git a/widgets/vgraphicssimpletextitem.h b/widgets/vgraphicssimpletextitem.h index e3f31d0bf..61bcd9471 100644 --- a/widgets/vgraphicssimpletextitem.h +++ b/widgets/vgraphicssimpletextitem.h @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -24,18 +24,20 @@ #include -class VGraphicsSimpleTextItem : public QObject, public QGraphicsSimpleTextItem -{ +class VGraphicsSimpleTextItem : public QObject, public QGraphicsSimpleTextItem{ Q_OBJECT public: VGraphicsSimpleTextItem(QGraphicsItem * parent = 0); VGraphicsSimpleTextItem( const QString & text, QGraphicsItem * parent = 0 ); + qint32 FontSize()const {return fontSize;} signals: void NameChangePosition(const QPointF pos); protected: QVariant itemChange ( GraphicsItemChange change, const QVariant &value ); virtual void hoverMoveEvent ( QGraphicsSceneHoverEvent * event ); virtual void hoverLeaveEvent ( QGraphicsSceneHoverEvent * event ); +private: + qint32 fontSize; }; #endif // VGRAPHICSSIMPLETEXTITEM_H diff --git a/widgets/vitem.cpp b/widgets/vitem.cpp index 917bd26ae..d9b508003 100644 --- a/widgets/vitem.cpp +++ b/widgets/vitem.cpp @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -20,16 +20,6 @@ ****************************************************************************/ #include "vitem.h" -#include -#include -#include "options.h" - -VItem::VItem():numInOutList(0){ -} - -VItem::VItem ( int numInList, QGraphicsItem * parent ):QGraphicsPathItem ( parent ), - numInOutList(numInList){ -} VItem::VItem (const QPainterPath & path, int numInList, QGraphicsItem * parent ): QGraphicsPathItem ( path, parent ), numInOutList(numInList){ @@ -77,7 +67,3 @@ QVariant VItem::itemChange( GraphicsItemChange change, const QVariant &value ){ void VItem::LengthChanged(){ checkItemChange(); } - -void VItem::SetIndexInList( qint32 index ){ - numInOutList = index; -} diff --git a/widgets/vitem.h b/widgets/vitem.h index 1b8e9e12b..ccf47413f 100644 --- a/widgets/vitem.h +++ b/widgets/vitem.h @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -35,14 +35,14 @@ public: * @brief VItem конструктор за замовчуванням *Конструктор генерує пусту деталь з номером в списку, що дорівнює 0. */ - VItem (); + VItem ():numInOutList(0){} /** * @brief VItem конструктор * @param numInList номер в списку деталей, що передається у вікно де *укладаються деталі. * @param parent батьківський об'єкт на сцені для даного. За замовчуванням немає. */ - VItem (int numInList, QGraphicsItem * parent = 0); + VItem (int numInList, QGraphicsItem * parent = 0):QGraphicsPathItem (parent), numInOutList(numInList){} /** * @brief VItem конструктор * @param path зображення що буде показуватися на сцені - об’єкт класу QPainterPath. @@ -50,22 +50,22 @@ public: *укладаються деталі. * @param parent батьківський об'єкт на сцені для даного. За замовчуванням немає. */ - VItem ( const QPainterPath & path, int numInList, QGraphicsItem * parent = 0 ); + VItem ( const QPainterPath & path, int numInList, QGraphicsItem * parent = 0 ); /** * @brief Rotate повертає об'єкт на кут в градусах * @param angle кут в градусах на який повертається деталь. */ - void Rotate ( qreal angle ); + void Rotate ( qreal angle ); public slots: /** * @brief LengthChanged слот який обробляє сигнал зміни довжини листа. */ - void LengthChanged(); + void LengthChanged(); /** * @brief SetIndexInList встановлює номер деталі в списку деталей. * @param index номер в списку. */ - void SetIndexInList( qint32 index ); + inline void SetIndexInList( qint32 index ) {numInOutList = index;} protected: /** * @brief itemChange модифікація стандартного методу itemChange. Виконується перехоплення зміни @@ -74,12 +74,12 @@ protected: * @param value * @return */ - QVariant itemChange ( GraphicsItemChange change, const QVariant &value ); + QVariant itemChange ( GraphicsItemChange change, const QVariant &value ); /** * @brief checkItemChange перевіряє вихід деталі за рамки листа і факт колізії. Посилає відповідні *сигнали. */ - void checkItemChange (); + void checkItemChange (); private: /** * @brief numInOutList для зберігання інформації про колізії від кожної деталі необхідно знати її @@ -92,13 +92,13 @@ signals: * @param numInOutList номер деталі яка вийшла за межі листа або тепер знаходиться в межах листа. * @param flag був вихід чи ні. */ - void itemOut ( int numInOutList, bool flag ); + void itemOut ( int numInOutList, bool flag ); /** * @brief itemColliding сигнал колізії деталі з іншими. Посилається як для додавання деталі до *списку тих що перетинаються, так і для виключення його з такого. * @param list список усіх деталей які приймають участь в колізії включаючи самого себе. * @param number 1 - перетин є, 0 - перетину немає. */ - void itemColliding ( QList list, int number ); + void itemColliding ( QList list, int number ); }; #endif // VITEM_H diff --git a/widgets/vmaingraphicsscene.cpp b/widgets/vmaingraphicsscene.cpp index 74fee4735..dc3010ca0 100644 --- a/widgets/vmaingraphicsscene.cpp +++ b/widgets/vmaingraphicsscene.cpp @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -20,16 +20,12 @@ ****************************************************************************/ #include "vmaingraphicsscene.h" -#include -#include -#include -#include -VMainGraphicsScene::VMainGraphicsScene():QGraphicsScene(), horScrollBar(0), verScrollBar(0){ +VMainGraphicsScene::VMainGraphicsScene():QGraphicsScene(), horScrollBar(0), verScrollBar(0), scaleFactor(1){ } VMainGraphicsScene::VMainGraphicsScene(const QRectF & sceneRect, QObject * parent): - QGraphicsScene ( sceneRect, parent ), horScrollBar(0), verScrollBar(0){ + QGraphicsScene ( sceneRect, parent ), horScrollBar(0), verScrollBar(0), scaleFactor(1){ } void VMainGraphicsScene::mouseMoveEvent(QGraphicsSceneMouseEvent* event){ @@ -46,22 +42,7 @@ void VMainGraphicsScene::ChoosedItem(qint64 id, Scene::Scenes type){ emit ChoosedObject(id, type); } -void VMainGraphicsScene::RemoveTool(QGraphicsItem *tool){ - this->removeItem(tool); -} - -qint32 VMainGraphicsScene::getVerScrollBar() const{ - return verScrollBar; -} - -void VMainGraphicsScene::setVerScrollBar(const qint32 &value){ - verScrollBar = value; -} - -qint32 VMainGraphicsScene::getHorScrollBar() const{ - return horScrollBar; -} - -void VMainGraphicsScene::setHorScrollBar(const qint32 &value){ - horScrollBar = value; +void VMainGraphicsScene::SetFactor(qreal factor){ + scaleFactor=scaleFactor*factor; + emit NewFactor(scaleFactor); } diff --git a/widgets/vmaingraphicsscene.h b/widgets/vmaingraphicsscene.h index 41ec68d89..63522396e 100644 --- a/widgets/vmaingraphicsscene.h +++ b/widgets/vmaingraphicsscene.h @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -23,35 +23,32 @@ #define VMAINGRAPHICSSCENE_H #include -#include -#include -#include "options.h" -class VMainGraphicsScene : public QGraphicsScene -{ +class VMainGraphicsScene : public QGraphicsScene{ Q_OBJECT public: - VMainGraphicsScene(); - VMainGraphicsScene(const QRectF & sceneRect, QObject * parent = 0); - qint32 getHorScrollBar() const; - void setHorScrollBar(const qint32 &value); - - qint32 getVerScrollBar() const; - void setVerScrollBar(const qint32 &value); - + VMainGraphicsScene(); + VMainGraphicsScene(const QRectF & sceneRect, QObject * parent = 0); + inline qint32 getHorScrollBar() const {return horScrollBar;} + inline void setHorScrollBar(const qint32 &value) {horScrollBar = value;} + inline qint32 getVerScrollBar() const {return verScrollBar;} + inline void setVerScrollBar(const qint32 &value) {verScrollBar = value;} public slots: - void ChoosedItem(qint64 id, Scene::Scenes type); - void RemoveTool(QGraphicsItem *tool); + void ChoosedItem(qint64 id, Scene::Scenes type); + inline void RemoveTool(QGraphicsItem *tool) {this->removeItem(tool);} + void SetFactor(qreal factor); protected: - void mouseMoveEvent(QGraphicsSceneMouseEvent* event); - void mousePressEvent(QGraphicsSceneMouseEvent *event); + void mouseMoveEvent(QGraphicsSceneMouseEvent* event); + void mousePressEvent(QGraphicsSceneMouseEvent *event); signals: - void mouseMove(QPointF scenePos); - void mousePress(QPointF scenePos); - void ChoosedObject(qint64 id, Scene::Scenes type); + void mouseMove(QPointF scenePos); + void mousePress(QPointF scenePos); + void ChoosedObject(qint64 id, Scene::Scenes type); + void NewFactor(qreal factor); private: - qint32 horScrollBar; - qint32 verScrollBar; + qint32 horScrollBar; + qint32 verScrollBar; + qreal scaleFactor; }; #endif // VMAINGRAPHICSSCENE_H diff --git a/widgets/vmaingraphicsview.cpp b/widgets/vmaingraphicsview.cpp index 694a12984..acfca1764 100644 --- a/widgets/vmaingraphicsview.cpp +++ b/widgets/vmaingraphicsview.cpp @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -20,33 +20,73 @@ ****************************************************************************/ #include "vmaingraphicsview.h" -#include -#include -#include VMainGraphicsView::VMainGraphicsView(QWidget *parent) : - QGraphicsView(parent){ - QGraphicsView::setResizeAnchor(QGraphicsView::AnchorUnderMouse); - setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform); + QGraphicsView(parent), _numScheduledScalings(0){ + this->setResizeAnchor(QGraphicsView::AnchorUnderMouse); + this->setTransformationAnchor(QGraphicsView::AnchorUnderMouse); + this->setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform); } void VMainGraphicsView::wheelEvent(QWheelEvent *event){ - if (QApplication::keyboardModifiers() == Qt::ControlModifier){ - // Если нажата клавиша CTRL этот код выполнится - if ((event->delta())>0){ - ZoomIn(); - } else if ((event->delta())<0){ - ZoomOut(); - } + int numDegrees = event->delta() / 8; + int numSteps = numDegrees / 15; // see QWheelEvent documentation + _numScheduledScalings += numSteps; + if (_numScheduledScalings * numSteps < 0){ // if user moved the wheel in another direction, we reset + _numScheduledScalings = numSteps; // previously scheduled scalings + } + + QTimeLine *anim = new QTimeLine(350, this); + anim->setUpdateInterval(20); + + connect(anim, &QTimeLine::valueChanged, this, &VMainGraphicsView::scalingTime); + connect(anim, &QTimeLine::finished, this, &VMainGraphicsView::animFinished); + anim->start(); +} + +void VMainGraphicsView::scalingTime(qreal x){ + Q_UNUSED(x); + qreal factor = 1.0 + qreal(_numScheduledScalings) / 300.0; + if (QApplication::keyboardModifiers() == Qt::ControlModifier){// If you press CTRL this code will execute + scale(factor, factor); + emit NewFactor(factor); } else { - verticalScrollBar()->setValue(verticalScrollBar()->value() - event->delta()); + if(_numScheduledScalings < 0){ + verticalScrollBar()->setValue(qRound(verticalScrollBar()->value() + factor*3.5)); + emit NewFactor(factor); + } else { + if(verticalScrollBar()->value() > 0){ + verticalScrollBar()->setValue(qRound(verticalScrollBar()->value() - factor*3.5)); + emit NewFactor(factor); + } + } + } +} + +void VMainGraphicsView::animFinished(){ + if (_numScheduledScalings > 0){ + _numScheduledScalings--; + } else { + _numScheduledScalings++; + } + sender()->~QObject(); +} + +void VMainGraphicsView::mousePressEvent(QMouseEvent *mousePress){ + if(mousePress->button() & Qt::LeftButton){ + switch(QGuiApplication::keyboardModifiers()){ + case Qt::ControlModifier: + QGraphicsView::setDragMode(QGraphicsView::ScrollHandDrag); + QGraphicsView::mousePressEvent(mousePress); + break; + default: + QGraphicsView::mousePressEvent(mousePress); + break; + } } } -void VMainGraphicsView::ZoomIn(){ - scale(1.1,1.1); -} - -void VMainGraphicsView::ZoomOut(){ - scale(1/1.1,1/1.1); +void VMainGraphicsView::mouseReleaseEvent(QMouseEvent *event){ + QGraphicsView::mouseReleaseEvent ( event ); + QGraphicsView::setDragMode( QGraphicsView::RubberBandDrag ); } diff --git a/widgets/vmaingraphicsview.h b/widgets/vmaingraphicsview.h index 67cf3f679..d0035c7de 100644 --- a/widgets/vmaingraphicsview.h +++ b/widgets/vmaingraphicsview.h @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -24,30 +24,25 @@ #include -class VMainGraphicsView : public QGraphicsView -{ +class VMainGraphicsView : public QGraphicsView{ Q_OBJECT public: explicit VMainGraphicsView(QWidget *parent = 0); - signals: + void NewFactor(qreal factor); +public slots: + void scalingTime(qreal x); + void animFinished(); protected: /** * @brief wheelEvent обробник повороту колеса мишки. * @param event передається подія. */ - void wheelEvent ( QWheelEvent * event ); - -public slots: - /** - * @brief ZoomIn збільшує масштаб листа. - */ - void ZoomIn(); - /** - * @brief ZoomOut зменшує масштаб листа. - */ - void ZoomOut(); - + void wheelEvent ( QWheelEvent * event ); + void mousePressEvent(QMouseEvent *mousePress); + void mouseReleaseEvent(QMouseEvent *event); +private: + qint32 _numScheduledScalings; }; #endif // VMAINGRAPHICSVIEW_H diff --git a/widgets/vtablegraphicsview.cpp b/widgets/vtablegraphicsview.cpp index b2f9d57f1..609bb1ec3 100644 --- a/widgets/vtablegraphicsview.cpp +++ b/widgets/vtablegraphicsview.cpp @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -20,11 +20,6 @@ ****************************************************************************/ #include "vtablegraphicsview.h" -#include -#include -#include -#include -#include VTableGraphicsView::VTableGraphicsView(QGraphicsScene* pScene, QWidget *parent) : QGraphicsView(pScene, parent){ @@ -35,18 +30,14 @@ VTableGraphicsView::VTableGraphicsView(QGraphicsScene* pScene, QWidget *parent) void VTableGraphicsView::selectionChanged(){ QList listSelectedItems = scene()->selectedItems(); if( listSelectedItems.isEmpty() == true ){ - qDebug() << "деталь не знайдено"; + qDebug() << tr("detail don't find"); emit itemChect(true); } else { - qDebug() << "деталь знайдено"; + qDebug() << tr("detail find"); emit itemChect(false); } } -void VTableGraphicsView::rotateItems(){ - rotateIt(); -} - void VTableGraphicsView::MirrorItem(){ QList list = scene()->selectedItems(); if(list.size()>0){ @@ -82,14 +73,6 @@ void VTableGraphicsView::MirrorItem(){ } } -void VTableGraphicsView::ZoomIn(){ - scale(1.1,1.1); -} - -void VTableGraphicsView::ZoomOut(){ - scale(1/1.1,1/1.1); -} - void VTableGraphicsView::wheelEvent(QWheelEvent *event){ if (QGuiApplication::keyboardModifiers() == Qt::ControlModifier){ // Если нажата клавиша CTRL этот код выполнится diff --git a/widgets/vtablegraphicsview.h b/widgets/vtablegraphicsview.h index ef86ebeff..8b52ac2a7 100644 --- a/widgets/vtablegraphicsview.h +++ b/widgets/vtablegraphicsview.h @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -24,70 +24,68 @@ #include -class VTableGraphicsView : public QGraphicsView -{ +class VTableGraphicsView : public QGraphicsView{ Q_OBJECT public: enum typeMove_e { Left, Right, Up, Down }; - explicit VTableGraphicsView(QGraphicsScene* pScene, QWidget *parent = 0); - + VTableGraphicsView(QGraphicsScene* pScene, QWidget *parent = 0); signals: /** * @brief itemChect Сигнал, що посилається коли змінюється стан вибору деталі. * @param flag Зберігає стан вибору деталі: false - знайдено, true - не знайдено. */ - void itemChect( bool flag ); + void itemChect( bool flag ); public slots: /** * @brief selectionChanged Слот виконується при зміні стану вибору деталей. */ - void selectionChanged(); + void selectionChanged(); /** * @brief rotateItems слот, який виконується при натисненні кнопки повороту деталі. */ - void rotateItems(); + inline void rotateItems() {rotateIt();} /** * @brief MirrorItem дзеркалить об'єкт відносно вертикальної вісі семетрії об'єкта. */ - void MirrorItem(); + void MirrorItem(); /** * @brief ZoomIn збільшує масштаб листа. */ - void ZoomIn(); + inline void ZoomIn() {scale(1.1,1.1);} /** * @brief ZoomOut зменшує масштаб листа. */ - void ZoomOut(); + inline void ZoomOut() {scale(1/1.1,1/1.1);} protected: /** * @brief wheelEvent обробник повороту колеса мишки. * @param event передається подія. */ - void wheelEvent ( QWheelEvent * event ); + void wheelEvent ( QWheelEvent * event ); /** * @brief mousePressEvent обробник натиснення кнопки миші. * @param mousePress передається подія. */ - void mousePressEvent(QMouseEvent *mousePress); + void mousePressEvent(QMouseEvent *mousePress); /** * @brief mouseReleaseEvent обробник відпускання кнопки миші. * @param event передається подія */ - void mouseReleaseEvent ( QMouseEvent * event ); + void mouseReleaseEvent ( QMouseEvent * event ); /** * @brief keyPressEvent обробник натиснення клавіші. * @param event передається подія. */ - void keyPressEvent ( QKeyEvent * event ); + void keyPressEvent ( QKeyEvent * event ); /** * @brief rotateIt виконує поворот вибраних деталей на 180 градусів. */ - void rotateIt(); + void rotateIt(); /** * @brief MoveItem переміщує виділені об'єкти сцени. * @param move напрямок переміщення. */ - void MoveItem( VTableGraphicsView::typeMove_e move ); + void MoveItem( VTableGraphicsView::typeMove_e move ); }; diff --git a/xml/vdomdocument.cpp b/xml/vdomdocument.cpp index 151a6b522..7dc3e5807 100644 --- a/xml/vdomdocument.cpp +++ b/xml/vdomdocument.cpp @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -20,44 +20,40 @@ ****************************************************************************/ #include "vdomdocument.h" -#include -#include "tools/drawTools/drawtools.h" -#include "tools/nodeDetails/nodedetails.h" -#include "tools/modelingTools/modelingtools.h" -#include "tools/vtooldetail.h" -#include "options.h" -#include "container/calculator.h" -#include "geometry/vsplinepoint.h" -#include "exception/vexceptionwrongparameterid.h" -#include "exception/vexceptionconversionerror.h" -#include "exception/vexceptionemptyparameter.h" -#include "exception/vexceptionbadid.h" -#include "exception/vexceptionobjecterror.h" - +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include VDomDocument::VDomDocument(VContainer *data, QComboBox *comboBoxDraws, Draw::Draws *mode) : QDomDocument(), - map(QMap()), nameActivDraw(QString()), data(data), - tools(QMap()), history(QVector()), cursor(0), + map(QHash()), nameActivDraw(QString()), data(data), + tools(QHash()), history(QVector()), cursor(0), comboBoxDraws(comboBoxDraws), mode(mode){ } VDomDocument::VDomDocument(const QString& name, VContainer *data, QComboBox *comboBoxDraws, Draw::Draws *mode) : - QDomDocument(name), map(QMap()), nameActivDraw(QString()), data(data), - tools(QMap()), history(QVector()), cursor(0), + QDomDocument(name), map(QHash()), nameActivDraw(QString()), data(data), + tools(QHash()), history(QVector()), cursor(0), comboBoxDraws(comboBoxDraws), mode(mode){ } VDomDocument::VDomDocument(const QDomDocumentType& doctype, VContainer *data, QComboBox *comboBoxDraws, Draw::Draws *mode) : - QDomDocument(doctype), map(QMap()), nameActivDraw(QString()), data(data), - tools(QMap()), history(QVector()), cursor(0), + QDomDocument(doctype), map(QHash()), nameActivDraw(QString()), data(data), + tools(QHash()), history(QVector()), cursor(0), comboBoxDraws(comboBoxDraws), mode(mode){ } -VDomDocument::~VDomDocument(){ -} - QDomElement VDomDocument::elementById(const QString& id){ if (map.contains(id)) { QDomElement e = map[id]; @@ -168,11 +164,20 @@ void VDomDocument::ChangeActivDraw(const QString& name, Document::Documents pars } } -void VDomDocument::SetNameDraw(const QString& name){ +bool VDomDocument::SetNameDraw(const QString& name){ Q_ASSERT_X(!name.isEmpty(), "SetNameDraw", "name draw is empty"); QString oldName = nameActivDraw; - nameActivDraw = name; - emit ChangedNameDraw(oldName, nameActivDraw); + QDomElement element; + if(GetActivDrawElement(element)){ + nameActivDraw = name; + element.setAttribute("name", nameActivDraw); + emit haveChange(); + emit ChangedNameDraw(oldName, nameActivDraw); + return true; + } else { + qWarning()<<"Can't find activ draw"<nameActivDraw = name; } -QString VDomDocument::GetNameActivDraw() const{ - return nameActivDraw; -} - bool VDomDocument::GetActivDrawElement(QDomElement &element){ if(!nameActivDraw.isEmpty()){ QDomNodeList elements = this->documentElement().elementsByTagName( "draw" ); @@ -252,9 +253,10 @@ bool VDomDocument::GetActivNodeElement(const QString& name, QDomElement &element void VDomDocument::Parse(Document::Documents parse, VMainGraphicsScene *sceneDraw, VMainGraphicsScene *sceneDetail){ - Q_CHECK_PTR(sceneDraw); - Q_CHECK_PTR(sceneDetail); + Q_ASSERT(sceneDraw != 0); + Q_ASSERT(sceneDetail != 0); if(parse == Document::FullParse){ + TestUniqueId(); data->Clear(); nameActivDraw.clear(); sceneDraw->clear(); @@ -296,14 +298,6 @@ void VDomDocument::Parse(Document::Documents parse, VMainGraphicsScene *sceneDra } } -QMap *VDomDocument::getTools(){ - return &tools; -} - -QVector *VDomDocument::getHistory(){ - return &history; -} - void VDomDocument::ParseIncrementsElement(const QDomNode &node){ QDomNode domNode = node.firstChild(); while(!domNode.isNull()){ @@ -363,13 +357,35 @@ qreal VDomDocument::GetParametrDouble(const QDomElement &domElement, const QStri Q_ASSERT_X(!domElement.isNull(), Q_FUNC_INFO, "domElement is null"); bool ok = false; QString parametr = GetParametrString(domElement, name); - qreal param = parametr.toDouble(&ok); + qreal param = parametr.replace(",", ".").toDouble(&ok); if(ok == false){ throw VExceptionConversionError(tr("Can't convert toDouble parameter"), name); } return param; } +void VDomDocument::TestUniqueId() const{ + QVector vector; + CollectId(this->documentElement(), vector); +} + +void VDomDocument::CollectId(QDomElement node, QVector &vector) const{ + if (node.hasAttribute("id")) { + qint64 id = GetParametrId(node); + if(vector.contains(id)){ + throw VExceptionUniqueId(tr("This id is not unique."), node); + } + vector.append(id); + } + + for (qint32 i=0; iaddItem(spoint); connect(spoint, &VToolSinglePoint::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem); + connect(scene, &VMainGraphicsScene::NewFactor, spoint, &VToolSinglePoint::SetFactor); tools[id] = spoint; } return; @@ -766,11 +800,86 @@ void VDomDocument::ParsePointElement(VMainGraphicsScene *scene, const QDomElemen throw excep; } } + if(type == "height"){ + try{ + qint64 id = GetParametrId(domElement); + QString name = GetParametrString(domElement, "name"); + qreal mx = toPixel(GetParametrDouble(domElement, "mx")); + qreal my = toPixel(GetParametrDouble(domElement, "my")); + QString typeLine = GetParametrString(domElement, "typeLine"); + qint64 basePointId = GetParametrLongLong(domElement, "basePoint"); + qint64 p1LineId = GetParametrLongLong(domElement, "p1Line"); + qint64 p2LineId = GetParametrLongLong(domElement, "p2Line"); + if(mode == Draw::Calculation){ + VToolHeight::Create(id, name, typeLine, basePointId, p1LineId, p2LineId, mx, my, scene, + this, data, parse, Tool::FromFile); + } else { + VModelingHeight::Create(id, name, typeLine, basePointId, p1LineId, p2LineId, mx, my, this, + data, parse, Tool::FromFile); + } + return; + } + catch(const VExceptionBadId &e){ + VExceptionObjectError excep(tr("Error creating or updating height"), domElement); + excep.AddMoreInformation(e.ErrorMessage()); + throw excep; + } + } + if(type == "triangle"){ + try{ + qint64 id = GetParametrId(domElement); + QString name = GetParametrString(domElement, "name"); + qreal mx = toPixel(GetParametrDouble(domElement, "mx")); + qreal my = toPixel(GetParametrDouble(domElement, "my")); + qint64 axisP1Id = GetParametrLongLong(domElement, "axisP1"); + qint64 axisP2Id = GetParametrLongLong(domElement, "axisP2"); + qint64 firstPointId = GetParametrLongLong(domElement, "firstPoint"); + qint64 secondPointId = GetParametrLongLong(domElement, "secondPoint"); + + if(mode == Draw::Calculation){ + VToolTriangle::Create(id, name, axisP1Id, axisP2Id, firstPointId, secondPointId, mx, my, + scene, this, data, parse, Tool::FromFile); + } else { + VModelingTriangle::Create(id, name, axisP1Id, axisP2Id, firstPointId, secondPointId, mx, my, + this, data, parse, Tool::FromFile); + } + return; + } + catch(const VExceptionBadId &e){ + VExceptionObjectError excep(tr("Error creating or updating triangle"), domElement); + excep.AddMoreInformation(e.ErrorMessage()); + throw excep; + } + } + if(type == "pointOfIntersection"){ + try{ + qint64 id = GetParametrId(domElement); + QString name = GetParametrString(domElement, "name"); + qreal mx = toPixel(GetParametrDouble(domElement, "mx")); + qreal my = toPixel(GetParametrDouble(domElement, "my")); + qint64 firstPointId = GetParametrLongLong(domElement, "firstPoint"); + qint64 secondPointId = GetParametrLongLong(domElement, "secondPoint"); + + if(mode == Draw::Calculation){ + VToolPointOfIntersection::Create(id, name, firstPointId, secondPointId, mx, my, scene, this, data, + parse, Tool::FromFile); + } else { + VModelingPointOfIntersection::Create(id, name, firstPointId, secondPointId, mx, my, this, data, + parse, Tool::FromFile); + } + return; + } + catch(const VExceptionBadId &e){ + VExceptionObjectError excep(tr("Error creating or updating point of intersection"), domElement); + excep.AddMoreInformation(e.ErrorMessage()); + throw excep; + } + } } void VDomDocument::ParseLineElement(VMainGraphicsScene *scene, const QDomElement &domElement, const Document::Documents &parse, Draw::Draws mode){ - Q_CHECK_PTR(scene); + Q_ASSERT(scene != 0); Q_ASSERT_X(!domElement.isNull(), Q_FUNC_INFO, "domElement is null"); try{ qint64 id = GetParametrId(domElement); @@ -794,7 +903,7 @@ void VDomDocument::ParseLineElement(VMainGraphicsScene *scene, const QDomElement void VDomDocument::ParseSplineElement(VMainGraphicsScene *scene, const QDomElement &domElement, const Document::Documents &parse, const QString &type, Draw::Draws mode){ - Q_CHECK_PTR(scene); + Q_ASSERT(scene != 0); Q_ASSERT_X(!domElement.isNull(), Q_FUNC_INFO, "domElement is null"); Q_ASSERT_X(!type.isEmpty(), Q_FUNC_INFO, "type of spline is empty"); if(type == "simple"){ @@ -878,7 +987,7 @@ void VDomDocument::ParseSplineElement(VMainGraphicsScene *scene, const QDomEleme spl.setMode(typeObject); spl.setIdObject(idObject); data->UpdateModelingSpline(id, spl); - VNodeSpline::Create(this, data, id, idObject,mode, parse, Tool::FromFile); + VNodeSpline::Create(this, data, id, idObject, mode, parse, Tool::FromFile); return; } catch(const VExceptionBadId &e){ @@ -917,7 +1026,7 @@ void VDomDocument::ParseSplineElement(VMainGraphicsScene *scene, const QDomEleme void VDomDocument::ParseArcElement(VMainGraphicsScene *scene, const QDomElement &domElement, const Document::Documents &parse, const QString &type, Draw::Draws mode){ - Q_CHECK_PTR(scene); + Q_ASSERT(scene != 0); Q_ASSERT_X(!domElement.isNull(), Q_FUNC_INFO, "domElement is null"); Q_ASSERT_X(!type.isEmpty(), Q_FUNC_INFO, "type of spline is empty"); if(type == "simple"){ @@ -972,15 +1081,28 @@ void VDomDocument::ParseArcElement(VMainGraphicsScene *scene, const QDomElement void VDomDocument::FullUpdateTree(){ VMainGraphicsScene *scene = new VMainGraphicsScene(); - Q_CHECK_PTR(scene); + Q_ASSERT(scene != 0); try{ data->ClearObject(); Parse(Document::LiteParse, scene, scene); } + catch (const std::bad_alloc &) { + delete scene; + QMessageBox msgBox; + msgBox.setWindowTitle(tr("Error!")); + msgBox.setText(tr("Error parsing file.")); + msgBox.setInformativeText("std::bad_alloc"); + msgBox.setStandardButtons(QMessageBox::Ok); + msgBox.setDefaultButton(QMessageBox::Ok); + msgBox.setIcon(QMessageBox::Warning); + msgBox.exec(); + return; + } catch(...){ delete scene; throw; } + delete scene; setCurrentData(); emit FullUpdateFromFile(); @@ -995,10 +1117,6 @@ void VDomDocument::ShowHistoryTool(qint64 id, Qt::GlobalColor color, bool enable emit ShowTool(id, color, enable); } -qint64 VDomDocument::getCursor() const{ - return cursor; -} - void VDomDocument::setCursor(const qint64 &value){ cursor = value; emit ChangedCursor(cursor); @@ -1034,49 +1152,30 @@ void VDomDocument::setCurrentData(){ } } -void VDomDocument::GarbageCollector(){ - QMapIterator t(tools); - while (t.hasNext()) { - t.next(); - VDataTool *tool = t.value(); - if(tool->referens() <= 0){ - QDomElement domElement = elementById(QString().setNum(t.key())); - if(domElement.isElement()){ - QDomNode parent = domElement.parentNode(); - if(!parent.isNull()){ - parent.removeChild(domElement); - } else { - qWarning()< 0, Q_FUNC_INFO, "id <= 0"); - Q_CHECK_PTR(tool); + Q_ASSERT(tool != 0); tools.insert(id, tool); } void VDomDocument::UpdateToolData(const qint64 &id, VContainer *data){ Q_ASSERT_X(id > 0, Q_FUNC_INFO, "id <= 0"); - Q_CHECK_PTR(data); + Q_ASSERT(data != 0); VDataTool *tool = tools.value(id); - Q_CHECK_PTR(tool); + Q_ASSERT(tool != 0); tool->VDataTool::setData(data); } void VDomDocument::IncrementReferens(qint64 id) const{ Q_ASSERT_X(id > 0, Q_FUNC_INFO, "id <= 0"); VDataTool *tool = tools.value(id); - Q_CHECK_PTR(tool); + Q_ASSERT(tool != 0); tool->incrementReferens(); } void VDomDocument::DecrementReferens(qint64 id) const{ Q_ASSERT_X(id > 0, Q_FUNC_INFO, "id <= 0"); VDataTool *tool = tools.value(id); - Q_CHECK_PTR(tool); + Q_ASSERT(tool != 0); tool->decrementReferens(); } diff --git a/xml/vdomdocument.h b/xml/vdomdocument.h index 192bee821..8f9f5709d 100644 --- a/xml/vdomdocument.h +++ b/xml/vdomdocument.h @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -23,10 +23,9 @@ #define VDOMDOCUMENT_H #include -#include -#include -#include "widgets/vmaingraphicsscene.h" -#include "tools/vdatatool.h" +#include +#include +#include #include "vtoolrecord.h" namespace Document { @@ -37,83 +36,83 @@ Q_DECLARE_OPERATORS_FOR_FLAGS(Document::Documents) #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Weffc++" -class VDomDocument : public QObject, public QDomDocument -{ +class VDomDocument : public QObject, public QDomDocument{ Q_OBJECT public: - VDomDocument(VContainer *data,QComboBox *comboBoxDraws, Draw::Draws *mode); - VDomDocument(const QString& name, VContainer *data, QComboBox *comboBoxDraws, - Draw::Draws *mode); - VDomDocument(const QDomDocumentType& doctype, VContainer *data, QComboBox *comboBoxDraws, - Draw::Draws *mode); - ~VDomDocument(); - QDomElement elementById(const QString& id); - void CreateEmptyFile(); - void ChangeActivDraw(const QString& name, Document::Documents parse = Document::FullParse); - QString GetNameActivDraw() const; - bool GetActivDrawElement(QDomElement &element); - bool GetActivCalculationElement(QDomElement &element); - bool GetActivModelingElement(QDomElement &element); - bool GetActivDetailsElement(QDomElement &element); - bool appendDraw(const QString& name); - void SetNameDraw(const QString& name); - void Parse(Document::Documents parse, VMainGraphicsScene *sceneDraw, VMainGraphicsScene *sceneDetail); - QMap* getTools(); - QVector *getHistory(); - qint64 getCursor() const; - void setCursor(const qint64 &value); - void setCurrentData(); - void GarbageCollector(); - void AddTool(const qint64 &id, VDataTool *tool); - void UpdateToolData(const qint64 &id, VContainer *data); - void IncrementReferens(qint64 id) const; - void DecrementReferens(qint64 id) const; + VDomDocument(VContainer *data,QComboBox *comboBoxDraws, Draw::Draws *mode); + VDomDocument(const QString& name, VContainer *data, QComboBox *comboBoxDraws, + Draw::Draws *mode); + VDomDocument(const QDomDocumentType& doctype, VContainer *data, QComboBox *comboBoxDraws, + Draw::Draws *mode); + ~VDomDocument(){} + QDomElement elementById(const QString& id); + void CreateEmptyFile(); + void ChangeActivDraw(const QString& name, Document::Documents parse = Document::FullParse); + inline QString GetNameActivDraw() const {return nameActivDraw;} + bool GetActivDrawElement(QDomElement &element); + bool GetActivCalculationElement(QDomElement &element); + bool GetActivModelingElement(QDomElement &element); + bool GetActivDetailsElement(QDomElement &element); + bool appendDraw(const QString& name); + bool SetNameDraw(const QString& name); + void Parse(Document::Documents parse, VMainGraphicsScene *sceneDraw, VMainGraphicsScene *sceneDetail); + inline QHash* getTools() {return &tools;} + inline QVector *getHistory() {return &history;} + inline qint64 getCursor() const {return cursor;} + void setCursor(const qint64 &value); + void setCurrentData(); + void AddTool(const qint64 &id, VDataTool *tool); + void UpdateToolData(const qint64 &id, VContainer *data); + void IncrementReferens(qint64 id) const; + void DecrementReferens(qint64 id) const; + void TestUniqueId() const; signals: - void ChangedActivDraw(const QString newName); - void ChangedNameDraw(const QString oldName, const QString newName); - void FullUpdateFromFile(); - void haveChange(); - void ShowTool(qint64 id, Qt::GlobalColor color, bool enable); - void ChangedCursor(qint64 id); + void ChangedActivDraw(const QString newName); + void ChangedNameDraw(const QString oldName, const QString newName); + void FullUpdateFromFile(); + void haveChange(); + void ShowTool(qint64 id, Qt::GlobalColor color, bool enable); + void ChangedCursor(qint64 id); public slots: - void FullUpdateTree(); - void haveLiteChange(); - void ShowHistoryTool(qint64 id, Qt::GlobalColor color, bool enable); + void FullUpdateTree(); + void haveLiteChange(); + void ShowHistoryTool(qint64 id, Qt::GlobalColor color, bool enable); private: Q_DISABLE_COPY(VDomDocument) - QMap map; - QString nameActivDraw; - VContainer *data; - QMap tools; + QHash map; + QString nameActivDraw; + VContainer *data; + QHash tools; QVector history; - qint64 cursor; - QComboBox *comboBoxDraws; - Draw::Draws *mode; - bool find(QDomElement node, const QString& id); - bool CheckNameDraw(const QString& name) const; - void SetActivDraw(const QString& name); - bool GetActivNodeElement(const QString& name, QDomElement& element); - void ParseDrawElement(VMainGraphicsScene *sceneDraw, VMainGraphicsScene *sceneDetail, - const QDomNode& node, const Document::Documents &parse); - void ParseDrawMode(VMainGraphicsScene *sceneDraw, VMainGraphicsScene *sceneDetail, - const QDomNode& node, const Document::Documents &parse, Draw::Draws mode); - void ParseDetailElement(VMainGraphicsScene *sceneDetail, const QDomElement &domElement, - const Document::Documents &parse); - void ParseDetails(VMainGraphicsScene *sceneDetail, const QDomElement &domElement, - const Document::Documents &parse); - void ParsePointElement(VMainGraphicsScene *scene, const QDomElement& domElement, - const Document::Documents &parse, const QString &type, Draw::Draws mode); - void ParseLineElement(VMainGraphicsScene *scene, const QDomElement& domElement, - const Document::Documents &parse, Draw::Draws mode); - void ParseSplineElement(VMainGraphicsScene *scene, const QDomElement& domElement, + qint64 cursor; + QComboBox *comboBoxDraws; + Draw::Draws *mode; + bool find(QDomElement node, const QString& id); + bool CheckNameDraw(const QString& name) const; + void SetActivDraw(const QString& name); + bool GetActivNodeElement(const QString& name, QDomElement& element); + void ParseDrawElement(VMainGraphicsScene *sceneDraw, VMainGraphicsScene *sceneDetail, + const QDomNode& node, const Document::Documents &parse); + void ParseDrawMode(VMainGraphicsScene *sceneDraw, VMainGraphicsScene *sceneDetail, + const QDomNode& node, const Document::Documents &parse, Draw::Draws mode); + void ParseDetailElement(VMainGraphicsScene *sceneDetail, const QDomElement &domElement, + const Document::Documents &parse); + void ParseDetails(VMainGraphicsScene *sceneDetail, const QDomElement &domElement, + const Document::Documents &parse); + void ParsePointElement(VMainGraphicsScene *scene, const QDomElement& domElement, + const Document::Documents &parse, const QString &type, Draw::Draws mode); + void ParseLineElement(VMainGraphicsScene *scene, const QDomElement& domElement, + const Document::Documents &parse, Draw::Draws mode); + void ParseSplineElement(VMainGraphicsScene *scene, const QDomElement& domElement, + const Document::Documents &parse, const QString& type, Draw::Draws mode); + void ParseArcElement(VMainGraphicsScene *scene, const QDomElement& domElement, const Document::Documents &parse, const QString& type, Draw::Draws mode); - void ParseArcElement(VMainGraphicsScene *scene, const QDomElement& domElement, - const Document::Documents &parse, const QString& type, Draw::Draws mode); - void ParseIncrementsElement(const QDomNode& node); - qint64 GetParametrId(const QDomElement& domElement) const; - qint64 GetParametrLongLong(const QDomElement& domElement, const QString &name) const; - QString GetParametrString(const QDomElement& domElement, const QString &name) const; - qreal GetParametrDouble(const QDomElement& domElement, const QString &name) const; + void ParseIncrementsElement(const QDomNode& node); + qint64 GetParametrId(const QDomElement& domElement) const; + qint64 GetParametrLongLong(const QDomElement& domElement, const QString &name) const; + QString GetParametrString(const QDomElement& domElement, const QString &name) const; + qreal GetParametrDouble(const QDomElement& domElement, const QString &name) const; + void CollectId(QDomElement node, QVector &vector)const; }; #pragma GCC diagnostic pop diff --git a/xml/vtoolrecord.cpp b/xml/vtoolrecord.cpp index 5fe3279b4..881a484d9 100644 --- a/xml/vtoolrecord.cpp +++ b/xml/vtoolrecord.cpp @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -27,27 +27,3 @@ VToolRecord::VToolRecord():id(0), typeTool(Tool::ArrowTool), nameDraw(QString()) VToolRecord::VToolRecord(const qint64 &id, const Tool::Tools &typeTool, const QString &nameDraw):id(id), typeTool(typeTool), nameDraw(nameDraw){ } - -QString VToolRecord::getNameDraw() const{ - return nameDraw; -} - -void VToolRecord::setNameDraw(const QString &value){ - nameDraw = value; -} - -Tool::Tools VToolRecord::getTypeTool() const{ - return typeTool; -} - -void VToolRecord::setTypeTool(const Tool::Tools &value){ - typeTool = value; -} - -qint64 VToolRecord::getId() const{ - return id; -} - -void VToolRecord::setId(const qint64 &value){ - id = value; -} diff --git a/xml/vtoolrecord.h b/xml/vtoolrecord.h index 6292aab9f..ce598c1e0 100644 --- a/xml/vtoolrecord.h +++ b/xml/vtoolrecord.h @@ -9,7 +9,7 @@ ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** - ** Tox is distributed in the hope that it will be useful, + ** 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. @@ -22,27 +22,20 @@ #ifndef VTOOLRECORD_H #define VTOOLRECORD_H -#include -#include "options.h" - -class VToolRecord -{ +class VToolRecord{ public: - VToolRecord(); - VToolRecord(const qint64 &id, const Tool::Tools &typeTool, const QString &nameDraw); - qint64 getId() const; - void setId(const qint64 &value); - - Tool::Tools getTypeTool() const; - void setTypeTool(const Tool::Tools &value); - - QString getNameDraw() const; - void setNameDraw(const QString &value); - + VToolRecord(); + VToolRecord(const qint64 &id, const Tool::Tools &typeTool, const QString &nameDraw); + inline qint64 getId() const {return id;} + inline void setId(const qint64 &value) {id = value;} + inline Tool::Tools getTypeTool() const {return typeTool;} + inline void setTypeTool(const Tool::Tools &value) {typeTool = value;} + inline QString getNameDraw() const {return nameDraw;} + inline void setNameDraw(const QString &value) {nameDraw = value;} private: - qint64 id; - Tool::Tools typeTool; - QString nameDraw; + qint64 id; + Tool::Tools typeTool; + QString nameDraw; }; #endif // VTOOLRECORD_H