mirror of
https://git.mirrors.martin98.com/https://github.com/Ultimaker/Cura
synced 2025-06-30 01:55:15 +08:00
547 lines
22 KiB
QML
547 lines
22 KiB
QML
// Copyright (c) 2015 Ultimaker B.V.
|
|
// Cura is released under the terms of the AGPLv3 or higher.
|
|
|
|
import QtQuick 2.1
|
|
import QtQuick.Controls 1.1
|
|
import QtQuick.Controls.Styles 1.1
|
|
|
|
import UM 1.0 as UM
|
|
|
|
QtObject {
|
|
property Component sidebar_header_button: Component {
|
|
ButtonStyle {
|
|
background: Rectangle {
|
|
color: UM.Theme.colors.setting_control
|
|
border.width: 1
|
|
border.color: UM.Theme.colors.setting_control_border
|
|
UM.RecolorImage {
|
|
id: downArrow
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
anchors.right: parent.right
|
|
anchors.rightMargin: UM.Theme.sizes.default_margin.width
|
|
width: UM.Theme.sizes.standard_arrow.width
|
|
height: UM.Theme.sizes.standard_arrow.height
|
|
sourceSize.width: width
|
|
sourceSize.height: width
|
|
color: UM.Theme.colors.setting_category_text
|
|
source: UM.Theme.icons.arrow_bottom
|
|
}
|
|
Label {
|
|
id: sidebarComboBoxLabel
|
|
//property bool down: control.pressed || (control.checkable && control.checked);
|
|
color: UM.Theme.colors.setting_control_text
|
|
text: control.text;
|
|
elide: Text.ElideRight;
|
|
anchors.left: parent.left;
|
|
anchors.leftMargin: UM.Theme.sizes.setting_unit_margin.width
|
|
anchors.right: separationLine.left;
|
|
anchors.verticalCenter: parent.verticalCenter;
|
|
font: UM.Theme.fonts.default
|
|
}
|
|
Rectangle{
|
|
id: separationLine
|
|
width: 1
|
|
height: UM.Theme.sizes.setting_control.height
|
|
color: UM.Theme.colors.setting_control_border
|
|
anchors.right: downArrow.left
|
|
anchors.rightMargin: UM.Theme.sizes.setting_unit_margin.width + downArrow.width/2
|
|
anchors.top: parent.top
|
|
z: parent.z + 1
|
|
}
|
|
}
|
|
label: Label{}
|
|
}
|
|
}
|
|
|
|
property Component open_file_button: Component {
|
|
ButtonStyle {
|
|
background: Item{
|
|
implicitWidth: UM.Theme.sizes.button.width;
|
|
implicitHeight: UM.Theme.sizes.button.height;
|
|
Rectangle {
|
|
anchors.left: parent.right
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
color: UM.Theme.colors.button_text
|
|
width: control.hovered ? openFileLabel.width : 0;
|
|
height: openFileLabel.height
|
|
Behavior on width { NumberAnimation { duration: 100; } }
|
|
opacity: control.hovered ? 1.0 : 0.0;
|
|
Behavior on opacity { NumberAnimation { duration: 100; } }
|
|
Label {
|
|
id: openFileLabel
|
|
anchors.bottom: parent.bottom
|
|
text: control.text
|
|
font: UM.Theme.fonts.button_tooltip;
|
|
color: UM.Theme.colors.button_tooltip_text;
|
|
}
|
|
}
|
|
Rectangle {
|
|
anchors.fill: parent;
|
|
color: control.hovered ? UM.Theme.colors.load_save_button_hover : UM.Theme.colors.load_save_button
|
|
Behavior on color { ColorAnimation { duration: 50; } }
|
|
}
|
|
}
|
|
label: Item {
|
|
Image {
|
|
anchors.centerIn: parent;
|
|
source: control.iconSource;
|
|
width: UM.Theme.sizes.button_icon.width;
|
|
height: UM.Theme.sizes.button_icon.height;
|
|
sourceSize: UM.Theme.sizes.button_icon
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
property Component tool_button: Component {
|
|
ButtonStyle {
|
|
background: Item {
|
|
implicitWidth: UM.Theme.sizes.button.width;
|
|
implicitHeight: UM.Theme.sizes.button.height;
|
|
|
|
Rectangle {
|
|
id: tool_button_background
|
|
anchors.left: control.verticalTooltip ? parent.left : parent.right
|
|
anchors.verticalCenter: control.verticalTooltip ? undefined : parent.verticalCenter
|
|
anchors.top: control.verticalTooltip ? parent.bottom : undefined
|
|
opacity: control.hovered ? 1.0 : 0.0;
|
|
|
|
width: {
|
|
if (control.verticalTooltip == true){
|
|
if (label.width > parent.width)
|
|
return label.width
|
|
else
|
|
return parent.width
|
|
}
|
|
else {
|
|
if (control.hovered)
|
|
return label.width
|
|
else
|
|
return 0
|
|
}
|
|
}
|
|
height: !control.verticalTooltip ? label.height : control.hovered ? label.height: 0
|
|
|
|
Behavior on width { NumberAnimation { duration: 100; } }
|
|
Behavior on height { NumberAnimation { duration: 100; } }
|
|
Behavior on opacity { NumberAnimation { duration: 100; } }
|
|
|
|
Label {
|
|
id: label
|
|
anchors.bottom: parent.bottom
|
|
text: control.text
|
|
font: UM.Theme.fonts.button_tooltip;
|
|
color: UM.Theme.colors.button_tooltip_text;
|
|
}
|
|
}
|
|
|
|
Rectangle {
|
|
id: buttonFace;
|
|
|
|
anchors.fill: parent;
|
|
property bool down: control.pressed || (control.checkable && control.checked);
|
|
|
|
color: {
|
|
if(control.checkable && control.checked && control.hovered) {
|
|
return UM.Theme.colors.button_active_hover;
|
|
} else if(control.pressed || (control.checkable && control.checked)) {
|
|
return UM.Theme.colors.button_active;
|
|
} else if(control.hovered) {
|
|
return UM.Theme.colors.button_hover;
|
|
} else {
|
|
return UM.Theme.colors.button;
|
|
}
|
|
}
|
|
Behavior on color { ColorAnimation { duration: 50; } }
|
|
|
|
Label {
|
|
id: tool_button_arrow
|
|
opacity: !control.enabled ? 0.4 : 1.0
|
|
anchors.right: parent.right;
|
|
anchors.rightMargin: (UM.Theme.sizes.button.width - UM.Theme.sizes.button_icon.width - tool_button_arrow.width) / 2
|
|
anchors.verticalCenter: parent.verticalCenter;
|
|
text: "▼";
|
|
font: UM.Theme.fonts.small;
|
|
visible: control.menu != null;
|
|
color: UM.Theme.colors.button_text
|
|
}
|
|
}
|
|
}
|
|
|
|
label: Item {
|
|
Image {
|
|
anchors.centerIn: parent;
|
|
opacity: !control.enabled ? 0.4 : 1.0
|
|
source: control.iconSource;
|
|
width: UM.Theme.sizes.button_icon.width;
|
|
height: UM.Theme.sizes.button_icon.height;
|
|
|
|
sourceSize: UM.Theme.sizes.button_icon
|
|
}
|
|
}
|
|
}
|
|
}
|
|
property Component tool_button_panel: Component {
|
|
ButtonStyle {
|
|
background: Item {
|
|
implicitWidth: UM.Theme.sizes.button.width;
|
|
implicitHeight: UM.Theme.sizes.button.height;
|
|
|
|
Rectangle {
|
|
id: tool_button_background
|
|
anchors.top: parent.verticalCenter;
|
|
|
|
width: parent.width;
|
|
height: control.hovered ? parent.height / 2 + label.height : 0;
|
|
Behavior on height { NumberAnimation { duration: 100; } }
|
|
|
|
opacity: control.hovered ? 1.0 : 0.0;
|
|
Behavior on opacity { NumberAnimation { duration: 100; } }
|
|
|
|
Label {
|
|
id: label
|
|
anchors.bottom: parent.bottom
|
|
text: control.text
|
|
width: UM.Theme.sizes.button.width;
|
|
wrapMode: Text.WordWrap
|
|
font: UM.Theme.fonts.button_tooltip;
|
|
color: UM.Theme.colors.button_tooltip_text;
|
|
}
|
|
}
|
|
|
|
Rectangle {
|
|
id: buttonFace;
|
|
|
|
anchors.fill: parent;
|
|
|
|
property bool down: control.pressed || (control.checkable && control.checked);
|
|
|
|
color: {
|
|
if(!control.enabled) {
|
|
return UM.Theme.colors.button_disabled;
|
|
} else if(control.checkable && control.checked && control.hovered) {
|
|
return UM.Theme.colors.button_active_hover;
|
|
} else if(control.pressed || (control.checkable && control.checked)) {
|
|
return UM.Theme.colors.button_active;
|
|
} else if(control.hovered) {
|
|
return UM.Theme.colors.button_hover;
|
|
} else {
|
|
return UM.Theme.colors.button;
|
|
}
|
|
}
|
|
Behavior on color { ColorAnimation { duration: 50; } }
|
|
}
|
|
}
|
|
|
|
label: Item {
|
|
Image {
|
|
anchors.centerIn: parent;
|
|
|
|
source: control.iconSource;
|
|
width: UM.Theme.sizes.button_icon.width;
|
|
height: UM.Theme.sizes.button_icon.height;
|
|
|
|
sourceSize: UM.Theme.sizes.button_icon
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
property Component progressbar: Component{
|
|
ProgressBarStyle {
|
|
background:Rectangle {
|
|
implicitWidth: UM.Theme.sizes.message.width - (UM.Theme.sizes.default_margin.width * 2)
|
|
implicitHeight: UM.Theme.sizes.progressbar.height
|
|
color: UM.Theme.colors.progressbar_background
|
|
}
|
|
progress: Rectangle {
|
|
color: control.indeterminate ? "transparent" : UM.Theme.colors.progressbar_control
|
|
Rectangle{
|
|
color: UM.Theme.colors.progressbar_control
|
|
width: UM.Theme.sizes.progressbar_control.width
|
|
height: UM.Theme.sizes.progressbar_control.height
|
|
visible: control.indeterminate
|
|
|
|
SequentialAnimation on x {
|
|
id: xAnim
|
|
property int animEndPoint: UM.Theme.sizes.message.width - (UM.Theme.sizes.default_margin.width * 2) - UM.Theme.sizes.progressbar_control.width
|
|
running: control.indeterminate
|
|
loops: Animation.Infinite
|
|
NumberAnimation { from: 0; to: xAnim.animEndPoint; duration: 2000;}
|
|
NumberAnimation { from: xAnim.animEndPoint; to: 0; duration: 2000;}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
property Component sidebar_category: Component {
|
|
ButtonStyle {
|
|
background: Rectangle {
|
|
implicitHeight: UM.Theme.sizes.section.height;
|
|
color: {
|
|
if(control.color) {
|
|
return control.color;
|
|
} else if(!control.enabled) {
|
|
return UM.Theme.colors.setting_category_disabled;
|
|
} else if(control.hovered && control.checkable && control.checked) {
|
|
return UM.Theme.colors.setting_category_active_hover;
|
|
} else if(control.pressed || (control.checkable && control.checked)) {
|
|
return UM.Theme.colors.setting_category_active;
|
|
} else if(control.hovered) {
|
|
return UM.Theme.colors.setting_category_hover;
|
|
} else {
|
|
return UM.Theme.colors.setting_category;
|
|
}
|
|
}
|
|
Behavior on color { ColorAnimation { duration: 50; } }
|
|
}
|
|
label: Item {
|
|
anchors.fill: parent;
|
|
anchors.left: parent.left
|
|
Item{
|
|
id: icon;
|
|
anchors.left: parent.left
|
|
height: parent.height
|
|
width: UM.Theme.sizes.section_icon_column.width
|
|
UM.RecolorImage {
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
anchors.horizontalCenter: parent.horizontalCenter
|
|
color: UM.Theme.colors.setting_category_text
|
|
source: control.iconSource;
|
|
width: UM.Theme.sizes.section_icon.width;
|
|
height: UM.Theme.sizes.section_icon.height;
|
|
sourceSize.width: width + 15
|
|
sourceSize.height: width + 15
|
|
}
|
|
}
|
|
|
|
Label {
|
|
anchors {
|
|
left: icon.right;
|
|
right: parent.right;
|
|
verticalCenter: parent.verticalCenter;
|
|
}
|
|
text: control.text;
|
|
font: UM.Theme.fonts.setting_category;
|
|
color: UM.Theme.colors.setting_category_text;
|
|
fontSizeMode: Text.HorizontalFit;
|
|
minimumPointSize: 8
|
|
}
|
|
UM.RecolorImage {
|
|
id: category_arrow
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
anchors.right: parent.right
|
|
anchors.rightMargin: UM.Theme.sizes.default_margin.width * 2 - width / 2
|
|
width: UM.Theme.sizes.standard_arrow.width
|
|
height: UM.Theme.sizes.standard_arrow.height
|
|
sourceSize.width: width
|
|
sourceSize.height: width
|
|
color: UM.Theme.colors.setting_category_text
|
|
source: control.checked ? UM.Theme.icons.arrow_top : UM.Theme.icons.arrow_bottom
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
property Component scrollview: Component {
|
|
ScrollViewStyle {
|
|
decrementControl: Item { }
|
|
incrementControl: Item { }
|
|
|
|
transientScrollBars: false
|
|
|
|
scrollBarBackground: Rectangle {
|
|
implicitWidth: UM.Theme.sizes.scrollbar.width
|
|
color: UM.Theme.colors.scrollbar_background;
|
|
}
|
|
|
|
handle: Rectangle {
|
|
id: scrollViewHandle
|
|
implicitWidth: UM.Theme.sizes.scrollbar.width;
|
|
|
|
color: styleData.pressed ? UM.Theme.colors.scrollbar_handle_down : styleData.hovered ? UM.Theme.colors.scrollbar_handle_hover : UM.Theme.colors.scrollbar_handle;
|
|
Behavior on color { ColorAnimation { duration: 50; } }
|
|
}
|
|
}
|
|
}
|
|
|
|
property variant setting_item: UM.SettingItemStyle {
|
|
labelFont: UM.Theme.fonts.default;
|
|
labelColor: UM.Theme.colors.setting_control_text;
|
|
|
|
spacing: UM.Theme.sizes.default_lining.height;
|
|
fixedHeight: UM.Theme.sizes.setting.height;
|
|
|
|
controlWidth: UM.Theme.sizes.setting_control.width;
|
|
controlRightMargin: UM.Theme.sizes.setting_control_margin.width;
|
|
controlColor: UM.Theme.colors.setting_control;
|
|
controlHighlightColor: UM.Theme.colors.setting_control_highlight;
|
|
controlBorderColor: UM.Theme.colors.setting_control_border;
|
|
controlTextColor: UM.Theme.colors.setting_control_text;
|
|
controlFont: UM.Theme.fonts.default;
|
|
|
|
validationErrorColor: UM.Theme.colors.setting_validation_error;
|
|
validationWarningColor: UM.Theme.colors.setting_validation_warning;
|
|
validationOkColor: UM.Theme.colors.setting_validation_ok;
|
|
|
|
unitRightMargin: UM.Theme.sizes.setting_unit_margin.width;
|
|
unitColor: UM.Theme.colors.setting_unit;
|
|
unitFont: UM.Theme.fonts.default;
|
|
}
|
|
|
|
property Component checkbox: Component {
|
|
CheckBoxStyle {
|
|
background: Item { }
|
|
indicator: Rectangle {
|
|
implicitWidth: UM.Theme.sizes.checkbox.width;
|
|
implicitHeight: UM.Theme.sizes.checkbox.height;
|
|
|
|
color: control.hovered ? UM.Theme.colors.checkbox_hover : UM.Theme.colors.checkbox;
|
|
Behavior on color { ColorAnimation { duration: 50; } }
|
|
|
|
border.width: 1
|
|
border.color: UM.Theme.colors.checkbox_border;
|
|
|
|
Label {
|
|
anchors.centerIn: parent;
|
|
color: UM.Theme.colors.checkbox_mark;
|
|
|
|
text: "✓";
|
|
|
|
opacity: control.checked ? 1 : 0;
|
|
Behavior on opacity { NumberAnimation { duration: 100; } }
|
|
}
|
|
}
|
|
label: Label {
|
|
text: control.text;
|
|
color: UM.Theme.colors.checkbox_text;
|
|
font: UM.Theme.fonts.default;
|
|
}
|
|
}
|
|
}
|
|
|
|
property Component slider: Component {
|
|
SliderStyle {
|
|
groove: Rectangle {
|
|
implicitWidth: control.width;
|
|
implicitHeight: UM.Theme.sizes.slider_groove.height;
|
|
|
|
color: UM.Theme.colors.slider_groove;
|
|
border.width: 1;
|
|
border.color: UM.Theme.colors.slider_groove_border;
|
|
|
|
Rectangle {
|
|
anchors {
|
|
left: parent.left;
|
|
top: parent.top;
|
|
bottom: parent.bottom;
|
|
}
|
|
color: UM.Theme.colors.slider_groove_fill;
|
|
width: (control.value / (control.maximumValue - control.minimumValue)) * parent.width;
|
|
}
|
|
}
|
|
handle: Rectangle {
|
|
width: UM.Theme.sizes.slider_handle.width;
|
|
height: UM.Theme.sizes.slider_handle.height;
|
|
color: control.hovered ? UM.Theme.colors.slider_handle_hover : UM.Theme.colors.slider_handle;
|
|
Behavior on color { ColorAnimation { duration: 50; } }
|
|
}
|
|
}
|
|
}
|
|
|
|
property Component layerViewSlider: Component {
|
|
SliderStyle {
|
|
groove: Rectangle {
|
|
id: layerSliderGroove
|
|
implicitWidth: control.width;
|
|
implicitHeight: UM.Theme.sizes.slider_groove.height;
|
|
|
|
color: UM.Theme.colors.slider_groove;
|
|
border.width: 1;
|
|
border.color: UM.Theme.colors.slider_groove_border;
|
|
Rectangle {
|
|
anchors {
|
|
left: parent.left;
|
|
top: parent.top;
|
|
bottom: parent.bottom;
|
|
}
|
|
color: UM.Theme.colors.slider_groove_fill;
|
|
width: (control.value / (control.maximumValue - control.minimumValue)) * parent.width;
|
|
}
|
|
}
|
|
handle: Rectangle {
|
|
id: layerSliderControl
|
|
width: UM.Theme.sizes.slider_handle.width;
|
|
height: UM.Theme.sizes.slider_handle.height;
|
|
color: control.hovered ? UM.Theme.colors.slider_handle_hover : UM.Theme.colors.slider_handle;
|
|
Behavior on color { ColorAnimation { duration: 50; } }
|
|
TextField {
|
|
id: valueLabel
|
|
property int unremovableSpacing: 5
|
|
property string maxValue: control.maximumValue + 1
|
|
placeholderText: control.value + 1
|
|
onEditingFinished: {
|
|
if (valueLabel.text != ''){
|
|
control.value = valueLabel.text - 1
|
|
valueLabel.text = ''
|
|
valueLabel.focus = false
|
|
}
|
|
|
|
}
|
|
validator: IntValidator {bottom: 1; top: control.maximumValue + 1;}
|
|
visible: UM.LayerView.getLayerActivity && Printer.getPlatformActivity ? true : false
|
|
anchors.bottom: layerSliderControl.bottom
|
|
anchors.right: layerSliderControl.left
|
|
anchors.rightMargin: valueLabel.unremovableSpacing / 2
|
|
anchors.bottomMargin: parent.width + (UM.Theme.sizes.default_margin.width / 2)
|
|
transformOrigin: Item.BottomRight
|
|
rotation: 90
|
|
style: TextFieldStyle{
|
|
textColor: UM.Theme.colors.setting_control_text;
|
|
font: UM.Theme.fonts.default;
|
|
background: Rectangle {
|
|
radius: 0
|
|
implicitWidth: control.maxValue.length * valueLabel.font.pixelSize
|
|
implicitHeight: UM.Theme.sizes.slider_handle.height + valueLabel.unremovableSpacing
|
|
border.width: 1;
|
|
border.color: UM.Theme.colors.slider_groove_border;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
property Component text_field: Component {
|
|
TextFieldStyle {
|
|
textColor: UM.Theme.colors.setting_control_text;
|
|
font: UM.Theme.fonts.default;
|
|
|
|
background: Rectangle
|
|
{
|
|
implicitHeight: control.height;
|
|
implicitWidth: control.width;
|
|
|
|
border.width: 1;
|
|
border.color: UM.Theme.colors.setting_control_border;
|
|
|
|
color: UM.Theme.colors.setting_validation_ok;
|
|
|
|
Label {
|
|
anchors.right: parent.right;
|
|
anchors.rightMargin: UM.Theme.sizes.setting_unit_margin.width;
|
|
anchors.verticalCenter: parent.verticalCenter;
|
|
|
|
text: control.unit ? control.unit : ""
|
|
color: UM.Theme.colors.setting_unit;
|
|
font: UM.Theme.fonts.default;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|