Salome HOME
patch on regression in land cover map coloring and transparency
[modules/hydro.git] / src / HYDROGUI / HYDROGUI_LandCoverMapOp.cxx
index 2ee439166911441804bb825c3d2974cb7d42f228..cb073ade21cd7d91db68e65683ac16b88f1179f9 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,17 +438,13 @@ void HYDROGUI_LandCoverMapOp::onCreatePreview()
     }
   }
 
-  if ( aViewManager && myPreviewPrs )
+  if ( aViewManager && myPreviewPrs && !myEditedObject.IsNull() )
   {
-    TopoDS_Shape aLandCoverMapShape = myEditedObject->GetShape();
-    if( !aLandCoverMapShape.IsNull() )
-    {
-      if ( myOperationId == RemoveLandCoverId ||
-           myOperationId == MergeLandCoverId ||
-           myOperationId == ChangeLandCoverTypeId )
-        myPreviewPrs->setSelectionMode( AIS_Shape::SelectionMode( TopAbs_FACE ) ); 
-      myPreviewPrs->setShape( aLandCoverMapShape );      
-    }
+    myPreviewPrs->update( false, false );      
+    if ( myOperationId == RemoveLandCoverId ||
+         myOperationId == MergeLandCoverId ||
+         myOperationId == ChangeLandCoverTypeId )
+      myPreviewPrs->setSelectionMode( AIS_Shape::SelectionMode( TopAbs_FACE ) ); 
   }
   
   module()->update( UF_OCCViewer | UF_FitAll );