Migration of QtMvvm from github
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

228 lines
4.4 KiB

import QtQuick 2.10
import QtQuick.Controls 2.3
import QtQuick.Controls.Material 2.3
import QtQuick.Layouts 1.3
import de.skycoder42.QtMvvm.Core 1.0
import de.skycoder42.QtMvvm.Quick 1.0
Page {
id: _settingsView
property SettingsViewModel viewModel: null
property bool fullClose: false
function closeAction() {
return !fullClose && _settingsStack.closeAction();
}
header: ToolBar {
id: _toolBar
RowLayout {
id: _toolLayout
anchors.fill: parent
spacing: 0
Item {
id: _labelContainer
Layout.fillWidth: true
Layout.minimumHeight: 56
Layout.leftMargin: 10
Label {
id: _titleLabel
font.pointSize: 14
font.bold: true
elide: Label.ElideRight
horizontalAlignment: Qt.AlignLeft
verticalAlignment: Qt.AlignVCenter
anchors.fill: parent
text: qsTr("Settings")
visible: !_searchField.visible
}
TextField {
id: _searchField
horizontalAlignment: Qt.AlignLeft
verticalAlignment: Qt.AlignVCenter
anchors.right: parent.right
anchors.verticalCenter: parent.verticalCenter
height: Math.min(implicitHeight, parent.height)
width: parent.width
}
}
ActionButton {
id: _searchButton
visible: _builder.allowSearch
toolTip: qsTr("Search in settings")
onClicked: toggleSearchState()
}
ActionButton {
id: _restoreButton
visible: _builder.allowRestore
source: "image://svg/de/skycoder42/qtmvvm/quick/icons/ic_settings_backup_restore"
toolTip: qsTr("Restore settings")
onClicked: _builder.restoreDefaults()
}
}
}
states: [
State {
name: "title"
PropertyChanges {
target: _searchButton
source: "image://svg/de/skycoder42/qtmvvm/quick/icons/ic_search"
}
PropertyChanges {
target: _titleLabel
visible: true
}
PropertyChanges {
target: _searchField
visible: false
width: 0
}
StateChangeScript {
name: "focusScript"
script: _searchField.clear();
}
},
State {
name: "search"
PropertyChanges {
target: _searchButton
source: "image://svg/de/skycoder42/qtmvvm/quick/icons/ic_close"
}
PropertyChanges {
target: _titleLabel
visible: false
}
PropertyChanges {
target: _searchField
visible: true
width: _labelContainer.width
}
StateChangeScript {
name: "focusScript"
script: _searchField.forceActiveFocus();
}
}
]
transitions: [
Transition {
from: "title"
to: "search"
SequentialAnimation {
PropertyAnimation {
target: _searchField
property: "visible"
duration: 0
}
PropertyAnimation {
target: _searchField
property: "width"
duration: 250
easing.type: Easing.InOutCubic
}
PropertyAnimation {
target: _titleLabel
property: "visible"
duration: 0
}
}
},
Transition {
from: "search"
to: "title"
SequentialAnimation {
PropertyAnimation {
target: _titleLabel
property: "visible"
duration: 0
}
PropertyAnimation {
target: _searchField
property: "width"
duration: 250
easing.type: Easing.InOutCubic
}
PropertyAnimation {
target: _searchField
property: "visible"
duration: 0
}
}
}
]
state: "title"
function toggleSearchState() {
if(state == "title")
state = "search";
else
state = "title";
}
PresenterProgress {}
StackView {
id: _settingsStack
anchors.fill: parent
function closeAction() {
if(_settingsStack.depth <= 1)
return false;
else {
_settingsStack.pop();
return true;
}
}
}
Component {
id: _overviewComponent
OverviewListView {
id: __ovListView
builder: _builder
Component.onCompleted: _settingsStack.push(__ovListView)
}
}
Component {
id: _sectionViewComponent
SectionListView {
id: __secListView
builder: _builder
Component.onCompleted: _settingsStack.push(__secListView)
}
}
SettingsUiBuilder {
id: _builder
buildView: _settingsView
viewModel: _settingsView.viewModel
filterText: _searchField.text
onPresentOverview: _overviewComponent.incubateObject(_settingsStack, {
model: model,
showSections: hasSections
}, Qt.Asynchronous)
onPresentSection: _sectionViewComponent.incubateObject(_settingsStack, {
model: model
}, Qt.Asynchronous)
onCloseSettings: {
_settingsView.fullClose = true;
QuickPresenter.popView();
}
}
}