Merge branch 'master' of github.com:ultimaker/Cura into per_object_settings

* 'master' of github.com:ultimaker/Cura: (49 commits)
  15.10 restyling of the sidebar header
  15.10 restyling of the sidebar header
  15.10 restyling of the sidebar
  split magic_mesh)surface_mode into Normal, Surface, Both
  Added preference to disable automatic scale
  Removed unused import
  Added changeLog plugin
  Added missing )
  Merging of mine and Jaimes work
  Removed font from rectangle
  JSON: git diff! removed triangles and grid top/bottom skin options (though they are available)
  Code style & switch to translation catalog
  15.10 re-alignment of the toolbar
  15.10 New Icons
  15.10 restyling of the savebutton Area
  Added message asking about sending data to server
  Added exception handling for checking overlap.
  Fixed default button for general and view page
  Fixed double ID in qml
  Removed unused import
  ...
This commit is contained in:
Arjen Hiemstra 2015-09-01 15:44:19 +02:00
commit 57b2ce4f3e
55 changed files with 1753 additions and 927 deletions

View file

@ -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()

View file

@ -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.
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

View file

@ -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 += "<h1>" + str(version) + "</h1><br>"
result += ""
for change in logs[version]:
result += "<b>" + str(change) + "</b><br>"
for line in logs[version][change]:
result += str(line) + "<br>"
result += "<br>"
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)

View file

@ -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()
}
}
}

View file

@ -0,0 +1,41 @@
[15.10.0]
*All at Once/One at a Time
Curas 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)
Were 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. Its designed to make it easier for anyone that wants to write a plugin giving them some form of output device, whether its a printer or a web service.
*Improved Cut-Off Object Bottom (New)
Weve 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)
Were 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.

View file

@ -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()}

View file

@ -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

View file

@ -28,6 +28,7 @@ class LayerData(MeshData):
self._layers[layer].polygons.append(p)
def getLayer(self, layer):
if layer in self._layers:
return self._layers[layer]
def getLayers(self):

View file

@ -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

View file

@ -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()

View file

@ -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()}

View file

@ -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
}

View file

@ -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;

View file

@ -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:

View file

@ -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 }
}
}

View file

@ -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 }
}
}

View file

@ -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 }
}
}

View file

@ -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 },

View file

@ -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,6 +452,17 @@
"default": 20,
"max_value_warning": "100.0",
"children": {
"infill_line_distance": {
"label": "Line distance",
"description": "Distance between the printed infill lines.",
"unit": "mm",
"type": "float",
"default": 2,
"visible": false,
"inherit_function": "0 if parent_value == 0 else (infill_line_width * 100) / parent_value"
}
}
},
"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.",
@ -450,17 +477,6 @@
"default": "grid",
"inherit_function": "'lines' if parent_value > 25 else 'grid'"
},
"infill_line_distance": {
"label": "Line distance",
"description": "Distance between the printed infill lines.",
"unit": "mm",
"type": "float",
"default": 2,
"visible": false,
"inherit_function": "0 if parent_value == 0 else (infill_line_width * 100) / parent_value"
}
}
},
"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": {

View file

@ -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 }
}
}

View file

@ -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 }
}
}

View file

@ -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
},

View file

@ -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
},

View file

@ -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 }
}
}

View file

@ -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;
}

View file

@ -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";
}
}

View file

@ -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

View file

@ -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
}

View file

@ -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();
}
}

View file

@ -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
{

View file

@ -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
implicitHeight: UM.Theme.sizes.sidebar_header.height
anchors.top: parent.top
anchors.topMargin: UM.Theme.sizes.default_margin.height;
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;
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
}
}
validator: RegExpValidator {
regExp: /^[0-9a-zA-Z\_\-]*$/
}
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;
}
}
}
}
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;
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
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("");
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;
}
else if (base.progress > 0.99){
//: Save button label
return qsTr("Estimated Print-time");
}
return "";
}
}
Label {
id: printDurationLabel
Label{
id: timeSpec
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);
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))
}
Label {
id: printMaterialLabel
}
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: 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);
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)
}
}
Rectangle {
id: infoBoxOverlay
anchors {
left: infoBox.left;
top: infoBox.top;
bottom: infoBox.bottom;
}
width: Math.max(infoBox.width * base.progress);
color: UM.Theme.colors.save_button_active
visible: progress > 0.99 ? false : true
}
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
Rectangle {
id: deviceSelectionIcon
color: UM.Theme.colors.save_button_background;
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;
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;
width: parent.height
height: parent.height
UM.RecolorImage {
anchors.fill: parent;
sourceSize.width: width;
sourceSize.height: height;
color: UM.Theme.colors.save_button_active
source: control.iconSource;
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 {
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;
}
}
label: Item { }
label: Label{ }
}
menu: Menu {
@ -200,9 +218,6 @@ Rectangle {
ExclusiveGroup { id: devicesMenuGroup; }
}
}
}
UM.OutputDevicesModel {
id: devicesModel;
UM.OutputDevicesModel { id: devicesModel; }
}
}

