summary refs log tree commit diff
path: root/src/dialogs/RoomSettingsOld.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/dialogs/RoomSettingsOld.h')
-rw-r--r--src/dialogs/RoomSettingsOld.h150
1 files changed, 150 insertions, 0 deletions
diff --git a/src/dialogs/RoomSettingsOld.h b/src/dialogs/RoomSettingsOld.h
new file mode 100644
index 00000000..e517676a
--- /dev/null
+++ b/src/dialogs/RoomSettingsOld.h
@@ -0,0 +1,150 @@
+#pragma once
+
+#include <QFrame>
+#include <QImage>
+
+#include <mtx/events/guest_access.hpp>
+
+#include "CacheStructs.h"
+
+class Avatar;
+class FlatButton;
+class QPushButton;
+class QComboBox;
+class QHBoxLayout;
+class QShowEvent;
+class LoadingIndicator;
+class QLayout;
+class QPixmap;
+class TextField;
+class TextField;
+class Toggle;
+class QLabel;
+class QEvent;
+
+class ClickableFilter : public QObject
+{
+        Q_OBJECT
+
+public:
+        explicit ClickableFilter(QWidget *parent)
+          : QObject(parent)
+        {}
+
+signals:
+        void clicked();
+
+protected:
+        bool eventFilter(QObject *obj, QEvent *event) override;
+};
+
+/// Convenience class which connects events emmited from threads
+/// outside of main with the UI code.
+class ThreadProxy : public QObject
+{
+        Q_OBJECT
+
+signals:
+        void error(const QString &msg);
+        void avatarChanged();
+        void nameEventSent(const QString &);
+        void topicEventSent();
+};
+
+class EditModal : public QWidget
+{
+        Q_OBJECT
+
+public:
+        EditModal(const QString &roomId, QWidget *parent = nullptr);
+
+        void setFields(const QString &roomName, const QString &roomTopic);
+
+signals:
+        void nameChanged(const QString &roomName);
+
+private slots:
+        void topicEventSent();
+        void nameEventSent(const QString &name);
+        void error(const QString &msg);
+
+        void applyClicked();
+
+private:
+        QString roomId_;
+        QString initialName_;
+        QString initialTopic_;
+
+        QLabel *errorField_;
+
+        TextField *nameInput_;
+        TextField *topicInput_;
+
+        QPushButton *applyBtn_;
+        QPushButton *cancelBtn_;
+};
+
+namespace dialogs {
+
+class RoomSettingsOld : public QFrame
+{
+        Q_OBJECT
+public:
+        RoomSettingsOld(const QString &room_id, QWidget *parent = nullptr);
+
+signals:
+        void enableEncryptionError(const QString &msg);
+        void showErrorMessage(const QString &msg);
+        void accessRulesUpdated();
+        void notifChanged(int index);
+
+protected:
+        void showEvent(QShowEvent *event) override;
+
+private slots:
+        //! The file dialog opens so the user can select and upload a new room avatar.
+        void updateAvatar();
+
+private:
+        //! Whether the user has enough power level to send m.room.join_rules events.
+        bool canChangeJoinRules(const std::string &room_id, const std::string &user_id) const;
+        //! Whether the user has enough power level to send m.room.name & m.room.topic events.
+        bool canChangeNameAndTopic(const std::string &room_id, const std::string &user_id) const;
+        //! Whether the user has enough power level to send m.room.avatar event.
+        bool canChangeAvatar(const std::string &room_id, const std::string &user_id) const;
+        void updateAccessRules(const std::string &room_id,
+                               const mtx::events::state::JoinRules &,
+                               const mtx::events::state::GuestAccess &);
+        void stopLoadingSpinner();
+        void startLoadingSpinner();
+        void resetErrorLabel();
+        void displayErrorMessage(const QString &msg);
+
+        void setAvatar();
+        void setupEditButton();
+        //! Retrieve the current room information from cache.
+        void retrieveRoomInfo();
+        void enableEncryption();
+
+        Avatar *avatar_ = nullptr;
+
+        bool usesEncryption_ = false;
+        QHBoxLayout *btnLayout_;
+
+        FlatButton *editFieldsBtn_ = nullptr;
+
+        RoomInfo info_;
+        QString room_id_;
+        QImage avatarImg_;
+
+        QLabel *roomNameLabel_     = nullptr;
+        QLabel *errorLabel_        = nullptr;
+        LoadingIndicator *spinner_ = nullptr;
+
+        QComboBox *notifCombo      = nullptr;
+        QComboBox *accessCombo     = nullptr;
+        Toggle *encryptionToggle_  = nullptr;
+        Toggle *keyRequestsToggle_ = nullptr;
+};
+
+} // dialogs