1
0
mirror of https://gitlab.com/OpenMW/openmw.git synced 2025-01-25 15:35:23 +00:00

Integrated into the original settings design, except using tabs rather than list & stacked widgets. Works but visuals need updating.

This commit is contained in:
cc9cii 2014-09-21 20:55:52 +10:00
parent 5dfcd2ed01
commit dbd1ab05d3
13 changed files with 790 additions and 666 deletions

View File

@ -98,7 +98,6 @@ opencs_units_noqt (view/tools
)
opencs_units (view/settings
settingsdialog
settingwindow
dialog
page

View File

@ -26,7 +26,7 @@
#include "view/doc/filedialog.hpp"
#include "view/doc/newgame.hpp"
#include "view/settings/settingsdialog.hpp"
#include "view/settings/dialog.hpp"
namespace OgreInit
{
@ -46,7 +46,7 @@ namespace CS
CSVDoc::ViewManager mViewManager;
CSVDoc::StartupDialogue mStartup;
CSVDoc::NewGameDialogue mNewGame;
CSVSettings::SettingsDialog mSettings;
CSVSettings::Dialog mSettings;
CSVDoc::FileDialog mFileDialog;
boost::filesystem::path mLocal;
boost::filesystem::path mResources;

View File

@ -2,7 +2,7 @@
#include "support.hpp"
CSMSettings::Setting::Setting(SettingType typ, const QString &settingName,
const QString &pageName)
const QString &pageName, const QString &section)
: mIsEditorSetting (false)
{
buildDefaultSetting();
@ -17,6 +17,7 @@ CSMSettings::Setting::Setting(SettingType typ, const QString &settingName,
setProperty (Property_SettingType, QVariant (settingType).toString());
setProperty (Property_Page, pageName);
setProperty (Property_Name, settingName);
setProperty (Property_Section, section);
}
void CSMSettings::Setting::buildDefaultSetting()
@ -194,6 +195,16 @@ QString CSMSettings::Setting::page() const
return property (Property_Page).at(0);
}
void CSMSettings::Setting::setSection (const QString &value)
{
setProperty (Property_Section, value);
}
QString CSMSettings::Setting::section() const
{
return property (Property_Section).at(0);
}
void CSMSettings::Setting::setPrefix (const QString &value)
{
setProperty (Property_Prefix, value);

View File

@ -30,7 +30,7 @@ namespace CSMSettings
public:
explicit Setting(SettingType typ, const QString &settingName,
const QString &pageName);
const QString &pageName, const QString &section = QString());
void addProxy (const Setting *setting, const QStringList &vals);
void addProxy (const Setting *setting, const QList <QStringList> &list);
@ -80,6 +80,9 @@ namespace CSMSettings
void setPage (const QString &value);
QString page() const;
void setSection (const QString &value);
QString section() const;
void setPrefix (const QString &value);
QString prefix() const;

View File

@ -35,12 +35,13 @@ namespace CSMSettings
Property_TickInterval = 19,
Property_TicksAbove = 20,
Property_TicksBelow = 21,
Property_Section = 22,
//Stringlists should always be the last items
Property_DefaultValues = 22,
Property_DeclaredValues = 23,
Property_DefinedValues = 24,
Property_Proxies = 25
Property_DefaultValues = 23,
Property_DeclaredValues = 24,
Property_DefinedValues = 25,
Property_Proxies = 26
};
///Basic setting widget types.
@ -106,7 +107,7 @@ namespace CSMSettings
"is_multi_line", "widget_width", "view_row", "view_column", "delimiter",
"is_serializable","column_span", "row_span", "minimum", "maximum",
"special_value_text", "prefix", "suffix", "single_step", "wrapping",
"tick_interval", "ticks_above", "ticks_below",
"tick_interval", "ticks_above", "ticks_below", "section",
"defaults", "declarations", "definitions", "proxies"
};
@ -135,6 +136,7 @@ namespace CSMSettings
"1", //tick interval
"false", //ticks above
"true", //ticks below
"", //Section
"", //default values
"", //declared values
"", //defined values

View File

