/************************************************************************ ** ** @file dialogpiecepath.cpp ** @author Roman Telezhynskyi ** @date 22 11, 2016 ** ** @brief ** @copyright ** This source code is part of the Valentine project, a pattern making ** program, whose allow create and modeling patterns of clothing. ** Copyright (C) 2016 Valentina project ** All Rights Reserved. ** ** Valentina is free software: you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** ** Valentina is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Valentina. If not, see . ** *************************************************************************/ #include "dialogpiecepath.h" #include "ui_dialogpiecepath.h" #include "../vpatterndb/vpiecenode.h" #include //--------------------------------------------------------------------------------------------------------------------- DialogPiecePath::DialogPiecePath(const VContainer *data, quint32 toolId, QWidget *parent) : DialogTool(data, toolId, parent), ui(new Ui::DialogPiecePath), m_showMode(true) { ui->setupUi(this); InitOkCancel(ui); flagName = true;//We have default name of piece. flagError = PathIsValid(); CheckState(); connect(ui->lineEditName, &QLineEdit::textChanged, this, &DialogPiecePath::NameChanged); if (not m_showMode) { //vis = new VisToolPiecePath(data); } else { ui->comboBoxType->setDisabled(true); ui->comboBoxPiece->setDisabled(true); } show();//temporary } //--------------------------------------------------------------------------------------------------------------------- DialogPiecePath::~DialogPiecePath() { delete ui; } //--------------------------------------------------------------------------------------------------------------------- void DialogPiecePath::DisableShowMode(bool disable) { m_showMode = disable; } //--------------------------------------------------------------------------------------------------------------------- void DialogPiecePath::ChosenObject(quint32 id, const SceneObject &type) { if (not prepare) { bool reverse = false; if (QGuiApplication::keyboardModifiers() == Qt::ShiftModifier) { reverse = true; } switch (type) { case SceneObject::Arc: NewItem(VPieceNode(id, Tool::NodeArc, reverse)); break; case SceneObject::Point: NewItem(VPieceNode(id, Tool::NodePoint)); break; case SceneObject::Spline: NewItem(VPieceNode(id, Tool::NodeSpline, reverse)); break; case SceneObject::SplinePath: NewItem(VPieceNode(id, Tool::NodeSplinePath, reverse)); break; case (SceneObject::Line): case (SceneObject::Detail): case (SceneObject::Unknown): default: qDebug() << "Got wrong scene object. Ignore."; break; } ValidObjects(PathIsValid()); if (not m_showMode) { // auto visPath = qobject_cast(vis); // SCASSERT(visPath != nullptr); // const VPiecePath p = CreatePath(); // visPath->SetPath(p); // if (p.CountNodes() == 1) // { // emit ToolTip(tr("Select main path objects, Shift - reverse direction curve, " // "Enter - finish creation")); // visPath->VisualMode(NULL_ID); // } // else // { // visPath->RefreshGeometry(); // } } } } //--------------------------------------------------------------------------------------------------------------------- void DialogPiecePath::ShowDialog(bool click) { if (click == false) { emit ToolTip(""); prepare = true; if (not m_showMode) { // auto visPath = qobject_cast(vis); // SCASSERT(visPath != nullptr); // visPath->SetMode(Mode::Show); // visPath->RefreshGeometry(); } setModal(true); show(); } } //--------------------------------------------------------------------------------------------------------------------- void DialogPiecePath::SaveData() {} //--------------------------------------------------------------------------------------------------------------------- void DialogPiecePath::CheckState() { SCASSERT(bOk != nullptr); bOk->setEnabled(flagName && flagError && ui->comboBoxPiece->count() > 0); } //--------------------------------------------------------------------------------------------------------------------- void DialogPiecePath::ShowContextMenu(const QPoint &pos) { const int row = ui->listWidget->currentRow(); if (ui->listWidget->count() == 0 || row == -1 || row >= ui->listWidget->count()) { return; } QMenu *menu = new QMenu(this); QAction *actionDelete = menu->addAction(QIcon::fromTheme("edit-delete"), tr("Delete")); actionDelete->setEnabled(m_showMode);//Because we can't undo this operation when creating a piece. QListWidgetItem *rowItem = ui->listWidget->item(row); SCASSERT(rowItem != nullptr); VPieceNode rowNode = qvariant_cast(rowItem->data(Qt::UserRole)); QAction *actionReverse = nullptr; if (rowNode.GetTypeTool() != Tool::NodePoint) { actionReverse = menu->addAction(tr("Reverse")); actionReverse->setCheckable(true); actionReverse->setChecked(rowNode.GetReverse()); } QAction *selectedAction = menu->exec(ui->listWidget->viewport()->mapToGlobal(pos)); if (selectedAction == actionDelete) { delete ui->listWidget->item(row); ValidObjects(PathIsValid()); } else if (selectedAction == actionReverse) { rowNode.SetReverse(not rowNode.GetReverse()); rowItem->setData(Qt::UserRole, QVariant::fromValue(rowNode)); rowItem->setText(GetNodeName(rowNode)); ValidObjects(PathIsValid()); } ListChanged(); } //--------------------------------------------------------------------------------------------------------------------- void DialogPiecePath::ListChanged() { if (not m_showMode) { // auto visPath = qobject_cast(vis); // SCASSERT(visPath != nullptr); // visPath->SetPiece(CreatePath()); // visPath->RefreshGeometry(); } } //--------------------------------------------------------------------------------------------------------------------- void DialogPiecePath::NameChanged() { if (ui->lineEditName->text().isEmpty()) { flagName = false; ChangeColor(ui->labelName, Qt::red); } else { flagName = true; ChangeColor(ui->labelName, okColor); } CheckState(); } //--------------------------------------------------------------------------------------------------------------------- //VPiecePath DialogPiecePath::GetPiecePath() const //{ //} //--------------------------------------------------------------------------------------------------------------------- //void DialogPiecePath::SetPiecePath(const VPiecePath &path) //{ //} //--------------------------------------------------------------------------------------------------------------------- //VPiecePath DialogPiecePath::CreatePath() const //{ //} //--------------------------------------------------------------------------------------------------------------------- bool DialogPiecePath::PathIsValid() const { // QString url = DialogWarningIcon(); // if(CreatePath().Points(data).count() < 2) // { // url += tr("You need more points!"); // ui->helpLabel->setText(url); // return false; // } // else // { // if (FirstPointEqualLast(ui->listWidget)) // { // url += tr("First point cannot be equal to the last point!"); // ui->helpLabel->setText(url); // return false; // } // else if (DoublePoints(ui->listWidget)) // { // url += tr("You have double points!"); // ui->helpLabel->setText(url); // return false; // } // } ui->helpLabel->setText(tr("Ready!")); return true; } //--------------------------------------------------------------------------------------------------------------------- void DialogPiecePath::ValidObjects(bool value) { flagError = value; CheckState(); } //--------------------------------------------------------------------------------------------------------------------- void DialogPiecePath::NewItem(const VPieceNode &node) { NewNodeItem(ui->listWidget, node); }