]> SALOME platform Git repositories - modules/hydro.git/commitdiff
Salome HOME
refs #687, #692 - #695: fix fatal errors.
authormkr <mkr@opencascade.com>
Mon, 16 Nov 2015 16:27:20 +0000 (19:27 +0300)
committermkr <mkr@opencascade.com>
Mon, 16 Nov 2015 16:27:20 +0000 (19:27 +0300)
src/HYDROGUI/HYDROGUI_DeleteOp.cxx
src/HYDROGUI/HYDROGUI_LandCoverMapOp.cxx
src/HYDROGUI/HYDROGUI_Module.h
src/HYDROGUI/HYDROGUI_Operations.cxx
src/HYDROGUI/resources/HYDROGUI_msg_en.ts

index 78ab4dec9b51b93c0dbd251e066ccc37edaddfce..deafdfff5965dee4c9d5f26642e3e76705947202 100644 (file)
@@ -168,4 +168,6 @@ void HYDROGUI_DeleteOp::startOperation()
 
   module()->update( UF_Model | UF_Viewer | UF_OCCViewer | UF_VTKViewer );
   commit();
+
+  module()->enableLCMActions();
 }
index 2ee439166911441804bb825c3d2974cb7d42f228..777ebf39782efe16c250ac0db4ed4d962ec2da7c 100644 (file)
@@ -102,24 +102,37 @@ void HYDROGUI_LandCoverMapOp::startOperation()
   {
     if ( isApplyAndClose() )
       myEditedObject = Handle(HYDROData_LandCoverMap)::DownCast( HYDROGUI_Tool::GetSelectedObject( module() ) );
-    if ( !myEditedObject.IsNull() )
+    
+    // Construct a list of names of all land cover map objects defined within the data model
+    QStringList aLandCoverMapNames;
+    HYDROData_Iterator anIterator( doc(), KIND_LAND_COVER_MAP );
+    for( ; anIterator.More(); anIterator.Next() )
     {
-      anObjectName = myEditedObject->GetName();
+      Handle(HYDROData_LandCoverMap) aLandCoverObj =
+        Handle(HYDROData_LandCoverMap)::DownCast( anIterator.Current() );      
+      if ( !aLandCoverObj.IsNull() )
+        aLandCoverMapNames.append( aLandCoverObj->GetName() );
+    }
+    
+    //aLandCoverMapNames.sort();
+    aPanel->setObjectNames( aLandCoverMapNames );
 
-      // Construct a list of names of all land cover map objects defined within the data model
-      QStringList aLandCoverMapNames;
-      HYDROData_Iterator anIterator( doc(), KIND_LAND_COVER_MAP );
-      for( ; anIterator.More(); anIterator.Next() )
+    if ( myEditedObject.IsNull() )
+    {
+      if ( !aLandCoverMapNames.empty() )
       {
-        Handle(HYDROData_LandCoverMap) aLandCoverObj =
-          Handle(HYDROData_LandCoverMap)::DownCast( anIterator.Current() );    
-        if ( !aLandCoverObj.IsNull() )
-          aLandCoverMapNames.append( aLandCoverObj->GetName() );
+        anObjectName = aLandCoverMapNames.first();
+        if ( !anObjectName.isEmpty())
+        {
+          Handle(HYDROData_LandCoverMap) anObject =
+            Handle(HYDROData_LandCoverMap)::DownCast( HYDROGUI_Tool::FindObjectByName( module(), anObjectName ) );
+          if( !anObject.IsNull() )
+            myEditedObject = anObject;
+        }
       }
-
-      //aLandCoverMapNames.sort();
-      aPanel->setObjectNames( aLandCoverMapNames );
     }
+    else
+      anObjectName = myEditedObject->GetName();
   }  
   aPanel->setObjectName( anObjectName );
 
