Merge branch 'WIP_onboarding' of github.com:Ultimaker/Cura into WIP_onboarding

This commit is contained in:
Jaime van Kessel 2019-04-01 13:46:00 +02:00
commit 1b8b5415f7
37 changed files with 45465 additions and 74 deletions

View File

@ -10,7 +10,7 @@ import Cura 1.1 as Cura
Column
{
property bool installed: toolbox.isInstalled(model.id)
property bool canUpdate: toolbox.canUpdate(model.id)
property bool canUpdate: CuraApplication.getPackageManager().packagesWithUpdate.indexOf(model.id) != -1
property bool loginRequired: model.login_required && !Cura.API.account.isLoggedIn
property var packageData
@ -112,11 +112,9 @@ Column
{
target: toolbox
onInstallChanged: installed = toolbox.isInstalled(model.id)
onMetadataChanged: canUpdate = toolbox.canUpdate(model.id)
onFilterChanged:
{
installed = toolbox.isInstalled(model.id)
canUpdate = toolbox.canUpdate(model.id)
}
}
}

View File

@ -1,9 +1,11 @@
// Copyright (c) 2018 Ultimaker B.V.
// Toolbox is released under the terms of the LGPLv3 or higher.
import QtQuick 2.2
import QtQuick 2.10
import QtQuick.Controls 1.4
import UM 1.1 as UM
import UM 1.4 as UM
import Cura 1.0 as Cura
Item
{
@ -50,6 +52,7 @@ Item
}
}
}
ToolboxTabButton
{
id: installedTabButton
@ -62,7 +65,25 @@ Item
rightMargin: UM.Theme.getSize("default_margin").width
}
onClicked: toolbox.viewCategory = "installed"
width: UM.Theme.getSize("toolbox_header_tab").width + marketplaceNotificationIcon.width - UM.Theme.getSize("default_margin").width
}
Cura.NotificationIcon
{
id: marketplaceNotificationIcon
visible: CuraApplication.getPackageManager().packagesWithUpdate.length > 0
anchors.right: installedTabButton.right
anchors.verticalCenter: installedTabButton.verticalCenter
labelText:
{
const itemCount = CuraApplication.getPackageManager().packagesWithUpdate.length
return itemCount > 9 ? "9+" : itemCount
}
}
ToolboxShadow
{
anchors.top: bar.bottom

View File

@ -10,7 +10,7 @@ import Cura 1.1 as Cura
Column
{
property bool canUpdate: false
property bool canUpdate: CuraApplication.getPackageManager().packagesWithUpdate.indexOf(model.id) != -1
property bool canDowngrade: false
property bool loginRequired: model.login_required && !Cura.API.account.isLoggedIn
width: UM.Theme.getSize("toolbox_action_button").width
@ -83,7 +83,6 @@ Column
target: toolbox
onMetadataChanged:
{
canUpdate = toolbox.canUpdate(model.id)
canDowngrade = toolbox.canDowngrade(model.id)
}
}

View File

@ -9,14 +9,17 @@ Button
{
id: control
property bool active: false
hoverEnabled: true
implicitWidth: UM.Theme.getSize("toolbox_header_tab").width
implicitHeight: UM.Theme.getSize("toolbox_header_tab").height
background: Item
{
implicitWidth: UM.Theme.getSize("toolbox_header_tab").width
implicitHeight: UM.Theme.getSize("toolbox_header_tab").height
id: backgroundItem
Rectangle
{
id: highlight
visible: control.active
color: UM.Theme.getColor("primary")
anchors.bottom: parent.bottom
@ -24,28 +27,42 @@ Button
height: UM.Theme.getSize("toolbox_header_highlight").height
}
}
contentItem: Label
{
id: label
text: control.text
color:
{
if(control.hovered)
{
return UM.Theme.getColor("toolbox_header_button_text_hovered");
}
if(control.active)
{
return UM.Theme.getColor("toolbox_header_button_text_active");
}
else
{
return UM.Theme.getColor("toolbox_header_button_text_inactive");
}
}
font: control.enabled ? (control.active ? UM.Theme.getFont("medium_bold") : UM.Theme.getFont("medium")) : UM.Theme.getFont("default_italic")
color: UM.Theme.getColor("toolbox_header_button_text_inactive")
font: UM.Theme.getFont("medium")
verticalAlignment: Text.AlignVCenter
horizontalAlignment: Text.AlignHCenter
renderType: Text.NativeRendering
}
states:
[
State
{
name: "disabled"
when: !control.enabled
PropertyChanges
{
target: label
font: UM.Theme.getFont("default_italic")
}
},
State
{
name: "active"
when: control.active
PropertyChanges
{
target: label
font: UM.Theme.getFont("medium_bold")
color: UM.Theme.getColor("toolbox_header_button_text_active")
}
}
]
}

View File

@ -189,8 +189,10 @@ class Toolbox(QObject, Extension):
"packages": QUrl("{base_url}/packages".format(base_url = self._api_url))
}
@pyqtSlot()
def browsePackages(self) -> None:
# Request the latest and greatest!
self._fetchPackageData()
def _fetchPackageData(self):
# Create the network manager:
# This was formerly its own function but really had no reason to be as
# it was never called more than once ever.
@ -208,6 +210,10 @@ class Toolbox(QObject, Extension):
# Gather installed packages:
self._updateInstalledModels()
@pyqtSlot()
def browsePackages(self) -> None:
self._fetchPackageData()
if not self._dialog:
self._dialog = self._createDialog("Toolbox.qml")
@ -454,36 +460,6 @@ class Toolbox(QObject, Extension):
break
return remote_package
# Checks
# --------------------------------------------------------------------------
@pyqtSlot(str, result = bool)
def canUpdate(self, package_id: str) -> bool:
local_package = self._package_manager.getInstalledPackageInfo(package_id)
if local_package is None:
local_package = self.getOldPluginPackageMetadata(package_id)
if local_package is None:
return False
remote_package = self.getRemotePackage(package_id)
if remote_package is None:
return False
local_version = Version(local_package["package_version"])
remote_version = Version(remote_package["package_version"])
can_upgrade = False
if remote_version > local_version:
can_upgrade = True
# A package with the same version can be built to have different SDK versions. So, for a package with the same
# version, we also need to check if the current one has a lower SDK version. If so, this package should also
# be upgradable.
elif remote_version == local_version:
# First read sdk_version_semver. If that doesn't exist, read just sdk_version (old version system).
remote_sdk_version = Version(remote_package.get("sdk_version_semver", remote_package.get("sdk_version", 0)))
local_sdk_version = Version(local_package.get("sdk_version_semver", local_package.get("sdk_version", 0)))
can_upgrade = local_sdk_version < remote_sdk_version
return can_upgrade
@pyqtSlot(str, result = bool)
def canDowngrade(self, package_id: str) -> bool:
# If the currently installed version is higher than the bundled version (if present), the we can downgrade
@ -635,6 +611,7 @@ class Toolbox(QObject, Extension):
self._models[response_type].setFilter({"type": "plugin"})
self.reBuildMaterialsModels()
self.reBuildPluginsModels()
self._notifyPackageManager()
elif response_type is "authors":
self._models[response_type].setFilter({"package_types": "material"})
self._models[response_type].setFilter({"tags": "generic"})
@ -655,6 +632,11 @@ class Toolbox(QObject, Extension):
# Ignore any operation that is not a get operation
pass
# This function goes through all known remote versions of a package and notifies the package manager of this change
def _notifyPackageManager(self):
for package in self._server_response_data["packages"]:
self._package_manager.addAvailablePackageVersion(package["package_id"], Version(package["package_version"]))
def _onDownloadProgress(self, bytes_sent: int, bytes_total: int) -> None:
if bytes_total > 0:
new_progress = bytes_sent / bytes_total * 100

