OpenMW
apps/opencs/view/settings/usersettingsdialog.hpp
Go to the documentation of this file.
00001 #ifndef USERSETTINGSDIALOG_H
00002 #define USERSETTINGSDIALOG_H
00003 
00004 #include <QMainWindow>
00005 #include <QStackedWidget>
00006 #include <QListWidgetItem>
00007 #include <QApplication>
00008 
00009 #include "../../model/settings/usersettings.hpp"
00010 #include "../../model/settings/support.hpp"
00011 
00012 class QHBoxLayout;
00013 class AbstractWidget;
00014 class QStackedWidget;
00015 class QListWidget;
00016 
00017 namespace CSVSettings {
00018 
00019     class AbstractPage;
00020 
00021     class UserSettingsDialog : public QMainWindow
00022     {
00023         Q_OBJECT
00024 
00025         QListWidget *mListWidget;
00026         QStackedWidget *mStackedWidget;
00027 
00028     public:
00029         UserSettingsDialog(QMainWindow *parent = 0);
00030         ~UserSettingsDialog();
00031 
00032     private:
00033 
00035         void closeEvent (QCloseEvent *event);
00036 
00039         AbstractPage &getAbstractPage (int index);
00040         void setWidgetStates ();
00041         void buildPages();
00042         void writeSettings();
00043 
00045         template <typename T>
00046         void createPage ()
00047         {
00048             T *page = new T(mStackedWidget);
00049 
00050             mStackedWidget->addWidget (&dynamic_cast<QWidget &>(*page));
00051 
00052             new QListWidgetItem (page->objectName(), mListWidget);
00053 
00054             //finishing touches
00055             QFontMetrics fm (QApplication::font());
00056             int textWidth = fm.width(page->objectName());
00057 
00058             if ((textWidth + 50) > mListWidget->minimumWidth())
00059                 mListWidget->setMinimumWidth(textWidth + 50);
00060 
00061             resize (mStackedWidget->sizeHint());
00062         }
00063 
00064     public slots:
00065 
00067         void slotChangePage (QListWidgetItem*, QListWidgetItem*);
00068     };
00069 
00070 }
00071 #endif // USERSETTINGSDIALOG_H