]> SALOME platform Git repositories - modules/hydro.git/commitdiff
Salome HOME
Bug 23: popup menu.
authorouv <ouv@opencascade.com>
Tue, 17 Sep 2013 13:44:29 +0000 (13:44 +0000)
committerouv <ouv@opencascade.com>
Tue, 17 Sep 2013 13:44:29 +0000 (13:44 +0000)
13 files changed:
src/HYDROData/HYDROData_Object.h
src/HYDROGUI/HYDROGUI_DataModel.cxx
src/HYDROGUI/HYDROGUI_DataModel.h
src/HYDROGUI/HYDROGUI_Module.cxx
src/HYDROGUI/HYDROGUI_ObjSelector.cxx
src/HYDROGUI/HYDROGUI_ObjSelector.h
src/HYDROGUI/HYDROGUI_Operations.cxx
src/HYDROGUI/HYDROGUI_Tool.cxx
src/HYDROGUI/HYDROGUI_Tool.h
src/HYDROGUI/HYDROGUI_TwoImagesDlg.cxx
src/HYDROGUI/HYDROGUI_TwoImagesDlg.h
src/HYDROGUI/HYDROGUI_TwoImagesOp.cxx
src/HYDROGUI/resources/HYDROGUI_msg_en.ts

index 04e83ed99649a275f942dacc065f26d9be85a3bb..5d43cdde6d363b7400c151470928e791e5ad6aae 100644 (file)
@@ -26,6 +26,7 @@ const ObjectKind KIND_PROFILE        = 6;
 const ObjectKind KIND_PROFILES_GROUP = 7;
 const ObjectKind KIND_GUIDE_LINE     = 8;
 const ObjectKind KIND_ZONE           = 9;
+const ObjectKind KIND_LAST           = KIND_ZONE;
 
 DEFINE_STANDARD_HANDLE(HYDROData_Object, MMgt_TShared)
 
index e946262885d0f9613579ec6ed617f0e4c545c507..392dfef5bd9b6d1262e77ccb1097ef0e28c8366d 100644 (file)
@@ -219,7 +219,7 @@ void HYDROGUI_DataModel::update( const int theStudyId )
   if( aDocument.IsNull() )
     return;
 
-  LightApp_DataObject* anImageRootObj = createObject( aRootObj, "IMAGES" );
+  LightApp_DataObject* anImageRootObj = createObject( aRootObj, partitionName( KIND_IMAGE ) );
 
   HYDROData_Iterator anIterator( aDocument, KIND_IMAGE );
   for( ; anIterator.More(); anIterator.Next() )
@@ -240,7 +240,7 @@ void HYDROGUI_DataModel::update( const int theStudyId )
     }
   }
 
-  LightApp_DataObject* aBathymetryRootObj = createObject( aRootObj, "BATHYMETRIES" );
+  LightApp_DataObject* aBathymetryRootObj = createObject( aRootObj, partitionName( KIND_BATHYMETRY ) );
 
   anIterator = HYDROData_Iterator( aDocument, KIND_BATHYMETRY );
   for( ; anIterator.More(); anIterator.Next() )
@@ -251,7 +251,7 @@ void HYDROGUI_DataModel::update( const int theStudyId )
       createObject( aBathymetryRootObj, aBathymetryObj );
   }
 
-  LightApp_DataObject* aCalculRootObj = createObject( aRootObj, "CALCULATION CASES" );
+  LightApp_DataObject* aCalculRootObj = createObject( aRootObj, partitionName( KIND_CALCULATION ) );
 
   anIterator = HYDROData_Iterator( aDocument, KIND_CALCULATION );
   for( ; anIterator.More(); anIterator.Next() )
@@ -262,7 +262,7 @@ void HYDROGUI_DataModel::update( const int theStudyId )
       createObject( aCalculRootObj, aCalculObj );
   }
 
-  LightApp_DataObject* aPolylineRootObj = createObject( aRootObj, "POLYLINES" );
+  LightApp_DataObject* aPolylineRootObj = createObject( aRootObj, partitionName( KIND_POLYLINE ) );
 
   anIterator = HYDROData_Iterator( aDocument, KIND_POLYLINE );
   for( ; anIterator.More(); anIterator.Next() )
