X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FRepairGUI%2FRepairGUI_CloseContourDlg.cxx;h=e9eab46cc56bceef5141fb61fcbaf4c673f3fc0c;hb=357991964c4929ef01edcf1d55eddd67f8512c29;hp=46721ef621b8bbb174ff0587dc1e6e285a431135;hpb=d3dd282390888d7dc091ba2c2ffe7923bd7458e6;p=modules%2Fgeom.git diff --git a/src/RepairGUI/RepairGUI_CloseContourDlg.cxx b/src/RepairGUI/RepairGUI_CloseContourDlg.cxx index 46721ef62..e9eab46cc 100644 --- a/src/RepairGUI/RepairGUI_CloseContourDlg.cxx +++ b/src/RepairGUI/RepairGUI_CloseContourDlg.cxx @@ -1,43 +1,46 @@ -// GEOM GEOMGUI : GUI for Geometry component +// Copyright (C) 2007-2011 CEA/DEN, EDF R&D, OPEN CASCADE // -// 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 -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org +// 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 : RepairGUI_CloseContourDlg.cxx -// Author : Lucien PIGNOLONI -// Module : GEOM -// $Header$ -using namespace std; +// GEOM GEOMGUI : GUI for Geometry component +// File : RepairGUI_CloseContourDlg.cxx +// Author : Lucien PIGNOLONI, Open CASCADE S.A.S. +// #include "RepairGUI_CloseContourDlg.h" -#include "QAD_RightFrame.h" -#include "QAD_Desktop.h" -#include "OCCViewer_Viewer3d.h" -#include "SALOME_ListIteratorOfListIO.hxx" +#include +#include +#include -#include "GEOMImpl_Types.hxx" +#include +#include +#include +#include +// OCCT Includes #include +#include +#include +#include //================================================================================= // class : RepairGUI_CloseContourDlg() @@ -46,61 +49,56 @@ using namespace std; // The dialog will by default be modeless, unless you set 'modal' to // TRUE to construct a modal dialog. //================================================================================= -RepairGUI_CloseContourDlg::RepairGUI_CloseContourDlg(QWidget* parent, const char* name, SALOME_Selection* Sel, bool modal, WFlags fl) - :GEOMBase_Skeleton(parent, name, Sel, modal, WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu) +RepairGUI_CloseContourDlg::RepairGUI_CloseContourDlg (GeometryGUI* theGeometryGUI, QWidget* parent, + bool modal) + : GEOMBase_Skeleton(theGeometryGUI, parent, modal) { - QPixmap image0(QAD_Desktop::getResourceManager()->loadPixmap("GEOM",tr("ICON_DLG_CLOSECONTOUR"))); - QPixmap image1(QAD_Desktop::getResourceManager()->loadPixmap("GEOM",tr("ICON_SELECT"))); + QPixmap image0 (SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM", tr("ICON_DLG_CLOSECONTOUR"))); + QPixmap image1 (SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM", tr("ICON_SELECT"))); - setCaption(tr("GEOM_CLOSECONTOUR_TITLE")); + setWindowTitle(tr("GEOM_CLOSECONTOUR_TITLE")); /***************************************************************/ - GroupConstructors->setTitle(tr("GEOM_CLOSECONTOUR_TITLE")); - RadioButton1->setPixmap(image0); - RadioButton2->close(TRUE); - RadioButton3->close(TRUE); - - GroupPoints = new DlgRef_1Sel_Ext(this, "GroupPoints"); + mainFrame()->GroupConstructors->setTitle(tr("GEOM_CLOSECONTOUR_TITLE")); + mainFrame()->RadioButton1->setIcon(image0); + mainFrame()->RadioButton2->setAttribute(Qt::WA_DeleteOnClose); + mainFrame()->RadioButton2->close(); + mainFrame()->RadioButton3->setAttribute(Qt::WA_DeleteOnClose); + mainFrame()->RadioButton3->close(); + + GroupPoints = new DlgRef_2SelExt(centralWidget()); GroupPoints->GroupBox1->setTitle(tr("Contour to close")); GroupPoints->TextLabel1->setText(tr("GEOM_SELECTED_SHAPE")); - GroupPoints->PushButton1->setPixmap(image1); - GroupPoints->LineEdit1->setReadOnly( true ); - - QGridLayout* aSelectWiresLay = new QGridLayout( 0, 1, 1, 0, 6, "aSelectWiresLay"); - - mySelectWiresBtn = new QPushButton( GroupPoints->GroupBox1, "mySelectWiresBtn" ); - mySelectWiresBtn->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)0, (QSizePolicy::SizeType)0, 0, 0, mySelectWiresBtn->sizePolicy().hasHeightForWidth() ) ); - mySelectWiresBtn->setText( trUtf8( "" ) ); - mySelectWiresBtn->setPixmap(image1); - - mySelectWiresEdt = new QLineEdit( GroupPoints->GroupBox1, "mySelectWiresEdt" ); - mySelectWiresEdt->setReadOnly( true ); - - mySelectWiresLbl = new QLabel( tr( "Contour to close" ), GroupPoints->GroupBox1, "ContourLbl" ); - mySelectWiresLbl->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)0, (QSizePolicy::SizeType)0, 0, 0, mySelectWiresLbl->sizePolicy().hasHeightForWidth() ) ); - - aSelectWiresLay->addWidget( mySelectWiresLbl, 0, 0 ); - aSelectWiresLay->addWidget( mySelectWiresBtn, 0, 1 ); - aSelectWiresLay->addWidget( mySelectWiresEdt, 0, 2 ); - QSpacerItem* spacer = new QSpacerItem( 0, 16, QSizePolicy::Minimum, QSizePolicy::Expanding ); - aSelectWiresLay->addItem( spacer, 1, 2 ); - - myIsVertexGr = new QButtonGroup( 2, Qt::Vertical, GroupPoints ); - myIsVertexGr->setFrameStyle( QFrame::NoFrame ); - myIsVertexGr->setRadioButtonExclusive( true ); - myIsVertexGr->insert( new QRadioButton( tr( "Close by common vertex" ), myIsVertexGr ), 0 ); - myIsVertexGr->insert( new QRadioButton( tr( "Close by new edge" ), myIsVertexGr ), 1 ); - myIsVertexGr->find( 0 )->toggle(); - - Layout1->addWidget(GroupPoints, 2, 0); - GroupPoints->getGroupBoxLayout()->addLayout( aSelectWiresLay, 1, 0 ); - GroupPoints->getGroupBoxLayout()->addMultiCellWidget(myIsVertexGr, 2, 2, 0, 2); + GroupPoints->PushButton1->setIcon(image1); + GroupPoints->LineEdit1->setReadOnly(true); + + GroupPoints->TextLabel2->setText(tr("Contour to close")); + GroupPoints->PushButton2->setIcon(image1); + GroupPoints->LineEdit2->setReadOnly(true); + + QRadioButton* rb1 = new QRadioButton(tr("Close by common vertex"), GroupPoints->Box); + QRadioButton* rb2 = new QRadioButton(tr("Close by new edge"), GroupPoints->Box); + + myIsVertexGr = new QButtonGroup(GroupPoints->Box); + myIsVertexGr->addButton(rb1, 0); + myIsVertexGr->addButton(rb2, 1); + rb1->setChecked(true); + + QVBoxLayout* l = new QVBoxLayout(GroupPoints->Box); + l->setMargin(0); l->setSpacing(6); + l->addWidget(rb1); + l->addWidget(rb2); + + QVBoxLayout* layout = new QVBoxLayout(centralWidget()); + layout->setMargin(0); layout->setSpacing(6); + layout->addWidget(GroupPoints); /***************************************************************/ + setHelpFileName("close_contour_operation_page.html"); + Init(); } - //================================================================================= // function : ~RepairGUI_CloseContourDlg() // purpose : Destroys the object and frees any allocated resources @@ -109,129 +107,111 @@ RepairGUI_CloseContourDlg::~RepairGUI_CloseContourDlg() { } - //================================================================================= // function : Init() // purpose : //================================================================================= void RepairGUI_CloseContourDlg::Init() { - /* init variables */ - myEditCurrentArgument = GroupPoints->LineEdit1; - + // init variables + GroupPoints->LineEdit1->clear(); + GroupPoints->LineEdit2->clear(); myObject = GEOM::GEOM_Object::_nil(); myWiresInd = new GEOM::short_array(); - myWiresInd->length( 0 ); - - myGeomGUI->SetState( 0 ); - initSelection(); + myWiresInd->length(0); - /* signals and slots connections */ - connect(buttonCancel, SIGNAL(clicked()), this, SLOT(ClickOnCancel())); - connect(myGeomGUI, SIGNAL(SignalDeactivateActiveDialog()), this, SLOT(DeactivateActiveDialog())); - connect(myGeomGUI, SIGNAL(SignalCloseAllDialogs()), this, SLOT(ClickOnCancel())); + // signals and slots connections + 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())); + connect(GroupPoints->PushButton1, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument())); + connect(GroupPoints->PushButton2, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument())); - connect(GroupPoints->PushButton1, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument())); - connect(GroupPoints->LineEdit1, SIGNAL(returnPressed()), this, SLOT(LineEditReturnPressed())); - connect(mySelectWiresBtn, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument())); - connect(mySelectWiresEdt, SIGNAL(returnPressed()), this, SLOT(LineEditReturnPressed())); + connect(GroupPoints->LineEdit1, SIGNAL(returnPressed()), this, SLOT(LineEditReturnPressed())); + connect(GroupPoints->LineEdit2, SIGNAL(returnPressed()), this, SLOT(LineEditReturnPressed())); - connect(mySelection, SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument())); + initName(tr("CLOSE_CONTOUR_NEW_OBJ_NAME")); - initName( tr( "CLOSE_CONTOUR_NEW_OBJ_NAME" ) ); + GroupPoints->PushButton1->click(); + SelectionIntoArgument(); + resize(100,100); } - //================================================================================= // function : ClickOnOk() // purpose : Same than click on apply but close this dialog. //================================================================================= void RepairGUI_CloseContourDlg::ClickOnOk() { - if ( ClickOnApply() ) + setIsApplyAndClose( true ); + if (ClickOnApply()) ClickOnCancel(); } - - //================================================================================= // function : ClickOnApply() // purpose : //================================================================================= bool RepairGUI_CloseContourDlg::ClickOnApply() { - if ( !onAccept() ) + if (!onAccept()) return false; initName(); - - myEditCurrentArgument = GroupPoints->LineEdit1; - myEditCurrentArgument->setText(""); - myObject = GEOM::GEOM_Object::_nil(); - myWiresInd->length( 0 ); - - initSelection(); - + // activate first line edit + GroupPoints->PushButton1->click(); return true; } - -//================================================================================= -// function : ClickOnCancel() -// purpose : -//================================================================================= -void RepairGUI_CloseContourDlg::ClickOnCancel() -{ - GEOMBase_Skeleton::ClickOnCancel(); -} - //================================================================================= // function : SelectionIntoArgument() -// purpose : Called when selection as changed or other case -// : used only by SelectButtonC1A1 (LineEditC1A1) +// purpose : Called when selection is changed or on dialog initialization or activation //================================================================================= void RepairGUI_CloseContourDlg::SelectionIntoArgument() { - erasePreview(); - myEditCurrentArgument->setText( "" ); - mySelectWiresEdt->setText( "" ); - - if ( myEditCurrentArgument == GroupPoints->LineEdit1 ) + myEditCurrentArgument->setText(""); + // the second argument depends on the first one + GroupPoints->LineEdit2->setText(""); + myWiresInd->length(0); + + if (myEditCurrentArgument == GroupPoints->LineEdit1) myObject = GEOM::GEOM_Object::_nil(); - else if ( myEditCurrentArgument == mySelectWiresEdt ) - myWiresInd->length( 0 ); - - if ( mySelection->IObjectCount() == 1 ) - { - Handle(SALOME_InteractiveObject) anIO = mySelection->firstIObject(); - - if ( myEditCurrentArgument == GroupPoints->LineEdit1 ) // face selection - { - Standard_Boolean aRes; - myObject = GEOMBase::ConvertIOinGEOMObject( anIO, aRes ); - if ( aRes && GEOMBase::IsShape( myObject ) ) - { - myEditCurrentArgument->setText( GEOMBase::GetName( myObject ) ); + + LightApp_SelectionMgr* aSelMgr = myGeomGUI->getApp()->selectionMgr(); + SALOME_ListIO aSelList; + aSelMgr->selectedObjects(aSelList); + + if (aSelList.Extent() == 1) { + Handle(SALOME_InteractiveObject) anIO = aSelList.First(); + + if (myEditCurrentArgument == GroupPoints->LineEdit1) { // face selection + myObject = GEOMBase::ConvertIOinGEOMObject( anIO ); + if ( GEOMBase::IsShape(myObject) ) { + myEditCurrentArgument->setText(GEOMBase::GetName(myObject)); TopoDS_Shape aShape; - if ( myGeomBase->GetShape( myObject, aShape, TopAbs_WIRE ) ) - mySelectWiresEdt->setText( myEditCurrentArgument->text() ); + if (GEOMBase::GetShape(myObject, aShape, TopAbs_WIRE)) + GroupPoints->LineEdit2->setText(myEditCurrentArgument->text()); + + // clear selection + disconnect(myGeomGUI->getApp()->selectionMgr(), 0, this, 0); + myGeomGUI->getApp()->selectionMgr()->clearSelected(); + connect(myGeomGUI->getApp()->selectionMgr(), SIGNAL(currentSelectionChanged()), + this, SLOT(SelectionIntoArgument())); + + GroupPoints->PushButton2->click(); } else myObject = GEOM::GEOM_Object::_nil(); } - else if ( myEditCurrentArgument == mySelectWiresEdt ) - { + else if (myEditCurrentArgument == GroupPoints->LineEdit2) { TColStd_IndexedMapOfInteger aMap; - mySelection->GetIndex( anIO, aMap ); + aSelMgr->GetIndexes(anIO, aMap); const int n = aMap.Extent(); - myWiresInd->length( n ); - for ( int i = 1; i <= n; i++ ) - myWiresInd[ i-1 ] = aMap( i ); - if ( n ) - myEditCurrentArgument->setText( QString::number( n ) + "_" + tr( "GEOM_WIRE" ) + tr( "_S_" ) ); + myWiresInd->length(n); + for (int i = 1; i <= n; i++) + myWiresInd[i-1] = aMap(i); + if (n) + myEditCurrentArgument->setText(QString::number(n) + "_" + tr("GEOM_WIRE") + tr("_S_")); } } } @@ -242,20 +222,36 @@ void RepairGUI_CloseContourDlg::SelectionIntoArgument() //================================================================================= void RepairGUI_CloseContourDlg::SetEditCurrentArgument() { - const QObject* send = sender(); - if ( send == GroupPoints->PushButton1 ) - myEditCurrentArgument = GroupPoints->LineEdit1; - else if ( send == mySelectWiresBtn && !myObject->_is_nil() ) - myEditCurrentArgument = mySelectWiresEdt; - if ( myEditCurrentArgument ) - { + QPushButton* send = (QPushButton*)sender(); + + bool isEffective = false; + + if (send == GroupPoints->PushButton1) { + isEffective = true; + myEditCurrentArgument = GroupPoints->LineEdit1; + + GroupPoints->PushButton2->setDown(false); + GroupPoints->LineEdit2->setEnabled(false); + } + else if (send == GroupPoints->PushButton2 && !myObject->_is_nil()) { + isEffective = true; + myEditCurrentArgument = GroupPoints->LineEdit2; + + GroupPoints->PushButton1->setDown(false); + GroupPoints->LineEdit1->setEnabled(false); + } + + if (isEffective) { initSelection(); + + // enable line edit + myEditCurrentArgument->setEnabled(true); myEditCurrentArgument->setFocus(); - SelectionIntoArgument(); + // after setFocus(), because it will be setDown(false) when loses focus + send->setDown(true); } } - //================================================================================= // function : LineEditReturnPressed() // purpose : @@ -263,25 +259,12 @@ void RepairGUI_CloseContourDlg::SetEditCurrentArgument() void RepairGUI_CloseContourDlg::LineEditReturnPressed() { const QObject* send = sender(); - if( send == GroupPoints->LineEdit1 || send == mySelectWiresEdt ) - { + if (send == GroupPoints->LineEdit1 || send == GroupPoints->LineEdit2) { myEditCurrentArgument = (QLineEdit*)send; GEOMBase_Skeleton::LineEditReturnPressed(); } } - -//================================================================================= -// function : DeactivateActiveDialog() -// purpose : -//================================================================================= -void RepairGUI_CloseContourDlg::DeactivateActiveDialog() -{ - myGeomGUI->SetState( -1 ); - GEOMBase_Skeleton::DeactivateActiveDialog(); -} - - //================================================================================= // function : ActivateThisDialog() // purpose : @@ -289,70 +272,61 @@ void RepairGUI_CloseContourDlg::DeactivateActiveDialog() void RepairGUI_CloseContourDlg::ActivateThisDialog() { GEOMBase_Skeleton::ActivateThisDialog(); - connect(mySelection, SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument())); + connect( myGeomGUI->getApp()->selectionMgr(), SIGNAL( currentSelectionChanged() ), + this, SLOT( SelectionIntoArgument() ) ); myEditCurrentArgument = GroupPoints->LineEdit1; - myEditCurrentArgument->setText(""); - mySelectWiresEdt->setText(""); + myEditCurrentArgument->setText( "" ); + GroupPoints->LineEdit2->setText( "" ); myObject = GEOM::GEOM_Object::_nil(); myWiresInd->length( 0 ); - myGeomGUI->SetState( 0 ); initSelection(); } - //================================================================================= // function : enterEvent() // purpose : Mouse enter onto the dialog to activate it //================================================================================= -void RepairGUI_CloseContourDlg::enterEvent(QEvent* e) +void RepairGUI_CloseContourDlg::enterEvent (QEvent*) { - if ( !GroupConstructors->isEnabled() ) + if (!mainFrame()->GroupConstructors->isEnabled()) ActivateThisDialog(); } - -//================================================================================= -// function : closeEvent() -// purpose : -//================================================================================= -void RepairGUI_CloseContourDlg::closeEvent(QCloseEvent* e) -{ - myGeomGUI->SetState( -1 ); - GEOMBase_Skeleton::closeEvent( e ); -} - //================================================================================= // function : createOperation // purpose : //================================================================================= GEOM::GEOM_IOperations_ptr RepairGUI_CloseContourDlg::createOperation() { - return getGeomEngine()->GetIHealingOperations( getStudyId() ); + return getGeomEngine()->GetIHealingOperations(getStudyId()); } //================================================================================= // function : isValid // purpose : //================================================================================= -bool RepairGUI_CloseContourDlg::isValid( QString& msg ) +bool RepairGUI_CloseContourDlg::isValid (QString&) { TopoDS_Shape aTmpShape; - return !myObject->_is_nil() && ( myWiresInd->length() || myGeomBase->GetShape( myObject, aTmpShape, TopAbs_WIRE ) ); + return !myObject->_is_nil() && (myWiresInd->length() || + GEOMBase::GetShape(myObject, aTmpShape, TopAbs_WIRE)); } //================================================================================= // function : execute // purpose : //================================================================================= -bool RepairGUI_CloseContourDlg::execute( ObjectList& objects ) +bool RepairGUI_CloseContourDlg::execute (ObjectList& objects) { - GEOM::GEOM_Object_var anObj = GEOM::GEOM_IHealingOperations::_narrow( getOperation() )->CloseContour( myObject, myWiresInd, getIsByVertex() ); + GEOM::GEOM_IHealingOperations_var anOper = GEOM::GEOM_IHealingOperations::_narrow(getOperation()); + GEOM::GEOM_Object_var anObj = anOper->CloseContour(myObject, myWiresInd, getIsByVertex()); + bool aResult = !anObj->_is_nil(); - if ( aResult ) - objects.push_back( anObj._retn() ); - + if (aResult) + objects.push_back(anObj._retn()); + return aResult; } @@ -362,7 +336,7 @@ bool RepairGUI_CloseContourDlg::execute( ObjectList& objects ) //================================================================================= bool RepairGUI_CloseContourDlg::getIsByVertex() const { - return myIsVertexGr->find( 0 )->isOn(); + return myIsVertexGr->button(0)->isChecked(); } //================================================================================= @@ -371,22 +345,23 @@ bool RepairGUI_CloseContourDlg::getIsByVertex() const //================================================================================= void RepairGUI_CloseContourDlg::initSelection() { - if ( myEditCurrentArgument == GroupPoints->LineEdit1 ) - { + disconnect(myGeomGUI->getApp()->selectionMgr(), 0, this, 0); + + if (myEditCurrentArgument == GroupPoints->LineEdit1) { TColStd_MapOfInteger aTypes; - aTypes.Add( GEOM_COMPOUND ); - aTypes.Add( GEOM_SOLID ); - aTypes.Add( GEOM_SHELL ); - aTypes.Add( GEOM_FACE ); - aTypes.Add( GEOM_WIRE ); - - globalSelection( aTypes ); + aTypes.Add(GEOM_COMPOUND); + aTypes.Add(GEOM_SOLID); + aTypes.Add(GEOM_SHELL); + aTypes.Add(GEOM_FACE); + aTypes.Add(GEOM_WIRE); + + globalSelection(aTypes); } - else if ( myEditCurrentArgument == mySelectWiresEdt ) - { - localSelection( myObject, TopAbs_EDGE ); - localSelection( myObject, TopAbs_WIRE ); + else if (myEditCurrentArgument == GroupPoints->LineEdit2) { + localSelection(myObject, TopAbs_EDGE); + localSelection(myObject, TopAbs_WIRE); } -} - + connect(myGeomGUI->getApp()->selectionMgr(), SIGNAL(currentSelectionChanged()), + this, SLOT(SelectionIntoArgument())); +}