View File

@ -459,6 +459,7 @@
"label": "Gantry height",
"description": "The height difference between the tip of the nozzle and the gantry system (X and Y axes).",
"default_value": 99999999999,
"value": "machine_height",
"type": "float",
"settable_per_mesh": false,
"settable_per_extruder": false,

View File

@ -0,0 +1,163 @@
{
"name": "HMS434",
"version": 2,
"inherits": "fdmprinter",
"metadata": {
"visible": true,
"author": "Scheepers",
"manufacturer": "MaukCC",
"file_formats": "text/x-gcode",
"has_materials": true,
"has_machine_materials": false,
"preferred_material": "generic_pla",
"exclude_materials": [ "chromatik_pla", "fabtotum_abs", "fabtotum_nylon", "fabtotum_pla", "fabtotum_tpu", "fiberlogy_hd_pla", "filo3d_pla", "filo3d_pla_green", "filo3d_pla_red", "imade3d_petg_green", "imade3d_petg_pink", "imade3d_pla_green", "imade3d_pla_pink", "innofill_innoflex60_175", "octofiber_pla", "imade3d_pla", "polyflex_pla", "polymax_pla", "polyplus_pla", "polywood_pla", "tizyx_abs", "tizyx_pla", "tizyx_pla_bois", "verbatim_bvoh_175", "Vertex_Delta_ABS", "Vertex_Delta_PET", "Vertex_Delta_PLA", "Vertex_Delta_TPU", "zyyx_pro_flex", "zyyx_pro_pla", "generic_cpe_175", "generic_nylon_175", "dsm_arnitel2045_175", "dsm_novamid1070_175", "generic_tpu_175", "generic_pc_175" ],
"has_variants": true,
"variants_name": "Tool",
"preferred_variant_name": "0.8mm TP extruder",
"has_machine_quality": true,
"preferred_quality_type": "normal",
"machine_extruder_trains":
{
"0": "hms434_tool_1",
"1": "hms434_tool_2",
"2": "hms434_tool_3",
"3": "hms434_tool_4",
"4": "hms434_tool_5",
"5": "hms434_tool_6",
"6": "hms434_tool_7",
"7": "hms434_tool_8"
},
"platform": "hms_platform.obj",
"platform_offset": [ 26, -13.2, 162.5],
"platform_texture": "hms434.png",
"first_start_actions": ["MachineSettingsAction"],
"supported_actions": ["MachineSettingsAction"]
},
"overrides": {
"machine_extruder_count": {"default_value": 1 },
"material_diameter": {"default_value": 1.75 },
"machine_heated_bed": {"default_value": true },
"machine_center_is_zero": {"default_value": false },
"gantry_height": {"default_value": 35 },
"machine_height": {"default_value": 400 },
"machine_depth": {"default_value": 325 },
"machine_width": {"default_value": 450 },
"machine_gcode_flavor": {"default_value": "RepRap (RepRap)" },
"material_print_temp_wait": {"default_value": true},
"material_bed_temp_wait": {"default_value": true },
"prime_tower_enable": {"default_value": false },
"prime_tower_size": {"value": 20.6 },
"prime_tower_position_x": {"value": 125 },
"prime_tower_position_y": {"value": 70 },
"prime_blob_enable": {"default_value": false },
"machine_max_feedrate_z": {"default_value": 1200 },
"machine_start_gcode": {"default_value": "\n;Neither HMS434 nor any of HMS434 Subsidiaries has any liabilities or gives any warrenties on this .gcode file,\n\n;or on any or all objects made with this .gcode file \nM117 Homing Y ......\nG28 Y\nM117 Homing X ......\nG28 X\nM117 Homing Z ......\nG28 Z F100\nG1 Z10 F600\n\nG1 X-71 F9000;go to wipe point\nG1 Y-100 F9000\nG1 Z0 F900\n\nG1 Z0.2 F900\n\nG1 Y-65 F12000\nG1 X50 Y0 F9000\nM117 HMS434 Printing ...\n\n" },
"machine_end_gcode": {"default_value": "" },
"retraction_extra_prime_amount": {"minimum_value_warning": "-2.0" },
"optimize_wall_printing_order": {"default_value": true },
"machine_nozzle_heat_up_speed": {"default_value": 12},
"machine_nozzle_cool_down_speed": {"default_value": 20},
"machine_min_cool_heat_time_window": {"default_value": 5},
"layer_height": {"maximum_value": "(0.8 * min(extruderValues('machine_nozzle_size')))" },
"layer_height_0": {"maximum_value": "(0.8 * min(extruderValues('machine_nozzle_size')))" },
"line_width": {"value": "(machine_nozzle_size + layer_height)" },
"infill_line_width": {"value": "(line_width)" },
"initial_layer_line_width_factor": {"value": 110 },
"wall_thickness": {"value": "(line_width * 3) if infill_sparse_density < 95 else line_width" },
"roofing_layer_count": {"value": "4" },
"top_bottom_thickness": {"value": "(layer_height_0 + (layer_height * 3))" },
"top_layers": {"value": "4" },
"bottom_layers": {"value": "(top_layers)" },
"wall_0_inset": {"value": "0" },
"alternate_extra_perimeter": {"value": false },
"filter_out_tiny_gaps": {"value": false },
"fill_outline_gaps": {"value": true },
"skin_outline_count": {"value": "0"},
"infill_sparse_density": {"value": 30},
"infill_pattern": {"value": "'lines'"},
"infill_overlap": {"value": 5},
"skin_overlap": {"value": 5},
"infill_wipe_dist": {"value": 0.0},
"infill_before_walls": {"value": false},
"material_print_temperature_layer_0": {"value": "material_print_temperature + 5"},
"material_initial_print_temperature": {"value": "material_print_temperature",
"maximum_value_warning": "material_print_temperature + 15"},
"material_final_print_temperature": {"value": "material_print_temperature"},
"material_bed_temperature_layer_0": {"value": "material_bed_temperature + 1"},
"material_flow": {"value": "120 if infill_sparse_density < 95 else 115"},
"retraction_amount": {"value": "1"},
"retraction_speed": {"value": "20"},
"retraction_prime_speed": {"value": "8"},
"retraction_min_travel": {"value": "(round(line_width * 10))"},
"switch_extruder_retraction_amount": {"value": 2},
"switch_extruder_retraction_speeds": {"value": "(retraction_speed)"},
"switch_extruder_prime_speed": {"value": "(retraction_prime_speed)"},
"speed_print": {"value": "50"},
"speed_infill": {"value": "speed_print"},
"speed_wall": {"value": "(speed_print/5*3) if speed_print < 51 else speed_print"},
"speed_wall_x": {"value": "speed_wall"},
"speed_layer_0": {"value": "(speed_print/5*4) if speed_print < 51 else speed_print"},
"speed_topbottom": {"value": "speed_layer_0"},
"speed_travel": {"value": "100"},
"speed_travel_layer_0": {"value": "speed_travel"},
"speed_support_interface": {"value": "speed_topbottom"},
"max_feedrate_z_override": {"value": 10},
"speed_slowdown_layers": {"value": 1},
"acceleration_print": {"value": 200},
"acceleration_travel": {"value": 200},
"jerk_print": {"value": 5},
"jerk_travel": {"value": 5},
"retraction_hop_enabled": {"value": false},
"retraction_hop": {"value": 1},
"retraction_combing": {"value": "off"},
"cool_fan_speed": {"value": 0},
"cool_fan_enabled": {"value": true},
"cool_min_layer_time_fan_speed_max": {"value": "cool_min_layer_time"},
"cool_min_layer_time": {"value": 20},
"cool_min_speed": {"value": "speed_wall_x"},
"cool_lift_head": {"value": false},
"support_z_distance": {"value": 0},
"support_xy_distance": {"value": 1},
"support_join_distance": {"value": 10},
"support_interface_enable": {"value": true},
"support_interface_height": {"value": 0.5},
"support_interface_pattern": {"value": "'lines'"},
"adhesion_type": {"value": "'skirt'"},
"skirt_gap": {"value": 1},
"skirt_brim_minimal_length": {"value": 50},
"coasting_enable": {"value": true},
"coasting_volume": {"value": 0.1},
"coasting_min_volume": {"value": 0.17},
"coasting_speed": {"value": 90},
"bridge_settings_enabled": {"value": true},
"bridge_wall_min_length": {"value": 3},
"bridge_skin_support_threshold": {"value": 90},
"bridge_wall_speed": {"value": 15},
"bridge_wall_material_flow": {"value": 130},
"bridge_skin_speed": {"value": 15},
"bridge_skin_material_flow": {"value": 130},
"bridge_fan_speed": {"value": 0},
"bridge_skin_density_2": {"value": 100},
"bridge_skin_density_3": {"value": 100},
"bridge_skin_material_flow_2": {"value": 110},
"bridge_skin_material_flow_3": {"value": 100},
"bridge_skin_speed_2": {"value": 20},
"bridge_skin_speed_3": {"value": 30}
}
}

