Salome HOME
Merge branch 'master' of ssh://git.salome-platform.org/modules/hydro
[modules/hydro.git] / src / HYDROGUI / HYDROGUI_Module.cxx
index 26ee9fd732ee99901d5ef286a185ac94b61ab225..d08d53b5aaa3f980bf9f84d5def5df83aec0635d 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2013  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2015  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
@@ -6,7 +6,7 @@
 // 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
@@ -51,7 +51,7 @@
 
 #include <HYDROData_OperationsFactory.h>
 
-#include <CurveCreator_Utils.h>
+#include <CurveCreator_Utils.hxx>
 
 #include <GraphicsView_ViewFrame.h>
 #include <GraphicsView_ViewManager.h>
@@ -186,7 +186,6 @@ bool HYDROGUI_Module::activateModule( SUIT_Study* theStudy )
   foreach ( const int anId, anObsoleteIds ) {
     myViewManagerMap.remove( anId );
     myObjectStateMap.remove( anId );
-    myObjectDisplayOrderMap.remove( anId );
     myShapesMap.remove( anId );
     myVTKPrsMap.remove( anId );
   }
@@ -260,6 +259,12 @@ bool HYDROGUI_Module::deactivateModule( SUIT_Study* theStudy )
   myVTKPrsMap.clear();
   */
 
+  // clear the status bar
+  SUIT_Desktop* aDesktop = getApp()->desktop();
+  if ( aDesktop && aDesktop->statusBar() ) {
+    aDesktop->statusBar()->clearMessage();
+  }
+
   // clear the data model's list of copying objects
   HYDROGUI_DataModel::changeCopyingObjects( HYDROData_SequenceOfObjects() );
 
@@ -333,6 +338,18 @@ void HYDROGUI_Module::contextMenuPopup( const QString& theClient,
   bool anIsDummyObject3D = false;
   bool anIsGroup = false;
   bool anIsObjectCanBeColored = false;
+  bool isRoot = false;
+
+  SUIT_SelectionMgr* aSelectionMgr = getApp()->selectionMgr();
+  SUIT_DataOwnerPtrList anOwners;
+  aSelectionMgr->selected( anOwners );
+  if( anIsObjectBrowser && anOwners.size()==1 )
+  {
+    QString anEntry = anOwners[0]->keyString();
+    LightApp_Study* aStudy = dynamic_cast<LightApp_Study*>( getApp()->activeStudy() );
+    if( aStudy )
+      isRoot = aStudy->isComponent( anEntry );
+  }
 
   // Check the selected GEOM objects (take into account the Object Browser only)
   if ( anIsObjectBrowser ) {
@@ -669,6 +686,9 @@ void HYDROGUI_Module::contextMenuPopup( const QString& theClient,
     theMenu->addSeparator();
     theMenu->addAction( action( CopyViewerPositionId ) );
   }
+
+  if( isRoot )
+    theMenu->addAction( action( EditLocalCSId ) );
 }
 
 void HYDROGUI_Module::update( const int flags )
@@ -883,13 +903,6 @@ void HYDROGUI_Module::setObjectVisible( const int theViewId,
 
     ObjectState& anObjectState = aEntry2ObjectStateMap[ anEntry ];
     anObjectState.Visibility = theState;
-
-    // Remember the display order ( needed for Z layers assignment only )
-    QStringList& anObjectEntries = myObjectDisplayOrderMap[ theViewId ];
-    anObjectEntries.removeAll( anEntry );
-    if ( theState ) {
-      anObjectEntries.append( anEntry );
-    }
   }
 }
 
@@ -930,6 +943,23 @@ void HYDROGUI_Module::setIsToUpdate( const Handle(HYDROData_Entity)& theObject,
 }
 
 /////////////////// OCC SHAPES PROCESSING
+QList<HYDROGUI_Shape*> HYDROGUI_Module::getObjectShapes( const int  theViewId,
+                                                         ObjectKind theKind ) const
+{
+  QList<HYDROGUI_Shape*> aResult;
+
+  if ( myShapesMap.contains( theViewId ) )
+  {
+    const ListOfShapes& aViewShapes = myShapesMap.value( theViewId );
+    foreach ( HYDROGUI_Shape* aShape, aViewShapes )
+    {
+      if( aShape && aShape->getObject()->GetKind()==theKind )
+        aResult.append( aShape );
+    }
+  }
+  return aResult;
+}
+
 HYDROGUI_Shape* HYDROGUI_Module::getObjectShape( const int                       theViewId,
                                                  const Handle(HYDROData_Entity)& theObject ) const
 {
@@ -1494,40 +1524,35 @@ void HYDROGUI_Module::restoreSelection( const QStringList& theEntryList )
 
 void HYDROGUI_Module::onMouseMove( SUIT_ViewWindow* theViewWindow, QMouseEvent* )
 {
-  double aX, aY, aZ;
+  double X, Y, Z;
   bool doShow = false;
   HYDROGUI_Displayer* aDisplayer = getDisplayer();
   if ( aDisplayer )
     aDisplayer->SaveCursorViewPosition( theViewWindow );
-    doShow = aDisplayer->GetCursorViewCoordinates( theViewWindow, aX, aY, aZ );
+    doShow = aDisplayer->GetCursorViewCoordinates( theViewWindow, X, Y, Z );
 
   if ( doShow )
   {
     // Show the coordinates in the status bar
     SUIT_Desktop* aDesktop = getApp()->desktop();
-    if ( aDesktop && aDesktop->statusBar() ) {
-      QString aXStr = HYDROGUI_Tool::GetCoordinateString( aX );
-      QString anYStr = HYDROGUI_Tool::GetCoordinateString( aY );
-      aDesktop->statusBar()->showMessage( tr("COORDINATES_INFO").arg( aXStr ).arg( anYStr ) );
+    if ( aDesktop && aDesktop->statusBar() )
+    {
+      gp_Pnt aWPnt( X, Y, Z );
+      int aStudyId = application()->activeStudy()->id();
+      HYDROData_Document::Document( aStudyId )->Transform( aWPnt, false );
+      double WX = aWPnt.X(), WY = aWPnt.Y();
+
+      QString aXStr = HYDROGUI_Tool::GetCoordinateString( X, true );
+      QString anYStr = HYDROGUI_Tool::GetCoordinateString( Y, true );
+      QString aWXStr = HYDROGUI_Tool::GetCoordinateString( WX, true );
+      QString aWYStr = HYDROGUI_Tool::GetCoordinateString( WY, true );
+      QString aMsg = tr( "COORDINATES_INFO" );
+      aMsg = aMsg.arg( aXStr ).arg( anYStr ).arg( aWXStr ).arg( aWYStr );
+      aDesktop->statusBar()->showMessage( aMsg );
     }
   }
 }
 
-/**
- * Get the object display order. Needed for Z layers assignment only.
- */
-int HYDROGUI_Module::getObjectDisplayOrder( 
-  const int theViewId, const Handle(HYDROData_Entity)& theObject) const
-{
-  if( theObject.IsNull() )
-    return -1;
-
-  QString anEntry = HYDROGUI_DataObject::dataObjectEntry( theObject );
-  QStringList anObjectEntries = myObjectDisplayOrderMap.value( theViewId );
-
-  return anObjectEntries.indexOf( anEntry );
-}
-
 /**
  * Returns stack of active operations;
  */