View file

@ -8,51 +8,54 @@ 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;
spacing: UM.Theme.sizes.default_margin.height;
SidebarHeader {
id: header;
Layout.fillWidth: true;
width: parent.width
height: totalHeightHeader
addMachineAction: base.addMachineAction;
configureMachinesAction: base.configureMachinesAction;
modesModel: modesListModel;
currentModeIndex: {
currentModeIndex:
{
var index = parseInt(UM.Preferences.getValue("cura/active_mode"))
if(index) {
if(index)
{
return index;
}
return 0;
@ -61,8 +64,10 @@ Rectangle {
}
Item {
Layout.fillWidth: true;
implicitHeight: UM.Theme.sizes.setting.height;
id: variantItem;
anchors.top: header.bottom;
height: UM.Theme.sizes.setting.height;
visible: UM.MachineManager.hasVariants;
@ -93,8 +98,10 @@ Rectangle {
}
Item {
Layout.fillWidth: true;
implicitHeight: UM.Theme.sizes.setting.height;
id: profileItem;
anchors.top: variantItem.bottom;
height: UM.Theme.sizes.setting.height;
Row {
spacing: UM.Theme.sizes.default_margin.width;
@ -127,9 +134,10 @@ Rectangle {
Loader {
id: sidebarContents;
Layout.fillWidth: true;
Layout.fillHeight: true;
anchors.bottom: saveButton.top
anchors.top: profileItem.bottom
anchors.left: base.left
anchors.right: base.right
source: modesListModel.get(header.currentModeIndex).file;
@ -155,15 +163,17 @@ Rectangle {
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
}
implicitHeight: totalHeight
anchors.bottom: parent.bottom
}
SidebarTooltip {
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));
}
}
}

View file

@ -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{
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
}
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 {
//: Configuration mode label
text: qsTr("Mode:");
font: UM.Theme.fonts.sidebar_header;
color: UM.Theme.colors.text_inactive;
anchors.centerIn: parent
color: UM.Theme.colors.load_save_button_text
font: UM.Theme.fonts.default
text: control.text;
}
}
label: Item { }
}
}
}
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;
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
}
onObjectAdded: modeMenu.insertItem(index, object)
onObjectRemoved: modeMenu.removeItem(object)
}
ExclusiveGroup { id: modeMenuGroup; }
}
}
Rectangle {
width: 1;
height: parent.height;
color: UM.Theme.colors.border;
}
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;
}
}*/
}

View file

@ -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;

View file

@ -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
width: base.width
height: base.height
z: parent.z - 1
anchors.verticalCenter: parent.verticalCenter
anchors.horizontalCenter: parent.horizontalCenter
color: UM.Theme.colors.button_lining
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

View file

@ -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
{

View file

@ -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
}
}
}

View file

@ -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");
}
}
}

View file

@ -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)
}
}

View file

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 19.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.2" baseProfile="tiny" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
x="0px" y="0px" viewBox="0 0 10 10" xml:space="preserve">
<path d="M8.4,2.7c0.3-0.3,0.7-0.3,1,0c0.3,0.3,0.3,0.7,0,1L5.4,7.5c-0.3,0.3-0.7,0.3-1,0L0.6,3.6c-0.3-0.3-0.3-0.7,0-1
c0.3-0.3,0.7-0.3,1,0L5,5.8L8.4,2.7z"/>
</svg>

After

Width:  |  Height:  |  Size: 493 B

View file

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 19.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.2" baseProfile="tiny" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
x="0px" y="0px" viewBox="0 0 10 10" xml:space="preserve">
<path d="M7.4,8.5c0.3,0.3,0.3,0.7,0,1c-0.3,0.3-0.7,0.3-1,0L2.6,5.6c-0.3-0.3-0.3-0.7,0-1l3.8-3.9c0.3-0.3,0.7-0.3,1,0
c0.3,0.3,0.3,0.7,0,1L4.2,5.1L7.4,8.5z"/>
</svg>

After

Width:  |  Height:  |  Size: 495 B

