Salome HOME
refs #568: Land Cover: a draft of data model and implementation of dialog box and...
[modules/hydro.git] / src / HYDROGUI / HYDROGUI_Zone.cxx
index 189394cf0c9afb124951837f9322ffc0e9bd625f..9b6b304b0fd944eaa04f64a956eea07a0845608e 100644 (file)
@@ -1,12 +1,8 @@
-// Copyright (C) 2007-2013  CEA/DEN, EDF R&D, OPEN CASCADE
-//
-// Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
-//
+// Copyright (C) 2014-2015  EDF-R&D
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 // License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// version 2.1 of the License, or (at your option) any later version.
 //
 // This library is distributed in the hope that it will be useful,
 // but WITHOUT ANY WARRANTY; without even the implied warranty of
 
 #include <HYDROData_Zone.h>
 #include <HYDROData_Object.h>
-#include <HYDROData_Bathymetry.h>
+#include <HYDROData_IAltitudeObject.h>
 
 #include <SUIT_DataObject.h>
 #include <QSet>
 
 HYDROGUI_Zone::HYDROGUI_Zone( SUIT_DataObject* theParent, 
                                           Handle(HYDROData_Zone) theData,
-                                          const QString& theParentEntry )
-: HYDROGUI_DataObject( theParent, theData, theParentEntry ), CAM_DataObject( theParent )
+                                          const QString& theParentEntry,
+                                          const bool theIsInOperation )
+: HYDROGUI_DataObject( theParent, theData, theParentEntry, theIsInOperation ), CAM_DataObject( theParent )
 {
 }
 
@@ -47,9 +44,9 @@ QString HYDROGUI_Zone::text( const int theColumnId ) const
         // Get Ref.Object name
         aRes = getRefObjectNames();
         break;
-      case BathymetryId:
-        // Get bathymetry name
-        aRes = getBathimetryName();
+      case AltitudeObjId:
+        // Get altitude object name
+        aRes = getAltitudeName();
         break;
       default:
         aRes = LightApp_DataObject::text( theColumnId );
@@ -84,7 +81,7 @@ QString HYDROGUI_Zone::getRefObjectNames() const
   return aRes;
 }
 
