From 2a79c9e2df61f324757453920a7a880ae6b17acb Mon Sep 17 00:00:00 2001 From: vtn Date: Thu, 29 Nov 2007 13:27:03 +0000 Subject: [PATCH 1/1] NPAL16812: Elements Info dialog is added --- Makefile.in | 1 + resources/SMESH_en.xml | 10 +- resources/mesh_whatis.png | Bin 0 -> 414 bytes src/SMESHGUI/Makefile.in | 2 + src/SMESHGUI/SMESHGUI.cxx | 13 + src/SMESHGUI/SMESHGUI_WhatIsDlg.cxx | 626 ++++++++++++++++++++++++++++ src/SMESHGUI/SMESHGUI_WhatIsDlg.h | 130 ++++++ src/SMESHGUI/SMESH_images.po | 3 + src/SMESHGUI/SMESH_msg_en.po | 33 +- 9 files changed, 816 insertions(+), 2 deletions(-) create mode 100755 resources/mesh_whatis.png create mode 100755 src/SMESHGUI/SMESHGUI_WhatIsDlg.cxx create mode 100755 src/SMESHGUI/SMESHGUI_WhatIsDlg.h diff --git a/Makefile.in b/Makefile.in index e1fc2839f..56914c46c 100644 --- a/Makefile.in +++ b/Makefile.in @@ -62,6 +62,7 @@ mesh_hypo_edit.png \ mesh_info.png \ advanced_mesh_info.png \ standard_mesh_info.png \ +mesh_whatis.png \ mesh_init.png \ mesh_length.png \ mesh_length_2d.png \ diff --git a/resources/SMESH_en.xml b/resources/SMESH_en.xml index 6702d3e21..5cc16ddaf 100644 --- a/resources/SMESH_en.xml +++ b/resources/SMESH_en.xml @@ -70,6 +70,7 @@ + @@ -178,7 +179,8 @@ - + + @@ -194,6 +196,7 @@ + @@ -207,6 +210,7 @@ + @@ -229,6 +233,7 @@ + @@ -284,6 +289,7 @@ + @@ -341,6 +347,7 @@ + @@ -414,6 +421,7 @@ + diff --git a/resources/mesh_whatis.png b/resources/mesh_whatis.png new file mode 100755 index 0000000000000000000000000000000000000000..1b39f3544c0fc3c9c78be530a9531b9e5e767c32 GIT binary patch literal 414 zcmV;P0b%}$P)-FE+k8vD%S%l@c6q;wtN;K207*qo IM6N<$f;I-X^8f$< literal 0 HcmV?d00001 diff --git a/src/SMESHGUI/Makefile.in b/src/SMESHGUI/Makefile.in index f15154112..03b996a2d 100644 --- a/src/SMESHGUI/Makefile.in +++ b/src/SMESHGUI/Makefile.in @@ -66,6 +66,7 @@ LIB_SRC = SMESHGUI.cxx \ SMESHGUI_RemoveElementsDlg.cxx \ SMESHGUI_MeshInfosDlg.cxx \ SMESHGUI_StandardMeshInfosDlg.cxx \ + SMESHGUI_WhatIsDlg.cxx \ SMESHGUI_Preferences_ColorDlg.cxx \ SMESHGUI_Preferences_ScalarBarDlg.cxx \ SMESHGUI_Preferences_SelectionDlg.cxx \ @@ -131,6 +132,7 @@ LIB_MOC = \ SMESHGUI_RemoveElementsDlg.h \ SMESHGUI_MeshInfosDlg.h \ SMESHGUI_StandardMeshInfosDlg.h \ + SMESHGUI_WhatIsDlg.h \ SMESHGUI_Preferences_ColorDlg.h \ SMESHGUI_Preferences_ScalarBarDlg.h \ SMESHGUI_Preferences_SelectionDlg.h \ diff --git a/src/SMESHGUI/SMESHGUI.cxx b/src/SMESHGUI/SMESHGUI.cxx index 0fa2fa1f2..10072eced 100644 --- a/src/SMESHGUI/SMESHGUI.cxx +++ b/src/SMESHGUI/SMESHGUI.cxx @@ -35,6 +35,7 @@ #include "SMESHGUI_RemoveElementsDlg.h" #include "SMESHGUI_MeshInfosDlg.h" #include "SMESHGUI_StandardMeshInfosDlg.h" +#include "SMESHGUI_WhatIsDlg.h" #include "SMESHGUI_Preferences_ColorDlg.h" #include "SMESHGUI_Preferences_ScalarBarDlg.h" #include "SMESHGUI_Preferences_SelectionDlg.h" @@ -1791,6 +1792,13 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) break; } + case 903: // WHAT IS + { + EmitSignalDeactivateDialog(); + new SMESHGUI_WhatIsDlg( this, "", false); + break; + } + case 1100: // EDIT HYPOTHESIS { if(checkLock(aStudy)) break; @@ -2374,6 +2382,7 @@ void SMESHGUI::initialize( CAM_Application* app ) createSMESHAction( 813, "DEL_GROUP", "ICON_DEL_GROUP" ); createSMESHAction( 900, "ADV_INFO", "ICON_ADV_INFO" ); createSMESHAction( 902, "STD_INFO", "ICON_STD_INFO" ); + createSMESHAction( 903, "WHAT_IS", "ICON_WHAT_IS" ); createSMESHAction( 6001, "LENGTH", "ICON_LENGTH" , 0, true ); createSMESHAction( 6002, "FREE_EDGE", "ICON_FREE_EDGE" , 0, true ); createSMESHAction( 6003, "FREE_BORDER", "ICON_FREE_EDGE_2D" , 0, true ); @@ -2505,6 +2514,7 @@ void SMESHGUI::initialize( CAM_Application* app ) createMenu( separator(), meshId, -1 ); createMenu( 900, meshId, -1 ); createMenu( 902, meshId, -1 ); + createMenu( 903, meshId, -1 ); createMenu( separator(), meshId, -1 ); createMenu( 6003, ctrlId, -1 ); @@ -2591,6 +2601,7 @@ void SMESHGUI::initialize( CAM_Application* app ) createTool( separator(), meshTb ); createTool( 900, meshTb ); createTool( 902, meshTb ); + createTool( 903, meshTb ); createTool( separator(), meshTb ); createTool( 6001, ctrlTb ); @@ -2688,6 +2699,7 @@ void SMESHGUI::initialize( CAM_Application* app ) createPopupItem( 214, OB, mesh_group ); // UPDATE createPopupItem( 900, OB, mesh_group ); // ADV_INFO createPopupItem( 902, OB, mesh ); // STD_INFO + createPopupItem( 903, OB, mesh_group ); // WHAT_IS popupMgr()->insert( separator(), -1, 0 ); createPopupItem( 801, OB, mesh ); // CREATE_GROUP createPopupItem( 802, OB, subMesh ); // CONSTRUCT_GROUP @@ -2713,6 +2725,7 @@ void SMESHGUI::initialize( CAM_Application* app ) createPopupItem( 214, View, mesh_group ); // UPDATE createPopupItem( 900, View, mesh_group ); // ADV_INFO createPopupItem( 902, View, mesh ); // STD_INFO + createPopupItem( 903, View, mesh_group ); // WHAT_IS popupMgr()->insert( separator(), -1, 0 ); int anId; diff --git a/src/SMESHGUI/SMESHGUI_WhatIsDlg.cxx b/src/SMESHGUI/SMESHGUI_WhatIsDlg.cxx new file mode 100755 index 000000000..d7d10ead9 --- /dev/null +++ b/src/SMESHGUI/SMESHGUI_WhatIsDlg.cxx @@ -0,0 +1,626 @@ +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// +// +// +// File : SMESHGUI_WhatIsDlg.cxx +// Author : Vladimir TURIN +// Module : SMESH +// $Header: + +#include "SMESHGUI_WhatIsDlg.h" + +#include "SMESHGUI.h" +#include "SMESHGUI_SpinBox.h" +#include "SMESHGUI_Utils.h" +#include "SMESHGUI_VTKUtils.h" +#include "SMESHGUI_MeshUtils.h" +#include "SMESHGUI_IdValidator.h" + +#include "SMESH_Actor.h" +#include "SMESH_TypeFilter.hxx" +#include "SMESH_LogicalFilter.hxx" +#include "SMDS_Mesh.hxx" +#include "SMDS_VolumeTool.hxx" + +#include "SUIT_Desktop.h" +#include "SUIT_ResourceMgr.h" +#include "SUIT_Session.h" +#include "SUIT_MessageBox.h" + +#include "LightApp_Application.h" + +#include "SVTK_ViewModel.h" +#include "SVTK_Selection.h" +#include "SVTK_ViewWindow.h" +#include "SVTK_Selector.h" +#include "SALOME_ListIO.hxx" + +#include "utilities.h" + +// OCCT Includes +#include +#include +#include + +// QT Includes +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// IDL Headers +#include "SALOMEconfig.h" +#include CORBA_SERVER_HEADER(SMESH_Group) +#include CORBA_SERVER_HEADER(SMESH_MeshEditor) + +using namespace std; + +//================================================================================= +// class : SMESHGUI_WhatIsDlg() +// purpose : +//================================================================================= +SMESHGUI_WhatIsDlg::SMESHGUI_WhatIsDlg( SMESHGUI* theModule, const char* name, + bool modal, WFlags fl) + : QDialog( SMESH::GetDesktop( theModule ), name, modal, WStyle_Customize | WStyle_NormalBorder | + WStyle_Title | WStyle_SysMenu | Qt::WDestructiveClose), + mySMESHGUI( theModule ), + mySelectionMgr( SMESH::GetSelectionMgr( theModule ) ) +{ + if (!name) + setName("SMESHGUI_WhatIsDlg"); + resize(100, 450); + setCaption(tr("SMESH_WHAT_IS_TITLE")); + setSizeGripEnabled(TRUE); + SMESHGUI_WhatIsDlgLayout = new QGridLayout(this); + SMESHGUI_WhatIsDlgLayout->setSpacing(6); + SMESHGUI_WhatIsDlgLayout->setMargin(11); + + /***************************************************************/ + GroupMesh = new QButtonGroup(this, "GroupSelections"); + GroupMesh->setSizePolicy(QSizePolicy((QSizePolicy::SizeType)5, (QSizePolicy::SizeType)0, 0, 0, GroupMesh->sizePolicy().hasHeightForWidth())); + GroupMesh->setTitle(tr("")); + 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); + MeshLabel = new QLabel(GroupMesh, "MeshLabel"); + MeshLabel->setText(tr("SMESH_NAME")); + GroupMeshLayout->addWidget(MeshLabel, 0, 0); + MeshName = new QLabel(GroupMesh, "MeshName"); + MeshName->setText(tr("")); + GroupMeshLayout->addWidget(MeshName, 0, 1); + SMESHGUI_WhatIsDlgLayout->addWidget(GroupMesh, 0, 0); + + /***************************************************************/ + GroupSelections = new QButtonGroup(this, "GroupSelections"); + GroupSelections->setSizePolicy(QSizePolicy((QSizePolicy::SizeType)5, (QSizePolicy::SizeType)0, 0, 0, GroupSelections->sizePolicy().hasHeightForWidth())); + GroupSelections->setTitle(tr("ENTITY_TYPE" )); + GroupSelections->setExclusive(TRUE); + GroupSelections->setColumnLayout(0, Qt::Vertical); + GroupSelections->layout()->setSpacing(0); + GroupSelections->layout()->setMargin(0); + GroupSelectionsLayout = new QGridLayout(GroupSelections->layout()); + GroupSelectionsLayout->setAlignment(Qt::AlignTop); + GroupSelectionsLayout->setSpacing(6); + GroupSelectionsLayout->setMargin(11); + RadioButtonNodes = new QRadioButton(GroupSelections, "RadioButtonNodes"); + RadioButtonNodes->setText(tr("SMESH_NODES")); + GroupSelectionsLayout->addWidget(RadioButtonNodes, 0, 0); + RadioButtonElements = new QRadioButton(GroupSelections, "RadioButtonElements"); + RadioButtonElements->setText(tr("SMESH_ELEMENTS")); + GroupSelectionsLayout->addWidget(RadioButtonElements, 0, 1 ); + SMESHGUI_WhatIsDlgLayout->addWidget(GroupSelections, 1, 0); + + /***************************************************************/ + GroupArguments = new QGroupBox(this, "GroupArguments"); + GroupArguments->setTitle(tr("SMESH_INFORMATION")); + GroupArguments->setColumnLayout(0, Qt::Vertical); + GroupArguments->layout()->setSpacing(0); + GroupArguments->layout()->setMargin(0); + GroupArgumentsLayout = new QGridLayout(GroupArguments->layout()); + GroupArgumentsLayout->setAlignment(Qt::AlignTop); + GroupArgumentsLayout->setSpacing(6); + GroupArgumentsLayout->setMargin(11); + + // Controls for elements selection + TextLabelElements = new QLabel(GroupArguments, "TextLabelElements"); + TextLabelElements->setText(tr("SMESH_ID_ELEMENTS" )); + TextLabelElements->setFixedWidth(74); + GroupArgumentsLayout->addWidget(TextLabelElements, 0, 0); + + LineEditElements = new QLineEdit(GroupArguments, "LineEditElements"); + LineEditElements->setValidator(new SMESHGUI_IdValidator(this, "validator")); + GroupArgumentsLayout->addMultiCellWidget(LineEditElements, 0, 0, 2, 7); + + // information text browser + Info = new QTextBrowser(GroupArguments, "Info"); + Info->setHScrollBarMode(QScrollView::AlwaysOff); + Info->setVScrollBarMode(QScrollView::AlwaysOff); + GroupArgumentsLayout->addMultiCellWidget(Info, 1, 1, 0, 7); + + SMESHGUI_WhatIsDlgLayout->addWidget(GroupArguments, 2, 0); + + /***************************************************************/ + GroupButtons = new QGroupBox(this, "GroupButtons"); + GroupButtons->setSizePolicy(QSizePolicy((QSizePolicy::SizeType)7, (QSizePolicy::SizeType)0, 0, 0, GroupButtons->sizePolicy().hasHeightForWidth())); + 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, 3); + QSpacerItem* spacer_9 = new QSpacerItem(20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum); + GroupButtonsLayout->addItem(spacer_9, 0, 1); + buttonOk = new QPushButton(GroupButtons, "buttonOk"); + buttonOk->setText(tr("SMESH_BUT_OK" )); + buttonOk->setAutoDefault(TRUE); + buttonOk->setDefault(TRUE); + GroupButtonsLayout->addWidget(buttonOk, 0, 0); + SMESHGUI_WhatIsDlgLayout->addWidget(GroupButtons, 3, 0); + + GroupArguments->show(); + RadioButtonNodes->setChecked(TRUE); + + mySelector = (SMESH::GetViewWindow( mySMESHGUI ))->GetSelector(); + + mySMESHGUI->SetActiveDialogBox((QDialog*)this); + + // Costruction of the logical filter + SMESH_TypeFilter* aMeshOrSubMeshFilter = new SMESH_TypeFilter (MESHorSUBMESH); + SMESH_TypeFilter* aSmeshGroupFilter = new SMESH_TypeFilter (GROUP); + + QPtrList aListOfFilters; + if (aMeshOrSubMeshFilter) aListOfFilters.append(aMeshOrSubMeshFilter); + if (aSmeshGroupFilter) aListOfFilters.append(aSmeshGroupFilter); + + myMeshOrSubMeshOrGroupFilter = + new SMESH_LogicalFilter(aListOfFilters, SMESH_LogicalFilter::LO_OR); + + myHelpFileName = "/files/viewing_mesh_info.htm#what_is"; + + Init(); + + /* signals and slots connections */ + connect(buttonOk, SIGNAL(clicked()), this, SLOT(ClickOnOk())); + connect(buttonHelp, SIGNAL(clicked()), this, SLOT(ClickOnHelp())); + connect(GroupSelections, SIGNAL(clicked(int)), SLOT(SelectionsClicked(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())); + connect(LineEditElements, SIGNAL(textChanged(const QString&)), SLOT(onTextChange(const QString&))); + this->show(); /* displays Dialog */ + + SelectionsClicked(0); + SelectionIntoArgument(); +} + +//================================================================================= +// function : ~SMESHGUI_WhatIsDlg() +// purpose : Destroys the object and frees any allocated resources +//================================================================================= +SMESHGUI_WhatIsDlg::~SMESHGUI_WhatIsDlg() +{ + // no need to delete child widgets, Qt does it all for us +} + +//================================================================================= +// function : Init() +// purpose : +//================================================================================= +void SMESHGUI_WhatIsDlg::Init (bool ResetControls) +{ + myBusy = false; + + LineEditElements->clear(); + + myActor = 0; + myMesh = SMESH::SMESH_Mesh::_nil(); + + if (ResetControls) { + if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) + aViewWindow->SetSelectionMode( CellSelection ); + onTextChange(LineEditElements->text()); + + SelectionIntoArgument(); + } +} + +//================================================================================= +// function : SelectionsClicked() +// purpose : Radio button management +//================================================================================= +void SMESHGUI_WhatIsDlg::SelectionsClicked (int selectionId) +{ + disconnect(mySelectionMgr, 0, this, 0); + + mySelectionMgr->clearFilters(); + + switch (selectionId) { + case 0: + { + SMESH::SetPointRepresentation(true); + if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) + aViewWindow->SetSelectionMode( NodeSelection ); + break; + } + case 1: + { + SMESH::SetPointRepresentation(false); + if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) + aViewWindow->SetSelectionMode( CellSelection ); + break; + } + } + + connect(mySelectionMgr, SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument())); + SelectionIntoArgument(); +} + +//================================================================================= +// function : ClickOnOk() +// purpose : +//================================================================================= +void SMESHGUI_WhatIsDlg::ClickOnOk() +{ + if (mySMESHGUI->isActiveStudyLocked()) + return; + + SMESH::UpdateView(); + Init(false); + SelectionIntoArgument(); + ClickOnCancel(); +} + +//================================================================================= +// function : ClickOnCancel() +// purpose : +//================================================================================= +void SMESHGUI_WhatIsDlg::ClickOnCancel() +{ + disconnect(mySelectionMgr, 0, this, 0); + mySelectionMgr->clearFilters(); + SMESH::SetPointRepresentation(false); + if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) + aViewWindow->SetSelectionMode( ActorSelection ); + mySMESHGUI->ResetState(); + reject(); +} + +//================================================================================= +// function : ClickOnHelp() +// purpose : +//================================================================================= +void SMESHGUI_WhatIsDlg::ClickOnHelp() +{ + LightApp_Application* app = (LightApp_Application*)(SUIT_Session::session()->activeApplication()); + if (app) + app->onHelpContextModule(mySMESHGUI ? app->moduleName(mySMESHGUI->moduleName()) : QString(""), myHelpFileName); + else { + SUIT_MessageBox::warn1(0, QObject::tr("WRN_WARNING"), + QObject::tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE"). + arg(app->resourceMgr()->stringValue("ExternalBrowser", "application")).arg(myHelpFileName), + QObject::tr("BUT_OK")); + } +} + +//======================================================================= +// function : onTextChange() +// purpose : +//======================================================================= +void SMESHGUI_WhatIsDlg::onTextChange (const QString& theNewText) +{ + if (myBusy) return; + myBusy = true; + + // hilight entered elements + SMDS_Mesh* aMesh = 0; + if (myActor) + aMesh = myActor->GetObject()->GetMesh(); + + if (aMesh) { + Handle(SALOME_InteractiveObject) anIO = myActor->getIO(); + + TColStd_MapOfInteger newIndices; + + QStringList aListId = QStringList::split(" ", theNewText, false); + + for (int i = 0; i < aListId.count(); i++) { + const SMDS_MeshElement * e = RadioButtonNodes->isChecked()? + aMesh->FindNode(aListId[ i ].toInt()): + aMesh->FindElement(aListId[ i ].toInt()); + if (e) + newIndices.Add(e->GetID()); + } + + mySelector->AddOrRemoveIndex( anIO, newIndices, false ); + if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) + aViewWindow->highlight( anIO, true, true ); + } + + SelectionIntoArgument(); + + myBusy = false; +} + +//================================================================================= +// function : SelectionIntoArgument() +// purpose : Called when selection as changed or other case +//================================================================================= +void SMESHGUI_WhatIsDlg::SelectionIntoArgument() +{ + int curBusy = myBusy; + + // clear + myActor = 0; + QString aString = ""; + + myBusy = true; + if(!curBusy) + LineEditElements->setText(aString); + MeshName->setText(aString); + GroupMesh->setTitle(tr("")); + Info->clear(); + myBusy = curBusy; + + if (!GroupButtons->isEnabled()) // inactive + return; + + // get selected mesh + SALOME_ListIO aList; + mySelectionMgr->selectedObjects(aList,SVTK_Viewer::Type()); + + int nbSel = aList.Extent(); + + if (nbSel != 1) + return; + + Handle(SALOME_InteractiveObject) IO = aList.First(); + myMesh = SMESH::GetMeshByIO(IO); + if (myMesh->_is_nil()) + return; + + myActor = SMESH::FindActorByObject(myMesh); + if (!myActor) + myActor = SMESH::FindActorByEntry(IO->getEntry()); + if (!myActor) + return; + + QString aName; + SMESH::GetNameOfSelectedIObjects(mySelectionMgr, aName); + MeshName->setText(aName); + if(!SMESH::IObjectToInterface(IO)->_is_nil()) { + GroupMesh->setTitle(tr("SMESH_MESH")); + } else if(!SMESH::IObjectToInterface(IO)->_is_nil()) { + GroupMesh->setTitle(tr("SMESH_SUBMESH")); + } else if(!SMESH::IObjectToInterface(IO)->_is_nil()) { + GroupMesh->setTitle(tr("SMESH_GROUP")); + } + + int aNbUnits = 0; + + aNbUnits = SMESH::GetNameOfSelectedElements(mySelector, IO, aString); + + if (aNbUnits < 1) + return; + + const SMDS_MeshElement * e = RadioButtonNodes->isChecked()? + myActor->GetObject()->GetMesh()->FindNode(aString.toInt()): + myActor->GetObject()->GetMesh()->FindElement(aString.toInt()); + if (e) { + QString anInfo; + anInfo=tr("ENTITY_TYPE") + ": "; + if(e->GetType() == SMDSAbs_Node) { + anInfo+=tr("MESH_NODE")+"\n"; + const SMDS_MeshNode *en = (SMDS_MeshNode*) e; + } else if(e->GetType() == SMDSAbs_Edge) { + anInfo+=tr("SMESH_EDGE")+"\n"; + anInfo+=tr("SMESH_MESHINFO_TYPE")+": "; + const SMDS_MeshEdge *ee = (SMDS_MeshEdge*) e; + anInfo+=(ee->IsQuadratic()?tr("SMESH_MESHINFO_ORDER2"):tr("SMESH_MESHINFO_ORDER1"))+"\n"; + } else if(e->GetType() == SMDSAbs_Face) { + const SMDS_MeshFace *ef = (SMDS_MeshFace*) e; + anInfo+=tr("SMESH_FACE")+"\n"; + anInfo+=tr("SMESH_MESHINFO_TYPE")+": "; + if(!ef->IsPoly()) + anInfo+=(ef->IsQuadratic()?tr("SMESH_MESHINFO_ORDER2"):tr("SMESH_MESHINFO_ORDER1"))+" "; + switch(ef->NbNodes()) { + case 3: + case 6: + { + anInfo+=tr("SMESH_TRIANGLE"); + break; + } + case 4: + case 8: + { + anInfo+=tr("SMESH_QUADRANGLE"); + break; + } + default: + break; + } + anInfo+="\n"; + } else if(e->GetType() == SMDSAbs_Volume) { + anInfo+=tr("SMESH_VOLUME")+"\n"; + anInfo+=tr("SMESH_MESHINFO_TYPE")+": "; + const SMDS_MeshVolume *ev = (SMDS_MeshVolume*) e; + SMDS_VolumeTool vt(ev); + if(vt.GetVolumeType() != SMDS_VolumeTool::POLYHEDA) + anInfo+=(ev->IsQuadratic()?tr("SMESH_MESHINFO_ORDER2"):tr("SMESH_MESHINFO_ORDER1"))+" "; + switch(vt.GetVolumeType()) { + case SMDS_VolumeTool::TETRA: + case SMDS_VolumeTool::QUAD_TETRA: + { + anInfo+=tr("SMESH_TETRAS"); + break; + } + case SMDS_VolumeTool::PYRAM: + case SMDS_VolumeTool::QUAD_PYRAM: + { + anInfo+=tr("SMESH_PYRAMID"); + break; + } + case SMDS_VolumeTool::PENTA: + case SMDS_VolumeTool::QUAD_PENTA: + { + anInfo+=tr("SMESH_PRISM"); + break; + } + case SMDS_VolumeTool::HEXA: + case SMDS_VolumeTool::QUAD_HEXA: + { + anInfo+=tr("SMESH_HEXAS"); + break; + } + case SMDS_VolumeTool::POLYHEDA: + { + anInfo+=tr("SMESH_POLYEDRON"); + break; + } + default: + break; + } + anInfo+="\n"; + } + if(e->GetType() != SMDSAbs_Node) + anInfo+=tr("GRAVITY_CENTER") + ":\n"; + gp_XYZ anXYZ(0.,0.,0.); + SMDS_ElemIteratorPtr nodeIt = e->nodesIterator(); + int nbNodes = 0; + for(; nodeIt->more(); nbNodes++) { + const SMDS_MeshNode* node = static_cast( nodeIt->next() ); + anXYZ.Add( gp_XYZ( node->X(), node->Y(), node->Z() ) ); + } + anXYZ.Divide(e->NbNodes()) ; + anInfo+=QString("X=%1\nY=%2\nZ=%3\n").arg(anXYZ.X()).arg(anXYZ.Y()).arg(anXYZ.Z()); + Info->setText(anInfo); + } + + if(!curBusy) { + myBusy = true; + LineEditElements->setText(aString); + myBusy = false; + } +} + +//================================================================================= +// function : DeactivateActiveDialog() +// purpose : +//================================================================================= +void SMESHGUI_WhatIsDlg::DeactivateActiveDialog() +{ + if (GroupArguments->isEnabled()) { + GroupSelections->setEnabled(false); + GroupMesh->setEnabled(false); + GroupArguments->setEnabled(false); + GroupButtons->setEnabled(false); + mySMESHGUI->ResetState(); + mySMESHGUI->SetActiveDialogBox(0); + } +} + +//================================================================================= +// function : ActivateThisDialog() +// purpose : +//================================================================================= +void SMESHGUI_WhatIsDlg::ActivateThisDialog() +{ + /* Emit a signal to deactivate the active dialog */ + mySMESHGUI->EmitSignalDeactivateDialog(); + GroupArguments->setEnabled(true); + GroupButtons->setEnabled(true); + GroupSelections->setEnabled(true); + GroupMesh->setEnabled(true); + + mySMESHGUI->SetActiveDialogBox((QDialog*)this); + + if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) + SelectionsClicked(RadioButtonNodes->isChecked()?0:1); + + SelectionIntoArgument(); +} + +//================================================================================= +// function : enterEvent() +// purpose : +//================================================================================= +void SMESHGUI_WhatIsDlg::enterEvent (QEvent*) +{ + if (!GroupArguments->isEnabled()) + ActivateThisDialog(); +} + +//================================================================================= +// function : closeEvent() +// purpose : +//================================================================================= +void SMESHGUI_WhatIsDlg::closeEvent (QCloseEvent*) +{ + /* same than click on cancel button */ + this->ClickOnCancel(); +} + +//======================================================================= +//function : hideEvent +//purpose : caused by ESC key +//======================================================================= +void SMESHGUI_WhatIsDlg::hideEvent (QHideEvent*) +{ + if (!isMinimized()) + ClickOnCancel(); +} + +//================================================================================= +// function : keyPressEvent() +// purpose : +//================================================================================= +void SMESHGUI_WhatIsDlg::keyPressEvent( QKeyEvent* e ) +{ + QDialog::keyPressEvent( e ); + if ( e->isAccepted() ) + return; + + if ( e->key() == Key_F1 ) + { + e->accept(); + ClickOnHelp(); + } +} diff --git a/src/SMESHGUI/SMESHGUI_WhatIsDlg.h b/src/SMESHGUI/SMESHGUI_WhatIsDlg.h new file mode 100755 index 000000000..af1c4ef3d --- /dev/null +++ b/src/SMESHGUI/SMESHGUI_WhatIsDlg.h @@ -0,0 +1,130 @@ +// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com +// +// +// +// File : SMESHGUI_WhatIsDlg.h +// Author : Vladimir TURIN +// Module : SMESH +// $Header: + +#ifndef SMESHGUI_WHATISDLG_H +#define SMESHGUI_WHATISDLG_H + +#include "LightApp_SelectionMgr.h" + +#include "SMESH_LogicalFilter.hxx" + +// QT Includes +#include + +class QGridLayout; +class QButtonGroup; +class QGroupBox; +class QLabel; +class QLineEdit; +class QPushButton; +class QRadioButton; +class QCheckBox; +class QTextBrowser; +class SMESHGUI; +class SMESHGUI_SpinBox; +class SMESH_Actor; +class SVTK_ViewWindow; +class SVTK_Selector; + +// IDL Headers +#include +#include CORBA_SERVER_HEADER(SMESH_Mesh) + + +//================================================================================= +// class : SMESHGUI_WhatIsDlg +// purpose : +//================================================================================= +class SMESHGUI_WhatIsDlg : public QDialog +{ + Q_OBJECT + +public: + + SMESHGUI_WhatIsDlg( SMESHGUI*, + const char* name = 0, + bool modal = FALSE, + WFlags fl = 0); + ~SMESHGUI_WhatIsDlg(); + +private: + + void Init (bool ResetControls = true); + void closeEvent (QCloseEvent*); + void enterEvent (QEvent*); /* mouse enter the QWidget */ + void hideEvent (QHideEvent*); /* ESC key */ + void keyPressEvent(QKeyEvent*); + + SMESHGUI* mySMESHGUI; /* Current SMESHGUI object */ + LightApp_SelectionMgr* mySelectionMgr; /* User shape selection */ + + SVTK_Selector* mySelector; + + bool myBusy; + SMESH::SMESH_Mesh_var myMesh; + SMESH_Actor* myActor; + SMESH_LogicalFilter* myMeshOrSubMeshOrGroupFilter; + + QButtonGroup* GroupSelections; + QRadioButton* RadioButtonNodes; + QRadioButton* RadioButtonElements; + QGroupBox* GroupButtons; + QPushButton* buttonOk; + QPushButton* buttonHelp; + QGroupBox* GroupArguments; + QGroupBox* GroupMesh; + QLabel* TextLabelElements; + QLineEdit* LineEditElements; + QLabel* MeshLabel; + QLabel* MeshName; + + QTextBrowser* Info; + + QString myHelpFileName; + +private slots: + + void SelectionsClicked(int selectionId); + void ClickOnOk(); + void ClickOnCancel(); + void ClickOnHelp(); + void SelectionIntoArgument() ; + void DeactivateActiveDialog() ; + void ActivateThisDialog() ; + void onTextChange(const QString&); + +protected: + + QGridLayout* SMESHGUI_WhatIsDlgLayout; + QGridLayout* GroupSelectionsLayout; + QGridLayout* GroupMeshLayout; + QGridLayout* GroupButtonsLayout; + QGridLayout* GroupArgumentsLayout; +}; + +#endif // SMESHGUI_WHATISDLG_H diff --git a/src/SMESHGUI/SMESH_images.po b/src/SMESHGUI/SMESH_images.po index a9980d0cf..fa3443962 100644 --- a/src/SMESHGUI/SMESH_images.po +++ b/src/SMESHGUI/SMESH_images.po @@ -322,6 +322,9 @@ msgstr "advanced_mesh_info.png" msgid "ICON_STD_INFO" msgstr "standard_mesh_info.png" +msgid "ICON_WHAT_IS" +msgstr "mesh_whatis.png" + msgid "ICON_LENGTH" msgstr "mesh_length.png" diff --git a/src/SMESHGUI/SMESH_msg_en.po b/src/SMESHGUI/SMESH_msg_en.po index 97c783f34..86a9a09e3 100644 --- a/src/SMESHGUI/SMESH_msg_en.po +++ b/src/SMESHGUI/SMESH_msg_en.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"PO-Revision-Date: 2007-01-19 10:44+0300\n" +"PO-Revision-Date: 2007-11-29 15:55+0300\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" @@ -499,6 +499,14 @@ msgstr "Quadrangle" msgid "SMESH_EDGE" msgstr "Edge" +#Pyramid +msgid "SMESH_PYRAMID" +msgstr "Pyramid" + +#Prism +msgid "SMESH_PRISM" +msgstr "Prism" + #Tetrahedron msgid "SMESH_TETRAS" msgstr "Tetrahedron" @@ -507,6 +515,10 @@ msgstr "Tetrahedron" msgid "SMESH_HEXAS" msgstr "Hexahedron" +#Polyhedron +msgid "SMESH_POLYEDRON" +msgstr "Polyhedron" + #Add Triangle msgid "SMESH_ADD_TRIANGLE" msgstr "Add Triangle" @@ -821,6 +833,10 @@ msgstr "Mesh Infos" msgid "SMESH_STANDARD_MESHINFO_TITLE" msgstr "Standard Mesh Infos" +#What Is +msgid "SMESH_WHAT_IS_TITLE" +msgstr "Mesh Element Info" + #Mesh Infos msgid "SMESH_MESHINFO_NAME" msgstr "Name" @@ -2239,6 +2255,9 @@ msgstr "Advanced Mesh Infos" msgid "MEN_STD_INFO" msgstr "Standard Mesh Infos" +msgid "MEN_WHAT_IS" +msgstr "Mesh Element Info" + msgid "MEN_LENGTH" msgstr "Length" @@ -2601,6 +2620,9 @@ msgstr "Advanced Mesh Infos" msgid "TOP_STD_INFO" msgstr "Standard Mesh Infos" +msgid "TOP_WHAT_IS" +msgstr "Mesh Element Info" + msgid "TOP_LENGTH" msgstr "Length" @@ -2914,6 +2936,9 @@ msgstr "Advanced Mesh Infos" msgid "STB_STD_INFO" msgstr "Standard Mesh Infos" +msgid "STB_WHAT_IS" +msgstr "Mesh Element Info" + msgid "STB_LENGTH" msgstr "Length" @@ -3448,6 +3473,12 @@ msgstr "Publish SubShape" msgid "SMESHGUI_ComputeDlg::MEMORY_LACK" msgstr "Memory allocation problem" +msgid "SMESHGUI_WhatIsDlg::ENTITY_TYPE" +msgstr "Element type" + +msgid "SMESHGUI_WhatIsDlg::GRAVITY_CENTER" +msgstr "Gravity center" + msgid "COMPERR_OK" msgstr "No errors" -- 2.30.2