import QtQuick 2.10 import QtQuick.Controls 2.3 import QtQuick.Layouts 1.3 import de.skycoder42.QtMvvm.Core 1.1 import de.skycoder42.QtMvvm.Quick 1.1 /*! @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 */ Page { id: _settingsView /*! @brief The viewmodel to use * * @default{Injected} * * @accessors{ * @memberAc{viewModel} * @notifyAc{viewModelChanged()} * } * * @sa QtMvvm::SettingsViewModel */ 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()} * } */ property bool fullClose: false /*! @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 */ function closeAction() { return !fullClose && _settingsStack.closeAction(); } header: ContrastToolBar { id: _toolBar RowLayout { id: _toolLayout anchors.fill: parent spacing: 0 SearchBar { id: _searchBar Layout.fillWidth: true Layout.fillHeight: true title: qsTr("Settings") allowSearch: _builder.allowSearch searchToolTip: qsTr("Search in settings") } ActionButton { id: _restoreButton visible: _builder.allowRestore icon.source: "qrc:/de/skycoder42/qtmvvm/quick/icons/ic_settings_backup_restore.svg" text: qsTr("Restore settings") onClicked: _builder.restoreDefaults() } } } PresenterProgress {} StackView { id: _settingsStack anchors.fill: parent function closeAction() { if(_settingsStack.depth <= 1) return false; else { _settingsStack.pop(); return true; } } } Component { id: _overviewComponent ScrollView { id: __ovScrollView property alias model: __ovListView.model property alias showSections: __ovListView.showSections clip: true OverviewListView { id: __ovListView builder: _builder } Component.onCompleted: _settingsStack.push(__ovScrollView) } } Component { id: _sectionViewComponent ScrollView { id: __secScrollView property alias model: __secListView.model clip: true SectionListView { id: __secListView builder: _builder } Component.onCompleted: _settingsStack.push(__secScrollView) } } SettingsUiBuilder { id: _builder buildView: _settingsView viewModel: _settingsView.viewModel filterText: _searchBar.searchText onPresentOverview: _overviewComponent.incubateObject(_settingsStack, { model: model, showSections: hasSections }, Qt.Synchronous) onPresentSection: _sectionViewComponent.incubateObject(_settingsStack, { model: model }, Qt.Synchronous) onCloseSettings: { _settingsView.fullClose = true; QuickPresenter.popView(); } } }