summary refs log tree commit diff
path: root/src/UserSettingsPage.h
diff options
context:
space:
mode:
authorKonstantinos Sideris <sideris.konstantin@gmail.com>2018-07-17 16:37:25 +0300
committerKonstantinos Sideris <sideris.konstantin@gmail.com>2018-07-17 16:37:25 +0300
commit0e814da91c8e041897a4c3f7e6e9234bbc7c6f7a (patch)
tree21f655d30630fe77ba48d07e4b357e2b6c6a5730 /src/UserSettingsPage.h
parentMerge pull request #372 from bebehei/notification (diff)
downloadnheko-0e814da91c8e041897a4c3f7e6e9234bbc7c6f7a.tar.xz
Move all files under src/
Diffstat (limited to 'src/UserSettingsPage.h')
-rw-r--r--src/UserSettingsPage.h148
1 files changed, 148 insertions, 0 deletions
diff --git a/src/UserSettingsPage.h b/src/UserSettingsPage.h
new file mode 100644
index 00000000..177f1921
--- /dev/null
+++ b/src/UserSettingsPage.h
@@ -0,0 +1,148 @@
+/*
+ * nheko Copyright (C) 2017  Konstantinos Sideris <siderisk@auth.gr>
+ *
+ * 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 3 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, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+#include <QComboBox>
+#include <QFrame>
+#include <QLayout>
+#include <QSharedPointer>
+#include <QWidget>
+
+class Toggle;
+
+constexpr int OptionMargin       = 6;
+constexpr int LayoutTopMargin    = 50;
+constexpr int LayoutBottomMargin = LayoutTopMargin;
+
+class UserSettings : public QObject
+{
+        Q_OBJECT
+
+public:
+        UserSettings();
+
+        void save();
+        void load();
+        void applyTheme();
+        void setTheme(QString theme);
+        void setTray(bool state)
+        {
+                isTrayEnabled_ = state;
+                save();
+        };
+
+        void setStartInTray(bool state)
+        {
+                isStartInTrayEnabled_ = state;
+                save();
+        };
+
+        void setRoomOrdering(bool state)
+        {
+                isOrderingEnabled_ = state;
+                save();
+        };
+
+        void setGroupView(bool state)
+        {
+                if (isGroupViewEnabled_ != state)
+                        emit groupViewStateChanged(state);
+
+                isGroupViewEnabled_ = state;
+                save();
+        };
+
+        void setReadReceipts(bool state)
+        {
+                isReadReceiptsEnabled_ = state;
+                save();
+        }
+
+        void setTypingNotifications(bool state)
+        {
+                isTypingNotificationsEnabled_ = state;
+                save();
+        };
+
+        QString theme() const { return !theme_.isEmpty() ? theme_ : "light"; }
+        bool isTrayEnabled() const { return isTrayEnabled_; }
+        bool isStartInTrayEnabled() const { return isStartInTrayEnabled_; }
+        bool isOrderingEnabled() const { return isOrderingEnabled_; }
+        bool isGroupViewEnabled() const { return isGroupViewEnabled_; }
+        bool isTypingNotificationsEnabled() const { return isTypingNotificationsEnabled_; }
+        bool isReadReceiptsEnabled() const { return isReadReceiptsEnabled_; }
+
+signals:
+        void groupViewStateChanged(bool state);
+
+private:
+        QString theme_;
+        bool isTrayEnabled_;
+        bool isStartInTrayEnabled_;
+        bool isOrderingEnabled_;
+        bool isGroupViewEnabled_;
+        bool isTypingNotificationsEnabled_;
+        bool isReadReceiptsEnabled_;
+};
+
+class HorizontalLine : public QFrame
+{
+        Q_OBJECT
+
+public:
+        HorizontalLine(QWidget *parent = nullptr);
+};
+
+class UserSettingsPage : public QWidget
+{
+        Q_OBJECT
+
+public:
+        UserSettingsPage(QSharedPointer<UserSettings> settings, QWidget *parent = 0);
+
+protected:
+        void showEvent(QShowEvent *event) override;
+        void resizeEvent(QResizeEvent *event) override;
+        void paintEvent(QPaintEvent *event) override;
+
+signals:
+        void moveBack();
+        void trayOptionChanged(bool value);
+
+private:
+        void restoreThemeCombo() const;
+
+        // Layouts
+        QVBoxLayout *topLayout_;
+        QVBoxLayout *mainLayout_;
+        QHBoxLayout *topBarLayout_;
+
+        // Shared settings object.
+        QSharedPointer<UserSettings> settings_;
+
+        Toggle *trayToggle_;
+        Toggle *startInTrayToggle_;
+        Toggle *roomOrderToggle_;
+        Toggle *groupViewToggle_;
+        Toggle *typingNotifications_;
+        Toggle *readReceipts_;
+
+        QComboBox *themeCombo_;
+
+        int sideMargin_ = 0;
+};