summaryrefslogtreecommitdiffstats
path: root/desktop-widgets/preferences.cpp
diff options
context:
space:
mode:
authorGravatar Dirk Hohndel <dirk@hohndel.org>2015-11-02 19:54:34 -0800
committerGravatar Dirk Hohndel <dirk@hohndel.org>2015-11-02 19:54:34 -0800
commit8ea7f404574c2ee571d2dde6bb6be3791e962150 (patch)
tree6a050178bfc71bf10558968f2a3bc0a12d8c525f /desktop-widgets/preferences.cpp
parentb273c1b0ca7bfe933e7c83742f1610f6bbe3f4d3 (diff)
parentdf7818a9b8495285b4d9812e5d6d50d6f9c08813 (diff)
downloadsubsurface-8ea7f404574c2ee571d2dde6bb6be3791e962150.tar.gz
Merge branch 'cmakeAndPreferences'
Diffstat (limited to 'desktop-widgets/preferences.cpp')
-rw-r--r--desktop-widgets/preferences.cpp173
1 files changed, 173 insertions, 0 deletions
diff --git a/desktop-widgets/preferences.cpp b/desktop-widgets/preferences.cpp
new file mode 100644
index 000000000..29e9d2458
--- /dev/null
+++ b/desktop-widgets/preferences.cpp
@@ -0,0 +1,173 @@
+#include "preferences.h"
+#include "mainwindow.h"
+#include "models.h"
+#include "divelocationmodel.h"
+#include "prefs-macros.h"
+#include "qthelper.h"
+#include "subsurfacestartup.h"
+
+#include <QSettings>
+#include <QFileDialog>
+#include <QMessageBox>
+#include <QShortcut>
+#include <QNetworkProxy>
+#include <QNetworkCookieJar>
+
+#include "subsurfacewebservices.h"
+
+#if !defined(Q_OS_ANDROID) && defined(FBSUPPORT)
+#include "socialnetworks.h"
+#include <QWebView>
+#endif
+
+PreferencesDialog *PreferencesDialog::instance()
+{
+ static PreferencesDialog *dialog = new PreferencesDialog(MainWindow::instance());
+ return dialog;
+}
+
+PreferencesDialog::PreferencesDialog(QWidget *parent, Qt::WindowFlags f) : QDialog(parent, f)
+{
+ ui.setupUi(this);
+ setAttribute(Qt::WA_QuitOnClose, false);
+
+#if !defined(Q_OS_ANDROID) && defined(FBSUPPORT)
+ FacebookManager *fb = FacebookManager::instance();
+ facebookWebView = new QWebView(this);
+ ui.fbWebviewContainer->layout()->addWidget(facebookWebView);
+ if (fb->loggedIn()) {
+ facebookLoggedIn();
+ } else {
+ facebookDisconnect();
+ }
+ connect(facebookWebView, &QWebView::urlChanged, fb, &FacebookManager::tryLogin);
+ connect(fb, &FacebookManager::justLoggedIn, this, &PreferencesDialog::facebookLoggedIn);
+ connect(ui.fbDisconnect, &QPushButton::clicked, fb, &FacebookManager::logout);
+ connect(fb, &FacebookManager::justLoggedOut, this, &PreferencesDialog::facebookDisconnect);
+#endif
+
+ connect(ui.buttonBox, SIGNAL(clicked(QAbstractButton *)), this, SLOT(buttonClicked(QAbstractButton *)));
+
+ // connect(ui.defaultSetpoint, SIGNAL(valueChanged(double)), this, SLOT(defaultSetpointChanged(double)));
+ QShortcut *close = new QShortcut(QKeySequence(Qt::CTRL + Qt::Key_W), this);
+ connect(close, SIGNAL(activated()), this, SLOT(close()));
+ QShortcut *quit = new QShortcut(QKeySequence(Qt::CTRL + Qt::Key_Q), this);
+ connect(quit, SIGNAL(activated()), parent, SLOT(close()));
+ loadSettings();
+ setUiFromPrefs();
+ rememberPrefs();
+}
+
+void PreferencesDialog::facebookLoggedIn()
+{
+#if !defined(Q_OS_ANDROID) && defined(FBSUPPORT)
+ ui.fbDisconnect->show();
+ ui.fbWebviewContainer->hide();
+ ui.fbWebviewContainer->setEnabled(false);
+ ui.FBLabel->setText(tr("To disconnect Subsurface from your Facebook account, use the button below"));
+#endif
+}
+
+void PreferencesDialog::facebookDisconnect()
+{
+#if !defined(Q_OS_ANDROID) && defined(FBSUPPORT)
+ // remove the connect/disconnect button
+ // and instead add the login view
+ ui.fbDisconnect->hide();
+ ui.fbWebviewContainer->show();
+ ui.fbWebviewContainer->setEnabled(true);
+ ui.FBLabel->setText(tr("To connect to Facebook, please log in. This enables Subsurface to publish dives to your timeline"));
+ if (facebookWebView) {
+ facebookWebView->page()->networkAccessManager()->setCookieJar(new QNetworkCookieJar());
+ facebookWebView->setUrl(FacebookManager::instance()->connectUrl());
+ }
+#endif
+}
+
+void PreferencesDialog::showEvent(QShowEvent *event)
+{
+ setUiFromPrefs();
+ rememberPrefs();
+ QDialog::showEvent(event);
+}
+
+void PreferencesDialog::setUiFromPrefs()
+{
+
+}
+
+void PreferencesDialog::restorePrefs()
+{
+ prefs = oldPrefs;
+ setUiFromPrefs();
+}
+
+void PreferencesDialog::rememberPrefs()
+{
+ oldPrefs = prefs;
+}
+
+void PreferencesDialog::syncSettings()
+{
+}
+
+void PreferencesDialog::loadSettings()
+{
+ // This code was on the mainwindow, it should belong nowhere, but since we didn't
+ // correctly fixed this code yet ( too much stuff on the code calling preferences )
+ // force this here.
+ loadPreferences();
+ QSettings s;
+ QVariant v;
+}
+
+void PreferencesDialog::buttonClicked(QAbstractButton *button)
+{
+ switch (ui.buttonBox->standardButton(button)) {
+ case QDialogButtonBox::Discard:
+ restorePrefs();
+ syncSettings();
+ close();
+ break;
+ case QDialogButtonBox::Apply:
+ syncSettings();
+ break;
+ case QDialogButtonBox::FirstButton:
+ syncSettings();
+ close();
+ break;
+ default:
+ break; // ignore warnings.
+ }
+}
+#undef SB
+
+#if 0
+// TODO: Copy this later.
+void PreferencesDialog::on_resetSettings_clicked()
+{
+ QSettings s;
+ QMessageBox response(this);
+ response.setStandardButtons(QMessageBox::Ok | QMessageBox::Cancel);
+ response.setDefaultButton(QMessageBox::Cancel);
+ response.setWindowTitle(tr("Warning"));
+ response.setText(tr("If you click OK, all settings of Subsurface will be reset to their default values. This will be applied immediately."));
+ response.setWindowModality(Qt::WindowModal);
+
+ int result = response.exec();
+ if (result == QMessageBox::Ok) {
+ copy_prefs(&default_prefs, &prefs);
+ setUiFromPrefs();
+ Q_FOREACH (QString key, s.allKeys()) {
+ s.remove(key);
+ }
+ syncSettings();
+ close();
+ }
+}
+#endif
+
+void PreferencesDialog::emitSettingsChanged()
+{
+ emit settingsChanged();
+}