]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
Editing preferences added
authorvsv <vitaly.smetannikov@opencascade.com>
Tue, 12 Aug 2014 14:57:56 +0000 (18:57 +0400)
committervsv <vitaly.smetannikov@opencascade.com>
Tue, 12 Aug 2014 14:57:56 +0000 (18:57 +0400)
src/XGUI/NewGeom.xml
src/XGUI/XGUI_MainMenu.cpp
src/XGUI/XGUI_MainMenu.h
src/XGUI/XGUI_Preferences.cpp
src/XGUI/XGUI_Preferences.h
src/XGUI/XGUI_Viewer.cpp
src/XGUI/XGUI_Viewer.h
src/XGUI/XGUI_Workshop.cpp

index 0f76d83213fd8f22895c29b745ff447328120a30..1b1bd2a0bbc129665136b8ad95e8ba64b494bc1c 100644 (file)
@@ -2,7 +2,12 @@
 -->
 <document>
   <section name="Viewer" >
-    <!-- OCC viewer preferences -->
+    <!-- Viewer preferences -->
     <parameter name="background" value="bt=2;fn=;tm=0;ts=false;c1=#cddbff;c2=#698fff;gt=1;gr=" />
- </section>
+  </section>
+  <section name="Menu" >
+    <!-- Menu bar preferences -->
+    <parameter name="item_size" value="25" />
+    <parameter name="rows_number" value="3" />
+  </section>
 </document>
index a16076e54024327846d11e202388ea3930ffdaef..4e64c9e6eec6d317d9cd753afafd2ea5e462e84f 100644 (file)
@@ -3,6 +3,9 @@
 #include <XGUI_MenuGroupPanel.h>
 #include <XGUI_MainWindow.h>
 #include <XGUI_Command.h>
+#include <XGUI_Preferences.h>
+
+#include <SUIT_ResourceMgr.h>
 
 #include <QLayout>
 #include <QTabWidget>
@@ -129,9 +132,9 @@ QList<XGUI_Workbench*> XGUI_MainMenu::workbenches() const
 
 int XGUI_MainMenu::menuItemSize() const
 {
-  //TODO(sbh, vsv): get this value from the preferences
-  static const ItemSize DEFAULT_ITEM_SIZE = Medium;
-  return (int) DEFAULT_ITEM_SIZE;
+  int DEFAULT_ITEM_SIZE = XGUI_Preferences::resourceMgr()->integerValue(
+    XGUI_Preferences::MENU_SECTION, "item_size");
+  return DEFAULT_ITEM_SIZE;
 }
 
 int XGUI_MainMenu::menuHeight() const
@@ -144,7 +147,11 @@ int XGUI_MainMenu::menuHeight() const
 
 int XGUI_MainMenu::menuItemRowsCount() const
 {
-  //TODO(sbh, vsv): get this value from the preferences
-  static const int DEFAULT_ITEM_ROWS_COUNT = 3;
+  int DEFAULT_ITEM_ROWS_COUNT = XGUI_Preferences::resourceMgr()->integerValue(
+    XGUI_Preferences::MENU_SECTION, "rows_number");
   return DEFAULT_ITEM_ROWS_COUNT;
 }
+
+void XGUI_MainMenu::updateFromResources()
+{
+}
index 3be908792422bc615f555073b0c96bc855d37718..b583bf02cc0d415f7769d153f39c53b7915065be 100644 (file)
@@ -28,11 +28,11 @@ class XGUI_EXPORT XGUI_MainMenu: public QWidget
 
   //! Size of menu item
   //TODO(sbh, vsv): Move to the settings
-  enum ItemSize {
-    Small = 20,
-    Medium = 25,
-    Large = 30
-  };
+  //enum ItemSize {
+  //  Small = 20,
+  //  Medium = 25,
+  //  Large = 30
+  //};
 
 public:
   XGUI_MainMenu(XGUI_MainWindow *parent);
@@ -69,6 +69,8 @@ public:
   int menuItemRowsCount() const;
   int menuHeight() const;
 