View File

@ -14,7 +14,7 @@
"has_materials": true,
"has_machine_materials": true,
"has_variants": true,
"exclude_materials": [ "generic_cffcpe", "generic_cffpa", "generic_gffcpe", "generic_gffpa", "structur3d_dap100silicone" ],
"exclude_materials": [ "generic_hips", "generic_petg", "generic_cffcpe", "generic_cffpa", "generic_gffcpe", "generic_gffpa", "structur3d_dap100silicone" ],
"preferred_variant_name": "AA 0.4",
"preferred_quality_type": "normal",
"variants_name": "Print core",

View File

@ -0,0 +1,26 @@
{
"id": "hms434_tool_1",
"version": 2,
"name": "Tool 1",
"inherits": "fdmextruder",
"metadata": {
"machine": "hms434",
"position": "0"
},
"overrides": {
"extruder_nr": {
"default_value": 0,
"maximum_value": "8"
},
"machine_nozzle_offset_x": { "default_value": 0.0 },
"machine_nozzle_offset_y": { "default_value": 0.0 },
"material_diameter": { "default_value": 1.75 },
"machine_extruder_start_code": {
"default_value": "\n;start T0\n\nM117 changing tool....\nM109 T0 S{material_print_temperature}\n\nG1 Y-47 F9000; wipe\nG1 X150 Y10 F9000\n\nM117 printing...\n"
},
"machine_extruder_end_code": {
"default_value": "\nM104 T0 S{material_standby_temperature}\nG1 X150 Y10 F9000\nG1 X-47 Y47 F9000 ; go to wipe position\nG1 X0 Y-100 F3000; wipe\nG1 X-44 F9000\n;end T0\n\n"
}
}
}

