From 9b88d11eb3e23b8f54b3b5f6de963f58b36a6bdc Mon Sep 17 00:00:00 2001 From: mtn Date: Tue, 20 Aug 2013 06:11:43 +0000 Subject: [PATCH] CurveCreator was updated --- src/CurveCreator/CurveCreator_Curve.cxx | 53 +- src/CurveCreator/CurveCreator_Curve.hxx | 19 +- src/CurveCreator/CurveCreator_CurveEditor.cxx | 25 +- src/CurveCreator/CurveCreator_CurveEditor.hxx | 23 +- src/CurveCreator/CurveCreator_EditPntDlg.cxx | 218 --- src/CurveCreator/CurveCreator_EditPntDlg.h | 79 - src/CurveCreator/CurveCreator_EditPntsDlg.cxx | 540 ------ src/CurveCreator/CurveCreator_EditPntsDlg.h | 110 -- .../CurveCreator_EditPntsWidget.cxx | 236 --- .../CurveCreator_EditPntsWidget.h | 89 - src/CurveCreator/CurveCreator_NewPointDlg.cxx | 147 ++ src/CurveCreator/CurveCreator_NewPointDlg.h | 43 + .../CurveCreator_NewSectionDlg.cxx | 123 ++ src/CurveCreator/CurveCreator_NewSectionDlg.h | 49 + src/CurveCreator/CurveCreator_Operation.cxx | 3 +- src/CurveCreator/CurveCreator_Operation.hxx | 3 +- src/CurveCreator/CurveCreator_PointItem.cxx | 153 -- src/CurveCreator/CurveCreator_PointItem.h | 125 -- src/CurveCreator/CurveCreator_Section.hxx | 4 +- src/CurveCreator/CurveCreator_TreeView.cxx | 422 ++++ src/CurveCreator/CurveCreator_TreeView.h | 71 + src/CurveCreator/CurveCreator_Widget.cpp | 547 ++++++ src/CurveCreator/CurveCreator_Widget.cxx | 1708 +++++------------ src/CurveCreator/CurveCreator_Widget.h | 233 +-- src/CurveCreator/Makefile.am | 36 +- 25 files changed, 2139 insertions(+), 2920 deletions(-) delete mode 100644 src/CurveCreator/CurveCreator_EditPntDlg.cxx delete mode 100644 src/CurveCreator/CurveCreator_EditPntDlg.h delete mode 100644 src/CurveCreator/CurveCreator_EditPntsDlg.cxx delete mode 100644 src/CurveCreator/CurveCreator_EditPntsDlg.h delete mode 100644 src/CurveCreator/CurveCreator_EditPntsWidget.cxx delete mode 100644 src/CurveCreator/CurveCreator_EditPntsWidget.h create mode 100755 src/CurveCreator/CurveCreator_NewPointDlg.cxx create mode 100755 src/CurveCreator/CurveCreator_NewPointDlg.h create mode 100755 src/CurveCreator/CurveCreator_NewSectionDlg.cxx create mode 100755 src/CurveCreator/CurveCreator_NewSectionDlg.h delete mode 100644 src/CurveCreator/CurveCreator_PointItem.cxx delete mode 100644 src/CurveCreator/CurveCreator_PointItem.h create mode 100755 src/CurveCreator/CurveCreator_TreeView.cxx create mode 100755 src/CurveCreator/CurveCreator_TreeView.h create mode 100755 src/CurveCreator/CurveCreator_Widget.cpp diff --git a/src/CurveCreator/CurveCreator_Curve.cxx b/src/CurveCreator/CurveCreator_Curve.cxx index 64ec55c58..e41b25892 100644 --- a/src/CurveCreator/CurveCreator_Curve.cxx +++ b/src/CurveCreator/CurveCreator_Curve.cxx @@ -143,6 +143,11 @@ bool CurveCreator_Curve::isClosed(const int theISection) const return mySections.at(theISection)->myIsClosed; } +std::string CurveCreator_Curve::getSectionName(const int theISection) const +{ + return mySections.at(theISection)->myName; +} + //======================================================================= // function: setType // purpose: @@ -181,12 +186,18 @@ void CurveCreator_Curve::addPoints // purpose: //======================================================================= void CurveCreator_Curve::addSection - (const CurveCreator::Type theType, + (const std::string& theName, + const CurveCreator::Type theType, const bool theIsClosed, const CurveCreator::Coordinates &thePoints) { CurveCreator_Section *aSection = new CurveCreator_Section; + std::string aName = theName; + if( aName.empty() ){ + aName = getUnicSectionName(); + } + aSection->myName = aName; aSection->myType = theType; aSection->myIsClosed = theIsClosed; aSection->myPoints = thePoints; @@ -231,6 +242,16 @@ void CurveCreator_Curve::insertPoints } } +void CurveCreator_Curve::movePoint(const int theISection, const int theIPointFrom, const int theNewIndex) +{ + CurveCreator::Coordinates aCoords = getCoordinates(theISection, theIPointFrom ); + insertPoints(aCoords, theISection, theNewIndex+1); + int aRemPntIndx = theIPointFrom; + if( theNewIndex < theIPointFrom ) + aRemPntIndx++; + removePoints(theISection, aRemPntIndx, 1 ); +} + //======================================================================= // function: removePoints // purpose: @@ -304,6 +325,15 @@ void CurveCreator_Curve::setClosed(const bool theIsClosed, } } +/** Set name of the specified section. + */ +void CurveCreator_Curve::setName( const std::string& theName, const int theISection ) +{ + if( ( theISection >= 0 ) && ( theISection < mySections.size() )){ + mySections.at(theISection)->myName = theName; + } +} + //======================================================================= // function: moveSection // purpose: @@ -376,3 +406,24 @@ int CurveCreator_Curve::toICoord(const int theIPnt) const { return theIPnt*myDimension; } + +//======================================================================= +// function: getUnicSectionName +// purpose: return unic section name +//======================================================================= +std::string CurveCreator_Curve::getUnicSectionName() +{ + for( int i = 0 ; i < 1000000 ; i++ ){ + char aBuffer[255]; + sprintf( aBuffer, "Section_%d", i+1 ); + std::string aName(aBuffer); + int j; + for( j = 0 ; j < mySections.size() ; j++ ){ + if( mySections[j]->myName == aName ) + break; + } + if( j == mySections.size() ) + return aName; + } + return ""; +} diff --git a/src/CurveCreator/CurveCreator_Curve.hxx b/src/CurveCreator/CurveCreator_Curve.hxx index 0eb80e7f5..de0c21406 100644 --- a/src/CurveCreator/CurveCreator_Curve.hxx +++ b/src/CurveCreator/CurveCreator_Curve.hxx @@ -86,6 +86,13 @@ public: //! Get “closed” flag of the specified section bool isClosed(const int theISection) const; + //! Returns specifyed section name + std::string getSectionName(const int theISection) const; + + /** + * Return unic section name + */ + std::string getUnicSectionName(); protected: /** Set type of the specified section (or all sections @@ -100,7 +107,7 @@ protected: (const CurveCreator::Coordinates &thePoints, const int theISection = -1); //! Add a new section. - void addSection (const CurveCreator::Type theType, + void addSection (const std::string &theName, const CurveCreator::Type theType, const bool theIsClosed, const CurveCreator::Coordinates &thePoints); @@ -123,6 +130,12 @@ protected: const int theIPnt, const int theNbPoints = -1); + /** Move specified point within section to new position + */ + void movePoint(const int theISection, + const int theIPointFrom, + const int theNewIndex); + //! Remove all sections. void clear(); @@ -136,6 +149,10 @@ protected: */ void setClosed(const bool theIsClosed, const int theISection = -1); + /** Set name of the specified section. + */ + void setName( const std::string& theName, const int theISection ); + /** Move specified \a theISection to the specified position * in the sections list. */ diff --git a/src/CurveCreator/CurveCreator_CurveEditor.cxx b/src/CurveCreator/CurveCreator_CurveEditor.cxx index a9d7ee378..d1104dd4e 100644 --- a/src/CurveCreator/CurveCreator_CurveEditor.cxx +++ b/src/CurveCreator/CurveCreator_CurveEditor.cxx @@ -229,7 +229,7 @@ void CurveCreator_CurveEditor::addPoints // purpose: //======================================================================= void CurveCreator_CurveEditor::addSection - (const CurveCreator::Type theType, + (const std::string& theName, const CurveCreator::Type theType, const bool theIsClosed, const CurveCreator::Coordinates &thePoints) { @@ -241,7 +241,7 @@ void CurveCreator_CurveEditor::addSection } // Update the curve. - myPCurve->addSection(theType, theIsClosed, thePoints); + myPCurve->addSection(theName, theType, theIsClosed, thePoints); } } @@ -284,6 +284,17 @@ void CurveCreator_CurveEditor::insertPoints } } +//======================================================================= +// function: movePoints +// purpose: +//======================================================================= +void CurveCreator_CurveEditor::movePoint(const int theISection, + const int theOrigIPnt, + const int theNewIPnt ) +{ + myPCurve->movePoint(theISection, theOrigIPnt, theNewIPnt); +} + //======================================================================= // function: removePoints // purpose: @@ -362,6 +373,16 @@ void CurveCreator_CurveEditor::setClosed(const bool theIsClosed, } } +//======================================================================= +// function: setName +// purpose: +//======================================================================= +void CurveCreator_CurveEditor::setName(const std::string& theName, + const int theISection) +{ + myPCurve->setName( theName, theISection ); +} + //======================================================================= // function: moveSection // purpose: diff --git a/src/CurveCreator/CurveCreator_CurveEditor.hxx b/src/CurveCreator/CurveCreator_CurveEditor.hxx index bb9bbf7f6..36ebaef49 100644 --- a/src/CurveCreator/CurveCreator_CurveEditor.hxx +++ b/src/CurveCreator/CurveCreator_CurveEditor.hxx @@ -81,6 +81,15 @@ public: */ void setType(const CurveCreator::Type theType, const int theISection = -1); + /** Set section closed (or all sections + * if \a theISection is -1). + */ + void setClosed(const bool theIsClosed, const int theISection); + + /** Set section name (if theISection is invalid it is ignored). + */ + void setName(const std::string& theName, const int theISection); + /** Add points to the specified section (or last section * if \a theISection is -1). */ @@ -88,7 +97,7 @@ public: const int theISection = -1); //! Add a new section. - void addSection(const CurveCreator::Type theType, + void addSection(const std::string &theName, const CurveCreator::Type theType, const bool theIsClosed, const CurveCreator::Coordinates &thePoints); @@ -111,6 +120,13 @@ public: const int theIPnt, const int theNbPoints = -1); + /** Mobe point in \a theISection from given position \a theOrigIPnt + * to new position \a theNewIPnt. + */ + void movePoint(const int theISection, + const int theOrigIPnt, + const int theNewIPnt ); + //! Remove all sections. void clear(); @@ -119,11 +135,6 @@ public: const int theISection, const int theIPnt); - /** Set “closed” flag of the specified section (all sections if - * \a theISection is -1). - */ - void setClosed(const bool theIsClosed, const int theISection = -1); - /** Move specified \a theISection to the specified position * in the sections list. */ diff --git a/src/CurveCreator/CurveCreator_EditPntDlg.cxx b/src/CurveCreator/CurveCreator_EditPntDlg.cxx deleted file mode 100644 index ba7f9fb93..000000000 --- a/src/CurveCreator/CurveCreator_EditPntDlg.cxx +++ /dev/null @@ -1,218 +0,0 @@ -// Copyright (C) 2007-2013 CEA/DEN, EDF R&D, OPEN CASCADE -// -// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library 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 -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// - -// File: CurveCreator_EditPntDlg.cxx -// Created: Tue Jul 16 10:58:31 2013 -// Author: Sergey KHROMOV -// - - -#include -#include -#include -#include -#include -#include -#include -#include - - -//======================================================================= -// function: Constructor -// purpose: -//======================================================================= -CurveCreator_EditPntDlg::CurveCreator_EditPntDlg - (QWidget* parent, - const CurveCreator::Dimension theDimension) - : QDialog (parent), - myDimension (theDimension), - myXSpn (NULL), - myYSpn (NULL), - myZSpn (NULL), - myOkBtn (NULL), - myCancelBtn (NULL) -{ - setWindowTitle(tr("CC_EDIT_POINT_TITLE")); - - // Set Add/modify point group - QGroupBox *aModifPntGrp = - new QGroupBox(tr("CC_EDIT_POINT_MODIFY")); - QGridLayout *aModifPntLO = new QGridLayout(aModifPntGrp); - QLabel *aXLbl = - new QLabel(tr("CC_EDIT_POINT_X"), aModifPntGrp); - QLabel *aYLbl = - new QLabel(tr("CC_EDIT_POINT_Y"), aModifPntGrp); - - aXLbl->setAlignment(Qt::AlignRight); - aYLbl->setAlignment(Qt::AlignRight); - myXSpn = new QDoubleSpinBox(aModifPntGrp); - myYSpn = new QDoubleSpinBox(aModifPntGrp); - aModifPntLO->setMargin(9); - aModifPntLO->setSpacing(6); - aModifPntLO->addWidget(aXLbl, 0, 0); - aModifPntLO->addWidget(aYLbl, 1, 0); - aModifPntLO->addWidget(myXSpn, 0, 1); - aModifPntLO->addWidget(myYSpn, 1, 1); - - if (myDimension == CurveCreator::Dim3d) { - QLabel *aZLbl = new QLabel(tr("CC_EDIT_POINT_Z"), aModifPntGrp); - - aZLbl->setAlignment(Qt::AlignRight); - myZSpn = new QDoubleSpinBox(aModifPntGrp); - aModifPntLO->addWidget(aZLbl, 2, 0); - aModifPntLO->addWidget(myZSpn, 2, 1); - } - - // Set OK/Cancel buttons group - QGroupBox *anOkCancelGrp = new QGroupBox; - QGridLayout *anOkCancelLO = new QGridLayout(anOkCancelGrp); - - myOkBtn = new QPushButton(tr("GEOM_BUT_OK"), anOkCancelGrp); - myCancelBtn = new QPushButton(tr("GEOM_BUT_CANCEL"), anOkCancelGrp); - anOkCancelLO->setMargin(9); - anOkCancelLO->setSpacing(6); - anOkCancelLO->addWidget(myOkBtn, 0, 0); - anOkCancelLO->addWidget(myCancelBtn, 0, 1); - - // Set main group - QGroupBox *aMainGrp = new QGroupBox; - QVBoxLayout *aMainLO = new QVBoxLayout(aMainGrp); - - aMainLO->addWidget(aModifPntGrp); - aMainLO->addWidget(anOkCancelGrp); - - setLayout(aMainLO); - - init(); -} - -//======================================================================= -// function: Destructor -// purpose: -//======================================================================= -CurveCreator_EditPntDlg::~CurveCreator_EditPntDlg() -{ -} - -//======================================================================= -// function: setPoint -// purpose: -//======================================================================= -void CurveCreator_EditPntDlg::setPoint - (const CurveCreator::Coordinates &thePoint) -{ - myPoint = thePoint; - - if (myPoint.size() == myDimension) { - myXSpn->setValue(myPoint[0]); - myYSpn->setValue(myPoint[1]); - - if (myDimension == CurveCreator::Dim3d) { - myZSpn->setValue(myPoint[2]); - } - } -} - -//======================================================================= -// function: getPoint -// purpose: -//======================================================================= -const CurveCreator::Coordinates &CurveCreator_EditPntDlg::getPoint() const -{ - return myPoint; -} - -//======================================================================= -// function: init -// purpose: -//======================================================================= -void CurveCreator_EditPntDlg::init() -{ - // Init spin boxes. - initSpinBox(myXSpn); - initSpinBox(myYSpn); - - if (myDimension == CurveCreator::Dim3d) { - initSpinBox(myZSpn); - } - - // Init buttons. - myOkBtn->setDefault(true); - - connect(myOkBtn, SIGNAL(clicked()), this, SLOT(accept())); - connect(myCancelBtn, SIGNAL(clicked()), this, SLOT(reject())); - - setTabOrder(); -} - -//======================================================================= -// function: initSpinBox -// purpose: -//======================================================================= -void CurveCreator_EditPntDlg::initSpinBox(QDoubleSpinBox *theSpinBox) -{ - const double aCoordMin = -1.e+15; - const double aCoordMax = 1.e+15; - const double aStep = 10; - const int aPrecision = 6; - - theSpinBox->setDecimals( qAbs( aPrecision ) ); - theSpinBox->setRange(aCoordMin, aCoordMax); - theSpinBox->setSingleStep(aStep); - theSpinBox->setValue(0.); -} - -//======================================================================= -// function: setTabOrder -// purpose: -//======================================================================= -void CurveCreator_EditPntDlg::setTabOrder() -{ - QWidget::setTabOrder(myXSpn, myYSpn); - - if (myDimension == CurveCreator::Dim3d) { - QWidget::setTabOrder(myYSpn, myZSpn); - QWidget::setTabOrder(myZSpn, myOkBtn); - } else { - QWidget::setTabOrder(myYSpn, myOkBtn); - } - - QWidget::setTabOrder(myOkBtn, myCancelBtn); -} - -//======================================================================= -// function: accept -// purpose: -//======================================================================= -void CurveCreator_EditPntDlg::accept() -{ - // Copy point - myPoint.clear(); - myPoint.push_back(myXSpn->value()); - myPoint.push_back(myYSpn->value()); - - if (myDimension == CurveCreator::Dim3d) { - myPoint.push_back(myZSpn->value()); - } - - QDialog::accept(); -} diff --git a/src/CurveCreator/CurveCreator_EditPntDlg.h b/src/CurveCreator/CurveCreator_EditPntDlg.h deleted file mode 100644 index 4dbd397d6..000000000 --- a/src/CurveCreator/CurveCreator_EditPntDlg.h +++ /dev/null @@ -1,79 +0,0 @@ -// Copyright (C) 2007-2013 CEA/DEN, EDF R&D, OPEN CASCADE -// -// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library 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 -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// - -// File: CurveCreator_EditPntDlg.h -// Created: Tue Jul 16 10:58:22 2013 -// Author: Sergey KHROMOV -// - -#ifndef _CurveCreator_EditPntDlg_HeaderFile -#define _CurveCreator_EditPntDlg_HeaderFile - - -#include -#include - -class QListWidget; -class QDoubleSpinBox; -class QPushButton; - - -class CurveCreator_EditPntDlg : public QDialog -{ - Q_OBJECT - -public: - - CurveCreator_EditPntDlg(QWidget* parent, - const CurveCreator::Dimension theDimension); - - ~CurveCreator_EditPntDlg(); - - void setPoint(const CurveCreator::Coordinates &thePoint); - - const CurveCreator::Coordinates &getPoint() const; - -private: - - void init(); - - void initSpinBox(QDoubleSpinBox *theSpinBox); - - void setTabOrder(); - -private slots: - - void accept(); - -protected: - - CurveCreator::Dimension myDimension; - CurveCreator::Coordinates myPoint; - QDoubleSpinBox *myXSpn; - QDoubleSpinBox *myYSpn; - QDoubleSpinBox *myZSpn; - QPushButton *myOkBtn; - QPushButton *myCancelBtn; - -}; - -#endif diff --git a/src/CurveCreator/CurveCreator_EditPntsDlg.cxx b/src/CurveCreator/CurveCreator_EditPntsDlg.cxx deleted file mode 100644 index 124eb8c05..000000000 --- a/src/CurveCreator/CurveCreator_EditPntsDlg.cxx +++ /dev/null @@ -1,540 +0,0 @@ -// Copyright (C) 2007-2013 CEA/DEN, EDF R&D, OPEN CASCADE -// -// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library 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 -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// - -// File: CurveCreator_EditPntsDlg.cxx -// Created: Fri Jul 05 16:29:53 2013 -// Author: Sergey KHROMOV -// - - -#include -#include -#include -#include -#include -#include -#include -#include - - -//======================================================================= -// function: Constructor -// purpose: -//======================================================================= -CurveCreator_EditPntsDlg::CurveCreator_EditPntsDlg - (QWidget* parent, const CurveCreator::Dimension theDimension) - : QDialog (parent), - myDimension (theDimension), - myPntsList (NULL), - myXSpn (NULL), - myYSpn (NULL), - myZSpn (NULL), - myAddBtn (NULL), - myModifBtn (NULL), - myRmBtn (NULL), - myClearBtn (NULL), - myPntUpBtn (NULL), - myPntDownBtn (NULL), - myOkBtn (NULL), - myCancelBtn (NULL) -{ - setWindowTitle(tr("CC_EDIT_POINTS_TITLE")); - - // Set Add/modify point group - QGroupBox *aModifPntGrp = - new QGroupBox(tr("CC_EDIT_POINTS_ADD_MODIFY")); - QGridLayout *aModifPntLO = new QGridLayout(aModifPntGrp); - QLabel *aXLbl = - new QLabel(tr("CC_EDIT_POINTS_X"), aModifPntGrp); - QLabel *aYLbl = - new QLabel(tr("CC_EDIT_POINTS_Y"), aModifPntGrp); - - aXLbl->setAlignment(Qt::AlignRight); - aYLbl->setAlignment(Qt::AlignRight); - myXSpn = new QDoubleSpinBox(aModifPntGrp); - myYSpn = new QDoubleSpinBox(aModifPntGrp); - myAddBtn = new QPushButton(tr("CC_EDIT_POINTS_ADD"), aModifPntGrp); - myModifBtn = new QPushButton(tr("CC_EDIT_POINTS_MODIFY"), aModifPntGrp); - myRmBtn = new QPushButton(tr("CC_EDIT_POINTS_REMOVE"), aModifPntGrp); - aModifPntLO->setMargin(9); - aModifPntLO->setSpacing(6); - aModifPntLO->addWidget(aXLbl, 0, 0); - aModifPntLO->addWidget(aYLbl, 1, 0); - aModifPntLO->addWidget(myXSpn, 0, 1); - aModifPntLO->addWidget(myYSpn, 1, 1); - aModifPntLO->addWidget(myAddBtn, 0, 2); - aModifPntLO->addWidget(myModifBtn, 1, 2); - aModifPntLO->addWidget(myRmBtn, 2, 2); - - if (myDimension == CurveCreator::Dim3d) { - QLabel *aZLbl = new QLabel(tr("CC_EDIT_POINTS_Z"), aModifPntGrp); - - aZLbl->setAlignment(Qt::AlignRight); - myZSpn = new QDoubleSpinBox(aModifPntGrp); - aModifPntLO->addWidget(aZLbl, 2, 0); - aModifPntLO->addWidget(myZSpn, 2, 1); - } - - // Set Buttons group - QGroupBox *aPntsGrp = new QGroupBox(); - QGridLayout *aPntsLO = new QGridLayout(aPntsGrp); - - myClearBtn = new QPushButton(tr("CC_EDIT_POINTS_CLEAR"), aModifPntGrp); - myPntUpBtn = new QPushButton(tr("CC_EDIT_POINTS_UP"), aPntsGrp); - myPntDownBtn = new QPushButton(tr("CC_EDIT_POINTS_DOWN"), aPntsGrp); - myPntsList = new QListWidget(aPntsGrp); - aPntsLO->setMargin(9); - aPntsLO->setSpacing(6); - aPntsLO->addWidget(myClearBtn, 0, 0); - aPntsLO->addWidget(myPntUpBtn, 2, 4); - aPntsLO->addWidget(myPntDownBtn, 3, 4); - aPntsLO->addWidget(myPntsList, 1, 0, 4, 4); - - // Set OK/Cancel buttons group - QGroupBox *anOkCancelGrp = new QGroupBox(); - QGridLayout *anOkCancelLO = new QGridLayout(anOkCancelGrp); - - myOkBtn = new QPushButton(tr("GEOM_BUT_OK"), anOkCancelGrp); - myCancelBtn = new QPushButton(tr("GEOM_BUT_CANCEL"), anOkCancelGrp); - anOkCancelLO->setMargin(9); - anOkCancelLO->setSpacing(6); - anOkCancelLO->addWidget(myOkBtn, 0, 3); - anOkCancelLO->addWidget(myCancelBtn, 0, 4); - - // Set main group - QGroupBox *aMainGrp = new QGroupBox; - QVBoxLayout *aMainLO = new QVBoxLayout(aMainGrp); - - aMainLO->addWidget(aModifPntGrp); - aMainLO->addWidget(aPntsGrp); - aMainLO->addWidget(anOkCancelGrp); - - setLayout(aMainLO); - - init(); -} - -//======================================================================= -// function: Destructor -// purpose: -//======================================================================= -CurveCreator_EditPntsDlg::~CurveCreator_EditPntsDlg() -{ -} - -//======================================================================= -// function: setPoints -// purpose: -//======================================================================= -void CurveCreator_EditPntsDlg::setPoints - (const CurveCreator::Coordinates &thePoints) -{ - myPoints = thePoints; - updateEditList(); -} - -//======================================================================= -// function: getPoints -// purpose: -//======================================================================= -const CurveCreator::Coordinates &CurveCreator_EditPntsDlg::getPoints() const -{ - return myPoints; -} - -//======================================================================= -// function: init -// purpose: -//======================================================================= -void CurveCreator_EditPntsDlg::init() -{ - // Init spin boxes. - initSpinBox(myXSpn); - initSpinBox(myYSpn); - - if (myDimension == CurveCreator::Dim3d) { - initSpinBox(myZSpn); - } - - // Init buttons. - myModifBtn->setEnabled(false); - myRmBtn->setEnabled(false); - myClearBtn->setEnabled(false); - myPntUpBtn->setEnabled(false); - myPntDownBtn->setEnabled(false); - myOkBtn->setDefault(true); - - connect(myAddBtn, SIGNAL(clicked()), this, SLOT(appendPoint())); - connect(myModifBtn, SIGNAL(clicked()), this, SLOT(modifyPoint())); - connect(myRmBtn, SIGNAL(clicked()), this, SLOT(removePoint())); - connect(myClearBtn, SIGNAL(clicked()), this, SLOT(clear())); - connect(myPntUpBtn, SIGNAL(clicked()), this, SLOT(upPoint())); - connect(myPntDownBtn, SIGNAL(clicked()), this, SLOT(downPoint())); - connect(myOkBtn, SIGNAL(clicked()), this, SLOT(accept())); - connect(myCancelBtn, SIGNAL(clicked()), this, SLOT(reject())); - - // Init list widget. - myPntsList->clear(); - myPntsList->setSelectionMode(QAbstractItemView::ExtendedSelection); - myPntsList->setDragEnabled(true); - myPntsList->setDragDropMode(QAbstractItemView::InternalMove); - myPntsList->viewport()->setAcceptDrops(true); - - connect(myPntsList, SIGNAL(itemSelectionChanged()), - this, SLOT(changeSelection())); - connect(this, SIGNAL(numberOfItemsChanged(int)), - this, SLOT(onNumberOfItemsChanged(int))); - - // Set tab order. - setTabOrder(); -} - -//======================================================================= -// function: initSpinBox -// purpose: -//======================================================================= -void CurveCreator_EditPntsDlg::initSpinBox(QDoubleSpinBox *theSpinBox) -{ - const double aCoordMin = -1.e+15; - const double aCoordMax = 1.e+15; - const double aStep = 10; - const int aPrecision = 6; - - theSpinBox->setDecimals( qAbs( aPrecision ) ); - theSpinBox->setRange(aCoordMin, aCoordMax); - theSpinBox->setSingleStep(aStep); - theSpinBox->setValue(0.0); -} - -//======================================================================= -// function: updateEditList -// purpose: -//======================================================================= -void CurveCreator_EditPntsDlg::updateEditList() -{ - myPntsList->clear(); - - const int aNbCoords = myPoints.size(); - - if (aNbCoords % myDimension == 0) { - int i = 0; - - while (i < aNbCoords) { - const CurveCreator::TypeCoord aX = myPoints[i++]; - const CurveCreator::TypeCoord aY = myPoints[i++]; - - if (myDimension == CurveCreator::Dim3d) { - const CurveCreator::TypeCoord aZ = myPoints[i++]; - - new CurveCreator_PointItem(aX, aY, aZ, myPntsList); - } else { - new CurveCreator_PointItem(aX, aY, myPntsList); - } - } - } - - emit numberOfItemsChanged(myPntsList->count()); -} - -//======================================================================= -// function: movePoints -// purpose: -//======================================================================= -void CurveCreator_EditPntsDlg::movePoints(const int theShift) -{ - // Sort list items in ascending or descending order depending on - // the sign of theShift. - QList aListItems = myPntsList->selectedItems(); - - if (!aListItems.empty() && theShift != 0) { - QMap aMapItems; - - foreach(QListWidgetItem *anItem, aListItems) { - int aRow = myPntsList->row(anItem); - - if (theShift > 0) { - aRow = -aRow; - } - - aMapItems.insert(aRow, anItem); - } - - // Compute new rows - QList aListRows = aMapItems.keys(); - QList aListNewRows; - int i; - const int aSize = aListRows.size(); - - - if (theShift < 0) { - // Check each row to be positive. - int aMinIndex = 0; - - for (i = 0; i < aSize; i++) { - int aRow = aListRows[i] + theShift; - - if (aRow < aMinIndex) { - aRow = aMinIndex++; - } - - aListNewRows.append(aRow); - } - } else { - // Check each row to be not greater then a myPntsList's size. - int aMaxIndex = myPntsList->count() - 1; - - for (i = 0; i < aSize; i++) { - int aRow = -aListRows[i] + theShift; - - if (aRow > aMaxIndex) { - aRow = aMaxIndex--; - } - - aListRows[i] = -aListRows[i]; - aListNewRows.append(aRow); - } - } - - // Move each item to another position. - for (i = 0; i < aSize; i++) { - if (aListRows[i] != aListNewRows[i]) { - QListWidgetItem *anItem = myPntsList->takeItem(aListRows[i]); - - myPntsList->insertItem(aListNewRows[i], anItem); - } - } - - // Select added items. - foreach (int anIndex, aListNewRows) { - myPntsList->item(anIndex)->setSelected(true); - } - } -} - -//======================================================================= -// function: setTabOrder -// purpose: -//======================================================================= -void CurveCreator_EditPntsDlg::setTabOrder() -{ - QWidget::setTabOrder(myXSpn, myYSpn); - - if (myDimension == CurveCreator::Dim3d) { - QWidget::setTabOrder(myYSpn, myZSpn); - QWidget::setTabOrder(myZSpn, myAddBtn); - } else { - QWidget::setTabOrder(myYSpn, myAddBtn); - } - - QWidget::setTabOrder(myAddBtn, myModifBtn); - QWidget::setTabOrder(myModifBtn, myRmBtn); - QWidget::setTabOrder(myRmBtn, myClearBtn); - QWidget::setTabOrder(myClearBtn, myPntsList); - QWidget::setTabOrder(myPntsList, myPntUpBtn); - QWidget::setTabOrder(myPntUpBtn, myPntDownBtn); - QWidget::setTabOrder(myPntDownBtn, myOkBtn); - QWidget::setTabOrder(myOkBtn, myCancelBtn); -} - -//======================================================================= -// function: appendPoint -// purpose: -//======================================================================= -void CurveCreator_EditPntsDlg::appendPoint() -{ - if (myDimension == CurveCreator::Dim3d) { - new CurveCreator_PointItem(myXSpn->value(), myYSpn->value(), - myZSpn->value(), myPntsList); - } else { - new CurveCreator_PointItem(myXSpn->value(), myYSpn->value(), myPntsList); - } - - emit numberOfItemsChanged(myPntsList->count()); -} - -//======================================================================= -// function: modifyPoint -// purpose: -//======================================================================= -void CurveCreator_EditPntsDlg::modifyPoint() -{ - QList aListItems = myPntsList->selectedItems(); - - if (aListItems.size() == 1) { - CurveCreator_PointItem *aPntItem = - (CurveCreator_PointItem *)aListItems.first(); - - if (myDimension == CurveCreator::Dim3d) { - aPntItem->setCoord(myXSpn->value(), myYSpn->value(), myZSpn->value()); - } else { - aPntItem->setCoord(myXSpn->value(), myYSpn->value()); - } - } -} - -//======================================================================= -// function: removePoint -// purpose: -//======================================================================= -void CurveCreator_EditPntsDlg::removePoint() -{ - QList aListItems = myPntsList->selectedItems(); - int aRow = -1; - - foreach(QListWidgetItem *anItem, aListItems) { - if (aRow < 0) { - aRow = myPntsList->row(anItem); - } - - delete anItem; - } - - if (aRow >= 0) { - emit numberOfItemsChanged(myPntsList->count()); - } - - // Set the new selection. - if (aRow >= myPntsList->count()) { - aRow = myPntsList->count() - 1; - } - - if (aRow >= 0) { - myPntsList->item(aRow)->setSelected(true); - } -} - -//======================================================================= -// function: upPoint -// purpose: -//======================================================================= -void CurveCreator_EditPntsDlg::upPoint() -{ - movePoints(-1); -} - -//======================================================================= -// function: downPoint -// purpose: -//======================================================================= -void CurveCreator_EditPntsDlg::downPoint() -{ - movePoints(1); -} - -//======================================================================= -// function: changeSelection -// purpose: -//======================================================================= -void CurveCreator_EditPntsDlg::changeSelection() -{ - // Update modify button and spin boxes. - QList aListItems = myPntsList->selectedItems(); - const int aNbItems = aListItems.size(); - - if (aNbItems == 1) { - const CurveCreator_PointItem *aPntItem = - (const CurveCreator_PointItem *)aListItems.first(); - - myModifBtn->setEnabled(true); - myXSpn->setValue(aPntItem->getX()); - myYSpn->setValue(aPntItem->getY()); - - if (myDimension == CurveCreator::Dim3d) { - myZSpn->setValue(aPntItem->getZ()); - } - } else if (myModifBtn->isEnabled()) { - myModifBtn->setEnabled(false); - myXSpn->setValue(0.0); - myYSpn->setValue(0.0); - - if (myDimension == CurveCreator::Dim3d) { - myZSpn->setValue(0.0); - } - } - - // Set enabled remove, up and down points. - bool isEnabled = (aNbItems > 0); - - myRmBtn->setEnabled(isEnabled); - isEnabled &= (aNbItems < myPntsList->count()); - myPntUpBtn->setEnabled(isEnabled); - myPntDownBtn->setEnabled(isEnabled); -} - -//======================================================================= -// function: accept -// purpose: -//======================================================================= -void CurveCreator_EditPntsDlg::accept() -{ - // Copy points - myPoints.clear(); - - const int aNbPoints = myPntsList->count(); - int i; - - for (i = 0; i < aNbPoints; i++) { - const CurveCreator_PointItem *aPntItem = - (const CurveCreator_PointItem *)myPntsList->item(i); - - myPoints.push_back(aPntItem->getX()); - myPoints.push_back(aPntItem->getY()); - - if (myDimension == CurveCreator::Dim3d) { - myPoints.push_back(aPntItem->getZ()); - } - } - - QDialog::accept(); -} - -//======================================================================= -// function: clear -// purpose: -//======================================================================= -void CurveCreator_EditPntsDlg::clear() -{ - bool isEmpty = (myPntsList->count() == 0); - - myPntsList->clear(); - - if (!isEmpty) { - emit onNumberOfItemsChanged(0); - } -} - -//======================================================================= -// function: onNumberOfItemsChanged -// purpose: -//======================================================================= -void CurveCreator_EditPntsDlg::onNumberOfItemsChanged(int theNewValue) -{ - myClearBtn->setEnabled(theNewValue > 0); - - // Update Up and down buttons - QList aListItems = myPntsList->selectedItems(); - const int aNbItems = aListItems.size(); - const bool isEnabled = (aNbItems > 0 && aNbItems < theNewValue); - - myPntUpBtn->setEnabled(isEnabled); - myPntDownBtn->setEnabled(isEnabled); -} diff --git a/src/CurveCreator/CurveCreator_EditPntsDlg.h b/src/CurveCreator/CurveCreator_EditPntsDlg.h deleted file mode 100644 index b85d08a8e..000000000 --- a/src/CurveCreator/CurveCreator_EditPntsDlg.h +++ /dev/null @@ -1,110 +0,0 @@ -// Copyright (C) 2007-2013 CEA/DEN, EDF R&D, OPEN CASCADE -// -// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library 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 -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// - -// File: CurveCreator_EditPntsDlg.h -// Created: Fri Jul 05 16:29:48 2013 -// Author: Sergey KHROMOV -// - -#ifndef _CurveCreator_EditPntsDlg_HeaderFile -#define _CurveCreator_EditPntsDlg_HeaderFile - - -#include -#include - -class QListWidget; -class QDoubleSpinBox; -class QPushButton; - - -class CurveCreator_EditPntsDlg : public QDialog -{ - Q_OBJECT - -public: - - CurveCreator_EditPntsDlg(QWidget* parent, - const CurveCreator::Dimension theDimension); - - ~CurveCreator_EditPntsDlg(); - - void setPoints(const CurveCreator::Coordinates &thePoints); - - const CurveCreator::Coordinates &getPoints() const; - -private: - - void init(); - - void initSpinBox(QDoubleSpinBox *theSpinBox); - - void updateEditList(); - - void movePoints(const int theShift); - - void setTabOrder(); - -private slots: - - void appendPoint(); - - void modifyPoint(); - - void removePoint(); - - void upPoint(); - - void downPoint(); - - void changeSelection(); - - void accept(); - - void clear(); - - void onNumberOfItemsChanged(int theNewValue); - -signals: - - void numberOfItemsChanged(int theNewValue); - -protected: - - CurveCreator::Dimension myDimension; - CurveCreator::Coordinates myPoints; - QListWidget *myPntsList; - QDoubleSpinBox *myXSpn; - QDoubleSpinBox *myYSpn; - QDoubleSpinBox *myZSpn; - QPushButton *myAddBtn; - QPushButton *myModifBtn; - QPushButton *myRmBtn; - QPushButton *myClearBtn; - QPushButton *myPntUpBtn; - QPushButton *myPntDownBtn; - QPushButton *myOkBtn; - QPushButton *myCancelBtn; - -}; - -#endif diff --git a/src/CurveCreator/CurveCreator_EditPntsWidget.cxx b/src/CurveCreator/CurveCreator_EditPntsWidget.cxx deleted file mode 100644 index 3cbf0e1e3..000000000 --- a/src/CurveCreator/CurveCreator_EditPntsWidget.cxx +++ /dev/null @@ -1,236 +0,0 @@ -// Copyright (C) 2007-2013 CEA/DEN, EDF R&D, OPEN CASCADE -// -// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library 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 -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// - -// File: CurveCreator_EditPntsWidget.cxx -// Created: Fri Jul 05 16:30:11 2013 -// Author: Sergey KHROMOV -// - - -#include -#include -#include -#include -#include -#include -#include -#include -#include - - -//======================================================================= -// function: Constructor -// purpose: -//======================================================================= -CurveCreator_EditPntsWidget::CurveCreator_EditPntsWidget - (QWidget* parent, - const bool IsSection, - const CurveCreator::Dimension theDimension) - : QWidget (parent), - myDimension (theDimension), - myPntsEdit (NULL), - myPntsBtn (NULL), - myPntsEditDlg (NULL), - myPntsList (NULL) -{ - QGroupBox *aMainGrp = new QGroupBox; - QHBoxLayout *aMainLO = new QHBoxLayout(aMainGrp); - - myPntsEdit = new QLineEdit(aMainGrp); - myPntsBtn = new QPushButton - (IsSection? tr("CC_SECTION_POINTS_EDIT") : tr("CC_POINTS_EDIT"), aMainGrp); - aMainLO->addWidget(myPntsEdit); - aMainLO->addWidget(myPntsBtn); - - setLayout(aMainLO); - - init(); -} - -//======================================================================= -// function: Destructor -// purpose: -//======================================================================= -CurveCreator_EditPntsWidget::~CurveCreator_EditPntsWidget() -{ -} - -//======================================================================= -// function: setPoints -// purpose: -//======================================================================= -void CurveCreator_EditPntsWidget::setPoints - (const CurveCreator::Coordinates &thePoints) -{ - myPoints = thePoints; - updateEditLine(); -} - -//======================================================================= -// function: getPoints -// purpose: -//======================================================================= -const CurveCreator::Coordinates &CurveCreator_EditPntsWidget::getPoints() const -{ - return myPoints; -} - -//======================================================================= -// function : setPointsList -// purpose : -//======================================================================= -void CurveCreator_EditPntsWidget::setPointsList(QListWidget *thePntsList) -{ - myPntsList = thePntsList; -} - -//======================================================================= -// function : clear -// purpose : -//======================================================================= -void CurveCreator_EditPntsWidget::clear() -{ - myPoints.clear(); - myPntsEdit->setText(""); -} - -//======================================================================= -// function : getPointsEdit -// purpose : -//======================================================================= -QLineEdit *CurveCreator_EditPntsWidget::getPointsEdit() const -{ - return myPntsEdit; -} - -//======================================================================= -// function : getPointsButton -// purpose : -//======================================================================= -QPushButton *CurveCreator_EditPntsWidget::getPointsButton() const -{ - return myPntsBtn; -} - -//======================================================================= -// function : init -// purpose : -//======================================================================= -void CurveCreator_EditPntsWidget::init() -{ - connect(myPntsBtn, SIGNAL(clicked()), this, SLOT(editPoints())); - - myPntsEdit->setReadOnly(true); - updateEditLine(); - - // Set tab order. - QWidget::setTabOrder(myPntsEdit, myPntsBtn); -} - -//======================================================================= -// function : editPoints -// purpose : -//======================================================================= -void CurveCreator_EditPntsWidget::editPoints() -{ - if (myPntsEditDlg == NULL) { - // Create the dialog. - myPntsEditDlg = new CurveCreator_EditPntsDlg(this, myDimension); - } - - // Set points to dialog. - setPointsToDialog(); - - const int aResult = myPntsEditDlg->exec(); - - if (aResult == QDialog::Accepted) { - // Update the list of points and myPntsEdit. - const CurveCreator::Coordinates &aNewPoints = myPntsEditDlg->getPoints(); - - myPoints.clear(); - myPoints.insert(myPoints.end(), aNewPoints.begin(), aNewPoints.end()); - updateEditLine(); - } -} - -//======================================================================= -// function : updateEditLine -// purpose : -//======================================================================= -void CurveCreator_EditPntsWidget::updateEditLine() -{ - const int aNbPnts = myPoints.size(); - - if ( aNbPnts == 0 ) { - myPntsEdit->setText(""); - } else if ( aNbPnts == myDimension ) { - // One point. - QString aText; - - if (myDimension == CurveCreator::Dim3d) { - aText = CurveCreator_PointItem::getText - (myPoints[0], myPoints[1], myPoints[2]); - } else { - aText = CurveCreator_PointItem::getText(myPoints[0], myPoints[1]); - } - - myPntsEdit->setText(aText); - } else if ( aNbPnts > 0 ) { - myPntsEdit->setText(tr("CC_POINTS_NUMBER").arg(aNbPnts/myDimension)); - } -} - -//======================================================================= -// function : setPointsToDialog -// purpose : -//======================================================================= -void CurveCreator_EditPntsWidget::setPointsToDialog() -{ - bool isPntsFromWidget = false; - - if (myPntsList != NULL) { - QList aListItems = myPntsList->selectedItems(); - - if (aListItems.size() > 0) { - CurveCreator::Coordinates aPoints; - - foreach (QListWidgetItem *anItem, aListItems) { - const CurveCreator_PointItem *aPntItem = - (const CurveCreator_PointItem *)anItem; - - aPoints.push_back(aPntItem->getX()); - aPoints.push_back(aPntItem->getY()); - - if (myDimension == CurveCreator::Dim3d) { - aPoints.push_back(aPntItem->getZ()); - } - } - - myPntsEditDlg->setPoints(aPoints); - isPntsFromWidget = true; - } - } - - if (!isPntsFromWidget) { - myPntsEditDlg->setPoints(myPoints); - } -} diff --git a/src/CurveCreator/CurveCreator_EditPntsWidget.h b/src/CurveCreator/CurveCreator_EditPntsWidget.h deleted file mode 100644 index a48ba8005..000000000 --- a/src/CurveCreator/CurveCreator_EditPntsWidget.h +++ /dev/null @@ -1,89 +0,0 @@ -// Copyright (C) 2007-2013 CEA/DEN, EDF R&D, OPEN CASCADE -// -// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library 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 -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// - -// File: CurveCreator_EditPntsWidget.h -// Created: Fri Jul 05 16:30:17 2013 -// Author: Sergey KHROMOV -// - -#ifndef _CurveCreator_EditPntsWidget_HeaderFile -#define _CurveCreator_EditPntsWidget_HeaderFile - - -#include -#include - -class QLineEdit; -class QPushButton; -class QListWidget; -class CurveCreator_EditPntsDlg; - - -class CurveCreator_EditPntsWidget : public QWidget -{ - Q_OBJECT - -public: - - CurveCreator_EditPntsWidget(QWidget* parent, - const bool IsSection, - const CurveCreator::Dimension theDimension); - - ~CurveCreator_EditPntsWidget(); - - void setPoints(const CurveCreator::Coordinates &thePoints); - - const CurveCreator::Coordinates &getPoints() const; - - void setPointsList(QListWidget *thePntsList); - - void clear(); - - QLineEdit *getPointsEdit() const; - - QPushButton *getPointsButton() const; - -private slots: - - void editPoints(); - -private: - - void init(); - - void updateEditLine(); - - void setPointsToDialog(); - -protected: - - CurveCreator::Coordinates myPoints; - CurveCreator::Dimension myDimension; - QPushButton *myPntsBtn; - QLineEdit *myPntsEdit; - CurveCreator_EditPntsDlg *myPntsEditDlg; - QListWidget *myPntsList; - -}; - -#endif - diff --git a/src/CurveCreator/CurveCreator_NewPointDlg.cxx b/src/CurveCreator/CurveCreator_NewPointDlg.cxx new file mode 100755 index 000000000..1994a75bc --- /dev/null +++ b/src/CurveCreator/CurveCreator_NewPointDlg.cxx @@ -0,0 +1,147 @@ +#include "CurveCreator_NewPointDlg.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +CurveCreator_NewPointDlg::CurveCreator_NewPointDlg(CurveCreator::Dimension theDim, QWidget *parent) : + QDialog(parent), myX(NULL), myY(NULL), myZ(NULL), myIsEdit(false) +{ + QGridLayout* aCoordLay = new QGridLayout(); + + QString aTitle = QString(tr("ADD_NEW_POINT")); + setWindowTitle(aTitle); + + QLabel* aLbl = new QLabel( tr("X_COORD"), this); + myX = new QDoubleSpinBox(this); + aCoordLay->addWidget(aLbl, 0, 0); + aCoordLay->addWidget(myX, 0, 1 ); + + aLbl = new QLabel( tr("Y_COORD"), this); + myY = new QDoubleSpinBox(this); + aCoordLay->addWidget(aLbl, 1, 0 ); + aCoordLay->addWidget(myY, 1, 1 ); + + if( theDim == CurveCreator::Dim3d ){ + aLbl = new QLabel( tr("Z_COORD"), this); + myZ = new QDoubleSpinBox(this); + aCoordLay->addWidget(aLbl, 2,0 ); + aCoordLay->addWidget(myZ, 2,1 ); + } + + myBtnBox = new QDialogButtonBox(this); + myAddBtn = myBtnBox->addButton(tr("ADD_BTN"), QDialogButtonBox::AcceptRole ); + myContBtn = myBtnBox->addButton(tr("ADD_CONTINUE_BTN"), QDialogButtonBox::ResetRole ); + myBtnBox->addButton(tr("CANCEL"), QDialogButtonBox::RejectRole ); + + connect( myBtnBox, SIGNAL(accepted()), this, SLOT(accept())); + connect( myBtnBox, SIGNAL(rejected()), this, SLOT(reject())); + connect( myBtnBox, SIGNAL(clicked(QAbstractButton*)), this, SLOT(onBtnClicked(QAbstractButton*) )); + QVBoxLayout* aMainLay = new QVBoxLayout(); + aMainLay->addLayout(aCoordLay); + aMainLay->addWidget(myBtnBox); + setLayout(aMainLay); + clear(); + updateTitle(); +} + +void CurveCreator_NewPointDlg::setSectionName( const QString& theName ) +{ + mySectionName = theName; + updateTitle(); +} + +void CurveCreator_NewPointDlg::setEditMode( bool isEdit ) +{ + myIsEdit = isEdit; + if( myIsEdit ){ + myContBtn->hide(); + myAddBtn->setText(tr("OK")); + } + else{ + myContBtn->show(); + myAddBtn->setText(tr("ADD_BTN")); + } + updateTitle(); +} + +void CurveCreator_NewPointDlg::updateTitle() +{ + QString aTitle; + if( !myIsEdit ){ + if( mySectionName.isEmpty() ){ + aTitle = tr("ADD_NEW_POINT"); + } + else{ + aTitle = QString(tr("ADD_NEW_POINT_TO_%1")).arg(mySectionName); + } + } + else{ + aTitle = tr("SET_POINT_COORDINATES"); + } + setWindowTitle(aTitle); +} + +CurveCreator::Coordinates CurveCreator_NewPointDlg::getCoordinates() const +{ + CurveCreator::Coordinates aCoords; + double anX = myX->value(); + aCoords.push_back(anX); + double anY = myY->value(); + aCoords.push_back(anY); + if( myZ ){ + double aZ = myZ->value(); + aCoords.push_back(aZ); + } + return aCoords; +} + +void CurveCreator_NewPointDlg::onBtnClicked(QAbstractButton* theBtn ) +{ + if( myBtnBox->buttonRole(theBtn) == QDialogButtonBox::ResetRole ){ + emit addPoint(); + } +} + +void CurveCreator_NewPointDlg::clear() +{ + initSpinBox(myX); + initSpinBox(myY); + if( myZ ) + initSpinBox(myZ); +} + +void CurveCreator_NewPointDlg::setCoordinates( const CurveCreator::Coordinates& theCoords ) +{ + double anX = theCoords[0]; + myX->setValue(anX); + double anY = theCoords[1]; + myY->setValue(anY); + if( myZ && ( theCoords.size() == 3)){ + double aZ = theCoords[2]; + myZ->setValue(aZ); + } +} + +//======================================================================= +// function: initSpinBox +// purpose: +//======================================================================= +void CurveCreator_NewPointDlg::initSpinBox(QDoubleSpinBox *theSpinBox) +{ + const double aCoordMin = -1.e+15; + const double aCoordMax = 1.e+15; + const double aStep = 10; + const int aPrecision = 6; + + theSpinBox->setDecimals( qAbs( aPrecision ) ); + theSpinBox->setRange(aCoordMin, aCoordMax); + theSpinBox->setSingleStep(aStep); + theSpinBox->setValue(0.0); +} diff --git a/src/CurveCreator/CurveCreator_NewPointDlg.h b/src/CurveCreator/CurveCreator_NewPointDlg.h new file mode 100755 index 000000000..43e0478e4 --- /dev/null +++ b/src/CurveCreator/CurveCreator_NewPointDlg.h @@ -0,0 +1,43 @@ +#ifndef CURVECREATOR_NEWPOINTDLG_H +#define CURVECREATOR_NEWPOINTDLG_H + +#include "CurveCreator.hxx" + +#include + +class QDoubleSpinBox; +class QDialogButtonBox; +class QAbstractButton; +class QPushButton; + +class CurveCreator_NewPointDlg : public QDialog +{ + Q_OBJECT +public: + explicit CurveCreator_NewPointDlg(CurveCreator::Dimension theDim, QWidget *parent = 0); + CurveCreator::Coordinates getCoordinates() const; + void clear(); + void setSectionName( const QString& theName ); + void setEditMode( bool isEdit ); + void setCoordinates( const CurveCreator::Coordinates& theCoords ); +signals: + void addPoint(); +public slots: +protected slots: + void onBtnClicked(QAbstractButton* theBtn ); +protected: + void updateTitle(); + void initSpinBox(QDoubleSpinBox *theSpinBox); +private: + QDialogButtonBox* myBtnBox; + CurveCreator::Dimension myDim; + QDoubleSpinBox* myX; + QDoubleSpinBox* myY; + QDoubleSpinBox* myZ; + QPushButton* myContBtn; + QPushButton* myAddBtn; + bool myIsEdit; + QString mySectionName; +}; + +#endif // CURVECREATOR_NEWPOINTDLG_H diff --git a/src/CurveCreator/CurveCreator_NewSectionDlg.cxx b/src/CurveCreator/CurveCreator_NewSectionDlg.cxx new file mode 100755 index 000000000..e53fa2f11 --- /dev/null +++ b/src/CurveCreator/CurveCreator_NewSectionDlg.cxx @@ -0,0 +1,123 @@ +#include "CurveCreator_NewSectionDlg.h" + +#include "CurveCreator_Curve.hxx" + +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +CurveCreator_NewSectionDlg::CurveCreator_NewSectionDlg( QWidget *parent ) : + QDialog(parent) +{ + std::string aNameStr; + QGridLayout* aLay = new QGridLayout(); + QLabel* aLbl = new QLabel(tr("NAME"), this); + myName = new QLineEdit(this); + aLay->addWidget(aLbl, 0, 0); + aLay->addWidget(myName, 0 , 1); + + aLbl = new QLabel(tr("LINE_TYPE")); + myLineType = new QComboBox(this); + QPixmap aPolylineImage(SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM", tr("ICON_CC_POLYLINE"))); + myLineType->addItem(aPolylineImage, tr("POLYLINE_TYPE")); + QPixmap aSplineImage(SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM", tr("ICON_CC_POLYLINE"))); + myLineType->addItem(aSplineImage,tr("SPLINE_TYPE")); + myLineType->setCurrentIndex(0); + aLay->addWidget(aLbl, 1, 0); + aLay->addWidget(myLineType, 1 , 1); + + aLbl = new QLabel(tr("LINE_CLOSED")); + myIsClosed = new QCheckBox(this); + aLay->addWidget(aLbl, 2, 0); + aLay->addWidget(myIsClosed, 2, 1); + + myBtnBox = new QDialogButtonBox(this); + myAddBtn = myBtnBox->addButton(tr("ADD_BTN"), QDialogButtonBox::AcceptRole ); + myContBtn = myBtnBox->addButton(tr("ADD_CONTINUE_BTN"), QDialogButtonBox::ResetRole ); + myBtnBox->addButton(tr("CANCEL"), QDialogButtonBox::RejectRole ); + + connect( myBtnBox, SIGNAL(accepted()), this, SLOT(accept())); + connect( myBtnBox, SIGNAL(rejected()), this, SLOT(reject())); + connect( myBtnBox, SIGNAL(clicked(QAbstractButton*)), this, SLOT(onBtnClicked(QAbstractButton*) )); + + QVBoxLayout* aMainLay = new QVBoxLayout(); + aMainLay->addLayout(aLay); + aMainLay->addWidget(myBtnBox); + setLayout(aMainLay); +} + +void CurveCreator_NewSectionDlg::setSectionParameters( const QString& theName, bool isClosed, CurveCreator::Type theType ) +{ + myName->setText(theName); + myIsClosed->setChecked(isClosed); + if( theType == CurveCreator::Polyline ) + myLineType->setCurrentIndex(0); +} + +void CurveCreator_NewSectionDlg::clear() +{ + myName->setText(""); + myIsClosed->setChecked(true); + myLineType->setCurrentIndex(0); +} + +void CurveCreator_NewSectionDlg::setEditMode( bool isEdit ) +{ + myIsEdit = isEdit; + if( myIsEdit ){ + myContBtn->hide(); + myAddBtn->setText(tr("OK")); + } + else{ + myContBtn->show(); + myAddBtn->setText(tr("ADD_BTN")); + } + updateTitle(); +} + +QString CurveCreator_NewSectionDlg::getName() const +{ + return myName->text(); +} + +bool CurveCreator_NewSectionDlg::isClosed() const +{ + return myIsClosed->isChecked(); +} + +CurveCreator::Type CurveCreator_NewSectionDlg::getSectionType() const +{ + if( myLineType->currentIndex() == 0 ) + return CurveCreator::Polyline; + else + return CurveCreator::BSpline; +} + +void CurveCreator_NewSectionDlg::updateTitle() +{ + QString aTitle; + if( !myIsEdit ) + aTitle = tr("ADD_NEW_SECTION"); + else + aTitle = QString(tr("SET_SECTION_PARAMETERS")); + setWindowTitle(aTitle); +} + +void CurveCreator_NewSectionDlg::setSectionName( const QString& theName ) +{ + myName->setText(theName); +} + +void CurveCreator_NewSectionDlg::onBtnClicked(QAbstractButton* theBtn ) +{ + if( myBtnBox->buttonRole(theBtn) == QDialogButtonBox::ResetRole ){ + emit addSection(); + } +} diff --git a/src/CurveCreator/CurveCreator_NewSectionDlg.h b/src/CurveCreator/CurveCreator_NewSectionDlg.h new file mode 100755 index 000000000..e238f92b1 --- /dev/null +++ b/src/CurveCreator/CurveCreator_NewSectionDlg.h @@ -0,0 +1,49 @@ +#ifndef CURVECREATOR_NEWSECTION_H +#define CURVECREATOR_NEWSECTION_H + +#include "CurveCreator.hxx" + +#include + +class CurveCreator_Curve; + +class QLineEdit; +class QComboBox; +class QCheckBox; +class QPushButton; +class QAbstractButton; +class QDialogButtonBox; + +class CurveCreator_NewSectionDlg : public QDialog +{ + Q_OBJECT +public: + explicit CurveCreator_NewSectionDlg(QWidget *parent = 0); + + QString getName() const; + bool isClosed() const; + CurveCreator::Type getSectionType() const; + + void setSectionParameters( const QString& theName, bool isClosed, CurveCreator::Type theType ); + void setSectionName(const QString& theName ); + void clear(); + void setEditMode( bool isEdit ); + +signals: + void addSection(); +public slots: +protected slots: + void onBtnClicked(QAbstractButton* theBtn ); +protected: + void updateTitle(); +private: + QLineEdit* myName; + QComboBox* myLineType; + QCheckBox* myIsClosed; + bool myIsEdit; + QPushButton* myContBtn; + QPushButton* myAddBtn; + QDialogButtonBox* myBtnBox; +}; + +#endif // CURVECREATOR_NEWSECTION_H diff --git a/src/CurveCreator/CurveCreator_Operation.cxx b/src/CurveCreator/CurveCreator_Operation.cxx index 88e0d9dde..25af11d9e 100644 --- a/src/CurveCreator/CurveCreator_Operation.cxx +++ b/src/CurveCreator/CurveCreator_Operation.cxx @@ -28,6 +28,7 @@ #include #include +#include #include @@ -273,7 +274,7 @@ void CurveCreator_Operation::apply(CurveCreator_Curve *theCurve) CurveCreator::Coordinates aCoords; getCoords(&pInt[2], aCoords); - theCurve->addSection(aType, (pInt[1] != 0), aCoords); + theCurve->addSection(std::string(""), aType, (pInt[1] != 0), aCoords); } break; case CurveCreator_Operation::RemoveSection: diff --git a/src/CurveCreator/CurveCreator_Operation.hxx b/src/CurveCreator/CurveCreator_Operation.hxx index 93b5c8848..706f6b8c3 100644 --- a/src/CurveCreator/CurveCreator_Operation.hxx +++ b/src/CurveCreator/CurveCreator_Operation.hxx @@ -59,7 +59,8 @@ public: MoveSection, //!< Method CurveCreator_Curve::moveSection Join, //!< Method CurveCreator_Curve::join AddSection, //!< Method CurveCreator_Curve::addSection - RemoveSection //!< Method CurveCreator_Curve::removeSection + RemoveSection, //!< Method CurveCreator_Curve::removeSection + RenameCurve //!< Method CurveCreator_Curve::renameCurve }; /** diff --git a/src/CurveCreator/CurveCreator_PointItem.cxx b/src/CurveCreator/CurveCreator_PointItem.cxx deleted file mode 100644 index 85f628bbb..000000000 --- a/src/CurveCreator/CurveCreator_PointItem.cxx +++ /dev/null @@ -1,153 +0,0 @@ -// Copyright (C) 2007-2013 CEA/DEN, EDF R&D, OPEN CASCADE -// -// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library 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 -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// - -// File: CurveCreator_PointItem.cxx -// Created: Wed Jul 10 12:17:47 2013 -// Author: Sergey KHROMOV -// - - -#include -#include - - -//======================================================================= -// function: Constructor -// purpose: -//======================================================================= -CurveCreator_PointItem::CurveCreator_PointItem - (const CurveCreator::TypeCoord theX, - const CurveCreator::TypeCoord theY, - QListWidget *theParent) - : QListWidgetItem(theParent, ITEM_TYPE_XY) -{ - setCoord(theX, theY); -} - -//======================================================================= -// function: Constructor -// purpose: -//======================================================================= -CurveCreator_PointItem::CurveCreator_PointItem - (const CurveCreator::TypeCoord theX, - const CurveCreator::TypeCoord theY, - const CurveCreator::TypeCoord theZ, - QListWidget *theParent) - : QListWidgetItem(theParent, ITEM_TYPE_XYZ) -{ - setCoord(theX, theY, theZ); -} - -//======================================================================= -// function: Destructor -// purpose: -//======================================================================= -CurveCreator_PointItem::~CurveCreator_PointItem() -{ -} - -//======================================================================= -// function: getText -// purpose: -//======================================================================= -QString CurveCreator_PointItem::getText(const CurveCreator::TypeCoord theX, - const CurveCreator::TypeCoord theY) -{ - return QObject::tr("CC_PNT_ITEM_X_Y").arg(theX).arg(theY); -} - -//======================================================================= -// function: getText -// purpose: -//======================================================================= -QString CurveCreator_PointItem::getText(const CurveCreator::TypeCoord theX, - const CurveCreator::TypeCoord theY, - const CurveCreator::TypeCoord theZ) -{ - return QObject::tr("CC_PNT_ITEM_X_Y_Z").arg(theX).arg(theY).arg(theZ); -} - -//======================================================================= -// function: setCoord -// purpose: -//======================================================================= -void CurveCreator_PointItem::setCoord(const CurveCreator::TypeCoord theX, - const CurveCreator::TypeCoord theY) -{ - if (!is3d()) { - setData(ROLE_X, theX); - setData(ROLE_Y, theY); - setText(getText(theX, theY)); - } -} - -//======================================================================= -// function: setCoord -// purpose: -//======================================================================= -void CurveCreator_PointItem::setCoord(const CurveCreator::TypeCoord theX, - const CurveCreator::TypeCoord theY, - const CurveCreator::TypeCoord theZ) -{ - if (is3d()) { - setData(ROLE_X, theX); - setData(ROLE_Y, theY); - setData(ROLE_Z, theZ); - setText(getText(theX, theY, theZ)); - } -} - -//======================================================================= -// function: getX -// purpose: -//======================================================================= -CurveCreator::TypeCoord CurveCreator_PointItem::getX() const -{ - return data(ROLE_X).value(); -} - -//======================================================================= -// function: getY -// purpose: -//======================================================================= -CurveCreator::TypeCoord CurveCreator_PointItem::getY() const -{ - return data(ROLE_Y).value(); -} - -//======================================================================= -// function: getZ -// purpose: -//======================================================================= -CurveCreator::TypeCoord CurveCreator_PointItem::getZ() const -{ - return (is3d() ? data(ROLE_Z).value() : 0.); -} - -//======================================================================= -// function: is3d -// purpose: -//======================================================================= -bool CurveCreator_PointItem::is3d() const -{ - return (type() == ITEM_TYPE_XYZ); -} diff --git a/src/CurveCreator/CurveCreator_PointItem.h b/src/CurveCreator/CurveCreator_PointItem.h deleted file mode 100644 index 2932e2a1b..000000000 --- a/src/CurveCreator/CurveCreator_PointItem.h +++ /dev/null @@ -1,125 +0,0 @@ -// Copyright (C) 2007-2013 CEA/DEN, EDF R&D, OPEN CASCADE -// -// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library 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 -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// - -// File: CurveCreator_PointItem.h -// Created: Wed Jul 10 12:17:40 2013 -// Author: Sergey KHROMOV -// - - -#ifndef _CurveCreator_PointItem_HeaderFile -#define _CurveCreator_PointItem_HeaderFile - - -#include -#include - - -#define ITEM_TYPE_XY QListWidgetItem::UserType + 1 -#define ITEM_TYPE_XYZ QListWidgetItem::UserType + 2 -#define ROLE_X Qt::UserRole + 1 -#define ROLE_Y Qt::UserRole + 2 -#define ROLE_Z Qt::UserRole + 3 - -/** - * This class represents a list widget item to facilitate storage - * of 2d or 3d points in a list widget. The type of a stored point - * (2d or 3d) is determined by a constructor chosen to create an object. - */ -class CurveCreator_PointItem : public QListWidgetItem -{ - -public: - - /** - * Constructor. Initializes the object with 2d point. - */ - CurveCreator_PointItem(const CurveCreator::TypeCoord theX, - const CurveCreator::TypeCoord theY, - QListWidget * theParent = 0); - - /** - * Constructor. Initializes the object with 3d point. - */ - CurveCreator_PointItem(const CurveCreator::TypeCoord theX, - const CurveCreator::TypeCoord theY, - const CurveCreator::TypeCoord theZ, - QListWidget * theParent = 0); - - /** - * Destructor - */ - ~CurveCreator_PointItem(); - - /** - * This static method is used to construct the text to be displayed by this - * item for 2d point. - */ - static QString getText(const CurveCreator::TypeCoord theX, - const CurveCreator::TypeCoord theY); - - /** - * This static method is used to construct the text to be displayed by this - * item for 3d point. - */ - static QString getText(const CurveCreator::TypeCoord theX, - const CurveCreator::TypeCoord theY, - const CurveCreator::TypeCoord theZ); - - /** - * This method sets the coordinates for 2d point. If the object has type - * 3d point this method does nothing. - */ - void setCoord(const CurveCreator::TypeCoord theX, - const CurveCreator::TypeCoord theY); - - /** - * This method sets the coordinates for 3d point. If the object has type - * 2d point this method does nothing. - */ - void setCoord(const CurveCreator::TypeCoord theX, - const CurveCreator::TypeCoord theY, - const CurveCreator::TypeCoord theZ); - - /** - * Query the X coordinate of the point. - */ - CurveCreator::TypeCoord getX() const; - - /** - * Query the Y coordinate of the point. - */ - CurveCreator::TypeCoord getY() const; - - /** - * Query the Z coordinate of the point. Return 0 for the type 2d point. - */ - CurveCreator::TypeCoord getZ() const; - - /** - * Returns true if the type of the stored point is 3d; false otherwise. - */ - bool is3d() const; - -}; - -#endif diff --git a/src/CurveCreator/CurveCreator_Section.hxx b/src/CurveCreator/CurveCreator_Section.hxx index cf8b958f8..9b08a10f7 100644 --- a/src/CurveCreator/CurveCreator_Section.hxx +++ b/src/CurveCreator/CurveCreator_Section.hxx @@ -31,14 +31,16 @@ #include +#include //! Structure to store sections representing the CurveCreator_Curve object struct CurveCreator_Section { //! Constructor. Initializes object with default values. - CurveCreator_Section() : myType(CurveCreator::Polyline), myIsClosed(false) + CurveCreator_Section() : myName("Section"),myType(CurveCreator::Polyline), myIsClosed(false) { } + std::string myName; //!< section name CurveCreator::Coordinates myPoints; //!< points coordinates CurveCreator::Type myType; //!< type of the section bool myIsClosed; //!< closed or not diff --git a/src/CurveCreator/CurveCreator_TreeView.cxx b/src/CurveCreator/CurveCreator_TreeView.cxx new file mode 100755 index 000000000..e7418a999 --- /dev/null +++ b/src/CurveCreator/CurveCreator_TreeView.cxx @@ -0,0 +1,422 @@ +#include "CurveCreator_TreeView.h" + +#include "CurveCreator_Curve.hxx" + +#include +#include + +#include +#include + +#define ID_SECTION -1 + +CurveCreator_TreeViewModel::CurveCreator_TreeViewModel( CurveCreator_Curve* theCurve, QObject* parent ) : + QAbstractItemModel(parent), myCurve(theCurve) +{ + QPixmap aSplineIcon(SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM", tr("ICON_CC_SPLINE"))); + if( !aSplineIcon.isNull() ) + myCachedIcons[ICON_SPLINE] = aSplineIcon; + + QPixmap aPolylineIcon(SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM", tr("ICON_CC_POLYLINE"))); + if( !aPolylineIcon.isNull() ) + myCachedIcons[ICON_POLYLINE] = aPolylineIcon; + + QPixmap aClosedPolylineIcon(SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM", tr("ICON_CC_CLOSED_POLYLINE"))); + if( !aPolylineIcon.isNull() ) + myCachedIcons[ICON_CLOSED_POLYLINE] = aClosedPolylineIcon; + + QPixmap aClosedSplineIcon(SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM", tr("ICON_CC_CLOSED_SPLINE"))); + if( !aPolylineIcon.isNull() ) + myCachedIcons[ICON_CLOSED_SPLINE] = aClosedSplineIcon; + + QPixmap aPointIcon(SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM", tr("ICON_CC_POINT"))); + if( !aPointIcon.isNull() ) + myCachedIcons[ICON_POINT] = aPointIcon; + +} + +int CurveCreator_TreeViewModel::columnCount(const QModelIndex & parent ) const +{ + if( parent.internalId() == ID_SECTION ) + return 1; + else + return 1; +} + +QVariant CurveCreator_TreeViewModel::data(const QModelIndex & index, int role ) const +{ + int aRow = index.row(); + int aColumn = index.column(); + if( myCurve ){ + if( index.internalId() == ID_SECTION ){ + if( role == Qt::DisplayRole ){ + if( aColumn == 0 ) + return QString::fromStdString(myCurve->getSectionName(aRow)); + return QVariant(); + } + else if( role == Qt::DecorationRole ){ + if( aColumn == 0 ){ + CurveCreator::Type aSectionType = myCurve->getType(aRow); + if( aSectionType == CurveCreator::Polyline ){ + if( myCurve->isClosed(aRow) ){ + return myCachedIcons[ICON_CLOSED_POLYLINE]; + } + else{ + return myCachedIcons[ICON_POLYLINE]; + } + } + else{ + if( myCurve->isClosed(aRow) ){ + return myCachedIcons[ICON_CLOSED_SPLINE]; + } + else{ + return myCachedIcons[ICON_SPLINE]; + } + } + } + } + } + else{ + if( role == Qt::DisplayRole ){ + if( aColumn == 1 ) + return QVariant(); +// return "Point"; + else if( aColumn == 0 ){ + CurveCreator::Coordinates aCoords = myCurve->getCoordinates(index.internalId(),index.row() ); + QString anOut; + if( myCurve->getDimension() == CurveCreator::Dim2d ){ + anOut = QString(tr("X=%1, Y=%2")).arg(aCoords[0]).arg(aCoords[1]); + } + else{ + anOut = QString(tr("X=%1, Y=%2, Z=%3")).arg(aCoords[0]).arg(aCoords[1]).arg(aCoords[2]); + } + return anOut; + } + } + else if( role == Qt::DecorationRole ){ + if( aColumn == 0 ){ + return myCachedIcons[ICON_POINT]; + } + } + } + } + return QVariant(); +} + +QModelIndex CurveCreator_TreeViewModel::index(int row, int column, const QModelIndex & parent ) const +{ + if( parent.isValid() ){ + return createIndex(row, column, parent.row() ); + } + else{ + QModelIndex aParent = createIndex(row, column, ID_SECTION ); + return aParent; + } + return QModelIndex(); +} + +QModelIndex CurveCreator_TreeViewModel::parent(const QModelIndex & theIndex) const +{ + if( !theIndex.isValid() ) + return QModelIndex(); + + if( theIndex.internalId() == ID_SECTION ){ + return QModelIndex(); + } + return createIndex( theIndex.internalId(), 0, ID_SECTION ); +} + +int CurveCreator_TreeViewModel::rowCount(const QModelIndex & parent ) const +{ + int aRowCnt = 0; + if( myCurve != NULL ){ + if( !parent.isValid() ){ +//Points level + aRowCnt = myCurve->getNbSections(); + } + else{ +//Section level + if( parent.internalId() == ID_SECTION ){ + aRowCnt = myCurve->getNbPoints(parent.row()); + } + } + } + return aRowCnt; +} + +QModelIndex CurveCreator_TreeViewModel::sectionIndex( int theSection ) const +{ + return createIndex( theSection, 0, ID_SECTION ); +} + +QModelIndex CurveCreator_TreeViewModel::pointIndex( int theSection, int thePoint ) const +{ + return createIndex( thePoint, 0, theSection ); +} + +bool CurveCreator_TreeViewModel::isSection( const QModelIndex& theIndx ) const +{ + if( theIndx.internalId() == ID_SECTION ) + return true; + return false; +} + +int CurveCreator_TreeViewModel::getSection( const QModelIndex& theIndx ) const +{ + if( theIndx.internalId() == ID_SECTION ) + return theIndx.row(); + return theIndx.internalId(); +} + +int CurveCreator_TreeViewModel::getPoint( const QModelIndex& theIndx ) const +{ + if( theIndx.internalId() == ID_SECTION ) + return -1; + return theIndx.row(); +} + +/*****************************************************************************************/ +CurveCreator_TreeView::CurveCreator_TreeView( CurveCreator_Curve* theCurve, QWidget *parent) : + QTreeView(parent) +{ + header()->hide(); + setUniformRowHeights(true); + setContextMenuPolicy( Qt::CustomContextMenu ); + CurveCreator_TreeViewModel* aModel = new CurveCreator_TreeViewModel(theCurve, this); + setModel(aModel); + setSelectionBehavior(SelectRows); + setSelectionMode(ExtendedSelection); + setExpandsOnDoubleClick(false); + connect( selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)), + this, SIGNAL(selectionChanged()) ); + connect( this, SIGNAL(activated(QModelIndex)), this, SLOT(onActivated(QModelIndex))); +} + +QList CurveCreator_TreeView::getSelectedSections() const +{ + QList aSect; + CurveCreator_TreeViewModel* aModel = dynamic_cast(model()); + if( !aModel ) + return aSect; + QModelIndexList anIndxs = selectionModel()->selectedIndexes(); + for( int i = 0 ; i < anIndxs.size() ; i++ ){ + if( aModel->isSection(anIndxs[i]) ){ + aSect << aModel->getSection( anIndxs[i] ); + } + } + qSort(aSect.begin(), aSect.end()); + return aSect; +} + +void CurveCreator_TreeView::pointsAdded( int theSection, int thePoint, int thePointsCnt ) +{ + CurveCreator_TreeViewModel* aModel = dynamic_cast(model()); + if( aModel ){ + QModelIndex aSectIndx = aModel->sectionIndex( theSection ); + rowsInserted(aSectIndx, thePoint, thePoint + thePointsCnt - 1 ); + } +} + +void CurveCreator_TreeView::pointDataChanged( int theSection, int thePoint ) +{ + CurveCreator_TreeViewModel* aModel = dynamic_cast(model()); + if( aModel ){ + QModelIndex aPointIndx = aModel->pointIndex( theSection, thePoint ); + dataChanged( aPointIndx, aPointIndx ); + } +} + +void CurveCreator_TreeView::pointsRemoved( int theSection, int thePoint, int thePointsCnt ) +{ + CurveCreator_TreeViewModel* aModel = dynamic_cast(model()); + if( aModel ){ + QModelIndex aSectIndx = aModel->sectionIndex( theSection ); + rowsRemoved(aSectIndx, thePoint, thePoint + thePointsCnt - 1 ); + } +} + +void CurveCreator_TreeView::sectionAdded( int theSection ) +{ + CurveCreator_TreeViewModel* aModel = dynamic_cast(model()); + if( aModel ){ + rowsInserted(QModelIndex(), theSection, theSection ); + } +} + +void CurveCreator_TreeView::sectionChanged( int theSection, int aSectCnt ) +{ + CurveCreator_TreeViewModel* aModel = dynamic_cast(model()); + if( aModel ){ + QModelIndex aFirstSectIndx = aModel->sectionIndex( theSection ); + QModelIndex aLastSectIndx = aModel->sectionIndex( theSection + aSectCnt - 1); + dataChanged( aFirstSectIndx, aLastSectIndx ); + } +} + +void CurveCreator_TreeView::sectionsRemoved( int theSection, int theSectionCnt ) +{ + CurveCreator_TreeViewModel* aModel = dynamic_cast(model()); + if( aModel ){ + this->rowsRemoved( QModelIndex(), theSection, theSection+theSectionCnt-1 ); + } +} + +void CurveCreator_TreeView::setIndexState( const QModelIndex& theIndx, bool& isExpanded, bool& isSelected, bool& isCurrent ) +{ + setExpanded( theIndx, isExpanded ); + QItemSelectionModel::SelectionFlags aFlag = QItemSelectionModel::Select; + if( !isSelected ){ + aFlag = QItemSelectionModel::Deselect; + } + selectionModel()->select( theIndx, aFlag ); +} + +void CurveCreator_TreeView::getIndexInfo( const QModelIndex& theIndx, bool& isExpand, bool& isSelected, bool& isCurrent ) +{ + isExpand = isExpanded(theIndx); + isSelected = selectionModel()->isSelected(theIndx); + isCurrent = (theIndx == selectionModel()->currentIndex()); +} + +void CurveCreator_TreeView::swapIndexes( const QModelIndex& theFirst, const QModelIndex& theSecond ) +{ + bool isFirstSelected; + bool isFirstExpanded; + bool isFirstCurrent; + getIndexInfo( theFirst, isFirstExpanded, isFirstSelected, isFirstCurrent ); + + bool isSecondSelected; + bool isSecondExpanded; + bool isSecondCurrent; + getIndexInfo( theSecond, isSecondExpanded, isSecondSelected, isSecondCurrent ); + + setIndexState( theFirst, isSecondExpanded, isSecondSelected, isSecondCurrent ); + setIndexState( theSecond, isFirstExpanded, isFirstSelected, isFirstCurrent ); + dataChanged(theFirst,theFirst); + dataChanged(theSecond,theSecond); +} + +void CurveCreator_TreeView::sectionsSwapped( int theSection, int theOffset ) +{ + CurveCreator_TreeViewModel* aModel = dynamic_cast(model()); + if( aModel ){ + QModelIndex aFirstIndex = aModel->sectionIndex( theSection ); + QModelIndex aSecondIndex = aModel->sectionIndex( theSection + theOffset ); + swapIndexes( aFirstIndex, aSecondIndex ); + } +} + +void CurveCreator_TreeView::pointsSwapped( int theSection, int thePointNum, int theOffset ) +{ + CurveCreator_TreeViewModel* aModel = dynamic_cast(model()); + if( aModel ){ + QModelIndex aFirstIndex = aModel->pointIndex( theSection, thePointNum ); + QModelIndex aSecondIndex = aModel->pointIndex( theSection, thePointNum + theOffset ); + swapIndexes( aFirstIndex, aSecondIndex ); + } +} + +void CurveCreator_TreeView::setSelectedSections( const QList& theList ) +{ + CurveCreator_TreeViewModel* aModel = dynamic_cast(model()); + if( aModel ){ + selectionModel()->clearSelection(); + for( int i = 0 ; i < theList.size() ; i++ ){ + QModelIndex aSectIndx = aModel->sectionIndex(theList[i]); + selectionModel()->select(aSectIndx, QItemSelectionModel::Select ); + } + } +} + +void CurveCreator_TreeView::setSelectedPoints( const QList< QPair >& thePointsList ) +{ + CurveCreator_TreeViewModel* aModel = dynamic_cast(model()); + if( aModel ){ + selectionModel()->clearSelection(); + for( int i = 0 ; i < thePointsList.size() ; i++ ){ + QModelIndex aSectIndx = aModel->pointIndex( thePointsList[i].first, thePointsList[i].second ); + selectionModel()->select(aSectIndx, QItemSelectionModel::Select ); + } + } +} + +bool pointLessThan(const QPair &s1, const QPair &s2) +{ + if( s1.first < s2.first ) + return true; + if( s1.first > s2.first ) + return false; + return s1.second < s2.second; +} + +QList< QPair< int, int > > CurveCreator_TreeView::getSelectedPoints() const +{ + QList< QPair< int, int > > aPoints; + CurveCreator_TreeViewModel* aModel = dynamic_cast(model()); + if( !aModel ) + return aPoints; + QModelIndexList anIndxs = selectionModel()->selectedIndexes(); + for( int i = 0 ; i < anIndxs.size() ; i++ ){ + if( !aModel->isSection( anIndxs[i] ) ){ + int aSect = aModel->getSection(anIndxs[i]); + int aPointNum = aModel->getPoint(anIndxs[i]); + QPair< int, int > aPoint = QPair( aSect, aPointNum ); + aPoints.push_back( aPoint ); + } + } + qSort( aPoints.begin(), aPoints.end(), pointLessThan ); + return aPoints; +} + +CurveCreator_TreeView::SelectionType CurveCreator_TreeView::getSelectionType() const +{ + CurveCreator_TreeViewModel* aModel = dynamic_cast(model()); + if( !aModel ) + return ST_NOSEL; + bool isPointSel = false; + bool isSectSel = false; + bool isOneSection = true; + int aSectNum = -1; + QModelIndexList aLst = selectionModel()->selectedIndexes(); + for( int i = 0 ; i < aLst.size() ; i++ ){ + if( aModel->isSection( aLst[i] ) ){ + isSectSel = true; + } + else{ + isPointSel = true; + if( aSectNum == -1 ){ + aSectNum = aModel->getSection(aLst[i]); + } + else{ + if( aSectNum != aModel->getSection( aLst[i] ) ){ + isOneSection = false; + } + } + } + } + if( isSectSel && !isPointSel ) + return ST_SECTIONS; + if( isPointSel && !isSectSel ){ + if( isOneSection ){ + return ST_POINTS_ONE_SECTION; + } + return ST_POINTS; + } + if( isPointSel && isSectSel ) + return ST_MIXED; + return ST_NOSEL; +} + +void CurveCreator_TreeView::onActivated( QModelIndex theIndx ) +{ + CurveCreator_TreeViewModel* aModel = dynamic_cast(model()); + if( !aModel ) + return; + int aSect = aModel->getSection(theIndx); + if( aModel->isSection(theIndx) ){ + emit sectionEntered( aSect ); + return; + } + int aPointNum = aModel->getPoint( theIndx ); + emit pointEntered( aSect, aPointNum ); +} diff --git a/src/CurveCreator/CurveCreator_TreeView.h b/src/CurveCreator/CurveCreator_TreeView.h new file mode 100755 index 000000000..dc9dafa28 --- /dev/null +++ b/src/CurveCreator/CurveCreator_TreeView.h @@ -0,0 +1,71 @@ +#ifndef CURVECREATOR_TREEVIEW_H +#define CURVECREATOR_TREEVIEW_H + +#include +#include + +class CurveCreator_Curve; + +class CurveCreator_TreeViewModel : public QAbstractItemModel +{ +public: + CurveCreator_TreeViewModel( CurveCreator_Curve* theCurve, QObject* parent ); + virtual int columnCount(const QModelIndex & parent = QModelIndex()) const; + virtual int rowCount(const QModelIndex & parent = QModelIndex()) const; + virtual QVariant data(const QModelIndex & index, int role = Qt::DisplayRole) const; + virtual QModelIndex index(int row, int column, const QModelIndex & parent = QModelIndex()) const; + virtual QModelIndex parent(const QModelIndex & theIndex) const; + + QModelIndex sectionIndex( int theSection ) const; + QModelIndex pointIndex( int theSection, int thePoint ) const; + + bool isSection( const QModelIndex& theIndx ) const; + int getSection( const QModelIndex& theIndx ) const; + int getPoint( const QModelIndex& theIndx ) const; +private: + enum IconType{ ICON_POLYLINE, ICON_SPLINE, ICON_CLOSED_SPLINE, ICON_CLOSED_POLYLINE, ICON_POINT }; +private: + CurveCreator_Curve* myCurve; + QMap myCachedIcons; +}; + +class CurveCreator_TreeView : public QTreeView +{ + Q_OBJECT +public: + enum SelectionType{ ST_NOSEL, ST_POINTS, ST_POINTS_ONE_SECTION, ST_SECTIONS, ST_MIXED }; +public: + explicit CurveCreator_TreeView( CurveCreator_Curve* theCurve, QWidget *parent = 0); + SelectionType getSelectionType() const; + QList getSelectedSections() const; + QList< QPair< int, int > > getSelectedPoints() const; + + void pointsAdded( int theSection, int thePoint, int thePointsCnt=1 ); + void pointDataChanged( int theSection, int thePoint ); + void pointsRemoved(int theSection, int thePoint, int thePointsCnt=1 ); + void pointsSwapped( int theSection, int thePointNum, int theOffset ); + + void sectionAdded( int theSection ); + void sectionChanged(int theSection , int aSectCnt = 1); + void sectionsRemoved( int theSection, int theSectionCnt=1 ); + void sectionsSwapped( int theSection, int theOffset ); + + void setSelectedSections( const QList& theList ); + void setSelectedPoints( const QList< QPair >& thePointsList ); + +signals: + void selectionChanged(); + void sectionEntered(int); + void pointEntered(int,int); +public slots: +protected slots: + void onActivated( QModelIndex theIndx ); +protected: + void setIndexState( const QModelIndex& theIndx, bool& isExpanded, bool& isSelected, bool& isCurrent ); + void swapIndexes( const QModelIndex& theFirst, const QModelIndex& theSecond ); + void getIndexInfo( const QModelIndex& theIndx, bool& isExpanded, bool& isSelected, bool& isCurrent ); +private: + CurveCreator_Curve* myCurve; +}; + +#endif // CURVECREATOR_TREEVIEW_H diff --git a/src/CurveCreator/CurveCreator_Widget.cpp b/src/CurveCreator/CurveCreator_Widget.cpp new file mode 100755 index 000000000..82a35b3ad --- /dev/null +++ b/src/CurveCreator/CurveCreator_Widget.cpp @@ -0,0 +1,547 @@ +#include "CurveCreator_Widget.h" +#include "CurveCreator_TreeView.h" +#include "QVBoxLayout" +#include "CurveCreator_Curve.hxx" +#include "CurveCreator_CurveEditor.hxx" +#include "CurveCreator.hxx" +#include "CurveCreator_NewPointDlg.h" +#include "CurveCreator_NewSectionDlg.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +CurveCreator_Widget::CurveCreator_Widget(QWidget *parent) : + QWidget(parent), myNewPointEditor(NULL) +{ +//TODO remove it for debug only + myCurve = new CurveCreator_Curve(CurveCreator::Dim2d); + myEdit = new CurveCreator_CurveEditor( myCurve ); + CurveCreator::Coordinates aCoords; + + aCoords.push_back(10); + aCoords.push_back(20); + aCoords.push_back(1); + aCoords.push_back(2); + + myEdit->addSection("",CurveCreator::BSpline, true, aCoords ); + + aCoords.clear(); + aCoords.push_back(11); + aCoords.push_back(21); + aCoords.push_back(111); + aCoords.push_back(211); + aCoords.push_back(101); + aCoords.push_back(201); + aCoords.push_back(13); + aCoords.push_back(25); + myEdit->addSection("",CurveCreator::Polyline, false, aCoords ); + + aCoords.clear(); + for( int i = 0 ; i < 1000000 ; i++ ){ + double anX = ((double)i)/10000.; + double anY = ((double)i)/10000. + 3.4; + aCoords.push_back(anX); + aCoords.push_back(anY); + } + myEdit->addSection("",CurveCreator::Polyline, true, aCoords ); + +//TODO end debug + myNewPointEditor = new CurveCreator_NewPointDlg(myCurve->getDimension(), this); + connect( myNewPointEditor, SIGNAL(addPoint()), this, SLOT(onAddNewPoint())); + + myNewSectionEditor = new CurveCreator_NewSectionDlg(this); + connect( myNewSectionEditor, SIGNAL(addSection()), this, SLOT(onAddNewSection())); + + QHBoxLayout* aNameLayout = new QHBoxLayout(); + QLabel* aNameLabel = new QLabel(tr("CURVE_NAME_TLT"), this); + aNameLayout->addWidget(aNameLabel); + QLineEdit* aNameEdit = new QLineEdit(this); + aNameLayout->addWidget(aNameEdit); + + QGroupBox* aSectionGroup = new QGroupBox(tr("SECTION_GROUP_TLT"),this); + + mySectionView = new CurveCreator_TreeView(myCurve, aSectionGroup); + connect( mySectionView, SIGNAL(selectionChanged()), this, SLOT( onSelectionChanged() ) ); + connect( mySectionView, SIGNAL(pointEntered(int,int)), this, SLOT(onEditPoint(int,int)) ); + connect( mySectionView, SIGNAL(sectionEntered(int)), this, SLOT(onEditSection(int)) ); + connect( mySectionView, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(onContextMenu(QPoint)) ); + QToolBar* aTB = new QToolBar(tr("TOOL_BAR_TLT"), aSectionGroup); +// QToolButton* anUndoBtn = new QToolButton(aTB); + QAction* anAct = createAction( UNDO_ID, tr("UNDO"), tr(":images/ICON_UNDO"), tr("UNDO_TLT"), QKeySequence(Qt::ControlModifier|Qt::Key_Z) ); + aTB->addAction(anAct); + + anAct = createAction( REDO_ID, tr("REDO"), tr(":images/ICON_REDO"), tr("REDO_TLT"), QKeySequence(Qt::ControlModifier|Qt::Key_Y) ); + aTB->addAction(anAct); + + aTB->addSeparator(); + + anAct = createAction( NEW_SECTION_ID, tr("ICON_NEW_SECTION"), tr(":images/ICON_NEW_SECTION"), tr("NEW_SECTION_TLT"), QKeySequence(Qt::ControlModifier|Qt::Key_N) ); + connect(anAct, SIGNAL(triggered()), this, SLOT(onNewSection()) ); + aTB->addAction(anAct); + + anAct = createAction( INSERT_SECTION_BEFORE_ID, tr("INSERT_SECTION_BEFORE"), tr(":images/ICON_INSERT_SECTION_BEFORE"), tr("INSERT_SECTION_BEFORE_TLT"), + QKeySequence(Qt::ControlModifier | Qt::Key_Insert ) ); + connect(anAct, SIGNAL(triggered()), this, SLOT(onInsertSectionBefore()) ); + + anAct = createAction( INSERT_SECTION_AFTER_ID, tr("INSERT_SECTION_AFTER"), tr(":images/ICON_INSERT_SECTION_AFTER"), tr("INSERT_SECTION_AFTER_TLT"), + QKeySequence(Qt::ControlModifier | Qt::ShiftModifier | Qt::Key_Insert ) ); + connect(anAct, SIGNAL(triggered()), this, SLOT(onInsertSectionAfter()) ); + + anAct = createAction( NEW_POINT_ID, tr("ICON_NEW_POINT"), tr(":images/ICON_NEW_POINT"), tr("NEW_POINT_TLT"), QKeySequence(Qt::ControlModifier|Qt::Key_P) ); + connect(anAct, SIGNAL(triggered()), this, SLOT(onNewPoint()) ); + aTB->addAction(anAct); + aTB->addSeparator(); + + anAct = createAction( INSERT_POINT_BEFORE_ID, tr("INSERT_POINT_BEFORE"), tr(":images/ICON_POINT_BEFORE"), tr("INSERT_POINT_BEFORE_TLT"), QKeySequence(Qt::ControlModifier|Qt::Key_B) ); + connect(anAct, SIGNAL(triggered()), this, SLOT(onInsertPointBefore()) ); + + anAct = createAction( INSERT_POINT_AFTER_ID, tr("INSERT_POINT_AFTER"), tr(":images/ICON_POINT_AFTER"), tr("INSERT_POINT_AFTER_TLT"), QKeySequence(Qt::ControlModifier|Qt::Key_M) ); + connect(anAct, SIGNAL(triggered()), this, SLOT(onInsertPointAfter()) ); + + anAct = createAction( CLOSE_SECTIONS_ID, tr("CLOSE_SECTIONS"), tr(":images/ICON_CLOSE_SECTIONS"), tr("CLOSE_SECTIONS_TLT"), QKeySequence(Qt::ControlModifier|Qt::Key_W) ); + connect(anAct, SIGNAL(triggered()), this, SLOT(onCloseSections()) ); + + anAct = createAction( UNCLOSE_SECTIONS_ID, tr("UNCLOSE_SECTIONS"), tr(":images/ICON_UNCLOSE_SECTIONS"), tr("UNCLOSE_SECTIONS_TLT"), QKeySequence(Qt::ControlModifier|Qt::Key_S) ); + connect(anAct, SIGNAL(triggered()), this, SLOT(onUncloseSections()) ); + + anAct = createAction( SET_SECTIONS_POLYLINE_ID, tr("SET_SECTIONS_POLYLINE"), tr(":images/ICON_POLYLINE"), tr("SET_POLYLINE_TLT"), QKeySequence(Qt::ControlModifier|Qt::Key_E) ); + connect(anAct, SIGNAL(triggered()), this, SLOT(onSetPolyline()) ); + + anAct = createAction( SET_SECTIONS_SPLINE_ID, tr("SET_SECTIONS_SPLINE"), tr(":images/ICON_SPLINE"), tr("SET_SPLINE_TLT"), QKeySequence(Qt::ControlModifier|Qt::Key_R) ); + connect(anAct, SIGNAL(triggered()), this, SLOT(onSetSpline()) ); + + anAct = createAction( REMOVE_ID, tr("ICON_REMOVE"), tr(":images/ICON_REMOVE"), tr("REMOVE_TLT"), QKeySequence(Qt::ControlModifier|Qt::Key_Delete ) ); + connect(anAct, SIGNAL(triggered()), this, SLOT(onRemove()) ); + aTB->addAction(anAct); + aTB->addSeparator(); + + anAct = createAction( JOIN_ID, tr("ICON_JOIN"), tr(":images/ICON_JOIN"), tr("JOIN_TLT"), QKeySequence(Qt::ControlModifier|Qt::Key_Plus ) ); + connect( anAct, SIGNAL(triggered()), this, SLOT(onJoin()) ); + aTB->addAction(anAct); + aTB->addSeparator(); + + anAct = createAction( UP_ID, tr("ICON_STEP_UP"), tr(":images/ICON_STEP_UP"), tr("STEP_UP_TLT"), QKeySequence(Qt::ControlModifier|Qt::Key_Up ) ); + connect( anAct, SIGNAL(triggered()), this, SLOT(onMoveUp()) ); + aTB->addAction(anAct); + + anAct = createAction( DOWN_ID, tr("ICON_STEP_DOWN"), tr(":images/ICON_STEP_DOWN"), tr("STEP_DOWN"), QKeySequence(Qt::ControlModifier|Qt::Key_Down ) ); + connect( anAct, SIGNAL(triggered()), this, SLOT(onMoveDown()) ); + aTB->addAction(anAct); + + anAct = createAction( CLEAR_ALL_ID, tr("CLEAR_ALL"), tr(":images/ICON_CLEAR_ALL"), tr("CLEAR_ALL_TLT"), QKeySequence(Qt::ControlModifier | Qt::ShiftModifier | Qt::Key_Delete ) ); + connect( anAct, SIGNAL(triggered()), this, SLOT( onClearAll()) ); + aTB->addAction(anAct); + + anAct = createAction( JOIN_ALL_ID, tr("JOIN_ALL"), tr(":images/ICON_JOIN_ALL"), tr("JOIN_ALL_TLT"), QKeySequence(Qt::ControlModifier | Qt::ShiftModifier | Qt::Key_Plus ) ); + connect( anAct, SIGNAL(triggered()), this, SLOT(onJoinAll()) ); + aTB->addAction(anAct); + + QVBoxLayout* aSectLayout = new QVBoxLayout(); + aSectLayout->addWidget(aTB); + aSectLayout->addWidget(mySectionView); + aSectionGroup->setLayout(aSectLayout); + QVBoxLayout* aLay = new QVBoxLayout(); + aLay->addLayout(aNameLayout); + aLay->addWidget(aSectionGroup); + setLayout(aLay); + onSelectionChanged(); +} + +void CurveCreator_Widget::onSelectionChanged() +{ + QList anEnabledAct; + anEnabledAct << NEW_SECTION_ID; + int aSectCnt = myCurve->getNbPoints(); + if( aSectCnt > 0 ) + anEnabledAct << CLEAR_ALL_ID; + if( aSectCnt > 1 ) + anEnabledAct << JOIN_ALL_ID; + QList aSelSections = mySectionView->getSelectedSections(); + QList< QPair< int, int > > aSelPoints = mySectionView->getSelectedPoints(); + CurveCreator_TreeView::SelectionType aSelType = mySectionView->getSelectionType(); + switch( aSelType ){ + case CurveCreator_TreeView::ST_NOSEL:{ + break; + } + case CurveCreator_TreeView::ST_SECTIONS:{ + if( aSelSections.size() > 1 ){ + anEnabledAct << JOIN_ID; + } + if( aSelSections[0] > 0 ){ + anEnabledAct << UP_ID; + } + if( aSelSections.size() == 1 ){ + anEnabledAct << NEW_POINT_ID << INSERT_SECTION_BEFORE_ID << INSERT_SECTION_AFTER_ID; + } + if( aSelSections[ aSelSections.size() - 1 ] < ( myCurve->getNbSections() - 1 ) ){ + anEnabledAct << DOWN_ID; + } + anEnabledAct << CLOSE_SECTIONS_ID << UNCLOSE_SECTIONS_ID << SET_SECTIONS_POLYLINE_ID << SET_SECTIONS_SPLINE_ID; + break; + } + case CurveCreator_TreeView::ST_POINTS_ONE_SECTION:{ + if( aSelPoints[0].second > 0 ){ + anEnabledAct << UP_ID; + } + int aLastIndex = aSelPoints.size()-1; + int aSect = aSelPoints[0].first; + if( aSelPoints[aLastIndex].second < (myCurve->getNbPoints(aSect) - 1)){ + anEnabledAct << DOWN_ID; + } + if( aSelPoints.size() == 1){ + anEnabledAct << INSERT_POINT_BEFORE_ID << INSERT_POINT_AFTER_ID; + } + break; + } + } + int aSelObjsCnt = aSelPoints.size() + aSelSections.size(); + if( aSelObjsCnt > 0 ){ + anEnabledAct << REMOVE_ID; + } + if( myCurve->getNbSections() > 0 ){ + anEnabledAct << REMOVE_ALL_ID; + } + if( myCurve->getNbSections() > 1 ){ + anEnabledAct << JOIN_ALL_ID; + } + QList anIds = myActionMap.keys(); + for( int i = 0 ; i < anIds.size() ; i++ ){ + if( myActionMap.contains(anIds[i]) ){ + if( anEnabledAct.contains(anIds[i]) ){ + myActionMap[anIds[i]]->setEnabled(true); + } + else{ + myActionMap[anIds[i]]->setEnabled(false); + } + } + } +} + +void CurveCreator_Widget::onNewPoint() +{ + mySection= -1; + myPointNum = -1; + QList aSelSection = mySectionView->getSelectedSections(); + if( aSelSection.size() > 0 ){ + mySection = aSelSection[0]; + } + else{ + QList< QPair > aSelPoints = mySectionView->getSelectedPoints(); + if( aSelPoints.size() > 0 ){ + mySection = aSelPoints[0].first; + myPointNum = aSelPoints[0].second + 1; + } + } + QString aSectName; + if( mySection < 0 ){ + mySection = myCurve->getNbSections() - 1; + } + aSectName = QString::fromStdString( myCurve->getSectionName(mySection)); + if( myPointNum < 0 ){ + myPointNum = myCurve->getNbPoints(mySection); + } + myNewPointEditor->clear(); + myNewPointEditor->setEditMode(false); + myNewPointEditor->setSectionName(aSectName); + if( myNewPointEditor->exec() == QDialog::Accepted ){ + onAddNewPoint(); + } +} + +void CurveCreator_Widget::onAddNewPoint() +{ + CurveCreator::Coordinates aCoords = myNewPointEditor->getCoordinates(); + myEdit->insertPoints(aCoords, mySection, myPointNum ); + mySectionView->pointsAdded( mySection, myPointNum ); + myNewPointEditor->clear(); + myPointNum++; +} + +void CurveCreator_Widget::onNewSection() +{ + myNewSectionEditor->clear(); + myNewSectionEditor->setEditMode(false); + QString aSectName = QString( myCurve->getUnicSectionName().c_str() ); + myNewSectionEditor->setSectionParameters(aSectName, true, CurveCreator::Polyline ); + if( myNewSectionEditor->exec() == QDialog::Accepted ){ + onAddNewSection(); + } +} + +void CurveCreator_Widget::onAddNewSection() +{ + CurveCreator::Coordinates aCoords; + myEdit->addSection( myNewSectionEditor->getName().toStdString(), myNewSectionEditor->getSectionType(), + myNewSectionEditor->isClosed(), aCoords ); + mySectionView->sectionAdded( mySection ); + QString aNewName = QString(myCurve->getUnicSectionName().c_str()); + myNewSectionEditor->setSectionName(aNewName); + mySection++; +} + +QAction* CurveCreator_Widget::createAction( ActionId theId, const QString& theName, const QString& theImageName, + const QString& theToolTip, const QKeySequence& theShortcut ) +{ + QAction* anAct = new QAction(theName,this); + QIcon anIcon(theImageName); + if( !anIcon.isNull() ){ + anAct->setIcon(anIcon); + } + anAct->setShortcut(theShortcut); + anAct->setToolTip(theToolTip); + myActionMap[theId] = anAct; + return anAct; +} + +QAction* CurveCreator_Widget::getAction(ActionId theId) +{ + if( myActionMap.contains(theId) ) + return myActionMap[theId]; + return NULL; +} + +void CurveCreator_Widget::onEditSection( int theSection ) +{ + mySection = theSection; + QString aSectName = QString::fromStdString( myCurve->getSectionName(theSection)); + bool isClosed = myCurve->isClosed(theSection); + CurveCreator::Type aType = myCurve->getType(theSection); + myNewSectionEditor->setEditMode(true); + myNewSectionEditor->setSectionParameters( aSectName, isClosed, aType ); + if( myNewSectionEditor->exec() == QDialog::Accepted ){ + QString aName = myNewSectionEditor->getName(); + bool isClosed = myNewSectionEditor->isClosed(); + CurveCreator::Type aSectType = myNewSectionEditor->getSectionType(); + myEdit->setClosed( isClosed, mySection ); + myEdit->setName( aName.toStdString(), mySection ); + myEdit->setType( aSectType, mySection ); + mySectionView->sectionChanged(mySection); + } +} + +void CurveCreator_Widget::onEditPoint( int theSection, int thePoint ) +{ + if( !myNewPointEditor ){ + } + QString aSectName = QString::fromStdString( myCurve->getSectionName(theSection)); + myNewPointEditor->setEditMode(true); + myNewPointEditor->setSectionName(aSectName); + CurveCreator::Coordinates aCoords = myCurve->getCoordinates(theSection,thePoint); + myNewPointEditor->setCoordinates(aCoords); + if( myNewPointEditor->exec() == QDialog::Accepted ){ + aCoords = myNewPointEditor->getCoordinates(); + myEdit->setCoordinates(aCoords, theSection, thePoint); + mySectionView->pointDataChanged(theSection, thePoint ); + } +} + +void CurveCreator_Widget::onJoin() +{ + QList aSections = mySectionView->getSelectedSections(); + if( aSections.size() == 0 ){ + return; + } + int aMainSect = aSections[0]; + int aMainSectSize = myCurve->getNbPoints(aMainSect); + for( int i = 1 ; i < aSections.size() ; i++ ){ + int aSectNum = aSections[i] - (i-1); + myEdit->join( aMainSect, aSectNum ); + mySectionView->sectionsRemoved( aSectNum ); + } + int aNewSectSize = myCurve->getNbPoints(aMainSect); + if( aNewSectSize != aMainSectSize ) + mySectionView->pointsAdded( aMainSect, aMainSectSize, aNewSectSize-aMainSectSize ); +} + +void CurveCreator_Widget::onRemove() +{ + QList< QPair > aSelPoints = mySectionView->getSelectedPoints(); + int aCurrSect=-1; + int aRemoveCnt = 0; + for( int i = 0 ; i < aSelPoints.size() ; i++ ){ + if( aCurrSect != aSelPoints[i].first ){ + aRemoveCnt = 0; + aCurrSect = aSelPoints[i].first; + } + int aPntIndx = aSelPoints[i].second - aRemoveCnt; + myEdit->removePoints(aCurrSect,aPntIndx, 1); + mySectionView->pointsRemoved( aCurrSect, aPntIndx ); + aRemoveCnt++; + } + QList aSections = mySectionView->getSelectedSections(); + for( int i = 0 ; i < aSections.size() ; i++ ){ + int aSectNum = aSections[i] - (i); + myEdit->removeSection( aSectNum ); + mySectionView->sectionsRemoved( aSectNum ); + } + mySectionView->clearSelection(); +} + +void CurveCreator_Widget::onMoveUp() +{ + if( mySectionView->getSelectionType() == CurveCreator_TreeView::ST_SECTIONS ){ +//Move sections + QList aSections = mySectionView->getSelectedSections(); + for( int i = 0 ; i < aSections.size() ; i++ ){ + int anIndx = aSections[i]; + myEdit->moveSection( anIndx, anIndx-1); + mySectionView->sectionsSwapped( anIndx, -1 ); + } + } + else{ +//Move points + QList< QPair > aPoints = mySectionView->getSelectedPoints(); + for( int i = 0 ; i < aPoints.size() ; i++ ){ + int aSection = aPoints[i].first; + int aPoint = aPoints[i].second; + myEdit->movePoint(aSection, aPoint, aPoint-2); + mySectionView->pointsSwapped( aSection, aPoint, -1 ); + } + } +} + +void CurveCreator_Widget::onMoveDown() +{ + if( mySectionView->getSelectionType() == CurveCreator_TreeView::ST_SECTIONS ){ +//Move sections + QList aSections = mySectionView->getSelectedSections(); + for( int i = aSections.size()-1 ; i >=0 ; i-- ){ + int anIndx = aSections[i]; + myEdit->moveSection( anIndx, anIndx+1); + mySectionView->sectionsSwapped( anIndx, 1 ); + } + } + else{ +//Move points + QList< QPair > aPoints = mySectionView->getSelectedPoints(); + for( int i = aPoints.size() - 1; i >= 0 ; i-- ){ + int aSection = aPoints[i].first; + int aPoint = aPoints[i].second; + myEdit->movePoint(aSection, aPoint, aPoint+1); + mySectionView->pointsSwapped( aSection, aPoint, 1 ); + } + } +} + +void CurveCreator_Widget::onClearAll() +{ + myEdit->clear(); + mySectionView->reset(); + onSelectionChanged(); +} + +void CurveCreator_Widget::onJoinAll() +{ + myEdit->join(); + mySectionView->reset(); + onSelectionChanged(); +} + +void CurveCreator_Widget::onInsertSectionBefore() +{ + +} + +void CurveCreator_Widget::onInsertSectionAfter() +{ + +} + +void CurveCreator_Widget::onInsertPointBefore() +{ + +} + +void CurveCreator_Widget::onInsertPointAfter() +{ + +} + +void CurveCreator_Widget::onUndoSettings() +{ + +} + +void CurveCreator_Widget::onSetSpline() +{ + QList aSelSections = mySectionView->getSelectedSections(); + for( int i = 0 ; i < aSelSections.size() ; i++ ){ + myEdit->setType(CurveCreator::BSpline, aSelSections[i]); + mySectionView->sectionChanged(aSelSections[i]); + } +} + +void CurveCreator_Widget::onSetPolyline() +{ + QList aSelSections = mySectionView->getSelectedSections(); + for( int i = 0 ; i < aSelSections.size() ; i++ ){ + myEdit->setType(CurveCreator::Polyline, aSelSections[i]); + mySectionView->sectionChanged(aSelSections[i]); + } +} + +void CurveCreator_Widget::onCloseSections() +{ + QList aSelSections = mySectionView->getSelectedSections(); + for( int i = 0 ; i < aSelSections.size() ; i++ ){ + myEdit->setClosed(true, aSelSections[i]); + mySectionView->sectionChanged(aSelSections[i]); + } +} + +void CurveCreator_Widget::onUncloseSections() +{ + QList aSelSections = mySectionView->getSelectedSections(); + for( int i = 0 ; i < aSelSections.size() ; i++ ){ + myEdit->setClosed(false, aSelSections[i]); + mySectionView->sectionChanged(aSelSections[i]); + } +} + +void CurveCreator_Widget::onContextMenu( QPoint thePoint ) +{ + QList aContextActions; + aContextActions << CLEAR_ALL_ID << JOIN_ALL_ID << SEPARATOR_ID << + INSERT_SECTION_BEFORE_ID << INSERT_SECTION_AFTER_ID << SEPARATOR_ID << + CLOSE_SECTIONS_ID << UNCLOSE_SECTIONS_ID << SET_SECTIONS_POLYLINE_ID << + SET_SECTIONS_SPLINE_ID << SEPARATOR_ID << + INSERT_POINT_BEFORE_ID << INSERT_POINT_AFTER_ID; + QPoint aGlPoint = mySectionView->mapToGlobal(thePoint); + bool isVis = false; + QList aResAct; + for( int i = 0 ; i < aContextActions.size() ; i++ ){ + if( aContextActions[i] != SEPARATOR_ID ){ + if( myActionMap.contains(aContextActions[i]) ){ + QAction* anAct = myActionMap[aContextActions[i]]; + if( anAct->isEnabled() ){ + aResAct << aContextActions[i]; + isVis = true; + } + } + } + else{ + aResAct << SEPARATOR_ID; + } + } + if( !isVis ) + return; + + QMenu* aMenu = new QMenu(this); + for( int i = 0 ; i < aResAct.size() ; i++ ){ + if( aResAct[i] == SEPARATOR_ID ){ + aMenu->addSeparator(); + } + else{ + QAction* anAct = myActionMap[aResAct[i]]; + aMenu->insertAction(NULL, anAct); + } + } + aMenu->exec(aGlPoint); +} diff --git a/src/CurveCreator/CurveCreator_Widget.cxx b/src/CurveCreator/CurveCreator_Widget.cxx index 0c0ceac9b..c2fd75048 100644 --- a/src/CurveCreator/CurveCreator_Widget.cxx +++ b/src/CurveCreator/CurveCreator_Widget.cxx @@ -1,1176 +1,532 @@ -// Copyright (C) 2007-2013 CEA/DEN, EDF R&D, OPEN CASCADE -// -// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library 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 -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// - -// File: CurveCreator_Widget.cxx -// Created: Mon Jul 01 12:49:31 2013 -// Author: Sergey KHROMOV -// - - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#define SECTION_ADD 0 -#define SECTION_MODIFY 1 -#define POLYLINE_INDEX 0 -#define BSPLINE_INDEX 1 -#define UNDO_REDO_DISABLED 0 -#define UNDO_REDO_UNLIMITED -1 - -//======================================================================= -// function: Constructor -// purpose: -//======================================================================= -CurveCreator_Widget::CurveCreator_Widget(QWidget* parent, - CurveCreator_Curve *theCurve, - Qt::WindowFlags fl) - : QWidget (parent, fl), - myEditor (theCurve), - myDimension (theCurve == NULL ? - CurveCreator::Dim2d : theCurve->getDimension()), - myEnabledUndoLbl (NULL), - myBufSizeUndoLbl (NULL), - myUndoBtn (NULL), - myRedoBtn (NULL), - myUndoOptsBtn (NULL), - myUndoOptsDlg (NULL), - myAddSecGrp (NULL), - mySecBtnGrp (NULL), - mySecTypeCmbBox (NULL), - mySecCloseChkBox (NULL), - mySecAddModifBtn (NULL), - mySecRmBtn (NULL), - mySecJoinBtn (NULL), - mySecJoinAllBtn (NULL), - mySecClearBtn (NULL), - mySecUpBtn (NULL), - mySecDownBtn (NULL), - mySecList (NULL), - myEditSecPnts (NULL), - myPntsGrp (NULL), - myPntsList (NULL), - myPntEditDlg (NULL), - myEditPnts (NULL), - myAddPntsBtn (NULL), - myInsertPntsBtn (NULL), - myRmPntsBtn (NULL) -{ - setWindowTitle(tr("CC_TITLE")); - - // Set undo/redo options group - QGroupBox *anUndoOptsGrp = new QGroupBox(tr("CC_UNDO_REDO_OPTIONS")); - QGridLayout *anUndoOptsLO = new QGridLayout(anUndoOptsGrp); - - myEnabledUndoLbl = new QLabel(tr("CC_UNDO_REDO_ENABLED"), anUndoOptsGrp); - myBufSizeUndoLbl = new QLabel(tr("CC_UNDO_REDO_BUFFER_SIZE"), anUndoOptsGrp); - myUndoOptsBtn = new QPushButton(tr("CC_UNDO_REDO_MODIFY"), anUndoOptsGrp); - anUndoOptsLO->setMargin(9); - anUndoOptsLO->setSpacing(6); - anUndoOptsLO->addWidget(myEnabledUndoLbl, 0, 0); - anUndoOptsLO->addWidget(myBufSizeUndoLbl, 1, 0); - anUndoOptsLO->addWidget(myUndoOptsBtn, 0, 1, 2, 1); - - // Set undo/redo group - QGroupBox *anUndoRedoGrp = new QGroupBox(tr("CC_UNDO_REDO_TITLE")); - QHBoxLayout *anUndoRedoLO = new QHBoxLayout(anUndoRedoGrp); - - myUndoBtn = new QPushButton(tr("CC_UNDO"), anUndoRedoGrp); - myRedoBtn = new QPushButton(tr("CC_REDO"), anUndoRedoGrp); - anUndoRedoLO->setMargin(9); - anUndoRedoLO->setSpacing(6); - anUndoRedoLO->addWidget(myUndoBtn, 0, Qt::AlignRight); - anUndoRedoLO->addWidget(myRedoBtn, 0, Qt::AlignLeft); - anUndoRedoLO->addWidget(anUndoOptsGrp, 0, Qt::AlignRight); - - // Set section add/modification group. - myAddSecGrp = new QGroupBox(tr("CC_SECTION_ADD_TITLE")); - - QGridLayout *anAddSecLO = new QGridLayout(myAddSecGrp); - QLabel *aSectTypeLbl = - new QLabel(tr("CC_SECTION_TYPE"), myAddSecGrp); - QLabel *aSecPntsLbl = - new QLabel(tr("CC_SECTION_POINTS_ADD_LBL"), myAddSecGrp); - - mySecCloseChkBox = new QCheckBox(tr("CC_SECTION_CLOSED"), myAddSecGrp); - mySecTypeCmbBox = new QComboBox(myAddSecGrp); - mySecAddModifBtn = new QPushButton(tr("CC_SECTION_NEW"), myAddSecGrp); - myEditSecPnts = new CurveCreator_EditPntsWidget - (myAddSecGrp, true, myDimension); - anAddSecLO->setMargin(9); - anAddSecLO->setSpacing(6); - anAddSecLO->addWidget(mySecCloseChkBox, 0, 0); - anAddSecLO->addWidget(aSectTypeLbl, 1, 0); - anAddSecLO->addWidget(mySecTypeCmbBox, 1, 1); - anAddSecLO->addWidget(aSecPntsLbl, 2, 0); - anAddSecLO->addWidget(myEditSecPnts, 2, 1); - anAddSecLO->addWidget(mySecAddModifBtn, 1, 3); - - // Set section group - QGroupBox *aSecGrp = new QGroupBox(tr("CC_SECTION_TITLE")); - QGridLayout *aSecLO = new QGridLayout(aSecGrp); - QRadioButton *anAddSecRdBtn = - new QRadioButton(tr("CC_SECTION_ADD_TITLE"), aSecGrp); - QRadioButton *aModifSecRdBtn = - new QRadioButton(tr("CC_SECTION_MODIFY_TITLE"), aSecGrp); - - mySecRmBtn = new QPushButton(tr("CC_SECTION_REMOVE"), aSecGrp); - mySecJoinBtn = new QPushButton(tr("CC_SECTION_JOIN"), aSecGrp); - mySecJoinAllBtn = new QPushButton(tr("CC_SECTION_JOIN_ALL"), aSecGrp); - mySecClearBtn = new QPushButton(tr("CC_SECTION_CLEAR"), aSecGrp); - mySecUpBtn = new QPushButton(tr("CC_SECTION_UP"), aSecGrp); - mySecDownBtn = new QPushButton(tr("CC_SECTION_DOWN"), aSecGrp); - mySecBtnGrp = new QButtonGroup(aSecGrp); - mySecList = new QListWidget(aSecGrp); - aSecLO->setMargin(9); - aSecLO->setSpacing(6); - aSecLO->addWidget(anAddSecRdBtn, 0, 0); - aSecLO->addWidget(aModifSecRdBtn, 0, 1); - aSecLO->addWidget(myAddSecGrp, 1, 0, 1, 5); - aSecLO->addWidget(mySecRmBtn, 2, 0); - aSecLO->addWidget(mySecJoinBtn, 2, 1); - aSecLO->addWidget(mySecJoinAllBtn, 2, 2); - aSecLO->addWidget(mySecClearBtn, 2, 3); - aSecLO->addWidget(mySecUpBtn, 4, 4); - aSecLO->addWidget(mySecDownBtn, 5, 4); - aSecLO->addWidget(mySecList, 3, 0, 4, 4); - mySecBtnGrp->addButton(anAddSecRdBtn, SECTION_ADD); - mySecBtnGrp->addButton(aModifSecRdBtn, SECTION_MODIFY); - - // Set point add/modification group. - QGroupBox *anAddPntsGrp = new QGroupBox(tr("CC_POINTS_ADD_TITLE")); - - QGridLayout *anAddPntsLO = new QGridLayout(anAddPntsGrp); - QLabel *aPntsLbl = - new QLabel(tr("CC_POINTS_ADD_LBL"), anAddPntsGrp); - - myEditPnts = new CurveCreator_EditPntsWidget - (anAddPntsGrp, false, myDimension); - myAddPntsBtn = new QPushButton(tr("CC_POINTS_ADD"), anAddPntsGrp); - myInsertPntsBtn = new QPushButton(tr("CC_POINTS_INSERT"), anAddPntsGrp); - anAddPntsLO->setMargin(9); - anAddPntsLO->setSpacing(6); - anAddPntsLO->addWidget(aPntsLbl, 0, 0); - anAddPntsLO->addWidget(myEditPnts, 0, 1); - anAddPntsLO->addWidget(myAddPntsBtn, 0, 4); - anAddPntsLO->addWidget(myInsertPntsBtn, 1, 4); - - // Set Points group - myPntsGrp = new QGroupBox(tr("CC_POINTS_TITLE")); - - QGridLayout *aPntsLO = new QGridLayout(myPntsGrp); - - myPntsList = new QListWidget(myPntsGrp); - myRmPntsBtn = new QPushButton(tr("CC_POINTS_REMOVE"), myPntsGrp); - aPntsLO->setMargin(9); - aPntsLO->setSpacing(6); - aPntsLO->addWidget(anAddPntsGrp, 0, 0, 1, 4); - aPntsLO->addWidget(myRmPntsBtn, 1, 0); - aPntsLO->addWidget(myPntsList, 2, 0, 4, 4); - - // Set main group - QGroupBox *aMainGrp = new QGroupBox(tr("CC_TITLE")); - QGridLayout *aMainLO = new QGridLayout(aMainGrp); - - aMainLO->setMargin(9); - aMainLO->setSpacing(6); - aMainLO->addWidget(anUndoRedoGrp, 0, 0, 1, 2); - aMainLO->addWidget(aSecGrp, 1, 0); - aMainLO->addWidget(myPntsGrp, 1, 1); - - setLayout(aMainLO); - - init(); -} - -//======================================================================= -// function: init -// purpose: -//======================================================================= -void CurveCreator_Widget::init() -{ - // Initialize Undo/Redo group. - QString anUnlim = tr("CC_UNDO_REDO_UNLIMITED"); - - myEnabledUndoLbl->setText(tr("CC_UNDO_REDO_ENABLED")); - myBufSizeUndoLbl->setText(tr("CC_UNDO_REDO_BUFFER_SIZE").arg(anUnlim)); - connect(myUndoOptsBtn, SIGNAL(clicked()), this, SLOT(undoOptionsChanged())); - connect(myUndoBtn, SIGNAL(clicked()), this, SLOT(undo())); - connect(myRedoBtn, SIGNAL(clicked()), this, SLOT(redo())); - updateUndoRedoButtons(); - - // Initialize sections group. - mySecBtnGrp->setExclusive(true); - mySecBtnGrp->button(SECTION_ADD)->setChecked(true); - connect(mySecBtnGrp, SIGNAL(buttonClicked(int)), - this, SLOT(addModifChanged(int))); - - // Init section buttons. - mySecAddModifBtn->setEnabled(true); - mySecRmBtn->setEnabled(false); - mySecJoinBtn->setEnabled(false); - mySecJoinAllBtn->setEnabled(false); - mySecClearBtn->setEnabled(false); - mySecUpBtn->setEnabled(false); - mySecDownBtn->setEnabled(false); - - connect(mySecAddModifBtn, SIGNAL(clicked()),this, SLOT(sectionAddOrModify())); - connect(mySecRmBtn, SIGNAL(clicked()),this, SLOT(sectionRemove())); - connect(mySecJoinBtn, SIGNAL(clicked()),this, SLOT(sectionJoin())); - connect(mySecJoinAllBtn, SIGNAL(clicked()),this, SLOT(sectionJoinAll())); - connect(mySecClearBtn, SIGNAL(clicked()),this, SLOT(sectionClear())); - connect(mySecUpBtn, SIGNAL(clicked()),this, SLOT(sectionUp())); - connect(mySecDownBtn, SIGNAL(clicked()),this, SLOT(sectionDown())); - - // Init section input fields. - mySecCloseChkBox->setChecked(false); - mySecTypeCmbBox->addItem(tr("CC_SECTION_TYPE_POLYLINE")); - mySecTypeCmbBox->addItem(tr("CC_SECTION_TYPE_BSPLINE")); - mySecTypeCmbBox->setCurrentIndex(POLYLINE_INDEX); - myEditSecPnts->clear(); - - // Init sections list widget. - mySecList->setSelectionMode(QAbstractItemView::ExtendedSelection); - - connect(this, SIGNAL(numberOfItemsChanged(QListWidget *)), - this, SLOT(onNumberOfItemsChanged(QListWidget *))); - initSections(); - connect(mySecList, SIGNAL(itemSelectionChanged()), - this, SLOT(changeSecSelection())); - - // Init points list widget. - myPntsGrp->setEnabled(false); - myPntsList->clear(); - myPntsList->setSelectionMode(QAbstractItemView::ExtendedSelection); - - connect(myPntsList, SIGNAL(itemSelectionChanged()), - this, SLOT(changePntsSelection())); - connect(myPntsList, SIGNAL(itemDoubleClicked(QListWidgetItem *)), - this, SLOT(editPnt(QListWidgetItem *))); - - // Init points buttons. - connect(myAddPntsBtn, SIGNAL(clicked()),this, SLOT(pntsAdd())); - connect(myInsertPntsBtn, SIGNAL(clicked()),this, SLOT(pntsInsert())); - connect(myRmPntsBtn, SIGNAL(clicked()),this, SLOT(pntsRemove())); - - // Init edit points widgets. - myEditSecPnts->setPointsList(myPntsList); - myEditPnts->setPointsList(myPntsList); - - // Set tab order - setTabOrder(); -} - -//======================================================================= -// function: initSections -// purpose: -//======================================================================= -void CurveCreator_Widget::initSections() -{ - CurveCreator_Curve *aCurve = myEditor.getCurve(); - - const int aNbSections = aCurve->getNbSections(); - int i; - - mySecList->clear(); - - for (i = 0; i < aNbSections; i++) { - addSectionItem(aCurve->getType(i), aCurve->isClosed(i)); - } - - emit numberOfItemsChanged(mySecList); -} - -//======================================================================= -// function: addSectionItem -// purpose: -//======================================================================= -void CurveCreator_Widget::addSectionItem(const CurveCreator::Type theType, - const bool isClosed) -{ - const int aRow = mySecList->count(); - - new QListWidgetItem(mySecList); - updateSectionItem(aRow, theType, isClosed); - emit numberOfItemsChanged(mySecList); -} - -//======================================================================= -// function: updateSectionItem -// purpose: -//======================================================================= -void CurveCreator_Widget::updateSectionItem(const int theRow, - const CurveCreator::Type theType, - const bool isClosed) -{ - QListWidgetItem *anItem = mySecList->item(theRow); - QString aStrType; - - if (theType == CurveCreator::Polyline) { - aStrType = tr("CC_SECTION_ITEM_POLYLINE"); - } else { - aStrType = tr("CC_SECTION_ITEM_BSPLINE"); - } - - const QString aTrCode = - (isClosed ? "CC_SECTION_ITEM_CLOSED" : "CC_SECTION_ITEM"); - - anItem->setText(tr(aTrCode.toLatin1().constData()).arg(aStrType)); -} - -//======================================================================= -// function: sectionMove -// purpose: -//======================================================================= -void CurveCreator_Widget::sectionMove(const int theShift) -{ - // Sort list items in ascending or descending order depending on - // the sign of theShift. - QList aListItems = mySecList->selectedItems(); - - if (!aListItems.empty() && theShift != 0) { - QMap aMapItems; - - foreach(QListWidgetItem *anItem, aListItems) { - int aRow = mySecList->row(anItem); - - if (theShift > 0) { - aRow = -aRow; - } - - aMapItems.insert(aRow, anItem); - } - - // Compute new rows - QList aListRows = aMapItems.keys(); - QList aListNewRows; - int i; - const int aSize = aListRows.size(); - - - if (theShift < 0) { - // Check each row to be positive. - int aMinIndex = 0; - - for (i = 0; i < aSize; i++) { - int aRow = aListRows[i] + theShift; - - if (aRow < aMinIndex) { - aRow = aMinIndex++; - } - - aListNewRows.append(aRow); - } - } else { - // Check each row to be not greater then a mySecList's size. - int aMaxIndex = mySecList->count() - 1; - - for (i = 0; i < aSize; i++) { - int aRow = -aListRows[i] + theShift; - - if (aRow > aMaxIndex) { - aRow = aMaxIndex--; - } - - aListRows[i] = -aListRows[i]; - aListNewRows.append(aRow); - } - } - - // Move each item to another position. - for (i = 0; i < aSize; i++) { - if (aListRows[i] != aListNewRows[i]) { - QListWidgetItem *anItem = mySecList->takeItem(aListRows[i]); - - // Move section. - mySecList->insertItem(aListNewRows[i], anItem); - myEditor.moveSection(aListRows[i], aListNewRows[i]); - } - } - - // Select added items. - foreach (int anIndex, aListNewRows) { - mySecList->item(anIndex)->setSelected(true); - } - - // Update undo/redo buttons. - updateUndoRedoButtons(); - } -} - -//======================================================================= -// function: initPoints -// purpose: -//======================================================================= -void CurveCreator_Widget::initPoints(const int theSectionIndex) -{ - // Clear the points list - const int aNbPnts = myPntsList->count(); - - myPntsList->clear(); - - if (theSectionIndex < 0) { - if (aNbPnts > 0) { - emit numberOfItemsChanged(myPntsList); - } - } else { - // Fill the points list with the points of the section. - const CurveCreator::Coordinates &aPoints = - myEditor.getCurve()->getPoints(theSectionIndex); - const int aNbCoords = aPoints.size(); - - if (aNbCoords % myDimension == 0) { - int i = 0; - - while (i < aNbCoords) { - const CurveCreator::TypeCoord aX = aPoints[i++]; - const CurveCreator::TypeCoord aY = aPoints[i++]; - - if (myDimension == CurveCreator::Dim3d) { - const CurveCreator::TypeCoord aZ = aPoints[i++]; - - new CurveCreator_PointItem(aX, aY, aZ, myPntsList); - } else { - new CurveCreator_PointItem(aX, aY, myPntsList); - } - } - } - - if (aNbPnts != aNbCoords/myDimension) { - emit numberOfItemsChanged(myPntsList); - } - } -} - -//======================================================================= -// function: getCurrentSectionIndex -// purpose: -//======================================================================= -int CurveCreator_Widget::getCurrentSectionIndex() -{ - int anIndex = -1; - QList aListSec = mySecList->selectedItems(); - - if (aListSec.size() == 1) { - anIndex = mySecList->row(aListSec.first()); - } - - return anIndex; -} - -//======================================================================= -// function: updateUndoRedo -// purpose: -//======================================================================= -void CurveCreator_Widget::updateUndoRedo() -{ - // Update undo/redo buttons. - updateUndoRedoButtons(); - - // Update sections. - CurveCreator_Curve *aCurve = myEditor.getCurve(); - const bool isKeepSelection = (mySecList->count() == aCurve->getNbSections()); - QList aSelectedRows; - QList aListItems = mySecList->selectedItems(); - - if (isKeepSelection) { - foreach (QListWidgetItem *anItem, aListItems) { - aSelectedRows.append(mySecList->row(anItem)); - } - } - - initSections(); - - // Set selection. - if (isKeepSelection) { - foreach (int aRow, aSelectedRows) { - mySecList->item(aRow)->setSelected(true); - } - } - - changeSecSelection(); -} - -//======================================================================= -// function: updateUndoRedoButtons -// purpose: -//======================================================================= -void CurveCreator_Widget::updateUndoRedoButtons() -{ - // Update undo/redo buttons. - const int anUndoDepth = myEditor.getUndoDepth(); - - if (anUndoDepth == UNDO_REDO_DISABLED) { - myUndoBtn->setEnabled(false); - myRedoBtn->setEnabled(false); - } else { - myUndoBtn->setEnabled(myEditor.getNbUndo() > 0); - myRedoBtn->setEnabled(myEditor.getNbRedo() > 0); - } -} - - -//======================================================================= -// function: setTabOrder -// purpose: -//======================================================================= -void CurveCreator_Widget::setTabOrder() -{ - QWidget::setTabOrder(myUndoBtn, myRedoBtn); - QWidget::setTabOrder(myRedoBtn, myUndoOptsBtn); - QWidget::setTabOrder(myUndoOptsBtn, mySecBtnGrp->button(SECTION_ADD)); - QWidget::setTabOrder(mySecBtnGrp->button(SECTION_ADD), - mySecBtnGrp->button(SECTION_MODIFY)); - QWidget::setTabOrder(mySecBtnGrp->button(SECTION_MODIFY), mySecCloseChkBox); - QWidget::setTabOrder(mySecCloseChkBox, mySecTypeCmbBox); - QWidget::setTabOrder(mySecTypeCmbBox, myEditSecPnts->getPointsEdit()); - QWidget::setTabOrder(myEditSecPnts->getPointsEdit(), - myEditSecPnts->getPointsButton()); - QWidget::setTabOrder(myEditSecPnts->getPointsButton(), mySecAddModifBtn); - QWidget::setTabOrder(mySecAddModifBtn, mySecRmBtn); - QWidget::setTabOrder(mySecRmBtn, mySecJoinBtn); - QWidget::setTabOrder(mySecJoinBtn, mySecJoinAllBtn); - QWidget::setTabOrder(mySecJoinAllBtn, mySecClearBtn); - QWidget::setTabOrder(mySecClearBtn, mySecList); - QWidget::setTabOrder(mySecList, mySecUpBtn); - QWidget::setTabOrder(mySecUpBtn, mySecDownBtn); - QWidget::setTabOrder(mySecDownBtn, myEditPnts->getPointsEdit()); - QWidget::setTabOrder(myEditPnts->getPointsEdit(), - myEditPnts->getPointsButton()); - QWidget::setTabOrder(myEditPnts->getPointsButton(), myAddPntsBtn); - QWidget::setTabOrder(myAddPntsBtn, myInsertPntsBtn); - QWidget::setTabOrder(myInsertPntsBtn, myRmPntsBtn); - QWidget::setTabOrder(myRmPntsBtn, myPntsList); -} - -//======================================================================= -// function: undoOptionsChanged -// purpose: -//======================================================================= -void CurveCreator_Widget::undoOptionsChanged() -{ - if (myUndoOptsDlg == NULL) { - // Create the dialog. - myUndoOptsDlg = new CurveCreator_UndoOptsDlg(this); - } - - // set undo depth. - myUndoOptsDlg->setUndoDepth(myEditor.getUndoDepth()); - - const int aResult = myUndoOptsDlg->exec(); - - if (aResult == QDialog::Accepted) { - // Get undo depth. - const int anUndoDepth = myUndoOptsDlg->getUndoDepth(); - const bool isEnabled = myUndoOptsDlg->isEnabled(); - - myEditor.setUndoDepth(anUndoDepth); - - // Update options labels. - myBufSizeUndoLbl->setVisible(isEnabled); - - if (isEnabled) { - QString aSize; - - if (myUndoOptsDlg->isUnlimited()) { - aSize = tr("CC_UNDO_REDO_UNLIMITED"); - } else { - aSize = QString::number(anUndoDepth); - } - - myEnabledUndoLbl->setText(tr("CC_UNDO_REDO_ENABLED")); - myBufSizeUndoLbl->setText(tr("CC_UNDO_REDO_BUFFER_SIZE").arg(aSize)); - } else { - myEnabledUndoLbl->setText(tr("CC_UNDO_REDO_DISABLED")); - } - } - - // Update Undo Redo buttons. - updateUndoRedoButtons(); -} - -//======================================================================= -// function: sectionAddOrModify -// purpose: -//======================================================================= -void CurveCreator_Widget::sectionAddOrModify() -{ - const bool isClosed = mySecCloseChkBox->isChecked(); - CurveCreator::Type aType; - - if (mySecTypeCmbBox->currentIndex() == POLYLINE_INDEX) { - aType = CurveCreator::Polyline; - } else { - aType = CurveCreator::BSpline; - } - - if (mySecBtnGrp->checkedId() == SECTION_MODIFY) { - // Modify section mode. - QList aListItems = mySecList->selectedItems(); - - if (aListItems.size() == 1) { - const int aRow = mySecList->row(aListItems.first()); - bool isModified = false; - CurveCreator_Curve *aCurve = myEditor.getCurve(); - - - if (aCurve->getType(aRow) != aType) { - // Set type. - isModified = true; - myEditor.setType(aType, aRow); - } - - if (aCurve->isClosed(aRow) != isClosed) { - // Set closed flag. - isModified = true; - myEditor.setClosed(isClosed, aRow); - } - - if (isModified) { - updateSectionItem(aRow, aType, isClosed); - - // Update undo/redo buttons. - updateUndoRedoButtons(); - } - } - } else { - // Add section mode. Add section. - myEditor.addSection(aType, isClosed, myEditSecPnts->getPoints()); - addSectionItem(aType, isClosed); - - // Update undo/redo buttons. - updateUndoRedoButtons(); - } -} - -//======================================================================= -// function: secButtonClicked -// purpose: -//======================================================================= -void CurveCreator_Widget::addModifChanged(int theId) -{ - if (theId == SECTION_ADD) { - // Add section - myAddSecGrp->setTitle(tr("CC_SECTION_ADD_TITLE")); - mySecAddModifBtn->setText(tr("CC_SECTION_NEW")); - myEditSecPnts->setEnabled(true); - mySecAddModifBtn->setEnabled(true); - } else { - // Modify section - myAddSecGrp->setTitle(tr("CC_SECTION_MODIFICATION_TITLE")); - mySecAddModifBtn->setText(tr("CC_SECTION_MODIFY")); - myEditSecPnts->setEnabled(false); - changeSecSelection(); - } -} - -//======================================================================= -// function: changeSecSelection -// purpose: -//======================================================================= -void CurveCreator_Widget::changeSecSelection() -{ - // Update modify button and section data. - QList aListItems = mySecList->selectedItems(); - const int aNbItems = aListItems.size(); - - if (mySecBtnGrp->checkedId() == SECTION_MODIFY) { - // Modify section mode. - if (aNbItems == 1) { - // Initialize type and closed flags. - CurveCreator_Curve *aCurve = myEditor.getCurve(); - const int anIndex = mySecList->row(aListItems.first()); - - mySecAddModifBtn->setEnabled(true); - mySecCloseChkBox->setChecked(aCurve->isClosed(anIndex)); - - if (aCurve->getType(anIndex) == CurveCreator::Polyline) { - mySecTypeCmbBox->setCurrentIndex(POLYLINE_INDEX); - } else { - mySecTypeCmbBox->setCurrentIndex(BSPLINE_INDEX); - } - } else if (mySecAddModifBtn->isEnabled()) { - mySecAddModifBtn->setEnabled(false); - } - } else { - // Add section mode. - mySecAddModifBtn->setEnabled(true); - } - - // Set enabled remove, up and down points. - bool isEnabled = (aNbItems > 0); - const int aCount = mySecList->count(); - - mySecRmBtn->setEnabled(isEnabled); - isEnabled &= (aNbItems < aCount); - mySecUpBtn->setEnabled(isEnabled); - mySecDownBtn->setEnabled(isEnabled); - mySecJoinBtn->setEnabled(aNbItems == 2); - - // Init points. - myPntsGrp->setEnabled(aNbItems == 1); - - if (aNbItems == 1) { - const int aSecIndex = mySecList->row(aListItems.first()); - - initPoints(aSecIndex); - } else { - initPoints(-1); - } -} - -//======================================================================= -// function: sectionRemove -// purpose: -//======================================================================= -void CurveCreator_Widget::sectionRemove() -{ - QList aListItems = mySecList->selectedItems(); - - if (!aListItems.empty()) { - QList aListRows; - - // Get items rows. - foreach(QListWidgetItem *anItem, aListItems) { - aListRows.append(mySecList->row(anItem)); - } - - // Delete items. - foreach(QListWidgetItem *anItem, aListItems) { - delete anItem; - } - - qSort(aListRows); - - // Delete points from curve. - const int aNbPnts = aListRows.size(); - int i; - - for (i = aNbPnts - 1; i >= 0; i--) { - myEditor.removeSection(aListRows[i]); - } - - // Set the new selection. - int aRow = aListRows[0]; - - if (aListRows[0] >= mySecList->count()) { - aRow = mySecList->count() - 1; - } - - if (aRow >= 0) { - mySecList->item(aRow)->setSelected(true); - } - - emit numberOfItemsChanged(mySecList); - - // Update undo/redo buttons. - updateUndoRedoButtons(); - } -} - -//======================================================================= -// function: sectionJoin -// purpose: -//======================================================================= -void CurveCreator_Widget::sectionJoin() -{ - QList aListItems = mySecList->selectedItems(); - - if (aListItems.size() == 2) { - int aRowTo = mySecList->row(aListItems.first()); - int aRowFrom = mySecList->row(aListItems.last()); - - if (aRowTo > aRowFrom) { - // Swap rows. - int aTmp = aRowTo; - - aRowTo = aRowFrom; - aRowFrom = aTmp; - } - - // Join two sections. - myEditor.join(aRowTo, aRowFrom); - delete mySecList->takeItem(aRowFrom); - emit numberOfItemsChanged(mySecList); - // Select the joined item. - mySecList->item(aRowTo)->setSelected(true); - changeSecSelection(); - - // Update undo/redo buttons. - updateUndoRedoButtons(); - } -} - -//======================================================================= -// function: sectionJoinAll -// purpose: -//======================================================================= -void CurveCreator_Widget::sectionJoinAll() -{ - const int aNbItems = mySecList->count(); - - if (aNbItems > 1) { - // Join two sections. - myEditor.join(); - - // Update mySecList. - for (int i = 1; i < aNbItems; i++) { - delete mySecList->takeItem(1); - } - - emit numberOfItemsChanged(mySecList); - // Select the joined item. - mySecList->item(0)->setSelected(true); - changeSecSelection(); - - // Update undo/redo buttons. - updateUndoRedoButtons(); - } -} - -//======================================================================= -// function: sectionClear -// purpose: -//======================================================================= -void CurveCreator_Widget::sectionClear() -{ - bool isEmpty = (mySecList->count() == 0); - - if (!isEmpty) { - mySecList->clear(); - myEditor.clear(); - emit numberOfItemsChanged(mySecList); - - // Update undo/redo buttons. - updateUndoRedoButtons(); - } -} - -//======================================================================= -// function: sectionUp -// purpose: -//======================================================================= -void CurveCreator_Widget::sectionUp() -{ - sectionMove(-1); -} - -//======================================================================= -// function: sectionDown -// purpose: -//======================================================================= -void CurveCreator_Widget::sectionDown() -{ - sectionMove(1); -} - -//======================================================================= -// function: onNumberOfItemsChanged -// purpose: -//======================================================================= -void CurveCreator_Widget::onNumberOfItemsChanged(QListWidget *theListWidget) -{ - if (theListWidget == mySecList) { - // List of sections is modified. - mySecJoinAllBtn->setEnabled(mySecList->count() > 1); - mySecClearBtn->setEnabled(mySecList->count() > 0); - } else { - // List of points is modified. - QList aListItems = myPntsList->selectedItems(); - const int aNbItems = aListItems.size(); - - myRmPntsBtn->setEnabled(aNbItems > 0); - } -} - -//======================================================================= -// function: changePntsSelection -// purpose: -//======================================================================= -void CurveCreator_Widget::changePntsSelection() -{ - // Update modify buttons and section data. - QList aListItems = myPntsList->selectedItems(); - const int aNbItems = aListItems.size(); - const int aCount = myPntsList->count(); - - myRmPntsBtn->setEnabled(aNbItems > 0); - myInsertPntsBtn->setEnabled(aCount == 0 || aNbItems == 1); -} - -//======================================================================= -// function: editPnt -// purpose: -//======================================================================= -void CurveCreator_Widget::editPnt(QListWidgetItem *theItem) -{ - if (theItem != NULL) { - if (myPntEditDlg == NULL) { - // Create the dialog. - myPntEditDlg = new CurveCreator_EditPntDlg(this, myDimension); - } - - // Get coordinates. - CurveCreator_PointItem *aPntItem = (CurveCreator_PointItem *)theItem; - CurveCreator::Coordinates aPoint; - - aPoint.push_back(aPntItem->getX()); - aPoint.push_back(aPntItem->getY()); - - if (myDimension == CurveCreator::Dim3d) { - aPoint.push_back(aPntItem->getZ()); - } - - myPntEditDlg->setPoint(aPoint); - - const int aResult = myPntEditDlg->exec(); - - if (aResult == QDialog::Accepted) { - // Get the section index. - const int aSectionIndex = getCurrentSectionIndex(); - - if (aSectionIndex >= 0) { - // Update the point. - const CurveCreator::Coordinates &aNewPoint = myPntEditDlg->getPoint(); - - if (myDimension == CurveCreator::Dim3d) { - aPntItem->setCoord(aNewPoint[0], aNewPoint[1], aNewPoint[2]); - } else { - aPntItem->setCoord(aNewPoint[0], aNewPoint[1]); - } - - // Update curve - const int aPntIndex = myPntsList->row(theItem); - - myEditor.setCoordinates(aNewPoint, aSectionIndex, aPntIndex); - - // Update undo/redo buttons. - updateUndoRedoButtons(); - } - } - } -} - -//======================================================================= -// function: pntsAdd -// purpose: -//======================================================================= -void CurveCreator_Widget::pntsAdd() -{ - const CurveCreator::Coordinates &aNewPoints = myEditPnts->getPoints(); - const int aNbCoords = aNewPoints.size(); - - if (aNbCoords > 0 && aNbCoords % myDimension == 0) { - // Get the section index. - const int aSectionIndex = getCurrentSectionIndex(); - - if (aSectionIndex >= 0) { - // Update list. - int i = 0; - - while (i < aNbCoords) { - const CurveCreator::TypeCoord aX = aNewPoints[i++]; - const CurveCreator::TypeCoord aY = aNewPoints[i++]; - - if (myDimension == CurveCreator::Dim3d) { - const CurveCreator::TypeCoord aZ = aNewPoints[i++]; - - new CurveCreator_PointItem(aX, aY, aZ, myPntsList); - } else { - new CurveCreator_PointItem(aX, aY, myPntsList); - } - } - - // Update curve - myEditor.addPoints(aNewPoints, aSectionIndex); - emit numberOfItemsChanged(myPntsList); - - // Update undo/redo buttons. - updateUndoRedoButtons(); - } - } -} - -//======================================================================= -// function: pntsInsert -// purpose: -//======================================================================= -void CurveCreator_Widget::pntsInsert() -{ - const CurveCreator::Coordinates &aNewPoints = myEditPnts->getPoints(); - const int aNbCoords = aNewPoints.size(); - - if (aNbCoords > 0 && aNbCoords % myDimension == 0) { - // Get the section index. - const int aSectionIndex = getCurrentSectionIndex(); - - if (aSectionIndex >= 0) { - // Get the selected point index. - int aPntIndex = -1; - QList aListPnts = myPntsList->selectedItems(); - - if (aListPnts.size() == 1) { - aPntIndex = myPntsList->row(aListPnts.first()); - } - - // Update list. - int i = 0; - int aRow = aPntIndex; - - while (i < aNbCoords) { - const CurveCreator::TypeCoord aX = aNewPoints[i++]; - const CurveCreator::TypeCoord aY = aNewPoints[i++]; - CurveCreator_PointItem *aNewItem = NULL; - - if (myDimension == CurveCreator::Dim3d) { - const CurveCreator::TypeCoord aZ = aNewPoints[i++]; - - aNewItem = new CurveCreator_PointItem(aX, aY, aZ); - } else { - aNewItem = new CurveCreator_PointItem(aX, aY); - } - - - if (aPntIndex < 0) { - // Append point. - myPntsList->addItem(aNewItem); - } else { - // Insert point. - myPntsList->insertItem(aRow++, aNewItem); - } - } - - // Update curve - myEditor.insertPoints(aNewPoints, aSectionIndex, aPntIndex); - emit numberOfItemsChanged(myPntsList); - - // Update undo/redo buttons. - updateUndoRedoButtons(); - } - } -} - -//======================================================================= -// function: pntsRemove -// purpose: -//======================================================================= -void CurveCreator_Widget::pntsRemove() -{ - QList aListItems = myPntsList->selectedItems(); - const int aSectionIndex = getCurrentSectionIndex(); - - if (aSectionIndex >= 0 && aListItems.size() > 0) { - QList aListRows; - - // Get items rows. - foreach(QListWidgetItem *anItem, aListItems) { - aListRows.append(myPntsList->row(anItem)); - } - - // Delete items. - foreach(QListWidgetItem *anItem, aListItems) { - delete anItem; - } - - qSort(aListRows); - - // Delete points from curve. - const int aNbPnts = aListRows.size(); - int aNbPntsRm = 1; - int aCurRow = aListRows.last(); - int i; - - for (i = aNbPnts - 2; i >= 0; i--) { - if (aListRows[i] == aCurRow - 1) { - // This is the previous index. - aCurRow--; - aNbPntsRm++; - } else { - // This is not the previous index. Remove the current chain of points. - myEditor.removePoints(aSectionIndex, aCurRow, aNbPntsRm); - aCurRow = aListRows[i]; - aNbPntsRm = 1; - } - } - - // Remove last points. - myEditor.removePoints(aSectionIndex, aCurRow, aNbPntsRm); - - emit numberOfItemsChanged(myPntsList); - - // Set the new selection. - int aRow = aListRows.first(); - - if (aRow >= myPntsList->count()) { - aRow = myPntsList->count() - 1; - } - - if (aRow >= 0) { - myPntsList->item(aRow)->setSelected(true); - } - - // Update undo/redo buttons. - updateUndoRedoButtons(); - } -} - -//======================================================================= -// function: undo -// purpose: -//======================================================================= -void CurveCreator_Widget::undo() -{ - if (myEditor.getNbUndo() > 0) { - // Perform undo - myEditor.undo(); - - // Reinitialize required widgets. - updateUndoRedo(); - } -} - -//======================================================================= -// function: redo -// purpose: -//======================================================================= -void CurveCreator_Widget::redo() -{ - if (myEditor.getNbRedo() > 0) { - // Perform undo - myEditor.redo(); - - // Reinitialize required widgets. - updateUndoRedo(); - } -} +#include "CurveCreator_NewPointDlg.h" +#include "CurveCreator_NewSectionDlg.h" +#include "CurveCreator_TreeView.h" +#include "CurveCreator_Widget.h" + +#include "CurveCreator.hxx" +#include "CurveCreator_Curve.hxx" +#include "CurveCreator_CurveEditor.hxx" + +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +CurveCreator_Widget::CurveCreator_Widget(QWidget* parent, + CurveCreator_Curve *theCurve, + Qt::WindowFlags fl ) : + QWidget(parent), myNewPointEditor(NULL) +{ + myCurve = theCurve; + myEdit = new CurveCreator_CurveEditor( myCurve ); + + myNewPointEditor = new CurveCreator_NewPointDlg(myCurve->getDimension(), this); + connect( myNewPointEditor, SIGNAL(addPoint()), this, SLOT(onAddNewPoint())); + + myNewSectionEditor = new CurveCreator_NewSectionDlg(this); + connect( myNewSectionEditor, SIGNAL(addSection()), this, SLOT(onAddNewSection())); + +/* QHBoxLayout* aNameLayout = new QHBoxLayout(); + QLabel* aNameLabel = new QLabel(tr("CURVE_NAME_TLT"), this); + aNameLayout->addWidget(aNameLabel); + QLineEdit* aNameEdit = new QLineEdit(this); + aNameLayout->addWidget(aNameEdit); */ + + QGroupBox* aSectionGroup = new QGroupBox(tr("SECTION_GROUP_TLT"),this); + + mySectionView = new CurveCreator_TreeView(myCurve, aSectionGroup); + connect( mySectionView, SIGNAL(selectionChanged()), this, SLOT( onSelectionChanged() ) ); + connect( mySectionView, SIGNAL(pointEntered(int,int)), this, SLOT(onEditPoint(int,int)) ); + connect( mySectionView, SIGNAL(sectionEntered(int)), this, SLOT(onEditSection(int)) ); + connect( mySectionView, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(onContextMenu(QPoint)) ); + QToolBar* aTB = new QToolBar(tr("TOOL_BAR_TLT"), aSectionGroup); +// QToolButton* anUndoBtn = new QToolButton(aTB); + + QPixmap anUndoImage(SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM", tr("ICON_CC_UNDO"))); + QAction* anAct = createAction( UNDO_ID, tr("UNDO"), anUndoImage, tr("UNDO_TLT"), QKeySequence(Qt::ControlModifier|Qt::Key_Z) ); + aTB->addAction(anAct); + + QPixmap aRedoImage(SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM", tr("ICON_CC_REDO"))); + anAct = createAction( REDO_ID, tr("REDO"), aRedoImage, tr("REDO_TLT"), QKeySequence(Qt::ControlModifier|Qt::Key_Y) ); + aTB->addAction(anAct); + + aTB->addSeparator(); + + QPixmap aNewSectImage(SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM", tr("ICON_CC_NEW_SECTION"))); + anAct = createAction( NEW_SECTION_ID, tr("NEW_SECTION"), aNewSectImage, tr("NEW_SECTION_TLT"), QKeySequence(Qt::ControlModifier|Qt::Key_N) ); + connect(anAct, SIGNAL(triggered()), this, SLOT(onNewSection()) ); + aTB->addAction(anAct); + + anAct = createAction( INSERT_SECTION_BEFORE_ID, tr("INSERT_SECTION_BEFORE"), QPixmap(), tr("INSERT_SECTION_BEFORE_TLT"), + QKeySequence(Qt::ControlModifier | Qt::Key_Insert ) ); + connect(anAct, SIGNAL(triggered()), this, SLOT(onInsertSectionBefore()) ); + + anAct = createAction( INSERT_SECTION_AFTER_ID, tr("INSERT_SECTION_AFTER"), QPixmap(), tr("INSERT_SECTION_AFTER_TLT"), + QKeySequence(Qt::ControlModifier | Qt::ShiftModifier | Qt::Key_Insert ) ); + connect(anAct, SIGNAL(triggered()), this, SLOT(onInsertSectionAfter()) ); + + QPixmap aNewPointImage(SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM", tr("ICON_CC_NEW_POINT"))); + anAct = createAction( NEW_POINT_ID, tr("NEW_POINT"), aNewPointImage, tr("NEW_POINT_TLT"), QKeySequence(Qt::ControlModifier|Qt::Key_P) ); + connect(anAct, SIGNAL(triggered()), this, SLOT(onNewPoint()) ); + aTB->addAction(anAct); + aTB->addSeparator(); + + anAct = createAction( INSERT_POINT_BEFORE_ID, tr("INSERT_POINT_BEFORE"), QPixmap(), tr("INSERT_POINT_BEFORE_TLT"), QKeySequence(Qt::ControlModifier|Qt::Key_B) ); + connect(anAct, SIGNAL(triggered()), this, SLOT(onInsertPointBefore()) ); + + anAct = createAction( INSERT_POINT_AFTER_ID, tr("INSERT_POINT_AFTER"), QPixmap(), tr("INSERT_POINT_AFTER_TLT"), QKeySequence(Qt::ControlModifier|Qt::Key_M) ); + connect(anAct, SIGNAL(triggered()), this, SLOT(onInsertPointAfter()) ); + + anAct = createAction( CLOSE_SECTIONS_ID, tr("CLOSE_SECTIONS"), QPixmap(), tr("CLOSE_SECTIONS_TLT"), QKeySequence(Qt::ControlModifier|Qt::Key_W) ); + connect(anAct, SIGNAL(triggered()), this, SLOT(onCloseSections()) ); + + anAct = createAction( UNCLOSE_SECTIONS_ID, tr("UNCLOSE_SECTIONS"), QPixmap(), tr("UNCLOSE_SECTIONS_TLT"), QKeySequence(Qt::ControlModifier|Qt::Key_S) ); + connect(anAct, SIGNAL(triggered()), this, SLOT(onUncloseSections()) ); + + QPixmap aPolylineImage(SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM", tr("ICON_CC_POLYLINE"))); + anAct = createAction( SET_SECTIONS_POLYLINE_ID, tr("SET_SECTIONS_POLYLINE"), aPolylineImage, tr("SET_POLYLINE_TLT"), QKeySequence(Qt::ControlModifier|Qt::Key_E) ); + connect(anAct, SIGNAL(triggered()), this, SLOT(onSetPolyline()) ); + + QPixmap aSplineImage(SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM", tr("ICON_CC_SPLINE"))); + anAct = createAction( SET_SECTIONS_SPLINE_ID, tr("SET_SECTIONS_SPLINE"), aSplineImage, tr("SET_SPLINE_TLT"), QKeySequence(Qt::ControlModifier|Qt::Key_R) ); + connect(anAct, SIGNAL(triggered()), this, SLOT(onSetSpline()) ); + + QPixmap aRemoveImage(SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM", tr("ICON_CC_DELETE"))); + anAct = createAction( REMOVE_ID, tr("REMOVE"), aRemoveImage, tr("REMOVE_TLT"), QKeySequence(Qt::ControlModifier|Qt::Key_Delete ) ); + connect(anAct, SIGNAL(triggered()), this, SLOT(onRemove()) ); + aTB->addAction(anAct); + aTB->addSeparator(); + + QPixmap aJoinImage(SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM", tr("ICON_CC_JOIN"))); + anAct = createAction( JOIN_ID, tr("JOIN"), aJoinImage, tr("JOIN_TLT"), QKeySequence(Qt::ControlModifier|Qt::Key_Plus ) ); + connect( anAct, SIGNAL(triggered()), this, SLOT(onJoin()) ); + aTB->addAction(anAct); + aTB->addSeparator(); + + QPixmap aStepUpImage(SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM", tr("ICON_CC_ARROW_UP"))); + anAct = createAction( UP_ID, tr("STEP_UP"), aStepUpImage, tr("STEP_UP_TLT"), QKeySequence(Qt::ControlModifier|Qt::Key_Up ) ); + connect( anAct, SIGNAL(triggered()), this, SLOT(onMoveUp()) ); + aTB->addAction(anAct); + + QPixmap aStepDownImage(SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM", tr("ICON_CC_ARROW_DOWN"))); + anAct = createAction( DOWN_ID, tr("STEP_DOWN"), aStepDownImage, tr("STEP_DOWN_TLT"), QKeySequence(Qt::ControlModifier|Qt::Key_Down ) ); + connect( anAct, SIGNAL(triggered()), this, SLOT(onMoveDown()) ); + aTB->addAction(anAct); + + anAct = createAction( CLEAR_ALL_ID, tr("CLEAR_ALL"), QPixmap(), tr("CLEAR_ALL_TLT"), QKeySequence(Qt::ControlModifier | Qt::ShiftModifier | Qt::Key_Delete ) ); + connect( anAct, SIGNAL(triggered()), this, SLOT( onClearAll()) ); + + anAct = createAction( JOIN_ALL_ID, tr("JOIN_ALL"), QPixmap(), tr("JOIN_ALL_TLT"), QKeySequence(Qt::ControlModifier | Qt::ShiftModifier | Qt::Key_Plus ) ); + connect( anAct, SIGNAL(triggered()), this, SLOT(onJoinAll()) ); + + QVBoxLayout* aSectLayout = new QVBoxLayout(); + aSectLayout->addWidget(aTB); + aSectLayout->addWidget(mySectionView); + aSectionGroup->setLayout(aSectLayout); + QVBoxLayout* aLay = new QVBoxLayout(); +// aLay->addLayout(aNameLayout); + aLay->addWidget(aSectionGroup); + setLayout(aLay); + onSelectionChanged(); +} + +void CurveCreator_Widget::onSelectionChanged() +{ + QList anEnabledAct; + anEnabledAct << NEW_SECTION_ID; + int aSectCnt = myCurve->getNbPoints(); + if( aSectCnt > 0 ) + anEnabledAct << CLEAR_ALL_ID; + if( aSectCnt > 1 ) + anEnabledAct << JOIN_ALL_ID; + QList aSelSections = mySectionView->getSelectedSections(); + QList< QPair< int, int > > aSelPoints = mySectionView->getSelectedPoints(); + CurveCreator_TreeView::SelectionType aSelType = mySectionView->getSelectionType(); + switch( aSelType ){ + case CurveCreator_TreeView::ST_NOSEL:{ + break; + } + case CurveCreator_TreeView::ST_SECTIONS:{ + if( aSelSections.size() > 1 ){ + anEnabledAct << JOIN_ID; + } + if( aSelSections[0] > 0 ){ + anEnabledAct << UP_ID; + } + if( aSelSections.size() == 1 ){ + anEnabledAct << NEW_POINT_ID << INSERT_SECTION_BEFORE_ID << INSERT_SECTION_AFTER_ID; + } + if( aSelSections[ aSelSections.size() - 1 ] < ( myCurve->getNbSections() - 1 ) ){ + anEnabledAct << DOWN_ID; + } + anEnabledAct << CLOSE_SECTIONS_ID << UNCLOSE_SECTIONS_ID << SET_SECTIONS_POLYLINE_ID << SET_SECTIONS_SPLINE_ID; + break; + } + case CurveCreator_TreeView::ST_POINTS_ONE_SECTION:{ + if( aSelPoints[0].second > 0 ){ + anEnabledAct << UP_ID; + } + int aLastIndex = aSelPoints.size()-1; + int aSect = aSelPoints[0].first; + if( aSelPoints[aLastIndex].second < (myCurve->getNbPoints(aSect) - 1)){ + anEnabledAct << DOWN_ID; + } + if( aSelPoints.size() == 1){ + anEnabledAct << INSERT_POINT_BEFORE_ID << INSERT_POINT_AFTER_ID; + } + break; + } + } + int aSelObjsCnt = aSelPoints.size() + aSelSections.size(); + if( aSelObjsCnt > 0 ){ + anEnabledAct << REMOVE_ID; + } + if( myCurve->getNbSections() > 0 ){ + anEnabledAct << REMOVE_ALL_ID; + } + if( myCurve->getNbSections() > 1 ){ + anEnabledAct << JOIN_ALL_ID; + } + QList anIds = myActionMap.keys(); + for( int i = 0 ; i < anIds.size() ; i++ ){ + if( myActionMap.contains(anIds[i]) ){ + if( anEnabledAct.contains(anIds[i]) ){ + myActionMap[anIds[i]]->setEnabled(true); + } + else{ + myActionMap[anIds[i]]->setEnabled(false); + } + } + } +} + +void CurveCreator_Widget::onNewPoint() +{ + mySection= -1; + myPointNum = -1; + QList aSelSection = mySectionView->getSelectedSections(); + if( aSelSection.size() > 0 ){ + mySection = aSelSection[0]; + } + else{ + QList< QPair > aSelPoints = mySectionView->getSelectedPoints(); + if( aSelPoints.size() > 0 ){ + mySection = aSelPoints[0].first; + myPointNum = aSelPoints[0].second + 1; + } + } + QString aSectName; + if( mySection < 0 ){ + mySection = myCurve->getNbSections() - 1; + } + aSectName = QString::fromStdString( myCurve->getSectionName(mySection)); + if( myPointNum < 0 ){ + myPointNum = myCurve->getNbPoints(mySection); + } + myNewPointEditor->clear(); + myNewPointEditor->setEditMode(false); + myNewPointEditor->setSectionName(aSectName); + if( myNewPointEditor->exec() == QDialog::Accepted ){ + onAddNewPoint(); + } +} + +void CurveCreator_Widget::onAddNewPoint() +{ + CurveCreator::Coordinates aCoords = myNewPointEditor->getCoordinates(); + myEdit->insertPoints(aCoords, mySection, myPointNum ); + mySectionView->pointsAdded( mySection, myPointNum ); + myNewPointEditor->clear(); + myPointNum++; +} + +void CurveCreator_Widget::onNewSection() +{ + myNewSectionEditor->clear(); + myNewSectionEditor->setEditMode(false); + QString aSectName = QString( myCurve->getUnicSectionName().c_str() ); + myNewSectionEditor->setSectionParameters(aSectName, true, CurveCreator::Polyline ); + if( myNewSectionEditor->exec() == QDialog::Accepted ){ + onAddNewSection(); + } +} + +void CurveCreator_Widget::onAddNewSection() +{ + CurveCreator::Coordinates aCoords; + myEdit->addSection( myNewSectionEditor->getName().toStdString(), myNewSectionEditor->getSectionType(), + myNewSectionEditor->isClosed(), aCoords ); + mySectionView->sectionAdded( mySection ); + QString aNewName = QString(myCurve->getUnicSectionName().c_str()); + myNewSectionEditor->setSectionName(aNewName); + mySection++; +} + +QAction* CurveCreator_Widget::createAction( ActionId theId, const QString& theName, + const QPixmap& theImage, const QString& theToolTip, + const QKeySequence& theShortcut ) +{ + QAction* anAct = new QAction(theName,this); + if( !theImage.isNull() ){ + anAct->setIcon(theImage); + } + anAct->setShortcut(theShortcut); + anAct->setToolTip(theToolTip); + myActionMap[theId] = anAct; + return anAct; +} + +QAction* CurveCreator_Widget::getAction(ActionId theId) +{ + if( myActionMap.contains(theId) ) + return myActionMap[theId]; + return NULL; +} + +void CurveCreator_Widget::onEditSection( int theSection ) +{ + mySection = theSection; + QString aSectName = QString::fromStdString( myCurve->getSectionName(theSection)); + bool isClosed = myCurve->isClosed(theSection); + CurveCreator::Type aType = myCurve->getType(theSection); + myNewSectionEditor->setEditMode(true); + myNewSectionEditor->setSectionParameters( aSectName, isClosed, aType ); + if( myNewSectionEditor->exec() == QDialog::Accepted ){ + QString aName = myNewSectionEditor->getName(); + bool isClosed = myNewSectionEditor->isClosed(); + CurveCreator::Type aSectType = myNewSectionEditor->getSectionType(); + myEdit->setClosed( isClosed, mySection ); + myEdit->setName( aName.toStdString(), mySection ); + myEdit->setType( aSectType, mySection ); + mySectionView->sectionChanged(mySection); + } +} + +void CurveCreator_Widget::onEditPoint( int theSection, int thePoint ) +{ + if( !myNewPointEditor ){ + } + QString aSectName = QString::fromStdString( myCurve->getSectionName(theSection)); + myNewPointEditor->setEditMode(true); + myNewPointEditor->setSectionName(aSectName); + CurveCreator::Coordinates aCoords = myCurve->getCoordinates(theSection,thePoint); + myNewPointEditor->setCoordinates(aCoords); + if( myNewPointEditor->exec() == QDialog::Accepted ){ + aCoords = myNewPointEditor->getCoordinates(); + myEdit->setCoordinates(aCoords, theSection, thePoint); + mySectionView->pointDataChanged(theSection, thePoint ); + } +} + +void CurveCreator_Widget::onJoin() +{ + QList aSections = mySectionView->getSelectedSections(); + if( aSections.size() == 0 ){ + return; + } + int aMainSect = aSections[0]; + int aMainSectSize = myCurve->getNbPoints(aMainSect); + for( int i = 1 ; i < aSections.size() ; i++ ){ + int aSectNum = aSections[i] - (i-1); + myEdit->join( aMainSect, aSectNum ); + mySectionView->sectionsRemoved( aSectNum ); + } + int aNewSectSize = myCurve->getNbPoints(aMainSect); + if( aNewSectSize != aMainSectSize ) + mySectionView->pointsAdded( aMainSect, aMainSectSize, aNewSectSize-aMainSectSize ); +} + +void CurveCreator_Widget::onRemove() +{ + QList< QPair > aSelPoints = mySectionView->getSelectedPoints(); + int aCurrSect=-1; + int aRemoveCnt = 0; + for( int i = 0 ; i < aSelPoints.size() ; i++ ){ + if( aCurrSect != aSelPoints[i].first ){ + aRemoveCnt = 0; + aCurrSect = aSelPoints[i].first; + } + int aPntIndx = aSelPoints[i].second - aRemoveCnt; + myEdit->removePoints(aCurrSect,aPntIndx, 1); + mySectionView->pointsRemoved( aCurrSect, aPntIndx ); + aRemoveCnt++; + } + QList aSections = mySectionView->getSelectedSections(); + for( int i = 0 ; i < aSections.size() ; i++ ){ + int aSectNum = aSections[i] - (i); + myEdit->removeSection( aSectNum ); + mySectionView->sectionsRemoved( aSectNum ); + } + mySectionView->clearSelection(); +} + +void CurveCreator_Widget::onMoveUp() +{ + if( mySectionView->getSelectionType() == CurveCreator_TreeView::ST_SECTIONS ){ +//Move sections + QList aSections = mySectionView->getSelectedSections(); + for( int i = 0 ; i < aSections.size() ; i++ ){ + int anIndx = aSections[i]; + myEdit->moveSection( anIndx, anIndx-1); + mySectionView->sectionsSwapped( anIndx, -1 ); + } + } + else{ +//Move points + QList< QPair > aPoints = mySectionView->getSelectedPoints(); + for( int i = 0 ; i < aPoints.size() ; i++ ){ + int aSection = aPoints[i].first; + int aPoint = aPoints[i].second; + myEdit->movePoint(aSection, aPoint, aPoint-2); + mySectionView->pointsSwapped( aSection, aPoint, -1 ); + } + } +} + +void CurveCreator_Widget::onMoveDown() +{ + if( mySectionView->getSelectionType() == CurveCreator_TreeView::ST_SECTIONS ){ +//Move sections + QList aSections = mySectionView->getSelectedSections(); + for( int i = aSections.size()-1 ; i >=0 ; i-- ){ + int anIndx = aSections[i]; + myEdit->moveSection( anIndx, anIndx+1); + mySectionView->sectionsSwapped( anIndx, 1 ); + } + } + else{ +//Move points + QList< QPair > aPoints = mySectionView->getSelectedPoints(); + for( int i = aPoints.size() - 1; i >= 0 ; i-- ){ + int aSection = aPoints[i].first; + int aPoint = aPoints[i].second; + myEdit->movePoint(aSection, aPoint, aPoint+1); + mySectionView->pointsSwapped( aSection, aPoint, 1 ); + } + } +} + +void CurveCreator_Widget::onClearAll() +{ + myEdit->clear(); + mySectionView->reset(); + onSelectionChanged(); +} + +void CurveCreator_Widget::onJoinAll() +{ + myEdit->join(); + mySectionView->reset(); + onSelectionChanged(); +} + +void CurveCreator_Widget::onInsertSectionBefore() +{ + +} + +void CurveCreator_Widget::onInsertSectionAfter() +{ + +} + +void CurveCreator_Widget::onInsertPointBefore() +{ + +} + +void CurveCreator_Widget::onInsertPointAfter() +{ + +} + +void CurveCreator_Widget::onUndoSettings() +{ + +} + +void CurveCreator_Widget::onSetSpline() +{ + QList aSelSections = mySectionView->getSelectedSections(); + for( int i = 0 ; i < aSelSections.size() ; i++ ){ + myEdit->setType(CurveCreator::BSpline, aSelSections[i]); + mySectionView->sectionChanged(aSelSections[i]); + } +} + +void CurveCreator_Widget::onSetPolyline() +{ + QList aSelSections = mySectionView->getSelectedSections(); + for( int i = 0 ; i < aSelSections.size() ; i++ ){ + myEdit->setType(CurveCreator::Polyline, aSelSections[i]); + mySectionView->sectionChanged(aSelSections[i]); + } +} + +void CurveCreator_Widget::onCloseSections() +{ + QList aSelSections = mySectionView->getSelectedSections(); + for( int i = 0 ; i < aSelSections.size() ; i++ ){ + myEdit->setClosed(true, aSelSections[i]); + mySectionView->sectionChanged(aSelSections[i]); + } +} + +void CurveCreator_Widget::onUncloseSections() +{ + QList aSelSections = mySectionView->getSelectedSections(); + for( int i = 0 ; i < aSelSections.size() ; i++ ){ + myEdit->setClosed(false, aSelSections[i]); + mySectionView->sectionChanged(aSelSections[i]); + } +} + +void CurveCreator_Widget::onContextMenu( QPoint thePoint ) +{ + QList aContextActions; + aContextActions << CLEAR_ALL_ID << JOIN_ALL_ID << SEPARATOR_ID << + INSERT_SECTION_BEFORE_ID << INSERT_SECTION_AFTER_ID << SEPARATOR_ID << + CLOSE_SECTIONS_ID << UNCLOSE_SECTIONS_ID << SET_SECTIONS_POLYLINE_ID << + SET_SECTIONS_SPLINE_ID << SEPARATOR_ID << + INSERT_POINT_BEFORE_ID << INSERT_POINT_AFTER_ID; + QPoint aGlPoint = mySectionView->mapToGlobal(thePoint); + bool isVis = false; + QList aResAct; + for( int i = 0 ; i < aContextActions.size() ; i++ ){ + if( aContextActions[i] != SEPARATOR_ID ){ + if( myActionMap.contains(aContextActions[i]) ){ + QAction* anAct = myActionMap[aContextActions[i]]; + if( anAct->isEnabled() ){ + aResAct << aContextActions[i]; + isVis = true; + } + } + } + else{ + aResAct << SEPARATOR_ID; + } + } + if( !isVis ) + return; + + QMenu* aMenu = new QMenu(this); + for( int i = 0 ; i < aResAct.size() ; i++ ){ + if( aResAct[i] == SEPARATOR_ID ){ + aMenu->addSeparator(); + } + else{ + QAction* anAct = myActionMap[aResAct[i]]; + aMenu->insertAction(NULL, anAct); + } + } + aMenu->exec(aGlPoint); +} diff --git a/src/CurveCreator/CurveCreator_Widget.h b/src/CurveCreator/CurveCreator_Widget.h index 6323987b6..df2850d89 100644 --- a/src/CurveCreator/CurveCreator_Widget.h +++ b/src/CurveCreator/CurveCreator_Widget.h @@ -1,160 +1,73 @@ -// Copyright (C) 2007-2013 CEA/DEN, EDF R&D, OPEN CASCADE -// -// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library 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 -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// - -// File: CurveCreator_Widget.h -// Created: Mon Jul 01 12:49:21 2013 -// Author: Sergey KHROMOV -// - -#ifndef _CurveCreator_Widget_HeaderFile -#define _CurveCreator_Widget_HeaderFile - - -#include -#include - -class CurveCreator_Curve; -class QGroupBox; -class QButtonGroup; -class QComboBox; -class QCheckBox; -class QPushButton; -class QLabel; -class QListWidget; -class QListWidgetItem; -class CurveCreator_EditPntsWidget; -class CurveCreator_EditPntDlg; -class CurveCreator_UndoOptsDlg; - - -class CurveCreator_Widget : public QWidget -{ - Q_OBJECT - -public: - - CurveCreator_Widget(QWidget* parent, - CurveCreator_Curve *theCurve, - Qt::WindowFlags fl = 0); - -private: - - void init(); - - void initSections(); - - void addSectionItem(const CurveCreator::Type theType, const bool isClosed); - - void updateSectionItem(const int theRow, const CurveCreator::Type theType, - const bool isClosed); - - void sectionMove(const int theShift); - - void initPoints(const int theSectionIndex); - - int getCurrentSectionIndex(); - - void updateUndoRedo(); - - void updateUndoRedoButtons(); - - void setTabOrder(); - -private slots: - - void undoOptionsChanged(); - - void sectionAddOrModify(); - - void addModifChanged(int theId); - - void changeSecSelection(); - - void sectionRemove(); - - void sectionJoin(); - - void sectionJoinAll(); - - void sectionClear(); - - void sectionUp(); - - void sectionDown(); - - void onNumberOfItemsChanged(QListWidget *theListWidget); - - void changePntsSelection(); - - void editPnt(QListWidgetItem *theItem); - - void pntsAdd(); - - void pntsInsert(); - - void pntsRemove(); - - void undo(); - - void redo(); - -signals: - - void numberOfItemsChanged(QListWidget *theListWidget); - -protected: - - CurveCreator_CurveEditor myEditor; - CurveCreator::Dimension myDimension; - // Undo/redo widgets - QLabel *myEnabledUndoLbl; - QLabel *myBufSizeUndoLbl; - QPushButton *myUndoBtn; - QPushButton *myRedoBtn; - QPushButton *myUndoOptsBtn; - CurveCreator_UndoOptsDlg *myUndoOptsDlg; - // Sections widgets - QGroupBox *myAddSecGrp; - QButtonGroup *mySecBtnGrp; - QComboBox *mySecTypeCmbBox; - QCheckBox *mySecCloseChkBox; - QPushButton *mySecAddModifBtn; - QPushButton *mySecRmBtn; - QPushButton *mySecJoinBtn; - QPushButton *mySecJoinAllBtn; - QPushButton *mySecClearBtn; - QPushButton *mySecUpBtn; - QPushButton *mySecDownBtn; - QListWidget *mySecList; - CurveCreator_EditPntsWidget *myEditSecPnts; - // Points widgets - QGroupBox *myPntsGrp; - QListWidget *myPntsList; - CurveCreator_EditPntDlg *myPntEditDlg; - CurveCreator_EditPntsWidget *myEditPnts; - QPushButton *myAddPntsBtn; - QPushButton *myInsertPntsBtn; - QPushButton *myRmPntsBtn; - -}; - -#endif +#ifndef CURVECREATOR_WIDGET_H +#define CURVECREATOR_WIDGET_H + +#include "CurveCreator_Curve.hxx" + +#include + +#include + +class QAction; +class QPixmap; +class CurveCreator_CurveEditor; +class CurveCreator_TreeView; +class CurveCreator_NewPointDlg; +class CurveCreator_NewSectionDlg; + +class CurveCreator_Widget : public QWidget +{ + Q_OBJECT +public: + explicit CurveCreator_Widget( QWidget* parent, + CurveCreator_Curve *theCurve, + Qt::WindowFlags fl=0 ); + +signals: + +public slots: + +protected slots: + void onNewPoint(); + void onNewSection(); + void onSelectionChanged(); + void onAddNewPoint(); + void onAddNewSection(); + void onEditSection( int theSection ); + void onEditPoint( int theSection, int thePoint ); + void onJoin(); + void onRemove(); + void onMoveUp(); + void onMoveDown(); + void onClearAll(); + void onJoinAll(); + void onInsertSectionBefore(); + void onInsertSectionAfter(); + void onSetSpline(); + void onSetPolyline(); + void onCloseSections(); + void onUncloseSections(); + void onInsertPointBefore(); + void onInsertPointAfter(); + void onUndoSettings(); + void onContextMenu(QPoint thePoint); +protected: + enum ActionId{ UNDO_ID, REDO_ID, NEW_SECTION_ID, NEW_POINT_ID, REMOVE_ID, REMOVE_ALL_ID, JOIN_ID, + JOIN_ALL_ID, UP_ID, DOWN_ID, INSERT_SECTION_BEFORE_ID, INSERT_SECTION_AFTER_ID, + INSERT_POINT_BEFORE_ID, INSERT_POINT_AFTER_ID, CLOSE_SECTIONS_ID, UNCLOSE_SECTIONS_ID, + SET_SECTIONS_POLYLINE_ID, SET_SECTIONS_SPLINE_ID, CLEAR_ALL_ID, SEPARATOR_ID }; +private: + QAction* createAction( ActionId theId, const QString& theName, const QPixmap& theImage, + const QString& theToolTip, const QKeySequence& theShortcut ); + QAction* getAction(ActionId theId); +private: + QMap myActionMap; + CurveCreator_Curve* myCurve; + CurveCreator_CurveEditor* myEdit; + CurveCreator_TreeView* mySectionView; + CurveCreator_NewPointDlg* myNewPointEditor; + CurveCreator_NewSectionDlg* myNewSectionEditor; + int mySection; + int myPointNum; +}; + +#endif // CURVECREATOR_WIDGET_H diff --git a/src/CurveCreator/Makefile.am b/src/CurveCreator/Makefile.am index 51528e05b..6372a395e 100644 --- a/src/CurveCreator/Makefile.am +++ b/src/CurveCreator/Makefile.am @@ -54,32 +54,25 @@ salomeinclude_HEADERS = \ # Compilation options for GUI mode if GEOM_ENABLE_GUI dist_libCurveCreator_la_SOURCES += \ - CurveCreator_PointItem.h \ - CurveCreator_UndoOptsDlg.h \ - CurveCreator_EditPntDlg.h \ - CurveCreator_EditPntsDlg.h \ - CurveCreator_EditPntsWidget.h \ - CurveCreator_Widget.h \ - CurveCreator_PointItem.cxx \ - CurveCreator_UndoOptsDlg.cxx \ - CurveCreator_EditPntDlg.cxx \ - CurveCreator_EditPntsDlg.cxx \ - CurveCreator_EditPntsWidget.cxx \ + CurveCreator_NewPointDlg.h \ + CurveCreator_NewSection.h \ + CurveCreator_TreeView.h \ + CurveCreator_Widget.h \ + CurveCreator_NewPointDlg.cxx \ + CurveCreator_NewSectionDlg.cxx \ + CurveCreator_TreeView.cxx \ CurveCreator_Widget.cxx salomeinclude_HEADERS += \ - CurveCreator_PointItem.h \ - CurveCreator_UndoOptsDlg.h \ - CurveCreator_EditPntDlg.h \ - CurveCreator_EditPntsDlg.h \ - CurveCreator_EditPntsWidget.h \ + CurveCreator_NewPointDlg.h \ + CurveCreator_NewSectionDlg.h \ + CurveCreator_TreeView.h \ CurveCreator_Widget.h MOC_FILES = \ - CurveCreator_UndoOptsDlg_moc.cxx \ - CurveCreator_EditPntDlg_moc.cxx \ - CurveCreator_EditPntsDlg_moc.cxx \ - CurveCreator_EditPntsWidget_moc.cxx \ + CurveCreator_NewPointDlg_moc.cxx \ + CurveCreator_NewSectionDlg_moc.cxx \ + CurveCreator_TreeView_moc.cxx \ CurveCreator_Widget_moc.cxx nodist_libCurveCreator_la_SOURCES = $(MOC_FILES) @@ -90,7 +83,8 @@ endif libCurveCreator_la_CPPFLAGS = \ $(QT_INCLUDES) \ $(CAS_CPPFLAGS) \ - $(KERNEL_CXXFLAGS) + $(KERNEL_CXXFLAGS) \ + $(GUI_CXXFLAGS) libCurveCreator_la_LDFLAGS = \ $(KERNEL_LDFLAGS) \ -- 2.30.2