+  void updateFromResources();
+
 private:
   XGUI_MainWindow* myDesktop;
   QTabWidget* myMenuTabs;
index 06d7fbf15637ab0252d5a5d466fe72b8cf172766..14fea9f987860c86ec41aa079e8d05e4699b6b85 100644 (file)
 #include <QApplication>
 #include <QDialogButtonBox>
 
+
+const QString XGUI_Preferences::VIEWER_SECTION = "Viewer";
+const QString XGUI_Preferences::MENU_SECTION = "Menu";
+
+
 SUIT_ResourceMgr* XGUI_Preferences::myResourceMgr = 0;
 
 
@@ -24,10 +29,16 @@ SUIT_ResourceMgr* XGUI_Preferences::resourceMgr()
   return myResourceMgr;
 }
 
-void XGUI_Preferences::editPreferences()
+bool XGUI_Preferences::editPreferences(XGUI_Prefs& theModified)
 {
   XGUI_PreferencesDlg aDlg(resourceMgr(), QApplication::activeWindow());
   aDlg.exec();
+  if (aDlg.isChanged()) {
+    aDlg.modified(theModified);
+    resourceMgr()->save();
+    return true;
+  }
+  return false;
 }
 
 
@@ -36,7 +47,7 @@ void XGUI_Preferences::editPreferences()
 //**********************************************************
 //**********************************************************
 XGUI_PreferencesDlg::XGUI_PreferencesDlg(SUIT_ResourceMgr* theResurces, QWidget* theParent)
-  : QDialog(theParent)
+  : QDialog(theParent), myIsChanged(false)
 {
   setWindowTitle( tr("Edit preferences") );
 
@@ -44,21 +55,21 @@ XGUI_PreferencesDlg::XGUI_PreferencesDlg(SUIT_ResourceMgr* theResurces, QWidget*
   main->setMargin( 5 );
   main->setSpacing( 5 );
 
-  myPreferences = new SUIT_PreferenceMgr(theResurces, this);
+  myPreferences = new XGUI_PreferencesMgr(theResurces, this);
   main->addWidget( myPreferences );
 
   setFocusProxy( myPreferences );
   myPreferences->setFrameStyle( QFrame::Box | QFrame::Sunken );
-  //myPreferences->show();
 
   QDialogButtonBox* aBtnBox = new QDialogButtonBox(
     QDialogButtonBox::Ok | QDialogButtonBox::Cancel, Qt::Horizontal, this);
   main->addWidget(aBtnBox);
   connect(aBtnBox, SIGNAL(accepted()), this, SLOT(accept()));
   connect(aBtnBox, SIGNAL(rejected()), this, SLOT(reject()));  
+  createEditors();
 
   myPreferences->retrieve();
-  createEditors();
+  setMinimumSize(800, 200);
 }
 
 XGUI_PreferencesDlg::~XGUI_PreferencesDlg()
@@ -67,10 +78,16 @@ XGUI_PreferencesDlg::~XGUI_PreferencesDlg()
 
 void XGUI_PreferencesDlg::createEditors()
 {
-  int aLFpage = myPreferences->addItem("Look&Feel");
+  int aLFpage = myPreferences->addItem("Desktop");
   myPreferences->setItemIcon(aLFpage, QIcon(":pictures/view_prefs.png"));
 
-  int viewTab = myPreferences->addItem( tr("Viewer"), aLFpage );
+  createMenuPage(aLFpage);
+  createViewerPage(aLFpage);
+}
+
+void XGUI_PreferencesDlg::createViewerPage(int thePageId)
+{
+  int viewTab = myPreferences->addItem( tr("Viewer"), thePageId );
 
   QStringList gradList;
   gradList << tr("Horizontal gradient")     << tr("Vertical gradient")        <<
@@ -87,7 +104,8 @@ void XGUI_PreferencesDlg::createEditors()
   QString aImgFiles("Image files (*.bmp *.gif *.pix *.xwd *.rgb *.rs)");
 
   int bgId = myPreferences->addItem( tr("Viewer 3d" ), bgGroup,
-                                  SUIT_PreferenceMgr::Background, "Viewer", "background" );
+                                  SUIT_PreferenceMgr::Background, 
+                                  XGUI_Preferences::VIEWER_SECTION, "background" );
   myPreferences->setItemProperty( "gradient_names", gradList, bgId );
   myPreferences->setItemProperty( "gradient_ids", idList, bgId );
   myPreferences->setItemProperty( "texture_enabled", true, bgId );
@@ -96,10 +114,61 @@ void XGUI_PreferencesDlg::createEditors()
   myPreferences->setItemProperty( "texture_stretch_enabled", true, bgId );
   myPreferences->setItemProperty( "custom_enabled", false, bgId );
   myPreferences->setItemProperty( "image_formats", aImgFiles, bgId );
+}
 
+void XGUI_PreferencesDlg::createMenuPage(int thePageId)
+{
+  int aMenuTab = myPreferences->addItem(tr("Main menu"), thePageId );
+
+  int aSizeGroup = myPreferences->addItem(tr("Size"), aMenuTab );
+  myPreferences->setItemProperty( "columns", 2, aSizeGroup );
+
+  int aItemSizeItem = myPreferences->addItem( tr( "Item size" ), 
+                                              aSizeGroup, 
+                                              SUIT_PreferenceMgr::Selector,
+                                              XGUI_Preferences::MENU_SECTION, 
+                                              "item_size" );
+  QStringList aValuesList;
+  QList<QVariant> anIndicesList;
+  aValuesList << tr("Small") << tr("Medium") << tr("Large");
+  anIndicesList << 20 << 25 << 30;
+  myPreferences->setItemProperty( "strings", aValuesList,   aItemSizeItem );
+  myPreferences->setItemProperty( "indexes", anIndicesList, aItemSizeItem );
+
+  int aRowsNb = myPreferences->addItem( tr( "Number of rows" ), 
+                                        aSizeGroup,
+                                        SUIT_PreferenceMgr::IntSpin, 
+                                        XGUI_Preferences::MENU_SECTION, 
+                                        "rows_number" );
+  myPreferences->setItemProperty( "min", 1, aRowsNb );
+  myPreferences->setItemProperty( "max", 10, aRowsNb );
 }
 
+void XGUI_PreferencesDlg::accept()
+{
+  myPreferences->store();
+  myIsChanged = true;
+  QDialog::accept();
+}
 
+void XGUI_PreferencesDlg::modified(XGUI_Prefs& theModified) const
+{
+  theModified = myPreferences->modified();
+}
 
 
 
+//**********************************************************
+//**********************************************************
+//**********************************************************
+void XGUI_PreferencesMgr::changedResources( const ResourceMap& theMap)
+{
+  myModified.clear();
+  ResourceMap::ConstIterator it;
+  QString sec, param;
+  for (it = theMap.begin(); it != theMap.end(); ++it ) {
+    XGUI_Pref aPref;
+    it.key()->resource( aPref.first, aPref.second );
+    myModified.append(aPref);
+  }
+}
index 5453ec5a93b4dfbe8c5e0c9966845c04bf01684d..90150c67f7c74e4d502297d25132b61a10226b95 100644 (file)
@@ -6,17 +6,27 @@
 #define XGUI_Preferences_H
 
 #include "XGUI.h"
+
+#include <SUIT_PreferenceMgr.h>
 #include <QDialog>
 
 class SUIT_ResourceMgr;
-class SUIT_PreferenceMgr;
 class QWidget;
 
+// Pair of values: section name, value name
+typedef QPair<QString, QString> XGUI_Pref;
+typedef QList<XGUI_Pref> XGUI_Prefs;
+
+
+//***********************************************************************
+/// Class for manipulation  with preferences in the application
 class XGUI_EXPORT XGUI_Preferences
 {
 public:
+  static const QString VIEWER_SECTION;
+  static const QString MENU_SECTION;
 
-  static void editPreferences();
+  static bool editPreferences(XGUI_Prefs& theModified);
 
   static SUIT_ResourceMgr* resourceMgr();
 
@@ -24,18 +34,50 @@ private:
   static SUIT_ResourceMgr* myResourceMgr;
 };
 
+//***********************************************************************
+/// Manager of preferences
+class XGUI_EXPORT XGUI_PreferencesMgr : public SUIT_PreferenceMgr
+{
+  Q_OBJECT
+public:
+  XGUI_PreferencesMgr(QtxResourceMgr* theResource, QWidget* theParent)
+    :SUIT_PreferenceMgr(theResource, theParent) {}
+
+  virtual ~XGUI_PreferencesMgr() {}
+
+  XGUI_Prefs modified() const { return myModified; }
+
+protected:
+  virtual void changedResources( const ResourceMap& theMap);
 
-class XGUI_PreferencesDlg: public QDialog
+private:
+  XGUI_Prefs myModified;
+};
+
+
+//***********************************************************************
+/// Dialog box for preferences editing
+class XGUI_EXPORT XGUI_PreferencesDlg: public QDialog
 {
   Q_OBJECT
 public:
   XGUI_PreferencesDlg(SUIT_ResourceMgr* theResurces, QWidget* theParent = 0);
   virtual ~XGUI_PreferencesDlg();
 
+  bool isChanged() const { return myIsChanged; }
+
+  void modified(XGUI_Prefs& theModified) const;
+
+public slots:
+  virtual void accept();
+
 private:
   void createEditors();
-
-  SUIT_PreferenceMgr* myPreferences;
+  void createViewerPage(int thePageId);
+  void createMenuPage(int thePageId);
+  
+  XGUI_PreferencesMgr* myPreferences;
+  bool myIsChanged;
 };
 
 
index 4f445729ba88db177162bd5052644fcd9c49cbd4..e605d2a07b9f2a1249a493c6df7580e807dedbd7 100644 (file)
@@ -198,6 +198,17 @@ QMdiSubWindow* XGUI_Viewer::createView(V3d_TypeOfView theType)
   return aWnd;
 }
 
+void XGUI_Viewer::updateFromResources()
+{
+  Qtx::BackgroundData aBk = XGUI_Preferences::resourceMgr()->backgroundValue("Viewer", "background");
+  foreach (QMdiSubWindow* aWnd, myViews) {
+    XGUI_ViewWindow* aView = dynamic_cast<XGUI_ViewWindow*>(aWnd->widget());
+    if (aView)
+      aView->setBackground(aBk);
+  }
+}
+
+
 XGUI_ViewWindow* XGUI_Viewer::activeViewWindow() const
 {
   if (myActiveView)
index 8c2f13c9c4f470fc30c55074cd12972bdfa094e2..218fd26d0ee6e29786db6b54ec09951afcf6784d 100644 (file)
@@ -128,6 +128,7 @@ public:
   //! Add action to the viewer
   void addAction(QAction* theAction) { myActions.append(theAction); }
 
+  void updateFromResources();
 
   static void setHotButton(XGUI::InteractionStyle theInteractionStyle, XGUI::HotOperation theOper,
                            Qt::KeyboardModifiers theState, Qt::MouseButtons theButton);
index b25db3e105acd9f4adc0fe80195719baa747fc1d..f6c41a9f4bb5892d76c5718817327e5eeae6bbb3 100644 (file)
@@ -668,7 +668,21 @@ void XGUI_Workshop::onRedo()
 //******************************************************
 void XGUI_Workshop::onPreferences()
 {
-  XGUI_Preferences::editPreferences();
+  XGUI_Prefs aModif;
+  XGUI_Preferences::editPreferences(aModif);
+  if (aModif.size() > 0) {
+    QString aSection;
+    foreach (XGUI_Pref aPref, aModif) {
+      aSection = aPref.first;
+      if (aSection == XGUI_Preferences::VIEWER_SECTION) {
+        if (!isSalomeMode()) 
+          myMainWindow->viewer()->updateFromResources();
+      } else if (aSection == XGUI_Preferences::MENU_SECTION) {
+        if (!isSalomeMode()) 
+          myMainWindow->menuObject()->updateFromResources();
+      }
+    }
+  }
 }
 
 //******************************************************