View File

@ -0,0 +1,26 @@
{
"id": "hms434_tool_2",
"version": 2,
"name": "Tool 2",
"inherits": "fdmextruder",
"metadata": {
"machine": "hms434",
"position": "1"
},
"overrides": {
"extruder_nr": {
"default_value": 1,
"maximum_value": "8"
},
"machine_nozzle_offset_x": { "default_value": 20.0 },
"machine_nozzle_offset_y": { "default_value": 0.0 },
"material_diameter": { "default_value": 1.75 },
"machine_extruder_start_code": {
"default_value": "\n;start T1\n\nM117 changing tool....\nM109 T1 S{material_print_temperature}\n\nG1 Y-47 F9000; wipe\nG1 X150 Y10 F9000\n\nM117 printing...\n"
},
"machine_extruder_end_code": {
"default_value": "\nM104 T1 S{material_standby_temperature}\nG1 X150 Y10 F9000\nG1 X-47 Y47 F9000 ; go to wipe position\nG1 X0 Y-100 F3000; wipe\nG1 X-44 F9000\n;end T1\n\n"
}
}
}

View File

@ -0,0 +1,26 @@
{
"id": "hms434_tool_3",
"version": 2,
"name": "Tool 3",
"inherits": "fdmextruder",
"metadata": {
"machine": "hms434",
"position": "2"
},
"overrides": {
"extruder_nr": {
"default_value": 2,
"maximum_value": "8"
},
"machine_nozzle_offset_x": { "default_value": 0.0 },
"machine_nozzle_offset_y": { "default_value": 0.0 },
"material_diameter": { "default_value": 1.75 },
"machine_extruder_start_code": {
"default_value": "\n;start Tool 3\n\n"
},
"machine_extruder_end_code": {
"default_value": "\n;end Tool 3\n\n"
}
}
}

