forked from teamnwah/openmw-tes3coop
Keep the settings page in sync with the real settings
This commit is contained in:
parent
64879c03e4
commit
dff3828710
8 changed files with 95 additions and 46 deletions
|
@ -10,6 +10,8 @@
|
||||||
#include "state.hpp"
|
#include "state.hpp"
|
||||||
#include "shortcutmanager.hpp"
|
#include "shortcutmanager.hpp"
|
||||||
|
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
namespace CSMPrefs
|
namespace CSMPrefs
|
||||||
{
|
{
|
||||||
const int ShortcutSetting::MaxKeys;
|
const int ShortcutSetting::MaxKeys;
|
||||||
|
|
|
@ -591,18 +591,16 @@ CSMPrefs::State& CSMPrefs::State::get()
|
||||||
|
|
||||||
void CSMPrefs::State::resetCategory(const std::string& category)
|
void CSMPrefs::State::resetCategory(const std::string& category)
|
||||||
{
|
{
|
||||||
|
for (Settings::CategorySettingValueMap::iterator i = mSettings.mUserSettings.begin();
|
||||||
|
i != mSettings.mUserSettings.end(); ++i)
|
||||||
{
|
{
|
||||||
QMutexLocker lock (&mMutex);
|
// if the category matches
|
||||||
for (Settings::CategorySettingValueMap::iterator i = mSettings.mUserSettings.begin(); i != mSettings.mUserSettings.end(); ++i)
|
if (i->first.first == category)
|
||||||
{
|
{
|
||||||
// if the category matches
|
// mark the setting as changed
|
||||||
if (i->first.first == category)
|
mSettings.mChangedSettings.insert(std::make_pair(i->first.first, i->first.second));
|
||||||
{
|
// reset the value to the default
|
||||||
// mark the setting as changed
|
i->second = mSettings.mDefaultSettings[i->first];
|
||||||
mSettings.mChangedSettings.insert(std::make_pair(i->first.first, i->first.second));
|
|
||||||
// reset the value to the default
|
|
||||||
i->second = mSettings.mDefaultSettings[i->first];
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -16,35 +16,12 @@ namespace CSVPrefs
|
||||||
{
|
{
|
||||||
KeyBindingPage::KeyBindingPage(CSMPrefs::Category& category, QWidget* parent)
|
KeyBindingPage::KeyBindingPage(CSMPrefs::Category& category, QWidget* parent)
|
||||||
: PageBase(category, parent)
|
: PageBase(category, parent)
|
||||||
|
, mTopWidget(0)
|
||||||
, mStackedLayout(0)
|
, mStackedLayout(0)
|
||||||
, mPageLayout(0)
|
, mPageLayout(0)
|
||||||
, mPageSelector(0)
|
, mPageSelector(0)
|
||||||
{
|
{
|
||||||
// Need one widget for scroll area
|
init();
|
||||||
QWidget* topWidget = new QWidget();
|
|
||||||
QVBoxLayout* topLayout = new QVBoxLayout(topWidget);
|
|
||||||
|
|
||||||
QWidget* resetAll = new QPushButton("Reset all to default", this);
|
|
||||||
connect(resetAll, SIGNAL(clicked()), this, SLOT(resetCategory()));
|
|
||||||
topLayout->addWidget(resetAll);
|
|
||||||
|
|
||||||
// Allows switching between "pages"
|
|
||||||
QWidget* stackedWidget = new QWidget();
|
|
||||||
mStackedLayout = new QStackedLayout(stackedWidget);
|
|
||||||
|
|
||||||
mPageSelector = new QComboBox();
|
|
||||||
connect(mPageSelector, SIGNAL(currentIndexChanged(int)), mStackedLayout, SLOT(setCurrentIndex(int)));
|
|
||||||
|
|
||||||
topLayout->addWidget(mPageSelector);
|
|
||||||
topLayout->addWidget(stackedWidget);
|
|
||||||
topLayout->setSizeConstraint(QLayout::SetMinAndMaxSize);
|
|
||||||
|
|
||||||
// Add each option
|
|
||||||
for (CSMPrefs::Category::Iterator iter = category.begin(); iter!=category.end(); ++iter)
|
|
||||||
addSetting (*iter);
|
|
||||||
|
|
||||||
setWidgetResizable(true);
|
|
||||||
setWidget(topWidget);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void KeyBindingPage::addSetting(CSMPrefs::Setting *setting)
|
void KeyBindingPage::addSetting(CSMPrefs::Setting *setting)
|
||||||
|
@ -91,4 +68,41 @@ namespace CSVPrefs
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void KeyBindingPage::refresh()
|
||||||
|
{
|
||||||
|
delete mTopWidget;
|
||||||
|
|
||||||
|
// reinitialize
|
||||||
|
init();
|
||||||
|
}
|
||||||
|
|
||||||
|
void KeyBindingPage::init()
|
||||||
|
{
|
||||||
|
// Need one widget for scroll area
|
||||||
|
mTopWidget = new QWidget();
|
||||||
|
QVBoxLayout* topLayout = new QVBoxLayout(mTopWidget);
|
||||||
|
|
||||||
|
QWidget* resetAll = new QPushButton("Reset all to default", this);
|
||||||
|
connect(resetAll, SIGNAL(clicked()), this, SLOT(resetCategory()));
|
||||||
|
topLayout->addWidget(resetAll);
|
||||||
|
|
||||||
|
// Allows switching between "pages"
|
||||||
|
QWidget* stackedWidget = new QWidget();
|
||||||
|
mStackedLayout = new QStackedLayout(stackedWidget);
|
||||||
|
|
||||||
|
mPageSelector = new QComboBox();
|
||||||
|
connect(mPageSelector, SIGNAL(currentIndexChanged(int)), mStackedLayout, SLOT(setCurrentIndex(int)));
|
||||||
|
|
||||||
|
topLayout->addWidget(mPageSelector);
|
||||||
|
topLayout->addWidget(stackedWidget);
|
||||||
|
topLayout->setSizeConstraint(QLayout::SetMinAndMaxSize);
|
||||||
|
|
||||||
|
// Add each option
|
||||||
|
for (CSMPrefs::Category::Iterator iter = getCategory().begin(); iter!=getCategory().end(); ++iter)
|
||||||
|
addSetting (*iter);
|
||||||
|
|
||||||
|
setWidgetResizable(true);
|
||||||
|
setWidget(mTopWidget);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
|
|
||||||
#include "pagebase.hpp"
|
#include "pagebase.hpp"
|
||||||
|
|
||||||
|
class QWidget;
|
||||||
class QComboBox;
|
class QComboBox;
|
||||||
class QGridLayout;
|
class QGridLayout;
|
||||||
class QStackedLayout;
|
class QStackedLayout;
|
||||||
|
@ -26,6 +27,11 @@ namespace CSVPrefs
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
void refresh();
|
||||||
|
|
||||||
|
void init();
|
||||||
|
|
||||||
|
QWidget* mTopWidget;
|
||||||
QStackedLayout* mStackedLayout;
|
QStackedLayout* mStackedLayout;
|
||||||
QGridLayout* mPageLayout;
|
QGridLayout* mPageLayout;
|
||||||
QComboBox* mPageSelector;
|
QComboBox* mPageSelector;
|
||||||
|
|
|
@ -10,18 +10,9 @@
|
||||||
|
|
||||||
CSVPrefs::Page::Page (CSMPrefs::Category& category, QWidget *parent)
|
CSVPrefs::Page::Page (CSMPrefs::Category& category, QWidget *parent)
|
||||||
: PageBase (category, parent)
|
: PageBase (category, parent)
|
||||||
|
, mParent (parent)
|
||||||
{
|
{
|
||||||
QWidget *widget = new QWidget (parent);
|
init();
|
||||||
mGrid = new QGridLayout (widget);
|
|
||||||
|
|
||||||
QWidget* resetAll = new QPushButton("Reset all to default", this);
|
|
||||||
connect (resetAll, SIGNAL (clicked()), this, SLOT (resetCategory()));
|
|
||||||
mGrid->addWidget(resetAll, 0, 0, 1, 2);
|
|
||||||
|
|
||||||
for (CSMPrefs::Category::Iterator iter = category.begin(); iter!=category.end(); ++iter)
|
|
||||||
addSetting (*iter);
|
|
||||||
|
|
||||||
setWidget (widget);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void CSVPrefs::Page::addSetting (CSMPrefs::Setting *setting)
|
void CSVPrefs::Page::addSetting (CSMPrefs::Setting *setting)
|
||||||
|
@ -44,3 +35,26 @@ void CSVPrefs::Page::addSetting (CSMPrefs::Setting *setting)
|
||||||
mGrid->addWidget (new QWidget (this), next, 0);
|
mGrid->addWidget (new QWidget (this), next, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CSVPrefs::Page::refresh()
|
||||||
|
{
|
||||||
|
delete mWidget;
|
||||||
|
|
||||||
|
// reinitialize
|
||||||
|
init();
|
||||||
|
}
|
||||||
|
|
||||||
|
void CSVPrefs::Page::init()
|
||||||
|
{
|
||||||
|
mWidget = new QWidget(mParent);
|
||||||
|
mGrid = new QGridLayout(mWidget);
|
||||||
|
|
||||||
|
QWidget* resetAll = new QPushButton("Reset all to default", this);
|
||||||
|
connect(resetAll, SIGNAL(clicked()), this, SLOT(resetCategory()));
|
||||||
|
mGrid->addWidget(resetAll, 0, 0, 1, 2);
|
||||||
|
|
||||||
|
for (CSMPrefs::Category::Iterator iter = getCategory().begin(); iter!=getCategory().end(); ++iter)
|
||||||
|
addSetting (*iter);
|
||||||
|
|
||||||
|
setWidget(mWidget);
|
||||||
|
}
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
#include "pagebase.hpp"
|
#include "pagebase.hpp"
|
||||||
|
|
||||||
class QGridLayout;
|
class QGridLayout;
|
||||||
|
class QWidget;
|
||||||
|
|
||||||
namespace CSMPrefs
|
namespace CSMPrefs
|
||||||
{
|
{
|
||||||
|
@ -17,12 +18,20 @@ namespace CSVPrefs
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
QGridLayout *mGrid;
|
QGridLayout *mGrid;
|
||||||
|
QWidget* mParent;
|
||||||
|
QWidget* mWidget;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
Page (CSMPrefs::Category& category, QWidget *parent);
|
Page (CSMPrefs::Category& category, QWidget *parent);
|
||||||
|
|
||||||
void addSetting (CSMPrefs::Setting *setting);
|
void addSetting (CSMPrefs::Setting *setting);
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
void refresh();
|
||||||
|
|
||||||
|
void init();
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -16,4 +16,5 @@ CSMPrefs::Category& CSVPrefs::PageBase::getCategory()
|
||||||
void CSVPrefs::PageBase::resetCategory()
|
void CSVPrefs::PageBase::resetCategory()
|
||||||
{
|
{
|
||||||
CSMPrefs::get().resetCategory(getCategory().getKey());
|
CSMPrefs::get().resetCategory(getCategory().getKey());
|
||||||
|
refresh();
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
#define CSV_PREFS_PAGEBASE_H
|
#define CSV_PREFS_PAGEBASE_H
|
||||||
|
|
||||||
#include <QScrollArea>
|
#include <QScrollArea>
|
||||||
|
#include <QLayout>
|
||||||
|
|
||||||
namespace CSMPrefs
|
namespace CSMPrefs
|
||||||
{
|
{
|
||||||
|
@ -25,6 +26,10 @@ namespace CSVPrefs
|
||||||
public slots:
|
public slots:
|
||||||
|
|
||||||
void resetCategory();
|
void resetCategory();
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
virtual void refresh() {};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue