overte/interface/resources/qml/hifi/tablet/tabletWindows/preferences/Section.qml
Alexander Ivash 740123b853 rename stylues-uit => stylesUit & controls-uit => controlsUit
note:
the idea is to make imports like 'import controlsUit 1.0' to work
with 'styles-uit'/'controls-uit' it is not possible because of two reasons:

1. import controls-uit 1.0 is invalid syntax
2. qmldir inside controls-uit is 'module controlsUit'
2018-10-18 21:05:20 +03:00

194 lines
6.6 KiB
QML

//
// Section.qml
//
// Created by Bradley Dante Ruiz on 13 Feb 2017
// Copyright 2016 High Fidelity, Inc.
//
// Distributed under the Apache License, Version 2.0.
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
//
import QtQuick 2.5
import Hifi 1.0
import "../../../../dialogs/preferences"
import controlsUit 1.0 as HiFiControls
import stylesUit 1.0
import "."
Preference {
id: root
property bool collapsable: false
property bool expanded: false
property bool isFirst: false
property bool isLast: false
property string name: "Header"
property real spacing: 8
property var sectionProperties: ({})
default property alias preferences: contentContainer.children
HifiConstants { id: hifi }
function saveAll() {
for (var i = 0; i < d.preferences.length; ++i) {
var preference = d.preferences[i];
preference.save();
}
}
function restoreAll() {
for (var i = 0; i < d.preferences.length; ++i) {
var preference = d.preferences[i];
preference.restore();
}
}
function getPreferencesHeight() {
var height = 0;
for (var index = 0; index < d.preferences.length; index++) {
height += d.preferences[index].height;
}
return height;
}
children: [ contentContainer ]
height: contentContainer.height + (contentContainer.isCollapsed ? 0 : hifi.dimensions.controlInterlineHeight)
Component.onCompleted: d.buildPreferences();
HiFiControls.TabletContentSection {
id: contentContainer
name: root.name
isFirst: root.isFirst
isCollapsible: root.collapsable
isCollapsed: !root.expanded
anchors {
left: parent.left
right: parent.right
margins: 0
}
}
QtObject {
id: d
property var editableBuilder: Component { EditablePreference { } }
property var browsableBuilder: Component { TabletBrowsablePreference { } }
property var spinnerBuilder: Component { SpinBoxPreference { } }
property var checkboxBuilder: Component { CheckBoxPreference { } }
property var sliderBuilder: Component { SliderPreference { } }
property var avatarBuilder: Component { AvatarPreference { } }
property var buttonBuilder: Component { ButtonPreference { } }
property var comboBoxBuilder: Component { ComboBoxPreference { } }
property var spinnerSliderBuilder: Component { SpinnerSliderPreference { } }
property var primaryHandBuilder: Component { PrimaryHandPreference { } }
property var radioButtonsBuilder: Component { RadioButtonsPreference { } }
property var preferences: []
property int checkBoxCount: 0
function buildPreferences() {
var categoryPreferences = Preferences.preferencesByCategory[root.name];
if (categoryPreferences) {
console.log("Category " + root.name + " with " + categoryPreferences.length + " preferences");
for (var j = 0; j < categoryPreferences.length; ++j) {
//provide component position within column
//lowest numbers on top
buildPreference(categoryPreferences[j], j);
}
}
}
function buildPreference(preference, itemNum) {
console.log("\tPreference type " + preference.type + " name " + preference.name)
var builder;
var zpos;
switch (preference.type) {
case Preference.Editable:
checkBoxCount = 0;
builder = editableBuilder;
break;
case Preference.Browsable:
checkBoxCount = 0;
builder = browsableBuilder;
break;
case Preference.Spinner:
checkBoxCount = 0;
builder = spinnerBuilder;
break;
case Preference.Slider:
checkBoxCount = 0;
builder = sliderBuilder;
break;
case Preference.Checkbox:
checkBoxCount++;
builder = checkboxBuilder;
break;
case Preference.Avatar:
checkBoxCount = 0;
builder = avatarBuilder;
break;
case Preference.Button:
checkBoxCount = 0;
builder = buttonBuilder;
break;
case Preference.ComboBox:
checkBoxCount = 0;
builder = comboBoxBuilder;
//make sure that combo boxes sitting higher will have higher z coordinate
//to be not overlapped when drop down is active
zpos = root.z + 1000 - itemNum
break;
case Preference.SpinnerSlider:
checkBoxCount = 0;
builder = spinnerSliderBuilder;
break;
case Preference.PrimaryHand:
checkBoxCount = 0;
builder = primaryHandBuilder;
break;
case Preference.RadioButtons:
checkBoxCount = 0;
builder = radioButtonsBuilder;
break;
};
if (builder) {
preferences.push(builder.createObject(contentContainer, { preference: preference, isFirstCheckBox: (checkBoxCount === 1) , z: zpos}));
var preferenceObject = preferences[preferences.length - 1];
var props = sectionProperties.hasOwnProperty(preference.name) ? sectionProperties[preference.name] : {};
for(var prop in props) {
var value = props[prop];
if(value.indexOf('.') !== -1) {
var splittedValues = value.split('.');
if(splittedValues[0] === 'parent') {
value = preferenceObject.parent[splittedValues[1]];
}
} else if(value === 'undefined') {
value = undefined;
}
if(prop.indexOf('.') !== -1) {
var splittedProps = prop.split('.');
preferenceObject[splittedProps[0]][splittedProps[1]] = value;
} else {
preferenceObject[prop] = value;
}
}
}
}
}
}