diff options
Diffstat (limited to 'qml/SettingsContainer.qml')
-rw-r--r-- | qml/SettingsContainer.qml | 338 |
1 files changed, 338 insertions, 0 deletions
diff --git a/qml/SettingsContainer.qml b/qml/SettingsContainer.qml new file mode 100644 index 0000000..216da60 --- /dev/null +++ b/qml/SettingsContainer.qml @@ -0,0 +1,338 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Kria Cluster 2D Demo. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.7 +import "./listmodels" + +SettingsContainerForm { + id: settingsContainer + + property string imageBgSrc: redTheme ? "qrc:/icons/RedHighlight.png" : + "qrc:/icons/BlueHighlight.png" + property string menuBackSrc: redTheme ? "qrc:/icons/MenuBack.png" : + "qrc:/icons/MenuBackBlue.png" + property var modelMap: ({ 0:displayModel, 1: daModel, 2: lightningModel, + 3: chimesModel, 4: convenienceModel }) + property var previousModel: mainModel + property int subMenuLevel: 0 + property string currentSetting: "" + property string currentSubSetting: "" + + onSubMenuLevelChanged: { + if (subMenuLevel === 0) { + setMainMenu(); + highlightSpeed = 600; + } else if (subMenuLevel === 1) { + currentSubSetting = ""; + listview.model = previousModel; + titleText = currentSetting; + highlightSpeed = 200; + } + } + onCurrentSettingChanged: { + titleText = currentSetting; + } + onCurrentSubSettingChanged: { + titleText = currentSubSetting; + } + + function handleMenu() { + if (subMenuLevel === 0) { + setMenu(selectedMenuIndex); + // Reset selectedMenuIndex + selectedMenuIndex = 0; + } else if (subMenuLevel === 1) { + handleSubMenu(selectedMenuIndex); + // Reset selectedMenuIndex + selectedMenuIndex = 0; + } else { + handleAction(selectedMenuIndex); + } + } + function setMainMenu() { + listview.model = mainModel; + titleText = qsTr("Settings"); + } + function setMenu(selectedIndex) { + if (selectedIndex === listview.count - 1) { + helpItem.visible = true; + } else { + currentSetting = listview.model.get(selectedIndex).name; + previousModel = modelMap[selectedMenuIndex]; + subMenuLevel++; + } + } + function handleSubMenu(selectedIndex) { + if (selectedIndex === listview.count - 1) { + subMenuLevel--; + } else { + appendMenuActions(selectedIndex); + subMenuLevel++; + } + } + function appendMenuActions(selectedIndex) { + if (listview.model === displayModel) { + if (selectedIndex === 0) { + listview.model = displayColorModel + } else { + listview.model = displayUnitModel + } + } else if (listview.model === daModel) { + currentSubSetting = listview.model.get(selectedIndex).name; + if (selectedIndex === 0) { + listview.model = daESCModel; + } else { + listview.model = daTrafficModel;} + } else if (listview.model === lightningModel) { + currentSubSetting = listview.model.get(selectedIndex).name; + if (selectedIndex === 0) { + listview.model = lightningAutoModel; + } else { + listview.model = lightningHdlampModel; + } + } else if (listview.model === chimesModel) { + currentSubSetting = listview.model.get(selectedIndex).name; + if (selectedIndex === 0) { + listview.model = chimesParkModel; + } else if (selectedIndex === 1) { + listview.model = chimesInfoModel; + } else { + listview.model = chimesWarningModel; + } + } else if (listview.model === convenienceModel) { + currentSubSetting = listview.model.get(selectedIndex).name; + if (selectedIndex === 0) { + listview.model = convenienceAuxModel; + } else { + listview.model = convenienceParkHeaterModel + } + } + } + function handleAction(selectedIndex) { + if (selectedIndex === listview.count -1) { + subMenuLevel--; + } else { + var selectedOption = listview.model.get(selectedIndex).name; + if (listview.model === displayColorModel) { + redTheme = selectedOption === qsTr("Red") ? true : false + } else if (listview.model === displayUnitModel) { + useMetric = selectedOption === qsTr("Kph") ? true : false + } else if (listview.model === daESCModel) { + esc = selectedOption; + } else if (listview.model === daTrafficModel) { + trafficSigns = selectedOption; + } else if (listview.model === lightningAutoModel) { + autoHighBeam = selectedOption; + } else if (listview.model === lightningHdlampModel) { + hdLampDelay = selectedOption; + } else if (listview.model === chimesParkModel) { + chimesPark = selectedOption; + } else if (listview.model === chimesInfoModel) { + chimesInfo = selectedOption; + } else if (listview.model === chimesWarningModel) { + chimesWarning = selectedOption; + } else if (listview.model === convenienceAuxModel) { + auxHeater = selectedOption; + } else if (listview.model === convenienceParkHeaterModel) { + parkHeater = selectedOption; + } + } + } + function getCheckVisibility(itemName) { + var result = false; + if (listview.model === displayColorModel) { + if (itemName === qsTr("Red") && redTheme) { + result = true; + } else if (itemName === qsTr("Blue") && !redTheme) { + result = true; + } + } else if (listview.model === displayUnitModel) { + if (itemName === qsTr("Kph") && useMetric) { + result = true; + } else if (itemName === qsTr("Mph") && !useMetric) { + result = true; + } + } else if (listview.model === daESCModel) { + return itemName === esc ? true : false; + } else if (listview.model === daTrafficModel) { + return itemName === trafficSigns ? true : false; + } else if (listview.model === lightningAutoModel) { + return itemName === autoHighBeam ? true : false; + } else if (listview.model === lightningHdlampModel) { + return itemName === hdLampDelay ? true : false; + } else if (listview.model === chimesParkModel) { + return itemName === chimesPark ? true : false; + } else if (listview.model === chimesInfoModel) { + return itemName === chimesInfo ? true : false; + } else if (listview.model === chimesWarningModel) { + return itemName === chimesWarning ? true : false; + } else if (listview.model === convenienceAuxModel) { + return itemName === auxHeater ? true : false; + } else if (listview.model === convenienceParkHeaterModel) { + return itemName === parkHeater ? true : false; + } + return result; + } + + Component { + id: settingsListDelegate + Item { + width: listview.width + height: 100 + Text { + id: itemText + text: name + visible: name !== qsTr("Back") + color: "#ffffff" + opacity: itemOpacity + font.pixelSize: 50 + anchors.verticalCenter: parent.verticalCenter + anchors.horizontalCenter: parent.horizontalCenter + } + Image { + id: backIcon + source: menuBackSrc + visible: name === qsTr("Back") + fillMode: Image.PreserveAspectFit + anchors.verticalCenter: parent.verticalCenter + anchors.horizontalCenter: parent.horizontalCenter + } + Text { + id: checkMark + text: "\u2713" + visible: getCheckVisibility(itemText.text) + color: "#ffffff" + opacity: itemOpacity + font.pixelSize: 50 + anchors.verticalCenter: parent.verticalCenter + anchors.right: itemText.left + anchors.rightMargin: 20 + } + MouseArea { + anchors.fill: parent + onClicked: { + if (selectedMenuIndex !== index) { + selectedMenuIndex = index; + highlightTimer.start(); + } else { + selectedMenuIndex = index; + handleMenu(); + } + } + } + } + } + + Timer { + id: highlightTimer + interval: highlightSpeed === 200 ? 500 : 1000 + onTriggered: { handleMenu(); } + } + + SettingsMainModel { + id: mainModel + } + + SettingsDisplayModel { + id: displayModel + } + DisplayColorModel { + id: displayColorModel + } + DisplayUnitsModel { + id: displayUnitModel + } + + SettingsDriverAssistModel { + id: daModel + } + DriverAssistESCModel { + id: daESCModel + } + DriverAssistTrafficSignsModel { + id: daTrafficModel + } + + SettingsLightningModel { + id: lightningModel + } + LightningAutoHighbeamModel { + id: lightningAutoModel + } + LightningHdlampModel { + id: lightningHdlampModel + } + + SettingsChimesModel { + id: chimesModel + } + ChimesParkSlotModel { + id: chimesParkModel + } + ChimesInformationModel { + id: chimesInfoModel + } + ChimesWarningModel { + id: chimesWarningModel + } + OnOffModel { + id: onOffModel + } + + SettingsConvenienceModel { + id: convenienceModel + } + ConvenienceAuxModel { + id: convenienceAuxModel + } + ConvenienceParkHeaterModel { + id: convenienceParkHeaterModel + } +} |