X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FStdMeshersGUI%2FStdMeshersGUI_ObjectReferenceParamWdg.cxx;fp=src%2FStdMeshersGUI%2FStdMeshersGUI_ObjectReferenceParamWdg.cxx;h=85ec4d6b42b92c64915ffe3f1da72770f89e7b0e;hp=0000000000000000000000000000000000000000;hb=79b1ac2b6df9117f16f11d444b1f165d477a1813;hpb=984c4ffdd7df62aeaedc544cd0b8e64ff8f53f1a;ds=sidebyside diff --git a/src/StdMeshersGUI/StdMeshersGUI_ObjectReferenceParamWdg.cxx b/src/StdMeshersGUI/StdMeshersGUI_ObjectReferenceParamWdg.cxx new file mode 100644 index 000000000..85ec4d6b4 --- /dev/null +++ b/src/StdMeshersGUI/StdMeshersGUI_ObjectReferenceParamWdg.cxx @@ -0,0 +1,206 @@ +// SMESH StdMeshersGUI +// +// 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 : StdMeshersGUI_ObjectReferenceParamWdg.cxx +// Module : SMESH + +#include "StdMeshersGUI_ObjectReferenceParamWdg.h" + +#include +#include +#include + +#include "SMESHGUI.h" +#include "SMESHGUI_Utils.h" +#include "SMESHGUI_VTKUtils.h" +#include "SMESH_TypeFilter.hxx" +#include "SUIT_ResourceMgr.h" +#include "LightApp_SelectionMgr.h" +#include "SVTK_ViewWindow.h" +#include "SALOME_ListIO.hxx" +#include "SALOMEDSClient_SObject.hxx" + +//================================================================================ +/*! + * \brief Constructor initialized by filter + * \param f - object filter + */ +//================================================================================ + +StdMeshersGUI_ObjectReferenceParamWdg::StdMeshersGUI_ObjectReferenceParamWdg +( SUIT_SelectionFilter* f, QWidget* parent) + : QHGroupBox( parent ) +{ + myFilter = f; + init(); +} + +//================================================================================ +/*! + * \brief Constructor initialized by object type + * \param MeshObjectType - type of object to select + */ +//================================================================================ + +StdMeshersGUI_ObjectReferenceParamWdg::StdMeshersGUI_ObjectReferenceParamWdg +( MeshObjectType objType, QWidget* parent ) + : QHGroupBox( parent ) +{ + myFilter = new SMESH_TypeFilter( objType ); + init(); +} +//================================================================================ +/*! + * \brief Destructor + */ +//================================================================================ + +StdMeshersGUI_ObjectReferenceParamWdg::~StdMeshersGUI_ObjectReferenceParamWdg() +{ + if ( myFilter ) + delete myFilter; +} + + +//================================================================================ +/*! + * \brief Create a leayout, initialize fields + */ +//================================================================================ + +void StdMeshersGUI_ObjectReferenceParamWdg::init() +{ + setFrameStyle(QFrame::NoFrame); + setInsideMargin(0); + + mySMESHGUI = SMESHGUI::GetSMESHGUI(); + mySelectionMgr = SMESH::GetSelectionMgr( mySMESHGUI ); + mySelectionActivated = false; + myParamValue = ""; + + SUIT_ResourceMgr* mgr = SMESH::GetResourceMgr( mySMESHGUI ); + QPixmap iconSlct ( mgr->loadPixmap("SMESH", tr("ICON_SELECT"))); + + mySelButton = new QPushButton(this); + mySelButton->setPixmap(iconSlct); + mySelButton->setToggleButton( true ); + + myObjNameLineEdit = new QLineEdit(this); + myObjNameLineEdit->setReadOnly(true); + + connect( mySelButton, SIGNAL(clicked()), SLOT(activateSelection())); +} + +//================================================================================ +/*! + * \brief SLOT: Installs selection filter that is not done automatically + */ +//================================================================================ + +void StdMeshersGUI_ObjectReferenceParamWdg::activateSelection() +{ + if ( !mySelectionActivated && mySelectionMgr ) + { + mySelectionActivated = true; + mySelectionMgr->clearFilters(); + if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) + aViewWindow->SetSelectionMode(ActorSelection); + if ( myFilter ) + mySelectionMgr->installFilter( myFilter ); + connect(mySelectionMgr, SIGNAL(currentSelectionChanged()), SLOT(onSelectionDone())); + } + emit selectionActivated(); + + mySelButton->setOn( mySelectionActivated ); +} + +//================================================================================ +/*! + * \brief SLOT: stop treating selection changes + */ +//================================================================================ + +void StdMeshersGUI_ObjectReferenceParamWdg::deactivateSelection() +{ + mySelectionActivated = false; + disconnect(mySelectionMgr, 0, this, 0 ); + mySelectionMgr->removeFilter( myFilter ); + + mySelButton->setOn( mySelectionActivated ); +} + +//================================================================================ +/*! + * \brief Connect selection slots + * \param other - another StdMeshersGUI_ObjectReferenceParamWdg + */ +//================================================================================ + +void StdMeshersGUI_ObjectReferenceParamWdg::AvoidSimultaneousSelection + ( StdMeshersGUI_ObjectReferenceParamWdg* other) +{ + connect(other, SIGNAL(selectionActivated()), this, SLOT(deactivateSelection())); + connect(this, SIGNAL(selectionActivated()), other, SLOT(deactivateSelection())); +} + +//================================================================================ +/*! + * \brief Initialize selected object name + * \param obj - the current object + */ +//================================================================================ + +void StdMeshersGUI_ObjectReferenceParamWdg::SetObject(CORBA::Object_ptr obj) +{ + myObject = CORBA::Object::_nil(); + myObjNameLineEdit->setText( "" ); + myParamValue = ""; + + _PTR(SObject) sobj; + if ( !CORBA::is_nil( obj )) + sobj = SMESH::FindSObject (obj); + if ( sobj ) { + string name = sobj->GetName(); + myObjNameLineEdit->setText( name.c_str() ); + myObject = CORBA::Object::_duplicate( obj ); + myParamValue = sobj->GetID(); + } +} + +//================================================================================ +/*! + * \brief Takes selected object + */ +//================================================================================ + +void StdMeshersGUI_ObjectReferenceParamWdg::onSelectionDone() +{ + if ( mySelectionActivated ) { + CORBA::Object_var obj; + SALOME_ListIO aList; + mySelectionMgr->selectedObjects(aList); + if (aList.Extent() == 1) + obj = SMESH::IObjectToObject( aList.First() ); + SetObject( obj.in() ); + } +}