Merge branch 'master' of github.com:Ultimaker/Cura

This commit is contained in:
Jack Ha 2017-02-20 09:45:51 +01:00
commit cd54552498
12 changed files with 364 additions and 350 deletions

View file

@ -704,7 +704,7 @@ class CuraApplication(QtApplication):
sceneBoundingBoxChanged = pyqtSignal() sceneBoundingBoxChanged = pyqtSignal()
@pyqtProperty(bool, notify = activityChanged) @pyqtProperty(bool, notify = activityChanged)
def getPlatformActivity(self): def platformActivity(self):
return self._platform_activity return self._platform_activity
@pyqtProperty(str, notify = sceneBoundingBoxChanged) @pyqtProperty(str, notify = sceneBoundingBoxChanged)

View file

@ -1,19 +1,19 @@
# Copyright (c) 2016 Ultimaker B.V. # Copyright (c) 2017 Ultimaker B.V.
# Uranium is released under the terms of the AGPLv3 or higher. # Uranium is released under the terms of the AGPLv3 or higher.
from UM.Settings.Models.SettingVisibilityHandler import SettingVisibilityHandler import UM.Settings.Models.SettingVisibilityHandler
class MaterialSettingsVisibilityHandler(SettingVisibilityHandler): class MaterialSettingsVisibilityHandler(UM.Settings.Models.SettingVisibilityHandler.SettingVisibilityHandler):
def __init__(self, parent = None, *args, **kwargs): def __init__(self, parent = None, *args, **kwargs):
super().__init__(parent = parent, *args, **kwargs) super().__init__(parent = parent, *args, **kwargs)
material_settings = set([ material_settings = {
"default_material_print_temperature", "default_material_print_temperature",
"material_bed_temperature", "material_bed_temperature",
"material_standby_temperature", "material_standby_temperature",
"cool_fan_speed", "cool_fan_speed",
"retraction_amount", "retraction_amount",
"retraction_speed", "retraction_speed",
]) }
self.setVisible(material_settings) self.setVisible(material_settings)

View file

@ -182,7 +182,7 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
self._dialog.setMachineType(machine_type) self._dialog.setMachineType(machine_type)
self._dialog.setExtruders(extruders) self._dialog.setExtruders(extruders)
self._dialog.setVariantType(variant_type_name) self._dialog.setVariantType(variant_type_name)
self._dialog.setHasObjectsOnPlate(Application.getInstance().getPlatformActivity) self._dialog.setHasObjectsOnPlate(Application.getInstance().platformActivity)
self._dialog.show() self._dialog.show()
# Block until the dialog is closed. # Block until the dialog is closed.

View file

@ -247,7 +247,7 @@ class CuraEngineBackend(Backend):
return return
if job.getResult() == StartSliceJob.StartJobResult.MaterialIncompatible: if job.getResult() == StartSliceJob.StartJobResult.MaterialIncompatible:
if Application.getInstance().getPlatformActivity: if Application.getInstance().platformActivity:
self._error_message = Message(catalog.i18nc("@info:status", self._error_message = Message(catalog.i18nc("@info:status",
"The selected material is incompatible with the selected machine or configuration.")) "The selected material is incompatible with the selected machine or configuration."))
self._error_message.show() self._error_message.show()
@ -257,7 +257,7 @@ class CuraEngineBackend(Backend):
return return
if job.getResult() == StartSliceJob.StartJobResult.SettingError: if job.getResult() == StartSliceJob.StartJobResult.SettingError:
if Application.getInstance().getPlatformActivity: if Application.getInstance().platformActivity:
extruders = list(ExtruderManager.getInstance().getMachineExtruders(self._global_container_stack.getId())) extruders = list(ExtruderManager.getInstance().getMachineExtruders(self._global_container_stack.getId()))
error_keys = [] error_keys = []
for extruder in extruders: for extruder in extruders:
@ -278,7 +278,7 @@ class CuraEngineBackend(Backend):
return return
if job.getResult() == StartSliceJob.StartJobResult.BuildPlateError: if job.getResult() == StartSliceJob.StartJobResult.BuildPlateError:
if Application.getInstance().getPlatformActivity: if Application.getInstance().platformActivity:
self._error_message = Message(catalog.i18nc("@info:status", "Unable to slice because the prime tower or prime position(s) are invalid.")) self._error_message = Message(catalog.i18nc("@info:status", "Unable to slice because the prime tower or prime position(s) are invalid."))
self._error_message.show() self._error_message.show()
self.backendStateChange.emit(BackendState.Error) self.backendStateChange.emit(BackendState.Error)
@ -286,7 +286,7 @@ class CuraEngineBackend(Backend):
self.backendStateChange.emit(BackendState.NotStarted) self.backendStateChange.emit(BackendState.NotStarted)
if job.getResult() == StartSliceJob.StartJobResult.NothingToSlice: if job.getResult() == StartSliceJob.StartJobResult.NothingToSlice:
if Application.getInstance().getPlatformActivity: if Application.getInstance().platformActivity:
self._error_message = Message(catalog.i18nc("@info:status", "Nothing to slice because none of the models fit the build volume. Please scale or rotate models to fit.")) self._error_message = Message(catalog.i18nc("@info:status", "Nothing to slice because none of the models fit the build volume. Please scale or rotate models to fit."))
self._error_message.show() self._error_message.show()
self.backendStateChange.emit(BackendState.Error) self.backendStateChange.emit(BackendState.Error)

View file

@ -325,7 +325,7 @@ class LayerView(View):
self._old_composite_shader = self._composite_pass.getCompositeShader() self._old_composite_shader = self._composite_pass.getCompositeShader()
self._composite_pass.setCompositeShader(self._layerview_composite_shader) self._composite_pass.setCompositeShader(self._layerview_composite_shader)
if self.getLayerViewType() == self.LAYER_VIEW_TYPE_LINE_TYPE: if self.getLayerViewType() == self.LAYER_VIEW_TYPE_LINE_TYPE or self._compatibility_mode:
self.enableLegend() self.enableLegend()
elif event.type == Event.ViewDeactivateEvent: elif event.type == Event.ViewDeactivateEvent:

View file

@ -75,7 +75,7 @@ Item
border.color: UM.Theme.getColor("slider_groove_border") border.color: UM.Theme.getColor("slider_groove_border")
color: UM.Theme.getColor("tool_panel_background") color: UM.Theme.getColor("tool_panel_background")
visible: UM.LayerView.getLayerActivity && Printer.getPlatformActivity ? true : false visible: UM.LayerView.layerActivity && Printer.platformActivity ? true : false
TextField TextField
{ {
@ -250,7 +250,7 @@ Item
UM.Preferences.setValue("layerview/extruder0_opacity", checked ? 1.0 : 0.0); UM.Preferences.setValue("layerview/extruder0_opacity", checked ? 1.0 : 0.0);
} }
text: "Extruder 1" text: "Extruder 1"
visible: !UM.LayerView.compatibilityMode && (UM.LayerView.getExtruderCount >= 1) visible: !UM.LayerView.compatibilityMode && (UM.LayerView.extruderCount >= 1)
} }
CheckBox { CheckBox {
checked: view_settings.extruder1_checked checked: view_settings.extruder1_checked
@ -258,7 +258,7 @@ Item
UM.Preferences.setValue("layerview/extruder1_opacity", checked ? 1.0 : 0.0); UM.Preferences.setValue("layerview/extruder1_opacity", checked ? 1.0 : 0.0);
} }
text: "Extruder 2" text: "Extruder 2"
visible: !UM.LayerView.compatibilityMode && (UM.LayerView.getExtruderCount >= 2) visible: !UM.LayerView.compatibilityMode && (UM.LayerView.extruderCount >= 2)
} }
CheckBox { CheckBox {
checked: view_settings.extruder2_checked checked: view_settings.extruder2_checked
@ -266,7 +266,7 @@ Item
UM.Preferences.setValue("layerview/extruder2_opacity", checked ? 1.0 : 0.0); UM.Preferences.setValue("layerview/extruder2_opacity", checked ? 1.0 : 0.0);
} }
text: "Extruder 3" text: "Extruder 3"
visible: !UM.LayerView.compatibilityMode && (UM.LayerView.getExtruderCount >= 3) visible: !UM.LayerView.compatibilityMode && (UM.LayerView.etruderCount >= 3)
} }
CheckBox { CheckBox {
checked: view_settings.extruder3_checked checked: view_settings.extruder3_checked
@ -274,11 +274,11 @@ Item
UM.Preferences.setValue("layerview/extruder3_opacity", checked ? 1.0 : 0.0); UM.Preferences.setValue("layerview/extruder3_opacity", checked ? 1.0 : 0.0);
} }
text: "Extruder 4" text: "Extruder 4"
visible: !UM.LayerView.compatibilityMode && (UM.LayerView.getExtruderCount >= 4) visible: !UM.LayerView.compatibilityMode && (UM.LayerView.extruderCount >= 4)
} }
Label { Label {
text: "Other extruders always visible" text: "Other extruders always visible"
visible: !UM.LayerView.compatibilityMode && (UM.LayerView.getExtruderCount >= 5) visible: !UM.LayerView.compatibilityMode && (UM.LayerView.extruderCount >= 5)
} }
CheckBox { CheckBox {
checked: view_settings.show_travel_moves checked: view_settings.show_travel_moves

View file

@ -20,7 +20,7 @@ class LayerViewProxy(QObject):
preferencesChanged = pyqtSignal() preferencesChanged = pyqtSignal()
@pyqtProperty(bool, notify = activityChanged) @pyqtProperty(bool, notify = activityChanged)
def getLayerActivity(self): def layerActivity(self):
active_view = self._controller.getActiveView() active_view = self._controller.getActiveView()
if type(active_view) == LayerView.LayerView.LayerView: if type(active_view) == LayerView.LayerView.LayerView:
return active_view.getActivity() return active_view.getActivity()
@ -79,7 +79,7 @@ class LayerViewProxy(QObject):
if type(active_view) == LayerView.LayerView.LayerView: if type(active_view) == LayerView.LayerView.LayerView:
active_view.setLayerViewType(layer_view_type) active_view.setLayerViewType(layer_view_type)
@pyqtProperty(bool) @pyqtSlot(result = int)
def getLayerViewType(self): def getLayerViewType(self):
active_view = self._controller.getActiveView() active_view = self._controller.getActiveView()
if type(active_view) == LayerView.LayerView.LayerView: if type(active_view) == LayerView.LayerView.LayerView:
@ -124,7 +124,7 @@ class LayerViewProxy(QObject):
active_view.setShowInfill(show) active_view.setShowInfill(show)
@pyqtProperty(int, notify = globalStackChanged) @pyqtProperty(int, notify = globalStackChanged)
def getExtruderCount(self): def extruderCount(self):
active_view = self._controller.getActiveView() active_view = self._controller.getActiveView()
if type(active_view) == LayerView.LayerView.LayerView: if type(active_view) == LayerView.LayerView.LayerView:
return active_view.getExtruderCount() return active_view.getExtruderCount()

View file

@ -73,68 +73,76 @@ UM.Dialog
anchors.topMargin: UM.Theme.getSize("default_margin").height anchors.topMargin: UM.Theme.getSize("default_margin").height
} }
ListView ScrollView
{ {
id: projectsList
anchors.top: creditsNotes.bottom anchors.top: creditsNotes.bottom
anchors.topMargin: 10 anchors.topMargin: UM.Theme.getSize("default_margin").height
width: parent.width width: parent.width
height: childrenRect.height height: base.height - y - (2 * UM.Theme.getSize("default_margin").height + closeButton.height)
delegate: Row ListView
{ {
Label id: projectsList
{
text: "<a href='%1' title='%2'>%2</a>".arg(model.url).arg(model.name)
width: projectsList.width * 0.25
elide: Text.ElideRight
onLinkActivated: Qt.openUrlExternally(link)
}
Label
{
text: model.description
elide: Text.ElideRight
width: projectsList.width * 0.6
}
Label
{
text: model.license
elide: Text.ElideRight
width: projectsList.width * 0.15
}
}
model: ListModel
{
id: projectsModel
}
Component.onCompleted:
{
projectsModel.append({ name:"Cura", description: catalog.i18nc("@label", "Graphical user interface"), license: "AGPLv3", url: "https://github.com/Ultimaker/Cura" });
projectsModel.append({ name:"Uranium", description: catalog.i18nc("@label", "Application framework"), license: "AGPLv3", url: "https://github.com/Ultimaker/Uranium" });
projectsModel.append({ name:"CuraEngine", description: catalog.i18nc("@label", "GCode generator"), license: "AGPLv3", url: "https://github.com/Ultimaker/CuraEngine" });
projectsModel.append({ name:"libArcus", description: catalog.i18nc("@label", "Interprocess communication library"), license: "AGPLv3", url: "https://github.com/Ultimaker/libArcus" });
projectsModel.append({ name:"Python", description: catalog.i18nc("@label", "Programming language"), license: "Python", url: "http://python.org/" }); width: parent.width
projectsModel.append({ name:"Qt5", description: catalog.i18nc("@label", "GUI framework"), license: "LGPLv3", url: "https://www.qt.io/" });
projectsModel.append({ name:"PyQt", description: catalog.i18nc("@label", "GUI framework bindings"), license: "GPL", url: "https://riverbankcomputing.com/software/pyqt" }); delegate: Row
projectsModel.append({ name:"SIP", description: catalog.i18nc("@label", "C/C++ Binding library"), license: "GPL", url: "https://riverbankcomputing.com/software/sip" }); {
projectsModel.append({ name:"Protobuf", description: catalog.i18nc("@label", "Data interchange format"), license: "BSD", url: "https://developers.google.com/protocol-buffers" }); Label
projectsModel.append({ name:"SciPy", description: catalog.i18nc("@label", "Support library for scientific computing "), license: "BSD-new", url: "https://www.scipy.org/" }); {
projectsModel.append({ name:"NumPy", description: catalog.i18nc("@label", "Support library for faster math"), license: "BSD", url: "http://www.numpy.org/" }); text: "<a href='%1' title='%2'>%2</a>".arg(model.url).arg(model.name)
projectsModel.append({ name:"NumPy-STL", description: catalog.i18nc("@label", "Support library for handling STL files"), license: "BSD", url: "https://github.com/WoLpH/numpy-stl" }); width: (projectsList.width * 0.25) | 0
projectsModel.append({ name:"PySerial", description: catalog.i18nc("@label", "Serial communication library"), license: "Python", url: "http://pyserial.sourceforge.net/" }); elide: Text.ElideRight
projectsModel.append({ name:"python-zeroconf", description: catalog.i18nc("@label", "ZeroConf discovery library"), license: "LGPL", url: "https://github.com/jstasiak/python-zeroconf" }); onLinkActivated: Qt.openUrlExternally(link)
projectsModel.append({ name:"Clipper", description: catalog.i18nc("@label", "Polygon clipping library"), license: "Boost", url: "http://www.angusj.com/delphi/clipper.php" }); }
projectsModel.append({ name:"Open Sans", description: catalog.i18nc("@label", "Font"), license: "Apache 2.0", url: "https://fonts.google.com/specimen/Open+Sans" }); Label
projectsModel.append({ name:"Font-Awesome-SVG-PNG", description: catalog.i18nc("@label", "SVG icons"), license: "SIL OFL 1.1", url: "https://github.com/encharm/Font-Awesome-SVG-PNG" }); {
text: model.description
elide: Text.ElideRight
width: (projectsList.width * 0.6) | 0
}
Label
{
text: model.license
elide: Text.ElideRight
width: (projectsList.width * 0.15) | 0
}
}
model: ListModel
{
id: projectsModel
}
Component.onCompleted:
{
projectsModel.append({ name:"Cura", description: catalog.i18nc("@label", "Graphical user interface"), license: "AGPLv3", url: "https://github.com/Ultimaker/Cura" });
projectsModel.append({ name:"Uranium", description: catalog.i18nc("@label", "Application framework"), license: "AGPLv3", url: "https://github.com/Ultimaker/Uranium" });
projectsModel.append({ name:"CuraEngine", description: catalog.i18nc("@label", "GCode generator"), license: "AGPLv3", url: "https://github.com/Ultimaker/CuraEngine" });
projectsModel.append({ name:"libArcus", description: catalog.i18nc("@label", "Interprocess communication library"), license: "AGPLv3", url: "https://github.com/Ultimaker/libArcus" });
projectsModel.append({ name:"Python", description: catalog.i18nc("@label", "Programming language"), license: "Python", url: "http://python.org/" });
projectsModel.append({ name:"Qt5", description: catalog.i18nc("@label", "GUI framework"), license: "LGPLv3", url: "https://www.qt.io/" });
projectsModel.append({ name:"PyQt", description: catalog.i18nc("@label", "GUI framework bindings"), license: "GPL", url: "https://riverbankcomputing.com/software/pyqt" });
projectsModel.append({ name:"SIP", description: catalog.i18nc("@label", "C/C++ Binding library"), license: "GPL", url: "https://riverbankcomputing.com/software/sip" });
projectsModel.append({ name:"Protobuf", description: catalog.i18nc("@label", "Data interchange format"), license: "BSD", url: "https://developers.google.com/protocol-buffers" });
projectsModel.append({ name:"SciPy", description: catalog.i18nc("@label", "Support library for scientific computing "), license: "BSD-new", url: "https://www.scipy.org/" });
projectsModel.append({ name:"NumPy", description: catalog.i18nc("@label", "Support library for faster math"), license: "BSD", url: "http://www.numpy.org/" });
projectsModel.append({ name:"NumPy-STL", description: catalog.i18nc("@label", "Support library for handling STL files"), license: "BSD", url: "https://github.com/WoLpH/numpy-stl" });
projectsModel.append({ name:"libSavitar", description: catalog.i18nc("@label", "Support library for handling 3MF files"), license: "AGPLv3", url: "https://github.com/ultimaker/libsavitar" });
projectsModel.append({ name:"PySerial", description: catalog.i18nc("@label", "Serial communication library"), license: "Python", url: "http://pyserial.sourceforge.net/" });
projectsModel.append({ name:"python-zeroconf", description: catalog.i18nc("@label", "ZeroConf discovery library"), license: "LGPL", url: "https://github.com/jstasiak/python-zeroconf" });
projectsModel.append({ name:"Clipper", description: catalog.i18nc("@label", "Polygon clipping library"), license: "Boost", url: "http://www.angusj.com/delphi/clipper.php" });
projectsModel.append({ name:"Open Sans", description: catalog.i18nc("@label", "Font"), license: "Apache 2.0", url: "https://fonts.google.com/specimen/Open+Sans" });
projectsModel.append({ name:"Font-Awesome-SVG-PNG", description: catalog.i18nc("@label", "SVG icons"), license: "SIL OFL 1.1", url: "https://github.com/encharm/Font-Awesome-SVG-PNG" });
}
} }
} }
rightButtons: Button rightButtons: Button
{ {
//: Close about dialog button //: Close about dialog button
id: closeButton
text: catalog.i18nc("@action:button","Close"); text: catalog.i18nc("@action:button","Close");
onClicked: base.visible = false; onClicked: base.visible = false;

View file

@ -12,7 +12,7 @@ import Cura 1.0 as Cura
Item { Item {
id: base id: base
property bool activity: Printer.getPlatformActivity property bool activity: Printer.platformActivity
property string fileBaseName property string fileBaseName
property variant activeMachineName: Cura.MachineManager.activeMachineName property variant activeMachineName: Cura.MachineManager.activeMachineName

View file

@ -80,7 +80,7 @@ Item
} }
} }
property bool activity: Printer.getPlatformActivity; property bool activity: Printer.platformActivity;
property int totalHeight: childrenRect.height + UM.Theme.getSize("default_margin").height property int totalHeight: childrenRect.height + UM.Theme.getSize("default_margin").height
property string fileBaseName property string fileBaseName
property string statusText: property string statusText:

