diff --git a/include/ChatPage.h b/include/ChatPage.h
index 68495276..74db6b15 100644
--- a/include/ChatPage.h
+++ b/include/ChatPage.h
@@ -23,6 +23,7 @@
#include "MatrixClient.h"
#include "RoomList.h"
+#include "RoomSettings.h"
#include "RoomState.h"
#include "Splitter.h"
#include "TextInputWidget.h"
@@ -92,6 +93,7 @@ private:
UserInfoWidget *user_info_widget_;
QMap<QString, RoomState> state_manager_;
+ QMap<QString, QSharedPointer<RoomSettings>> settingsManager_;
// Matrix Client API provider.
QSharedPointer<MatrixClient> client_;
diff --git a/include/RoomSettings.h b/include/RoomSettings.h
new file mode 100644
index 00000000..ee74b9eb
--- /dev/null
+++ b/include/RoomSettings.h
@@ -0,0 +1,55 @@
+/*
+ * 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 <QSettings>
+
+class RoomSettings
+{
+public:
+ RoomSettings(QString room_id)
+ {
+ path_ = QString("notifications/%1").arg(room_id);
+ isNotificationsEnabled_ = true;
+
+ QSettings settings;
+
+ if (settings.contains(path_))
+ isNotificationsEnabled_ = settings.value(path_).toBool();
+ else
+ settings.setValue(path_, isNotificationsEnabled_);
+ };
+
+ bool isNotificationsEnabled()
+ {
+ return isNotificationsEnabled_;
+ };
+
+ void toggleNotifications()
+ {
+ isNotificationsEnabled_ = !isNotificationsEnabled_;
+
+ QSettings settings;
+ settings.setValue(path_, isNotificationsEnabled_);
+ }
+
+private:
+ QString path_;
+
+ bool isNotificationsEnabled_;
+};
diff --git a/include/TopRoomBar.h b/include/TopRoomBar.h
index 304ec320..6e4bfe7a 100644
--- a/include/TopRoomBar.h
+++ b/include/TopRoomBar.h
@@ -17,15 +17,20 @@
#pragma once
+#include <QAction>
+#include <QDebug>
#include <QIcon>
#include <QImage>
#include <QLabel>
#include <QPaintEvent>
+#include <QSharedPointer>
#include <QVBoxLayout>
#include <QWidget>
#include "Avatar.h"
#include "FlatButton.h"
+#include "Menu.h"
+#include "RoomSettings.h"
class TopRoomBar : public QWidget
{
@@ -39,6 +44,7 @@ public:
inline void updateRoomName(const QString &name);
inline void updateRoomTopic(const QString &topic);
void updateRoomAvatarFromName(const QString &name);
+ void setRoomSettings(QSharedPointer<RoomSettings> settings);
void reset();
@@ -52,10 +58,16 @@ private:
QLabel *name_label_;
QLabel *topic_label_;
- FlatButton *search_button_;
- FlatButton *settings_button_;
+ QSharedPointer<RoomSettings> roomSettings_;
+
+ QMenu *menu_;
+ QAction *toggleNotifications_;
+
+ FlatButton *settingsBtn_;
Avatar *avatar_;
+
+ int buttonSize_;
};
inline void TopRoomBar::updateRoomAvatar(const QImage &avatar_image)
diff --git a/include/ui/Menu.h b/include/ui/Menu.h
new file mode 100644
index 00000000..78a35b43
--- /dev/null
+++ b/include/ui/Menu.h
@@ -0,0 +1,25 @@
+#pragma once
+
+#include <QMenu>
+
+class Menu : public QMenu
+{
+public:
+ Menu(QWidget *parent = nullptr)
+ : QMenu(parent)
+ {
+ setFont(QFont("Open Sans", 10));
+ setStyleSheet(
+ "QMenu { background-color: white; margin: 0px;}"
+ "QMenu::item { padding: 7px 20px; border: 1px solid transparent; margin: 2px 0px; }"
+ "QMenu::item:selected { background: rgba(180, 180, 180, 100); }");
+ };
+
+protected:
+ void leaveEvent(QEvent *e)
+ {
+ Q_UNUSED(e);
+
+ hide();
+ }
+};
|