-// Copyright (C) 2005 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.
+// Copyright (C) 2007-2010 CEA/DEN, EDF R&D, OPEN CASCADE
//
-// 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
+// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+// 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
//
+// SMESH SMESHGUI : GUI for SMESH component
+// File : SMESHGUI_EditMeshDlg.cxx
+// Author : Open CASCADE S.A.S.
+// SMESH includes
+//
#include "SMESHGUI_EditMeshDlg.h"
#include "SMESHGUI.h"
#include "SMESHGUI_Utils.h"
#include "SMESHGUI_VTKUtils.h"
-#include "SMESHGUI_IdValidator.h"
-#include "SMESHGUI_SpinBox.h"
-
-#include "SMESH_Actor.h"
-#include "SMESH_TypeFilter.hxx"
-#include "SMESH_LogicalFilter.hxx"
#include "SMESHGUI_MeshUtils.h"
-#include "SMDS_Mesh.hxx"
-
-#include "GEOMBase.h"
+#include "SMESHGUI_SpinBox.h"
-#include "SUIT_ResourceMgr.h"
-#include "SUIT_Session.h"
-#include "SUIT_MessageBox.h"
+#include <SMESH_Actor.h>
+#include <SMESH_TypeFilter.hxx>
+#include <SMESH_LogicalFilter.hxx>
+#include <SMDS_Mesh.hxx>
-#include "LightApp_Application.h"
+// SALOME GUI includes
+#include <SUIT_Desktop.h>
+#include <SUIT_ResourceMgr.h>
+#include <SUIT_Session.h>
+#include <SUIT_MessageBox.h>
+#include <SUIT_OverrideCursor.h>
-#include "SVTK_ViewModel.h"
-#include "SVTK_ViewWindow.h"
-#include "SVTK_Selector.h"
-#include "SVTK_Selection.h"
-#include "SALOME_ListIO.hxx"
+#include <LightApp_Application.h>
+#include <LightApp_SelectionMgr.h>
-#include "utilities.h"
+#include <SVTK_ViewModel.h>
+#include <SVTK_ViewWindow.h>
+#include <SALOME_ListIO.hxx>
-// OCCT Includes
-#include <gp_XYZ.hxx>
+// OCCT includes
#include <TColStd_MapOfInteger.hxx>
#include <TColStd_MapIteratorOfMapOfInteger.hxx>
-//IDL Headers
+// IDL includes
+#include <SALOMEconfig.h>
#include CORBA_SERVER_HEADER(SMESH_Group)
+#include CORBA_SERVER_HEADER(SMESH_MeshEditor)
-// VTK Includes
+// VTK includes
#include <vtkUnstructuredGrid.h>
#include <vtkRenderer.h>
#include <vtkActor2D.h>
#include <vtkLabeledDataMapper.h>
#include <vtkTextProperty.h>
#include <vtkIntArray.h>
-#include <vtkPolyData.h>
#include <vtkProperty2D.h>
#include <vtkPointData.h>
+#include <vtkConfigure.h>
+#if !defined(VTK_XVERSION)
+#define VTK_XVERSION (VTK_MAJOR_VERSION<<16)+(VTK_MINOR_VERSION<<8)+(VTK_BUILD_VERSION)
+#endif
-// QT Includes
-#include <qapplication.h>
-#include <qbuttongroup.h>
-#include <qgroupbox.h>
-#include <qlabel.h>
-#include <qlineedit.h>
-#include <qlistbox.h>
-#include <qlistview.h>
-#include <qpushbutton.h>
-#include <qradiobutton.h>
-#include <qcheckbox.h>
-#include <qlayout.h>
-#include <qpixmap.h>
-#include <qheader.h>
-
-using namespace std;
-
-namespace SMESH {
- class TIdPreview { // to display in the viewer IDs of the selected elements
+// Qt includes
+#include <QApplication>
+#include <QGroupBox>
+#include <QLabel>
+#include <QLineEdit>
+#include <QListWidget>
+#include <QPushButton>
+#include <QRadioButton>
+#include <QCheckBox>
+#include <QHBoxLayout>
+#include <QVBoxLayout>
+#include <QGridLayout>
+#include <QKeyEvent>
+#include <QButtonGroup>
+
+#define SPACING 6
+#define MARGIN 11
+
+namespace SMESH
+{
+ class TIdPreview
+ { // to display in the viewer IDs of the selected elements
SVTK_ViewWindow* myViewWindow;
vtkUnstructuredGrid* myIdGrid;
bool myIsPointsLabeled;
vtkActor2D* myPointLabels;
- vector<int> myIDs;
+ std::vector<int> myIDs;
public:
TIdPreview(SVTK_ViewWindow* theViewWindow):
myPtsLabeledDataMapper = vtkLabeledDataMapper::New();
myPtsLabeledDataMapper->SetInput(myPtsSelectVisiblePoints->GetOutput());
+#if (VTK_XVERSION < 0x050200)
myPtsLabeledDataMapper->SetLabelFormat("%g");
+#endif
myPtsLabeledDataMapper->SetLabelModeToLabelScalars();
vtkTextProperty* aPtsTextProp = vtkTextProperty::New();
}
void SetPointsData ( SMDS_Mesh* theMesh,
- TColStd_MapOfInteger & theNodesIdMap )
+ TColStd_MapOfInteger & theNodesIdMap )
{
vtkPoints* aPoints = vtkPoints::New();
aPoints->SetNumberOfPoints(theNodesIdMap.Extent());
TColStd_MapIteratorOfMapOfInteger idIter( theNodesIdMap );
for( int i = 0; idIter.More(); idIter.Next(), i++ ) {
- const SMDS_MeshNode* aNode = theMesh->FindNode(idIter.Key());
- aPoints->SetPoint( i, aNode->X(), aNode->Y(), aNode->Z() );
- myIDs.push_back(idIter.Key());
+ const SMDS_MeshNode* aNode = theMesh->FindNode(idIter.Key());
+ aPoints->SetPoint( i, aNode->X(), aNode->Y(), aNode->Z() );
+ myIDs.push_back(idIter.Key());
}
myIdGrid->SetPoints(aPoints);
}
void SetElemsData( TColStd_MapOfInteger & theElemsIdMap,
- list<gp_XYZ> & aGrCentersXYZ )
+ std::list<gp_XYZ> & aGrCentersXYZ )
{
vtkPoints* aPoints = vtkPoints::New();
aPoints->SetNumberOfPoints(theElemsIdMap.Extent());
TColStd_MapIteratorOfMapOfInteger idIter( theElemsIdMap );
for( ; idIter.More(); idIter.Next() ) {
- myIDs.push_back(idIter.Key());
+ myIDs.push_back(idIter.Key());
}
gp_XYZ aXYZ;
- list<gp_XYZ>::iterator coordIt = aGrCentersXYZ.begin();
+ std::list<gp_XYZ>::iterator coordIt = aGrCentersXYZ.begin();
for( int i = 0; coordIt != aGrCentersXYZ.end(); coordIt++, i++ ) {
- aXYZ = *coordIt;
- aPoints->SetPoint( i, aXYZ.X(), aXYZ.Y(), aXYZ.Z() );
+ aXYZ = *coordIt;
+ aPoints->SetPoint( i, aXYZ.X(), aXYZ.Y(), aXYZ.Z() );
}
myIdGrid->SetPoints(aPoints);
aPoints->Delete();
myIsPointsLabeled = theIsPointsLabeled && myIdGrid->GetNumberOfPoints();
if ( myIsPointsLabeled ) {
- myPointsNumDataSet->ShallowCopy(myIdGrid);
- vtkDataSet *aDataSet = myPointsNumDataSet;
- int aNbElem = myIDs.size();
- vtkIntArray *anArray = vtkIntArray::New();
- anArray->SetNumberOfValues( aNbElem );
- for ( int i = 0; i < aNbElem; i++ )
- anArray->SetValue( i, myIDs[i] );
- aDataSet->GetPointData()->SetScalars( anArray );
- anArray->Delete();
- myPtsMaskPoints->SetInput( aDataSet );
- myPointLabels->SetVisibility( theIsActorVisible );
+ myPointsNumDataSet->ShallowCopy(myIdGrid);
+ vtkDataSet *aDataSet = myPointsNumDataSet;
+ int aNbElem = myIDs.size();
+ vtkIntArray *anArray = vtkIntArray::New();
+ anArray->SetNumberOfValues( aNbElem );
+ for ( int i = 0; i < aNbElem; i++ )
+ anArray->SetValue( i, myIDs[i] );
+ aDataSet->GetPointData()->SetScalars( anArray );
+ anArray->Delete();
+ myPtsMaskPoints->SetInput( aDataSet );
+ myPointLabels->SetVisibility( theIsActorVisible );
}
else {
- myPointLabels->SetVisibility( false );
+ myPointLabels->SetVisibility( false );
}
}
//myPtsSelectVisiblePoints->UnRegisterAllOutputs(); //vtk 5.0 porting
myPtsSelectVisiblePoints->Delete();
- //myPtsMaskPoints->UnRegisterAllOutputs(); //vtk 5.0 porting
+ //myPtsMaskPoints->UnRegisterAllOutputs(); //vtk 5.0 porting
myPtsMaskPoints->Delete();
myPointLabels->Delete();
static const char * IconFirst[] = {
"18 10 2 1",
-" g None",
-". g #000000",
+" g None",
+". g #000000",
" . . ",
" .. .. .. ",
" .. ... ... ",
// purpose :
//=================================================================================
SMESHGUI_EditMeshDlg::SMESHGUI_EditMeshDlg (SMESHGUI* theModule,
- int theAction)
- : QDialog(SMESH::GetDesktop(theModule), "SMESHGUI_EditMeshDlg", false, WStyle_Customize |
- WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu | Qt::WDestructiveClose),
+ int theAction)
+ : QDialog(SMESH::GetDesktop(theModule)),
mySMESHGUI(theModule),
mySelectionMgr(SMESH::GetSelectionMgr(theModule)),
myAction(theAction)
{
- setCaption(tr("SMESH_MERGE_NODES"));
+ setModal(false);
+ setAttribute(Qt::WA_DeleteOnClose, true);
+ setWindowTitle(myAction == 1 ? tr("SMESH_MERGE_ELEMENTS") : tr("SMESH_MERGE_NODES"));
myIdPreview = new SMESH::TIdPreview(SMESH::GetViewWindow( mySMESHGUI ));
QPixmap IconAdd (aResMgr->loadPixmap("SMESH", tr("ICON_APPEND")));
QPixmap IconRemove (aResMgr->loadPixmap("SMESH", tr("ICON_REMOVE")));
- setSizeGripEnabled(TRUE);
- DlgLayout = new QGridLayout (this);
- DlgLayout->setSpacing(6);
- DlgLayout->setMargin(11);
+ setSizeGripEnabled(true);
- /***************************************************************/
- GroupConstructors = new QButtonGroup (this, "GroupConstructors");
- GroupConstructors->setTitle(tr("SMESH_MERGE_NODES"));
- 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);
- RadioButton = new QRadioButton(GroupConstructors, "RadioButton");
- RadioButton->setPixmap(IconMergeNodes);
- if (myAction == 1) RadioButton->setPixmap(IconMergeElems);
- RadioButton->setChecked(TRUE);
- GroupConstructorsLayout->addWidget(RadioButton, 0, 0);
- DlgLayout->addWidget(GroupConstructors, 0, 0);
+ QVBoxLayout* DlgLayout = new QVBoxLayout(this);
+ DlgLayout->setSpacing(SPACING);
+ DlgLayout->setMargin(MARGIN);
/***************************************************************/
- GroupButtons = new QGroupBox (this, "GroupButtons");
- 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);
- buttonHelp = new QPushButton(GroupButtons, "buttonHelp");
- buttonHelp->setText(tr("SMESH_BUT_HELP" ));
- buttonHelp->setAutoDefault(TRUE);
- GroupButtonsLayout->addWidget(buttonHelp, 0, 4);
- 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* spacer3 = new QSpacerItem(20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
- GroupButtonsLayout->addItem(spacer3, 0, 2);
- buttonOk = new QPushButton(GroupButtons, "buttonOk");
- buttonOk->setText(tr("SMESH_BUT_OK" ));
- buttonOk->setAutoDefault(TRUE);
- buttonOk->setDefault(TRUE);
- GroupButtonsLayout->addWidget(buttonOk, 0, 0);
- DlgLayout->addWidget(GroupButtons, 4, 0);
+ GroupConstructors = new QGroupBox(myAction == 1 ?
+ tr("SMESH_MERGE_ELEMENTS") :
+ tr("SMESH_MERGE_NODES"),
+ this);
+
+ QButtonGroup* ButtonGroup = new QButtonGroup(this);
+ QHBoxLayout* GroupConstructorsLayout = new QHBoxLayout(GroupConstructors);
+ GroupConstructorsLayout->setSpacing(SPACING);
+ GroupConstructorsLayout->setMargin(MARGIN);
+
+ RadioButton = new QRadioButton(GroupConstructors);
+ RadioButton->setIcon(myAction == 1 ? IconMergeElems : IconMergeNodes);
+ RadioButton->setChecked(true);
+ GroupConstructorsLayout->addWidget(RadioButton);
+ ButtonGroup->addButton(RadioButton, 0);
/***************************************************************/
-
// Controls for mesh defining
- GroupMesh = new QGroupBox(this, "GroupMesh");
- GroupMesh->setTitle(tr("SMESH_SELECT_WHOLE_MESH"));
- 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);
-
- TextLabelName = new QLabel(GroupMesh, "TextLabelName");
- TextLabelName->setText(tr("SMESH_NAME"));
- GroupMeshLayout->addWidget(TextLabelName, 0, 0);
-
- SelectMeshButton = new QPushButton(GroupMesh, "SelectMeshButton");
- SelectMeshButton->setPixmap(IconSelect);
- GroupMeshLayout->addWidget(SelectMeshButton, 0, 1);
-
- LineEditMesh = new QLineEdit(GroupMesh, "LineEditMesh");
+ GroupMesh = new QGroupBox(tr("SMESH_SELECT_WHOLE_MESH"), this);
+ QHBoxLayout* GroupMeshLayout = new QHBoxLayout(GroupMesh);
+ GroupMeshLayout->setSpacing(SPACING);
+ GroupMeshLayout->setMargin(MARGIN);
+
+ TextLabelName = new QLabel(tr("SMESH_NAME"), GroupMesh);
+ SelectMeshButton = new QPushButton(GroupMesh);
+ SelectMeshButton->setIcon(IconSelect);
+ LineEditMesh = new QLineEdit(GroupMesh);
LineEditMesh->setReadOnly(true);
- GroupMeshLayout->addWidget(LineEditMesh, 0, 2);
- DlgLayout->addWidget(GroupMesh, 1, 0);
+ GroupMeshLayout->addWidget(TextLabelName);
+ GroupMeshLayout->addWidget(SelectMeshButton);
+ GroupMeshLayout->addWidget(LineEditMesh);
/***************************************************************/
+ // Controls for switch dialog behaviour
+ TypeBox = new QGroupBox( tr( "SMESH_MODE" ), this );
+ GroupType = new QButtonGroup( this );
+ QHBoxLayout* aTypeBoxLayout = new QHBoxLayout( TypeBox );
+ aTypeBoxLayout->setMargin( MARGIN );
+ aTypeBoxLayout->setSpacing( SPACING );
+
+ QRadioButton* rb1 = new QRadioButton( tr( "SMESH_AUTOMATIC" ), TypeBox );
+ QRadioButton* rb2 = new QRadioButton( tr( "SMESH_MANUAL" ), TypeBox );
+ GroupType->addButton( rb1, 0 );
+ GroupType->addButton( rb2, 1 );
+ aTypeBoxLayout->addWidget( rb1 );
+ aTypeBoxLayout->addWidget( rb2 );
+
+ myTypeId = 0;
+
+ /***************************************************************/
// Controls for coincident elements detecting
- GroupCoincident = new QGroupBox(this, "GroupCoincident");
- GroupCoincident->setTitle(tr("COINCIDENT_NODES"));
- GroupCoincident->setColumnLayout(0, Qt::Vertical);
- GroupCoincident->layout()->setSpacing(0);
- GroupCoincident->layout()->setMargin(0);
- GroupCoincidentLayout = new QGridLayout(GroupCoincident->layout());
- GroupCoincidentLayout->setAlignment(Qt::AlignTop);
- GroupCoincidentLayout->setSpacing(6);
- GroupCoincidentLayout->setMargin(11);
+ GroupCoincident = new QGroupBox(myAction == 1 ?
+ tr("COINCIDENT_ELEMENTS") :
+ tr("COINCIDENT_NODES"),
+ this);
+
+ QVBoxLayout* aCoincidentLayout = new QVBoxLayout(GroupCoincident);
+
+ GroupCoincident->setLayout(aCoincidentLayout);
+
+ QHBoxLayout* aSpinBoxLayout = new QHBoxLayout( GroupCoincident );
if (myAction == 0) { // case merge nodes
- TextLabelTolerance = new QLabel(GroupCoincident, "TextLabelTolerance");
- TextLabelTolerance->setText(tr("SMESH_TOLERANCE"));
- TextLabelTolerance->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Preferred));
- GroupCoincidentLayout->addWidget(TextLabelTolerance, 0, 0);
+ TextLabelTolerance = new QLabel(tr("SMESH_TOLERANCE"), GroupCoincident);
+ SpinBoxTolerance = new SMESHGUI_SpinBox(GroupCoincident);
+ SpinBoxTolerance->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed));
- SpinBoxTolerance = new SMESHGUI_SpinBox(GroupCoincident, "SpinBoxTolerance");
- GroupCoincidentLayout->addWidget(SpinBoxTolerance, 0, 1);
+ aSpinBoxLayout->addWidget(TextLabelTolerance);
+ aSpinBoxLayout->addWidget(SpinBoxTolerance);
+ aCoincidentLayout->addLayout(aSpinBoxLayout);
+ }
+ else {
+ TextLabelTolerance = 0;
+ SpinBoxTolerance = 0;
}
- DetectButton = new QPushButton(GroupCoincident, "DetectButton");
- DetectButton->setText(tr("DETECT"));
- DetectButton->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Minimum));
- GroupCoincidentLayout->addWidget(DetectButton, 0, 2);
+ GroupCoincidentWidget = new QWidget(GroupCoincident);
+ QGridLayout* GroupCoincidentLayout = new QGridLayout(GroupCoincidentWidget);
+ GroupCoincidentLayout->setSpacing(SPACING);
+ GroupCoincidentLayout->setMargin(MARGIN);
- ListCoincident = new QListBox(GroupCoincident, "ListCoincident");
- ListCoincident->setSelectionMode(QListBox::Extended);
- if (myAction == 0) // case merge nodes
- GroupCoincidentLayout->addMultiCellWidget(ListCoincident, 1, 3, 0, 1);
- else // case merge elements
- GroupCoincidentLayout->addMultiCellWidget(ListCoincident, 0, 3, 0, 1);
+ ListCoincident = new QListWidget(GroupCoincidentWidget);
+ ListCoincident->setSelectionMode(QListWidget::ExtendedSelection);
- QSpacerItem* spacer1 = new QSpacerItem(20, 21, QSizePolicy::Minimum, QSizePolicy::Expanding);
- GroupCoincidentLayout->addItem(spacer1, 1, 2);
+ DetectButton = new QPushButton(tr("DETECT"), GroupCoincidentWidget);
+ AddGroupButton = new QPushButton(tr("SMESH_BUT_ADD"), GroupCoincidentWidget);
+ RemoveGroupButton = new QPushButton(tr("SMESH_BUT_REMOVE"), GroupCoincidentWidget);
- AddGroupButton = new QPushButton(GroupCoincident, "AddGroupButton");
- AddGroupButton->setText(tr("SMESH_BUT_ADD"));
- GroupCoincidentLayout->addWidget(AddGroupButton, 2, 2);
+ SelectAllCB = new QCheckBox(tr("SELECT_ALL"), GroupCoincidentWidget);
- RemoveGroupButton = new QPushButton(GroupCoincident, "RemoveGroupButton");
- RemoveGroupButton->setText(tr("SMESH_BUT_REMOVE"));
- GroupCoincidentLayout->addWidget(RemoveGroupButton, 3, 2);
+ if (myAction == 0)
+ GroupCoincidentWidget->hide();
+ else
+ GroupCoincident->hide();
- SelectAllCB = new QCheckBox(GroupCoincident, "SelectAllCB");
- SelectAllCB->setText(tr("SELECT_ALL"));
- GroupCoincidentLayout->addWidget(SelectAllCB, 4, 0);
+ GroupCoincidentLayout->addWidget(ListCoincident, 0, 0, 4, 2);
+ GroupCoincidentLayout->addWidget(DetectButton, 0, 2);
+ GroupCoincidentLayout->addWidget(AddGroupButton, 2, 2);
+ GroupCoincidentLayout->addWidget(RemoveGroupButton, 3, 2);
+ GroupCoincidentLayout->addWidget(SelectAllCB, 4, 0, 1, 3);
+ GroupCoincidentLayout->setRowMinimumHeight(1, 10);
+ GroupCoincidentLayout->setRowStretch(1, 5);
- DlgLayout->addWidget(GroupCoincident, 2, 0);
+ aCoincidentLayout->addWidget(GroupCoincidentWidget);
/***************************************************************/
-
// Controls for editing the selected group
- GroupEdit = new QGroupBox(this, "GroupEdit");
- GroupEdit->setTitle(tr("EDIT_SELECTED_GROUP"));
- GroupEdit->setColumnLayout(0, Qt::Vertical);
- GroupEdit->layout()->setSpacing(0);
- GroupEdit->layout()->setMargin(0);
- GroupEditLayout = new QGridLayout(GroupEdit->layout());
- GroupEditLayout->setAlignment(Qt::AlignTop);
- GroupEditLayout->setSpacing(6);
- GroupEditLayout->setMargin(11);
-
- ListEdit = new QListBox(GroupEdit, "ListEdit");
- ListEdit->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred));
- ListEdit->setRowMode(QListBox::FixedNumber);
- ListEdit->setMinimumHeight(ListEdit->sizeHint().height());
- ListEdit->setHScrollBarMode(QScrollView::AlwaysOn);
- ListEdit->setVScrollBarMode(QScrollView::AlwaysOff);
- ListEdit->setSelectionMode(QListBox::Extended);
- GroupEditLayout->addMultiCellWidget(ListEdit, 0, 1, 0, 0);
-
- AddElemButton = new QPushButton(GroupEdit, "AddElemButton");
- AddElemButton->setPixmap(IconAdd);
- GroupEditLayout->addWidget(AddElemButton, 0, 1);
-
- RemoveElemButton = new QPushButton(GroupEdit, "RemoveElemButton");
- RemoveElemButton->setPixmap(IconRemove);
+ GroupEdit = new QGroupBox(tr("EDIT_SELECTED_GROUP"), this);
+ QGridLayout* GroupEditLayout = new QGridLayout(GroupEdit);
+ GroupEditLayout->setSpacing(SPACING);
+ GroupEditLayout->setMargin(MARGIN);
+
+ ListEdit = new QListWidget(GroupEdit);
+ //ListEdit->setRowMode(QListBox::FixedNumber);
+ //ListEdit->setHScrollBarMode(QScrollView::AlwaysOn);
+ //ListEdit->setVScrollBarMode(QScrollView::AlwaysOff);
+ ListEdit->setFlow( QListView::LeftToRight );
+ ListEdit->setSelectionMode(QListWidget::ExtendedSelection);
+
+ AddElemButton = new QPushButton(GroupEdit);
+ AddElemButton->setIcon(IconAdd);
+ RemoveElemButton = new QPushButton(GroupEdit);
+ RemoveElemButton->setIcon(IconRemove);
+ SetFirstButton = new QPushButton(GroupEdit);
+ SetFirstButton->setIcon(QPixmap(IconFirst));
+
+ GroupEditLayout->addWidget(ListEdit, 0, 0, 2, 1);
+ GroupEditLayout->addWidget(AddElemButton, 0, 1);
GroupEditLayout->addWidget(RemoveElemButton, 0, 2);
+ GroupEditLayout->addWidget(SetFirstButton, 1, 1, 1, 2);
- SetFirstButton = new QPushButton(GroupEdit, "SetFirstButton");
- SetFirstButton->setIconSet(QPixmap(IconFirst));
- SetFirstButton->setSizePolicy(QSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed));
- GroupEditLayout->addMultiCellWidget(SetFirstButton, 1, 1, 1, 2);
+ GroupEdit->hide();
- DlgLayout->addWidget(GroupEdit, 3, 0);
+ /***************************************************************/
+ GroupButtons = new QGroupBox(this);
+ QHBoxLayout* GroupButtonsLayout = new QHBoxLayout(GroupButtons);
+ GroupButtonsLayout->setSpacing(SPACING);
+ GroupButtonsLayout->setMargin(MARGIN);
+
+ buttonOk = new QPushButton(tr("SMESH_BUT_APPLY_AND_CLOSE"), GroupButtons);
+ buttonOk->setAutoDefault(true);
+ buttonOk->setDefault(true);
+ buttonApply = new QPushButton(tr("SMESH_BUT_APPLY"), GroupButtons);
+ buttonApply->setAutoDefault(true);
+ buttonCancel = new QPushButton(tr("SMESH_BUT_CLOSE"), GroupButtons);
+ buttonCancel->setAutoDefault(true);
+ buttonHelp = new QPushButton(tr("SMESH_BUT_HELP"), GroupButtons);
+ buttonHelp->setAutoDefault(true);
+
+ GroupButtonsLayout->addWidget(buttonOk);
+ GroupButtonsLayout->addSpacing(10);
+ GroupButtonsLayout->addWidget(buttonApply);
+ GroupButtonsLayout->addSpacing(10);
+ GroupButtonsLayout->addStretch();
+ GroupButtonsLayout->addWidget(buttonCancel);
+ GroupButtonsLayout->addWidget(buttonHelp);
+
+ /***************************************************************/
+ DlgLayout->addWidget(GroupConstructors);
+ DlgLayout->addWidget(GroupMesh);
+ DlgLayout->addWidget(TypeBox);
+ DlgLayout->addWidget(GroupCoincident);
+ DlgLayout->addWidget(GroupEdit);
+ DlgLayout->addWidget(GroupButtons);
+
+ this->resize(10,10);
Init(); // Initialisations
}
//=================================================================================
SMESHGUI_EditMeshDlg::~SMESHGUI_EditMeshDlg()
{
- // no need to delete child widgets, Qt does it all for us
delete myIdPreview;
}
void SMESHGUI_EditMeshDlg::Init()
{
if (myAction == 0) {
- SpinBoxTolerance->RangeStepAndValidator(0.0, COORD_MAX, 0.1, 3);
+ SpinBoxTolerance->RangeStepAndValidator(0.0, COORD_MAX, 0.00001, "len_tol_precision");
SpinBoxTolerance->SetValue(1e-05);
}
- RadioButton->setChecked(TRUE);
+ RadioButton->setChecked(true);
+
+ GroupType->button(0)->setChecked(true);
myEditCurrentArgument = (QWidget*)LineEditMesh;
mySMESHGUI->SetActiveDialogBox((QDialog*)this);
myIsBusy = false;
- // Costruction of the logical filter
- SMESH_TypeFilter* aMeshOrSubMeshFilter = new SMESH_TypeFilter (MESHorSUBMESH);
- SMESH_TypeFilter* aSmeshGroupFilter = new SMESH_TypeFilter (GROUP);
-
- QPtrList<SUIT_SelectionFilter> aListOfFilters;
- if (aMeshOrSubMeshFilter) aListOfFilters.append(aMeshOrSubMeshFilter);
- if (aSmeshGroupFilter) aListOfFilters.append(aSmeshGroupFilter);
-
- myMeshOrSubMeshOrGroupFilter =
- new SMESH_LogicalFilter (aListOfFilters, SMESH_LogicalFilter::LO_OR);
-
/* signals and slots connections */
connect(buttonOk, SIGNAL(clicked()), this, SLOT(ClickOnOk()));
connect(buttonCancel, SIGNAL(clicked()), this, SLOT(ClickOnCancel()));
connect(SelectMeshButton, SIGNAL (clicked()), this, SLOT(SetEditCurrentArgument()));
connect(DetectButton, SIGNAL (clicked()), this, SLOT(onDetect()));
- connect(ListCoincident, SIGNAL (selectionChanged()), this, SLOT(onSelectGroup()));
+ connect(ListCoincident, SIGNAL (itemSelectionChanged()), this, SLOT(onSelectGroup()));
connect(AddGroupButton, SIGNAL (clicked()), this, SLOT(onAddGroup()));
connect(RemoveGroupButton, SIGNAL (clicked()), this, SLOT(onRemoveGroup()));
connect(SelectAllCB, SIGNAL(toggled(bool)), this, SLOT(onSelectAll(bool)));
- connect(ListEdit, SIGNAL (selectionChanged()), this, SLOT(onSelectElementFromGroup()));
+ connect(ListEdit, SIGNAL (itemSelectionChanged()), this, SLOT(onSelectElementFromGroup()));
connect(AddElemButton, SIGNAL (clicked()), this, SLOT(onAddElement()));
connect(RemoveElemButton, SIGNAL (clicked()), this, SLOT(onRemoveElement()));
connect(SetFirstButton, SIGNAL( clicked() ), this, SLOT( onSetFirst() ) );
+ connect(GroupType, SIGNAL(buttonClicked(int)), this, SLOT(onTypeChanged(int)));
connect(mySMESHGUI, SIGNAL (SignalDeactivateActiveDialog()), this, SLOT(DeactivateActiveDialog()));
connect(mySelectionMgr, SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument()));
/* to close dialog if study change */
connect(mySMESHGUI, SIGNAL (SignalCloseAllDialogs()), this, SLOT(ClickOnCancel()));
- this->show(); /* displays Dialog */
-
- SetFirstButton->setEnabled(false);
- buttonOk->setEnabled(false);
- buttonApply->setEnabled(false);
-
// Init Mesh field from selection
SelectionIntoArgument();
- // dialog customization
- if (myAction == 1) {
- setCaption(tr("SMESH_MERGE_ELEMENTS"));
- GroupConstructors->setTitle(tr("SMESH_MERGE_ELEMENTS"));
- GroupCoincident->setTitle(tr("COINCIDENT_ELEMENTS"));
- }
-
- myHelpFileName = "merging_elements_page.html";
+ // Update Buttons
+ updateControls();
+
+ if (myAction == 0)
+ myHelpFileName = "merging_nodes_page.html";
+ else
+ myHelpFileName = "merging_elements_page.html";
}
//=================================================================================
// purpose :
//=================================================================================
void SMESHGUI_EditMeshDlg::FindGravityCenter(TColStd_MapOfInteger & theElemsIdMap,
- list< gp_XYZ > & theGrCentersXYZ)
+ std::list< gp_XYZ > & theGrCentersXYZ)
{
if (!myActor)
return;
return false;
try {
- SMESH::SMESH_MeshEditor_var aMeshEditor = myMesh->GetMeshEditor();
+ if (myTypeId == 0)
+ onDetect();
- QApplication::setOverrideCursor(Qt::waitCursor);
+ SUIT_OverrideCursor aWaitCursor;
+ SMESH::SMESH_MeshEditor_var aMeshEditor = myMesh->GetMeshEditor();
SMESH::long_array_var anIds = new SMESH::long_array;
SMESH::array_of_long_array_var aGroupsOfElements = new SMESH::array_of_long_array;
+ if ( ListCoincident->count() == 0) {
+ if (myAction == 0)
+ SUIT_MessageBox::warning(this,
+ tr("SMESH_WARNING"),
+ tr("SMESH_NO_NODES_DETECTED"));
+ else
+ SUIT_MessageBox::warning(this,
+ tr("SMESH_WARNING"),
+ tr("SMESH_NO_ELEMENTS_DETECTED"));
+ return false;
+ }
+
aGroupsOfElements->length(ListCoincident->count());
- QListBoxItem* item = ListCoincident->firstItem();
int anArrayNum = 0;
- while (item) {
- QStringList aListIds = QStringList("");
- aListIds = QStringList::split(" ", item->text(), false);
+ for (int i = 0; i < ListCoincident->count(); i++) {
+ QStringList aListIds = ListCoincident->item(i)->text().split(" ", QString::SkipEmptyParts);
anIds->length(aListIds.count());
for (int i = 0; i < aListIds.count(); i++)
anIds[i] = aListIds[i].toInt();
aGroupsOfElements[anArrayNum++] = anIds.inout();
- item = item->next();
}
if( myAction == 0 )
else
aMeshEditor->MergeElements (aGroupsOfElements.inout());
- QApplication::restoreOverrideCursor();
+ if ( myTypeId == 0 ) {
+ if (myAction ==0)
+ SUIT_MessageBox::information(SMESHGUI::desktop(), tr("SMESH_INFORMATION"),
+ tr("SMESH_MERGED_NODES").arg(QString::number(ListCoincident->count()).toLatin1().data()));
+ else
+ SUIT_MessageBox::information(SMESHGUI::desktop(), tr("SMESH_INFORMATION"),
+ tr("SMESH_MERGED_ELEMENTS").arg(QString::number(ListCoincident->count()).toLatin1().data()));
+ }
+
+
} catch(...) {
}
SMESH::UpdateView();
-
- onDetect();
+ SMESHGUI::Modified();
+
return true;
}
void SMESHGUI_EditMeshDlg::ClickOnCancel()
{
myIdPreview->SetPointsLabeled(false);
+ SMESH::SetPointRepresentation(false);
+ disconnect(mySelectionMgr, 0, this, 0);
+ disconnect(mySMESHGUI, 0, this, 0);
+ mySMESHGUI->ResetState();
+
mySelectionMgr->clearFilters();
//mySelectionMgr->clearSelected();
- SMESH::SetPointRepresentation(false);
+
if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
aViewWindow->SetSelectionMode(ActorSelection);
- disconnect(mySelectionMgr, 0, this, 0);
- mySMESHGUI->ResetState();
+
reject();
}
if (app)
app->onHelpContextModule(mySMESHGUI ? app->moduleName(mySMESHGUI->moduleName()) : QString(""), myHelpFileName);
else {
- QString platform;
+ QString platform;
#ifdef WIN32
- platform = "winapplication";
+ platform = "winapplication";
#else
- platform = "application";
+ platform = "application";
#endif
- SUIT_MessageBox::warn1(0, QObject::tr("WRN_WARNING"),
- QObject::tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE").
- arg(app->resourceMgr()->stringValue("ExternalBrowser", platform)).arg(myHelpFileName),
- QObject::tr("BUT_OK"));
+ SUIT_MessageBox::warning(this, tr("WRN_WARNING"),
+ tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE").
+ arg(app->resourceMgr()->stringValue("ExternalBrowser",
+ platform)).
+ arg(myHelpFileName));
}
}
//=================================================================================
void SMESHGUI_EditMeshDlg::onEditGroup()
{
- int nbSel = 0;
- for (int i = 0; i < ListCoincident->count(); i++) {
- if (ListCoincident->isSelected(i))
- nbSel++;
- if (nbSel > 1) {
- ListEdit->clear();
- return;
- }
- }
- if (nbSel == 0) {
+ QList<QListWidgetItem*> selItems = ListCoincident->selectedItems();
+ if ( selItems.count() != 1 ) {
ListEdit->clear();
return;
}
- QString aNewIds = "";
+ QStringList aNewIds;
- QListBoxItem* anItem;
- for (anItem = ListEdit->firstItem(); anItem != 0; anItem = anItem->next())
- aNewIds+=QString(" %1").arg(anItem->text());
+ for (int i = 0; i < ListEdit->count(); i++ )
+ aNewIds.append(ListEdit->item(i)->text());
- ListCoincident->changeItem(aNewIds, ListCoincident->currentItem());
- ListCoincident->setSelected(ListCoincident->currentItem(), true);
-
+ ListCoincident->clearSelection();
+ selItems.first()->setText(aNewIds.join(" "));
+ selItems.first()->setSelected(true);
}
//=================================================================================
{
if (ListEdit->count() == 0)
SetFirstButton->setEnabled(false);
- bool enable = !(myMesh->_is_nil()) && ListCoincident->count();
+ bool enable = !(myMesh->_is_nil()) && (ListCoincident->count() || (myTypeId == 0));
buttonOk->setEnabled(enable);
buttonApply->setEnabled(enable);
}
return;
try {
+ SUIT_OverrideCursor aWaitCursor;
SMESH::SMESH_MeshEditor_var aMeshEditor = myMesh->GetMeshEditor();
- QApplication::setOverrideCursor(Qt::waitCursor);
ListCoincident->clear();
ListEdit->clear();
switch (myAction) {
case 0 :
if(!mySubMeshOrGroup->_is_nil())
- aMeshEditor->FindCoincidentNodesOnPart(mySubMeshOrGroup, SpinBoxTolerance->GetValue(), aGroupsArray);
+ aMeshEditor->FindCoincidentNodesOnPart(mySubMeshOrGroup, SpinBoxTolerance->GetValue(), aGroupsArray);
else
- aMeshEditor->FindCoincidentNodes(SpinBoxTolerance->GetValue(), aGroupsArray);
+ aMeshEditor->FindCoincidentNodes(SpinBoxTolerance->GetValue(), aGroupsArray);
break;
case 1 :
if(!mySubMeshOrGroup->_is_nil())
- aMeshEditor->FindEqualElements(mySubMeshOrGroup, aGroupsArray);
+ aMeshEditor->FindEqualElements(mySubMeshOrGroup, aGroupsArray);
else
- aMeshEditor->FindEqualElements(myMesh, aGroupsArray);
+ aMeshEditor->FindEqualElements(myMesh, aGroupsArray);
break;
}
- QListBoxItem* anItem = 0;
for (int i = 0; i < aGroupsArray->length(); i++) {
SMESH::long_array& aGroup = aGroupsArray[i];
- QString anIDs;
+ QStringList anIDs;
for (int j = 0; j < aGroup.length(); j++)
- anIDs+=QString(" %1").arg(aGroup[j]);
+ anIDs.append(QString::number(aGroup[j]));
- anItem = new QListBoxText(anIDs);
- ListCoincident->insertItem(anItem);
+ ListCoincident->addItem(anIDs.join(" "));
}
- QApplication::restoreOverrideCursor();
- } catch(...) {
+ } catch(...) {
}
- ListCoincident->selectAll(true);
+ ListCoincident->selectAll();
updateControls();
}
ListEdit->clear();
TColStd_MapOfInteger anIndices;
- QListBoxItem* anItem;
- int NbOfSelected = 0;
- for (anItem = ListCoincident->firstItem(); anItem != 0; anItem = anItem->next()) {
- if (anItem->isSelected()) {
- QStringList aListIds = QStringList("");
- aListIds = QStringList::split(" ", anItem->text(), false);
- for (int i = 0; i < aListIds.count(); i++)
- anIndices.Add(aListIds[i].toInt());
- NbOfSelected++;
- ListEdit->clear();
- if (NbOfSelected == 1) {
- ListEdit->insertStringList(aListIds);
- ListEdit->selectAll(true);
- }
- }
+ QList<QListWidgetItem*> selItems = ListCoincident->selectedItems();
+ QListWidgetItem* anItem;
+ QStringList aListIds;
+
+ ListEdit->clear();
+
+ foreach(anItem, selItems) {
+ aListIds = anItem->text().split(" ", QString::SkipEmptyParts);
+ for (int i = 0; i < aListIds.count(); i++)
+ anIndices.Add(aListIds[i].toInt());
}
+
+ if (selItems.count() == 1) {
+ ListEdit->addItems(aListIds);
+ ListEdit->selectAll();
+ }
+
mySelector->AddOrRemoveIndex(myActor->getIO(), anIndices, false);
SALOME_ListIO aList;
aList.Append(myActor->getIO());
myIdPreview->SetPointsLabeled(!anIndices.IsEmpty(), myActor->GetVisibility());
}
else {
- list< gp_XYZ > aGrCentersXYZ;
+ std::list< gp_XYZ > aGrCentersXYZ;
FindGravityCenter(anIndices, aGrCentersXYZ);
myIdPreview->SetElemsData( anIndices, aGrCentersXYZ);
myIdPreview->SetPointsLabeled(!anIndices.IsEmpty(), myActor->GetVisibility());
//=================================================================================
void SMESHGUI_EditMeshDlg::onSelectAll (bool isToggled)
{
- ListCoincident->selectAll(isToggled);
+ if ( isToggled )
+ ListCoincident->selectAll();
+ else
+ ListCoincident->clearSelection();
}
//=================================================================================
if (myIsBusy || !myActor)
return;
- int nbSel = 0;
TColStd_MapOfInteger anIndices;
- QListBoxItem* anItem;
- for (anItem = ListEdit->firstItem(); anItem != 0; anItem = anItem->next()) {
- if (anItem->isSelected()) {
- int anId = anItem->text().toInt();
- anIndices.Add(anId);
- nbSel++;
- if (nbSel == 1)
- SetFirstButton->setEnabled(true);
- }
- }
- if (nbSel == 0 || nbSel > 1)
- SetFirstButton->setEnabled(false);
+ QList<QListWidgetItem*> selItems = ListEdit->selectedItems();
+ QListWidgetItem* anItem;
+
+ foreach(anItem, selItems)
+ anIndices.Add(anItem->text().toInt());
+
+ SetFirstButton->setEnabled(selItems.count() == 1);
mySelector->AddOrRemoveIndex(myActor->getIO(), anIndices, false);
SALOME_ListIO aList;
myIdPreview->SetPointsLabeled(!anIndices.IsEmpty(), myActor->GetVisibility());
}
else {
- list< gp_XYZ > aGrCentersXYZ;
+ std::list< gp_XYZ > aGrCentersXYZ;
FindGravityCenter(anIndices, aGrCentersXYZ);
myIdPreview->SetElemsData(anIndices, aGrCentersXYZ);
myIdPreview->SetPointsLabeled(!anIndices.IsEmpty(), myActor->GetVisibility());
return;
QString anIDs = "";
- SMESH::GetNameOfSelectedNodes(mySelector, myActor->getIO(), anIDs);
+ int aNbElements = 0;
+ aNbElements = SMESH::GetNameOfSelectedNodes(mySelector, myActor->getIO(), anIDs);
+
+ if (aNbElements < 1)
+ return;
ListCoincident->clearSelection();
- QListBoxItem* anItem = new QListBoxText(anIDs);
- ListCoincident->insertItem(anItem);
+ ListCoincident->addItem(anIDs);
int nbGroups = ListCoincident->count();
if (nbGroups) {
- ListCoincident->setCurrentItem(nbGroups-1);
- ListCoincident->setSelected(nbGroups-1, true);
+ ListCoincident->setCurrentRow(nbGroups-1);
+ ListCoincident->item(nbGroups-1)->setSelected(true);
}
else {
- ListCoincident->setCurrentItem(0);
- ListCoincident->setSelected(0, true);
+ // VSR ? this code seems to be never executed!!!
+ ListCoincident->setCurrentRow(0);
+ //ListCoincident->setSelected(0, true); // VSR: no items - no selection
}
updateControls();
return;
myIsBusy = true;
- for (int i = ListCoincident->count(); i > 0; i--)
- if (ListCoincident->isSelected(i-1))
- ListCoincident->removeItem(i-1);
+ QList<QListWidgetItem*> selItems = ListCoincident->selectedItems();
+ QListWidgetItem* anItem;
+
+ foreach(anItem, selItems)
+ delete anItem;
ListEdit->clear();
updateControls();
if (aNbNnodes < 1)
return;
- QStringList aNodes = QStringList::split(" ", aListStr);
- QListBoxItem* anItem = 0;
+ QStringList aNodes = aListStr.split(" ", QString::SkipEmptyParts);
for (QStringList::iterator it = aNodes.begin(); it != aNodes.end(); ++it) {
- anItem = ListEdit->findItem(*it, Qt::ExactMatch);
- if (!anItem) {
- anItem = new QListBoxText(*it);
- ListEdit->insertItem(anItem);
+ QList<QListWidgetItem*> found = ListEdit->findItems(*it, Qt::MatchExactly);
+ if ( found.count() == 0 ) {
+ QListWidgetItem* anItem = new QListWidgetItem(*it);
+ ListEdit->addItem(anItem);
+ anItem->setSelected(true);
+ }
+ else {
+ QListWidgetItem* anItem;
+ foreach(anItem, found) anItem->setSelected(true);
}
- ListEdit->setSelected(anItem, true);
}
myIsBusy = false;
return;
myIsBusy = true;
- for (int i = ListEdit->count(); i > 0; i--)
- if (ListEdit->isSelected(i-1))
- ListEdit->removeItem(i-1);
+ QList<QListWidgetItem*> selItems = ListEdit->selectedItems();
+ QListWidgetItem* anItem;
+ foreach(anItem, selItems)
+ delete anItem;
+
myIsBusy = false;
onEditGroup();
}
return;
myIsBusy = true;
- QListBoxItem* anItem;
- for (anItem = ListEdit->firstItem(); anItem != 0; anItem = anItem->next()) {
- if (anItem->isSelected()) {
- ListEdit->takeItem(anItem);
- ListEdit->insertItem(anItem, 0);
- }
+ QList<QListWidgetItem*> selItems = ListEdit->selectedItems();
+ QListWidgetItem* anItem;
+
+ foreach(anItem, selItems) {
+ ListEdit->takeItem(ListEdit->row(anItem));
+ ListEdit->insertItem(0, anItem);
}
myIsBusy = false;
SMESH::SetPointRepresentation(false);
if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
aViewWindow->SetSelectionMode(ActorSelection);
- mySelectionMgr->installFilter(myMeshOrSubMeshOrGroupFilter);
+ if (myTypeId == 1)
+ mySelectionMgr->installFilter(myMeshOrSubMeshOrGroupFilter);
}
myEditCurrentArgument->setFocus();
myActor = 0;
int nbSel = SMESH::GetNameOfSelectedIObjects(mySelectionMgr, aString);
- if (nbSel != 1)
+ if (nbSel != 1) {
+ myIdPreview->SetPointsLabeled(false);
+ SMESH::SetPointRepresentation(false);
+ mySelectionMgr->clearFilters();
+ if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
+ aViewWindow->SetSelectionMode(ActorSelection);
return;
+ }
SALOME_ListIO aList;
- mySelectionMgr->selectedObjects(aList, SVTK_Viewer::Type());
+ mySelectionMgr->selectedObjects(aList);
Handle(SALOME_InteractiveObject) IO = aList.First();
myMesh = SMESH::GetMeshByIO(IO);
if (myMesh->_is_nil())
return;
+
+ LineEditMesh->setText(aString);
myActor = SMESH::FindActorByEntry(IO->getEntry());
if (!myActor)
myActor = SMESH::FindActorByObject(myMesh);
- if(!myActor)
- return;
- mySubMeshOrGroup = SMESH::SMESH_IDSource::_nil();
-
- if ((!SMESH::IObjectToInterface<SMESH::SMESH_subMesh>(IO)->_is_nil() || //SUBMESH OR GROUP
- !SMESH::IObjectToInterface<SMESH::SMESH_GroupBase>(IO)->_is_nil()) &&
- !SMESH::IObjectToInterface<SMESH::SMESH_IDSource>(IO)->_is_nil())
- mySubMeshOrGroup = SMESH::IObjectToInterface<SMESH::SMESH_IDSource>(IO);
-
- LineEditMesh->setText(aString);
-
- if (myAction == 0) {
- SMESH::SetPointRepresentation(true);
- if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
- aViewWindow->SetSelectionMode(NodeSelection);
+ if ( myActor && myTypeId ==1 ) {
+ mySubMeshOrGroup = SMESH::SMESH_IDSource::_nil();
+ mySelectionMgr->installFilter(myMeshOrSubMeshOrGroupFilter);
+
+ if ((!SMESH::IObjectToInterface<SMESH::SMESH_subMesh>(IO)->_is_nil() || //SUBMESH OR GROUP
+ !SMESH::IObjectToInterface<SMESH::SMESH_GroupBase>(IO)->_is_nil()) &&
+ !SMESH::IObjectToInterface<SMESH::SMESH_IDSource>(IO)->_is_nil())
+ mySubMeshOrGroup = SMESH::IObjectToInterface<SMESH::SMESH_IDSource>(IO);
+
+ if (myAction == 0) {
+ SMESH::SetPointRepresentation(true);
+ if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
+ aViewWindow->SetSelectionMode(NodeSelection);
+ }
+ else
+ if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
+ aViewWindow->SetSelectionMode(CellSelection);
}
- else
- if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
- aViewWindow->SetSelectionMode(CellSelection);
+
+ updateControls();
}
}
{
if (GroupConstructors->isEnabled()) {
GroupConstructors->setEnabled(false);
+ TypeBox->setEnabled(false);
GroupMesh->setEnabled(false);
GroupCoincident->setEnabled(false);
GroupEdit->setEnabled(false);
mySMESHGUI->ResetState();
mySMESHGUI->SetActiveDialogBox(0);
}
+
+ mySelectionMgr->clearSelected();
+ disconnect(mySelectionMgr, 0, this, 0);
}
//=================================================================================
/* Emit a signal to deactivate the active dialog */
mySMESHGUI->EmitSignalDeactivateDialog();
GroupConstructors->setEnabled(true);
+ TypeBox->setEnabled(true);
GroupMesh->setEnabled(true);
GroupCoincident->setEnabled(true);
GroupEdit->setEnabled(true);
GroupButtons->setEnabled(true);
+ connect(mySelectionMgr, SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument()));
mySMESHGUI->SetActiveDialogBox((QDialog*)this);
SelectionIntoArgument();
}
void SMESHGUI_EditMeshDlg::closeEvent(QCloseEvent*)
{
/* same than click on cancel button */
- this->ClickOnCancel();
+ ClickOnCancel();
}
//=======================================================================
if ( e->isAccepted() )
return;
- if ( e->key() == Key_F1 )
- {
- e->accept();
- ClickOnHelp();
+ if ( e->key() == Qt::Key_F1 ) {
+ e->accept();
+ ClickOnHelp();
+ }
+}
+
+//=================================================================================
+// function : onTypeChanged()
+// purpose : the type radio button management
+//=================================================================================
+void SMESHGUI_EditMeshDlg::onTypeChanged (int id)
+{
+ if (myTypeId == id)
+ return;
+
+ myTypeId = id;
+ switch (id) {
+ case 0:
+ myIdPreview->SetPointsLabeled(false);
+ SMESH::SetPointRepresentation(false);
+ if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
+ aViewWindow->SetSelectionMode(ActorSelection);
+ mySelectionMgr->clearFilters();
+ if (myAction == 0)
+ GroupCoincidentWidget->hide();
+ else
+ GroupCoincident->hide();
+ GroupEdit->hide();
+ break;
+ case 1:
+ SMESH::UpdateView();
+
+ // Costruction of the logical filter
+ SMESH_TypeFilter* aMeshOrSubMeshFilter = new SMESH_TypeFilter (MESHorSUBMESH);
+ SMESH_TypeFilter* aSmeshGroupFilter = new SMESH_TypeFilter (GROUP);
+
+ QList<SUIT_SelectionFilter*> aListOfFilters;
+ if (aMeshOrSubMeshFilter) aListOfFilters.append(aMeshOrSubMeshFilter);
+ if (aSmeshGroupFilter) aListOfFilters.append(aSmeshGroupFilter);
+
+ myMeshOrSubMeshOrGroupFilter =
+ new SMESH_LogicalFilter (aListOfFilters, SMESH_LogicalFilter::LO_OR);
+
+ if (myAction == 0) {
+ GroupCoincidentWidget->show();
+ SMESH::SetPointRepresentation(true);
+ if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
+ aViewWindow->SetSelectionMode(NodeSelection);
+ }
+ else {
+ GroupCoincident->show();
+ if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
+ aViewWindow->SetSelectionMode(CellSelection);
}
+ GroupEdit->show();
+ break;
+ }
+ updateControls();
+
+ qApp->processEvents();
+ updateGeometry();
+ resize(10,10);
+
+ SelectionIntoArgument();
}