View File

@ -0,0 +1,26 @@
{
"id": "hms434_tool_4",
"version": 2,
"name": "Tool 4",
"inherits": "fdmextruder",
"metadata": {
"machine": "hms434",
"position": "3"
},
"overrides": {
"extruder_nr": {
"default_value": 3,
"maximum_value": "8"
},
"machine_nozzle_offset_x": { "default_value": 0.0 },
"machine_nozzle_offset_y": { "default_value": 0.0 },
"material_diameter": { "default_value": 1.75 },
"machine_extruder_start_code": {
"default_value": "\n;start T0\n\nM104 T0 S{material_print_temperature_layer_0}\nG1 X65 Y35 F9000 ; go to wipe position\nM109 T0 S{material_print_temperature_layer_0}; wait for temp\nG1 E10 F300; prime\nG92 E0\nG1 X45 Y15 F3000; wipe\nG1 X55 F9000\nG1 Y35 F6000; wipe again\n\nM117 printing...\n"
},
"machine_extruder_end_code": {
"default_value": "\nM104 T0 S{material_standby_temperature}\nG1 X65 Y35 F9000 ; go to wipe position\nM109 T0 R{material_standby_temperature}; wait for temp\nG1 X45 Y15 F3000; wipe\nG1 X55 F9000\nG1 Y35 F6000; wipe again\n\n;end T0\n\n"
}
}
}

View File

@ -0,0 +1,26 @@
{
"id": "hms434_tool_5",
"version": 2,
"name": "Tool 5",
"inherits": "fdmextruder",
"metadata": {
"machine": "hms434",
"position": "4"
},
"overrides": {
"extruder_nr": {
"default_value": 4,
"maximum_value": "8"
},
"machine_nozzle_offset_x": { "default_value": 0.0 },
"machine_nozzle_offset_y": { "default_value": 0.0 },
"material_diameter": { "default_value": 1.75 },
"machine_extruder_start_code": {
"default_value": "\n;start T0\n\nM104 T0 S{material_print_temperature_layer_0}\nG1 X65 Y35 F9000 ; go to wipe position\nM109 T0 S{material_print_temperature_layer_0}; wait for temp\nG1 E10 F300; prime\nG92 E0\nG1 X45 Y15 F3000; wipe\nG1 X55 F9000\nG1 Y35 F6000; wipe again\n\nM117 printing...\n"
},
"machine_extruder_end_code": {
"default_value": "\nM104 T0 S{material_standby_temperature}\nG1 X65 Y35 F9000 ; go to wipe position\nM109 T0 R{material_standby_temperature}; wait for temp\nG1 X45 Y15 F3000; wipe\nG1 X55 F9000\nG1 Y35 F6000; wipe again\n\n;end T0\n\n"
}
}
}

View File

