114 lines
3.3 KiB
QML
114 lines
3.3 KiB
QML
import QtQuick 2.13
|
|
import QtQuick.Controls 2.13
|
|
import QtQuick.Layouts 1.13
|
|
import QtQuick.Controls.Universal 2.12
|
|
import "../../../../imports"
|
|
import "../../../../shared"
|
|
import "../../../../shared/status"
|
|
|
|
Item {
|
|
id: root
|
|
Layout.fillHeight: true
|
|
Layout.fillWidth: true
|
|
|
|
enum Theme {
|
|
System, // 0
|
|
Light, // 1
|
|
Dark // 2
|
|
}
|
|
|
|
function updateTheme(theme) {
|
|
let themeStr = Universal.theme === Universal.Dark ? "dark" : "light"
|
|
if (theme === AppearanceContainer.Theme.Light) {
|
|
themeStr = "light"
|
|
} else if (theme === AppearanceContainer.Theme.Dark) {
|
|
themeStr = "dark"
|
|
}
|
|
profileModel.changeTheme(theme)
|
|
Style.changeTheme(themeStr)
|
|
}
|
|
|
|
StyledText {
|
|
id: title
|
|
//% "Appearance setting"
|
|
text: qsTrId("appearance-setting")
|
|
anchors.left: parent.left
|
|
anchors.leftMargin: 24
|
|
anchors.top: parent.top
|
|
anchors.topMargin: 24
|
|
font.weight: Font.Bold
|
|
font.pixelSize: 20
|
|
}
|
|
|
|
RowLayout {
|
|
id: themeSetting
|
|
anchors.top: title.bottom
|
|
anchors.topMargin: 20
|
|
anchors.left: parent.left
|
|
anchors.leftMargin: 24
|
|
StyledText {
|
|
//% "Theme (Light - Dark)"
|
|
text: qsTrId("theme-(light---dark)")
|
|
}
|
|
ButtonGroup { id: appearance }
|
|
|
|
StatusRadioButton {
|
|
checked: profileModel.profile.appearance === AppearanceContainer.Theme.System
|
|
Layout.alignment: Qt.AlignRight
|
|
ButtonGroup.group: appearance
|
|
rightPadding: 15
|
|
text: qsTr("System")
|
|
onClicked: {
|
|
root.updateTheme(AppearanceContainer.Theme.System)
|
|
}
|
|
}
|
|
StatusRadioButton {
|
|
checked: profileModel.profile.appearance === AppearanceContainer.Theme.Light
|
|
Layout.alignment: Qt.AlignRight
|
|
ButtonGroup.group: appearance
|
|
rightPadding: 15
|
|
text: qsTr("Light")
|
|
onClicked: {
|
|
root.updateTheme(AppearanceContainer.Theme.Light)
|
|
}
|
|
}
|
|
StatusRadioButton {
|
|
checked: profileModel.profile.appearance === AppearanceContainer.Theme.Dark
|
|
Layout.alignment: Qt.AlignRight
|
|
ButtonGroup.group: appearance
|
|
rightPadding: 0
|
|
text: qsTr("Dark")
|
|
onClicked: {
|
|
root.updateTheme(AppearanceContainer.Theme.Dark)
|
|
}
|
|
}
|
|
// For the case where the theme was finally loaded by status-go in init(),
|
|
// update the theme in qml
|
|
Connections {
|
|
target: profileModel
|
|
onProfileChanged: {
|
|
root.updateTheme(profileModel.profile.appearance)
|
|
}
|
|
}
|
|
}
|
|
|
|
RowLayout {
|
|
property bool isCompactMode: appSettings.compactMode
|
|
id: compactModeSetting
|
|
anchors.top: themeSetting.bottom
|
|
anchors.topMargin: 20
|
|
anchors.left: parent.left
|
|
anchors.leftMargin: 24
|
|
StyledText {
|
|
//% "Chat Compact Mode"
|
|
text: qsTrId("chat-compact-mode")
|
|
}
|
|
Switch {
|
|
checked: compactModeSetting.isCompactMode
|
|
onToggled: function() {
|
|
appSettings.compactMode = !compactModeSetting.isCompactMode
|
|
}
|
|
}
|
|
}
|
|
}
|