Merge branch 'master' into libArachne_rebased

This commit is contained in:
Remco Burema 2021-04-16 18:17:04 +02:00
commit f22e223d72
No known key found for this signature in database
GPG Key ID: 215C49431D43F98C
46 changed files with 706 additions and 1957 deletions

View File

@ -28,7 +28,7 @@ body:
- type: textarea - type: textarea
attributes: attributes:
label: Describe alternatives you've considered label: Describe alternatives you've considered
description: A clear and concise description of any alternative solutions or features you've considered. Again, if possible, think about why these alternatives are not working out. description: A clear and concise description of any alternative solutions or features you've considered. If possible, think about why these alternatives are not working out.
placeholder: The alternatives I've considered are... placeholder: The alternatives I've considered are...
validations: validations:
required: true required: true

View File

@ -58,6 +58,11 @@ class Account(QObject):
manualSyncEnabledChanged = pyqtSignal(bool) manualSyncEnabledChanged = pyqtSignal(bool)
updatePackagesEnabledChanged = pyqtSignal(bool) updatePackagesEnabledChanged = pyqtSignal(bool)
CLIENT_SCOPES = "account.user.read drive.backup.read drive.backup.write packages.download " \
"packages.rating.read packages.rating.write connect.cluster.read connect.cluster.write " \
"library.project.read library.project.write cura.printjob.read cura.printjob.write " \
"cura.mesh.read cura.mesh.write"
def __init__(self, application: "CuraApplication", parent = None) -> None: def __init__(self, application: "CuraApplication", parent = None) -> None:
super().__init__(parent) super().__init__(parent)
self._application = application self._application = application
@ -79,10 +84,7 @@ class Account(QObject):
CALLBACK_PORT=self._callback_port, CALLBACK_PORT=self._callback_port,
CALLBACK_URL="http://localhost:{}/callback".format(self._callback_port), CALLBACK_URL="http://localhost:{}/callback".format(self._callback_port),
CLIENT_ID="um----------------------------ultimaker_cura", CLIENT_ID="um----------------------------ultimaker_cura",
CLIENT_SCOPES="account.user.read drive.backup.read drive.backup.write packages.download " CLIENT_SCOPES=self.CLIENT_SCOPES,
"packages.rating.read packages.rating.write connect.cluster.read connect.cluster.write "
"library.project.read library.project.write cura.printjob.read cura.printjob.write "
"cura.mesh.read cura.mesh.write",
AUTH_DATA_PREFERENCE_KEY="general/ultimaker_auth_data", AUTH_DATA_PREFERENCE_KEY="general/ultimaker_auth_data",
AUTH_SUCCESS_REDIRECT="{}/app/auth-success".format(self._oauth_root), AUTH_SUCCESS_REDIRECT="{}/app/auth-success".format(self._oauth_root),
AUTH_FAILED_REDIRECT="{}/app/auth-error".format(self._oauth_root) AUTH_FAILED_REDIRECT="{}/app/auth-error".format(self._oauth_root)

View File

@ -75,7 +75,7 @@ def findNodePlacement(nodes_to_arrange: List["SceneNode"], build_volume: "BuildV
# Clip the disallowed areas so that they don't overlap the bounding box (The arranger chokes otherwise) # Clip the disallowed areas so that they don't overlap the bounding box (The arranger chokes otherwise)
clipped_area = area.intersectionConvexHulls(build_plate_polygon) clipped_area = area.intersectionConvexHulls(build_plate_polygon)
if clipped_area.getPoints() is not None: # numpy array has to be explicitly checked against None if clipped_area.getPoints() is not None and len(clipped_area.getPoints()) > 2: # numpy array has to be explicitly checked against None
for point in clipped_area.getPoints(): for point in clipped_area.getPoints():
converted_points.append(Point(int(point[0] * factor), int(point[1] * factor))) converted_points.append(Point(int(point[0] * factor), int(point[1] * factor)))
@ -88,7 +88,7 @@ def findNodePlacement(nodes_to_arrange: List["SceneNode"], build_volume: "BuildV
converted_points = [] converted_points = []
hull_polygon = node.callDecoration("getConvexHull") hull_polygon = node.callDecoration("getConvexHull")
if hull_polygon is not None and hull_polygon.getPoints() is not None: # numpy array has to be explicitly checked against None if hull_polygon is not None and hull_polygon.getPoints() is not None and len(hull_polygon.getPoints()) > 2: # numpy array has to be explicitly checked against None
for point in hull_polygon.getPoints(): for point in hull_polygon.getPoints():
converted_points.append(Point(point[0] * factor, point[1] * factor)) converted_points.append(Point(point[0] * factor, point[1] * factor))
item = Item(converted_points) item = Item(converted_points)

View File

@ -18,6 +18,9 @@ if Platform.isWindows() and hasattr(sys, "frozen"):
import win32timezone import win32timezone
from keyring.backends.Windows import WinVaultKeyring from keyring.backends.Windows import WinVaultKeyring
keyring.set_keyring(WinVaultKeyring()) keyring.set_keyring(WinVaultKeyring())
if Platform.isOSX() and hasattr(sys, "frozen"):
from keyring.backends.macOS import Keyring
keyring.set_keyring(Keyring())
# Even if errors happen, we don't want this stored locally: # Even if errors happen, we don't want this stored locally:
DONT_EVER_STORE_LOCALLY: List[str] = ["refresh_token"] DONT_EVER_STORE_LOCALLY: List[str] = ["refresh_token"]

View File

@ -164,5 +164,16 @@ Rectangle
onExited: manageQueueText.font.underline = false onExited: manageQueueText.font.underline = false
} }
} }
Label
{
id: noConnectionLabel
anchors.horizontalCenter: parent.horizontalCenter
visible: !isNetworkConfigurable
text: catalog.i18nc("@info", "In order to monitor your print from Cura, please connect the printer.")
font: UM.Theme.getFont("medium")
color: UM.Theme.getColor("text")
wrapMode: Text.WordWrap
width: contentWidth
}
} }
} }

