X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FOperationGUI%2FOperationGUI_ChamferDlg.cxx;h=02519e43480c4a303a590c7f4750308cfda3e925;hb=6c057505a6e4bcff162cfb8b86deeda0eefff60a;hp=a2d2f2341897d0bc800a2e985dd792dee2792594;hpb=8491fee81c315f2063e1753ea7b2cd5bc90e6a14;p=modules%2Fgeom.git diff --git a/src/OperationGUI/OperationGUI_ChamferDlg.cxx b/src/OperationGUI/OperationGUI_ChamferDlg.cxx index a2d2f2341..02519e434 100644 --- a/src/OperationGUI/OperationGUI_ChamferDlg.cxx +++ b/src/OperationGUI/OperationGUI_ChamferDlg.cxx @@ -1,22 +1,22 @@ // GEOM GEOMGUI : GUI for Geometry component // // Copyright (C) 2003 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 -// +// 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 : OperationGUI_ChamferDlg.cxx @@ -38,6 +38,7 @@ #include #include +// OCCT Includes #include #include @@ -49,95 +50,116 @@ // The dialog will by default be modeless, unless you set 'modal' to // TRUE to construct a modal dialog. //================================================================================= -OperationGUI_ChamferDlg::OperationGUI_ChamferDlg( GeometryGUI* theGeometryGUI, QWidget* parent ) - : GEOMBase_Skeleton( theGeometryGUI, parent, false ) +OperationGUI_ChamferDlg::OperationGUI_ChamferDlg (GeometryGUI* theGeometryGUI, QWidget* parent) + : GEOMBase_Skeleton(theGeometryGUI, parent, false), + myInitial(true) { - QPixmap image1( SUIT_Session::session()->resourceMgr()->loadPixmap( "GEOM", tr( "ICON_DLG_CHAMFER_ALL" ) ) ); - QPixmap image2( SUIT_Session::session()->resourceMgr()->loadPixmap( "GEOM", tr( "ICON_DLG_CHAMFER_EDGE" ) ) ); - QPixmap image3( SUIT_Session::session()->resourceMgr()->loadPixmap( "GEOM", tr( "ICON_DLG_CHAMFER_FACE" ) ) ); - QPixmap iconSelect( SUIT_Session::session()->resourceMgr()->loadPixmap( "GEOM", tr( "ICON_SELECT" ) ) ); + SUIT_ResourceMgr* aResMgr = SUIT_Session::session()->resourceMgr(); + QPixmap image1 (aResMgr->loadPixmap("GEOM", tr("ICON_DLG_CHAMFER_ALL"))); + QPixmap image2 (aResMgr->loadPixmap("GEOM", tr("ICON_DLG_CHAMFER_EDGE_FROM_FACE"))); + QPixmap image3 (aResMgr->loadPixmap("GEOM", tr("ICON_DLG_CHAMFER_FACE"))); + QPixmap image4 (aResMgr->loadPixmap("GEOM", tr("ICON_DLG_CHAMFER_EDGE"))); + + QPixmap iconSelect (aResMgr->loadPixmap("GEOM", tr("ICON_SELECT"))); - setWindowTitle( tr( "GEOM_CHAMFER_TITLE" ) ); + setWindowTitle(tr("GEOM_CHAMFER_TITLE")); - mainFrame()->GroupConstructors->setTitle( tr( "GEOM_CHAMFER" ) ); + /***************************************************************/ + mainFrame()->GroupConstructors->setTitle(tr("GEOM_CHAMFER")); - mainFrame()->RadioButton1->setIcon( image1 ); - mainFrame()->RadioButton2->setIcon( image2 ); - mainFrame()->RadioButton3->setIcon( image3 ); + mainFrame()->RadioButton1->setIcon(image1); + mainFrame()->RadioButton2->setIcon(image2); + mainFrame()->RadioButton3->setIcon(image3); + mainFrame()->RadioButton4->show(); + mainFrame()->RadioButton4->setIcon(image4); // Create first group - myGrp1 = new QGroupBox( tr( "GEOM_CHAMFER_ALL" ), centralWidget() ); + myGrp1 = new QGroupBox(tr("GEOM_CHAMFER_ALL"), centralWidget()); - QGridLayout* aLayout = new QGridLayout( myGrp1 ); - aLayout->setMargin( 9 ); aLayout->setSpacing( 6 ); + QGridLayout* aLayout = new QGridLayout(myGrp1); + aLayout->setMargin(9); aLayout->setSpacing(6); - createSelWg( tr( "GEOM_MAIN_OBJECT" ), iconSelect, myGrp1, aLayout, MainObj1 ); + createSelWg(tr("GEOM_MAIN_OBJECT"), iconSelect, myGrp1, aLayout, MainObj1); int row = aLayout->rowCount(); - aLayout->addWidget( new QLabel( tr( "D" ), myGrp1 ), row, 0 ); - aLayout->addWidget( ( mySpinBox[ SpinBox1 ] = new QDoubleSpinBox( myGrp1 ) ), row++, 2 ); - aLayout->setRowStretch( row, 10 ); + aLayout->addWidget(new QLabel(tr("D"), myGrp1), row, 0); + aLayout->addWidget((mySpinBox[ SpinBox1 ] = new QDoubleSpinBox(myGrp1)), row++, 2); + aLayout->setRowStretch(row, 10); // Create second group - myGrp2 = new QGroupBox( tr( "GEOM_CHAMFER_EDGES" ), centralWidget() ); + myGrp2 = new QGroupBox(tr("GEOM_CHAMFER_EDGES"), centralWidget()); - aLayout = new QGridLayout( myGrp2 ); - aLayout->setMargin( 9 ); aLayout->setSpacing( 6 ); + aLayout = new QGridLayout(myGrp2); + aLayout->setMargin(9); aLayout->setSpacing(6); - createSelWg( tr( "GEOM_MAIN_OBJECT" ), iconSelect, myGrp2, aLayout, MainObj2 ); - createSelWg( tr( "FACE_1" ), iconSelect, myGrp2, aLayout, Face1 ); - createSelWg( tr( "FACE_2" ), iconSelect, myGrp2, aLayout, Face2 ); + createSelWg(tr("GEOM_MAIN_OBJECT"), iconSelect, myGrp2, aLayout, MainObj2); + createSelWg(tr("FACE_1"), iconSelect, myGrp2, aLayout, Face1); + createSelWg(tr("FACE_2"), iconSelect, myGrp2, aLayout, Face2); - row = aLayout->rowCount(); + createRadioWg(tr("GEOM_D1"), tr("GEOM_D2"), myGrp2, aLayout, RadioButton21, SpinBox21, SpinBox22); + createRadioWg(tr("GEOM_D"), tr("GEOM_ANGLE"), myGrp2, aLayout, RadioButton22, SpinBox23, SpinBox24); - aLayout->addWidget( new QLabel( tr( "GEOM_D1" ), myGrp2 ), row, 0 ); - aLayout->addWidget( ( mySpinBox[ SpinBox21 ] = new QDoubleSpinBox( myGrp2 ) ), row++, 2 ); - aLayout->addWidget( new QLabel( tr( "GEOM_D2" ), myGrp2 ), row, 0 ); - aLayout->addWidget( ( mySpinBox[ SpinBox22 ] = new QDoubleSpinBox( myGrp2 ) ), row++, 2 ); - aLayout->setRowStretch( row, 10 ); + aLayout->setRowStretch(aLayout->rowCount(), 10); // Create third group - myGrp3 = new QGroupBox( tr( "GEOM_CHAMFER_FACES" ), centralWidget() ); + myGrp3 = new QGroupBox(tr("GEOM_CHAMFER_FACES"), centralWidget()); + + aLayout = new QGridLayout(myGrp3); + aLayout->setMargin(9); aLayout->setSpacing(6); + + createSelWg(tr("GEOM_MAIN_OBJECT"), iconSelect, myGrp3, aLayout, MainObj3); + createSelWg(tr("SELECTED_FACES"), iconSelect, myGrp3, aLayout, Faces); + + createRadioWg(tr("GEOM_D1"), tr("GEOM_D2"), myGrp3, aLayout, RadioButton31, SpinBox31, SpinBox32); + createRadioWg(tr("GEOM_D"), tr("GEOM_ANGLE"), myGrp3, aLayout, RadioButton32, SpinBox33, SpinBox34); + + aLayout->setRowStretch(aLayout->rowCount(), 10); + + // Create fourth group - aLayout = new QGridLayout( myGrp3 ); - aLayout->setMargin( 9 ); aLayout->setSpacing( 6 ); + myGrp4 = new QGroupBox(tr("GEOM_CHAMFER_EDGE"), centralWidget()); - createSelWg( tr( "GEOM_MAIN_OBJECT" ), iconSelect, myGrp3, aLayout, MainObj3 ); - createSelWg( tr( "SELECTED_FACES" ), iconSelect, myGrp3, aLayout, Faces ); + aLayout = new QGridLayout(myGrp4); + aLayout->setMargin(9); aLayout->setSpacing(6); - row = aLayout->rowCount(); + createSelWg(tr("GEOM_MAIN_OBJECT"), iconSelect, myGrp4, aLayout, MainObj4); + createSelWg(tr("SELECTED_EDGE"), iconSelect, myGrp4, aLayout, Edges); - aLayout->addWidget( new QLabel( tr( "GEOM_D1" ), myGrp3 ), row, 0 ); - aLayout->addWidget( ( mySpinBox[ SpinBox31 ] = new QDoubleSpinBox( myGrp3 ) ), row++, 2 ); - aLayout->addWidget( new QLabel( tr( "GEOM_D2" ), myGrp3 ), row, 0 ); - aLayout->addWidget( ( mySpinBox[ SpinBox32 ] = new QDoubleSpinBox( myGrp3 ) ), row++, 2 ); - aLayout->setRowStretch( row, 10 ); + createRadioWg(tr("GEOM_D1"), tr("GEOM_D2"), myGrp4, aLayout, RadioButton41, SpinBox41, SpinBox42); + createRadioWg(tr("GEOM_D"), tr("GEOM_ANGLE"), myGrp4, aLayout, RadioButton42, SpinBox43, SpinBox44); + + aLayout->setRowStretch(aLayout->rowCount(), 10); // Add groups to layout - QVBoxLayout* layout = new QVBoxLayout( centralWidget() ); - layout->setMargin( 0 ); layout->setSpacing( 6 ); - layout->addWidget( myGrp1 ); - layout->addWidget( myGrp2 ); - layout->addWidget( myGrp3 ); + QVBoxLayout* layout = new QVBoxLayout(centralWidget()); + layout->setMargin(0); layout->setSpacing(6); + layout->addWidget(myGrp1); + layout->addWidget(myGrp2); + layout->addWidget(myGrp3); + layout->addWidget(myGrp4); + /***************************************************************/ // Set range of spinboxes - double SpecificStep = 10.0; QMap< int, QDoubleSpinBox* >::iterator anIter; - for ( anIter = mySpinBox.begin(); anIter != mySpinBox.end(); ++anIter ) - initSpinBox( anIter.value(), 0.001, COORD_MAX, SpecificStep, 3 ); + for (anIter = mySpinBox.begin(); anIter != mySpinBox.end(); ++anIter) { + if (anIter.key() == SpinBox44 || anIter.key() == SpinBox34 || anIter.key() == SpinBox24) + initSpinBox(anIter.value(), 0.001, 89.999, 5, 0); + else + initSpinBox(anIter.value(), 0.001, COORD_MAX, SpecificStep, 3); + } - setHelpFileName( "chamfer.htm" ); + setHelpFileName("chamfer_operation_page.html"); - /* Initialisations */ + // Initialisation Init(); + myRadioButton[ RadioButton21 ]->click(); } - //================================================================================= // function : ~OperationGUI_ChamferDlg() // purpose : Destroys the object and frees any allocated resources @@ -146,139 +168,205 @@ OperationGUI_ChamferDlg::~OperationGUI_ChamferDlg() { } - //================================================================================= // function : Init() // purpose : //================================================================================= void OperationGUI_ChamferDlg::Init() { - myConstructorId = -1; - reset(); + // Set Initial values of spinboxes + QMap< int, QDoubleSpinBox* >::iterator anIter; + for (anIter = mySpinBox.begin(); anIter != mySpinBox.end(); ++anIter) + anIter.value()->setValue(5); + + // Clear line edits + QMap< int, QLineEdit* >::iterator anIterLE; + for (anIterLE = mySelName.begin(); anIterLE != mySelName.end(); ++anIterLE) + anIterLE.value()->setText(""); - /* signals and slots connections */ + myShape = GEOM::GEOM_Object::_nil(); + + myFaces.Clear(); + myEdges.Clear(); + myFace[ Face1 ] = -1; + myFace[ Face2 ] = -1; + + // signals and slots connections // main buttons - connect( buttonOk(), SIGNAL( clicked() ), this, SLOT( ClickOnOk() ) ); - connect( buttonApply(), SIGNAL( clicked() ), this, SLOT( ClickOnApply() ) ); + connect(buttonOk(), SIGNAL(clicked()), this, SLOT(ClickOnOk() )); + connect(buttonApply(), SIGNAL(clicked()), this, SLOT(ClickOnApply())); // group box - connect( this, SIGNAL( constructorsClicked( int ) ), this, SLOT( ConstructorsClicked( int ) ) ); + connect(this, SIGNAL(constructorsClicked(int)), this, SLOT(ConstructorsClicked(int))); // push buttons QMap< int, QPushButton* >::iterator anIterBtn; - for ( anIterBtn = mySelBtn.begin(); anIterBtn != mySelBtn.end(); ++anIterBtn ) - connect( anIterBtn.value(), SIGNAL( clicked() ), - this, SLOT( SetEditCurrentArgument() ) ); + for (anIterBtn = mySelBtn.begin(); anIterBtn != mySelBtn.end(); ++anIterBtn) + connect(anIterBtn.value(), SIGNAL(clicked()), + this, SLOT(SetEditCurrentArgument())); // line edits QMap< int, QLineEdit* >::iterator anIterLE2; - for ( anIterLE2 = mySelName.begin(); anIterLE2 != mySelName.end(); ++anIterLE2 ) - connect( anIterLE2.value(), SIGNAL( returnPressed() ), - this, SLOT( LineEditReturnPressed() ) ); + for (anIterLE2 = mySelName.begin(); anIterLE2 != mySelName.end(); ++anIterLE2) + connect(anIterLE2.value(), SIGNAL(returnPressed()), + this, SLOT(LineEditReturnPressed())); // spin boxes QMap< int, QDoubleSpinBox* >::iterator anIterSpin; - for ( anIterSpin = mySpinBox.begin(); anIterSpin != mySpinBox.end(); ++anIterSpin ) - connect( anIterSpin.value(), SIGNAL( valueChanged( double ) ), - this, SLOT( ValueChangedInSpinBox( double ) ) ); + for (anIterSpin = mySpinBox.begin(); anIterSpin != mySpinBox.end(); ++anIterSpin) + connect(anIterSpin.value(), SIGNAL(valueChanged(double)), + this, SLOT(ValueChangedInSpinBox(double))); - // selection - connect( myGeomGUI->getApp()->selectionMgr(), - SIGNAL( currentSelectionChanged() ), this, SLOT( SelectionIntoArgument() ) ); + // radio buttons + QMap< int, QRadioButton* >::iterator anIterRadio; + for (anIterRadio = myRadioButton.begin(); anIterRadio != myRadioButton.end(); ++anIterRadio) + connect(anIterRadio.value(), SIGNAL(clicked()), + this, SLOT(RadioButtonPressed())); - initName( tr( "GEOM_CHAMFER" ) ); + initName(tr("GEOM_CHAMFER")); - ConstructorsClicked( 0 ); + myConstructorId = -1; + ConstructorsClicked(0); } - //================================================================================= // function : ConstructorsClicked() // purpose : Radio button management //================================================================================= -void OperationGUI_ChamferDlg::ConstructorsClicked( int constructorId ) +void OperationGUI_ChamferDlg::ConstructorsClicked (int constructorId) { // Activate next widget - if ( myGeomGUI->getApp()->desktop()->activeWindow()->getViewManager()->getType() - != OCCViewer_Viewer::Type() ) { - mainFrame()->RadioButton1->setChecked( true ); + if (myGeomGUI->getApp()->desktop()->activeWindow()->getViewManager()->getType() + != OCCViewer_Viewer::Type()) { + mainFrame()->RadioButton1->setChecked(true); return; } - if ( myConstructorId == constructorId ) + if (myConstructorId == constructorId) return; + //disconnect(myGeomGUI->getApp()->selectionMgr(), 0, this, 0); + // Get values from previous widget - double D1 = 5, D2 = 5; - if ( myConstructorId == 0 ) + double D1 = 5, D2 = 5, D = 5, Angle = 5; + if (myConstructorId == 0) D1 = D2 = mySpinBox[ SpinBox1 ]->value(); - else if ( myConstructorId == 1 ) { + else if (myConstructorId == 1) { D1 = mySpinBox[ SpinBox21 ]->value(); D2 = mySpinBox[ SpinBox22 ]->value(); + D = mySpinBox[ SpinBox23 ]->value(); + Angle = mySpinBox[ SpinBox24 ]->value(); } - else if ( myConstructorId == 2 ) { + else if (myConstructorId == 2) { D1 = mySpinBox[ SpinBox31 ]->value(); D2 = mySpinBox[ SpinBox32 ]->value(); + D = mySpinBox[ SpinBox33 ]->value(); + Angle = mySpinBox[ SpinBox34 ]->value(); + } + else if (myConstructorId == 3) { + D1 = mySpinBox[ SpinBox41 ]->value(); + D2 = mySpinBox[ SpinBox42 ]->value(); + D = mySpinBox[ SpinBox43 ]->value(); + Angle = mySpinBox[ SpinBox44 ]->value(); } myConstructorId = constructorId; - switch ( constructorId ) { + switch (constructorId) { case 0: myGrp2->hide(); myGrp3->hide(); + myGrp4->hide(); myGrp1->show(); - mySpinBox[ SpinBox1 ]->setValue( D1 ); + mySpinBox[ SpinBox1 ]->setValue(D1); break; case 1: myGrp1->hide(); myGrp3->hide(); + myGrp4->hide(); myGrp2->show(); - mySpinBox[ SpinBox21 ]->setValue( D1 ); - mySpinBox[ SpinBox22 ]->setValue( D2 ); + mySpinBox[ SpinBox21 ]->setValue(D1); + mySpinBox[ SpinBox22 ]->setValue(D2); + mySpinBox[ SpinBox23 ]->setValue(D); + mySpinBox[ SpinBox24 ]->setValue(Angle); break; case 2: myGrp1->hide(); myGrp2->hide(); + myGrp4->hide(); myGrp3->show(); - mySpinBox[ SpinBox31 ]->setValue( D1 ); - mySpinBox[ SpinBox32 ]->setValue( D2 ); + mySpinBox[ SpinBox31 ]->setValue(D1); + mySpinBox[ SpinBox32 ]->setValue(D2); + mySpinBox[ SpinBox32 ]->setValue(D2); + mySpinBox[ SpinBox33 ]->setValue(D); + mySpinBox[ SpinBox34 ]->setValue(Angle); + break; + case 3: + myGrp1->hide(); + myGrp2->hide(); + myGrp3->hide(); + myGrp4->show(); + mySpinBox[ SpinBox41 ]->setValue(D1); + mySpinBox[ SpinBox42 ]->setValue(D2); + mySpinBox[ SpinBox43 ]->setValue(D); + mySpinBox[ SpinBox44 ]->setValue(Angle); break; default: break; } - - if ( constructorId == 0 ) myEditCurrentArgument = mySelName[ MainObj1 ]; - else if ( constructorId == 1 ) myEditCurrentArgument = mySelName[ MainObj2 ]; - else myEditCurrentArgument = mySelName[ MainObj3 ]; - activateSelection(); + if (constructorId == 0) mySelBtn[ MainObj1 ]->click(); + else if (constructorId == 1) mySelBtn[ MainObj2 ]->click(); + else if (constructorId == 2) mySelBtn[ MainObj3 ]->click(); + else mySelBtn[ MainObj4 ]->click(); + enableWidgets(); - - if ( !myShape->_is_nil() ) - { - myEditCurrentArgument->setText( GEOMBase::GetName( myShape ) ); - GEOMBase_Skeleton::LineEditReturnPressed(); + + if (myInitial) { + myInitial = false; + SelectionIntoArgument(); + } + else { + if (!myShape->_is_nil()) { + myEditCurrentArgument->setText(GEOMBase::GetName(myShape)); + GEOMBase_Skeleton::LineEditReturnPressed(); + switch (getConstructorId()) { + case 1: + if (myFace[ Face1 ] == -1) + mySelBtn[ Face1 ]->click(); + break; + case 2: + if (myFaces.Extent() == 0) + mySelBtn[ Faces ]->click(); + break; + case 3: + if (myEdges.Extent() == 0) + mySelBtn[ Edges ]->click(); + break; + default: + break; + } + } + else { + myEditCurrentArgument->setText(""); + } + + displayPreview(); } - else - myEditCurrentArgument->setText( "" ); qApp->processEvents(); updateGeometry(); - resize( minimumSize() ); - - displayPreview(); + resize(minimumSize()); } - //================================================================================= // function : ClickOnOk() // purpose : //================================================================================= void OperationGUI_ChamferDlg::ClickOnOk() { - if ( ClickOnApply() ) + if (ClickOnApply()) ClickOnCancel(); } @@ -288,146 +376,203 @@ void OperationGUI_ChamferDlg::ClickOnOk() //================================================================================= bool OperationGUI_ChamferDlg::ClickOnApply() { - if ( !onAccept() ) + if (!onAccept()) return false; initName(); + // activate selection and connect selection manager + ConstructorsClicked(getConstructorId()); return true; } - //================================================================================= // function : SelectionIntoArgument() -// purpose : Called when selection has changed +// purpose : Called when selection is changed or on dialog initialization or activation //================================================================================= void OperationGUI_ChamferDlg::SelectionIntoArgument() { erasePreview(); - myEditCurrentArgument->setText( "" ); + myEditCurrentArgument->setText(""); // Get index of current selection focus int aCurrFocus = -1; QMap< int, QLineEdit* >::iterator anIter; - for ( anIter = mySelName.begin(); anIter != mySelName.end(); ++anIter ) { - if ( myEditCurrentArgument == anIter.value() ) { + for (anIter = mySelName.begin(); anIter != mySelName.end(); ++anIter) { + if (myEditCurrentArgument == anIter.value()) { aCurrFocus = anIter.key(); break; } } + LightApp_SelectionMgr* aSelMgr = myGeomGUI->getApp()->selectionMgr(); + SALOME_ListIO aSelList; + aSelMgr->selectedObjects(aSelList); + // If selection of main object is activated - if ( aCurrFocus == MainObj1 || aCurrFocus == MainObj2 || aCurrFocus == MainObj3 ) { - if ( IObjectCount() == 1 ) { + if (aCurrFocus == MainObj1 || aCurrFocus == MainObj2 || aCurrFocus == MainObj3 || aCurrFocus == MainObj4) + { + myShape = GEOM::GEOM_Object::_nil(); + if (aSelList.Extent() == 1) { Standard_Boolean aResult = Standard_False; GEOM::GEOM_Object_var anObj = - GEOMBase::ConvertIOinGEOMObject( firstIObject(), aResult ); + GEOMBase::ConvertIOinGEOMObject(aSelList.First(), aResult); - if ( aResult && !anObj->_is_nil() ) { + if (aResult && !anObj->_is_nil()) { myShape = anObj; - mySelName[ aCurrFocus ]->setText( GEOMBase::GetName( anObj ) ); + myEditCurrentArgument->setText(GEOMBase::GetName(anObj)); displayPreview(); - enableWidgets(); - return; } } - myShape = GEOM::GEOM_Object::_nil(); enableWidgets(); } // If face selection of second tab is activated - else if ( aCurrFocus == Face1 || aCurrFocus == Face2 ) { - if ( IObjectCount() == 1 ) { + else if (aCurrFocus == Face1 || aCurrFocus == Face2) + { + myFace[ aCurrFocus ] = -1; + if (aSelList.Extent() == 1) { Standard_Boolean aResult = Standard_False; GEOM::GEOM_Object_var anObj = - GEOMBase::ConvertIOinGEOMObject( firstIObject(), aResult ); + GEOMBase::ConvertIOinGEOMObject(aSelList.First(), aResult); - if ( aResult && !anObj->_is_nil() ) { + if (aResult && !anObj->_is_nil()) { TColStd_IndexedMapOfInteger anIndexes; - ( (SalomeApp_Application*)( SUIT_Session::session()->activeApplication() ) )->selectionMgr()->GetIndexes( firstIObject(), anIndexes ); + aSelMgr->GetIndexes(aSelList.First(), anIndexes); - if ( anIndexes.Extent() == 1 ) { - int anIndex = anIndexes( 1 ); - QString aFaceName = QString( GEOMBase::GetName( anObj ) ) + ":%1"; - myEditCurrentArgument->setText( aFaceName.arg( anIndex ) ); + if (anIndexes.Extent() == 1) { + int anIndex = anIndexes(1); + QString aFaceName = QString(GEOMBase::GetName(anObj)) + ":%1"; + myEditCurrentArgument->setText(aFaceName.arg(anIndex)); myFace[ aCurrFocus ] = anIndex; displayPreview(); - return; } } } - - myFace[ aCurrFocus ] = -1; } - // If face selection of third tab is activated - else if ( aCurrFocus == Faces ) { - if ( IObjectCount() == 1 ) { + // If face selection of third or fourth tab is activated + else if (aCurrFocus == Faces || aCurrFocus == Edges) { + if (aCurrFocus == Faces) myFaces.Clear(); + else myEdges.Clear(); + if (aSelList.Extent() == 1) { Standard_Boolean aResult = Standard_False; GEOM::GEOM_Object_var anObj = - GEOMBase::ConvertIOinGEOMObject( firstIObject(), aResult ); - - if ( aResult && !anObj->_is_nil() ) { - TColStd_IndexedMapOfInteger anIndexes; - ( (SalomeApp_Application*)( SUIT_Session::session()->activeApplication() ) )->selectionMgr()->GetIndexes( firstIObject(), anIndexes ); - - if ( anIndexes.Extent() > 0 ) { - QString aFaceName; - if ( anIndexes.Extent() == 1 ) { - int anIndex = anIndexes( 1 ); - - aFaceName = QString( GEOMBase::GetName( anObj ) ) + QString( ":%1" ).arg( anIndex ); - } - else { - aFaceName = tr( "GEOM_MEN_POPUP_NAME" ).arg( anIndexes.Extent() ); - } - - myEditCurrentArgument->setText( aFaceName ); - myFaces = anIndexes; - displayPreview(); - return; - } + GEOMBase::ConvertIOinGEOMObject(aSelList.First(), aResult); + + if (aResult && !anObj->_is_nil()) { + TColStd_IndexedMapOfInteger anIndexes; + aSelMgr->GetIndexes(aSelList.First(), anIndexes); + + if (anIndexes.Extent() > 0) { + QString aName; + if (anIndexes.Extent() == 1) { + int anIndex = anIndexes(1); + + aName = QString(GEOMBase::GetName(anObj)) + QString(":%1").arg(anIndex); + } + else { + aName = tr("GEOM_MEN_POPUP_NAME").arg(anIndexes.Extent()); + } + + myEditCurrentArgument->setText(aName); + int aConstructorId = getConstructorId(); + if (aConstructorId == 2) + myFaces = anIndexes; + else if (aConstructorId == 3) + myEdges = anIndexes; + + displayPreview(); + } } } - myFaces.Clear(); } -} + // clear selection + if (aCurrFocus != Faces && aCurrFocus != Edges) { + disconnect(myGeomGUI->getApp()->selectionMgr(), 0, this, 0); + myGeomGUI->getApp()->selectionMgr()->clearSelected(); + connect(myGeomGUI->getApp()->selectionMgr(), SIGNAL(currentSelectionChanged()), + this, SLOT(SelectionIntoArgument())); + } -//================================================================================= -// function : LineEditReturnPressed() -// purpose : -//================================================================================= -void OperationGUI_ChamferDlg::LineEditReturnPressed() -{ - QLineEdit* aSender = ( QLineEdit* )sender(); - - QMap< int, QLineEdit* >::iterator anIterLE; - for ( anIterLE = mySelName.begin(); anIterLE != mySelName.end(); ++anIterLE ) - if ( anIterLE.value() == aSender ) - myEditCurrentArgument = anIterLE.value(); - - GEOMBase_Skeleton::LineEditReturnPressed(); + switch (getConstructorId()) { + case 1: + if (aCurrFocus == MainObj2) { + if (!myShape->_is_nil() && myFace[ Face1 ] == -1) + mySelBtn[ Face1 ]->click(); + } + else if (aCurrFocus == Face1) { + if (myFace[ Face1 ] != -1 && myFace[ Face2 ] == -1) + mySelBtn[ Face2 ]->click(); + } + else if (aCurrFocus == Face2) { + if (myFace[ Face2 ] != -1 && myShape->_is_nil()) + mySelBtn[ MainObj2 ]->click(); + } + break; + case 2: + if (aCurrFocus == MainObj3) { + if (!myShape->_is_nil() && myFaces.Extent() == 0) + mySelBtn[ Faces ]->click(); + } + break; + case 3: + if (aCurrFocus == MainObj4) { + if (!myShape->_is_nil() && myEdges.Extent() == 0) + mySelBtn[ Edges ]->click(); + } + break; + default: + break; + } } - //================================================================================= // function : SetEditCurrentArgument() // purpose : //================================================================================= void OperationGUI_ChamferDlg::SetEditCurrentArgument() { - QPushButton* aSender = ( QPushButton* )sender(); + QPushButton* send = (QPushButton*)sender(); QMap< int, QPushButton* >::iterator anIter; - for ( anIter = mySelBtn.begin(); anIter != mySelBtn.end(); ++anIter ) { - if ( anIter.value() == aSender ) { + for (anIter = mySelBtn.begin(); anIter != mySelBtn.end(); ++anIter) { + if (anIter.value() == send) { mySelName[ anIter.key() ]->setFocus(); myEditCurrentArgument = mySelName[ anIter.key() ]; } + else { + anIter.value()->setDown(false); + mySelName[ anIter.key() ]->setEnabled(false); + } } + // enable line edit + myEditCurrentArgument->setEnabled(true); + myEditCurrentArgument->setFocus(); + // after setFocus(), because it will be setDown(false) when loses focus + send->setDown(true); + activateSelection(); + + // seems we need it only to avoid preview disappearing, caused by selection mode change + displayPreview(); } +//================================================================================= +// function : LineEditReturnPressed() +// purpose : +//================================================================================= +void OperationGUI_ChamferDlg::LineEditReturnPressed() +{ + QLineEdit* send = (QLineEdit*)sender(); + + QMap< int, QLineEdit* >::iterator anIterLE; + for (anIterLE = mySelName.begin(); anIterLE != mySelName.end(); ++anIterLE) + if (anIterLE.value() == send) + myEditCurrentArgument = anIterLE.value(); + + GEOMBase_Skeleton::LineEditReturnPressed(); +} //================================================================================= // function : ActivateThisDialog() @@ -437,90 +582,73 @@ void OperationGUI_ChamferDlg::ActivateThisDialog() { GEOMBase_Skeleton::ActivateThisDialog(); - connect( ( (SalomeApp_Application*)( SUIT_Session::session()->activeApplication() ) )->selectionMgr(), - SIGNAL( currentSelectionChanged() ), this, SLOT( SelectionIntoArgument() ) ); - - activateSelection(); - displayPreview(); + // reinit, because some selected objects could be removed + Init(); } - //================================================================================= // function : enterEvent() // purpose : //================================================================================= -void OperationGUI_ChamferDlg::enterEvent( QEvent* ) +void OperationGUI_ChamferDlg::enterEvent (QEvent*) { - if ( !mainFrame()->GroupConstructors->isEnabled() ) + if (!mainFrame()->GroupConstructors->isEnabled()) this->ActivateThisDialog(); } - //================================================================================= // function : ValueChangedInSpinBox() // purpose : //================================================================================= -void OperationGUI_ChamferDlg::ValueChangedInSpinBox( double ) +void OperationGUI_ChamferDlg::ValueChangedInSpinBox (double) { displayPreview(); } - //================================================================================= // function : createSelWg() // purpose : //================================================================================= -void OperationGUI_ChamferDlg::createSelWg( const QString& theLbl, +void OperationGUI_ChamferDlg::createSelWg (const QString& theLbl, QPixmap& thePix, QWidget* theParent, - QGridLayout* theLayout, - const int theId ) + QGridLayout* theLayout, + const int theId) { - QLabel* lab = new QLabel( theLbl, theParent ); - mySelBtn[ theId ] = new QPushButton( theParent ); - mySelBtn[ theId ]->setIcon( thePix ); - mySelName[ theId ] = new QLineEdit( theParent ); - mySelName[ theId ]->setReadOnly( true ); + QLabel* lab = new QLabel(theLbl, theParent); + mySelBtn[ theId ] = new QPushButton(theParent); + mySelBtn[ theId ]->setIcon(thePix); + mySelName[ theId ] = new QLineEdit(theParent); + mySelName[ theId ]->setReadOnly(true); int row = theLayout->rowCount(); - theLayout->addWidget( lab, row, 0 ); - theLayout->addWidget( mySelBtn[ theId ], row, 1 ); - theLayout->addWidget( mySelName[ theId ], row, 2 ); + theLayout->addWidget(lab, row, 0); + theLayout->addWidget(mySelBtn[ theId ], row, 1); + theLayout->addWidget(mySelName[ theId ], row, 2, 1, 4); // take into account createRadioWg() } //================================================================================= -// function : reset() +// function : createRadioWg() // purpose : //================================================================================= -void OperationGUI_ChamferDlg::reset() +void OperationGUI_ChamferDlg::createRadioWg(const QString& theLbl1, + const QString& theLbl2, + QWidget* theParent, + QGridLayout* theLayout, + const int theRbId, + const int theSpin1Id, + const int theSpin2Id) { - // Set Initial values of spinboxes - QMap< int, QDoubleSpinBox* >::iterator anIter; - for ( anIter = mySpinBox.begin(); anIter != mySpinBox.end(); ++anIter ) - anIter.value()->setValue( 5 ); - - // clear line edits - QMap< int, QLineEdit* >::iterator anIterLE; - for ( anIterLE = mySelName.begin(); anIterLE != mySelName.end(); ++anIterLE ) - anIterLE.value()->setText( "" ); - - // constructor id - int aConstructorId = getConstructorId(); - - if ( aConstructorId == 0 ) myEditCurrentArgument = mySelName[ MainObj1 ]; - else if ( aConstructorId == 1 ) myEditCurrentArgument = mySelName[ MainObj2 ]; - else myEditCurrentArgument = mySelName[ MainObj3 ]; - - myShape = GEOM::GEOM_Object::_nil(); - - myFaces.Clear(); - myFace[ Face1 ] = -1; - myFace[ Face2 ] = -1; - - erasePreview( true ); - - activateSelection(); - - enableWidgets(); + myRadioButton[ theRbId ] = new QRadioButton(theParent); + QLabel* lab1 = new QLabel(theLbl1, theParent); + QLabel* lab2 = new QLabel(theLbl2, theParent); + mySpinBox[ theSpin1Id ] = new QDoubleSpinBox(theParent); + mySpinBox[ theSpin2Id ] = new QDoubleSpinBox(theParent); + int row = theLayout->rowCount(); + theLayout->addWidget(myRadioButton[ theRbId ], row, 0); + theLayout->addWidget(lab1, row, 2); + theLayout->addWidget(mySpinBox[ theSpin1Id ], row, 3); + theLayout->addWidget(lab2, row, 4); + theLayout->addWidget(mySpinBox[ theSpin2Id ], row, 5); } //================================================================================= @@ -529,21 +657,27 @@ void OperationGUI_ChamferDlg::reset() //================================================================================= void OperationGUI_ChamferDlg::activateSelection() { - if ( !myShape->_is_nil() && - ( myEditCurrentArgument == mySelName[ Face1 ] || - myEditCurrentArgument == mySelName[ Face2 ] || - myEditCurrentArgument == mySelName[ Faces ] ) ) - localSelection( myShape, TopAbs_FACE ); - else - { + disconnect(myGeomGUI->getApp()->selectionMgr(), 0, this, 0); + + if (!myShape->_is_nil() && + (myEditCurrentArgument == mySelName[ Face1 ] || + myEditCurrentArgument == mySelName[ Face2 ] || + myEditCurrentArgument == mySelName[ Faces ])) { + localSelection(myShape, TopAbs_FACE); + } + else if (!myShape->_is_nil() && myEditCurrentArgument == mySelName[ Edges ]) { + localSelection(myShape, TopAbs_EDGE); + } + else { TColStd_MapOfInteger aMap; - aMap.Add( GEOM_SHELL ); - aMap.Add( GEOM_SOLID ); - aMap.Add( GEOM_COMPOUND ); - globalSelection( aMap ); + aMap.Add(GEOM_SHELL); + aMap.Add(GEOM_SOLID); + aMap.Add(GEOM_COMPOUND); + globalSelection(aMap); } - SelectionIntoArgument(); + connect(myGeomGUI->getApp()->selectionMgr(), SIGNAL(currentSelectionChanged()), + this, SLOT(SelectionIntoArgument())); } //================================================================================= @@ -555,28 +689,39 @@ void OperationGUI_ChamferDlg::enableWidgets() int anId = getConstructorId(); bool toEnable = !myShape->_is_nil(); - - if ( anId == 1 ) + + if (anId == 1) { - mySelName[ Face1 ]->setEnabled( toEnable ); - mySelName[ Face2 ]->setEnabled( toEnable ); - mySelBtn[ Face1 ]->setEnabled( toEnable ); - mySelBtn[ Face2 ]->setEnabled( toEnable ); + //mySelName[ Face1 ]->setEnabled(toEnable); + //mySelName[ Face2 ]->setEnabled(toEnable); + mySelBtn[ Face1 ]->setEnabled(toEnable); + mySelBtn[ Face2 ]->setEnabled(toEnable); - if ( !toEnable ) + if (!toEnable) { - mySelName[ Face1 ]->setText( "" ); - mySelName[ Face2 ]->setText( "" ); + mySelName[ Face1 ]->setText(""); + mySelName[ Face2 ]->setText(""); myFace[ Face1 ] = -1; myFace[ Face2 ] = -1; } } - else if ( anId == 2 ) + else if (anId == 2) { - mySelName[ Faces ]->setEnabled( toEnable ); - - if ( !toEnable ) + //mySelName[ Faces ]->setEnabled(toEnable); + mySelBtn[ Faces ]->setEnabled(toEnable); + if (!toEnable) { + mySelName[ Faces ]->setText(""); myFaces.Clear(); + } + } + else if (anId == 3) { + //mySelName[ Edges ]->setEnabled(toEnable); + mySelBtn[ Edges ]->setEnabled(toEnable); + + if (!toEnable) { + mySelName[ Edges ]->setText(""); + myEdges.Clear(); + } } } @@ -586,20 +731,21 @@ void OperationGUI_ChamferDlg::enableWidgets() //================================================================================= GEOM::GEOM_IOperations_ptr OperationGUI_ChamferDlg::createOperation() { - return getGeomEngine()->GetILocalOperations( getStudyId() ); + return getGeomEngine()->GetILocalOperations(getStudyId()); } //================================================================================= -// function : ClickOnApply() +// function : isValid() // purpose : Verify validity of input data //================================================================================= -bool OperationGUI_ChamferDlg::isValid( QString& ) +bool OperationGUI_ChamferDlg::isValid (QString&) { - switch ( getConstructorId() ) + switch (getConstructorId()) { case 0: return !myShape->_is_nil(); case 1: return !myShape->_is_nil() && myFace[ Face1 ] > 0 && myFace[ Face2 ] > 0; case 2: return !myShape->_is_nil() && myFaces.Extent() > 0; + case 3: return !myShape->_is_nil() && myEdges.Extent() > 0; default: return false; } } @@ -608,50 +754,127 @@ bool OperationGUI_ChamferDlg::isValid( QString& ) // function : execute // purpose : //================================================================================= -bool OperationGUI_ChamferDlg::execute( ObjectList& objects ) +bool OperationGUI_ChamferDlg::execute (ObjectList& objects) { GEOM::GEOM_Object_var anObj; + bool flag = (myRadioButton[ RadioButton21 ]->isChecked() && + myRadioButton[ RadioButton31 ]->isChecked() && + myRadioButton[ RadioButton41 ]->isChecked()); int anId = getConstructorId(); - if ( anId == 0 ) - anObj = GEOM::GEOM_ILocalOperations::_narrow( - getOperation() )->MakeChamferAll( myShape, - mySpinBox[ SpinBox1 ]->value() ); - else if ( anId == 1 ) - anObj = GEOM::GEOM_ILocalOperations::_narrow( - getOperation() )->MakeChamferEdge( myShape, - mySpinBox[ SpinBox21 ]->value(), - mySpinBox[ SpinBox22 ]->value(), - myFace[ Face1 ], - myFace[ Face2 ] ); - else if ( anId == 2 ) + if (anId == 0) { + anObj = GEOM::GEOM_ILocalOperations::_narrow(getOperation())-> + MakeChamferAll(myShape, mySpinBox[ SpinBox1 ]->value()); + } + else if (anId == 1) { + if (flag) { + anObj = GEOM::GEOM_ILocalOperations::_narrow(getOperation())-> + MakeChamferEdge(myShape, + mySpinBox[ SpinBox21 ]->value(), + mySpinBox[ SpinBox22 ]->value(), + myFace[ Face1 ], + myFace[ Face2 ]); + } + else { + anObj = GEOM::GEOM_ILocalOperations::_narrow(getOperation())-> + MakeChamferEdgeAD(myShape, + mySpinBox[ SpinBox23 ]->value(), + mySpinBox[ SpinBox24 ]->value() * PI180, + myFace[ Face1 ], + myFace[ Face2 ]); + } + } + else if (anId == 2) { GEOM::ListOfLong_var anArray = new GEOM::ListOfLong; - anArray->length( myFaces.Extent() ); - - - for ( int i = 1, n = myFaces.Extent(); i <= n; i++ ) - anArray[ i - 1 ] = myFaces( i ); - - anObj = GEOM::GEOM_ILocalOperations::_narrow( - getOperation() )->MakeChamferFaces( myShape, - mySpinBox[ SpinBox31 ]->value(), - mySpinBox[ SpinBox32 ]->value(), - anArray ); + anArray->length(myFaces.Extent()); + + for (int i = 1, n = myFaces.Extent(); i <= n; i++) + anArray[ i - 1 ] = myFaces(i); + + if (flag) + anObj = GEOM::GEOM_ILocalOperations::_narrow(getOperation())-> + MakeChamferFaces(myShape, + mySpinBox[ SpinBox31 ]->value(), + mySpinBox[ SpinBox32 ]->value(), + anArray); + else + anObj = GEOM::GEOM_ILocalOperations::_narrow(getOperation())-> + MakeChamferFacesAD(myShape, + mySpinBox[ SpinBox33 ]->value(), + mySpinBox[ SpinBox34 ]->value() * PI180, + anArray); + } + else if (anId == 3) { + GEOM::ListOfLong_var anArray = new GEOM::ListOfLong; + anArray->length(myEdges.Extent()); + for (int i = 1, n = myEdges.Extent(); i <= n; i++) + anArray[ i - 1 ] = myEdges(i); + if (flag) { + anObj = GEOM::GEOM_ILocalOperations::_narrow(getOperation())-> + MakeChamferEdges(myShape, + mySpinBox[ SpinBox41 ]->value(), + mySpinBox[ SpinBox42 ]->value(), + anArray); + } + else { + anObj = GEOM::GEOM_ILocalOperations::_narrow(getOperation())-> + MakeChamferEdgesAD(myShape, + mySpinBox[ SpinBox43 ]->value(), + mySpinBox[ SpinBox44 ]->value() * PI180, + anArray); + } } - - if ( !anObj->_is_nil() ) - objects.push_back( anObj._retn() ); + if (!anObj->_is_nil()) + objects.push_back(anObj._retn()); return true; } +//================================================================================= +// function : RadioButtonPressed() +// purpose : +//================================================================================= +void OperationGUI_ChamferDlg::RadioButtonPressed() +{ + const QObject* s = sender(); + bool flag = s == myRadioButton[ RadioButton21 ] || + s == myRadioButton[ RadioButton31 ] || + s == myRadioButton[ RadioButton41 ]; + + myRadioButton[ RadioButton21 ]->blockSignals(true); + myRadioButton[ RadioButton22 ]->blockSignals(true); + myRadioButton[ RadioButton31 ]->blockSignals(true); + myRadioButton[ RadioButton32 ]->blockSignals(true); + myRadioButton[ RadioButton41 ]->blockSignals(true); + myRadioButton[ RadioButton42 ]->blockSignals(true); + + myRadioButton[ RadioButton21 ]->setChecked(flag); + myRadioButton[ RadioButton31 ]->setChecked(flag); + myRadioButton[ RadioButton41 ]->setChecked(flag); + myRadioButton[ RadioButton22 ]->setChecked(!flag); + myRadioButton[ RadioButton32 ]->setChecked(!flag); + myRadioButton[ RadioButton42 ]->setChecked(!flag); + mySpinBox[ SpinBox21 ]->setEnabled(flag); + mySpinBox[ SpinBox22 ]->setEnabled(flag); + mySpinBox[ SpinBox31 ]->setEnabled(flag); + mySpinBox[ SpinBox32 ]->setEnabled(flag); + mySpinBox[ SpinBox41 ]->setEnabled(flag); + mySpinBox[ SpinBox42 ]->setEnabled(flag); + mySpinBox[ SpinBox23 ]->setEnabled(!flag); + mySpinBox[ SpinBox24 ]->setEnabled(!flag); + mySpinBox[ SpinBox33 ]->setEnabled(!flag); + mySpinBox[ SpinBox34 ]->setEnabled(!flag); + mySpinBox[ SpinBox43 ]->setEnabled(!flag); + mySpinBox[ SpinBox44 ]->setEnabled(!flag); + + myRadioButton[ RadioButton21 ]->blockSignals(false); + myRadioButton[ RadioButton22 ]->blockSignals(false); + myRadioButton[ RadioButton31 ]->blockSignals(false); + myRadioButton[ RadioButton32 ]->blockSignals(false); + myRadioButton[ RadioButton41 ]->blockSignals(false); + myRadioButton[ RadioButton42 ]->blockSignals(false); - - - - - - - + displayPreview(); +}