Salome HOME
refs #550: fix crash when myObject is NULL
[modules/hydro.git] / src / HYDROGUI / HYDROGUI_Module.cxx
index c97dbd878b81fec238b41e5f9eea0de51288e696..cbed2b66dc1943b3c443b75712ee31a944c3078e 100644 (file)
@@ -1,8 +1,4 @@
-// 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
-//
+// 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
 #include <SALOME_Event.h>
 
 #include <SUIT_DataBrowser.h>
-#include <SUIT_Desktop.h>
-#include <SUIT_Study.h>
+#include <SUIT_DataObject.h>
 #include <SUIT_ViewManager.h>
 #include <SUIT_ResourceMgr.h>
+#include <SUIT_Desktop.h>
+#include <SUIT_Study.h>
 #include <SUIT_Session.h>
 
 #include <SVTK_ViewManager.h>
@@ -236,6 +233,10 @@ bool HYDROGUI_Module::activateModule( SUIT_Study* theStudy )
     }
   }
 
+//  SUIT_DataBrowser* ob = getApp()->objectBrowser();
+//  SUIT_AbstractModel* treeModel = dynamic_cast<SUIT_AbstractModel*>( ob->model() );
+//  treeModel->setAppropriate( SUIT_DataObject::VisibilityId, Qtx::Toggled );
+
   return aRes;
 }
 
@@ -572,6 +573,8 @@ void HYDROGUI_Module::contextMenuPopup( const QString& theClient,
         theMenu->addAction( action( CutImagesId ) );
         theMenu->addAction( action( SplitImageId ) );
         theMenu->addSeparator();
+        theMenu->addAction( action( RecognizeContoursId ) );
+        theMenu->addSeparator();
       }
       else if( anIsBathymetry )
       {
@@ -705,6 +708,21 @@ void HYDROGUI_Module::contextMenuPopup( const QString& theClient,
 
   if( isRoot )
     theMenu->addAction( action( EditLocalCSId ) );
+
+  if( anIsObjectBrowser && anOwners.size()==1 )
+  {
+    if( aSeq.Size() > 0 )
+    {
+      Handle( HYDROData_Object ) anObject = Handle( HYDROData_Object )::DownCast( aSeq.First() );
+      if( !anObject.IsNull() )
+      {
+        theMenu->addSeparator();
+        theMenu->addAction( action( SubmersibleId ) );
+        action( SubmersibleId )->setCheckable( true );
+        action( SubmersibleId )->setChecked( anObject->IsSubmersible() );
+      }
+    }
+  }
 }
 
 void HYDROGUI_Module::createPreferences()
@@ -729,6 +747,10 @@ void HYDROGUI_Module::createPreferences()
 
   setPreferenceProperty( typeOfCursor, "indexes", aCursorTypeIndicesList );
   setPreferenceProperty( typeOfCursor, "icons",   aCursorTypeIconsList );
+
+  int viewerGroup = addPreference( tr( "PREF_GROUP_VIEWER" ), genTab );
+  addPreference( tr( "PREF_VIEWER_AUTO_FITALL" ), viewerGroup,
+                 LightApp_Preferences::Bool, "HYDRO", "auto_fit_all" );
 }
 
 QCursor HYDROGUI_Module::getPrefEditCursor() const
@@ -742,7 +764,7 @@ QCursor HYDROGUI_Module::getPrefEditCursor() const
 
 void HYDROGUI_Module::update( const int flags )
 {
-  if( !isUpdateEnabled() )
+  if ( !isUpdateEnabled() )
     return;
 
   QApplication::setOverrideCursor( Qt::WaitCursor );
@@ -755,6 +777,12 @@ void HYDROGUI_Module::update( const int flags )
   QStringList aSelectedEntries = storeSelection();
 
   bool aDoFitAll = flags & UF_FitAll;
+  if ( aDoFitAll )
+  {
+    SUIT_ResourceMgr* aResMgr = getApp()->resourceMgr();
+    aDoFitAll = aResMgr->booleanValue( "HYDRO", "auto_fit_all", false );
+  }
+
   if( ( flags & UF_Viewer ) )
     updateViewer( getDisplayer(), flags & UF_GV_Init, flags & UF_GV_Forced, aDoFitAll ); 
 
@@ -952,6 +980,16 @@ void HYDROGUI_Module::setObjectVisible( const int theViewId,
 
     ObjectState& anObjectState = aEntry2ObjectStateMap[ anEntry ];
     anObjectState.Visibility = theState;
+
+    HYDROGUI_DataObject* hydroObject = getDataModel()->getDataObject( theObject );
+    if ( hydroObject )
+    {
+        SUIT_AbstractModel* treeModel = dynamic_cast<SUIT_AbstractModel*>( getApp()->objectBrowser()->model() );
+        QString id = hydroObject->text( hydroObject->customData( Qtx::IdType ).toInt() );
+        Qtx::VisibilityState visState = treeModel->visibilityState( id );
+        if ( visState != Qtx::UnpresentableState )
+            treeModel->setVisibilityState( id, theState ? Qtx::ShownState : Qtx::HiddenState );
+    }
   }
 }
 
@@ -1628,3 +1666,39 @@ HYDROGUI_Operation* HYDROGUI_Module::activeOperation()
 
   return anOp;
 }
+
+/*!
+ * \brief Virtual public slot
+ *
+ * This method is called after the object inserted into data view to update their visibility state
+ * This is default implementation
+ */
+void HYDROGUI_Module::onObjectClicked( SUIT_DataObject* theObject, int theColumn )
+{
+  if ( !isActiveModule() )
+      return;
+
+  HYDROGUI_DataObject* hydroObject = dynamic_cast<HYDROGUI_DataObject*>( theObject );
+
+  // change visibility of object
+  if ( !hydroObject || theColumn != SUIT_DataObject::VisibilityId )
+      return;
+
+  SUIT_AbstractModel* treeModel = dynamic_cast<SUIT_AbstractModel*>( getApp()->objectBrowser()->model() );
+
+  QString id = theObject->text( theObject->customData( Qtx::IdType ).toInt() );
+  Qtx::VisibilityState visState = treeModel->visibilityState( id );
+  if ( visState == Qtx::UnpresentableState )
+      return;
+
+  visState = visState == Qtx::ShownState ? Qtx::HiddenState : Qtx::ShownState;
+  treeModel->setVisibilityState( id, visState );
+
+  bool vis = visState == Qtx::ShownState;
+  if ( vis == isObjectVisible( HYDROGUI_Tool::GetActiveViewId( this ), hydroObject->modelObject() ) )
+      return;
+
+  setObjectVisible( HYDROGUI_Tool::GetActiveViewId( this ), hydroObject->modelObject(), vis );
+
+  update( UF_OCCViewer | ( visState == Qtx::ShownState ? UF_FitAll : 0 ) );
+}