Skip to content
Snippets Groups Projects
UserSettingsPage.h 4.59 KiB
Newer Older
  • Learn to ignore specific revisions
  • /*
     * 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
    
    public:
            UserSettings();
    
            void save();
            void load();
    
            void applyTheme();
            void setTheme(QString theme);
    
            void setTray(bool state)
            {
                    isTrayEnabled_ = state;
                    save();
    
    Anton Karmanov's avatar
    Anton Karmanov committed
            void setStartInTray(bool state)
            {
                    isStartInTrayEnabled_ = state;
                    save();
    
            void setFontSize(double size)
            {
                    baseFontSize_ = size;
                    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();
    
            }
    
            void setDesktopNotifications(bool state)
            {
                    hasDesktopNotifications_ = state;
                    save();
            }
    
    Konstantinos Sideris's avatar
    Konstantinos Sideris committed
            QString theme() const { return !theme_.isEmpty() ? theme_ : "light"; }
    
            bool isTrayEnabled() const { return isTrayEnabled_; }
    
    Anton Karmanov's avatar
    Anton Karmanov committed
            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_; }
    
            bool hasDesktopNotifications() const { return hasDesktopNotifications_; }
    
            double fontSize() const { return baseFontSize_; }
    
    
    signals:
            void groupViewStateChanged(bool state);
    
    
    private:
            QString theme_;
            bool isTrayEnabled_;
    
    Anton Karmanov's avatar
    Anton Karmanov committed
            bool isStartInTrayEnabled_;
    
            bool isOrderingEnabled_;
    
            bool isGroupViewEnabled_;
    
            bool isTypingNotificationsEnabled_;
    
            bool hasDesktopNotifications_;
    
            double baseFontSize_;
    
    };
    
    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 slots:
            void importSessionKeys();
            void exportSessionKeys();
    
    
    private:
            // Layouts
            QVBoxLayout *topLayout_;
    
            QVBoxLayout *mainLayout_;
    
            QHBoxLayout *topBarLayout_;
    
            // Shared settings object.
            QSharedPointer<UserSettings> settings_;
    
            Toggle *trayToggle_;
    
    Anton Karmanov's avatar
    Anton Karmanov committed
            Toggle *startInTrayToggle_;
    
            Toggle *roomOrderToggle_;
    
            Toggle *groupViewToggle_;
    
            Toggle *typingNotifications_;
    
            Toggle *desktopNotifications_;
    
            QLabel *deviceFingerprintValue_;
            QLabel *deviceIdValue_;
    
            QComboBox *themeCombo_;
    
            QComboBox *scaleFactorCombo_;
    
            QComboBox *fontSizeCombo_;
    
    
            int sideMargin_ = 0;