Salome HOME
untabify
[modules/smesh.git] / src / SMESHGUI / SMESHGUI.cxx
index 64839fa3941df55cbdc64acbb507a5c5c3ec5d09..5dac913944b6aea5a5f866662fb166bd86685970 100644 (file)
@@ -99,6 +99,7 @@
 #include <SalomeApp_Study.h>
 #include <SalomeApp_Application.h>
 #include <SalomeApp_CheckFileDlg.h>
+#include <SalomeApp_DataObject.h>
 
 #include <LightApp_DataOwner.h>
 #include <LightApp_Preferences.h>
 
 // Qt includes
 // #define       INCLUDE_MENUITEM_DEF // VSR commented ????????
+#include <QApplication>
 #include <QMenu>
 #include <QTextStream>
 
       type = QObject::tr( "OVER_CONSTRAINED_VOLUME" );
     else if ( dynamic_cast< SMESH::Controls::OverConstrainedFace* >( f.get() ) )
       type = QObject::tr( "OVER_CONSTRAINED_FACE" );
+    else if ( dynamic_cast< SMESH::Controls::CoincidentNodes* >( f.get() ) )
+      type = QObject::tr( "EQUAL_NODE" );
+    else if ( dynamic_cast< SMESH::Controls::CoincidentElements1D* >( f.get() ) )
+      type = QObject::tr( "EQUAL_EDGE" );
+    else if ( dynamic_cast< SMESH::Controls::CoincidentElements2D* >( f.get() ) )
+      type = QObject::tr( "EQUAL_FACE" );
+    else if ( dynamic_cast< SMESH::Controls::CoincidentElements3D* >( f.get() ) )
+      type = QObject::tr( "EQUAL_VOLUME" );
     return type;
   }
 
@@ -1705,6 +1715,14 @@ LightApp_Module( "SMESH" )
     myComponentSMESH->SetBoundaryBoxSegmentation( nbSeg );
     nbSeg = aResourceMgr->integerValue( "SMESH", "nb_segments_per_edge", 15 );
     myComponentSMESH->SetDefaultNbSegments( nbSeg );
+
+    const char* options[] = { "historical_python_dump", "forget_mesh_on_hyp_modif" };
+    for ( size_t i = 0; i < sizeof(options)/sizeof(char*); ++i )
+      if ( aResourceMgr->hasValue( "SMESH", options[i] ))
+      {
+        QString val = aResourceMgr->stringValue( "SMESH", options[i] );
+        myComponentSMESH->SetOption( options[i], val.toLatin1().constData() );
+      }
   }
 
   myActiveDialogBox = 0;
@@ -2129,7 +2147,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID )
 
   case 1134: // Clipping
   case 1133: // Tranparency
-  case 1132: // Colors / Size
+  case 1132: // Display preferences (colors, shrink size, line width, ...)
 
     // Display Mode
   case 215: // Nodes
@@ -4478,6 +4496,11 @@ void SMESHGUI::createPreferences()
   int prec = addPreference( tr( "PREF_PRECISION_VALUE" ), qaGroup, LightApp_Preferences::IntSpin, "SMESH", "controls_precision" );
   setPreferenceProperty( prec, "min", 0 );
   setPreferenceProperty( prec, "max", 16 );
+  int doubleNodesTol = addPreference( tr( "PREF_EQUAL_NODES_TOL" ), qaGroup, LightApp_Preferences::DblSpin, "SMESH", "equal_nodes_tolerance" );
+  setPreferenceProperty( doubleNodesTol, "precision", 10 );
+  setPreferenceProperty( doubleNodesTol, "min", 0.0000000001 );
+  setPreferenceProperty( doubleNodesTol, "max", 1000000.0 );
+  setPreferenceProperty( doubleNodesTol, "step", 0.0000001 );
 
   int dispgroup = addPreference( tr( "PREF_DISPLAY_MODE" ), genTab );
   setPreferenceProperty( dispgroup, "columns", 2 );
@@ -4561,6 +4584,11 @@ void SMESHGUI::createPreferences()
   setPreferenceProperty( nbSeg, "min", 1 );
   setPreferenceProperty( nbSeg, "max", 10000000 );
 
