Просмотр исходного кода

Added preference to disable automatic push free

fix #49
Jaime van Kessel 9 лет назад
Родитель
Сommit
bbf0b92f87
3 измененных файлов с 142 добавлено и 1 удалено
  1. 5 1
      cura/PlatformPhysics.py
  2. 7 0
      resources/qml/Cura.qml
  3. 130 0
      resources/qml/GeneralPage.qml

+ 5 - 1
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.

+ 7 - 0
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)
         }
     }
 

+ 130 - 0
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 }
+    }
+}