diff --git a/cura/PlatformPhysics.py b/cura/PlatformPhysics.py index ee6e39f03b..f96c81abce 100644 --- a/cura/PlatformPhysics.py +++ b/cura/PlatformPhysics.py @@ -12,6 +12,8 @@ from UM.Math.Vector import Vector from UM.Math.AxisAlignedBox import AxisAlignedBox from UM.Application import Application from UM.Scene.Selection import Selection +from UM.Preferences import Preferences + from cura.ConvexHullDecorator import ConvexHullDecorator from . import PlatformPhysicsOperation @@ -37,6 +39,8 @@ class PlatformPhysics: self._change_timer.setSingleShot(True) self._change_timer.timeout.connect(self._onChangeTimerFinished) + Preferences.getInstance().addPreference("physics/automatic_push_free", True) + def _onSceneChanged(self, source): self._change_timer.start() @@ -82,7 +86,7 @@ class PlatformPhysics: elif Selection.isSelected(node): pass - else: + elif Preferences.getInstance().getValue("physics/automatic_push_free"): # Check for collisions between convex hulls for other_node in BreadthFirstIterator(root): # Ignore root, ourselves and anything that is not a normal SceneNode. diff --git a/resources/qml/Cura.qml b/resources/qml/Cura.qml index 24fb33490f..2388f0d5e7 100644 --- a/resources/qml/Cura.qml +++ b/resources/qml/Cura.qml @@ -344,8 +344,15 @@ UM.MainWindow { id: preferences Component.onCompleted: { + //; Remove & re-add the general page as we want to use our own instead of uranium standard. + removePage(0); + insertPage(0, qsTr("General") , "" , Qt.resolvedUrl("./GeneralPage.qml")); + //: View preferences page title insertPage(1, qsTr("View"), "view-preview", Qt.resolvedUrl("./ViewPage.qml")); + + //Force refresh + setPage(0) } } diff --git a/resources/qml/GeneralPage.qml b/resources/qml/GeneralPage.qml new file mode 100644 index 0000000000..9f7203702f --- /dev/null +++ b/resources/qml/GeneralPage.qml @@ -0,0 +1,130 @@ +// Copyright (c) 2015 Ultimaker B.V. +// Uranium is released under the terms of the AGPLv3 or higher. + +import QtQuick 2.1 +import QtQuick.Controls 1.1 +import QtQuick.Layouts 1.1 +import QtQuick.Controls.Styles 1.1 + +import UM 1.0 as UM + +UM.PreferencesPage +{ + //: General configuration page title + title: qsTr("General"); + + function reset() + { + UM.Preferences.resetPreference("general/language") + UM.Preferences.resetPreference("physics/automatic_push_free") + } + GridLayout + { + columns: 2; + //: Language selection label + Label + { + id: languageLabel + text: qsTr("Language") + } + + ComboBox + { + id: languageComboBox + model: ListModel + { + id: languageList + //: English language combo box option + ListElement { text: QT_TR_NOOP("English"); code: "en" } + //: German language combo box option + ListElement { text: QT_TR_NOOP("German"); code: "de" } + //: French language combo box option + // ListElement { text: QT_TR_NOOP("French"); code: "fr" } + //: Spanish language combo box option + ListElement { text: QT_TR_NOOP("Spanish"); code: "es" } + //: Italian language combo box option + // ListElement { text: QT_TR_NOOP("Italian"); code: "it" } + //: Finnish language combo box option + ListElement { text: QT_TR_NOOP("Finnish"); code: "fi" } + //: Russian language combo box option + ListElement { text: QT_TR_NOOP("Russian"); code: "ru" } + } + + 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) + + anchors.left: languageLabel.right + anchors.top: languageLabel.top + anchors.leftMargin: 20 + + 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", qsTr(languageList.get(i).text)); + } + + // Glorious hack time. ComboBox does not update the text properly after changing the + // model. So change the indices around to force it to update. + currentIndex += 1; + currentIndex -= 1; + } + } + + Label + { + id: languageCaption; + Layout.columnSpan: 2 + + //: Language change warning + text: qsTr("You will need to restart the application for language changes to have effect.") + wrapMode: Text.WordWrap + font.italic: true + } + + CheckBox + { + id: pushFreeCheckbox + checked: UM.Preferences.getValue("physics/automatic_push_free") + onCheckedChanged: UM.Preferences.setValue("physics/automatic_push_free", checked) + } + Button + { + id: pushFreeText //is a button so the user doesn't have te click inconvenientley precise to enable or disable the checkbox + + //: Display Overhang preference checkbox + text: qsTr("Automatic push free"); + onClicked: pushFreeCheckbox.checked = !pushFreeCheckbox.checked + + //: Display Overhang preference tooltip + tooltip: "Are objects on the platform automatically moved so they no longer intersect" + + style: ButtonStyle + { + background: Rectangle + { + border.width: 0 + color: "transparent" + } + label: Text + { + renderType: Text.NativeRendering + horizontalAlignment: Text.AlignLeft + text: control.text + } + } + } + Item { Layout.fillHeight: true; Layout.columnSpan: 2 } + } +}