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.

272 lines
5.7 KiB

8 years ago
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
/*! @brief The view implementation for the QtMvvm::SettingsViewModel
*
* @extends QtQuick.Controls.Page
*
* @details This is the view used to present a settings view model. You can extend the class
* if you need to extend that view.
*
* @sa QtMvvm::SettingsViewModel
*/
8 years ago
Page {
id: _settingsView
/*! @brief The viewmodel to use
*
* @default{<i>Injected</i>}
*
* @accessors{
* @memberAc{viewModel}
* @notifyAc{viewModelChanged()}
* }
*
* @sa QtMvvm::SettingsViewModel
*/
8 years ago
property SettingsViewModel viewModel: null
/*! @brief Specifiy if a back action should always close the full settings
*
* @default{`false`}
*
* The settings view consists of an internal stack view to present settings pages. By
* default only one page is closed at a time. By setting this property to true, a close
* action will always close all of them.
*
* @accessors{
* @memberAc{fullClose}
* @notifyAc{fullCloseChanged()}
* }
*/
8 years ago
property bool fullClose: false
8 years ago
/*! @brief Can be called to try to close a single settings page
*
* @return type:bool `true` if a page was closed, `false` if not
*
* This method is called by the presenter to close the pages of the settings view one at
* a time.
*
* @note if SettingsView::fullClose is true, this method will always return false.
*
* @sa SettingsView::fullClose, PresentingStackView::closeAction
*/
8 years ago
function closeAction() {
8 years ago
return !fullClose && _settingsStack.closeAction();
8 years ago
}
8 years ago
header: ContrastToolBar {
8 years ago
id: _toolBar
RowLayout {
id: _toolLayout
anchors.fill: parent
spacing: 0
Item {
id: _labelContainer
Layout.fillWidth: true
8 years ago
Layout.fillHeight: true
Layout.leftMargin: 16
8 years ago
ToolBarLabel {
8 years ago
id: _titleLabel
anchors.fill: parent
leftPadding: 0
8 years ago
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
8 years ago
text: qsTr("Search in settings")
8 years ago
onClicked: toggleSearchState()
}
ActionButton {
id: _restoreButton
visible: _builder.allowRestore
icon.source: "qrc:/de/skycoder42/qtmvvm/quick/icons/ic_settings_backup_restore.svg"
8 years ago
text: qsTr("Restore settings")
onClicked: _builder.restoreDefaults()
8 years ago
}
}
}
states: [
State {
name: "title"
PropertyChanges {
target: _searchButton
8 years ago
icon.name: "search"
icon.source: "qrc:/de/skycoder42/qtmvvm/quick/icons/ic_search.svg"
8 years ago
}
PropertyChanges {
target: _titleLabel
visible: true
}
PropertyChanges {
target: _searchField
visible: false
width: 0
}
StateChangeScript {
name: "focusScript"
script: _searchField.clear();
}
},
State {
name: "search"
PropertyChanges {
target: _searchButton
8 years ago
icon.name: "gtk-close"
icon.source: "qrc:/de/skycoder42/qtmvvm/quick/icons/ic_close.svg"
8 years ago
}
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"
//! @brief Can be called to toggle the state of the search bar
8 years ago
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)
8 years ago
onCloseSettings: {
_settingsView.fullClose = true;
QuickPresenter.popView();
}
}
8 years ago
}