View File

@ -287,7 +287,7 @@ class CloudOutputDevice(UltimakerNetworkedPrinterOutputDevice):
firmware_version = Version([version_number[0], version_number[1], version_number[2]]) firmware_version = Version([version_number[0], version_number[1], version_number[2]])
return firmware_version >= self.PRINT_JOB_ACTIONS_MIN_VERSION return firmware_version >= self.PRINT_JOB_ACTIONS_MIN_VERSION
@pyqtProperty(bool) @pyqtProperty(bool, constant = True)
def supportsPrintJobQueue(self) -> bool: def supportsPrintJobQueue(self) -> bool:
"""Gets whether the printer supports a queue""" """Gets whether the printer supports a queue"""

View File

@ -4,8 +4,10 @@
import configparser import configparser
from typing import Tuple, List from typing import Tuple, List
import io import io
import json
from UM.VersionUpgrade import VersionUpgrade from UM.VersionUpgrade import VersionUpgrade
from cura.API import Account
class VersionUpgrade48to49(VersionUpgrade): class VersionUpgrade48to49(VersionUpgrade):
@ -32,6 +34,13 @@ class VersionUpgrade48to49(VersionUpgrade):
if "categories_expanded" in parser["cura"] and any([setting in parser["cura"]["categories_expanded"] for setting in self._moved_visibility_settings]): if "categories_expanded" in parser["cura"] and any([setting in parser["cura"]["categories_expanded"] for setting in self._moved_visibility_settings]):
parser["cura"]["categories_expanded"] += ";top_bottom" parser["cura"]["categories_expanded"] += ";top_bottom"
# If the account scope in 4.8 is outdated, delete it so that the user is enforced to log in again and get the
# correct permissions.
if "ultimaker_auth_data" in parser["general"]:
ultimaker_auth_data = json.loads(parser["general"]["ultimaker_auth_data"])
if set(Account.CLIENT_SCOPES.split(" ")) - set(ultimaker_auth_data["scope"].split(" ")):
parser["general"]["ultimaker_auth_data"] = "{}"
result = io.StringIO() result = io.StringIO()
parser.write(result) parser.write(result)
return [filename], [result.getvalue()] return [filename], [result.getvalue()]

View File

@ -1,14 +1,18 @@
cffi==1.14.1
colorlog colorlog
cryptography==3.4.6
importlib-metadata==3.7.2
mypy==0.740 mypy==0.740
PyQt5==5.10 numpy==1.20.2
numpy==1.15.4 PyQt5==5.15.2
scipy==1.2.0 PyQt5-sip==12.8.1
shapely[vectorized]==1.6.4.post2 scipy==1.6.1
shapely[vectorized]==1.7.1
twisted==21.2.0
typing
appdirs==1.4.3 appdirs==1.4.3
certifi==2019.11.28 certifi==2019.11.28
cffi==1.13.1
chardet==3.0.4 chardet==3.0.4
cryptography==2.8
decorator==4.4.0 decorator==4.4.0
idna==2.8 idna==2.8
netifaces==0.10.9 netifaces==0.10.9
@ -26,10 +30,7 @@ requests==2.22.0
sentry-sdk==0.13.5 sentry-sdk==0.13.5
six==1.12.0 six==1.12.0
trimesh==3.2.33 trimesh==3.2.33
typing==3.7.4
twisted==19.10.0
urllib3==1.25.6 urllib3==1.25.6
PyYAML==5.1.2
zeroconf==0.24.1 zeroconf==0.24.1
comtypes==1.1.7 comtypes==1.1.7
pywin32==300 pywin32==300

View File

