diff --git a/src/dialogs/dialogs.pri b/src/dialogs/dialogs.pri index d18e02857..3367425c8 100644 --- a/src/dialogs/dialogs.pri +++ b/src/dialogs/dialogs.pri @@ -20,7 +20,8 @@ HEADERS += \ src/dialogs/dialogarc.h \ src/dialogs/dialogalongline.h \ src/dialogs/dialogcutspline.h \ - src/dialogs/dialogcutsplinepath.h + src/dialogs/dialogcutsplinepath.h \ + src/dialogs/dialoguniondetails.h SOURCES += \ src/dialogs/dialogtriangle.cpp \ @@ -43,7 +44,8 @@ SOURCES += \ src/dialogs/dialogarc.cpp \ src/dialogs/dialogalongline.cpp \ src/dialogs/dialogcutspline.cpp \ - src/dialogs/dialogcutsplinepath.cpp + src/dialogs/dialogcutsplinepath.cpp \ + src/dialogs/dialoguniondetails.cpp FORMS += \ src/dialogs/dialogtriangle.ui \ @@ -65,4 +67,5 @@ FORMS += \ src/dialogs/dialogarc.ui \ src/dialogs/dialogalongline.ui \ src/dialogs/dialogcutspline.ui \ - src/dialogs/dialogcutsplinepath.ui + src/dialogs/dialogcutsplinepath.ui \ + src/dialogs/dialoguniondetails.ui diff --git a/src/dialogs/dialoguniondetails.cpp b/src/dialogs/dialoguniondetails.cpp new file mode 100644 index 000000000..f1922fdea --- /dev/null +++ b/src/dialogs/dialoguniondetails.cpp @@ -0,0 +1,117 @@ +/************************************************************************ + ** + ** @file dialoguniondetails.cpp + ** @author Roman Telezhinsky + ** @date 23 12, 2013 + ** + ** @brief + ** @copyright + ** This source code is part of the Valentine project, a pattern making + ** program, whose allow create and modeling patterns of clothing. + ** Copyright (C) 2013 Valentina project + ** All Rights Reserved. + ** + ** Valentina is free software: you can redistribute it and/or modify + ** it under the terms of the GNU General Public License as published by + ** the Free Software Foundation, either version 3 of the License, or + ** (at your option) any later version. + ** + ** Valentina is distributed in the hope that it will be useful, + ** but WITHOUT ANY WARRANTY; without even the implied warranty of + ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + ** GNU General Public License for more details. + ** + ** You should have received a copy of the GNU General Public License + ** along with Valentina. If not, see . + ** + *************************************************************************/ + +#include "dialoguniondetails.h" +#include "ui_dialoguniondetails.h" + +DialogUnionDetails::DialogUnionDetails(const VContainer *data, QWidget *parent) : + DialogTool(data, parent), ui(new Ui::DialogUnionDetails), details(VDetail()), d1(0), d2(0), d1P1(0), d1P2(0), + d2P1(0), d2P2(0), numberD(0), numberP(0) +{ + ui->setupUi(this); + bOk = ui->buttonBox->button(QDialogButtonBox::Ok); + connect(bOk, &QPushButton::clicked, this, &DialogUnionDetails::DialogAccepted); + QPushButton *bCansel = ui->buttonBox->button(QDialogButtonBox::Cancel); + connect(bCansel, &QPushButton::clicked, this, &DialogUnionDetails::DialogRejected); +} + +DialogUnionDetails::~DialogUnionDetails() +{ + delete ui; +} + +void DialogUnionDetails::ChoosedObject(qint64 id, const Scene::Scenes &type) +{ + if(numberD == 0) + { + ChoosedDetail(id, type, d1, d1P1, d1P2); + } + else + { + ChoosedDetail(id, type, d2, d2P1, d2P2); + } +} + +void DialogUnionDetails::DialogAccepted() +{ + emit ToolTip(""); + emit DialogClosed(QDialog::Accepted); +} + +bool DialogUnionDetails::CheckObject(const qint64 &id, const qint64 &idDetail) const +{ + if (idDetail == 0) + { + return false; + } + VDetail det = data->GetDetail(idDetail); + return det.Containes(id); +} + +void DialogUnionDetails::ChoosedDetail(const qint64 &id, const Scene::Scenes &type, qint64 &idDetail, qint64 &p1, + qint64 &p2) +{ + if (idDetail == 0) + { + if (type == Scene::Detail) + { + idDetail = id; + emit ToolTip(tr("Select first point")); + return; + } + } + if (CheckObject(id, idDetail) == false) + { + return; + } + if (type == Scene::Point) + { + if (numberP == 0) + { + p1 = id; + ++numberP; + emit ToolTip(tr("Select second point")); + } + if (numberP == 1) + { + p2 = id; + ++numberD; + if(numberD > 1) + { + ++numberP; + emit ToolTip(""); + this->show(); + } + else + { + numberP = 0; + emit ToolTip(tr("Select detail")); + } + } + } +} diff --git a/src/dialogs/dialoguniondetails.h b/src/dialogs/dialoguniondetails.h new file mode 100644 index 000000000..55825e07c --- /dev/null +++ b/src/dialogs/dialoguniondetails.h @@ -0,0 +1,75 @@ +/************************************************************************ + ** + ** @file dialoguniondetails.h + ** @author Roman Telezhinsky + ** @date 23 12, 2013 + ** + ** @brief + ** @copyright + ** This source code is part of the Valentine project, a pattern making + ** program, whose allow create and modeling patterns of clothing. + ** Copyright (C) 2013 Valentina project + ** All Rights Reserved. + ** + ** Valentina is free software: you can redistribute it and/or modify + ** it under the terms of the GNU General Public License as published by + ** the Free Software Foundation, either version 3 of the License, or + ** (at your option) any later version. + ** + ** Valentina is distributed in the hope that it will be useful, + ** but WITHOUT ANY WARRANTY; without even the implied warranty of + ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + ** GNU General Public License for more details. + ** + ** You should have received a copy of the GNU General Public License + ** along with Valentina. If not, see . + ** + *************************************************************************/ + +#ifndef DIALOGUNIONDETAILS_H +#define DIALOGUNIONDETAILS_H + +#include "dialogtool.h" + +namespace Ui { +class DialogUnionDetails; +} + +class DialogUnionDetails : public DialogTool +{ + Q_OBJECT +public: + explicit DialogUnionDetails(const VContainer *data, QWidget *parent = 0); + ~DialogUnionDetails(); +public slots: + /** + * @brief ChoosedObject gets id and type of selected object. Save correct data and ignore wrong. + * @param id id of point or detail + * @param type type of object + */ + void ChoosedObject(qint64 id, const Scene::Scenes &type); + /** + * @brief DialogAccepted save data and emit signal about closed dialog. + */ + virtual void DialogAccepted(); +private: + Q_DISABLE_COPY(DialogUnionDetails) + Ui::DialogUnionDetails *ui; + /** + * @brief details detail + */ + VDetail details; + qint64 d1; + qint64 d2; + qint64 d1P1; + qint64 d1P2; + qint64 d2P1; + qint64 d2P2; + qint32 numberD; + qint32 numberP; + bool CheckObject(const qint64 &id, const qint64 &idDetail) const; + void ChoosedDetail(const qint64 &id, const Scene::Scenes &type, qint64 &idDetail, qint64 &p1, + qint64 &p2); +}; + +#endif // DIALOGUNIONDETAILS_H diff --git a/src/dialogs/dialoguniondetails.ui b/src/dialogs/dialoguniondetails.ui new file mode 100644 index 000000000..24e84b14a --- /dev/null +++ b/src/dialogs/dialoguniondetails.ui @@ -0,0 +1,81 @@ + + + DialogUnionDetails + + + + 0 + 0 + 473 + 78 + + + + Dialog + + + + + 120 + 40 + 341 + 32 + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + 10 + 20 + 451 + 17 + + + + Do you really want union details? This operation can't be undone. + + + + + + + buttonBox + accepted() + DialogUnionDetails + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + DialogUnionDetails + reject() + + + 316 + 260 + + + 286 + 274 + + + + + diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 5ea03bfb3..e0296fa20 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -1080,7 +1080,7 @@ void MainWindow::SetEnableTool(bool enable) } else { - modelingTools = enable; // Soon we will have some tools for modeling. + modelingTools = enable; } //Drawing Tools ui->toolButtonEndLine->setEnabled(drawTools); @@ -1100,6 +1100,9 @@ void MainWindow::SetEnableTool(bool enable) ui->toolButtonPointOfIntersection->setEnabled(drawTools); ui->toolButtonSplineCutPoint->setEnabled(drawTools); ui->toolButtonSplinePathCutPoint->setEnabled(drawTools); + + //Modeling Tools + ui->toolButtonUnionDetails->setEnabled(modelingTools); } void MainWindow::MinimumScrollBar() diff --git a/src/mainwindow.ui b/src/mainwindow.ui index 674702e62..75381f5f9 100644 --- a/src/mainwindow.ui +++ b/src/mainwindow.ui @@ -40,7 +40,7 @@ - 3 + 4 @@ -597,7 +597,10 @@ - + + + false + ... diff --git a/src/tools/nodeDetails/vnodearc.cpp b/src/tools/nodeDetails/vnodearc.cpp index 03c843ac3..e6edbd547 100644 --- a/src/tools/nodeDetails/vnodearc.cpp +++ b/src/tools/nodeDetails/vnodearc.cpp @@ -39,8 +39,6 @@ VNodeArc::VNodeArc(VDomDocument *doc, VContainer *data, qint64 id, qint64 idArc, { RefreshGeometry(); this->setPen(QPen(baseColor, widthHairLine)); - this->setFlag(QGraphicsItem::ItemIsSelectable, true); - this->setAcceptHoverEvents(true); if (typeCreation == Tool::FromGui) { diff --git a/src/tools/nodeDetails/vnodespline.cpp b/src/tools/nodeDetails/vnodespline.cpp index 1dab7b856..c95ab9684 100644 --- a/src/tools/nodeDetails/vnodespline.cpp +++ b/src/tools/nodeDetails/vnodespline.cpp @@ -39,8 +39,6 @@ VNodeSpline::VNodeSpline(VDomDocument *doc, VContainer *data, qint64 id, qint64 { RefreshGeometry(); this->setPen(QPen(baseColor, widthHairLine)); - this->setFlag(QGraphicsItem::ItemIsSelectable, true); - this->setAcceptHoverEvents(true); if (typeCreation == Tool::FromGui) { diff --git a/src/tools/nodeDetails/vnodesplinepath.cpp b/src/tools/nodeDetails/vnodesplinepath.cpp index 4781ceaa8..997e3d556 100644 --- a/src/tools/nodeDetails/vnodesplinepath.cpp +++ b/src/tools/nodeDetails/vnodesplinepath.cpp @@ -39,8 +39,6 @@ VNodeSplinePath::VNodeSplinePath(VDomDocument *doc, VContainer *data, qint64 id, { RefreshGeometry(); this->setPen(QPen(baseColor, widthHairLine)); - this->setFlag(QGraphicsItem::ItemIsSelectable, true); - this->setAcceptHoverEvents(true); if (typeCreation == Tool::FromGui) {