diff --git a/qml/Room.qml b/qml/Room.qml index 3c16583..b95bc90 100644 --- a/qml/Room.qml +++ b/qml/Room.qml @@ -1,6 +1,7 @@ import QtQuick 2.9 import QtQuick.Controls 2.2 import QtQuick.Layouts 1.3 +import QtQuick.Controls.Material 2.2 import Matrique 0.1 import Matrique.Settings 0.1 diff --git a/qml/Setting.qml b/qml/Setting.qml index ad7fb60..95ec054 100644 --- a/qml/Setting.qml +++ b/qml/Setting.qml @@ -29,6 +29,8 @@ Page { id: accountSettingsListView delegate: Column { + spacing: 16 + SwipeDelegate { width: accountSettingsListView.width height: 64 @@ -80,19 +82,35 @@ Page { onClicked: accountSettingsListView.currentIndex == index ? accountSettingsListView.currentIndex = -1 : accountSettingsListView.currentIndex = index } - Rectangle { - width: parent.width - height: 2 - visible: accountSettingsListView.currentIndex == index - - color: Material.accent - } - ColumnLayout { visible: accountSettingsListView.currentIndex == index width: parent.width - 32 anchors.horizontalCenter: parent.horizontalCenter + spacing: 0 + + ListView { + Layout.fillWidth: true + Layout.preferredHeight: 32 + + orientation: ListView.Horizontal + + model: ["#498882", "#2196F3"] + + delegate: Rectangle { + width: parent.height + height: parent.height + + color: modelData + + MouseArea { + anchors.fill: parent + + onClicked: matriqueController.setColor(connection.localUserId, modelData) + } + } + } + RowLayout { Layout.fillWidth: true diff --git a/qml/component/RoomDrawer.qml b/qml/component/RoomDrawer.qml index a776444..cc4668a 100644 --- a/qml/component/RoomDrawer.qml +++ b/qml/component/RoomDrawer.qml @@ -56,6 +56,7 @@ Drawer { id: roomNameField text: room && room.name ? room.name : "" + selectByMouse: true } ItemDelegate { @@ -77,6 +78,7 @@ Drawer { id: roomTopicField text: room && room.topic ? room.topic : "" + selectByMouse: true } ItemDelegate { diff --git a/qml/main.qml b/qml/main.qml index a80e99c..fc18f03 100644 --- a/qml/main.qml +++ b/qml/main.qml @@ -25,6 +25,8 @@ ApplicationWindow { Material.theme: MSettings.darkTheme ? Material.Dark : Material.Light + Material.accent: matriqueController.color(currentConnection ? currentConnection.localUserId : "") + FontLoader { id: materialFont; source: "qrc:/asset/font/material.ttf" } Controller { diff --git a/src/controller.cpp b/src/controller.cpp index 4c03435..4ade983 100644 --- a/src/controller.cpp +++ b/src/controller.cpp @@ -222,3 +222,11 @@ QImage Controller::safeImage(QImage image) { if (image.isNull()) return QImage(); return image; } + +QColor Controller::color(QString userId) { + return QColor(SettingsGroup("UI/Color").value(userId, "#498882").toString()); +} + +void Controller::setColor(QString userId, QColor newColor) { + SettingsGroup("UI/Color").setValue(userId, newColor.name()); +} diff --git a/src/controller.h b/src/controller.h index e42bd37..d6297c1 100644 --- a/src/controller.h +++ b/src/controller.h @@ -40,12 +40,14 @@ class Controller : public QObject { } } - QVector m_connections; + Q_INVOKABLE QColor color(QString userId); + Q_INVOKABLE void setColor(QString userId, QColor newColor); private: QClipboard* m_clipboard = QApplication::clipboard(); QSystemTrayIcon* tray = new QSystemTrayIcon(); QMenu* trayMenu = new QMenu(); + QVector m_connections; bool m_busy = false; diff --git a/src/matriqueroom.h b/src/matriqueroom.h index 8250ca5..3bfcebc 100644 --- a/src/matriqueroom.h +++ b/src/matriqueroom.h @@ -19,7 +19,7 @@ class MatriqueRoom : public Room { explicit MatriqueRoom(Connection* connection, QString roomId, JoinState joinState = {}); - QImage getAvatar() { return avatar(64); } + QImage getAvatar() { return avatar(128); } const QString& cachedInput() const { return m_cachedInput; } void setCachedInput(const QString& input) { diff --git a/src/matriqueuser.h b/src/matriqueuser.h index 11de703..7415de8 100644 --- a/src/matriqueuser.h +++ b/src/matriqueuser.h @@ -14,7 +14,7 @@ class MatriqueUser : public User { public: MatriqueUser(QString userId, Connection* connection); - QImage getAvatar() { return avatar(64); } + QImage getAvatar() { return avatar(128); } signals: void inheritedAvatarChanged(User* user, const Room* roomContext); // https://bugreports.qt.io/browse/QTBUG-7684 diff --git a/src/roomlistmodel.cpp b/src/roomlistmodel.cpp index 3ab5b56..af50d3f 100644 --- a/src/roomlistmodel.cpp +++ b/src/roomlistmodel.cpp @@ -15,7 +15,7 @@ RoomListModel::~RoomListModel() {} void RoomListModel::setConnection(Connection* connection) { if (connection == m_connection) return; - m_connection->disconnect(this); + if (m_connection) m_connection->disconnect(this); if (!connection) { qDebug() << "Removing current connection..."; m_connection = nullptr; diff --git a/src/userlistmodel.cpp b/src/userlistmodel.cpp index eac3523..334d09c 100644 --- a/src/userlistmodel.cpp +++ b/src/userlistmodel.cpp @@ -69,7 +69,7 @@ QVariant UserListModel::data(const QModelIndex& index, int role) const { } if (role == AvatarRole) { if (!user->avatarUrl(m_currentRoom).isEmpty()) - return user->avatar(32, m_currentRoom); + return user->avatar(64, m_currentRoom); return QImage(); }