@ -0,0 +1,159 @@
{
"version": 2,
"name": "Atom 3",
"inherits": "fdmprinter",
"metadata": {
"visible": true,
"author": "Daniel Kurth",
"manufacturer": "Layer One",
"platform_offset": [0, 0, 0],
"has_machine_quality": false,
"has_materials": true,
"preferred_material": "layer_one_dark_gray_pla",
"has_variants": true,
"preferred_variant_name": "PTFE hotend + 0.4mm brass nozzle",
"preferred_quality_type": "normal",
"variants_name": "Tool:",
"platform": "Atom 3 bed.3mf",
"machine_extruder_trains":
{
"0": "atom3_extruder_0"
}
},
"overrides": {
"machine_name": { "default_value": "Atom 3" },
"machine_show_variants": { "default_value": true},
"machine_shape": { "default_value": "elliptic" },
"machine_width": { "default_value": 270},
"machine_depth": { "default_value": 270},
"machine_height": { "default_value": 340},
"machine_center_is_zero": { "default_value": true},
"machine_nozzle_head_distance": { "default_value": 6},
"machine_head_with_fans_polygon":
{
"default_value":[
[-23.82, 51.25],
[23.82, 51.25],
[56.292 , -5.00],
[32.476, -46.250],
[-32.476, -46.25],
[-56.292, -5.00]
]
},
"machine_gcode_flavor": { "RepRap (Marlin/Sprinter)": "Marlin" },
"machine_heated_bed": { "default_value": true },
"material_diameter": { "default_value": 1.75},
"machine_start_gcode": {
"default_value": ";MACHINE START CODE\nG21 ;metric values\nG90 ;absolute positioning\nG28 ;home\nG1 Z5 F9000\n;MACHINE START CODE"
},
"machine_end_gcode": {
"default_value": ";MACHINE END CODE\nG91 ;relative positioning\nG1 E-1 F300 ;retract filament release pressure\nG1 Z+1.0 E-5 F9000 ;move up a and retract more\nG90 ;absolute positioning\nG28; home\nM84 ;steppers off\n;MACHINE END CODE"
},
"layer_height": {"default_value": 0.2 },
"layer_height_0": {
"default_value": 0.2,
"value": "layer_height"
},
"line_width": { "value": "machine_nozzle_size"},
"infill_line_width": { "value":"line_width"},
"initial_layer_line_width_factor": { "default_value": 100},
"top_bottom_thickness": { "default_value": 1.0},
"infill_sparse_density": { "default_value": 17},
"infill_before_walls": { "value": false},
"zig_zaggify_infill": { "value": true},
"default_material_print_temperature": { "default_value": 200 },
"material_print_temperature_layer_0": { "value": "material_print_temperature + 0"},
"material_initial_print_temperature": { "value": "material_print_temperature_layer_0"},
"material_final_print_temperature": { "value": "material_print_temperature"},
"default_material_bed_temperature": {
"default_value": 60,
"minimum_value": "0",
"minimum_value_warning": "build_volume_temperature",
"maximum_value_warning": "115",
"maximum_value": "120"
},
"material_bed_temperature":
{
"value": "round(default_material_bed_temperature-((-0.202*default_material_bed_temperature)+7.16)) if default_material_bed_temperature > 40 else default_material_bed_temperature",
"minimum_value": "0",
"minimum_value_warning": "build_volume_temperature",
"maximum_value_warning": "115",
"maximum_value": "120"
},
"speed_print": { "default_value": 40},
"speed_wall": { "value": "speed_print * 0.75"},
"speed_wall_0": { "value": "speed_print * 0.5"},
"speed_wall_x": { "value": "speed_print * 0.75"},
"speed_layer_0": { "value": "20"},
"speed_slowdown_layers": { "default_value": 1},
"retraction_amount": {
"default_value": 7,
"maximum_value_warning": 9 },
"retraction_speed": {
"default_value": 70,
"maximum_value_warning": 80
},
"retraction_hop_enabled": { "default_value": true},
"retraction_hop": { "default_value": 0.5},
"cool_min_layer_time": { "default_value": 5},
"cool_min_speed": { "default_value": 10},
"cool_lift_head": { "default_value": false},
"support_type": { "default_value": "everywhere"},
"support_angle": { "default_value": 60},
"support_z_distance": { "value": "layer_height"},
"support_xy_distance_overhang":{"value": "machine_nozzle_size"},
"adhesion_type": { "default_value": "skirt"},
"skirt_brim_minimal_length": {
"default_value": 750,
"value": "60/(layer_height_0*line_width)",
"minimum_value": "0",
"minimum_value_warning": "25",
"maximum_value_warning": "4000"
},
"skirt_gap": {
"default_value": "1`",
"value": "3*wall_line_width_0"
}
}
}

View File

@ -0,0 +1,62 @@
{
"version": 2,
"name": "Atom 3 Lite",
"inherits": "atom3",
"metadata": {
"author": "Daniel Kurth",
"manufacturer": "Layer One",
"platform_offset": [0, 0, 0],
"preferred_variant_name": "PTFE hotend + 0.4mm brass nozzle",
"platform": "Atom 3 lite bed.3mf"
},
"overrides": {
"machine_head_with_fans_polygon":
{
"default_value":
[
[-23.82, 41.25],
[23.82, 41.25],
[38.105, 16.5],
[57.631 , 16.5],
[57.631 , -16.5],
[38.105, -16.5],
[23.82, -41.25],
[-23.82, -41.25],
[-38.105, -16.5],
[-57.631 , -16.5],
[-57.631 , 16.5],
[-38.105, 16.5],
[-23.82, 41.25]
]
},
"retraction_amount": { "default_value": 7 },
"retraction_speed": {
"default_value": 70,
"maximum_value_warning": "90"
},
"cool_min_layer_time": { "default_value": 15},
"cool_min_speed": { "default_value": 5},
"cool_lift_head": { "default_value": false},
"support_angle": { "default_value": 45}
}
}

View File

