122 lines
3.1 KiB
QML
122 lines
3.1 KiB
QML
|
import QtQuick 2.0
|
||
|
import "."
|
||
|
import FlightGear.Launcher 1.0
|
||
|
|
||
|
Item {
|
||
|
id: root
|
||
|
property alias title: headerTitle.text
|
||
|
property alias contents: contentBox.children
|
||
|
property alias showAdvanced: advancedToggle.open
|
||
|
property string settingGroup: ""
|
||
|
property string summary: ""
|
||
|
readonly property bool haveAdvancedSettings: anyAdvancedSettings(contents)
|
||
|
|
||
|
|
||
|
implicitWidth: parent.width
|
||
|
implicitHeight: headerRect.height + contentBox.height + (Style.margin * 2)
|
||
|
|
||
|
signal apply();
|
||
|
|
||
|
function saveState()
|
||
|
{
|
||
|
for (var i = 0; i < contents.length; i++) {
|
||
|
contents[i].saveState();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function anyAdvancedSettings(items)
|
||
|
{
|
||
|
for (var i = 0; i < items.length; i++) {
|
||
|
if (items[i].advanced == true) return true;
|
||
|
}
|
||
|
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
// we determine the initial open/close state of the advanced section
|
||
|
// based on whether any of the advanced settings are non-default
|
||
|
function anyNonDefaultAdvancedSettings(items)
|
||
|
{
|
||
|
for (var i = 0; i < items.length; i++) {
|
||
|
var control = items[i];
|
||
|
if (control.advanced == true) {
|
||
|
if (!control.__isDefault && !control.hidden) {
|
||
|
//console.info("Non-default advanced setting:" + control.label + ","
|
||
|
// + control.defaultValue + " != " + control.value) ;
|
||
|
return true;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
Connections {
|
||
|
target: _config
|
||
|
onCollect: root.apply();
|
||
|
}
|
||
|
|
||
|
Component.onCompleted: {
|
||
|
// use this as a trigger to decide the initial open/close state
|
||
|
if (anyNonDefaultAdvancedSettings(contents)) {
|
||
|
showAdvanced = true;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
Rectangle {
|
||
|
id: headerRect
|
||
|
width: parent.width
|
||
|
height: headerTitle.height + (Style.margin * 2)
|
||
|
|
||
|
color: Style.themeColor
|
||
|
border.width: 1
|
||
|
border.color: Style.frameColor
|
||
|
|
||
|
Text {
|
||
|
id: headerTitle
|
||
|
color: "white"
|
||
|
anchors.verticalCenter: parent.verticalCenter
|
||
|
font.bold: true
|
||
|
anchors.left: parent.left
|
||
|
anchors.leftMargin: Style.inset
|
||
|
}
|
||
|
|
||
|
AdvancedSettingsToggle
|
||
|
{
|
||
|
id: advancedToggle
|
||
|
anchors.right: parent.right
|
||
|
anchors.verticalCenter: parent.verticalCenter
|
||
|
height: parent.height
|
||
|
visible: root.haveAdvancedSettings
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
MouseArea {
|
||
|
anchors.fill: contentBox
|
||
|
onClicked: {
|
||
|
// take focus back from any active control
|
||
|
root.focus = true
|
||
|
}
|
||
|
}
|
||
|
|
||
|
Column {
|
||
|
id: contentBox
|
||
|
anchors.top: headerRect.bottom
|
||
|
anchors.topMargin: Style.margin
|
||
|
width: parent.width
|
||
|
spacing: Style.margin * 2
|
||
|
|
||
|
// this is here so SettingControl 's parent (which is us)
|
||
|
// can be used to find the advanced toggle state
|
||
|
property alias showAdvanced: advancedToggle.open
|
||
|
}
|
||
|
|
||
|
// bottom spacing item
|
||
|
Item {
|
||
|
height: Style.margin
|
||
|
width: parent.width
|
||
|
anchors.top: contentBox.bottom
|
||
|
}
|
||
|
}
|