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 Column
{ {
property bool installed: toolbox.isInstalled(model.id) 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 bool loginRequired: model.login_required && !Cura.API.account.isLoggedIn
property var packageData property var packageData
@ -112,11 +112,9 @@ Column
{ {
target: toolbox target: toolbox
onInstallChanged: installed = toolbox.isInstalled(model.id) onInstallChanged: installed = toolbox.isInstalled(model.id)
onMetadataChanged: canUpdate = toolbox.canUpdate(model.id)
onFilterChanged: onFilterChanged:
{ {
installed = toolbox.isInstalled(model.id) installed = toolbox.isInstalled(model.id)
canUpdate = toolbox.canUpdate(model.id)
} }
} }
} }

View File

@ -1,9 +1,11 @@
// Copyright (c) 2018 Ultimaker B.V. // Copyright (c) 2018 Ultimaker B.V.
// Toolbox is released under the terms of the LGPLv3 or higher. // 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 QtQuick.Controls 1.4
import UM 1.1 as UM
import UM 1.4 as UM
import Cura 1.0 as Cura
Item Item
{ {
@ -50,6 +52,7 @@ Item
} }
} }
} }
ToolboxTabButton ToolboxTabButton
{ {
id: installedTabButton id: installedTabButton
@ -62,7 +65,25 @@ Item
rightMargin: UM.Theme.getSize("default_margin").width rightMargin: UM.Theme.getSize("default_margin").width
} }
onClicked: toolbox.viewCategory = "installed" 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 ToolboxShadow
{ {
anchors.top: bar.bottom anchors.top: bar.bottom

View File

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

View File

@ -9,14 +9,17 @@ Button
{ {
id: control id: control
property bool active: false property bool active: false
hoverEnabled: true
implicitWidth: UM.Theme.getSize("toolbox_header_tab").width
implicitHeight: UM.Theme.getSize("toolbox_header_tab").height
background: Item background: Item
{ {
implicitWidth: UM.Theme.getSize("toolbox_header_tab").width id: backgroundItem
implicitHeight: UM.Theme.getSize("toolbox_header_tab").height
Rectangle Rectangle
{ {
id: highlight
visible: control.active visible: control.active
color: UM.Theme.getColor("primary") color: UM.Theme.getColor("primary")
anchors.bottom: parent.bottom anchors.bottom: parent.bottom
@ -24,28 +27,42 @@ Button
height: UM.Theme.getSize("toolbox_header_highlight").height height: UM.Theme.getSize("toolbox_header_highlight").height
} }
} }
contentItem: Label contentItem: Label
{ {
id: label id: label
text: control.text text: control.text
color: color: UM.Theme.getColor("toolbox_header_button_text_inactive")
{ font: UM.Theme.getFont("medium")
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")
verticalAlignment: Text.AlignVCenter verticalAlignment: Text.AlignVCenter
horizontalAlignment: Text.AlignHCenter horizontalAlignment: Text.AlignHCenter
renderType: Text.NativeRendering 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)) "packages": QUrl("{base_url}/packages".format(base_url = self._api_url))
} }
@pyqtSlot() # Request the latest and greatest!
def browsePackages(self) -> None: self._fetchPackageData()
def _fetchPackageData(self):
# Create the network manager: # Create the network manager:
# This was formerly its own function but really had no reason to be as # This was formerly its own function but really had no reason to be as
# it was never called more than once ever. # it was never called more than once ever.
@ -208,6 +210,10 @@ class Toolbox(QObject, Extension):
# Gather installed packages: # Gather installed packages:
self._updateInstalledModels() self._updateInstalledModels()
@pyqtSlot()
def browsePackages(self) -> None:
self._fetchPackageData()
if not self._dialog: if not self._dialog:
self._dialog = self._createDialog("Toolbox.qml") self._dialog = self._createDialog("Toolbox.qml")
@ -454,36 +460,6 @@ class Toolbox(QObject, Extension):
break break
return remote_package 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) @pyqtSlot(str, result = bool)
def canDowngrade(self, package_id: str) -> 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 # 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._models[response_type].setFilter({"type": "plugin"})
self.reBuildMaterialsModels() self.reBuildMaterialsModels()
self.reBuildPluginsModels() self.reBuildPluginsModels()
self._notifyPackageManager()
elif response_type is "authors": elif response_type is "authors":
self._models[response_type].setFilter({"package_types": "material"}) self._models[response_type].setFilter({"package_types": "material"})
self._models[response_type].setFilter({"tags": "generic"}) self._models[response_type].setFilter({"tags": "generic"})
@ -655,6 +632,11 @@ class Toolbox(QObject, Extension):
# Ignore any operation that is not a get operation # Ignore any operation that is not a get operation
pass 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: def _onDownloadProgress(self, bytes_sent: int, bytes_total: int) -> None:
if bytes_total > 0: if bytes_total > 0:
new_progress = bytes_sent / bytes_total * 100 new_progress = bytes_sent / bytes_total * 100

View File

@ -459,6 +459,7 @@
"label": "Gantry height", "label": "Gantry height",
"description": "The height difference between the tip of the nozzle and the gantry system (X and Y axes).", "description": "The height difference between the tip of the nozzle and the gantry system (X and Y axes).",
"default_value": 99999999999, "default_value": 99999999999,
"value": "machine_height",
"type": "float", "type": "float",
"settable_per_mesh": false, "settable_per_mesh": false,
"settable_per_extruder": 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_materials": true,
"has_machine_materials": true, "has_machine_materials": true,
"has_variants": 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_variant_name": "AA 0.4",
"preferred_quality_type": "normal", "preferred_quality_type": "normal",
"variants_name": "Print core", "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 rightMargin: UM.Theme.getSize("default_margin").width
verticalCenter: parent.verticalCenter 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 AccountWidget

View File

@ -62,14 +62,19 @@ Item
var tooltip = "<b>%1</b>\n<p>%2</p>".arg(definition.label).arg(definition.description) 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 != "") 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 != "") 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 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 # Cura/Widgets
CheckBox 1.0 CheckBox.qml CheckBox 1.0 CheckBox.qml
ComboBox 1.0 ComboBox.qml ComboBox 1.0 ComboBox.qml
ProgressBar 1.0 ProgressBar.qml NotificationIcon 1.0 NotificationIcon.qml
RadioButton 1.0 RadioButton.qml ProgressBar 1.0 ProgressBar.qml
TabButton 1.0 TabButton.qml RadioButton 1.0 RadioButton.qml
TabButton 1.0 TabButton.qml
# Cura/MachineSettings # 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_active": [255, 255, 255, 255],
"toolbox_header_button_text_inactive": [128, 128, 128, 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_printer_family_tag": [86, 86, 106, 255],
"monitor_text_primary": [229, 229, 229, 255], "monitor_text_primary": [229, 229, 229, 255],

View File

@ -191,6 +191,8 @@
"toolbar_background": [255, 255, 255, 255], "toolbar_background": [255, 255, 255, 255],
"notification_icon": [255, 0, 0, 255],
"printer_type_label_background": [228, 228, 242, 255], "printer_type_label_background": [228, 228, 242, 255],
"window_disabled_background": [0, 0, 0, 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_active": [0, 0, 0, 255],
"toolbox_header_button_text_inactive": [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_bar": [245, 245, 245, 255],
"favorites_header_hover": [245, 245, 245, 255], "favorites_header_hover": [245, 245, 245, 255],
@ -602,6 +603,8 @@
"toolbox_action_button": [8.0, 2.5], "toolbox_action_button": [8.0, 2.5],
"toolbox_loader": [2.0, 2.0], "toolbox_loader": [2.0, 2.0],
"notification_icon": [1.4, 1.4],
"avatar_image": [6.8, 6.8], "avatar_image": [6.8, 6.8],
"monitor_config_override_box": [1.0, 14.0], "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 from cura.Settings.MachineManager import MachineManager
@pytest.fixture()
def global_stack():
return MagicMock(name="Global Stack")
@pytest.fixture() @pytest.fixture()
def container_registry() -> ContainerRegistry: def container_registry() -> ContainerRegistry:
return MagicMock() return MagicMock(name = "ContainerRegistry")
@pytest.fixture() @pytest.fixture()
def extruder_manager(application, container_registry) -> ExtruderManager: 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("cura.CuraApplication.CuraApplication.getInstance", MagicMock(return_value=application)):
with patch("UM.Settings.ContainerRegistry.ContainerRegistry.getInstance", MagicMock(return_value=container_registry)): with patch("UM.Settings.ContainerRegistry.ContainerRegistry.getInstance", MagicMock(return_value=container_registry)):
manager = ExtruderManager.getInstance() manager = ExtruderManager()
if manager is None:
manager = ExtruderManager()
return manager return manager
@pytest.fixture() @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.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)): with patch("cura.Settings.CuraContainerRegistry.CuraContainerRegistry.getInstance", MagicMock(return_value=container_registry)):
manager = MachineManager(application) 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. # 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) 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