@ -3038,6 +3038,7 @@
"description": "The speed for the initial layer. A lower value is advised to improve adhesion to the build plate. Does not affect the build plate adhesion structures themselves, like brim and raft.", "description": "The speed for the initial layer. A lower value is advised to improve adhesion to the build plate. Does not affect the build plate adhesion structures themselves, like brim and raft.",
"unit": "mm/s", "unit": "mm/s",
"type": "float", "type": "float",
"enabled": "speed_slowdown_layers > 0",
"default_value": 30, "default_value": 30,
"value": "speed_print * 30 / 60", "value": "speed_print * 30 / 60",
"minimum_value": "0.1", "minimum_value": "0.1",
@ -3052,6 +3053,7 @@
"description": "The speed of printing for the initial layer. A lower value is advised to improve adhesion to the build plate.", "description": "The speed of printing for the initial layer. A lower value is advised to improve adhesion to the build plate.",
"unit": "mm/s", "unit": "mm/s",
"type": "float", "type": "float",
"enabled": "speed_slowdown_layers > 0",
"default_value": 30, "default_value": 30,
"value": "speed_layer_0", "value": "speed_layer_0",
"minimum_value": "0.1", "minimum_value": "0.1",
@ -3065,6 +3067,7 @@
"description": "The speed of travel moves in the initial layer. A lower value is advised to prevent pulling previously printed parts away from the build plate. The value of this setting can automatically be calculated from the ratio between the Travel Speed and the Print Speed.", "description": "The speed of travel moves in the initial layer. A lower value is advised to prevent pulling previously printed parts away from the build plate. The value of this setting can automatically be calculated from the ratio between the Travel Speed and the Print Speed.",
"unit": "mm/s", "unit": "mm/s",
"type": "float", "type": "float",
"enabled": "speed_slowdown_layers > 0",
"default_value": 60, "default_value": 60,
"value": "speed_layer_0 * speed_travel / speed_print", "value": "speed_layer_0 * speed_travel / speed_print",
"minimum_value": "0.1", "minimum_value": "0.1",

View File

@ -0,0 +1,48 @@
{
"version": 2,
"name": "JGAurora A6",
"inherits": "fdmprinter",
"metadata": {
"visible": true,
"author": "CrissR",
"manufacturer": "JGAurora",
"file_formats": "text/x-gcode",
"platform": "jgaurora_a6_platform.stl",
"supports_usb_connection": true,
"supports_network_connection": false,
"has_machine_quality": true,
"quality_definition": "jgaurora_a6",
"has_variants": false,
"preferred_quality_type": "normal",
"machine_extruder_trains":
{
"0": "jgaurora_a6_extruder_0"
}
},
"overrides": {
"machine_name": { "default_value": "JGAurora A6" },
"machine_heated_bed": { "default_value": true },
"machine_width": { "default_value": 300 },
"machine_height": { "default_value": 200 },
"machine_depth": { "default_value": 200 },
"machine_center_is_zero": { "default_value": false },
"machine_nozzle_size": { "default_value": 0.4 },
"material_diameter": { "default_value": 1.75 },
"layer_height": { "default_value": 0.16 },
"layer_height_0": { "default_value": 0.2 },
"retraction_enable": { "default_value": true },
"retraction_amount": { "default_value": 4 },
"retraction_speed": { "default_value": 45 },
"adhesion_type": { "default_value": "skirt" },
"speed_print": { "default_value": 60},
"gantry_height": { "value": 10 },
"machine_gcode_flavor": { "default_value": "RepRap (Marlin/Sprinter)" },
"machine_start_gcode": {
"default_value": "M190 S{print_bed_temperature} ;bed temperature line\nM109 S{print_temperature} ;temperature line\nG21 ;metric values\nG90 ;absolute positioning\nM82 ;set extruder to absolute mode\nM107;start with the fan off\nG28 X0 Y0 ;move X/Y to min endstops\nG28 Z0 ;move Z to min endstops\nG1 Z15.0 F{travel_speed} ;move the platform down 15mm\nG92 E0 ;zero the extruded length\nF200 E3;extrude 3mm of feed stock\nG92 E0 ;zero the extruded length again\nG1 F{travel_speed}\nG1 Z0.0 F{travel_speed}\nM117 Printing... ;LCD Message"
},
"machine_end_gcode": {
"default_value": "M104 S0 ;extruder heater off\nM140 S0;heated bed heater off\nG91;relative positioning\nG1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\nG1 Z+0.5 E-5 X-20 Y-20 F{travel_speed} ;move Z up a bit and retract filament even more\nG28 X0 Y0;move X/Y to min endstops, so the head is out of the way\nM84 ;steppers off\nG90;absolute positioning\nM104 S0 ; turn off extruder\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nG1 X178 Y180 F4200 ; park print head\nM84 ; disable motors"
}
}
}

View File

@ -0,0 +1,15 @@
{
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
"metadata": {
"machine": "atom3",
"position": "0"
},
"overrides": {
"extruder_nr": { "default_value": 0 },
"machine_nozzle_size": { "default_value": 0.4 },
"material_diameter": { "default_value": 1.75 }
}
}

View File

