mirror of
https://github.com/Ultimaker/Cura.git
synced 2025-07-08 07:27:29 -06:00
fix merge conflicts
This commit is contained in:
commit
641b3c21f7
13 changed files with 79 additions and 27 deletions
|
@ -41,6 +41,9 @@ class QualityAndUserProfilesModel(ProfilesModel):
|
||||||
new_extruder_stacks = []
|
new_extruder_stacks = []
|
||||||
if active_extruder is not None:
|
if active_extruder is not None:
|
||||||
new_extruder_stacks = [active_extruder]
|
new_extruder_stacks = [active_extruder]
|
||||||
|
else:
|
||||||
|
# if there is no active extruder, use the first one in the active extruder stacks
|
||||||
|
active_extruder = extruder_stacks[0]
|
||||||
extruder_stacks = new_extruder_stacks + extruder_stacks
|
extruder_stacks = new_extruder_stacks + extruder_stacks
|
||||||
|
|
||||||
# Fetch the list of useable qualities across all extruders.
|
# Fetch the list of useable qualities across all extruders.
|
||||||
|
|
|
@ -41,6 +41,9 @@ class UserProfilesModel(ProfilesModel):
|
||||||
new_extruder_stacks = []
|
new_extruder_stacks = []
|
||||||
if active_extruder is not None:
|
if active_extruder is not None:
|
||||||
new_extruder_stacks = [active_extruder]
|
new_extruder_stacks = [active_extruder]
|
||||||
|
else:
|
||||||
|
# if there is no active extruder, use the first one in the active extruder stacks
|
||||||
|
active_extruder = extruder_stacks[0]
|
||||||
extruder_stacks = new_extruder_stacks + extruder_stacks
|
extruder_stacks = new_extruder_stacks + extruder_stacks
|
||||||
|
|
||||||
# Fetch the list of useable qualities across all extruders.
|
# Fetch the list of useable qualities across all extruders.
|
||||||
|
@ -55,8 +58,8 @@ class UserProfilesModel(ProfilesModel):
|
||||||
# If the printer has multiple extruders then quality changes related to the current extruder are kept
|
# If the printer has multiple extruders then quality changes related to the current extruder are kept
|
||||||
filtered_quality_changes = [qc for qc in quality_changes_list if qc.getMetaDataEntry("quality_type") in quality_type_set and
|
filtered_quality_changes = [qc for qc in quality_changes_list if qc.getMetaDataEntry("quality_type") in quality_type_set and
|
||||||
qc.getMetaDataEntry("extruder") is not None and
|
qc.getMetaDataEntry("extruder") is not None and
|
||||||
qc.getMetaDataEntry("extruder") == active_extruder.definition.getMetaDataEntry("quality_definition") or
|
(qc.getMetaDataEntry("extruder") == active_extruder.definition.getMetaDataEntry("quality_definition") or
|
||||||
qc.getMetaDataEntry("extruder") == active_extruder.definition.getId()]
|
qc.getMetaDataEntry("extruder") == active_extruder.definition.getId())]
|
||||||
else:
|
else:
|
||||||
# If not, the quality changes of the global stack are selected
|
# If not, the quality changes of the global stack are selected
|
||||||
filtered_quality_changes = [qc for qc in quality_changes_list if qc.getMetaDataEntry("quality_type") in quality_type_set and
|
filtered_quality_changes = [qc for qc in quality_changes_list if qc.getMetaDataEntry("quality_type") in quality_type_set and
|
||||||
|
|
|
@ -272,12 +272,18 @@ class WorkspaceDialog(QObject):
|
||||||
def notifyClosed(self):
|
def notifyClosed(self):
|
||||||
self._result = {} # The result should be cleared before hide, because after it is released the main thread lock
|
self._result = {} # The result should be cleared before hide, because after it is released the main thread lock
|
||||||
self._visible = False
|
self._visible = False
|
||||||
|
try:
|
||||||
self._lock.release()
|
self._lock.release()
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
def hide(self):
|
def hide(self):
|
||||||
self._visible = False
|
self._visible = False
|
||||||
self._view.hide()
|
self._view.hide()
|
||||||
|
try:
|
||||||
self._lock.release()
|
self._lock.release()
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
@pyqtSlot()
|
@pyqtSlot()
|
||||||
def onOkButtonClicked(self):
|
def onOkButtonClicked(self):
|
||||||
|
@ -290,7 +296,6 @@ class WorkspaceDialog(QObject):
|
||||||
self._view.hide()
|
self._view.hide()
|
||||||
self.hide()
|
self.hide()
|
||||||
|
|
||||||
|
|
||||||
## Block thread until the dialog is closed.
|
## Block thread until the dialog is closed.
|
||||||
def waitForClose(self):
|
def waitForClose(self):
|
||||||
if self._visible:
|
if self._visible:
|
||||||
|
|
|
@ -10,10 +10,11 @@ import UM 1.1 as UM
|
||||||
|
|
||||||
UM.Dialog
|
UM.Dialog
|
||||||
{
|
{
|
||||||
|
id: base
|
||||||
title: catalog.i18nc("@title:window", "Open Project")
|
title: catalog.i18nc("@title:window", "Open Project")
|
||||||
|
|
||||||
minimumWidth: 500 * screenScaleFactor
|
minimumWidth: 500 * screenScaleFactor
|
||||||
minimumHeight: 400 * screenScaleFactor
|
minimumHeight: 450 * screenScaleFactor
|
||||||
width: minimumWidth
|
width: minimumWidth
|
||||||
height: minimumHeight
|
height: minimumHeight
|
||||||
|
|
||||||
|
@ -30,6 +31,7 @@ UM.Dialog
|
||||||
materialResolveComboBox.currentIndex = 0
|
materialResolveComboBox.currentIndex = 0
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Item
|
Item
|
||||||
{
|
{
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
|
@ -386,4 +388,10 @@ UM.Dialog
|
||||||
anchors.right: parent.right
|
anchors.right: parent.right
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function reject() {
|
||||||
|
manager.onCancelButtonClicked();
|
||||||
|
base.visible = false;
|
||||||
|
base.rejected();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,3 +1,6 @@
|
||||||
|
[3.0.0]
|
||||||
|
*Will be updated soon!
|
||||||
|
|
||||||
[2.7.0]
|
[2.7.0]
|
||||||
*Top surface skin
|
*Top surface skin
|
||||||
Specify print settings of the top-most layers separately in order to improve print duration and achieve higher quality top surfaces.
|
Specify print settings of the top-most layers separately in order to improve print duration and achieve higher quality top surfaces.
|
||||||
|
|
|
@ -441,7 +441,7 @@ class CuraEngineBackend(QObject, Backend):
|
||||||
|
|
||||||
def _onStackErrorCheckFinished(self):
|
def _onStackErrorCheckFinished(self):
|
||||||
self._is_error_check_scheduled = False
|
self._is_error_check_scheduled = False
|
||||||
if self._need_slicing:
|
if not self._slicing and self._need_slicing:
|
||||||
self.needsSlicing()
|
self.needsSlicing()
|
||||||
self._onChanged()
|
self._onChanged()
|
||||||
|
|
||||||
|
@ -536,7 +536,6 @@ class CuraEngineBackend(QObject, Backend):
|
||||||
#
|
#
|
||||||
# \param message The protobuf message containing the print time per feature
|
# \param message The protobuf message containing the print time per feature
|
||||||
def _parseMessagePrintTimes(self, message):
|
def _parseMessagePrintTimes(self, message):
|
||||||
|
|
||||||
result = {
|
result = {
|
||||||
"inset_0": message.time_inset_0,
|
"inset_0": message.time_inset_0,
|
||||||
"inset_x": message.time_inset_x,
|
"inset_x": message.time_inset_x,
|
||||||
|
|
|
@ -247,7 +247,7 @@ Cura.MachineAction
|
||||||
|
|
||||||
Row
|
Row
|
||||||
{
|
{
|
||||||
spacing: UM.Theme.getSize("default_margin").width
|
spacing: UM.Theme.getSize("default_margin").width * 4 / 5
|
||||||
|
|
||||||
Label
|
Label
|
||||||
{
|
{
|
||||||
|
@ -648,7 +648,7 @@ Cura.MachineAction
|
||||||
|
|
||||||
Row
|
Row
|
||||||
{
|
{
|
||||||
spacing: UM.Theme.getSize("default_margin").width
|
spacing: UM.Theme.getSize("default_margin").width * 4 / 5
|
||||||
|
|
||||||
Label
|
Label
|
||||||
{
|
{
|
||||||
|
|
|
@ -321,7 +321,7 @@ Cura.MachineAction
|
||||||
title: catalog.i18nc("@title:window", "Printer Address")
|
title: catalog.i18nc("@title:window", "Printer Address")
|
||||||
|
|
||||||
minimumWidth: 400 * screenScaleFactor
|
minimumWidth: 400 * screenScaleFactor
|
||||||
minimumHeight: 120 * screenScaleFactor
|
minimumHeight: 130 * screenScaleFactor
|
||||||
width: minimumWidth
|
width: minimumWidth
|
||||||
height: minimumHeight
|
height: minimumHeight
|
||||||
|
|
||||||
|
|
|
@ -23,16 +23,14 @@ from PyQt5.QtWidgets import QMessageBox
|
||||||
import json
|
import json
|
||||||
import os
|
import os
|
||||||
import gzip
|
import gzip
|
||||||
import zlib
|
|
||||||
|
|
||||||
from time import time
|
from time import time
|
||||||
from time import sleep
|
|
||||||
from time import gmtime
|
from time import gmtime
|
||||||
|
from enum import IntEnum
|
||||||
|
|
||||||
i18n_catalog = i18nCatalog("cura")
|
i18n_catalog = i18nCatalog("cura")
|
||||||
|
|
||||||
from enum import IntEnum
|
|
||||||
|
|
||||||
class AuthState(IntEnum):
|
class AuthState(IntEnum):
|
||||||
NotAuthenticated = 1
|
NotAuthenticated = 1
|
||||||
AuthenticationRequested = 2
|
AuthenticationRequested = 2
|
||||||
|
@ -335,13 +333,17 @@ class NetworkPrinterOutputDevice(PrinterOutputDevice):
|
||||||
self._camera_timer.stop()
|
self._camera_timer.stop()
|
||||||
|
|
||||||
if self._image_reply:
|
if self._image_reply:
|
||||||
|
skip_abort = False
|
||||||
try:
|
try:
|
||||||
try:
|
try:
|
||||||
self._image_reply.downloadProgress.disconnect(self._onStreamDownloadProgress)
|
self._image_reply.downloadProgress.disconnect(self._onStreamDownloadProgress)
|
||||||
except TypeError:
|
except Exception as e:
|
||||||
|
if type(e) != RuntimeError: # can happen the RuntimeError occurs before calling abort (=see below), then then the application will crash
|
||||||
|
skip_abort = True
|
||||||
pass #The signal was never connected.
|
pass #The signal was never connected.
|
||||||
|
if not skip_abort:
|
||||||
self._image_reply.abort()
|
self._image_reply.abort()
|
||||||
except RuntimeError:
|
except Exception as e: #RuntimeError
|
||||||
pass # It can happen that the wrapped c++ object is already deleted.
|
pass # It can happen that the wrapped c++ object is already deleted.
|
||||||
self._image_reply = None
|
self._image_reply = None
|
||||||
self._image_request = None
|
self._image_request = None
|
||||||
|
@ -528,6 +530,9 @@ class NetworkPrinterOutputDevice(PrinterOutputDevice):
|
||||||
self._last_request_time = time()
|
self._last_request_time = time()
|
||||||
|
|
||||||
def _finalizePostReply(self):
|
def _finalizePostReply(self):
|
||||||
|
# Indicate uploading was finished (so another file can be send)
|
||||||
|
self._write_finished = True
|
||||||
|
|
||||||
if self._post_reply is None:
|
if self._post_reply is None:
|
||||||
return
|
return
|
||||||
|
|
||||||
|
@ -836,6 +841,7 @@ class NetworkPrinterOutputDevice(PrinterOutputDevice):
|
||||||
Logger.log("d", "User aborted sending print to remote.")
|
Logger.log("d", "User aborted sending print to remote.")
|
||||||
self._progress_message.hide()
|
self._progress_message.hide()
|
||||||
self._compressing_print = False
|
self._compressing_print = False
|
||||||
|
self._write_finished = True # post_reply does not always exist, so make sure we unblock writing
|
||||||
if self._post_reply:
|
if self._post_reply:
|
||||||
self._finalizePostReply()
|
self._finalizePostReply()
|
||||||
Application.getInstance().showPrintMonitor.emit(False)
|
Application.getInstance().showPrintMonitor.emit(False)
|
||||||
|
@ -1203,6 +1209,7 @@ class NetworkPrinterOutputDevice(PrinterOutputDevice):
|
||||||
# Remove cached post request items.
|
# Remove cached post request items.
|
||||||
del self._material_post_objects[id(reply)]
|
del self._material_post_objects[id(reply)]
|
||||||
elif "print_job" in reply_url:
|
elif "print_job" in reply_url:
|
||||||
|
self._onUploadFinished() # Make sure the upload flag is reset as reply.finished is not always triggered
|
||||||
try:
|
try:
|
||||||
reply.uploadProgress.disconnect(self._onUploadProgress)
|
reply.uploadProgress.disconnect(self._onUploadProgress)
|
||||||
except:
|
except:
|
||||||
|
|
|
@ -189,7 +189,7 @@ Rectangle
|
||||||
PrintCoreConfiguration
|
PrintCoreConfiguration
|
||||||
{
|
{
|
||||||
id: leftExtruderInfo
|
id: leftExtruderInfo
|
||||||
width: (parent.width - extruderSeperator.width) / 2
|
width: Math.floor((parent.width - extruderSeperator.width) / 2)
|
||||||
printCoreConfiguration: printer.configuration[0]
|
printCoreConfiguration: printer.configuration[0]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -204,7 +204,7 @@ Rectangle
|
||||||
PrintCoreConfiguration
|
PrintCoreConfiguration
|
||||||
{
|
{
|
||||||
id: rightExtruderInfo
|
id: rightExtruderInfo
|
||||||
width: (parent.width - extruderSeperator.width) / 2
|
width: Math.floor((parent.width - extruderSeperator.width) / 2)
|
||||||
printCoreConfiguration: printer.configuration[1]
|
printCoreConfiguration: printer.configuration[1]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -404,6 +404,8 @@ Rectangle
|
||||||
anchors.left: parent.left
|
anchors.left: parent.left
|
||||||
anchors.right: parent.right
|
anchors.right: parent.right
|
||||||
elide: Text.ElideRight
|
elide: Text.ElideRight
|
||||||
|
wrapMode: Text.Wrap
|
||||||
|
|
||||||
font: UM.Theme.getFont("default")
|
font: UM.Theme.getFont("default")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -127,7 +127,12 @@ class VersionUpgrade25to26(VersionUpgrade):
|
||||||
machine_id = parser["general"]["id"]
|
machine_id = parser["general"]["id"]
|
||||||
quality_container_id = parser["containers"]["2"]
|
quality_container_id = parser["containers"]["2"]
|
||||||
material_container_id = parser["containers"]["3"]
|
material_container_id = parser["containers"]["3"]
|
||||||
|
|
||||||
|
# we don't have definition_changes container in 2.5
|
||||||
|
if "6" in parser["containers"]:
|
||||||
definition_container_id = parser["containers"]["6"]
|
definition_container_id = parser["containers"]["6"]
|
||||||
|
else:
|
||||||
|
definition_container_id = parser["containers"]["5"]
|
||||||
|
|
||||||
if definition_container_id == "custom" and not self._checkCustomFdmPrinterHasExtruderStack(machine_id):
|
if definition_container_id == "custom" and not self._checkCustomFdmPrinterHasExtruderStack(machine_id):
|
||||||
# go through all extruders and make sure that this custom FDM printer has 8 extruder stacks.
|
# go through all extruders and make sure that this custom FDM printer has 8 extruder stacks.
|
||||||
|
|
|
@ -117,7 +117,24 @@ class VersionUpgrade27to30(VersionUpgrade):
|
||||||
# Set the definition to "ultimaker2" for Ultimaker 2 quality changes
|
# Set the definition to "ultimaker2" for Ultimaker 2 quality changes
|
||||||
if not parser.has_section("general"):
|
if not parser.has_section("general"):
|
||||||
parser.add_section("general")
|
parser.add_section("general")
|
||||||
if os.path.basename(filename).startswith("ultimaker2_"):
|
|
||||||
|
# Need to exclude the following names:
|
||||||
|
# - ultimaker2_plus
|
||||||
|
# - ultimaker2_go
|
||||||
|
# - ultimaker2_extended
|
||||||
|
# - ultimaker2_extended_plus
|
||||||
|
exclude_prefix_list = ["ultimaker2_plus_",
|
||||||
|
"ultimaker2_go_",
|
||||||
|
"ultimaker2_extended_",
|
||||||
|
"ultimaker2_extended_plus_"]
|
||||||
|
file_base_name = os.path.basename(filename)
|
||||||
|
if file_base_name.startswith("ultimaker2_"):
|
||||||
|
skip_this = False
|
||||||
|
for exclude_prefix in exclude_prefix_list:
|
||||||
|
if file_base_name.startswith(exclude_prefix):
|
||||||
|
skip_this = True
|
||||||
|
break
|
||||||
|
if not skip_this:
|
||||||
parser["general"]["definition"] = "ultimaker2"
|
parser["general"]["definition"] = "ultimaker2"
|
||||||
|
|
||||||
# Update version numbers
|
# Update version numbers
|
||||||
|
|
|
@ -16,8 +16,8 @@ TabView
|
||||||
|
|
||||||
property bool editingEnabled: false;
|
property bool editingEnabled: false;
|
||||||
property string currency: UM.Preferences.getValue("cura/currency") ? UM.Preferences.getValue("cura/currency") : "€"
|
property string currency: UM.Preferences.getValue("cura/currency") ? UM.Preferences.getValue("cura/currency") : "€"
|
||||||
property real firstColumnWidth: (width * 0.45) | 0
|
property real firstColumnWidth: (width * 0.50) | 0
|
||||||
property real secondColumnWidth: (width * 0.45) | 0
|
property real secondColumnWidth: (width * 0.40) | 0
|
||||||
property string containerId: ""
|
property string containerId: ""
|
||||||
property var materialPreferenceValues: UM.Preferences.getValue("cura/material_settings") ? JSON.parse(UM.Preferences.getValue("cura/material_settings")) : {}
|
property var materialPreferenceValues: UM.Preferences.getValue("cura/material_settings") ? JSON.parse(UM.Preferences.getValue("cura/material_settings")) : {}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue