1 // File: XGUI_Preferences.cpp
2 // Created: 07 Aug 2014
3 // Author: Vitaly SMETANNIKOV
5 #include "XGUI_Preferences.h"
6 #include "XGUI_Constants.h"
8 #include <SUIT_ResourceMgr.h>
9 #include <SUIT_PreferenceMgr.h>
12 #include <QApplication>
13 #include <QDialogButtonBox>
16 const QString XGUI_Preferences::VIEWER_SECTION = "Viewer";
17 const QString XGUI_Preferences::MENU_SECTION = "Menu";
20 SUIT_ResourceMgr* XGUI_Preferences::myResourceMgr = 0;
23 SUIT_ResourceMgr* XGUI_Preferences::resourceMgr()
26 myResourceMgr = new SUIT_ResourceMgr("NewGeom");
27 myResourceMgr->setCurrentFormat("xml");
32 bool XGUI_Preferences::editPreferences(XGUI_Prefs& theModified)
34 XGUI_PreferencesDlg aDlg(resourceMgr(), QApplication::activeWindow());
36 if (aDlg.isChanged()) {
37 aDlg.modified(theModified);
38 resourceMgr()->save();
46 //**********************************************************
47 //**********************************************************
48 //**********************************************************
49 XGUI_PreferencesDlg::XGUI_PreferencesDlg(SUIT_ResourceMgr* theResurces, QWidget* theParent)
50 : QDialog(theParent), myIsChanged(false)
52 setWindowTitle( tr("Edit preferences") );
54 QVBoxLayout* main = new QVBoxLayout(this);
56 main->setSpacing( 5 );
58 myPreferences = new XGUI_PreferencesMgr(theResurces, this);
59 main->addWidget( myPreferences );
61 setFocusProxy( myPreferences );
62 myPreferences->setFrameStyle( QFrame::Box | QFrame::Sunken );
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()));
71 myPreferences->retrieve();
72 setMinimumSize(800, 200);
75 XGUI_PreferencesDlg::~XGUI_PreferencesDlg()
79 void XGUI_PreferencesDlg::createEditors()
81 int aLFpage = myPreferences->addItem("Desktop");
82 //myPreferences->setItemIcon(aLFpage, QIcon(":pictures/view_prefs.png"));
84 createMenuPage(aLFpage);
85 createViewerPage(aLFpage);
87 std::list<std::string> aOwners = Config_PropManager::getOwners();
88 std::list<std::string>::const_iterator aIt;
89 for (aIt = aOwners.cbegin(); aIt != aOwners.cend(); ++ aIt) {
90 int aPage = myPreferences->addItem((*aIt).c_str());
91 createCustomPage(aPage, Config_PropManager::getProperties((*aIt)));
95 void XGUI_PreferencesDlg::createViewerPage(int thePageId)
97 int viewTab = myPreferences->addItem( tr("Viewer"), thePageId );
100 gradList << tr("Horizontal gradient") << tr("Vertical gradient") <<
101 tr("First diagonal gradient") << tr("Second diagonal gradient") <<
102 tr("First corner gradient") << tr("Second corner gradient") <<
103 tr("Third corner gradient") << tr("Fourth corner gradient");
105 QList<QVariant> idList;
106 for (int i = 0; i < gradList.size(); i++)
109 int bgGroup = myPreferences->addItem( tr( "Background" ), viewTab );
111 QString aImgFiles("Image files (*.bmp *.gif *.pix *.xwd *.rgb *.rs)");
113 int bgId = myPreferences->addItem( tr("Viewer 3d" ), bgGroup,
114 SUIT_PreferenceMgr::Background,
115 XGUI_Preferences::VIEWER_SECTION, "background" );
116 myPreferences->setItemProperty( "gradient_names", gradList, bgId );
117 myPreferences->setItemProperty( "gradient_ids", idList, bgId );
118 myPreferences->setItemProperty( "texture_enabled", true, bgId );
119 myPreferences->setItemProperty( "texture_center_enabled", true, bgId );
120 myPreferences->setItemProperty( "texture_tile_enabled", true, bgId );
121 myPreferences->setItemProperty( "texture_stretch_enabled", true, bgId );
122 myPreferences->setItemProperty( "custom_enabled", false, bgId );
123 myPreferences->setItemProperty( "image_formats", aImgFiles, bgId );
126 void XGUI_PreferencesDlg::createMenuPage(int thePageId)
128 int aMenuTab = myPreferences->addItem(tr("Main menu"), thePageId );
130 int aSizeGroup = myPreferences->addItem(tr("Size"), aMenuTab );
131 myPreferences->setItemProperty( "columns", 2, aSizeGroup );
133 int aItemSizeItem = myPreferences->addItem( tr( "Item size" ),
135 SUIT_PreferenceMgr::Selector,
136 XGUI_Preferences::MENU_SECTION,
138 QStringList aValuesList;
139 QList<QVariant> anIndicesList;
140 aValuesList << tr("Small") << tr("Medium") << tr("Large");
141 anIndicesList << 20 << 25 << 30;
142 myPreferences->setItemProperty( "strings", aValuesList, aItemSizeItem );
143 myPreferences->setItemProperty( "indexes", anIndicesList, aItemSizeItem );
145 int aRowsNb = myPreferences->addItem( tr( "Number of rows" ),
147 SUIT_PreferenceMgr::IntSpin,
148 XGUI_Preferences::MENU_SECTION,
150 myPreferences->setItemProperty( "min", 1, aRowsNb );
151 myPreferences->setItemProperty( "max", 10, aRowsNb );
155 void XGUI_PreferencesDlg::createCustomPage(int thePageId, Config_Properties& theProps)
157 SUIT_ResourceMgr* aResMgr = XGUI_Preferences::resourceMgr();
158 bool isResModified = false;
161 QMap<QString, Config_Properties> aGroupMap;
162 Config_Properties::const_iterator aIt;
163 for (aIt = theProps.cbegin(); aIt != theProps.cend(); ++aIt) {
164 QString aGroup((*aIt)->section().c_str());
165 if (aGroupMap.contains(aGroup)) {
166 aGroupMap[aGroup].push_back(*aIt);
168 Config_Properties aProps;
169 aProps.push_back(*aIt);
170 aGroupMap[aGroup] = aProps;
172 // check that the property is defined
173 QString aName((*aIt)->name().c_str());
174 if (!aResMgr->hasValue(aGroup, aName)) {
175 aResMgr->setValue(aGroup, aName, QString((*aIt)->value().c_str()));
176 isResModified = true;
182 // Make a Tab from each section
183 QMap<QString, Config_Properties>::iterator it;
184 for (it = aGroupMap.begin(); it != aGroupMap.end(); ++it) {
185 int aTab = myPreferences->addItem(it.key(), thePageId );
186 myPreferences->setItemProperty( "columns", 2, aTab );
187 Config_Properties& aProps = it.value();
188 for (aIt = aProps.cbegin(); aIt != aProps.cend(); ++aIt) {
189 myPreferences->addItem( QString((*aIt)->title().c_str()), aTab,
190 (SUIT_PreferenceMgr::PrefItemType)(*aIt)->type(),
191 QString((*aIt)->section().c_str()),
192 QString((*aIt)->name().c_str()) );
198 void XGUI_PreferencesDlg::accept()
200 myPreferences->store();
205 void XGUI_PreferencesDlg::modified(XGUI_Prefs& theModified) const
207 theModified = myPreferences->modified();
212 //**********************************************************
213 //**********************************************************
214 //**********************************************************
215 void XGUI_PreferencesMgr::changedResources( const ResourceMap& theMap)
218 ResourceMap::ConstIterator it;
220 for (it = theMap.begin(); it != theMap.end(); ++it ) {
222 it.key()->resource( aPref.first, aPref.second );
223 myModified.append(aPref);