View file

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 19.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.2" baseProfile="tiny" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
x="0px" y="0px" viewBox="0 0 10 10" xml:space="preserve">
<path d="M2.6,1.7c-0.3-0.3-0.3-0.7,0-1c0.3-0.3,0.7-0.3,1,0l3.8,3.9c0.3,0.3,0.3,0.7,0,1L3.5,9.5c-0.3,0.3-0.7,0.3-1,0
c-0.3-0.3-0.3-0.7,0-1l3.1-3.4L2.6,1.7z"/>
</svg>

After

Width:  |  Height:  |  Size: 496 B

View file

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 19.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.2" baseProfile="tiny" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
x="0px" y="0px" viewBox="-415 293.3 10 10" xml:space="preserve">
<path d="M-413.5,300.8c-0.3,0.3-0.7,0.3-1,0s-0.3-0.7,0-1l3.9-3.8c0.3-0.3,0.7-0.3,1,0l3.9,3.8c0.3,0.3,0.3,0.7,0,1
c-0.3,0.3-0.7,0.3-1,0l-3.3-3.2L-413.5,300.8z"/>
</svg>

After

Width:  |  Height:  |  Size: 506 B

View file

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 19.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.2" baseProfile="tiny" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
x="0px" y="0px" viewBox="0 0 30 30" xml:space="preserve">
<g>
<rect x="0" y="24.4" width="6" height="2.1"/>
<rect x="0" y="27.9" width="3" height="2.1"/>
<rect x="0" y="21" width="9" height="2.1"/>
<rect x="0" y="14" width="15" height="2.1"/>
<rect x="0" y="17.5" width="12" height="2.1"/>
<rect x="0" y="10.5" width="18" height="2.1"/>
<rect x="0" y="3.5" width="24" height="2.1"/>
<rect x="0" y="7" width="21" height="2.1"/>
<rect x="0" y="0" width="27" height="2.1"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 773 B

View file

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 19.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.2" baseProfile="tiny" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
x="0px" y="0px" viewBox="0 0 20 20" xml:space="preserve">
<rect x="0" y="0" fill="none" width="20" height="20"/>
<g>
<path d="M0,0v20h20V0H0z M15.5,13.7l-1.8,1.8L10,11.9l-3.7,3.7l-1.8-1.8L8.1,10L4.4,6.4l1.8-1.8L10,8.2l3.7-3.7l1.8,1.8L11.8,10
L15.5,13.7z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 547 B

View file

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 19.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.2" baseProfile="tiny" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
x="0px" y="0px" viewBox="0 0 30 30" xml:space="preserve">
<g>
<g>
<rect x="0" y="0" width="1.2" height="30"/>
<rect x="28.8" y="0" width="1.2" height="30"/>
<rect x="0" y="28.8" width="30" height="1.2"/>
<rect x="0" y="0" width="30" height="1.2"/>
</g>
<rect x="14.4" y="-5.4" transform="matrix(0.7071 0.7071 -0.7071 0.7071 15.0003 -6.2132)" width="1.2" height="40.8"/>
<rect x="14.4" y="-5.4" transform="matrix(0.7071 -0.7071 0.7071 0.7071 -6.2132 14.9997)" width="1.2" height="40.8"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 791 B

View file

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 19.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.2" baseProfile="tiny" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
x="0px" y="0px" viewBox="0 0 30 30" xml:space="preserve">
<g>
<g>
<rect x="0" y="0" width="1.2" height="30"/>
<rect x="28.8" y="0" width="1.2" height="30"/>
<rect x="0" y="28.8" width="30" height="1.2"/>
<rect x="0" y="0" width="30" height="1.2"/>
</g>
<rect x="14.4" y="-5.4" transform="matrix(0.7071 0.7071 -0.7071 0.7071 14.9999 -6.2122)" width="1.2" height="40.8"/>
<polygon points="0.7,10 0.1,8.9 9,0.1 9.8,0.9 "/>
<rect x="24.5" y="19" transform="matrix(0.7071 0.7071 -0.7071 0.7071 25.0689 -10.4098)" width="1.2" height="12.2"/>
<rect x="14.4" y="-5.4" transform="matrix(0.7071 -0.7071 0.7071 0.7071 -6.2136 14.9987)" width="1.2" height="40.8"/>
<polyline points="0.8,20.1 9.6,29 8.8,29.8 0,21 "/>
<rect x="24.5" y="-1.2" transform="matrix(0.7071 -0.7071 0.7071 0.7071 3.8484 19.2136)" width="1.2" height="12.2"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

View file

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 19.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.2" baseProfile="tiny" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
x="0px" y="0px" viewBox="0 0 20 20" xml:space="preserve">
<rect x="0" y="0" width="20" height="20"/>
<polygon fill="#FFFFFF" points="16.5,11.3 11.3,11.3 11.3,16.5 8.7,16.5 8.7,11.3 3.5,11.3 3.5,8.7 8.7,8.7 8.7,3.5 11.3,3.5
11.3,8.7 16.5,8.7 "/>
</svg>