@ -0,0 +1,26 @@
{
"id": "hms434_tool_6",
"version": 2,
"name": "Tool 6",
"inherits": "fdmextruder",
"metadata": {
"machine": "hms434",
"position": "5"
},
"overrides": {
"extruder_nr": {
"default_value": 5,
"maximum_value": "8"
},
"machine_nozzle_offset_x": { "default_value": 0.0 },
"machine_nozzle_offset_y": { "default_value": 0.0 },
"material_diameter": { "default_value": 1.75 },
"machine_extruder_start_code": {
"default_value": "\n;start T0\n\nM104 T0 S{material_print_temperature_layer_0}\nG1 X65 Y35 F9000 ; go to wipe position\nM109 T0 S{material_print_temperature_layer_0}; wait for temp\nG1 E10 F300; prime\nG92 E0\nG1 X45 Y15 F3000; wipe\nG1 X55 F9000\nG1 Y35 F6000; wipe again\n\nM117 printing...\n"
},
"machine_extruder_end_code": {
"default_value": "\nM104 T0 S{material_standby_temperature}\nG1 X65 Y35 F9000 ; go to wipe position\nM109 T0 R{material_standby_temperature}; wait for temp\nG1 X45 Y15 F3000; wipe\nG1 X55 F9000\nG1 Y35 F6000; wipe again\n\n;end T0\n\n"
}
}
}

View File

@ -0,0 +1,26 @@
{
"id": "hms434_tool_7",
"version": 2,
"name": "Tool 7",
"inherits": "fdmextruder",
"metadata": {
"machine": "hms434",
"position": "6"
},
"overrides": {
"extruder_nr": {
"default_value": 6,
"maximum_value": "8"
},
"machine_nozzle_offset_x": { "default_value": 0.0 },
"machine_nozzle_offset_y": { "default_value": 0.0 },
"material_diameter": { "default_value": 1.75 },
"machine_extruder_start_code": {
"default_value": "\n;start T0\n\nM104 T0 S{material_print_temperature_layer_0}\nG1 X65 Y35 F9000 ; go to wipe position\nM109 T0 S{material_print_temperature_layer_0}; wait for temp\nG1 E10 F300; prime\nG92 E0\nG1 X45 Y15 F3000; wipe\nG1 X55 F9000\nG1 Y35 F6000; wipe again\n\nM117 printing...\n"
},
"machine_extruder_end_code": {
"default_value": "\nM104 T0 S{material_standby_temperature}\nG1 X65 Y35 F9000 ; go to wipe position\nM109 T0 R{material_standby_temperature}; wait for temp\nG1 X45 Y15 F3000; wipe\nG1 X55 F9000\nG1 Y35 F6000; wipe again\n\n;end T0\n\n"
}
}
}

View File

@ -0,0 +1,26 @@
{
"id": "hms434_tool_8",
"version": 2,
"name": "Tool 8",
"inherits": "fdmextruder",
"metadata": {
"machine": "hms434",
"position": "7"
},
"overrides": {
"extruder_nr": {
"default_value": 7,
"maximum_value": "8"
},
"machine_nozzle_offset_x": { "default_value": 0.0 },
"machine_nozzle_offset_y": { "default_value": 0.0 },
"material_diameter": { "default_value": 1.75 },
"machine_extruder_start_code": {
"default_value": "\n;start T0\n\nM104 T0 S{material_print_temperature_layer_0}\nG1 X65 Y35 F9000 ; go to wipe position\nM109 T0 S{material_print_temperature_layer_0}; wait for temp\nG1 E10 F300; prime\nG92 E0\nG1 X45 Y15 F3000; wipe\nG1 X55 F9000\nG1 Y35 F6000; wipe again\n\nM117 printing...\n"
},
"machine_extruder_end_code": {
"default_value": "\nM104 T0 S{material_standby_temperature}\nG1 X65 Y35 F9000 ; go to wipe position\nM109 T0 R{material_standby_temperature}; wait for temp\nG1 X45 Y15 F3000; wipe\nG1 X55 F9000\nG1 Y35 F6000; wipe again\n\n;end T0\n\n"
}
}
}

BIN
resources/images/hms434.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

File diff suppressed because it is too large Load Diff

View File

@ -117,6 +117,25 @@ Item
rightMargin: UM.Theme.getSize("default_margin").width
verticalCenter: parent.verticalCenter
}
Cura.NotificationIcon
{
id: marketplaceNotificationIcon
anchors
{
top: parent.top
right: parent.right
rightMargin: (-0.5 * width) | 0
topMargin: (-0.5 * height) | 0
}
visible: CuraApplication.getPackageManager().packagesWithUpdate.length > 0
labelText:
{
const itemCount = CuraApplication.getPackageManager().packagesWithUpdate.length
return itemCount > 9 ? "9+" : itemCount
}
}
}
AccountWidget

View File