-QString HYDROGUI_Zone::getBathimetryName() const
+QString HYDROGUI_Zone::getAltitudeName() const
 {
   QString aRes;
   Handle(HYDROData_Zone) aZone = Handle(HYDROData_Zone)::DownCast( modelObject() );
@@ -95,9 +92,9 @@ QString HYDROGUI_Zone::getBathimetryName() const
     if ( ( isMergingNeed && aZone->GetMergeType() == HYDROData_Zone::Merge_UNKNOWN ) 
       || ( aSeq.Length() == 1 ) || ( !isMergingNeed ) )
     {
-      // Collect all used bathymetries names when merging is necessary
-      // or just get the name of bathymetry of a single geometry object
-      // or just get the name of a single bathymetry
+      // Collect all used altitudes names when merging is necessary
+      // or just get the name of altitude of a single geometry object
+      // or just get the name of a single altitude
       HYDROData_SequenceOfObjects::Iterator anIter( aSeq );
       QSet<QString> aNamesSet;
       QString aName;
@@ -107,14 +104,14 @@ QString HYDROGUI_Zone::getBathimetryName() const
           Handle(HYDROData_Object)::DownCast( anIter.Value() );
         if ( !aRefGeomObj.IsNull() )
         {
-          // Get bathymetry name
-          Handle(HYDROData_Bathymetry) aBathymetry = aRefGeomObj->GetBathymetry();
-          if ( !aBathymetry.IsNull() )
+          // Get altitude object name
+          Handle(HYDROData_IAltitudeObject) anAltitudeObj = aRefGeomObj->GetAltitudeObject();
+          if ( !anAltitudeObj.IsNull() )
           {
-            aName = aBathymetry->GetName();
+            aName = anAltitudeObj->GetName();
             if ( !isMergingNeed )
             {
-              // Get the first geometry object's bathymetry name and go out
+              // Get the first geometry object's altitude name and go out
               aRes = aName;
               break;
             }
@@ -143,13 +140,11 @@ QString HYDROGUI_Zone::getBathimetryName() const
         case HYDROData_Zone::Merge_ZMAX:    // The maximum values
           aRes = QObject::tr( "MERGE_ZMAX" );
           break;
-        case HYDROData_Zone::Merge_Object:   // Only one bathymetry will be taken into account
+        case HYDROData_Zone::Merge_Object:   // Only one altitude will be taken into account
         {
-          Handle(HYDROData_Bathymetry) aBathymetry = aZone->GetMergeBathymetry();
-          if ( !aBathymetry.IsNull() )
-          {
-            aRes = aBathymetry->GetName();
-          }
+          Handle(HYDROData_IAltitudeObject) anAltitude = aZone->GetMergeAltitude();
+          if ( !anAltitude.IsNull() )
+            aRes = anAltitude->GetName();
           break;
         }
         default:
@@ -176,7 +171,7 @@ bool HYDROGUI_Zone::isMergingNeed() const
 
 QColor HYDROGUI_Zone::color( const ColorRole theColorRole, const int theColumnId ) const
 {
-  // Implement red color for bathymetry conflicts in case creation dialog
+  // Implement red color for altitude conflicts in case creation dialog
   QColor aRes;
   Handle(HYDROData_Zone) aZone = Handle(HYDROData_Zone)::DownCast( modelObject() );
   if ( !aZone.IsNull() )
@@ -207,15 +202,15 @@ QColor HYDROGUI_Zone::color( const ColorRole theColorRole, const int theColumnId
   return aRes;
 }
 
-QStringList HYDROGUI_Zone::getBathymetries() const
+QStringList HYDROGUI_Zone::getAltitudes() const
 {
   QStringList aRes;
   Handle(HYDROData_Zone) aZone = Handle(HYDROData_Zone)::DownCast( modelObject() );
   if ( !aZone.IsNull() )
   {
     HYDROData_SequenceOfObjects aSeq = aZone->GetGeometryObjects();
-    // Collect all used bathymetries names when merging is necessary
-    // or just get the name of bathymetry of a single geometry object
+    // Collect all used altitudes names when merging is necessary
+    // or just get the name of altitude of a single geometry object
     HYDROData_SequenceOfObjects::Iterator anIter( aSeq );
     for ( ; anIter.More(); anIter.Next() )
     {
@@ -223,21 +218,18 @@ QStringList HYDROGUI_Zone::getBathymetries() const
         Handle(HYDROData_Object)::DownCast( anIter.Value() );
       if ( !aRefGeomObj.IsNull() )
       {
-        // Get bathymetry name
-        Handle(HYDROData_Bathymetry) aBathymetry = aRefGeomObj->GetBathymetry();
-        if ( !aBathymetry.IsNull() && !aRes.contains( aBathymetry->GetName() ))
-        {
-          aRes.append( aBathymetry->GetName() );
-        }
+        Handle(HYDROData_IAltitudeObject) anAltitudeObj = aRefGeomObj->GetAltitudeObject();
+        if ( !anAltitudeObj.IsNull() && !aRes.contains( anAltitudeObj->GetName() ) )
+          aRes.append( anAltitudeObj->GetName() );
       }
     }
   }
   return aRes;
 }
 
-HYDROData_Zone::MergeBathymetriesType HYDROGUI_Zone::getMergeType() const
+HYDROData_Zone::MergeAltitudesType HYDROGUI_Zone::getMergeType() const
 {
-  HYDROData_Zone::MergeBathymetriesType aRes = HYDROData_Zone::Merge_UNKNOWN;
+  HYDROData_Zone::MergeAltitudesType aRes = HYDROData_Zone::Merge_UNKNOWN;
   Handle(HYDROData_Zone) aZone = Handle(HYDROData_Zone)::DownCast( modelObject() );
   if ( !aZone.IsNull() )
   {
@@ -246,17 +238,17 @@ HYDROData_Zone::MergeBathymetriesType HYDROGUI_Zone::getMergeType() const
   return aRes;
 }
 
-void HYDROGUI_Zone::setMergeType( int theMergeType, QString theBathymetryName )
+void HYDROGUI_Zone::setMergeType( int theMergeType, QString theAltitudeName )
 {
   Handle(HYDROData_Zone) aZone = Handle(HYDROData_Zone)::DownCast( modelObject() );
   if ( !aZone.IsNull() )
   {
-    HYDROData_Zone::MergeBathymetriesType aMergeType = 
-      ( HYDROData_Zone::MergeBathymetriesType )theMergeType;
+    HYDROData_Zone::MergeAltitudesType aMergeType = 
+      ( HYDROData_Zone::MergeAltitudesType )theMergeType;
     aZone->SetMergeType( aMergeType );
     if ( aMergeType == HYDROData_Zone::Merge_Object )
     {
-      // Find a bathymetry by the given name and set it as the zone's merge bathymetry
+      // Find an altitude object by the given name and set it as the zone's merge altitude
       HYDROData_SequenceOfObjects aSeq = aZone->GetGeometryObjects();
       HYDROData_SequenceOfObjects::Iterator anIter( aSeq );
       for ( ; anIter.More(); anIter.Next() )
@@ -265,11 +257,11 @@ void HYDROGUI_Zone::setMergeType( int theMergeType, QString theBathymetryName )
           Handle(HYDROData_Object)::DownCast( anIter.Value() );
         if ( !aRefGeomObj.IsNull() )
         {
-          // Get bathymetry name
-          Handle(HYDROData_Bathymetry) aBathymetry = aRefGeomObj->GetBathymetry();
-          if ( !aBathymetry.IsNull() && theBathymetryName == aBathymetry->GetName() )
+          // Get altitude object name
+          Handle(HYDROData_IAltitudeObject) anAltitudeObj = aRefGeomObj->GetAltitudeObject();
+          if ( !anAltitudeObj.IsNull() && theAltitudeName == anAltitudeObj->GetName() )
           {
-            aZone->SetMergeBathymetry( aBathymetry );
+            aZone->SetMergeAltitude( anAltitudeObj );
             break;
           }
         }
@@ -277,3 +269,58 @@ void HYDROGUI_Zone::setMergeType( int theMergeType, QString theBathymetryName )
     }
   }
 }
+
+/*!
+  \brief Check if this object is can't be renamed in place
+
+  \param id column id
+  \return \c true if the item can be renamed by the user in place (e.g. in the Object browser)
+*/
+bool HYDROGUI_Zone::renameAllowed( const int id ) const
+{
+  if ( id == NameId && isInOperation() )
+  {
+    return true;
+  }
+  return HYDROGUI_DataObject::renameAllowed( id );
+}
+
+///*!
+//  \brief Set name of this object.
+//
+//  \return \c true if rename operation finished successfully, \c false otherwise.
+//*/
+//bool HYDROGUI_Zone::setName(const QString& theName)
+//{
+//  if ( isInOperation() )
+//  {
+//    bool aRes = false;
+//    if ( !theName.isEmpty() )
+//    {
+//      Handle(HYDROData_Entity) anEntity = modelObject();
+//      CAM_Module* aModule = module();
+//      if( anEntity->GetName() != theName && aModule )
+//      {
+//        // check that there are no other objects with the same name in the document
+//        Handle(HYDROData_Entity) anObject = HYDROGUI_Tool::FindObjectByName( aModule, theName );
+//        if ( anObject.IsNull() )
+//        {
+//          anEntity->SetName( theName );
+//          aRes = true;
+//        }
+//        else
+//        {
+//          // Inform the user that the name is already used
+//          QString aTitle = QObject::tr( "INSUFFICIENT_INPUT_DATA" );
+//          QString aMessage = QObject::tr( "OBJECT_EXISTS_IN_DOCUMENT" ).arg( theName );
+//          SUIT_MessageBox::critical( getApp()->desktop(), aTitle, aMessage );
+//        }
+//      }
+//    }
+//  }
+//  else
+//  {
+//    aRes = HYDROGUI_DataObject::setName( theName );
+//  }
+//  return aRes;
+//}