mirror of
https://github.com/Ultimaker/Cura.git
synced 2025-08-07 14:04:03 -06:00
Merge branch 'master' into feature_tray_icon_preference
This commit is contained in:
commit
d655350aac
543 changed files with 7734 additions and 9460 deletions
|
@ -43,7 +43,7 @@ from UM.Scene.Selection import Selection
|
|||
from UM.Scene.ToolHandle import ToolHandle
|
||||
from UM.Settings.ContainerRegistry import ContainerRegistry
|
||||
from UM.Settings.InstanceContainer import InstanceContainer
|
||||
from UM.Settings.SettingDefinition import SettingDefinition, DefinitionPropertyType
|
||||
from UM.Settings.SettingDefinition import SettingDefinition, DefinitionPropertyType, toIntConversion
|
||||
from UM.Settings.SettingFunction import SettingFunction
|
||||
from UM.Settings.Validator import Validator
|
||||
from UM.View.SelectionPass import SelectionPass # For typing.
|
||||
|
@ -382,11 +382,12 @@ class CuraApplication(QtApplication):
|
|||
SettingDefinition.addSupportedProperty("resolve", DefinitionPropertyType.Function, default=None,
|
||||
depends_on="value")
|
||||
|
||||
SettingDefinition.addSettingType("extruder", None, str, Validator)
|
||||
SettingDefinition.addSettingType("optional_extruder", None, str, None)
|
||||
SettingDefinition.addSettingType("extruder", None, toIntConversion, Validator)
|
||||
SettingDefinition.addSettingType("optional_extruder", None, toIntConversion, None)
|
||||
SettingDefinition.addSettingType("[int]", None, str, None)
|
||||
|
||||
|
||||
|
||||
def _initializeSettingFunctions(self):
|
||||
"""Adds custom property types, settings types, and extra operators (functions).
|
||||
|
||||
|
@ -679,22 +680,6 @@ class CuraApplication(QtApplication):
|
|||
self._setLoadingHint(self._i18n_catalog.i18nc("@info:progress", "Initializing Active Machine..."))
|
||||
super().setGlobalContainerStack(stack)
|
||||
|
||||
showMessageBox = pyqtSignal(str,str, str, str, int, int,
|
||||
arguments = ["title", "text", "informativeText", "detailedText","buttons", "icon"])
|
||||
"""A reusable dialogbox"""
|
||||
|
||||
def messageBox(self, title, text,
|
||||
informativeText = "",
|
||||
detailedText = "",
|
||||
buttons = QMessageBox.Ok,
|
||||
icon = QMessageBox.NoIcon,
|
||||
callback = None,
|
||||
callback_arguments = []
|
||||
):
|
||||
self._message_box_callback = callback
|
||||
self._message_box_callback_arguments = callback_arguments
|
||||
self.showMessageBox.emit(title, text, informativeText, detailedText, buttons, icon)
|
||||
|
||||
showDiscardOrKeepProfileChanges = pyqtSignal()
|
||||
|
||||
def discardOrKeepProfileChanges(self) -> bool:
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# Copyright (c) 2020 Ultimaker B.V.
|
||||
# Copyright (c) 2022 Ultimaker B.V.
|
||||
# Cura is released under the terms of the LGPLv3 or higher.
|
||||
|
||||
from PyQt5.QtCore import pyqtProperty, pyqtSignal, Qt
|
||||
|
@ -9,6 +9,7 @@ from UM import i18nCatalog
|
|||
from UM.Logger import Logger
|
||||
from UM.Qt.ListModel import ListModel
|
||||
from UM.Settings.ContainerRegistry import ContainerRegistry
|
||||
from UM.Settings.SettingFunction import SettingFunction # To format setting functions differently.
|
||||
|
||||
import os
|
||||
|
||||
|
@ -173,12 +174,22 @@ class QualitySettingsModel(ListModel):
|
|||
label = definition.label
|
||||
if self._i18n_catalog:
|
||||
label = self._i18n_catalog.i18nc(definition.key + " label", label)
|
||||
if profile_value_source == "quality_changes":
|
||||
label = f"<i>{label}</i>" # Make setting name italic if it's derived from the quality-changes profile.
|
||||
|
||||
if isinstance(profile_value, SettingFunction):
|
||||
if self._i18n_catalog:
|
||||
profile_value_display = self._i18n_catalog.i18nc("@info:status", "Calculated")
|
||||
else:
|
||||
profile_value_display = "Calculated"
|
||||
else:
|
||||
profile_value_display = "" if profile_value is None else str(profile_value)
|
||||
|
||||
items.append({
|
||||
"key": definition.key,
|
||||
"label": label,
|
||||
"unit": definition.unit,
|
||||
"profile_value": "" if profile_value is None else str(profile_value), # it is for display only
|
||||
"profile_value": profile_value_display,
|
||||
"profile_value_source": profile_value_source,
|
||||
"user_value": "" if user_value is None else str(user_value),
|
||||
"category": current_category
|
||||
|
|
|
@ -6,7 +6,7 @@ import QtQuick.Controls 2.3
|
|||
import QtQuick.Layouts 1.3
|
||||
import QtQuick.Window 2.2
|
||||
|
||||
import UM 1.1 as UM
|
||||
import UM 1.5 as UM
|
||||
import Cura 1.1 as Cura
|
||||
|
||||
UM.Dialog
|
||||
|
@ -19,9 +19,7 @@ UM.Dialog
|
|||
width: minimumWidth
|
||||
height: Math.max(dialogSummaryItem.height + 2 * buttonsItem.height, minimumHeight) // 2 * button height to also have some extra space around the button relative to the button size
|
||||
|
||||
property int comboboxHeight: 15 * screenScaleFactor
|
||||
property int spacerHeight: 10 * screenScaleFactor
|
||||
property int doubleSpacerHeight: 20 * screenScaleFactor
|
||||
property int comboboxHeight: UM.Theme.getSize("default_margin").height
|
||||
|
||||
onClosing: manager.notifyClosed()
|
||||
onVisibleChanged:
|
||||
|
@ -46,10 +44,6 @@ UM.Dialog
|
|||
id: catalog
|
||||
name: "cura"
|
||||
}
|
||||
SystemPalette
|
||||
{
|
||||
id: palette
|
||||
}
|
||||
|
||||
ListModel
|
||||
{
|
||||
|
@ -68,45 +62,39 @@ UM.Dialog
|
|||
{
|
||||
width: parent.width
|
||||
height: childrenRect.height
|
||||
spacing: 2 * screenScaleFactor
|
||||
Label
|
||||
spacing: UM.Theme.getSize("default_margin").height
|
||||
|
||||
Column
|
||||
{
|
||||
id: titleLabel
|
||||
text: catalog.i18nc("@action:title", "Summary - Cura Project")
|
||||
font.pointSize: 18
|
||||
}
|
||||
Rectangle
|
||||
{
|
||||
id: separator
|
||||
color: palette.text
|
||||
width: parent.width
|
||||
height: 1
|
||||
}
|
||||
Item // Spacer
|
||||
{
|
||||
height: doubleSpacerHeight
|
||||
width: height
|
||||
height: cildrenRect.height
|
||||
|
||||
UM.Label
|
||||
{
|
||||
id: titleLabel
|
||||
text: catalog.i18nc("@action:title", "Summary - Cura Project")
|
||||
font: UM.Theme.getFont("large")
|
||||
}
|
||||
|
||||
Rectangle
|
||||
{
|
||||
id: separator
|
||||
color: UM.Theme.getColor("text")
|
||||
width: parent.width
|
||||
height: UM.Theme.getSize("default_lining").height
|
||||
}
|
||||
}
|
||||
|
||||
Row
|
||||
Item
|
||||
{
|
||||
height: childrenRect.height
|
||||
width: parent.width
|
||||
Label
|
||||
{
|
||||
text: catalog.i18nc("@action:label", "Printer settings")
|
||||
font.bold: true
|
||||
width: (parent.width / 3) | 0
|
||||
}
|
||||
Item
|
||||
{
|
||||
// spacer
|
||||
height: spacerHeight
|
||||
width: (parent.width / 3) | 0
|
||||
}
|
||||
height: childrenRect.height
|
||||
|
||||
UM.TooltipArea
|
||||
{
|
||||
id: machineResolveStrategyTooltip
|
||||
anchors.top: parent.top
|
||||
anchors.right: parent.right
|
||||
width: (parent.width / 3) | 0
|
||||
height: visible ? comboboxHeight : 0
|
||||
visible: base.visible && machineResolveComboBox.model.count > 1
|
||||
|
@ -157,64 +145,65 @@ UM.Dialog
|
|||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Row
|
||||
{
|
||||
width: parent.width
|
||||
height: childrenRect.height
|
||||
Label
|
||||
|
||||
Column
|
||||
{
|
||||
text: catalog.i18nc("@action:label", "Type")
|
||||
width: (parent.width / 3) | 0
|
||||
}
|
||||
Label
|
||||
{
|
||||
text: manager.machineType
|
||||
width: (parent.width / 3) | 0
|
||||
width: parent.width
|
||||
height: cildrenRect.height
|
||||
|
||||
UM.Label
|
||||
{
|
||||
id: printer_settings_label
|
||||
text: catalog.i18nc("@action:label", "Printer settings")
|
||||
font: UM.Theme.getFont("default_bold")
|
||||
}
|
||||
|
||||
Row
|
||||
{
|
||||
width: parent.width
|
||||
height: childrenRect.height
|
||||
|
||||
UM.Label
|
||||
{
|
||||
text: catalog.i18nc("@action:label", "Type")
|
||||
width: (parent.width / 3) | 0
|
||||
}
|
||||
UM.Label
|
||||
{
|
||||
text: manager.machineType
|
||||
width: (parent.width / 3) | 0
|
||||
}
|
||||
}
|
||||
|
||||
Row
|
||||
{
|
||||
width: parent.width
|
||||
height: childrenRect.height
|
||||
|
||||
UM.Label
|
||||
{
|
||||
text: catalog.i18nc("@action:label", manager.isPrinterGroup ? "Printer Group" : "Printer Name")
|
||||
width: (parent.width / 3) | 0
|
||||
}
|
||||
UM.Label
|
||||
{
|
||||
text: manager.machineName
|
||||
width: (parent.width / 3) | 0
|
||||
wrapMode: Text.WordWrap
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Row
|
||||
Item
|
||||
{
|
||||
width: parent.width
|
||||
height: childrenRect.height
|
||||
Label
|
||||
{
|
||||
text: catalog.i18nc("@action:label", manager.isPrinterGroup ? "Printer Group" : "Printer Name")
|
||||
width: (parent.width / 3) | 0
|
||||
}
|
||||
Label
|
||||
{
|
||||
text: manager.machineName
|
||||
width: (parent.width / 3) | 0
|
||||
wrapMode: Text.WordWrap
|
||||
}
|
||||
}
|
||||
|
||||
Item // Spacer
|
||||
{
|
||||
height: doubleSpacerHeight
|
||||
width: height
|
||||
}
|
||||
Row
|
||||
{
|
||||
height: childrenRect.height
|
||||
width: parent.width
|
||||
Label
|
||||
{
|
||||
text: catalog.i18nc("@action:label", "Profile settings")
|
||||
font.bold: true
|
||||
width: (parent.width / 3) | 0
|
||||
}
|
||||
Item
|
||||
{
|
||||
// spacer
|
||||
height: spacerHeight
|
||||
width: (parent.width / 3) | 0
|
||||
}
|
||||
UM.TooltipArea
|
||||
{
|
||||
id: qualityChangesResolveTooltip
|
||||
anchors.right: parent.right
|
||||
anchors.top: parent.top
|
||||
width: (parent.width / 3) | 0
|
||||
height: visible ? comboboxHeight : 0
|
||||
visible: manager.qualityChangesConflict
|
||||
|
@ -232,96 +221,105 @@ UM.Dialog
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
Column
|
||||
{
|
||||
width: parent.width
|
||||
height: cildrenRect.height
|
||||
|
||||
UM.Label
|
||||
{
|
||||
text: catalog.i18nc("@action:label", "Profile settings")
|
||||
font: UM.Theme.getFont("default_bold")
|
||||
}
|
||||
|
||||
Row
|
||||
{
|
||||
width: parent.width
|
||||
height: childrenRect.height
|
||||
|
||||
UM.Label
|
||||
{
|
||||
text: catalog.i18nc("@action:label", "Name")
|
||||
width: (parent.width / 3) | 0
|
||||
}
|
||||
UM.Label
|
||||
{
|
||||
text: manager.qualityName
|
||||
width: (parent.width / 3) | 0
|
||||
wrapMode: Text.WordWrap
|
||||
}
|
||||
}
|
||||
|
||||
Row
|
||||
{
|
||||
width: parent.width
|
||||
height: childrenRect.height
|
||||
|
||||
UM.Label
|
||||
{
|
||||
text: catalog.i18nc("@action:label", "Intent")
|
||||
width: (parent.width / 3) | 0
|
||||
}
|
||||
UM.Label
|
||||
{
|
||||
text: manager.intentName
|
||||
width: (parent.width / 3) | 0
|
||||
wrapMode: Text.WordWrap
|
||||
}
|
||||
}
|
||||
|
||||
Row
|
||||
{
|
||||
width: parent.width
|
||||
height: childrenRect.height
|
||||
|
||||
UM.Label
|
||||
{
|
||||
text: catalog.i18nc("@action:label", "Not in profile")
|
||||
visible: manager.numUserSettings != 0
|
||||
width: (parent.width / 3) | 0
|
||||
}
|
||||
UM.Label
|
||||
{
|
||||
text: catalog.i18ncp("@action:label", "%1 override", "%1 overrides", manager.numUserSettings).arg(manager.numUserSettings)
|
||||
visible: manager.numUserSettings != 0
|
||||
width: (parent.width / 3) | 0
|
||||
}
|
||||
}
|
||||
|
||||
Row
|
||||
{
|
||||
width: parent.width
|
||||
height: childrenRect.height
|
||||
|
||||
UM.Label
|
||||
{
|
||||
text: catalog.i18nc("@action:label", "Derivative from")
|
||||
visible: manager.numSettingsOverridenByQualityChanges != 0
|
||||
width: (parent.width / 3) | 0
|
||||
}
|
||||
UM.Label
|
||||
{
|
||||
text: catalog.i18ncp("@action:label", "%1, %2 override", "%1, %2 overrides", manager.numSettingsOverridenByQualityChanges).arg(manager.qualityType).arg(manager.numSettingsOverridenByQualityChanges)
|
||||
width: (parent.width / 3) | 0
|
||||
visible: manager.numSettingsOverridenByQualityChanges != 0
|
||||
wrapMode: Text.WordWrap
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Row
|
||||
|
||||
Item
|
||||
{
|
||||
width: parent.width
|
||||
height: childrenRect.height
|
||||
Label
|
||||
{
|
||||
text: catalog.i18nc("@action:label", "Name")
|
||||
width: (parent.width / 3) | 0
|
||||
}
|
||||
Label
|
||||
{
|
||||
text: manager.qualityName
|
||||
width: (parent.width / 3) | 0
|
||||
wrapMode: Text.WordWrap
|
||||
}
|
||||
}
|
||||
Row
|
||||
{
|
||||
width: parent.width
|
||||
height: childrenRect.height
|
||||
Label
|
||||
{
|
||||
text: catalog.i18nc("@action:label", "Intent")
|
||||
width: (parent.width / 3) | 0
|
||||
}
|
||||
Label
|
||||
{
|
||||
text: manager.intentName
|
||||
width: (parent.width / 3) | 0
|
||||
wrapMode: Text.WordWrap
|
||||
}
|
||||
}
|
||||
Row
|
||||
{
|
||||
width: parent.width
|
||||
height: manager.numUserSettings != 0 ? childrenRect.height : 0
|
||||
Label
|
||||
{
|
||||
text: catalog.i18nc("@action:label", "Not in profile")
|
||||
width: (parent.width / 3) | 0
|
||||
}
|
||||
Label
|
||||
{
|
||||
text: catalog.i18ncp("@action:label", "%1 override", "%1 overrides", manager.numUserSettings).arg(manager.numUserSettings)
|
||||
width: (parent.width / 3) | 0
|
||||
}
|
||||
visible: manager.numUserSettings != 0
|
||||
}
|
||||
Row
|
||||
{
|
||||
width: parent.width
|
||||
height: manager.numSettingsOverridenByQualityChanges != 0 ? childrenRect.height : 0
|
||||
Label
|
||||
{
|
||||
text: catalog.i18nc("@action:label", "Derivative from")
|
||||
width: (parent.width / 3) | 0
|
||||
}
|
||||
Label
|
||||
{
|
||||
text: catalog.i18ncp("@action:label", "%1, %2 override", "%1, %2 overrides", manager.numSettingsOverridenByQualityChanges).arg(manager.qualityType).arg(manager.numSettingsOverridenByQualityChanges)
|
||||
width: (parent.width / 3) | 0
|
||||
wrapMode: Text.WordWrap
|
||||
}
|
||||
visible: manager.numSettingsOverridenByQualityChanges != 0
|
||||
}
|
||||
Item // Spacer
|
||||
{
|
||||
height: doubleSpacerHeight
|
||||
width: height
|
||||
}
|
||||
Row
|
||||
{
|
||||
height: childrenRect.height
|
||||
width: parent.width
|
||||
Label
|
||||
{
|
||||
text: catalog.i18nc("@action:label", "Material settings")
|
||||
font.bold: true
|
||||
width: (parent.width / 3) | 0
|
||||
}
|
||||
Item
|
||||
{
|
||||
// spacer
|
||||
height: spacerHeight
|
||||
width: (parent.width / 3) | 0
|
||||
}
|
||||
|
||||
UM.TooltipArea
|
||||
{
|
||||
id: materialResolveTooltip
|
||||
anchors.right: parent.right
|
||||
anchors.top: parent.top
|
||||
width: (parent.width / 3) | 0
|
||||
height: visible ? comboboxHeight : 0
|
||||
visible: manager.materialConflict
|
||||
|
@ -339,76 +337,91 @@ UM.Dialog
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
Column
|
||||
{
|
||||
width: parent.width
|
||||
height: cildrenRect.height
|
||||
Row
|
||||
{
|
||||
height: childrenRect.height
|
||||
width: parent.width
|
||||
spacing: UM.Theme.getSize("narrow_margin").width
|
||||
|
||||
UM.Label
|
||||
{
|
||||
text: catalog.i18nc("@action:label", "Material settings")
|
||||
font: UM.Theme.getFont("default_bold")
|
||||
width: (parent.width / 3) | 0
|
||||
}
|
||||
}
|
||||
|
||||
Repeater
|
||||
{
|
||||
model: manager.materialLabels
|
||||
delegate: Row
|
||||
{
|
||||
width: parent.width
|
||||
height: childrenRect.height
|
||||
UM.Label
|
||||
{
|
||||
text: catalog.i18nc("@action:label", "Name")
|
||||
width: (parent.width / 3) | 0
|
||||
}
|
||||
UM.Label
|
||||
{
|
||||
text: modelData
|
||||
width: (parent.width / 3) | 0
|
||||
wrapMode: Text.WordWrap
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Repeater
|
||||
Column
|
||||
{
|
||||
model: manager.materialLabels
|
||||
delegate: Row
|
||||
width: parent.width
|
||||
height: cildrenRect.height
|
||||
|
||||
UM.Label
|
||||
{
|
||||
text: catalog.i18nc("@action:label", "Setting visibility")
|
||||
font: UM.Theme.getFont("default_bold")
|
||||
}
|
||||
Row
|
||||
{
|
||||
width: parent.width
|
||||
height: childrenRect.height
|
||||
Label
|
||||
UM.Label
|
||||
{
|
||||
text: catalog.i18nc("@action:label", "Name")
|
||||
text: catalog.i18nc("@action:label", "Mode")
|
||||
width: (parent.width / 3) | 0
|
||||
}
|
||||
Label
|
||||
UM.Label
|
||||
{
|
||||
text: modelData
|
||||
text: manager.activeMode
|
||||
width: (parent.width / 3) | 0
|
||||
}
|
||||
}
|
||||
Row
|
||||
{
|
||||
width: parent.width
|
||||
height: childrenRect.height
|
||||
visible: manager.hasVisibleSettingsField
|
||||
UM.Label
|
||||
{
|
||||
text: catalog.i18nc("@action:label", "Visible settings:")
|
||||
width: (parent.width / 3) | 0
|
||||
}
|
||||
UM.Label
|
||||
{
|
||||
text: catalog.i18nc("@action:label", "%1 out of %2" ).arg(manager.numVisibleSettings).arg(manager.totalNumberOfSettings)
|
||||
width: (parent.width / 3) | 0
|
||||
wrapMode: Text.WordWrap
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Item // Spacer
|
||||
{
|
||||
height: doubleSpacerHeight
|
||||
width: height
|
||||
}
|
||||
|
||||
Label
|
||||
{
|
||||
text: catalog.i18nc("@action:label", "Setting visibility")
|
||||
font.bold: true
|
||||
}
|
||||
Row
|
||||
{
|
||||
width: parent.width
|
||||
height: childrenRect.height
|
||||
Label
|
||||
{
|
||||
text: catalog.i18nc("@action:label", "Mode")
|
||||
width: (parent.width / 3) | 0
|
||||
}
|
||||
Label
|
||||
{
|
||||
text: manager.activeMode
|
||||
width: (parent.width / 3) | 0
|
||||
}
|
||||
}
|
||||
Row
|
||||
{
|
||||
width: parent.width
|
||||
height: childrenRect.height
|
||||
visible: manager.hasVisibleSettingsField
|
||||
Label
|
||||
{
|
||||
text: catalog.i18nc("@action:label", "Visible settings:")
|
||||
width: (parent.width / 3) | 0
|
||||
}
|
||||
Label
|
||||
{
|
||||
text: catalog.i18nc("@action:label", "%1 out of %2" ).arg(manager.numVisibleSettings).arg(manager.totalNumberOfSettings)
|
||||
width: (parent.width / 3) | 0
|
||||
}
|
||||
}
|
||||
Item // Spacer
|
||||
{
|
||||
height: spacerHeight
|
||||
width: height
|
||||
}
|
||||
Row
|
||||
{
|
||||
width: parent.width
|
||||
|
@ -418,12 +431,10 @@ UM.Dialog
|
|||
{
|
||||
width: warningLabel.height
|
||||
height: width
|
||||
|
||||
source: UM.Theme.getIcon("Information")
|
||||
color: palette.text
|
||||
|
||||
color: UM.Theme.getColor("text")
|
||||
}
|
||||
Label
|
||||
UM.Label
|
||||
{
|
||||
id: warningLabel
|
||||
text: catalog.i18nc("@action:warning", "Loading a project will clear all models on the build plate.")
|
||||
|
@ -432,44 +443,22 @@ UM.Dialog
|
|||
}
|
||||
}
|
||||
}
|
||||
Item
|
||||
{
|
||||
id: buttonsItem
|
||||
width: parent.width
|
||||
height: childrenRect.height
|
||||
anchors.bottom: parent.bottom
|
||||
anchors.right: parent.right
|
||||
Button
|
||||
|
||||
buttonSpacing: UM.Theme.getSize("default_margin").width
|
||||
|
||||
rightButtons: [
|
||||
Cura.TertiaryButton
|
||||
{
|
||||
id: cancel_button
|
||||
text: catalog.i18nc("@action:button","Cancel");
|
||||
onClicked: { manager.onCancelButtonClicked() }
|
||||
enabled: true
|
||||
anchors.bottom: parent.bottom
|
||||
anchors.right: ok_button.left
|
||||
anchors.rightMargin: 2 * screenScaleFactor
|
||||
}
|
||||
Button
|
||||
text: catalog.i18nc("@action:button", "Cancel")
|
||||
onClicked: reject()
|
||||
},
|
||||
Cura.PrimaryButton
|
||||
{
|
||||
id: ok_button
|
||||
anchors.right: parent.right
|
||||
anchors.bottom: parent.bottom
|
||||
text: catalog.i18nc("@action:button","Open");
|
||||
onClicked: { manager.closeBackend(); manager.onOkButtonClicked() }
|
||||
text: catalog.i18nc("@action:button", "Open")
|
||||
onClicked: accept()
|
||||
}
|
||||
}
|
||||
]
|
||||
|
||||
|
||||
function accept() {
|
||||
manager.closeBackend();
|
||||
manager.onOkButtonClicked();
|
||||
base.visible = false;
|
||||
base.accept();
|
||||
}
|
||||
|
||||
function reject() {
|
||||
manager.onCancelButtonClicked();
|
||||
base.visible = false;
|
||||
base.rejected();
|
||||
}
|
||||
onRejected: manager.onCancelButtonClicked()
|
||||
onAccepted: manager.onOkButtonClicked()
|
||||
}
|
||||
|
|
|
@ -1,39 +1,34 @@
|
|||
// Copyright (c) 2018 Ultimaker B.V.
|
||||
// Copyright (c) 2022 Ultimaker B.V.
|
||||
// Cura is released under the terms of the LGPLv3 or higher.
|
||||
|
||||
import QtQuick 2.7
|
||||
import QtQuick.Controls 2.2
|
||||
import QtQuick.Layouts 1.3
|
||||
|
||||
import UM 1.1 as UM
|
||||
import UM 1.5 as UM
|
||||
|
||||
ScrollView
|
||||
ListView
|
||||
{
|
||||
property alias model: backupList.model
|
||||
width: parent.width
|
||||
clip: true
|
||||
ListView
|
||||
ScrollBar.vertical: UM.ScrollBar {}
|
||||
|
||||
delegate: Item
|
||||
{
|
||||
id: backupList
|
||||
width: parent.width
|
||||
delegate: Item
|
||||
// Add a margin, otherwise the scrollbar is on top of the right most component
|
||||
width: parent.width - UM.Theme.getSize("scrollbar").width
|
||||
height: childrenRect.height
|
||||
|
||||
BackupListItem
|
||||
{
|
||||
// Add a margin, otherwise the scrollbar is on top of the right most component
|
||||
width: parent.width - UM.Theme.getSize("default_margin").width
|
||||
height: childrenRect.height
|
||||
id: backupListItem
|
||||
width: parent.width
|
||||
}
|
||||
|
||||
BackupListItem
|
||||
{
|
||||
id: backupListItem
|
||||
width: parent.width
|
||||
}
|
||||
|
||||
Rectangle
|
||||
{
|
||||
id: divider
|
||||
color: UM.Theme.getColor("lining")
|
||||
height: UM.Theme.getSize("default_lining").height
|
||||
}
|
||||
Rectangle
|
||||
{
|
||||
id: divider
|
||||
color: UM.Theme.getColor("lining")
|
||||
height: UM.Theme.getSize("default_lining").height
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,12 +1,11 @@
|
|||
// Copyright (c) 2018 Ultimaker B.V.
|
||||
// Copyright (c) 2022 Ultimaker B.V.
|
||||
// Cura is released under the terms of the LGPLv3 or higher.
|
||||
|
||||
import QtQuick 2.7
|
||||
import QtQuick.Controls 2.1
|
||||
import QtQuick.Layouts 1.3
|
||||
import QtQuick.Dialogs 1.1
|
||||
|
||||
import UM 1.1 as UM
|
||||
import UM 1.5 as UM
|
||||
import Cura 1.0 as Cura
|
||||
|
||||
Item
|
||||
|
@ -42,28 +41,22 @@ Item
|
|||
onClicked: backupListItem.showDetails = !backupListItem.showDetails
|
||||
}
|
||||
|
||||
Label
|
||||
UM.Label
|
||||
{
|
||||
text: new Date(modelData.generated_time).toLocaleString(UM.Preferences.getValue("general/language"))
|
||||
color: UM.Theme.getColor("text")
|
||||
elide: Text.ElideRight
|
||||
Layout.minimumWidth: 100 * screenScaleFactor
|
||||
Layout.maximumWidth: 500 * screenScaleFactor
|
||||
Layout.fillWidth: true
|
||||
font: UM.Theme.getFont("default")
|
||||
renderType: Text.NativeRendering
|
||||
}
|
||||
|
||||
Label
|
||||
UM.Label
|
||||
{
|
||||
text: modelData.metadata.description
|
||||
color: UM.Theme.getColor("text")
|
||||
elide: Text.ElideRight
|
||||
Layout.minimumWidth: 100 * screenScaleFactor
|
||||
Layout.maximumWidth: 500 * screenScaleFactor
|
||||
Layout.fillWidth: true
|
||||
font: UM.Theme.getFont("default")
|
||||
renderType: Text.NativeRendering
|
||||
}
|
||||
|
||||
Cura.SecondaryButton
|
||||
|
@ -94,21 +87,21 @@ Item
|
|||
anchors.top: dataRow.bottom
|
||||
}
|
||||
|
||||
MessageDialog
|
||||
Cura.MessageDialog
|
||||
{
|
||||
id: confirmDeleteDialog
|
||||
title: catalog.i18nc("@dialog:title", "Delete Backup")
|
||||
text: catalog.i18nc("@dialog:info", "Are you sure you want to delete this backup? This cannot be undone.")
|
||||
standardButtons: StandardButton.Yes | StandardButton.No
|
||||
onYes: CuraDrive.deleteBackup(modelData.backup_id)
|
||||
standardButtons: Dialog.Yes | Dialog.No
|
||||
onAccepted: CuraDrive.deleteBackup(modelData.backup_id)
|
||||
}
|
||||
|
||||
MessageDialog
|
||||
Cura.MessageDialog
|
||||
{
|
||||
id: confirmRestoreDialog
|
||||
title: catalog.i18nc("@dialog:title", "Restore Backup")
|
||||
text: catalog.i18nc("@dialog:info", "You will need to restart Cura before your backup is restored. Do you want to close Cura now?")
|
||||
standardButtons: StandardButton.Yes | StandardButton.No
|
||||
onYes: CuraDrive.restoreBackup(modelData.backup_id)
|
||||
standardButtons: Dialog.Yes | Dialog.No
|
||||
onAccepted: CuraDrive.restoreBackup(modelData.backup_id)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,7 +5,7 @@ import QtQuick 2.7
|
|||
import QtQuick.Controls 2.1
|
||||
import QtQuick.Layouts 1.3
|
||||
|
||||
import UM 1.3 as UM
|
||||
import UM 1.5 as UM
|
||||
|
||||
RowLayout
|
||||
{
|
||||
|
@ -26,27 +26,21 @@ RowLayout
|
|||
color: UM.Theme.getColor("text")
|
||||
}
|
||||
|
||||
Label
|
||||
UM.Label
|
||||
{
|
||||
id: detailName
|
||||
color: UM.Theme.getColor("text")
|
||||
elide: Text.ElideRight
|
||||
Layout.minimumWidth: 50 * screenScaleFactor
|
||||
Layout.maximumWidth: 100 * screenScaleFactor
|
||||
Layout.fillWidth: true
|
||||
font: UM.Theme.getFont("default")
|
||||
renderType: Text.NativeRendering
|
||||
}
|
||||
|
||||
Label
|
||||
UM.Label
|
||||
{
|
||||
id: detailValue
|
||||
color: UM.Theme.getColor("text")
|
||||
elide: Text.ElideRight
|
||||
Layout.minimumWidth: 50 * screenScaleFactor
|
||||
Layout.maximumWidth: 100 * screenScaleFactor
|
||||
Layout.fillWidth: true
|
||||
font: UM.Theme.getFont("default")
|
||||
renderType: Text.NativeRendering
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,7 +5,7 @@ import QtQuick 2.7
|
|||
import QtQuick.Controls 2.1
|
||||
import QtQuick.Window 2.2
|
||||
|
||||
import UM 1.3 as UM
|
||||
import UM 1.5 as UM
|
||||
import Cura 1.1 as Cura
|
||||
|
||||
import "../components"
|
||||
|
@ -28,18 +28,14 @@ Column
|
|||
width: Math.round(parent.width / 4)
|
||||
}
|
||||
|
||||
Label
|
||||
UM.Label
|
||||
{
|
||||
id: welcomeTextLabel
|
||||
text: catalog.i18nc("@description", "Backup and synchronize your Cura settings.")
|
||||
width: Math.round(parent.width / 2)
|
||||
font: UM.Theme.getFont("default")
|
||||
color: UM.Theme.getColor("text")
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
wrapMode: Label.WordWrap
|
||||
renderType: Text.NativeRendering
|
||||
}
|
||||
|
||||
Cura.PrimaryButton
|
||||
|
|
|
@ -1,10 +1,9 @@
|
|||
// Copyright (C) 2021 Ultimaker B.V.
|
||||
//Copyright (C) 2022 Ultimaker B.V.
|
||||
//Cura is released under the terms of the LGPLv3 or higher.
|
||||
|
||||
import QtQuick 2.10
|
||||
import QtQuick.Window 2.2
|
||||
import QtQuick.Controls 1.4 as OldControls // TableView doesn't exist in the QtQuick Controls 2.x in 5.10, so use the old one
|
||||
import QtQuick.Controls 2.3
|
||||
import QtQuick.Controls.Styles 1.4
|
||||
|
||||
import UM 1.2 as UM
|
||||
import Cura 1.6 as Cura
|
||||
|
|
|
@ -1,10 +1,9 @@
|
|||
// Copyright (C) 2021 Ultimaker B.V.
|
||||
//Copyright (C) 2022 Ultimaker B.V.
|
||||
//Cura is released under the terms of the LGPLv3 or higher.
|
||||
|
||||
import QtQuick 2.10
|
||||
import QtQuick.Window 2.2
|
||||
import QtQuick.Controls 1.4 as OldControls // TableView doesn't exist in the QtQuick Controls 2.x in 5.10, so use the old one
|
||||
import QtQuick.Controls 2.3
|
||||
import QtQuick.Controls.Styles 1.4
|
||||
|
||||
import UM 1.2 as UM
|
||||
import Cura 1.6 as Cura
|
||||
|
|
|
@ -1,10 +1,9 @@
|
|||
// Copyright (C) 2021 Ultimaker B.V.
|
||||
//Copyright (C) 2022 Ultimaker B.V.
|
||||
//Cura is released under the terms of the LGPLv3 or higher.
|
||||
|
||||
import QtQuick 2.10
|
||||
import QtQuick.Window 2.2
|
||||
import QtQuick.Controls 1.4 as OldControls // TableView doesn't exist in the QtQuick Controls 2.x in 5.10, so use the old one
|
||||
import QtQuick.Controls 2.3
|
||||
import QtQuick.Controls.Styles 1.4
|
||||
|
||||
import UM 1.2 as UM
|
||||
import Cura 1.6 as Cura
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
// Copyright (C) 2021 Ultimaker B.V.
|
||||
//Copyright (C) 2022 Ultimaker B.V.
|
||||
//Cura is released under the terms of the LGPLv3 or higher.
|
||||
|
||||
import QtQuick 2.10
|
||||
import Qt.labs.qmlmodels 1.0
|
||||
import QtQuick 2.15
|
||||
import QtQuick.Window 2.2
|
||||
import QtQuick.Controls 1.4 as OldControls // TableView doesn't exist in the QtQuick Controls 2.x in 5.10, so use the old one
|
||||
import QtQuick.Controls 2.3
|
||||
import QtQuick.Controls.Styles 1.4
|
||||
|
||||
import UM 1.2 as UM
|
||||
import Cura 1.6 as Cura
|
||||
|
@ -57,52 +57,32 @@ Item
|
|||
border.width: UM.Theme.getSize("default_lining").width
|
||||
border.color: UM.Theme.getColor("lining")
|
||||
|
||||
|
||||
Cura.TableView
|
||||
//We can't use Cura's TableView here, since in Cura >= 5.0 this uses QtQuick.TableView, while in Cura < 5.0 this uses QtControls1.TableView.
|
||||
//So we have to define our own. Once support for 4.13 and earlier is dropped, we can switch to Cura.TableView.
|
||||
Table
|
||||
{
|
||||
id: filesTableView
|
||||
anchors.fill: parent
|
||||
model: manager.digitalFactoryFileModel
|
||||
visible: model.count != 0 && manager.retrievingFileStatus != DF.RetrievalStatus.InProgress
|
||||
selectionMode: OldControls.SelectionMode.SingleSelection
|
||||
onDoubleClicked:
|
||||
anchors.margins: parent.border.width
|
||||
|
||||
columnHeaders: ["Name", "Uploaded by", "Uploaded at"]
|
||||
model: TableModel
|
||||
{
|
||||
TableModelColumn { display: "fileName" }
|
||||
TableModelColumn { display: "username" }
|
||||
TableModelColumn { display: "uploadedAt" }
|
||||
rows: manager.digitalFactoryFileModel.items
|
||||
}
|
||||
|
||||
onCurrentRowChanged:
|
||||
{
|
||||
manager.setSelectedFileIndices([currentRow]);
|
||||
}
|
||||
onDoubleClicked: function(row)
|
||||
{
|
||||
manager.setSelectedFileIndices([row]);
|
||||
openFilesButton.clicked();
|
||||
}
|
||||
|
||||
OldControls.TableViewColumn
|
||||
{
|
||||
id: fileNameColumn
|
||||
role: "fileName"
|
||||
title: "Name"
|
||||
width: Math.round(filesTableView.width / 3)
|
||||
}
|
||||
|
||||
OldControls.TableViewColumn
|
||||
{
|
||||
id: usernameColumn
|
||||
role: "username"
|
||||
title: "Uploaded by"
|
||||
width: Math.round(filesTableView.width / 3)
|
||||
}
|
||||
|
||||
OldControls.TableViewColumn
|
||||
{
|
||||
role: "uploadedAt"
|
||||
title: "Uploaded at"
|
||||
}
|
||||
|
||||
Connections
|
||||
{
|
||||
target: filesTableView.selection
|
||||
function onSelectionChanged()
|
||||
{
|
||||
let newSelection = [];
|
||||
filesTableView.selection.forEach(function(rowIndex) { newSelection.push(rowIndex); });
|
||||
manager.setSelectedFileIndices(newSelection);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Label
|
||||
|
@ -161,7 +141,6 @@ Item
|
|||
{
|
||||
// Make sure no files are selected when the file model changes
|
||||
filesTableView.currentRow = -1
|
||||
filesTableView.selection.clear()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -187,7 +166,7 @@ Item
|
|||
anchors.bottom: parent.bottom
|
||||
anchors.right: parent.right
|
||||
text: "Open"
|
||||
enabled: filesTableView.selection.count > 0
|
||||
enabled: filesTableView.currentRow >= 0
|
||||
onClicked:
|
||||
{
|
||||
manager.openSelectedFiles()
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
// Copyright (C) 2021 Ultimaker B.V.
|
||||
//Copyright (C) 2022 Ultimaker B.V.
|
||||
//Cura is released under the terms of the LGPLv3 or higher.
|
||||
|
||||
import Qt.labs.qmlmodels 1.0
|
||||
import QtQuick 2.10
|
||||
import QtQuick.Window 2.2
|
||||
import QtQuick.Controls 1.4 as OldControls // TableView doesn't exist in the QtQuick Controls 2.x in 5.10, so use the old one
|
||||
import QtQuick.Controls 2.3
|
||||
import QtQuick.Controls.Styles 1.4
|
||||
|
||||
import UM 1.5 as UM
|
||||
import Cura 1.6 as Cura
|
||||
|
@ -86,35 +86,22 @@ Item
|
|||
border.width: UM.Theme.getSize("default_lining").width
|
||||
border.color: UM.Theme.getColor("lining")
|
||||
|
||||
|
||||
Cura.TableView
|
||||
//We can't use Cura's TableView here, since in Cura >= 5.0 this uses QtQuick.TableView, while in Cura < 5.0 this uses QtControls1.TableView.
|
||||
//So we have to define our own. Once support for 4.13 and earlier is dropped, we can switch to Cura.TableView.
|
||||
Table
|
||||
{
|
||||
id: filesTableView
|
||||
anchors.fill: parent
|
||||
model: manager.digitalFactoryFileModel
|
||||
visible: model.count != 0 && manager.retrievingFileStatus != DF.RetrievalStatus.InProgress
|
||||
selectionMode: OldControls.SelectionMode.NoSelection
|
||||
anchors.margins: parent.border.width
|
||||
|
||||
OldControls.TableViewColumn
|
||||
allowSelection: false
|
||||
columnHeaders: ["Name", "Uploaded by", "Uploaded at"]
|
||||
model: TableModel
|
||||
{
|
||||
id: fileNameColumn
|
||||
role: "fileName"
|
||||
title: "@tableViewColumn:title", "Name"
|
||||
width: Math.round(filesTableView.width / 3)
|
||||
}
|
||||
|
||||
OldControls.TableViewColumn
|
||||
{
|
||||
id: usernameColumn
|
||||
role: "username"
|
||||
title: "Uploaded by"
|
||||
width: Math.round(filesTableView.width / 3)
|
||||
}
|
||||
|
||||
OldControls.TableViewColumn
|
||||
{
|
||||
role: "uploadedAt"
|
||||
title: "Uploaded at"
|
||||
TableModelColumn { display: "fileName" }
|
||||
TableModelColumn { display: "username" }
|
||||
TableModelColumn { display: "uploadedAt" }
|
||||
rows: manager.digitalFactoryFileModel.items
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -173,8 +160,7 @@ Item
|
|||
function onItemsChanged()
|
||||
{
|
||||
// Make sure no files are selected when the file model changes
|
||||
filesTableView.currentRow = -1
|
||||
filesTableView.selection.clear()
|
||||
filesTableView.currentRow = -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,11 +1,9 @@
|
|||
// Copyright (C) 2022 Ultimaker B.V.
|
||||
// Cura is released under the terms of the LGPLv3 or higher.
|
||||
//Copyright (C) 2022 Ultimaker B.V.
|
||||
//Cura is released under the terms of the LGPLv3 or higher.
|
||||
|
||||
import QtQuick 2.10
|
||||
import QtQuick.Window 2.2
|
||||
import QtQuick.Controls 1.4 as OldControls // TableView doesn't exist in the QtQuick Controls 2.x in 5.10, so use the old one
|
||||
import QtQuick.Controls 2.3
|
||||
import QtQuick.Controls.Styles 1.4
|
||||
import QtQuick.Layouts 1.1
|
||||
|
||||
import UM 1.2 as UM
|
||||
|
@ -224,4 +222,4 @@ Item
|
|||
x: Math.round((parent.width - width) / 2)
|
||||
y: Math.round((parent.height - height) / 2)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
203
plugins/DigitalLibrary/resources/qml/Table.qml
Normal file
203
plugins/DigitalLibrary/resources/qml/Table.qml
Normal file
|
@ -0,0 +1,203 @@
|
|||
//Copyright (C) 2022 Ultimaker B.V.
|
||||
//Cura is released under the terms of the LGPLv3 or higher.
|
||||
|
||||
import Qt.labs.qmlmodels 1.0
|
||||
import QtQuick 2.15
|
||||
import QtQuick.Controls 2.15
|
||||
|
||||
import UM 1.2 as UM
|
||||
|
||||
/*
|
||||
* A re-sizeable table of data.
|
||||
*
|
||||
* This table combines a list of headers with a TableView to show certain roles in a table.
|
||||
* The columns of the table can be resized.
|
||||
* When the table becomes too big, you can scroll through the table. When a column becomes too small, the contents of
|
||||
* the table are elided.
|
||||
* The table gets Cura's themeing.
|
||||
*/
|
||||
Item
|
||||
{
|
||||
id: tableBase
|
||||
|
||||
required property var columnHeaders //The text to show in the headers of each column.
|
||||
property alias model: tableView.model //A TableModel to display in this table. To use a ListModel for the rows, use "rows: listModel.items"
|
||||
property int currentRow: -1 //The selected row index.
|
||||
property var onDoubleClicked: function(row) {} //Something to execute when double clicked. Accepts one argument: The index of the row that was clicked on.
|
||||
property bool allowSelection: true //Whether to allow the user to select items.
|
||||
|
||||
Row
|
||||
{
|
||||
id: headerBar
|
||||
Repeater
|
||||
{
|
||||
id: headerRepeater
|
||||
model: columnHeaders
|
||||
Rectangle
|
||||
{
|
||||
//minimumWidth: Math.max(1, Math.round(tableBase.width / headerRepeater.count))
|
||||
width: 300
|
||||
height: UM.Theme.getSize("section").height
|
||||
|
||||
color: UM.Theme.getColor("secondary")
|
||||
|
||||
Label
|
||||
{
|
||||
id: contentText
|
||||
anchors.left: parent.left
|
||||
anchors.leftMargin: UM.Theme.getSize("narrow_margin").width
|
||||
anchors.right: parent.right
|
||||
anchors.rightMargin: UM.Theme.getSize("narrow_margin").width
|
||||
|
||||
text: modelData
|
||||
font: UM.Theme.getFont("medium_bold")
|
||||
color: UM.Theme.getColor("text")
|
||||
elide: Text.ElideRight
|
||||
}
|
||||
Rectangle //Resize handle.
|
||||
{
|
||||
anchors
|
||||
{
|
||||
right: parent.right
|
||||
top: parent.top
|
||||
bottom: parent.bottom
|
||||
}
|
||||
width: UM.Theme.getSize("thick_lining").width
|
||||
|
||||
color: UM.Theme.getColor("thick_lining")
|
||||
|
||||
MouseArea
|
||||
{
|
||||
anchors.fill: parent
|
||||
|
||||
cursorShape: Qt.SizeHorCursor
|
||||
drag
|
||||
{
|
||||
target: parent
|
||||
axis: Drag.XAxis
|
||||
}
|
||||
onMouseXChanged:
|
||||
{
|
||||
if(drag.active)
|
||||
{
|
||||
let new_width = parent.parent.width + mouseX;
|
||||
let sum_widths = mouseX;
|
||||
for(let i = 0; i < headerBar.children.length; ++i)
|
||||
{
|
||||
sum_widths += headerBar.children[i].width;
|
||||
}
|
||||
if(sum_widths > tableBase.width)
|
||||
{
|
||||
new_width -= sum_widths - tableBase.width; //Limit the total width to not exceed the view.
|
||||
}
|
||||
let width_fraction = new_width / tableBase.width; //Scale with the same fraction along with the total width, if the table is resized.
|
||||
parent.parent.width = Qt.binding(function() { return Math.max(10, Math.round(tableBase.width * width_fraction)) });
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
onWidthChanged:
|
||||
{
|
||||
tableView.forceLayout(); //Rescale table cells underneath as well.
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
TableView
|
||||
{
|
||||
id: tableView
|
||||
anchors
|
||||
{
|
||||
top: headerBar.bottom
|
||||
left: parent.left
|
||||
right: parent.right
|
||||
bottom: parent.bottom
|
||||
}
|
||||
|
||||
flickableDirection: Flickable.AutoFlickIfNeeded
|
||||
clip: true
|
||||
ScrollBar.vertical: ScrollBar
|
||||
{
|
||||
// Vertical ScrollBar, styled similarly to the scrollBar in the settings panel
|
||||
id: verticalScrollBar
|
||||
visible: tableView.contentHeight > tableView.height
|
||||
|
||||
background: Rectangle
|
||||
{
|
||||
implicitWidth: UM.Theme.getSize("scrollbar").width
|
||||
radius: Math.round(implicitWidth / 2)
|
||||
color: UM.Theme.getColor("scrollbar_background")
|
||||
}
|
||||
|
||||
contentItem: Rectangle
|
||||
{
|
||||
id: scrollViewHandle
|
||||
implicitWidth: UM.Theme.getSize("scrollbar").width
|
||||
radius: Math.round(implicitWidth / 2)
|
||||
|
||||
color: verticalScrollBar.pressed ? UM.Theme.getColor("scrollbar_handle_down") : verticalScrollBar.hovered ? UM.Theme.getColor("scrollbar_handle_hover") : UM.Theme.getColor("scrollbar_handle")
|
||||
Behavior on color { ColorAnimation { duration: 50; } }
|
||||
}
|
||||
}
|
||||
columnWidthProvider: function(column)
|
||||
{
|
||||
return headerBar.children[column].width; //Cells get the same width as their column header.
|
||||
}
|
||||
|
||||
delegate: Rectangle
|
||||
{
|
||||
implicitHeight: Math.max(1, cellContent.height)
|
||||
|
||||
color: UM.Theme.getColor((tableBase.currentRow == row) ? "primary" : ((row % 2 == 0) ? "main_background" : "viewport_background"))
|
||||
|
||||
Label
|
||||
{
|
||||
id: cellContent
|
||||
width: parent.width
|
||||
|
||||
text: display
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
elide: Text.ElideRight
|
||||
font: UM.Theme.getFont("default")
|
||||
color: UM.Theme.getColor("text")
|
||||
}
|
||||
TextMetrics
|
||||
{
|
||||
id: cellTextMetrics
|
||||
text: cellContent.text
|
||||
font: cellContent.font
|
||||
elide: cellContent.elide
|
||||
elideWidth: cellContent.width
|
||||
}
|
||||
UM.TooltipArea
|
||||
{
|
||||
anchors.fill: parent
|
||||
|
||||
acceptedButtons: Qt.LeftButton
|
||||
text: (cellTextMetrics.elidedText == cellContent.text) ? "" : cellContent.text //Show full text in tooltip if it was elided.
|
||||
onClicked:
|
||||
{
|
||||
if(tableBase.allowSelection)
|
||||
{
|
||||
tableBase.currentRow = row; //Select this row.
|
||||
}
|
||||
}
|
||||
onDoubleClicked:
|
||||
{
|
||||
tableBase.onDoubleClicked(row);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Connections
|
||||
{
|
||||
target: model
|
||||
function onRowCountChanged()
|
||||
{
|
||||
tableView.contentY = 0; //When the number of rows is reduced, make sure to scroll back to the start.
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,19 +1,19 @@
|
|||
// Copyright (c) 2018 Ultimaker B.V.
|
||||
// Copyright (c) 2022 Ultimaker B.V.
|
||||
// Cura is released under the terms of the LGPLv3 or higher.
|
||||
|
||||
import QtQuick 2.2
|
||||
import QtQuick.Controls 1.1
|
||||
import QtQuick.Controls 2.1
|
||||
import QtQuick.Layouts 1.1
|
||||
import QtQuick.Window 2.1
|
||||
import QtQuick.Dialogs 1.2 // For filedialog
|
||||
|
||||
import UM 1.2 as UM
|
||||
import UM 1.5 as UM
|
||||
import Cura 1.0 as Cura
|
||||
|
||||
|
||||
Cura.MachineAction
|
||||
{
|
||||
anchors.fill: parent;
|
||||
anchors.fill: parent
|
||||
property bool printerConnected: Cura.MachineManager.printerConnected
|
||||
property var activeOutputDevice: printerConnected ? Cura.MachineManager.printerOutputDevices[0] : null
|
||||
property bool canUpdateFirmware: activeOutputDevice ? activeOutputDevice.activePrinter.canUpdateFirmware : false
|
||||
|
@ -25,25 +25,22 @@ Cura.MachineAction
|
|||
UM.I18nCatalog { id: catalog; name: "cura"}
|
||||
spacing: UM.Theme.getSize("default_margin").height
|
||||
|
||||
Label
|
||||
UM.Label
|
||||
{
|
||||
width: parent.width
|
||||
text: catalog.i18nc("@title", "Update Firmware")
|
||||
wrapMode: Text.WordWrap
|
||||
font.pointSize: 18
|
||||
}
|
||||
Label
|
||||
UM.Label
|
||||
{
|
||||
width: parent.width
|
||||
wrapMode: Text.WordWrap
|
||||
text: catalog.i18nc("@label", "Firmware is the piece of software running directly on your 3D printer. This firmware controls the step motors, regulates the temperature and ultimately makes your printer work.")
|
||||
}
|
||||
|
||||
Label
|
||||
UM.Label
|
||||
{
|
||||
width: parent.width
|
||||
wrapMode: Text.WordWrap
|
||||
text: catalog.i18nc("@label", "The firmware shipping with new printers works, but new versions tend to have more features and improvements.");
|
||||
text: catalog.i18nc("@label", "The firmware shipping with new printers works, but new versions tend to have more features and improvements.")
|
||||
}
|
||||
|
||||
Row
|
||||
|
@ -52,10 +49,10 @@ Cura.MachineAction
|
|||
width: childrenRect.width
|
||||
spacing: UM.Theme.getSize("default_margin").width
|
||||
property string firmwareName: Cura.MachineManager.activeMachine.getDefaultFirmwareName()
|
||||
Button
|
||||
Cura.SecondaryButton
|
||||
{
|
||||
id: autoUpgradeButton
|
||||
text: catalog.i18nc("@action:button", "Automatically upgrade Firmware");
|
||||
text: catalog.i18nc("@action:button", "Automatically upgrade Firmware")
|
||||
enabled: parent.firmwareName != "" && canUpdateFirmware
|
||||
onClicked:
|
||||
{
|
||||
|
@ -63,10 +60,10 @@ Cura.MachineAction
|
|||
activeOutputDevice.updateFirmware(parent.firmwareName);
|
||||
}
|
||||
}
|
||||
Button
|
||||
Cura.SecondaryButton
|
||||
{
|
||||
id: manualUpgradeButton
|
||||
text: catalog.i18nc("@action:button", "Upload custom Firmware");
|
||||
text: catalog.i18nc("@action:button", "Upload custom Firmware")
|
||||
enabled: canUpdateFirmware
|
||||
onClicked:
|
||||
{
|
||||
|
@ -75,20 +72,18 @@ Cura.MachineAction
|
|||
}
|
||||
}
|
||||
|
||||
Label
|
||||
UM.Label
|
||||
{
|
||||
width: parent.width
|
||||
wrapMode: Text.WordWrap
|
||||
visible: !printerConnected && !updateProgressDialog.visible
|
||||
text: catalog.i18nc("@label", "Firmware can not be updated because there is no connection with the printer.");
|
||||
text: catalog.i18nc("@label", "Firmware can not be updated because there is no connection with the printer.")
|
||||
}
|
||||
|
||||
Label
|
||||
{
|
||||
width: parent.width
|
||||
wrapMode: Text.WordWrap
|
||||
visible: printerConnected && !canUpdateFirmware
|
||||
text: catalog.i18nc("@label", "Firmware can not be updated because the connection with the printer does not support upgrading firmware.");
|
||||
text: catalog.i18nc("@label", "Firmware can not be updated because the connection with the printer does not support upgrading firmware.")
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -122,7 +117,7 @@ Cura.MachineAction
|
|||
{
|
||||
anchors.fill: parent
|
||||
|
||||
Label
|
||||
UM.Label
|
||||
{
|
||||
anchors
|
||||
{
|
||||
|
@ -157,12 +152,10 @@ Cura.MachineAction
|
|||
wrapMode: Text.Wrap
|
||||
}
|
||||
|
||||
ProgressBar
|
||||
UM.ProgressBar
|
||||
{
|
||||
id: prog
|
||||
value: (manager.firmwareUpdater != null) ? manager.firmwareUpdater.firmwareProgress : 0
|
||||
minimumValue: 0
|
||||
maximumValue: 100
|
||||
value: (manager.firmwareUpdater != null) ? manager.firmwareUpdater.firmwareProgress / 100 : 0
|
||||
indeterminate:
|
||||
{
|
||||
if(manager.firmwareUpdater == null)
|
||||
|
@ -173,18 +166,18 @@ Cura.MachineAction
|
|||
}
|
||||
anchors
|
||||
{
|
||||
left: parent.left;
|
||||
right: parent.right;
|
||||
left: parent.left
|
||||
right: parent.right
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
rightButtons: [
|
||||
Button
|
||||
Cura.SecondaryButton
|
||||
{
|
||||
text: catalog.i18nc("@action:button","Close");
|
||||
enabled: (manager.firmwareUpdater != null) ? manager.firmwareUpdater.firmwareUpdateState != 1 : true;
|
||||
onClicked: updateProgressDialog.visible = false;
|
||||
text: catalog.i18nc("@action:button", "Close")
|
||||
enabled: manager.firmwareUpdater != null ? manager.firmwareUpdater.firmwareUpdateState != 1 : true
|
||||
onClicked: updateProgressDialog.visible = false
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# Copyright (c) 2021 Ultimaker B.V.
|
||||
# Copyright (c) 2022 Ultimaker B.V.
|
||||
# Cura is released under the terms of the LGPLv3 or higher.
|
||||
|
||||
import math
|
||||
|
@ -31,6 +31,8 @@ Position = NamedTuple("Position", [("x", float), ("y", float), ("z", float), ("f
|
|||
class FlavorParser:
|
||||
"""This parser is intended to interpret the common firmware codes among all the different flavors"""
|
||||
|
||||
MAX_EXTRUDER_COUNT = 16
|
||||
|
||||
def __init__(self) -> None:
|
||||
CuraApplication.getInstance().hideMessageSignal.connect(self._onHideMessage)
|
||||
self._cancelled = False
|
||||
|
@ -53,7 +55,7 @@ class FlavorParser:
|
|||
|
||||
def _clearValues(self) -> None:
|
||||
self._extruder_number = 0
|
||||
self._extrusion_length_offset = [0] # type: List[float]
|
||||
self._extrusion_length_offset = [0] * self.MAX_EXTRUDER_COUNT # type: List[float]
|
||||
self._layer_type = LayerPolygon.Inset0Type
|
||||
self._layer_number = 0
|
||||
self._previous_z = 0 # type: float
|
||||
|
@ -283,8 +285,9 @@ class FlavorParser:
|
|||
return func(position, params, path)
|
||||
return position
|
||||
|
||||
def processTCode(self, T: int, line: str, position: Position, path: List[List[Union[float, int]]]) -> Position:
|
||||
def processTCode(self, global_stack, T: int, line: str, position: Position, path: List[List[Union[float, int]]]) -> Position:
|
||||
self._extruder_number = T
|
||||
self._filament_diameter = global_stack.extruderList[self._extruder_number].getProperty("material_diameter", "value")
|
||||
if self._extruder_number + 1 > len(position.e):
|
||||
self._extrusion_length_offset.extend([0] * (self._extruder_number - len(position.e) + 1))
|
||||
position.e.extend([0] * (self._extruder_number - len(position.e) + 1))
|
||||
|
@ -354,7 +357,7 @@ class FlavorParser:
|
|||
|
||||
Logger.log("d", "Parsing g-code...")
|
||||
|
||||
current_position = Position(0, 0, 0, 0, [0])
|
||||
current_position = Position(0, 0, 0, 0, [0] * self.MAX_EXTRUDER_COUNT)
|
||||
current_path = [] #type: List[List[float]]
|
||||
min_layer_number = 0
|
||||
negative_layers = 0
|
||||
|
@ -444,7 +447,7 @@ class FlavorParser:
|
|||
# When changing tool, store the end point of the previous path, then process the code and finally
|
||||
# add another point with the new position of the head.
|
||||
current_path.append([current_position.x, current_position.y, current_position.z, current_position.f, current_position.e[self._extruder_number], LayerPolygon.MoveCombingType])
|
||||
current_position = self.processTCode(T, line, current_position, current_path)
|
||||
current_position = self.processTCode(global_stack, T, line, current_position, current_path)
|
||||
current_path.append([current_position.x, current_position.y, current_position.z, current_position.f, current_position.e[self._extruder_number], LayerPolygon.MoveCombingType])
|
||||
|
||||
if line.startswith("M"):
|
||||
|
|
|
@ -1,239 +1,333 @@
|
|||
// Copyright (c) 2015 Ultimaker B.V.
|
||||
// Copyright (c) 2022 Ultimaker B.V.
|
||||
// Cura is released under the terms of the LGPLv3 or higher.
|
||||
|
||||
import QtQuick 2.1
|
||||
import QtQuick.Controls 1.1
|
||||
import QtQuick.Layouts 1.1
|
||||
import QtQuick.Controls 2.15
|
||||
import QtQuick.Layouts 1.3
|
||||
import QtQuick.Window 2.1
|
||||
|
||||
import UM 1.1 as UM
|
||||
import UM 1.5 as UM
|
||||
import Cura 1.0 as Cura
|
||||
|
||||
UM.Dialog
|
||||
{
|
||||
width: minimumWidth;
|
||||
minimumWidth: 350 * screenScaleFactor;
|
||||
title: catalog.i18nc("@title:window", "Convert Image")
|
||||
|
||||
height: minimumHeight;
|
||||
minimumHeight: 250 * screenScaleFactor;
|
||||
|
||||
title: catalog.i18nc("@title:window", "Convert Image...")
|
||||
minimumWidth: grid.width + 2 * UM.Theme.getSize("default_margin").height
|
||||
minimumHeight: UM.Theme.getSize("modal_window_minimum").height
|
||||
width: minimumWidth
|
||||
height: minimumHeight
|
||||
|
||||
GridLayout
|
||||
{
|
||||
UM.I18nCatalog{id: catalog; name: "cura"}
|
||||
anchors.fill: parent;
|
||||
Layout.fillWidth: true
|
||||
columnSpacing: 16 * screenScaleFactor
|
||||
rowSpacing: 4 * screenScaleFactor
|
||||
columns: 1
|
||||
UM.I18nCatalog { id: catalog; name: "cura" }
|
||||
id: grid
|
||||
columnSpacing: UM.Theme.getSize("narrow_margin").width
|
||||
rowSpacing: UM.Theme.getSize("narrow_margin").height
|
||||
columns: 2
|
||||
|
||||
UM.TooltipArea {
|
||||
Layout.fillWidth:true
|
||||
height: childrenRect.height
|
||||
text: catalog.i18nc("@info:tooltip","The maximum distance of each pixel from \"Base.\"")
|
||||
Row {
|
||||
width: parent.width
|
||||
UM.Label
|
||||
{
|
||||
Layout.fillWidth: true
|
||||
Layout.minimumWidth: UM.Theme.getSize("setting_control").width
|
||||
text: catalog.i18nc("@action:label", "Height (mm)")
|
||||
Layout.alignment: Qt.AlignVCenter
|
||||
|
||||
Label {
|
||||
text: catalog.i18nc("@action:label", "Height (mm)")
|
||||
width: 150 * screenScaleFactor
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
}
|
||||
|
||||
TextField {
|
||||
id: peak_height
|
||||
objectName: "Peak_Height"
|
||||
validator: RegExpValidator {regExp: /^\d{0,3}([\,|\.]\d*)?$/}
|
||||
width: 180 * screenScaleFactor
|
||||
onTextChanged: { manager.onPeakHeightChanged(text) }
|
||||
}
|
||||
MouseArea {
|
||||
id: peak_height_label
|
||||
anchors.fill: parent
|
||||
hoverEnabled: true
|
||||
}
|
||||
}
|
||||
|
||||
UM.TooltipArea {
|
||||
Layout.fillWidth:true
|
||||
height: childrenRect.height
|
||||
text: catalog.i18nc("@info:tooltip","The base height from the build plate in millimeters.")
|
||||
Row {
|
||||
width: parent.width
|
||||
Cura.TextField
|
||||
{
|
||||
id: peak_height
|
||||
Layout.fillWidth: true
|
||||
Layout.minimumWidth: UM.Theme.getSize("setting_control").width
|
||||
selectByMouse: true
|
||||
objectName: "Peak_Height"
|
||||
validator: RegExpValidator { regExp: /^\d{0,3}([\,|\.]\d*)?$/ }
|
||||
onTextChanged: manager.onPeakHeightChanged(text)
|
||||
}
|
||||
|
||||
Label {
|
||||
text: catalog.i18nc("@action:label", "Base (mm)")
|
||||
width: 150 * screenScaleFactor
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
}
|
||||
UM.ToolTip
|
||||
{
|
||||
text: catalog.i18nc("@info:tooltip", "The maximum distance of each pixel from \"Base.\"")
|
||||
visible: peak_height.hovered || peak_height_label.containsMouse
|
||||
targetPoint: Qt.point(peak_height.x + Math.round(peak_height.width / 2), 0)
|
||||
y: peak_height.y + peak_height.height + UM.Theme.getSize("default_margin").height
|
||||
}
|
||||
|
||||
TextField {
|
||||
id: base_height
|
||||
objectName: "Base_Height"
|
||||
validator: RegExpValidator {regExp: /^\d{0,3}([\,|\.]\d*)?$/}
|
||||
width: 180 * screenScaleFactor
|
||||
onTextChanged: { manager.onBaseHeightChanged(text) }
|
||||
}
|
||||
UM.Label
|
||||
{
|
||||
Layout.fillWidth: true
|
||||
Layout.minimumWidth: UM.Theme.getSize("setting_control").width
|
||||
text: catalog.i18nc("@action:label", "Base (mm)")
|
||||
Layout.alignment: Qt.AlignVCenter
|
||||
|
||||
MouseArea
|
||||
{
|
||||
id: base_height_label
|
||||
anchors.fill: parent
|
||||
hoverEnabled: true
|
||||
}
|
||||
}
|
||||
|
||||
UM.TooltipArea {
|
||||
Layout.fillWidth:true
|
||||
height: childrenRect.height
|
||||
text: catalog.i18nc("@info:tooltip","The width in millimeters on the build plate.")
|
||||
Row {
|
||||
width: parent.width
|
||||
Cura.TextField
|
||||
{
|
||||
id: base_height
|
||||
selectByMouse: true
|
||||
Layout.fillWidth: true
|
||||
Layout.minimumWidth: UM.Theme.getSize("setting_control").width
|
||||
objectName: "Base_Height"
|
||||
validator: RegExpValidator { regExp: /^\d{0,3}([\,|\.]\d*)?$/ }
|
||||
onTextChanged: manager.onBaseHeightChanged(text)
|
||||
}
|
||||
|
||||
Label {
|
||||
text: catalog.i18nc("@action:label", "Width (mm)")
|
||||
width: 150 * screenScaleFactor
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
}
|
||||
UM.ToolTip
|
||||
{
|
||||
text: catalog.i18nc("@info:tooltip", "The base height from the build plate in millimeters.")
|
||||
visible: base_height.hovered || base_height_label.containsMouse
|
||||
targetPoint: Qt.point(base_height.x + Math.round(base_height.width / 2), 0)
|
||||
y: base_height.y + base_height.height + UM.Theme.getSize("default_margin").height
|
||||
}
|
||||
|
||||
TextField {
|
||||
id: width
|
||||
objectName: "Width"
|
||||
focus: true
|
||||
validator: RegExpValidator {regExp: /^[1-9]\d{0,2}([\,|\.]\d*)?$/}
|
||||
width: 180 * screenScaleFactor
|
||||
onTextChanged: { manager.onWidthChanged(text) }
|
||||
}
|
||||
UM.Label
|
||||
{
|
||||
Layout.fillWidth: true
|
||||
Layout.minimumWidth: UM.Theme.getSize("setting_control").width
|
||||
text: catalog.i18nc("@action:label", "Width (mm)")
|
||||
Layout.alignment: Qt.AlignVCenter
|
||||
|
||||
MouseArea {
|
||||
id: width_label
|
||||
anchors.fill: parent
|
||||
hoverEnabled: true
|
||||
}
|
||||
}
|
||||
|
||||
UM.TooltipArea {
|
||||
Layout.fillWidth:true
|
||||
height: childrenRect.height
|
||||
text: catalog.i18nc("@info:tooltip","The depth in millimeters on the build plate")
|
||||
Row {
|
||||
width: parent.width
|
||||
Cura.TextField
|
||||
{
|
||||
id: width
|
||||
selectByMouse: true
|
||||
objectName: "Width"
|
||||
Layout.fillWidth: true
|
||||
Layout.minimumWidth: UM.Theme.getSize("setting_control").width
|
||||
focus: true
|
||||
validator: RegExpValidator { regExp: /^[1-9]\d{0,2}([\,|\.]\d*)?$/ }
|
||||
onTextChanged: manager.onWidthChanged(text)
|
||||
}
|
||||
|
||||
Label {
|
||||
text: catalog.i18nc("@action:label", "Depth (mm)")
|
||||
width: 150 * screenScaleFactor
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
}
|
||||
TextField {
|
||||
id: depth
|
||||
objectName: "Depth"
|
||||
focus: true
|
||||
validator: RegExpValidator {regExp: /^[1-9]\d{0,2}([\,|\.]\d*)?$/}
|
||||
width: 180 * screenScaleFactor
|
||||
onTextChanged: { manager.onDepthChanged(text) }
|
||||
}
|
||||
UM.ToolTip
|
||||
{
|
||||
text: catalog.i18nc("@info:tooltip", "The width in millimeters on the build plate")
|
||||
visible: width.hovered || width_label.containsMouse
|
||||
targetPoint: Qt.point(width.x + Math.round(width.width / 2), 0)
|
||||
y: width.y + width.height + UM.Theme.getSize("default_margin").height
|
||||
}
|
||||
|
||||
UM.Label
|
||||
{
|
||||
Layout.fillWidth: true
|
||||
Layout.minimumWidth: UM.Theme.getSize("setting_control").width
|
||||
text: catalog.i18nc("@action:label", "Depth (mm)")
|
||||
Layout.alignment: Qt.AlignVCenter
|
||||
|
||||
MouseArea {
|
||||
id: depth_label
|
||||
anchors.fill: parent
|
||||
hoverEnabled: true
|
||||
}
|
||||
}
|
||||
|
||||
UM.TooltipArea {
|
||||
Layout.fillWidth:true
|
||||
height: childrenRect.height
|
||||
text: catalog.i18nc("@info:tooltip","For lithophanes dark pixels should correspond to thicker locations in order to block more light coming through. For height maps lighter pixels signify higher terrain, so lighter pixels should correspond to thicker locations in the generated 3D model.")
|
||||
Row {
|
||||
width: parent.width
|
||||
Cura.TextField
|
||||
{
|
||||
id: depth
|
||||
Layout.fillWidth: true
|
||||
Layout.minimumWidth: UM.Theme.getSize("setting_control").width
|
||||
selectByMouse: true
|
||||
objectName: "Depth"
|
||||
focus: true
|
||||
validator: RegExpValidator { regExp: /^[1-9]\d{0,2}([\,|\.]\d*)?$/ }
|
||||
onTextChanged: manager.onDepthChanged(text)
|
||||
}
|
||||
|
||||
//Empty label so 2 column layout works.
|
||||
Label {
|
||||
text: ""
|
||||
width: 150 * screenScaleFactor
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
}
|
||||
ComboBox {
|
||||
id: lighter_is_higher
|
||||
objectName: "Lighter_Is_Higher"
|
||||
model: [ catalog.i18nc("@item:inlistbox","Darker is higher"), catalog.i18nc("@item:inlistbox","Lighter is higher") ]
|
||||
width: 180 * screenScaleFactor
|
||||
onCurrentIndexChanged: { manager.onImageColorInvertChanged(currentIndex) }
|
||||
}
|
||||
UM.ToolTip
|
||||
{
|
||||
text: catalog.i18nc("@info:tooltip", "The depth in millimeters on the build plate")
|
||||
visible: depth.hovered || depth_label.containsMouse
|
||||
targetPoint: Qt.point(depth.x + Math.round(depth.width / 2), 0)
|
||||
y: depth.y + depth.height + UM.Theme.getSize("default_margin").height
|
||||
}
|
||||
|
||||
UM.Label
|
||||
{
|
||||
Layout.fillWidth: true
|
||||
Layout.minimumWidth: UM.Theme.getSize("setting_control").width
|
||||
text: ""
|
||||
Layout.alignment: Qt.AlignVCenter
|
||||
|
||||
MouseArea {
|
||||
id: lighter_is_higher_label
|
||||
anchors.fill: parent
|
||||
hoverEnabled: true
|
||||
}
|
||||
}
|
||||
|
||||
UM.TooltipArea {
|
||||
Layout.fillWidth:true
|
||||
height: childrenRect.height
|
||||
text: catalog.i18nc("@info:tooltip","For lithophanes a simple logarithmic model for translucency is available. For height maps the pixel values correspond to heights linearly.")
|
||||
Row {
|
||||
width: parent.width
|
||||
Cura.ComboBox
|
||||
{
|
||||
id: lighter_is_higher
|
||||
Layout.fillWidth: true
|
||||
Layout.minimumWidth: UM.Theme.getSize("setting_control").width
|
||||
Layout.preferredHeight: UM.Theme.getSize("setting_control").height
|
||||
objectName: "Lighter_Is_Higher"
|
||||
textRole: "text"
|
||||
model: [
|
||||
{ text: catalog.i18nc("@item:inlistbox", "Darker is higher") },
|
||||
{ text: catalog.i18nc("@item:inlistbox", "Lighter is higher") }
|
||||
]
|
||||
onCurrentIndexChanged: { manager.onImageColorInvertChanged(currentIndex) }
|
||||
}
|
||||
|
||||
Label {
|
||||
text: "Color Model"
|
||||
width: 150 * screenScaleFactor
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
}
|
||||
ComboBox {
|
||||
id: color_model
|
||||
objectName: "ColorModel"
|
||||
model: [ catalog.i18nc("@item:inlistbox","Linear"), catalog.i18nc("@item:inlistbox","Translucency") ]
|
||||
width: 180 * screenScaleFactor
|
||||
onCurrentIndexChanged: { manager.onColorModelChanged(currentIndex) }
|
||||
}
|
||||
UM.ToolTip
|
||||
{
|
||||
text: catalog.i18nc("@info:tooltip", "For lithophanes dark pixels should correspond to thicker locations in order to block more light coming through. For height maps lighter pixels signify higher terrain, so lighter pixels should correspond to thicker locations in the generated 3D model.")
|
||||
visible: lighter_is_higher.hovered || lighter_is_higher_label.containsMouse
|
||||
targetPoint: Qt.point(lighter_is_higher.x + Math.round(lighter_is_higher.width / 2), 0)
|
||||
y: lighter_is_higher.y + lighter_is_higher.height + UM.Theme.getSize("default_margin").height
|
||||
}
|
||||
|
||||
UM.Label
|
||||
{
|
||||
Layout.fillWidth: true
|
||||
Layout.minimumWidth: UM.Theme.getSize("setting_control").width
|
||||
text: catalog.i18nc("@action:label", "Color Model")
|
||||
Layout.alignment: Qt.AlignVCenter
|
||||
|
||||
MouseArea {
|
||||
id: color_model_label
|
||||
anchors.fill: parent
|
||||
hoverEnabled: true
|
||||
}
|
||||
}
|
||||
|
||||
UM.TooltipArea {
|
||||
Layout.fillWidth:true
|
||||
height: childrenRect.height
|
||||
text: catalog.i18nc("@info:tooltip","The percentage of light penetrating a print with a thickness of 1 millimeter. Lowering this value increases the contrast in dark regions and decreases the contrast in light regions of the image.")
|
||||
visible: color_model.currentText == catalog.i18nc("@item:inlistbox","Translucency")
|
||||
Row {
|
||||
width: parent.width
|
||||
Cura.ComboBox
|
||||
{
|
||||
id: color_model
|
||||
Layout.fillWidth: true
|
||||
Layout.minimumWidth: UM.Theme.getSize("setting_control").width
|
||||
Layout.preferredHeight: UM.Theme.getSize("setting_control").height
|
||||
objectName: "ColorModel"
|
||||
textRole: "text"
|
||||
model: [
|
||||
{ text: catalog.i18nc("@item:inlistbox", "Linear") },
|
||||
{ text: catalog.i18nc("@item:inlistbox", "Translucency") }
|
||||
]
|
||||
onCurrentIndexChanged: { manager.onColorModelChanged(currentIndex) }
|
||||
}
|
||||
|
||||
Label {
|
||||
text: catalog.i18nc("@action:label", "1mm Transmittance (%)")
|
||||
width: 150 * screenScaleFactor
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
}
|
||||
TextField {
|
||||
id: transmittance
|
||||
objectName: "Transmittance"
|
||||
focus: true
|
||||
validator: RegExpValidator {regExp: /^[1-9]\d{0,2}([\,|\.]\d*)?$/}
|
||||
width: 180 * screenScaleFactor
|
||||
onTextChanged: { manager.onTransmittanceChanged(text) }
|
||||
}
|
||||
UM.ToolTip
|
||||
{
|
||||
text: catalog.i18nc("@info:tooltip", "For lithophanes a simple logarithmic model for translucency is available. For height maps the pixel values correspond to heights linearly.")
|
||||
visible: color_model.hovered || color_model_label.containsMouse
|
||||
targetPoint: Qt.point(color_model.x + Math.round(color_model.width / 2), 0)
|
||||
y: color_model.y + color_model.height + UM.Theme.getSize("default_margin").height
|
||||
}
|
||||
|
||||
UM.Label
|
||||
{
|
||||
Layout.fillWidth: true
|
||||
Layout.minimumWidth: UM.Theme.getSize("setting_control").width
|
||||
text: catalog.i18nc("@action:label", "1mm Transmittance (%)")
|
||||
Layout.alignment: Qt.AlignVCenter
|
||||
|
||||
MouseArea {
|
||||
id: transmittance_label
|
||||
anchors.fill: parent
|
||||
hoverEnabled: true
|
||||
}
|
||||
}
|
||||
|
||||
UM.TooltipArea {
|
||||
Layout.fillWidth:true
|
||||
height: childrenRect.height
|
||||
text: catalog.i18nc("@info:tooltip","The amount of smoothing to apply to the image.")
|
||||
Row {
|
||||
width: parent.width
|
||||
Cura.TextField
|
||||
{
|
||||
Layout.fillWidth: true
|
||||
Layout.minimumWidth: UM.Theme.getSize("setting_control").width
|
||||
selectByMouse: true
|
||||
objectName: "Transmittance"
|
||||
validator: RegExpValidator { regExp: /^[1-9]\d{0,2}([\,|\.]\d*)?$/ }
|
||||
onTextChanged: manager.onTransmittanceChanged(text)
|
||||
|
||||
Label {
|
||||
text: catalog.i18nc("@action:label", "Smoothing")
|
||||
width: 150 * screenScaleFactor
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
}
|
||||
|
||||
Item {
|
||||
width: 180 * screenScaleFactor
|
||||
height: 20 * screenScaleFactor
|
||||
Layout.fillWidth: true
|
||||
|
||||
Slider {
|
||||
id: smoothing
|
||||
objectName: "Smoothing"
|
||||
maximumValue: 100.0
|
||||
stepSize: 1.0
|
||||
width: 180
|
||||
onValueChanged: { manager.onSmoothingChanged(value) }
|
||||
}
|
||||
}
|
||||
UM.ToolTip
|
||||
{
|
||||
text: catalog.i18nc("@info:tooltip", "The percentage of light penetrating a print with a thickness of 1 millimeter. Lowering this value increases the contrast in dark regions and decreases the contrast in light regions of the image.")
|
||||
visible: parent.hovered || transmittance_label.containsMouse
|
||||
targetPoint: Qt.point(parent.x + Math.round(parent.width / 2), 0)
|
||||
y: parent.y + parent.height + UM.Theme.getSize("default_margin").height
|
||||
}
|
||||
}
|
||||
|
||||
UM.Label
|
||||
{
|
||||
Layout.fillWidth: true
|
||||
Layout.minimumWidth: UM.Theme.getSize("setting_control").width
|
||||
text: catalog.i18nc("@action:label", "Smoothing")
|
||||
Layout.alignment: Qt.AlignVCenter
|
||||
|
||||
MouseArea
|
||||
{
|
||||
id: smoothing_label
|
||||
anchors.fill: parent
|
||||
hoverEnabled: true
|
||||
}
|
||||
}
|
||||
|
||||
Cura.SpinBox
|
||||
{
|
||||
id: smoothing
|
||||
Layout.fillWidth: true
|
||||
Layout.minimumWidth: UM.Theme.getSize("setting_control").width
|
||||
objectName: "Smoothing"
|
||||
to: 100.0
|
||||
stepSize: 1.0
|
||||
onValueChanged: manager.onSmoothingChanged(value)
|
||||
}
|
||||
|
||||
UM.ToolTip
|
||||
{
|
||||
text: catalog.i18nc("@info:tooltip", "The amount of smoothing to apply to the image.")
|
||||
visible: smoothing.hovered || smoothing_label.containsMouse
|
||||
targetPoint: Qt.point(smoothing.x + Math.round(smoothing.width / 2), 0)
|
||||
y: smoothing.y + smoothing.height + UM.Theme.getSize("default_margin").height
|
||||
}
|
||||
}
|
||||
|
||||
Item
|
||||
{
|
||||
ButtonGroup
|
||||
{
|
||||
buttons: [ok_button, cancel_button]
|
||||
checkedButton: ok_button
|
||||
}
|
||||
}
|
||||
|
||||
onAccepted: manager.onOkButtonClicked()
|
||||
onRejected: manager.onCancelButtonClicked()
|
||||
|
||||
buttonSpacing: UM.Theme.getSize("default_margin").width
|
||||
|
||||
rightButtons: [
|
||||
Button
|
||||
Cura.TertiaryButton
|
||||
{
|
||||
id:ok_button
|
||||
text: catalog.i18nc("@action:button","OK");
|
||||
onClicked: { manager.onOkButtonClicked() }
|
||||
enabled: true
|
||||
id: cancel_button
|
||||
text: catalog.i18nc("@action:button", "Cancel")
|
||||
onClicked: manager.onCancelButtonClicked()
|
||||
},
|
||||
Button
|
||||
Cura.PrimaryButton
|
||||
{
|
||||
id:cancel_button
|
||||
text: catalog.i18nc("@action:button","Cancel");
|
||||
onClicked: { manager.onCancelButtonClicked() }
|
||||
enabled: true
|
||||
id: ok_button
|
||||
text: catalog.i18nc("@action:button", "OK")
|
||||
onClicked: manager.onOkButtonClicked()
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
// Copyright (c) 2019 Ultimaker B.V.
|
||||
// Cura is released under the terms of the LGPLv3 or higher.
|
||||
//Copyright (c) 2022 Ultimaker B.V.
|
||||
//Cura is released under the terms of the LGPLv3 or higher.
|
||||
|
||||
import QtQuick 2.10
|
||||
import QtQuick.Controls 2.3
|
||||
import QtQuick.Layouts 1.3
|
||||
|
||||
import UM 1.3 as UM
|
||||
import UM 1.5 as UM
|
||||
import Cura 1.1 as Cura
|
||||
|
||||
|
||||
|
@ -88,7 +88,7 @@ Cura.MachineAction
|
|||
}
|
||||
}
|
||||
|
||||
Label
|
||||
UM.Label
|
||||
{
|
||||
id: machineNameLabel
|
||||
anchors.top: parent.top
|
||||
|
@ -97,7 +97,6 @@ Cura.MachineAction
|
|||
text: Cura.MachineManager.activeMachine.name
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
font: UM.Theme.getFont("large_bold")
|
||||
renderType: Text.NativeRendering
|
||||
}
|
||||
|
||||
UM.TabRow
|
||||
|
@ -111,6 +110,7 @@ Cura.MachineAction
|
|||
model: tabNameModel
|
||||
delegate: UM.TabRowButton
|
||||
{
|
||||
checked: model.index == 0
|
||||
text: model.name
|
||||
}
|
||||
}
|
||||
|
|
|
@ -31,8 +31,11 @@ class Marketplace(Extension, QObject):
|
|||
# Not entirely the cleanest code, since the localPackage list also checks the server if there are updates
|
||||
# Since that in turn will trigger notifications to be shown, we do need to construct it here and make sure
|
||||
# that it checks for updates...
|
||||
preferences = CuraApplication.getInstance().getPreferences()
|
||||
preferences.addPreference("info/automatic_plugin_update_check", True)
|
||||
self._local_package_list = LocalPackageList(self)
|
||||
self._local_package_list.checkForUpdates(self._package_manager.local_packages)
|
||||
if preferences.getValue("info/automatic_plugin_update_check"):
|
||||
self._local_package_list.checkForUpdates(self._package_manager.local_packages)
|
||||
|
||||
self._package_manager.installedPackagesChanged.connect(self.checkIfRestartNeeded)
|
||||
|
||||
|
|
|
@ -14,8 +14,8 @@ UM.Dialog
|
|||
{
|
||||
id: licenseDialog
|
||||
title: catalog.i18nc("@button", "Plugin license agreement")
|
||||
minimumWidth: UM.Theme.getSize("license_window_minimum").width
|
||||
minimumHeight: UM.Theme.getSize("license_window_minimum").height
|
||||
minimumWidth: UM.Theme.getSize("modal_window_minimum").width
|
||||
minimumHeight: UM.Theme.getSize("modal_window_minimum").height
|
||||
width: minimumWidth
|
||||
height: minimumHeight
|
||||
backgroundColor: UM.Theme.getColor("main_background")
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
// Copyright (c) 2021 Ultimaker B.V.
|
||||
// Cura is released under the terms of the LGPLv3 or higher.
|
||||
|
||||
import UM 1.2 as UM
|
||||
import UM 1.5 as UM
|
||||
import Cura 1.6 as Cura
|
||||
|
||||
import QtQuick 2.15
|
||||
|
@ -25,7 +25,7 @@ TabButton
|
|||
radius: Math.round(width * 0.5)
|
||||
}
|
||||
|
||||
Cura.ToolTip
|
||||
UM.ToolTip
|
||||
{
|
||||
id: tooltip
|
||||
|
||||
|
|
|
@ -64,8 +64,8 @@ Window
|
|||
// Page title.
|
||||
Item
|
||||
{
|
||||
implicitWidth: parent.width
|
||||
implicitHeight: childrenRect.height + UM.Theme.getSize("default_margin").height
|
||||
Layout.preferredWidth: parent.width
|
||||
Layout.preferredHeight: childrenRect.height + UM.Theme.getSize("default_margin").height
|
||||
|
||||
Label
|
||||
{
|
||||
|
|
|
@ -24,7 +24,7 @@ Item
|
|||
height: UM.Theme.getSize("card").height
|
||||
|
||||
// card icon
|
||||
Image
|
||||
Item
|
||||
{
|
||||
id: packageItem
|
||||
anchors
|
||||
|
@ -35,19 +35,36 @@ Item
|
|||
}
|
||||
width: UM.Theme.getSize("card_icon").width
|
||||
height: width
|
||||
sourceSize.height: height
|
||||
sourceSize.width: width
|
||||
source:
|
||||
|
||||
property bool packageHasIcon: packageData.iconUrl != ""
|
||||
|
||||
Image
|
||||
{
|
||||
if (packageData.iconUrl != "")
|
||||
visible: parent.packageHasIcon
|
||||
anchors.fill: parent
|
||||
source: packageData.iconUrl
|
||||
sourceSize.height: height
|
||||
sourceSize.width: width
|
||||
}
|
||||
|
||||
UM.RecolorImage
|
||||
{
|
||||
visible: !parent.packageHasIcon
|
||||
anchors.fill: parent
|
||||
sourceSize.height: height
|
||||
sourceSize.width: width
|
||||
color: UM.Theme.getColor("text")
|
||||
source:
|
||||
{
|
||||
return packageData.iconUrl
|
||||
}
|
||||
switch (packageData.packageType)
|
||||
{
|
||||
case "plugin": return "../images/Plugin.svg";
|
||||
case "material": return "../images/Spool.svg";
|
||||
default: return "../images/placeholder.svg";
|
||||
switch (packageData.packageType)
|
||||
{
|
||||
case "plugin":
|
||||
return "../images/Plugin.svg";
|
||||
case "material":
|
||||
return "../images/Spool.svg";
|
||||
default:
|
||||
return "../images/placeholder.svg";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -6,7 +6,7 @@ import QtQuick.Controls 2.15
|
|||
import QtQuick.Layouts 1.3
|
||||
|
||||
import Cura 1.0 as Cura
|
||||
import UM 1.0 as UM
|
||||
import UM 1.5 as UM
|
||||
|
||||
Item
|
||||
{
|
||||
|
@ -38,7 +38,7 @@ Item
|
|||
onClicked: contextStack.pop() //Remove this page, returning to the main package list or whichever thing is beneath it.
|
||||
|
||||
tooltip: catalog.i18nc("@button:tooltip", "Back")
|
||||
toolTipContentAlignment: Cura.ToolTip.ContentAlignment.AlignRight
|
||||
toolTipContentAlignment: UM.Enums.ContentAlignment.AlignRight
|
||||
leftPadding: UM.Theme.getSize("narrow_margin").width
|
||||
rightPadding: leftPadding
|
||||
iconSource: UM.Theme.getIcon("ArrowLeft")
|
||||
|
|
|
@ -12,7 +12,7 @@ Control
|
|||
implicitWidth: UM.Theme.getSize("card_tiny_icon").width
|
||||
implicitHeight: UM.Theme.getSize("card_tiny_icon").height
|
||||
|
||||
Cura.ToolTip
|
||||
UM.ToolTip
|
||||
{
|
||||
tooltipText:
|
||||
{
|
||||
|
|
|
@ -2,43 +2,20 @@
|
|||
// Cura is released under the terms of the LGPLv3 or higher.
|
||||
|
||||
import QtQuick 2.2
|
||||
import QtQuick.Controls 1.1
|
||||
import QtQuick.Controls.Styles 1.1
|
||||
|
||||
import UM 1.2 as UM
|
||||
|
||||
|
||||
Button
|
||||
UM.SimpleButton
|
||||
{
|
||||
id: modelCheckerButton
|
||||
|
||||
UM.I18nCatalog
|
||||
{
|
||||
id: catalog
|
||||
name: "cura"
|
||||
}
|
||||
|
||||
visible: manager.hasWarnings
|
||||
tooltip: catalog.i18nc("@info:tooltip", "Some things could be problematic in this print. Click to see tips for adjustment.")
|
||||
onClicked: manager.showWarnings()
|
||||
|
||||
width: UM.Theme.getSize("save_button_specs_icons").width
|
||||
height: UM.Theme.getSize("save_button_specs_icons").height
|
||||
|
||||
iconSource: "model_checker.svg"
|
||||
anchors.verticalCenter: parent ? parent.verticalCenter : undefined
|
||||
|
||||
style: ButtonStyle
|
||||
{
|
||||
background: Item
|
||||
{
|
||||
UM.RecolorImage
|
||||
{
|
||||
width: UM.Theme.getSize("save_button_specs_icons").width;
|
||||
height: UM.Theme.getSize("save_button_specs_icons").height;
|
||||
sourceSize.height: width;
|
||||
color: control.hovered ? UM.Theme.getColor("text_scene_hover") : UM.Theme.getColor("text_scene");
|
||||
source: "model_checker.svg"
|
||||
}
|
||||
}
|
||||
}
|
||||
color: UM.Theme.getColor("text_scene")
|
||||
hoverColor: UM.Theme.getColor("text_scene_hover")
|
||||
}
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
|
||||
import QtQuick 2.10
|
||||
import QtQuick.Controls 2.0
|
||||
import UM 1.3 as UM
|
||||
import UM 1.5 as UM
|
||||
import Cura 1.0 as Cura
|
||||
|
||||
// We show a nice overlay on the 3D viewer when the current output device has no monitor view
|
||||
|
@ -90,7 +90,7 @@ Rectangle
|
|||
visible: monitorViewComponent.sourceComponent == null
|
||||
|
||||
// CASE 2: CAN MONITOR & NOT CONNECTED
|
||||
Label
|
||||
UM.Label
|
||||
{
|
||||
anchors
|
||||
{
|
||||
|
@ -99,14 +99,10 @@ Rectangle
|
|||
visible: isNetworkConfigured && !isConnected
|
||||
text: catalog.i18nc("@info", "Please make sure your printer has a connection:\n- Check if the printer is turned on.\n- Check if the printer is connected to the network.\n- Check if you are signed in to discover cloud-connected printers.")
|
||||
font: UM.Theme.getFont("medium")
|
||||
color: UM.Theme.getColor("text")
|
||||
wrapMode: Text.WordWrap
|
||||
lineHeight: UM.Theme.getSize("monitor_text_line_large").height
|
||||
lineHeightMode: Text.FixedHeight
|
||||
width: contentWidth
|
||||
}
|
||||
|
||||
Label
|
||||
UM.Label
|
||||
{
|
||||
id: noNetworkLabel
|
||||
anchors
|
||||
|
@ -116,11 +112,7 @@ Rectangle
|
|||
visible: !isNetworkConfigured && isNetworkConfigurable
|
||||
text: catalog.i18nc("@info", "Please connect your printer to the network.")
|
||||
font: UM.Theme.getFont("medium")
|
||||
color: UM.Theme.getColor("text")
|
||||
wrapMode: Text.WordWrap
|
||||
width: contentWidth
|
||||
lineHeight: UM.Theme.getSize("monitor_text_line_large").height
|
||||
lineHeightMode: Text.FixedHeight
|
||||
}
|
||||
Item
|
||||
{
|
||||
|
@ -129,7 +121,6 @@ Rectangle
|
|||
left: noNetworkLabel.left
|
||||
}
|
||||
visible: !isNetworkConfigured && isNetworkConfigurable
|
||||
height: UM.Theme.getSize("monitor_text_line").height
|
||||
width: childrenRect.width
|
||||
|
||||
UM.RecolorImage
|
||||
|
@ -138,8 +129,8 @@ Rectangle
|
|||
anchors.verticalCenter: parent.verticalCenter
|
||||
color: UM.Theme.getColor("text_link")
|
||||
source: UM.Theme.getIcon("LinkExternal")
|
||||
width: UM.Theme.getSize("monitor_external_link_icon").width
|
||||
height: UM.Theme.getSize("monitor_external_link_icon").height
|
||||
width: UM.Theme.getSize("icon_indicator").width
|
||||
height: UM.Theme.getSize("icon_indicator").height
|
||||
}
|
||||
Label
|
||||
{
|
||||
|
|
|
@ -1,62 +1,24 @@
|
|||
// Copyright (c) 2015 Ultimaker B.V.
|
||||
// Copyright (c) 2022 Ultimaker B.V.
|
||||
// Uranium is released under the terms of the LGPLv3 or higher.
|
||||
|
||||
import QtQuick 2.2
|
||||
import QtQuick.Controls 1.1
|
||||
import QtQuick.Controls.Styles 1.1
|
||||
import QtQuick.Layouts 1.1
|
||||
|
||||
import UM 1.1 as UM
|
||||
import QtQuick.Controls 2.1
|
||||
|
||||
import Cura 1.5 as Cura
|
||||
import UM 1.5 as UM
|
||||
import ".."
|
||||
|
||||
Button {
|
||||
Cura.CategoryButton
|
||||
{
|
||||
id: base;
|
||||
|
||||
style: ButtonStyle {
|
||||
background: Item { }
|
||||
label: Row
|
||||
{
|
||||
spacing: UM.Theme.getSize("default_lining").width
|
||||
categoryIcon: definition ? UM.Theme.getIcon(definition.icon) : ""
|
||||
labelText: definition ? definition.label : ""
|
||||
expanded: definition ? definition.expanded : false
|
||||
|
||||
UM.RecolorImage
|
||||
{
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
height: (label.height / 2) | 0
|
||||
width: height
|
||||
source: control.checked ? UM.Theme.getIcon("ChevronSingleDown") : UM.Theme.getIcon("ChevronSingleRight");
|
||||
color: control.hovered ? palette.highlight : palette.buttonText
|
||||
}
|
||||
UM.RecolorImage
|
||||
{
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
height: label.height
|
||||
width: height
|
||||
source: control.iconSource
|
||||
color: control.hovered ? palette.highlight : palette.buttonText
|
||||
}
|
||||
Label
|
||||
{
|
||||
id: label
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
text: control.text
|
||||
color: control.hovered ? palette.highlight : palette.buttonText
|
||||
font.bold: true
|
||||
}
|
||||
|
||||
SystemPalette { id: palette }
|
||||
}
|
||||
}
|
||||
|
||||
signal showTooltip(string text);
|
||||
signal hideTooltip();
|
||||
signal showTooltip(string text)
|
||||
signal hideTooltip()
|
||||
signal contextMenuRequested()
|
||||
|
||||
text: definition.label
|
||||
iconSource: UM.Theme.getIcon(definition.icon)
|
||||
|
||||
checkable: true
|
||||
checked: definition.expanded
|
||||
|
||||
onClicked: definition.expanded ? settingDefinitionsModel.collapseRecursive(definition.key) : settingDefinitionsModel.expandRecursive(definition.key)
|
||||
onClicked: expanded ? settingDefinitionsModel.collapseRecursive(definition.key) : settingDefinitionsModel.expandRecursive(definition.key)
|
||||
}
|
||||
|
|
|
@ -3,25 +3,22 @@
|
|||
|
||||
import QtQuick 2.1
|
||||
import QtQuick.Layouts 1.1
|
||||
import QtQuick.Controls 1.1
|
||||
import QtQuick.Controls.Styles 1.1
|
||||
import QtQuick.Controls 2.1
|
||||
|
||||
import UM 1.5 as UM
|
||||
|
||||
import Cura 1.0 as Cura
|
||||
|
||||
UM.TooltipArea
|
||||
{
|
||||
x: model.depth * UM.Theme.getSize("default_margin").width;
|
||||
text: model.description;
|
||||
x: model.depth * UM.Theme.getSize("narrow_margin").width
|
||||
text: model.description
|
||||
|
||||
width: childrenRect.width;
|
||||
height: childrenRect.height;
|
||||
width: childrenRect.width
|
||||
height: childrenRect.height
|
||||
|
||||
UM.CheckBox
|
||||
{
|
||||
id: check
|
||||
|
||||
text: definition.label
|
||||
checked: addedSettingsModel.getVisible(model.key)
|
||||
|
||||
|
|
|
@ -1,11 +1,10 @@
|
|||
// Copyright (c) 2021 Ultimaker B.V.
|
||||
// Uranium is released under the terms of the LGPLv3 or higher.
|
||||
//Copyright (c) 2022 Ultimaker B.V.
|
||||
//Cura is released under the terms of the LGPLv3 or higher.
|
||||
|
||||
import QtQuick 2.2
|
||||
import QtQuick.Controls 1.2
|
||||
import QtQuick.Controls.Styles 1.2
|
||||
import QtQuick.Controls 2.15
|
||||
|
||||
import UM 1.2 as UM
|
||||
import UM 1.5 as UM
|
||||
import Cura 1.0 as Cura
|
||||
import ".."
|
||||
|
||||
|
@ -76,63 +75,72 @@ Item
|
|||
id: meshTypeButtons
|
||||
spacing: UM.Theme.getSize("default_margin").width
|
||||
|
||||
Button
|
||||
UM.ToolbarButton
|
||||
{
|
||||
id: normalButton
|
||||
text: catalog.i18nc("@label", "Normal model")
|
||||
iconSource: UM.Theme.getIcon("Infill0");
|
||||
toolItem: UM.RecolorImage
|
||||
{
|
||||
source: UM.Theme.getIcon("Infill0")
|
||||
color: UM.Theme.getColor("icon")
|
||||
}
|
||||
property bool needBorder: true
|
||||
checkable: true
|
||||
onClicked: setMeshType(normalMeshType);
|
||||
style: UM.Theme.styles.tool_button;
|
||||
z: 4
|
||||
}
|
||||
|
||||
Button
|
||||
UM.ToolbarButton
|
||||
{
|
||||
id: supportMeshButton
|
||||
text: catalog.i18nc("@label", "Print as support")
|
||||
iconSource: UM.Theme.getIcon("MeshTypeSupport");
|
||||
toolItem: UM.RecolorImage
|
||||
{
|
||||
source: UM.Theme.getIcon("MeshTypeSupport")
|
||||
color: UM.Theme.getColor("icon")
|
||||
}
|
||||
property bool needBorder: true
|
||||
checkable:true
|
||||
onClicked: setMeshType(supportMeshType)
|
||||
style: UM.Theme.styles.tool_button;
|
||||
z: 3
|
||||
}
|
||||
|
||||
Button
|
||||
UM.ToolbarButton
|
||||
{
|
||||
id: overlapMeshButton
|
||||
text: catalog.i18nc("@label", "Modify settings for overlaps")
|
||||
iconSource: UM.Theme.getIcon("MeshTypeIntersect");
|
||||
toolItem: UM.RecolorImage
|
||||
{
|
||||
source: UM.Theme.getIcon("MeshTypeIntersect")
|
||||
color: UM.Theme.getColor("icon")
|
||||
}
|
||||
property bool needBorder: true
|
||||
checkable:true
|
||||
onClicked: setMeshType(infillMeshType)
|
||||
style: UM.Theme.styles.tool_button;
|
||||
z: 2
|
||||
}
|
||||
|
||||
Button
|
||||
UM.ToolbarButton
|
||||
{
|
||||
id: antiOverhangMeshButton
|
||||
text: catalog.i18nc("@label", "Don't support overlaps")
|
||||
iconSource: UM.Theme.getIcon("BlockSupportOverlaps");
|
||||
toolItem: UM.RecolorImage
|
||||
{
|
||||
source: UM.Theme.getIcon("BlockSupportOverlaps")
|
||||
color: UM.Theme.getColor("icon")
|
||||
}
|
||||
property bool needBorder: true
|
||||
checkable: true
|
||||
onClicked: setMeshType(antiOverhangMeshType)
|
||||
style: UM.Theme.styles.tool_button;
|
||||
z: 1
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Label
|
||||
UM.Label
|
||||
{
|
||||
id: meshTypeLabel
|
||||
font: UM.Theme.getFont("default")
|
||||
color: UM.Theme.getColor("text")
|
||||
height: UM.Theme.getSize("setting").height
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
}
|
||||
|
||||
|
||||
|
@ -179,192 +187,187 @@ Item
|
|||
// It kinda looks ugly otherwise (big panel, no content on it)
|
||||
id: currentSettings
|
||||
property int maximumHeight: 200 * screenScaleFactor
|
||||
height: Math.min(contents.count * (UM.Theme.getSize("section").height + UM.Theme.getSize("default_lining").height), maximumHeight)
|
||||
height: Math.min(contents.count * (UM.Theme.getSize("section").height + UM.Theme.getSize("narrow_margin").height + UM.Theme.getSize("default_lining").height), maximumHeight)
|
||||
visible: currentMeshType != "anti_overhang_mesh"
|
||||
|
||||
ScrollView
|
||||
ListView
|
||||
{
|
||||
id: contents
|
||||
height: parent.height
|
||||
width: UM.Theme.getSize("setting").width + UM.Theme.getSize("default_margin").width
|
||||
style: UM.Theme.styles.scrollview
|
||||
|
||||
ListView
|
||||
ScrollBar.vertical: UM.ScrollBar {}
|
||||
clip: true
|
||||
spacing: UM.Theme.getSize("default_lining").height
|
||||
|
||||
model: UM.SettingDefinitionsModel
|
||||
{
|
||||
id: contents
|
||||
spacing: UM.Theme.getSize("default_lining").height
|
||||
|
||||
model: UM.SettingDefinitionsModel
|
||||
id: addedSettingsModel
|
||||
containerId: Cura.MachineManager.activeMachine != null ? Cura.MachineManager.activeMachine.definition.id: ""
|
||||
expanded: [ "*" ]
|
||||
filter:
|
||||
{
|
||||
id: addedSettingsModel
|
||||
containerId: Cura.MachineManager.activeMachine != null ? Cura.MachineManager.activeMachine.definition.id: ""
|
||||
expanded: [ "*" ]
|
||||
filter:
|
||||
if (printSequencePropertyProvider.properties.value == "one_at_a_time")
|
||||
{
|
||||
if (printSequencePropertyProvider.properties.value == "one_at_a_time")
|
||||
return {"settable_per_meshgroup": true}
|
||||
}
|
||||
return {"settable_per_mesh": true}
|
||||
}
|
||||
exclude:
|
||||
{
|
||||
var excluded_settings = [ "support_mesh", "anti_overhang_mesh", "cutting_mesh", "infill_mesh" ]
|
||||
|
||||
if (currentMeshType == "support_mesh")
|
||||
{
|
||||
excluded_settings = excluded_settings.concat(base.allCategoriesExceptSupport)
|
||||
}
|
||||
return excluded_settings
|
||||
}
|
||||
|
||||
visibilityHandler: Cura.PerObjectSettingVisibilityHandler
|
||||
{
|
||||
id: visibility_handler
|
||||
selectedObjectId: UM.ActiveTool.properties.getValue("SelectedObjectId")
|
||||
}
|
||||
|
||||
// For some reason the model object is updated after removing him from the memory and
|
||||
// it happens only on Windows. For this reason, set the destroyed value manually.
|
||||
Component.onDestruction:
|
||||
{
|
||||
setDestroyed(true)
|
||||
}
|
||||
}
|
||||
|
||||
delegate: Row
|
||||
{
|
||||
spacing: - UM.Theme.getSize("default_margin").width
|
||||
Loader
|
||||
{
|
||||
id: settingLoader
|
||||
width: UM.Theme.getSize("setting").width
|
||||
height: UM.Theme.getSize("section").height + UM.Theme.getSize("narrow_margin").height
|
||||
enabled: provider.properties.enabled === "True"
|
||||
property var definition: model
|
||||
property var settingDefinitionsModel: addedSettingsModel
|
||||
property var propertyProvider: provider
|
||||
property var globalPropertyProvider: inheritStackProvider
|
||||
property var externalResetHandler: false
|
||||
|
||||
//Qt5.4.2 and earlier has a bug where this causes a crash: https://bugreports.qt.io/browse/QTBUG-35989
|
||||
//In addition, while it works for 5.5 and higher, the ordering of the actual combo box drop down changes,
|
||||
//causing nasty issues when selecting different options. So disable asynchronous loading of enum type completely.
|
||||
asynchronous: model.type != "enum" && model.type != "extruder"
|
||||
|
||||
onLoaded:
|
||||
{
|
||||
settingLoader.item.showRevertButton = false
|
||||
settingLoader.item.showInheritButton = false
|
||||
settingLoader.item.showLinkedSettingIcon = false
|
||||
settingLoader.item.doDepthIndentation = false
|
||||
settingLoader.item.doQualityUserSettingEmphasis = false
|
||||
}
|
||||
|
||||
sourceComponent:
|
||||
{
|
||||
switch(model.type)
|
||||
{
|
||||
return {"settable_per_meshgroup": true}
|
||||
case "int":
|
||||
return settingTextField
|
||||
case "[int]":
|
||||
return settingTextField
|
||||
case "float":
|
||||
return settingTextField
|
||||
case "enum":
|
||||
return settingComboBox
|
||||
case "extruder":
|
||||
return settingExtruder
|
||||
case "optional_extruder":
|
||||
return settingOptionalExtruder
|
||||
case "bool":
|
||||
return settingCheckBox
|
||||
case "str":
|
||||
return settingTextField
|
||||
case "category":
|
||||
return settingCategory
|
||||
default:
|
||||
return settingUnknown
|
||||
}
|
||||
return {"settable_per_mesh": true}
|
||||
}
|
||||
exclude:
|
||||
{
|
||||
var excluded_settings = [ "support_mesh", "anti_overhang_mesh", "cutting_mesh", "infill_mesh" ]
|
||||
|
||||
if (currentMeshType == "support_mesh")
|
||||
{
|
||||
excluded_settings = excluded_settings.concat(base.allCategoriesExceptSupport)
|
||||
}
|
||||
return excluded_settings
|
||||
}
|
||||
|
||||
visibilityHandler: Cura.PerObjectSettingVisibilityHandler
|
||||
{
|
||||
id: visibility_handler
|
||||
selectedObjectId: UM.ActiveTool.properties.getValue("SelectedObjectId")
|
||||
}
|
||||
|
||||
// For some reason the model object is updated after removing him from the memory and
|
||||
// it happens only on Windows. For this reason, set the destroyed value manually.
|
||||
Component.onDestruction:
|
||||
{
|
||||
setDestroyed(true)
|
||||
}
|
||||
}
|
||||
|
||||
delegate: Row
|
||||
Button
|
||||
{
|
||||
spacing: - UM.Theme.getSize("default_margin").width
|
||||
Loader
|
||||
width: Math.round(UM.Theme.getSize("setting").height / 2)
|
||||
height: UM.Theme.getSize("setting").height
|
||||
|
||||
onClicked: addedSettingsModel.setVisible(model.key, false)
|
||||
|
||||
background: Item
|
||||
{
|
||||
id: settingLoader
|
||||
width: UM.Theme.getSize("setting").width
|
||||
height: UM.Theme.getSize("section").height
|
||||
enabled: provider.properties.enabled === "True"
|
||||
property var definition: model
|
||||
property var settingDefinitionsModel: addedSettingsModel
|
||||
property var propertyProvider: provider
|
||||
property var globalPropertyProvider: inheritStackProvider
|
||||
property var externalResetHandler: false
|
||||
|
||||
//Qt5.4.2 and earlier has a bug where this causes a crash: https://bugreports.qt.io/browse/QTBUG-35989
|
||||
//In addition, while it works for 5.5 and higher, the ordering of the actual combo box drop down changes,
|
||||
//causing nasty issues when selecting different options. So disable asynchronous loading of enum type completely.
|
||||
asynchronous: model.type != "enum" && model.type != "extruder"
|
||||
|
||||
onLoaded:
|
||||
UM.RecolorImage
|
||||
{
|
||||
settingLoader.item.showRevertButton = false
|
||||
settingLoader.item.showInheritButton = false
|
||||
settingLoader.item.showLinkedSettingIcon = false
|
||||
settingLoader.item.doDepthIndentation = false
|
||||
settingLoader.item.doQualityUserSettingEmphasis = false
|
||||
}
|
||||
|
||||
sourceComponent:
|
||||
{
|
||||
switch(model.type)
|
||||
{
|
||||
case "int":
|
||||
return settingTextField
|
||||
case "[int]":
|
||||
return settingTextField
|
||||
case "float":
|
||||
return settingTextField
|
||||
case "enum":
|
||||
return settingComboBox
|
||||
case "extruder":
|
||||
return settingExtruder
|
||||
case "optional_extruder":
|
||||
return settingOptionalExtruder
|
||||
case "bool":
|
||||
return settingCheckBox
|
||||
case "str":
|
||||
return settingTextField
|
||||
case "category":
|
||||
return settingCategory
|
||||
default:
|
||||
return settingUnknown
|
||||
}
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
width: parent.width
|
||||
height: width
|
||||
sourceSize.height: width
|
||||
color: parent.hovered ? UM.Theme.getColor("setting_control_button_hover") : UM.Theme.getColor("setting_control_button")
|
||||
source: UM.Theme.getIcon("Minus")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Button
|
||||
// Specialty provider that only watches global_inherits (we can't filter on what property changed we get events
|
||||
// so we bypass that to make a dedicated provider).
|
||||
UM.SettingPropertyProvider
|
||||
{
|
||||
id: provider
|
||||
|
||||
containerStackId: UM.ActiveTool.properties.getValue("ContainerID")
|
||||
key: model.key
|
||||
watchedProperties: [ "value", "enabled", "validationState" ]
|
||||
storeIndex: 0
|
||||
removeUnusedValue: false
|
||||
}
|
||||
|
||||
UM.SettingPropertyProvider
|
||||
{
|
||||
id: inheritStackProvider
|
||||
containerStackId: UM.ActiveTool.properties.getValue("ContainerID")
|
||||
key: model.key
|
||||
watchedProperties: [ "limit_to_extruder" ]
|
||||
}
|
||||
|
||||
Connections
|
||||
{
|
||||
target: inheritStackProvider
|
||||
function onPropertiesChanged() { provider.forcePropertiesChanged() }
|
||||
}
|
||||
|
||||
Connections
|
||||
{
|
||||
target: UM.ActiveTool
|
||||
function onPropertiesChanged()
|
||||
{
|
||||
width: Math.round(UM.Theme.getSize("setting").height / 2)
|
||||
height: UM.Theme.getSize("setting").height
|
||||
|
||||
onClicked: addedSettingsModel.setVisible(model.key, false)
|
||||
|
||||
style: ButtonStyle
|
||||
// the values cannot be bound with UM.ActiveTool.properties.getValue() calls,
|
||||
// so here we connect to the signal and update the those values.
|
||||
if (typeof UM.ActiveTool.properties.getValue("SelectedObjectId") !== "undefined")
|
||||
{
|
||||
background: Item
|
||||
const selectedObjectId = UM.ActiveTool.properties.getValue("SelectedObjectId")
|
||||
if (addedSettingsModel.visibilityHandler.selectedObjectId != selectedObjectId)
|
||||
{
|
||||
UM.RecolorImage
|
||||
{
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
width: parent.width
|
||||
height: width
|
||||
sourceSize.height: width
|
||||
color: control.hovered ? UM.Theme.getColor("setting_control_button_hover") : UM.Theme.getColor("setting_control_button")
|
||||
source: UM.Theme.getIcon("Minus")
|
||||
}
|
||||
addedSettingsModel.visibilityHandler.selectedObjectId = selectedObjectId
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Specialty provider that only watches global_inherits (we can't filter on what property changed we get events
|
||||
// so we bypass that to make a dedicated provider).
|
||||
UM.SettingPropertyProvider
|
||||
{
|
||||
id: provider
|
||||
|
||||
containerStackId: UM.ActiveTool.properties.getValue("ContainerID")
|
||||
key: model.key
|
||||
watchedProperties: [ "value", "enabled", "validationState" ]
|
||||
storeIndex: 0
|
||||
removeUnusedValue: false
|
||||
}
|
||||
|
||||
UM.SettingPropertyProvider
|
||||
{
|
||||
id: inheritStackProvider
|
||||
containerStackId: UM.ActiveTool.properties.getValue("ContainerID")
|
||||
key: model.key
|
||||
watchedProperties: [ "limit_to_extruder" ]
|
||||
}
|
||||
|
||||
Connections
|
||||
{
|
||||
target: inheritStackProvider
|
||||
function onPropertiesChanged() { provider.forcePropertiesChanged() }
|
||||
}
|
||||
|
||||
Connections
|
||||
{
|
||||
target: UM.ActiveTool
|
||||
function onPropertiesChanged()
|
||||
if (typeof UM.ActiveTool.properties.getValue("ContainerID") !== "undefined")
|
||||
{
|
||||
// the values cannot be bound with UM.ActiveTool.properties.getValue() calls,
|
||||
// so here we connect to the signal and update the those values.
|
||||
if (typeof UM.ActiveTool.properties.getValue("SelectedObjectId") !== "undefined")
|
||||
const containerId = UM.ActiveTool.properties.getValue("ContainerID")
|
||||
if (provider.containerStackId != containerId)
|
||||
{
|
||||
const selectedObjectId = UM.ActiveTool.properties.getValue("SelectedObjectId")
|
||||
if (addedSettingsModel.visibilityHandler.selectedObjectId != selectedObjectId)
|
||||
{
|
||||
addedSettingsModel.visibilityHandler.selectedObjectId = selectedObjectId
|
||||
}
|
||||
provider.containerStackId = containerId
|
||||
}
|
||||
if (typeof UM.ActiveTool.properties.getValue("ContainerID") !== "undefined")
|
||||
if (inheritStackProvider.containerStackId != containerId)
|
||||
{
|
||||
const containerId = UM.ActiveTool.properties.getValue("ContainerID")
|
||||
if (provider.containerStackId != containerId)
|
||||
{
|
||||
provider.containerStackId = containerId
|
||||
}
|
||||
if (inheritStackProvider.containerStackId != containerId)
|
||||
{
|
||||
inheritStackProvider.containerStackId = containerId
|
||||
}
|
||||
inheritStackProvider.containerStackId = containerId
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -422,8 +425,6 @@ Item
|
|||
storeIndex: 0
|
||||
}
|
||||
|
||||
SystemPalette { id: palette }
|
||||
|
||||
Component
|
||||
{
|
||||
id: settingTextField
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
//Copyright (c) 2022 Ultimaker B.V.
|
||||
//Cura is released under the terms of the LGPLv3 or higher.
|
||||
|
||||
import QtQuick 2.2
|
||||
import QtQuick.Controls 1.2
|
||||
import QtQuick.Controls.Styles 1.2
|
||||
import QtQuick.Controls 2.2
|
||||
|
||||
import UM 1.5 as UM
|
||||
import Cura 1.0 as Cura
|
||||
|
@ -10,8 +12,11 @@ UM.Dialog
|
|||
{
|
||||
id: settingPickDialog
|
||||
|
||||
margin: UM.Theme.getSize("default_margin").width
|
||||
|
||||
title: catalog.i18nc("@title:window", "Select Settings to Customize for this model")
|
||||
width: screenScaleFactor * 360
|
||||
width: UM.Theme.getSize("small_popup_dialog").width
|
||||
backgroundColor: UM.Theme.getColor("background_1")
|
||||
|
||||
property var additional_excluded_settings
|
||||
|
||||
|
@ -40,9 +45,10 @@ UM.Dialog
|
|||
listview.model.filter = new_filter
|
||||
}
|
||||
|
||||
TextField
|
||||
Cura.TextField
|
||||
{
|
||||
id: filterInput
|
||||
selectByMouse: true
|
||||
|
||||
anchors
|
||||
{
|
||||
|
@ -69,65 +75,65 @@ UM.Dialog
|
|||
text: catalog.i18nc("@label:checkbox", "Show all")
|
||||
}
|
||||
|
||||
ScrollView
|
||||
ListView
|
||||
{
|
||||
id: scrollView
|
||||
|
||||
id: listview
|
||||
anchors
|
||||
{
|
||||
top: filterInput.bottom
|
||||
topMargin: UM.Theme.getSize("default_margin").height
|
||||
left: parent.left
|
||||
right: parent.right
|
||||
bottom: parent.bottom
|
||||
}
|
||||
ListView
|
||||
|
||||
ScrollBar.vertical: UM.ScrollBar { id: scrollBar }
|
||||
clip: true
|
||||
|
||||
model: UM.SettingDefinitionsModel
|
||||
{
|
||||
id: listview
|
||||
model: UM.SettingDefinitionsModel
|
||||
id: definitionsModel
|
||||
containerId: Cura.MachineManager.activeMachine != null ? Cura.MachineManager.activeMachine.definition.id: ""
|
||||
visibilityHandler: UM.SettingPreferenceVisibilityHandler {}
|
||||
expanded: [ "*" ]
|
||||
exclude:
|
||||
{
|
||||
id: definitionsModel
|
||||
containerId: Cura.MachineManager.activeMachine != null ? Cura.MachineManager.activeMachine.definition.id: ""
|
||||
visibilityHandler: UM.SettingPreferenceVisibilityHandler {}
|
||||
expanded: [ "*" ]
|
||||
exclude:
|
||||
{
|
||||
var excluded_settings = [ "machine_settings", "command_line_settings", "support_mesh", "anti_overhang_mesh", "cutting_mesh", "infill_mesh" ]
|
||||
excluded_settings = excluded_settings.concat(settingPickDialog.additional_excluded_settings)
|
||||
return excluded_settings
|
||||
}
|
||||
showAll: toggleShowAll.checked || filterInput.text !== ""
|
||||
var excluded_settings = [ "machine_settings", "command_line_settings", "support_mesh", "anti_overhang_mesh", "cutting_mesh", "infill_mesh" ]
|
||||
excluded_settings = excluded_settings.concat(settingPickDialog.additional_excluded_settings)
|
||||
return excluded_settings
|
||||
}
|
||||
delegate: Loader
|
||||
{
|
||||
id: loader
|
||||
|
||||
width: listview.width
|
||||
height: model.type != undefined ? UM.Theme.getSize("section").height : 0
|
||||
|
||||
property var definition: model
|
||||
property var settingDefinitionsModel: definitionsModel
|
||||
|
||||
asynchronous: true
|
||||
source:
|
||||
{
|
||||
switch(model.type)
|
||||
{
|
||||
case "category":
|
||||
return "PerObjectCategory.qml"
|
||||
default:
|
||||
return "PerObjectItem.qml"
|
||||
}
|
||||
}
|
||||
}
|
||||
Component.onCompleted: settingPickDialog.updateFilter()
|
||||
showAll: toggleShowAll.checked || filterInput.text !== ""
|
||||
}
|
||||
delegate: Loader
|
||||
{
|
||||
id: loader
|
||||
|
||||
width: listview.width - scrollBar.width
|
||||
height: model.type != undefined ? UM.Theme.getSize("section").height : 0
|
||||
|
||||
property var definition: model
|
||||
property var settingDefinitionsModel: definitionsModel
|
||||
|
||||
asynchronous: true
|
||||
source:
|
||||
{
|
||||
switch(model.type)
|
||||
{
|
||||
case "category":
|
||||
return "PerObjectCategory.qml"
|
||||
default:
|
||||
return "PerObjectItem.qml"
|
||||
}
|
||||
}
|
||||
}
|
||||
Component.onCompleted: settingPickDialog.updateFilter()
|
||||
}
|
||||
|
||||
rightButtons: [
|
||||
Button
|
||||
Cura.TertiaryButton
|
||||
{
|
||||
text: catalog.i18nc("@action:button", "Close")
|
||||
onClicked: settingPickDialog.visible = false
|
||||
onClicked: reject()
|
||||
}
|
||||
]
|
||||
}
|
|
@ -1,16 +1,13 @@
|
|||
// Copyright (c) 2015 Jaime van Kessel, Ultimaker B.V.
|
||||
// Copyright (c) 2022 Jaime van Kessel, Ultimaker B.V.
|
||||
// The PostProcessingPlugin is released under the terms of the AGPLv3 or higher.
|
||||
|
||||
import QtQuick 2.2
|
||||
import QtQuick.Controls 1.1
|
||||
import QtQuick.Controls 2.15 as QQC2
|
||||
import QtQuick.Controls.Styles 1.1
|
||||
import QtQuick.Controls 2.15
|
||||
import QtQml.Models 2.15 as Models
|
||||
import QtQuick.Layouts 1.1
|
||||
import QtQuick.Dialogs 1.1
|
||||
import QtQuick.Window 2.2
|
||||
|
||||
import UM 1.2 as UM
|
||||
import UM 1.5 as UM
|
||||
import Cura 1.0 as Cura
|
||||
|
||||
UM.Dialog
|
||||
|
@ -18,14 +15,15 @@ UM.Dialog
|
|||
id: dialog
|
||||
|
||||
title: catalog.i18nc("@title:window", "Post Processing Plugin")
|
||||
width: 700 * screenScaleFactor;
|
||||
height: 500 * screenScaleFactor;
|
||||
minimumWidth: 400 * screenScaleFactor;
|
||||
minimumHeight: 250 * screenScaleFactor;
|
||||
width: 700 * screenScaleFactor
|
||||
height: 500 * screenScaleFactor
|
||||
minimumWidth: 400 * screenScaleFactor
|
||||
minimumHeight: 250 * screenScaleFactor
|
||||
|
||||
onVisibleChanged:
|
||||
{
|
||||
if(!visible) //Whenever the window is closed (either via the "Close" button or the X on the window frame), we want to update it in the stack.
|
||||
// Whenever the window is closed (either via the "Close" button or the X on the window frame), we want to update it in the stack.
|
||||
if (!visible)
|
||||
{
|
||||
manager.writeScriptsToStack()
|
||||
}
|
||||
|
@ -36,234 +34,211 @@ UM.Dialog
|
|||
UM.I18nCatalog{id: catalog; name: "cura"}
|
||||
id: base
|
||||
property int columnWidth: Math.round((base.width / 2) - UM.Theme.getSize("default_margin").width)
|
||||
property int textMargin: Math.round(UM.Theme.getSize("default_margin").width / 2)
|
||||
property int textMargin: UM.Theme.getSize("narrow_margin").width
|
||||
property string activeScriptName
|
||||
SystemPalette{ id: palette }
|
||||
SystemPalette{ id: disabledPalette; colorGroup: SystemPalette.Disabled }
|
||||
|
||||
anchors.fill: parent
|
||||
|
||||
ExclusiveGroup
|
||||
ButtonGroup
|
||||
{
|
||||
id: selectedScriptGroup
|
||||
}
|
||||
Item
|
||||
Column
|
||||
{
|
||||
id: activeScripts
|
||||
anchors.left: parent.left
|
||||
width: base.columnWidth
|
||||
height: parent.height
|
||||
|
||||
Label
|
||||
spacing: base.textMargin
|
||||
|
||||
UM.Label
|
||||
{
|
||||
id: activeScriptsHeader
|
||||
text: catalog.i18nc("@label", "Post Processing Scripts")
|
||||
anchors.top: parent.top
|
||||
anchors.topMargin: base.textMargin
|
||||
anchors.left: parent.left
|
||||
anchors.leftMargin: base.textMargin
|
||||
anchors.right: parent.right
|
||||
anchors.rightMargin: base.textMargin
|
||||
font: UM.Theme.getFont("large_bold")
|
||||
elide: Text.ElideRight
|
||||
}
|
||||
ListView
|
||||
{
|
||||
id: activeScriptsList
|
||||
|
||||
anchors
|
||||
{
|
||||
top: activeScriptsHeader.bottom
|
||||
left: parent.left
|
||||
right: parent.right
|
||||
rightMargin: base.textMargin
|
||||
topMargin: base.textMargin
|
||||
leftMargin: UM.Theme.getSize("default_margin").width
|
||||
}
|
||||
height: Math.min(contentHeight, parent.height - parent.spacing * 2 - activeScriptsHeader.height - addButton.height) //At the window height, start scrolling this one.
|
||||
|
||||
height: childrenRect.height
|
||||
model: manager.scriptList
|
||||
delegate: Item
|
||||
clip: true
|
||||
ScrollBar.vertical: UM.ScrollBar
|
||||
{
|
||||
width: parent.width
|
||||
height: activeScriptButton.height
|
||||
Button
|
||||
{
|
||||
id: activeScriptButton
|
||||
text: manager.getScriptLabelByKey(modelData.toString())
|
||||
exclusiveGroup: selectedScriptGroup
|
||||
width: parent.width
|
||||
height: UM.Theme.getSize("setting").height
|
||||
checkable: true
|
||||
id: activeScriptsScrollBar
|
||||
}
|
||||
model: manager.scriptList
|
||||
|
||||
checked:
|
||||
delegate: Button
|
||||
{
|
||||
id: activeScriptButton
|
||||
|
||||
width: parent.width - activeScriptsScrollBar.width
|
||||
height: UM.Theme.getSize("standard_list_lineheight").height
|
||||
|
||||
ButtonGroup.group: selectedScriptGroup
|
||||
checkable: true
|
||||
|
||||
checked:
|
||||
{
|
||||
if (manager.selectedScriptIndex == index)
|
||||
{
|
||||
if (manager.selectedScriptIndex == index)
|
||||
{
|
||||
base.activeScriptName = manager.getScriptLabelByKey(modelData.toString())
|
||||
return true
|
||||
}
|
||||
else
|
||||
{
|
||||
return false
|
||||
}
|
||||
}
|
||||
onClicked:
|
||||
{
|
||||
forceActiveFocus()
|
||||
manager.setSelectedScriptIndex(index)
|
||||
base.activeScriptName = manager.getScriptLabelByKey(modelData.toString())
|
||||
return true
|
||||
}
|
||||
|
||||
style: ButtonStyle
|
||||
else
|
||||
{
|
||||
background: Rectangle
|
||||
{
|
||||
color: activeScriptButton.checked ? palette.highlight : "transparent"
|
||||
width: parent.width
|
||||
height: parent.height
|
||||
}
|
||||
label: Label
|
||||
{
|
||||
wrapMode: Text.Wrap
|
||||
text: control.text
|
||||
elide: Text.ElideRight
|
||||
color: activeScriptButton.checked ? palette.highlightedText : palette.text
|
||||
}
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
Button
|
||||
background: Rectangle
|
||||
{
|
||||
id: removeButton
|
||||
text: "x"
|
||||
width: 20 * screenScaleFactor
|
||||
height: 20 * screenScaleFactor
|
||||
anchors.right:parent.right
|
||||
anchors.rightMargin: base.textMargin
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
onClicked: manager.removeScriptByIndex(index)
|
||||
style: ButtonStyle
|
||||
{
|
||||
label: Item
|
||||
{
|
||||
UM.RecolorImage
|
||||
{
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
width: Math.round(control.width / 2.7)
|
||||
height: Math.round(control.height / 2.7)
|
||||
sourceSize.height: width
|
||||
color: palette.text
|
||||
source: UM.Theme.getIcon("Cancel")
|
||||
}
|
||||
}
|
||||
}
|
||||
color: activeScriptButton.checked ? UM.Theme.getColor("background_3") : "transparent"
|
||||
}
|
||||
Button
|
||||
|
||||
onClicked:
|
||||
{
|
||||
id: downButton
|
||||
text: ""
|
||||
anchors.right: removeButton.left
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
enabled: index != manager.scriptList.length - 1
|
||||
width: 20 * screenScaleFactor
|
||||
height: 20 * screenScaleFactor
|
||||
onClicked:
|
||||
{
|
||||
if (manager.selectedScriptIndex == index)
|
||||
{
|
||||
manager.setSelectedScriptIndex(index + 1)
|
||||
}
|
||||
return manager.moveScript(index, index + 1)
|
||||
}
|
||||
style: ButtonStyle
|
||||
{
|
||||
label: Item
|
||||
{
|
||||
UM.RecolorImage
|
||||
{
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
width: Math.round(control.width / 2.5)
|
||||
height: Math.round(control.height / 2.5)
|
||||
sourceSize.height: width
|
||||
color: control.enabled ? palette.text : disabledPalette.text
|
||||
source: UM.Theme.getIcon("ChevronSingleDown")
|
||||
}
|
||||
}
|
||||
}
|
||||
forceActiveFocus()
|
||||
manager.setSelectedScriptIndex(index)
|
||||
base.activeScriptName = manager.getScriptLabelByKey(modelData.toString())
|
||||
}
|
||||
Button
|
||||
|
||||
RowLayout
|
||||
{
|
||||
id: upButton
|
||||
text: ""
|
||||
enabled: index != 0
|
||||
width: 20 * screenScaleFactor
|
||||
height: 20 * screenScaleFactor
|
||||
anchors.right: downButton.left
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
onClicked:
|
||||
anchors.fill: parent
|
||||
|
||||
UM.Label
|
||||
{
|
||||
if (manager.selectedScriptIndex == index)
|
||||
{
|
||||
manager.setSelectedScriptIndex(index - 1)
|
||||
}
|
||||
return manager.moveScript(index, index - 1)
|
||||
Layout.fillWidth: true
|
||||
text: manager.getScriptLabelByKey(modelData.toString())
|
||||
}
|
||||
style: ButtonStyle
|
||||
|
||||
Item
|
||||
{
|
||||
label: Item
|
||||
{
|
||||
UM.RecolorImage
|
||||
id: downButton
|
||||
Layout.preferredWidth: height
|
||||
Layout.fillHeight: true
|
||||
enabled: index != manager.scriptList.length - 1
|
||||
|
||||
MouseArea
|
||||
{
|
||||
anchors.fill: parent
|
||||
onClicked:
|
||||
{
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
width: Math.round(control.width / 2.5)
|
||||
height: Math.round(control.height / 2.5)
|
||||
sourceSize.height: width
|
||||
color: control.enabled ? palette.text : disabledPalette.text
|
||||
source: UM.Theme.getIcon("ChevronSingleUp")
|
||||
if (manager.selectedScriptIndex == index)
|
||||
{
|
||||
manager.setSelectedScriptIndex(index + 1)
|
||||
}
|
||||
return manager.moveScript(index, index + 1)
|
||||
}
|
||||
}
|
||||
|
||||
UM.RecolorImage
|
||||
{
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
width: UM.Theme.getSize("standard_arrow").width
|
||||
height: UM.Theme.getSize("standard_arrow").height
|
||||
sourceSize.width: width
|
||||
sourceSize.height: height
|
||||
color: parent.enabled ? UM.Theme.getColor("text") : UM.Theme.getColor("text_disabled")
|
||||
source: UM.Theme.getIcon("ChevronSingleDown")
|
||||
}
|
||||
}
|
||||
Item
|
||||
{
|
||||
id: upButton
|
||||
Layout.preferredWidth: height
|
||||
Layout.fillHeight: true
|
||||
enabled: index != 0
|
||||
|
||||
MouseArea
|
||||
{
|
||||
anchors.fill: parent
|
||||
onClicked:
|
||||
{
|
||||
if (manager.selectedScriptIndex == index)
|
||||
{
|
||||
manager.setSelectedScriptIndex(index - 1)
|
||||
}
|
||||
return manager.moveScript(index, index - 1)
|
||||
}
|
||||
}
|
||||
|
||||
UM.RecolorImage
|
||||
{
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
width: UM.Theme.getSize("standard_arrow").width
|
||||
height: UM.Theme.getSize("standard_arrow").height
|
||||
sourceSize.width: width
|
||||
sourceSize.height: height
|
||||
color: upButton.enabled ? UM.Theme.getColor("text") : UM.Theme.getColor("text_disabled")
|
||||
source: UM.Theme.getIcon("ChevronSingleUp")
|
||||
}
|
||||
}
|
||||
|
||||
Item
|
||||
{
|
||||
id: removeButton
|
||||
Layout.preferredWidth: height
|
||||
Layout.fillHeight: true
|
||||
|
||||
MouseArea
|
||||
{
|
||||
anchors.fill: parent
|
||||
onClicked: manager.removeScriptByIndex(index)
|
||||
}
|
||||
|
||||
UM.RecolorImage
|
||||
{
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
width: UM.Theme.getSize("standard_arrow").width
|
||||
height: UM.Theme.getSize("standard_arrow").height
|
||||
sourceSize.width: width
|
||||
sourceSize.height: height
|
||||
color: UM.Theme.getColor("text")
|
||||
source: UM.Theme.getIcon("Cancel")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Button
|
||||
Cura.SecondaryButton
|
||||
{
|
||||
id: addButton
|
||||
text: catalog.i18nc("@action", "Add a script")
|
||||
anchors.left: parent.left
|
||||
anchors.leftMargin: base.textMargin
|
||||
anchors.top: activeScriptsList.bottom
|
||||
anchors.topMargin: base.textMargin
|
||||
onClicked: scriptsMenu.open()
|
||||
style: ButtonStyle
|
||||
{
|
||||
label: Label
|
||||
{
|
||||
text: control.text
|
||||
}
|
||||
}
|
||||
}
|
||||
QQC2.Menu
|
||||
}
|
||||
|
||||
Cura.Menu
|
||||
{
|
||||
id: scriptsMenu
|
||||
|
||||
Models.Instantiator
|
||||
{
|
||||
id: scriptsMenu
|
||||
width: parent.width
|
||||
model: manager.loadedScriptList
|
||||
|
||||
Models.Instantiator
|
||||
Cura.MenuItem
|
||||
{
|
||||
model: manager.loadedScriptList
|
||||
|
||||
QQC2.MenuItem
|
||||
{
|
||||
text: manager.getScriptLabelByKey(modelData.toString())
|
||||
onTriggered: manager.addScriptToList(modelData.toString())
|
||||
}
|
||||
|
||||
onObjectAdded: scriptsMenu.insertItem(index, object)
|
||||
onObjectRemoved: scriptsMenu.removeItem(object)
|
||||
text: manager.getScriptLabelByKey(modelData.toString())
|
||||
onTriggered: manager.addScriptToList(modelData.toString())
|
||||
}
|
||||
|
||||
onObjectAdded: scriptsMenu.insertItem(index, object)
|
||||
onObjectRemoved: scriptsMenu.removeItem(object)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -296,9 +271,9 @@ UM.Dialog
|
|||
color: UM.Theme.getColor("text")
|
||||
}
|
||||
|
||||
ScrollView
|
||||
ListView
|
||||
{
|
||||
id: scrollView
|
||||
id: listview
|
||||
anchors
|
||||
{
|
||||
top: scriptSpecsHeader.bottom
|
||||
|
@ -309,124 +284,114 @@ UM.Dialog
|
|||
bottom: parent.bottom
|
||||
}
|
||||
|
||||
ScrollBar.vertical: UM.ScrollBar {}
|
||||
clip: true
|
||||
visible: manager.selectedScriptDefinitionId != ""
|
||||
style: UM.Theme.styles.scrollview;
|
||||
spacing: UM.Theme.getSize("default_lining").height
|
||||
|
||||
ListView
|
||||
model: UM.SettingDefinitionsModel
|
||||
{
|
||||
id: listview
|
||||
spacing: UM.Theme.getSize("default_lining").height
|
||||
model: UM.SettingDefinitionsModel
|
||||
id: definitionsModel
|
||||
containerId: manager.selectedScriptDefinitionId
|
||||
showAll: true
|
||||
}
|
||||
|
||||
delegate: Loader
|
||||
{
|
||||
id: settingLoader
|
||||
|
||||
width: listview.width
|
||||
height:
|
||||
{
|
||||
id: definitionsModel
|
||||
containerId: manager.selectedScriptDefinitionId
|
||||
showAll: true
|
||||
if (provider.properties.enabled == "True" && model.type != undefined)
|
||||
{
|
||||
return UM.Theme.getSize("section").height;
|
||||
}
|
||||
else
|
||||
{
|
||||
return 0
|
||||
}
|
||||
}
|
||||
Behavior on height { NumberAnimation { duration: 100 } }
|
||||
opacity: provider.properties.enabled == "True" ? 1 : 0
|
||||
|
||||
Behavior on opacity { NumberAnimation { duration: 100 } }
|
||||
enabled: opacity > 0
|
||||
|
||||
property var definition: model
|
||||
property var settingDefinitionsModel: definitionsModel
|
||||
property var propertyProvider: provider
|
||||
property var globalPropertyProvider: inheritStackProvider
|
||||
|
||||
//Qt5.4.2 and earlier has a bug where this causes a crash: https://bugreports.qt.io/browse/QTBUG-35989
|
||||
//In addition, while it works for 5.5 and higher, the ordering of the actual combo box drop down changes,
|
||||
//causing nasty issues when selecting different options. So disable asynchronous loading of enum type completely.
|
||||
asynchronous: model.type != "enum" && model.type != "extruder"
|
||||
|
||||
onLoaded:
|
||||
{
|
||||
settingLoader.item.showRevertButton = false
|
||||
settingLoader.item.showInheritButton = false
|
||||
settingLoader.item.showLinkedSettingIcon = false
|
||||
settingLoader.item.doDepthIndentation = false
|
||||
settingLoader.item.doQualityUserSettingEmphasis = false
|
||||
}
|
||||
|
||||
delegate: Loader
|
||||
sourceComponent:
|
||||
{
|
||||
id: settingLoader
|
||||
|
||||
width: parent.width
|
||||
height:
|
||||
switch(model.type)
|
||||
{
|
||||
if(provider.properties.enabled == "True")
|
||||
{
|
||||
if(model.type != undefined)
|
||||
{
|
||||
return UM.Theme.getSize("section").height
|
||||
}
|
||||
else
|
||||
{
|
||||
return 0
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return 0
|
||||
}
|
||||
case "int":
|
||||
return settingTextField
|
||||
case "float":
|
||||
return settingTextField
|
||||
case "enum":
|
||||
return settingComboBox
|
||||
case "extruder":
|
||||
return settingExtruder
|
||||
case "bool":
|
||||
return settingCheckBox
|
||||
case "str":
|
||||
return settingTextField
|
||||
case "category":
|
||||
return settingCategory
|
||||
default:
|
||||
return settingUnknown
|
||||
}
|
||||
Behavior on height { NumberAnimation { duration: 100 } }
|
||||
opacity: provider.properties.enabled == "True" ? 1 : 0
|
||||
}
|
||||
|
||||
Behavior on opacity { NumberAnimation { duration: 100 } }
|
||||
enabled: opacity > 0
|
||||
UM.SettingPropertyProvider
|
||||
{
|
||||
id: provider
|
||||
containerStackId: manager.selectedScriptStackId
|
||||
key: model.key ? model.key : "None"
|
||||
watchedProperties: [ "value", "enabled", "state", "validationState" ]
|
||||
storeIndex: 0
|
||||
}
|
||||
|
||||
property var definition: model
|
||||
property var settingDefinitionsModel: definitionsModel
|
||||
property var propertyProvider: provider
|
||||
property var globalPropertyProvider: inheritStackProvider
|
||||
// Specialty provider that only watches global_inherits (we can't filter on what property changed we get events
|
||||
// so we bypass that to make a dedicated provider).
|
||||
UM.SettingPropertyProvider
|
||||
{
|
||||
id: inheritStackProvider
|
||||
containerStack: Cura.MachineManager.activeMachine
|
||||
key: model.key ? model.key : "None"
|
||||
watchedProperties: [ "limit_to_extruder" ]
|
||||
}
|
||||
|
||||
//Qt5.4.2 and earlier has a bug where this causes a crash: https://bugreports.qt.io/browse/QTBUG-35989
|
||||
//In addition, while it works for 5.5 and higher, the ordering of the actual combo box drop down changes,
|
||||
//causing nasty issues when selecting different options. So disable asynchronous loading of enum type completely.
|
||||
asynchronous: model.type != "enum" && model.type != "extruder"
|
||||
Connections
|
||||
{
|
||||
target: item
|
||||
|
||||
onLoaded:
|
||||
function onShowTooltip(text)
|
||||
{
|
||||
settingLoader.item.showRevertButton = false
|
||||
settingLoader.item.showInheritButton = false
|
||||
settingLoader.item.showLinkedSettingIcon = false
|
||||
settingLoader.item.doDepthIndentation = false
|
||||
settingLoader.item.doQualityUserSettingEmphasis = false
|
||||
tooltip.text = text;
|
||||
var position = settingLoader.mapToItem(settingsPanel, settingsPanel.x, 0);
|
||||
tooltip.show(position);
|
||||
tooltip.target.x = position.x + 1;
|
||||
}
|
||||
|
||||
sourceComponent:
|
||||
{
|
||||
switch(model.type)
|
||||
{
|
||||
case "int":
|
||||
return settingTextField
|
||||
case "float":
|
||||
return settingTextField
|
||||
case "enum":
|
||||
return settingComboBox
|
||||
case "extruder":
|
||||
return settingExtruder
|
||||
case "bool":
|
||||
return settingCheckBox
|
||||
case "str":
|
||||
return settingTextField
|
||||
case "category":
|
||||
return settingCategory
|
||||
default:
|
||||
return settingUnknown
|
||||
}
|
||||
}
|
||||
|
||||
UM.SettingPropertyProvider
|
||||
{
|
||||
id: provider
|
||||
containerStackId: manager.selectedScriptStackId
|
||||
key: model.key ? model.key : "None"
|
||||
watchedProperties: [ "value", "enabled", "state", "validationState" ]
|
||||
storeIndex: 0
|
||||
}
|
||||
|
||||
// Specialty provider that only watches global_inherits (we can't filter on what property changed we get events
|
||||
// so we bypass that to make a dedicated provider).
|
||||
UM.SettingPropertyProvider
|
||||
{
|
||||
id: inheritStackProvider
|
||||
containerStack: Cura.MachineManager.activeMachine
|
||||
key: model.key ? model.key : "None"
|
||||
watchedProperties: [ "limit_to_extruder" ]
|
||||
}
|
||||
|
||||
Connections
|
||||
{
|
||||
target: item
|
||||
|
||||
function onShowTooltip(text)
|
||||
{
|
||||
tooltip.text = text
|
||||
var position = settingLoader.mapToItem(settingsPanel, settingsPanel.x, 0)
|
||||
tooltip.show(position)
|
||||
tooltip.target.x = position.x + 1
|
||||
}
|
||||
|
||||
function onHideTooltip() { tooltip.hide() }
|
||||
}
|
||||
function onHideTooltip() { tooltip.hide() }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -480,10 +445,9 @@ UM.Dialog
|
|||
}
|
||||
}
|
||||
|
||||
rightButtons: Button
|
||||
rightButtons: Cura.TertiaryButton
|
||||
{
|
||||
text: catalog.i18nc("@action:button", "Close")
|
||||
iconName: "dialog-close"
|
||||
onClicked: dialog.accept()
|
||||
}
|
||||
|
||||
|
@ -515,7 +479,7 @@ UM.Dialog
|
|||
}
|
||||
return tipText
|
||||
}
|
||||
toolTipContentAlignment: Cura.ToolTip.ContentAlignment.AlignLeft
|
||||
toolTipContentAlignment: UM.Enums.ContentAlignment.AlignLeft
|
||||
onClicked: dialog.show()
|
||||
iconSource: "Script.svg"
|
||||
fixedWidthMode: false
|
||||
|
|
|
@ -298,7 +298,7 @@ class ChangeAtZ(Script):
|
|||
},
|
||||
"caz_change_retract": {
|
||||
"label": "Change Retraction",
|
||||
"description": "Indicates you would like to modify retraction properties.",
|
||||
"description": "Indicates you would like to modify retraction properties. Does not work when using relative extrusion.",
|
||||
"type": "bool",
|
||||
"default_value": false
|
||||
},
|
||||
|
|
|
@ -1,10 +1,7 @@
|
|||
//Copyright (c) 2020 Ultimaker B.V.
|
||||
//Copyright (c) 2021 Ultimaker B.V.
|
||||
//Cura is released under the terms of the LGPLv3 or higher.
|
||||
|
||||
import QtQuick 2.4
|
||||
import QtQuick.Controls 1.2
|
||||
import QtQuick.Layouts 1.1
|
||||
import QtQuick.Controls.Styles 1.1
|
||||
|
||||
import UM 1.0 as UM
|
||||
import Cura 1.0 as Cura
|
||||
|
|
|
@ -5,7 +5,7 @@ import QtQuick 2.9
|
|||
import QtQuick.Layouts 1.1
|
||||
import QtQuick.Controls 2.3
|
||||
|
||||
import UM 1.3 as UM
|
||||
import UM 1.5 as UM
|
||||
import Cura 1.1 as Cura
|
||||
|
||||
|
||||
|
@ -131,14 +131,10 @@ Item
|
|||
height: UM.Theme.getSize("action_button").height
|
||||
hoverEnabled: true
|
||||
|
||||
contentItem: Label
|
||||
contentItem: UM.Label
|
||||
{
|
||||
text: model.displayText
|
||||
color: UM.Theme.getColor("text")
|
||||
font: UM.Theme.getFont("medium")
|
||||
renderType: Text.NativeRendering
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
|
||||
width: contentWidth
|
||||
height: parent.height
|
||||
}
|
||||
|
|
|
@ -1,11 +1,7 @@
|
|||
// Copyright (c) 2019 Ultimaker B.V.
|
||||
// Copyright (c) 2021 Ultimaker B.V.
|
||||
// Cura is released under the terms of the LGPLv3 or higher.
|
||||
|
||||
import QtQuick 2.4
|
||||
import QtQuick.Controls 1.2
|
||||
import QtQuick.Layouts 1.1
|
||||
import QtQuick.Controls.Styles 1.1
|
||||
|
||||
import UM 1.0 as UM
|
||||
import Cura 1.0 as Cura
|
||||
|
||||
|
|
|
@ -1,10 +1,8 @@
|
|||
// Copyright (c) 2017 Ultimaker B.V.
|
||||
// Copyright (c) 2021 Ultimaker B.V.
|
||||
// Cura is released under the terms of the LGPLv3 or higher.
|
||||
|
||||
import QtQuick 2.2
|
||||
import QtQuick.Controls 1.2
|
||||
import QtQuick.Layouts 1.1
|
||||
import QtQuick.Controls.Styles 1.1
|
||||
|
||||
import UM 1.0 as UM
|
||||
import Cura 1.0 as Cura
|
||||
|
|
|
@ -1,10 +1,8 @@
|
|||
// Copyright (c) 2017 Ultimaker B.V.
|
||||
// Copyright (c) 2021 Ultimaker B.V.
|
||||
// Cura is released under the terms of the LGPLv3 or higher.
|
||||
|
||||
import QtQuick 2.2
|
||||
import QtQuick.Controls 1.2
|
||||
import QtQuick.Layouts 1.1
|
||||
import QtQuick.Controls.Styles 1.1
|
||||
|
||||
import UM 1.0 as UM
|
||||
import Cura 1.0 as Cura
|
||||
|
|
|
@ -1,14 +1,15 @@
|
|||
// Copyright (c) 2017 Ultimaker B.V.
|
||||
// Copyright (c) 2022 Ultimaker B.V.
|
||||
// Cura is released under the terms of the LGPLv3 or higher.
|
||||
|
||||
import QtQuick 2.5
|
||||
import QtQuick.Controls 1.2
|
||||
import QtQuick.Controls 2.2
|
||||
import QtQuick.Layouts 1.1
|
||||
import QtQuick.Controls.Styles 1.1
|
||||
|
||||
import UM 1.0 as UM
|
||||
import Cura 1.0 as Cura
|
||||
|
||||
UM.PointingRectangle {
|
||||
UM.PointingRectangle
|
||||
{
|
||||
id: sliderLabelRoot
|
||||
|
||||
// custom properties
|
||||
|
@ -28,47 +29,41 @@ UM.PointingRectangle {
|
|||
borderColor: UM.Theme.getColor("lining")
|
||||
borderWidth: UM.Theme.getSize("default_lining").width
|
||||
|
||||
Behavior on height {
|
||||
NumberAnimation {
|
||||
duration: 50
|
||||
}
|
||||
}
|
||||
Behavior on height { NumberAnimation { duration: 50 } }
|
||||
|
||||
// catch all mouse events so they're not handled by underlying 3D scene
|
||||
MouseArea {
|
||||
MouseArea
|
||||
{
|
||||
anchors.fill: parent
|
||||
}
|
||||
|
||||
TextMetrics {
|
||||
TextMetrics
|
||||
{
|
||||
id: maxValueMetrics
|
||||
font: valueLabel.font
|
||||
text: maximumValue + 1 // layers are 0 based, add 1 for display value
|
||||
|
||||
}
|
||||
|
||||
TextField {
|
||||
TextField
|
||||
{
|
||||
id: valueLabel
|
||||
|
||||
anchors {
|
||||
verticalCenter: parent.verticalCenter
|
||||
horizontalCenter: parent.horizontalCenter
|
||||
alignWhenCentered: false
|
||||
}
|
||||
anchors.centerIn: parent
|
||||
|
||||
width: maxValueMetrics.width + UM.Theme.getSize("default_margin").width
|
||||
//width: maxValueMetrics.contentWidth + 2 * UM.Theme.getSize("default_margin").width
|
||||
text: sliderLabelRoot.value + startFrom // the current handle value, add 1 because layers is an array
|
||||
horizontalAlignment: TextInput.AlignHCenter
|
||||
leftPadding: UM.Theme.getSize("narrow_margin").width
|
||||
rightPadding: UM.Theme.getSize("narrow_margin").width
|
||||
|
||||
// key bindings, work when label is currently focused (active handle in LayerSlider)
|
||||
Keys.onUpPressed: sliderLabelRoot.setValue(sliderLabelRoot.value + ((event.modifiers & Qt.ShiftModifier) ? 10 : 1))
|
||||
Keys.onDownPressed: sliderLabelRoot.setValue(sliderLabelRoot.value - ((event.modifiers & Qt.ShiftModifier) ? 10 : 1))
|
||||
|
||||
style: TextFieldStyle {
|
||||
textColor: UM.Theme.getColor("text")
|
||||
font: UM.Theme.getFont("default")
|
||||
renderType: Text.NativeRendering
|
||||
background: Item { }
|
||||
}
|
||||
color: UM.Theme.getColor("text")
|
||||
font: UM.Theme.getFont("default")
|
||||
renderType: Text.NativeRendering
|
||||
background: Item {}
|
||||
selectByMouse: true
|
||||
|
||||
onEditingFinished: {
|
||||
|
||||
|
@ -84,16 +79,18 @@ UM.PointingRectangle {
|
|||
}
|
||||
}
|
||||
|
||||
validator: IntValidator {
|
||||
validator: IntValidator
|
||||
{
|
||||
bottom: startFrom
|
||||
top: sliderLabelRoot.maximumValue + startFrom // +startFrom because maybe we want to start in a different value rather than 0
|
||||
}
|
||||
}
|
||||
|
||||
BusyIndicator {
|
||||
BusyIndicator
|
||||
{
|
||||
id: busyIndicator
|
||||
|
||||
anchors {
|
||||
anchors
|
||||
{
|
||||
left: parent.right
|
||||
leftMargin: Math.round(UM.Theme.getSize("default_margin").width / 2)
|
||||
verticalCenter: parent.verticalCenter
|
||||
|
|
|
@ -2,9 +2,6 @@
|
|||
// Cura is released under the terms of the LGPLv3 or higher.
|
||||
|
||||
import QtQuick 2.4
|
||||
import QtQuick.Controls 1.2
|
||||
import QtQuick.Layouts 1.1
|
||||
import QtQuick.Controls.Styles 1.1
|
||||
|
||||
import UM 1.4 as UM
|
||||
import Cura 1.0 as Cura
|
||||
|
|
|
@ -1,13 +1,12 @@
|
|||
// Copyright (c) 2018 Ultimaker B.V.
|
||||
// Copyright (c) 2022 Ultimaker B.V.
|
||||
// Cura is released under the terms of the LGPLv3 or higher.
|
||||
|
||||
import QtQuick 2.4
|
||||
import QtQuick.Controls 1.2
|
||||
import QtQuick.Layouts 1.1
|
||||
import QtQuick.Controls.Styles 1.1
|
||||
import QtQuick.Controls 2.1
|
||||
import QtGraphicalEffects 1.0
|
||||
|
||||
import UM 1.0 as UM
|
||||
import UM 1.5 as UM
|
||||
import Cura 1.0 as Cura
|
||||
|
||||
|
||||
|
@ -43,22 +42,19 @@ Cura.ExpandableComponent
|
|||
|
||||
headerItem: Item
|
||||
{
|
||||
Label
|
||||
UM.Label
|
||||
{
|
||||
id: colorSchemeLabel
|
||||
text: catalog.i18nc("@label", "Color scheme")
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
height: parent.height
|
||||
elide: Text.ElideRight
|
||||
font: UM.Theme.getFont("medium")
|
||||
color: UM.Theme.getColor("text_medium")
|
||||
renderType: Text.NativeRendering
|
||||
}
|
||||
|
||||
Label
|
||||
UM.Label
|
||||
{
|
||||
text: layerTypeCombobox.currentText
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
anchors
|
||||
{
|
||||
left: colorSchemeLabel.right
|
||||
|
@ -68,8 +64,6 @@ Cura.ExpandableComponent
|
|||
height: parent.height
|
||||
elide: Text.ElideRight
|
||||
font: UM.Theme.getFont("medium")
|
||||
color: UM.Theme.getColor("text")
|
||||
renderType: Text.NativeRendering
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -99,7 +93,8 @@ Cura.ExpandableComponent
|
|||
|
||||
spacing: UM.Theme.getSize("layerview_row_spacing").height
|
||||
|
||||
ListModel // matches SimulationView.py
|
||||
// matches SimulationView.py
|
||||
ListModel
|
||||
{
|
||||
id: layerViewTypes
|
||||
}
|
||||
|
@ -132,18 +127,17 @@ Cura.ExpandableComponent
|
|||
})
|
||||
}
|
||||
|
||||
ComboBox
|
||||
Cura.ComboBox
|
||||
{
|
||||
id: layerTypeCombobox
|
||||
textRole: "text"
|
||||
valueRole: "type_id"
|
||||
width: parent.width
|
||||
implicitHeight: UM.Theme.getSize("setting_control").height
|
||||
model: layerViewTypes
|
||||
visible: !UM.SimulationView.compatibilityMode
|
||||
style: UM.Theme.styles.combobox
|
||||
|
||||
onActivated:
|
||||
{
|
||||
UM.Preferences.setValue("layerview/layer_view_type", index);
|
||||
}
|
||||
onActivated: UM.Preferences.setValue("layerview/layer_view_type", index)
|
||||
|
||||
Component.onCompleted:
|
||||
{
|
||||
|
@ -165,16 +159,13 @@ Cura.ExpandableComponent
|
|||
}
|
||||
}
|
||||
|
||||
Label
|
||||
UM.Label
|
||||
{
|
||||
id: compatibilityModeLabel
|
||||
text: catalog.i18nc("@label", "Compatibility Mode")
|
||||
font: UM.Theme.getFont("default")
|
||||
color: UM.Theme.getColor("text")
|
||||
visible: UM.SimulationView.compatibilityMode
|
||||
height: UM.Theme.getSize("layerview_row").height
|
||||
width: parent.width
|
||||
renderType: Text.NativeRendering
|
||||
}
|
||||
|
||||
Item // Spacer
|
||||
|
@ -187,7 +178,7 @@ Cura.ExpandableComponent
|
|||
{
|
||||
model: CuraApplication.getExtrudersModel()
|
||||
|
||||
CheckBox
|
||||
UM.CheckBox
|
||||
{
|
||||
id: extrudersModelCheckBox
|
||||
checked: viewSettings.extruder_opacities[index] > 0.5 || viewSettings.extruder_opacities[index] == undefined || viewSettings.extruder_opacities[index] == ""
|
||||
|
@ -201,8 +192,6 @@ Cura.ExpandableComponent
|
|||
UM.Preferences.setValue("layerview/extruder_opacities", viewSettings.extruder_opacities.join("|"));
|
||||
}
|
||||
|
||||
style: UM.Theme.styles.checkbox
|
||||
|
||||
Rectangle
|
||||
{
|
||||
id: swatch
|
||||
|
@ -215,12 +204,11 @@ Cura.ExpandableComponent
|
|||
border.color: UM.Theme.getColor("lining")
|
||||
}
|
||||
|
||||
Label
|
||||
UM.Label
|
||||
{
|
||||
text: model.name
|
||||
elide: Text.ElideRight
|
||||
color: UM.Theme.getColor("setting_control_text")
|
||||
font: UM.Theme.getFont("default")
|
||||
anchors
|
||||
{
|
||||
verticalCenter: parent.verticalCenter
|
||||
|
@ -229,7 +217,6 @@ Cura.ExpandableComponent
|
|||
leftMargin: UM.Theme.getSize("checkbox").width + Math.round(UM.Theme.getSize("default_margin").width / 2)
|
||||
rightMargin: UM.Theme.getSize("default_margin").width * 2
|
||||
}
|
||||
renderType: Text.NativeRendering
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -277,7 +264,7 @@ Cura.ExpandableComponent
|
|||
}
|
||||
}
|
||||
|
||||
CheckBox
|
||||
UM.CheckBox
|
||||
{
|
||||
id: legendModelCheckBox
|
||||
checked: model.initialValue
|
||||
|
@ -285,8 +272,6 @@ Cura.ExpandableComponent
|
|||
height: UM.Theme.getSize("layerview_row").height + UM.Theme.getSize("default_lining").height
|
||||
width: parent.width
|
||||
|
||||
style: UM.Theme.styles.checkbox
|
||||
|
||||
Rectangle
|
||||
{
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
|
@ -299,7 +284,7 @@ Cura.ExpandableComponent
|
|||
visible: viewSettings.show_legend
|
||||
}
|
||||
|
||||
Label
|
||||
UM.Label
|
||||
{
|
||||
text: label
|
||||
font: UM.Theme.getFont("default")
|
||||
|
@ -315,24 +300,22 @@ Cura.ExpandableComponent
|
|||
}
|
||||
}
|
||||
|
||||
CheckBox
|
||||
UM.CheckBox
|
||||
{
|
||||
checked: viewSettings.only_show_top_layers
|
||||
onClicked: UM.Preferences.setValue("view/only_show_top_layers", checked ? 1.0 : 0.0)
|
||||
text: catalog.i18nc("@label", "Only Show Top Layers")
|
||||
visible: UM.SimulationView.compatibilityMode
|
||||
style: UM.Theme.styles.checkbox
|
||||
width: parent.width
|
||||
}
|
||||
|
||||
CheckBox
|
||||
UM.CheckBox
|
||||
{
|
||||
checked: viewSettings.top_layer_count == 5
|
||||
onClicked: UM.Preferences.setValue("view/top_layer_count", checked ? 5 : 1)
|
||||
text: catalog.i18nc("@label", "Show 5 Detailed Layers On Top")
|
||||
width: parent.width
|
||||
visible: UM.SimulationView.compatibilityMode
|
||||
style: UM.Theme.styles.checkbox
|
||||
}
|
||||
|
||||
Repeater
|
||||
|
@ -353,7 +336,7 @@ Cura.ExpandableComponent
|
|||
}
|
||||
}
|
||||
|
||||
Label
|
||||
UM.Label
|
||||
{
|
||||
text: label
|
||||
visible: viewSettings.show_legend
|
||||
|
@ -362,8 +345,6 @@ Cura.ExpandableComponent
|
|||
height: UM.Theme.getSize("layerview_row").height + UM.Theme.getSize("default_lining").height
|
||||
width: parent.width
|
||||
color: UM.Theme.getColor("setting_control_text")
|
||||
font: UM.Theme.getFont("default")
|
||||
renderType: Text.NativeRendering
|
||||
Rectangle
|
||||
{
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
|
@ -388,7 +369,7 @@ Cura.ExpandableComponent
|
|||
width: parent.width
|
||||
height: UM.Theme.getSize("layerview_row").height
|
||||
|
||||
Label //Minimum value.
|
||||
UM.Label //Minimum value.
|
||||
{
|
||||
text:
|
||||
{
|
||||
|
@ -419,12 +400,9 @@ Cura.ExpandableComponent
|
|||
return catalog.i18nc("@label","min")
|
||||
}
|
||||
anchors.left: parent.left
|
||||
color: UM.Theme.getColor("setting_control_text")
|
||||
font: UM.Theme.getFont("default")
|
||||
renderType: Text.NativeRendering
|
||||
}
|
||||
|
||||
Label //Unit in the middle.
|
||||
UM.Label //Unit in the middle.
|
||||
{
|
||||
text:
|
||||
{
|
||||
|
@ -456,10 +434,9 @@ Cura.ExpandableComponent
|
|||
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
color: UM.Theme.getColor("setting_control_text")
|
||||
font: UM.Theme.getFont("default")
|
||||
}
|
||||
|
||||
Label //Maximum value.
|
||||
UM.Label //Maximum value.
|
||||
{
|
||||
text: {
|
||||
if (UM.SimulationView.layerActivity && CuraApplication.platformActivity)
|
||||
|
@ -490,7 +467,6 @@ Cura.ExpandableComponent
|
|||
|
||||
anchors.right: parent.right
|
||||
color: UM.Theme.getColor("setting_control_text")
|
||||
font: UM.Theme.getFont("default")
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -3,7 +3,6 @@
|
|||
|
||||
import QtQuick 2.3
|
||||
import QtQuick.Controls 2.4
|
||||
import QtQuick.Controls.Styles 1.3
|
||||
import UM 1.3 as UM
|
||||
import Cura 1.0 as Cura
|
||||
|
||||
|
@ -19,7 +18,7 @@ Button
|
|||
{
|
||||
anchors.fill: parent
|
||||
radius: 0.5 * width
|
||||
color: parent.enabled ? (parent.hovered ? UM.Theme.getColor("monitor_secondary_button_hover") : "transparent") : UM.Theme.getColor("monitor_icon_disabled")
|
||||
color: parent.enabled ? (parent.hovered ? UM.Theme.getColor("monitor_card_hover") : "transparent") : UM.Theme.getColor("monitor_icon_disabled")
|
||||
}
|
||||
|
||||
UM.RecolorImage
|
||||
|
|
|
@ -1,14 +1,13 @@
|
|||
// Copyright (c) 2019 Ultimaker B.V.
|
||||
// Copyright (c) 2022 Ultimaker B.V.
|
||||
// Cura is released under the terms of the LGPLv3 or higher.
|
||||
|
||||
import UM 1.2 as UM
|
||||
import UM 1.5 as UM
|
||||
import Cura 1.5 as Cura
|
||||
|
||||
import QtQuick 2.2
|
||||
import QtQuick.Controls 1.1
|
||||
import QtQuick.Controls 2.9
|
||||
import QtQuick.Layouts 1.1
|
||||
import QtQuick.Window 2.1
|
||||
import QtQuick.Dialogs 1.2
|
||||
|
||||
Cura.MachineAction
|
||||
{
|
||||
|
@ -36,32 +35,27 @@ Cura.MachineAction
|
|||
id: discoverUM3Action
|
||||
spacing: UM.Theme.getSize("default_margin").height
|
||||
|
||||
SystemPalette { id: palette }
|
||||
UM.I18nCatalog { id: catalog; name:"cura" }
|
||||
Label
|
||||
|
||||
UM.Label
|
||||
{
|
||||
id: pageTitle
|
||||
width: parent.width
|
||||
text: catalog.i18nc("@title:window", "Connect to Networked Printer")
|
||||
wrapMode: Text.WordWrap
|
||||
renderType: Text.NativeRendering
|
||||
font.pointSize: 18
|
||||
}
|
||||
|
||||
Label
|
||||
UM.Label
|
||||
{
|
||||
id: pageDescription
|
||||
width: parent.width
|
||||
wrapMode: Text.WordWrap
|
||||
renderType: Text.NativeRendering
|
||||
text: catalog.i18nc("@label", "To print directly to your printer over the network, please make sure your printer is connected to the network using a network cable or by connecting your printer to your WIFI network. If you don't connect Cura with your printer, you can still use a USB drive to transfer g-code files to your printer.") + "\n\n" + catalog.i18nc("@label", "Select your printer from the list below:")
|
||||
}
|
||||
|
||||
Row
|
||||
{
|
||||
spacing: UM.Theme.getSize("default_lining").width
|
||||
spacing: UM.Theme.getSize("thin_margin").width
|
||||
|
||||
Button
|
||||
Cura.SecondaryButton
|
||||
{
|
||||
id: addButton
|
||||
text: catalog.i18nc("@action:button", "Add");
|
||||
|
@ -71,7 +65,7 @@ Cura.MachineAction
|
|||
}
|
||||
}
|
||||
|
||||
Button
|
||||
Cura.SecondaryButton
|
||||
{
|
||||
id: editButton
|
||||
text: catalog.i18nc("@action:button", "Edit")
|
||||
|
@ -82,7 +76,7 @@ Cura.MachineAction
|
|||
}
|
||||
}
|
||||
|
||||
Button
|
||||
Cura.SecondaryButton
|
||||
{
|
||||
id: removeButton
|
||||
text: catalog.i18nc("@action:button", "Remove")
|
||||
|
@ -90,7 +84,7 @@ Cura.MachineAction
|
|||
onClicked: manager.removeManualDevice(base.selectedDevice.key, base.selectedDevice.ipAddress)
|
||||
}
|
||||
|
||||
Button
|
||||
Cura.SecondaryButton
|
||||
{
|
||||
id: rediscoverButton
|
||||
text: catalog.i18nc("@action:button", "Refresh")
|
||||
|
@ -109,70 +103,61 @@ Cura.MachineAction
|
|||
width: Math.round(parent.width * 0.5)
|
||||
spacing: UM.Theme.getSize("default_margin").height
|
||||
|
||||
ScrollView
|
||||
ListView
|
||||
{
|
||||
id: objectListContainer
|
||||
frameVisible: true
|
||||
id: listview
|
||||
|
||||
width: parent.width
|
||||
height: base.height - contentRow.y - discoveryTip.height
|
||||
|
||||
Rectangle
|
||||
ScrollBar.vertical: UM.ScrollBar {}
|
||||
clip: true
|
||||
|
||||
model: manager.foundDevices
|
||||
currentIndex: -1
|
||||
onCurrentIndexChanged:
|
||||
{
|
||||
parent: viewport
|
||||
anchors.fill: parent
|
||||
color: palette.light
|
||||
base.selectedDevice = listview.model[currentIndex];
|
||||
// Only allow connecting if the printer has responded to API query since the last refresh
|
||||
base.completeProperties = base.selectedDevice != null && base.selectedDevice.getProperty("incomplete") != "true";
|
||||
}
|
||||
Component.onCompleted: manager.startDiscovery()
|
||||
|
||||
ListView
|
||||
delegate: UM.Label
|
||||
{
|
||||
id: listview
|
||||
model: manager.foundDevices
|
||||
width: parent.width
|
||||
currentIndex: -1
|
||||
onCurrentIndexChanged:
|
||||
{
|
||||
base.selectedDevice = listview.model[currentIndex];
|
||||
// Only allow connecting if the printer has responded to API query since the last refresh
|
||||
base.completeProperties = base.selectedDevice != null && base.selectedDevice.getProperty("incomplete") != "true";
|
||||
}
|
||||
Component.onCompleted: manager.startDiscovery()
|
||||
delegate: Rectangle
|
||||
{
|
||||
height: childrenRect.height
|
||||
color: ListView.isCurrentItem ? palette.highlight : index % 2 ? palette.base : palette.alternateBase
|
||||
width: parent.width
|
||||
Label
|
||||
{
|
||||
anchors.left: parent.left
|
||||
anchors.leftMargin: UM.Theme.getSize("default_margin").width
|
||||
anchors.right: parent.right
|
||||
text: listview.model[index].name
|
||||
color: parent.ListView.isCurrentItem ? palette.highlightedText : palette.text
|
||||
elide: Text.ElideRight
|
||||
renderType: Text.NativeRendering
|
||||
}
|
||||
id: printNameLabel
|
||||
width: listview.width
|
||||
height: contentHeight
|
||||
anchors.left: parent.left
|
||||
anchors.leftMargin: UM.Theme.getSize("default_margin").width
|
||||
|
||||
MouseArea
|
||||
anchors.right: parent.right
|
||||
text: listview.model[index].name
|
||||
elide: Text.ElideRight
|
||||
|
||||
MouseArea
|
||||
{
|
||||
anchors.fill: parent;
|
||||
onClicked:
|
||||
{
|
||||
anchors.fill: parent;
|
||||
onClicked:
|
||||
if(!parent.ListView.isCurrentItem)
|
||||
{
|
||||
if(!parent.ListView.isCurrentItem)
|
||||
{
|
||||
parent.ListView.view.currentIndex = index;
|
||||
}
|
||||
parent.ListView.view.currentIndex = index;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
background: Rectangle
|
||||
{
|
||||
color: parent.ListView.isCurrentItem ? UM.Theme.getColor("background_3") : "transparent"
|
||||
}
|
||||
}
|
||||
}
|
||||
Label
|
||||
UM.Label
|
||||
{
|
||||
id: discoveryTip
|
||||
anchors.left: parent.left
|
||||
anchors.right: parent.right
|
||||
wrapMode: Text.WordWrap
|
||||
renderType: Text.NativeRendering
|
||||
text: catalog.i18nc("@label", "If your printer is not listed, read the <a href='%1'>network printing troubleshooting guide</a>").arg("https://ultimaker.com/en/cura/troubleshooting/network?utm_source=cura&utm_medium=software&utm_campaign=manage-network-printer");
|
||||
onLinkActivated: Qt.openUrlExternally(link)
|
||||
}
|
||||
|
@ -183,32 +168,26 @@ Cura.MachineAction
|
|||
width: Math.round(parent.width * 0.5)
|
||||
visible: base.selectedDevice ? true : false
|
||||
spacing: UM.Theme.getSize("default_margin").height
|
||||
Label
|
||||
UM.Label
|
||||
{
|
||||
width: parent.width
|
||||
wrapMode: Text.WordWrap
|
||||
text: base.selectedDevice ? base.selectedDevice.name : ""
|
||||
font: UM.Theme.getFont("large_bold")
|
||||
elide: Text.ElideRight
|
||||
renderType: Text.NativeRendering
|
||||
}
|
||||
Grid
|
||||
GridLayout
|
||||
{
|
||||
visible: base.completeProperties
|
||||
width: parent.width
|
||||
columns: 2
|
||||
Label
|
||||
UM.Label
|
||||
{
|
||||
width: Math.round(parent.width * 0.5)
|
||||
wrapMode: Text.WordWrap
|
||||
renderType: Text.NativeRendering
|
||||
Layout.fillWidth: true
|
||||
text: catalog.i18nc("@label", "Type")
|
||||
}
|
||||
Label
|
||||
UM.Label
|
||||
{
|
||||
width: Math.round(parent.width * 0.5)
|
||||
wrapMode: Text.WordWrap
|
||||
renderType: Text.NativeRendering
|
||||
Layout.fillWidth: true
|
||||
text:
|
||||
{
|
||||
if (base.selectedDevice) {
|
||||
|
@ -217,41 +196,31 @@ Cura.MachineAction
|
|||
return ""
|
||||
}
|
||||
}
|
||||
Label
|
||||
UM.Label
|
||||
{
|
||||
width: Math.round(parent.width * 0.5)
|
||||
wrapMode: Text.WordWrap
|
||||
renderType: Text.NativeRendering
|
||||
Layout.fillWidth: true
|
||||
text: catalog.i18nc("@label", "Firmware version")
|
||||
}
|
||||
Label
|
||||
UM.Label
|
||||
{
|
||||
width: Math.round(parent.width * 0.5)
|
||||
wrapMode: Text.WordWrap
|
||||
renderType: Text.NativeRendering
|
||||
Layout.fillWidth: true
|
||||
text: base.selectedDevice ? base.selectedDevice.firmwareVersion : ""
|
||||
}
|
||||
Label
|
||||
UM.Label
|
||||
{
|
||||
width: Math.round(parent.width * 0.5)
|
||||
wrapMode: Text.WordWrap
|
||||
renderType: Text.NativeRendering
|
||||
Layout.fillWidth: true
|
||||
text: catalog.i18nc("@label", "Address")
|
||||
}
|
||||
Label
|
||||
UM.Label
|
||||
{
|
||||
width: Math.round(parent.width * 0.5)
|
||||
wrapMode: Text.WordWrap
|
||||
renderType: Text.NativeRendering
|
||||
Layout.fillWidth: true
|
||||
text: base.selectedDevice ? base.selectedDevice.ipAddress : ""
|
||||
}
|
||||
}
|
||||
|
||||
Label
|
||||
UM.Label
|
||||
{
|
||||
width: parent.width
|
||||
wrapMode: Text.WordWrap
|
||||
renderType: Text.NativeRendering
|
||||
text:{
|
||||
// The property cluster size does not exist for older UM3 devices.
|
||||
if(!base.selectedDevice || base.selectedDevice.clusterSize == null || base.selectedDevice.clusterSize == 1)
|
||||
|
@ -269,16 +238,14 @@ Cura.MachineAction
|
|||
}
|
||||
|
||||
}
|
||||
Label
|
||||
UM.Label
|
||||
{
|
||||
width: parent.width
|
||||
wrapMode: Text.WordWrap
|
||||
renderType: Text.NativeRendering
|
||||
visible: base.selectedDevice != null && !base.completeProperties
|
||||
text: catalog.i18nc("@label", "The printer at this address has not yet responded." )
|
||||
}
|
||||
|
||||
Button
|
||||
Cura.SecondaryButton
|
||||
{
|
||||
text: catalog.i18nc("@action:button", "Connect")
|
||||
enabled: (base.selectedDevice && base.completeProperties && base.selectedDevice.clusterSize > 0) ? true : false
|
||||
|
@ -288,18 +255,15 @@ Cura.MachineAction
|
|||
}
|
||||
}
|
||||
|
||||
MessageDialog
|
||||
Cura.MessageDialog
|
||||
{
|
||||
id: invalidIPAddressMessageDialog
|
||||
x: parent ? (parent.x + (parent.width) / 2) : 0
|
||||
y: parent ? (parent.y + (parent.height) / 2) : 0
|
||||
title: catalog.i18nc("@title:window", "Invalid IP address")
|
||||
text: catalog.i18nc("@text", "Please enter a valid IP address.")
|
||||
icon: StandardIcon.Warning
|
||||
standardButtons: StandardButton.Ok
|
||||
standardButtons: Dialog.Ok
|
||||
}
|
||||
|
||||
UM.Dialog
|
||||
Cura.MessageDialog
|
||||
{
|
||||
id: manualPrinterDialog
|
||||
property string printerKey
|
||||
|
@ -307,17 +271,19 @@ Cura.MachineAction
|
|||
|
||||
title: catalog.i18nc("@title:window", "Printer Address")
|
||||
|
||||
minimumWidth: 400 * screenScaleFactor
|
||||
minimumHeight: 130 * screenScaleFactor
|
||||
width: minimumWidth
|
||||
height: minimumHeight
|
||||
width: UM.Theme.getSize("small_popup_dialog").width
|
||||
height: UM.Theme.getSize("small_popup_dialog").height
|
||||
|
||||
anchors.centerIn: Overlay.overlay
|
||||
|
||||
standardButtons: Dialog.Yes | Dialog.No
|
||||
|
||||
signal showDialog(string key, string address)
|
||||
onShowDialog:
|
||||
{
|
||||
printerKey = key;
|
||||
addressText = address;
|
||||
manualPrinterDialog.show();
|
||||
manualPrinterDialog.open();
|
||||
addressField.selectAll();
|
||||
addressField.focus = true;
|
||||
}
|
||||
|
@ -326,67 +292,45 @@ Cura.MachineAction
|
|||
anchors.fill: parent
|
||||
spacing: UM.Theme.getSize("default_margin").height
|
||||
|
||||
Label
|
||||
UM.Label
|
||||
{
|
||||
text: catalog.i18nc("@label", "Enter the IP address of your printer on the network.")
|
||||
width: parent.width
|
||||
wrapMode: Text.WordWrap
|
||||
renderType: Text.NativeRendering
|
||||
}
|
||||
|
||||
TextField
|
||||
Cura.TextField
|
||||
{
|
||||
id: addressField
|
||||
width: parent.width
|
||||
validator: RegExpValidator
|
||||
{
|
||||
regExp: /[a-zA-Z0-9\.\-\_]*/
|
||||
}
|
||||
|
||||
onAccepted: btnOk.clicked()
|
||||
validator: RegExpValidator { regExp: /[a-zA-Z0-9\.\-\_]*/ }
|
||||
}
|
||||
}
|
||||
|
||||
rightButtons: [
|
||||
Button {
|
||||
text: catalog.i18nc("@action:button","Cancel")
|
||||
onClicked:
|
||||
{
|
||||
manualPrinterDialog.reject()
|
||||
manualPrinterDialog.hide()
|
||||
}
|
||||
},
|
||||
Button {
|
||||
id: btnOk
|
||||
text: catalog.i18nc("@action:button", "OK")
|
||||
onClicked:
|
||||
{
|
||||
// Validate the input first
|
||||
if (!networkingUtil.isValidIP(manualPrinterDialog.addressText))
|
||||
{
|
||||
invalidIPAddressMessageDialog.open()
|
||||
return
|
||||
}
|
||||
|
||||
// if the entered IP address has already been discovered, switch the current item to that item
|
||||
// and do nothing else.
|
||||
for (var i = 0; i < manager.foundDevices.length; i++)
|
||||
{
|
||||
var device = manager.foundDevices[i]
|
||||
if (device.address == manualPrinterDialog.addressText)
|
||||
{
|
||||
currentItemIndex = i
|
||||
manualPrinterDialog.hide()
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
manager.setManualDevice(manualPrinterDialog.printerKey, manualPrinterDialog.addressText)
|
||||
manualPrinterDialog.hide()
|
||||
}
|
||||
enabled: manualPrinterDialog.addressText.trim() != ""
|
||||
isDefault: true
|
||||
onAccepted:
|
||||
{
|
||||
// Validate the input first
|
||||
if (!networkingUtil.isValidIP(manualPrinterDialog.addressText))
|
||||
{
|
||||
// prefent closing of element, as we want to keep the dialog active after a wrongly entered IP adress
|
||||
manualPrinterDialog.open()
|
||||
// show invalid ip warning
|
||||
invalidIPAddressMessageDialog.open();
|
||||
return;
|
||||
}
|
||||
]
|
||||
|
||||
// if the entered IP address has already been discovered, switch the current item to that item
|
||||
// and do nothing else.
|
||||
for (var i = 0; i < manager.foundDevices.length; i++)
|
||||
{
|
||||
var device = manager.foundDevices[i]
|
||||
if (device.address == manualPrinterDialog.addressText)
|
||||
{
|
||||
currentItemIndex = i;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
manager.setManualDevice(manualPrinterDialog.printerKey, manualPrinterDialog.addressText);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,8 +3,6 @@
|
|||
|
||||
import QtQuick 2.2
|
||||
import QtQuick.Controls 2.0
|
||||
import QtQuick.Controls.Styles 1.4
|
||||
import QtQuick.Dialogs 1.1
|
||||
import QtGraphicalEffects 1.0
|
||||
import UM 1.3 as UM
|
||||
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
|
||||
import QtQuick 2.2
|
||||
import QtQuick.Controls 2.0
|
||||
import UM 1.3 as UM
|
||||
import UM 1.5 as UM
|
||||
|
||||
/**
|
||||
* This component comprises a buildplate icon and the buildplate name. It is
|
||||
|
@ -57,19 +57,15 @@ Item
|
|||
}
|
||||
}
|
||||
|
||||
Label
|
||||
UM.Label
|
||||
{
|
||||
id: buildplateLabel
|
||||
color: UM.Theme.getColor("text")
|
||||
elide: Text.ElideRight
|
||||
font: UM.Theme.getFont("default") // 12pt, regular
|
||||
text: buildplate ? buildplate : ""
|
||||
visible: text !== ""
|
||||
|
||||
// FIXED-LINE-HEIGHT:
|
||||
height: 18 * screenScaleFactor // TODO: Theme!
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
renderType: Text.NativeRendering
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,10 +2,10 @@
|
|||
// Cura is released under the terms of the LGPLv3 or higher.
|
||||
|
||||
import QtQuick 2.3
|
||||
import QtQuick.Controls 1.4
|
||||
import QtQuick.Controls 2.4
|
||||
import QtQuick.Layouts 1.3
|
||||
import QtQuick.Dialogs 1.2
|
||||
import UM 1.3 as UM
|
||||
import UM 1.5 as UM
|
||||
import Cura 1.5 as Cura
|
||||
|
||||
UM.Dialog
|
||||
{
|
||||
|
@ -18,12 +18,21 @@ UM.Dialog
|
|||
width: minimumWidth
|
||||
height: minimumHeight
|
||||
title: catalog.i18nc("@title:window", "Configuration Changes")
|
||||
buttonSpacing: UM.Theme.getSize("narrow_margin").width
|
||||
rightButtons:
|
||||
[
|
||||
Button
|
||||
Cura.TertiaryButton
|
||||
{
|
||||
id: cancelButton
|
||||
text: catalog.i18nc("@action:button", "Cancel")
|
||||
onClicked:
|
||||
{
|
||||
overrideConfirmationDialog.reject()
|
||||
}
|
||||
},
|
||||
Cura.PrimaryButton
|
||||
{
|
||||
id: overrideButton
|
||||
anchors.margins: UM.Theme.getSize("default_margin").width
|
||||
text: catalog.i18nc("@action:button", "Override")
|
||||
onClicked:
|
||||
{
|
||||
|
@ -50,20 +59,10 @@ UM.Dialog
|
|||
}
|
||||
return true
|
||||
}
|
||||
},
|
||||
Button
|
||||
{
|
||||
id: cancelButton
|
||||
anchors.margins: UM.Theme.getSize("default_margin").width
|
||||
text: catalog.i18nc("@action:button", "Cancel")
|
||||
onClicked:
|
||||
{
|
||||
overrideConfirmationDialog.reject()
|
||||
}
|
||||
}
|
||||
]
|
||||
|
||||
Label
|
||||
UM.Label
|
||||
{
|
||||
anchors
|
||||
{
|
||||
|
@ -72,7 +71,6 @@ UM.Dialog
|
|||
bottomMargin: 56 * screenScaleFactor // TODO: Theme!
|
||||
}
|
||||
wrapMode: Text.WordWrap
|
||||
renderType: Text.NativeRendering
|
||||
text:
|
||||
{
|
||||
if (!printer || !printer.activePrintJob)
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
// Copyright (c) 2019 Ultimaker B.V.
|
||||
// Copyright (c) 2022 Ultimaker B.V.
|
||||
// Cura is released under the terms of the LGPLv3 or higher.
|
||||
|
||||
import QtQuick 2.3
|
||||
import QtQuick.Controls 2.0
|
||||
import QtQuick.Dialogs 1.1
|
||||
import UM 1.3 as UM
|
||||
import QtQuick.Controls 2.15
|
||||
import UM 1.5 as UM
|
||||
import Cura 1.6 as Cura
|
||||
|
||||
/**
|
||||
* A MonitorInfoBlurb is an extension of the GenericPopUp used to show static information (vs. interactive context
|
||||
|
@ -134,32 +134,29 @@ Item
|
|||
}
|
||||
}
|
||||
|
||||
MessageDialog {
|
||||
Cura.MessageDialog
|
||||
{
|
||||
id: sendToTopConfirmationDialog
|
||||
Component.onCompleted: visible = false
|
||||
icon: StandardIcon.Warning
|
||||
onYes: OutputDevice.sendJobToTop(printJob.key)
|
||||
standardButtons: StandardButton.Yes | StandardButton.No
|
||||
onAccepted: OutputDevice.sendJobToTop(printJob.key)
|
||||
standardButtons: Dialog.Yes | Dialog.No
|
||||
text: printJob && printJob.name ? catalog.i18nc("@label %1 is the name of a print job.", "Are you sure you want to move %1 to the top of the queue?").arg(printJob.name) : ""
|
||||
title: catalog.i18nc("@window:title", "Move print job to top")
|
||||
}
|
||||
|
||||
MessageDialog {
|
||||
Cura.MessageDialog
|
||||
{
|
||||
id: deleteConfirmationDialog
|
||||
Component.onCompleted: visible = false
|
||||
icon: StandardIcon.Warning
|
||||
onYes: OutputDevice.deleteJobFromQueue(printJob.key)
|
||||
standardButtons: StandardButton.Yes | StandardButton.No
|
||||
onAccepted: OutputDevice.deleteJobFromQueue(printJob.key)
|
||||
standardButtons: Dialog.Yes | Dialog.No
|
||||
text: printJob && printJob.name ? catalog.i18nc("@label %1 is the name of a print job.", "Are you sure you want to delete %1?").arg(printJob.name) : ""
|
||||
title: catalog.i18nc("@window:title", "Delete print job")
|
||||
}
|
||||
|
||||
MessageDialog {
|
||||
Cura.MessageDialog
|
||||
{
|
||||
id: abortConfirmationDialog
|
||||
Component.onCompleted: visible = false
|
||||
icon: StandardIcon.Warning
|
||||
onYes: printJob.setState("abort")
|
||||
standardButtons: StandardButton.Yes | StandardButton.No
|
||||
onAccepted: printJob.setState("abort")
|
||||
standardButtons: Dialog.Yes | Dialog.No
|
||||
text: printJob && printJob.name ? catalog.i18nc("@label %1 is the name of a print job.", "Are you sure you want to abort %1?").arg(printJob.name) : ""
|
||||
title: catalog.i18nc("@window:title", "Abort print")
|
||||
}
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
|
||||
import QtQuick 2.3
|
||||
import QtQuick.Controls 2.0
|
||||
import UM 1.3 as UM
|
||||
import UM 1.5 as UM
|
||||
import Cura 1.0 as Cura
|
||||
|
||||
Button
|
||||
|
@ -17,13 +17,12 @@ Button
|
|||
radius: Math.round(0.5 * width)
|
||||
width: base.width
|
||||
}
|
||||
contentItem: Label {
|
||||
contentItem: UM.Label
|
||||
{
|
||||
color: enabled ? UM.Theme.getColor("text") : UM.Theme.getColor("monitor_text_disabled")
|
||||
font.pixelSize: 32 * screenScaleFactor
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
text: base.text
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
renderType: Text.NativeRendering;
|
||||
}
|
||||
height: width
|
||||
hoverEnabled: enabled
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
|
||||
import QtQuick 2.2
|
||||
import QtQuick.Controls 2.0
|
||||
import UM 1.3 as UM
|
||||
import UM 1.5 as UM
|
||||
|
||||
/**
|
||||
* This component is a sort of "super icon" which includes a colored SVG image
|
||||
|
@ -35,18 +35,16 @@ Item
|
|||
width: size
|
||||
}
|
||||
|
||||
Label
|
||||
UM.Label
|
||||
{
|
||||
id: positionLabel
|
||||
anchors.centerIn: icon
|
||||
font: UM.Theme.getFont("small")
|
||||
color: UM.Theme.getColor("text")
|
||||
height: Math.round(size / 2)
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
text: position + 1
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
|
||||
width: Math.round(size / 2)
|
||||
visible: position >= 0
|
||||
renderType: Text.NativeRendering
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
// Cura is released under the terms of the LGPLv3 or higher.
|
||||
import QtQuick 2.2
|
||||
import QtQuick.Controls 2.0
|
||||
import UM 1.3 as UM
|
||||
import UM 1.5 as UM
|
||||
import Cura 1.0 as Cura
|
||||
|
||||
/**
|
||||
|
@ -55,10 +55,9 @@ Item
|
|||
visible: !printJob
|
||||
radius: 2 * screenScaleFactor // TODO: Theme!
|
||||
}
|
||||
Label
|
||||
UM.Label
|
||||
{
|
||||
text: printJob && printJob.name ? printJob.name : ""
|
||||
color: UM.Theme.getColor("text")
|
||||
elide: Text.ElideRight
|
||||
font: UM.Theme.getFont("medium") // 14pt, regular
|
||||
visible: printJob
|
||||
|
@ -66,8 +65,6 @@ Item
|
|||
// FIXED-LINE-HEIGHT:
|
||||
width: parent.width
|
||||
height: parent.height
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
renderType: Text.NativeRendering
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -86,18 +83,15 @@ Item
|
|||
radius: 2 * screenScaleFactor // TODO: Theme!
|
||||
}
|
||||
|
||||
Label
|
||||
UM.Label
|
||||
{
|
||||
text: printJob ? OutputDevice.formatDuration(printJob.timeTotal) : ""
|
||||
color: UM.Theme.getColor("text")
|
||||
elide: Text.ElideRight
|
||||
font: UM.Theme.getFont("medium") // 14pt, regular
|
||||
visible: printJob
|
||||
|
||||
// FIXED-LINE-HEIGHT:
|
||||
height: Math.round(18 * screenScaleFactor) // TODO: Theme!
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
renderType: Text.NativeRendering
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -116,11 +110,10 @@ Item
|
|||
radius: 2 * screenScaleFactor // TODO: Theme!
|
||||
}
|
||||
|
||||
Label
|
||||
UM.Label
|
||||
{
|
||||
id: printerAssignmentLabel
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
color: UM.Theme.getColor("text")
|
||||
elide: Text.ElideRight
|
||||
font: UM.Theme.getFont("medium") // 14pt, regular
|
||||
text: {
|
||||
|
@ -143,8 +136,6 @@ Item
|
|||
|
||||
// FIXED-LINE-HEIGHT:
|
||||
height: parent.height
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
renderType: Text.NativeRendering
|
||||
}
|
||||
|
||||
Row
|
||||
|
@ -186,17 +177,15 @@ Item
|
|||
height: Math.round(72 * screenScaleFactor) // TODO: Theme!
|
||||
}
|
||||
|
||||
Label {
|
||||
UM.Label
|
||||
{
|
||||
text: printJob && printJob.owner ? printJob.owner : ""
|
||||
color: UM.Theme.getColor("text")
|
||||
elide: Text.ElideRight
|
||||
font: UM.Theme.getFont("medium") // 14pt, regular
|
||||
anchors.top: printerConfiguration.top
|
||||
|
||||
// FIXED-LINE-HEIGHT:
|
||||
height: Math.round(18 * screenScaleFactor) // TODO: Theme!
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
renderType: Text.NativeRendering
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,9 +2,7 @@
|
|||
// Cura is released under the terms of the LGPLv3 or higher.
|
||||
|
||||
import QtQuick 2.3
|
||||
import QtQuick.Controls.Styles 1.3
|
||||
import QtQuick.Controls 1.4
|
||||
import UM 1.3 as UM
|
||||
import UM 1.5 as UM
|
||||
|
||||
/**
|
||||
* NOTE: For most labels, a fixed height with vertical alignment is used to make
|
||||
|
@ -20,7 +18,7 @@ Item
|
|||
property var printJob: null
|
||||
|
||||
width: childrenRect.width
|
||||
height: UM.Theme.getSize("monitor_text_line").height
|
||||
height: percentLabel.height
|
||||
|
||||
UM.ProgressBar
|
||||
{
|
||||
|
@ -34,36 +32,28 @@ Item
|
|||
width: UM.Theme.getSize("monitor_progress_bar").width
|
||||
}
|
||||
|
||||
Label
|
||||
UM.Label
|
||||
{
|
||||
id: percentLabel
|
||||
anchors
|
||||
{
|
||||
left: progressBar.right
|
||||
leftMargin: UM.Theme.getSize("monitor_margin").width
|
||||
verticalCenter: parent.verticalCenter
|
||||
leftMargin: UM.Theme.getSize("default_margin").width
|
||||
}
|
||||
text: printJob ? Math.round(printJob.progress * 100) + "%" : "0%"
|
||||
color: printJob && printJob.isActive ? UM.Theme.getColor("text") : UM.Theme.getColor("monitor_text_disabled")
|
||||
width: contentWidth
|
||||
font: UM.Theme.getFont("default") // 12pt, regular
|
||||
|
||||
// FIXED-LINE-HEIGHT:
|
||||
height: UM.Theme.getSize("monitor_text_line").height
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
renderType: Text.NativeRendering
|
||||
wrapMode: Text.NoWrap
|
||||
}
|
||||
Label
|
||||
UM.Label
|
||||
{
|
||||
id: statusLabel
|
||||
anchors
|
||||
{
|
||||
left: percentLabel.right
|
||||
leftMargin: UM.Theme.getSize("monitor_margin").width
|
||||
verticalCenter: parent.verticalCenter
|
||||
leftMargin: UM.Theme.getSize("default_margin").width
|
||||
}
|
||||
color: UM.Theme.getColor("text")
|
||||
font: UM.Theme.getFont("default")
|
||||
wrapMode: Text.NoWrap
|
||||
text:
|
||||
{
|
||||
if (!printJob)
|
||||
|
@ -117,10 +107,5 @@ Item
|
|||
}
|
||||
}
|
||||
width: contentWidth
|
||||
|
||||
// FIXED-LINE-HEIGHT:
|
||||
height: UM.Theme.getSize("monitor_text_line").height
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
renderType: Text.NativeRendering
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,8 +3,7 @@
|
|||
|
||||
import QtQuick 2.3
|
||||
import QtQuick.Controls 2.0
|
||||
import QtQuick.Dialogs 1.1
|
||||
import UM 1.3 as UM
|
||||
import UM 1.5 as UM
|
||||
import Cura 1.0 as Cura
|
||||
|
||||
/**
|
||||
|
@ -64,7 +63,7 @@ Item
|
|||
leftMargin: 36 * screenScaleFactor // TODO: Theme!
|
||||
verticalCenter: parent.verticalCenter
|
||||
}
|
||||
spacing: 18 * screenScaleFactor // TODO: Theme!
|
||||
spacing: UM.Theme.getSize("default_margin").width
|
||||
|
||||
Rectangle
|
||||
{
|
||||
|
@ -96,23 +95,18 @@ Item
|
|||
{
|
||||
id: printerNameLabel
|
||||
color: printer ? "transparent" : UM.Theme.getColor("monitor_skeleton_loading")
|
||||
height: 18 * screenScaleFactor // TODO: Theme!
|
||||
height: UM.Theme.getSize("default_margin").width
|
||||
width: parent.width
|
||||
radius: 2 * screenScaleFactor // TODO: Theme!
|
||||
radius: UM.Theme.getSize("default_radius").width
|
||||
|
||||
Label
|
||||
UM.Label
|
||||
{
|
||||
text: printer && printer.name ? printer.name : ""
|
||||
color: UM.Theme.getColor("text")
|
||||
elide: Text.ElideRight
|
||||
font: UM.Theme.getFont("large") // 16pt, bold
|
||||
width: parent.width
|
||||
visible: printer
|
||||
|
||||
// FIXED-LINE-HEIGHT:
|
||||
height: parent.height
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
renderType: Text.NativeRendering
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -120,7 +114,7 @@ Item
|
|||
{
|
||||
color: UM.Theme.getColor("monitor_skeleton_loading")
|
||||
height: 18 * screenScaleFactor // TODO: Theme!
|
||||
radius: 2 * screenScaleFactor // TODO: Theme!
|
||||
radius: UM.Theme.getSize("default_radius").width
|
||||
visible: !printer
|
||||
width: 48 * screenScaleFactor // TODO: Theme!
|
||||
}
|
||||
|
@ -138,21 +132,20 @@ Item
|
|||
Item
|
||||
{
|
||||
id: managePrinterLink
|
||||
anchors {
|
||||
anchors
|
||||
{
|
||||
top: printerFamilyPill.bottom
|
||||
topMargin: UM.Theme.getSize("narrow_margin").height
|
||||
}
|
||||
height: 18 * screenScaleFactor // TODO: Theme!
|
||||
width: childrenRect.width
|
||||
|
||||
Label
|
||||
UM.Label
|
||||
{
|
||||
id: managePrinterText
|
||||
anchors.verticalCenter: managePrinterLink.verticalCenter
|
||||
color: UM.Theme.getColor("text_link")
|
||||
font: UM.Theme.getFont("default")
|
||||
text: catalog.i18nc("@label link to Connect and Cloud interfaces", "Manage printer")
|
||||
renderType: Text.NativeRendering
|
||||
}
|
||||
UM.RecolorImage
|
||||
{
|
||||
|
@ -165,22 +158,16 @@ Item
|
|||
}
|
||||
color: UM.Theme.getColor("text_link")
|
||||
source: UM.Theme.getIcon("LinkExternal")
|
||||
width: 12 * screenScaleFactor
|
||||
height: 12 * screenScaleFactor
|
||||
width: UM.Theme.getSize("icon").width
|
||||
height: UM.Theme.getSize("icon").height
|
||||
}
|
||||
}
|
||||
MouseArea
|
||||
{
|
||||
anchors.fill: managePrinterLink
|
||||
onClicked: OutputDevice.openPrinterControlPanel()
|
||||
onEntered:
|
||||
{
|
||||
manageQueueText.font.underline = true
|
||||
}
|
||||
onExited:
|
||||
{
|
||||
manageQueueText.font.underline = false
|
||||
}
|
||||
onEntered: manageQueueText.font.underline = true
|
||||
onExited: manageQueueText.font.underline = false
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -332,9 +319,9 @@ Item
|
|||
leftMargin: 36 * screenScaleFactor // TODO: Theme!
|
||||
}
|
||||
height: childrenRect.height
|
||||
spacing: 18 * screenScaleFactor // TODO: Theme!
|
||||
spacing: UM.Theme.getSize("default_margin").width
|
||||
|
||||
Label
|
||||
UM.Label
|
||||
{
|
||||
id: printerStatus
|
||||
anchors
|
||||
|
@ -371,7 +358,6 @@ Item
|
|||
return ""
|
||||
}
|
||||
visible: text !== ""
|
||||
renderType: Text.NativeRendering
|
||||
}
|
||||
|
||||
Item
|
||||
|
@ -401,22 +387,18 @@ Item
|
|||
height: printerNameLabel.height + printerFamilyPill.height + 6 * screenScaleFactor // TODO: Theme!
|
||||
visible: printer && printer.activePrintJob && !printerStatus.visible
|
||||
|
||||
Label
|
||||
UM.Label
|
||||
{
|
||||
id: printerJobNameLabel
|
||||
color: printer && printer.activePrintJob && printer.activePrintJob.isActive ? UM.Theme.getColor("text") : UM.Theme.getColor("monitor_text_disabled")
|
||||
elide: Text.ElideRight
|
||||
wrapMode: Text.NoWrap
|
||||
font: UM.Theme.getFont("large") // 16pt, bold
|
||||
text: printer && printer.activePrintJob ? printer.activePrintJob.name : catalog.i18nc("@label", "Untitled")
|
||||
width: parent.width
|
||||
|
||||
// FIXED-LINE-HEIGHT:
|
||||
height: 18 * screenScaleFactor // TODO: Theme!
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
renderType: Text.NativeRendering
|
||||
}
|
||||
|
||||
Label
|
||||
UM.Label
|
||||
{
|
||||
id: printerJobOwnerLabel
|
||||
anchors
|
||||
|
@ -427,14 +409,8 @@ Item
|
|||
}
|
||||
color: printer && printer.activePrintJob && printer.activePrintJob.isActive ? UM.Theme.getColor("text") : UM.Theme.getColor("monitor_text_disabled")
|
||||
elide: Text.ElideRight
|
||||
font: UM.Theme.getFont("default") // 12pt, regular
|
||||
text: printer && printer.activePrintJob ? printer.activePrintJob.owner : catalog.i18nc("@label", "Anonymous")
|
||||
width: parent.width
|
||||
|
||||
// FIXED-LINE-HEIGHT:
|
||||
height: 18 * screenScaleFactor // TODO: Theme!
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
renderType: Text.NativeRendering
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -448,59 +424,27 @@ Item
|
|||
visible: printer && printer.activePrintJob && printer.activePrintJob.configurationChanges.length === 0 && !printerStatus.visible
|
||||
}
|
||||
|
||||
Label
|
||||
UM.Label
|
||||
{
|
||||
anchors
|
||||
{
|
||||
verticalCenter: parent.verticalCenter
|
||||
}
|
||||
font: UM.Theme.getFont("default")
|
||||
text: catalog.i18nc("@label:status", "Requires configuration changes")
|
||||
visible: printer && printer.activePrintJob && printer.activePrintJob.configurationChanges.length > 0 && !printerStatus.visible
|
||||
color: UM.Theme.getColor("text")
|
||||
|
||||
// FIXED-LINE-HEIGHT:
|
||||
height: 18 * screenScaleFactor // TODO: Theme!
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
renderType: Text.NativeRendering
|
||||
}
|
||||
}
|
||||
|
||||
Button
|
||||
Cura.SecondaryButton
|
||||
{
|
||||
id: detailsButton
|
||||
anchors
|
||||
{
|
||||
verticalCenter: parent.verticalCenter
|
||||
right: parent.right
|
||||
rightMargin: 18 * screenScaleFactor // TODO: Theme!
|
||||
rightMargin: UM.Theme.getSize("default_margin").width
|
||||
}
|
||||
background: Rectangle
|
||||
{
|
||||
color: UM.Theme.getColor("monitor_secondary_button_shadow")
|
||||
radius: 2 * screenScaleFactor // Todo: Theme!
|
||||
Rectangle
|
||||
{
|
||||
anchors.fill: parent
|
||||
anchors.bottomMargin: 2 * screenScaleFactor // TODO: Theme!
|
||||
color: detailsButton.hovered ? UM.Theme.getColor("monitor_secondary_button_hover") : UM.Theme.getColor("monitor_secondary_button")
|
||||
radius: 2 * screenScaleFactor // Todo: Theme!
|
||||
}
|
||||
}
|
||||
contentItem: Label
|
||||
{
|
||||
anchors.fill: parent
|
||||
anchors.bottomMargin: 2 * screenScaleFactor // TODO: Theme!
|
||||
color: UM.Theme.getColor("monitor_secondary_button_text")
|
||||
font: UM.Theme.getFont("medium") // 14pt, regular
|
||||
text: catalog.i18nc("@action:button", "Details");
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
height: 18 * screenScaleFactor // TODO: Theme!
|
||||
renderType: Text.NativeRendering
|
||||
}
|
||||
implicitHeight: 32 * screenScaleFactor // TODO: Theme!
|
||||
implicitWidth: 96 * screenScaleFactor // TODO: Theme!
|
||||
text: catalog.i18nc("@action:button", "Details")
|
||||
visible: printer && printer.activePrintJob && printer.activePrintJob.configurationChanges.length > 0 && !printerStatus.visible
|
||||
onClicked: base.enabled ? overrideConfirmationDialog.open() : {}
|
||||
enabled: OutputDevice.supportsPrintJobActions
|
||||
|
|
|
@ -2,8 +2,7 @@
|
|||
// Cura is released under the terms of the LGPLv3 or higher.
|
||||
|
||||
import QtQuick 2.2
|
||||
import QtQuick.Controls 1.4
|
||||
import UM 1.2 as UM
|
||||
import UM 1.5 as UM
|
||||
|
||||
/**
|
||||
* A MonitorPrinterPill is a blue-colored tag indicating which printers a print
|
||||
|
@ -17,20 +16,19 @@ Item
|
|||
implicitHeight: 18 * screenScaleFactor // TODO: Theme!
|
||||
implicitWidth: Math.max(printerNameLabel.contentWidth + 12 * screenScaleFactor, 36 * screenScaleFactor) // TODO: Theme!
|
||||
|
||||
Rectangle {
|
||||
Rectangle
|
||||
{
|
||||
id: background
|
||||
anchors.fill: parent
|
||||
color: printerNameLabel.visible ? UM.Theme.getColor("monitor_printer_family_tag") : UM.Theme.getColor("monitor_skeleton_loading")
|
||||
radius: 2 * screenScaleFactor // TODO: Theme!
|
||||
}
|
||||
|
||||
Label {
|
||||
UM.Label
|
||||
{
|
||||
id: printerNameLabel
|
||||
anchors.centerIn: parent
|
||||
color: UM.Theme.getColor("text")
|
||||
text: monitorPrinterPill.text
|
||||
font.pointSize: 10 // TODO: Theme!
|
||||
visible: monitorPrinterPill.text !== ""
|
||||
renderType: Text.NativeRendering
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,10 +1,9 @@
|
|||
// Copyright (c) 2019 Ultimaker B.V.
|
||||
// Copyright (c) 2022 Ultimaker B.V.
|
||||
// Cura is released under the terms of the LGPLv3 or higher.
|
||||
|
||||
import QtQuick 2.2
|
||||
import QtQuick.Controls 1.4
|
||||
import QtQuick.Controls.Styles 1.4
|
||||
import UM 1.3 as UM
|
||||
import QtQuick.Controls 2.15
|
||||
import UM 1.5 as UM
|
||||
import Cura 1.0 as Cura
|
||||
|
||||
/**
|
||||
|
@ -18,18 +17,16 @@ Item
|
|||
// they might not need to though.
|
||||
property bool cloudConnection: Cura.MachineManager.activeMachineIsUsingCloudConnection
|
||||
|
||||
Label
|
||||
UM.Label
|
||||
{
|
||||
id: queuedLabel
|
||||
anchors
|
||||
{
|
||||
left: queuedPrintJobs.left
|
||||
left: printJobList.left
|
||||
top: parent.top
|
||||
}
|
||||
color: UM.Theme.getColor("text")
|
||||
font: UM.Theme.getFont("large")
|
||||
text: catalog.i18nc("@label", "Queued")
|
||||
renderType: Text.NativeRendering
|
||||
}
|
||||
|
||||
Item
|
||||
|
@ -37,7 +34,7 @@ Item
|
|||
id: manageQueueLabel
|
||||
anchors
|
||||
{
|
||||
right: queuedPrintJobs.right
|
||||
right: printJobList.right
|
||||
verticalCenter: queuedLabel.verticalCenter
|
||||
}
|
||||
height: 18 * screenScaleFactor // TODO: Theme!
|
||||
|
@ -52,7 +49,7 @@ Item
|
|||
width: 16 * screenScaleFactor // TODO: Theme! (Y U NO USE 18 LIKE ALL OTHER ICONS?!)
|
||||
height: 16 * screenScaleFactor // TODO: Theme! (Y U NO USE 18 LIKE ALL OTHER ICONS?!)
|
||||
}
|
||||
Label
|
||||
UM.Label
|
||||
{
|
||||
id: manageQueueText
|
||||
anchors
|
||||
|
@ -64,7 +61,6 @@ Item
|
|||
color: UM.Theme.getColor("text_link")
|
||||
font: UM.Theme.getFont("medium") // 14pt, regular
|
||||
text: catalog.i18nc("@label link to connect manager", "Manage in browser")
|
||||
renderType: Text.NativeRendering
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -72,14 +68,9 @@ Item
|
|||
{
|
||||
anchors.fill: manageQueueLabel
|
||||
onClicked: OutputDevice.openPrintJobControlPanel()
|
||||
onEntered:
|
||||
{
|
||||
manageQueueText.font.underline = true
|
||||
}
|
||||
onExited:
|
||||
{
|
||||
manageQueueText.font.underline = false
|
||||
}
|
||||
onEntered: manageQueueText.font.underline = true
|
||||
|
||||
onExited: manageQueueText.font.underline = false
|
||||
}
|
||||
|
||||
Row
|
||||
|
@ -87,96 +78,85 @@ Item
|
|||
id: printJobQueueHeadings
|
||||
anchors
|
||||
{
|
||||
left: queuedPrintJobs.left
|
||||
left: printJobList.left
|
||||
leftMargin: UM.Theme.getSize("narrow_margin").width
|
||||
top: queuedLabel.bottom
|
||||
topMargin: 24 * screenScaleFactor // TODO: Theme!
|
||||
}
|
||||
spacing: 18 * screenScaleFactor // TODO: Theme!
|
||||
|
||||
Label
|
||||
UM.Label
|
||||
{
|
||||
text: catalog.i18nc("@label", "There are no print jobs in the queue. Slice and send a job to add one.")
|
||||
color: UM.Theme.getColor("text")
|
||||
font: UM.Theme.getFont("medium")
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
|
||||
renderType: Text.NativeRendering
|
||||
visible: printJobList.count === 0
|
||||
}
|
||||
|
||||
Label
|
||||
UM.Label
|
||||
{
|
||||
text: catalog.i18nc("@label", "Print jobs")
|
||||
color: UM.Theme.getColor("text")
|
||||
font: UM.Theme.getFont("medium") // 14pt, regular
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
width: 284 * screenScaleFactor // TODO: Theme! (Should match column size)
|
||||
|
||||
renderType: Text.NativeRendering
|
||||
visible: printJobList.count > 0
|
||||
}
|
||||
|
||||
Label
|
||||
UM.Label
|
||||
{
|
||||
text: catalog.i18nc("@label", "Total print time")
|
||||
color: UM.Theme.getColor("text")
|
||||
font: UM.Theme.getFont("medium") // 14pt, regular
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
width: UM.Theme.getSize("monitor_column").width
|
||||
|
||||
renderType: Text.NativeRendering
|
||||
visible: printJobList.count > 0
|
||||
}
|
||||
|
||||
Label
|
||||
UM.Label
|
||||
{
|
||||
text: catalog.i18nc("@label", "Waiting for")
|
||||
color: UM.Theme.getColor("text")
|
||||
font: UM.Theme.getFont("medium") // 14pt, regular
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
width: UM.Theme.getSize("monitor_column").width
|
||||
|
||||
renderType: Text.NativeRendering
|
||||
visible: printJobList.count > 0
|
||||
}
|
||||
}
|
||||
|
||||
ScrollView
|
||||
ListView
|
||||
{
|
||||
id: queuedPrintJobs
|
||||
id: printJobList
|
||||
anchors
|
||||
{
|
||||
bottom: parent.bottom
|
||||
horizontalCenter: parent.horizontalCenter
|
||||
top: printJobQueueHeadings.bottom
|
||||
topMargin: 12 * screenScaleFactor // TODO: Theme!
|
||||
topMargin: UM.Theme.getSize("default_margin").width
|
||||
}
|
||||
style: UM.Theme.styles.scrollview
|
||||
width: parent.width
|
||||
|
||||
ListView
|
||||
ScrollBar.vertical: UM.ScrollBar
|
||||
{
|
||||
id: printJobList
|
||||
anchors.fill: parent
|
||||
delegate: MonitorPrintJobCard
|
||||
id: printJobScrollBar
|
||||
}
|
||||
spacing: UM.Theme.getSize("narrow_margin").width
|
||||
clip: true
|
||||
|
||||
delegate: MonitorPrintJobCard
|
||||
{
|
||||
anchors
|
||||
{
|
||||
anchors
|
||||
{
|
||||
left: parent.left
|
||||
right: parent.right
|
||||
}
|
||||
printJob: modelData
|
||||
left: parent.left
|
||||
right: parent.right
|
||||
rightMargin: printJobScrollBar.width
|
||||
}
|
||||
model:
|
||||
printJob: modelData
|
||||
}
|
||||
model:
|
||||
{
|
||||
if (OutputDevice.receivedData)
|
||||
{
|
||||
if (OutputDevice.receivedData)
|
||||
{
|
||||
return OutputDevice.queuedPrintJobs
|
||||
}
|
||||
return [null, null]
|
||||
return OutputDevice.queuedPrintJobs
|
||||
}
|
||||
spacing: 6 // TODO: Theme!
|
||||
return [null, null]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,8 +2,6 @@
|
|||
// Cura is released under the terms of the LGPLv3 or higher.
|
||||
|
||||
import QtQuick 2.2
|
||||
import QtQuick.Controls 1.4
|
||||
import QtQuick.Controls.Styles 1.4
|
||||
import UM 1.3 as UM
|
||||
import Cura 1.0 as Cura
|
||||
|
||||
|
|
|
@ -1,24 +1,24 @@
|
|||
// Copyright (c) 2019 Ultimaker B.V.
|
||||
// Copyright (c) 2021 Ultimaker B.V.
|
||||
// Cura is released under the terms of the LGPLv3 or higher.
|
||||
|
||||
import QtQuick 2.2
|
||||
import QtQuick.Controls 2.0
|
||||
import QtQuick.Controls.Styles 1.4
|
||||
import UM 1.3 as UM
|
||||
import UM 1.5 as UM
|
||||
|
||||
Button {
|
||||
background: Rectangle {
|
||||
opacity: parent.down || parent.hovered ? 1 : 0;
|
||||
Button
|
||||
{
|
||||
background: Rectangle
|
||||
{
|
||||
opacity: parent.down || parent.hovered ? 1 : 0
|
||||
color: UM.Theme.getColor("monitor_context_menu_hover")
|
||||
}
|
||||
contentItem: Label {
|
||||
color: enabled ? UM.Theme.getColor("text") : UM.Theme.getColor("monitor_text_disabled");
|
||||
contentItem: UM.Label
|
||||
{
|
||||
color: enabled ? UM.Theme.getColor("text") : UM.Theme.getColor("monitor_text_disabled")
|
||||
text: parent.text
|
||||
horizontalAlignment: Text.AlignLeft;
|
||||
verticalAlignment: Text.AlignVCenter;
|
||||
renderType: Text.NativeRendering;
|
||||
horizontalAlignment: Text.AlignLeft
|
||||
}
|
||||
height: visible ? 39 * screenScaleFactor : 0; // TODO: Theme!
|
||||
hoverEnabled: true;
|
||||
width: parent.width;
|
||||
height: visible ? 39 * screenScaleFactor : 0 // TODO: Theme!
|
||||
hoverEnabled: true
|
||||
width: parent.width
|
||||
}
|
||||
|
|
|
@ -2,8 +2,7 @@
|
|||
// Cura is released under the terms of the LGPLv3 or higher.
|
||||
import QtQuick 2.2
|
||||
import QtQuick.Window 2.2
|
||||
import QtQuick.Controls 1.1
|
||||
import QtQuick.Controls 2.15 as NewControls
|
||||
import QtQuick.Controls 2.15
|
||||
|
||||
import UM 1.1 as UM
|
||||
|
||||
|
@ -84,7 +83,7 @@ UM.Dialog {
|
|||
renderType: Text.NativeRendering;
|
||||
}
|
||||
|
||||
NewControls.ComboBox {
|
||||
ComboBox {
|
||||
id: printerComboBox;
|
||||
currentIndex: 0;
|
||||
Behavior on height { NumberAnimation { duration: 100 } }
|
||||
|
|
|
@ -2,8 +2,6 @@
|
|||
// Cura is released under the terms of the LGPLv3 or higher.
|
||||
|
||||
import QtQuick 2.2
|
||||
import QtQuick.Controls 1.4
|
||||
import QtQuick.Controls.Styles 1.4
|
||||
import UM 1.3 as UM
|
||||
import Cura 1.0 as Cura
|
||||
|
||||
|
|
|
@ -3,7 +3,6 @@
|
|||
|
||||
import QtQuick 2.10
|
||||
import QtQuick.Controls 2.0
|
||||
import QtQuick.Layouts 1.3
|
||||
|
||||
import UM 1.2 as UM
|
||||
import Cura 1.0 as Cura
|
||||
|
@ -22,7 +21,10 @@ Component
|
|||
|
||||
Cura.PrintMonitor
|
||||
{
|
||||
anchors.fill: parent
|
||||
anchors.top: parent.top
|
||||
anchors.left: parent.left
|
||||
anchors.right: parent.right
|
||||
anchors.bottom: footerSeparator.top
|
||||
}
|
||||
|
||||
Rectangle
|
||||
|
|
|
@ -1092,38 +1092,6 @@
|
|||
"default_value": "inward_distributed",
|
||||
"limit_to_extruder": "wall_0_extruder_nr"
|
||||
},
|
||||
"wall_transition_threshold": {
|
||||
"label": "Middle Line Threshold",
|
||||
"description": "The smallest line width, as a factor of the normal line width, below which it will choose to use fewer, but wider lines to fill the available space the wall needs to occupy. Reduce this setting to use more, thinner lines. Increase to use fewer, wider lines. Note that this applies -as if- the entire shape should be filled with wall, so the middle here refers to the middle of the object between two outer edges of the shape, even if there actually is fill or (other) skin in the print instead of wall.",
|
||||
"type": "float",
|
||||
"unit": "%",
|
||||
"default_value": 90,
|
||||
"minimum_value": "1",
|
||||
"maximum_value": "99",
|
||||
"children":
|
||||
{
|
||||
"wall_split_middle_threshold": {
|
||||
"label": "Split Middle Line Threshold",
|
||||
"description": "The smallest line width, as a factor of the normal line width, above which the middle line (if there is one) will be split into two. Reduce this setting to use more, thinner lines. Increase to use fewer, wider lines. Note that this applies -as if- the entire shape should be filled with wall, so the middle here refers to the middle of the object between two outer edges of the shape, even if there actually is fill or (other) skin in the print instead of wall.",
|
||||
"type": "float",
|
||||
"unit": "%",
|
||||
"default_value": 90,
|
||||
"value": "wall_transition_threshold",
|
||||
"minimum_value": "1",
|
||||
"maximum_value": "99"
|
||||
},
|
||||
"wall_add_middle_threshold": {
|
||||
"label": "Add Middle Line Threshold",
|
||||
"description": "The smallest line width, as a factor of the normal line width, above which a middle line (if there wasn't one already) will be added. Reduce this setting to use more, thinner lines. Increase to use fewer, wider lines. Note that this applies -as if- the entire shape should be filled with wall, so the middle here refers to the middle of the object between two outer edges of the shape, even if there actually is fill or (other) skin in the print instead of wall.",
|
||||
"type": "float",
|
||||
"unit": "%",
|
||||
"default_value": 80,
|
||||
"value": "wall_transition_threshold * 8 / 9",
|
||||
"minimum_value": "1",
|
||||
"maximum_value": "99"
|
||||
}
|
||||
}
|
||||
},
|
||||
"wall_transition_length":
|
||||
{
|
||||
"label": "Wall Transition Length",
|
||||
|
@ -1149,8 +1117,8 @@
|
|||
},
|
||||
"wall_transition_angle":
|
||||
{
|
||||
"label": "Wall Transition Angle",
|
||||
"description": "When transitioning between different numbers of walls as the part becomes thinner, two adjacent walls will join together at this angle. This can make the walls come together faster than what the Wall Transition Length indicates, filling the space better.",
|
||||
"label": "Wall Transitioning Threshold Angle",
|
||||
"description": "When to create transitions between even and odd numbers of walls. A wedge shape with an angle greater than this setting will not have transitions and no walls will be printed in the center to fill the remaining space. Reducing this setting reduces the number and length of these center walls, but may leave gaps or overextrude.",
|
||||
"type": "float",
|
||||
"unit": "°",
|
||||
"default_value": 10,
|
||||
|
@ -1236,6 +1204,74 @@
|
|||
"limit_to_extruder": "wall_0_extruder_nr",
|
||||
"settable_per_mesh": true
|
||||
},
|
||||
"min_wall_line_width":
|
||||
{
|
||||
"label": "Minimum Wall Line Width",
|
||||
"description": "For thin structures around once or twice the nozzle size, the line widths need to be altered to adhere to the thickness of the model. This setting controls the minimum line width allowed for the walls. The minimum line widths inherently also determine the maximum line widths, since we transition from N to N+1 walls at some geometry thickness where the N walls are wide and the N+1 walls are narrow. The widest possible wall line is twice the Minimum Wall Line Width.",
|
||||
"unit": "mm",
|
||||
"minimum_value_warning": ".5 * max(wall_line_width_0, wall_line_width_x)",
|
||||
"maximum_value_warning": "min(wall_line_width_0, wall_line_width_x)",
|
||||
"minimum_value_warning_old": "(0.1 + 0.4 * machine_nozzle_size) if inset_direction == \"outside_in\" else 0.1 * machine_nozzle_size",
|
||||
"maximum_value_warning_old": "2 * machine_nozzle_size",
|
||||
"default_value": 0.3,
|
||||
"value": "machine_nozzle_size * .75",
|
||||
"type": "float",
|
||||
"settable_per_mesh": true,
|
||||
"children":
|
||||
{
|
||||
"min_even_wall_line_width":
|
||||
{
|
||||
"label": "Minimum Even Wall Line Width",
|
||||
"description": "The minimum line width for normal polygonal walls. This setting determines at which model thickness we switch from printing a single thin wall line, to printing two wall lines. A higher Minimum Even Wall Line Width leads to a higher maximum odd wall line width. The maximum even wall line width is calculated as Outer Wall Line Width + 0.5 * Minimum Odd Wall Line Width.",
|
||||
"unit": "mm",
|
||||
"minimum_value_warning": ".5 * max(wall_line_width_0, wall_line_width_x)",
|
||||
"maximum_value_warning": "min(wall_line_width_0, wall_line_width_x)",
|
||||
"default_value": 0.3,
|
||||
"value": "min_wall_line_width",
|
||||
"type": "float",
|
||||
"settable_per_mesh": true,
|
||||
"children":
|
||||
{
|
||||
"wall_split_middle_threshold": {
|
||||
"label": "Split Middle Line Threshold",
|
||||
"description": "The smallest line width, as a factor of the normal line width, above which the middle line (if there is one) will be split into two. Reduce this setting to use more, thinner lines. Increase to use fewer, wider lines. Note that this applies -as if- the entire shape should be filled with wall, so the middle here refers to the middle of the object between two outer edges of the shape, even if there actually is fill or (other) skin in the print instead of wall.",
|
||||
"type": "float",
|
||||
"unit": "%",
|
||||
"default_value": 50,
|
||||
"value": "max(1, min(99, 100 * (2 * min_even_wall_line_width - wall_line_width_0) / wall_line_width_0))",
|
||||
"value_explicit": "100 * (2 * min_even_wall_line_width - wall_line_width_0) / (wall_line_width_0 + wall_line_width_x - wall_line_width_0)",
|
||||
"minimum_value": "1",
|
||||
"maximum_value": "99"
|
||||
}
|
||||
}
|
||||
},
|
||||
"min_odd_wall_line_width":
|
||||
{
|
||||
"label": "Minimum Odd Wall Line Width",
|
||||
"description": "The minimum line width for middle line gap filler polyline walls. This setting determines at which model thickness we switch from printing two wall lines, to printing two outer walls and a single central wall in the middle. A higher Minimum Odd Wall Line Width leads to a higher maximum even wall line width. The maximum odd wall line width is calculated as 2 * Minimum Even Wall Line Width,",
|
||||
"unit": "mm",
|
||||
"minimum_value_warning": ".5 * max(wall_line_width_0, wall_line_width_x)",
|
||||
"maximum_value_warning": "min(wall_line_width_0, wall_line_width_x)",
|
||||
"default_value": 0.3,
|
||||
"value": "min_wall_line_width",
|
||||
"type": "float",
|
||||
"settable_per_mesh": true,
|
||||
"children":
|
||||
{
|
||||
"wall_add_middle_threshold": {
|
||||
"label": "Add Middle Line Threshold",
|
||||
"description": "The smallest line width, as a factor of the normal line width, above which a middle line (if there wasn't one already) will be added. Reduce this setting to use more, thinner lines. Increase to use fewer, wider lines. Note that this applies -as if- the entire shape should be filled with wall, so the middle here refers to the middle of the object between two outer edges of the shape, even if there actually is fill or (other) skin in the print instead of wall.",
|
||||
"type": "float",
|
||||
"unit": "%",
|
||||
"default_value": 75,
|
||||
"value": "max(1, min(99, 100 * min_odd_wall_line_width / wall_line_width_x))",
|
||||
"minimum_value": "1",
|
||||
"maximum_value": "99"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"fill_outline_gaps": {
|
||||
"label": "Print Thin Walls",
|
||||
"description": "Print pieces of the model which are horizontally thinner than the nozzle size.",
|
||||
|
@ -1260,10 +1296,10 @@
|
|||
},
|
||||
"min_bead_width":
|
||||
{
|
||||
"label": "Minimum Wall Line Width",
|
||||
"label": "Minimum Thin Wall Line Width",
|
||||
"description": "Width of the wall that will replace thin features (according to the Minimum Feature Size) of the model. If the Minimum Wall Line Width is thinner than the thickness of the feature, the wall will become as thick as the feature itself.",
|
||||
"unit": "mm",
|
||||
"value": "wall_line_width_0 * (100.0 + wall_split_middle_threshold)/200",
|
||||
"value": "machine_nozzle_size * .75",
|
||||
"default_value": 0.2,
|
||||
"minimum_value": "0.001",
|
||||
"minimum_value_warning": "min_feature_size",
|
||||
|
@ -4366,6 +4402,7 @@
|
|||
"default_value": "0",
|
||||
"value": "support_extruder_nr",
|
||||
"enabled": "(support_enable or support_meshes_present) and extruders_enabled_count > 1",
|
||||
"resolve": "max(extruderValues('support_interface_extruder_nr'))",
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": false,
|
||||
"children":
|
||||
|
@ -4378,6 +4415,7 @@
|
|||
"default_value": "0",
|
||||
"value": "support_interface_extruder_nr",
|
||||
"enabled": "(support_enable or support_meshes_present) and extruders_enabled_count > 1",
|
||||
"resolve": "max(extruderValues('support_roof_extruder_nr'))",
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": false
|
||||
},
|
||||
|
@ -4389,6 +4427,7 @@
|
|||
"default_value": "0",
|
||||
"value": "support_interface_extruder_nr",
|
||||
"enabled": "(support_enable or support_meshes_present) and extruders_enabled_count > 1",
|
||||
"resolve": "max(extruderValues('support_bottom_extruder_nr'))",
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": false
|
||||
}
|
||||
|
@ -5421,6 +5460,7 @@
|
|||
"default_value": "0",
|
||||
"value": "int(defaultExtruderPosition())",
|
||||
"enabled": "extruders_enabled_count > 1 and (resolveOrValue('adhesion_type') != 'none' or resolveOrValue('prime_tower_brim_enable'))",
|
||||
"resolve": "max(extruderValues('adhesion_extruder_nr'))",
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": false,
|
||||
"children":
|
||||
|
@ -5444,6 +5484,7 @@
|
|||
"default_value": "0",
|
||||
"value": "adhesion_extruder_nr",
|
||||
"enabled": "extruders_enabled_count > 1 and resolveOrValue('adhesion_type') == 'raft'",
|
||||
"resolve": "max(extruderValues('raft_base_extruder_nr'))",
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": false
|
||||
},
|
||||
|
@ -5455,6 +5496,7 @@
|
|||
"default_value": "0",
|
||||
"value": "adhesion_extruder_nr",
|
||||
"enabled": "extruders_enabled_count > 1 and resolveOrValue('adhesion_type') == 'raft'",
|
||||
"resolve": "max(extruderValues('raft_interface_extruder_nr'))",
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": false
|
||||
},
|
||||
|
@ -5466,6 +5508,7 @@
|
|||
"default_value": "0",
|
||||
"value": "adhesion_extruder_nr",
|
||||
"enabled": "extruders_enabled_count > 1 and resolveOrValue('adhesion_type') == 'raft'",
|
||||
"resolve": "max(extruderValues('raft_surface_extruder_nr'))",
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": false
|
||||
}
|
||||
|
@ -6963,7 +7006,6 @@
|
|||
"type": "bool",
|
||||
"default_value": false,
|
||||
"limit_to_extruder": "wall_0_extruder_nr",
|
||||
"enabled": false,
|
||||
"settable_per_mesh": true
|
||||
},
|
||||
"magic_fuzzy_skin_outside_only":
|
||||
|
@ -6972,7 +7014,7 @@
|
|||
"description": "Jitter only the parts' outlines and not the parts' holes.",
|
||||
"type": "bool",
|
||||
"default_value": false,
|
||||
"enabled": "magic_fuzzy_skin_enabled and False" ,
|
||||
"enabled": "magic_fuzzy_skin_enabled",
|
||||
"limit_to_extruder": "wall_0_extruder_nr",
|
||||
"settable_per_mesh": true
|
||||
},
|
||||
|
@ -6985,7 +7027,7 @@
|
|||
"default_value": 0.3,
|
||||
"minimum_value": "0.001",
|
||||
"maximum_value_warning": "wall_line_width_0",
|
||||
"enabled": "magic_fuzzy_skin_enabled and False",
|
||||
"enabled": "magic_fuzzy_skin_enabled",
|
||||
"limit_to_extruder": "wall_0_extruder_nr",
|
||||
"settable_per_mesh": true
|
||||
},
|
||||
|
@ -7000,7 +7042,7 @@
|
|||
"minimum_value_warning": "0.1",
|
||||
"maximum_value_warning": "10",
|
||||
"maximum_value": "2 / magic_fuzzy_skin_thickness",
|
||||
"enabled": "magic_fuzzy_skin_enabled and False",
|
||||
"enabled": "magic_fuzzy_skin_enabled",
|
||||
"limit_to_extruder": "wall_0_extruder_nr",
|
||||
"settable_per_mesh": true,
|
||||
"children":
|
||||
|
@ -7016,7 +7058,7 @@
|
|||
"minimum_value_warning": "0.1",
|
||||
"maximum_value_warning": "10",
|
||||
"value": "10000 if magic_fuzzy_skin_point_density == 0 else 1 / magic_fuzzy_skin_point_density",
|
||||
"enabled": "magic_fuzzy_skin_enabled and False",
|
||||
"enabled": "magic_fuzzy_skin_enabled",
|
||||
"limit_to_extruder": "wall_0_extruder_nr",
|
||||
"settable_per_mesh": true
|
||||
}
|
||||
|
|
|
@ -29,7 +29,7 @@
|
|||
"default_value": "M104 S{material_print_temperature_layer_0} ;Set Hotend Temperature\nM140 S{material_bed_temperature_layer_0} ;Set Bed Temperature\nG28 ;home\nG90 ;absolute positioning\nG1 X-10 Y-10 F3000 ;Move to corner \nG1 Z0 F1800 ;Go to zero offset\nM109 S{material_print_temperature_layer_0} ;Wait for Hotend Temperature\nM190 S{material_bed_temperature_layer_0} ;Wait for Bed Temperature\nG92 E0 ;Zero set extruder position\nG1 E20 F200 ;Feed filament to clear nozzle\nG92 E0 ;Zero set extruder position"
|
||||
},
|
||||
"machine_end_gcode": {
|
||||
"default_value": "M104 S0 ;Extruder heater off\nM140 S0 ;Heated bed heater off\nG90 ;absolute positioning\nG92 E0 ;Retract the filament\nG1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\nG1 Z{machine_width} E-1 F3000 ;move Z up a bit and retract filament even more\nG1 X0 F3000 ;move X to min endstops, so the head is out of the way\nG1 Y{machine_depth} F3000 ;so the head is out of the way and Plate is moved forward"
|
||||
"default_value": "M104 S0 ;Extruder heater off\nM140 S0 ;Heated bed heater off\nG90 ;absolute positioning\nG92 E0 ;Retract the filament\nG1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\nG1 Z{machine_height} E-1 F3000 ;move Z up a bit and retract filament even more\nG1 X0 F3000 ;move X to min endstops, so the head is out of the way\nG1 Y{machine_depth} F3000 ;so the head is out of the way and Plate is moved forward"
|
||||
},
|
||||
"machine_nozzle_size": {
|
||||
"default_value": 0.4
|
||||
|
|
|
@ -47,6 +47,9 @@
|
|||
"line_width": {
|
||||
"value": "machine_nozzle_size"
|
||||
},
|
||||
"wall_thickness": {
|
||||
"value": "wall_line_width_0 + wall_line_width_x"
|
||||
},
|
||||
"infill_before_walls": {
|
||||
"value": "False"
|
||||
},
|
||||
|
@ -67,6 +70,9 @@
|
|||
},
|
||||
"bottom_layers": {
|
||||
"value": "math.ceil(round(bottom_thickness / resolveOrValue('layer_height'), 4))"
|
||||
},
|
||||
"xy_offset": {
|
||||
"value": "-layer_height * 0.2"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -166,7 +166,6 @@
|
|||
"top_bottom_thickness": { "value": "1" },
|
||||
"travel_avoid_distance": { "value": "3 if extruders_enabled_count > 1 else machine_nozzle_tip_outer_diameter / 2 * 1.5" },
|
||||
"wall_0_inset": { "value": "0" },
|
||||
"wall_thickness": { "value": "1" },
|
||||
"zig_zaggify_infill": { "value": "gradual_infill_steps == 0" }
|
||||
}
|
||||
}
|
||||
|
|
|
@ -159,7 +159,6 @@
|
|||
"travel_avoid_supports": { "value": "True" },
|
||||
"travel_avoid_distance": { "value": "3 if extruders_enabled_count > 1 else machine_nozzle_tip_outer_diameter / 2 * 1.5" },
|
||||
"wall_0_inset": { "value": "0" },
|
||||
"wall_thickness": { "value": "1" },
|
||||
"meshfix_maximum_resolution": { "value": "(speed_wall_0 + speed_wall_x) / 60" },
|
||||
"meshfix_maximum_deviation": { "value": "layer_height / 4" },
|
||||
"initial_layer_line_width_factor": { "value": "120" },
|
||||
|
|
|
@ -161,7 +161,6 @@
|
|||
"travel_avoid_supports": { "value": "True" },
|
||||
"travel_avoid_distance": { "value": "3 if extruders_enabled_count > 1 else machine_nozzle_tip_outer_diameter / 2 * 1.5" },
|
||||
"wall_0_inset": { "value": "0" },
|
||||
"wall_thickness": { "value": "1" },
|
||||
"meshfix_maximum_resolution": { "value": "(speed_wall_0 + speed_wall_x) / 60" },
|
||||
"meshfix_maximum_deviation": { "value": "layer_height / 4" },
|
||||
"optimize_wall_printing_order": { "value": "True" },
|
||||
|
|
|
@ -18,8 +18,7 @@ speed_wall = =speed_print
|
|||
speed_wall_0 = =speed_wall
|
||||
speed_wall_x = =speed_wall
|
||||
speed_layer_0 = 20
|
||||
top_bottom_thickness = =wall_thickness
|
||||
wall_thickness = =line_width * 2
|
||||
top_bottom_thickness = 0.8
|
||||
infill_sparse_density = 15
|
||||
|
||||
jerk_print = 30
|
||||
|
|
|
@ -31,4 +31,3 @@ speed_wall_x = =speed_wall
|
|||
top_bottom_thickness = =wall_thickness
|
||||
|
||||
wall_thickness = =line_width * 3
|
||||
xy_offset = =-layer_height * 0.2
|
||||
|
|
|
@ -13,5 +13,4 @@ variant = AA 0.4
|
|||
|
||||
[values]
|
||||
speed_infill = 50
|
||||
wall_thickness = =wall_line_width * 3
|
||||
top_bottom_thickness = =wall_thickness
|
||||
top_bottom_thickness = 1.05
|
||||
|
|
|
@ -13,5 +13,4 @@ variant = AA 0.4
|
|||
|
||||
[values]
|
||||
speed_infill = 50
|
||||
wall_thickness = =wall_line_width * 3
|
||||
top_bottom_thickness = =wall_thickness
|
||||
top_bottom_thickness = 1.05
|
||||
|
|
|
@ -31,4 +31,3 @@ speed_wall_x = =speed_wall
|
|||
top_bottom_thickness = =wall_thickness
|
||||
|
||||
wall_thickness = =line_width * 3
|
||||
xy_offset = =-layer_height * 0.2
|
||||
|
|
|
@ -13,5 +13,4 @@ variant = AA 0.4
|
|||
|
||||
[values]
|
||||
speed_infill = 50
|
||||
wall_thickness = =wall_line_width * 3
|
||||
top_bottom_thickness = =wall_thickness
|
||||
top_bottom_thickness = 1.05
|
||||
|
|
|
@ -1,35 +1,34 @@
|
|||
[general]
|
||||
version = 4
|
||||
name = Accurate
|
||||
definition = ultimaker_s3
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
type = intent
|
||||
intent_category = engineering
|
||||
quality_type = fast
|
||||
material = generic_cpe_plus
|
||||
variant = AA 0.4
|
||||
|
||||
[values]
|
||||
|
||||
jerk_print = 30
|
||||
jerk_infill = =jerk_print
|
||||
jerk_topbottom = =jerk_print
|
||||
jerk_wall = =jerk_print
|
||||
jerk_wall_0 = =jerk_wall
|
||||
jerk_wall_x = =jerk_wall
|
||||
jerk_layer_0 = 5
|
||||
|
||||
speed_print = 30
|
||||
speed_infill = =speed_print
|
||||
speed_layer_0 = 20
|
||||
speed_topbottom = =speed_print
|
||||
speed_wall = =speed_print
|
||||
speed_wall_0 = =speed_wall
|
||||
speed_wall_x = =speed_wall
|
||||
top_bottom_thickness = =wall_thickness
|
||||
|
||||
wall_thickness = =line_width * 3
|
||||
xy_offset = =-layer_height * 0.2
|
||||
|
||||
[general]
|
||||
version = 4
|
||||
name = Accurate
|
||||
definition = ultimaker_s3
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
type = intent
|
||||
intent_category = engineering
|
||||
quality_type = fast
|
||||
material = generic_cpe_plus
|
||||
variant = AA 0.4
|
||||
|
||||
[values]
|
||||
|
||||
jerk_print = 30
|
||||
jerk_infill = =jerk_print
|
||||
jerk_topbottom = =jerk_print
|
||||
jerk_wall = =jerk_print
|
||||
jerk_wall_0 = =jerk_wall
|
||||
jerk_wall_x = =jerk_wall
|
||||
jerk_layer_0 = 5
|
||||
|
||||
speed_print = 30
|
||||
speed_infill = =speed_print
|
||||
speed_layer_0 = 20
|
||||
speed_topbottom = =speed_print
|
||||
speed_wall = =speed_print
|
||||
speed_wall_0 = =speed_wall
|
||||
speed_wall_x = =speed_wall
|
||||
top_bottom_thickness = =wall_thickness
|
||||
|
||||
wall_thickness = =line_width * 3
|
||||
|
||||
|
|
|
@ -1,35 +1,34 @@
|
|||
[general]
|
||||
version = 4
|
||||
name = Accurate
|
||||
definition = ultimaker_s3
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
type = intent
|
||||
intent_category = engineering
|
||||
quality_type = normal
|
||||
material = generic_cpe_plus
|
||||
variant = AA 0.4
|
||||
|
||||
[values]
|
||||
|
||||
jerk_print = 30
|
||||
jerk_infill = =jerk_print
|
||||
jerk_topbottom = =jerk_print
|
||||
jerk_wall = =jerk_print
|
||||
jerk_wall_0 = =jerk_wall
|
||||
jerk_wall_x = =jerk_wall
|
||||
jerk_layer_0 = 5
|
||||
|
||||
speed_print = 30
|
||||
speed_infill = =speed_print
|
||||
speed_layer_0 = 20
|
||||
speed_topbottom = =speed_print
|
||||
speed_wall = =speed_print
|
||||
speed_wall_0 = =speed_wall
|
||||
speed_wall_x = =speed_wall
|
||||
top_bottom_thickness = =wall_thickness
|
||||
|
||||
wall_thickness = =line_width * 3
|
||||
xy_offset = =-layer_height * 0.2
|
||||
|
||||
[general]
|
||||
version = 4
|
||||
name = Accurate
|
||||
definition = ultimaker_s3
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
type = intent
|
||||
intent_category = engineering
|
||||
quality_type = normal
|
||||
material = generic_cpe_plus
|
||||
variant = AA 0.4
|
||||
|
||||
[values]
|
||||
|
||||
jerk_print = 30
|
||||
jerk_infill = =jerk_print
|
||||
jerk_topbottom = =jerk_print
|
||||
jerk_wall = =jerk_print
|
||||
jerk_wall_0 = =jerk_wall
|
||||
jerk_wall_x = =jerk_wall
|
||||
jerk_layer_0 = 5
|
||||
|
||||
speed_print = 30
|
||||
speed_infill = =speed_print
|
||||
speed_layer_0 = 20
|
||||
speed_topbottom = =speed_print
|
||||
speed_wall = =speed_print
|
||||
speed_wall_0 = =speed_wall
|
||||
speed_wall_x = =speed_wall
|
||||
top_bottom_thickness = =wall_thickness
|
||||
|
||||
wall_thickness = =line_width * 3
|
||||
|
||||
|
|
|
@ -1,35 +1,34 @@
|
|||
[general]
|
||||
version = 4
|
||||
name = Accurate
|
||||
definition = ultimaker_s3
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
type = intent
|
||||
intent_category = engineering
|
||||
quality_type = fast
|
||||
material = generic_cpe
|
||||
variant = AA 0.4
|
||||
|
||||
[values]
|
||||
|
||||
jerk_print = 30
|
||||
jerk_infill = =jerk_print
|
||||
jerk_topbottom = =jerk_print
|
||||
jerk_wall = =jerk_print
|
||||
jerk_wall_0 = =jerk_wall
|
||||
jerk_wall_x = =jerk_wall
|
||||
jerk_layer_0 = 5
|
||||
|
||||
speed_print = 30
|
||||
speed_infill = =speed_print
|
||||
speed_layer_0 = 20
|
||||
speed_topbottom = =speed_print
|
||||
speed_wall = =speed_print
|
||||
speed_wall_0 = =speed_wall
|
||||
speed_wall_x = =speed_wall
|
||||
top_bottom_thickness = =wall_thickness
|
||||
|
||||
wall_thickness = =line_width * 3
|
||||
xy_offset = =-layer_height * 0.2
|
||||
|
||||
[general]
|
||||
version = 4
|
||||
name = Accurate
|
||||
definition = ultimaker_s3
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
type = intent
|
||||
intent_category = engineering
|
||||
quality_type = fast
|
||||
material = generic_cpe
|
||||
variant = AA 0.4
|
||||
|
||||
[values]
|
||||
|
||||
jerk_print = 30
|
||||
jerk_infill = =jerk_print
|
||||
jerk_topbottom = =jerk_print
|
||||
jerk_wall = =jerk_print
|
||||
jerk_wall_0 = =jerk_wall
|
||||
jerk_wall_x = =jerk_wall
|
||||
jerk_layer_0 = 5
|
||||
|
||||
speed_print = 30
|
||||
speed_infill = =speed_print
|
||||
speed_layer_0 = 20
|
||||
speed_topbottom = =speed_print
|
||||
speed_wall = =speed_print
|
||||
speed_wall_0 = =speed_wall
|
||||
speed_wall_x = =speed_wall
|
||||
top_bottom_thickness = =wall_thickness
|
||||
|
||||
wall_thickness = =line_width * 3
|
||||
|
||||
|
|
|
@ -1,35 +1,34 @@
|
|||
[general]
|
||||
version = 4
|
||||
name = Accurate
|
||||
definition = ultimaker_s3
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
type = intent
|
||||
intent_category = engineering
|
||||
quality_type = normal
|
||||
material = generic_cpe
|
||||
variant = AA 0.4
|
||||
|
||||
[values]
|
||||
|
||||
jerk_print = 30
|
||||
jerk_infill = =jerk_print
|
||||
jerk_topbottom = =jerk_print
|
||||
jerk_wall = =jerk_print
|
||||
jerk_wall_0 = =jerk_wall
|
||||
jerk_wall_x = =jerk_wall
|
||||
jerk_layer_0 = 5
|
||||
|
||||
speed_print = 30
|
||||
speed_infill = =speed_print
|
||||
speed_layer_0 = 20
|
||||
speed_topbottom = =speed_print
|
||||
speed_wall = =speed_print
|
||||
speed_wall_0 = =speed_wall
|
||||
speed_wall_x = =speed_wall
|
||||
top_bottom_thickness = =wall_thickness
|
||||
|
||||
wall_thickness = =line_width * 3
|
||||
xy_offset = =-layer_height * 0.2
|
||||
|
||||
[general]
|
||||
version = 4
|
||||
name = Accurate
|
||||
definition = ultimaker_s3
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
type = intent
|
||||
intent_category = engineering
|
||||
quality_type = normal
|
||||
material = generic_cpe
|
||||
variant = AA 0.4
|
||||
|
||||
[values]
|
||||
|
||||
jerk_print = 30
|
||||
jerk_infill = =jerk_print
|
||||
jerk_topbottom = =jerk_print
|
||||
jerk_wall = =jerk_print
|
||||
jerk_wall_0 = =jerk_wall
|
||||
jerk_wall_x = =jerk_wall
|
||||
jerk_layer_0 = 5
|
||||
|
||||
speed_print = 30
|
||||
speed_infill = =speed_print
|
||||
speed_layer_0 = 20
|
||||
speed_topbottom = =speed_print
|
||||
speed_wall = =speed_print
|
||||
speed_wall_0 = =speed_wall
|
||||
speed_wall_x = =speed_wall
|
||||
top_bottom_thickness = =wall_thickness
|
||||
|
||||
wall_thickness = =line_width * 3
|
||||
|
||||
|
|
|
@ -1,35 +1,34 @@
|
|||
[general]
|
||||
version = 4
|
||||
name = Accurate
|
||||
definition = ultimaker_s3
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
type = intent
|
||||
intent_category = engineering
|
||||
quality_type = fast
|
||||
material = generic_nylon
|
||||
variant = AA 0.4
|
||||
|
||||
[values]
|
||||
|
||||
jerk_print = 30
|
||||
jerk_infill = =jerk_print
|
||||
jerk_topbottom = =jerk_print
|
||||
jerk_wall = =jerk_print
|
||||
jerk_wall_0 = =jerk_wall
|
||||
jerk_wall_x = =jerk_wall
|
||||
jerk_layer_0 = 5
|
||||
|
||||
speed_print = 30
|
||||
speed_infill = =speed_print
|
||||
speed_layer_0 = 20
|
||||
speed_topbottom = =speed_print
|
||||
speed_wall = =speed_print
|
||||
speed_wall_0 = =speed_wall
|
||||
speed_wall_x = =speed_wall
|
||||
top_bottom_thickness = =wall_thickness
|
||||
|
||||
wall_thickness = =line_width * 3
|
||||
xy_offset = =-layer_height * 0.2
|
||||
|
||||
[general]
|
||||
version = 4
|
||||
name = Accurate
|
||||
definition = ultimaker_s3
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
type = intent
|
||||
intent_category = engineering
|
||||
quality_type = fast
|
||||
material = generic_nylon
|
||||
variant = AA 0.4
|
||||
|
||||
[values]
|
||||
|
||||
jerk_print = 30
|
||||
jerk_infill = =jerk_print
|
||||
jerk_topbottom = =jerk_print
|
||||
jerk_wall = =jerk_print
|
||||
jerk_wall_0 = =jerk_wall
|
||||
jerk_wall_x = =jerk_wall
|
||||
jerk_layer_0 = 5
|
||||
|
||||
speed_print = 30
|
||||
speed_infill = =speed_print
|
||||
speed_layer_0 = 20
|
||||
speed_topbottom = =speed_print
|
||||
speed_wall = =speed_print
|
||||
speed_wall_0 = =speed_wall
|
||||
speed_wall_x = =speed_wall
|
||||
top_bottom_thickness = =wall_thickness
|
||||
|
||||
wall_thickness = =line_width * 3
|
||||
|
||||
|
|
|
@ -1,35 +1,34 @@
|
|||
[general]
|
||||
version = 4
|
||||
name = Accurate
|
||||
definition = ultimaker_s3
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
type = intent
|
||||
intent_category = engineering
|
||||
quality_type = normal
|
||||
material = generic_nylon
|
||||
variant = AA 0.4
|
||||
|
||||
[values]
|
||||
|
||||
jerk_print = 30
|
||||
jerk_infill = =jerk_print
|
||||
jerk_topbottom = =jerk_print
|
||||
jerk_wall = =jerk_print
|
||||
jerk_wall_0 = =jerk_wall
|
||||
jerk_wall_x = =jerk_wall
|
||||
jerk_layer_0 = 5
|
||||
|
||||
speed_print = 30
|
||||
speed_infill = =speed_print
|
||||
speed_layer_0 = 20
|
||||
speed_topbottom = =speed_print
|
||||
speed_wall = =speed_print
|
||||
speed_wall_0 = =speed_wall
|
||||
speed_wall_x = =speed_wall
|
||||
top_bottom_thickness = =wall_thickness
|
||||
|
||||
wall_thickness = =line_width * 3
|
||||
xy_offset = =-layer_height * 0.2
|
||||
|
||||
[general]
|
||||
version = 4
|
||||
name = Accurate
|
||||
definition = ultimaker_s3
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
type = intent
|
||||
intent_category = engineering
|
||||
quality_type = normal
|
||||
material = generic_nylon
|
||||
variant = AA 0.4
|
||||
|
||||
[values]
|
||||
|
||||
jerk_print = 30
|
||||
jerk_infill = =jerk_print
|
||||
jerk_topbottom = =jerk_print
|
||||
jerk_wall = =jerk_print
|
||||
jerk_wall_0 = =jerk_wall
|
||||
jerk_wall_x = =jerk_wall
|
||||
jerk_layer_0 = 5
|
||||
|
||||
speed_print = 30
|
||||
speed_infill = =speed_print
|
||||
speed_layer_0 = 20
|
||||
speed_topbottom = =speed_print
|
||||
speed_wall = =speed_print
|
||||
speed_wall_0 = =speed_wall
|
||||
speed_wall_x = =speed_wall
|
||||
top_bottom_thickness = =wall_thickness
|
||||
|
||||
wall_thickness = =line_width * 3
|
||||
|
||||
|
|
|
@ -1,35 +1,34 @@
|
|||
[general]
|
||||
version = 4
|
||||
name = Accurate
|
||||
definition = ultimaker_s3
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
type = intent
|
||||
intent_category = engineering
|
||||
quality_type = fast
|
||||
material = generic_pc
|
||||
variant = AA 0.4
|
||||
|
||||
[values]
|
||||
|
||||
jerk_print = 30
|
||||
jerk_infill = =jerk_print
|
||||
jerk_topbottom = =jerk_print
|
||||
jerk_wall = =jerk_print
|
||||
jerk_wall_0 = =jerk_wall
|
||||
jerk_wall_x = =jerk_wall
|
||||
jerk_layer_0 = 5
|
||||
|
||||
speed_print = 30
|
||||
speed_infill = =speed_print
|
||||
speed_layer_0 = 20
|
||||
speed_topbottom = =speed_print
|
||||
speed_wall = =speed_print
|
||||
speed_wall_0 = =speed_wall
|
||||
speed_wall_x = =speed_wall
|
||||
top_bottom_thickness = =wall_thickness
|
||||
|
||||
wall_thickness = =line_width * 3
|
||||
xy_offset = =-layer_height * 0.2
|
||||
|
||||
[general]
|
||||
version = 4
|
||||
name = Accurate
|
||||
definition = ultimaker_s3
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
type = intent
|
||||
intent_category = engineering
|
||||
quality_type = fast
|
||||
material = generic_pc
|
||||
variant = AA 0.4
|
||||
|
||||
[values]
|
||||
|
||||
jerk_print = 30
|
||||
jerk_infill = =jerk_print
|
||||
jerk_topbottom = =jerk_print
|
||||
jerk_wall = =jerk_print
|
||||
jerk_wall_0 = =jerk_wall
|
||||
jerk_wall_x = =jerk_wall
|
||||
jerk_layer_0 = 5
|
||||
|
||||
speed_print = 30
|
||||
speed_infill = =speed_print
|
||||
speed_layer_0 = 20
|
||||
speed_topbottom = =speed_print
|
||||
speed_wall = =speed_print
|
||||
speed_wall_0 = =speed_wall
|
||||
speed_wall_x = =speed_wall
|
||||
top_bottom_thickness = =wall_thickness
|
||||
|
||||
wall_thickness = =line_width * 3
|
||||
|
||||
|
|
|
@ -1,35 +1,34 @@
|
|||
[general]
|
||||
version = 4
|
||||
name = Accurate
|
||||
definition = ultimaker_s3
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
type = intent
|
||||
intent_category = engineering
|
||||
quality_type = normal
|
||||
material = generic_pc
|
||||
variant = AA 0.4
|
||||
|
||||
[values]
|
||||
|
||||
jerk_print = 30
|
||||
jerk_infill = =jerk_print
|
||||
jerk_topbottom = =jerk_print
|
||||
jerk_wall = =jerk_print
|
||||
jerk_wall_0 = =jerk_wall
|
||||
jerk_wall_x = =jerk_wall
|
||||
jerk_layer_0 = 5
|
||||
|
||||
speed_print = 30
|
||||
speed_infill = =speed_print
|
||||
speed_layer_0 = 20
|
||||
speed_topbottom = =speed_print
|
||||
speed_wall = =speed_print
|
||||
speed_wall_0 = =speed_wall
|
||||
speed_wall_x = =speed_wall
|
||||
top_bottom_thickness = =wall_thickness
|
||||
|
||||
wall_thickness = =line_width * 3
|
||||
xy_offset = =-layer_height * 0.2
|
||||
|
||||
[general]
|
||||
version = 4
|
||||
name = Accurate
|
||||
definition = ultimaker_s3
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
type = intent
|
||||
intent_category = engineering
|
||||
quality_type = normal
|
||||
material = generic_pc
|
||||
variant = AA 0.4
|
||||
|
||||
[values]
|
||||
|
||||
jerk_print = 30
|
||||
jerk_infill = =jerk_print
|
||||
jerk_topbottom = =jerk_print
|
||||
jerk_wall = =jerk_print
|
||||
jerk_wall_0 = =jerk_wall
|
||||
jerk_wall_x = =jerk_wall
|
||||
jerk_layer_0 = 5
|
||||
|
||||
speed_print = 30
|
||||
speed_infill = =speed_print
|
||||
speed_layer_0 = 20
|
||||
speed_topbottom = =speed_print
|
||||
speed_wall = =speed_print
|
||||
speed_wall_0 = =speed_wall
|
||||
speed_wall_x = =speed_wall
|
||||
top_bottom_thickness = =wall_thickness
|
||||
|
||||
wall_thickness = =line_width * 3
|
||||
|
||||
|
|
|
@ -1,35 +1,34 @@
|
|||
[general]
|
||||
version = 4
|
||||
name = Accurate
|
||||
definition = ultimaker_s3
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
type = intent
|
||||
intent_category = engineering
|
||||
quality_type = fast
|
||||
material = generic_petg
|
||||
variant = AA 0.4
|
||||
|
||||
[values]
|
||||
|
||||
jerk_print = 30
|
||||
jerk_infill = =jerk_print
|
||||
jerk_topbottom = =jerk_print
|
||||
jerk_wall = =jerk_print
|
||||
jerk_wall_0 = =jerk_wall
|
||||
jerk_wall_x = =jerk_wall
|
||||
jerk_layer_0 = 5
|
||||
|
||||
speed_print = 30
|
||||
speed_infill = =speed_print
|
||||
speed_layer_0 = 20
|
||||
speed_topbottom = =speed_print
|
||||
speed_wall = =speed_print
|
||||
speed_wall_0 = =speed_wall
|
||||
speed_wall_x = =speed_wall
|
||||
top_bottom_thickness = =wall_thickness
|
||||
|
||||
wall_thickness = =line_width * 3
|
||||
xy_offset = =-layer_height * 0.2
|
||||
|
||||
[general]
|
||||
version = 4
|
||||
name = Accurate
|
||||
definition = ultimaker_s3
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
type = intent
|
||||
intent_category = engineering
|
||||
quality_type = fast
|
||||
material = generic_petg
|
||||
variant = AA 0.4
|
||||
|
||||
[values]
|
||||
|
||||
jerk_print = 30
|
||||
jerk_infill = =jerk_print
|
||||
jerk_topbottom = =jerk_print
|
||||
jerk_wall = =jerk_print
|
||||
jerk_wall_0 = =jerk_wall
|
||||
jerk_wall_x = =jerk_wall
|
||||
jerk_layer_0 = 5
|
||||
|
||||
speed_print = 30
|
||||
speed_infill = =speed_print
|
||||
speed_layer_0 = 20
|
||||
speed_topbottom = =speed_print
|
||||
speed_wall = =speed_print
|
||||
speed_wall_0 = =speed_wall
|
||||
speed_wall_x = =speed_wall
|
||||
top_bottom_thickness = =wall_thickness
|
||||
|
||||
wall_thickness = =line_width * 3
|
||||
|
||||
|
|
|
@ -1,35 +1,34 @@
|
|||
[general]
|
||||
version = 4
|
||||
name = Accurate
|
||||
definition = ultimaker_s3
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
type = intent
|
||||
intent_category = engineering
|
||||
quality_type = normal
|
||||
material = generic_petg
|
||||
variant = AA 0.4
|
||||
|
||||
[values]
|
||||
|
||||
jerk_print = 30
|
||||
jerk_infill = =jerk_print
|
||||
jerk_topbottom = =jerk_print
|
||||
jerk_wall = =jerk_print
|
||||
jerk_wall_0 = =jerk_wall
|
||||
jerk_wall_x = =jerk_wall
|
||||
jerk_layer_0 = 5
|
||||
|
||||
speed_print = 30
|
||||
speed_infill = =speed_print
|
||||
speed_layer_0 = 20
|
||||
speed_topbottom = =speed_print
|
||||
speed_wall = =speed_print
|
||||
speed_wall_0 = =speed_wall
|
||||
speed_wall_x = =speed_wall
|
||||
top_bottom_thickness = =wall_thickness
|
||||
|
||||
wall_thickness = =line_width * 3
|
||||
xy_offset = =-layer_height * 0.2
|
||||
|
||||
[general]
|
||||
version = 4
|
||||
name = Accurate
|
||||
definition = ultimaker_s3
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
type = intent
|
||||
intent_category = engineering
|
||||
quality_type = normal
|
||||
material = generic_petg
|
||||
variant = AA 0.4
|
||||
|
||||
[values]
|
||||
|
||||
jerk_print = 30
|
||||
jerk_infill = =jerk_print
|
||||
jerk_topbottom = =jerk_print
|
||||
jerk_wall = =jerk_print
|
||||
jerk_wall_0 = =jerk_wall
|
||||
jerk_wall_x = =jerk_wall
|
||||
jerk_layer_0 = 5
|
||||
|
||||
speed_print = 30
|
||||
speed_infill = =speed_print
|
||||
speed_layer_0 = 20
|
||||
speed_topbottom = =speed_print
|
||||
speed_wall = =speed_print
|
||||
speed_wall_0 = =speed_wall
|
||||
speed_wall_x = =speed_wall
|
||||
top_bottom_thickness = =wall_thickness
|
||||
|
||||
wall_thickness = =line_width * 3
|
||||
|
||||
|
|
|
@ -18,8 +18,7 @@ speed_wall = =speed_print
|
|||
speed_wall_0 = =speed_wall
|
||||
speed_wall_x = =speed_wall
|
||||
speed_layer_0 = 20
|
||||
top_bottom_thickness = =wall_thickness
|
||||
wall_thickness = =line_width * 2
|
||||
top_bottom_thickness = 0.8
|
||||
infill_sparse_density = 15
|
||||
|
||||
jerk_print = 30
|
||||
|
|
|
@ -31,4 +31,3 @@ speed_wall_x = =speed_wall
|
|||
top_bottom_thickness = =wall_thickness
|
||||
|
||||
wall_thickness = =line_width * 3
|
||||
xy_offset = =-layer_height * 0.2
|
||||
|
|
|
@ -13,5 +13,4 @@ variant = AA 0.4
|
|||
|
||||
[values]
|
||||
speed_infill = 50
|
||||
wall_thickness = =wall_line_width * 3
|
||||
top_bottom_thickness = =wall_thickness
|
||||
top_bottom_thickness = 1.05
|
||||
|
|
|
@ -13,5 +13,4 @@ variant = AA 0.4
|
|||
|
||||
[values]
|
||||
speed_infill = 50
|
||||
wall_thickness = =wall_line_width * 3
|
||||
top_bottom_thickness = =wall_thickness
|
||||
top_bottom_thickness = 1.05
|
||||
|
|
|
@ -31,4 +31,3 @@ speed_wall_x = =speed_wall
|
|||
top_bottom_thickness = =wall_thickness
|
||||
|
||||
wall_thickness = =line_width * 3
|
||||
xy_offset = =-layer_height * 0.2
|
||||
|
|
|
@ -13,5 +13,4 @@ variant = AA 0.4
|
|||
|
||||
[values]
|
||||
speed_infill = 50
|
||||
wall_thickness = =wall_line_width * 3
|
||||
top_bottom_thickness = =wall_thickness
|
||||
top_bottom_thickness = 1.05
|
||||
|
|
|
@ -35,5 +35,4 @@ speed_wall_0 = =speed_wall
|
|||
speed_wall_x = =speed_wall
|
||||
speed_layer_0 = 20
|
||||
|
||||
wall_thickness = =line_width * 2
|
||||
top_bottom_thickness = =wall_thickness
|
||||
top_bottom_thickness = 0.8
|
|
@ -18,8 +18,7 @@ speed_wall = =speed_print
|
|||
speed_wall_0 = =speed_wall
|
||||
speed_wall_x = =speed_wall
|
||||
speed_layer_0 = 20
|
||||
top_bottom_thickness = =wall_thickness
|
||||
wall_thickness = =line_width * 2
|
||||
top_bottom_thickness = 0.8
|
||||
infill_sparse_density = 15
|
||||
|
||||
jerk_print = 30
|
||||
|
|
|
@ -31,4 +31,3 @@ speed_wall_x = =speed_wall
|
|||
top_bottom_thickness = =wall_thickness
|
||||
|
||||
wall_thickness = =line_width * 3
|
||||
xy_offset = =-layer_height * 0.2
|
||||
|
|
|
@ -13,5 +13,4 @@ variant = AA 0.4
|
|||
|
||||
[values]
|
||||
speed_infill = 50
|
||||
wall_thickness = =wall_line_width * 3
|
||||
top_bottom_thickness = =wall_thickness
|
||||
top_bottom_thickness = 1.05
|
||||
|
|
|
@ -13,5 +13,4 @@ variant = AA 0.4
|
|||
|
||||
[values]
|
||||
speed_infill = 50
|
||||
wall_thickness = =wall_line_width * 3
|
||||
top_bottom_thickness = =wall_thickness
|
||||
top_bottom_thickness = 1.05
|
||||
|
|
|
@ -31,4 +31,3 @@ speed_wall_x = =speed_wall
|
|||
top_bottom_thickness = =wall_thickness
|
||||
|
||||
wall_thickness = =line_width * 3
|
||||
xy_offset = =-layer_height * 0.2
|
||||
|
|
|
@ -13,5 +13,4 @@ variant = AA 0.4
|
|||
|
||||
[values]
|
||||
speed_infill = 50
|
||||
wall_thickness = =wall_line_width * 3
|
||||
top_bottom_thickness = =wall_thickness
|
||||
top_bottom_thickness = 1.05
|
||||
|
|
|
@ -35,5 +35,4 @@ speed_wall_0 = =speed_wall
|
|||
speed_wall_x = =speed_wall
|
||||
speed_layer_0 = 20
|
||||
|
||||
wall_thickness = =line_width * 2
|
||||
top_bottom_thickness = =wall_thickness
|
||||
top_bottom_thickness = 0.8
|
|
@ -18,8 +18,7 @@ speed_wall = =speed_print
|
|||
speed_wall_0 = =speed_wall
|
||||
speed_wall_x = =speed_wall
|
||||
speed_layer_0 = 20
|
||||
top_bottom_thickness = =wall_thickness
|
||||
wall_thickness = =line_width * 2
|
||||
top_bottom_thickness = 0.8
|
||||
infill_sparse_density = 15
|
||||
|
||||
jerk_print = 30
|
||||
|
|
|
@ -31,5 +31,4 @@ speed_wall_x = =speed_wall
|
|||
top_bottom_thickness = =wall_thickness
|
||||
|
||||
wall_thickness = =line_width * 3
|
||||
xy_offset = =-layer_height * 0.2
|
||||
xy_offset_layer_0 = =((-0.2 + layer_height * 0.2) if adhesion_type == "skirt" or adhesion_type == "none" else 0) + xy_offset
|
||||
|
|
|
@ -13,5 +13,4 @@ variant = AA 0.4
|
|||
|
||||
[values]
|
||||
speed_infill = 50
|
||||
wall_thickness = =wall_line_width * 3
|
||||
top_bottom_thickness = =wall_thickness
|
||||
top_bottom_thickness = 1.05
|
||||
|
|
|
@ -13,5 +13,4 @@ variant = AA 0.4
|
|||
|
||||
[values]
|
||||
speed_infill = 50
|
||||
wall_thickness = =wall_line_width * 3
|
||||
top_bottom_thickness = =wall_thickness
|
||||
top_bottom_thickness = 1.05
|
||||
|
|
|
@ -31,5 +31,4 @@ speed_wall_x = =speed_wall
|
|||
top_bottom_thickness = =wall_thickness
|
||||
|
||||
wall_thickness = =line_width * 3
|
||||
xy_offset = =-layer_height * 0.2
|
||||
xy_offset_layer_0 = =((-0.2 + layer_height * 0.2) if adhesion_type == "skirt" or adhesion_type == "none" else 0) + xy_offset
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue