]> SALOME platform Git repositories - modules/shaper.git/blob - src/XGUI/XGUI_Preferences.cpp
Salome HOME
Changes in linux environment: SALOME instalation folder became a "products" directory
[modules/shaper.git] / src / XGUI / XGUI_Preferences.cpp
1 // File:        XGUI_Preferences.cpp
2 // Created:     07 Aug 2014
3 // Author:      Vitaly SMETANNIKOV
4
5 #include "XGUI_Preferences.h"
6 #include "XGUI_Constants.h"
7
8 #include <SUIT_ResourceMgr.h>
9 #include <SUIT_PreferenceMgr.h>
10
11 #include <QLayout>
12 #include <QApplication>
13 #include <QDialogButtonBox>
14
15
16 const QString XGUI_Preferences::VIEWER_SECTION = "Viewer";
17 const QString XGUI_Preferences::MENU_SECTION = "Menu";
18
19
20 SUIT_ResourceMgr* XGUI_Preferences::myResourceMgr = 0;
21
22
23 SUIT_ResourceMgr* XGUI_Preferences::resourceMgr()
24 {
25   if (!myResourceMgr) {
26     myResourceMgr = new SUIT_ResourceMgr("NewGeom");
27     myResourceMgr->setCurrentFormat("xml");
28   }
29   return myResourceMgr;
30 }
31
32 bool XGUI_Preferences::editPreferences(XGUI_Prefs& theModified)
33 {
34   XGUI_PreferencesDlg aDlg(resourceMgr(), QApplication::activeWindow());
35   aDlg.exec();
36   if (aDlg.isChanged()) {
37     aDlg.modified(theModified);
38     resourceMgr()->save();
39     return true;
40   }
41   return false;
42 }
43
44
45
46 //**********************************************************
47 //**********************************************************
48 //**********************************************************
49 XGUI_PreferencesDlg::XGUI_PreferencesDlg(SUIT_ResourceMgr* theResurces, QWidget* theParent)
50   : QDialog(theParent), myIsChanged(false)
51 {
52   setWindowTitle( tr("Edit preferences") );
53
54   QVBoxLayout* main = new QVBoxLayout(this);
55   main->setMargin( 5 );
56   main->setSpacing( 5 );
57
58   myPreferences = new XGUI_PreferencesMgr(theResurces, this);
59   main->addWidget( myPreferences );
60
61   setFocusProxy( myPreferences );
62   myPreferences->setFrameStyle( QFrame::Box | QFrame::Sunken );
63
64   QDialogButtonBox* aBtnBox = new QDialogButtonBox(
65     QDialogButtonBox::Ok | QDialogButtonBox::Cancel, Qt::Horizontal, this);
66   main->addWidget(aBtnBox);
67   connect(aBtnBox, SIGNAL(accepted()), this, SLOT(accept()));
68   connect(aBtnBox, SIGNAL(rejected()), this, SLOT(reject()));  
69   createEditors();
70
71   myPreferences->retrieve();
72   setMinimumSize(800, 200);
73 }
74
75 XGUI_PreferencesDlg::~XGUI_PreferencesDlg()
76 {
77 }
78
79 void XGUI_PreferencesDlg::createEditors()
80 {
81   int aLFpage = myPreferences->addItem("Desktop");
82   myPreferences->setItemIcon(aLFpage, QIcon(":pictures/view_prefs.png"));
83
84   createMenuPage(aLFpage);
85   createViewerPage(aLFpage);
86 }
87
88 void XGUI_PreferencesDlg::createViewerPage(int thePageId)
89 {
90   int viewTab = myPreferences->addItem( tr("Viewer"), thePageId );
91
92   QStringList gradList;
93   gradList << tr("Horizontal gradient")     << tr("Vertical gradient")        <<
94               tr("First diagonal gradient") << tr("Second diagonal gradient") <<
95               tr("First corner gradient")   << tr("Second corner gradient")   <<
96               tr("Third corner gradient")   << tr("Fourth corner gradient");
97   
98   QList<QVariant> idList;
99   for (int i = 0; i < gradList.size(); i++)
100     idList << i;
101
102   int bgGroup = myPreferences->addItem( tr( "Background" ), viewTab );
103
104   QString aImgFiles("Image files (*.bmp *.gif *.pix *.xwd *.rgb *.rs)");
105
106   int bgId = myPreferences->addItem( tr("Viewer 3d" ), bgGroup,
107                                   SUIT_PreferenceMgr::Background, 
108                                   XGUI_Preferences::VIEWER_SECTION, "background" );
109   myPreferences->setItemProperty( "gradient_names", gradList, bgId );
110   myPreferences->setItemProperty( "gradient_ids", idList, bgId );
111   myPreferences->setItemProperty( "texture_enabled", true, bgId );
112   myPreferences->setItemProperty( "texture_center_enabled", true, bgId );
113   myPreferences->setItemProperty( "texture_tile_enabled", true, bgId );
114   myPreferences->setItemProperty( "texture_stretch_enabled", true, bgId );
115   myPreferences->setItemProperty( "custom_enabled", false, bgId );
116   myPreferences->setItemProperty( "image_formats", aImgFiles, bgId );
117 }
118
119 void XGUI_PreferencesDlg::createMenuPage(int thePageId)
120 {
121   int aMenuTab = myPreferences->addItem(tr("Main menu"), thePageId );
122
123   int aSizeGroup = myPreferences->addItem(tr("Size"), aMenuTab );
124   myPreferences->setItemProperty( "columns", 2, aSizeGroup );
125
126   int aItemSizeItem = myPreferences->addItem( tr( "Item size" ), 
127                                               aSizeGroup, 
128                                               SUIT_PreferenceMgr::Selector,
129                                               XGUI_Preferences::MENU_SECTION, 
130                                               "item_size" );
131   QStringList aValuesList;
132   QList<QVariant> anIndicesList;
133   aValuesList << tr("Small") << tr("Medium") << tr("Large");
134   anIndicesList << 20 << 25 << 30;
135   myPreferences->setItemProperty( "strings", aValuesList,   aItemSizeItem );
136   myPreferences->setItemProperty( "indexes", anIndicesList, aItemSizeItem );
137
138   int aRowsNb = myPreferences->addItem( tr( "Number of rows" ), 
139                                         aSizeGroup,
140                                         SUIT_PreferenceMgr::IntSpin, 
141                                         XGUI_Preferences::MENU_SECTION, 
142                                         "rows_number" );
143   myPreferences->setItemProperty( "min", 1, aRowsNb );
144   myPreferences->setItemProperty( "max", 10, aRowsNb );
145 }
146
147 void XGUI_PreferencesDlg::accept()
148 {
149   myPreferences->store();
150   myIsChanged = true;
151   QDialog::accept();
152 }
153
154 void XGUI_PreferencesDlg::modified(XGUI_Prefs& theModified) const
155 {
156   theModified = myPreferences->modified();
157 }
158
159
160
161 //**********************************************************
162 //**********************************************************
163 //**********************************************************
164 void XGUI_PreferencesMgr::changedResources( const ResourceMap& theMap)
165 {
166   myModified.clear();
167   ResourceMap::ConstIterator it;
168   QString sec, param;
169   for (it = theMap.begin(); it != theMap.end(); ++it ) {
170     XGUI_Pref aPref;
171     it.key()->resource( aPref.first, aPref.second );
172     myModified.append(aPref);
173   }
174 }