X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FStdMeshersGUI%2FStdMeshersGUI_ObjectReferenceParamWdg.cxx;h=3390e8b59346265648ec19b598dc331ed0062705;hb=0f0bf7c72871fc015ec1637067cd1d58e61395b9;hp=85ec4d6b42b92c64915ffe3f1da72770f89e7b0e;hpb=79b1ac2b6df9117f16f11d444b1f165d477a1813;p=modules%2Fsmesh.git diff --git a/src/StdMeshersGUI/StdMeshersGUI_ObjectReferenceParamWdg.cxx b/src/StdMeshersGUI/StdMeshersGUI_ObjectReferenceParamWdg.cxx index 85ec4d6b4..3390e8b59 100644 --- a/src/StdMeshersGUI/StdMeshersGUI_ObjectReferenceParamWdg.cxx +++ b/src/StdMeshersGUI/StdMeshersGUI_ObjectReferenceParamWdg.cxx @@ -1,44 +1,51 @@ -// SMESH StdMeshersGUI +// Copyright (C) 2007-2016 CEA/DEN, EDF R&D, OPEN CASCADE // -// 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 +// 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, or (at your option) any later version. // +// 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 +// File : StdMeshersGUI_ObjectReferenceParamWdg.cxx +// Author : Open CASCADE S.A.S. +// SMESH includes +// #include "StdMeshersGUI_ObjectReferenceParamWdg.h" -#include -#include -#include +#include +#include +#include + +// SALOME GUI includes +#include +#include +#include +#include + +// SALOME KERNEL incldues +#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" +// Qt includes +#include +#include +#include + +#define SPACING 6 //================================================================================ /*! @@ -48,10 +55,12 @@ //================================================================================ StdMeshersGUI_ObjectReferenceParamWdg::StdMeshersGUI_ObjectReferenceParamWdg -( SUIT_SelectionFilter* f, QWidget* parent) - : QHGroupBox( parent ) +( SUIT_SelectionFilter* f, QWidget* parent, bool multiSelection + /*, bool stretch */) + : QWidget( parent ), myMultiSelection( multiSelection ) { myFilter = f; + // myStretchActivated = stretch; init(); } @@ -63,8 +72,8 @@ StdMeshersGUI_ObjectReferenceParamWdg::StdMeshersGUI_ObjectReferenceParamWdg //================================================================================ StdMeshersGUI_ObjectReferenceParamWdg::StdMeshersGUI_ObjectReferenceParamWdg -( MeshObjectType objType, QWidget* parent ) - : QHGroupBox( parent ) +( SMESH::MeshObjectType objType, QWidget* parent, bool multiSelection ) + : QWidget( parent ), myMultiSelection( multiSelection ) { myFilter = new SMESH_TypeFilter( objType ); init(); @@ -78,7 +87,10 @@ StdMeshersGUI_ObjectReferenceParamWdg::StdMeshersGUI_ObjectReferenceParamWdg StdMeshersGUI_ObjectReferenceParamWdg::~StdMeshersGUI_ObjectReferenceParamWdg() { if ( myFilter ) + { + mySelectionMgr->removeFilter( myFilter ); delete myFilter; + } } @@ -90,23 +102,35 @@ StdMeshersGUI_ObjectReferenceParamWdg::~StdMeshersGUI_ObjectReferenceParamWdg() void StdMeshersGUI_ObjectReferenceParamWdg::init() { - setFrameStyle(QFrame::NoFrame); - setInsideMargin(0); + QHBoxLayout* aHBox = new QHBoxLayout(this); + + aHBox->setMargin(0); + aHBox->setSpacing(SPACING); mySMESHGUI = SMESHGUI::GetSMESHGUI(); mySelectionMgr = SMESH::GetSelectionMgr( mySMESHGUI ); mySelectionActivated = false; myParamValue = ""; + myEmptyText = ""; + myEmptyStyleSheet =""; SUIT_ResourceMgr* mgr = SMESH::GetResourceMgr( mySMESHGUI ); QPixmap iconSlct ( mgr->loadPixmap("SMESH", tr("ICON_SELECT"))); mySelButton = new QPushButton(this); - mySelButton->setPixmap(iconSlct); - mySelButton->setToggleButton( true ); + mySelButton->setIcon(iconSlct); + mySelButton->setCheckable( true ); myObjNameLineEdit = new QLineEdit(this); myObjNameLineEdit->setReadOnly(true); + myObjNameLineEdit->setStyleSheet(myEmptyStyleSheet); + myObjNameLineEdit->setMinimumWidth(150); + + aHBox->addWidget( mySelButton ); + aHBox->addWidget( myObjNameLineEdit ); + //if (myStretchActivated){ + // aHBox->addStretch(); + //} connect( mySelButton, SIGNAL(clicked()), SLOT(activateSelection())); } @@ -130,8 +154,9 @@ void StdMeshersGUI_ObjectReferenceParamWdg::activateSelection() connect(mySelectionMgr, SIGNAL(currentSelectionChanged()), SLOT(onSelectionDone())); } emit selectionActivated(); + onSelectionDone(); - mySelButton->setOn( mySelectionActivated ); + mySelButton->setChecked( mySelectionActivated ); } //================================================================================ @@ -146,7 +171,7 @@ void StdMeshersGUI_ObjectReferenceParamWdg::deactivateSelection() disconnect(mySelectionMgr, 0, this, 0 ); mySelectionMgr->removeFilter( myFilter ); - mySelButton->setOn( mySelectionActivated ); + mySelButton->setChecked( mySelectionActivated ); } //================================================================================ @@ -172,19 +197,62 @@ void StdMeshersGUI_ObjectReferenceParamWdg::AvoidSimultaneousSelection void StdMeshersGUI_ObjectReferenceParamWdg::SetObject(CORBA::Object_ptr obj) { - myObject = CORBA::Object::_nil(); - myObjNameLineEdit->setText( "" ); + myObjects.clear(); + myObjNameLineEdit->setText( myEmptyText ); + myObjNameLineEdit->setStyleSheet(myEmptyStyleSheet); 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(); + std::string name = sobj->GetName(); + myObjNameLineEdit->setText( QString( name.c_str() ).trimmed() ); + myObjNameLineEdit->setStyleSheet(""); + myObjects.push_back( CORBA::Object::_duplicate( obj )); + myParamValue = sobj->GetID().c_str(); + } + emit contentModified(); +} + +//================================================================================ +/*! + * \brief Initialize selected objects + * \param objects - entries of objects + */ +//================================================================================ + +void StdMeshersGUI_ObjectReferenceParamWdg::SetObjects(SMESH::string_array_var& objects) +{ + myObjects.clear(); + myObjNameLineEdit->setText( myEmptyText ); + myObjNameLineEdit->setStyleSheet(myEmptyStyleSheet); + myParamValue = ""; + bool selChanged = false; + + for ( unsigned i = 0; i < objects->length(); ++i ) + { + _PTR(Study) aStudy = SMESH::GetActiveStudyDocument(); + _PTR(SObject) aSObj = aStudy->FindObjectID(objects[i].in()); + CORBA::Object_var anObj = SMESH::SObjectToObject(aSObj,aStudy); + if ( !CORBA::is_nil( anObj )) { + std::string name = aSObj->GetName(); + QString text = myObjNameLineEdit->text(); + if ( text != myEmptyText ) + text += " "; + else + text = ""; + text += QString( name.c_str() ).trimmed(); + myObjNameLineEdit->setText( text ); + myObjNameLineEdit->setStyleSheet(""); + myObjects.push_back( anObj ); + myParamValue += " "; + myParamValue += objects[i]; + selChanged = true; + } } + if (selChanged) + emit contentModified(); } //================================================================================ @@ -200,7 +268,34 @@ void StdMeshersGUI_ObjectReferenceParamWdg::onSelectionDone() SALOME_ListIO aList; mySelectionMgr->selectedObjects(aList); if (aList.Extent() == 1) + { obj = SMESH::IObjectToObject( aList.First() ); - SetObject( obj.in() ); + SetObject( obj.in() ); + } + else if (myMultiSelection) + { + SMESH::string_array_var objIds = new SMESH::string_array; + objIds->length( aList.Extent()); + SALOME_ListIteratorOfListIO io( aList ); + int i = 0; + for ( ; io.More(); io.Next(), ++i ) + { + Handle(SALOME_InteractiveObject) anIO = io.Value(); + if ( anIO->hasEntry() ) + objIds[i] = anIO->getEntry(); + else + i--; + } + objIds->length(i); + SetObjects( objIds ); + } } } + +void StdMeshersGUI_ObjectReferenceParamWdg::SetDefaultText(QString defaultText, QString styleSheet) +{ + myEmptyText = defaultText; + myEmptyStyleSheet = styleSheet; + myObjNameLineEdit->setText( myEmptyText ); + myObjNameLineEdit->setStyleSheet( myEmptyStyleSheet); +}