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);
88 void XGUI_PreferencesDlg::createViewerPage(int thePageId)
90 int viewTab = myPreferences->addItem( tr("Viewer"), thePageId );
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");
98 QList<QVariant> idList;
99 for (int i = 0; i < gradList.size(); i++)
102 int bgGroup = myPreferences->addItem( tr( "Background" ), viewTab );
104 QString aImgFiles("Image files (*.bmp *.gif *.pix *.xwd *.rgb *.rs)");
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 );
119 void XGUI_PreferencesDlg::createMenuPage(int thePageId)
121 int aMenuTab = myPreferences->addItem(tr("Main menu"), thePageId );
123 int aSizeGroup = myPreferences->addItem(tr("Size"), aMenuTab );
124 myPreferences->setItemProperty( "columns", 2, aSizeGroup );
126 int aItemSizeItem = myPreferences->addItem( tr( "Item size" ),
128 SUIT_PreferenceMgr::Selector,
129 XGUI_Preferences::MENU_SECTION,
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 );
138 int aRowsNb = myPreferences->addItem( tr( "Number of rows" ),
140 SUIT_PreferenceMgr::IntSpin,
141 XGUI_Preferences::MENU_SECTION,
143 myPreferences->setItemProperty( "min", 1, aRowsNb );
144 myPreferences->setItemProperty( "max", 10, aRowsNb );
147 void XGUI_PreferencesDlg::accept()
149 myPreferences->store();
154 void XGUI_PreferencesDlg::modified(XGUI_Prefs& theModified) const
156 theModified = myPreferences->modified();
161 //**********************************************************
162 //**********************************************************
163 //**********************************************************
164 void XGUI_PreferencesMgr::changedResources( const ResourceMap& theMap)
167 ResourceMap::ConstIterator it;
169 for (it = theMap.begin(); it != theMap.end(); ++it ) {
171 it.key()->resource( aPref.first, aPref.second );
172 myModified.append(aPref);