@ -0,0 +1,16 @@
{
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
"metadata": {
"machine": "jgaurora_a6",
"position": "0"
},
"overrides": {
"extruder_nr": { "default_value": 0 },
"machine_nozzle_size": { "default_value": 0.4 },
"material_diameter": { "default_value": 1.75 }
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 495 KiB

After

Width:  |  Height:  |  Size: 502 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -863,6 +863,8 @@ UM.MainWindow
{ {
id: whatsNewDialog id: whatsNewDialog
title: catalog.i18nc("@title:window", "What's New") title: catalog.i18nc("@title:window", "What's New")
minimumWidth: UM.Theme.getSize("welcome_wizard_window").width
minimumHeight: UM.Theme.getSize("welcome_wizard_window").height
model: CuraApplication.getWhatsNewPagesModel() model: CuraApplication.getWhatsNewPagesModel()
progressBarVisible: false progressBarVisible: false
visible: false visible: false

View File

@ -1,14 +1,17 @@
// Copyright (c) 2018 Ultimaker B.V. // Copyright (c) 2021 Ultimaker B.V.
// Cura is released under the terms of the LGPLv3 or higher. // Cura is released under the terms of the LGPLv3 or higher.
import QtQuick 2.7 import QtQuick 2.10
import QtQuick.Controls 1.4 import QtQuick.Controls 2.11
import QtQml.Models 2.14 as Models
import UM 1.2 as UM import UM 1.2 as UM
import Cura 1.0 as Cura import Cura 1.0 as Cura
Menu Menu
{ {
ActionGroup { id: group }
id: menu id: menu
title: catalog.i18nc("@action:inmenu", "Visible Settings") title: catalog.i18nc("@action:inmenu", "Visible Settings")
@ -16,7 +19,7 @@ Menu
signal collapseAllCategories() signal collapseAllCategories()
Instantiator Models.Instantiator
{ {
model: settingVisibilityPresetsModel.items model: settingVisibilityPresetsModel.items
@ -25,7 +28,7 @@ Menu
text: modelData.name text: modelData.name
checkable: true checkable: true
checked: modelData.presetId == settingVisibilityPresetsModel.activePreset checked: modelData.presetId == settingVisibilityPresetsModel.activePreset
exclusiveGroup: group ActionGroup.group: group
onTriggered: onTriggered:
{ {
settingVisibilityPresetsModel.setActivePreset(modelData.presetId); settingVisibilityPresetsModel.setActivePreset(modelData.presetId);
@ -49,9 +52,7 @@ Menu
MenuItem MenuItem
{ {
text: catalog.i18nc("@action:inmenu", "Manage Setting Visibility...") text: catalog.i18nc("@action:inmenu", "Manage Setting Visibility...")
iconName: "configure" icon.name: "configure"
onTriggered: Cura.Actions.configureSettingVisibility.trigger() onTriggered: Cura.Actions.configureSettingVisibility.trigger()
} }
ExclusiveGroup { id: group }
} }

View File

@ -2,10 +2,12 @@
// Cura is released under the terms of the LGPLv3 or higher. // Cura is released under the terms of the LGPLv3 or higher.
import QtQuick 2.10 import QtQuick 2.10
import QtQuick.Controls 2.3 import QtQuick.Controls 1.1
import QtQuick.Layouts 1.1 import QtQuick.Layouts 1.1
import QtQuick.Controls.Styles 1.1 import QtQuick.Controls.Styles 1.1
import QtQuick.Controls 2.3 as NewControls
import UM 1.1 as UM import UM 1.1 as UM
import Cura 1.1 as Cura import Cura 1.1 as Cura
@ -139,6 +141,7 @@ UM.PreferencesPage
{ {
id: interfaceGrid id: interfaceGrid
columns: 4 columns: 4
width: parent.width
Label Label
{ {
@ -178,12 +181,13 @@ UM.PreferencesPage
} }
} }
ComboBox NewControls.ComboBox
{ {
id: languageComboBox id: languageComboBox
textRole: "text" textRole: "text"
model: languageList model: languageList
Layout.fillWidth: true
currentIndex: currentIndex:
{ {
@ -197,20 +201,6 @@ UM.PreferencesPage
} }
} }
onActivated: UM.Preferences.setValue("general/language", model.get(index).code) onActivated: UM.Preferences.setValue("general/language", model.get(index).code)
Component.onCompleted:
{
// Because ListModel is stupid and does not allow using qsTr() for values.
for(var i = 0; i < languageList.count; ++i)
{
languageList.setProperty(i, "text", catalog.i18n(languageList.get(i).text));
}
// Glorious hack time. ComboBox does not update the text properly after changing the
// model. So change the indices around to force it to update.
currentIndex += 1;
currentIndex -= 1;
}
} }
Label Label
@ -245,12 +235,13 @@ UM.PreferencesPage
} }
} }
ComboBox NewControls.ComboBox
{ {
id: themeComboBox id: themeComboBox
model: themeList model: themeList
textRole: "text" textRole: "text"
Layout.fillWidth: true
currentIndex: currentIndex:
{ {
@ -265,21 +256,6 @@ UM.PreferencesPage
return 0; return 0;
} }
onActivated: UM.Preferences.setValue("general/theme", model.get(index).code) onActivated: UM.Preferences.setValue("general/theme", model.get(index).code)
Component.onCompleted:
{
// Because ListModel is stupid and does not allow using qsTr() for values.
for(var i = 0; i < themeList.count; ++i)
{
themeList.setProperty(i, "text", catalog.i18n(themeList.get(i).text));
}
// Glorious hack time. ComboBox does not update the text properly after changing the
// model. So change the indices around to force it to update.
currentIndex += 1;
currentIndex -= 1;
}
} }
} }
@ -535,7 +511,7 @@ UM.PreferencesPage
} }
} }
ComboBox NewControls.ComboBox
{ {
id: cameraComboBox id: cameraComboBox
@ -676,10 +652,10 @@ UM.PreferencesPage
text: catalog.i18nc("@window:text", "Default behavior when opening a project file: ") text: catalog.i18nc("@window:text", "Default behavior when opening a project file: ")
} }
ComboBox NewControls.ComboBox
{ {
id: choiceOnOpenProjectDropDownButton id: choiceOnOpenProjectDropDownButton
width: 200 * screenScaleFactor width: Math.round(250 * screenScaleFactor)
model: ListModel model: ListModel
{ {
@ -743,11 +719,11 @@ UM.PreferencesPage
text: catalog.i18nc("@window:text", "Default behavior for changed setting values when switching to a different profile: ") text: catalog.i18nc("@window:text", "Default behavior for changed setting values when switching to a different profile: ")
} }
ComboBox NewControls.ComboBox
{ {
id: choiceOnProfileOverrideDropDownButton id: choiceOnProfileOverrideDropDownButton
width: 200 * screenScaleFactor width: Math.round(250 * screenScaleFactor)
popup.width: Math.round(350 * screenScaleFactor)
model: ListModel model: ListModel
{ {
id: discardOrKeepProfileListModel id: discardOrKeepProfileListModel

View File

@ -5,6 +5,8 @@ import QtQuick 2.1
import QtQuick.Controls 1.1 import QtQuick.Controls 1.1
import QtQuick.Controls.Styles 1.1 import QtQuick.Controls.Styles 1.1
import QtQuick.Controls 2.3 as NewControls
import UM 1.2 as UM import UM 1.2 as UM
import Cura 1.0 as Cura import Cura 1.0 as Cura
@ -96,7 +98,7 @@ UM.PreferencesPage
onTextChanged: definitionsModel.filter = {"i18n_label": "*" + text} onTextChanged: definitionsModel.filter = {"i18n_label": "*" + text}
} }
ComboBox NewControls.ComboBox
{ {
id: visibilityPreset id: visibilityPreset
width: 150 * screenScaleFactor width: 150 * screenScaleFactor
@ -104,6 +106,7 @@ UM.PreferencesPage
{ {
top: parent.top top: parent.top
right: parent.right right: parent.right
bottom: scrollView.top
} }
model: settingVisibilityPresetsModel.items model: settingVisibilityPresetsModel.items

View File

@ -1,4 +1,4 @@
// Copyright (c) 2019 Ultimaker B.V. // Copyright (c) 2021 Ultimaker B.V.
// Cura is released under the terms of the LGPLv3 or higher. // Cura is released under the terms of the LGPLv3 or higher.
import QtQuick 2.7 import QtQuick 2.7
@ -154,6 +154,20 @@ Item
} }
} }
SettingVisibilityPresetsMenu
{
id: settingVisibilityPresetsMenu
x: settingVisibilityMenu.x
y: settingVisibilityMenu.y
onCollapseAllCategories:
{
settingsSearchTimer.stop()
filter.text = "" // clear search field
filter.editingFinished()
definitionsModel.collapseAllCategories()
}
}
ToolButton ToolButton
{ {
id: settingVisibilityMenu id: settingVisibilityMenu
@ -185,16 +199,7 @@ Item
label: Label {} label: Label {}
} }
menu: SettingVisibilityPresetsMenu onClicked: settingVisibilityPresetsMenu.open()
{
onCollapseAllCategories:
{
settingsSearchTimer.stop()
filter.text = "" // clear search field
filter.editingFinished()
definitionsModel.collapseAllCategories()
}
}
} }
// Mouse area that gathers the scroll events to not propagate it to the main view. // Mouse area that gathers the scroll events to not propagate it to the main view.
@ -383,7 +388,7 @@ Item
animateContentY.to = contents.contentY; animateContentY.to = contents.contentY;
animateContentY.running = true; animateContentY.running = true;
} }
function onSetActiveFocusToNextSetting() function onSetActiveFocusToNextSetting(forward)
{ {
if (forward == undefined || forward) if (forward == undefined || forward)
{ {

View File

@ -44,7 +44,7 @@ Item
textArea.textFormat: Text.RichText textArea.textFormat: Text.RichText
textArea.wrapMode: Text.WordWrap textArea.wrapMode: Text.WordWrap
textArea.readOnly: true textArea.readOnly: true
textArea.font: UM.Theme.getFont("medium") textArea.font: UM.Theme.getFont("default")
textArea.onLinkActivated: Qt.openUrlExternally(link) textArea.onLinkActivated: Qt.openUrlExternally(link)
} }

View File

@ -31,23 +31,16 @@ Item
renderType: Text.NativeRendering renderType: Text.NativeRendering
} }
Item
{
id: topSpacer
anchors.top: titleLabel.bottom
height: UM.Theme.getSize("default_margin").height
width: UM.Theme.getSize("default_margin").width
}
Rectangle Rectangle
{ {
anchors anchors
{ {
top: topSpacer.bottom top: titleLabel.bottom
topMargin: UM.Theme.getSize("default_margin").width
bottom: whatsNewDots.top bottom: whatsNewDots.top
bottomMargin: UM.Theme.getSize("narrow_margin").width
left: parent.left left: parent.left
right: parent.right right: parent.right
margins: UM.Theme.getSize("default_margin").width * 2
} }
color: UM.Theme.getColor("viewport_overlay") color: UM.Theme.getColor("viewport_overlay")
@ -59,7 +52,6 @@ Item
anchors anchors
{ {
top: parent.top top: parent.top
topMargin: UM.Theme.getSize("default_margin").width
horizontalCenter: parent.horizontalCenter horizontalCenter: parent.horizontalCenter
} }
height: parent.height height: parent.height
@ -69,12 +61,6 @@ Item
Repeater Repeater
{ {
anchors
{
top: parent.top
topMargin: UM.Theme.getSize("default_margin").width / 2
horizontalCenter: parent.horizontalCenter
}
model: manager.subpageCount model: manager.subpageCount
@ -82,6 +68,8 @@ Item
{ {
Layout.alignment: Qt.AlignHCenter Layout.alignment: Qt.AlignHCenter
color: UM.Theme.getColor("viewport_overlay") color: UM.Theme.getColor("viewport_overlay")
width: whatsNewViewport.width
height: whatsNewViewport.height
Image Image
{ {
@ -89,12 +77,15 @@ Item
anchors anchors
{ {
horizontalCenter: parent.horizontalCenter
top: parent.top top: parent.top
topMargin: UM.Theme.getSize("default_margin").width topMargin: UM.Theme.getSize("thick_margin").width
left: parent.left
leftMargin: UM.Theme.getSize("thick_margin").width
right: parent.right
rightMargin: UM.Theme.getSize("thick_margin").width
} }
width: Math.round(parent.width - (UM.Theme.getSize("default_margin").width * 2)) width: sourceSize.width
height: Math.round((parent.height - UM.Theme.getSize("default_margin").height) * 0.75) sourceSize.width: Math.round(parent.width - (UM.Theme.getSize("thick_margin").height * 2))
fillMode: Image.PreserveAspectFit fillMode: Image.PreserveAspectFit
source: manager.getSubpageImageSource(index) source: manager.getSubpageImageSource(index)
@ -107,10 +98,12 @@ Item
anchors anchors
{ {
top: subpageImage.bottom top: subpageImage.bottom
topMargin: UM.Theme.getSize("default_margin").height
bottom: parent.bottom bottom: parent.bottom
horizontalCenter: parent.horizontalCenter bottomMargin: UM.Theme.getSize("thick_margin").height
left: subpageImage.left
right: subpageImage.right
} }
width: Math.round(parent.width - (UM.Theme.getSize("default_margin").width * 2))
ScrollBar.horizontal.policy: ScrollBar.AlwaysOff ScrollBar.horizontal.policy: ScrollBar.AlwaysOff
@ -121,8 +114,10 @@ Item
textArea.text: manager.getSubpageText(index) textArea.text: manager.getSubpageText(index)
textArea.textFormat: Text.RichText textArea.textFormat: Text.RichText
textArea.readOnly: true textArea.readOnly: true
textArea.font: UM.Theme.getFont("medium") textArea.font: UM.Theme.getFont("default")
textArea.onLinkActivated: Qt.openUrlExternally(link) textArea.onLinkActivated: Qt.openUrlExternally(link)
textArea.leftPadding: 0
textArea.rightPadding: 0
} }
} }
} }
@ -139,7 +134,8 @@ Item
anchors anchors
{ {
bottom: bottomSpacer.top bottom: whatsNewNextButton.top
bottomMargin: UM.Theme.getSize("narrow_margin").height
horizontalCenter: parent.horizontalCenter horizontalCenter: parent.horizontalCenter
} }

View File

@ -53,7 +53,7 @@ Item
anchors.left: parent.left anchors.left: parent.left
anchors.right: parent.right anchors.right: parent.right
height: UM.Theme.getSize("progressbar").height height: visible ? UM.Theme.getSize("progressbar").height : 0
value: base.progressValue value: base.progressValue
} }
@ -64,7 +64,6 @@ Item
anchors anchors
{ {
margins: UM.Theme.getSize("wide_margin").width margins: UM.Theme.getSize("wide_margin").width
bottomMargin: UM.Theme.getSize("default_margin").width
top: progressBar.bottom top: progressBar.bottom
bottom: parent.bottom bottom: parent.bottom
left: parent.left left: parent.left

View File

@ -0,0 +1,26 @@
[general]
version = 4
name = Detail 0.12
definition = jgaurora_a6
[metadata]
setting_version = 16
quality_type = detail
type = quality
weight = 0
global_quality = true
[values]
layer_height = 0.12
layer_height_0 = 0.2
initial_layer_line_width_factor = 150
infill_before_walls = true
speed_print = 50
speed_travel = 80
retraction_amount = 4
acceleration_enabled = True
adhesion_type = skirt
jerk_enabled = True
retraction_combing = infill
support_enable = False
travel_retract_before_outer_wall = True

View File

@ -0,0 +1,27 @@
[general]
version = 4
name = Optimal 0.16
definition = jgaurora_a6
[metadata]
quality_type = optimal
setting_version = 16
type = quality
weight = -1
global_quality = true
[values]
layer_height = 0.16
layer_height_0 = 0.2
initial_layer_line_width_factor = 150
infill_before_walls = true
speed_print = 55
speed_travel = 80
retraction_amount = 4
adhesion_type = skirt
acceleration_enabled = True
adhesion_type = skirt
jerk_enabled = True
retraction_combing = infill
support_enable = False
travel_retract_before_outer_wall = True

View File

@ -0,0 +1,21 @@
[general]
version = 4
name = Draft 0.24
definition = jgaurora_a6
[metadata]
quality_type = draft
setting_version = 16
type = quality
weight = -3
global_quality = true
[values]
layer_height = 0.24
layer_height_0 = 0.24
speed_print = 60
retraction_amount = 4
adhesion_type = skirt
retraction_combing = infill
support_enable = False
travel_retract_before_outer_wall = True

View File

@ -0,0 +1,24 @@
[general]
version = 4
name = Fast 0.28
definition = jgaurora_a6
[metadata]
quality_type = fast
setting_version = 16
type = quality
weight = -4
global_quality = true
[values]
layer_height = 0.28
layer_height_0 = 0.28
speed_print = 60
speed_travel = 120
speed_layer_0 = 30
wall_thickness = =line_width * 4
retraction_amount = 4
adhesion_type = skirt
retraction_combing = infill
support_enable = False
travel_retract_before_outer_wall = True

View File

@ -0,0 +1,21 @@
[general]
version = 4
name = Normal 0.20
definition = jgaurora_a6
[metadata]
quality_type = normal
setting_version = 16
type = quality
weight = -2
global_quality = true
[values]
layer_height = 0.2
layer_height_0 = 0.2
speed_print = 60
speed_travel = 100
adhesion_type = skirt
retraction_combing = infill
support_enable = False
travel_retract_before_outer_wall = True

View File

@ -14,8 +14,8 @@ variant = 0.6 mm
[values] [values]
adhesion_type = brim adhesion_type = brim
brim_line_count = 20 brim_line_count = 20
cool_fan_speed = 60 cool_fan_speed = 80
cool_fan_speed_min = =cool_fan_speed * 35 / 60 cool_fan_speed_min = =cool_fan_speed
cool_min_speed = 15 cool_min_speed = 15
infill_sparse_density = 10 infill_sparse_density = 10
layer_0_z_overlap = 0.12 layer_0_z_overlap = 0.12

File diff suppressed because it is too large Load Diff

View File

@ -1,3 +1,3 @@
<h4>Better visual representation</h4> <h4>Better visual representation</h4>
<p>The Z-seam is now clearly indicated in Preview mode. This ensures that you will know whether the seam will be sufficiently hidden in the end product. </br> <p>The Z-seam is now clearly indicated in Preview mode. This ensures that you will know whether the seam will be sufficiently hidden in the end product. <br>
<i>Thanks to BasF0 for contributing to this feature.</i> </p> <i>Thanks to BasF0 for contributing to this feature.</i> </p>

View File

@ -0,0 +1,14 @@
[general]
name = All metal hotend + 0.2mm brass nozzle
version = 4
definition = atom3
[metadata]
setting_version = 16
type = variant
hardware_type = nozzle
[values]
machine_nozzle_size = 0.2
retraction_amount = 3
retraction_speed = 50

View File

@ -0,0 +1,14 @@
[general]
name = All metal hotend + 0.4mm brass nozzle
version = 4
definition = atom3
[metadata]
setting_version = 16
type = variant
hardware_type = nozzle
[values]
machine_nozzle_size = 0.4
retraction_amount = 3
retraction_speed = 50

View File

@ -0,0 +1,14 @@
[general]
name = All metal hotend + 0.6mm brass nozzle
version = 4
definition = atom3
[metadata]
setting_version = 16
type = variant
hardware_type = nozzle
[values]
machine_nozzle_size = 0.6
retraction_amount = 3
retraction_speed = 50

View File

@ -0,0 +1,14 @@
[general]
name = All metal hotend + 0.2mm brass nozzle
version = 4
definition = atom3_lite
[metadata]
setting_version = 16
type = variant
hardware_type = nozzle
[values]
machine_nozzle_size = 0.2
retraction_amount = 3
retraction_speed = 50

View File

@ -0,0 +1,14 @@
[general]
name = All metal hotend + 0.4mm brass nozzle
version = 4
definition = atom3_lite
[metadata]
setting_version = 16
type = variant
hardware_type = nozzle
[values]
machine_nozzle_size = 0.4
retraction_amount = 3
retraction_speed = 50

View File

@ -0,0 +1,14 @@
[general]
name = All metal hotend + 0.6mm brass nozzle
version = 4
definition = atom3_lite
[metadata]
setting_version = 16
type = variant
hardware_type = nozzle
[values]
machine_nozzle_size = 0.6
retraction_amount = 3
retraction_speed = 50

View File

@ -0,0 +1,14 @@
[general]
name = PTFE hotend + 0.2mm brass nozzle
version = 4
definition = atom3_lite
[metadata]
setting_version = 16
type = variant
hardware_type = nozzle
[values]
machine_nozzle_size = 0.2
retraction_amount = 7
retraction_speed = 70

View File

@ -0,0 +1,14 @@
[general]
name = PTFE hotend + 0.4mm brass nozzle
version = 4
definition = atom3_lite
[metadata]
setting_version = 16
type = variant
hardware_type = nozzle
[values]
machine_nozzle_size = 0.4
retraction_amount = 7
retraction_speed = 70

View File

@ -0,0 +1,14 @@
[general]
name = PTFE hotend + 0.6mm brass nozzle
version = 4
definition = atom3_lite
[metadata]
setting_version = 16
type = variant
hardware_type = nozzle
[values]
machine_nozzle_size = 0.6
retraction_amount = 7
retraction_speed = 70

View File

@ -0,0 +1,14 @@
[general]
name = PTFE hotend + 0.2mm brass nozzle
version = 4
definition = atom3
[metadata]
setting_version = 16
type = variant
hardware_type = nozzle
[values]
machine_nozzle_size = 0.2
retraction_amount = 7
retraction_speed = 70

View File

@ -0,0 +1,14 @@
[general]
name = PTFE hotend + 0.4mm brass nozzle
version = 4
definition = atom3
[metadata]
setting_version = 16
type = variant
hardware_type = nozzle
[values]
machine_nozzle_size = 0.4
retraction_amount = 7
retraction_speed = 70

View File

@ -0,0 +1,14 @@
[general]
name = PTFE hotend + 0.6mm brass nozzle
version = 4
definition = atom3
[metadata]
setting_version = 16
type = variant
hardware_type = nozzle
[values]
machine_nozzle_size = 0.6
retraction_amount = 7
retraction_speed = 70