mirror of
https://git.mirrors.martin98.com/https://github.com/Ultimaker/Cura
synced 2025-05-16 08:08:01 +08:00
152 lines
5.4 KiB
QML
152 lines
5.4 KiB
QML
import QtQuick 2.2
|
|
import QtQuick.Controls 1.1
|
|
import QtQuick.Controls.Styles 1.1
|
|
import QtQuick.Layouts 1.1
|
|
|
|
import UM 1.0 as UM
|
|
|
|
ScrollView {
|
|
id: base;
|
|
|
|
style: UM.Theme.styles.scrollview;
|
|
|
|
property Action configureSettings;
|
|
|
|
Column {
|
|
id: contents
|
|
spacing: UM.Theme.sizes.default_margin.height;
|
|
|
|
Repeater {
|
|
model: UM.Models.settingCategoriesModel;
|
|
|
|
delegate: Item {
|
|
id: delegateItem;
|
|
|
|
width: childrenRect.width;
|
|
height: childrenRect.height;
|
|
|
|
visible: model.visible;
|
|
|
|
property variant settingsModel: model.settings;
|
|
|
|
SidebarCategoryHeader {
|
|
id: categoryHeader;
|
|
|
|
width: base.viewport.width;
|
|
height: UM.Theme.sizes.section.height;
|
|
|
|
text: model.name;
|
|
iconSource: UM.Theme.icons[model.icon];
|
|
checkable: true;
|
|
}
|
|
|
|
Column {
|
|
id: settings;
|
|
|
|
anchors.top: categoryHeader.bottom;
|
|
anchors.topMargin: 0;
|
|
|
|
height: 0;
|
|
width: UM.Theme.sizes.setting.width;
|
|
spacing: UM.Theme.sizes.default_margin.height;
|
|
opacity: 0;
|
|
|
|
property real childrenHeight: {
|
|
var h = 0.0;
|
|
for(var i in children) {
|
|
var item = children[i];
|
|
h += children[i].height;
|
|
|
|
if(item.settingVisible) {
|
|
if(i - 1 > 0) {
|
|
h += spacing;
|
|
}
|
|
}
|
|
}
|
|
return h;
|
|
}
|
|
|
|
Repeater {
|
|
model: delegateItem.settingsModel;
|
|
|
|
delegate: UM.SettingItem {
|
|
id: item;
|
|
|
|
width: UM.Theme.sizes.setting.width;
|
|
|
|
height: model.visible ? UM.Theme.sizes.setting.height : 0;
|
|
Behavior on height { NumberAnimation { duration: 75; } }
|
|
opacity: model.visible ? 1 : 0;
|
|
Behavior on opacity { NumberAnimation { duration: 75; } }
|
|
|
|
enabled: categoryHeader.checked && model.visible;
|
|
|
|
property bool settingVisible: model.visible;
|
|
|
|
name: model.name;
|
|
description: model.description;
|
|
value: model.value;
|
|
unit: model.unit;
|
|
valid: model.valid;
|
|
type: model.type;
|
|
options: model.type == "enum" ? model.options : null;
|
|
key: model.key;
|
|
|
|
style: UM.Theme.styles.setting_item;
|
|
|
|
onItemValueChanged: delegateItem.settingsModel.setSettingValue(index, model.key, value);
|
|
onContextMenuRequested: contextMenu.popup();
|
|
|
|
onShowTooltip: {
|
|
position = { x: UM.Theme.sizes.default_margin.width, y: item.height }
|
|
sidebar.showTooltip(item, position, model.description);
|
|
}
|
|
onHideTooltip: sidebar.hideTooltip();
|
|
|
|
Menu {
|
|
id: contextMenu;
|
|
|
|
MenuItem {
|
|
//: Settings context menu action
|
|
text: qsTr("Hide this setting");
|
|
onTriggered: delegateItem.settingsModel.hideSetting(model.key);
|
|
}
|
|
MenuItem {
|
|
//: Settings context menu action
|
|
text: qsTr("Configure setting visiblity...");
|
|
|
|
onTriggered: if(base.configureSettings) base.configureSettings.trigger();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
states: State {
|
|
name: "expanded";
|
|
when: categoryHeader.checked;
|
|
|
|
PropertyChanges {
|
|
target: settings;
|
|
opacity: 1;
|
|
height: settings.childrenHeight;
|
|
anchors.topMargin: UM.Theme.sizes.default_margin.height;
|
|
}
|
|
}
|
|
|
|
transitions: Transition {
|
|
to: "expanded";
|
|
reversible: true;
|
|
SequentialAnimation {
|
|
ParallelAnimation {
|
|
NumberAnimation { property: "height"; duration: 75; }
|
|
NumberAnimation { property: "anchors.topMargin"; duration: 75; }
|
|
}
|
|
NumberAnimation { property: "opacity"; duration: 75; }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|