@@ -273,7 +273,7 @@ void HYDROGUI_DataModel::update( const int theStudyId )
       createObject( aPolylineRootObj, aPolylineObj );
   }
 
-  LightApp_DataObject* aVisualStateRootObj = createObject( aRootObj, "VISUAL_STATES" );
+  LightApp_DataObject* aVisualStateRootObj = createObject( aRootObj, partitionName( KIND_VISUAL_STATE ) );
 
   anIterator = HYDROData_Iterator( aDocument, KIND_VISUAL_STATE );
   for( ; anIterator.More(); anIterator.Next() )
@@ -497,6 +497,20 @@ void HYDROGUI_DataModel::changeCopyingObjects( const HYDROData_SequenceOfObjects
   myCopyingObjects.Assign( theSeq );
 }
 
+QString HYDROGUI_DataModel::partitionName( const ObjectKind theObjectKind )
+{
+  switch( theObjectKind )
+  {
+    case KIND_IMAGE:        return "IMAGES";
+    case KIND_POLYLINE:     return "POLYLINES";
+    case KIND_VISUAL_STATE: return "VISUAL_STATES";
+    case KIND_BATHYMETRY:   return "BATHYMETRIES";
+    case KIND_CALCULATION:  return "CALCULATION_CASES";
+    default: break;
+  }
+  return QString();
+}
+
 Handle(HYDROData_Document) HYDROGUI_DataModel::getDocument() const
 {
   int aStudyId = module()->application()->activeStudy()->id();
index 9c1ff2255660ee56785d9b5d714bdbcda433ec11..3576a1a029bfad8e88c83e916855ad059802e347 100644 (file)
@@ -109,14 +109,14 @@ public:
   /**
    * Returns data object corresponding to the model object.
    * \param the data model object
-   * \returns the only one object referenced to the given data model object, or null if not found
+   * \return the only one object referenced to the given data model object, or null if not found
    */
   virtual HYDROGUI_DataObject* getDataObject( const Handle(HYDROData_Object)& theModelObject );
 
   /**
    * Returns a data object referenced to the given data object.
    * \param the data object
-   * \returns the object referenced to the given object, or null if not found
+   * \return the object referenced to the given object, or null if not found
    */
   virtual HYDROGUI_DataObject* getReferencedDataObject( HYDROGUI_DataObject* theObject );
 
@@ -215,6 +215,13 @@ public:
    */
   static void changeCopyingObjects( const HYDROData_SequenceOfObjects& );
 
+  /**
+   * Returns name of the partition containing the objects of the specified kind
+   * \param theObjectKind kind of objects
+   * \return partition name
+   */
+  static QString partitionName( const ObjectKind theObjectKind );
+
 protected:
   /**
    * Returns the document for the current study
index 28f985792ce486a66bcda974899cdd85a7acf50c..6ce7fa531a283235f384068c464a8ef5f0a16bc3 100644 (file)
@@ -173,9 +173,14 @@ void HYDROGUI_Module::contextMenuPopup( const QString& theClient,
 {
   HYDROGUI_DataModel* aModel = getDataModel();
 
+  bool anIsObjectBrowser = theClient == "ObjectBrowser";
+  bool anIsGraphicsView = theClient == "GraphicsView";
+  if( !anIsObjectBrowser && !anIsGraphicsView )
+    return;
+
   size_t aViewId = HYDROGUI_Tool::GetActiveGraphicsViewId( this );
 
-  bool anIsSelection = false;
+  bool anIsSelectedDataObjects = false;
   bool anIsVisibleInSelection = false;
   bool anIsHiddenInSelection = false;
 
@@ -190,13 +195,14 @@ void HYDROGUI_Module::contextMenuPopup( const QString& theClient,
   bool anIsCalculation = false;
   bool anIsVisualState = false;
 
+  // check the selected data model objects
   HYDROData_SequenceOfObjects aSeq = HYDROGUI_Tool::GetSelectedObjects( this );
   for( Standard_Integer anIndex = 1, aLength = aSeq.Length(); anIndex <= aLength; anIndex++ )
   {
     Handle(HYDROData_Object) anObject = aSeq.Value( anIndex );
     if( !anObject.IsNull() )
     {
-      anIsSelection = true;
+      anIsSelectedDataObjects = true;
 
       bool aVisibility = isObjectVisible( aViewId, anObject );
       anIsVisibleInSelection |= aVisibility;
@@ -235,19 +241,41 @@ void HYDROGUI_Module::contextMenuPopup( const QString& theClient,
     }
   }
 
-  if( aSeq.IsEmpty() )
+  // check the selected partitions
+  if( !anIsSelectedDataObjects && anIsObjectBrowser )
   {
-    theMenu->addAction( action( SaveVisualStateId ) );
-    theMenu->addSeparator();
+    ObjectKind aSelectedPartition = HYDROGUI_Tool::GetSelectedPartition( this );
+    if( aSelectedPartition != KIND_UNKNOWN )
+    {
+      switch( aSelectedPartition )
+      {
+        case KIND_IMAGE:
+          theMenu->addAction( action( ImportImageId ) );
+          break;
+        case KIND_POLYLINE:
+          theMenu->addAction( action( CreatePolylineId ) );
+          break;
+        case KIND_VISUAL_STATE:
+          theMenu->addAction( action( SaveVisualStateId ) );
+          break;
+        case KIND_BATHYMETRY:
+          theMenu->addAction( action( ImportBathymetryId ) );
+          break;
+        case KIND_CALCULATION:
+          theMenu->addAction( action( CreateCalculationId ) );
+          break;
+      }
+      theMenu->addSeparator();
+    }
   }
 
-  if( anIsSelection && anIsMustBeUpdatedImage )
+  if( anIsSelectedDataObjects && anIsMustBeUpdatedImage )
   {
     theMenu->addAction( action( UpdateImageId ) );
     theMenu->addSeparator();
   }
 
-  if( anIsSelection && aSeq.Length() == 1 )
+  if( anIsSelectedDataObjects && aSeq.Length() == 1 )
   {
     if( anIsImage )
     {
@@ -266,6 +294,11 @@ void HYDROGUI_Module::contextMenuPopup( const QString& theClient,
       theMenu->addAction( action( ObserveImageId ) );
       theMenu->addAction( action( ExportImageId ) );
       theMenu->addSeparator();
+
+      theMenu->addAction( action( FuseImagesId ) );
+      theMenu->addAction( action( CutImagesId ) );
+      theMenu->addAction( action( SplitImageId ) );
+      theMenu->addSeparator();
     }
     else if( anIsPolyline )
     {
@@ -277,7 +310,7 @@ void HYDROGUI_Module::contextMenuPopup( const QString& theClient,
       theMenu->addAction( action( EditCalculationId ) );
       theMenu->addSeparator();
     }
-    else if( anIsVisualState )
+    else if( anIsVisualState && anIsObjectBrowser )
     {
       theMenu->addAction( action( SaveVisualStateId ) );
       theMenu->addAction( action( LoadVisualStateId ) );
@@ -285,13 +318,13 @@ void HYDROGUI_Module::contextMenuPopup( const QString& theClient,
     }
   }
 
-  if( anIsSelection )
+  if( anIsSelectedDataObjects )
   {
     theMenu->addAction( action( DeleteId ) );
     theMenu->addSeparator();
   }
 
-  if( anIsSelection && ( anIsImage || anIsPolyline ) )
+  if( anIsSelectedDataObjects && ( anIsImage || anIsPolyline ) )
   {
     if( anIsHiddenInSelection )
       theMenu->addAction( action( ShowId ) );
@@ -301,9 +334,12 @@ void HYDROGUI_Module::contextMenuPopup( const QString& theClient,
     theMenu->addSeparator();
   }
 
-  theMenu->addAction( action( ShowAllId ) );
-  theMenu->addAction( action( HideAllId ) );
-  theMenu->addSeparator();
+  if( anIsObjectBrowser || anIsGraphicsView )
+  {
+    theMenu->addAction( action( ShowAllId ) );
+    theMenu->addAction( action( HideAllId ) );
+    theMenu->addSeparator();
+  }
 }
 
 void HYDROGUI_Module::update( const int flags )
index f97212a04ae532b222dc4ef024fcceb7530c43e8..a79c1f6b2d1cea3102cc98d318992090a2396f54 100644 (file)
@@ -122,3 +122,8 @@ void HYDROGUI_ObjSelector::Clear()
   myObjName->clear();
   myBtn->setChecked( false );
 }
+
+void HYDROGUI_ObjSelector::SetChecked( const bool theState )
+{
+  myBtn->setChecked( theState );
+}
index ba1ff514f8a0f8994ff96846513edf3aaa845053..717d700106646f4ff3b597b366b29da6a05a0a2b 100644 (file)
@@ -42,6 +42,7 @@ public:
   virtual ~HYDROGUI_ObjSelector();
 
   void Clear();
+  void SetChecked( const bool );
 
   void SetName( const QString& );
   QString GetName() const;
index 08dc8a385d59bec10e0c4c8287b4413d0cbb2968..544d124dd0c9ab763561c30c1a5af40683afa8f9 100644 (file)
@@ -84,7 +84,7 @@ void HYDROGUI_Module::createActions()
   createAction( CreatePolylineId, "CREATE_POLYLINE" );
   createAction( EditPolylineId, "EDIT_POLYLINE" ); 
 
-  createAction( ImportBathymetryId, "IMPORT_BATHYMETRY", "", Qt::CTRL + Qt::SHIFT + Qt::Key_I );
+  createAction( ImportBathymetryId, "IMPORT_BATHYMETRY", "", Qt::CTRL + Qt::Key_B );
 
   createAction( CreateCalculationId, "CREATE_CALCULATION" );
   createAction( EditCalculationId, "EDIT_CALCULATION" );
@@ -127,6 +127,7 @@ void HYDROGUI_Module::createMenus()
   createMenu( ImportBathymetryId, aHydroId, -1, -1 );
   createMenu( CreatePolylineId, aHydroId, -1, -1 );
   createMenu( CreateCalculationId, aHydroId, -1, -1 );
+  createMenu( separator(), aHydroId );
   createMenu( FuseImagesId, aHydroId, -1, -1 );
   createMenu( CutImagesId, aHydroId, -1, -1 );
   createMenu( SplitImageId, aHydroId, -1, -1 );
index 29d053f046bb210563677941224d417d9c8f979d..e030e1db13e33016a05b5d17269e9143e0cb509e 100644 (file)
@@ -23,6 +23,7 @@
 #include "HYDROGUI_Tool.h"
 
 #include "HYDROGUI_DataModel.h"
+#include "HYDROGUI_DataObject.h"
 #include "HYDROGUI_Module.h"
 #include "HYDROGUI_Prs.h"
 
@@ -265,6 +266,32 @@ Handle(HYDROData_Object) HYDROGUI_Tool::GetSelectedObject( HYDROGUI_Module* theM
   return NULL;
 }
 
+ObjectKind HYDROGUI_Tool::GetSelectedPartition( HYDROGUI_Module* theModule )
+{
+  HYDROGUI_DataModel* aModel = theModule->getDataModel();
+
+  SUIT_SelectionMgr* aSelectionMgr = theModule->getApp()->selectionMgr();
+  SUIT_DataOwnerPtrList anOwners;
+  aSelectionMgr->selected( anOwners );
+
+  if( anOwners.size() != 1 )
+    return KIND_UNKNOWN;
+
+  if( LightApp_DataOwner* anOwner = dynamic_cast<LightApp_DataOwner*>( anOwners.first().operator->() ) )
+  {
+    QString anEntry = anOwner->entry();
+    QString aPrefix = HYDROGUI_DataObject::entryPrefix();
+    if( anEntry.left( aPrefix.length() ) == aPrefix )
+    {
+      anEntry.remove( aPrefix );
+      for( ObjectKind anObjectKind = KIND_UNKNOWN + 1; anObjectKind <= KIND_LAST; anObjectKind++ )
+        if( HYDROGUI_DataModel::partitionName( anObjectKind ) == anEntry )
+          return anObjectKind;
+    }
+  }
+  return KIND_UNKNOWN;
+}
+
 Handle(HYDROData_Object) HYDROGUI_Tool::FindObjectByName( HYDROGUI_Module* theModule,
                                                           const QString& theName,
                                                           const ObjectKind theObjectKind )
index 7c959d8586591d42861957a577d83240d8810f68..c2552ddca66bb25f52a349b624cf21660bbe676c 100644 (file)
@@ -158,6 +158,13 @@ public:
    */
   static Handle(HYDROData_Object) GetSelectedObject( HYDROGUI_Module* theModule );
 
+  /**
+   * \brief Get kind of objects the selected partition contains.
+   * \param theModule module
+   * \return object kind
+   */
+  static ObjectKind GetSelectedPartition( HYDROGUI_Module* theModule );
+
   /**
    * \brief Find the data object with the specified name.
    * \param theModule module
index 5a80d9e2c8ac6b294bffa44240fd3cb1e4426c50..4ed150204c503e569e7815e1ac385e7017b902a8 100644 (file)
@@ -169,6 +169,15 @@ bool HYDROGUI_TwoImagesDlg::getSelectedObjects( QString& theName1,
   return !theName1.isEmpty() && !theName2.isEmpty();
 }
 
+void HYDROGUI_TwoImagesDlg::setPreselectedObject( const QString& theName )
+{
+  myImage1->SetName( theName );
+
+  HYDROGUI_ObjSelector* aSelector = myMode == TwoImages ? myImage2 : myPolyline;
+  aSelector->SetChecked( true );
+  aSelector->SetName( QString() );
+}
+
 void HYDROGUI_TwoImagesDlg::setColor( const QColor& theColor )
 {
   if( theColor.alpha() == 0 ) // transparent
index 8ac3bce73c226095aacdda5918c9306f5f48c5e4..5f9522664c3e884009ee329203c5681691e4d76b 100644 (file)
@@ -58,6 +58,8 @@ public:
   bool                       getSelectedObjects( QString& theName1,
                                                  QString& theName2 ) const;
 
+  void                       setPreselectedObject( const QString& theName );
+
   void                       setColor( const QColor& theColor );
   QColor                     getColor() const;
 
index 2e634382f1ceb9087742f3afddf13f33b924bf29..3def5370a5f7885b03ef35e16d6b7d239af07cb3 100644 (file)
@@ -123,6 +123,16 @@ void HYDROGUI_TwoImagesOp::startOperation()
       aPanel->setColor( aColor );
     }
   }
+  else if( !myIsEdit )
+  {
+    Handle(HYDROData_Image) aSelectedImage =
+      Handle(HYDROData_Image)::DownCast( HYDROGUI_Tool::GetSelectedObject( module() ) );
+    if( !aSelectedImage.IsNull() )
+    {
+      QString aSelectedName = aSelectedImage->GetName();
+      aPanel->setPreselectedObject( aSelectedName );
+    }
+  }
 }
 
 bool HYDROGUI_TwoImagesOp::processApply( int& theUpdateFlags,
index 70729b307b04cefe5cd523f52a83f2a4927738d8..18d81f7f5f2cff3aa75e555e3453766ddebe45f2 100644 (file)
@@ -54,11 +54,11 @@ does not exist or you have not enough permissions to open it.</translation>
     </message>
     <message>
       <source>CALCULATION_BOUNDARY</source>
-      <translation>Domain of calculation Case</translation>
+      <translation>Domain of calculation case</translation>
     </message>
     <message>
       <source>CALCULATION_NAME</source>
-      <translation>Calculation Case name</translation>
+      <translation>Calculation case name</translation>
     </message>
     <message>
       <source>NAME</source>
@@ -70,11 +70,11 @@ does not exist or you have not enough permissions to open it.</translation>
     <name>HYDROGUI_CalculationOp</name>
     <message>
       <source>CREATE_CALCULATION</source>
-      <translation>Create calculation Case</translation>
+      <translation>Create calculation case</translation>
     </message>
     <message>
       <source>EDIT_CALCULATION</source>
-      <translation>Edit calculation Case</translation>
+      <translation>Edit calculation case</translation>
     </message>
   </context>
 
@@ -144,7 +144,7 @@ Do you want to continue?</translation>
     </message>
     <message>
       <source>IMPORT_BATHYMETRY_FROM_FILE</source>
-      <translation>Import Bathymetry from file</translation>
+      <translation>Import bathymetry from file</translation>
     </message>
     <message>
       <source>NAME</source>
@@ -156,7 +156,7 @@ Do you want to continue?</translation>
     <name>HYDROGUI_ImportBathymetryOp</name>
     <message>
       <source>IMPORT_BATHYMETRY</source>
-      <translation>Import Bathymetry</translation>
+      <translation>Import bathymetry</translation>
     </message>
     <message>
       <source>BAD_IMPORTED_BATHYMETRY_FILE</source>
@@ -253,7 +253,7 @@ file cannot be correctly imported for a Bathymetry definition.</translation>
     <name>HYDROGUI_Module</name>
     <message>
       <source>DSK_CREATE_CALCULATION</source>
-      <translation>Create calculation Case</translation>
+      <translation>Create calculation case</translation>
     </message>
     <message>
       <source>DSK_CREATE_POLYLINE</source>
@@ -273,7 +273,7 @@ file cannot be correctly imported for a Bathymetry definition.</translation>
     </message>
     <message>
       <source>DSK_EDIT_CALCULATION</source>
-      <translation>Edit calculation Case</translation>
+      <translation>Edit calculation case</translation>
     </message>
     <message>
       <source>DSK_EDIT_CUT_IMAGE</source>
@@ -313,7 +313,7 @@ file cannot be correctly imported for a Bathymetry definition.</translation>
     </message>
     <message>
       <source>DSK_IMPORT_BATHYMETRY</source>
-      <translation>Import Bathymetry</translation>
+      <translation>Import bathymetry</translation>
     </message>
     <message>
       <source>DSK_IMPORT_IMAGE</source>
@@ -365,7 +365,7 @@ file cannot be correctly imported for a Bathymetry definition.</translation>
     </message>
     <message>
       <source>MEN_CREATE_CALCULATION</source>
-      <translation>Create new calculation Case</translation>
+      <translation>Create new calculation case</translation>
     </message>
     <message>
       <source>MEN_CREATE_POLYLINE</source>
@@ -389,7 +389,7 @@ file cannot be correctly imported for a Bathymetry definition.</translation>
     </message>
     <message>
       <source>MEN_EDIT_CALCULATION</source>
-      <translation>Edit calculation Case</translation>
+      <translation>Edit calculation case</translation>
     </message>
     <message>
       <source>MEN_EDIT_CUT_IMAGE</source>
@@ -429,7 +429,7 @@ file cannot be correctly imported for a Bathymetry definition.</translation>
     </message>
     <message>
       <source>MEN_IMPORT_BATHYMETRY</source>
-      <translation>Import Bathymetry</translation>
+      <translation>Import bathymetry</translation>
     </message>
     <message>
       <source>MEN_IMPORT_IMAGE</source>
@@ -481,7 +481,7 @@ file cannot be correctly imported for a Bathymetry definition.</translation>
     </message>
     <message>
       <source>STB_CREATE_CALCULATION</source>
-      <translation>Create new calculation Case</translation>
+      <translation>Create new calculation case</translation>
     </message>
     <message>
       <source>STB_CREATE_POLYLINE</source>
@@ -501,7 +501,7 @@ file cannot be correctly imported for a Bathymetry definition.</translation>
     </message>
     <message>
       <source>STB_EDIT_CALCULATION</source>
-      <translation>Edit calculation Case</translation>
+      <translation>Edit calculation case</translation>
     </message>
     <message>
       <source>STB_EDIT_CUT_IMAGE</source>
@@ -541,7 +541,7 @@ file cannot be correctly imported for a Bathymetry definition.</translation>
     </message>
     <message>
       <source>STB_IMPORT_BATHYMETRY</source>
-      <translation>Import Bathymetry</translation>
+      <translation>Import bathymetry</translation>
     </message>
     <message>
       <source>STB_IMPORT_IMAGE</source>