@ -62,14 +62,19 @@ Item
var tooltip = "<b>%1</b>\n<p>%2</p>".arg(definition.label).arg(definition.description)
if(!propertyProvider.isValueUsed)
{
tooltip += "<i>%1</i><br/><br/>".arg(catalog.i18nc("@label", "This setting is not used because all the settings that it influences are overriden."))
}
if (affects_list != "")
{
tooltip += "<br/><b>%1</b>\n<ul>\n%2</ul>".arg(catalog.i18nc("@label Header for list of settings.", "Affects")).arg(affects_list)
tooltip += "<b>%1</b><ul>%2</ul>".arg(catalog.i18nc("@label Header for list of settings.", "Affects")).arg(affects_list)
}
if (affected_by_list != "")
{
tooltip += "<br/><b>%1</b>\n<ul>\n%2</ul>".arg(catalog.i18nc("@label Header for list of settings.", "Affected By")).arg(affected_by_list)
tooltip += "<b>%1</b><ul>%2</ul>".arg(catalog.i18nc("@label Header for list of settings.", "Affected By")).arg(affected_by_list)
}
return tooltip

View File

@ -0,0 +1,35 @@
// Copyright (c) 2019 Ultimaker B.V.
// Cura is released under the terms of the LGPLv3 or higher.
import QtQuick 2.10
import QtQuick.Controls 2.3
import UM 1.4 as UM
//
// A notification icon which is a circle with a number at the center, that can be used to indicate, for example, how
// many new messages that are available.
//
Rectangle
{
id: notificationIcon
color: UM.Theme.getColor("notification_icon")
width: UM.Theme.getSize("notification_icon").width
height: UM.Theme.getSize("notification_icon").height
radius: (0.5 * width) | 0
property alias labelText: notificationLabel.text
property alias labelFont: notificationLabel.font
Label
{
id: notificationLabel
anchors.centerIn: parent
anchors.fill: parent
color: UM.Theme.getColor("primary_text")
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
font: UM.Theme.getFont("small")
}
}

View File

@ -21,11 +21,12 @@ ToolTip 1.0 ToolTip.qml
# Cura/Widgets
CheckBox 1.0 CheckBox.qml
ComboBox 1.0 ComboBox.qml
ProgressBar 1.0 ProgressBar.qml
RadioButton 1.0 RadioButton.qml
TabButton 1.0 TabButton.qml
CheckBox 1.0 CheckBox.qml
ComboBox 1.0 ComboBox.qml
NotificationIcon 1.0 NotificationIcon.qml
ProgressBar 1.0 ProgressBar.qml
RadioButton 1.0 RadioButton.qml
TabButton 1.0 TabButton.qml
# Cura/MachineSettings

View File

@ -0,0 +1,15 @@
[general]
version = 4
name = Coarse
definition = hms434
[metadata]
setting_version = 7
type = quality
quality_type = coarse
weight = -3
global_quality = True
[values]
layer_height = 0.4
layer_height_0 = 0.4

View File

@ -0,0 +1,15 @@
[general]
version = 4
name = Extra Coarse
definition = hms434
[metadata]
setting_version = 7
type = quality
quality_type = extra coarse
weight = -4
global_quality = True
[values]
layer_height = 0.6
layer_height_0 = 0.6

View File

@ -0,0 +1,16 @@
[general]
version = 4
name = High
definition = hms434
[metadata]
setting_version = 7
type = quality
quality_type = high
weight = 1
global_quality = True
[values]
layer_height = 0.1
layer_height_0 = 0.2

View File

@ -0,0 +1,15 @@
[general]
version = 4
name = Normal
definition = hms434
[metadata]
setting_version = 7
type = quality
quality_type = normal
weight = 0
global_quality = True
[values]
layer_height = 0.2
layer_height_0 = 0.2

View File

@ -0,0 +1,16 @@
[general]
version = 4
name = Super Coarse
definition = hms434
[metadata]
setting_version = 7
type = quality
quality_type = super coarse
weight = -4
global_quality = True
[values]
layer_height = 0.8
layer_height_0 = 0.8

View File

@ -0,0 +1,15 @@
[general]
version = 4
name = Ultra Coarse
definition = hms434
[metadata]
setting_version = 7
type = quality
quality_type = ultra coarse
weight = -4
global_quality = True
[values]
layer_height = 1.0
layer_height_0 = 1.0

View File

@ -214,7 +214,6 @@
"toolbox_header_button_text_active": [255, 255, 255, 255],
"toolbox_header_button_text_inactive": [128, 128, 128, 255],
"toolbox_header_button_text_hovered": [255, 255, 255, 255],
"monitor_printer_family_tag": [86, 86, 106, 255],
"monitor_text_primary": [229, 229, 229, 255],

View File

