mirror of
https://github.com/Ultimaker/Cura.git
synced 2025-12-11 16:00:47 -07:00
WIP: MachineSettings Printer tab
This commit is contained in:
parent
6c6ccb16b8
commit
449740a631
6 changed files with 524 additions and 364 deletions
|
|
@ -34,6 +34,7 @@ UM.TooltipArea
|
|||
property alias labelText: fieldLabel.text
|
||||
property alias labelFont: fieldLabel.font
|
||||
property alias labelWidth: fieldLabel.width
|
||||
property alias optionModel: comboBox.model
|
||||
|
||||
property string tooltipText: propertyProvider.properties.description
|
||||
|
||||
|
|
@ -50,70 +51,68 @@ UM.TooltipArea
|
|||
watchedProperties: [ "value", "options", "description" ]
|
||||
}
|
||||
|
||||
Row
|
||||
Label
|
||||
{
|
||||
spacing: UM.Theme.getSize("default_margin").width
|
||||
id: fieldLabel
|
||||
anchors.left: parent.left
|
||||
anchors.verticalCenter: comboBox.verticalCenter
|
||||
visible: text != ""
|
||||
font: UM.Theme.getFont("medium")
|
||||
renderType: Text.NativeRendering
|
||||
}
|
||||
|
||||
Label
|
||||
ListModel
|
||||
{
|
||||
id: defaultOptionsModel
|
||||
Component.onCompleted:
|
||||
{
|
||||
id: fieldLabel
|
||||
anchors.verticalCenter: comboBox.verticalCenter
|
||||
visible: text != ""
|
||||
font: UM.Theme.getFont("medium")
|
||||
renderType: Text.NativeRendering
|
||||
}
|
||||
|
||||
ListModel
|
||||
{
|
||||
id: optionsModel
|
||||
Component.onCompleted:
|
||||
// Options come in as a string-representation of an OrderedDict
|
||||
var options = propertyProvider.properties.options.match(/^OrderedDict\(\[\((.*)\)\]\)$/)
|
||||
if (options)
|
||||
{
|
||||
// Options come in as a string-representation of an OrderedDict
|
||||
var options = propertyProvider.properties.options.match(/^OrderedDict\(\[\((.*)\)\]\)$/)
|
||||
if (options)
|
||||
options = options[1].split("), (")
|
||||
for (var i = 0; i < options.length; i++)
|
||||
{
|
||||
options = options[1].split("), (")
|
||||
for (var i = 0; i < options.length; i++)
|
||||
{
|
||||
var option = options[i].substring(1, options[i].length - 1).split("', '")
|
||||
optionsModel.append({text: option[1], value: option[0]})
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
CuraComboBox
|
||||
{
|
||||
id: comboBox
|
||||
width: comboBoxWithOptions.controlWidth
|
||||
height: comboBoxWithOptions.controlHeight
|
||||
model: optionsModel
|
||||
textRole: "text"
|
||||
|
||||
currentIndex:
|
||||
{
|
||||
var currentValue = propertyProvider.properties.value
|
||||
var index = 0
|
||||
for (var i = 0; i < model.count; i++)
|
||||
{
|
||||
if (model.get(i).value == currentValue)
|
||||
{
|
||||
index = i
|
||||
break
|
||||
}
|
||||
}
|
||||
return index
|
||||
}
|
||||
|
||||
onActivated:
|
||||
{
|
||||
if(propertyProvider.properties.value != model.get(index).value)
|
||||
{
|
||||
propertyProvider.setPropertyValue("value", model.get(index).value)
|
||||
forceUpdateOnChangeFunction()
|
||||
afterOnActivateFunction()
|
||||
var option = options[i].substring(1, options[i].length - 1).split("', '")
|
||||
defaultOptionsModel.append({text: option[1], value: option[0]})
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
CuraComboBox
|
||||
{
|
||||
id: comboBox
|
||||
anchors.left: fieldLabel.right
|
||||
anchors.leftMargin: UM.Theme.getSize("default_margin").width
|
||||
width: comboBoxWithOptions.controlWidth
|
||||
height: comboBoxWithOptions.controlHeight
|
||||
model: defaultOptionsModel
|
||||
textRole: "text"
|
||||
|
||||
currentIndex:
|
||||
{
|
||||
var currentValue = propertyProvider.properties.value
|
||||
var index = 0
|
||||
for (var i = 0; i < model.count; i++)
|
||||
{
|
||||
if (model.get(i).value == currentValue)
|
||||
{
|
||||
index = i
|
||||
break
|
||||
}
|
||||
}
|
||||
return index
|
||||
}
|
||||
|
||||
onActivated:
|
||||
{
|
||||
if(propertyProvider.properties.value != model.get(index).value)
|
||||
{
|
||||
propertyProvider.setPropertyValue("value", model.get(index).value)
|
||||
forceUpdateOnChangeFunction()
|
||||
afterOnActivateFunction()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -14,12 +14,10 @@ import Cura 1.1 as Cura
|
|||
//
|
||||
UM.TooltipArea
|
||||
{
|
||||
id: gcodeTextArea
|
||||
id: control
|
||||
|
||||
UM.I18nCatalog { id: catalog; name: "cura"; }
|
||||
|
||||
height: childrenRect.height
|
||||
width: childrenRect.width
|
||||
text: tooltip
|
||||
|
||||
property alias containerStackId: propertyProvider.containerStackId
|
||||
|
|
@ -28,22 +26,57 @@ UM.TooltipArea
|
|||
|
||||
property string tooltip: propertyProvider.properties.description
|
||||
|
||||
property alias labelText: titleLabel.text
|
||||
property alias labelFont: titleLabel.font
|
||||
|
||||
UM.SettingPropertyProvider
|
||||
{
|
||||
id: propertyProvider
|
||||
watchedProperties: [ "value", "description" ]
|
||||
}
|
||||
|
||||
// TODO: put label here
|
||||
Label // Title Label
|
||||
{
|
||||
id: titleLabel
|
||||
anchors.top: parent.top
|
||||
anchors.left: parent.left
|
||||
font: UM.Theme.getFont("medium_bold")
|
||||
renderType: Text.NativeRendering
|
||||
}
|
||||
|
||||
TextArea
|
||||
{
|
||||
id: gcodeArea
|
||||
width: areaWidth
|
||||
height: areaHeight
|
||||
id: gcodeTextArea
|
||||
anchors.top: titleLabel.bottom
|
||||
anchors.topMargin: UM.Theme.getSize("default_margin").height
|
||||
anchors.bottom: parent.bottom
|
||||
anchors.left: parent.left
|
||||
anchors.right: parent.right
|
||||
|
||||
hoverEnabled: true
|
||||
selectByMouse: true
|
||||
|
||||
font: UM.Theme.getFont("fixed")
|
||||
renderType: Text.NativeRendering
|
||||
text: (propertyProvider.properties.value) ? propertyProvider.properties.value : ""
|
||||
wrapMode: TextEdit.NoWrap
|
||||
|
||||
background: Rectangle
|
||||
{
|
||||
border.color:
|
||||
{
|
||||
if (!gcodeTextArea.enabled)
|
||||
{
|
||||
return UM.Theme.getColor("setting_control_disabled_border")
|
||||
}
|
||||
if (gcodeTextArea.hovered || gcodeTextArea.activeFocus)
|
||||
{
|
||||
return UM.Theme.getColor("setting_control_border_highlight")
|
||||
}
|
||||
return UM.Theme.getColor("setting_control_border")
|
||||
}
|
||||
}
|
||||
|
||||
onActiveFocusChanged:
|
||||
{
|
||||
if (!activeFocus)
|
||||
|
|
|
|||
|
|
@ -59,147 +59,144 @@ UM.TooltipArea
|
|||
watchedProperties: [ "value", "description" ]
|
||||
}
|
||||
|
||||
Row
|
||||
Label
|
||||
{
|
||||
id: itemRow
|
||||
spacing: UM.Theme.getSize("default_margin").width
|
||||
id: fieldLabel
|
||||
anchors.left: parent.left
|
||||
anchors.verticalCenter: textFieldWithUnit.verticalCenter
|
||||
visible: text != ""
|
||||
font: UM.Theme.getFont("medium")
|
||||
renderType: Text.NativeRendering
|
||||
}
|
||||
|
||||
TextField
|
||||
{
|
||||
id: textFieldWithUnit
|
||||
anchors.left: fieldLabel.right
|
||||
anchors.leftMargin: UM.Theme.getSize("default_margin").width
|
||||
|
||||
width: numericTextFieldWithUnit.controlWidth
|
||||
height: numericTextFieldWithUnit.controlHeight
|
||||
|
||||
// Background is a rounded-cornered box with filled color as state indication (normal, warning, error, etc.)
|
||||
background: Rectangle
|
||||
{
|
||||
anchors.fill: parent
|
||||
anchors.margins: Math.round(UM.Theme.getSize("default_lining").width)
|
||||
radius: UM.Theme.getSize("setting_control_radius").width
|
||||
|
||||
border.color:
|
||||
{
|
||||
if (!textFieldWithUnit.enabled)
|
||||
{
|
||||
return UM.Theme.getColor("setting_control_disabled_border")
|
||||
}
|
||||
switch (propertyProvider.properties.validationState)
|
||||
{
|
||||
case "ValidatorState.Exception":
|
||||
case "ValidatorState.MinimumError":
|
||||
case "ValidatorState.MaximumError":
|
||||
return UM.Theme.getColor("setting_validation_error")
|
||||
case "ValidatorState.MinimumWarning":
|
||||
case "ValidatorState.MaximumWarning":
|
||||
return UM.Theme.getColor("setting_validation_warning")
|
||||
}
|
||||
// Validation is OK.
|
||||
if (textFieldWithUnit.hovered || textFieldWithUnit.activeFocus)
|
||||
{
|
||||
return UM.Theme.getColor("setting_control_border_highlight")
|
||||
}
|
||||
return UM.Theme.getColor("setting_control_border")
|
||||
}
|
||||
|
||||
color:
|
||||
{
|
||||
if (!textFieldWithUnit.enabled)
|
||||
{
|
||||
return UM.Theme.getColor("setting_control_disabled")
|
||||
}
|
||||
switch (propertyProvider.properties.validationState)
|
||||
{
|
||||
case "ValidatorState.Exception":
|
||||
case "ValidatorState.MinimumError":
|
||||
case "ValidatorState.MaximumError":
|
||||
return UM.Theme.getColor("setting_validation_error_background")
|
||||
case "ValidatorState.MinimumWarning":
|
||||
case "ValidatorState.MaximumWarning":
|
||||
return UM.Theme.getColor("setting_validation_warning_background")
|
||||
case "ValidatorState.Valid":
|
||||
return UM.Theme.getColor("setting_validation_ok")
|
||||
default:
|
||||
return UM.Theme.getColor("setting_control")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
hoverEnabled: true
|
||||
selectByMouse: true
|
||||
font: UM.Theme.getFont("default")
|
||||
renderType: Text.NativeRendering
|
||||
|
||||
// When the textbox gets focused by TAB, select all text
|
||||
onActiveFocusChanged:
|
||||
{
|
||||
if (activeFocus && (focusReason == Qt.TabFocusReason || focusReason == Qt.BacktabFocusReason))
|
||||
{
|
||||
selectAll()
|
||||
}
|
||||
}
|
||||
|
||||
text:
|
||||
{
|
||||
const value = propertyProvider.properties.value
|
||||
return value ? value : ""
|
||||
}
|
||||
validator: RegExpValidator { regExp: allowNegativeValue ? /-?[0-9\.,]{0,6}/ : /[0-9\.,]{0,6}/ }
|
||||
|
||||
onEditingFinished: editingFinishedFunction()
|
||||
|
||||
property var editingFinishedFunction: defaultEditingFinishedFunction
|
||||
|
||||
function defaultEditingFinishedFunction()
|
||||
{
|
||||
if (propertyProvider && text != propertyProvider.properties.value)
|
||||
{
|
||||
// For some properties like the extruder-compatible material diameter, they need to
|
||||
// trigger many updates, such as the available materials, the current material may
|
||||
// need to be switched, etc. Although setting the diameter can be done directly via
|
||||
// the provider, all the updates that need to be triggered then need to depend on
|
||||
// the metadata update, a signal that can be fired way too often. The update functions
|
||||
// can have if-checks to filter out the irrelevant updates, but still it incurs unnecessary
|
||||
// overhead.
|
||||
// The ExtruderStack class has a dedicated function for this call "setCompatibleMaterialDiameter()",
|
||||
// and it triggers the diameter update signals only when it is needed. Here it is optionally
|
||||
// choose to use setCompatibleMaterialDiameter() or other more specific functions that
|
||||
// are available.
|
||||
if (setValueFunction !== null)
|
||||
{
|
||||
setValueFunction(text)
|
||||
}
|
||||
else
|
||||
{
|
||||
propertyProvider.setPropertyValue("value", text)
|
||||
}
|
||||
forceUpdateOnChangeFunction()
|
||||
afterOnEditingFinished()
|
||||
}
|
||||
}
|
||||
|
||||
Label
|
||||
{
|
||||
id: fieldLabel
|
||||
anchors.verticalCenter: textFieldWithUnit.verticalCenter
|
||||
visible: text != ""
|
||||
font: UM.Theme.getFont("medium")
|
||||
id: unitLabel
|
||||
anchors.right: parent.right
|
||||
anchors.rightMargin: Math.round(UM.Theme.getSize("setting_unit_margin").width)
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
text: unitText
|
||||
textFormat: Text.PlainText
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
renderType: Text.NativeRendering
|
||||
}
|
||||
|
||||
TextField
|
||||
{
|
||||
id: textFieldWithUnit
|
||||
|
||||
width: numericTextFieldWithUnit.controlWidth
|
||||
height: numericTextFieldWithUnit.controlHeight
|
||||
|
||||
// Background is a rounded-cornered box with filled color as state indication (normal, warning, error, etc.)
|
||||
background: Rectangle
|
||||
{
|
||||
anchors.fill: parent
|
||||
anchors.margins: Math.round(UM.Theme.getSize("default_lining").width)
|
||||
radius: UM.Theme.getSize("setting_control_radius").width
|
||||
|
||||
border.color:
|
||||
{
|
||||
if (!textFieldWithUnit.enabled)
|
||||
{
|
||||
return UM.Theme.getColor("setting_control_disabled_border")
|
||||
}
|
||||
switch (propertyProvider.properties.validationState)
|
||||
{
|
||||
case "ValidatorState.Exception":
|
||||
case "ValidatorState.MinimumError":
|
||||
case "ValidatorState.MaximumError":
|
||||
return UM.Theme.getColor("setting_validation_error")
|
||||
case "ValidatorState.MinimumWarning":
|
||||
case "ValidatorState.MaximumWarning":
|
||||
return UM.Theme.getColor("setting_validation_warning")
|
||||
}
|
||||
// Validation is OK.
|
||||
if (textFieldWithUnit.hovered || textFieldWithUnit.activeFocus)
|
||||
{
|
||||
return UM.Theme.getColor("setting_control_border_highlight")
|
||||
}
|
||||
return UM.Theme.getColor("setting_control_border")
|
||||
}
|
||||
|
||||
color:
|
||||
{
|
||||
if (!textFieldWithUnit.enabled)
|
||||
{
|
||||
return UM.Theme.getColor("setting_control_disabled")
|
||||
}
|
||||
switch (propertyProvider.properties.validationState)
|
||||
{
|
||||
case "ValidatorState.Exception":
|
||||
case "ValidatorState.MinimumError":
|
||||
case "ValidatorState.MaximumError":
|
||||
return UM.Theme.getColor("setting_validation_error_background")
|
||||
case "ValidatorState.MinimumWarning":
|
||||
case "ValidatorState.MaximumWarning":
|
||||
return UM.Theme.getColor("setting_validation_warning_background")
|
||||
case "ValidatorState.Valid":
|
||||
return UM.Theme.getColor("setting_validation_ok")
|
||||
default:
|
||||
return UM.Theme.getColor("setting_control")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
hoverEnabled: true
|
||||
selectByMouse: true
|
||||
color: UM.Theme.getColor("setting_unit")
|
||||
font: UM.Theme.getFont("default")
|
||||
renderType: Text.NativeRendering
|
||||
|
||||
// When the textbox gets focused by TAB, select all text
|
||||
onActiveFocusChanged:
|
||||
{
|
||||
if (activeFocus && (focusReason == Qt.TabFocusReason || focusReason == Qt.BacktabFocusReason))
|
||||
{
|
||||
selectAll()
|
||||
}
|
||||
}
|
||||
|
||||
text:
|
||||
{
|
||||
const value = propertyProvider.properties.value
|
||||
return value ? value : ""
|
||||
}
|
||||
validator: RegExpValidator { regExp: allowNegativeValue ? /-?[0-9\.,]{0,6}/ : /[0-9\.,]{0,6}/ }
|
||||
|
||||
onEditingFinished: editingFinishedFunction()
|
||||
|
||||
property var editingFinishedFunction: defaultEditingFinishedFunction
|
||||
|
||||
function defaultEditingFinishedFunction()
|
||||
{
|
||||
if (propertyProvider && text != propertyProvider.properties.value)
|
||||
{
|
||||
// For some properties like the extruder-compatible material diameter, they need to
|
||||
// trigger many updates, such as the available materials, the current material may
|
||||
// need to be switched, etc. Although setting the diameter can be done directly via
|
||||
// the provider, all the updates that need to be triggered then need to depend on
|
||||
// the metadata update, a signal that can be fired way too often. The update functions
|
||||
// can have if-checks to filter out the irrelevant updates, but still it incurs unnecessary
|
||||
// overhead.
|
||||
// The ExtruderStack class has a dedicated function for this call "setCompatibleMaterialDiameter()",
|
||||
// and it triggers the diameter update signals only when it is needed. Here it is optionally
|
||||
// choose to use setCompatibleMaterialDiameter() or other more specific functions that
|
||||
// are available.
|
||||
if (setValueFunction !== null)
|
||||
{
|
||||
setValueFunction(text)
|
||||
}
|
||||
else
|
||||
{
|
||||
propertyProvider.setPropertyValue("value", text)
|
||||
}
|
||||
forceUpdateOnChangeFunction()
|
||||
afterOnEditingFinished()
|
||||
}
|
||||
}
|
||||
|
||||
Label
|
||||
{
|
||||
id: unitLabel
|
||||
anchors.right: parent.right
|
||||
anchors.rightMargin: Math.round(UM.Theme.getSize("setting_unit_margin").width)
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
text: unitText
|
||||
textFormat: Text.PlainText
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
renderType: Text.NativeRendering
|
||||
color: UM.Theme.getColor("setting_unit")
|
||||
font: UM.Theme.getFont("default")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -30,8 +30,9 @@ UM.TooltipArea
|
|||
property alias settingKey: propertyProvider.key
|
||||
property alias settingStoreIndex: propertyProvider.storeIndex
|
||||
|
||||
property alias labelText: checkBox.text
|
||||
property alias labelFont: checkBox.font
|
||||
property alias labelText: fieldLabel.text
|
||||
property alias labelFont: fieldLabel.font
|
||||
property alias labelWidth: fieldLabel.width
|
||||
|
||||
property string tooltip: propertyProvider.properties.description
|
||||
|
||||
|
|
@ -47,12 +48,24 @@ UM.TooltipArea
|
|||
watchedProperties: [ "value", "description" ]
|
||||
}
|
||||
|
||||
Label
|
||||
{
|
||||
id: fieldLabel
|
||||
anchors.left: parent.left
|
||||
anchors.verticalCenter: checkBox.verticalCenter
|
||||
visible: text != ""
|
||||
font: UM.Theme.getFont("medium")
|
||||
renderType: Text.NativeRendering
|
||||
}
|
||||
|
||||
CuraCheckBox
|
||||
{
|
||||
id: checkBox
|
||||
anchors.left: fieldLabel.right
|
||||
anchors.leftMargin: UM.Theme.getSize("default_margin").width
|
||||
checked: String(propertyProvider.properties.value).toLowerCase() != 'false'
|
||||
height: simpleCheckBox.controlHeight
|
||||
font: UM.Theme.getFont("medium")
|
||||
text: ""
|
||||
onClicked:
|
||||
{
|
||||
propertyProvider.setPropertyValue("value", checked)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue