diff --git a/resources/qml/AboutDialog.qml b/resources/qml/AboutDialog.qml index 79e6030922..c1e441e4ca 100644 --- a/resources/qml/AboutDialog.qml +++ b/resources/qml/AboutDialog.qml @@ -73,68 +73,76 @@ UM.Dialog anchors.topMargin: UM.Theme.getSize("default_margin").height } - ListView + ScrollView { - id: projectsList - anchors.top: creditsNotes.bottom - anchors.topMargin: 10 + anchors.topMargin: UM.Theme.getSize("default_margin").height width: parent.width - height: childrenRect.height + height: base.height - y - (2 * UM.Theme.getSize("default_margin").height + closeButton.height) - delegate: Row + ListView { - Label - { - text: "%2".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" }); + id: projectsList - 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:"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" }); + width: parent.width + + delegate: Row + { + Label + { + text: "%2".arg(model.url).arg(model.name) + width: (projectsList.width * 0.25) | 0 + elide: Text.ElideRight + onLinkActivated: Qt.openUrlExternally(link) + } + Label + { + 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 { //: Close about dialog button + id: closeButton text: catalog.i18nc("@action:button","Close"); onClicked: base.visible = false; diff --git a/resources/qml/Preferences/GeneralPage.qml b/resources/qml/Preferences/GeneralPage.qml index 9b6f32f114..94b589a636 100644 --- a/resources/qml/Preferences/GeneralPage.qml +++ b/resources/qml/Preferences/GeneralPage.qml @@ -58,337 +58,343 @@ UM.PreferencesPage } } - Column + ScrollView { - //: Model used to check if a plugin exists - UM.PluginsModel { id: plugins } + width: parent.width + height: parent.height - //: Language selection label - UM.I18nCatalog{id: catalog; name:"cura"} - - Label + Column { - font.bold: true - text: catalog.i18nc("@label","Interface") - } + //: Model used to check if a plugin exists + UM.PluginsModel { id: plugins } + + //: Language selection label + UM.I18nCatalog{id: catalog; name:"cura"} - Row - { - spacing: UM.Theme.getSize("default_margin").width Label { - id: languageLabel - text: catalog.i18nc("@label","Language:") - anchors.verticalCenter: languageComboBox.verticalCenter + font.bold: true + text: catalog.i18nc("@label","Interface") } - ComboBox + Row { - id: languageComboBox - model: ListModel + spacing: UM.Theme.getSize("default_margin").width + Label { - id: languageList + id: languageLabel + text: catalog.i18nc("@label","Language:") + anchors.verticalCenter: languageComboBox.verticalCenter + } - Component.onCompleted: { - append({ text: "English", code: "en" }) - append({ text: "Deutsch", code: "de" }) - 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" }) + ComboBox + { + id: languageComboBox + model: ListModel + { + id: languageList + + Component.onCompleted: { + append({ text: "English", code: "en" }) + append({ text: "Deutsch", code: "de" }) + 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"); - for(var i = 0; i < languageList.count; ++i) + id: currencyLabel + 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. - 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; + id: topLayersOnlyCheckbox + 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")) + onCheckedChanged: UM.Preferences.setValue("view/only_show_top_layers", checked) } } + 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 { - id: currencyLabel - text: catalog.i18nc("@label","Currency:") - anchors.verticalCenter: languageComboBox.verticalCenter + font.bold: true + text: catalog.i18nc("@label","Opening files") } - TextField - { - id: currencyField - text: UM.Preferences.getValue("cura/currency") - onTextChanged: UM.Preferences.setValue("cura/currency", text) - } - } - Label - { - id: languageCaption + 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?") - //: 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: + CheckBox { - if(UM.Preferences.getValue("view/top_layer_count") == 5) - { - UM.Preferences.setValue("view/top_layer_count", 1) - } - else - { - UM.Preferences.setValue("view/top_layer_count", 5) - } + 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", "Should only the top layers be displayed in layerview?") + 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 - { - id: topLayersOnlyCheckbox - 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")) - onCheckedChanged: UM.Preferences.setValue("view/only_show_top_layers", checked) + CheckBox + { + id: scaleTinyCheckbox + text: catalog.i18nc("@option:check","Scale extremely small models") + checked: boolCheck(UM.Preferences.getValue("mesh/scale_tiny_meshes")) + onCheckedChanged: UM.Preferences.setValue("mesh/scale_tiny_meshes", checked) + } } - } - UM.TooltipArea { - width: childrenRect.width - height: childrenRect.height - text: catalog.i18nc("@info:tooltip", "Should layer be forced into compatibility mode?") + UM.TooltipArea { + 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: 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) + CheckBox + { + id: prefixJobNameCheckbox + text: catalog.i18nc("@option:check", "Add machine prefix to job name") + checked: boolCheck(UM.Preferences.getValue("cura/jobname_prefix")) + onCheckedChanged: UM.Preferences.setValue("cura/jobname_prefix", checked) + } } - } - Item - { - //: Spacer - height: UM.Theme.getSize("default_margin").height - width: UM.Theme.getSize("default_margin").height - } + UM.TooltipArea { + width: childrenRect.width + height: childrenRect.height + text: catalog.i18nc("@info:tooltip", "Should a summary be shown when saving a project file?") - Label - { - font.bold: true - text: catalog.i18nc("@label","Opening files") - } - - 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) + CheckBox + { + text: catalog.i18nc("@option:check", "Show summary dialog when saving project") + 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","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 - text: catalog.i18nc("@option:check","Scale extremely small models") - checked: boolCheck(UM.Preferences.getValue("mesh/scale_tiny_meshes")) - onCheckedChanged: UM.Preferences.setValue("mesh/scale_tiny_meshes", checked) + //: Spacer + height: UM.Theme.getSize("default_margin").height + width: UM.Theme.getSize("default_margin").height } - } - UM.TooltipArea { - 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 + Label { - id: prefixJobNameCheckbox - text: catalog.i18nc("@option:check", "Add machine prefix to job name") - checked: boolCheck(UM.Preferences.getValue("cura/jobname_prefix")) - onCheckedChanged: UM.Preferences.setValue("cura/jobname_prefix", checked) + font.bold: true + visible: checkUpdatesCheckbox.visible || sendDataCheckbox.visible + text: catalog.i18nc("@label","Privacy") } - } - UM.TooltipArea { - width: childrenRect.width - height: childrenRect.height - text: catalog.i18nc("@info:tooltip", "Should a summary be shown when saving a project file?") + 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 - { - text: catalog.i18nc("@option:check", "Show summary dialog when saving project") - checked: boolCheck(UM.Preferences.getValue("cura/dialog_on_project_save")) - onCheckedChanged: UM.Preferences.setValue("cura/dialog_on_project_save", checked) + 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.") - Item - { - //: Spacer - height: UM.Theme.getSize("default_margin").height - width: UM.Theme.getSize("default_margin").height - } - - 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) + 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) + } } } }