smesh/src/SMESHGUI/SMESHGUI_RenumberingDlg.cxx

431 lines
15 KiB
C++
Raw Normal View History

2003-07-10 19:18:22 +06:00
// SMESH SMESHGUI : GUI for SMESH 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
//
// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org
//
//
//
2004-12-01 15:48:31 +05:00
// File : SMESHGUI_RenumberingDlg.cxx
2003-07-10 19:18:22 +06:00
// Author : Nicolas REJNERI
// Module : SMESH
2003-05-19 20:07:00 +06:00
// $Header$
2004-12-01 15:48:31 +05:00
#include "SMESHGUI_RenumberingDlg.h"
2003-05-19 20:07:00 +06:00
#include "SMESHGUI.h"
2004-12-01 15:48:31 +05:00
#include "SMESHGUI_Utils.h"
#include "SMESHGUI_VTKUtils.h"
#include "SMESH_Actor.h"
#include "SMDS_Mesh.hxx"
2003-05-19 20:07:00 +06:00
#include "QAD_Application.h"
#include "QAD_Desktop.h"
#include "QAD_MessageBox.h"
#include "utilities.h"
// QT Includes
2004-12-01 15:48:31 +05:00
#include <qapplication.h>
2003-05-19 20:07:00 +06:00
#include <qbuttongroup.h>
#include <qgroupbox.h>
#include <qlabel.h>
#include <qlineedit.h>
#include <qpushbutton.h>
#include <qradiobutton.h>
#include <qlayout.h>
#include <qpixmap.h>
2004-12-01 15:48:31 +05:00
using namespace std;
2003-05-19 20:07:00 +06:00
//=================================================================================
2004-12-01 15:48:31 +05:00
// class : SMESHGUI_RenumberingDlg()
2003-05-19 20:07:00 +06:00
// purpose :
//=================================================================================
2004-12-01 15:48:31 +05:00
SMESHGUI_RenumberingDlg::SMESHGUI_RenumberingDlg( QWidget* parent, const char* name, SALOME_Selection* Sel,
const int unit, bool modal, WFlags fl )
: QDialog( parent, name, modal, WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu |
Qt::WDestructiveClose)
2003-05-19 20:07:00 +06:00
{
2004-12-01 15:48:31 +05:00
myUnit = unit;
2003-05-19 20:07:00 +06:00
if ( !name )
2004-12-01 15:48:31 +05:00
setName( "SMESHGUI_RenumberingDlg" );
resize( 303, 185 );
2003-05-19 20:07:00 +06:00
2004-12-01 15:48:31 +05:00
QPixmap image0;
QPixmap image1(QAD_Desktop::getResourceManager()->loadPixmap( "SMESH",tr("ICON_SELECT")));
2003-05-19 20:07:00 +06:00
2004-12-01 15:48:31 +05:00
if (unit == 0) {
image0 = QPixmap(QAD_Desktop::getResourceManager()->loadPixmap( "SMESH",tr("ICON_DLG_RENUMBERING_NODES")));
setCaption( tr( "SMESH_RENUMBERING_NODES_TITLE" ) );
}
else if (unit == 1) {
image0 = QPixmap(QAD_Desktop::getResourceManager()->loadPixmap( "SMESH",tr("ICON_DLG_RENUMBERING_ELEMENTS")));
setCaption( tr( "SMESH_RENUMBERING_ELEMENTS_TITLE" ) );
}
2003-05-19 20:07:00 +06:00
2004-12-01 15:48:31 +05:00
setSizeGripEnabled( TRUE );
SMESHGUI_RenumberingDlgLayout = new QGridLayout( this );
SMESHGUI_RenumberingDlgLayout->setSpacing( 6 );
SMESHGUI_RenumberingDlgLayout->setMargin( 11 );
/***************************************************************/
GroupConstructors = new QButtonGroup( this, "GroupConstructors" );
if (unit == 0)
GroupConstructors->setTitle( tr( "SMESH_NODES" ) );
else if (unit == 1)
GroupConstructors->setTitle( tr( "SMESH_ELEMENTS" ) );
2003-05-19 20:07:00 +06:00
GroupConstructors->setExclusive( TRUE );
GroupConstructors->setColumnLayout(0, Qt::Vertical );
GroupConstructors->layout()->setSpacing( 0 );
GroupConstructors->layout()->setMargin( 0 );
GroupConstructorsLayout = new QGridLayout( GroupConstructors->layout() );
GroupConstructorsLayout->setAlignment( Qt::AlignTop );
GroupConstructorsLayout->setSpacing( 6 );
GroupConstructorsLayout->setMargin( 11 );
Constructor1 = new QRadioButton( GroupConstructors, "Constructor1" );
Constructor1->setText( tr( "" ) );
Constructor1->setPixmap( image0 );
Constructor1->setChecked( TRUE );
Constructor1->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)1, (QSizePolicy::SizeType)0, Constructor1->sizePolicy().hasHeightForWidth() ) );
Constructor1->setMinimumSize( QSize( 50, 0 ) );
GroupConstructorsLayout->addWidget( Constructor1, 0, 0 );
QSpacerItem* spacer = new QSpacerItem( 20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum );
GroupConstructorsLayout->addItem( spacer, 0, 1 );
2004-12-01 15:48:31 +05:00
SMESHGUI_RenumberingDlgLayout->addWidget( GroupConstructors, 0, 0 );
/***************************************************************/
2003-05-19 20:07:00 +06:00
GroupButtons = new QGroupBox( this, "GroupButtons" );
GroupButtons->setGeometry( QRect( 10, 10, 281, 48 ) );
GroupButtons->setTitle( tr( "" ) );
GroupButtons->setColumnLayout(0, Qt::Vertical );
GroupButtons->layout()->setSpacing( 0 );
GroupButtons->layout()->setMargin( 0 );
GroupButtonsLayout = new QGridLayout( GroupButtons->layout() );
GroupButtonsLayout->setAlignment( Qt::AlignTop );
GroupButtonsLayout->setSpacing( 6 );
GroupButtonsLayout->setMargin( 11 );
buttonCancel = new QPushButton( GroupButtons, "buttonCancel" );
buttonCancel->setText( tr( "SMESH_BUT_CLOSE" ) );
buttonCancel->setAutoDefault( TRUE );
GroupButtonsLayout->addWidget( buttonCancel, 0, 3 );
buttonApply = new QPushButton( GroupButtons, "buttonApply" );
buttonApply->setText( tr( "SMESH_BUT_APPLY" ) );
buttonApply->setAutoDefault( TRUE );
GroupButtonsLayout->addWidget( buttonApply, 0, 1 );
QSpacerItem* spacer_9 = new QSpacerItem( 20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum );
GroupButtonsLayout->addItem( spacer_9, 0, 2 );
buttonOk = new QPushButton( GroupButtons, "buttonOk" );
buttonOk->setText( tr( "SMESH_BUT_OK" ) );
buttonOk->setAutoDefault( TRUE );
buttonOk->setDefault( TRUE );
GroupButtonsLayout->addWidget( buttonOk, 0, 0 );
2004-12-01 15:48:31 +05:00
SMESHGUI_RenumberingDlgLayout->addWidget( GroupButtons, 2, 0 );
/***************************************************************/
GroupMesh = new QGroupBox( this, "GroupMesh" );
GroupMesh->setTitle( tr( "SMESH_RENUMBERING" ) );
GroupMesh->setMinimumSize( QSize( 0, 0 ) );
GroupMesh->setFrameShape( QGroupBox::Box );
GroupMesh->setFrameShadow( QGroupBox::Sunken );
GroupMesh->setColumnLayout(0, Qt::Vertical );
GroupMesh->layout()->setSpacing( 0 );
GroupMesh->layout()->setMargin( 0 );
GroupMeshLayout = new QGridLayout( GroupMesh->layout() );
GroupMeshLayout->setAlignment( Qt::AlignTop );
GroupMeshLayout->setSpacing( 6 );
GroupMeshLayout->setMargin( 11 );
TextLabelMesh = new QLabel( GroupMesh, "TextLabelMesh" );
TextLabelMesh->setText( tr( "SMESH_MESH" ) );
TextLabelMesh->setMinimumSize( QSize( 50, 0 ) );
TextLabelMesh->setFrameShape( QLabel::NoFrame );
TextLabelMesh->setFrameShadow( QLabel::Plain );
GroupMeshLayout->addWidget( TextLabelMesh, 0, 0 );
SelectButton = new QPushButton( GroupMesh, "SelectButton" );
SelectButton->setText( tr( "" ) );
SelectButton->setPixmap( image1 );
SelectButton->setToggleButton( FALSE );
GroupMeshLayout->addWidget( SelectButton, 0, 1 );
LineEditMesh = new QLineEdit( GroupMesh, "LineEditMesh" );
LineEditMesh->setReadOnly( true );
GroupMeshLayout->addWidget( LineEditMesh, 0, 2 );
SMESHGUI_RenumberingDlgLayout->addWidget( GroupMesh, 1, 0 );
2003-05-19 20:07:00 +06:00
Init(Sel) ; /* Initialisations */
}
//=================================================================================
2004-12-01 15:48:31 +05:00
// function : ~SMESHGUI_RenumberingDlg()
2003-05-19 20:07:00 +06:00
// purpose : Destroys the object and frees any allocated resources
//=================================================================================
2004-12-01 15:48:31 +05:00
SMESHGUI_RenumberingDlg::~SMESHGUI_RenumberingDlg()
2003-05-19 20:07:00 +06:00
{
2004-12-01 15:48:31 +05:00
// no need to delete child widgets, Qt does it all for us
2003-05-19 20:07:00 +06:00
}
//=================================================================================
// function : Init()
// purpose :
//=================================================================================
2004-12-01 15:48:31 +05:00
void SMESHGUI_RenumberingDlg::Init( SALOME_Selection* Sel )
2003-05-19 20:07:00 +06:00
{
2004-12-01 15:48:31 +05:00
GroupMesh->show();
2003-05-19 20:07:00 +06:00
myConstructorId = 0 ;
Constructor1->setChecked( TRUE );
mySelection = Sel;
2004-12-01 15:48:31 +05:00
mySMESHGUI = SMESHGUI::GetSMESHGUI() ;
mySMESHGUI->SetActiveDialogBox( (QDialog*)this );
myMesh = SMESH::SMESH_Mesh::_nil();
myMeshFilter = new SMESH_TypeFilter( MESH );
2003-05-19 20:07:00 +06:00
/* signals and slots connections */
connect( buttonOk, SIGNAL( clicked() ), this, SLOT( ClickOnOk() ) );
connect( buttonCancel, SIGNAL( clicked() ), this, SLOT( ClickOnCancel() ) ) ;
connect( buttonApply, SIGNAL( clicked() ), this, SLOT(ClickOnApply() ) );
connect( GroupConstructors, SIGNAL(clicked(int) ), SLOT( ConstructorsClicked(int) ) );
2004-12-01 15:48:31 +05:00
connect( SelectButton, SIGNAL (clicked() ), this, SLOT( SetEditCurrentArgument() ) ) ;
2003-05-19 20:07:00 +06:00
connect( mySMESHGUI, SIGNAL ( SignalDeactivateActiveDialog() ), this, SLOT( DeactivateActiveDialog() ) ) ;
connect( mySelection, SIGNAL( currentSelectionChanged() ), this, SLOT( SelectionIntoArgument() ) );
/* to close dialog if study change */
connect( mySMESHGUI, SIGNAL ( SignalCloseAllDialogs() ), this, SLOT( ClickOnCancel() ) ) ;
2004-12-01 15:48:31 +05:00
2003-05-19 20:07:00 +06:00
/* Move widget on the botton right corner of main widget */
int x, y ;
mySMESHGUI->DefineDlgPosition( this, x, y ) ;
this->move( x, y ) ;
this->show() ; /* displays Dialog */
2004-12-01 15:48:31 +05:00
myEditCurrentArgument = LineEditMesh ;
LineEditMesh->setFocus();
mySelection->ClearFilters() ;
mySelection->AddFilter( myMeshFilter ) ;
2003-05-19 20:07:00 +06:00
SelectionIntoArgument();
}
//=================================================================================
// function : ConstructorsClicked()
// purpose : Radio button management
//=================================================================================
2004-12-01 15:48:31 +05:00
void SMESHGUI_RenumberingDlg::ConstructorsClicked(int constructorId)
2003-05-19 20:07:00 +06:00
{
return ;
}
//=================================================================================
// function : ClickOnApply()
// purpose :
//=================================================================================
2004-12-01 15:48:31 +05:00
void SMESHGUI_RenumberingDlg::ClickOnApply()
2003-05-19 20:07:00 +06:00
{
2004-12-01 15:48:31 +05:00
if (mySMESHGUI->ActiveStudyLocked())
return;
if ( !myMesh->_is_nil())
{
try
{
SMESH::SMESH_MeshEditor_var aMeshEditor = myMesh->GetMeshEditor();
SMESH_Actor* anActor = SMESH::FindActorByObject(myMesh);
bool isUnitsLabeled = false;
if (myUnit == 0 && anActor) {
isUnitsLabeled = anActor->GetPointsLabeled();
if (isUnitsLabeled) anActor->SetPointsLabeled(false);
}
else if (myUnit == 1 && anActor) {
isUnitsLabeled = anActor->GetCellsLabeled();
if (isUnitsLabeled) anActor->SetCellsLabeled(false);
}
QApplication::setOverrideCursor(Qt::waitCursor);
if (myUnit == 0) {
aMeshEditor->RenumberNodes();
if (isUnitsLabeled && anActor) anActor->SetPointsLabeled(true);
}
else if (myUnit == 1) {
aMeshEditor->RenumberElements();
if (isUnitsLabeled && anActor) anActor->SetCellsLabeled(true);
}
QApplication::restoreOverrideCursor();
2003-05-19 20:07:00 +06:00
}
2004-12-01 15:48:31 +05:00
catch( ... )
{
}
mySelection->ClearIObjects();
SMESH::UpdateView();
2003-05-19 20:07:00 +06:00
}
}
//=================================================================================
// function : ClickOnOk()
// purpose :
//=================================================================================
2004-12-01 15:48:31 +05:00
void SMESHGUI_RenumberingDlg::ClickOnOk()
2003-05-19 20:07:00 +06:00
{
2004-12-01 15:48:31 +05:00
ClickOnApply() ;
ClickOnCancel() ;
2003-05-19 20:07:00 +06:00
}
2004-12-01 15:48:31 +05:00
2003-05-19 20:07:00 +06:00
//=================================================================================
// function : ClickOnCancel()
// purpose :
//=================================================================================
2004-12-01 15:48:31 +05:00
void SMESHGUI_RenumberingDlg::ClickOnCancel()
2003-05-19 20:07:00 +06:00
{
2004-12-01 15:48:31 +05:00
mySelection->ClearIObjects();
mySelection->ClearFilters();
2003-05-19 20:07:00 +06:00
disconnect( mySelection, 0, this, 0 );
mySMESHGUI->ResetState() ;
reject() ;
}
//=================================================================================
// function : SelectionIntoArgument()
// purpose : Called when selection as changed or other case
//=================================================================================
2004-12-01 15:48:31 +05:00
void SMESHGUI_RenumberingDlg::SelectionIntoArgument()
2003-05-19 20:07:00 +06:00
{
2004-12-01 15:48:31 +05:00
if ( !GroupButtons->isEnabled() ) // inactive
2003-05-19 20:07:00 +06:00
return;
2004-12-01 15:48:31 +05:00
QString aString = "";
int nbSel = SMESH::GetNameOfSelectedIObjects(mySelection, aString) ;
2003-05-19 20:07:00 +06:00
2004-12-01 15:48:31 +05:00
if ( myEditCurrentArgument == LineEditMesh ) {
// mesh
if ( nbSel != 1 ) {
myMesh = SMESH::SMESH_Mesh::_nil();
aString = "";
}
else {
Handle(SALOME_InteractiveObject) IO = mySelection->firstIObject() ;
myMesh = SMESH::IObjectToInterface<SMESH::SMESH_Mesh>(IO) ;
if( myMesh->_is_nil() )
aString = "";
}
2003-05-19 20:07:00 +06:00
}
2004-12-01 15:48:31 +05:00
myEditCurrentArgument->setText(aString) ;
bool isEnabled = (!myMesh->_is_nil());
buttonOk->setEnabled( isEnabled );
buttonApply->setEnabled( isEnabled );
2003-05-19 20:07:00 +06:00
}
//=================================================================================
// function : SetEditCurrentArgument()
// purpose :
//=================================================================================
2004-12-01 15:48:31 +05:00
void SMESHGUI_RenumberingDlg::SetEditCurrentArgument()
2003-05-19 20:07:00 +06:00
{
QPushButton* send = (QPushButton*)sender();
switch (myConstructorId)
{
case 0: /* default constructor */
{
2004-12-01 15:48:31 +05:00
if(send == SelectButton) {
LineEditMesh->setFocus() ;
myEditCurrentArgument = LineEditMesh;
2003-05-19 20:07:00 +06:00
}
SelectionIntoArgument() ;
break;
}
}
}
//=================================================================================
// function : DeactivateActiveDialog()
// purpose :
//=================================================================================
2004-12-01 15:48:31 +05:00
void SMESHGUI_RenumberingDlg::DeactivateActiveDialog()
2003-05-19 20:07:00 +06:00
{
2004-12-01 15:48:31 +05:00
if ( GroupConstructors->isEnabled() ) {
2003-05-19 20:07:00 +06:00
GroupConstructors->setEnabled(false) ;
2004-12-01 15:48:31 +05:00
GroupMesh->setEnabled(false) ;
2003-05-19 20:07:00 +06:00
GroupButtons->setEnabled(false) ;
mySMESHGUI->ResetState() ;
mySMESHGUI->SetActiveDialogBox(0) ;
}
}
//=================================================================================
// function : ActivateThisDialog()
// purpose :
//=================================================================================
2004-12-01 15:48:31 +05:00
void SMESHGUI_RenumberingDlg::ActivateThisDialog()
2003-05-19 20:07:00 +06:00
{
/* Emit a signal to deactivate the active dialog */
mySMESHGUI->EmitSignalDeactivateDialog() ;
GroupConstructors->setEnabled(true) ;
2004-12-01 15:48:31 +05:00
GroupMesh->setEnabled(true) ;
2003-05-19 20:07:00 +06:00
GroupButtons->setEnabled(true) ;
2004-12-01 15:48:31 +05:00
mySMESHGUI->SetActiveDialogBox( (QDialog*)this ) ;
SelectionIntoArgument();
2003-05-19 20:07:00 +06:00
}
//=================================================================================
// function : enterEvent()
// purpose :
//=================================================================================
2004-12-01 15:48:31 +05:00
void SMESHGUI_RenumberingDlg::enterEvent(QEvent* e)
2003-05-19 20:07:00 +06:00
{
if ( GroupConstructors->isEnabled() )
return ;
ActivateThisDialog() ;
}
//=================================================================================
// function : closeEvent()
// purpose :
//=================================================================================
2004-12-01 15:48:31 +05:00
void SMESHGUI_RenumberingDlg::closeEvent( QCloseEvent* e )
2003-05-19 20:07:00 +06:00
{
/* same than click on cancel button */
this->ClickOnCancel() ;
}
2004-12-01 15:48:31 +05:00
//=======================================================================
//function : hideEvent
//purpose : caused by ESC key
//=======================================================================
2003-05-19 20:07:00 +06:00
2004-12-01 15:48:31 +05:00
void SMESHGUI_RenumberingDlg::hideEvent ( QHideEvent * e )
{
if ( !isMinimized() )
ClickOnCancel();
2003-05-19 20:07:00 +06:00
}