@ -191,6 +191,8 @@
"toolbar_background": [255, 255, 255, 255],
"notification_icon": [255, 0, 0, 255],
"printer_type_label_background": [228, 228, 242, 255],
"window_disabled_background": [0, 0, 0, 255],
@ -388,7 +390,6 @@
"toolbox_header_button_text_active": [0, 0, 0, 255],
"toolbox_header_button_text_inactive": [0, 0, 0, 255],
"toolbox_header_button_text_hovered": [0, 0, 0, 255],
"favorites_header_bar": [245, 245, 245, 255],
"favorites_header_hover": [245, 245, 245, 255],
@ -602,6 +603,8 @@
"toolbox_action_button": [8.0, 2.5],
"toolbox_loader": [2.0, 2.0],
"notification_icon": [1.4, 1.4],
"avatar_image": [6.8, 6.8],
"monitor_config_override_box": [1.0, 14.0],

View File

@ -0,0 +1,13 @@
[general]
name = 0.25mm TP extruder
version = 4
definition = hms434
[metadata]
setting_version = 7
type = variant
hardware_type = nozzle
[values]
machine_nozzle_size = 0.25
machine_nozzle_tip_outer_diameter = 1.05

View File

@ -0,0 +1,13 @@
[general]
name = 0.4mm TP extruder
version = 4
definition = hms434
[metadata]
setting_version = 7
type = variant
hardware_type = nozzle
[values]
machine_nozzle_size = 0.4
machine_nozzle_tip_outer_diameter = 1.05

View File

@ -0,0 +1,13 @@
[general]
name = 0.6mm TP extruder
version = 4
definition = hms434
[metadata]
setting_version = 7
type = variant
hardware_type = nozzle
[values]
machine_nozzle_size = 0.6
machine_nozzle_tip_outer_diameter = 1.05

View File

@ -0,0 +1,13 @@
[general]
name = 0.8mm TP extruder
version = 4
definition = hms434
[metadata]
setting_version = 7
type = variant
hardware_type = nozzle
[values]
machine_nozzle_size = 0.8
machine_nozzle_tip_outer_diameter = 1.05

View File

@ -0,0 +1,13 @@
[general]
name = 1.2mm TP extruder
version = 4
definition = hms434
[metadata]
setting_version = 7
type = variant
hardware_type = nozzle
[values]
machine_nozzle_size = 1.2
machine_nozzle_tip_outer_diameter = 1.3

View File

@ -0,0 +1,13 @@
[general]
name = 1.5mm TP extruder
version = 4
definition = hms434
[metadata]
setting_version = 7
type = variant
hardware_type = nozzle
[values]
machine_nozzle_size = 1.5
machine_nozzle_tip_outer_diameter = 1.6

View File

@ -7,25 +7,31 @@ from cura.Settings.ExtruderManager import ExtruderManager
from cura.Settings.MachineManager import MachineManager
@pytest.fixture()
def global_stack():
return MagicMock(name="Global Stack")
@pytest.fixture()
def container_registry() -> ContainerRegistry:
return MagicMock()
return MagicMock(name = "ContainerRegistry")
@pytest.fixture()
def extruder_manager(application, container_registry) -> ExtruderManager:
if ExtruderManager.getInstance() is not None:
# Reset the data
ExtruderManager._ExtruderManager__instance = None
with patch("cura.CuraApplication.CuraApplication.getInstance", MagicMock(return_value=application)):
with patch("UM.Settings.ContainerRegistry.ContainerRegistry.getInstance", MagicMock(return_value=container_registry)):
manager = ExtruderManager.getInstance()
if manager is None:
manager = ExtruderManager()
manager = ExtruderManager()
return manager
@pytest.fixture()
def machine_manager(application, extruder_manager, container_registry) -> MachineManager:
def machine_manager(application, extruder_manager, container_registry, global_stack) -> MachineManager:
application.getExtruderManager = MagicMock(return_value = extruder_manager)
application.getGlobalContainerStack = MagicMock(return_value = global_stack)
with patch("cura.Settings.CuraContainerRegistry.CuraContainerRegistry.getInstance", MagicMock(return_value=container_registry)):
manager = MachineManager(application)
@ -45,3 +51,14 @@ def test_setActiveMachine(machine_manager):
# Although we mocked the application away, we still want to know if it was notified about the attempted change.
machine_manager._application.setGlobalContainerStack.assert_called_with(mocked_global_stack)
def test_hasUserSettings(machine_manager, application):
mocked_stack = application.getGlobalContainerStack()
mocked_instance_container = MagicMock(name="UserSettingContainer")
mocked_instance_container.getNumInstances = MagicMock(return_value = 12)
mocked_stack.getTop = MagicMock(return_value = mocked_instance_container)
assert machine_manager.numUserSettings == 12
assert machine_manager.hasUserSettings