View file

@ -58,337 +58,343 @@ UM.PreferencesPage
} }
} }
Column ScrollView
{ {
//: Model used to check if a plugin exists width: parent.width
UM.PluginsModel { id: plugins } height: parent.height
//: Language selection label Column
UM.I18nCatalog{id: catalog; name:"cura"}
Label
{ {
font.bold: true //: Model used to check if a plugin exists
text: catalog.i18nc("@label","Interface") UM.PluginsModel { id: plugins }
}
//: Language selection label
UM.I18nCatalog{id: catalog; name:"cura"}
Row
{
spacing: UM.Theme.getSize("default_margin").width
Label Label
{ {
id: languageLabel font.bold: true
text: catalog.i18nc("@label","Language:") text: catalog.i18nc("@label","Interface")
anchors.verticalCenter: languageComboBox.verticalCenter
} }
ComboBox Row
{ {
id: languageComboBox spacing: UM.Theme.getSize("default_margin").width
model: ListModel Label
{ {
id: languageList id: languageLabel
text: catalog.i18nc("@label","Language:")
anchors.verticalCenter: languageComboBox.verticalCenter
}
Component.onCompleted: { ComboBox
append({ text: "English", code: "en" }) {
append({ text: "Deutsch", code: "de" }) id: languageComboBox
append({ text: "Español", code: "es" }) model: ListModel
append({ text: "Suomi", code: "fi" }) {
append({ text: "Français", code: "fr" }) id: languageList
append({ text: "Italiano", code: "it" })
append({ text: "Nederlands", code: "nl" }) Component.onCompleted: {
append({ text: "Português do Brasil", code: "ptbr" }) append({ text: "English", code: "en" })
append({ text: "Русский", code: "ru" }) append({ text: "Deutsch", code: "de" })
append({ text: "Türkçe", code: "tr" }) append({ text: "Español", code: "es" })
append({ text: "Suomi", code: "fi" })
append({ text: "Français", code: "fr" })
append({ text: "Italiano", code: "it" })
append({ text: "Nederlands", code: "nl" })
append({ text: "Português do Brasil", code: "ptbr" })
append({ text: "Русский", code: "ru" })
append({ text: "Türkçe", code: "tr" })
}
}
currentIndex:
{
var code = UM.Preferences.getValue("general/language");
for(var i = 0; i < languageList.count; ++i)
{
if(model.get(i).code == code)
{
return i
}
}
}
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;
} }
} }
currentIndex: Label
{ {
var code = UM.Preferences.getValue("general/language"); id: currencyLabel
for(var i = 0; i < languageList.count; ++i) text: catalog.i18nc("@label","Currency:")
anchors.verticalCenter: languageComboBox.verticalCenter
}
TextField
{
id: currencyField
text: UM.Preferences.getValue("cura/currency")
onTextChanged: UM.Preferences.setValue("cura/currency", text)
}
}
Label
{
id: languageCaption
//: Language change warning
text: catalog.i18nc("@label", "You will need to restart the application for language changes to have effect.")
wrapMode: Text.WordWrap
font.italic: true
}
Item
{
//: Spacer
height: UM.Theme.getSize("default_margin").height
width: UM.Theme.getSize("default_margin").width
}
Label
{
font.bold: true
text: catalog.i18nc("@label","Viewport behavior")
}
UM.TooltipArea
{
width: childrenRect.width;
height: childrenRect.height;
text: catalog.i18nc("@info:tooltip","Highlight unsupported areas of the model in red. Without support these areas will not print properly.")
CheckBox
{
id: showOverhangCheckbox
checked: boolCheck(UM.Preferences.getValue("view/show_overhang"))
onClicked: UM.Preferences.setValue("view/show_overhang", checked)
text: catalog.i18nc("@option:check","Display overhang");
}
}
UM.TooltipArea {
width: childrenRect.width;
height: childrenRect.height;
text: catalog.i18nc("@info:tooltip","Moves the camera so the model is in the center of the view when an model is selected")
CheckBox
{
id: centerOnSelectCheckbox
text: catalog.i18nc("@action:button","Center camera when item is selected");
checked: boolCheck(UM.Preferences.getValue("view/center_on_select"))
onClicked: UM.Preferences.setValue("view/center_on_select", checked)
}
}
UM.TooltipArea {
width: childrenRect.width
height: childrenRect.height
text: catalog.i18nc("@info:tooltip", "Should models on the platform be moved so that they no longer intersect?")
CheckBox
{
id: pushFreeCheckbox
text: catalog.i18nc("@option:check", "Ensure models are kept apart")
checked: boolCheck(UM.Preferences.getValue("physics/automatic_push_free"))
onCheckedChanged: UM.Preferences.setValue("physics/automatic_push_free", checked)
}
}
UM.TooltipArea {
width: childrenRect.width
height: childrenRect.height
text: catalog.i18nc("@info:tooltip", "Should models on the platform be moved down to touch the build plate?")
CheckBox
{
id: dropDownCheckbox
text: catalog.i18nc("@option:check", "Automatically drop models to the build plate")
checked: boolCheck(UM.Preferences.getValue("physics/automatic_drop_down"))
onCheckedChanged: UM.Preferences.setValue("physics/automatic_drop_down", checked)
}
}
UM.TooltipArea {
width: childrenRect.width;
height: childrenRect.height;
text: catalog.i18nc("@info:tooltip","Display 5 top layers in layer view or only the top-most layer. Rendering 5 layers takes longer, but may show more information.")
CheckBox
{
id: topLayerCountCheckbox
text: catalog.i18nc("@action:button","Display five top layers in layer view compatibility mode");
checked: UM.Preferences.getValue("view/top_layer_count") == 5
onClicked:
{ {
if(model.get(i).code == code) if(UM.Preferences.getValue("view/top_layer_count") == 5)
{ {
return i UM.Preferences.setValue("view/top_layer_count", 1)
}
else
{
UM.Preferences.setValue("view/top_layer_count", 5)
} }
} }
} }
onActivated: UM.Preferences.setValue("general/language", model.get(index).code) }
Component.onCompleted: UM.TooltipArea {
width: childrenRect.width
height: childrenRect.height
text: catalog.i18nc("@info:tooltip", "Should only the top layers be displayed in layerview?")
CheckBox
{ {
// Because ListModel is stupid and does not allow using qsTr() for values. id: topLayersOnlyCheckbox
for(var i = 0; i < languageList.count; ++i) text: catalog.i18nc("@option:check", "Only display top layer(s) in layer view compatibility mode")
{ checked: boolCheck(UM.Preferences.getValue("view/only_show_top_layers"))
languageList.setProperty(i, "text", catalog.i18n(languageList.get(i).text)); onCheckedChanged: UM.Preferences.setValue("view/only_show_top_layers", checked)
}
// 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;
} }
} }
UM.TooltipArea {
width: childrenRect.width
height: childrenRect.height
text: catalog.i18nc("@info:tooltip", "Should layer be forced into compatibility mode?")
CheckBox
{
id: forceLayerViewCompatibilityModeCheckbox
text: catalog.i18nc("@option:check", "Force layer view compatibility mode (restart required)")
checked: boolCheck(UM.Preferences.getValue("view/force_layer_view_compatibility_mode"))
onCheckedChanged: UM.Preferences.setValue("view/force_layer_view_compatibility_mode", checked)
}
}
Item
{
//: Spacer
height: UM.Theme.getSize("default_margin").height
width: UM.Theme.getSize("default_margin").height
}
Label Label
{ {
id: currencyLabel font.bold: true
text: catalog.i18nc("@label","Currency:") text: catalog.i18nc("@label","Opening files")
anchors.verticalCenter: languageComboBox.verticalCenter
} }
TextField
{
id: currencyField
text: UM.Preferences.getValue("cura/currency")
onTextChanged: UM.Preferences.setValue("cura/currency", text)
}
}
Label UM.TooltipArea {
{ width: childrenRect.width
id: languageCaption height: childrenRect.height
text: catalog.i18nc("@info:tooltip","Should models be scaled to the build volume if they are too large?")
//: Language change warning CheckBox
text: catalog.i18nc("@label", "You will need to restart the application for language changes to have effect.")
wrapMode: Text.WordWrap
font.italic: true
}
Item
{
//: Spacer
height: UM.Theme.getSize("default_margin").height
width: UM.Theme.getSize("default_margin").width
}
Label
{
font.bold: true
text: catalog.i18nc("@label","Viewport behavior")
}
UM.TooltipArea
{
width: childrenRect.width;
height: childrenRect.height;
text: catalog.i18nc("@info:tooltip","Highlight unsupported areas of the model in red. Without support these areas will not print properly.")
CheckBox
{
id: showOverhangCheckbox
checked: boolCheck(UM.Preferences.getValue("view/show_overhang"))
onClicked: UM.Preferences.setValue("view/show_overhang", checked)
text: catalog.i18nc("@option:check","Display overhang");
}
}
UM.TooltipArea {
width: childrenRect.width;
height: childrenRect.height;
text: catalog.i18nc("@info:tooltip","Moves the camera so the model is in the center of the view when an model is selected")
CheckBox
{
id: centerOnSelectCheckbox
text: catalog.i18nc("@action:button","Center camera when item is selected");
checked: boolCheck(UM.Preferences.getValue("view/center_on_select"))
onClicked: UM.Preferences.setValue("view/center_on_select", checked)
}
}
UM.TooltipArea {
width: childrenRect.width
height: childrenRect.height
text: catalog.i18nc("@info:tooltip", "Should models on the platform be moved so that they no longer intersect?")
CheckBox
{
id: pushFreeCheckbox
text: catalog.i18nc("@option:check", "Ensure models are kept apart")
checked: boolCheck(UM.Preferences.getValue("physics/automatic_push_free"))
onCheckedChanged: UM.Preferences.setValue("physics/automatic_push_free", checked)
}
}
UM.TooltipArea {
width: childrenRect.width
height: childrenRect.height
text: catalog.i18nc("@info:tooltip", "Should models on the platform be moved down to touch the build plate?")
CheckBox
{
id: dropDownCheckbox
text: catalog.i18nc("@option:check", "Automatically drop models to the build plate")
checked: boolCheck(UM.Preferences.getValue("physics/automatic_drop_down"))
onCheckedChanged: UM.Preferences.setValue("physics/automatic_drop_down", checked)
}
}
UM.TooltipArea {
width: childrenRect.width;
height: childrenRect.height;
text: catalog.i18nc("@info:tooltip","Display 5 top layers in layer view or only the top-most layer. Rendering 5 layers takes longer, but may show more information.")
CheckBox
{
id: topLayerCountCheckbox
text: catalog.i18nc("@action:button","Display five top layers in layer view compatibility mode");
checked: UM.Preferences.getValue("view/top_layer_count") == 5
onClicked:
{ {
if(UM.Preferences.getValue("view/top_layer_count") == 5) id: scaleToFitCheckbox
{ text: catalog.i18nc("@option:check","Scale large models")
UM.Preferences.setValue("view/top_layer_count", 1) checked: boolCheck(UM.Preferences.getValue("mesh/scale_to_fit"))
} onCheckedChanged: UM.Preferences.setValue("mesh/scale_to_fit", checked)
else
{
UM.Preferences.setValue("view/top_layer_count", 5)
}
} }
} }
}
UM.TooltipArea { UM.TooltipArea {
width: childrenRect.width width: childrenRect.width
height: childrenRect.height height: childrenRect.height
text: catalog.i18nc("@info:tooltip", "Should only the top layers be displayed in layerview?") text: catalog.i18nc("@info:tooltip","An model may appear extremely small if its unit is for example in meters rather than millimeters. Should these models be scaled up?")
CheckBox CheckBox
{ {
id: topLayersOnlyCheckbox id: scaleTinyCheckbox
text: catalog.i18nc("@option:check", "Only display top layer(s) in layer view compatibility mode") text: catalog.i18nc("@option:check","Scale extremely small models")
checked: boolCheck(UM.Preferences.getValue("view/only_show_top_layers")) checked: boolCheck(UM.Preferences.getValue("mesh/scale_tiny_meshes"))
onCheckedChanged: UM.Preferences.setValue("view/only_show_top_layers", checked) onCheckedChanged: UM.Preferences.setValue("mesh/scale_tiny_meshes", checked)
}
} }
}
UM.TooltipArea { UM.TooltipArea {
width: childrenRect.width width: childrenRect.width
height: childrenRect.height height: childrenRect.height
text: catalog.i18nc("@info:tooltip", "Should layer be forced into compatibility mode?") text: catalog.i18nc("@info:tooltip", "Should a prefix based on the printer name be added to the print job name automatically?")
CheckBox CheckBox
{ {
id: forceLayerViewCompatibilityModeCheckbox id: prefixJobNameCheckbox
text: catalog.i18nc("@option:check", "Force layer view compatibility mode (restart required)") text: catalog.i18nc("@option:check", "Add machine prefix to job name")
checked: boolCheck(UM.Preferences.getValue("view/force_layer_view_compatibility_mode")) checked: boolCheck(UM.Preferences.getValue("cura/jobname_prefix"))
onCheckedChanged: UM.Preferences.setValue("view/force_layer_view_compatibility_mode", checked) onCheckedChanged: UM.Preferences.setValue("cura/jobname_prefix", checked)
}
} }
}
Item UM.TooltipArea {
{ width: childrenRect.width
//: Spacer height: childrenRect.height
height: UM.Theme.getSize("default_margin").height text: catalog.i18nc("@info:tooltip", "Should a summary be shown when saving a project file?")
width: UM.Theme.getSize("default_margin").height
}
Label CheckBox
{ {
font.bold: true text: catalog.i18nc("@option:check", "Show summary dialog when saving project")
text: catalog.i18nc("@label","Opening files") checked: boolCheck(UM.Preferences.getValue("cura/dialog_on_project_save"))
} onCheckedChanged: UM.Preferences.setValue("cura/dialog_on_project_save", checked)
}
UM.TooltipArea {
width: childrenRect.width
height: childrenRect.height
text: catalog.i18nc("@info:tooltip","Should models be scaled to the build volume if they are too large?")
CheckBox
{
id: scaleToFitCheckbox
text: catalog.i18nc("@option:check","Scale large models")
checked: boolCheck(UM.Preferences.getValue("mesh/scale_to_fit"))
onCheckedChanged: UM.Preferences.setValue("mesh/scale_to_fit", checked)
} }
}
UM.TooltipArea {
width: childrenRect.width
height: childrenRect.height
text: catalog.i18nc("@info:tooltip","An model may appear extremely small if its unit is for example in meters rather than millimeters. Should these models be scaled up?")
CheckBox Item
{ {
id: scaleTinyCheckbox //: Spacer
text: catalog.i18nc("@option:check","Scale extremely small models") height: UM.Theme.getSize("default_margin").height
checked: boolCheck(UM.Preferences.getValue("mesh/scale_tiny_meshes")) width: UM.Theme.getSize("default_margin").height
onCheckedChanged: UM.Preferences.setValue("mesh/scale_tiny_meshes", checked)
} }
}
UM.TooltipArea { Label
width: childrenRect.width
height: childrenRect.height
text: catalog.i18nc("@info:tooltip", "Should a prefix based on the printer name be added to the print job name automatically?")
CheckBox
{ {
id: prefixJobNameCheckbox font.bold: true
text: catalog.i18nc("@option:check", "Add machine prefix to job name") visible: checkUpdatesCheckbox.visible || sendDataCheckbox.visible
checked: boolCheck(UM.Preferences.getValue("cura/jobname_prefix")) text: catalog.i18nc("@label","Privacy")
onCheckedChanged: UM.Preferences.setValue("cura/jobname_prefix", checked)
} }
}
UM.TooltipArea { UM.TooltipArea {
width: childrenRect.width visible: plugins.find("id", "UpdateChecker") > -1
height: childrenRect.height width: childrenRect.width
text: catalog.i18nc("@info:tooltip", "Should a summary be shown when saving a project file?") height: visible ? childrenRect.height : 0
text: catalog.i18nc("@info:tooltip","Should Cura check for updates when the program is started?")
CheckBox CheckBox
{ {
text: catalog.i18nc("@option:check", "Show summary dialog when saving project") id: checkUpdatesCheckbox
checked: boolCheck(UM.Preferences.getValue("cura/dialog_on_project_save")) text: catalog.i18nc("@option:check","Check for updates on start")
onCheckedChanged: UM.Preferences.setValue("cura/dialog_on_project_save", checked) checked: boolCheck(UM.Preferences.getValue("info/automatic_update_check"))
onCheckedChanged: UM.Preferences.setValue("info/automatic_update_check", checked)
}
} }
}
UM.TooltipArea {
visible: plugins.find("id", "SliceInfoPlugin") > -1
width: childrenRect.width
height: visible ? childrenRect.height : 0
text: catalog.i18nc("@info:tooltip","Should anonymous data about your print be sent to Ultimaker? Note, no models, IP addresses or other personally identifiable information is sent or stored.")
Item CheckBox
{ {
//: Spacer id: sendDataCheckbox
height: UM.Theme.getSize("default_margin").height text: catalog.i18nc("@option:check","Send (anonymous) print information")
width: UM.Theme.getSize("default_margin").height checked: boolCheck(UM.Preferences.getValue("info/send_slice_info"))
} onCheckedChanged: UM.Preferences.setValue("info/send_slice_info", checked)
}
Label
{
font.bold: true
visible: checkUpdatesCheckbox.visible || sendDataCheckbox.visible
text: catalog.i18nc("@label","Privacy")
}
UM.TooltipArea {
visible: plugins.find("id", "UpdateChecker") > -1
width: childrenRect.width
height: visible ? childrenRect.height : 0
text: catalog.i18nc("@info:tooltip","Should Cura check for updates when the program is started?")
CheckBox
{
id: checkUpdatesCheckbox
text: catalog.i18nc("@option:check","Check for updates on start")
checked: boolCheck(UM.Preferences.getValue("info/automatic_update_check"))
onCheckedChanged: UM.Preferences.setValue("info/automatic_update_check", checked)
}
}
UM.TooltipArea {
visible: plugins.find("id", "SliceInfoPlugin") > -1
width: childrenRect.width
height: visible ? childrenRect.height : 0
text: catalog.i18nc("@info:tooltip","Should anonymous data about your print be sent to Ultimaker? Note, no models, IP addresses or other personally identifiable information is sent or stored.")
CheckBox
{
id: sendDataCheckbox
text: catalog.i18nc("@option:check","Send (anonymous) print information")
checked: boolCheck(UM.Preferences.getValue("info/send_slice_info"))
onCheckedChanged: UM.Preferences.setValue("info/send_slice_info", checked)
} }
} }
} }

View file

@ -14,7 +14,7 @@ Item {
property real progress: UM.Backend.progress; property real progress: UM.Backend.progress;
property int backendState: UM.Backend.state; property int backendState: UM.Backend.state;
property bool activity: Printer.getPlatformActivity; property bool activity: Printer.platformActivity;
property int totalHeight: childrenRect.height + UM.Theme.getSize("default_margin").height property int totalHeight: childrenRect.height + UM.Theme.getSize("default_margin").height
property string fileBaseName property string fileBaseName
property string statusText: property string statusText: