X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2FOperationGUI%2FOperationGUI_ChamferDlg.cxx;h=002280d408d9997cc165a0e3ca6d5f26bfa538c2;hb=57714d4c358d337d6d11ab08dcac22dd98a7913d;hp=fc2b12e96538cd6c60b3faea8ae7654c55bb7857;hpb=9499b99fe2dcb53e1ea364f97986f8f432b04600;p=modules%2Fgeom.git diff --git a/src/OperationGUI/OperationGUI_ChamferDlg.cxx b/src/OperationGUI/OperationGUI_ChamferDlg.cxx index fc2b12e96..002280d40 100644 --- a/src/OperationGUI/OperationGUI_ChamferDlg.cxx +++ b/src/OperationGUI/OperationGUI_ChamferDlg.cxx @@ -1,47 +1,46 @@ -// GEOM GEOMGUI : GUI for Geometry component +// 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 +// 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 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. +// 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 +// 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 +// Author : Damien COQUERET, Open CASCADE S.A.S. // -// -// File : OperationGUI_ChamferDlg.cxx -// Author : Damien COQUERET -// Module : GEOM -// $Header$ #include "OperationGUI_ChamferDlg.h" -#include "DlgRef_SpinBox.h" -#include "SUIT_Desktop.h" -#include "SUIT_Session.h" -#include "SalomeApp_Application.h" -#include "LightApp_SelectionMgr.h" -#include "OCCViewer_ViewModel.h" +#include +#include +#include -#include +#include +#include +#include +#include +#include +#include +#include +#include -#include -#include "qpixmap.h" -#include +#include -#include "GEOMImpl_Types.hxx" +#include //================================================================================= // class : OperationGUI_ChamferDlg() @@ -50,108 +49,110 @@ // 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, "ChamferDlg", false, - WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu) +OperationGUI_ChamferDlg::OperationGUI_ChamferDlg( GeometryGUI* theGeometryGUI, QWidget* parent ) + : GEOMBase_Skeleton( theGeometryGUI, parent, false ) { - myConstructorId = -1; - - 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"))); + 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_FROM_FACE" ) ) ); + QPixmap image3( SUIT_Session::session()->resourceMgr()->loadPixmap( "GEOM", tr( "ICON_DLG_CHAMFER_FACE" ) ) ); + QPixmap image4( SUIT_Session::session()->resourceMgr()->loadPixmap( "GEOM", tr( "ICON_DLG_CHAMFER_EDGE" ) ) ); + QPixmap iconSelect( SUIT_Session::session()->resourceMgr()->loadPixmap( "GEOM", tr( "ICON_SELECT" ) ) ); - setCaption( tr( "GEOM_CHAMFER_TITLE" ) ); + setWindowTitle( tr( "GEOM_CHAMFER_TITLE" ) ); - GroupConstructors->setTitle( tr( "GEOM_CHAMFER" ) ); + mainFrame()->GroupConstructors->setTitle( tr( "GEOM_CHAMFER" ) ); - RadioButton1->setPixmap( image1 ); - RadioButton2->setPixmap( image2 ); - RadioButton3->setPixmap( 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( 1, Qt::Horizontal, tr( "GEOM_CHAMFER_ALL" ), this ); + myGrp1 = new QGroupBox( tr( "GEOM_CHAMFER_ALL" ), centralWidget() ); - QGroupBox* aSelGrp1 = new QGroupBox( 3, Qt::Horizontal, myGrp1 ); - aSelGrp1->setFrameStyle( QFrame::NoFrame ); - aSelGrp1->setInsideMargin( 0 ); + QGridLayout* aLayout = new QGridLayout( myGrp1 ); + aLayout->setMargin( 9 ); aLayout->setSpacing( 6 ); - createSelWg( tr( "GEOM_MAIN_OBJECT" ), iconSelect, aSelGrp1, MainObj1 ); + createSelWg( tr( "GEOM_MAIN_OBJECT" ), iconSelect, myGrp1, aLayout, MainObj1 ); - QGroupBox* aSpinGrp = new QGroupBox( 1, Qt::Vertical, myGrp1 ); - aSpinGrp->setFrameStyle( QFrame::NoFrame ); - aSpinGrp->setInsideMargin( 0 ); + 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 ); - new QLabel( tr( "D" ), aSpinGrp ); - mySpinBox[ SpinBox1 ] = new DlgRef_SpinBox( aSpinGrp ); + // Create second group - ( new QFrame( myGrp1 ) )->setSizePolicy( - QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding ) ); + myGrp2 = new QGroupBox( tr( "GEOM_CHAMFER_EDGES" ), centralWidget() ); - // Create second group + aLayout = new QGridLayout( myGrp2 ); + aLayout->setMargin( 9 ); aLayout->setSpacing( 6 ); - myGrp2 = new QGroupBox( 1, Qt::Horizontal, tr( "GEOM_CHAMFER_EDGES" ), this ); + 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 ); - QGroupBox* aSelGrp2 = new QGroupBox( 3, Qt::Horizontal, myGrp2 ); - aSelGrp2->setFrameStyle( QFrame::NoFrame ); - aSelGrp2->setInsideMargin( 0 ); + createRadioWg( tr( "GEOM_D1" ), tr( "GEOM_D2" ), myGrp2, aLayout, RadioButton21, SpinBox21, SpinBox22 ); + createRadioWg( tr( "GEOM_D" ), tr( "GEOM_ANGLE" ), myGrp2, aLayout, RadioButton22, SpinBox23, SpinBox24 ); - createSelWg( tr( "GEOM_MAIN_OBJECT" ), iconSelect, aSelGrp2, MainObj2 ); - createSelWg( tr( "FACE_1" ), iconSelect, aSelGrp2, Face1 ); - createSelWg( tr( "FACE_2" ), iconSelect, aSelGrp2, Face2 ); + aLayout->setRowStretch( aLayout->rowCount(), 10 ); - aSpinGrp = new QGroupBox( 1, Qt::Vertical, myGrp2 ); - aSpinGrp->setFrameStyle( QFrame::NoFrame ); - aSpinGrp->setInsideMargin( 0 ); + // Create third group - new QLabel( tr( "GEOM_D1" ), aSpinGrp ); - mySpinBox[ SpinBox21 ] = new DlgRef_SpinBox( aSpinGrp ); + myGrp3 = new QGroupBox( tr( "GEOM_CHAMFER_FACES" ), centralWidget() ); - new QLabel( tr( "GEOM_D2" ), aSpinGrp ); - mySpinBox[ SpinBox22 ] = new DlgRef_SpinBox( aSpinGrp ); + aLayout = new QGridLayout( myGrp3 ); + aLayout->setMargin( 9 ); aLayout->setSpacing( 6 ); - // Create third group + createSelWg( tr( "GEOM_MAIN_OBJECT" ), iconSelect, myGrp3, aLayout, MainObj3 ); + createSelWg( tr( "SELECTED_FACES" ), iconSelect, myGrp3, aLayout, Faces ); - myGrp3 = new QGroupBox( 1, Qt::Horizontal, tr( "GEOM_CHAMFER_FACES" ), this ); + createRadioWg( tr( "GEOM_D1" ), tr( "GEOM_D2" ), myGrp3, aLayout, RadioButton31, SpinBox31, SpinBox32 ); + createRadioWg( tr( "GEOM_D" ), tr( "GEOM_ANGLE" ), myGrp3, aLayout, RadioButton32, SpinBox33, SpinBox34 ); - QGroupBox* aSelGrp3 = new QGroupBox( 3, Qt::Horizontal, myGrp3 ); - aSelGrp3->setFrameStyle( QFrame::NoFrame ); - aSelGrp3->setInsideMargin( 0 ); + aLayout->setRowStretch( aLayout->rowCount(), 10 ); - createSelWg( tr( "GEOM_MAIN_OBJECT" ), iconSelect, aSelGrp3, MainObj3 ); - createSelWg( tr( "SELECTED_FACES" ), iconSelect, aSelGrp3, Faces ); + // Create fourth group - aSpinGrp = new QGroupBox( 1, Qt::Vertical, myGrp3 ); - aSpinGrp->setFrameStyle( QFrame::NoFrame ); - aSpinGrp->setInsideMargin( 0 ); + myGrp4 = new QGroupBox( tr( "GEOM_CHAMFER_EDGE" ), centralWidget() ); - new QLabel( tr( "GEOM_D1" ), aSpinGrp ); - mySpinBox[ SpinBox31 ] = new DlgRef_SpinBox( aSpinGrp ); + aLayout = new QGridLayout( myGrp4 ); + aLayout->setMargin( 9 ); aLayout->setSpacing( 6 ); - new QLabel( tr( "GEOM_D2" ), aSpinGrp ); - mySpinBox[ SpinBox32 ] = new DlgRef_SpinBox( aSpinGrp ); + createSelWg( tr( "GEOM_MAIN_OBJECT" ), iconSelect, myGrp4, aLayout, MainObj4 ); + createSelWg( tr( "SELECTED_EDGE" ), iconSelect, myGrp4, aLayout, Edges ); - ( new QLabel( myGrp3 ) )->setSizePolicy( - QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding ) ); + 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 - Layout1->addWidget( myGrp1, 2, 0 ); - Layout1->addWidget( myGrp2, 2, 0 ); - Layout1->addWidget( myGrp3, 2, 0 ); + 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, DlgRef_SpinBox* >::iterator anIter; - for ( anIter = mySpinBox.begin(); anIter != mySpinBox.end(); ++anIter ) - anIter.data()->RangeStepAndValidator( 0.001, 999.999, SpecificStep, 3 ); + QMap< int, QDoubleSpinBox* >::iterator anIter; + 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 */ Init(); + myRadioButton[ RadioButton21 ]->click(); } @@ -172,46 +173,47 @@ void OperationGUI_ChamferDlg::Init() { myConstructorId = -1; reset(); - RadioButton1->setChecked( true ); - myEditCurrentArgument = mySelName[ MainObj1 ]; /* 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( GroupConstructors, SIGNAL( clicked( 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.data(), SIGNAL( clicked() ), + 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.data(), SIGNAL( returnPressed() ), + connect( anIterLE2.value(), SIGNAL( returnPressed() ), this, SLOT( LineEditReturnPressed() ) ); // spin boxes - QMap< int, DlgRef_SpinBox* >::iterator anIterSpin; + QMap< int, QDoubleSpinBox* >::iterator anIterSpin; for ( anIterSpin = mySpinBox.begin(); anIterSpin != mySpinBox.end(); ++anIterSpin ) - connect( anIterSpin.data(), SIGNAL( valueChanged( double ) ), + connect( anIterSpin.value(), SIGNAL( valueChanged( double ) ), this, SLOT( ValueChangedInSpinBox( double ) ) ); + // radio buttons + QMap< int, QRadioButton* >::iterator anIterRadio; + for ( anIterRadio = myRadioButton.begin(); anIterRadio != myRadioButton.end(); ++anIterRadio ) + connect( anIterRadio.value(), SIGNAL( clicked() ), + this, SLOT( RadioButtonPressed() ) ); + // selection - connect(myGeomGUI->getApp()->selectionMgr(), - SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument())); + connect( myGeomGUI->getApp()->selectionMgr(), + SIGNAL( currentSelectionChanged() ), this, SLOT( SelectionIntoArgument() ) ); initName( tr( "GEOM_CHAMFER" ) ); - myGrp2->hide(); - myGrp3->hide(); - myGrp1->show(); + ConstructorsClicked( 0 ); } @@ -222,62 +224,87 @@ void OperationGUI_ChamferDlg::Init() void OperationGUI_ChamferDlg::ConstructorsClicked( int constructorId ) { // Activate next widget - if (myGeomGUI->getApp()->desktop()->activeWindow()->getViewManager()->getType() - != OCCViewer_Viewer::Type()) - { - 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; // Get values from previous widget - double D1 = 5, D2 = 5; + double D1 = 5, D2 = 5, D = 5, Angle = 5; if ( myConstructorId == 0 ) - D1 = D2 = mySpinBox[ SpinBox1 ]->GetValue(); - else if ( myConstructorId == 1 ) - { - D1 = mySpinBox[ SpinBox21 ]->GetValue(); - D2 = mySpinBox[ SpinBox22 ]->GetValue(); + D1 = D2 = mySpinBox[ SpinBox1 ]->value(); + else if ( myConstructorId == 1 ) { + D1 = mySpinBox[ SpinBox21 ]->value(); + D2 = mySpinBox[ SpinBox22 ]->value(); + D = mySpinBox[ SpinBox23 ]->value(); + Angle = mySpinBox[ SpinBox24 ]->value(); } - else if ( myConstructorId == 2 ) - { - D1 = mySpinBox[ SpinBox31 ]->GetValue(); - D2 = mySpinBox[ SpinBox32 ]->GetValue(); + 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 ) - { - case 0: - myGrp1->show(); - myGrp2->hide(); - myGrp3->hide(); - mySpinBox[ SpinBox1 ]->SetValue( D1 ); + switch ( constructorId ) { + case 0: + myGrp2->hide(); + myGrp3->hide(); + myGrp4->hide(); + myGrp1->show(); + mySpinBox[ SpinBox1 ]->setValue( D1 ); + break; + case 1: + myGrp1->hide(); + myGrp3->hide(); + myGrp4->hide(); + myGrp2->show(); + mySpinBox[ SpinBox21 ]->setValue( D1 ); + mySpinBox[ SpinBox22 ]->setValue( D2 ); + mySpinBox[ SpinBox23 ]->setValue( D ); + mySpinBox[ SpinBox24 ]->setValue( Angle ); break; - case 1: - myGrp1->hide(); - myGrp2->show(); - myGrp3->hide(); - mySpinBox[ SpinBox21 ]->SetValue( D1 ); - mySpinBox[ SpinBox22 ]->SetValue( D2 ); + case 2: + myGrp1->hide(); + myGrp2->hide(); + myGrp4->hide(); + myGrp3->show(); + mySpinBox[ SpinBox31 ]->setValue( D1 ); + mySpinBox[ SpinBox32 ]->setValue( D2 ); + mySpinBox[ SpinBox32 ]->setValue( D2 ); + mySpinBox[ SpinBox33 ]->setValue( D ); + mySpinBox[ SpinBox34 ]->setValue( Angle ); break; - case 2: - myGrp1->hide(); - myGrp2->hide(); - myGrp3->show(); - mySpinBox[ SpinBox31 ]->SetValue( D1 ); - mySpinBox[ SpinBox32 ]->SetValue( D2 ); + 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: + default: break; } - + if ( constructorId == 0 ) myEditCurrentArgument = mySelName[ MainObj1 ]; else if ( constructorId == 1 ) myEditCurrentArgument = mySelName[ MainObj2 ]; - else myEditCurrentArgument = mySelName[ MainObj3 ]; + else if ( constructorId == 2 ) myEditCurrentArgument = mySelName[ MainObj3 ]; + else myEditCurrentArgument = mySelName[ MainObj4 ]; activateSelection(); enableWidgets(); @@ -290,6 +317,10 @@ void OperationGUI_ChamferDlg::ConstructorsClicked( int constructorId ) else myEditCurrentArgument->setText( "" ); + qApp->processEvents(); + updateGeometry(); + resize( minimumSize() ); + displayPreview(); } @@ -330,24 +361,21 @@ void OperationGUI_ChamferDlg::SelectionIntoArgument() // 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.data() ) - { + for ( anIter = mySelName.begin(); anIter != mySelName.end(); ++anIter ) { + if ( myEditCurrentArgument == anIter.value() ) { aCurrFocus = anIter.key(); break; } + } // 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) { + if ( IObjectCount() == 1 ) { Standard_Boolean aResult = Standard_False; GEOM::GEOM_Object_var anObj = GEOMBase::ConvertIOinGEOMObject( firstIObject(), aResult ); - if ( aResult && !anObj->_is_nil() ) - { + if ( aResult && !anObj->_is_nil() ) { myShape = anObj; mySelName[ aCurrFocus ]->setText( GEOMBase::GetName( anObj ) ); displayPreview(); @@ -360,21 +388,17 @@ void OperationGUI_ChamferDlg::SelectionIntoArgument() enableWidgets(); } // If face selection of second tab is activated - else if ( aCurrFocus == Face1 || aCurrFocus == Face2 ) - { - if ( IObjectCount() == 1 ) - { + else if ( aCurrFocus == Face1 || aCurrFocus == Face2 ) { + if ( IObjectCount() == 1 ) { Standard_Boolean aResult = Standard_False; GEOM::GEOM_Object_var anObj = GEOMBase::ConvertIOinGEOMObject( firstIObject(), aResult ); - if ( aResult && !anObj->_is_nil() ) - { + if ( aResult && !anObj->_is_nil() ) { TColStd_IndexedMapOfInteger anIndexes; - ((SalomeApp_Application*)(SUIT_Session::session()->activeApplication()))->selectionMgr()->GetIndexes( firstIObject(), anIndexes ); + ( (SalomeApp_Application*)( SUIT_Session::session()->activeApplication() ) )->selectionMgr()->GetIndexes( firstIObject(), anIndexes ); - if ( anIndexes.Extent() == 1 ) - { + if ( anIndexes.Extent() == 1 ) { int anIndex = anIndexes( 1 ); QString aFaceName = QString( GEOMBase::GetName( anObj ) ) + ":%1"; myEditCurrentArgument->setText( aFaceName.arg( anIndex ) ); @@ -387,40 +411,42 @@ void OperationGUI_ChamferDlg::SelectionIntoArgument() 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 ( IObjectCount() == 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; - } + + if ( aResult && !anObj->_is_nil() ) { + TColStd_IndexedMapOfInteger anIndexes; + ( (SalomeApp_Application*)( SUIT_Session::session()->activeApplication() ) )->selectionMgr()->GetIndexes( firstIObject(), 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(); + return; + } } } myFaces.Clear(); + myEdges.Clear(); } } @@ -435,13 +461,61 @@ void OperationGUI_ChamferDlg::LineEditReturnPressed() QMap< int, QLineEdit* >::iterator anIterLE; for ( anIterLE = mySelName.begin(); anIterLE != mySelName.end(); ++anIterLE ) - if ( anIterLE.data() == aSender ) - myEditCurrentArgument = anIterLE.data(); + if ( anIterLE.value() == aSender ) + myEditCurrentArgument = anIterLE.value(); GEOMBase_Skeleton::LineEditReturnPressed(); } +//================================================================================= +// 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(); +} + + //================================================================================= // function : SetEditCurrentArgument() // purpose : @@ -451,12 +525,12 @@ void OperationGUI_ChamferDlg::SetEditCurrentArgument() QPushButton* aSender = ( QPushButton* )sender(); QMap< int, QPushButton* >::iterator anIter; - for ( anIter = mySelBtn.begin(); anIter != mySelBtn.end(); ++anIter ) - if ( anIter.data() == aSender ) - { + for ( anIter = mySelBtn.begin(); anIter != mySelBtn.end(); ++anIter ) { + if ( anIter.value() == aSender ) { mySelName[ anIter.key() ]->setFocus(); myEditCurrentArgument = mySelName[ anIter.key() ]; } + } activateSelection(); } @@ -470,8 +544,8 @@ void OperationGUI_ChamferDlg::ActivateThisDialog() { GEOMBase_Skeleton::ActivateThisDialog(); - connect( ((SalomeApp_Application*)(SUIT_Session::session()->activeApplication()))->selectionMgr(), - SIGNAL(currentSelectionChanged()), this, SLOT( SelectionIntoArgument() ) ); + connect( ( (SalomeApp_Application*)( SUIT_Session::session()->activeApplication() ) )->selectionMgr(), + SIGNAL( currentSelectionChanged() ), this, SLOT( SelectionIntoArgument() ) ); activateSelection(); displayPreview(); @@ -482,9 +556,9 @@ void OperationGUI_ChamferDlg::ActivateThisDialog() // function : enterEvent() // purpose : //================================================================================= -void OperationGUI_ChamferDlg::enterEvent(QEvent* e) +void OperationGUI_ChamferDlg::enterEvent( QEvent* ) { - if ( !GroupConstructors->isEnabled() ) + if ( !mainFrame()->GroupConstructors->isEnabled() ) this->ActivateThisDialog(); } @@ -493,7 +567,7 @@ void OperationGUI_ChamferDlg::enterEvent(QEvent* e) // function : ValueChangedInSpinBox() // purpose : //================================================================================= -void OperationGUI_ChamferDlg::ValueChangedInSpinBox( double newValue ) +void OperationGUI_ChamferDlg::ValueChangedInSpinBox( double ) { displayPreview(); } @@ -506,13 +580,43 @@ void OperationGUI_ChamferDlg::ValueChangedInSpinBox( double newValue ) void OperationGUI_ChamferDlg::createSelWg( const QString& theLbl, QPixmap& thePix, QWidget* theParent, + QGridLayout* theLayout, const int theId ) { - new QLabel( theLbl, theParent ); + QLabel* lab = new QLabel( theLbl, theParent ); mySelBtn[ theId ] = new QPushButton( theParent ); - mySelBtn[ theId ]->setPixmap( thePix ); + 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, 1, 4 ); // take into account createRadioWg() +} + +//================================================================================= +// function : createRadioWg() +// purpose : +//================================================================================= +void OperationGUI_ChamferDlg::createRadioWg( const QString& theLbl1, + const QString& theLbl2, + QWidget* theParent, + QGridLayout* theLayout, + const int theRbId, + const int theSpin1Id, + const int theSpin2Id ) +{ + 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 ); } //================================================================================= @@ -522,25 +626,27 @@ void OperationGUI_ChamferDlg::createSelWg( const QString& theLbl, void OperationGUI_ChamferDlg::reset() { // Set Initial values of spinboxes - QMap< int, DlgRef_SpinBox* >::iterator anIter; + QMap< int, QDoubleSpinBox* >::iterator anIter; for ( anIter = mySpinBox.begin(); anIter != mySpinBox.end(); ++anIter ) - anIter.data()->SetValue( 5 ); + anIter.value()->setValue( 5 ); // clear line edits QMap< int, QLineEdit* >::iterator anIterLE; for ( anIterLE = mySelName.begin(); anIterLE != mySelName.end(); ++anIterLE ) - anIterLE.data()->setText( "" ); + 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 ]; + else if ( aConstructorId == 2 ) myEditCurrentArgument = mySelName[ MainObj3 ]; + else myEditCurrentArgument = mySelName[ MainObj4 ]; myShape = GEOM::GEOM_Object::_nil(); myFaces.Clear(); + myEdges.Clear(); myFace[ Face1 ] = -1; myFace[ Face2 ] = -1; @@ -551,15 +657,6 @@ void OperationGUI_ChamferDlg::reset() enableWidgets(); } -//================================================================================= -// function : getConstructorId() -// purpose : -//================================================================================= -int OperationGUI_ChamferDlg::getConstructorId() const -{ - return GroupConstructors->id( GroupConstructors->selected() ); -} - //================================================================================= // function : activateSelection // purpose : Activate selection in accordance with myEditCurrentArgument @@ -569,10 +666,13 @@ void OperationGUI_ChamferDlg::activateSelection() if ( !myShape->_is_nil() && ( myEditCurrentArgument == mySelName[ Face1 ] || myEditCurrentArgument == mySelName[ Face2 ] || - myEditCurrentArgument == mySelName[ Faces ] ) ) + myEditCurrentArgument == mySelName[ Faces ] ) ) { localSelection( myShape, TopAbs_FACE ); - else - { + } + else if ( !myShape->_is_nil() && myEditCurrentArgument == mySelName[ Edges ] ) { + localSelection( myShape, TopAbs_EDGE ); + } + else { TColStd_MapOfInteger aMap; aMap.Add( GEOM_SHELL ); aMap.Add( GEOM_SOLID ); @@ -611,9 +711,18 @@ void OperationGUI_ChamferDlg::enableWidgets() else if ( anId == 2 ) { mySelName[ Faces ]->setEnabled( toEnable ); - - if ( !toEnable ) - myFaces.Clear(); + if ( !toEnable ) { + mySelName[ Faces ]->setText( "" ); + myFaces = -1; + } + } + else if ( anId == 3 ) { + mySelName[ Edges ]->setEnabled( toEnable ); + + if ( !toEnable ) { + mySelName[ Edges ]->setText( "" ); + myEdges = -1; + } } } @@ -637,6 +746,7 @@ bool OperationGUI_ChamferDlg::isValid( QString& ) 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; } } @@ -648,49 +758,74 @@ bool OperationGUI_ChamferDlg::isValid( QString& ) 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 ) + if ( anId == 0 ) { anObj = GEOM::GEOM_ILocalOperations::_narrow( getOperation() )->MakeChamferAll( myShape, - mySpinBox[ SpinBox1 ]->GetValue() ); - else if ( anId == 1 ) - anObj = GEOM::GEOM_ILocalOperations::_narrow( - getOperation() )->MakeChamferEdge( myShape, - mySpinBox[ SpinBox21 ]->GetValue(), - mySpinBox[ SpinBox22 ]->GetValue(), - myFace[ Face1 ], - myFace[ Face2 ] ); + 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 ) { - - int i = 0; 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 ); + if ( flag ) anObj = GEOM::GEOM_ILocalOperations::_narrow( getOperation() )->MakeChamferFaces( myShape, - mySpinBox[ SpinBox31 ]->GetValue(), - mySpinBox[ SpinBox32 ]->GetValue(), + 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() ); return true; } - - - - - - - - -