Change Settings to singleton and add AutoMouseArea.

Also fixes acceptInvitation issue.
This commit is contained in:
Black Hat 2018-08-21 22:57:15 +08:00
parent fa4db065f2
commit e428e9f005
17 changed files with 104 additions and 48 deletions

View File

@ -32,7 +32,7 @@ RESOURCES += \
res.qrc res.qrc
# Additional import path used to resolve QML modules in Qt Creator's code model # Additional import path used to resolve QML modules in Qt Creator's code model
QML_IMPORT_PATH = QML_IMPORT_PATH += qml/MatriqueSettings
# Additional import path used to resolve QML modules just for Qt Quick Designer # Additional import path used to resolve QML modules just for Qt Quick Designer
QML_DESIGNER_IMPORT_PATH = QML_DESIGNER_IMPORT_PATH =

View File

@ -0,0 +1,13 @@
pragma Singleton
import QtQuick 2.9
import Qt.labs.settings 1.0
Settings {
property bool lazyLoad: true
property bool asyncMessageDelegate
property bool richText
property bool pressAndHold
property bool darkTheme
property bool miniMode
}

View File

@ -0,0 +1,26 @@
import QtQuick.tooling 1.2
// This file describes the plugin-supplied types contained in the library.
// It is used for QML tooling purposes only.
//
// This file was auto-generated by:
// 'qmlplugindump -nonrelocatable MatriqueSettings 0.1 qml/'
Module {
dependencies: ["Qt.labs.settings 1.0", "QtQuick 2.9"]
Component {
prototype: "QQmlSettings"
name: "MatriqueSettings 0.1"
exports: ["MatriqueSettings 0.1"]
exportMetaObjectRevisions: [1]
isComposite: true
isCreatable: false
isSingleton: true
Property { name: "lazyLoad"; type: "bool" }
Property { name: "asyncMessageDelegate"; type: "bool" }
Property { name: "richText"; type: "bool" }
Property { name: "pressAndHold"; type: "bool" }
Property { name: "darkTheme"; type: "bool" }
Property { name: "miniMode"; type: "bool" }
}
}

View File

@ -0,0 +1,2 @@
module MatriqueSettings
singleton MatriqueSettings 0.1 MatriqueSettings.qml

View File

@ -2,6 +2,7 @@ import QtQuick 2.9
import QtQuick.Controls 2.2 import QtQuick.Controls 2.2
import QtQuick.Layouts 1.3 import QtQuick.Layouts 1.3
import Matrique 0.1 import Matrique 0.1
import MatriqueSettings 0.1
import "qrc:/qml/form" import "qrc:/qml/form"
@ -13,7 +14,7 @@ Page {
RoomListModel { RoomListModel {
id: roomListModel id: roomListModel
onRoomAdded: setting.lazyLoad ? {} : room.getPreviousContent(20) onRoomAdded: MatriqueSettings.lazyLoad ? {} : room.getPreviousContent(20)
onNewMessage: window.active ? {} : matriqueController.showMessage(roomName, content, icon) onNewMessage: window.active ? {} : matriqueController.showMessage(roomName, content, icon)
} }
@ -25,7 +26,7 @@ Page {
id: roomListForm id: roomListForm
Layout.fillHeight: true Layout.fillHeight: true
Layout.preferredWidth: setting.miniMode ? 80 : page.width * 0.35 Layout.preferredWidth: MatriqueSettings.miniMode ? 80 : page.width * 0.35
Layout.minimumWidth: 80 Layout.minimumWidth: 80
Layout.maximumWidth: 360 Layout.maximumWidth: 360

View File

@ -7,13 +7,6 @@ import "component"
import "form" import "form"
Page { Page {
property alias lazyLoad: generalForm.lazyLoad
property alias asyncMessageDelegate: generalForm.asyncMessageDelegate
property alias richText: generalForm.richText
property alias darkTheme: appearanceForm.darkTheme
property alias miniMode: appearanceForm.miniMode
property var connection property var connection
SettingAccountForm { SettingAccountForm {

View File

@ -0,0 +1,12 @@
import QtQuick 2.9
import MatriqueSettings 0.1
MouseArea {
signal primaryClicked()
signal secondaryClicked()
propagateComposedEvents: true
acceptedButtons: MatriqueSettings.pressAndHold ? Qt.LeftButton : (Qt.LeftButton | Qt.RightButton)
onClicked: mouse.button == Qt.RightButton ? secondaryClicked() : primaryClicked()
onPressAndHold: MatriqueSettings.pressAndHold ? secondaryClicked() : {}
}

View File

@ -2,6 +2,7 @@ import QtQuick 2.9
import QtQuick.Controls 2.2 import QtQuick.Controls 2.2
import QtQuick.Controls.Material 2.2 import QtQuick.Controls.Material 2.2
import Matrique 0.1 import Matrique 0.1
import MatriqueSettings 0.1
Item { Item {
readonly property bool hidden: marks === EventStatus.Redacted || marks === EventStatus.Hidden readonly property bool hidden: marks === EventStatus.Redacted || marks === EventStatus.Hidden
@ -21,15 +22,15 @@ Item {
anchors.right: !isState && sentByMe ? parent.right : undefined anchors.right: !isState && sentByMe ? parent.right : undefined
anchors.horizontalCenter: isState ? parent.horizontalCenter : undefined anchors.horizontalCenter: isState ? parent.horizontalCenter : undefined
MouseArea { AutoMouseArea {
anchors.fill: parent anchors.fill: parent
onPressAndHold: Qt.createComponent("MessageContextMenu.qml").createObject(this) onSecondaryClicked: Qt.createComponent("MessageContextMenu.qml").createObject(this)
} }
Loader { Loader {
id: delegateLoader id: delegateLoader
asynchronous: setting.asyncMessageDelegate asynchronous: MatriqueSettings.asyncMessageDelegate
source: { source: {
if (eventType == "redaction" || hidden) return "" if (eventType == "redaction" || hidden) return ""

View File

@ -2,6 +2,7 @@ import QtQuick 2.9
import QtQuick.Controls 2.2 import QtQuick.Controls 2.2
import QtQuick.Controls.Material 2.2 import QtQuick.Controls.Material 2.2
import QtQuick.Layouts 1.3 import QtQuick.Layouts 1.3
import MatriqueSettings 0.1
Rectangle { Rectangle {
property bool flat: false property bool flat: false
@ -45,7 +46,7 @@ Rectangle {
wrapMode: Label.Wrap wrapMode: Label.Wrap
linkColor: darkBackground ? "white" : Material.accent linkColor: darkBackground ? "white" : Material.accent
textFormat: setting.richText ? Text.RichText : Text.StyledText textFormat: MatriqueSettings.richText ? Text.RichText : Text.StyledText
onLinkActivated: Qt.openUrlExternally(link) onLinkActivated: Qt.openUrlExternally(link)
} }

View File

@ -6,6 +6,7 @@ import QtQuick.Controls.Material 2.2
import QtQml.Models 2.3 import QtQml.Models 2.3
import Matrique 0.1 import Matrique 0.1
import SortFilterProxyModel 0.2 import SortFilterProxyModel 0.2
import MatriqueSettings 0.1
import "qrc:/qml/component" import "qrc:/qml/component"
@ -13,7 +14,7 @@ Item {
property alias listModel: roomListProxyModel.sourceModel property alias listModel: roomListProxyModel.sourceModel
readonly property int currentIndex: roomListProxyModel.mapToSource(listView.currentIndex) readonly property int currentIndex: roomListProxyModel.mapToSource(listView.currentIndex)
readonly property var currentRoom: currentIndex != -1 ? listModel.roomAt(currentIndex) : null readonly property var currentRoom: currentIndex != -1 ? listModel.roomAt(currentIndex) : null
readonly property bool mini: setting.miniMode // Used as an indicator of whether the listform should be displayed as "Mini mode". readonly property bool mini: MatriqueSettings.miniMode // Used as an indicator of whether the listform should be displayed as "Mini mode".
signal enterRoom() signal enterRoom()
ColumnLayout { ColumnLayout {
@ -121,9 +122,14 @@ Item {
delegate: ItemDelegate { delegate: ItemDelegate {
width: parent.width width: parent.width
height: 80 height: 80
AutoMouseArea {
anchors.fill: parent
onPressed: listView.currentIndex = index onPressed: listView.currentIndex = index
onPressAndHold: roomListMenu.popup() onSecondaryClicked: roomListMenu.popup()
onClicked: category === RoomType.Invited ? inviteDialog.open() : enterRoom() onPrimaryClicked: category === RoomType.Invited ? inviteDialog.open() : enterRoom()
}
ToolTip.visible: mini && hovered ToolTip.visible: mini && hovered
ToolTip.text: name ToolTip.text: name
@ -209,7 +215,7 @@ Item {
contentItem: Label { text: "Accept this invitation?" } contentItem: Label { text: "Accept this invitation?" }
onAccepted: currentRoom.acceptInvitation() onAccepted: currentRoom.acceptInvitation()
onRejected: currentRoom.rejectInvitation() onRejected: currentRoom.forget()
} }
Menu { Menu {

View File

@ -1,19 +1,21 @@
import QtQuick 2.9 import QtQuick 2.9
import QtQuick.Controls 2.2 import QtQuick.Controls 2.2
import MatriqueSettings 0.1
Page { Page {
property alias darkTheme: themeSwitch.checked
property alias miniMode: miniModeSwitch.checked
Column { Column {
Switch { Switch {
id: themeSwitch id: themeSwitch
text: "Dark theme" text: "Dark theme"
checked: MatriqueSettings.darkTheme
onCheckedChanged: MatriqueSettings.darkTheme = checked
} }
Switch { Switch {
id: miniModeSwitch id: miniModeSwitch
text: "Mini Room List" text: "Mini Room List"
checked: MatriqueSettings.miniMode
onCheckedChanged: MatriqueSettings.miniMode = checked
} }
} }
} }

View File

@ -1,24 +1,32 @@
import QtQuick 2.9 import QtQuick 2.9
import QtQuick.Controls 2.2 import QtQuick.Controls 2.2
import MatriqueSettings 0.1
Page { Page {
property alias lazyLoad: lazyLoadSwitch.checked
property alias asyncMessageDelegate: asyncMessageDelegateSwitch.checked
property alias richText: richTextSwitch.checked
Column { Column {
Switch { Switch {
id: lazyLoadSwitch id: lazyLoadSwitch
text: "Lazy load at initial sync" text: "Lazy load at initial sync"
checked: true checked: MatriqueSettings.lazyLoad
onCheckedChanged: MatriqueSettings.lazyLoad = checked
} }
Switch { Switch {
id: asyncMessageDelegateSwitch id: asyncMessageDelegateSwitch
text: "Force loading message delegates asynchronously" text: "Force loading message delegates asynchronously"
checked: MatriqueSettings.asyncMessageDelegate
onCheckedChanged: MatriqueSettings.asyncMessageDelegate = checked
} }
Switch { Switch {
id: richTextSwitch id: richTextSwitch
text: "Use RichText instead of StyledText" text: "Use RichText instead of StyledText"
checked: MatriqueSettings.richText
onCheckedChanged: MatriqueSettings.richText = checked
}
Switch {
id: pressAndHoldSwitch
text: "Use press and hold instead of right click"
checked: MatriqueSettings.pressAndHold
onCheckedChanged: MatriqueSettings.pressAndHold = checked
} }
Button { Button {

View File

@ -2,9 +2,10 @@ import QtQuick 2.9
import QtQuick.Controls 2.2 import QtQuick.Controls 2.2
import QtQuick.Layouts 1.3 import QtQuick.Layouts 1.3
import QtQuick.Controls.Material 2.2 import QtQuick.Controls.Material 2.2
import Qt.labs.settings 1.0 as Labs
import QtGraphicalEffects 1.0 import QtGraphicalEffects 1.0
import Qt.labs.settings 1.0 as Settings
import Matrique 0.1 import Matrique 0.1
import MatriqueSettings 0.1
import "component" import "component"
import "form" import "form"
@ -20,25 +21,16 @@ ApplicationWindow {
minimumHeight: 480 minimumHeight: 480
title: qsTr("Matrique") title: qsTr("Matrique")
Material.theme: setting.darkTheme ? Material.Dark : Material.Light Material.theme: MatriqueSettings.darkTheme ? Material.Dark : Material.Light
FontLoader { id: materialFont; source: "qrc:/asset/font/material.ttf" }
Settings.Settings {
id: setting
Labs.Settings {
property alias homeserver: matriqueController.homeserver property alias homeserver: matriqueController.homeserver
property alias userID: matriqueController.userID property alias userID: matriqueController.userID
property alias token: matriqueController.token property alias token: matriqueController.token
property alias lazyLoad: settingPage.lazyLoad
property alias asyncMessageDelegate: settingPage.asyncMessageDelegate
property alias richText: settingPage.richText
property alias darkTheme: settingPage.darkTheme
property alias miniMode: settingPage.miniMode
} }
FontLoader { id: materialFont; source: "qrc:/asset/font/material.ttf" }
Controller { Controller {
id: matriqueController id: matriqueController

View File

@ -34,5 +34,9 @@
<file>qml/component/AutoImage.qml</file> <file>qml/component/AutoImage.qml</file>
<file>asset/img/icon.ico</file> <file>asset/img/icon.ico</file>
<file>asset/img/icon.icns</file> <file>asset/img/icon.icns</file>
<file>qml/component/AutoMouseArea.qml</file>
<file>qml/MatriqueSettings/MatriqueSettings.qml</file>
<file>qml/MatriqueSettings/qmldir</file>
<file>qml/MatriqueSettings/plugins.qmltypes</file>
</qresource> </qresource>
</RCC> </RCC>

View File

@ -38,6 +38,7 @@ int main(int argc, char *argv[]) {
qmlRegisterUncreatableType<RoomType>("Matrique", 0, 1, "RoomType", "ENUM"); qmlRegisterUncreatableType<RoomType>("Matrique", 0, 1, "RoomType", "ENUM");
QQmlApplicationEngine engine; QQmlApplicationEngine engine;
engine.addImportPath("qrc:/qml");
ImageProvider *m_provider = new ImageProvider(); ImageProvider *m_provider = new ImageProvider();

View File

@ -69,12 +69,7 @@ void MatriqueRoom::saveFileAs(QString eventId) {
if (!fileName.isEmpty()) downloadFile(eventId, QUrl::fromLocalFile(fileName)); if (!fileName.isEmpty()) downloadFile(eventId, QUrl::fromLocalFile(fileName));
} }
void MatriqueRoom::acceptInvitation() { setJoinState(JoinState::Join); } void MatriqueRoom::acceptInvitation() { connection()->joinRoom(id()); }
void MatriqueRoom::rejectInvitation() {
setJoinState(JoinState::Leave);
forget();
}
void MatriqueRoom::forget() { connection()->forgetRoom(id()); } void MatriqueRoom::forget() { connection()->forgetRoom(id()); }

View File

@ -57,7 +57,6 @@ class MatriqueRoom : public Room {
void chooseAndUploadFile(); void chooseAndUploadFile();
void saveFileAs(QString eventId); void saveFileAs(QString eventId);
void acceptInvitation(); void acceptInvitation();
void rejectInvitation();
void forget(); void forget();
void sendTypingNotification(bool isTyping); void sendTypingNotification(bool isTyping);
}; };