X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FSMESHGUI%2FSMESHGUI_MeshInfosDlg.cxx;h=e0767710c89e203b60f6cb10ce019563716219e5;hp=ed5e38efe47bb25f7f27c498b7d1c18f54b1f295;hb=4b5fd249abfca52265832f10435f18f5bb9c69ae;hpb=3973ceea250d2a077cdb5a798eb7c6151fa9c568 diff --git a/src/SMESHGUI/SMESHGUI_MeshInfosDlg.cxx b/src/SMESHGUI/SMESHGUI_MeshInfosDlg.cxx index ed5e38efe..e0767710c 100644 --- a/src/SMESHGUI/SMESHGUI_MeshInfosDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_MeshInfosDlg.cxx @@ -1,419 +1,265 @@ -using namespace std; -// File : SMESHGUI_MeshInfosDlg.cxx -// Created : Sat Jun 08 15:31:16 2002 -// Author : Nicolas BARBEROU - -// Project : SALOME -// Module : SMESH -// Copyright : EADS CCR 2002 -// $Header$ - +// Copyright (C) 2007-2011 CEA/DEN, EDF R&D, OPEN CASCADE +// +// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +// SMESH SMESHGUI : GUI for SMESH component +// File : SMESHGUI_MeshInfosDlg.cxx +// Author : Nicolas BARBEROU +// SMESH includes +// #include "SMESHGUI_MeshInfosDlg.h" #include "SMESHGUI.h" -#include "QAD_Application.h" -#include "QAD_Desktop.h" -#include "utilities.h" - -// QT Includes -#include -#include -#include -#include -#include -#include -#include - -/* - * Constructs a SMESHGUI_MeshInfosDlg which is a child of 'parent', with the - * name 'name' and widget flags set to 'f' - * - * The dialog will by default be modeless, unless you set 'modal' to - * TRUE to construct a modal dialog. - */ -SMESHGUI_MeshInfosDlg::SMESHGUI_MeshInfosDlg( QWidget* parent, const char* name, SALOME_Selection* Sel, bool modal, WFlags fl ) - : QDialog( parent, name, modal, WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu ) -{ - if ( !name ) - setName( "SMESHGUI_MeshInfosDlg" ); - setCaption( tr( "SMESH_MESHINFO_TITLE" ) ); - setSizeGripEnabled( TRUE ); - - SMESHGUI_MeshInfosDlgLayout = new QVBoxLayout( this ); - SMESHGUI_MeshInfosDlgLayout->setSpacing( 6 ); - SMESHGUI_MeshInfosDlgLayout->setMargin( 11 ); - - /****************************************************************/ - GroupBox1 = new QGroupBox( this, "GroupBox1" ); - GroupBox1->setTitle( tr( "SMESH_MESHINFO_NB1D" ) ); - GroupBox1->setColumnLayout(0, Qt::Vertical ); - GroupBox1->layout()->setSpacing( 0 ); - GroupBox1->layout()->setMargin( 0 ); - QGridLayout* GroupBox1Layout = new QGridLayout( GroupBox1->layout() ); - GroupBox1Layout->setAlignment( Qt::AlignTop ); - GroupBox1Layout->setSpacing( 6 ); - GroupBox1Layout->setMargin( 11 ); - - TextLabel11 = new QLabel( GroupBox1, "TextLabel11" ); - TextLabel11->setMinimumWidth( 100 ); - TextLabel11->setText( tr( "SMESH_MESHINFO_NODES" ) ); - GroupBox1Layout->addWidget( TextLabel11, 0, 0 ); - - TextLabel12 = new QLabel( GroupBox1, "TextLabel12" ); - TextLabel12->setMinimumWidth( 100 ); - TextLabel12->setText( tr( "SMESH_MESHINFO_EDGES" ) ); - GroupBox1Layout->addWidget( TextLabel12, 1, 0 ); - - TextLabel13 = new QLabel( GroupBox1, "TextLabel13" ); - TextLabel13->setMinimumWidth( 100 ); - GroupBox1Layout->addWidget( TextLabel13, 0, 1 ); - - TextLabel14 = new QLabel( GroupBox1, "TextLabel14" ); - TextLabel14->setMinimumWidth( 100 ); - GroupBox1Layout->addWidget( TextLabel14, 1, 1 ); - SMESHGUI_MeshInfosDlgLayout->addWidget( GroupBox1 ); - - /****************************************************************/ - GroupBox2 = new QGroupBox( this, "GroupBox2" ); - GroupBox2->setTitle( tr( "SMESH_MESHINFO_NB2D" ) ); - GroupBox2->setColumnLayout(0, Qt::Vertical ); - GroupBox2->layout()->setSpacing( 0 ); - GroupBox2->layout()->setMargin( 0 ); - QGridLayout* GroupBox2Layout = new QGridLayout( GroupBox2->layout() ); - GroupBox2Layout->setAlignment( Qt::AlignTop ); - GroupBox2Layout->setSpacing( 6 ); - GroupBox2Layout->setMargin( 11 ); - - TextLabel21 = new QLabel( GroupBox2, "TextLabel21" ); - TextLabel21->setMinimumWidth( 100 ); - TextLabel21->setText( tr( "SMESH_MESHINFO_TRIANGLES" ) ); - GroupBox2Layout->addWidget( TextLabel21, 0, 0 ); - - TextLabel22 = new QLabel( GroupBox2, "TextLabel22" ); - TextLabel22->setMinimumWidth( 100 ); - TextLabel22->setText( tr( "SMESH_MESHINFO_QUADRANGLES" ) ); - GroupBox2Layout->addWidget( TextLabel22, 1, 0 ); - - TextLabel23 = new QLabel( GroupBox2, "TextLabel23" ); - TextLabel23->setMinimumWidth( 100 ); - GroupBox2Layout->addWidget( TextLabel23, 0, 1 ); - - TextLabel24 = new QLabel( GroupBox2, "TextLabel24" ); - TextLabel24->setMinimumWidth( 100 ); - GroupBox2Layout->addWidget( TextLabel24, 1, 1 ); - SMESHGUI_MeshInfosDlgLayout->addWidget( GroupBox2 ); - - /****************************************************************/ - GroupBox3 = new QGroupBox( this, "GroupBox3" ); - GroupBox3->setTitle( tr( "SMESH_MESHINFO_NB3D" ) ); - GroupBox3->setColumnLayout(0, Qt::Vertical ); - GroupBox3->layout()->setSpacing( 0 ); - GroupBox3->layout()->setMargin( 0 ); - QGridLayout* GroupBox3Layout = new QGridLayout( GroupBox3->layout() ); - GroupBox3Layout->setAlignment( Qt::AlignTop ); - GroupBox3Layout->setSpacing( 6 ); - GroupBox3Layout->setMargin( 11 ); - - TextLabel31 = new QLabel( GroupBox3, "TextLabel31" ); - TextLabel31->setMinimumWidth( 100 ); - TextLabel31->setText( tr( "SMESH_MESHINFO_TETRAS" ) ); - GroupBox3Layout->addWidget( TextLabel31, 0, 0 ); - - TextLabel32 = new QLabel( GroupBox3, "TextLabel32" ); - TextLabel32->setMinimumWidth( 100 ); - TextLabel32->setText( tr( "SMESH_MESHINFO_HEXAS" ) ); - GroupBox3Layout->addWidget( TextLabel32, 1, 0 ); - - TextLabel33 = new QLabel( GroupBox3, "TextLabel33" ); - TextLabel33->setMinimumWidth( 100 ); - GroupBox3Layout->addWidget( TextLabel33, 0, 1 ); - - TextLabel34 = new QLabel( GroupBox3, "TextLabel34" ); - TextLabel34->setMinimumWidth( 100 ); - GroupBox3Layout->addWidget( TextLabel34, 1, 1 ); - SMESHGUI_MeshInfosDlgLayout->addWidget( GroupBox3 ); - - /****************************************************************/ - QGroupBox* GroupButtons = new QGroupBox( this, "GroupButtons" ); - GroupButtons->setColumnLayout(0, Qt::Vertical ); - GroupButtons->layout()->setSpacing( 0 ); - GroupButtons->layout()->setMargin( 0 ); - QGridLayout* GroupButtonsLayout = new QGridLayout( GroupButtons->layout() ); - GroupButtonsLayout->setAlignment( Qt::AlignTop ); - GroupButtonsLayout->setSpacing( 6 ); - GroupButtonsLayout->setMargin( 11 ); - - GroupButtonsLayout->addItem( new QSpacerItem( 20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum ), 0, 0 ); - buttonOk = new QPushButton( GroupButtons, "buttonOk" ); - buttonOk->setText( tr( "SMESH_BUT_OK" ) ); - buttonOk->setAutoDefault( TRUE ); - buttonOk->setDefault( TRUE ); - GroupButtonsLayout->addWidget( buttonOk, 0, 1 ); - GroupButtonsLayout->addItem( new QSpacerItem( 20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum ), 0, 2 ); - SMESHGUI_MeshInfosDlgLayout->addWidget( GroupButtons ); - /****************************************************************/ - - Init( Sel ) ; -} - -/* - * Destroys the object and frees any allocated resources - */ -SMESHGUI_MeshInfosDlg::~SMESHGUI_MeshInfosDlg() -{ - // no need to delete child widgets, Qt does it all for us -} +#include "SMESHGUI_Utils.h" +#include "SMESHGUI_MeshInfosBox.h" + +// SALOME GUI includes +#include +#include +#include +#include +#include + +#include +#include +#include + +// SALOME KERNEL includes +#include + +// Qt includes +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// IDL includes +#include +#include CORBA_SERVER_HEADER(SMESH_Mesh) +#include CORBA_SERVER_HEADER(SMESH_Group) + +#define COLONIZE(str) (QString(str).contains(":") > 0 ? QString(str) : QString(str) + " :" ) +#define SPACING 6 +#define MARGIN 11 //================================================================================= -// function : Init() -// purpose : +// function : SMESHGUI_MeshInfosDlg() +// purpose : Constructor //================================================================================= -void SMESHGUI_MeshInfosDlg::Init( SALOME_Selection* Sel ) -{ - mySelection = Sel ; - - mySMESHGUI = SMESHGUI::GetSMESHGUI() ; - myStudy = mySMESHGUI->GetActiveStudy()->getStudyDocument(); - - Engines::Component_var comp = QAD_Application::getDesktop()->getEngine("FactoryServer", "SMESH"); - myCompMesh = SMESH::SMESH_Gen::_narrow(comp); - - int nbSel = mySelection->IObjectCount(); - - TextLabel13->setText( "0" ); - TextLabel14->setText( "0" ); - TextLabel23->setText( "0" ); - TextLabel24->setText( "0" ); - TextLabel33->setText( "0" ); - TextLabel34->setText( "0" ); - - //gets the selected mesh - if ( nbSel == 1 ) { - Handle(SALOME_InteractiveObject) IObject = mySelection->firstIObject(); - Standard_Boolean res; - myMesh = mySMESHGUI->ConvertIOinMesh( IObject, res ); - if ( res ) - DumpMeshInfos(); - } - - mySMESHGUI->SetActiveDialogBox( (QDialog*)this ) ; - - /* signals and slots connections */ - connect( buttonOk, SIGNAL( clicked() ), this, SLOT( ClickOnOk() ) ); - 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( ClickOnOk() ) ) ; - - /* 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 */ - - return ; +SMESHGUI_MeshInfosDlg::SMESHGUI_MeshInfosDlg(SMESHGUI* theModule): + QDialog(SMESH::GetDesktop(theModule)), + mySelectionMgr(SMESH::GetSelectionMgr(theModule)), + mySMESHGUI(theModule) +{ + setModal( false ); + setAttribute( Qt::WA_DeleteOnClose, true ); + setWindowTitle(tr("SMESH_MESHINFO_TITLE")); + setSizeGripEnabled(true); + + myStartSelection = true; + myIsActiveWindow = true; + + QVBoxLayout* aTopLayout = new QVBoxLayout(this); + aTopLayout->setSpacing(SPACING); aTopLayout->setMargin(MARGIN); + + // select button & label + QPixmap image0(SMESH::GetResourceMgr( mySMESHGUI )->loadPixmap("SMESH",tr("ICON_SELECT"))); + mySelectBtn = new QPushButton(this); + mySelectBtn->setIcon(image0); + mySelectBtn->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed)); + + mySelectLab = new QLabel(this); + mySelectLab->setAlignment(Qt::AlignCenter); + QFont fnt = mySelectLab->font(); fnt.setBold(true); + mySelectLab->setFont(fnt); + + QHBoxLayout* aSelectLayout = new QHBoxLayout; + aSelectLayout->setMargin(0); aSelectLayout->setSpacing(0); + aSelectLayout->addWidget(mySelectBtn); + aSelectLayout->addWidget(mySelectLab); + + // top widget stack + myWGStack = new QStackedWidget(this); + + // no valid selection + QWidget* myBadWidget = new QWidget(myWGStack); + QVBoxLayout* aBadLayout = new QVBoxLayout(myBadWidget); + QLabel* myBadLab = new QLabel(tr("SMESH_BAD_SELECTION"), myBadWidget); + myBadLab->setAlignment(Qt::AlignCenter); + myBadLab->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding)); + aBadLayout->addWidget(myBadLab); + myWGStack->addWidget(myBadWidget); + + // mesh + myMeshWidget = new QWidget(myWGStack); + QGridLayout* aMeshLayout = new QGridLayout(myMeshWidget); + aMeshLayout->setSpacing(SPACING); aMeshLayout->setMargin(0); + myWGStack->addWidget(myMeshWidget); + + // --> name + QLabel* myMeshNameLab = new QLabel(COLONIZE(tr("SMESH_MESHINFO_NAME")), myMeshWidget); + myMeshName = new QLabel(myMeshWidget); + myMeshName->setMinimumWidth(100); + QFrame* line1 = new QFrame(myMeshWidget); + line1->setFrameStyle(QFrame::HLine | QFrame::Sunken); + + myMeshInfoBox = new SMESHGUI_MeshInfosBox(true, myMeshWidget); + + aMeshLayout->addWidget(myMeshNameLab, 0, 0); + aMeshLayout->addWidget(myMeshName, 0, 1); + aMeshLayout->addWidget(line1, 1, 0, 1, 2); + aMeshLayout->addWidget(myMeshInfoBox, 2, 0, 1, 2); + aMeshLayout->addItem(new QSpacerItem(0, 0, QSizePolicy::Minimum, QSizePolicy::Expanding), 3, 0); + + // buttons + myButtonsGroup = new QGroupBox(this); + QHBoxLayout* myButtonsGroupLayout = new QHBoxLayout(myButtonsGroup); + myButtonsGroupLayout->setSpacing(SPACING); myButtonsGroupLayout->setMargin(MARGIN); + + // buttons --> OK and Help buttons + myOkBtn = new QPushButton(tr("SMESH_BUT_OK" ), myButtonsGroup); + myOkBtn->setAutoDefault(true); + myOkBtn->setDefault(true); + myOkBtn->setFocus(); + myHelpBtn = new QPushButton(tr("SMESH_BUT_HELP" ), myButtonsGroup); + myHelpBtn->setAutoDefault(true); + + myButtonsGroupLayout->addWidget(myOkBtn); + myButtonsGroupLayout->addSpacing(10); + myButtonsGroupLayout->addStretch(); + myButtonsGroupLayout->addWidget(myHelpBtn); + + aTopLayout->addLayout(aSelectLayout); + aTopLayout->addWidget(myWGStack); + aTopLayout->addWidget(myButtonsGroup); + + mySMESHGUI->SetActiveDialogBox(this); + + // connect signals + connect(myOkBtn, SIGNAL(clicked()), this, SLOT(close())); + connect( myHelpBtn, SIGNAL(clicked()), this, SLOT(onHelp())); + connect(mySelectBtn, SIGNAL(clicked()), this, SLOT(onStartSelection())); + connect(mySMESHGUI, SIGNAL(SignalCloseAllDialogs()), this, SLOT(close())); + connect(mySMESHGUI, SIGNAL(SignalDeactivateActiveDialog()), this, SLOT(DeactivateActiveDialog())); + connect(mySelectionMgr, SIGNAL(currentSelectionChanged()), this, SLOT(onSelectionChanged())); + + // init dialog with current selection + onSelectionChanged(); + + myHelpFileName = "mesh_infos_page.html#advanced_mesh_infos_anchor"; } //================================================================================= -// function : genEdgeKey -// purpose : edge counting helper; -// packs two long integers into one 8-byte value (treated as double by the caller); -// the order of arguments is insignificant +// function : ~SMESHGUI_MeshInfosDlg() +// purpose : Destructor //================================================================================= -void genEdgeKey(long a, long b, void* key) +SMESHGUI_MeshInfosDlg::~SMESHGUI_MeshInfosDlg() { - long* lKey = (long*)key; - *lKey = (a < b) ? a : b; - *(++lKey) = (a < b) ? b : a; } //================================================================================= // function : DumpMeshInfos() -// purpose : +// purpose : //================================================================================= void SMESHGUI_MeshInfosDlg::DumpMeshInfos() { - int nbOfNodes = myMesh->NbNodes(); - int nbOfEdges = myMesh->NbEdges(); - int nbOfTriangles = myMesh->NbTriangles(); - int nbOfQuadrangles = myMesh->NbQuadrangles(); - int nbOfTetras = myMesh->NbTetras(); - int nbOfHexas = myMesh->NbHexas(); - - /* - int nbOfNodes = 0 ; - int nbOfEdges = 0 ; - int nbOfTriangles = 0 ; - int nbOfQuadrangles = 0 ; - int nbOfTetras = 0 ; - int nbOfHexas = 0 ; - int nbCells = 0 ; - int CellType = 0 ; - QMap aMapOfEdges; - - Standard_Boolean result; - SMESH_Actor* MeshActor = mySMESHGUI->FindActor(myMesh, result, true); - - if ( result ) { - vtkUnstructuredGrid* ugrid = vtkUnstructuredGrid::SafeDownCast( MeshActor->DataSource ); - vtkPoints *Pts = ugrid->GetPoints(); - nbOfNodes = Pts->GetNumberOfPoints(); - int nbCells = ugrid->GetNumberOfCells(); - - for ( int i = 0; i < nbCells; i++ ) { - vtkCell* cellPtr = ugrid->GetCell(i); - CellType = cellPtr->GetCellType(); - switch (CellType) - { - case 3: //Edges - { - nbOfEdges++; - break; - } - case 5: //Triangles - { - nbOfTriangles++; - - for (int edgeNum = 0; edgeNum < 3; edgeNum++) { - vtkCell* edgePtr = cellPtr->GetEdge(edgeNum); - double anEdgeKey; - genEdgeKey(edgePtr->GetPointId(0), edgePtr->GetPointId(1), &anEdgeKey); - if (!aMapOfEdges.contains(anEdgeKey)) { - nbOfEdges++; - aMapOfEdges.insert(anEdgeKey, 0); - } - } - break; - } - case 9: //Quadrangles - { - nbOfQuadrangles++; - - for (int edgeNum = 0; edgeNum < 4; edgeNum++) { - vtkCell* edgePtr = cellPtr->GetEdge(edgeNum); - double anEdgeKey; - genEdgeKey(edgePtr->GetPointId(0), edgePtr->GetPointId(1), &anEdgeKey); - if (!aMapOfEdges.contains(anEdgeKey)) { - nbOfEdges++; - aMapOfEdges.insert(anEdgeKey, 0); - } - } - break; - } - case 10: //Tetraedras - { - nbOfTetras++; - - for (int edgeNum = 0; edgeNum < 6; edgeNum++) { - vtkCell* edgePtr = cellPtr->GetEdge(edgeNum); - double anEdgeKey; - genEdgeKey(edgePtr->GetPointId(0), edgePtr->GetPointId(1), &anEdgeKey); - if (!aMapOfEdges.contains(anEdgeKey)) { - nbOfEdges++; - aMapOfEdges.insert(anEdgeKey, 0); - } - } - break; - } - case 12: //Hexahedras - { - nbOfHexas++; - - for (int edgeNum = 0; edgeNum < 12; edgeNum++) { - vtkCell* edgePtr = cellPtr->GetEdge(edgeNum); - double anEdgeKey; - genEdgeKey(edgePtr->GetPointId(0), edgePtr->GetPointId(1), &anEdgeKey); - if (!aMapOfEdges.contains(anEdgeKey)) { - nbOfEdges++; - aMapOfEdges.insert(anEdgeKey, 0); - } - } - break; - } - } + SUIT_OverrideCursor wc; + + SALOME_ListIO aList; + mySelectionMgr->selectedObjects(aList); + + int nbSel = aList.Extent(); + if (nbSel == 1) { + myStartSelection = false; + mySelectLab->setText(""); + Handle(SALOME_InteractiveObject) IObject = aList.First(); + _PTR(SObject) aSO = SMESH::GetActiveStudyDocument()->FindObjectID(IObject->getEntry()); + if (aSO) { + //CORBA::Object_var anObject = aSO->GetObject(); + CORBA::Object_var anObject = SMESH::SObjectToObject(aSO); + if (!CORBA::is_nil(anObject)) { + SMESH::SMESH_IDSource_var anIDSource = SMESH::SMESH_IDSource::_narrow(anObject); + if (!anIDSource->_is_nil()) { + myWGStack->setCurrentWidget(myMeshWidget); + setWindowTitle(tr("SMESH_MESHINFO_TITLE") + " [" + tr("SMESH_OBJECT_MESH") + "]"); + myMeshName->setText(aSO->GetName().c_str()); + + SMESH::long_array_var aMeshInfo = anIDSource->GetMeshInfo(); + myMeshInfoBox->SetMeshInfo( aMeshInfo ); + + return; + } + } } } - */ - TextLabel13->setText( tr( "%1" ).arg(nbOfNodes) ); - TextLabel14->setText( tr( "%1" ).arg(nbOfEdges) ); - TextLabel23->setText( tr( "%1" ).arg(nbOfTriangles) ); - TextLabel24->setText( tr( "%1" ).arg(nbOfQuadrangles) ); - TextLabel33->setText( tr( "%1" ).arg(nbOfTetras) ); - TextLabel34->setText( tr( "%1" ).arg(nbOfHexas) ); -} - -//================================================================================= -// function : ClickOnOk() -// purpose : -//================================================================================= -void SMESHGUI_MeshInfosDlg::ClickOnOk() -{ - disconnect( mySelection, 0, this, 0 ); - mySMESHGUI->ResetState() ; - reject() ; - return ; + myWGStack->setCurrentIndex(0); + setWindowTitle(tr("SMESH_MESHINFO_TITLE")); } //================================================================================= // function : SelectionIntoArgument() // purpose : Called when selection has changed //================================================================================= -void SMESHGUI_MeshInfosDlg::SelectionIntoArgument() +void SMESHGUI_MeshInfosDlg::onSelectionChanged() { - TextLabel13->setText( "0" ); - TextLabel14->setText( "0" ); - TextLabel23->setText( "0" ); - TextLabel24->setText( "0" ); - TextLabel33->setText( "0" ); - TextLabel34->setText( "0" ); - - int nbSel = mySelection->IObjectCount(); - if ( nbSel == 1 ) { - Handle(SALOME_InteractiveObject) IObject = mySelection->firstIObject(); - Standard_Boolean res; - myMesh = mySMESHGUI->ConvertIOinMesh( IObject, res ); - if ( res ) - DumpMeshInfos(); - } - return ; + if (myStartSelection) + DumpMeshInfos(); } - //================================================================================= // function : closeEvent() // purpose : //================================================================================= -void SMESHGUI_MeshInfosDlg::closeEvent( QCloseEvent* e ) +void SMESHGUI_MeshInfosDlg::closeEvent(QCloseEvent* e) { - disconnect( mySelection, 0, this, 0 ); - mySMESHGUI->ResetState() ; - reject() ; - return ; + mySMESHGUI->ResetState(); + QDialog::closeEvent(e); } - //================================================================================= -// function : enterEvent() -// purpose : when mouse enter onto the QWidget +// function : windowActivationChange() +// purpose : called when window is activated/deactivated //================================================================================= -void SMESHGUI_MeshInfosDlg::enterEvent( QEvent * ) +void SMESHGUI_MeshInfosDlg::windowActivationChange(bool oldActive) { - ActivateThisDialog() ; + QDialog::windowActivationChange(oldActive); + if (isActiveWindow() && myIsActiveWindow != isActiveWindow()) + ActivateThisDialog(); + myIsActiveWindow = isActiveWindow(); } - //================================================================================= // function : DeactivateActiveDialog() // purpose : //================================================================================= void SMESHGUI_MeshInfosDlg::DeactivateActiveDialog() { - disconnect( mySelection, 0, this, 0 ); - - return ; + disconnect(mySelectionMgr, 0, this, 0); } - //================================================================================= // function : ActivateThisDialog() // purpose : @@ -421,8 +267,58 @@ void SMESHGUI_MeshInfosDlg::DeactivateActiveDialog() void SMESHGUI_MeshInfosDlg::ActivateThisDialog() { /* Emit a signal to deactivate any active dialog */ - mySMESHGUI->EmitSignalDeactivateDialog() ; + mySMESHGUI->EmitSignalDeactivateDialog(); + connect(mySelectionMgr, SIGNAL(currentSelectionChanged()), this, SLOT(onSelectionChanged())); +} - return ; +//================================================================================= +// function : onStartSelection() +// purpose : starts selection +//================================================================================= +void SMESHGUI_MeshInfosDlg::onStartSelection() +{ + myStartSelection = true; + onSelectionChanged(); + myStartSelection = true; + mySelectLab->setText(tr("INF_SELECT_OBJECT")); +} + +//================================================================================= +// function : onHelp() +// purpose : +//================================================================================= +void SMESHGUI_MeshInfosDlg::onHelp() +{ + LightApp_Application* app = (LightApp_Application*)(SUIT_Session::session()->activeApplication()); + if (app) + app->onHelpContextModule(mySMESHGUI ? app->moduleName(mySMESHGUI->moduleName()) : QString(""), myHelpFileName); + else { + QString platform; +#ifdef WIN32 + platform = "winapplication"; +#else + platform = "application"; +#endif + SUIT_MessageBox::warning(this, tr("WRN_WARNING"), + tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE"). + arg(app->resourceMgr()->stringValue("ExternalBrowser", + platform)). + arg(myHelpFileName)); + } } +//================================================================================= +// function : keyPressEvent() +// purpose : +//================================================================================= +void SMESHGUI_MeshInfosDlg::keyPressEvent( QKeyEvent* e ) +{ + QDialog::keyPressEvent( e ); + if ( e->isAccepted() ) + return; + + if ( e->key() == Qt::Key_F1 ) { + e->accept(); + onHelp(); + } +}