X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDROGUI%2FHYDROGUI_ObjSelector.cxx;h=22e672da603a64ccce5663000f0202a2fb3dc874;hb=d6e19029f8b41f295db878e9aecf451c2edda4af;hp=f087c09dd135fc88aa89744c280e292c590cd83e;hpb=3769dbcedaa689e15ad79a619acd6f8bc21f47c6;p=modules%2Fhydro.git diff --git a/src/HYDROGUI/HYDROGUI_ObjSelector.cxx b/src/HYDROGUI/HYDROGUI_ObjSelector.cxx index f087c09d..22e672da 100644 --- a/src/HYDROGUI/HYDROGUI_ObjSelector.cxx +++ b/src/HYDROGUI/HYDROGUI_ObjSelector.cxx @@ -1,12 +1,8 @@ -// Copyright (C) 2007-2013 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 -// +// Copyright (C) 2014-2015 EDF-R&D // 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. +// 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 @@ -24,22 +20,35 @@ #include "HYDROGUI_DataModel.h" #include "HYDROGUI_Module.h" +#include "HYDROGUI_Tool.h" + +#include #include #include -#include #include #include +#include +#include + #include #include #include -HYDROGUI_ObjSelector::HYDROGUI_ObjSelector( HYDROGUI_Module* theModule, QWidget* theParent ) -: QAbstractButton( theParent ), myModule( theModule ) +HYDROGUI_ObjSelector::HYDROGUI_ObjSelector( HYDROGUI_Module* theModule, + const ObjectKind theObjectKind, + QWidget* theParent, + const int theObjectFlags) +: QAbstractButton( theParent ), + myObjectKind( theObjectKind ), + myModule( theModule ), + myObjectFlags( theObjectFlags ) { QHBoxLayout* aLayout = new QHBoxLayout( this ); + aLayout->setMargin( 0 ); + aLayout->setSpacing( 5 ); myBtn = new QToolButton( this ); myBtn->setCheckable( true ); myBtn->setChecked( false ); @@ -48,6 +57,9 @@ HYDROGUI_ObjSelector::HYDROGUI_ObjSelector( HYDROGUI_Module* theModule, QWidget* aLayout->addWidget( myBtn, 0 ); aLayout->addWidget( myObjName, 1 ); + SUIT_ResourceMgr* aResMgr = SUIT_Session::session()->resourceMgr(); + myBtn->setIcon( QIcon( aResMgr->loadPixmap( "HYDRO", tr( "SELECT_ICO" ) ) ) ); + SUIT_SelectionMgr* aSelMgr = theModule->getApp()->selectionMgr(); connect( myBtn, SIGNAL( toggled( bool ) ), this, SLOT( OnToggled( bool ) ) ); @@ -86,31 +98,59 @@ void HYDROGUI_ObjSelector::OnSelectionChanged() if( !myBtn->isChecked() ) return; - SUIT_SelectionMgr* aSelMgr = myModule->getApp()->selectionMgr(); - SUIT_DataOwnerPtrList anOwners; - aSelMgr->selected( anOwners ); - - HYDROGUI_DataModel* aModel = myModule->getDataModel(); - QString anObjName; - foreach( SUIT_DataOwner* anOwner, anOwners ) - { - LightApp_DataOwner* aGrDOwner = dynamic_cast( anOwner ); - if( aGrDOwner ) + Handle(HYDROData_Entity) anObject = HYDROGUI_Tool::GetSelectedObject( myModule ); + if( !anObject.IsNull() ) + if( myObjectKind == KIND_UNKNOWN || myObjectKind == anObject->GetKind() ) { - QString anEntry = aGrDOwner->entry(); - Handle(HYDROData_Object) anObject = aModel->objectByEntry( anEntry, KIND_IMAGE ); - if( !anObject.IsNull() ) - { + if ( myObjectKind == KIND_POLYLINEXY && ( myObjectFlags & ClosedPolyline ) ) { + // check if the polyline is closed + Handle(HYDROData_PolylineXY) aPolylineObj = + Handle(HYDROData_PolylineXY)::DownCast( anObject ); + if ( !aPolylineObj.IsNull() && aPolylineObj->IsClosed() ) { + anObjName = aPolylineObj->GetName(); + } + } else { anObjName = anObject->GetName(); - break; + } + + // Check if the same object has not been selected in other selectors of the same parent widget. + if ( !anObjName.isEmpty() ) + { + QList aSelectors = parentWidget()->findChildren(); + foreach( HYDROGUI_ObjSelector* aSelector, aSelectors ) + { + if( aSelector != this && ( aSelector->GetName() == anObjName ) ) + { + // Forbid selection of the same object + emit alreadySelected( anObjName ); + return; + } + } } } - } - myObjName->setText( anObjName ); + + SetName( anObjName ); +} + +void HYDROGUI_ObjSelector::SetName( const QString& theName ) +{ + myObjName->setText( theName ); + emit selectionChanged(); } QString HYDROGUI_ObjSelector::GetName() const { return myObjName->text(); } + +void HYDROGUI_ObjSelector::Clear() +{ + myObjName->clear(); + myBtn->setChecked( false ); +} + +void HYDROGUI_ObjSelector::SetChecked( const bool theState ) +{ + myBtn->setChecked( theState ); +}