Fix forward navigation control on Linux.
[dorian] / settingswindow.cpp
index 5c5dce4..a390363 100644 (file)
@@ -3,18 +3,18 @@
 #include "settingswindow.h"
 #include "settings.h"
 #include "toolbuttonbox.h"
+#include "platform.h"
+#include "trace.h"
 
 #ifdef Q_OS_SYMBIAN
-const char *DEFAULT_ORIENTATION = "portrait";
-#else
-const char *DEFAULT_ORIENTATION = "landscape";
+#   include "flickcharm.h"
 #endif
 
 const int ZOOM_MIN = 75;
 const int ZOOM_MAX = 250;
 const int ZOOM_STEP = 25;
 
-SettingsWindow::SettingsWindow(QWidget *parent):  QMainWindow(parent)
+SettingsWindow::SettingsWindow(QWidget *parent):  AdopterWindow(parent)
 {
 #ifdef Q_WS_MAEMO_5
     setAttribute(Qt::WA_Maemo5StackedWindow, true);
@@ -23,10 +23,15 @@ SettingsWindow::SettingsWindow(QWidget *parent):  QMainWindow(parent)
     setWindowTitle("Settings");
 
     Settings *settings = Settings::instance();
+    Platform *platform = Platform::instance();
+
     QScrollArea *scroller = new QScrollArea(this);
-#ifdef Q_WS_MAEMO_5
+#if defined(Q_WS_MAEMO_5)
     scroller->setProperty("FingerScrollable", true);
     scroller->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
+#elif defined(Q_OS_SYMBIAN)
+    FlickCharm *charm = new FlickCharm(this);
+    charm->activateOn(scroller);
 #else
     scroller->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
 #endif
@@ -37,16 +42,20 @@ SettingsWindow::SettingsWindow(QWidget *parent):  QMainWindow(parent)
     QVBoxLayout *layout = new QVBoxLayout(contents);
     contents->setLayout(layout);
 
+#if defined(Q_WS_MAEMO_5)
     QCheckBox *backlight = new QCheckBox(tr("Keep backlight on"), contents);
     layout->addWidget(backlight);
     backlight->setChecked(settings->value("lightson", false).toBool());
+#endif
 
+#if defined(Q_WS_MAEMO_5) || defined(Q_OS_SYMBIAN)
     QCheckBox *grabVolume =
             new QCheckBox(tr("Navigate with volume keys"), contents);
     layout->addWidget(grabVolume);
     grabVolume->setChecked(settings->value("usevolumekeys", false).toBool());
+#endif
 
-    int zoom = Settings::instance()->value("zoom").toInt();
+    int zoom = settings->value("zoom", platform->defaultZoom()).toInt();
     if (zoom < ZOOM_MIN) {
         zoom = ZOOM_MIN;
     } else if (zoom > ZOOM_MAX) {
@@ -64,8 +73,8 @@ SettingsWindow::SettingsWindow(QWidget *parent):  QMainWindow(parent)
 
     QLabel *fontLabel = new QLabel(tr("Font:"), contents);
     layout->addWidget(fontLabel);
-    QString defaultFamily = fontLabel->fontInfo().family();
-    QString family = Settings::instance()->value("font", defaultFamily).toString();
+    QString family =
+            settings->value("font", platform->defaultFont()).toString();
     fontButton = new QFontComboBox(contents);
     fontButton->setCurrentFont(QFont(family));
     fontButton->setEditable(false);
@@ -75,37 +84,20 @@ SettingsWindow::SettingsWindow(QWidget *parent):  QMainWindow(parent)
     layout->addWidget(colorLabel);
     ToolButtonBox *box = new ToolButtonBox(this);
     layout->addWidget(box);
-    box->addButton(SchemeDefault, tr("Default"), ":/icons/style-default.png");
-    box->addButton(SchemeNight, tr("Night"), ":/icons/style-night.png");
-    box->addButton(SchemeDay, tr("Day"), ":/icons/style-day.png");
-    box->addButton(SchemeSand, tr("Sand"), ":/icons/style-sand.png");
+    box->addButton(SchemeDay, tr("Day"),
+                   Platform::instance()->icon("style-day"));
+    box->addButton(SchemeNight, tr("Night"),
+                   Platform::instance()->icon("style-night"));
+    box->addButton(SchemeSand, tr("Sand"),
+                   Platform::instance()->icon("style-sand"));
     box->addStretch();
-    QString scheme = settings->value("scheme", "default").toString();
+    QString scheme = settings->value("scheme", "day").toString();
     if (scheme == "night") {
         box->toggle(SchemeNight);
-    } else if (scheme == "day") {
-        box->toggle(SchemeDay);
     } else if (scheme == "sand") {
         box->toggle(SchemeSand);
     } else {
-        box->toggle(SchemeDefault);
-    }
-
-    QLabel *orientationLabel = new QLabel(tr("Orientation:"), contents);
-    layout->addWidget(orientationLabel);
-    orientationBox = new ToolButtonBox(this);
-    layout->addWidget(orientationBox);
-    orientationBox->addButton(OrientationPortrait, tr("Portrait"),
-                              ":/icons/settings-portrait.png");
-    orientationBox->addButton(OrientationLandscape, tr("Landscape"),
-                              ":/icons/settings-landscape.png");
-    orientationBox->addStretch();
-    QString orientation =
-        settings->value("orientation", DEFAULT_ORIENTATION).toString();
-    if (orientation == "portrait") {
-        orientationBox->toggle(OrientationPortrait);
-    } else {
-        orientationBox->toggle(OrientationLandscape);
+        box->toggle(SchemeDay);
     }
 
     layout->addStretch();
@@ -115,17 +107,27 @@ SettingsWindow::SettingsWindow(QWidget *parent):  QMainWindow(parent)
 
     setCentralWidget(scroller);
 
-    connect(backlight, SIGNAL(toggled(bool)), this, SLOT(onLightsToggled(bool)));
+#if defined(Q_WS_MAEMO_5)
+    connect(backlight, SIGNAL(toggled(bool)),
+            this, SLOT(onLightsToggled(bool)));
+#endif
+#if defined(Q_WS_MAEMO_5) || defined(Q_OS_SYMBIAN)
     connect(grabVolume, SIGNAL(toggled(bool)),
             this, SLOT(onGrabVolumeToggled(bool)));
+#endif
     connect(zoomSlider, SIGNAL(valueChanged(int)),
             this, SLOT(onSliderValueChanged(int)));
     connect(fontButton, SIGNAL(currentFontChanged(const QFont &)),
             this, SLOT(onCurrentFontChanged(const QFont &)));
     connect(box, SIGNAL(buttonClicked(int)),
             this, SLOT(onSchemeButtonClicked(int)));
-    connect(orientationBox, SIGNAL(buttonClicked(int)),
-            this, SLOT(onOrientationButtonClicked(int)));
+
+#ifdef Q_OS_SYMBIAN
+    QAction *closeAction = new QAction(parent? tr("Back"): tr("Exit"), this);
+    closeAction->setSoftKeyRole(QAction::NegativeSoftKey);
+    connect(closeAction, SIGNAL(triggered()), this, SLOT(close()));
+    QMainWindow::addAction(closeAction);
+#endif
 }
 
 void SettingsWindow::onSliderValueChanged(int value)
@@ -136,39 +138,33 @@ void SettingsWindow::onSliderValueChanged(int value)
         return;
     }
     zoomLabel->setText(tr("Zoom level: %1%").arg(value));
