diff --git a/cura/CuraApplication.py b/cura/CuraApplication.py
index ade2caddcd..7841c5c462 100644
--- a/cura/CuraApplication.py
+++ b/cura/CuraApplication.py
@@ -46,7 +46,6 @@ import platform
import sys
import os
import os.path
-import configparser
import numpy
numpy.seterr(all="ignore")
@@ -96,6 +95,7 @@ class CuraApplication(QtApplication):
Preferences.getInstance().addPreference("cura/recent_files", "")
Preferences.getInstance().addPreference("cura/categories_expanded", "")
Preferences.getInstance().addPreference("view/center_on_select", True)
+ Preferences.getInstance().addPreference("mesh/scale_to_fit", True)
JobQueue.getInstance().jobFinished.connect(self._onJobFinished)
@@ -191,6 +191,9 @@ class CuraApplication(QtApplication):
return super().event(event)
+ def getPrintInformation(self):
+ return self._print_information
+
def registerObjects(self, engine):
engine.rootContext().setContextProperty("Printer", self)
self._print_information = PrintInformation.PrintInformation()
@@ -269,8 +272,10 @@ class CuraApplication(QtApplication):
for i in range(count):
new_node = SceneNode()
new_node.setMeshData(node.getMeshData())
+
+ new_node.translate(Vector((i + 1) * node.getBoundingBox().width, node.getPosition().y, 0))
+ new_node.setOrientation(node.getOrientation())
new_node.setScale(node.getScale())
- new_node.translate(Vector((i + 1) * node.getBoundingBox().width, 0, 0))
new_node.setSelectable(True)
op.addOperation(AddSceneNodeOperation(new_node, node.getParent()))
op.push()
diff --git a/cura/PlatformPhysics.py b/cura/PlatformPhysics.py
index f96c81abce..c91aaaabde 100644
--- a/cura/PlatformPhysics.py
+++ b/cura/PlatformPhysics.py
@@ -6,7 +6,6 @@ from PyQt5.QtCore import QTimer
from UM.Scene.SceneNode import SceneNode
from UM.Scene.Iterator.BreadthFirstIterator import BreadthFirstIterator
from UM.Operations.TranslateOperation import TranslateOperation
-from UM.Operations.ScaleToBoundsOperation import ScaleToBoundsOperation
from UM.Math.Float import Float
from UM.Math.Vector import Vector
from UM.Math.AxisAlignedBox import AxisAlignedBox
@@ -107,11 +106,15 @@ class PlatformPhysics:
continue
# Check to see if the bounding boxes intersect. If not, we can ignore the node as there is no way the hull intersects.
- if node.getBoundingBox().intersectsBox(other_node.getBoundingBox()) == AxisAlignedBox.IntersectionResult.NoIntersection:
- continue
+ #if node.getBoundingBox().intersectsBox(other_node.getBoundingBox()) == AxisAlignedBox.IntersectionResult.NoIntersection:
+ # continue
# Get the overlap distance for both convex hulls. If this returns None, there is no intersection.
- overlap = node.callDecoration("getConvexHull").intersectsPolygon(other_node.callDecoration("getConvexHull"))
+ try:
+ overlap = node.callDecoration("getConvexHull").intersectsPolygon(other_node.callDecoration("getConvexHull"))
+ except:
+ overlap = None #It can sometimes occur that the caclulated convex hull has no size, in which case there is no overlap.
+
if overlap is None:
continue
diff --git a/plugins/ChangeLogPlugin/ChangeLog.py b/plugins/ChangeLogPlugin/ChangeLog.py
new file mode 100644
index 0000000000..095f8a5647
--- /dev/null
+++ b/plugins/ChangeLogPlugin/ChangeLog.py
@@ -0,0 +1,98 @@
+# Copyright (c) 2015 Ultimaker B.V.
+# Cura is released under the terms of the AGPLv3 or higher.
+
+from UM.i18n import i18nCatalog
+from UM.Extension import Extension
+from UM.Preferences import Preferences
+from UM.Application import Application
+from UM.PluginRegistry import PluginRegistry
+from UM.Version import Version
+
+from PyQt5.QtQuick import QQuickView
+from PyQt5.QtQml import QQmlComponent, QQmlContext
+from PyQt5.QtCore import QUrl, pyqtSlot, QObject
+
+import os.path
+
+catalog = i18nCatalog("cura")
+
+class ChangeLog(Extension, QObject,):
+ def __init__(self, parent = None):
+ QObject.__init__(self, parent)
+ Extension.__init__(self)
+ self._changelog_window = None
+ self._changelog_context = None
+ version_string = Application.getInstance().getVersion()
+ if version_string is not "master":
+ self._version = Version(version_string)
+ else:
+ self._version = None
+ self._change_logs = None
+ Application.getInstance().engineCreatedSignal.connect(self._onEngineCreated)
+ Preferences.getInstance().addPreference("general/latest_version_changelog_shown", "15.05.90") #First version of CURA with uranium
+ #self.showChangelog()
+
+ def getChangeLogs(self):
+ if not self._change_logs:
+ self.loadChangeLogs()
+ return self._change_logs
+
+ @pyqtSlot(result = str)
+ def getChangeLogString(self):
+ logs = self.getChangeLogs()
+ latest_version = Version(Preferences.getInstance().getValue("general/latest_version_changelog_shown"))
+ result = ""
+ for version in logs:
+ result += "
" + str(version) + "
"
+ result += ""
+ for change in logs[version]:
+ result += "" + str(change) + "
"
+ for line in logs[version][change]:
+ result += str(line) + "
"
+ result += "
"
+
+ pass
+ return result
+
+ def loadChangeLogs(self):
+ self._change_logs = {}
+ with open(os.path.join(PluginRegistry.getInstance().getPluginPath("ChangeLogPlugin"), "ChangeLog.txt"), 'r') as f:
+ open_version = None
+ open_header = None
+ for line in f:
+ line = line.replace("\n","")
+ if "[" in line and "]" in line:
+ line = line.replace("[","")
+ line = line.replace("]","")
+ open_version = Version(line)
+ self._change_logs[Version(line)] = {}
+ elif line.startswith("*"):
+ open_header = line.replace("*","")
+ self._change_logs[open_version][open_header] = []
+ else:
+ if line != "":
+ self._change_logs[open_version][open_header].append(line)
+
+ def _onEngineCreated(self):
+ if not self._version:
+ return #We're on dev branch.
+ if self._version > Preferences.getInstance().getValue("general/latest_version_changelog_shown"):
+ self.showChangelog()
+
+ def showChangelog(self):
+ if not self._changelog_window:
+ self.createChangelogWindow()
+ self._changelog_window.show()
+ Preferences.getInstance().setValue("general/latest_version_changelog_shown", Application.getInstance().getVersion())
+
+ def hideChangelog(self):
+ if self._changelog_window:
+ self._changelog_window.hide()
+
+ def createChangelogWindow(self):
+ path = QUrl.fromLocalFile(os.path.join(PluginRegistry.getInstance().getPluginPath("ChangeLogPlugin"), "ChangeLog.qml"))
+ component = QQmlComponent(Application.getInstance()._engine, path)
+ self._changelog_context = QQmlContext(Application.getInstance()._engine.rootContext())
+ self._changelog_context.setContextProperty("manager", self)
+ self._changelog_window = component.create(self._changelog_context)
+ #print(self._changelog_window)
diff --git a/plugins/ChangeLogPlugin/ChangeLog.qml b/plugins/ChangeLogPlugin/ChangeLog.qml
new file mode 100644
index 0000000000..61400f3d07
--- /dev/null
+++ b/plugins/ChangeLogPlugin/ChangeLog.qml
@@ -0,0 +1,28 @@
+// Copyright (c) 2015 Ultimaker B.V.
+// Cura 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.Window 2.1
+
+import UM 1.1 as UM
+
+UM.Dialog
+{
+ id: base
+ width: 300 * Screen.devicePixelRatio;
+ height: 500 * Screen.devicePixelRatio;
+ title: "Changelog"
+ ScrollView
+ {
+ anchors.fill:parent
+ Text
+ {
+ text: manager.getChangeLogString()
+ width:base.width - 35
+ wrapMode: Text.Wrap;
+ //Component.onCompleted: console.log()
+ }
+ }
+}
diff --git a/plugins/ChangeLogPlugin/ChangeLog.txt b/plugins/ChangeLogPlugin/ChangeLog.txt
new file mode 100644
index 0000000000..c263b4f112
--- /dev/null
+++ b/plugins/ChangeLogPlugin/ChangeLog.txt
@@ -0,0 +1,41 @@
+[15.10.0]
+*All at Once/One at a Time
+Cura’s default mode is set to All At Once. You can print multiple objects faster with the option print objects One At A Time. This can be changed in Advanced Settings. Please note that in One At A Time mode, grouped objects will still be printed as a single object.
+
+*Setting Profiles
+Now you can create preferred setting favourites and share them with others.
+
+
+*Post-Processing Plugin
+This plugin supports post-processing on the GCode generated by the engine – allowing for custom scripts. For example, Pause At Height and Tweak At Z.
+
+*Support for Bed Levelling and other wizards
+We have restored the Bed Levelling function and several other wizards that were previously available for the Ultimaker Original. Additionally, these are ready to be used with machines from other vendors (BQ, Rep Rap neo).
+
+*Third-Party Printer Profiles
+We received printer profiles for third-party vendors (BQ, Rep Rap neo) from the community (thanks guys!). These have been included in this release.
+
+
+*3MF File Loading Support (New)
+We’re happy to report we now support loading 3MF files. This is a new file format similar to AMF, but freely available.
+
+*Output Device API for Developers (New)
+The Storage Device API has now been replaced with the Output Device API for saving files. It’s designed to make it easier for anyone that wants to write a plugin giving them some form of output device, whether it’s a printer or a web service.
+
+*Improved Cut-Off Object Bottom (New)
+We’ve added a feature than allows you to move objects below the build plate. You can either correct a model with a rough bottom, or print only a part of an object. Please note that the implementation greatly differs from the old one where it was a setting.
+
+*Improved File Saving (new)
+We’re happy to report that the way file saving is handled has received a huge overhaul. Now the default action is to save everything on the build plate to a file.
+
+*Select Multiple Objects (New)
+You now have the freedom to select and manipulate multiple objects at the same time.
+
+*Grouping (New)
+You can now group objects together to make it easier to manipulate multiple objects.
+
+*Per-Object Settings (New)
+You can now select different profiles for different objects and in advance mode override individual settings.
+
+*64-bit Windows Builds (New)
+Cura now allows 64-bit Windows builds in addition to the 32-bit builds. For users running the 64-bit version of Windows, you can now load models in more detail.
\ No newline at end of file
diff --git a/plugins/ChangeLogPlugin/__init__.py b/plugins/ChangeLogPlugin/__init__.py
new file mode 100644
index 0000000000..8f8235bf23
--- /dev/null
+++ b/plugins/ChangeLogPlugin/__init__.py
@@ -0,0 +1,21 @@
+# Copyright (c) 2015 Ultimaker B.V.
+# Cura is released under the terms of the AGPLv3 or higher.
+from UM.i18n import i18nCatalog
+
+from . import ChangeLog
+
+catalog = i18nCatalog("cura")
+
+def getMetaData():
+ return {
+ "plugin": {
+ "name": "Change log",
+ "author": "Ultimaker",
+ "version": "1.0",
+ "description": catalog.i18nc("Change log plugin description", "Shows changes since latest checked version"),
+ "api": 2
+ }
+ }
+
+def register(app):
+ return {"extension": ChangeLog.ChangeLog()}
\ No newline at end of file
diff --git a/plugins/CuraEngineBackend/CuraEngineBackend.py b/plugins/CuraEngineBackend/CuraEngineBackend.py
index 9d4f97ade6..4d29b9a2f0 100644
--- a/plugins/CuraEngineBackend/CuraEngineBackend.py
+++ b/plugins/CuraEngineBackend/CuraEngineBackend.py
@@ -132,6 +132,7 @@ class CuraEngineBackend(Backend):
if not getattr(node, "_outside_buildarea", False):
temp_list.append(node)
if len(temp_list) == 0:
+ self.processingProgress.emit(0.0)
return
object_groups.append(temp_list)
#for node in DepthFirstIterator(self._scene.getRoot()):
@@ -250,6 +251,10 @@ class CuraEngineBackend(Backend):
self._socket.registerMessageType(6, Cura_pb2.SettingList)
self._socket.registerMessageType(7, Cura_pb2.GCodePrefix)
+ ## Manually triggers a reslice
+ def forceSlice(self):
+ self._change_timer.start()
+
def _onChanged(self):
if not self._profile:
return
diff --git a/plugins/CuraEngineBackend/LayerData.py b/plugins/CuraEngineBackend/LayerData.py
index c793c17504..597839ea39 100644
--- a/plugins/CuraEngineBackend/LayerData.py
+++ b/plugins/CuraEngineBackend/LayerData.py
@@ -28,7 +28,8 @@ class LayerData(MeshData):
self._layers[layer].polygons.append(p)
def getLayer(self, layer):
- return self._layers[layer]
+ if layer in self._layers:
+ return self._layers[layer]
def getLayers(self):
return self._layers
diff --git a/plugins/LayerView/LayerView.qml b/plugins/LayerView/LayerView.qml
index 4d0da440d1..9c35b9337c 100644
--- a/plugins/LayerView/LayerView.qml
+++ b/plugins/LayerView/LayerView.qml
@@ -19,7 +19,7 @@ Item
width: 10
height: 250
anchors.right : parent.right
- anchors.rightMargin: UM.Theme.sizes.slider_layerview_margin.width
+ anchors.rightMargin: UM.Theme.sizes.slider_layerview_margin.width/2
orientation: Qt.Vertical
minimumValue: 0;
maximumValue: UM.LayerView.numLayers;
@@ -38,14 +38,16 @@ Item
height: UM.Theme.sizes.slider_layerview_background_extension.height
color: UM.Theme.colors.slider_text_background
}
- UM.AngledCornerRectangle {
+ Rectangle {
anchors.right : parent.right
anchors.verticalCenter: parent.verticalCenter
z: slider.z - 1
- cornerSize: UM.Theme.sizes.default_margin.width;
width: UM.Theme.sizes.slider_layerview_background.width
height: slider.height + UM.Theme.sizes.default_margin.height * 2
- color: UM.Theme.colors.slider_text_background
+ color: UM.Theme.colors.tool_panel_background;
+ border.width: UM.Theme.sizes.default_lining.width
+ border.color: UM.Theme.colors.lining
+
MouseArea {
id: sliderMouseArea
property double manualStepSize: slider.maximumValue / 11
diff --git a/plugins/SliceInfoPlugin/SliceInfo.py b/plugins/SliceInfoPlugin/SliceInfo.py
new file mode 100644
index 0000000000..70b31d8acd
--- /dev/null
+++ b/plugins/SliceInfoPlugin/SliceInfo.py
@@ -0,0 +1,122 @@
+# Copyright (c) 2015 Ultimaker B.V.
+# Cura is released under the terms of the AGPLv3 or higher.
+
+from UM.Extension import Extension
+from UM.Application import Application
+from UM.Preferences import Preferences
+from UM.Scene.Iterator.DepthFirstIterator import DepthFirstIterator
+from UM.Scene.SceneNode import SceneNode
+from UM.Message import Message
+from UM.i18n import i18nCatalog
+
+import collections
+import json
+import os.path
+import copy
+import platform
+import math
+import urllib.request
+import urllib.parse
+
+catalog = i18nCatalog("cura")
+
+
+## This Extension runs in the background and sends several bits of information to the Ultimaker servers.
+# The data is only sent when the user in question gave permission to do so. All data is anonymous and
+# no model files are being sent (Just a SHA256 hash of the model).
+class SliceInfo(Extension):
+ def __init__(self):
+ super().__init__()
+ Application.getInstance().getOutputDeviceManager().writeStarted.connect(self._onWriteStarted)
+ Preferences.getInstance().addPreference("info/send_slice_info", True)
+ Preferences.getInstance().addPreference("info/asked_send_slice_info", False)
+
+ if not Preferences.getInstance().getValue("info/asked_send_slice_info"):
+ self.send_slice_info_message = Message(catalog.i18nc("", "Cura automatically sends slice info. You can disable this in preferences"), lifetime = 0, dismissable = False)
+ self.send_slice_info_message.addAction("Dismiss","Dismiss", None, "Dismiss")
+ self.send_slice_info_message.actionTriggered.connect(self.messageActionTriggered)
+ self.send_slice_info_message.show()
+
+ def messageActionTriggered(self, message_id, action_id):
+ self.send_slice_info_message.hide()
+ Preferences.getInstance().setValue("info/asked_send_slice_info", True)
+
+ def _onWriteStarted(self, output_device):
+ if not Preferences.getInstance().getValue("info/send_slice_info"):
+ return # Do nothing, user does not want to send data
+
+ settings = Application.getInstance().getActiveMachine()
+ profile = settings.getActiveProfile()
+ profile_values = None
+
+ # Load all machine definitions and put them in machine_settings dict
+ setting_file_name = Application.getInstance().getActiveMachine()._json_file
+ machine_settings = {}
+ with open(setting_file_name, "rt", -1, "utf-8") as f:
+ data = json.load(f, object_pairs_hook = collections.OrderedDict)
+ machine_settings[os.path.basename(setting_file_name)] = copy.deepcopy(data)
+ # Loop through inherited json files
+ while True:
+ if "inherits" in data:
+ inherited_setting_file_name = os.path.dirname(setting_file_name) + "/" + data["inherits"]
+ with open(inherited_setting_file_name, "rt", -1, "utf-8") as f:
+ data = json.load(f, object_pairs_hook = collections.OrderedDict)
+ machine_settings[os.path.basename(inherited_setting_file_name)] = copy.deepcopy(data)
+ print("Inherited:", os.path.basename(inherited_setting_file_name))
+ else:
+ break
+
+ if profile:
+ profile_values = profile.getChangedSettings()
+
+ # Get total material used (in mm^3)
+ print_information = Application.getInstance().getPrintInformation()
+ material_radius = 0.5 * settings.getSettingValueByKey("material_diameter")
+ material_used = math.pi * material_radius * material_radius * print_information.materialAmount #Volume of material used
+
+ # Get model information (bounding boxes, hashes and transformation matrix)
+ models_info = []
+ for node in DepthFirstIterator(Application.getInstance().getController().getScene().getRoot()):
+ if type(node) is SceneNode and node.getMeshData() and node.getMeshData().getVertices() is not None:
+ if not getattr(node, "_outside_buildarea", False):
+ model_info = {}
+ model_info["hash"] = node.getMeshData().getHash()
+ model_info["bounding_box"] = {}
+ model_info["bounding_box"]["minimum"] = {}
+ model_info["bounding_box"]["minimum"]["x"] = node.getBoundingBox().minimum.x
+ model_info["bounding_box"]["minimum"]["y"] = node.getBoundingBox().minimum.y
+ model_info["bounding_box"]["minimum"]["z"] = node.getBoundingBox().minimum.z
+
+ model_info["bounding_box"]["maximum"] = {}
+ model_info["bounding_box"]["maximum"]["x"] = node.getBoundingBox().maximum.x
+ model_info["bounding_box"]["maximum"]["y"] = node.getBoundingBox().maximum.y
+ model_info["bounding_box"]["maximum"]["z"] = node.getBoundingBox().maximum.z
+ model_info["transformation"] = str(node.getWorldTransformation().getData())
+
+ models_info.append(model_info)
+
+ # Bundle the collected data
+ submitted_data = {
+ "processor": platform.processor(),
+ "machine": platform.machine(),
+ "platform": platform.platform(),
+ "machine_settings": json.dumps(machine_settings),
+ "version": Application.getInstance().getVersion(),
+ "modelhash": "None",
+ "printtime": str(print_information.currentPrintTime),
+ "filament": material_used,
+ "language": Preferences.getInstance().getValue("general/language"),
+ "materials_profiles ": {}
+ }
+
+ # Convert data to bytes
+ submitted_data = urllib.parse.urlencode(submitted_data)
+ binary_data = submitted_data.encode('utf-8')
+
+ # Submit data
+ try:
+ f = urllib.request.urlopen("https://stats.youmagine.com/curastats/slice", data = binary_data, timeout = 1)
+ except Exception as e:
+ print("Exception occured", e)
+
+ f.close()
\ No newline at end of file
diff --git a/plugins/SliceInfoPlugin/__init__.py b/plugins/SliceInfoPlugin/__init__.py
new file mode 100644
index 0000000000..8db60a7d52
--- /dev/null
+++ b/plugins/SliceInfoPlugin/__init__.py
@@ -0,0 +1,19 @@
+# Copyright (c) 2015 Ultimaker B.V.
+# Cura is released under the terms of the AGPLv3 or higher.
+from . import SliceInfo
+from UM.i18n import i18nCatalog
+catalog = i18nCatalog("cura")
+
+def getMetaData():
+ return {
+ "plugin": {
+ "name": "Slice Info",
+ "author": "Ultimaker",
+ "version": "1.0",
+ "description": catalog.i18nc("Slice Info plugin description", "Submits anonymous slice info. Can be disabled through preferences."),
+ "api": 2
+ }
+ }
+
+def register(app):
+ return { "extension": SliceInfo.SliceInfo()}
\ No newline at end of file
diff --git a/plugins/USBPrinting/ControlWindow.qml b/plugins/USBPrinting/ControlWindow.qml
index 7d83bd9ce1..74f3072aca 100644
--- a/plugins/USBPrinting/ControlWindow.qml
+++ b/plugins/USBPrinting/ControlWindow.qml
@@ -6,13 +6,14 @@ import QtQuick.Controls 1.1
import QtQuick.Layouts 1.1
import QtQuick.Window 2.1
-import UM 1.0 as UM
+import UM 1.1 as UM
-UM.Dialog {
+UM.Dialog
+{
width: 500 * Screen.devicePixelRatio;
height: 100 * Screen.devicePixelRatio;
- title: "Print with USB"
+ title: catalog.i18nc("@title:window", "Print with USB")
Column
{
@@ -23,18 +24,20 @@ UM.Dialog {
Text
{
//: USB Printing dialog label, %1 is head temperature
- text: qsTr("Extruder Temperature %1").arg(manager.extruderTemperature)
+ text: catalog.i18nc("@label","Extruder Temperature %1").arg(manager.extruderTemperature)
}
Text
{
//: USB Printing dialog label, %1 is bed temperature
- text: qsTr("Bed Temperature %1").arg(manager.bedTemperature)
+ text: catalog.i18nc("@label","Bed Temperature %1").arg(manager.bedTemperature)
}
Text
{
text: "" + manager.error
}
+ UM.I18nCatalog{id: catalog; name:"cura"}
+
}
ProgressBar
@@ -50,16 +53,17 @@ UM.Dialog {
}
rightButtons: [
- Button {
+ Button
+ {
//: USB Printing dialog start print button
- text: qsTr("Print");
+ text: catalog.i18nc("@action:button","Print");
onClicked: { manager.startPrint() }
enabled: manager.progress == 0 ? true : false
},
Button
{
//: USB Printing dialog cancel print button
- text: qsTr("Cancel");
+ text: catalog.i18nc("@action:button","Cancel");
onClicked: { manager.cancelPrint() }
enabled: manager.progress == 0 ? false: true
}
diff --git a/plugins/USBPrinting/FirmwareUpdateWindow.qml b/plugins/USBPrinting/FirmwareUpdateWindow.qml
index 12f4931697..55d3f60c62 100644
--- a/plugins/USBPrinting/FirmwareUpdateWindow.qml
+++ b/plugins/USBPrinting/FirmwareUpdateWindow.qml
@@ -17,7 +17,7 @@ UM.Dialog
visible: true;
modality: Qt.ApplicationModal;
- title: "Firmware Update";
+ title: catalog.i18nc("@title:window","Firmware Update");
Column
{
@@ -25,7 +25,8 @@ UM.Dialog
Text
{
- anchors {
+ anchors
+ {
left: parent.left;
right: parent.right;
}
@@ -34,17 +35,17 @@ UM.Dialog
if (manager.progress == 0)
{
//: Firmware update status label
- return qsTr("Starting firmware update, this may take a while.")
+ return catalog.i18nc("@label","Starting firmware update, this may take a while.")
}
else if (manager.progress > 99)
{
//: Firmware update status label
- return qsTr("Firmware update completed.")
+ return catalog.i18nc("@label","Firmware update completed.")
}
else
{
//: Firmware update status label
- return qsTr("Updating firmware.")
+ return catalog.i18nc("@label","Updating firmware.")
}
}
@@ -57,20 +58,23 @@ UM.Dialog
value: manager.progress
minimumValue: 0;
maximumValue: 100;
- anchors {
+ anchors
+ {
left: parent.left;
right: parent.right;
}
}
- SystemPalette {
+ SystemPalette
+ {
id: palette;
}
}
rightButtons: [
- Button {
+ Button
+ {
text: "Close";
enabled: manager.progress >= 100;
onClicked: base.visible = false;
diff --git a/plugins/USBPrinting/PrinterConnection.py b/plugins/USBPrinting/PrinterConnection.py
index 1ac1cb1b89..c599cfdf1d 100644
--- a/plugins/USBPrinting/PrinterConnection.py
+++ b/plugins/USBPrinting/PrinterConnection.py
@@ -155,6 +155,7 @@ class PrinterConnection(OutputDevice, QObject, SignalEmitter):
@pyqtSlot()
def startPrint(self):
+ self.writeStarted.emit(self)
gcode_list = getattr( Application.getInstance().getController().getScene(), "gcode_list")
self.printGCode(gcode_list)
@@ -163,6 +164,7 @@ class PrinterConnection(OutputDevice, QObject, SignalEmitter):
def printGCode(self, gcode_list):
if self.isPrinting() or not self._is_connected:
Logger.log("d", "Printer is busy or not connected, aborting print")
+ self.writeError.emit(self)
return
self._gcode.clear()
@@ -179,6 +181,8 @@ class PrinterConnection(OutputDevice, QObject, SignalEmitter):
for i in range(0, 4): #Push first 4 entries before accepting other inputs
self._sendNextGcodeLine()
+ self.writeFinished.emit(self)
+
## Get the serial port string of this connection.
# \return serial port
def getSerialPort(self):
@@ -258,11 +262,6 @@ class PrinterConnection(OutputDevice, QObject, SignalEmitter):
except Exception as e:
Logger.log("i", "Could not establish connection on %s, unknown reasons. Device is not arduino based." % self._serial_port)
- if not self._serial:
- self._is_connecting = False
- Logger.log("i", "Could not establish connection on %s, unknown reasons.", self._serial_port)
- return
-
# If the programmer connected, we know its an atmega based version. Not all that usefull, but it does give some debugging information.
for baud_rate in self._getBaudrateList(): # Cycle all baud rates (auto detect)
if self._serial is None:
diff --git a/resources/machines/bq_hephestos.json b/resources/machines/bq_hephestos.json
new file mode 100644
index 0000000000..5d6bf49ed8
--- /dev/null
+++ b/resources/machines/bq_hephestos.json
@@ -0,0 +1,60 @@
+{
+ "id": "bq_hephestos",
+ "version": 1,
+ "name": "BQ Prusa i3 Hephestos",
+ "manufacturer": "BQ",
+ "author": "BQ",
+ "platform": "hephestos_platform.stl",
+ "inherits": "fdmprinter.json",
+
+ "machine_settings": {
+ "machine_start_gcode": {
+ "default": "; -- START GCODE --\nG21 ;set units to millimetres\nG90 ;set to absolute positioning\nM106 S0 ;set fan speed to zero (turned off)\nG28 X0 Y0 ;move to the X/Y origin (Home)\nG28 Z0 ;move to the Z origin (Home)\nG1 Z15.0 F1200 ;move Z to position 15.0 mm\nG92 E0 ;zero the extruded length\nG1 E20 F200 ;extrude 20mm of feed stock\nG92 E0 ;zero the extruded length again\nG1 F7200 ;set feedrate to 120 mm/sec\n; -- end of START GCODE --"
+ },
+ "machine_end_gcode": {
+ "default": "; -- END GCODE --\nM104 S0 ;set extruder temperature to zero (turned off)\nG91 ;set to relative positioning\nG1 E-20 F300 ;retract the filament a bit to release some of the pressure\nG1 Z10 ;move extruder up 10 mm\nG90 ;set to absolute positioning\nG1 X0 Y180 F1200 ;expose the platform\nM84 ;turn off steppers\n; -- end of END GCODE --"
+ },
+ "machine_width": {
+ "default": 215
+ },
+ "machine_depth": {
+ "default": 210
+ },
+ "machine_height": {
+ "default": 180
+ },
+ "machine_heated_bed": {
+ "default": false
+ },
+ "machine_center_is_zero": {
+ "default": false
+ },
+ "machine_gcode_flavor": {
+ "default": "RepRap"
+ },
+ "machine_platform_offset": {
+ "default": [0, 100, 0]
+ }
+ },
+ "overrides": {
+ "layer_height": { "default": 0.2 },
+ "layer_height_0": { "default": 0.2, "visible": false },
+ "shell_thickness": { "default": 1.0 },
+ "wall_thickness": { "default": 1.0, "visible": false },
+ "top_bottom_thickness": { "default": 1.0, "visible": false},
+ "bottom_thickness": { "default": 1.0, "visible": false },
+ "material_print_temperature": { "default": 220, "visible": true },
+ "material_bed_temperature": { "default": 0, "visible": false },
+ "material_diameter": { "default": 1.75, "visible": true },
+ "speed_print": { "default": 40.0},
+ "speed_infill": { "default": 40.0, "visible": true },
+ "speed_wall": { "default": 35.0, "visible": true},
+ "speed_topbottom": { "default": 35.0, "visible": true },
+ "speed_travel": { "default": 120.0 },
+ "speed_layer_0": { "default": 20.0, "visible": false },
+ "retraction_speed": { "default": 30.0, "visible": false},
+ "retraction_amount": { "default": 2.0, "visible": false },
+ "retraction_hop": { "default": 0.075, "visible": false },
+ "support_enable": { "default": true }
+ }
+}
diff --git a/resources/machines/bq_hephestos_xl.json b/resources/machines/bq_hephestos_xl.json
new file mode 100644
index 0000000000..a6849bb8e0
--- /dev/null
+++ b/resources/machines/bq_hephestos_xl.json
@@ -0,0 +1,60 @@
+{
+ "id": "bq_hephestos_xl",
+ "version": 1,
+ "name": "BQ Prusa i3 Hephestos XL",
+ "manufacturer": "BQ",
+ "author": "BQ",
+ "platform": "hephestos_platform.stl",
+ "inherits": "fdmprinter.json",
+
+ "machine_settings": {
+ "machine_start_gcode": {
+ "default": "; -- START GCODE --\nG21 ;set units to millimetres\nG90 ;set to absolute positioning\nM106 S0 ;set fan speed to zero (turned off)\nG28 X0 Y0 ;move to the X/Y origin (Home)\nG28 Z0 ;move to the Z origin (Home)\nG1 Z15.0 F1200 ;move Z to position 15.0 mm\nG92 E0 ;zero the extruded length\nG1 E20 F200 ;extrude 20mm of feed stock\nG92 E0 ;zero the extruded length again\nG1 F7200 ;set feedrate to 120 mm/sec\n; -- end of START GCODE --"
+ },
+ "machine_end_gcode": {
+ "default": "; -- END GCODE --\nM104 S0 ;set extruder temperature to zero (turned off)\nG91 ;set to relative positioning\nG1 E-20 F300 ;retract the filament a bit to release some of the pressure\nG1 Z10 ;move extruder up 10 mm\nG90 ;set to absolute positioning\nG1 X0 Y180 F1200 ;expose the platform\nM84 ;turn off steppers\n; -- end of END GCODE --"
+ },
+ "machine_width": {
+ "default": 200
+ },
+ "machine_depth": {
+ "default": 300
+ },
+ "machine_height": {
+ "default": 180
+ },
+ "machine_heated_bed": {
+ "default": false
+ },
+ "machine_center_is_zero": {
+ "default": false
+ },
+ "machine_gcode_flavor": {
+ "default": "RepRap"
+ },
+ "machine_platform_offset": {
+ "default": [0, 100, 0]
+ }
+ },
+ "overrides": {
+ "layer_height": { "default": 0.2 },
+ "layer_height_0": { "default": 0.2, "visible": false },
+ "shell_thickness": { "default": 1.0 },
+ "wall_thickness": { "default": 1.0, "visible": false },
+ "top_bottom_thickness": { "default": 1.0, "visible": false},
+ "bottom_thickness": { "default": 1.0, "visible": false },
+ "material_print_temperature": { "default": 220, "visible": true },
+ "material_bed_temperature": { "default": 0, "visible": false },
+ "material_diameter": { "default": 1.75, "visible": true },
+ "speed_print": { "default": 40.0},
+ "speed_infill": { "default": 40.0, "visible": true },
+ "speed_wall": { "default": 35.0, "visible": true},
+ "speed_topbottom": { "default": 35.0, "visible": true },
+ "speed_travel": { "default": 120.0 },
+ "speed_layer_0": { "default": 20.0, "visible": false },
+ "retraction_speed": { "default": 30.0, "visible": false},
+ "retraction_amount": { "default": 2.0, "visible": false },
+ "retraction_hop": { "default": 0.075, "visible": false },
+ "support_enable": { "default": true }
+ }
+}
diff --git a/resources/machines/bq_witbox.json b/resources/machines/bq_witbox.json
new file mode 100644
index 0000000000..0351dd7e00
--- /dev/null
+++ b/resources/machines/bq_witbox.json
@@ -0,0 +1,60 @@
+{
+ "id": "bq_witbox",
+ "version": 1,
+ "name": "BQ Witbox",
+ "manufacturer": "BQ",
+ "author": "BQ",
+ "platform": "witbox_platform.stl",
+ "inherits": "fdmprinter.json",
+
+ "machine_settings": {
+ "machine_start_gcode": {
+ "default": "; -- START GCODE --\nG21 ;set units to millimetres\nG90 ;set to absolute positioning\nM106 S0 ;set fan speed to zero (turned off)\nG28 X0 Y0 ;move to the X/Y origin (Home)\nG28 Z0 ;move to the Z origin (Home)\nG1 Z15.0 F1200 ;move Z to position 15.0 mm\nG92 E0 ;zero the extruded length\nG1 E20 F200 ;extrude 20mm of feed stock\nG92 E0 ;zero the extruded length again\nG1 F7200 ;set feedrate to 120 mm/sec\n; -- end of START GCODE --"
+ },
+ "machine_end_gcode": {
+ "default": "; -- END GCODE --\nM104 S0 ;set extruder temperature to zero (turned off)\nG91 ;set to relative positioning\nG1 E-20 F300 ;retract the filament a bit to release some of the pressure\nG90 ;set to absolute positioning\nG1 Z200 ;move the platform to the bottom\nG28 X0 Y0 ;move to the X/Y origin (Home)\nM84 ;turn off steppers\n; -- end of END GCODE --"
+ },
+ "machine_width": {
+ "default": 297
+ },
+ "machine_depth": {
+ "default": 210
+ },
+ "machine_height": {
+ "default": 200
+ },
+ "machine_heated_bed": {
+ "default": false
+ },
+ "machine_center_is_zero": {
+ "default": false
+ },
+ "machine_gcode_flavor": {
+ "default": "RepRap"
+ },
+ "machine_platform_offset": {
+ "default": [0, -145, -38]
+ }
+ },
+ "overrides": {
+ "layer_height": { "default": 0.2 },
+ "layer_height_0": { "default": 0.2, "visible": false },
+ "shell_thickness": { "default": 1.0 },
+ "wall_thickness": { "default": 1.0, "visible": false },
+ "top_bottom_thickness": { "default": 1.0, "visible": false},
+ "bottom_thickness": { "default": 1.0, "visible": false },
+ "material_print_temperature": { "default": 220, "visible": true },
+ "material_bed_temperature": { "default": 0, "visible": false },
+ "material_diameter": { "default": 1.75, "visible": true },
+ "speed_print": { "default": 40.0},
+ "speed_infill": { "default": 40.0, "visible": true },
+ "speed_wall": { "default": 35.0, "visible": true},
+ "speed_topbottom": { "default": 35.0, "visible": true },
+ "speed_travel": { "default": 120.0 },
+ "speed_layer_0": { "default": 20.0, "visible": false },
+ "retraction_speed": { "default": 30.0, "visible": false},
+ "retraction_amount": { "default": 2.0, "visible": false },
+ "retraction_hop": { "default": 0.075, "visible": false },
+ "support_enable": { "default": true }
+ }
+}
diff --git a/resources/machines/dual_extrusion_printer.json b/resources/machines/dual_extrusion_printer.json
index 616262e3d5..04b59757c7 100644
--- a/resources/machines/dual_extrusion_printer.json
+++ b/resources/machines/dual_extrusion_printer.json
@@ -8,7 +8,15 @@
"visible": false,
"machine_settings": {
- "extruder_nr": { "default": 0 },
+ "extruder_nr": {
+ "label": "Extruder",
+ "description": "The extruder train used for printing. This is used in multi-extrusion.",
+ "type": "int",
+ "default": 0,
+ "min_value": 0,
+ "max_value": 16,
+ "inherit_function": "extruder_nr"
+ },
"machine_use_extruder_offset_to_offset_coords": { "default": false },
diff --git a/resources/machines/fdmprinter.json b/resources/machines/fdmprinter.json
index 570e81ea5f..4958c8d456 100644
--- a/resources/machines/fdmprinter.json
+++ b/resources/machines/fdmprinter.json
@@ -42,6 +42,7 @@
"default": "RepRap"
},
"machine_disallowed_areas": {
+ "type": "polygons",
"default": []
},
"machine_platform_offset": {
@@ -52,6 +53,7 @@
]
},
"machine_head_polygon": {
+ "type": "polygon",
"default": [
[
-1,
@@ -73,6 +75,7 @@
},
"machine_head_with_fans_polygon":
{
+ "type": "polygon",
"default": [
[
-20,
@@ -308,7 +311,7 @@
"default": 6,
"type": "int",
"visible": false,
- "inherit_function": "math.ceil(parent_value / layer_height)"
+ "inherit_function": "0 if infill_sparse_density == 100 else math.ceil(parent_value / layer_height)"
}
}
},
@@ -328,7 +331,7 @@
"default": 6,
"type": "int",
"visible": false,
- "inherit_function": "math.ceil(parent_value / layer_height)"
+ "inherit_function": "999999 if infill_sparse_density == 100 else math.ceil(parent_value / layer_height)"
}
}
}
@@ -390,7 +393,8 @@
"type": "enum",
"options": {
"lines": "Lines",
- "concentric": "Concentric"
+ "concentric": "Concentric",
+ "zigzag": "Zig Zag"
},
"default": "lines",
"visible": false
@@ -420,6 +424,18 @@
"type": "float",
"default": 0,
"visible": false
+ },
+ "z_seam_type": {
+ "label": "Z Seam Alignment",
+ "description": "Starting point of each part in a layer. When parts in consecutive layers start at the same point a vertical seam may show on the print. When aligning these at the back, the seam is easiest to remove. When placed randomly the inaccuracies at the part start will be less noticable. When taking the shortest path the print will be more quick.",
+ "type": "enum",
+ "options": [
+ "Back",
+ "Shortest",
+ "Random"
+ ],
+ "default": "Shortest",
+ "visible": false
}
}
},
@@ -436,20 +452,6 @@
"default": 20,
"max_value_warning": "100.0",
"children": {
- "infill_pattern": {
- "label": "Infill Pattern",
- "description": "Cura defaults to switching between grid and line infill. But with this setting visible you can control this yourself. The line infill swaps direction on alternate layers of infill, while the grid prints the full cross-hatching on each layer of infill.",
- "type": "enum",
- "visible": false,
- "options": {
- "grid": "Grid",
- "lines": "Lines",
- "concentric": "Concentric",
- "zigzag": "Zig Zag"
- },
- "default": "grid",
- "inherit_function": "'lines' if parent_value > 25 else 'grid'"
- },
"infill_line_distance": {
"label": "Line distance",
"description": "Distance between the printed infill lines.",
@@ -461,6 +463,20 @@
}
}
},
+ "infill_pattern": {
+ "label": "Infill Pattern",
+ "description": "Cura defaults to switching between grid and line infill. But with this setting visible you can control this yourself. The line infill swaps direction on alternate layers of infill, while the grid prints the full cross-hatching on each layer of infill.",
+ "type": "enum",
+ "visible": false,
+ "options": {
+ "grid": "Grid",
+ "lines": "Lines",
+ "concentric": "Concentric",
+ "zigzag": "Zig Zag"
+ },
+ "default": "grid",
+ "inherit_function": "'lines' if parent_value > 25 else 'grid'"
+ },
"infill_overlap": {
"label": "Infill Overlap",
"description": "The amount of overlap between the infill and the walls. A slight overlap allows the walls to connect firmly to the infill.",
@@ -495,6 +511,13 @@
"inherit_function": "math.floor((parent_value + 0.001) / layer_height)"
}
}
+ },
+ "infill_before_walls": {
+ "label": "Infill Before Walls",
+ "description": "Print the infill before printing the walls. Printing the walls first may lead to more accurate walls, but overhangs print worse. Printing the infill first leads to sturdier walls, but the infill pattern might sometimes show through the surface.",
+ "type": "boolean",
+ "default": true,
+ "visible": false
}
}
},
@@ -545,7 +568,8 @@
"label": "Enable Retraction",
"description": "Retract the filament when the nozzle is moving over a non-printed area. Details about the retraction can be configured in the advanced tab.",
"type": "boolean",
- "default": true
+ "default": true,
+ "visible": true
},
"retraction_amount": {
"label": "Retraction Distance",
@@ -1062,7 +1086,7 @@
},
"cool_min_layer_time_fan_speed_max": {
"label": "Minimal Layer Time Full Fan Speed",
- "description": "The minimum time spent in a layer which will cause the fan to be at minmum speed. The fan speed increases linearly from maximal fan speed for layers taking minimal layer time to minimal fan speed for layers taking the time specified here.",
+ "description": "The minimum time spent in a layer which will cause the fan to be at maximum speed. The fan speed increases linearly from minimal fan speed for layers taking minimal layer time to maximum fan speed for layers taking the time specified here.",
"unit": "sec",
"type": "float",
"min_value": "0",
@@ -1248,6 +1272,38 @@
"visible": false,
"enabled": "support_enable"
},
+ "support_roof_density": {
+ "label": "Hammock Density",
+ "description": "This controls how densely filled the roofs of the support will be. A higher percentage results in better overhangs, which are more difficult to remove.",
+ "unit": "%",
+ "type": "float",
+ "default": 100,
+ "children": {
+ "support_roof_line_distance": {
+ "label": "Hammock Line Distance",
+ "description": "Distance between the printed hammock lines.",
+ "unit": "mm",
+ "type": "float",
+ "default": 0.4,
+ "visible": false,
+ "inherit_function": "0 if parent_value == 0 else (support_roof_line_width * 100) / parent_value"
+ }
+ }
+ },
+ "support_roof_pattern": {
+ "label": "Hammock Pattern",
+ "description": "The pattern with which the hammock is printed.",
+ "type": "enum",
+ "visible": false,
+ "options": [
+ "Lines",
+ "Grid",
+ "Triangles",
+ "Concentric",
+ "ZigZag"
+ ],
+ "default": "Concentric"
+ },
"support_use_towers": {
"label": "Use towers.",
"description": "Use specialized towers to support tiny overhang areas. These towers have a larger diameter than the region they support. Near the overhang the towers' diameter decreases, forming a roof.",
@@ -1290,8 +1346,10 @@
"description": "Cura supports 3 distinct types of support structure. First is a grid based support structure which is quite solid and can be removed as 1 piece. The second is a line based support structure which has to be peeled off line by line. The third is a structure in between the other two; it consists of lines which are connected in an accordeon fashion.",
"type": "enum",
"options": {
- "grid": "Grid",
"lines": "Lines",
+ "grid": "Grid",
+ "triangles": "Triangles",
+ "concentric": "Concentric",
"zigzag": "Zig Zag"
},
"default": "zigzag",
@@ -1723,9 +1781,14 @@
},
"magic_mesh_surface_mode": {
"label": "Surface Mode",
- "description": "Print the surface instead of the volume. No infill, no top/bottom skin, just a single wall of which the middle coincides with the surface of the mesh.",
- "type": "boolean",
- "default": false,
+ "description": "Print the surface instead of the volume. No infill, no top/bottom skin, just a single wall of which the middle coincides with the surface of the mesh. It's also possible to do both: print the insides of a closed volume as normal, but print all polygons not part of a closed volume as surface.",
+ "type": "enum",
+ "options": [
+ "Normal",
+ "Surface",
+ "Both"
+ ],
+ "default": "Normal",
"visible": false
},
"magic_spiralize": {
diff --git a/resources/machines/hephestos.json b/resources/machines/hephestos.json
deleted file mode 100644
index 5ff301b07c..0000000000
--- a/resources/machines/hephestos.json
+++ /dev/null
@@ -1,71 +0,0 @@
-{
- "id": "hephestos",
- "version": 1,
- "name": "BQ Prusa i3 Hephestos",
- "manufacturer": "BQ",
- "author": "other",
- "platform": "hephestos_platform.stl",
- "inherits": "fdmprinter.json",
-
- "machine_settings": {
- "machine_start_gcode": {
- "default": "; -- START GCODE --\n;Sliced at: {day} {date} {time}\n;Basic settings: Layer height: {layer_height} Walls: {wall_thickness} Fill: {infill_density}\n;Print time: {print_time}\n;Filament used: {filament_amount}m {filament_weight}g\n;Filament cost: {filament_cost}\nG21 ;set units to millimetres\nG90 ;set to absolute positioning\nM106 S0 ;set fan speed to zero (turned off)\nG28 X0 Y0 ;move to the X/Y origin (Home)\nG28 Z0 ;move to the Z origin (Home)\nG1 Z15.0 F1200 ;move Z to position 15.0 mm\nG92 E0 ;zero the extruded length\nG1 E20 F200 ;extrude 20mm of feed stock\nG92 E0 ;zero the extruded length again\nG1 F7200 ;set feedrate to 120 mm/sec\n; -- end of START GCODE --"
- },
- "machine_end_gcode": {
- "default": "; -- END GCODE --\nM104 S0 ;set extruder temperature to zero (turned off)\nG91 ;set to relative positioning\nG1 E-20 F300 ;retract the filament a bit to release some of the pressure\nG1 Z10 ;move extruder up 10 mm\nG90 ;set to absolute positioning\nG1 X0 Y180 F1200 ;expose the platform\nM84 ;turn off steppers\n; -- end of END GCODE --"
- },
- "machine_width": {
- "default": 215
- },
- "machine_depth": {
- "default": 210
- },
- "machine_height": {
- "default": 180
- },
- "machine_heated_bed": {
- "default": false
- },
- "machine_center_is_zero": {
- "default": false
- },
- "machine_gcode_flavor": {
- "default": "RepRap"
- },
- "machine_platform_offset": {
- "default": [0.0, 100.0, 0.0]
- }
- },
-
- "overrides": {
- "layer_height": { "default": 0.2 },
- "layer_height_0": { "default": 0.2, "visible": true },
- "shell_thickness": { "default": 1.2 },
- "wall_thickness": { "default": 1.2, "visible": false },
- "top_bottom_thickness": { "default": 0.8, "visible": false },
- "bottom_thickness": { "default": 0.4, "visible": false },
- "material_print_temperature": { "default": 220, "visible": true },
- "material_bed_temperature": { "default": 0, "visible": false },
- "material_diameter": { "default": 1.75, "visible": true },
- "speed_print": { "default": 40.0 },
- "speed_infill": { "default": 40.0, "visible": false },
- "speed_wall": { "default":35.0, "visible": false },
- "speed_wall_0": { "default": 35.0, "visible": false },
- "speed_wall_x": { "default": 35.0, "visible": false },
- "speed_topbottom": { "default": 35.0, "visible": false },
- "speed_support": { "default": 35.0, "visible": false },
- "speed_travel": { "default": 110.0 },
- "speed_layer_0": { "default": 20.0, "visible": false },
- "retraction_speed": { "default": 30.0, "visible": true },
- "retraction_retract_speed": { "default": 30.0, "visible": true },
- "retraction_prime_speed": { "default": 30.0, "visible": true },
- "retraction_amount": { "default": 2.0, "visible": true },
- "retraction_hop": { "default": 0.75, "visible": false },
- "skirt_minimal_length": { "default": 150 },
- "raft_base_line_width": { "default": 0.7 },
- "raft_interface_thickness": { "default": 0.2 },
- "support_enable": { "default": true },
- "support_z_distance": { "default": 0.2, "visible": false },
- "support_infill_rate": { "default": 10, "visible": false }
- }
-}
diff --git a/resources/machines/hephestos_xl.json b/resources/machines/hephestos_xl.json
deleted file mode 100644
index 8e52bc03b4..0000000000
--- a/resources/machines/hephestos_xl.json
+++ /dev/null
@@ -1,71 +0,0 @@
-{
- "id": "hephestos_xl",
- "version": 1,
- "name": "BQ Prusa i3 Hephestos XL",
- "manufacturer": "BQ",
- "author": "other",
- "platform": "hephestos_platform.stl",
- "inherits": "fdmprinter.json",
-
- "machine_settings": {
- "machine_start_gcode": {
- "default": "; -- START GCODE --\n;Sliced at: {day} {date} {time}\n;Basic settings: Layer height: {layer_height} Walls: {wall_thickness} Fill: {infill_density}\n;Print time: {print_time}\n;Filament used: {filament_amount}m {filament_weight}g\n;Filament cost: {filament_cost}\nG21 ;set units to millimetres\nG90 ;set to absolute positioning\nM106 S0 ;set fan speed to zero (turned off)\nG28 X0 Y0 ;move to the X/Y origin (Home)\nG28 Z0 ;move to the Z origin (Home)\nG1 Z15.0 F1200 ;move Z to position 15.0 mm\nG92 E0 ;zero the extruded length\nG1 E20 F200 ;extrude 20mm of feed stock\nG92 E0 ;zero the extruded length again\nG1 F7200 ;set feedrate to 120 mm/sec\n; -- end of START GCODE --"
- },
- "machine_end_gcode": {
- "default": "; -- END GCODE --\nM104 S0 ;set extruder temperature to zero (turned off)\nG91 ;set to relative positioning\nG1 E-20 F300 ;retract the filament a bit to release some of the pressure\nG1 Z10 ;move extruder up 10 mm\nG90 ;set to absolute positioning\nG1 X0 Y180 F1200 ;expose the platform\nM84 ;turn off steppers\n; -- end of END GCODE --"
- },
- "machine_width": {
- "default": 200
- },
- "machine_depth": {
- "default": 300
- },
- "machine_height": {
- "default": 180
- },
- "machine_heated_bed": {
- "default": false
- },
- "machine_center_is_zero": {
- "default": false
- },
- "machine_gcode_flavor": {
- "default": "RepRap"
- },
- "machine_platform_offset": {
- "default": [0.0, 100.0, 0.0]
- }
- },
-
- "overrides": {
- "layer_height": { "default": 0.2 },
- "layer_height_0": { "default": 0.2, "visible": true },
- "shell_thickness": { "default": 1.2 },
- "wall_thickness": { "default": 1.2, "visible": false },
- "top_bottom_thickness": { "default": 0.8, "visible": false },
- "bottom_thickness": { "default": 0.4, "visible": false },
- "material_print_temperature": { "default": 220, "visible": true },
- "material_bed_temperature": { "default": 0, "visible": false },
- "material_diameter": { "default": 1.75, "visible": true },
- "speed_print": { "default": 40.0 },
- "speed_infill": { "default": 40.0, "visible": false },
- "speed_wall": { "default":35.0, "visible": false },
- "speed_wall_0": { "default": 35.0, "visible": false },
- "speed_wall_x": { "default": 35.0, "visible": false },
- "speed_topbottom": { "default": 35.0, "visible": false },
- "speed_support": { "default": 35.0, "visible": false },
- "speed_travel": { "default": 110.0 },
- "speed_layer_0": { "default": 20.0, "visible": false },
- "retraction_speed": { "default": 30.0, "visible": true },
- "retraction_retract_speed": { "default": 30.0, "visible": true },
- "retraction_prime_speed": { "default": 30.0, "visible": true },
- "retraction_amount": { "default": 2.0, "visible": true },
- "retraction_hop": { "default": 0.75, "visible": false },
- "skirt_minimal_length": { "default": 150 },
- "raft_base_line_width": { "default": 0.7 },
- "raft_interface_thickness": { "default": 0.2 },
- "support_enable": { "default": true },
- "support_z_distance": { "default": 0.2, "visible": false },
- "support_infill_rate": { "default": 10, "visible": false }
- }
-}
diff --git a/resources/machines/ultimaker2.json b/resources/machines/ultimaker2.json
index 6b987af71a..e3bfa9e9c7 100644
--- a/resources/machines/ultimaker2.json
+++ b/resources/machines/ultimaker2.json
@@ -13,15 +13,6 @@
"machine_extruder_trains": [
{
- "extruder_nr": {
- "label": "Extruder",
- "description": "The extruder train used for printing. This is used in multi-extrusion.",
- "type": "int",
- "default": 0,
- "min_value": 0,
- "max_value": 16,
- "inherit_function": "extruder_nr"
- },
"machine_nozzle_size": {
"default": 0.4
},
diff --git a/resources/machines/ultimaker_original.json b/resources/machines/ultimaker_original.json
index 9b34404c54..555c7e7363 100644
--- a/resources/machines/ultimaker_original.json
+++ b/resources/machines/ultimaker_original.json
@@ -18,15 +18,6 @@
"machine_extruder_trains": [
{
- "extruder_nr": {
- "label": "Extruder",
- "description": "The extruder train used for printing. This is used in multi-extrusion.",
- "type": "int",
- "default": 0,
- "min_value": 0,
- "max_value": 16,
- "inherit_function": "extruder_nr"
- },
"machine_nozzle_size": {
"default": 0.4
},
diff --git a/resources/machines/witbox.json b/resources/machines/witbox.json
deleted file mode 100644
index 4e27b5886d..0000000000
--- a/resources/machines/witbox.json
+++ /dev/null
@@ -1,70 +0,0 @@
-{
- "id": "bq_witbox",
- "version": 1,
- "name": "BQ Witbox",
- "manufacturer": "BQ",
- "author": "other",
- "platform": "witbox_platform.stl",
- "inherits": "fdmprinter.json",
-
- "machine_settings": {
- "machine_start_gcode": {
- "default": "; -- START GCODE --\n;Sliced at: {day} {date} {time}\n;Basic settings: Layer height: {layer_height} Walls: {wall_thickness} Fill: {infill_density}\n;Print time: {print_time}\n;Filament used: {filament_amount}m {filament_weight}g\n;Filament cost: {filament_cost}\nG21 ;set units to millimetres\nG90 ;set to absolute positioning\nM106 S0 ;set fan speed to zero (turned off)\nG28 X0 Y0 ;move to the X/Y origin (Home)\nG28 Z0 ;move to the Z origin (Home)\nG1 Z15.0 F1200 ;move Z to position 15.0 mm\nG92 E0 ;zero the extruded length\nG1 E20 F200 ;extrude 20mm of feed stock\nG92 E0 ;zero the extruded length again\nG1 F7200 ;set feedrate to 120 mm/sec\n; -- end of START GCODE --"
- },
- "machine_end_gcode": {
- "default": "; -- END GCODE --\nM104 S0 ;set extruder temperature to zero (turned off)\nG91 ;set to relative positioning\nG1 E-20 F300 ;retract the filament a bit to release some of the pressure\nG90 ;set to absolute positioning\nG1 Z200 ;move the platform to the bottom\nG28 X0 Y0 ;move to the X/Y origin (Home)\nM84 ;turn off steppers\n; -- end of END GCODE --"
- },
- "machine_width": {
- "default": 297
- },
- "machine_depth": {
- "default": 210
- },
- "machine_height": {
- "default": 200
- },
- "machine_heated_bed": {
- "default": false
- },
- "machine_center_is_zero": {
- "default": false
- },
- "machine_gcode_flavor": {
- "default": "RepRap"
- },
- "machine_platform_offset": {
- "default": [0, -145, -38]
- }
- },
- "overrides": {
- "layer_height": { "default": 0.2 },
- "layer_height_0": { "default": 0.2, "visible": true },
- "shell_thickness": { "default": 1.2},
- "wall_thickness": { "default": 1.2, "visible": false },
- "top_bottom_thickness": { "default": 0.8, "visible": false},
- "bottom_thickness": { "default": 0.4, "visible": false },
- "material_print_temperature": { "default": 220, "visible": true },
- "material_bed_temperature": { "default": 0, "visible": false },
- "material_diameter": { "default": 1.75, "visible": true },
- "speed_print": { "default": 40.0},
- "speed_infill": { "default": 40.0, "visible": false },
- "speed_wall": { "default":35.0, "visible": false},
- "speed_wall_0": { "default": 35.0, "visible": false },
- "speed_wall_x": { "default": 35.0, "visible": false },
- "speed_topbottom": { "default": 35.0, "visible": false },
- "speed_support": { "default": 35.0, "visible": false },
- "speed_travel": { "default": 120.0 },
- "speed_layer_0": { "default": 20.0, "visible": false },
- "retraction_speed": { "default": 30.0, "visible": true},
- "retraction_retract_speed": { "default": 30.0, "visible": true },
- "retraction_prime_speed": { "default": 30.0, "visible": true },
- "retraction_amount": { "default": 2.0, "visible": true },
- "retraction_hop": { "default": 0.75, "visible": false },
- "skirt_minimal_length": { "default": 150 },
- "raft_base_line_width": { "default": 0.7 },
- "raft_interface_thickness": { "default": 0.2 },
- "support_enable": { "default": true },
- "support_z_distance": { "default": 0.2, "visible": false },
- "support_infill_rate": { "default": 10, "visible": false }
- }
-}
diff --git a/resources/qml/AboutDialog.qml b/resources/qml/AboutDialog.qml
index a736a7fbda..b81496f18c 100644
--- a/resources/qml/AboutDialog.qml
+++ b/resources/qml/AboutDialog.qml
@@ -5,17 +5,21 @@ import QtQuick 2.2
import QtQuick.Controls 1.1
import QtQuick.Window 2.1
-import UM 1.0 as UM
+import UM 1.1 as UM
-UM.Dialog {
+UM.Dialog
+{
id: base
//: About dialog title
- title: qsTr("About Cura")
+ title: catalog.i18nc("@title:window","About Cura")
minimumWidth: 400
- minimumHeight: 300
+ minimumHeight: 300;
+ //UM.I18nCatalog { id: catalog; }
- Image {
+
+ Image
+ {
id: logo
width: parent.width * 0.75
height: width * (1/4.25)
@@ -26,9 +30,11 @@ UM.Dialog {
sourceSize.height: height
anchors.centerIn: parent
anchors.verticalCenterOffset : -(height * 0.5)
+ UM.I18nCatalog{id: catalog; name:"cura"}
}
- Label {
+ Label
+ {
id: version
text: "Cura %1".arg(UM.Application.version)
@@ -39,30 +45,33 @@ UM.Dialog {
anchors.topMargin : 5
}
- Label {
+ Label
+ {
id: description
width: parent.width
//: About dialog application description
- text: qsTr("End-to-end solution for fused filament 3D printing.")
+ text: catalog.i18nc("@label","End-to-end solution for fused filament 3D printing.")
wrapMode: Text.WordWrap
anchors.top: version.bottom
anchors.topMargin : 10
}
- Label {
+ Label
+ {
id: author_note
width: parent.width
//: About dialog application author note
- text: qsTr("Cura has been developed by Ultimaker B.V. in cooperation with the community.")
+ text: catalog.i18nc("@label","Cura has been developed by Ultimaker B.V. in cooperation with the community.")
wrapMode: Text.WordWrap
anchors.top: description.bottom
}
- rightButtons: Button {
+ rightButtons: Button
+ {
//: Close about dialog button
- text: qsTr("Close");
+ text: catalog.i18nc("@action:button","Close");
onClicked: base.visible = false;
}
diff --git a/resources/qml/Actions.qml b/resources/qml/Actions.qml
index 29bd573d12..338868812b 100644
--- a/resources/qml/Actions.qml
+++ b/resources/qml/Actions.qml
@@ -3,9 +3,10 @@
import QtQuick 2.2
import QtQuick.Controls 1.1
-import UM 1.0 as UM
+import UM 1.1 as UM
-Item {
+Item
+{
property alias open: openAction;
property alias save: saveAction;
property alias quit: quitAction;
@@ -42,60 +43,69 @@ Item {
property alias toggleFullScreen: toggleFullScreenAction;
+ UM.I18nCatalog{id: catalog; name:"cura"}
+
Action
{
id:toggleFullScreenAction
shortcut: StandardKey.FullScreen;
}
- Action {
+ Action
+ {
id: undoAction;
//: Undo action
- text: qsTr("Undo");
+ text: catalog.i18nc("@action","Undo");
iconName: "edit-undo";
shortcut: StandardKey.Undo;
}
- Action {
+ Action
+ {
id: redoAction;
//: Redo action
- text: qsTr("Redo");
+ text: catalog.i18nc("@action","Redo");
iconName: "edit-redo";
shortcut: StandardKey.Redo;
}
- Action {
+ Action
+ {
id: quitAction;
//: Quit action
- text: qsTr("Quit");
+ text: catalog.i18nc("@action","Quit");
iconName: "application-exit";
shortcut: StandardKey.Quit;
}
- Action {
+ Action
+ {
id: preferencesAction;
//: Preferences action
- text: qsTr("Preferences...");
+ text: catalog.i18nc("@action","Preferences...");
iconName: "configure";
}
- Action {
+ Action
+ {
id: addMachineAction;
//: Add Printer action
- text: qsTr("Add Printer...");
+ text: catalog.i18nc("@action","Add Printer...");
}
- Action {
+ Action
+ {
id: settingsAction;
//: Configure Printers action
- text: qsTr("Configure Printers");
+ text: catalog.i18nc("@action","Configure Printers");
iconName: "configure";
}
- Action {
+ Action
+ {
id: documentationAction;
//: Show Online Documentation action
- text: qsTr("Show Online &Documentation");
+ text: catalog.i18nc("@action","Show Online &Documentation");
iconName: "help-contents";
shortcut: StandardKey.Help;
}
@@ -103,118 +113,131 @@ Item {
Action {
id: reportBugAction;
//: Report a Bug Action
- text: qsTr("Report a &Bug");
+ text: catalog.i18nc("@action","Report a &Bug");
iconName: "tools-report-bug";
}
- Action {
+ Action
+ {
id: aboutAction;
//: About action
- text: qsTr("About...");
+ text: catalog.i18nc("@action","About...");
iconName: "help-about";
}
- Action {
+ Action
+ {
id: deleteSelectionAction;
//: Delete selection action
- text: qsTr("Delete Selection");
+ text: catalog.i18nc("@action","Delete Selection");
iconName: "edit-delete";
shortcut: StandardKey.Delete;
}
- Action {
+ Action
+ {
id: deleteObjectAction;
//: Delete object action
- text: qsTr("Delete Object");
+ text: catalog.i18nc("@action","Delete Object");
iconName: "edit-delete";
shortcut: StandardKey.Backspace;
}
- Action {
+ Action
+ {
id: centerObjectAction;
//: Center object action
- text: qsTr("Center Object on Platform");
+ text: catalog.i18nc("@action","Center Object on Platform");
}
Action
{
id: groupObjectsAction
- text: qsTr("Group objects");
+ text: catalog.i18nc("@action","Group objects");
enabled: UM.Scene.numObjectsSelected > 1 ? true: false
}
Action
{
id: unGroupObjectsAction
- text: qsTr("Ungroup objects");
+ text: catalog.i18nc("@action","Ungroup objects");
enabled: UM.Scene.isGroupSelected
}
Action
{
id: mergeObjectsAction
- text: qsTr("Merge objects");
+ text: catalog.i18nc("@action","Merge objects");
enabled: UM.Scene.numObjectsSelected > 1 ? true: false
}
- Action {
+ Action
+ {
id: multiplyObjectAction;
//: Duplicate object action
- text: qsTr("Duplicate Object");
+ text: catalog.i18nc("@action","Duplicate Object");
}
- Action {
+ Action
+ {
id: splitObjectAction;
//: Split object action
- text: qsTr("Split Object into Parts");
+ text: catalog.i18nc("@action","Split Object into Parts");
enabled: false;
}
- Action {
+ Action
+ {
id: deleteAllAction;
//: Clear build platform action
- text: qsTr("Clear Build Platform");
+ text: catalog.i18nc("@action","Clear Build Platform");
iconName: "edit-clear";
}
- Action {
+ Action
+ {
id: reloadAllAction;
//: Reload all objects action
- text: qsTr("Reload All Objects");
+ text: catalog.i18nc("@action","Reload All Objects");
}
- Action {
+ Action
+ {
id: resetAllTranslationAction;
//: Reset all positions action
- text: qsTr("Reset All Object Positions");
+ text: catalog.i18nc("@action","Reset All Object Positions");
}
- Action {
+ Action
+ {
id: resetAllAction;
//: Reset all positions action
- text: qsTr("Reset All Object Transformations");
+ text: catalog.i18nc("@action","Reset All Object Transformations");
}
- Action {
+ Action
+ {
id: openAction;
//: Open file action
- text: qsTr("Load file");
+ text: catalog.i18nc("@action","Load file");
iconName: "document-open";
shortcut: StandardKey.Open;
}
- Action {
+ Action
+ {
id: saveAction;
//: Save file action
- text: qsTr("Save...");
+ text: catalog.i18nc("@action","Save...");
iconName: "document-save";
shortcut: StandardKey.Save;
}
- Action {
+ Action
+ {
id: showEngineLogAction;
//: Show engine log action
- text: qsTr("Show engine &log...");
+ text: catalog.i18nc("@action","Show engine &log...");
iconName: "view-list-text";
}
}
diff --git a/resources/qml/AddMachineWizard.qml b/resources/qml/AddMachineWizard.qml
index 37b94657d6..22b5e67a74 100644
--- a/resources/qml/AddMachineWizard.qml
+++ b/resources/qml/AddMachineWizard.qml
@@ -15,7 +15,7 @@ UM.Wizard
{
id: base;
- title: catalog.i18nc("@title", "Add Printer")
+ title: catalog.i18nc("@title:window", "Add Printer")
// This part is optional
// This part checks whether there is a printer -> if not: some of the functions (delete for example) are disabled
diff --git a/resources/qml/Cura.qml b/resources/qml/Cura.qml
index cb872caa82..0291907aeb 100644
--- a/resources/qml/Cura.qml
+++ b/resources/qml/Cura.qml
@@ -9,38 +9,46 @@ import QtQuick.Dialogs 1.1
import UM 1.1 as UM
-UM.MainWindow {
+UM.MainWindow
+{
id: base
visible: true
//: Cura application window title
- title: qsTr("Cura");
+ title: catalog.i18nc("@title:window","Cura");
- Item {
+ Item
+ {
id: backgroundItem;
anchors.fill: parent;
-
- UM.ApplicationMenu {
+ UM.I18nCatalog{id: catalog; name:"cura"}
+ UM.ApplicationMenu
+ {
id: menu
window: base
- Menu {
+ Menu
+ {
id: fileMenu
//: File menu
- title: qsTr("&File");
+ title: catalog.i18nc("@title:menu","&File");
MenuItem { action: actions.open; }
- Menu {
+ Menu
+ {
id: recentFilesMenu;
- title: "Open Recent"
+ title: catalog.i18nc("@title:menu","Open Recent")
iconName: "document-open-recent";
enabled: Printer.recentFiles.length > 0;
- Instantiator {
+ Instantiator
+ {
model: Printer.recentFiles
- MenuItem {
- text: {
+ MenuItem
+ {
+ text:
+ {
var path = modelData.toString()
return (index + 1) + ". " + path.slice(path.lastIndexOf("/") + 1);
}
@@ -53,22 +61,26 @@ UM.MainWindow {
MenuSeparator { }
- MenuItem {
- text: "Save Selection to File";
+ MenuItem
+ {
+ text: catalog.i18nc("@action:menu", "Save Selection to File");
enabled: UM.Selection.hasSelection;
iconName: "document-save-as";
onTriggered: UM.OutputDeviceManager.requestWriteSelectionToDevice("local_file");
}
- Menu {
+ Menu
+ {
id: saveAllMenu
- title: "Save All"
+ title: catalog.i18nc("@title:menu","Save All")
iconName: "document-save";
enabled: devicesModel.rowCount() > 0 && UM.Backend.progress > 0.99;
- Instantiator {
+ Instantiator
+ {
model: UM.OutputDevicesModel { id: devicesModel; }
- MenuItem {
+ MenuItem
+ {
text: model.description;
onTriggered: UM.OutputDeviceManager.requestWriteToDevice(model.id);
}
@@ -82,9 +94,10 @@ UM.MainWindow {
MenuItem { action: actions.quit; }
}
- Menu {
+ Menu
+ {
//: Edit menu
- title: qsTr("&Edit");
+ title: catalog.i18nc("@title:menu","&Edit");
MenuItem { action: actions.undo; }
MenuItem { action: actions.redo; }
@@ -94,7 +107,7 @@ UM.MainWindow {
}
Menu
{
- title: qsTr("&View");
+ title: catalog.i18nc("@title:menu","&View");
id: top_view_menu
Instantiator
{
@@ -116,14 +129,17 @@ UM.MainWindow {
MenuItem { action: actions.toggleFullScreen; }
}
- Menu {
+ Menu
+ {
id: machineMenu;
//: Machine menu
- title: qsTr("&Machine");
+ title: catalog.i18nc("@title:menu","&Machine");
- Instantiator {
+ Instantiator
+ {
model: UM.MachineInstancesModel { }
- MenuItem {
+ MenuItem
+ {
text: model.name;
checkable: true;
checked: model.active;
@@ -138,7 +154,8 @@ UM.MainWindow {
MenuSeparator { }
- Instantiator {
+ Instantiator
+ {
model: UM.MachineVariantsModel { }
MenuItem {
text: model.name;
@@ -159,10 +176,11 @@ UM.MainWindow {
MenuItem { action: actions.configureMachines; }
}
- Menu {
+ Menu
+ {
id: extension_menu
//: Extensions menu
- title: qsTr("E&xtensions");
+ title: catalog.i18nc("@title:menu","E&xtensions");
Instantiator
{
@@ -191,16 +209,18 @@ UM.MainWindow {
}
}
- Menu {
+ Menu
+ {
//: Settings menu
- title: qsTr("&Settings");
+ title: catalog.i18nc("@title:menu","&Settings");
MenuItem { action: actions.preferences; }
}
- Menu {
+ Menu
+ {
//: Help menu
- title: qsTr("&Help");
+ title: catalog.i18nc("@title:menu","&Help");
MenuItem { action: actions.showEngineLog; }
MenuItem { action: actions.documentation; }
@@ -210,7 +230,8 @@ UM.MainWindow {
}
}
- Item {
+ Item
+ {
id: contentItem;
y: menu.height
@@ -219,19 +240,25 @@ UM.MainWindow {
Keys.forwardTo: menu
- DropArea {
+ DropArea
+ {
anchors.fill: parent;
- onDropped: {
- if(drop.urls.length > 0) {
- for(var i in drop.urls) {
+ onDropped:
+ {
+ if(drop.urls.length > 0)
+ {
+ for(var i in drop.urls)
+ {
UM.MeshFileHandler.readLocalFile(drop.urls[i]);
}
}
}
}
- UM.MessageStack {
- anchors {
+ UM.MessageStack
+ {
+ anchors
+ {
horizontalCenter: parent.horizontalCenter
horizontalCenterOffset: -(UM.Theme.sizes.logo.width/ 2)
top: parent.verticalCenter;
@@ -258,12 +285,14 @@ UM.MainWindow {
source: UM.ActiveView.valid ? UM.ActiveView.activeViewPanel : "";
}
- Button {
+ Button
+ {
id: openFileButton;
//style: UM.Backend.progress < 0 ? UM.Theme.styles.open_file_button : UM.Theme.styles.tool_button;
style: UM.Theme.styles.open_file_button
tooltip: '';
- anchors {
+ anchors
+ {
top: parent.top;
topMargin: UM.Theme.sizes.loadfile_margin.height
left: parent.left;
@@ -272,9 +301,11 @@ UM.MainWindow {
action: actions.open;
}
- Image {
+ Image
+ {
id: logo
- anchors {
+ anchors
+ {
left: parent.left
leftMargin: UM.Theme.sizes.default_margin.width;
bottom: parent.bottom
@@ -289,24 +320,29 @@ UM.MainWindow {
sourceSize.height: height;
}
- Button {
+ Button
+ {
id: viewModeButton
- anchors {
+ anchors
+ {
top: parent.top;
right: sidebar.left;
rightMargin: UM.Theme.sizes.window_margin.width;
}
//: View Mode toolbar button
- text: qsTr("View Mode");
+ text: catalog.i18nc("@action:button","View Mode");
iconSource: UM.Theme.icons.viewmode;
style: UM.Theme.styles.tool_button;
tooltip: '';
- menu: Menu {
+ menu: Menu
+ {
id: viewMenu;
- Instantiator {
+ Instantiator
+ {
model: UM.Models.viewModel;
- MenuItem {
+ MenuItem
+ {
text: model.name;
checkable: true;
checked: model.active;
@@ -321,38 +357,46 @@ UM.MainWindow {
}
}
- Toolbar {
+ Toolbar
+ {
id: toolbar;
anchors {
- horizontalCenter: parent.horizontalCenter
- horizontalCenterOffset: -(UM.Theme.sizes.panel.width / 2)
- top: parent.top;
+ left: parent.left
+ top: parent.top
+ topMargin: 74
+ //horizontalCenter: parent.horizontalCenter
+ //horizontalCenterOffset: -(UM.Theme.sizes.sidebar.width / 2)
+ //top: parent.top;
}
}
- Sidebar {
+ Sidebar
+ {
id: sidebar;
- anchors {
+ anchors
+ {
top: parent.top;
bottom: parent.bottom;
right: parent.right;
}
- width: UM.Theme.sizes.panel.width;
+ width: UM.Theme.sizes.sidebar.width;
addMachineAction: actions.addMachine;
configureMachinesAction: actions.configureMachines;
}
- Rectangle {
+ Rectangle
+ {
x: base.mouseX + UM.Theme.sizes.default_margin.width;
y: base.mouseY + UM.Theme.sizes.default_margin.height;
width: childrenRect.width;
height: childrenRect.height;
- Label {
+ Label
+ {
text: UM.ActiveTool.properties.Rotation != undefined ? "%1°".arg(UM.ActiveTool.properties.Rotation) : "";
}
@@ -361,23 +405,26 @@ UM.MainWindow {
}
}
- UM.PreferencesDialog {
+ UM.PreferencesDialog
+ {
id: preferences
- Component.onCompleted: {
+ 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"));
+ insertPage(0, catalog.i18nc("@title:tab","General") , "" , Qt.resolvedUrl("./GeneralPage.qml"));
//: View preferences page title
- insertPage(1, qsTr("View"), "view-preview", Qt.resolvedUrl("./ViewPage.qml"));
+ insertPage(1, catalog.i18nc("@title:tab","View"), "view-preview", Qt.resolvedUrl("./ViewPage.qml"));
//Force refresh
setPage(0)
}
}
- Actions {
+ Actions
+ {
id: actions;
open.onTriggered: openDialog.open();
@@ -390,28 +437,36 @@ UM.MainWindow {
redo.onTriggered: UM.OperationStack.redo();
redo.enabled: UM.OperationStack.canRedo;
- deleteSelection.onTriggered: {
- if(objectContextMenu.objectId != 0) {
+ deleteSelection.onTriggered:
+ {
+ if(objectContextMenu.objectId != 0)
+ {
Printer.deleteObject(objectContextMenu.objectId);
}
}
- deleteObject.onTriggered: {
- if(objectContextMenu.objectId != 0) {
+ deleteObject.onTriggered:
+ {
+ if(objectContextMenu.objectId != 0)
+ {
Printer.deleteObject(objectContextMenu.objectId);
objectContextMenu.objectId = 0;
}
}
- multiplyObject.onTriggered: {
- if(objectContextMenu.objectId != 0) {
+ multiplyObject.onTriggered:
+ {
+ if(objectContextMenu.objectId != 0)
+ {
Printer.multiplyObject(objectContextMenu.objectId, 1);
objectContextMenu.objectId = 0;
}
}
- centerObject.onTriggered: {
- if(objectContextMenu.objectId != 0) {
+ centerObject.onTriggered:
+ {
+ if(objectContextMenu.objectId != 0)
+ {
Printer.centerObject(objectContextMenu.objectId);
objectContextMenu.objectId = 0;
}
@@ -450,7 +505,8 @@ UM.MainWindow {
}
- Menu {
+ Menu
+ {
id: objectContextMenu;
property variant objectId: -1;
@@ -469,7 +525,8 @@ UM.MainWindow {
MenuItem { action: actions.mergeObjects;}
}
- Menu {
+ Menu
+ {
id: contextMenu;
MenuItem { action: actions.deleteAll; }
MenuItem { action: actions.reloadAll; }
@@ -480,23 +537,28 @@ UM.MainWindow {
MenuItem { action: actions.mergeObjects;}
}
- Connections {
+ Connections
+ {
target: UM.Controller
- onContextMenuRequested: {
- if(objectId == 0) {
+ onContextMenuRequested:
+ {
+ if(objectId == 0)
+ {
contextMenu.popup();
- } else {
+ } else
+ {
objectContextMenu.objectId = objectId;
objectContextMenu.popup();
}
}
}
- FileDialog {
+ FileDialog
+ {
id: openDialog;
//: File open dialog title
- title: qsTr("Open File")
+ title: catalog.i18nc("@title:window","Open File")
modality: UM.Application.platform == "linux" ? Qt.NonModal : Qt.WindowModal;
//TODO: Support multiple file selection, workaround bug in KDE file dialog
//selectMultiple: true
@@ -509,22 +571,27 @@ UM.MainWindow {
}
}
- EngineLog {
+ EngineLog
+ {
id: engineLog;
}
- AddMachineWizard {
+ AddMachineWizard
+ {
id: addMachineWizard
}
- AboutDialog {
+ AboutDialog
+ {
id: aboutDialog
}
- Connections {
+ Connections
+ {
target: Printer
- onRequestAddPrinter: {
+ onRequestAddPrinter:
+ {
addMachineWizard.visible = true
addMachineWizard.firstRun = true
}
diff --git a/resources/qml/EngineLog.qml b/resources/qml/EngineLog.qml
index 0248ba0ea7..db505bd7ec 100644
--- a/resources/qml/EngineLog.qml
+++ b/resources/qml/EngineLog.qml
@@ -5,40 +5,48 @@ import QtQuick 2.2
import QtQuick.Controls 1.1
import QtQuick.Layouts 1.1
-import UM 1.0 as UM
+import UM 1.1 as UM
-UM.Dialog {
+UM.Dialog
+{
id: dialog;
//: Engine Log dialog title
- title: qsTr("Engine Log");
+ title: catalog.i18nc("@title:window","Engine Log");
modality: Qt.NonModal;
- TextArea {
+ TextArea
+ {
id: textArea
anchors.fill: parent;
- Timer {
+ Timer
+ {
id: updateTimer;
interval: 1000;
running: false;
repeat: true;
onTriggered: textArea.text = Printer.getEngineLog();
}
+ UM.I18nCatalog{id: catalog; name:"cura"}
}
- rightButtons: Button {
+ rightButtons: Button
+ {
//: Close engine log button
- text: qsTr("Close");
+ text: catalog.i18nc("@action:button","Close");
onClicked: dialog.visible = false;
}
- onVisibleChanged: {
- if(visible) {
+ onVisibleChanged:
+ {
+ if(visible)
+ {
textArea.text = Printer.getEngineLog();
updateTimer.start();
- } else {
+ } else
+ {
updateTimer.stop();
}
}
diff --git a/resources/qml/GeneralPage.qml b/resources/qml/GeneralPage.qml
index 9f7203702f..676acbf931 100644
--- a/resources/qml/GeneralPage.qml
+++ b/resources/qml/GeneralPage.qml
@@ -6,26 +6,33 @@ import QtQuick.Controls 1.1
import QtQuick.Layouts 1.1
import QtQuick.Controls.Styles 1.1
-import UM 1.0 as UM
+import UM 1.1 as UM
UM.PreferencesPage
{
//: General configuration page title
- title: qsTr("General");
+ title: catalog.i18nc("@title:wizard","General");
function reset()
{
UM.Preferences.resetPreference("general/language")
UM.Preferences.resetPreference("physics/automatic_push_free")
+ UM.Preferences.resetPreference("mesh/scale_to_fit")
+ UM.Preferences.resetPreference("info/send_slice_info")
+ pushFreeCheckbox.checked = UM.Preferences.getValue("physics/automatic_push_free")
+ sendDataCheckbox.checked = UM.Preferences.getValue("info/send_slice_info")
+ scaleToFitCheckbox.checked = UM.Preferences.getValue("mesh/scale_to_fit")
+ languageComboBox.currentIndex = 0
}
GridLayout
{
columns: 2;
//: Language selection label
+ UM.I18nCatalog{id: catalog; name:"cura"}
Label
{
id: languageLabel
- text: qsTr("Language")
+ text: catalog.i18nc("@label","Language")
}
ComboBox
@@ -72,7 +79,7 @@ UM.PreferencesPage
// 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));
+ languageList.setProperty(i, "text", catalog.i18nc("@action:menu",languageList.get(i).text));
}
// Glorious hack time. ComboBox does not update the text properly after changing the
@@ -88,7 +95,7 @@ UM.PreferencesPage
Layout.columnSpan: 2
//: Language change warning
- text: qsTr("You will need to restart the application for language changes to have effect.")
+ text: catalog.i18nc("@label","You will need to restart the application for language changes to have effect.")
wrapMode: Text.WordWrap
font.italic: true
}
@@ -104,11 +111,76 @@ UM.PreferencesPage
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");
+ text: catalog.i18nc("@action:checkbox","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"
+ tooltip: catalog.i18nc("@info: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
+ }
+ }
+ }
+
+ CheckBox
+ {
+ id: sendDataCheckbox
+ checked: UM.Preferences.getValue("info/send_slice_info")
+ onCheckedChanged: UM.Preferences.setValue("info/send_slice_info", checked)
+ }
+ Button
+ {
+ id: sendDataText //is a button so the user doesn't have te click inconvenientley precise to enable or disable the checkbox
+
+ //: Display Overhang preference checkbox
+ text: catalog.i18nc("@action:checkbox","Send (anonymous) slice info");
+ onClicked: sendDataCheckbox.checked = !sendDataCheckbox.checked
+
+ //: Display Overhang preference tooltip
+ tooltip: catalog.i18nc("@info:tooltip","Should anonymous data about your slices be sent to Ultimaker. No models or IP's are sent / stored.")
+
+ style: ButtonStyle
+ {
+ background: Rectangle
+ {
+ border.width: 0
+ color: "transparent"
+ }
+ label: Text
+ {
+ renderType: Text.NativeRendering
+ horizontalAlignment: Text.AlignLeft
+ text: control.text
+ }
+ }
+ }
+ CheckBox
+ {
+ id: scaleToFitCheckbox
+ checked: UM.Preferences.getValue("mesh/scale_to_fit")
+ onCheckedChanged: UM.Preferences.setValue("mesh/scale_to_fit", checked)
+ }
+ Button
+ {
+ id: scaleToFitText //is a button so the user doesn't have te click inconvenientley precise to enable or disable the checkbox
+
+ //: Display Overhang preference checkbox
+ text: catalog.i18nc("@action:checkbox","Scale loaded meshes when too large");
+ onClicked: scaleToFitCheckbox.checked = !scaleToFitCheckbox.checked
+
+ //: Display Overhang preference tooltip
+ tooltip: catalog.i18nc("@info:tooltip","Should loaded meshes be scaled to the max build volume if they are too large.")
style: ButtonStyle
{
diff --git a/resources/qml/SaveButton.qml b/resources/qml/SaveButton.qml
index ec2066713f..638289932b 100644
--- a/resources/qml/SaveButton.qml
+++ b/resources/qml/SaveButton.qml
@@ -14,115 +14,150 @@ Rectangle {
property real progress: UM.Backend.progress;
property bool activity: Printer.getPlatformActivity;
Behavior on progress { NumberAnimation { duration: 250; } }
+ property int totalHeight: childrenRect.height
+
+ UM.I18nCatalog { id: catalog; name:"cura"}
property variant printDuration: PrintInformation.currentPrintTime;
property real printMaterialAmount: PrintInformation.materialAmount;
Rectangle{
- id: background
+ id: printJobRow
implicitWidth: base.width;
- implicitHeight: parent.height;
- color: UM.Theme.colors.save_button_background;
- border.width: UM.Theme.sizes.save_button_border.width
- border.color: UM.Theme.colors.save_button_border
-
- Rectangle {
- id: infoBox
- width: parent.width - UM.Theme.sizes.default_margin.width * 2;
- height: UM.Theme.sizes.save_button_slicing_bar.height
-
- anchors.top: parent.top
- anchors.topMargin: UM.Theme.sizes.default_margin.height;
+ implicitHeight: UM.Theme.sizes.sidebar_header.height
+ anchors.top: parent.top
+ color: UM.Theme.colors.sidebar_header_bar
+ Label{
+ id: printJobTextfieldLabel
+ text: catalog.i18nc("@label","Printjob name");
anchors.left: parent.left
anchors.leftMargin: UM.Theme.sizes.default_margin.width;
-
- border.width: UM.Theme.sizes.save_button_border.width
- border.color: UM.Theme.colors.save_button_border
- color: UM.Theme.colors.save_button_estimated_text_background;
- Label {
- id: label;
- anchors.verticalCenter: parent.verticalCenter
- anchors.left: parent.left
- anchors.leftMargin: UM.Theme.sizes.save_button_text_margin.width;
- visible: base.progress >= 0 && base.progress < 0.99 ? false : true
- color: UM.Theme.colors.save_button_estimated_text;
- font: UM.Theme.fonts.small;
- text: {
- if(base.activity == false) {
- //: Save button label
- return qsTr("Please load a 3D model");
- } else if (base.progress < 0.99) {
- //: Save button label
- return qsTr("Calculating Print-time");
- } else if (base.printDuration.days > 0 || base.progress == null){
- return qsTr("");
- }
- else if (base.progress > 0.99){
- //: Save button label
- return qsTr("Estimated Print-time");
- }
- return "";
+ anchors.verticalCenter: parent.verticalCenter
+ font: UM.Theme.fonts.default;
+ color: UM.Theme.colors.text_white
+ }
+ TextField {
+ id: printJobTextfield
+ anchors.right: parent.right
+ anchors.rightMargin: UM.Theme.sizes.default_margin.width;
+ anchors.verticalCenter: parent.verticalCenter
+ width: parent.width/100*55
+ height: UM.Theme.sizes.sidebar_inputFields.height
+ property int unremovableSpacing: 5
+ text: "UM2" + "_" + "filename" ///TODO KOMT NOG
+ onEditingFinished: {
+ if (printJobTextfield.text != ''){
+ printJobTextfield.focus = false
}
}
- Label {
- id: printDurationLabel
- anchors.verticalCenter: parent.verticalCenter
- anchors.left: label.right;
- anchors.leftMargin: UM.Theme.sizes.save_button_text_margin.width;
- color: UM.Theme.colors.save_button_printtime_text;
- font: UM.Theme.fonts.small;
- visible: base.activity == false || base.progress < 0.99 ? false : true
- text: (!base.printDuration || !base.printDuration.valid) ? "" : base.printDuration.getDisplayString(UM.DurationFormat.Long);
+ validator: RegExpValidator {
+ regExp: /^[0-9a-zA-Z\_\-]*$/
}
- Label {
- id: printMaterialLabel
- anchors.verticalCenter: parent.verticalCenter
- anchors.left: printDurationLabel.right;
- anchors.leftMargin: UM.Theme.sizes.save_button_text_margin.width;
- color: base.printDuration.days > 0 ? UM.Theme.colors.save_button_estimated_text : UM.Theme.colors.save_button_printtime_text;
- font: UM.Theme.fonts.small;
- property bool mediumLengthDuration: base.printDuration.hours > 9 && base.printMaterialAmount > 9.99 && base.printDuration.days == 0
- width: mediumLengthDuration ? 50 : undefined
- elide: mediumLengthDuration ? Text.ElideRight : Text.ElideNone
- visible: base.activity == false || base.progress < 0.99 ? false : true
- //: Print material amount save button label
- text: base.printMaterialAmount < 0 ? "" : qsTr("%1m of Material").arg(base.printMaterialAmount);
+ style: TextFieldStyle{
+ textColor: UM.Theme.colors.setting_control_text;
+ font: UM.Theme.fonts.default;
+ background: Rectangle {
+ radius: 0
+ implicitWidth: parent.width
+ implicitHeight: parent.height
+ border.width: 1;
+ border.color: UM.Theme.colors.slider_groove_border;
+ }
}
}
- Rectangle {
- id: infoBoxOverlay
- anchors {
- left: infoBox.left;
- top: infoBox.top;
- bottom: infoBox.bottom;
+ }
+
+ Rectangle {
+ id: specsRow
+ implicitWidth: base.width
+ implicitHeight: UM.Theme.sizes.sidebar_specs_bar.height
+ anchors.top: printJobRow.bottom
+ Item{
+ id: time
+ width: (parent.width / 100 * 45) - UM.Theme.sizes.default_margin.width * 2
+ height: parent.height
+ anchors.left: parent.left
+ anchors.leftMargin: UM.Theme.sizes.default_margin.width
+ anchors.top: parent.top
+ visible: base.printMaterialAmount > 0 ? true : false
+ UM.RecolorImage {
+ id: timeIcon
+ anchors.verticalCenter: parent.verticalCenter
+ anchors.left: parent.left
+ width: UM.Theme.sizes.save_button_specs_icons.width
+ height: UM.Theme.sizes.save_button_specs_icons.height
+ sourceSize.width: width
+ sourceSize.height: width
+ color: UM.Theme.colors.text_hover
+ source: UM.Theme.icons.print_time;
+ }
+ Label{
+ id: timeSpec
+ anchors.verticalCenter: parent.verticalCenter
+ anchors.left: timeIcon.right
+ anchors.leftMargin: UM.Theme.sizes.default_margin.width/2
+ font: UM.Theme.fonts.default
+ color: UM.Theme.colors.text
+ text: (!base.printDuration || !base.printDuration.valid) ? "" : catalog.i18nc("@label", "%1 m").arg(base.printDuration.getDisplayString(UM.DurationFormat.Short))
}
- width: Math.max(infoBox.width * base.progress);
- color: UM.Theme.colors.save_button_active
- visible: progress > 0.99 ? false : true
}
+ Item{
+ width: parent.width / 100 * 55
+ height: parent.height
+ anchors.left: time.right
+ anchors.top: parent.top
+ visible: base.printMaterialAmount > 0 ? true : false
+ UM.RecolorImage {
+ id: lengthIcon
+ anchors.verticalCenter: parent.verticalCenter
+ anchors.left: parent.left
+ width: UM.Theme.sizes.save_button_specs_icons.width
+ height: UM.Theme.sizes.save_button_specs_icons.height
+ sourceSize.width: width
+ sourceSize.height: width
+ color: UM.Theme.colors.text_hover
+ source: UM.Theme.icons.category_material;
+ }
+ Label{
+ id: lengthSpec
+ anchors.verticalCenter: parent.verticalCenter
+ anchors.left: lengthIcon.right
+ anchors.leftMargin: UM.Theme.sizes.default_margin.width/2
+ font: UM.Theme.fonts.default
+ color: UM.Theme.colors.text
+ text: base.printMaterialAmount <= 0 ? "" : catalog.i18nc("@label","%1 m").arg(base.printMaterialAmount)
+ }
+ }
+ }
+
+ Item{
+ id: saveRow
+ implicitWidth: base.width / 100 * 55
+ implicitHeight: saveToButton.height + (UM.Theme.sizes.default_margin.height / 2) // height + bottomMargin
+ anchors.top: specsRow.bottom
+ anchors.right: parent.right
+ anchors.rightMargin: UM.Theme.sizes.default_margin.width
Button {
id: saveToButton
- anchors.top: infoBox.bottom
- anchors.topMargin: UM.Theme.sizes.save_button_text_margin.height;
anchors.left: parent.left
- anchors.leftMargin: UM.Theme.sizes.default_margin.width;
tooltip: UM.OutputDeviceManager.activeDeviceDescription;
enabled: progress > 0.99 && base.activity == true
- width: infoBox.width/6*4.5
+ width: parent.width - UM.Theme.sizes.save_button_save_to_button.height - 2
height: UM.Theme.sizes.save_button_save_to_button.height
text: UM.OutputDeviceManager.activeDeviceShortDescription;
style: ButtonStyle {
background: Rectangle {
- color: !control.enabled ? UM.Theme.colors.save_button_inactive : control.hovered ? UM.Theme.colors.save_button_active_hover : UM.Theme.colors.save_button_active;
+ color: control.hovered ? UM.Theme.colors.load_save_button_hover : UM.Theme.colors.load_save_button
+ Behavior on color { ColorAnimation { duration: 50; } }
Label {
anchors.centerIn: parent
- color: UM.Theme.colors.save_button_safe_to_text;
- font: UM.Theme.fonts.sidebar_save_to;
+ color: UM.Theme.colors.load_save_button_text
+ font: UM.Theme.fonts.default
text: control.text;
}
}
@@ -133,52 +168,35 @@ Rectangle {
Button {
id: deviceSelectionMenu;
- anchors.top: infoBox.bottom
- anchors.topMargin: UM.Theme.sizes.save_button_text_margin.height
+ tooltip: catalog.i18nc("@info:tooltip","Select the active output device");
anchors.right: parent.right
- anchors.rightMargin: UM.Theme.sizes.default_margin.width;
-
- tooltip: qsTr("Select the active output device");
-
- width: infoBox.width/6*1.3 - UM.Theme.sizes.save_button_text_margin.height;
+ width: UM.Theme.sizes.save_button_save_to_button.height
height: UM.Theme.sizes.save_button_save_to_button.height
-
- iconSource: UM.Theme.icons[UM.OutputDeviceManager.activeDeviceIconName];
+ //iconSource: UM.Theme.icons[UM.OutputDeviceManager.activeDeviceIconName];
style: ButtonStyle {
background: Rectangle {
- color: UM.Theme.colors.save_button_background;
- border.width: control.hovered ? UM.Theme.sizes.save_button_border.width : 0
- border.color: UM.Theme.colors.save_button_border
+ id: deviceSelectionIcon
+ color: control.hovered ? UM.Theme.colors.load_save_button_hover : UM.Theme.colors.load_save_button
+ Behavior on color { ColorAnimation { duration: 50; } }
+ anchors.left: parent.left
+ anchors.leftMargin: UM.Theme.sizes.save_button_text_margin.width / 2;
+ width: parent.height
+ height: parent.height
- Rectangle {
- id: deviceSelectionIcon
- color: UM.Theme.colors.save_button_background;
- anchors.left: parent.left
- anchors.leftMargin: UM.Theme.sizes.save_button_text_margin.width / 2;
- anchors.verticalCenter: parent.verticalCenter;
- width: parent.height - UM.Theme.sizes.save_button_text_margin.width ;
- height: parent.height - UM.Theme.sizes.save_button_text_margin.width;
-
- UM.RecolorImage {
- anchors.fill: parent;
- sourceSize.width: width;
- sourceSize.height: height;
- color: UM.Theme.colors.save_button_active
- source: control.iconSource;
- }
- }
- Label {
- id: deviceSelectionArrow
- anchors.right: parent.right;
- anchors.rightMargin: UM.Theme.sizes.save_button_text_margin.height
- anchors.verticalCenter: parent.verticalCenter;
- text: "▼";
- font: UM.Theme.fonts.tiny;
- color: UM.Theme.colors.save_button_active;
+ UM.RecolorImage {
+ id: lengthIcon
+ anchors.verticalCenter: parent.verticalCenter
+ anchors.horizontalCenter: parent.horizontalCenter
+ width: UM.Theme.sizes.standard_arrow.width
+ height: UM.Theme.sizes.standard_arrow.height
+ sourceSize.width: width
+ sourceSize.height: width
+ color: UM.Theme.colors.load_save_button_text
+ source: UM.Theme.icons.arrow_bottom
}
}
- label: Item { }
+ label: Label{ }
}
menu: Menu {
@@ -200,9 +218,6 @@ Rectangle {
ExclusiveGroup { id: devicesMenuGroup; }
}
}
+ UM.OutputDevicesModel { id: devicesModel; }
}
-
- UM.OutputDevicesModel {
- id: devicesModel;
- }
-}
+}
\ No newline at end of file
diff --git a/resources/qml/Sidebar.qml b/resources/qml/Sidebar.qml
index 5e0008c3e5..7d378a5787 100644
--- a/resources/qml/Sidebar.qml
+++ b/resources/qml/Sidebar.qml
@@ -8,162 +8,172 @@ import QtQuick.Layouts 1.1
import UM 1.1 as UM
-Rectangle {
+Rectangle
+{
id: base;
property Action addMachineAction;
property Action configureMachinesAction;
color: UM.Theme.colors.sidebar;
+ UM.I18nCatalog { id: catalog; name:"cura"}
- function showTooltip(item, position, text) {
+ function showTooltip(item, position, text)
+ {
tooltip.text = text;
position = item.mapToItem(base, position.x, position.y / 2);
tooltip.show(position);
}
- function hideTooltip() {
+ function hideTooltip()
+ {
tooltip.hide();
}
- MouseArea {
+ MouseArea
+ {
anchors.fill: parent
acceptedButtons: Qt.AllButtons;
- onWheel: {
+ onWheel:
+ {
wheel.accepted = true;
}
}
- ColumnLayout {
- anchors.fill: parent;
- anchors.topMargin: UM.Theme.sizes.default_margin.height;
+ SidebarHeader {
+ id: header;
- spacing: UM.Theme.sizes.default_margin.height;
+ width: parent.width
+ height: totalHeightHeader
- SidebarHeader {
- id: header;
+ addMachineAction: base.addMachineAction;
+ configureMachinesAction: base.configureMachinesAction;
+ modesModel: modesListModel;
- Layout.fillWidth: true;
-
- addMachineAction: base.addMachineAction;
- configureMachinesAction: base.configureMachinesAction;
- modesModel: modesListModel;
-
- currentModeIndex: {
- var index = parseInt(UM.Preferences.getValue("cura/active_mode"))
- if(index) {
- return index;
- }
- return 0;
- }
- onCurrentModeIndexChanged: UM.Preferences.setValue("cura/active_mode", currentModeIndex);
- }
-
- Item {
- Layout.fillWidth: true;
- implicitHeight: UM.Theme.sizes.setting.height;
-
- visible: UM.MachineManager.hasVariants;
-
- Row {
- spacing: UM.Theme.sizes.default_margin.width;
- Label {
- anchors.verticalCenter: parent.verticalCenter;
- text: "Variant";
- }
-
- ComboBox {
- anchors.verticalCenter: parent.verticalCenter;
- model: UM.MachineVariantsModel { }
- textRole: "name"
- onActivated: UM.MachineManager.setActiveMachineVariant(model.getItem(index).name);
-
- currentIndex: {
- for(var i = 0; i < model.rowCount(); ++i) {
- if(model.getItem(i).name == UM.MachineManager.activeMachineVariant) {
- return i;
- }
- }
-
- return 0;
- }
- }
- }
- }
-
- Item {
- Layout.fillWidth: true;
- implicitHeight: UM.Theme.sizes.setting.height;
-
- Row {
- spacing: UM.Theme.sizes.default_margin.width;
- Label {
- anchors.verticalCenter: parent.verticalCenter;
- text: "Global Profile";
- }
-
- ComboBox {
- anchors.verticalCenter: parent.verticalCenter;
- model: UM.ProfilesModel { }
- textRole: "name"
- onActivated: UM.MachineManager.setActiveProfile(model.getItem(index).name)
-
- currentIndex: {
- for(var i = 0; i < model.rowCount(); ++i) {
- if(model.getItem(i).name == UM.MachineManager.activeProfile)
- return i;
- }
-
- return 0;
- }
- }
-
- Button {
- text: "Save";
- }
- }
- }
-
- Loader {
- id: sidebarContents;
-
- Layout.fillWidth: true;
- Layout.fillHeight: true;
-
- source: modesListModel.get(header.currentModeIndex).file;
-
- property Item sidebar: base;
-
- onLoaded:
+ currentModeIndex:
+ {
+ var index = parseInt(UM.Preferences.getValue("cura/active_mode"))
+ if(index)
{
- if(item)
- {
- item.configureSettings = base.configureMachinesAction;
- if(item.onShowTooltip != undefined)
- {
- item.showTooltip.connect(base.showTooltip)
- }
- if(item.onHideTooltip != undefined)
- {
- item.hideTooltip.connect(base.hideTooltip)
+ return index;
+ }
+ return 0;
+ }
+ onCurrentModeIndexChanged: UM.Preferences.setValue("cura/active_mode", currentModeIndex);
+ }
+
+ Item {
+ id: variantItem;
+
+ anchors.top: header.bottom;
+ height: UM.Theme.sizes.setting.height;
+
+ visible: UM.MachineManager.hasVariants;
+
+ Row {
+ spacing: UM.Theme.sizes.default_margin.width;
+ Label {
+ anchors.verticalCenter: parent.verticalCenter;
+ text: "Variant";
+ }
+
+ ComboBox {
+ anchors.verticalCenter: parent.verticalCenter;
+ model: UM.MachineVariantsModel { }
+ textRole: "name"
+ onActivated: UM.MachineManager.setActiveMachineVariant(model.getItem(index).name);
+
+ currentIndex: {
+ for(var i = 0; i < model.rowCount(); ++i) {
+ if(model.getItem(i).name == UM.MachineManager.activeMachineVariant) {
+ return i;
+ }
}
+
+ return 0;
}
}
}
-
- SaveButton {
- id: saveButton;
- implicitWidth: base.width
- implicitHeight: UM.Theme.sizes.save_button_text_margin.height * 2 + UM.Theme.sizes.save_button_slicing_bar.height + UM.Theme.sizes.save_button_save_to_button.height + UM.Theme.sizes.default_margin.height
- }
}
- SidebarTooltip {
+ Item {
+ id: profileItem;
+
+ anchors.top: variantItem.bottom;
+ height: UM.Theme.sizes.setting.height;
+
+ Row {
+ spacing: UM.Theme.sizes.default_margin.width;
+ Label {
+ anchors.verticalCenter: parent.verticalCenter;
+ text: "Global Profile";
+ }
+
+ ComboBox {
+ anchors.verticalCenter: parent.verticalCenter;
+ model: UM.ProfilesModel { }
+ textRole: "name"
+ onActivated: UM.MachineManager.setActiveProfile(model.getItem(index).name)
+
+ currentIndex: {
+ for(var i = 0; i < model.rowCount(); ++i) {
+ if(model.getItem(i).name == UM.MachineManager.activeProfile)
+ return i;
+ }
+
+ return 0;
+ }
+ }
+
+ Button {
+ text: "Save";
+ }
+ }
+ }
+
+ Loader {
+ id: sidebarContents;
+ anchors.bottom: saveButton.top
+ anchors.top: profileItem.bottom
+ anchors.left: base.left
+ anchors.right: base.right
+
+ source: modesListModel.get(header.currentModeIndex).file;
+
+ property Item sidebar: base;
+
+ onLoaded:
+ {
+ if(item)
+ {
+ item.configureSettings = base.configureMachinesAction;
+ if(item.onShowTooltip != undefined)
+ {
+ item.showTooltip.connect(base.showTooltip)
+ }
+ if(item.onHideTooltip != undefined)
+ {
+ item.hideTooltip.connect(base.hideTooltip)
+ }
+ }
+ }
+ }
+
+ SaveButton {
+ id: saveButton;
+ implicitWidth: base.width
+ implicitHeight: totalHeight
+ anchors.bottom: parent.bottom
+ }
+
+ SidebarTooltip
+ {
id: tooltip;
}
- ListModel {
+ ListModel
+ {
id: modesListModel;
//: Simple configuration mode option
ListElement { text: QT_TR_NOOP("Simple"); file: "SidebarSimple.qml" }
@@ -171,10 +181,11 @@ Rectangle {
ListElement { text: QT_TR_NOOP("Advanced"); file: "SidebarAdvanced.qml" }
}
- Component.onCompleted: {
+ Component.onCompleted:
+ {
for(var i = 0; i < modesListModel.count; ++i)
{
- modesListModel.setProperty(i, "text", qsTr(modesListModel.get(i).text));
+ modesListModel.setProperty(i, "text", catalog.i18nc("@label", modesListModel.get(i).text));
}
}
}
diff --git a/resources/qml/SidebarHeader.qml b/resources/qml/SidebarHeader.qml
index 980da31adc..e09497fb79 100644
--- a/resources/qml/SidebarHeader.qml
+++ b/resources/qml/SidebarHeader.qml
@@ -8,87 +8,117 @@ import QtQuick.Layouts 1.1
import UM 1.1 as UM
-Column {
+ColumnLayout
+{
id: base;
-
+ // Machine Setup
property variant modesModel;
- property alias currentModeIndex: modeMenu.currentIndex;
+ property alias currentModeIndex: modesList.currentIndex;
property Action addMachineAction;
property Action configureMachinesAction;
+ UM.I18nCatalog { id: catalog; name:"cura"}
+ property int totalHeightHeader: childrenRect.height
+ spacing: 0
- spacing: UM.Theme.sizes.default_margin.height;
+ Rectangle {
+ id: settingsModeRow
+ width: base.width
+ height: UM.Theme.sizes.sidebar_header.height
+ anchors.top: parent.top
+ color: UM.Theme.colors.sidebar_header_bar
- RowLayout {
- anchors.horizontalCenter: parent.horizontalCenter;
-
- width: parent.width - UM.Theme.sizes.default_margin.width * 2;
- height: UM.Theme.sizes.line.height;
-
- Label {
- //: Configuration mode label
- text: qsTr("Mode:");
-
- font: UM.Theme.fonts.sidebar_header;
- color: UM.Theme.colors.text_inactive;
+ Label{
+ id: settingsModeLabel
+ text: catalog.i18nc("@label","Print setup: ");
+ anchors.left: parent.left
+ anchors.leftMargin: UM.Theme.sizes.default_margin.width;
+ anchors.verticalCenter: parent.verticalCenter
+ width: parent.width/100*45
+ font: UM.Theme.fonts.default;
+ color: UM.Theme.colors.text_white
}
- ToolButton {
- text: base.modesModel ? base.modesModel.get(modeMenu.currentIndex).text : "";
-
- style: UM.Theme.styles.sidebar_header_button;
-
- Layout.preferredWidth: base.width * 0.25;
-
- menu: Menu {
- id: modeMenu;
-
- property int currentIndex: 0;
-
- Instantiator {
- model: base.modesModel;
-
- MenuItem {
- text: model.text;
- checkable: true;
- checked: modeMenu.currentIndex == index;
- exclusiveGroup: modeMenuGroup;
- onTriggered: modeMenu.currentIndex = index;
+ Rectangle{
+ id: settingsModeSelection
+ width: parent.width/100*55
+ height: childrenRect.height - UM.Theme.sizes.default_margin.width;
+ anchors.right: parent.right
+ anchors.rightMargin: UM.Theme.sizes.default_margin.width;
+ anchors.verticalCenter: parent.verticalCenter
+ color: "red"
+ Component{
+ id: wizardDelegate
+ Button {
+ id: simpleModeButton
+ height: settingsModeSelection.height
+ anchors.left: parent.left
+ anchors.leftMargin: model.index * (settingsModeSelection.width / 2)
+ anchors.top: parent.top
+ width: parent.width / 2
+ text: model.text
+ style: ButtonStyle {
+ background: Rectangle {
+ color: control.hovered ? UM.Theme.colors.load_save_button_hover : UM.Theme.colors.load_save_button
+ Behavior on color { ColorAnimation { duration: 50; } }
+ Label {
+ anchors.centerIn: parent
+ color: UM.Theme.colors.load_save_button_text
+ font: UM.Theme.fonts.default
+ text: control.text;
+ }
+ }
+ label: Item { }
}
- onObjectAdded: modeMenu.insertItem(index, object)
- onObjectRemoved: modeMenu.removeItem(object)
}
+ }
- ExclusiveGroup { id: modeMenuGroup; }
+ ListView{
+ id: modesList
+ property var index: 0
+ model: base.modesModel
+ delegate: wizardDelegate
+ anchors.top: parent.top
+ anchors.left: parent.left
+ width: parent.width
+ height: UM.Theme.sizes.sidebar_header.height
}
}
+ }
- Rectangle {
- width: 1;
- height: parent.height;
- color: UM.Theme.colors.border;
- }
+ Rectangle {
+ id: machineSelectionRow
+ width: base.width - (UM.Theme.sizes.default_margin.width * 2)
+ height: UM.Theme.sizes.sidebar_header.height
+ anchors.top: settingsModeRow.bottom
+ anchors.horizontalCenter: parent.horizontalCenter
- Label {
+ Label{
+ id: machineSelectionLabel
//: Machine selection label
- text: qsTr("Machine:");
-
- font: UM.Theme.fonts.sidebar_header;
- color: UM.Theme.colors.text_inactive;
+ text: catalog.i18nc("@label","Machine:");
+ anchors.left: parent.left
+ anchors.verticalCenter: parent.verticalCenter
+ font: UM.Theme.fonts.default;
}
ToolButton {
- id: machineButton;
+ id: machineSelection
text: UM.MachineManager.activeMachineInstance;
+ width: parent.width/100*55
+ height: UM.Theme.sizes.sidebar_header.height
+ tooltip: UM.Application.machineName;
+ //style: UM.Theme.styles.sidebar_header_button;
+ anchors.right: parent.right
+ anchors.verticalCenter: parent.verticalCenter
- style: UM.Theme.styles.sidebar_header_button;
-
- Layout.fillWidth: true;
-
- menu: Menu {
- id: machineMenu;
- Instantiator {
+ menu: Menu
+ {
+ id: machineSelectionMenu
+ Instantiator
+ {
model: UM.MachineInstancesModel { }
- MenuItem {
+ MenuItem
+ {
text: model.name;
checkable: true;
checked: model.active;
@@ -99,7 +129,7 @@ Column {
onObjectRemoved: machineMenu.removeItem(object)
}
- ExclusiveGroup { id: machineMenuGroup; }
+ ExclusiveGroup { id: machineSelectionMenuGroup; }
MenuSeparator { }
@@ -109,16 +139,51 @@ Column {
}
}
- UM.SidebarCategoryHeader {
+ /////////////////tot hier
+
+// ToolButton
+// {
+// text: base.modesModel ? base.modesModel.get(modeMenu.currentIndex).text : "";
+//
+// style: UM.Theme.styles.sidebar_header_button;
+//
+// menu: Menu
+// {
+// id: modeMenu;
+//
+// property int currentIndex: 0;
+//
+// Instantiator
+// {
+// model: base.modesModel;
+//
+// MenuItem
+// {
+// text: model.text;
+// checkable: true;
+// checked: modeMenu.currentIndex == index;
+// exclusiveGroup: modeMenuGroup;
+// onTriggered: modeMenu.currentIndex = index;
+// }
+// onObjectAdded: modeMenu.insertItem(index, object)
+// onObjectRemoved: modeMenu.removeItem(object)
+// }
+//
+// ExclusiveGroup { id: modeMenuGroup; }
+// }
+// }
+/*
+ UM.SidebarCategoryHeader
+ {
width: parent.width;
height: UM.Theme.sizes.section.height;
iconSource: UM.Theme.icons.printsetup;
//: Sidebar header label
- text: qsTr("Print Setup");
+ text: catalog.i18nc("@label","Print Setup");
enabled: false;
color: UM.Theme.colors.primary;
- }
+ }*/
}
diff --git a/resources/qml/SidebarSimple.qml b/resources/qml/SidebarSimple.qml
index c27f992031..4da532a837 100644
--- a/resources/qml/SidebarSimple.qml
+++ b/resources/qml/SidebarSimple.qml
@@ -6,9 +6,10 @@ import QtQuick.Controls 1.1
import QtQuick.Controls.Styles 1.1
import QtQuick.Layouts 1.1
-import UM 1.0 as UM
+import UM 1.1 as UM
-Item {
+Item
+{
id: base;
anchors.fill: parent;
@@ -22,44 +23,47 @@ Item {
Component.onCompleted: PrintInformation.enabled = true
Component.onDestruction: PrintInformation.enabled = false
-
- ColumnLayout {
+ UM.I18nCatalog { id: catalog; name:"cura"}
+ ColumnLayout
+ {
anchors.fill: parent;
- Item {
+ Item
+ {
Layout.fillWidth: true;
Layout.preferredHeight: UM.Theme.sizes.section.height;
- Label {
+ Label
+ {
anchors.left: parent.left;
anchors.verticalCenter: parent.verticalCenter;
text: base.minimumPrintTime.valid ? base.minimumPrintTime.getDisplayString(UM.DurationFormat.Short) : "??:??";
font: UM.Theme.fonts.timeslider_time;
color: UM.Theme.colors.primary;
}
- Label {
+ Label
+ {
anchors.centerIn: parent;
- text: {
+ text: //: Sidebar configuration label
+ {
if (UM.Backend.progress < 0)
{
- //: Sidebar configuration label
- return qsTr("No Model Loaded");
+ return catalog.i18nc("@label","No Model Loaded");
}
else if (!base.minimumPrintTime.valid || !base.maximumPrintTime.valid)
{
- //: Sidebar configuration label
- return qsTr("Calculating...")
+ return catalog.i18nc("@label","Calculating...")
}
else
{
- //: Sidebar configuration label
- return qsTr("Estimated Print Time");
+ return catalog.i18nc("@label","Estimated Print Time");
}
}
color: UM.Theme.colors.text;
font: UM.Theme.fonts.default;
}
- Label {
+ Label
+ {
anchors.right: parent.right;
anchors.verticalCenter: parent.verticalCenter;
text: base.maximumPrintTime.valid ? base.maximumPrintTime.getDisplayString(UM.DurationFormat.Short) : "??:??";
@@ -68,7 +72,8 @@ Item {
}
}
- Slider {
+ Slider
+ {
Layout.fillWidth: true;
Layout.preferredHeight: UM.Theme.sizes.section.height;
@@ -81,38 +86,42 @@ Item {
style: UM.Theme.styles.slider;
}
- Item {
+ Item
+ {
Layout.fillWidth: true;
Layout.preferredHeight: UM.Theme.sizes.section.height;
- Label {
+ Label
+ {
anchors.left: parent.left;
anchors.verticalCenter: parent.verticalCenter;
//: Quality slider label
- text: qsTr("Minimum\nDraft");
+ text: catalog.i18nc("@label","Minimum\nDraft");
color: UM.Theme.colors.text;
font: UM.Theme.fonts.default;
}
- Label {
+ Label
+ {
anchors.right: parent.right;
anchors.verticalCenter: parent.verticalCenter;
//: Quality slider label
- text: qsTr("Maximum\nQuality");
+ text: catalog.i18nc("@label","Maximum\nQuality");
horizontalAlignment: Text.AlignRight;
color: UM.Theme.colors.text;
font: UM.Theme.fonts.default;
}
}
- CheckBox {
+ CheckBox
+ {
Layout.fillWidth: true;
Layout.preferredHeight: UM.Theme.sizes.section.height;
//: Setting checkbox
- text: qsTr("Enable Support");
+ text: catalog.i18nc("@action:checkbox","Enable Support");
style: UM.Theme.styles.checkbox;
diff --git a/resources/qml/Toolbar.qml b/resources/qml/Toolbar.qml
index e14dfdc99d..ca6b625b1b 100644
--- a/resources/qml/Toolbar.qml
+++ b/resources/qml/Toolbar.qml
@@ -13,8 +13,9 @@ Item {
width: buttons.width;
height: buttons.height
+ property int activeY
- RowLayout {
+ ColumnLayout {
id: buttons;
anchors.bottom: parent.bottom;
@@ -39,26 +40,30 @@ Item {
//just catch the click so we do not trigger that behaviour.
MouseArea {
anchors.fill: parent;
- onClicked: parent.checked ? UM.Controller.setActiveTool(null) : UM.Controller.setActiveTool(model.id);
+ onClicked: {
+ parent.checked ? UM.Controller.setActiveTool(null) : UM.Controller.setActiveTool(model.id);
+ base.activeY = parent.y
+
+ }
}
}
}
}
Rectangle {
- width: base.width - 10
- height: base.height
- z: parent.z - 1
- anchors.verticalCenter: parent.verticalCenter
- anchors.horizontalCenter: parent.horizontalCenter
- color: UM.Theme.colors.button_lining
- }
+ width: base.width
+ height: base.height
+ z: parent.z - 1
+ anchors.verticalCenter: parent.verticalCenter
+ anchors.horizontalCenter: parent.horizontalCenter
+ color: UM.Theme.colors.lining
+ }
Rectangle {
id: panelBackground;
- anchors.left: parent.left;
- anchors.top: buttons.bottom;
+ anchors.left: parent.right;
+ y: base.activeY
width: panel.item ? Math.max(panel.width + 2 * UM.Theme.sizes.default_margin.width) : 0;
height: panel.item ? panel.height + 2 * UM.Theme.sizes.default_margin.height : 0;
@@ -68,7 +73,7 @@ Item {
color: UM.Theme.colors.tool_panel_background;
border.width: UM.Theme.sizes.default_lining.width
- border.color: UM.Theme.colors.button_lining
+ border.color: UM.Theme.colors.lining
Loader {
id: panel
diff --git a/resources/qml/ViewPage.qml b/resources/qml/ViewPage.qml
index ed00eacca0..66af58eaa6 100644
--- a/resources/qml/ViewPage.qml
+++ b/resources/qml/ViewPage.qml
@@ -6,25 +6,27 @@ import QtQuick.Controls 1.1
import QtQuick.Layouts 1.1
import QtQuick.Controls.Styles 1.1
-import UM 1.0 as UM
+import UM 1.1 as UM
UM.PreferencesPage
{
id: preferencesPage
//: View configuration page title
- title: qsTr("View");
+ title: catalog.i18nc("@title:window","View");
function reset()
{
UM.Preferences.resetPreference("view/show_overhang");
- UM.Preferences.resetPreferences("view/center_on_select");
+ UM.Preferences.resetPreference("view/center_on_select");
+ overhangCheckbox.checked = UM.Preferences.getValue("view/show_overhang")
+ centerCheckbox.checked = UM.Preferences.getValue("view/center_on_select")
}
GridLayout
{
columns: 2;
-
+ UM.I18nCatalog { id: catalog; name:"cura"}
CheckBox
{
id: overhangCheckbox
@@ -36,18 +38,21 @@ UM.PreferencesPage
id: viewText //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("Display Overhang");
+ text: catalog.i18nc("@action:button","Display Overhang");
onClicked: overhangCheckbox.checked = !overhangCheckbox.checked
//: Display Overhang preference tooltip
- tooltip: "Highlight unsupported areas of the model in red. Without support these areas will nog print properly."
+ tooltip: catalog.i18nc("@info:tooltip","Highlight unsupported areas of the model in red. Without support these areas will nog print properly.")
- style: ButtonStyle {
- background: Rectangle {
+ style: ButtonStyle
+ {
+ background: Rectangle
+ {
border.width: 0
color: "transparent"
}
- label: Text {
+ label: Text
+ {
renderType: Text.NativeRendering
horizontalAlignment: Text.AlignLeft
text: control.text
@@ -66,11 +71,11 @@ UM.PreferencesPage
id: centerText //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("Center camera when item is selected");
+ text: catalog.i18nc("@action:button","Center camera when item is selected");
onClicked: centerCheckbox.checked = !centerCheckbox.checked
//: Display Overhang preference tooltip
- tooltip: "Moves the camera so the object is in the center of the view when an object is selected"
+ tooltip: catalog.i18nc("@info:tooltip","Moves the camera so the object is in the center of the view when an object is selected")
style: ButtonStyle
{
diff --git a/resources/qml/WizardPages/AddMachine.qml b/resources/qml/WizardPages/AddMachine.qml
index 3b58352500..b266afcf31 100644
--- a/resources/qml/WizardPages/AddMachine.qml
+++ b/resources/qml/WizardPages/AddMachine.qml
@@ -19,6 +19,8 @@ Item
property variant wizard: null;
+ UM.I18nCatalog { id: catalog; name: "cura"}
+
Connections
{
target: base.wizard
@@ -221,6 +223,11 @@ Item
break;
}
}
+
+ if (elementRoot.getPageCount() == elementRoot.currentPage)
+ {
+ elementRoot.visible = false
+ }
}
}
diff --git a/resources/qml/WizardPages/SelectUpgradedParts.qml b/resources/qml/WizardPages/SelectUpgradedParts.qml
index 46fdd876af..e85c0f50aa 100644
--- a/resources/qml/WizardPages/SelectUpgradedParts.qml
+++ b/resources/qml/WizardPages/SelectUpgradedParts.qml
@@ -6,7 +6,7 @@ import QtQuick.Controls 1.1
import QtQuick.Layouts 1.1
import QtQuick.Window 2.1
-import UM 1.0 as UM
+import UM 1.1 as UM
Item
{
@@ -14,7 +14,7 @@ Item
property string title
SystemPalette{id: palette}
-
+ UM.I18nCatalog { id: catalog; name:"cura"}
ScrollView
{
height: parent.height
@@ -36,7 +36,7 @@ Item
//: Add UM Original wizard page description
width: parent.width
wrapMode: Text.WordWrap
- text: qsTr("To assist you in having better default settings for your Ultimaker. Cura would like to know which upgrades you have in your machine:")
+ text: catalog.i18nc("@label","To assist you in having better default settings for your Ultimaker. Cura would like to know which upgrades you have in your machine:")
}
Column
@@ -46,19 +46,19 @@ Item
CheckBox
{
- text: qsTr("Extruder driver ugrades")
+ text: catalog.i18nc("@action:checkbox","Extruder driver ugrades")
}
CheckBox
{
- text: qsTr("Heated printer bed (kit)")
+ text: catalog.i18nc("@action:checkbox","Heated printer bed (kit)")
}
CheckBox
{
- text: qsTr("Heated printer bed (self built)")
+ text: catalog.i18nc("@action:checkbox","Heated printer bed (self built)")
}
CheckBox
{
- text: qsTr("Dual extrusion (experimental)")
+ text: catalog.i18nc("@action:checkbox","Dual extrusion (experimental)")
checked: true
}
}
@@ -67,14 +67,14 @@ Item
{
width: parent.width
wrapMode: Text.WordWrap
- text: qsTr("If you have an Ultimaker bought after october 2012 you will have the Extruder drive upgrade. If you do not have this upgrade, it is highly recommended to improve reliability.");
+ text: catalog.i18nc("@label","If you have an Ultimaker bought after october 2012 you will have the Extruder drive upgrade. If you do not have this upgrade, it is highly recommended to improve reliability.");
}
Label
{
width: parent.width
wrapMode: Text.WordWrap
- text: qsTr("This upgrade can be bought from the Ultimaker webshop or found on thingiverse as thing:26094");
+ text: catalog.i18nc("@label","This upgrade can be bought from the Ultimaker webshop or found on thingiverse as thing:26094");
}
}
}
diff --git a/resources/qml/WizardPages/UltimakerCheckup.qml b/resources/qml/WizardPages/UltimakerCheckup.qml
index acfe288e14..1b15afa59a 100644
--- a/resources/qml/WizardPages/UltimakerCheckup.qml
+++ b/resources/qml/WizardPages/UltimakerCheckup.qml
@@ -6,7 +6,7 @@ import QtQuick.Controls 1.1
import QtQuick.Layouts 1.1
import QtQuick.Window 2.1
-import UM 1.0 as UM
+import UM 1.1 as UM
Column
{
@@ -23,7 +23,7 @@ Column
Component.onCompleted: printer_connection.startPollEndstop()
Component.onDestruction: printer_connection.stopPollEndstop()
-
+ UM.I18nCatalog { id: catalog; name:"cura"}
Label
{
text: parent.title
@@ -33,14 +33,14 @@ Column
Label
{
//: Add Printer wizard page description
- text: qsTr("It's a good idea to do a few sanity checks on your Ultimaker. \n You can skip these if you know your machine is functional");
+ text: catalog.i18nc("@label","It's a good idea to do a few sanity checks on your Ultimaker. \n You can skip these if you know your machine is functional");
}
Row
{
Label
{
- text: qsTr("Connection: ")
+ text: catalog.i18nc("@label","Connection: ")
}
Label
{
@@ -51,22 +51,22 @@ Column
{
Label
{
- text: qsTr("Min endstop X: ")
+ text: catalog.i18nc("@label","Min endstop X: ")
}
Label
{
- text: x_min_pressed ? qsTr("Works") : qsTr("Not checked")
+ text: x_min_pressed ? catalog.i18nc("@label","Works") : catalog.i18nc("@label","Not checked")
}
}
Row
{
Label
{
- text: qsTr("Min endstop Y: ")
+ text: catalog.i18nc("@label","Min endstop Y: ")
}
Label
{
- text: y_min_pressed ? qsTr("Works") : qsTr("Not checked")
+ text: y_min_pressed ? catalog.i18nc("@label","Works") : catalog.i18nc("@label","Not checked")
}
}
@@ -74,11 +74,11 @@ Column
{
Label
{
- text: qsTr("Min endstop Z: ")
+ text: catalog.i18nc("@label","Min endstop Z: ")
}
Label
{
- text: z_min_pressed ? qsTr("Works") : qsTr("Not checked")
+ text: z_min_pressed ? catalog.i18nc("@label","Works") : catalog.i18nc("@label","Not checked")
}
}
@@ -86,7 +86,7 @@ Column
{
Label
{
- text: qsTr("Nozzle temperature check: ")
+ text: catalog.i18nc("@label","Nozzle temperature check: ")
}
Label
{
@@ -94,10 +94,10 @@ Column
}
Button
{
- text: "Start heating"
+ text: catalog.i18nc("@action:button","Start heating")
onClicked:
{
- heater_status_label.text = qsTr("Checking")
+ heater_status_label.text = catalog.i18nc("@label","Checking")
printer_connection.heatupNozzle(190)
wizardPage.extruder_target_temp = 190
}
@@ -105,7 +105,7 @@ Column
Label
{
id: heater_status_label
- text: qsTr("Not checked")
+ text: catalog.i18nc("@label","Not checked")
}
}
@@ -113,7 +113,7 @@ Column
{
Label
{
- text: qsTr("bed temperature check: ")
+ text: catalog.i18nc("@label","bed temperature check: ")
}
Label
{
@@ -121,10 +121,10 @@ Column
}
Button
{
- text: "Start heating"
+ text: catalog.i18nc("@action:button","Start heating")
onClicked:
{
- bed_status_label.text = qsTr("Checking")
+ bed_status_label.text = catalog.i18nc("@label","Checking")
printer_connection.printer.heatupBed(60)
wizardPage.bed_target_temp = 60
}
@@ -132,7 +132,7 @@ Column
Label
{
id: bed_status_label
- text: qsTr("Not checked")
+ text: catalog.i18nc("@label","Not checked")
}
}
@@ -159,7 +159,7 @@ Column
{
if(printer_connection.extruderTemperature > wizardPage.extruder_target_temp - 10 && printer_connection.extruderTemperature < wizardPage.extruder_target_temp + 10)
{
- heater_status_label.text = qsTr("Works")
+ heater_status_label.text = catalog.i18nc("@label","Works")
printer_connection.heatupNozzle(0)
}
}
@@ -167,7 +167,7 @@ Column
{
if(printer_connection.bedTemperature > wizardPage.bed_target_temp - 5 && printer_connection.bedTemperature < wizardPage.bed_target_temp + 5)
{
- bed_status_label.text = qsTr("Works")
+ bed_status_label.text = catalog.i18nc("@label","Works")
printer_connection.heatupBed(0)
}
}
diff --git a/resources/themes/cura/icons/arrow_bottom.svg b/resources/themes/cura/icons/arrow_bottom.svg
new file mode 100644
index 0000000000..792972dcba
--- /dev/null
+++ b/resources/themes/cura/icons/arrow_bottom.svg
@@ -0,0 +1,7 @@
+
+
+
diff --git a/resources/themes/cura/icons/arrow_left.svg b/resources/themes/cura/icons/arrow_left.svg
new file mode 100644
index 0000000000..4d9ac60bde
--- /dev/null
+++ b/resources/themes/cura/icons/arrow_left.svg
@@ -0,0 +1,7 @@
+
+
+
diff --git a/resources/themes/cura/icons/arrow_right.svg b/resources/themes/cura/icons/arrow_right.svg
new file mode 100644
index 0000000000..561b0c8200
--- /dev/null
+++ b/resources/themes/cura/icons/arrow_right.svg
@@ -0,0 +1,7 @@
+
+
+
diff --git a/resources/themes/cura/icons/arrow_top.svg b/resources/themes/cura/icons/arrow_top.svg
new file mode 100644
index 0000000000..750783af0c
--- /dev/null
+++ b/resources/themes/cura/icons/arrow_top.svg
@@ -0,0 +1,7 @@
+
+
+
diff --git a/resources/themes/cura/icons/basic.svg b/resources/themes/cura/icons/basic.svg
new file mode 100644
index 0000000000..48b2adad19
--- /dev/null
+++ b/resources/themes/cura/icons/basic.svg
@@ -0,0 +1,16 @@
+
+
+
diff --git a/resources/themes/cura/icons/cross2.svg b/resources/themes/cura/icons/cross2.svg
new file mode 100644
index 0000000000..dda0b9d501
--- /dev/null
+++ b/resources/themes/cura/icons/cross2.svg
@@ -0,0 +1,10 @@
+
+
+
diff --git a/resources/themes/cura/icons/light.svg b/resources/themes/cura/icons/light.svg
new file mode 100644
index 0000000000..e32a7345b1
--- /dev/null
+++ b/resources/themes/cura/icons/light.svg
@@ -0,0 +1,15 @@
+
+
+
diff --git a/resources/themes/cura/icons/medium.svg b/resources/themes/cura/icons/medium.svg
new file mode 100644
index 0000000000..44097c21de
--- /dev/null
+++ b/resources/themes/cura/icons/medium.svg
@@ -0,0 +1,19 @@
+
+
+
diff --git a/resources/themes/cura/icons/plus.svg b/resources/themes/cura/icons/plus.svg
new file mode 100644
index 0000000000..a8f9f201ca
--- /dev/null
+++ b/resources/themes/cura/icons/plus.svg
@@ -0,0 +1,8 @@
+
+
+
diff --git a/resources/themes/cura/icons/print_time.svg b/resources/themes/cura/icons/print_time.svg
new file mode 100644
index 0000000000..787c7c3eb7
--- /dev/null
+++ b/resources/themes/cura/icons/print_time.svg
@@ -0,0 +1,8 @@
+
+
+
diff --git a/resources/themes/cura/icons/quick.svg b/resources/themes/cura/icons/quick.svg
new file mode 100644
index 0000000000..9b1c07a584
--- /dev/null
+++ b/resources/themes/cura/icons/quick.svg
@@ -0,0 +1,10 @@
+
+
+
diff --git a/resources/themes/cura/icons/setting_per_object.svg b/resources/themes/cura/icons/setting_per_object.svg
new file mode 100644
index 0000000000..9c5bd9bc8d
--- /dev/null
+++ b/resources/themes/cura/icons/setting_per_object.svg
@@ -0,0 +1,7 @@
+
+
+
diff --git a/resources/themes/cura/icons/strong.svg b/resources/themes/cura/icons/strong.svg
new file mode 100644
index 0000000000..9c527ecc92
--- /dev/null
+++ b/resources/themes/cura/icons/strong.svg
@@ -0,0 +1,14 @@
+
+
+
diff --git a/resources/themes/cura/icons/ulti.svg b/resources/themes/cura/icons/ulti.svg
new file mode 100644
index 0000000000..48b2adad19
--- /dev/null
+++ b/resources/themes/cura/icons/ulti.svg
@@ -0,0 +1,16 @@
+
+
+
diff --git a/resources/themes/cura/styles.qml b/resources/themes/cura/styles.qml
index 0810989304..228afa3a11 100644
--- a/resources/themes/cura/styles.qml
+++ b/resources/themes/cura/styles.qml
@@ -67,11 +67,14 @@ QtObject {
Rectangle {
id: tool_button_background
- anchors.top: parent.verticalCenter;
+ anchors.left: parent.right
+ anchors.verticalCenter: parent.verticalCenter
+ //anchors.top: parent.bottom
- width: parent.width;
- height: control.hovered ? parent.height / 2 + label.height : 0;
- Behavior on height { NumberAnimation { duration: 100; } }
+ //width: label.width > parent.width ? label.width : parent.width
+ width: control.hovered ? label.width : 0;
+ height: label.height
+ Behavior on width { NumberAnimation { duration: 100; } }
opacity: control.hovered ? 1.0 : 0.0;
Behavior on opacity { NumberAnimation { duration: 100; } }
@@ -205,26 +208,23 @@ QtObject {
background:Rectangle {
implicitWidth: UM.Theme.sizes.message.width - (UM.Theme.sizes.default_margin.width * 2)
implicitHeight: UM.Theme.sizes.progressbar.height
- x: UM.Theme.sizes.default_margin.width
color: UM.Theme.colors.progressbar_background
}
progress: Rectangle {
color: control.indeterminate ? "transparent" : UM.Theme.colors.progressbar_control
-
Rectangle{
color: UM.Theme.colors.progressbar_control
width: UM.Theme.sizes.progressbar_control.width
height: UM.Theme.sizes.progressbar_control.height
- x: UM.Theme.sizes.default_margin.width
visible: control.indeterminate
SequentialAnimation on x {
id: xAnim
- property int animEndPoint: UM.Theme.sizes.message.width - UM.Theme.sizes.default_margin.width - UM.Theme.sizes.progressbar_control.width
+ property int animEndPoint: UM.Theme.sizes.message.width - (UM.Theme.sizes.default_margin.width * 2) - UM.Theme.sizes.progressbar_control.width
running: control.indeterminate
loops: Animation.Infinite
- NumberAnimation { from: UM.Theme.sizes.default_margin.width; to: xAnim.animEndPoint; duration: 2000;}
- NumberAnimation { from: xAnim.animEndPoint; to: UM.Theme.sizes.default_margin.width; duration: 2000;}
+ NumberAnimation { from: 0; to: xAnim.animEndPoint; duration: 2000;}
+ NumberAnimation { from: xAnim.animEndPoint; to: 0; duration: 2000;}
}
}
}
@@ -235,7 +235,7 @@ QtObject {
property Component sidebar_category: Component {
ButtonStyle {
- background: UM.AngledCornerRectangle {
+ background: Rectangle {
implicitHeight: UM.Theme.sizes.section.height;
color: {
if(control.color) {
@@ -253,37 +253,51 @@ QtObject {
}
}
Behavior on color { ColorAnimation { duration: 50; } }
- cornerSize: UM.Theme.sizes.default_margin.width;
}
label: Item {
anchors.fill: parent;
- anchors.margins: UM.Theme.sizes.default_margin.width;
-
- Image {
+ anchors.left: parent.left
+ Item{
id: icon;
-
- anchors.left: parent.left;
- anchors.verticalCenter: parent.verticalCenter;
-
- source: control.iconSource;
- width: UM.Theme.sizes.section_icon.width;
- height: UM.Theme.sizes.section_icon.height;
+ anchors.left: parent.left
+ height: parent.height
+ width: UM.Theme.sizes.section_icon_column.width
+ UM.RecolorImage {
+ anchors.verticalCenter: parent.verticalCenter
+ anchors.horizontalCenter: parent.horizontalCenter
+ color: UM.Theme.colors.setting_category_text
+ source: control.iconSource;
+ width: UM.Theme.sizes.section_icon.width;
+ height: UM.Theme.sizes.section_icon.height;
+ sourceSize.width: width + 15
+ sourceSize.height: width + 15
+ }
}
Label {
anchors {
left: icon.right;
- leftMargin: UM.Theme.sizes.default_margin.width;
right: parent.right;
verticalCenter: parent.verticalCenter;
}
-
text: control.text;
font: UM.Theme.fonts.setting_category;
color: UM.Theme.colors.setting_category_text;
fontSizeMode: Text.HorizontalFit;
minimumPointSize: 8
}
+ UM.RecolorImage {
+ id: lengthIcon
+ anchors.verticalCenter: parent.verticalCenter
+ anchors.right: parent.right
+ anchors.rightMargin: UM.Theme.sizes.default_margin.width * 2
+ width: UM.Theme.sizes.standard_arrow.width
+ height: UM.Theme.sizes.standard_arrow.height
+ sourceSize.width: width
+ sourceSize.height: width
+ color: UM.Theme.colors.setting_category_text
+ source: control.checked ? UM.Theme.icons.arrow_top : UM.Theme.icons.arrow_bottom
+ }
}
}
}
@@ -295,20 +309,15 @@ QtObject {
transientScrollBars: false
- scrollBarBackground: UM.AngledCornerRectangle {
- implicitWidth: UM.Theme.sizes.scrollbar.width;
-
- cornerSize: UM.Theme.sizes.scrollbar.width;
-
+ scrollBarBackground: Rectangle {
+ implicitWidth: UM.Theme.sizes.scrollbar.width
color: UM.Theme.colors.scrollbar_background;
}
- handle: UM.AngledCornerRectangle {
+ handle: Rectangle {
id: scrollViewHandle
implicitWidth: UM.Theme.sizes.scrollbar.width;
- cornerSize: UM.Theme.sizes.scrollbar.width;
-
color: styleData.pressed ? UM.Theme.colors.scrollbar_handle_down : styleData.hovered ? UM.Theme.colors.scrollbar_handle_hover : UM.Theme.colors.scrollbar_handle;
Behavior on color { ColorAnimation { duration: 50; } }
}
@@ -317,14 +326,13 @@ QtObject {
property variant setting_item: UM.SettingItemStyle {
labelFont: UM.Theme.fonts.default;
- labelColor: UM.Theme.colors.setting_label;
+ labelColor: UM.Theme.colors.setting_control_text;
- spacing: UM.Theme.sizes.default_margin.width;
+ spacing: UM.Theme.sizes.default_lining.height;
fixedHeight: UM.Theme.sizes.setting.height;
controlWidth: UM.Theme.sizes.setting_control.width;
controlRightMargin: UM.Theme.sizes.setting_control_margin.width;
- controlBorderWidth: 1;
controlColor: UM.Theme.colors.setting_control;
controlHighlightColor: UM.Theme.colors.setting_control_highlight;
controlBorderColor: UM.Theme.colors.setting_control_border;
@@ -419,26 +427,6 @@ QtObject {
color: UM.Theme.colors.slider_groove_fill;
width: (control.value / (control.maximumValue - control.minimumValue)) * parent.width;
}
- Label {
- id: maxValueLabel
- visible: UM.LayerView.getLayerActivity && Printer.getPlatformActivity ? true : false
- text: control.maximumValue + 1
- font: control.maximumValue > 998 ? UM.Theme.fonts.small : UM.Theme.fonts.default
- transformOrigin: Item.BottomLeft
- rotation: 90
- x: parent.x + parent.width - maxValueLabel.height
- y: control.maximumValue > 998 ? parent.y + UM.Theme.sizes.slider_layerview_smalltext_margin.width : parent.y
- }
- Label {
- id: minValueLabel
- visible: UM.LayerView.getLayerActivity && Printer.getPlatformActivity ? true : false
- text: '1'
- font: control.maximumValue > 998 ? UM.Theme.fonts.small : UM.Theme.fonts.default
- transformOrigin: Item.BottomLeft
- rotation: 90
- x: parent.x
- y: control.maximumValue > 998 ? parent.y + UM.Theme.sizes.slider_layerview_smalltext_margin.width : parent.y
- }
}
handle: Rectangle {
id: layerSliderControl
@@ -446,26 +434,37 @@ QtObject {
height: UM.Theme.sizes.slider_handle.height;
color: control.hovered ? UM.Theme.colors.slider_handle_hover : UM.Theme.colors.slider_handle;
Behavior on color { ColorAnimation { duration: 50; } }
- Label {
+ TextField {
id: valueLabel
+ property int unremovableSpacing: 5
+ property string maxValue: control.maximumValue + 1
+ placeholderText: control.value + 1
+ onEditingFinished: {
+ if (valueLabel.text != ''){
+ control.value = valueLabel.text - 1
+ valueLabel.text = ''
+ valueLabel.focus = false
+ }
+
+ }
+ validator: IntValidator {bottom: 1; top: control.maximumValue + 1;}
visible: UM.LayerView.getLayerActivity && Printer.getPlatformActivity ? true : false
- text: control.value + 1
anchors.bottom: layerSliderControl.bottom
anchors.right: layerSliderControl.left
- anchors.bottomMargin: parent.width + UM.Theme.sizes.default_margin.width
- font: UM.Theme.fonts.default
+ anchors.rightMargin: valueLabel.unremovableSpacing / 2
+ anchors.bottomMargin: parent.width + (UM.Theme.sizes.default_margin.width / 2)
transformOrigin: Item.BottomRight
rotation: 90
- Rectangle {
- width: (parent.width + UM.Theme.sizes.tooltip_margins.width) < 35 ? 35 : parent.width + UM.Theme.sizes.tooltip_margins.width
- height: parent.height + (UM.Theme.sizes.tooltip_margins.height / 2)
- anchors.verticalCenter: parent.verticalCenter
- anchors.horizontalCenter: parent.horizontalCenter
- z: parent.z - 1
- color: UM.Theme.colors.slider_text_background
- border.width: 1
- border.color: UM.Theme.colors.slider_groove_fill;
-
+ style: TextFieldStyle{
+ textColor: UM.Theme.colors.setting_control_text;
+ font: UM.Theme.fonts.default;
+ background: Rectangle {
+ radius: 0
+ implicitWidth: control.maxValue.length * valueLabel.font.pixelSize
+ implicitHeight: UM.Theme.sizes.slider_handle.height + valueLabel.unremovableSpacing
+ border.width: 1;
+ border.color: UM.Theme.colors.slider_groove_border;
+ }
}
}
}
diff --git a/resources/themes/cura/theme.json b/resources/themes/cura/theme.json
index 413a653d3c..13514ffbc8 100644
--- a/resources/themes/cura/theme.json
+++ b/resources/themes/cura/theme.json
@@ -32,10 +32,6 @@
"capitalize": true,
"family": "ProximaNova"
},
- "sidebar_save_to": {
- "size": 1.0,
- "family": "ProximaNova"
- },
"timeslider_time": {
"size": 1.0,
"bold": true,
@@ -47,13 +43,14 @@
"family": "ProximaNova"
},
"setting_category": {
- "size": 1.5,
+ "size": 1.0,
"family": "ProximaNova"
}
},
"colors": {
"sidebar": [255, 255, 255, 255],
+ "lining": [208, 210, 211, 255],
"primary": [12, 169, 227, 255],
"primary_hover": [34, 150, 190, 255],
@@ -63,14 +60,16 @@
"text": [140, 144, 154, 255],
"text_inactive": [174, 174, 174, 255],
+ "text_white": [255, 255, 255, 255],
"text_hover": [35, 35, 35, 255],
"text_pressed": [12, 169, 227, 255],
+ "sidebar_header_bar": [12, 169, 227, 255],
+
"button": [139, 143, 153, 255],
- "button_hover": [116, 120, 127, 255],
- "button_active": [12, 169, 227, 255],
+ "button_hover": [77, 184, 226, 255],
+ "button_active": [32, 166, 219, 255],
"button_active_hover": [77, 184, 226, 255],
- "button_lining": [208, 210, 211, 255],
"button_text": [255, 255, 255, 255],
"button_disabled": [245, 245, 245, 255],
"button_tooltip_text": [35, 35, 35, 255],
@@ -81,23 +80,23 @@
"load_save_button_active": [43, 45, 46, 255],
"scrollbar_background": [245, 245, 245, 255],
- "scrollbar_handle": [205, 202, 201, 255],
+ "scrollbar_handle": [12, 159, 227, 255],
"scrollbar_handle_hover": [174, 174, 174, 255],
"scrollbar_handle_down": [12, 159, 227, 255],
- "setting_category": [205, 202, 201, 255],
- "setting_category_disabled": [245, 245, 245, 255],
- "setting_category_hover": [174, 174, 174, 255],
- "setting_category_active": [12, 169, 227, 255],
- "setting_category_active_hover": [34, 150, 190, 255],
- "setting_category_text": [255, 255, 255, 255],
+ "setting_category": [238, 238, 238, 255],
+ "setting_category_disabled": [238, 238, 238, 255],
+ "setting_category_hover": [240, 248, 255, 255],
+ "setting_category_active": [238, 238, 238, 255],
+ "setting_category_active_hover": [240, 248, 255, 255],
+ "setting_category_text": [35, 35, 35, 255],
- "setting_label": [140, 144, 154, 255],
"setting_control": [255, 255, 255, 255],
"setting_control_highlight": [245, 245, 245, 255],
"setting_control_border": [174, 174, 174, 255],
- "setting_control_text": [35, 35, 35, 255],
- "setting_control_hover": [35, 35, 35, 255],
+ "setting_control_text": [0, 0, 0, 255],
+ "setting_control_hover": [139, 143, 153, 255],
+ "setting_control_selected": [35, 35, 35, 255],
"setting_unit": [174, 174, 174, 255],
"setting_validation_error": [255, 57, 14, 255],
"setting_validation_warning": [255, 186, 15, 255],
@@ -107,10 +106,10 @@
"progressbar_control": [12, 169, 227, 255],
"slider_groove": [245, 245, 245, 255],
- "slider_groove_border": [160, 163, 171, 255],
- "slider_groove_fill": [160, 163, 171, 255],
- "slider_handle": [12, 169, 227, 255],
- "slider_handle_hover": [34, 150, 190, 255],
+ "slider_groove_border": [139, 143, 153, 255],
+ "slider_groove_fill": [139, 143, 153, 255],
+ "slider_handle": [32, 166, 219, 255],
+ "slider_handle_hover": [77, 182, 226, 255],
"slider_text_background": [255, 255, 255, 255],
"checkbox": [255, 255, 255, 255],
@@ -132,7 +131,8 @@
"save_button_background": [249, 249, 249, 255],
"message_background": [255, 255, 255, 255],
- "message_text": [12, 169, 227, 255],
+ "message_text": [32, 166, 219, 255],
+ "message_dismiss": [139, 143, 153, 255],
"tool_panel_background": [255, 255, 255, 255]
},
@@ -141,7 +141,6 @@
"window_margin": [2.0, 2.0],
"default_margin": [1.0, 1.0],
"default_lining": [0.1, 0.1],
- "panel": [22.0, 10.0],
"logo": [9.5, 2.0],
"toolbar_button": [2.0, 2.0],
"toolbar_spacing": [1.0, 1.0],
@@ -149,11 +148,17 @@
"loadfile_button": [11.0, 2.4],
"loadfile_margin": [0.8, 0.4],
- "section": [22.0, 3.0],
- "section_icon": [2.14, 2.14],
- "section_text_margin": [0.33, 0.33],
+ "sidebar": [24.0, 10.0],
+ "sidebar_header": [0.0, 3.2],
+ "sidebar_subParts": [0.0, 2.4],
+ "sidebar_specs_bar": [0.0, 2.2],
+ "sidebar_inputFields": [0.0, 1.9],
- "setting": [21.0, 2.0],
+ "section": [0.0, 1.8],
+ "section_icon": [1.2, 1.2],
+ "section_icon_column": [2.8, 0.0],
+
+ "setting": [21.0, 1.8],
"setting_control": [6.0, 2.0],
"setting_control_margin": [3.0, 3.0],
"setting_unit_margin": [0.5, 0.5],
@@ -161,6 +166,7 @@
"standard_list_lineheight": [1.5, 1.5],
"standard_list_input": [20.0, 25.0],
+ "standard_arrow": [0.6, 0.6],
"button": [3.2, 3.2],
"button_icon": [2.5, 2.5],
@@ -169,11 +175,11 @@
"progressbar_control": [8.0, 0.8],
"progressbar_padding": [0.0, 1.0],
- "scrollbar": [0.5, 0.5],
+ "scrollbar": [0.7, 0.5],
"slider_groove": [0.5, 0.5],
"slider_handle": [1.5, 1.5],
- "slider_layerview_background": [6.0, 0.0],
+ "slider_layerview_background": [4.0, 0.0],
"slider_layerview_smalltext_margin": [0.3, 0.00],
"slider_layerview_background_extension": [0.0, 2.2],
"slider_layerview_margin": [3.0, 3.0],
@@ -188,6 +194,7 @@
"save_button_slicing_bar": [0.0, 2.2],
"save_button_label_margin": [0.5, 0.5],
"save_button_save_to_button": [0.3, 2.7],
+ "save_button_specs_icons": [1.4, 1.4],
"modal_window_minimum": [30.0, 30.0],
"wizard_progress": [10.0, 0.0],