From 4789994b0b8b76c084725a59c9ba88181b399779 Mon Sep 17 00:00:00 2001 From: mzn Date: Mon, 25 Nov 2013 14:32:52 +0000 Subject: [PATCH] Feature #86: The hierarchy in the Object Browser (T 19). --- src/HYDROData/HYDROData_Document.cxx | 12 +- src/HYDROData/HYDROData_Entity.h | 42 +++-- src/HYDROGUI/HYDROGUI_DataModel.cxx | 217 ++++++++++++++-------- src/HYDROGUI/resources/HYDROGUI_msg_en.ts | 12 +- 4 files changed, 177 insertions(+), 106 deletions(-) diff --git a/src/HYDROData/HYDROData_Document.cxx b/src/HYDROData/HYDROData_Document.cxx index 7d1a1255..1bcca65a 100644 --- a/src/HYDROData/HYDROData_Document.cxx +++ b/src/HYDROData/HYDROData_Document.cxx @@ -194,13 +194,15 @@ bool HYDROData_Document::DumpToPython( const QString& theFileName ) const bool aRes = true; // Dump all model objects to Python script - aRes = aRes && dumpPartitionToPython( aFile, aTreatedObjects, KIND_IMAGE ); - aRes = aRes && dumpPartitionToPython( aFile, aTreatedObjects, KIND_POLYLINE ); + aRes = aRes && dumpPartitionToPython( aFile, aTreatedObjects, KIND_IMAGE ); aRes = aRes && dumpPartitionToPython( aFile, aTreatedObjects, KIND_BATHYMETRY ); - aRes = aRes && dumpPartitionToPython( aFile, aTreatedObjects, KIND_ALTITUDE ); - aRes = aRes && dumpPartitionToPython( aFile, aTreatedObjects, KIND_IMMERSIBLE_ZONE ); + aRes = aRes && dumpPartitionToPython( aFile, aTreatedObjects, KIND_ARTIFICIAL_OBJECT ); + aRes = aRes && dumpPartitionToPython( aFile, aTreatedObjects, KIND_NATURAL_OBJECT ); + aRes = aRes && dumpPartitionToPython( aFile, aTreatedObjects, KIND_OBSTACLE ); aRes = aRes && dumpPartitionToPython( aFile, aTreatedObjects, KIND_CALCULATION ); - + aRes = aRes && dumpPartitionToPython( aFile, aTreatedObjects, KIND_POLYLINE ); + aRes = aRes && dumpPartitionToPython( aFile, aTreatedObjects, KIND_PROFILE ); + aRes = aRes && dumpPartitionToPython( aFile, aTreatedObjects, KIND_ALTITUDE ); return aRes; } diff --git a/src/HYDROData/HYDROData_Entity.h b/src/HYDROData/HYDROData_Entity.h index 0df866a8..02c19116 100644 --- a/src/HYDROData/HYDROData_Entity.h +++ b/src/HYDROData/HYDROData_Entity.h @@ -20,26 +20,28 @@ class Handle_HYDROData_Entity; ///! Kind of an object in a document typedef int ObjectKind; -const ObjectKind KIND_UNKNOWN = 0; ///! Unrecognized object -const ObjectKind KIND_IMAGE = 1; -const ObjectKind KIND_POLYLINE = 2; -const ObjectKind KIND_BATHYMETRY = 3; -const ObjectKind KIND_ALTITUDE = 4; -const ObjectKind KIND_IMMERSIBLE_ZONE = 5; -const ObjectKind KIND_RIVER = 6; -const ObjectKind KIND_STREAM = 7; -const ObjectKind KIND_CONFLUENCE = 8; -const ObjectKind KIND_CHANNEL = 9; -const ObjectKind KIND_OBSTACLE = 10; -const ObjectKind KIND_DIGUE = 11; -const ObjectKind KIND_PROFILE = 12; -const ObjectKind KIND_PROFILEUZ = 13; -const ObjectKind KIND_POLYLINEXY = 14; -const ObjectKind KIND_CALCULATION = 15; -const ObjectKind KIND_ZONE = 16; -const ObjectKind KIND_REGION = 17; -const ObjectKind KIND_VISUAL_STATE = 18; -const ObjectKind KIND_LAST = KIND_VISUAL_STATE; +const ObjectKind KIND_UNKNOWN = 0; ///! Unrecognized object +const ObjectKind KIND_IMAGE = 1; +const ObjectKind KIND_POLYLINE = 2; +const ObjectKind KIND_BATHYMETRY = 3; +const ObjectKind KIND_ALTITUDE = 4; +const ObjectKind KIND_IMMERSIBLE_ZONE = 5; +const ObjectKind KIND_RIVER = 6; +const ObjectKind KIND_STREAM = 7; +const ObjectKind KIND_CONFLUENCE = 8; +const ObjectKind KIND_CHANNEL = 9; +const ObjectKind KIND_OBSTACLE = 10; +const ObjectKind KIND_DIGUE = 11; +const ObjectKind KIND_PROFILE = 12; +const ObjectKind KIND_PROFILEUZ = 13; +const ObjectKind KIND_POLYLINEXY = 14; +const ObjectKind KIND_CALCULATION = 15; +const ObjectKind KIND_ZONE = 16; +const ObjectKind KIND_REGION = 17; +const ObjectKind KIND_VISUAL_STATE = 18; +const ObjectKind KIND_ARTIFICIAL_OBJECT = 19; +const ObjectKind KIND_NATURAL_OBJECT = 20; +const ObjectKind KIND_LAST = KIND_NATURAL_OBJECT; DEFINE_STANDARD_HANDLE(HYDROData_Entity, MMgt_TShared) diff --git a/src/HYDROGUI/HYDROGUI_DataModel.cxx b/src/HYDROGUI/HYDROGUI_DataModel.cxx index b0ccc7e6..9432c01c 100644 --- a/src/HYDROGUI/HYDROGUI_DataModel.cxx +++ b/src/HYDROGUI/HYDROGUI_DataModel.cxx @@ -40,6 +40,9 @@ #include #include #include +#include +#include +#include #include #include @@ -226,92 +229,151 @@ void HYDROGUI_DataModel::update( const int theStudyId ) if( aDocument.IsNull() ) return; - LightApp_DataObject* anImageRootObj = createObject( aRootObj, tr( partitionName( KIND_IMAGE ).toAscii() ) ); + // Create root objects: - HYDROData_Iterator anIterator( aDocument, KIND_IMAGE ); - for( ; anIterator.More(); anIterator.Next() ) - { - Handle(HYDROData_Image) anImageObj = - Handle(HYDROData_Image)::DownCast( anIterator.Current() ); - if( !anImageObj.IsNull() ) - createObject( anImageRootObj, anImageObj ); - } + // IMAGES + LightApp_DataObject* anImageRootObj = createObject( aRootObj, tr( partitionName( KIND_IMAGE ).toAscii() ) ); + // BATHYMETRY LightApp_DataObject* aBathymetryRootObj = createObject( aRootObj, tr( partitionName( KIND_BATHYMETRY ).toAscii() ) ); - anIterator = HYDROData_Iterator( aDocument, KIND_BATHYMETRY ); - for( ; anIterator.More(); anIterator.Next() ) - { - Handle(HYDROData_Bathymetry) aBathymetryObj = - Handle(HYDROData_Bathymetry)::DownCast( anIterator.Current() ); - if( !aBathymetryObj.IsNull() ) - createObject( aBathymetryRootObj, aBathymetryObj ); - } + // ARTIFICIAL OBJECTS + LightApp_DataObject* anArtificialObjectsRootObj = createObject( aRootObj, tr( partitionName( KIND_ARTIFICIAL_OBJECT ).toAscii() ) ); - LightApp_DataObject* aPolylineRootObj = createObject( aRootObj, tr( partitionName( KIND_POLYLINE ).toAscii() ) ); + // NATURAL OBJECTS + LightApp_DataObject* aNaturalObjectsRootObj = createObject( aRootObj, tr( partitionName( KIND_NATURAL_OBJECT ).toAscii() ) ); - anIterator = HYDROData_Iterator( aDocument, KIND_POLYLINE ); - for( ; anIterator.More(); anIterator.Next() ) - { - Handle(HYDROData_Polyline) aPolylineObj = - Handle(HYDROData_Polyline)::DownCast( anIterator.Current() ); - if( !aPolylineObj.IsNull() ) - createObject( aPolylineRootObj, aPolylineObj ); - } + // OBSTACLES + LightApp_DataObject* anObstaclesRootObj = createObject( aRootObj, tr( partitionName( KIND_OBSTACLE ).toAscii() ) ); + + // CALCULATION CASES + LightApp_DataObject* aCalculRootObj = createObject( aRootObj, tr( partitionName( KIND_CALCULATION ).toAscii() ) ); + // POLYLINES + LightApp_DataObject* aPolylineRootObj = createObject( aRootObj, tr( partitionName( KIND_POLYLINE ).toAscii() ) ); + + // PROFILES LightApp_DataObject* aProfileRootObj = createObject( aRootObj, tr( partitionName( KIND_PROFILE ).toAscii() ) ); - anIterator = HYDROData_Iterator( aDocument, KIND_PROFILE ); - for( ; anIterator.More(); anIterator.Next() ) - { - Handle(HYDROData_Profile) aProfileObj = - Handle(HYDROData_Profile)::DownCast( anIterator.Current() ); - if( !aProfileObj.IsNull() ) - createObject( aProfileRootObj, aProfileObj ); - } + // VISUAL STATES + LightApp_DataObject* aVisualStateRootObj = createObject( aRootObj, tr( partitionName( KIND_VISUAL_STATE ).toAscii() ) ); - LightApp_DataObject* aZonesRootObj = createObject( aRootObj, tr( partitionName( KIND_IMMERSIBLE_ZONE ).toAscii() ) ); + HYDROData_Iterator anIterator( aDocument, KIND_UNKNOWN ); + for( ; anIterator.More(); anIterator.Next() ) { + Handle(HYDROData_Entity) anObj = anIterator.Current(); - anIterator = HYDROData_Iterator( aDocument, KIND_IMMERSIBLE_ZONE ); - for( ; anIterator.More(); anIterator.Next() ) - { - Handle(HYDROData_ImmersibleZone) aZoneObj = - Handle(HYDROData_ImmersibleZone)::DownCast( anIterator.Current() ); - if( !aZoneObj.IsNull() ) - createObject( aZonesRootObj, aZoneObj ); - } + switch ( anObj->GetKind() ) { + case KIND_IMAGE: + { + Handle(HYDROData_Image) anImageObj = + Handle(HYDROData_Image)::DownCast( anObj ); + if( !anImageObj.IsNull() ) { + createObject( anImageRootObj, anImageObj ); + } - LightApp_DataObject* anObstaclesRootObj = createObject( aRootObj, tr( partitionName( KIND_OBSTACLE ).toAscii() ) ); + break; + } + case KIND_BATHYMETRY: + { + Handle(HYDROData_Bathymetry) aBathymetryObj = + Handle(HYDROData_Bathymetry)::DownCast( anObj ); + if( !aBathymetryObj.IsNull() ) { + createObject( aBathymetryRootObj, aBathymetryObj ); + } - anIterator = HYDROData_Iterator( aDocument, KIND_OBSTACLE ); - for( ; anIterator.More(); anIterator.Next() ) - { - Handle(HYDROData_Obstacle) anObstacleObj = - Handle(HYDROData_Obstacle)::DownCast( anIterator.Current() ); - if( !anObstacleObj.IsNull() ) - createObject( anObstaclesRootObj, anObstacleObj ); - } + break; + } + case KIND_CHANNEL: + { + Handle(HYDROData_Channel) aChannelObj = + Handle(HYDROData_Channel)::DownCast( anObj ); + if( !aChannelObj.IsNull() ) { + createObject( anArtificialObjectsRootObj, aChannelObj ); + } - LightApp_DataObject* aCalculRootObj = createObject( aRootObj, tr( partitionName( KIND_CALCULATION ).toAscii() ) ); + break; + } + case KIND_DIGUE: + { + Handle(HYDROData_Digue) aDigueObj = + Handle(HYDROData_Digue)::DownCast( anObj ); + if( !aDigueObj.IsNull() ) { + createObject( anArtificialObjectsRootObj, aDigueObj ); + } - anIterator = HYDROData_Iterator( aDocument, KIND_CALCULATION ); - for( ; anIterator.More(); anIterator.Next() ) - { - Handle(HYDROData_CalculationCase) aCalculObj = - Handle(HYDROData_CalculationCase)::DownCast( anIterator.Current() ); - if( !aCalculObj.IsNull() ) - createObject( aCalculRootObj, aCalculObj ); - } + break; + } + case KIND_IMMERSIBLE_ZONE: + { + Handle(HYDROData_ImmersibleZone) anImmersibleZoneObj = + Handle(HYDROData_ImmersibleZone)::DownCast( anObj ); + if( !anImmersibleZoneObj.IsNull() ) { + createObject( aNaturalObjectsRootObj, anImmersibleZoneObj ); + } - LightApp_DataObject* aVisualStateRootObj = createObject( aRootObj, tr( partitionName( KIND_VISUAL_STATE ).toAscii() ) ); + break; + } + case KIND_RIVER: + { + Handle(HYDROData_River) aRiverObj = + Handle(HYDROData_River)::DownCast( anObj ); + if( !aRiverObj.IsNull() ) { + createObject( aNaturalObjectsRootObj, aRiverObj ); + } - anIterator = HYDROData_Iterator( aDocument, KIND_VISUAL_STATE ); - for( ; anIterator.More(); anIterator.Next() ) - { - Handle(HYDROData_VisualState) aVisualStateObj = - Handle(HYDROData_VisualState)::DownCast( anIterator.Current() ); - if( !aVisualStateObj.IsNull() ) - createObject( aVisualStateRootObj, aVisualStateObj ); + break; + } + case KIND_OBSTACLE: + { + Handle(HYDROData_Obstacle) anObstacleObj = + Handle(HYDROData_Obstacle)::DownCast( anObj ); + if( !anObstacleObj.IsNull() ) { + createObject( anObstaclesRootObj, anObstacleObj ); + } + + break; + } + case KIND_CALCULATION: + { + Handle(HYDROData_CalculationCase) aCalculObj = + Handle(HYDROData_CalculationCase)::DownCast( anObj ); + if( !aCalculObj.IsNull() ) { + createObject( aCalculRootObj, aCalculObj ); + } + + break; + } + case KIND_POLYLINE: + { + Handle(HYDROData_Polyline) aPolylineObj = + Handle(HYDROData_Polyline)::DownCast( anObj ); + if( !aPolylineObj.IsNull() ) { + createObject( aPolylineRootObj, aPolylineObj ); + } + + break; + } + case KIND_PROFILE: + { + Handle(HYDROData_Profile) aProfileObj = + Handle(HYDROData_Profile)::DownCast( anObj ); + if( !aProfileObj.IsNull() ) { + createObject( aProfileRootObj, aProfileObj ); + } + + break; + } + case KIND_VISUAL_STATE: + { + Handle(HYDROData_VisualState) aVisualStateObj = + Handle(HYDROData_VisualState)::DownCast( anObj ); + if( !aVisualStateObj.IsNull() ) { + createObject( aVisualStateRootObj, aVisualStateObj ); + } + + break; + } + } } if( SUIT_DataBrowser* anObjectBrowser = anApp->objectBrowser() ) @@ -532,14 +594,15 @@ QString HYDROGUI_DataModel::partitionName( const ObjectKind theObjectKind ) { switch( theObjectKind ) { - case KIND_IMAGE: return "IMAGES"; - case KIND_POLYLINE: return "POLYLINES"; - case KIND_PROFILE: return "PROFILES"; - case KIND_VISUAL_STATE: return "VISUAL_STATES"; - case KIND_BATHYMETRY: return "BATHYMETRIES"; - case KIND_CALCULATION: return "CALCULATION_CASES"; - case KIND_IMMERSIBLE_ZONE: return "IMMERSIBLE_ZONES"; - case KIND_OBSTACLE: return "OBSTACLES"; + case KIND_IMAGE: return "IMAGES"; + case KIND_POLYLINE: return "POLYLINES"; + case KIND_PROFILE: return "PROFILES"; + case KIND_VISUAL_STATE: return "VISUAL_STATES"; + case KIND_BATHYMETRY: return "BATHYMETRIES"; + case KIND_CALCULATION: return "CALCULATION_CASES"; + case KIND_OBSTACLE: return "OBSTACLES"; + case KIND_ARTIFICIAL_OBJECT: return "ARTIFICIAL_OBJECTS"; + case KIND_NATURAL_OBJECT: return "NATURAL_OBJECTS"; default: break; } return QString(); diff --git a/src/HYDROGUI/resources/HYDROGUI_msg_en.ts b/src/HYDROGUI/resources/HYDROGUI_msg_en.ts index 762be799..0fa1b04d 100644 --- a/src/HYDROGUI/resources/HYDROGUI_msg_en.ts +++ b/src/HYDROGUI/resources/HYDROGUI_msg_en.ts @@ -55,14 +55,18 @@ CALCULATION_CASES CALCULATION CASES - - IMMERSIBLE_ZONES - IMMERSIBLE ZONES - OBSTACLES OBSTACLES + + ARTIFICIAL_OBJECTS + ARTIFICIAL OBJECTS + + + NATURAL_OBJECTS + NATURAL OBJECTS + BATHYMETRY_FILTER Bathymetry files (*.xyz);;All files (*.* *) -- 2.39.2