Salome HOME
Update copyrights
[modules/shaper.git] / src / ModuleBase / ModuleBase_Preferences.cpp
index c550b23a610825cdd4936a7a2654427507a35046..a0706030229709d04790bebc96c7cc9274d4da9f 100644 (file)
@@ -1,14 +1,29 @@
-// Copyright (C) 2014-20xx CEA/DEN, EDF R&D
-
-// File:        ModuleBase_Preferences.cpp
-// Created:     07 Aug 2014
-// Author:      Vitaly SMETANNIKOV
+// Copyright (C) 2014-2019  CEA/DEN, 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, 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
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
 
 #include "ModuleBase_Preferences.h"
 //#include "ModuleBase_Constants.h"
 
 #include <Config_PropManager.h>
 
+#include <TopAbs_ShapeEnum.hxx>
+
 #include <SUIT_ResourceMgr.h>
 #include <SUIT_PreferenceMgr.h>
 #include <Qtx.h>
@@ -26,7 +41,7 @@ SUIT_ResourceMgr* ModuleBase_Preferences::myResourceMgr = 0;
 SUIT_ResourceMgr* ModuleBase_Preferences::resourceMgr()
 {
   if (!myResourceMgr) {
-    myResourceMgr = new SUIT_ResourceMgr("NewGeom");
+    myResourceMgr = new SUIT_ResourceMgr("SHAPER");
     myResourceMgr->setCurrentFormat("xml");
   }
   return myResourceMgr;
@@ -103,6 +118,37 @@ void ModuleBase_Preferences::createEditContent(ModuleBase_IPrefMgr* thePref, int
   createCustomPage(thePref, thePage);
 }
 
+void ModuleBase_Preferences::resetResourcePreferences(SUIT_PreferenceMgr* thePref)
+{
+  if (!thePref)
+    return;
+
+  QtxResourceMgr::WorkingMode aPrev =
+    thePref->resourceMgr()->setWorkingMode(QtxResourceMgr::IgnoreUserValues);
+  thePref->retrieve();
+  thePref->resourceMgr()->setWorkingMode(aPrev);
+}
+
+void ModuleBase_Preferences::resetConfigPropPreferences(SUIT_PreferenceMgr* thePref)
+{
+  resetConfig();
+  updateResourcesByConfig();
+
+  // retrieve the reset resource values to the preferences items
+  Config_Properties aProps = Config_PropManager::getProperties();
+  Config_Properties::iterator aIt;
+  QStringList aValues;
+  QStringList aSections;
+  for (aIt = aProps.begin(); aIt != aProps.end(); ++aIt) {
+    Config_Prop* aProp = (*aIt);
+    aValues.append(QString(aProp->name().c_str()));
+    if (!aSections.contains(aProp->section().c_str()))
+      aSections.append(aProp->section().c_str());
+    QtxPreferenceItem* anItem = thePref->findItem(QString(aProp->title().c_str()), true);
+    if (anItem)
+      anItem->retrieve();
+  }
+}
 
 void ModuleBase_Preferences::createCustomPage(ModuleBase_IPrefMgr* thePref, int thePageId)
 {
@@ -141,20 +187,32 @@ void ModuleBase_Preferences::createCustomPage(ModuleBase_IPrefMgr* thePref, int
         if(aProp->type() == Config_Prop::Directory) {
           thePref->setItemProperty("path_type", Qtx::PT_Directory, anId);
         }
+        if (aPrefType == SUIT_PreferenceMgr::DblSpin) {
+          if (aProp->min() != "") {
+            double aMin = QString(aProp->min().c_str()).toDouble();
+            thePref->setItemProperty("min", aMin, anId);
+          }
+          if (aProp->max() != "") {
+            double aMax = QString(aProp->max().c_str()).toDouble();
+            thePref->setItemProperty("max", aMax, anId);
+          }
+        }
       }
     }
   }
 }
 
