Save preferences to disk

git-svn-id: http://svn.clifford.at/openscad/trunk@352 b57f626f-c46c-0410-a088-ec61d464b74c
stl_dim
kintel 2010-01-25 20:52:43 +00:00
parent b0b3d030c0
commit b629bd3292
3 changed files with 85 additions and 19 deletions

View File

@ -22,6 +22,7 @@
#include <QFontDatabase>
#include <QKeyEvent>
#include <QSettings>
Preferences *Preferences::instance = NULL;
@ -29,6 +30,11 @@ Preferences::Preferences(QWidget *parent) : QMainWindow(parent)
{
setupUi(this);
// Setup default settings
this->defaultmap["3dview/colorscheme"] = this->colorSchemeChooser->currentItem()->text();
this->defaultmap["editor/fontfamily"] = this->fontChooser->currentText();
this->defaultmap["editor/fontsize"] = this->fontSize->currentText().toUInt();
// Toolbar
QActionGroup *group = new QActionGroup(this);
group->addAction(prefsAction3DView);
@ -40,7 +46,6 @@ Preferences::Preferences(QWidget *parent) : QMainWindow(parent)
this->actionTriggered(this->prefsAction3DView);
// 3D View pane
this->colorscheme = this->colorSchemeChooser->item(0)->text();
this->colorschemes["Cornfield"][BACKGROUND_COLOR] = QColor(0xff, 0xff, 0xe5);
this->colorschemes["Cornfield"][OPENCSG_FACE_FRONT_COLOR] = QColor(0xf9, 0xd7, 0x2c);
this->colorschemes["Cornfield"][OPENCSG_FACE_BACK_COLOR] = QColor(0x9d, 0xcb, 0x51);
@ -74,26 +79,25 @@ Preferences::Preferences(QWidget *parent) : QMainWindow(parent)
this->colorschemes["Sunset"][CGAL_EDGE_2D_COLOR] = QColor(0xff, 0x00, 0x00);
this->colorschemes["Sunset"][CROSSHAIR_COLOR] = QColor(0x80, 0x00, 0x00);
connect(this->colorSchemeChooser, SIGNAL(itemSelectionChanged()),
this, SLOT(colorSchemeChanged()));
// Editor pane
QFontDatabase db;
foreach(int size, db.standardSizes()) {
this->fontSize->addItem(QString::number(size));
}
this->fontSize->setCurrentIndex(this->fontSize->findText(QString::number(12)));
fontFamilyChanged(this->fontChooser->currentText());
fontSizeChanged(this->fontSize->currentText());
connect(this->colorSchemeChooser, SIGNAL(itemSelectionChanged()),
this, SLOT(colorSchemeChanged()));
connect(this->fontChooser, SIGNAL(activated(const QString &)),
this, SLOT(fontFamilyChanged(const QString &)));
connect(this->fontSize, SIGNAL(activated(const QString &)),
connect(this->fontSize, SIGNAL(editTextChanged(const QString &)),
this, SLOT(fontSizeChanged(const QString &)));
updateGUI();
}
Preferences::~Preferences()
{
removeDefaultSettings();
}
void
@ -112,25 +116,30 @@ Preferences::actionTriggered(QAction *action)
void Preferences::colorSchemeChanged()
{
this->colorscheme = this->colorSchemeChooser->currentItem()->text();
QSettings settings;
settings.setValue("3dview/colorscheme", this->colorSchemeChooser->currentItem()->text());
emit requestRedraw();
}
const QColor &Preferences::color(RenderColor idx)
{
return this->colorschemes[this->colorscheme][idx];
return this->colorschemes[getValue("3dview/colorscheme").toString()][idx];
}
void Preferences::fontFamilyChanged(const QString &family)
{
this->fontfamily = family;
emit fontChanged(this->fontfamily, this->fontsize);
QSettings settings;
settings.setValue("editor/fontfamily", family);
emit fontChanged(family, getValue("editor/fontsize").toUInt());
}
void Preferences::fontSizeChanged(const QString &size)
{
this->fontsize = size.toUInt();
emit fontChanged(this->fontfamily, this->fontsize);
uint intsize = size.toUInt();
QSettings settings;
settings.setValue("editor/fontsize", intsize);
emit fontChanged(getValue("editor/fontfamily").toString(), intsize);
}
void Preferences::keyPressEvent(QKeyEvent *e)
@ -145,3 +154,55 @@ void Preferences::keyPressEvent(QKeyEvent *e)
close();
}
}
/*!
Removes settings that are the same as the default settings to avoid
overwriting future changes to default settings.
*/
void Preferences::removeDefaultSettings()
{
QSettings settings;
for (QSettings::SettingsMap::const_iterator iter = this->defaultmap.begin();
iter != this->defaultmap.end();
iter++) {
if (settings.value(iter.key()) == iter.value()) {
settings.remove(iter.key());
}
}
}
QVariant Preferences::getValue(const QString &key) const
{
QSettings settings;
return settings.value(key, this->defaultmap[key]);
}
void Preferences::updateGUI()
{
QList<QListWidgetItem *> found =
this->colorSchemeChooser->findItems(getValue("3dview/colorscheme").toString(),
Qt::MatchExactly);
if (!found.isEmpty()) this->colorSchemeChooser->setCurrentItem(found.first());
QString fontfamily = getValue("editor/fontfamily").toString();
int fidx = this->fontChooser->findText(fontfamily);
if (fidx >= 0) {
this->fontChooser->setCurrentIndex(fidx);
}
QString fontsize = getValue("editor/fontsize").toString();
int sidx = this->fontSize->findText(fontsize);
if (sidx >= 0) {
this->fontSize->setCurrentIndex(sidx);
}
else {
this->fontSize->setEditText(fontsize);
}
}
void Preferences::apply() const
{
emit fontChanged(getValue("editor/fontfamily").toString(), getValue("editor/fontsize").toUInt());
emit requestRedraw();
}

View File

@ -2,6 +2,7 @@
#define PREFERENCES_H_
#include <QMainWindow>
#include <QSettings>
#include "ui_Preferences.h"
class Preferences : public QMainWindow, public Ui::Preferences
@ -25,6 +26,8 @@ public:
CROSSHAIR_COLOR
};
const QColor &color(RenderColor idx);
QVariant getValue(const QString &key) const;
void apply() const;
public slots:
void actionTriggered(class QAction *);
@ -33,17 +36,17 @@ public slots:
void fontSizeChanged(const QString &);
signals:
void requestRedraw();
void fontChanged(const QString &family, uint size);
void requestRedraw() const;
void fontChanged(const QString &family, uint size) const;
private:
Preferences(QWidget *parent = NULL);
void keyPressEvent(QKeyEvent *e);
void updateGUI();
void removeDefaultSettings();
QSettings::SettingsMap defaultmap;
QHash<QString, QMap<RenderColor, QColor> > colorschemes;
QString colorscheme;
QString fontfamily;
uint fontsize;
static Preferences *instance;
};

View File

@ -288,6 +288,8 @@ MainWindow::MainWindow(const char *filename)
connect(Preferences::inst(), SIGNAL(requestRedraw()), this->screen, SLOT(updateGL()));
connect(Preferences::inst(), SIGNAL(fontChanged(const QString&,uint)),
this, SLOT(setFont(const QString&,uint)));
Preferences::inst()->apply();
// display this window and check for OpenGL 2.0 (OpenCSG) support
viewModeThrownTogether();