1bf52662ae
This simplifies the launcher's rendering since the widget-based code is gone, various things get hooked up as a result. Styling fixes everywhere as well. Menubar on Linux/Windows needs to be re-added.
122 lines
3.2 KiB
QML
122 lines
3.2 KiB
QML
import QtQuick 2.4
|
|
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
|
|
font.pixelSize: Style.subHeadingFontPixelSize
|
|
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
|
|
}
|
|
}
|