summaryrefslogtreecommitdiff
path: root/src/Preferences.cc
diff options
context:
space:
mode:
authorkintel <kintel@b57f626f-c46c-0410-a088-ec61d464b74c>2010-01-30 04:17:05 (GMT)
committerkintel <kintel@b57f626f-c46c-0410-a088-ec61d464b74c>2010-01-30 04:17:05 (GMT)
commit6940d171812565209efe679a5d923417c3f47d4a (patch)
tree2a05d2f8865ff1127f854db41bf31143f64ccf2d /src/Preferences.cc
parent2b19f33ee1ddce246c2bfe0a05fe379d0117a741 (diff)
reorganized file structure layout. more to follow...
git-svn-id: http://svn.clifford.at/openscad/trunk@364 b57f626f-c46c-0410-a088-ec61d464b74c
Diffstat (limited to 'src/Preferences.cc')
-rw-r--r--src/Preferences.cc208
1 files changed, 208 insertions, 0 deletions
diff --git a/src/Preferences.cc b/src/Preferences.cc
new file mode 100644
index 0000000..cfc2bdb
--- /dev/null
+++ b/src/Preferences.cc
@@ -0,0 +1,208 @@
+/*
+ * OpenSCAD (www.openscad.at)
+ * Copyright (C) 2009 Clifford Wolf <clifford@clifford.at>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ */
+
+#include "Preferences.h"
+
+#include <QFontDatabase>
+#include <QKeyEvent>
+#include <QSettings>
+
+Preferences *Preferences::instance = NULL;
+
+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);
+ group->addAction(prefsActionEditor);
+ group->addAction(prefsActionAdvanced);
+ connect(group, SIGNAL(triggered(QAction*)), this, SLOT(actionTriggered(QAction*)));
+
+ prefsAction3DView->setChecked(true);
+ this->actionTriggered(this->prefsAction3DView);
+
+ // 3D View pane
+ 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);
+ this->colorschemes["Cornfield"][CGAL_FACE_FRONT_COLOR] = QColor(0xf9, 0xd7, 0x2c);
+ this->colorschemes["Cornfield"][CGAL_FACE_BACK_COLOR] = QColor(0x9d, 0xcb, 0x51);
+ this->colorschemes["Cornfield"][CGAL_FACE_2D_COLOR] = QColor(0x00, 0xbf, 0x99);
+ this->colorschemes["Cornfield"][CGAL_EDGE_FRONT_COLOR] = QColor(0xff, 0x00, 0x00);
+ this->colorschemes["Cornfield"][CGAL_EDGE_BACK_COLOR] = QColor(0xff, 0x00, 0x00);
+ this->colorschemes["Cornfield"][CGAL_EDGE_2D_COLOR] = QColor(0xff, 0x00, 0x00);
+ this->colorschemes["Cornfield"][CROSSHAIR_COLOR] = QColor(0x80, 0x00, 0x00);
+
+ this->colorschemes["Metallic"][BACKGROUND_COLOR] = QColor(0xaa, 0xaa, 0xff);
+ this->colorschemes["Metallic"][OPENCSG_FACE_FRONT_COLOR] = QColor(0xdd, 0xdd, 0xff);
+ this->colorschemes["Metallic"][OPENCSG_FACE_BACK_COLOR] = QColor(0xdd, 0x22, 0xdd);
+ this->colorschemes["Metallic"][CGAL_FACE_FRONT_COLOR] = QColor(0xdd, 0xdd, 0xff);
+ this->colorschemes["Metallic"][CGAL_FACE_BACK_COLOR] = QColor(0xdd, 0x22, 0xdd);
+ this->colorschemes["Metallic"][CGAL_FACE_2D_COLOR] = QColor(0x00, 0xbf, 0x99);
+ this->colorschemes["Metallic"][CGAL_EDGE_FRONT_COLOR] = QColor(0xff, 0x00, 0x00);
+ this->colorschemes["Metallic"][CGAL_EDGE_BACK_COLOR] = QColor(0xff, 0x00, 0x00);
+ this->colorschemes["Metallic"][CGAL_EDGE_2D_COLOR] = QColor(0xff, 0x00, 0x00);
+ this->colorschemes["Metallic"][CROSSHAIR_COLOR] = QColor(0x80, 0x00, 0x00);
+
+ this->colorschemes["Sunset"][BACKGROUND_COLOR] = QColor(0xaa, 0x44, 0x44);
+ this->colorschemes["Sunset"][OPENCSG_FACE_FRONT_COLOR] = QColor(0xff, 0xaa, 0xaa);
+ this->colorschemes["Sunset"][OPENCSG_FACE_BACK_COLOR] = QColor(0x88, 0x22, 0x33);
+ this->colorschemes["Sunset"][CGAL_FACE_FRONT_COLOR] = QColor(0xff, 0xaa, 0xaa);
+ this->colorschemes["Sunset"][CGAL_FACE_BACK_COLOR] = QColor(0x88, 0x22, 0x33);
+ this->colorschemes["Sunset"][CGAL_FACE_2D_COLOR] = QColor(0x00, 0xbf, 0x99);
+ this->colorschemes["Sunset"][CGAL_EDGE_FRONT_COLOR] = QColor(0xff, 0x00, 0x00);
+ this->colorschemes["Sunset"][CGAL_EDGE_BACK_COLOR] = QColor(0xff, 0x00, 0x00);
+ this->colorschemes["Sunset"][CGAL_EDGE_2D_COLOR] = QColor(0xff, 0x00, 0x00);
+ this->colorschemes["Sunset"][CROSSHAIR_COLOR] = QColor(0x80, 0x00, 0x00);
+
+ // Editor pane
+ QFontDatabase db;
+ foreach(int size, db.standardSizes()) {
+ this->fontSize->addItem(QString::number(size));
+ }
+
+ connect(this->colorSchemeChooser, SIGNAL(itemSelectionChanged()),
+ this, SLOT(colorSchemeChanged()));
+ connect(this->fontChooser, SIGNAL(activated(const QString &)),
+ this, SLOT(fontFamilyChanged(const QString &)));
+ connect(this->fontSize, SIGNAL(editTextChanged(const QString &)),
+ this, SLOT(fontSizeChanged(const QString &)));
+
+ updateGUI();
+}
+
+Preferences::~Preferences()
+{
+ removeDefaultSettings();
+}
+
+void
+Preferences::actionTriggered(QAction *action)
+{
+ if (action == this->prefsAction3DView) {
+ this->stackedWidget->setCurrentWidget(this->page3DView);
+ }
+ else if (action == this->prefsActionEditor) {
+ this->stackedWidget->setCurrentWidget(this->pageEditor);
+ }
+ else if (action == this->prefsActionAdvanced) {
+ this->stackedWidget->setCurrentWidget(this->pageAdvanced);
+ }
+}
+
+void Preferences::colorSchemeChanged()
+{
+ QSettings settings;
+ settings.setValue("3dview/colorscheme", this->colorSchemeChooser->currentItem()->text());
+
+ emit requestRedraw();
+}
+
+const QColor &Preferences::color(RenderColor idx)
+{
+ return this->colorschemes[getValue("3dview/colorscheme").toString()][idx];
+}
+
+void Preferences::fontFamilyChanged(const QString &family)
+{
+ QSettings settings;
+ settings.setValue("editor/fontfamily", family);
+ emit fontChanged(family, getValue("editor/fontsize").toUInt());
+}
+
+void Preferences::fontSizeChanged(const QString &size)
+{
+ uint intsize = size.toUInt();
+ QSettings settings;
+ settings.setValue("editor/fontsize", intsize);
+ emit fontChanged(getValue("editor/fontfamily").toString(), intsize);
+}
+
+void Preferences::keyPressEvent(QKeyEvent *e)
+{
+#ifdef Q_WS_MAC
+ if (e->modifiers() == Qt::ControlModifier && e->key() == Qt::Key_Period) {
+ close();
+ } else
+#endif
+ if ((e->modifiers() == Qt::ControlModifier && e->key() == Qt::Key_W) ||
+ e->key() == Qt::Key_Escape) {
+ 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();
+}
+
contact: Jan Huwald // Impressum