+
+class GroupCombo: public QComboBox
+{
+ class Item: public QStandardItem
+ {
+ public:
+ SMESH::SMESH_GroupBase_var myGroup;
+ Item( SMESH::SMESH_GroupBase_ptr group )
+ {
+ myGroup = SMESH::SMESH_GroupBase::_duplicate( group );
+ setText( myGroup->GetName() );
+ }
+ SMESH::SMESH_GroupBase_ptr group()
+ {
+ return SMESH::SMESH_GroupBase::_duplicate( myGroup );
+ }
+ };
+ SMESH::SMESH_IDSource_var myObj;
+public:
+ GroupCombo( QWidget* parent ): QComboBox( parent )
+ {
+ setModel( new QStandardItemModel( this ) );
+ }
+ void setSource( SMESH::SMESH_IDSource_ptr obj )
+ {
+ if ( myObj->_is_equivalent( obj ) )
+ return;
+ myObj = SMESH::SMESH_IDSource::_duplicate( obj );
+ bool blocked = blockSignals( true );
+ QStandardItemModel* m = dynamic_cast<QStandardItemModel*>(model());
+ m->clear();
+ SMESH::SMESH_Mesh_var mesh = SMESH::SMESH_Mesh::_narrow( myObj );
+ SMESH::SMESH_GroupBase_var group = SMESH::SMESH_GroupBase::_narrow( myObj );
+ if ( !mesh->_is_nil() ) {
+ SMESH::ListOfGroups_var groups = mesh->GetGroups();
+ for ( size_t i = 0; i < groups->length(); ++i ) {
+ if ( !CORBA::is_nil( groups[i] ) ) {
+ QString name = groups[0]->GetName();
+ if ( !name.isEmpty() )
+ m->appendRow( new Item( groups[i].in() ) );
+ }
+ }
+ setCurrentIndex(-1); // for performance reasons
+ }
+ else if ( !group->_is_nil() ) {
+ m->appendRow( new Item( group.in() ) );
+ setCurrentIndex(0);
+ }
+ blockSignals( blocked );
+ }
+ SMESH::SMESH_GroupBase_ptr currentGroup()
+ {
+ SMESH::SMESH_GroupBase_var group;
+ QStandardItemModel* m = dynamic_cast<QStandardItemModel*>(model());
+ if ( currentIndex() >= 0 )
+ group = dynamic_cast<Item*>(m->item(currentIndex()))->myGroup;
+ return group._retn();
+ }
+};
+