mirror of
https://git.salome-platform.org/gitpub/modules/geom.git
synced 2024-11-14 09:38:34 +05:00
0021708: [CEA 586] Object browser sort only children:
+ Add Use Case browser data tree management + Add "Sort children" contextual menu popup item + Update user documentation
This commit is contained in:
parent
a992b19d3a
commit
1dd8f0e9e6
BIN
doc/salome/gui/GEOM/images/geom_sort.png
Normal file
BIN
doc/salome/gui/GEOM/images/geom_sort.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 405 KiB |
@ -20,6 +20,10 @@ To create a folder select "Create folder" popup menu item for root "Geometry" ob
|
|||||||
<li> folder(s)
|
<li> folder(s)
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
If geometrical object has more than one child sub-object, then there is a possibility to sort these children in ascending order. To use sort functionality select "Sort children" popup menu item for the parent object.
|
||||||
|
|
||||||
|
\image html geom_sort.png "Sorting of sub-objects"
|
||||||
|
|
||||||
Our <b>TUI Scripts</b> provide you with useful examples of
|
Our <b>TUI Scripts</b> provide you with useful examples of
|
||||||
\ref tui_arranging_study_objects "Arranging objects in study".
|
\ref tui_arranging_study_objects "Arranging objects in study".
|
||||||
|
|
||||||
|
@ -161,6 +161,8 @@ QVariant GEOMGUI_Selection::parameter( const int idx, const QString& p ) const
|
|||||||
v = topLevel( idx );
|
v = topLevel( idx );
|
||||||
else if ( p == "hasChildren" )
|
else if ( p == "hasChildren" )
|
||||||
v = hasChildren( idx );
|
v = hasChildren( idx );
|
||||||
|
else if ( p == "nbChildren" )
|
||||||
|
v = nbChildren(idx);
|
||||||
else if ( p == "hasConcealedChildren" )
|
else if ( p == "hasConcealedChildren" )
|
||||||
v = hasConcealedChildren( idx );
|
v = hasConcealedChildren( idx );
|
||||||
else if ( p == "hasDisclosedChildren" )
|
else if ( p == "hasDisclosedChildren" )
|
||||||
@ -399,19 +401,8 @@ bool GEOMGUI_Selection::isVectorsMode( const int index ) const
|
|||||||
|
|
||||||
bool GEOMGUI_Selection::hasChildren( const _PTR(SObject)& obj )
|
bool GEOMGUI_Selection::hasChildren( const _PTR(SObject)& obj )
|
||||||
{
|
{
|
||||||
bool ok = false;
|
// as soon as Use Case browser data tree was added
|
||||||
if ( obj ) {
|
return obj->GetStudy()->GetUseCaseBuilder()->HasChildren( 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 GEOMGUI_Selection::expandable( const _PTR(SObject)& obj )
|
||||||
@ -436,6 +427,17 @@ bool GEOMGUI_Selection::isCompoundOfVertices( GEOM::GEOM_Object_ptr obj )
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool GEOMGUI_Selection::isFolder( const _PTR(SObject)& obj )
|
||||||
|
{
|
||||||
|
bool ret = false;
|
||||||
|
_PTR(GenericAttribute) anAttr;
|
||||||
|
if ( obj->FindAttribute(anAttr, "AttributeLocalID") ) {
|
||||||
|
_PTR(AttributeLocalID) aLocalID( anAttr );
|
||||||
|
ret = aLocalID->Value() == 999;
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
bool GEOMGUI_Selection::hasChildren( const int index ) const
|
bool GEOMGUI_Selection::hasChildren( const int index ) const
|
||||||
{
|
{
|
||||||
bool ok = false;
|
bool ok = false;
|
||||||
@ -452,6 +454,25 @@ bool GEOMGUI_Selection::hasChildren( const int index ) const
|
|||||||
return ok;
|
return ok;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int GEOMGUI_Selection::nbChildren( const int index ) const
|
||||||
|
{
|
||||||
|
int nb = 0;
|
||||||
|
SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( study() );
|
||||||
|
|
||||||
|
if ( appStudy ) {
|
||||||
|
QString anEntry = entry( index );
|
||||||
|
_PTR(Study) study = appStudy->studyDS();
|
||||||
|
if ( study && !anEntry.isEmpty() ) {
|
||||||
|
_PTR(SObject) aSO( study->FindObjectID( anEntry.toStdString() ) );
|
||||||
|
if ( aSO->GetStudy()->GetUseCaseBuilder()->IsUseCaseNode(aSO) ) {
|
||||||
|
_PTR(UseCaseIterator) it = aSO->GetStudy()->GetUseCaseBuilder()->GetUseCaseIterator( aSO );
|
||||||
|
for (it->Init(false); it->More(); it->Next()) nb++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nb;
|
||||||
|
}
|
||||||
|
|
||||||
bool GEOMGUI_Selection::hasConcealedChildren( const int index ) const
|
bool GEOMGUI_Selection::hasConcealedChildren( const int index ) const
|
||||||
{
|
{
|
||||||
bool OK = false;
|
bool OK = false;
|
||||||
@ -625,6 +646,7 @@ bool GEOMGUI_Selection::isPhysicalMaterial( const int idx ) const
|
|||||||
|
|
||||||
bool GEOMGUI_Selection::isFolder( const int index ) const
|
bool GEOMGUI_Selection::isFolder( const int index ) const
|
||||||
{
|
{
|
||||||
|
bool res = false;
|
||||||
SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( study() );
|
SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( study() );
|
||||||
|
|
||||||
if ( appStudy ) {
|
if ( appStudy ) {
|
||||||
@ -632,15 +654,9 @@ bool GEOMGUI_Selection::isFolder( const int index ) const
|
|||||||
_PTR(Study) study = appStudy->studyDS();
|
_PTR(Study) study = appStudy->studyDS();
|
||||||
if ( study && !anEntry.isNull() ) {
|
if ( study && !anEntry.isNull() ) {
|
||||||
_PTR(SObject) aSO( study->FindObjectID( anEntry.toStdString() ) );
|
_PTR(SObject) aSO( study->FindObjectID( anEntry.toStdString() ) );
|
||||||
if ( aSO ) {
|
if ( aSO ) res = isFolder( aSO );
|
||||||
_PTR(GenericAttribute) anAttr;
|
|
||||||
if ( aSO->FindAttribute(anAttr, "AttributeLocalID") ) {
|
|
||||||
_PTR(AttributeLocalID) aLocalID( anAttr );
|
|
||||||
return aLocalID->Value() == 999;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
return res;
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -52,6 +52,7 @@ public:
|
|||||||
static bool hasChildren( const _PTR(SObject)& );
|
static bool hasChildren( const _PTR(SObject)& );
|
||||||
static bool expandable( const _PTR(SObject)& );
|
static bool expandable( const _PTR(SObject)& );
|
||||||
static bool isCompoundOfVertices( GEOM::GEOM_Object_ptr );
|
static bool isCompoundOfVertices( GEOM::GEOM_Object_ptr );
|
||||||
|
static bool isFolder( const _PTR(SObject)& );
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
// virtual QVariant contextParameter( const QString& ) const;
|
// virtual QVariant contextParameter( const QString& ) const;
|
||||||
@ -67,6 +68,7 @@ private:
|
|||||||
QString selectionMode() const;
|
QString selectionMode() const;
|
||||||
bool isVectorsMode( const int ) const;
|
bool isVectorsMode( const int ) const;
|
||||||
bool hasChildren( const int ) const;
|
bool hasChildren( const int ) const;
|
||||||
|
int nbChildren( const int ) const;
|
||||||
bool hasConcealedChildren( const int ) const;
|
bool hasConcealedChildren( const int ) const;
|
||||||
bool hasDisclosedChildren( const int ) const;
|
bool hasDisclosedChildren( const int ) const;
|
||||||
bool compoundOfVertices( const int ) const;
|
bool compoundOfVertices( const int ) const;
|
||||||
|
@ -4652,6 +4652,14 @@ Please, select face, shell or solid and try again</translation>
|
|||||||
<source>NEW_FOLDER_NAME</source>
|
<source>NEW_FOLDER_NAME</source>
|
||||||
<translation>NewFolder</translation>
|
<translation>NewFolder</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>MEN_POP_SORT_CHILD_ITEMS</source>
|
||||||
|
<translation>Sort children</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>STB_POP_SORT_CHILD_ITEMS</source>
|
||||||
|
<translation>Sort child items</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>GEOM_RESULT_NAME_GRP</source>
|
<source>GEOM_RESULT_NAME_GRP</source>
|
||||||
<translation>Result name</translation>
|
<translation>Result name</translation>
|
||||||
|
@ -4658,6 +4658,14 @@ Choisissez une face, une coque ou un solide et essayez de nouveau</translation>
|
|||||||
<source>NEW_FOLDER_NAME</source>
|
<source>NEW_FOLDER_NAME</source>
|
||||||
<translation type="unfinished">NewFolder</translation>
|
<translation type="unfinished">NewFolder</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>MEN_POP_SORT_CHILD_ITEMS</source>
|
||||||
|
<translation type="unfinished">Sort children</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>STB_POP_SORT_CHILD_ITEMS</source>
|
||||||
|
<translation type="unfinished">Sort child items</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>GEOM_RESULT_NAME_GRP</source>
|
<source>GEOM_RESULT_NAME_GRP</source>
|
||||||
<translation>Nom du résultat</translation>
|
<translation>Nom du résultat</translation>
|
||||||
|
@ -391,7 +391,8 @@ void GeometryGUI::OnGUIEvent( int id, const QVariant& theParam )
|
|||||||
<< GEOMOp::OpUnpublishObject
|
<< GEOMOp::OpUnpublishObject
|
||||||
<< GEOMOp::OpPublishObject
|
<< GEOMOp::OpPublishObject
|
||||||
<< GEOMOp::OpPointMarker
|
<< GEOMOp::OpPointMarker
|
||||||
<< GEOMOp::OpCreateFolder;
|
<< GEOMOp::OpCreateFolder
|
||||||
|
<< GEOMOp::OpSortChildren;
|
||||||
if ( !ViewOCC && !ViewVTK && !NotViewerDependentCommands.contains( id ) )
|
if ( !ViewOCC && !ViewVTK && !NotViewerDependentCommands.contains( id ) )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -444,6 +445,7 @@ void GeometryGUI::OnGUIEvent( int id, const QVariant& theParam )
|
|||||||
case GEOMOp::OpBringToFront: // POPUP MENU - BRING TO FRONT
|
case GEOMOp::OpBringToFront: // POPUP MENU - BRING TO FRONT
|
||||||
case GEOMOp::OpClsBringToFront: //
|
case GEOMOp::OpClsBringToFront: //
|
||||||
case GEOMOp::OpCreateFolder: // POPUP MENU - CREATE FOLDER
|
case GEOMOp::OpCreateFolder: // POPUP MENU - CREATE FOLDER
|
||||||
|
case GEOMOp::OpSortChildren: // POPUP MENU - SORT CHILD ITEMS
|
||||||
libName = "GEOMToolsGUI";
|
libName = "GEOMToolsGUI";
|
||||||
break;
|
break;
|
||||||
case GEOMOp::OpDMWireframe: // MENU VIEW - WIREFRAME
|
case GEOMOp::OpDMWireframe: // MENU VIEW - WIREFRAME
|
||||||
@ -905,6 +907,7 @@ void GeometryGUI::initialize( CAM_Application* app )
|
|||||||
createGeomAction( GEOMOp::OpMaterialProperties, "POP_MATERIAL_PROPERTIES" );
|
createGeomAction( GEOMOp::OpMaterialProperties, "POP_MATERIAL_PROPERTIES" );
|
||||||
createGeomAction( GEOMOp::OpPredefMaterCustom, "POP_PREDEF_MATER_CUSTOM" );
|
createGeomAction( GEOMOp::OpPredefMaterCustom, "POP_PREDEF_MATER_CUSTOM" );
|
||||||
createGeomAction( GEOMOp::OpCreateFolder, "POP_CREATE_FOLDER" );
|
createGeomAction( GEOMOp::OpCreateFolder, "POP_CREATE_FOLDER" );
|
||||||
|
createGeomAction( GEOMOp::OpSortChildren, "POP_SORT_CHILD_ITEMS" );
|
||||||
|
|
||||||
createGeomAction( GEOMOp::OpPipeTShape, "PIPETSHAPE" );
|
createGeomAction( GEOMOp::OpPipeTShape, "PIPETSHAPE" );
|
||||||
|
|
||||||
@ -1407,7 +1410,11 @@ void GeometryGUI::initialize( CAM_Application* app )
|
|||||||
|
|
||||||
mgr->insert( separator(), -1, -1 ); // -----------
|
mgr->insert( separator(), -1, -1 ); // -----------
|
||||||
mgr->insert( action( GEOMOp::OpCreateFolder ), -1, -1 ); // Create Folder
|
mgr->insert( action( GEOMOp::OpCreateFolder ), -1, -1 ); // Create Folder
|
||||||
mgr->setRule( action( GEOMOp::OpCreateFolder ), QString("client='ObjectBrowser' and (isComponent=true or isFolder=true)"), QtxPopupMgr::VisibleRule );
|
mgr->setRule( action( GEOMOp::OpCreateFolder ), QString("client='ObjectBrowser' and $component={'GEOM'} and (isComponent=true or isFolder=true)"), QtxPopupMgr::VisibleRule );
|
||||||
|
|
||||||
|
mgr->insert( separator(), -1, -1 ); // -----------
|
||||||
|
mgr->insert( action( GEOMOp::OpSortChildren ), -1, -1 ); // Sort child items
|
||||||
|
mgr->setRule( action( GEOMOp::OpSortChildren ), QString("client='ObjectBrowser' and $component={'GEOM'} and nbChildren>1"), QtxPopupMgr::VisibleRule );
|
||||||
|
|
||||||
mgr->hide( mgr->actionId( action( myEraseAll ) ) );
|
mgr->hide( mgr->actionId( action( myEraseAll ) ) );
|
||||||
|
|
||||||
|
@ -60,6 +60,7 @@ namespace GEOMOp {
|
|||||||
OpEdgeWidth = 1260, // POPUP MENU - LINE WIDTH - EDGE WIDTH
|
OpEdgeWidth = 1260, // POPUP MENU - LINE WIDTH - EDGE WIDTH
|
||||||
OpIsosWidth = 1261, // POPUP MENU - LINE WIDTH - ISOS WIDTH
|
OpIsosWidth = 1261, // POPUP MENU - LINE WIDTH - ISOS WIDTH
|
||||||
OpCreateFolder = 1262, // POPUP MENU - CREATE FOLDER
|
OpCreateFolder = 1262, // POPUP MENU - CREATE FOLDER
|
||||||
|
OpSortChildren = 1263, // POPUP MENU - SORT CHILD ITEMS
|
||||||
// DisplayGUI ------------------//--------------------------------
|
// DisplayGUI ------------------//--------------------------------
|
||||||
OpSwitchVectors = 2001, // MENU VIEW - DISPLAY MODE - SHOW/HIDE EDGE DIRECTION
|
OpSwitchVectors = 2001, // MENU VIEW - DISPLAY MODE - SHOW/HIDE EDGE DIRECTION
|
||||||
OpShowAll = 2002, // MENU VIEW - SHOW ALL
|
OpShowAll = 2002, // MENU VIEW - SHOW ALL
|
||||||
|
@ -389,6 +389,9 @@ bool GEOMToolsGUI::OnGUIEvent(int theCommandID, SUIT_Desktop* parent)
|
|||||||
case GEOMOp::OpCreateFolder:
|
case GEOMOp::OpCreateFolder:
|
||||||
OnCreateFolder();
|
OnCreateFolder();
|
||||||
break;
|
break;
|
||||||
|
case GEOMOp::OpSortChildren:
|
||||||
|
OnSortChildren();
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
SUIT_Session::session()->activeApplication()->putInfo(tr("GEOM_PRP_COMMAND").arg(theCommandID));
|
SUIT_Session::session()->activeApplication()->putInfo(tr("GEOM_PRP_COMMAND").arg(theCommandID));
|
||||||
break;
|
break;
|
||||||
|
@ -89,6 +89,7 @@ private:
|
|||||||
void OnBringToFront();
|
void OnBringToFront();
|
||||||
void OnClsBringToFront();
|
void OnClsBringToFront();
|
||||||
void OnCreateFolder();
|
void OnCreateFolder();
|
||||||
|
void OnSortChildren();
|
||||||
|
|
||||||
// Shortcut commands
|
// Shortcut commands
|
||||||
void OnChangeTransparency( bool );
|
void OnChangeTransparency( bool );
|
||||||
|
@ -835,3 +835,30 @@ void GEOMToolsGUI::OnCreateFolder()
|
|||||||
_CAST(SObject, aFatherSO)->GetSObject() );
|
_CAST(SObject, aFatherSO)->GetSObject() );
|
||||||
app->updateObjectBrowser( false );
|
app->updateObjectBrowser( false );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GEOMToolsGUI::OnSortChildren()
|
||||||
|
{
|
||||||
|
SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() );
|
||||||
|
if ( !app ) return;
|
||||||
|
|
||||||
|
SalomeApp_Study* appStudy = dynamic_cast< SalomeApp_Study* >( app->activeStudy() );
|
||||||
|
if ( !appStudy ) return;
|
||||||
|
|
||||||
|
LightApp_SelectionMgr* aSelMgr = app->selectionMgr();
|
||||||
|
if ( !aSelMgr ) return;
|
||||||
|
|
||||||
|
SALOME_ListIO selected;
|
||||||
|
aSelMgr->selectedObjects( selected );
|
||||||
|
if ( selected.IsEmpty() ) return;
|
||||||
|
|
||||||
|
Handle(SALOME_InteractiveObject) anIObject = selected.First();
|
||||||
|
|
||||||
|
_PTR(Study) aStudy = appStudy->studyDS();
|
||||||
|
if( !aStudy ) return;
|
||||||
|
_PTR(SObject) aFatherSO(aStudy->FindObjectID(anIObject->getEntry()));
|
||||||
|
if ( !aFatherSO ) return;
|
||||||
|
|
||||||
|
aStudy->GetUseCaseBuilder()->SortChildren( aFatherSO, true/*AscendingOrder*/ );
|
||||||
|
|
||||||
|
app->updateObjectBrowser( true );
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user