X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FModuleBase%2FModuleBase_Preferences.cpp;h=e07a3119b7f76bddac3062752f67b185d9d1c425;hb=1dfcab3d738e427bea678317e167c587dfbff195;hp=616e659e06c6a9c69bc0fbdb8ff39ea3470c54b0;hpb=5b24ea6ca4e9754fa89f7c742dce060abb2f3cda;p=modules%2Fshaper.git diff --git a/src/ModuleBase/ModuleBase_Preferences.cpp b/src/ModuleBase/ModuleBase_Preferences.cpp index 616e659e0..e07a3119b 100644 --- a/src/ModuleBase/ModuleBase_Preferences.cpp +++ b/src/ModuleBase/ModuleBase_Preferences.cpp @@ -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-2020 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 +#include + #include #include #include @@ -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,11 +118,41 @@ 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) { SUIT_ResourceMgr* aResMgr = ModuleBase_Preferences::resourceMgr(); - bool isResModified = false; // Make a Tab from each section std::list aSections = Config_PropManager::getSections(); @@ -123,23 +168,66 @@ void ModuleBase_Preferences::createCustomPage(ModuleBase_IPrefMgr* thePref, int // check that the property is defined QString aSection(aProp->section().c_str()); QString aName(aProp->name().c_str()); - if (!aResMgr->hasValue(aSection, aName)) { + if (!aResMgr->hasValue(aSection, aName)) aResMgr->setValue(aSection, aName, QString(aProp->value().c_str())); - isResModified = true; - } + // Add item if (aProp->type() != Config_Prop::Disabled) { SUIT_PreferenceMgr::PrefItemType aPrefType = SUIT_PreferenceMgr::Auto; - if (aProp->type() == Config_Prop::Directory) { + switch (aProp->type()) { + case Config_Prop::Directory: aPrefType = SUIT_PreferenceMgr::File; - } else { + break; + case Config_Prop::Cursor: + aPrefType = SUIT_PreferenceMgr::Selector; + break; + default: aPrefType = (SUIT_PreferenceMgr::PrefItemType) aProp->type(); } + int anId = thePref->addPreference(QObject::tr(aProp->title().c_str()), aTab, aPrefType, QString::fromStdString(aProp->section()), QString::fromStdString(aProp->name())); - if(aProp->type() == Config_Prop::Directory) { + + switch (aProp->type()) { + case Config_Prop::Directory: thePref->setItemProperty("path_type", Qtx::PT_Directory, anId); + break; + case 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); + } + break; + case SUIT_PreferenceMgr::IntSpin: + if (aProp->min() != "") { + int aMin = QString(aProp->min().c_str()).toInt(); + thePref->setItemProperty("min", aMin, anId); + } + if (aProp->max() != "") { + int aMax = QString(aProp->max().c_str()).toInt(); + thePref->setItemProperty("max", aMax, anId); + } + break; + case Config_Prop::Cursor: + { + QList aIndicesList; + QList aIconsList; + aIndicesList << 0 << 1 << 2; + aIconsList << QPixmap(":pictures/ArrowCursor.png") << + QPixmap(":pictures/CrossCursor.png") << + QPixmap(":pictures/HandCursor.png"); + + thePref->setItemProperty("indexes", aIndicesList, anId); + thePref->setItemProperty("icons", aIconsList, anId); + } + break; + default: // [to avoid compilation warnings] + break; } } } @@ -156,7 +244,7 @@ public: /// \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 ) { @@ -177,8 +265,10 @@ private: //********************************************************** //********************************************************** //********************************************************** -ModuleBase_PreferencesDlg::ModuleBase_PreferencesDlg(SUIT_ResourceMgr* theResurces, QWidget* theParent) - : QDialog(theParent), +ModuleBase_PreferencesDlg::ModuleBase_PreferencesDlg(SUIT_ResourceMgr* theResurces, + QWidget* theParent) + : QDialog(theParent, + Qt::Dialog | Qt::CustomizeWindowHint | Qt::WindowTitleHint | Qt::WindowCloseButtonHint), myIsChanged(false) { setWindowTitle(tr("Edit preferences")); @@ -206,7 +296,6 @@ ModuleBase_PreferencesDlg::ModuleBase_PreferencesDlg(SUIT_ResourceMgr* theResurc createEditors(); myPreferences->retrieve(); - setMinimumSize(800, 200); } ModuleBase_PreferencesDlg::~ModuleBase_PreferencesDlg() @@ -256,6 +345,68 @@ 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"); + + int highlightGroup = myPreferences->addItem(tr("Additional highlighting"), viewTab); + myPreferences->setItemProperty("columns", 2, highlightGroup); + myPreferences->addItem(tr("In 3d mode"), highlightGroup, + SUIT_PreferenceMgr::Bool, ModuleBase_Preferences::VIEWER_SECTION, "highlighting-3d"); + myPreferences->addItem(tr("In 2d mode"), highlightGroup, + SUIT_PreferenceMgr::Bool, ModuleBase_Preferences::VIEWER_SECTION, "highlighting-2d"); + + int colorScaleGroup = myPreferences->addItem(tr("Color scale"), viewTab); + myPreferences->setItemProperty("columns", 4, colorScaleGroup); + int aItem = myPreferences->addItem(tr("X position"), colorScaleGroup, + SUIT_PreferenceMgr::Double, ModuleBase_Preferences::VIEWER_SECTION, "scalar_bar_x_position"); + myPreferences->setItemProperty("min", 0, aItem); + myPreferences->setItemProperty("max", 1, aItem); + + aItem = myPreferences->addItem(tr("Y position"), colorScaleGroup, + SUIT_PreferenceMgr::Double, ModuleBase_Preferences::VIEWER_SECTION, "scalar_bar_y_position"); + myPreferences->setItemProperty("min", 0, aItem); + myPreferences->setItemProperty("max", 1, aItem); + + aItem = myPreferences->addItem(tr("Width"), colorScaleGroup, + SUIT_PreferenceMgr::Double, ModuleBase_Preferences::VIEWER_SECTION, "scalar_bar_width"); + myPreferences->setItemProperty("min", 0, aItem); + myPreferences->setItemProperty("max", 1, aItem); + + aItem = myPreferences->addItem(tr("Height"), colorScaleGroup, + SUIT_PreferenceMgr::Double, ModuleBase_Preferences::VIEWER_SECTION, "scalar_bar_height"); + myPreferences->setItemProperty("min", 0, aItem); + myPreferences->setItemProperty("max", 1, aItem); + + aItem = myPreferences->addItem(tr("Intervals number"), colorScaleGroup, + SUIT_PreferenceMgr::Integer, ModuleBase_Preferences::VIEWER_SECTION, "scalar_bar_nb_intervals"); + myPreferences->setItemProperty("min", 0, aItem); + myPreferences->setItemProperty("max", 100, aItem); + + aItem = myPreferences->addItem(tr("Text height"), colorScaleGroup, + SUIT_PreferenceMgr::Integer, ModuleBase_Preferences::VIEWER_SECTION, "scalar_bar_text_height"); + myPreferences->setItemProperty("min", 0, aItem); + myPreferences->setItemProperty("max", 100, aItem); + + aItem = myPreferences->addItem(tr("Text color"), colorScaleGroup, + SUIT_PreferenceMgr::Color, ModuleBase_Preferences::VIEWER_SECTION, "scalar_bar_text_color"); } void ModuleBase_PreferencesDlg::createMenuPage(int thePageId) @@ -266,10 +417,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() @@ -289,18 +445,23 @@ 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(); + // 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); +} - myPreferences->retrieve(); +void ModuleBase_PreferencesDlg::showEvent(QShowEvent* theEvent) +{ + QDialog::showEvent(theEvent); + adjustSize(); } //**********************************************************