@@ -233,6 +246,11 @@ bool HYDROGUI_LandCoverMapOp::processApply( int& theUpdateFlags,
   // Create / find the new / edited land cover map object
   Handle(HYDROData_LandCoverMap) aLandCoverMapObj = myOperationId != CreateLandCoverMapId ? myEditedObject :
     Handle(HYDROData_LandCoverMap)::DownCast( doc()->CreateObject( KIND_LAND_COVER_MAP ) );
+  if ( aLandCoverMapObj.IsNull() )
+  {
+    theErrorMsg = tr( "LAND_COVER_MAP_UNDEFINED" );
+    return false;
+  }
 
   // Set land cover map name
   aLandCoverMapObj->SetName( anObjectName );
@@ -346,6 +364,9 @@ bool HYDROGUI_LandCoverMapOp::processApply( int& theUpdateFlags,
 
   theUpdateFlags = UF_Model | UF_OCCViewer | UF_OCC_Forced | UF_VTKViewer;
 
+  if ( myOperationId == CreateLandCoverMapId )
+    module()->enableLCMActions();
+
   return true;
 }
 
@@ -417,7 +438,7 @@ void HYDROGUI_LandCoverMapOp::onCreatePreview()
     }
   }
 
-  if ( aViewManager && myPreviewPrs )
+  if ( aViewManager && myPreviewPrs && !myEditedObject.IsNull() )
   {
     TopoDS_Shape aLandCoverMapShape = myEditedObject->GetShape();
     if( !aLandCoverMapShape.IsNull() )
index 1b3523f17cb2c2c82add42cd6cc831ed856e5ba6..8780c389adf3488c66f0f626d97dfe01a39e1dc1 100644 (file)
@@ -253,6 +253,8 @@ public:
    */
   void                            setObjectRemoved( const Handle(HYDROData_Entity)& theObject );
 
+  void                            enableLCMActions();
+
 protected:
   CAM_DataModel*                  createDataModel();
 
index e15ed250f98b0fc4be70649e3bb401dfeae452ba..aa689a8388f079890e7c70e1aebead0b1cf611f9 100644 (file)
@@ -75,6 +75,7 @@
 #include <HYDROData_Document.h>
 #include <HYDROData_Obstacle.h>
 #include <HYDROData_SplitToZonesTool.h>
+#include <HYDROData_Iterator.h>
 
 #include <GeometryGUI.h>
 #include <GeometryGUI_Operations.h>
@@ -355,6 +356,7 @@ void HYDROGUI_Module::createToolbars()
   createTool( SplitLandCoverId, aToolBar );
   createTool( MergeLandCoverId, aToolBar );
   createTool( ChangeLandCoverTypeId, aToolBar );
+  enableLCMActions();
 
   createTool( separator(), aToolBar );
   createTool( CreateCalculationId, aToolBar );
@@ -406,6 +408,24 @@ void HYDROGUI_Module::updateUndoRedoControls()
   aRedoAction->setEnabled( aCanRedo );
 }
 
+void HYDROGUI_Module::enableLCMActions()
+{
+  HYDROData_Iterator anIt( HYDROData_Document::Document( getStudyId() ), KIND_LAND_COVER_MAP );
+  bool anEnableTools = anIt.More();
+
+  QtxListAction* anAction;
+  anAction = (QtxListAction*)action( AddLandCoverId );
+  if ( anAction ) anAction->setEnabled( anEnableTools );
+  anAction = (QtxListAction*)action( RemoveLandCoverId );
+  if ( anAction ) anAction->setEnabled( anEnableTools );
+  anAction = (QtxListAction*)action( SplitLandCoverId );
+  if ( anAction ) anAction->setEnabled( anEnableTools );
+  anAction = (QtxListAction*)action( MergeLandCoverId );
+  if ( anAction ) anAction->setEnabled( anEnableTools );
+  anAction = (QtxListAction*)action( ChangeLandCoverTypeId );
+  if ( anAction ) anAction->setEnabled( anEnableTools );
+}
+
 void HYDROGUI_Module::onOperation()
 {
   const QAction* anAction = dynamic_cast<const QAction*>( sender() );
index 0a58c3f67a972db80bd5d2e2f044f2dfd56c9662..189f87a31cf452af2dd1ada4c1c49bc94d205f90 100644 (file)
@@ -2936,6 +2936,10 @@ Polyline should consist from one not closed curve.</translation>
       <source>STRICKLER_TYPE_NOT_DEFINED</source>
       <translation>Strickler type should be defined.</translation>
     </message>
+    <message>
+      <source>LAND_COVER_MAP_UNDEFINED</source>
+      <translation>Land cover map is undefined.</translation>
+    </message>
     <message>
       <source>LAND_COVER_NOT_ADDED</source>
       <translation>Land cover can not be added.</translation>