harbour-nextcloudnotes/qml/pages/SettingsPage.qml
2018-12-04 17:24:45 +01:00

192 lines
7.8 KiB
QML

import QtQuick 2.0
import Sailfish.Silica 1.0
import Nemo.Configuration 1.0
Page {
id: page
SilicaFlickable {
id: flickable
anchors.fill: parent
contentHeight: column.height
PullDownMenu {
MenuItem {
text: qsTr("About")
onClicked: pageStack.push(Qt.resolvedUrl("AboutPage.qml"))
}
}
Column {
id: column
width: parent.width
spacing: Theme.paddingMedium
PageHeader {
title: qsTr("Settings")
}
SectionHeader {
text: qsTr("Accounts")
}
Label {
id: noAccountsLabel
visible: nextcloudAccounts.count <= 0
text: qsTr("No Nextcloud account yet")
font.pixelSize: Theme.fontSizeLarge
color: Theme.secondaryHighlightColor
anchors.horizontalCenter: parent.horizontalCenter
}
Repeater {
model: nextcloudAccounts.count
delegate: ListItem {
id: accountListItem
contentHeight: accountTextSwitch.height
highlighted: accountTextSwitch.down
TextSwitch {
id: accountTextSwitch
automaticCheck: false
checked: index === appSettings.currentAccount
text: nextcloudAccounts.itemAt(index).name.length <= 0 ? qsTr("Unnamed account") : nextcloudAccounts.itemAt(index).name
description: nextcloudAccounts.itemAt(index).username + "@" + nextcloudAccounts.itemAt(index).server// : qsTr("Press and hold to configure")
onClicked: appSettings.currentAccount = index
onPressAndHold: openMenu()
}
menu: ContextMenu {
MenuItem {
text: qsTr("Edit")
onClicked: {
var login = pageStack.push(Qt.resolvedUrl("LoginDialog.qml"), { account: index })
login.accepted.connect(function() {
})
login.rejected.connect(function() {
})
}
}
MenuItem {
text: qsTr("Delete")
onClicked: {
accountListItem.remorseAction(qsTr("Deleting account"), function() {
console.log("Deleting " + nextcloudAccounts.itemAt(index).uuid)
nextcloudAccounts.remove(nextcloudAccounts.itemAt(index).uuid)
//nextcloudAccounts.itemAt(index).clear()
//nextcloudAccounts.pop()
})
}
}
}
}
}
Button {
text: qsTr("Add account")
anchors.horizontalCenter: parent.horizontalCenter
onClicked: {
nextcloudAccounts.add()
var login = pageStack.push(Qt.resolvedUrl("LoginDialog.qml"), { account:nextcloudAccounts.count-1 })
login.accepted.connect(function() {
console.log("Adding account " + nextcloudAccounts.itemAt(login.account).name)
if (appSettings.currentAccount < 0)
appSettings.currentAccount = nextcloudUUIDs.value.length-1
appWindow.update()
})
login.rejected.connect(function() {
nextcloudAccounts.pop()
})
}
}
SectionHeader {
text: qsTr("Synchronization")
}
ComboBox {
id: autoSyncComboBox
label: qsTr("Auto-Sync")
description: qsTr("Periodically pull notes from the server")
menu: ContextMenu {
Repeater {
id: autoSyncIntervalRepeater
model: [0, 3, 5, 10, 20, 30, 60, 120, 300, 600]
MenuItem {
text: modelData === 0 ?
qsTr("Disabled") : (qsTr("every") + " " +
(parseInt(modelData / 60) ?
(parseInt(modelData / 60) + " " + qsTr("Minutes")) :
(modelData + " " + qsTr("Seconds"))))
Component.onCompleted: {
if (modelData === appSettings.autoSyncInterval) {
autoSyncComboBox.currentIndex = index
}
}
}
}
}
onCurrentIndexChanged: appSettings.autoSyncInterval = autoSyncIntervalRepeater.model[currentIndex]
}
SectionHeader {
text: qsTr("Appearance")
}
ComboBox {
id: sortByComboBox
property var names: [qsTr("Last edited"), qsTr("Category"), qsTr("Title alphabetically")]
label: qsTr("Sort notes by")
description: qsTr("This will also change how the notes are grouped")
menu: ContextMenu {
Repeater {
id: sortByRepeater
model: ["date", "category", "title"]
MenuItem {
text: sortByComboBox.names[index]
//enabled: modelData !== "title"
Component.onCompleted: {
if (modelData === appSettings.sortBy) {
sortByComboBox.currentIndex = index
}
}
}
}
}
onCurrentIndexChanged: {
appSettings.sortBy = sortByRepeater.model[currentIndex]
}
}
TextSwitch {
text: qsTr("Show separator")
description: qsTr("Show a separator line between the notes")
checked: appSettings.showSeparator
onCheckedChanged: appSettings.showSeparator = checked
}
Slider {
width: parent.width
minimumValue: 0
maximumValue: 20
stepSize: 1
value: appSettings.previewLineCount
valueText: sliderValue + " " + qsTr("lines")
label: qsTr("Number of lines in the preview")
onSliderValueChanged: appSettings.previewLineCount = sliderValue
}
SectionHeader {
text: qsTr("Editing")
}
TextSwitch {
text: qsTr("Monospaced font")
description: qsTr("Use a monospeced font to edit a note")
checked: appSettings.useMonoFont
onCheckedChanged: appSettings.useMonoFont = checked
}
TextSwitch {
text: qsTr("Capital 'X' in checkboxes")
description: qsTr("For interoperability with other apps such as Joplin")
checked: appSettings.useCapitalX
onCheckedChanged: appSettings.useCapitalX = checked
}
}
VerticalScrollDecorator {}
}
allowedOrientations: defaultAllowedOrientations
}