// else
if( p == "type" )
return QVariant( typeName( ind ) );
+ if( p == "typeid" )
+ return QVariant( typeId( ind ) );
else if ( p == "displaymode" )
return QVariant( displayMode( ind ) );
else if ( p == "isAutoColor" )
return QVariant( isAutoColor( ind ) );
else if ( p == "isVectorsMode" )
return QVariant( isVectorsMode( ind ) );
+ else if ( p == "hasHiddenChildren" )
+ return QVariant( hasHiddenChildren( ind ) );
+ else if ( p == "hasShownChildren" )
+ return QVariant( hasShownChildren( ind ) );
else
return LightApp_Selection::parameter( ind, p );
}
return "Unknown";
}
+int GEOMGUI_Selection::typeId( const int index ) const
+{
+ int aType = -1;
+ GEOM::GEOM_Object_var anObj = getObject( index );
+ if ( !CORBA::is_nil( anObj ) )
+ aType = anObj->GetType();
+ return aType;
+}
+
bool GEOMGUI_Selection::isVisible( const int index ) const
{
GEOM::GEOM_Object_var obj = getObject( index );
SALOME_Prs* prs = view->CreatePrs( entry( index ).toLatin1().constData() );
if ( prs ) {
if ( viewType == OCCViewer_Viewer::Type() ) { // assuming OCC
- SOCC_Prs* occPrs = (SOCC_Prs*) prs;
- AIS_ListOfInteractive lst;
- occPrs->GetObjects( lst );
- if ( lst.Extent() ) {
- Handle(AIS_InteractiveObject) io = lst.First();
- if ( !io.IsNull() ) {
- Handle(GEOM_AISShape) aSh = Handle(GEOM_AISShape)::DownCast(io);
- ret = aSh->isShowVectors();
- }
- }
+ SOCC_Prs* occPrs = (SOCC_Prs*) prs;
+ AIS_ListOfInteractive lst;
+ occPrs->GetObjects( lst );
+ if ( lst.Extent() ) {
+ Handle(AIS_InteractiveObject) io = lst.First();
+ if ( !io.IsNull() ) {
+ Handle(GEOM_AISShape) aSh = Handle(GEOM_AISShape)::DownCast(io);
+ if ( !aSh.IsNull() )
+ ret = aSh->isShowVectors();
+ }
+ }
} else if ( viewType == SVTK_Viewer::Type() ) { // assuming VTK
- SVTK_Prs* vtkPrs = dynamic_cast<SVTK_Prs*>( prs );
- vtkActorCollection* lst = vtkPrs ? vtkPrs->GetObjects() : 0;
- if ( lst ) {
- lst->InitTraversal();
- vtkActor* actor = lst->GetNextActor();
- if ( actor ) {
- GEOM_Actor* aGeomActor = GEOM_Actor::SafeDownCast(actor);
- ret = aGeomActor->GetVectorMode();
- }
- }
+ SVTK_Prs* vtkPrs = dynamic_cast<SVTK_Prs*>( prs );
+ vtkActorCollection* lst = vtkPrs ? vtkPrs->GetObjects() : 0;
+ if ( lst ) {
+ lst->InitTraversal();
+ vtkActor* actor = lst->GetNextActor();
+ if ( actor ) {
+ GEOM_Actor* aGeomActor = GEOM_Actor::SafeDownCast(actor);
+ if ( aGeomActor )
+ ret = aGeomActor->GetVectorMode();
+ }
+ }
}
}
}
return ret;
}
+bool GEOMGUI_Selection::hasChildren( const _PTR(SObject)& obj )
+{
+ bool ok = false;
+ if ( obj ) {
+ _PTR(ChildIterator) it ( obj->GetStudy()->NewChildIterator( obj ) );
+ for ( ; it->More() && !ok; it->Next() ) {
+ _PTR(SObject) child = it->Value();
+ if ( child ) {
+ _PTR(SObject) refObj;
+ if ( child->ReferencedObject( refObj ) ) continue; // omit references
+ if ( child->GetName() != "" ) ok = true;
+ }
+ }
+ }
+ return ok;
+}
+
+bool GEOMGUI_Selection::expandable( const _PTR(SObject)& obj )
+{
+ bool exp = true;
+ _PTR(GenericAttribute) anAttr;
+ if ( obj && obj->FindAttribute( anAttr, "AttributeExpandable" ) ) {
+ _PTR(AttributeExpandable) aAttrExp = anAttr;
+ exp = aAttrExp->IsExpandable();
+ }
+ return exp;
+}
+
+bool GEOMGUI_Selection::hasHiddenChildren( const int index ) const
+{
+ bool OK = false;
+ SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>
+ (SUIT_Session::session()->activeApplication()->activeStudy());
+
+ if ( appStudy && index >= 0 && index < count() ) {
+ _PTR(Study) study = appStudy->studyDS();
+ QString anEntry = entry( index );
+
+ if ( study && !anEntry.isEmpty() ) {
+ _PTR(SObject) aSO( study->FindObjectID( anEntry.toStdString() ) );
+ OK = !expandable( aSO ) && hasChildren( aSO );
+ }
+ }
+ return OK;
+}
+
+bool GEOMGUI_Selection::hasShownChildren( const int index ) const
+{
+ bool OK = false;
+ SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>
+ (SUIT_Session::session()->activeApplication()->activeStudy());
+
+ if ( appStudy && index >= 0 && index < count() ) {
+ _PTR(Study) study = appStudy->studyDS();
+ QString anEntry = entry( index );
+
+ if ( study && !anEntry.isEmpty() ) {
+ _PTR(SObject) aSO( study->FindObjectID( anEntry.toStdString() ) );
+ OK = expandable( aSO ) && hasChildren( aSO );
+ }
+ }
+ return OK;
+}
+
bool GEOMGUI_Selection::isComponent( const int index ) const
{
SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>