After

Width:  |  Height:  |  Size: 527 B

View file

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 19.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.2" baseProfile="tiny" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
x="0px" y="0px" viewBox="0 0 30 30" xml:space="preserve">
<path d="M16.5,14V6h-3v9.4l-5.3,3.1L9.7,21l6.2-3.6c0.4-0.2,0.6-0.7,0.6-1.1v-0.3l6.4-6.2c-0.3-0.4-0.6-0.8-1-1.1L16.5,14z M15,26.4
C8.7,26.4,3.6,21.3,3.6,15C3.6,8.7,8.7,3.6,15,3.6c6.3,0,11.4,5.1,11.4,11.4C26.4,21.3,21.3,26.4,15,26.4z M15,0.6
C7,0.6,0.6,7,0.6,15C0.6,23,7,29.4,15,29.4c8,0,14.4-6.4,14.4-14.4C29.4,7,23,0.6,15,0.6z"/>
</svg>

After

Width:  |  Height:  |  Size: 670 B

View file

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 19.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.2" baseProfile="tiny" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
x="0px" y="0px" viewBox="0 0 30 30" xml:space="preserve">
<g>
<rect x="0" width="27" height="8.5"/>
<rect x="0" y="10.7" width="18" height="8.5"/>
<rect x="0" y="21.5" width="9" height="8.5"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 483 B

View file

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 19.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.2" baseProfile="tiny" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
x="0px" y="0px" viewBox="0 0 30 30" xml:space="preserve">
<path d="M30,20L25.1,6.7L27.6,0H12.9l1.6,5H7.1H6.9H6.4l2.3,6H2.4l2.4,6.2L0,30h19.5l-1.7-4h7.5h0.1h0.6l-2.3-6H30z M17.5,25
l-2.8-7.5l2.4-6.5H9.6L7.7,6h7.2h7.5l-2.4,6.4l2.9,7.6l2,5H17.5z"/>
</svg>

After

Width:  |  Height:  |  Size: 526 B

View file

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 19.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.2" baseProfile="tiny" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
x="0px" y="0px" viewBox="0 0 30 30" xml:space="preserve">
<g>
<path d="M30,0L30,0L0,0v30h0h30V0z M12.4,28.8L1.2,17.6v-0.2L12.5,6.1l11.4,11.4L12.6,28.8H12.4z M1.2,7l4.4,4.4l-4.4,4.4V7z
M1.2,19.3l4.4,4.4L1.2,28V19.3z M28.8,8.6l-7.4-7.4h7.4L28.8,8.6z M19.8,1.2l4.1,4.1l-5.3,5.3l-5.3-5.3l4.2-4.2H19.8z M15.8,1.2
l-3.3,3.3L9.2,1.2H15.8z M1.2,1.2h6.4l4.2,4.2l-5.3,5.3L1.2,5.4V1.2z M2,28.8l4.4-4.4l4.4,4.4H2z M14.2,28.8l4.4-4.4l4.4,4.4H14.2z
M28.8,28.8h-4.2l-5.2-5.2l5.3-5.3l4.1,4.1V28.8z M28.8,20.8l-3.3-3.3l3.3-3.3V20.8z M24.7,16.7l-5.3-5.3l5.3-5.3l4.1,4.1v2.3
L24.7,16.7z"/>
<rect x="12.7" y="3.3" transform="matrix(0.7071 -0.7071 0.7071 0.7071 -9.0598 14.7879)" width="1.2" height="30"/>
<rect x="15.1" y="-5.1" transform="matrix(0.7071 0.7071 -0.7071 0.7071 14.7286 -6.8835)" width="1.2" height="38.9"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

View file

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 19.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.2" baseProfile="tiny" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
x="0px" y="0px" viewBox="0 0 30 30" xml:space="preserve">
<g>
<rect x="0" y="24.4" width="6" height="2.1"/>
<rect x="0" y="27.9" width="3" height="2.1"/>
<rect x="0" y="21" width="9" height="2.1"/>
<rect x="0" y="14" width="15" height="2.1"/>
<rect x="0" y="17.5" width="12" height="2.1"/>
<rect x="0" y="10.5" width="18" height="2.1"/>
<rect x="0" y="3.5" width="24" height="2.1"/>
<rect x="0" y="7" width="21" height="2.1"/>
<rect x="0" y="0" width="27" height="2.1"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 773 B

View file

@ -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;
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;
}
}
}
}

View file

@ -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],