@ -32,9 +32,12 @@ namespace boost
} /* namespace boost */
#endif /* (BOOST_VERSION <= 104600) */
CSMSettings::UserSettings *CSMSettings::UserSettings::mUserSettingsInstance = 0;
namespace CSMSettings
{
CSMSettings::UserSettings::UserSettings (const Files::ConfigurationManager& configurationManager)
UserSettings *UserSettings::mUserSettingsInstance = 0;
UserSettings::UserSettings (const Files::ConfigurationManager& configurationManager)
: mCfgMgr (configurationManager)
, mSettingDefinitions(NULL)
, mSettingCfgDefinitions(NULL)
@ -48,9 +51,138 @@ CSMSettings::UserSettings::UserSettings (const Files::ConfigurationManager& conf
mSettingCfgDefinitions = new QSettings(QSettings::IniFormat, QSettings::UserScope, "", QString(), this);
}
void CSMSettings::UserSettings::buildSettingModelDefaults()
/*
* Original Design:
*
*
* QGridLayout QGroupBox
* ^ ^
* | |
* | 1 |
* SettingLayout......Frame
* ^ ^ QMainWindow
* | | ^ QObject
* / \ | ^
* / \ | |
* / \ 0..n | | 0..n
* View......Page........SettingWindow......UserSettings......Setting
* ^ 0..n ^
* | |
* | |
* ListView, |
* TextView, etc |
* |
* |
* QStackedWidget QListWidget.....Dialog
* ^ :
* | :
* | :
* ResizeableStackedWidget.....
*
*
* When a Page is created with a list of Views, the Views are added to the Frame.
*
* Editor ctor
* -> Dialog ctor
* -> SettingWindow ctor
* -> SettingWindow::setModel()
* -> Dialog::setupDialog()
* -> buildPageListWidget
* -> buildStackedWidget
*
* Editor::showSettings()
* -> Dialog::show()
* -> Dialog::buildPages() <-- [first time only]
* -> SettingWindow::createPages()
* -> Page ctor
* -> Page::setupViews()
* -> Page::addView()
* -> Frame::addWidget()
* -> SettingLayout::addWidget()
* -> [add page widgets to the stack]
*
*/
/*
* Modified Design:
*
* +----------------------------------------+
* |+---------+---------+---------+ |
* || | | | |
* || +----------------------------+|
* || ||
* || +--------------------------------+ ||
* || | | ||
* || | View View | ||
* || | View View | ||
* || | | ||
* || +---- Section -------------------+ ||
* || ||
* || +--------------------------------+ ||
* || | | ||
* || | +-------------+ | ||
* || | | View/Frame | | ||
* || | +-------------+ | ||
* || | | ||
* || +---- Section -------------------+ ||
* || ||
* || ||
* |+-------------- Page ------------------+|
* +---------- SettingWindow ---------------+
*
*
*
* QGridLayout QGroupBox
* ^ ^
* | |
* | 1 |
* SettingLayout......Frame
* ^ ^ QTabWidget
* | | ^ QObject
* / \ | ^
* / \ | |
* / \ 0..n | | 0..n
* View......Page........SettingWindow......UserSettings......Setting
* ^ 0..n ^
* | |
* | Ui::TabWidget |
* ListView, ^ |
* TextView, etc | |
* \ |
* \ |
* \ |
* Dialog
*
*
*
*
*
* View/Page is still used to uniquely identify a setting (i.e. Section is for
* visual presentation only). This means all views on a page should be unique
* (as before)
*
*
* Editor ctor
* -> Dialog ctor
* -> SettingWindow ctor
* -> SettingWindow::setModel()
* -> Dialog::setupDialog() <-- [no longer required]
*
* Editor::showSettings()
* -> Dialog::show()
* -> Dialog::buildPages() <-- [first time only]
* -> SettingWindow::createPages()
* -> Page ctor
* -> Page::setupViews()
* -> Page::addView()
* -> Frame::addWidget()
* -> SettingLayout::addWidget()
* -> [add pages to tabs then call showWidgets()]
*/
void UserSettings::buildSettingModelDefaults()
{
QString section = "Window Size";
QString section;
section = "Window Size";
{
Setting *width = createSetting (Type_LineEdit, section, "Width");
Setting *height = createSetting (Type_LineEdit, section, "Height");
@ -283,12 +415,12 @@ void CSMSettings::UserSettings::buildSettingModelDefaults()
}
}
CSMSettings::UserSettings::~UserSettings()
UserSettings::~UserSettings()
{
mUserSettingsInstance = 0;
}
void CSMSettings::UserSettings::loadSettings (const QString &fileName)
void UserSettings::loadSettings (const QString &fileName)
{
QString userFilePath = QString::fromUtf8
(mCfgMgr.getUserConfigPath().string().c_str());
@ -369,7 +501,7 @@ void CSMSettings::UserSettings::loadSettings (const QString &fileName)
mSettingDefinitions->setValue("Video/use settings.cfg", "true");
}
QStringList CSMSettings::UserSettings::getOgreRenderers()
QStringList UserSettings::getOgreRenderers()
{
if(mOgreRenderers.empty())
{
@ -382,7 +514,7 @@ QStringList CSMSettings::UserSettings::getOgreRenderers()
return mOgreRenderers;
}
QStringList CSMSettings::UserSettings::getOgreOptions(const QString &key, const QString &renderer)
QStringList UserSettings::getOgreOptions(const QString &key, const QString &renderer)
{
QStringList result;
@ -421,7 +553,7 @@ QStringList CSMSettings::UserSettings::getOgreOptions(const QString &key, const
return result;
}
QStringList CSMSettings::UserSettings::getShaderLanguageByRenderer(const QString &renderer)
QStringList UserSettings::getShaderLanguageByRenderer(const QString &renderer)
{
QStringList result;
@ -435,24 +567,22 @@ QStringList CSMSettings::UserSettings::getShaderLanguageByRenderer(const QString
return result;
}
bool CSMSettings::UserSettings::hasSettingDefinitions
(const QString &viewKey) const
bool UserSettings::hasSettingDefinitions (const QString &viewKey) const
{
return (mSettingDefinitions->contains (viewKey));
}
void CSMSettings::UserSettings::setDefinitions
(const QString &key, const QStringList &list)
void UserSettings::setDefinitions (const QString &key, const QStringList &list)
{
mSettingDefinitions->setValue (key, list);
}
void CSMSettings::UserSettings::saveDefinitions() const
void UserSettings::saveDefinitions() const
{
mSettingDefinitions->sync();
}
QString CSMSettings::UserSettings::settingValue (const QString &settingKey)
QString UserSettings::settingValue (const QString &settingKey)
{
QStringList defs;
@ -480,22 +610,20 @@ QString CSMSettings::UserSettings::settingValue (const QString &settingKey)
return defs.at(0);
}
CSMSettings::UserSettings& CSMSettings::UserSettings::instance()
UserSettings& UserSettings::instance()
{
assert(mUserSettingsInstance);
return *mUserSettingsInstance;
}
void CSMSettings::UserSettings::updateUserSetting(const QString &settingKey,
const QStringList &list)
void UserSettings::updateUserSetting(const QString &settingKey, const QStringList &list)
{
mSettingDefinitions->setValue (settingKey ,list);
emit userSettingUpdated (settingKey, list);
}
CSMSettings::Setting *CSMSettings::UserSettings::findSetting
(const QString &pageName, const QString &settingName)
Setting *UserSettings::findSetting (const QString &pageName, const QString &settingName)
{
foreach (Setting *setting, mSettings)
{
@ -508,8 +636,7 @@ CSMSettings::Setting *CSMSettings::UserSettings::findSetting
return 0;
}
void CSMSettings::UserSettings::removeSetting
(const QString &pageName, const QString &settingName)
void UserSettings::removeSetting (const QString &pageName, const QString &settingName)
{
if (mSettings.isEmpty())
return;
@ -530,7 +657,7 @@ void CSMSettings::UserSettings::removeSetting
}
}
CSMSettings::SettingPageMap CSMSettings::UserSettings::settingPageMap() const
SettingPageMap UserSettings::settingPageMap() const
{
SettingPageMap pageMap;
@ -540,8 +667,8 @@ CSMSettings::SettingPageMap CSMSettings::UserSettings::settingPageMap() const
return pageMap;
}
CSMSettings::Setting *CSMSettings::UserSettings::createSetting
(CSMSettings::SettingType typ, const QString &page, const QString &name)
Setting *UserSettings::createSetting
(SettingType typ, const QString &page, const QString &name)
{
//get list of all settings for the current setting name
if (findSetting (page, name))
@ -560,10 +687,12 @@ CSMSettings::Setting *CSMSettings::UserSettings::createSetting
return setting;
}
QStringList CSMSettings::UserSettings::definitions (const QString &viewKey) const
QStringList UserSettings::definitions (const QString &viewKey) const
{
if (mSettingDefinitions->contains (viewKey))
return mSettingDefinitions->value (viewKey).toStringList();
return QStringList();
}
}

View File

@ -1,39 +1,233 @@
#include "dialog.hpp"
#include <QListWidgetItem>
//#include <QListWidgetItem>
#include <QApplication>
#include <QDesktopWidget>
#include <QWidget>
#include <QStackedWidget>
#include <QtGui>
//#include <QStackedWidget>
//#include <QtGui>
#include "../../model/settings/usersettings.hpp"
#include "page.hpp"
#include <QApplication>
//#include <QApplication>
#include <QSplitter>
//#include <QSplitter>
#include <QTreeView>
#include <QListView>
#include <QTableView>
//#include <QTreeView>
//#include <QListView>
//#include <QTableView>
#include <QStandardItemModel>
#include <QStandardItem>
CSVSettings::Dialog::Dialog(QMainWindow *parent)
: mStackedWidget (0), mDebugMode (false), SettingWindow (parent)
#include <OgreRoot.h>
#include <boost/math/common_factor.hpp>
namespace {
QRect getMaximumResolution()
{
setWindowTitle(QString::fromUtf8 ("User Settings"));
QRect max;
int screens = QApplication::desktop()->screenCount();
for(int i = 0; i < screens; ++i)
{
QRect res = QApplication::desktop()->screenGeometry(i);
if(res.width() > max.width())
max.setWidth(res.width());
if(res.height() > max.height())
max.setHeight(res.height());
}
return max;
}
QString getAspect(int x, int y)
{
int gcd = boost::math::gcd (x, y);
int xaspect = x / gcd;
int yaspect = y / gcd;
// special case: 8 : 5 is usually referred to as 16:10
if (xaspect == 8 && yaspect == 5)
return QString("16:10");
return QString(QString::number(xaspect) + ":" + QString::number(yaspect));
}
QString getCurrentOgreResolution()
{
Ogre::ConfigOptionMap& renderOpt =
Ogre::Root::getSingleton().getRenderSystem()->getConfigOptions();
Ogre::ConfigOptionMap::iterator it = renderOpt.begin();
for(; it != renderOpt.end(); ++it)
{
if(it->first == "Video Mode" )
{
QRegExp re("^(\\d+ x \\d+)");
if (re.indexIn(it->second.currentValue.c_str(), 0) > -1)
return re.cap(1);
}
}
return QString(); // found nothing
}
bool customCompare(const QString &s1, const QString &s2)
{
int x1, x2, y1, y2;
QRegExp re("^(\\d+) x (\\d+)");
if(re.indexIn(s1) > -1)
{
x1 = re.cap(1).toInt();
y1 = re.cap(2).toInt();
}
if(re.indexIn(s2) > -1)
{
x2 = re.cap(1).toInt();
y2 = re.cap(2).toInt();
}
if(x1 == x2)
return y1 > y2;
else
return x1 > x2;
}
QStringList getAvailableResolutions()
{
// store available rendering devices and available resolutions
QStringList result;
Ogre::ConfigOptionMap& renderOpt = Ogre::Root::getSingleton().getRenderSystem()->getConfigOptions();
Ogre::ConfigOptionMap::iterator it = renderOpt.begin();
for(;it != renderOpt.end(); ++it)
{
if(it->first == "Rendering Device" )
{
if(it->second.possibleValues.empty())
{
return result; // FIXME: add error message
}
// Store Available Rendering Devices
Ogre::StringVector::iterator iter = it->second.possibleValues.begin();
for(;iter != it->second.possibleValues.end(); ++iter)
{
std::cout << "rd: " << *iter << std::endl; // FIXME: debug
}
}
if(it->first == "Video Mode" )
{
if(it->second.possibleValues.empty())
{
return result; // FIXME: add error message
}
// FIXME: how to default to the current value?
std::cout << "vm current: " << it->second.currentValue << std::endl; // FIXME: debug
// Store Available Resolutions
Ogre::StringVector::iterator iter = it->second.possibleValues.begin();
for(; iter != it->second.possibleValues.end(); ++iter)
{
// extract x and y values
QRegExp re("^(\\d+) x (\\d+)");
if(re.indexIn((*iter).c_str(), 0) > -1)
{
QString aspect = getAspect(re.cap(1).toInt(), re.cap(2).toInt());
QString resolution = re.cap(1) + QString(" x ") + re.cap(2);
if (aspect == QLatin1String("16:9") || aspect == QLatin1String("16:10")) {
resolution.append(QObject::tr("\t(Wide ") + aspect + ")");
} else if (aspect == QLatin1String("4:3")) {
resolution.append(QObject::tr("\t(Standard 4:3)"));
}
result.append(resolution);
}
}
}
}
result.removeDuplicates();
qStableSort(result.begin(), result.end(), customCompare);
return result;
}
}
CSVSettings::Dialog::Dialog(QTabWidget *parent)
: /*mStackedWidget (0),*/ mDebugMode (false), SettingWindow (parent)
{
setObjectName(QString::fromUtf8 ("User Settings"));
setupUi(this);
// Set the maximum res we can set in windowed mode
QRect res = getMaximumResolution();
sbWidth->setMaximum(res.width());
sbHeight->setMaximum(res.height());
connect(cbOverride, SIGNAL(toggled(bool)), this, SLOT(slotOverrideToggled(bool)));
connect(cmbRenderSys, SIGNAL(currentIndexChanged(const QString&)), this, SLOT(slotRendererChanged(const QString&)));
// to update the checkbox on the view menu
connect(cbStatusBar, SIGNAL(toggled(bool)), this, SIGNAL (toggleStatusBar(bool)));
setupDialog();
#if 0
// FIXME: delete - don't need this for tabs
connect (mPageListWidget,
SIGNAL (currentItemChanged(QListWidgetItem*, QListWidgetItem*)),
this,
SLOT (slotChangePage (QListWidgetItem*, QListWidgetItem*)));
#endif
}
void CSVSettings::Dialog::slotRendererChanged(const QString &renderer)
{
cmbAntiAlias->clear();
cmbAntiAlias->addItems(model()->getOgreOptions(QString("FSAA"), renderer));
cmbShaderLang->clear();
cmbShaderLang->addItems(model()->getShaderLanguageByRenderer(renderer));
if(model()->settingValue("Video/use settings.cfg") == "true")
{
labRenderSys->setEnabled(false);
cmbRenderSys->setEnabled(false);
labAntiAlias->setEnabled(false);
cmbAntiAlias->setEnabled(false);
//cbVsync->setEnabled(false);
labShaderLang->setEnabled(false);
cmbShaderLang->setEnabled(false);
}
else
cbOverride->setChecked(false);
}
void CSVSettings::Dialog::slotOverrideToggled(bool checked)
{
if(checked)
{
labRenderSys->setEnabled(false);
cmbRenderSys->setEnabled(false);
labAntiAlias->setEnabled(false);
cmbAntiAlias->setEnabled(false);
//cbVsync->setEnabled(false);
labShaderLang->setEnabled(false);
cmbShaderLang->setEnabled(false);
}
else
{
labRenderSys->setEnabled(true);
cmbRenderSys->setEnabled(true);
labAntiAlias->setEnabled(true);
cmbAntiAlias->setEnabled(true);
//cbVsync->setEnabled(true);
labShaderLang->setEnabled(true);
cmbShaderLang->setEnabled(true);
}
}
#if 0
// FIXME: delete - not required for tabs
void CSVSettings::Dialog::slotChangePage
(QListWidgetItem *cur, QListWidgetItem *prev)
{
@ -43,9 +237,11 @@ void CSVSettings::Dialog::slotChangePage
layout()->activate();
setFixedSize(minimumSizeHint());
}
#endif
void CSVSettings::Dialog::setupDialog()
{
#if 0
//create central widget with it's layout and immediate children
QWidget *centralWidget = new QGroupBox (this);
@ -56,29 +252,112 @@ void CSVSettings::Dialog::setupDialog()
buildPageListWidget (centralWidget);
buildStackedWidget (centralWidget);
#endif
}
void CSVSettings::Dialog::buildPages()
{
int index = -1;
// initialised in the constructor
slotOverrideToggled(cbOverride->isChecked());
// Ogre renderer
cmbRenderSys->clear();
cmbRenderSys->addItems(model()->getOgreRenderers());
//slotRendererChanged(Ogre::Root::getSingleton().getRenderSystem()->getName().c_str());
// antialiasing
QString antialiasing = model()->settingValue("Video/antialiasing");
index = cmbAntiAlias->findData(antialiasing, Qt::DisplayRole);
if(index != -1)
cmbAntiAlias->setCurrentIndex(index);
// vsync
//cbVsync->setChecked(model()->settingValue("Video/vsync") == "true");
cbVsync->setChecked(false); // disable vsync option for now
cbVsync->setEnabled(false); // disable vsync option for now
// shader lang
QString shaderlang = model()->settingValue("General/shader mode");
index = cmbShaderLang->findData(shaderlang, Qt::DisplayRole);
if(index != -1)
cmbShaderLang->setCurrentIndex(index);
if(model()->settingValue("Window Size/Width") != "")
sbWidth->setValue(model()->settingValue("Window Size/Width").toInt());
if(model()->settingValue("Window Size/Height") != "")
sbHeight->setValue(model()->settingValue("Window Size/Height").toInt());
// update display resolution combo box
cmbStdWinSize->clear();
cmbStdWinSize->addItems(getAvailableResolutions());
QString currRes = model()->settingValue("Window Size/Width") + " x " +
model()->settingValue("Window Size/Height");
index = cmbStdWinSize->findData(currRes, Qt::DisplayRole, Qt::MatchStartsWith);
if(index != -1)
{
// show the values in ini file
cmbStdWinSize->setCurrentIndex(index);
//slotStandardToggled(true);
}
else
{
// show what's in Ogre instead
index = cmbStdWinSize->findData(getCurrentOgreResolution(),
Qt::DisplayRole, Qt::MatchStartsWith);
if(index != -1)
cmbStdWinSize->setCurrentIndex(index);
//rbCustWinSize->setChecked(true);
//slotStandardToggled(false);
}
// status bar
cbStatusBar->setChecked(model()->settingValue("Display/show statusbar") == "true");
// display format
QString recStat = model()->settingValue("Display Format/Record Status Display");
index = cmbRecStatus->findData(recStat, Qt::DisplayRole);
if(index != -1)
cmbRecStatus->setCurrentIndex(index);
QString refIdType = model()->settingValue("Display Format/Referenceable ID Type Display");
index = cmbRefIdType->findData(refIdType, Qt::DisplayRole);
if(index != -1)
cmbRefIdType->setCurrentIndex(index);
SettingWindow::createPages ();
QFontMetrics fm (QApplication::font());
//QFontMetrics fm (QApplication::font());
foreach (Page *page, SettingWindow::pages())
{
QString pageName = page->objectName();
int textWidth = fm.width(pageName);
//int textWidth = fm.width(pageName);
new QListWidgetItem (pageName, mPageListWidget);
mPageListWidget->setFixedWidth (textWidth + 50);
// each page is added as a tab to Ui::TabWiget
addTab(page, page->objectName());
mStackedWidget->addWidget (&dynamic_cast<QWidget &>(*(page)));
// add section and views to the page
buildTabPage(page);
page->showWidgets();
//new QListWidgetItem (pageName, mPageListWidget);
//mPageListWidget->setFixedWidth (textWidth + 50);
//mStackedWidget->addWidget (&dynamic_cast<QWidget &>(*(page)));
}
resize (mStackedWidget->sizeHint());
//resize (mStackedWidget->sizeHint());
}
#if 0
// FIXME: delete - not required, using tabs instead
void CSVSettings::Dialog::buildPageListWidget (QWidget *centralWidget)
{
mPageListWidget = new QListWidget (centralWidget);
@ -96,6 +375,7 @@ void CSVSettings::Dialog::buildStackedWidget (QWidget *centralWidget)
centralWidget->layout()->addWidget (mStackedWidget);
}
#endif
void CSVSettings::Dialog::closeEvent (QCloseEvent *event)
{
@ -103,6 +383,67 @@ void CSVSettings::Dialog::closeEvent (QCloseEvent *event)
//model is updated
SettingWindow::closeEvent (event);
// override
if(cbOverride->isChecked())
model()->setDefinitions("Video/use settings.cfg", QStringList("true"));
else
model()->setDefinitions("Video/use settings.cfg", QStringList("false"));
// render system
model()->setDefinitions("Video/render system",
QStringList(cmbRenderSys->currentText()));
// vsync
if(cbVsync->isChecked())
model()->setDefinitions("Video/vsync", QStringList("true"));
else
model()->setDefinitions("Video/vsync", QStringList("false"));
// antialiasing
model()->setDefinitions("Video/antialiasing",
QStringList(cmbAntiAlias->currentText()));
#if 0
QRegExp reAA("^\\D*(\\d+)\\D*");
if(reAA.indexIn(cmbAntiAlias->currentText()) > -1)
model()->setDefinitions("Video/antialiasing", QStringList(reAA.cap(1)));
#endif
// shader lang
model()->setDefinitions("General/shader mode",
QStringList(cmbShaderLang->currentText().toLower()));
// window size
if(0) //rbStdWinSize->isChecked())
{
QRegExp re("^(\\d+) x (\\d+)");
if(re.indexIn(cmbStdWinSize->currentText()) > -1)
{
model()->setDefinitions("Window Size/Width", QStringList(re.cap(1)));
model()->setDefinitions("Window Size/Height", QStringList(re.cap(2)));
}
//}
//else
//{
model()->setDefinitions("Window Size/Width",
QStringList(QString::number(sbWidth->value())));
model()->setDefinitions("Window Size/Height",
QStringList(QString::number(sbHeight->value())));
}
// status bar
if(cbStatusBar->isChecked())
model()->setDefinitions("Display/show statusbar", QStringList("true"));
else
model()->setDefinitions("Display/show statusbar", QStringList("false"));
// display format
model()->setDefinitions("Display Format/Record Status Display",
QStringList(cmbRecStatus->currentText()));
model()->setDefinitions("Display Format/Referenceable ID Type Display",
QStringList(cmbRefIdType->currentText()));
std::cout << "closeEvent" << std::endl;
saveSettings();
}

View File

@ -2,28 +2,30 @@
#define CSVSETTINGS_DIALOG_H
#include "settingwindow.hpp"
#include "resizeablestackedwidget.hpp"
//#include "resizeablestackedwidget.hpp"
#include <QStandardItem>
class QStackedWidget;
class QListWidget;
class QListWidgetItem;
//class QStackedWidget;
//class QListWidget;
//class QListWidgetItem;
#include "ui_settingstab.h"
namespace CSVSettings {
class Page;
class Dialog : public SettingWindow
class Dialog : public SettingWindow, private Ui::TabWidget
{
Q_OBJECT
QListWidget *mPageListWidget;
ResizeableStackedWidget *mStackedWidget;
//QListWidget *mPageListWidget;
//ResizeableStackedWidget *mStackedWidget;
bool mDebugMode;
public:
explicit Dialog (QMainWindow *parent = 0);
explicit Dialog (QTabWidget *parent = 0);
///Enables setting debug mode. When the dialog opens, a page is created
///which displays the SettingModel's contents in a Tree view.
@ -39,8 +41,8 @@ namespace CSVSettings {
private:
void buildPages();
void buildPageListWidget (QWidget *centralWidget);
void buildStackedWidget (QWidget *centralWidget);
//void buildPageListWidget (QWidget *centralWidget);
//void buildStackedWidget (QWidget *centralWidget);
public slots:
@ -48,7 +50,13 @@ namespace CSVSettings {
private slots:
void slotChangePage (QListWidgetItem *, QListWidgetItem *);
//void slotChangePage (QListWidgetItem *, QListWidgetItem *); // FIXME: delete
void slotOverrideToggled(bool checked);
void slotRendererChanged(const QString &renderer);
signals:
void toggleStatusBar(bool checked); // FIXME: maybe not needed
};
}
#endif // CSVSETTINGS_DIALOG_H

View File

@ -1,486 +0,0 @@
#include "settingsdialog.hpp"
#include <boost/math/common_factor.hpp>
#include <OgreRoot.h>
#include <QDesktopWidget>
#include "../../model/settings/usersettings.hpp"
namespace
{
// copied from the launcher & adapted
QString getAspect(int x, int y)
{
int gcd = boost::math::gcd (x, y);
int xaspect = x / gcd;
int yaspect = y / gcd;
// special case: 8 : 5 is usually referred to as 16:10
if (xaspect == 8 && yaspect == 5)
return QString("16:10");
return QString(QString::number(xaspect) + ":" + QString::number(yaspect));
}
QRect getMaximumResolution()
{
QRect max;
int screens = QApplication::desktop()->screenCount();
for(int i = 0; i < screens; ++i)
{
QRect res = QApplication::desktop()->screenGeometry(i);
if(res.width() > max.width())
max.setWidth(res.width());
if(res.height() > max.height())
max.setHeight(res.height());
}
return max;
}
QString getCurrentOgreResolution()
{
Ogre::ConfigOptionMap& renderOpt =
Ogre::Root::getSingleton().getRenderSystem()->getConfigOptions();
Ogre::ConfigOptionMap::iterator it = renderOpt.begin();
for(; it != renderOpt.end(); ++it)
{
if(it->first == "Video Mode" )
{
QRegExp re("^(\\d+ x \\d+)");
if (re.indexIn(it->second.currentValue.c_str(), 0) > -1)
return re.cap(1);
}
}
return QString(); // found nothing
}
bool customCompare(const QString &s1, const QString &s2)
{
int x1, x2, y1, y2;
QRegExp re("^(\\d+) x (\\d+)");
if(re.indexIn(s1) > -1)
{
x1 = re.cap(1).toInt();
y1 = re.cap(2).toInt();
}
if(re.indexIn(s2) > -1)
{
x2 = re.cap(1).toInt();
y2 = re.cap(2).toInt();
}
if(x1 == x2)
return y1 > y2;
else
return x1 > x2;
}
QStringList getAvailableResolutions()
{
// store available rendering devices and available resolutions
QStringList result;
Ogre::ConfigOptionMap& renderOpt = Ogre::Root::getSingleton().getRenderSystem()->getConfigOptions();
Ogre::ConfigOptionMap::iterator it = renderOpt.begin();
for(;it != renderOpt.end(); ++it)
{
if(it->first == "Rendering Device" )
{
if(it->second.possibleValues.empty())
{
return result; // FIXME: add error message
}
// Store Available Rendering Devices
Ogre::StringVector::iterator iter = it->second.possibleValues.begin();
for(;iter != it->second.possibleValues.end(); ++iter)
{
std::cout << "rd: " << *iter << std::endl; // FIXME: debug
}
}
if(it->first == "Video Mode" )
{
if(it->second.possibleValues.empty())
{
return result; // FIXME: add error message
}
// FIXME: how to default to the current value?
std::cout << "vm current: " << it->second.currentValue << std::endl; // FIXME: debug
// Store Available Resolutions
Ogre::StringVector::iterator iter = it->second.possibleValues.begin();
for(; iter != it->second.possibleValues.end(); ++iter)
{
// extract x and y values
QRegExp re("^(\\d+) x (\\d+)");
if(re.indexIn((*iter).c_str(), 0) > -1)
{
QString aspect = getAspect(re.cap(1).toInt(), re.cap(2).toInt());
QString resolution = re.cap(1) + QString(" x ") + re.cap(2);
if (aspect == QLatin1String("16:9") || aspect == QLatin1String("16:10")) {
resolution.append(QObject::tr("\t(Wide ") + aspect + ")");
} else if (aspect == QLatin1String("4:3")) {
resolution.append(QObject::tr("\t(Standard 4:3)"));
}
result.append(resolution);
}
}
}
}
result.removeDuplicates();
qStableSort(result.begin(), result.end(), customCompare);
return result;
}
}
CSVSettings::SettingsDialog::SettingsDialog(QTabWidget *parent)
: QTabWidget (parent)
{
setObjectName("User Settings");
setupUi(this);
// Set the maximum res we can set in windowed mode
QRect res = getMaximumResolution();
sbWidth->setMaximum(res.width());
sbHeight->setMaximum(res.height());
// to enable mouse events on disabled widgets
cmbStdWinSize->installEventFilter(this);
sbWidth->installEventFilter(this);
sbHeight->installEventFilter(this);
connect(cbOverride, SIGNAL(toggled(bool)), this, SLOT(slotOverrideToggled(bool)));
connect(cmbRenderSys, SIGNAL(currentIndexChanged(const QString&)), this, SLOT(slotRendererChanged(const QString&)));
//connect(rbStdWinSize, SIGNAL(toggled(bool)), this, SLOT(slotStandardToggled(bool)));
// to update the checkbox on the view menu
connect(cbStatusBar, SIGNAL(toggled(bool)), this, SIGNAL (toggleStatusBar(bool)));
}
bool CSVSettings::SettingsDialog::eventFilter(QObject *target, QEvent *event)
{
QWidget *item = qobject_cast<QWidget *>(target);
if (target == cmbStdWinSize)
{
if (!item->isEnabled() && (event->type() == QEvent::MouseButtonRelease))
{
//rbCustWinSize->setChecked(false);
//rbStdWinSize->setChecked(true);
//slotStandardToggled(true);
return false;
}
}
else if (target == sbWidth || target == sbHeight)
{
if (!item->isEnabled() && (event->type() == QEvent::MouseButtonPress))
{
//rbStdWinSize->setChecked(false);
//rbCustWinSize->setChecked(true);
//slotStandardToggled(false);
return false;
}
}
return QTabWidget::eventFilter(target, event);
}
void CSVSettings::SettingsDialog::slotRendererChanged(const QString &renderer)
{
cmbAntiAlias->clear();
cmbAntiAlias->addItems(mModel->getOgreOptions(QString("FSAA"), renderer));
cmbShaderLang->clear();
cmbShaderLang->addItems(mModel->getShaderLanguageByRenderer(renderer));
if(mModel->settingValue("Video/use settings.cfg") == "true")
{
labRenderSys->setEnabled(false);
cmbRenderSys->setEnabled(false);
labAntiAlias->setEnabled(false);
cmbAntiAlias->setEnabled(false);
//cbVsync->setEnabled(false);
labShaderLang->setEnabled(false);
cmbShaderLang->setEnabled(false);
}
else
cbOverride->setChecked(false);
}
void CSVSettings::SettingsDialog::slotOverrideToggled(bool checked)
{
if(checked)
{
labRenderSys->setEnabled(false);
cmbRenderSys->setEnabled(false);
labAntiAlias->setEnabled(false);
cmbAntiAlias->setEnabled(false);
//cbVsync->setEnabled(false);
labShaderLang->setEnabled(false);
cmbShaderLang->setEnabled(false);
}
else
{
labRenderSys->setEnabled(true);
cmbRenderSys->setEnabled(true);
labAntiAlias->setEnabled(true);
cmbAntiAlias->setEnabled(true);
//cbVsync->setEnabled(true);
labShaderLang->setEnabled(true);
cmbShaderLang->setEnabled(true);
}
}
void CSVSettings::SettingsDialog::slotStandardToggled(bool checked)
{
if (checked)
{
cmbStdWinSize->setEnabled(true);
sbWidth->setEnabled(false);
sbHeight->setEnabled(false);
}
else
{
cmbStdWinSize->setEnabled(false);
sbWidth->setEnabled(true);
sbHeight->setEnabled(true);
}
}
void CSVSettings::SettingsDialog::setViewValues()
{
int index = -1;
// initialised in the constructor
slotOverrideToggled(cbOverride->isChecked());
// Ogre renderer
cmbRenderSys->clear();
cmbRenderSys->addItems(mModel->getOgreRenderers());
//slotRendererChanged(Ogre::Root::getSingleton().getRenderSystem()->getName().c_str());
// antialiasing
QString antialiasing = mModel->settingValue("Video/antialiasing");
index = cmbAntiAlias->findData(antialiasing, Qt::DisplayRole);
if(index != -1)
cmbAntiAlias->setCurrentIndex(index);
// vsync
//cbVsync->setChecked(mModel->settingValue("Video/vsync") == "true");
cbVsync->setChecked(false); // disable vsync option for now
cbVsync->setEnabled(false); // disable vsync option for now
// shader lang
QString shaderlang = mModel->settingValue("General/shader mode");
index = cmbShaderLang->findData(shaderlang, Qt::DisplayRole);
if(index != -1)
cmbShaderLang->setCurrentIndex(index);
if(mModel->settingValue("Window Size/Width") != "")
sbWidth->setValue(mModel->settingValue("Window Size/Width").toInt());
if(mModel->settingValue("Window Size/Height") != "")
sbHeight->setValue(mModel->settingValue("Window Size/Height").toInt());
// update display resolution combo box
cmbStdWinSize->clear();
cmbStdWinSize->addItems(getAvailableResolutions());
QString currRes = mModel->settingValue("Window Size/Width") + " x " +
mModel->settingValue("Window Size/Height");
index = cmbStdWinSize->findData(currRes, Qt::DisplayRole, Qt::MatchStartsWith);
if(index != -1)
{
// show the values in ini file
cmbStdWinSize->setCurrentIndex(index);
slotStandardToggled(true);
}
else
{
// show what's in Ogre instead
index = cmbStdWinSize->findData(getCurrentOgreResolution(),
Qt::DisplayRole, Qt::MatchStartsWith);
if(index != -1)
cmbStdWinSize->setCurrentIndex(index);
//rbCustWinSize->setChecked(true);
slotStandardToggled(false);
}
// status bar
cbStatusBar->setChecked(mModel->settingValue("Display/show statusbar") == "true");
// display format
QString recStat = mModel->settingValue("Display Format/Record Status Display");
index = cmbRecStatus->findData(recStat, Qt::DisplayRole);
if(index != -1)
cmbRecStatus->setCurrentIndex(index);
QString refIdType = mModel->settingValue("Display Format/Referenceable ID Type Display");
index = cmbRefIdType->findData(refIdType, Qt::DisplayRole);
if(index != -1)
cmbRefIdType->setCurrentIndex(index);
}
void CSVSettings::SettingsDialog::saveSettings()
{
#if 0
//setting the definition in the model automatically syncs with the file
foreach (const Page *page, mPages)
{
foreach (const View *view, page->views())
{
if (!view->serializable())
continue;
mModel->setDefinitions (view->viewKey(), view->selectedValues());
}
}
#endif
std::cout << "closeEvent" << std::endl;
// override
if(cbOverride->isChecked())
mModel->setDefinitions("Video/use settings.cfg", QStringList("true"));
else
mModel->setDefinitions("Video/use settings.cfg", QStringList("false"));
// render system
mModel->setDefinitions("Video/render system",
QStringList(cmbRenderSys->currentText()));
// vsync
if(cbVsync->isChecked())
mModel->setDefinitions("Video/vsync", QStringList("true"));
else
mModel->setDefinitions("Video/vsync", QStringList("false"));
// antialiasing
mModel->setDefinitions("Video/antialiasing",
QStringList(cmbAntiAlias->currentText()));
#if 0
QRegExp reAA("^\\D*(\\d+)\\D*");
if(reAA.indexIn(cmbAntiAlias->currentText()) > -1)
mModel->setDefinitions("Video/antialiasing", QStringList(reAA.cap(1)));
#endif
// shader lang
mModel->setDefinitions("General/shader mode",
QStringList(cmbShaderLang->currentText().toLower()));
// window size
if(0) //rbStdWinSize->isChecked())
{
QRegExp re("^(\\d+) x (\\d+)");
if(re.indexIn(cmbStdWinSize->currentText()) > -1)
{
mModel->setDefinitions("Window Size/Width", QStringList(re.cap(1)));
mModel->setDefinitions("Window Size/Height", QStringList(re.cap(2)));
}
}
else
{
mModel->setDefinitions("Window Size/Width",
QStringList(QString::number(sbWidth->value())));
mModel->setDefinitions("Window Size/Height",
QStringList(QString::number(sbHeight->value())));
}
// status bar
if(cbStatusBar->isChecked())
mModel->setDefinitions("Display/show statusbar", QStringList("true"));
else
mModel->setDefinitions("Display/show statusbar", QStringList("false"));
// display format
mModel->setDefinitions("Display Format/Record Status Display",
QStringList(cmbRecStatus->currentText()));
mModel->setDefinitions("Display Format/Referenceable ID Type Display",
QStringList(cmbRefIdType->currentText()));
mModel->saveDefinitions();
}
void CSVSettings::SettingsDialog::createConnections
(const QList <CSMSettings::Setting *> &list)
{
#if 0
foreach (const CSMSettings::Setting *setting, list)
{
View *masterView = findView (setting->page(), setting->name());
CSMSettings::Connector *connector =
new CSMSettings::Connector (masterView, this);
connect (masterView,
SIGNAL (viewUpdated(const QString &, const QStringList &)),
connector,
SLOT (slotUpdateSlaves())
);
const CSMSettings::ProxyValueMap &proxyMap = setting->proxyLists();
foreach (const QString &key, proxyMap.keys())
{
QStringList keyPair = key.split('/');
if (keyPair.size() != 2)
continue;
View *slaveView = findView (keyPair.at(0), keyPair.at(1));
if (!slaveView)
{
qWarning () << "Unable to create connection for view "
<< key;
continue;
}
QList <QStringList> proxyList = proxyMap.value (key);
connector->addSlaveView (slaveView, proxyList);
connect (slaveView,
SIGNAL (viewUpdated(const QString &, const QStringList &)),
connector,
SLOT (slotUpdateMaster()));
}
}
#endif
}
void CSVSettings::SettingsDialog::closeEvent (QCloseEvent *event)
{
//SettingWindow::closeEvent() must be called first to ensure
//model is updated
//SettingWindow::closeEvent (event);
QApplication::focusWidget()->clearFocus();
saveSettings();
}
void CSVSettings::SettingsDialog::show()
{
setViewValues();
// place the widget and make it visible
QWidget *currView = QApplication::activeWindow();
if(currView)
{
// place at the center of the window with focus
QSize size = currView->size();
move(currView->geometry().x()+(size.width() - frameGeometry().width())/2,
currView->geometry().y()+(size.height() - frameGeometry().height())/2);
}
else
{
// something's gone wrong, place at the center of the screen
QPoint screenCenter = QApplication::desktop()->screenGeometry().center();
move(screenCenter - QPoint(frameGeometry().width()/2,
frameGeometry().height()/2));
}
QWidget::show();
}

View File

@ -1,64 +0,0 @@
#ifndef CSVSETTINGS_SETTINGSDIALOG_H
#define CSVSETTINGS_SETTINGSDIALOG_H
#include <QStandardItem>
#include "ui_settingstab.h"
class QListWidgetItem;
namespace CSMSettings
{
class Setting;
class UserSettings;
}
namespace CSVSettings {
class SettingsDialog : public QTabWidget, private Ui::TabWidget
{
Q_OBJECT
CSMSettings::UserSettings *mModel;
public:
SettingsDialog (QTabWidget *parent = 0);
///set the model the view uses (instance of UserSettings)
void setModel (CSMSettings::UserSettings &model) { mModel = &model; }
protected:
///save settings from the GUI to file
void saveSettings();
/// Settings are written on close
void closeEvent (QCloseEvent *event);
bool eventFilter(QObject *target, QEvent *event);
private:
///sets the defined values for the views that have been created
void setViewValues();
///create connections between settings (used for proxy settings)
void createConnections (const QList <CSMSettings::Setting *> &list);
public slots:
void show();
//void slotStandardClicked();
//void slotCustomClicked();
void slotRendererChanged(const QString &renderer);
void slotOverrideToggled(bool checked);
void slotStandardToggled(bool checked);
signals:
void toggleStatusBar(bool checked);
};
}
#endif // CSVSETTINGS_SETTINGSDIALOG_H

View File

@ -1,15 +1,19 @@
#include "settingwindow.hpp"
#include <QApplication>
//#include <QDesktopWidget>
//#include <QLineEdit>
//#include <QRadioButton>
#include <QDebug>
#include "../../model/settings/setting.hpp"
#include "../../model/settings/connector.hpp"
#include "../../model/settings/usersettings.hpp"
#include "settingwindow.hpp"
#include "page.hpp"
#include "view.hpp"
CSVSettings::SettingWindow::SettingWindow(QWidget *parent)
: QMainWindow(parent)
CSVSettings::SettingWindow::SettingWindow(QTabWidget *parent)
: QTabWidget(parent)
{}
void CSVSettings::SettingWindow::createPages()
@ -19,7 +23,7 @@ void CSVSettings::SettingWindow::createPages()
QList <CSMSettings::Setting *> connectedSettings;
foreach (const QString &pageName, pageMap.keys())
{
{
QList <CSMSettings::Setting *> pageSettings = pageMap.value (pageName);
mPages.append (new Page (pageName, pageSettings, this));
@ -37,6 +41,162 @@ void CSVSettings::SettingWindow::createPages()
createConnections(connectedSettings);
}
void CSVSettings::SettingWindow::buildTabPage(Page* tab)
{
CSMSettings::SettingPageMap pageMap = mModel->settingPageMap();
QList <CSMSettings::Setting *> pageSettings = pageMap.value (tab->objectName());
//tab->setupViews(pageSettings);
#if 0
QFontMetrics fm (QApplication::font());
//int textWidth = fm.width(pageName); // FIXME:
QString pageName = tab->objectName();
std::cout << "pageName: " + pageName.toStdString() << std::endl; // FIXME:
QList<CSMSettings::Setting*> settingList = mModel->settingPageMap.value(pageName);
//foreach (View *view, page->views())
//{
//std::cout << "view key: " + view->viewKey().toStdString() << std::endl;
//if(!settingList.empty())
//{
QGroupBox *section = new QGroupBox(tab);
section->setGeometry(5, 5, this->width()-15, this->height()-15); // FIXME: frame thickness calculation
// FIXME: assume a single grid for now
QGridLayout *gridLayout = new QGridLayout(section);
gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
gridLayout->setContentsMargins(5, 5, 5, 5);
foreach(CSMSettings::Setting * setting, settingList)
{
// enum ViewType {ViewType_Boolean = 0,
// ViewType_List = 1,
// ViewType_Range = 2,
// ViewType_Text = 3,
// ViewType_Undefined = 4 };
// enum SettingType {* 0 - 9 - Boolean widgets
// * 10-19 - List widgets
// * 21-29 - Range widgets
// * 31-39 - Text widgets
// *
// * Each range corresponds to a View_Type enum by a factor of 10.
// *
// * Even-numbered values are single-value widgets
// * Odd-numbered values are multi-valued widgets
//
// Type_CheckBox = 0,
// Type_RadioButton = 1,
// Type_ListView = 10,
// Type_ComboBox = 11,
// Type_SpinBox = 21,
// Type_DoubleSpinBox = 23,
// Type_Slider = 25,
// Type_Dial = 27,
// Type_TextArea = 30,
// Type_LineEdit = 31,
// Type_Undefined = 40 };
//
std::cout << "view type: " + std::to_string(setting->viewType()) << std::endl;
std::cout << "setting type: " + std::to_string(setting->type()) << std::endl;
switch(setting->viewType())
{
case ViewType_Boolean:
break;
case ViewType_List:
break;
case ViewType_Range:
break;
case ViewType_Text:
break;
default:
std::cerr << "ViewType_Undefined" << std::endl;
}
QLabel *lab = 0;
if(!gridLayout->itemAtPosition(setting->viewRow(), 0))
{
lab = new QLabel(section);
lab->setText(setting->name());
int textWidth = fm.width(setting->name()); // FIXME:
lab->setMinimumWidth(std::max(textWidth, this->width()/3));
}
else
{
lab = dynamic_cast<QLabel*> (gridLayout->itemAtPosition(setting->viewRow(), 0)->widget());
QString oldLabel = lab->text();
lab->setText(oldLabel + ", " + setting->name());
}
switch(setting->type())
{
case CSMSettings::SettingType::Type_RadioButton:
{
int rowNum = gridLayout->rowCount();
if(!gridLayout->itemAtPosition(setting->viewRow(), 0))
if(lab) gridLayout->addWidget(lab, rowNum, 0);
//lab->setStyleSheet("background-color:yellow;"); // FIXME:
int colNum = 1;
if(setting->declaredValues().size() > 1) // button group FIXME: try isMultiValue()
{
QButtonGroup * buttonGroup = new QButtonGroup(section);
//buttonGroup->setStyleSheet("background-color:red;"); // FIXME:
//gridLayout->addWidget(buttonGroup, rowNum, 1);
foreach(QString string, setting->declaredValues())
{
QRadioButton *rb = new QRadioButton(string, section);
//rb->setStyleSheet("background-color:blue;"); // FIXME:
gridLayout->addWidget(rb, rowNum, colNum++);
buttonGroup->addButton(rb);
}
}
else // single radio button
{
std::cout << "default values size: " + std::to_string(setting->declaredValues().size()) << std::endl;
QRadioButton *rb = new QRadioButton(section);
if(rb) rb->setText(setting->declaredValues().at(0));
gridLayout->addWidget(rb, gridLayout->rowCount(), 1);
}
break;
}
case CSMSettings::SettingType::Type_LineEdit:
{
if(!gridLayout->itemAtPosition(setting->viewRow(), 0))
if(lab) gridLayout->addWidget(lab, setting->viewRow(), 0);
QLineEdit *item = new QLineEdit(section);
//QLabel *lab = new QLabel(section);
//lab->setText(setting->name()); // FIXME: how to put lables in proper place if many items in the same row
gridLayout->addWidget(item, setting->viewRow(), setting->viewColumn()+1,
setting->rowSpan(), setting->columnSpan());
item->setText(setting->defaultValues().at(0)); //FIXME: check if empty first?
break;
}
case CSMSettings::SettingType::Type_ComboBox:
{
QComboBox *item = new QComboBox(section);
//QLabel *lab = new QLabel(section);
if(!gridLayout->itemAtPosition(setting->viewRow(), 0))
if(lab) gridLayout->addWidget(lab, setting->viewRow(), 0);
//lab->setText(setting->name());
gridLayout->addWidget(item, setting->viewRow(), setting->viewColumn()+1,
setting->rowSpan(), setting->columnSpan());
item->clear();
item->addItems(setting->declaredValues()); //FIXME: check if empty first?
break;
}
default:
break;
}
}
section->resize(section->width(), gridLayout->rowCount() * (fm.lineSpacing() + 10)); // 10 is extra line space
//tab->adjustSize();
//}
//QWidget *item = new QWidget(tab);
//item->setObjectName(QString::fromUtf8("cmbAntiAlias"));
//}
//new QListWidgetItem (pageName, mPageListWidget);
//mPageListWidget->setFixedWidth (textWidth + 50);
//mStackedWidget->addWidget (&dynamic_cast<QWidget &>(*(page)));
#endif
}
void CSVSettings::SettingWindow::createConnections
(const QList <CSMSettings::Setting *> &list)
{

View File

@ -1,7 +1,7 @@
#ifndef CSVSETTINGS_SETTINGWINDOW_HPP
#define CSVSETTINGS_SETTINGWINDOW_HPP
#include <QMainWindow>
#include <QTabWidget>
#include <QList>
#include "../../model/settings/support.hpp"
@ -18,7 +18,7 @@ namespace CSVSettings {
typedef QList <Page *> PageList;
class SettingWindow : public QMainWindow
class SettingWindow : public QTabWidget
{
Q_OBJECT
@ -26,7 +26,7 @@ namespace CSVSettings {
CSMSettings::UserSettings *mModel;
public:
explicit SettingWindow(QWidget *parent = 0);
explicit SettingWindow(QTabWidget *parent = 0);
///retrieve a reference to a view based on it's page and setting name
View *findView (const QString &pageName, const QString &setting);
@ -50,6 +50,9 @@ namespace CSVSettings {
///sets the defined values for the views that have been created
void setViewValues();
void buildTabPage(Page* tab);
CSMSettings::UserSettings *model() { return mModel; }
private:
///create connections between settings (used for proxy settings)

View File

@ -145,7 +145,7 @@
<property name="title">
<string>Display Format</string>
</property>
<widget class="QWidget" name="layoutWidget">
<widget class="QWidget" name="layoutWidget_DisplayFormat">
<property name="geometry">
<rect>
<x>10</x>
@ -223,7 +223,7 @@
<string>Subviews</string>
</property>
</widget>
<widget class="QWidget" name="layoutWidget2">
<widget class="QWidget" name="layoutWidget_Subviews">
<property name="geometry">
<rect>
<x>21</x>
@ -291,37 +291,73 @@
<property name="title">
<string>Window Size</string>
</property>
<widget class="QWidget" name="layoutWidget">
<widget class="QStackedWidget" name="stackedWidget">
<property name="enabled">
<bool>true</bool>
</property>
<property name="geometry">
<rect>
<x>10</x>
<y>20</y>
<width>171</width>
<height>22</height>
<height>21</height>
</rect>
</property>
<layout class="QGridLayout" name="gridLayout_4">
<item row="0" column="0">
<widget class="QSpinBox" name="sbWidth">
<property name="maximumSize">
<size>
<width>186</width>
<height>16777215</height>
</size>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QSpinBox" name="sbHeight">
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
</layout>
<property name="currentIndex">
<number>0</number>
</property>
<widget class="QWidget" name="page">
<property name="enabled">
<bool>true</bool>
</property>
<widget class="QWidget" name="displayGroup_WindowSize">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>171</width>
<height>22</height>
</rect>
</property>
<layout class="QGridLayout" name="gridLayout_4">
<item row="0" column="0">
<widget class="QSpinBox" name="sbWidth">
<property name="maximumSize">
<size>
<width>186</width>
<height>16777215</height>
</size>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QSpinBox" name="sbHeight">
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
</layout>
</widget>
</widget>
<widget class="QWidget" name="page_2">
<widget class="QComboBox" name="cmbStdWinSize">
<property name="enabled">
<bool>false</bool>
</property>
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>171</width>
<height>22</height>
</rect>
</property>
</widget>
</widget>
</widget>
</widget>
<widget class="QCheckBox" name="cbStatusBar">
@ -340,27 +376,9 @@
<zorder>displayGroup_Window</zorder>
<zorder>displayGroup_DisplayFormat</zorder>
<zorder>displayGroup_Subviews</zorder>
<zorder>layoutWidget2</zorder>
<zorder>displayGroup_WindowSize</zorder>
<zorder>cbStatusBar</zorder>
</widget>
<widget class="QWidget" name="MiscSettings">
<attribute name="title">
<string>Misc Settings</string>
</attribute>
<widget class="QComboBox" name="cmbStdWinSize">
<property name="enabled">
<bool>false</bool>
</property>
<property name="geometry">
<rect>
<x>70</x>
<y>100</y>
<width>69</width>
<height>22</height>
</rect>
</property>
</widget>
</widget>
</widget>
<resources/>
<connections/>