+  int loadGroup = addPreference( tr( "SMESH_PREF_MESH_LOADING" ), genTab );
+  addPreference( tr( "PREF_FORGET_MESH_AT_HYP_MODIF" ), loadGroup, LightApp_Preferences::Bool,
+                 "SMESH", "forget_mesh_on_hyp_modif" );
+
+
   // Quantities with individual precision settings
   int precGroup = addPreference( tr( "SMESH_PREF_GROUP_PRECISION" ), genTab );
   setPreferenceProperty( precGroup, "columns", 2 );
@@ -4594,6 +4622,9 @@ void SMESHGUI::createPreferences()
   setPreferenceProperty( chunkSize, "max",  1000 );
   setPreferenceProperty( chunkSize, "step", 50 );
 
+  int pyDumpGroup = addPreference( tr( "PREF_PYTHON_DUMP" ), genTab );
+  addPreference( tr( "PREF_HISTORICAL_PYTHON_DUMP" ), pyDumpGroup, LightApp_Preferences::Bool, "SMESH", "historical_python_dump" );
+
   // Mesh tab ------------------------------------------------------------------------
   int meshTab = addPreference( tr( "PREF_TAB_MESH" ) );
   int nodeGroup = addPreference( tr( "PREF_GROUP_NODES" ), meshTab );
@@ -4678,19 +4709,11 @@ void SMESHGUI::createPreferences()
 
   addPreference( tr( "PREF_OBJECT_COLOR" ), selGroup, LightApp_Preferences::Color, "SMESH", "selection_object_color" );
   addPreference( tr( "PREF_ELEMENT_COLOR" ), selGroup, LightApp_Preferences::Color, "SMESH", "selection_element_color" );
-  int selW = addPreference( tr( "PREF_WIDTH" ), selGroup, LightApp_Preferences::IntSpin, "SMESH", "selection_width" );
-
-  setPreferenceProperty( selW, "min", 1 );
-  setPreferenceProperty( selW, "max", 5 );
 
   int preGroup = addPreference( tr( "PREF_GROUP_PRESELECTION" ), selTab );
   setPreferenceProperty( preGroup, "columns", 2 );
 
   addPreference( tr( "PREF_HIGHLIGHT_COLOR" ), preGroup, LightApp_Preferences::Color, "SMESH", "highlight_color" );
-  int preW = addPreference( tr( "PREF_WIDTH" ), preGroup, LightApp_Preferences::IntSpin, "SMESH", "highlight_width" );
-
-  setPreferenceProperty( preW, "min", 1 );
-  setPreferenceProperty( preW, "max", 5 );
 
   int precSelGroup = addPreference( tr( "PREF_GROUP_PRECISION" ), selTab );
   setPreferenceProperty( precSelGroup, "columns", 2 );
@@ -4793,7 +4816,7 @@ void SMESHGUI::preferencesChanged( const QString& sect, const QString& name )
     std::string aWarning;
     SUIT_ResourceMgr* aResourceMgr = SMESH::GetResourceMgr(this);
     if( name=="selection_object_color" || name=="selection_element_color" ||
-        name=="selection_width" || name=="highlight_color" || name=="highlight_width" ||
+        name=="highlight_color" ||
         name=="selection_precision_node" || name=="selection_precision_element" ||
         name=="selection_precision_object")
       SMESH::UpdateSelectionProp( this );
@@ -4847,6 +4870,11 @@ void SMESHGUI::preferencesChanged( const QString& sect, const QString& name )
       int nbSeg = aResourceMgr->integerValue( "SMESH", "nb_segments_per_edge", 15 );
       myComponentSMESH->SetDefaultNbSegments( nbSeg );
     }