-#ifdef Q_WS_MAEMO_5
-    // Re-scaling the book view is too much for the N900
-#else
-    Settings::instance()->setValue("zoom", value);
-#endif // Q_WS_MAEMO_5
+#if !defined(Q_WS_MAEMO_5) && !defined(Q_OS_SYMBIAN)
+    Settings::instance()->setValue("zoom", zoomSlider->value());
+#endif
 }
 
 void SettingsWindow::onCurrentFontChanged(const QFont &font)
 {
-#ifdef Q_WS_MAEMO_5
-    Q_UNUSED(font);
-#else
+#if !defined(Q_WS_MAEMO_5) && !defined(Q_OS_SYMBIAN)
     Settings::instance()->setValue("font", font.family());
-#endif // Q_WS_MAEMO_5
+#else
+    Q_UNUSED(font);
+#endif
 }
 
 void SettingsWindow::onSchemeButtonClicked(int id)
 {
     QString scheme;
     switch (id) {
-    case SchemeDay: scheme = "day"; break;
     case SchemeNight: scheme = "night"; break;
     case SchemeSand: scheme = "sand"; break;
-    default: scheme = "default"; break;
+    default: scheme = "day"; break;
     }
     Settings::instance()->setValue("scheme", scheme);
 }
 
 void SettingsWindow::onOrientationButtonClicked(int id)
 {
-#ifdef Q_WS_MAEMO_5
-    Q_UNUSED(id);
-#else
     QString orientation;
     switch (id) {
     case OrientationLandscape:
@@ -179,24 +175,17 @@ void SettingsWindow::onOrientationButtonClicked(int id)
         break;
     }
     Settings::instance()->setValue("orientation", orientation);
-#endif // Q_WS_MAEMO_5
 }
 
-#ifdef Q_WS_MAEMO_5
-
 void SettingsWindow::closeEvent(QCloseEvent *e)
 {
+    TRACE;
     Settings *settings = Settings::instance();
     settings->setValue("zoom", zoomSlider->value());
     settings->setValue("font", fontButton->currentFont().family());
-    settings->setValue("orientation",
-        (orientationBox->checkedId() == OrientationLandscape)?
-        "landscape": "portrait");
     e->accept();
 }
 
-#endif // Q_WS_MAEMO_5
-
 void SettingsWindow::onLightsToggled(bool value)
 {
     Settings::instance()->setValue("lightson", value);