status-desktop/ui/app/AppLayouts/Profile/views/NotificationsView.qml

385 lines
14 KiB
QML
Raw Normal View History

2020-06-17 19:18:31 +00:00
import QtQuick 2.13
import QtQuick.Controls 2.13
import QtGraphicalEffects 1.13
2020-06-17 19:18:31 +00:00
import QtQuick.Layouts 1.13
import "./"
import utils 1.0
import "../../../../shared"
import "../../../../shared/status"
2020-05-27 21:28:25 +00:00
import StatusQ.Core 0.1
import StatusQ.Core.Theme 0.1
import "../popups"
import "../panels"
ScrollView {
id: root
height: parent.height
width: parent.width
contentHeight: notificationsContainer.height
clip: true
property var store
Item {
id: notificationsContainer
width: profileContainer.profileContentWidth
anchors.horizontalCenter: parent.horizontalCenter
height: this.childrenRect.height + 100
property Component mutedChatsModalComponent: MutedChatsModal {}
ButtonGroup {
id: notificationSetting
}
ButtonGroup {
id: soundSetting
}
ButtonGroup {
id: messageSetting
}
StatusSectionHeadline {
id: sectionHeadlineNotifications
2020-09-22 07:53:03 +00:00
//% "Notification preferences"
text: qsTrId("notifications-preferences")
anchors.top: parent.top
anchors.left: parent.left
anchors.right: parent.right
}
Column {
id: column
anchors.top: sectionHeadlineNotifications.bottom
anchors.topMargin: Style.current.smallPadding
anchors.left: parent.left
anchors.right: parent.right
// TODO: replace with StatusListItem
StatusRadioButtonRow {
//% "All messages"
text: qsTrId("all-messages")
buttonGroup: notificationSetting
checked: appSettings.notificationSetting === Constants.notifyAllMessages
onRadioCheckedChanged: {
if (checked) {
appSettings.notificationSetting = Constants.notifyAllMessages
}
}
}
// TODO: replace with StatusListItem
StatusRadioButtonRow {
//% "Just @mentions"
text: qsTrId("just--mentions")
buttonGroup: notificationSetting
checked: appSettings.notificationSetting === Constants.notifyJustMentions
onRadioCheckedChanged: {
if (checked) {
appSettings.notificationSetting = Constants.notifyJustMentions
}
}
}
// TODO: replace with StatusListItem
StatusRadioButtonRow {
//% "Nothing"
text: qsTrId("nothing")
buttonGroup: notificationSetting
checked: appSettings.notificationSetting === Constants.notifyNone
onRadioCheckedChanged: {
if (checked) {
appSettings.notificationSetting = Constants.notifyNone
}
}
}
}
Separator {
id: separator
anchors.top: column.bottom
anchors.topMargin: Style.current.bigPadding
anchors.left: parent.left
anchors.leftMargin: -Style.current.padding
anchors.right: parent.right
anchors.rightMargin: -Style.current.padding
}
StatusSectionHeadline {
id: sectionHeadlineSound
2021-02-18 16:36:05 +00:00
//% "Appearance"
text: qsTrId("appearance")
anchors.top: separator.bottom
anchors.left: parent.left
anchors.right: parent.right
}
Column {
id: column2
anchors.top: sectionHeadlineSound.bottom
anchors.topMargin: Style.current.smallPadding
anchors.left: parent.left
anchors.right: parent.right
width: parent.width
// TODO: replace with StatusListItem
StatusSettingsLineButton {
//% "Play a sound when receiving a notification"
2021-07-30 16:02:22 +00:00
text: qsTrId("play-a-sound-when-receiving-a-notification")
isSwitch: true
switchChecked: appSettings.notificationSoundsEnabled
onClicked: {
appSettings.notificationSoundsEnabled = checked
}
}
// TODO: replace with StatusListItem
StatusSettingsLineButton {
2021-02-18 16:36:05 +00:00
//% "Use your operating system's notifications"
2021-07-30 16:02:22 +00:00
text: qsTrId("use-your-operating-system-s-notifications")
isSwitch: true
switchChecked: appSettings.useOSNotifications
onClicked: {
appSettings.useOSNotifications = checked
}
StatusBaseText {
id: detailText
2021-02-18 16:36:05 +00:00
//% "Setting this to false will instead use Status' notification style as seen below"
text: qsTrId("setting-this-to-false-will-instead-use-status--notification-style-as-seen-below")
color: Theme.palette.baseColor1
width: parent.width
font.pixelSize: 12
wrapMode: Text.WordWrap
anchors.left: parent.left
anchors.leftMargin: Style.current.padding
anchors.bottom: parent.bottom
anchors.topMargin: 2
}
}
}
Column {
id: column3
spacing: Style.current.bigPadding
anchors.top: column2.bottom
anchors.topMargin: Style.current.padding*2
anchors.left: parent.left
anchors.right: parent.right
StatusBaseText {
2020-09-22 07:53:03 +00:00
//% "Message preview"
text: qsTrId("message-preview")
font.pixelSize: 15
anchors.left: parent.left
anchors.right: parent.right
}
Column {
anchors.left: parent.left
anchors.leftMargin: -Style.current.padding
anchors.right: parent.right
spacing: 10
NotificationAppearancePreviewPanel {
//% "Anonymous"
name: qsTrId("anonymous")
notificationTitle: "Status"
2021-02-18 16:36:05 +00:00
//% "You have a new message"
notificationMessage: qsTrId("you-have-a-new-message")
buttonGroup: messageSetting
checked: appSettings.notificationMessagePreviewSetting === Constants.notificationPreviewAnonymous
onRadioCheckedChanged: {
if (checked) {
appSettings.notificationMessagePreviewSetting = Constants.notificationPreviewAnonymous
}
}
}
NotificationAppearancePreviewPanel {
//% "Name only"
name: qsTrId("name-only")
notificationTitle: "Vitalik Buterin"
2021-02-18 16:36:05 +00:00
//% "You have a new message"
notificationMessage: qsTrId("you-have-a-new-message")
buttonGroup: messageSetting
checked: appSettings.notificationMessagePreviewSetting === Constants.notificationPreviewNameOnly
onRadioCheckedChanged: {
if (checked) {
appSettings.notificationMessagePreviewSetting = Constants.notificationPreviewNameOnly
}
}
}
NotificationAppearancePreviewPanel {
//% "Name & Message"
name: qsTrId("name---message")
notificationTitle: "Vitalik Buterin"
2021-02-18 16:36:05 +00:00
//% "Hi there! Yes, no problem, let me know if I can help."
notificationMessage: qsTrId("hi-there--yes--no-problem--let-me-know-if-i-can-help-")
buttonGroup: messageSetting
checked: appSettings.notificationMessagePreviewSetting === Constants.notificationPreviewNameAndMessage
onRadioCheckedChanged: {
if (checked) {
appSettings.notificationMessagePreviewSetting = Constants.notificationPreviewNameAndMessage
}
}
}
}
StatusBaseText {
2020-09-22 07:53:03 +00:00
//% "No preview or Advanced? Go to Notification Center"
text: qsTrId("no-preview-or-advanced--go-to-notification-center")
font.pixelSize: 15
anchors.left: parent.left
}
}
Separator {
id: separator2
anchors.top: column3.bottom
anchors.topMargin: Style.current.bigPadding
anchors.left: parent.left
anchors.leftMargin: -Style.current.padding
anchors.right: parent.right
anchors.rightMargin: -Style.current.padding
}
StatusSectionHeadline {
id: sectionHeadlineContacts
2020-09-22 07:53:03 +00:00
//% "Contacts & Users"
text: qsTrId("contacts---users")
anchors.top: separator2.bottom
anchors.left: parent.left
anchors.right: parent.right
}
Column {
id: column4
anchors.top: sectionHeadlineContacts.bottom
anchors.topMargin: Style.current.smallPadding
anchors.left: parent.left
anchors.right: parent.right
width: parent.width
// TODO: replace with StatusListItem
StatusSettingsLineButton {
//% "Notify on new requests"
text: qsTrId("notify-on-new-requests")
isSwitch: true
switchChecked: appSettings.notifyOnNewRequests
onClicked: {
appSettings.notifyOnNewRequests = checked
}
}
// TODO: replace with StatusListItem
StatusSettingsLineButton {
2020-09-22 07:53:03 +00:00
//% "Muted users"
text: qsTrId("muted-users")
2021-02-18 16:36:05 +00:00
//% "None"
currentValue: root.store.mutedChatsContacts.rowCount() > 0 ? root.store.mutedChatsContacts.rowCount() : qsTrId("none")
isSwitch: false
onClicked: {
const mutedChatsModal = notificationsContainer.mutedChatsModalComponent.createObject(notificationsContainer, {
showMutedContacts: true
})
2021-02-18 16:36:05 +00:00
//% "Muted contacts"
mutedChatsModal.title = qsTrId("muted-contacts");
2021-07-30 16:02:22 +00:00
//% "Muted contacts will appear here"
mutedChatsModal.noContentText = qsTrId("muted-contacts-will-appear-here");
mutedChatsModal.open();
}
}
// TODO: replace with StatusListItem
StatusSettingsLineButton {
2020-09-22 07:53:03 +00:00
//% "Muted chats"
text: qsTrId("muted-chats")
2021-02-18 16:36:05 +00:00
//% "None"
currentValue: root.store.mutedChats.rowCount() > 0 ? root.store.mutedChats.rowCount() : qsTrId("none")
isSwitch: false
onClicked: {
const mutedChatsModal = notificationsContainer.mutedChatsModalComponent.createObject(notificationsContainer, {
showMutedContacts: false
})
2021-02-18 16:36:05 +00:00
//% "Muted chats"
mutedChatsModal.title = qsTrId("muted-chats");
2021-07-30 16:02:22 +00:00
//% "Muted chats will appear here"
mutedChatsModal.noContentText = qsTrId("muted-chats-will-appear-here");
mutedChatsModal.open();
}
StatusBaseText {
//% "You can limit what gets shown in notifications"
text: qsTrId("you-can-limit-what-gets-shown-in-notifications")
color: Theme.palette.baseColor1
width: parent.width
font.pixelSize: 12
wrapMode: Text.WordWrap
anchors.left: parent.left
anchors.leftMargin: Style.current.padding
anchors.bottom: parent.bottom
anchors.topMargin: 2
}
}
}
Separator {
id: separator3
anchors.top: column4.bottom
anchors.topMargin: Style.current.bigPadding
anchors.left: parent.left
anchors.leftMargin: -Style.current.padding
anchors.right: parent.right
anchors.rightMargin: -Style.current.padding
}
Column {
id: column5
spacing: Style.current.smallPadding
anchors.top: separator3.bottom
anchors.topMargin: Style.current.bigPadding
anchors.left: parent.left
anchors.right: parent.right
width: parent.width
StatusBaseText {
2021-02-18 16:36:05 +00:00
//% "Reset notification settings"
text: qsTrId("reset-notification-settings")
font.pixelSize: 15
color: Theme.palette.dangerColor1
MouseArea {
anchors.fill: parent
cursorShape: Qt.PointingHandCursor
hoverEnabled: true
onEntered: {
parent.font.underline = true
}
onExited: {
parent.font.underline = false
}
onClicked: {
appSettings.notificationSetting = Constants.notifyAllMessages
appSettings.notificationSoundsEnabled = true
appSettings.notificationMessagePreviewSetting = Constants.notificationPreviewNameAndMessage
appSettings.allowNotificationsFromNonContacts = false
}
}
}
StatusBaseText {
2020-09-22 07:53:03 +00:00
//% "Restore default notification settings and unmute all chats and users"
text: qsTrId("restore-default-notification-settings-and-unmute-all-chats-and-users")
font.pixelSize: 15
color: Theme.palette.baseColor1
}
}
2020-05-27 21:28:25 +00:00
}
}