fix merge conflicts

This commit is contained in:
ChrisTerBeke 2017-10-10 09:21:31 +02:00
commit 641b3c21f7
13 changed files with 79 additions and 27 deletions

View file

@ -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.

View file

@ -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

View file

@ -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
self._lock.release() try:
self._lock.release()
except:
pass
def hide(self): def hide(self):
self._visible = False self._visible = False
self._view.hide() self._view.hide()
self._lock.release() try:
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:

View file

@ -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
@ -377,7 +379,7 @@ UM.Dialog
anchors.right: ok_button.left anchors.right: ok_button.left
anchors.rightMargin: 2 * screenScaleFactor anchors.rightMargin: 2 * screenScaleFactor
} }
Button Button
{ {
id: ok_button id: ok_button
text: catalog.i18nc("@action:button","Open"); text: catalog.i18nc("@action:button","Open");
@ -386,4 +388,10 @@ UM.Dialog
anchors.right: parent.right anchors.right: parent.right
} }
} }
function reject() {
manager.onCancelButtonClicked();
base.visible = false;
base.rejected();
}
} }

View file

@ -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.

View file

@ -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,

View file

@ -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
{ {

View file

@ -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

View file

@ -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:
pass #The signal was never connected. if type(e) != RuntimeError: # can happen the RuntimeError occurs before calling abort (=see below), then then the application will crash
self._image_reply.abort() skip_abort = True
except RuntimeError: pass #The signal was never connected.
if not skip_abort:
self._image_reply.abort()
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:

View file

@ -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")
} }

View file

@ -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"]
definition_container_id = parser["containers"]["6"]
# we don't have definition_changes container in 2.5
if "6" in parser["containers"]:
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.

View file

@ -117,8 +117,25 @@ 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_"):
parser["general"]["definition"] = "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"
# Update version numbers # Update version numbers
parser["general"]["version"] = "2" parser["general"]["version"] = "2"

View file

@ -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")) : {}