-//**********************************************************
-//**********************************************************
-//**********************************************************
+/**
+* Implementation of preferences manager interface
+*/
 class ModuleBase_PrefMgr: public ModuleBase_IPrefMgr
 {
 public:
+  /// Constructor
+  /// \param theMgr a preferences manager
   ModuleBase_PrefMgr(ModuleBase_PreferencesMgr* theMgr):myMgr(theMgr) {}
 
-  virtual int addPreference(const QString& theLbl, int pId, 
+  virtual int addPreference(const QString& theLbl, int pId,
                             SUIT_PreferenceMgr::PrefItemType theType,
                             const QString& theSection, const QString& theName )
   {
@@ -175,7 +233,8 @@ private:
 //**********************************************************
 //**********************************************************
 //**********************************************************
-ModuleBase_PreferencesDlg::ModuleBase_PreferencesDlg(SUIT_ResourceMgr* theResurces, QWidget* theParent)
+ModuleBase_PreferencesDlg::ModuleBase_PreferencesDlg(SUIT_ResourceMgr* theResurces,
+  QWidget* theParent)
     : QDialog(theParent),
       myIsChanged(false)
 {
@@ -204,7 +263,7 @@ ModuleBase_PreferencesDlg::ModuleBase_PreferencesDlg(SUIT_ResourceMgr* theResurc
   createEditors();
 
   myPreferences->retrieve();
-  setMinimumSize(800, 200);
+  setMinimumSize(800, 240);
 }
 
 ModuleBase_PreferencesDlg::~ModuleBase_PreferencesDlg()
@@ -254,6 +313,26 @@ void ModuleBase_PreferencesDlg::createViewerPage(int thePageId)
   myPreferences->setItemProperty("texture_stretch_enabled", true, bgId);
   myPreferences->setItemProperty("custom_enabled", false, bgId);
   myPreferences->setItemProperty("image_formats", aImgFiles, bgId);
+
+  // Create other parameters group in viewer tab
+  int selectionGroup = myPreferences->addItem(tr("Default selection"), viewTab);
+  myPreferences->setItemProperty("columns", 3, selectionGroup);
+  myPreferences->addItem(tr("Faces"), selectionGroup,
+                         SUIT_PreferenceMgr::Bool,
+                         ModuleBase_Preferences::VIEWER_SECTION, "face-selection");
+  myPreferences->addItem(tr("Edges"), selectionGroup,
+                         SUIT_PreferenceMgr::Bool,
+                         ModuleBase_Preferences::VIEWER_SECTION, "edge-selection");
+  myPreferences->addItem(tr("Vertices"), selectionGroup,
+                         SUIT_PreferenceMgr::Bool,
+                         ModuleBase_Preferences::VIEWER_SECTION, "vertex-selection");
+
+  int sensitivityGroup = myPreferences->addItem(tr("Selection sensitivity"), viewTab);
+  myPreferences->setItemProperty("columns", 2, sensitivityGroup);
+  myPreferences->addItem(tr("Vertex"), sensitivityGroup, SUIT_PreferenceMgr::DblSpin,
+                         ModuleBase_Preferences::VIEWER_SECTION, "point-selection-sensitivity");
+  myPreferences->addItem(tr("Edge"), sensitivityGroup, SUIT_PreferenceMgr::DblSpin,
+                         ModuleBase_Preferences::VIEWER_SECTION, "edge-selection-sensitivity");
 }
 
 void ModuleBase_PreferencesDlg::createMenuPage(int thePageId)
@@ -264,10 +343,15 @@ void ModuleBase_PreferencesDlg::createMenuPage(int thePageId)
   myPreferences->setItemProperty("columns", 1, aSizeGroup);
 
   int aRowsNb = myPreferences->addItem(tr("Number of rows"), aSizeGroup,
-                                       SUIT_PreferenceMgr::IntSpin, ModuleBase_Preferences::MENU_SECTION,
+                                       SUIT_PreferenceMgr::IntSpin,
+                                       ModuleBase_Preferences::MENU_SECTION,
                                        "rows_number");
   myPreferences->setItemProperty("min", 1, aRowsNb);
   myPreferences->setItemProperty("max", 6, aRowsNb);
+
+  myPreferences->addItem(tr("Show Status Bar"), aSizeGroup,
+                         SUIT_PreferenceMgr::Bool, ModuleBase_Preferences::MENU_SECTION,
+                         "status_bar");
 }
 
 void ModuleBase_PreferencesDlg::accept()
@@ -287,18 +371,17 @@ void ModuleBase_PreferencesDlg::modified(ModuleBase_Prefs& theModified) const
 
 void ModuleBase_PreferencesDlg::onDefault()
 {
-  // reset main resources
-#ifdef SALOME_750 // until SALOME 7.5.0 is released
-  QtxResourceMgr::WorkingMode aPrev =
-      myPreferences->resourceMgr()->setWorkingMode(QtxResourceMgr::IgnoreUserValues);
-  myPreferences->retrieve();
-  myPreferences->resourceMgr()->setWorkingMode(aPrev);
-#endif
-  // reset plugin's resources
-  ModuleBase_Preferences::resetConfig();
-  ModuleBase_Preferences::updateResourcesByConfig();
-
-  myPreferences->retrieve();
+  // reset main resources. It throwns all resource manager items to the
+  // initial/default state. If there is no a default state of the item,
+  // it will be filled with an empty value. It concernerned to plugin
+  // config items, like visualization color. The main xml do not contains
+  // default values for them. So, it is important to reset the config
+  // properties after reseting the resources preferences.
+  ModuleBase_Preferences::resetResourcePreferences(myPreferences);
+  // reset plugin's resources. It fills the config resources with the default
+  // values, stores result in the resource manager and retrieve the preferences
+  // items with these values.
+  ModuleBase_Preferences::resetConfigPropPreferences(myPreferences);
 }
 
 //**********************************************************