+    else if ( name == "historical_python_dump" ||
+              name == "forget_mesh_on_hyp_modif") {
+      QString val = aResourceMgr->stringValue( "SMESH", name );
+      myComponentSMESH->SetOption( name.toLatin1().constData(), val.toLatin1().constData() );
+    }
 
     if(aWarning.size() != 0){
       aWarning += "The default values are applied instead.";
@@ -5919,6 +5947,35 @@ void SMESHGUI::onViewClosed( SUIT_ViewWindow* pview ) {
 #endif
 }
 
+void SMESHGUI::message( const QString& msg )
+{
+  // dispatch message
+  QStringList data = msg.split("/");
+  if ( data.count() > 0 ) {
+    if ( data.first() == "mesh_loading" ) {
+      // get mesh entry
+      QString entry = data.count() > 1 ? data[1] : QString();
+      if ( entry.isEmpty() )
+        return;
+      // get study
+      _PTR(Study) study = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() )->studyDS();
+      // get mesh name
+      _PTR(SObject) obj = study->FindObjectID( entry.toLatin1().constData() );
+      QString name;
+      if ( obj )
+        name = obj->GetName().c_str();
+      if ( name.isEmpty() )
+        return;
+      
+      if ( data.last() == "stop" )
+        application()->putInfo( tr( "MESH_LOADING_MSG_FINISHED" ).arg( name ) );
+      else
+        application()->putInfo( tr( "MESH_LOADING_MSG" ).arg( name ) );
+      QApplication::processEvents();
+    }
+  }
+}
+
 /*!
   \brief Connects or disconnects signals about activating and cloning view on the module slots
   \param pview view which is connected/disconnected
@@ -5945,16 +6002,20 @@ bool SMESHGUI::renameAllowed( const QString& entry) const {
   if( !anApp )
     return false;
 
-  _PTR(Study) aStudy = SMESH::GetActiveStudyDocument(); //Document OCAF de l'etude active
-  if( !aStudy )
+  SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( anApp->activeStudy() );
+  if( !appStudy )
+    return false;
+
+  SalomeApp_DataObject* obj = dynamic_cast<SalomeApp_DataObject*>(appStudy->findObjectByEntry(entry));
+  
+  if(!obj)
     return false;
 
-  bool appRes = SalomeApp_Module::renameAllowed(entry);
-  if( !appRes )
+  if(appStudy->isComponent(entry) || obj->isReference())
     return false;
 
   // check type to prevent renaming of inappropriate objects
-  int aType = SMESHGUI_Selection::type(qPrintable(entry), aStudy);
+  int aType = SMESHGUI_Selection::type(qPrintable(entry), SMESH::GetActiveStudyDocument());
   if (aType == MESH || aType == GROUP ||
       aType == SUBMESH || aType == SUBMESH_COMPOUND ||
       aType == SUBMESH_SOLID || aType == SUBMESH_FACE ||
@@ -5976,14 +6037,23 @@ bool SMESHGUI::renameObject( const QString& entry, const QString& name) {
   SalomeApp_Application* anApp = dynamic_cast<SalomeApp_Application*>( application() );
   if( !anApp )
     return false;
+    
+  SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( anApp->activeStudy() );
 
-  _PTR(Study) aStudy = SMESH::GetActiveStudyDocument(); //Document OCAF de l'etude active
-  if( !aStudy )
+  if(!appStudy)
     return false;
-
-  bool appRes = SalomeApp_Module::renameObject(entry,name);
-  if( !appRes )
+  
+  _PTR(Study) aStudy = appStudy->studyDS();
+  
+  if(!aStudy)
     return false;
+  
+  bool aLocked = (_PTR(AttributeStudyProperties)(appStudy->studyDS()->GetProperties()))->IsLocked();
+  if ( aLocked ) {
+    SUIT_MessageBox::warning ( anApp->desktop(), QObject::tr("WRN_WARNING"), QObject::tr("WRN_STUDY_LOCKED") );
+    return false;
+  }
+
 
   _PTR(SObject) obj = aStudy->FindObjectID( qPrintable(entry) );
   _PTR(GenericAttribute) anAttr;
@@ -5992,7 +6062,7 @@ bool SMESHGUI::renameObject( const QString& entry, const QString& name) {
     if ( obj->FindAttribute(anAttr, "AttributeName") ) {
       aName = anAttr;
       // check type to prevent renaming of inappropriate objects
-      int aType = SMESHGUI_Selection::type( qPrintable(entry), aStudy );
+      int aType = SMESHGUI_Selection::type( qPrintable(entry), SMESH::GetActiveStudyDocument() );
       if (aType == MESH || aType == GROUP ||
           aType == SUBMESH || aType == SUBMESH_COMPOUND ||
           aType == SUBMESH_SOLID || aType == SUBMESH_FACE ||