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 ...
|
@ -46,7 +46,6 @@ import platform
|
||||||
import sys
|
import sys
|
||||||
import os
|
import os
|
||||||
import os.path
|
import os.path
|
||||||
import configparser
|
|
||||||
import numpy
|
import numpy
|
||||||
numpy.seterr(all="ignore")
|
numpy.seterr(all="ignore")
|
||||||
|
|
||||||
|
@ -96,6 +95,7 @@ class CuraApplication(QtApplication):
|
||||||
Preferences.getInstance().addPreference("cura/recent_files", "")
|
Preferences.getInstance().addPreference("cura/recent_files", "")
|
||||||
Preferences.getInstance().addPreference("cura/categories_expanded", "")
|
Preferences.getInstance().addPreference("cura/categories_expanded", "")
|
||||||
Preferences.getInstance().addPreference("view/center_on_select", True)
|
Preferences.getInstance().addPreference("view/center_on_select", True)
|
||||||
|
Preferences.getInstance().addPreference("mesh/scale_to_fit", True)
|
||||||
|
|
||||||
JobQueue.getInstance().jobFinished.connect(self._onJobFinished)
|
JobQueue.getInstance().jobFinished.connect(self._onJobFinished)
|
||||||
|
|
||||||
|
@ -191,6 +191,9 @@ class CuraApplication(QtApplication):
|
||||||
|
|
||||||
return super().event(event)
|
return super().event(event)
|
||||||
|
|
||||||
|
def getPrintInformation(self):
|
||||||
|
return self._print_information
|
||||||
|
|
||||||
def registerObjects(self, engine):
|
def registerObjects(self, engine):
|
||||||
engine.rootContext().setContextProperty("Printer", self)
|
engine.rootContext().setContextProperty("Printer", self)
|
||||||
self._print_information = PrintInformation.PrintInformation()
|
self._print_information = PrintInformation.PrintInformation()
|
||||||
|
@ -269,8 +272,10 @@ class CuraApplication(QtApplication):
|
||||||
for i in range(count):
|
for i in range(count):
|
||||||
new_node = SceneNode()
|
new_node = SceneNode()
|
||||||
new_node.setMeshData(node.getMeshData())
|
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.setScale(node.getScale())
|
||||||
new_node.translate(Vector((i + 1) * node.getBoundingBox().width, 0, 0))
|
|
||||||
new_node.setSelectable(True)
|
new_node.setSelectable(True)
|
||||||
op.addOperation(AddSceneNodeOperation(new_node, node.getParent()))
|
op.addOperation(AddSceneNodeOperation(new_node, node.getParent()))
|
||||||
op.push()
|
op.push()
|
||||||
|
|
|
@ -6,7 +6,6 @@ from PyQt5.QtCore import QTimer
|
||||||
from UM.Scene.SceneNode import SceneNode
|
from UM.Scene.SceneNode import SceneNode
|
||||||
from UM.Scene.Iterator.BreadthFirstIterator import BreadthFirstIterator
|
from UM.Scene.Iterator.BreadthFirstIterator import BreadthFirstIterator
|
||||||
from UM.Operations.TranslateOperation import TranslateOperation
|
from UM.Operations.TranslateOperation import TranslateOperation
|
||||||
from UM.Operations.ScaleToBoundsOperation import ScaleToBoundsOperation
|
|
||||||
from UM.Math.Float import Float
|
from UM.Math.Float import Float
|
||||||
from UM.Math.Vector import Vector
|
from UM.Math.Vector import Vector
|
||||||
from UM.Math.AxisAlignedBox import AxisAlignedBox
|
from UM.Math.AxisAlignedBox import AxisAlignedBox
|
||||||
|
@ -107,11 +106,15 @@ class PlatformPhysics:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
# Check to see if the bounding boxes intersect. If not, we can ignore the node as there is no way the hull intersects.
|
# 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:
|
#if node.getBoundingBox().intersectsBox(other_node.getBoundingBox()) == AxisAlignedBox.IntersectionResult.NoIntersection:
|
||||||
continue
|
# continue
|
||||||
|
|
||||||
# Get the overlap distance for both convex hulls. If this returns None, there is no intersection.
|
# Get the overlap distance for both convex hulls. If this returns None, there is no intersection.
|
||||||
overlap = node.callDecoration("getConvexHull").intersectsPolygon(other_node.callDecoration("getConvexHull"))
|
try:
|
||||||
|
overlap = node.callDecoration("getConvexHull").intersectsPolygon(other_node.callDecoration("getConvexHull"))
|
||||||
|
except:
|
||||||
|
overlap = None #It can sometimes occur that the caclulated convex hull has no size, in which case there is no overlap.
|
||||||
|
|
||||||
if overlap is None:
|
if overlap is None:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
|
|
98
plugins/ChangeLogPlugin/ChangeLog.py
Normal 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)
|
28
plugins/ChangeLogPlugin/ChangeLog.qml
Normal 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()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
41
plugins/ChangeLogPlugin/ChangeLog.txt
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
[15.10.0]
|
||||||
|
*All at Once/One at a Time
|
||||||
|
Cura’s default mode is set to All At Once. You can print multiple objects faster with the option print objects One At A Time. This can be changed in Advanced Settings. Please note that in One At A Time mode, grouped objects will still be printed as a single object.
|
||||||
|
|
||||||
|
*Setting Profiles
|
||||||
|
Now you can create preferred setting favourites and share them with others.
|
||||||
|
|
||||||
|
|
||||||
|
*Post-Processing Plugin
|
||||||
|
This plugin supports post-processing on the GCode generated by the engine – allowing for custom scripts. For example, Pause At Height and Tweak At Z.
|
||||||
|
|
||||||
|
*Support for Bed Levelling and other wizards
|
||||||
|
We have restored the Bed Levelling function and several other wizards that were previously available for the Ultimaker Original. Additionally, these are ready to be used with machines from other vendors (BQ, Rep Rap neo).
|
||||||
|
|
||||||
|
*Third-Party Printer Profiles
|
||||||
|
We received printer profiles for third-party vendors (BQ, Rep Rap neo) from the community (thanks guys!). These have been included in this release.
|
||||||
|
|
||||||
|
|
||||||
|
*3MF File Loading Support (New)
|
||||||
|
We’re happy to report we now support loading 3MF files. This is a new file format similar to AMF, but freely available.
|
||||||
|
|
||||||
|
*Output Device API for Developers (New)
|
||||||
|
The Storage Device API has now been replaced with the Output Device API for saving files. It’s designed to make it easier for anyone that wants to write a plugin giving them some form of output device, whether it’s a printer or a web service.
|
||||||
|
|
||||||
|
*Improved Cut-Off Object Bottom (New)
|
||||||
|
We’ve added a feature than allows you to move objects below the build plate. You can either correct a model with a rough bottom, or print only a part of an object. Please note that the implementation greatly differs from the old one where it was a setting.
|
||||||
|
|
||||||
|
*Improved File Saving (new)
|
||||||
|
We’re happy to report that the way file saving is handled has received a huge overhaul. Now the default action is to save everything on the build plate to a file.
|
||||||
|
|
||||||
|
*Select Multiple Objects (New)
|
||||||
|
You now have the freedom to select and manipulate multiple objects at the same time.
|
||||||
|
|
||||||
|
*Grouping (New)
|
||||||
|
You can now group objects together to make it easier to manipulate multiple objects.
|
||||||
|
|
||||||
|
*Per-Object Settings (New)
|
||||||
|
You can now select different profiles for different objects and in advance mode override individual settings.
|
||||||
|
|
||||||
|
*64-bit Windows Builds (New)
|
||||||
|
Cura now allows 64-bit Windows builds in addition to the 32-bit builds. For users running the 64-bit version of Windows, you can now load models in more detail.
|
21
plugins/ChangeLogPlugin/__init__.py
Normal 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()}
|
|
@ -132,6 +132,7 @@ class CuraEngineBackend(Backend):
|
||||||
if not getattr(node, "_outside_buildarea", False):
|
if not getattr(node, "_outside_buildarea", False):
|
||||||
temp_list.append(node)
|
temp_list.append(node)
|
||||||
if len(temp_list) == 0:
|
if len(temp_list) == 0:
|
||||||
|
self.processingProgress.emit(0.0)
|
||||||
return
|
return
|
||||||
object_groups.append(temp_list)
|
object_groups.append(temp_list)
|
||||||
#for node in DepthFirstIterator(self._scene.getRoot()):
|
#for node in DepthFirstIterator(self._scene.getRoot()):
|
||||||
|
@ -250,6 +251,10 @@ class CuraEngineBackend(Backend):
|
||||||
self._socket.registerMessageType(6, Cura_pb2.SettingList)
|
self._socket.registerMessageType(6, Cura_pb2.SettingList)
|
||||||
self._socket.registerMessageType(7, Cura_pb2.GCodePrefix)
|
self._socket.registerMessageType(7, Cura_pb2.GCodePrefix)
|
||||||
|
|
||||||
|
## Manually triggers a reslice
|
||||||
|
def forceSlice(self):
|
||||||
|
self._change_timer.start()
|
||||||
|
|
||||||
def _onChanged(self):
|
def _onChanged(self):
|
||||||
if not self._profile:
|
if not self._profile:
|
||||||
return
|
return
|
||||||
|
|
|
@ -28,7 +28,8 @@ class LayerData(MeshData):
|
||||||
self._layers[layer].polygons.append(p)
|
self._layers[layer].polygons.append(p)
|
||||||
|
|
||||||
def getLayer(self, layer):
|
def getLayer(self, layer):
|
||||||
return self._layers[layer]
|
if layer in self._layers:
|
||||||
|
return self._layers[layer]
|
||||||
|
|
||||||
def getLayers(self):
|
def getLayers(self):
|
||||||
return self._layers
|
return self._layers
|
||||||
|
|
|
@ -19,7 +19,7 @@ Item
|
||||||
width: 10
|
width: 10
|
||||||
height: 250
|
height: 250
|
||||||
anchors.right : parent.right
|
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
|
orientation: Qt.Vertical
|
||||||
minimumValue: 0;
|
minimumValue: 0;
|
||||||
maximumValue: UM.LayerView.numLayers;
|
maximumValue: UM.LayerView.numLayers;
|
||||||
|
@ -38,14 +38,16 @@ Item
|
||||||
height: UM.Theme.sizes.slider_layerview_background_extension.height
|
height: UM.Theme.sizes.slider_layerview_background_extension.height
|
||||||
color: UM.Theme.colors.slider_text_background
|
color: UM.Theme.colors.slider_text_background
|
||||||
}
|
}
|
||||||
UM.AngledCornerRectangle {
|
Rectangle {
|
||||||
anchors.right : parent.right
|
anchors.right : parent.right
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
anchors.verticalCenter: parent.verticalCenter
|
||||||
z: slider.z - 1
|
z: slider.z - 1
|
||||||
cornerSize: UM.Theme.sizes.default_margin.width;
|
|
||||||
width: UM.Theme.sizes.slider_layerview_background.width
|
width: UM.Theme.sizes.slider_layerview_background.width
|
||||||
height: slider.height + UM.Theme.sizes.default_margin.height * 2
|
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 {
|
MouseArea {
|
||||||
id: sliderMouseArea
|
id: sliderMouseArea
|
||||||
property double manualStepSize: slider.maximumValue / 11
|
property double manualStepSize: slider.maximumValue / 11
|
||||||
|
|
122
plugins/SliceInfoPlugin/SliceInfo.py
Normal 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()
|
19
plugins/SliceInfoPlugin/__init__.py
Normal 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()}
|
|
@ -6,13 +6,14 @@ import QtQuick.Controls 1.1
|
||||||
import QtQuick.Layouts 1.1
|
import QtQuick.Layouts 1.1
|
||||||
import QtQuick.Window 2.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;
|
width: 500 * Screen.devicePixelRatio;
|
||||||
height: 100 * Screen.devicePixelRatio;
|
height: 100 * Screen.devicePixelRatio;
|
||||||
|
|
||||||
title: "Print with USB"
|
title: catalog.i18nc("@title:window", "Print with USB")
|
||||||
|
|
||||||
Column
|
Column
|
||||||
{
|
{
|
||||||
|
@ -23,18 +24,20 @@ UM.Dialog {
|
||||||
Text
|
Text
|
||||||
{
|
{
|
||||||
//: USB Printing dialog label, %1 is head temperature
|
//: 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
|
Text
|
||||||
{
|
{
|
||||||
//: USB Printing dialog label, %1 is bed temperature
|
//: 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
|
||||||
{
|
{
|
||||||
text: "" + manager.error
|
text: "" + manager.error
|
||||||
}
|
}
|
||||||
|
|
||||||
|
UM.I18nCatalog{id: catalog; name:"cura"}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ProgressBar
|
ProgressBar
|
||||||
|
@ -50,16 +53,17 @@ UM.Dialog {
|
||||||
}
|
}
|
||||||
|
|
||||||
rightButtons: [
|
rightButtons: [
|
||||||
Button {
|
Button
|
||||||
|
{
|
||||||
//: USB Printing dialog start print button
|
//: USB Printing dialog start print button
|
||||||
text: qsTr("Print");
|
text: catalog.i18nc("@action:button","Print");
|
||||||
onClicked: { manager.startPrint() }
|
onClicked: { manager.startPrint() }
|
||||||
enabled: manager.progress == 0 ? true : false
|
enabled: manager.progress == 0 ? true : false
|
||||||
},
|
},
|
||||||
Button
|
Button
|
||||||
{
|
{
|
||||||
//: USB Printing dialog cancel print button
|
//: USB Printing dialog cancel print button
|
||||||
text: qsTr("Cancel");
|
text: catalog.i18nc("@action:button","Cancel");
|
||||||
onClicked: { manager.cancelPrint() }
|
onClicked: { manager.cancelPrint() }
|
||||||
enabled: manager.progress == 0 ? false: true
|
enabled: manager.progress == 0 ? false: true
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,7 +17,7 @@ UM.Dialog
|
||||||
visible: true;
|
visible: true;
|
||||||
modality: Qt.ApplicationModal;
|
modality: Qt.ApplicationModal;
|
||||||
|
|
||||||
title: "Firmware Update";
|
title: catalog.i18nc("@title:window","Firmware Update");
|
||||||
|
|
||||||
Column
|
Column
|
||||||
{
|
{
|
||||||
|
@ -25,7 +25,8 @@ UM.Dialog
|
||||||
|
|
||||||
Text
|
Text
|
||||||
{
|
{
|
||||||
anchors {
|
anchors
|
||||||
|
{
|
||||||
left: parent.left;
|
left: parent.left;
|
||||||
right: parent.right;
|
right: parent.right;
|
||||||
}
|
}
|
||||||
|
@ -34,17 +35,17 @@ UM.Dialog
|
||||||
if (manager.progress == 0)
|
if (manager.progress == 0)
|
||||||
{
|
{
|
||||||
//: Firmware update status label
|
//: 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)
|
else if (manager.progress > 99)
|
||||||
{
|
{
|
||||||
//: Firmware update status label
|
//: Firmware update status label
|
||||||
return qsTr("Firmware update completed.")
|
return catalog.i18nc("@label","Firmware update completed.")
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
//: Firmware update status label
|
//: Firmware update status label
|
||||||
return qsTr("Updating firmware.")
|
return catalog.i18nc("@label","Updating firmware.")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -57,20 +58,23 @@ UM.Dialog
|
||||||
value: manager.progress
|
value: manager.progress
|
||||||
minimumValue: 0;
|
minimumValue: 0;
|
||||||
maximumValue: 100;
|
maximumValue: 100;
|
||||||
anchors {
|
anchors
|
||||||
|
{
|
||||||
left: parent.left;
|
left: parent.left;
|
||||||
right: parent.right;
|
right: parent.right;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
SystemPalette {
|
SystemPalette
|
||||||
|
{
|
||||||
id: palette;
|
id: palette;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
rightButtons: [
|
rightButtons: [
|
||||||
Button {
|
Button
|
||||||
|
{
|
||||||
text: "Close";
|
text: "Close";
|
||||||
enabled: manager.progress >= 100;
|
enabled: manager.progress >= 100;
|
||||||
onClicked: base.visible = false;
|
onClicked: base.visible = false;
|
||||||
|
|
|
@ -155,6 +155,7 @@ class PrinterConnection(OutputDevice, QObject, SignalEmitter):
|
||||||
|
|
||||||
@pyqtSlot()
|
@pyqtSlot()
|
||||||
def startPrint(self):
|
def startPrint(self):
|
||||||
|
self.writeStarted.emit(self)
|
||||||
gcode_list = getattr( Application.getInstance().getController().getScene(), "gcode_list")
|
gcode_list = getattr( Application.getInstance().getController().getScene(), "gcode_list")
|
||||||
self.printGCode(gcode_list)
|
self.printGCode(gcode_list)
|
||||||
|
|
||||||
|
@ -163,6 +164,7 @@ class PrinterConnection(OutputDevice, QObject, SignalEmitter):
|
||||||
def printGCode(self, gcode_list):
|
def printGCode(self, gcode_list):
|
||||||
if self.isPrinting() or not self._is_connected:
|
if self.isPrinting() or not self._is_connected:
|
||||||
Logger.log("d", "Printer is busy or not connected, aborting print")
|
Logger.log("d", "Printer is busy or not connected, aborting print")
|
||||||
|
self.writeError.emit(self)
|
||||||
return
|
return
|
||||||
|
|
||||||
self._gcode.clear()
|
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
|
for i in range(0, 4): #Push first 4 entries before accepting other inputs
|
||||||
self._sendNextGcodeLine()
|
self._sendNextGcodeLine()
|
||||||
|
|
||||||
|
self.writeFinished.emit(self)
|
||||||
|
|
||||||
## Get the serial port string of this connection.
|
## Get the serial port string of this connection.
|
||||||
# \return serial port
|
# \return serial port
|
||||||
def getSerialPort(self):
|
def getSerialPort(self):
|
||||||
|
@ -258,11 +262,6 @@ class PrinterConnection(OutputDevice, QObject, SignalEmitter):
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
Logger.log("i", "Could not establish connection on %s, unknown reasons. Device is not arduino based." % self._serial_port)
|
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.
|
# 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)
|
for baud_rate in self._getBaudrateList(): # Cycle all baud rates (auto detect)
|
||||||
if self._serial is None:
|
if self._serial is None:
|
||||||
|
|
60
resources/machines/bq_hephestos.json
Normal 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 }
|
||||||
|
}
|
||||||
|
}
|
60
resources/machines/bq_hephestos_xl.json
Normal 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 }
|
||||||
|
}
|
||||||
|
}
|
60
resources/machines/bq_witbox.json
Normal 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 }
|
||||||
|
}
|
||||||
|
}
|
|
@ -8,7 +8,15 @@
|
||||||
"visible": false,
|
"visible": false,
|
||||||
|
|
||||||
"machine_settings": {
|
"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 },
|
"machine_use_extruder_offset_to_offset_coords": { "default": false },
|
||||||
|
|
||||||
|
|
|
@ -42,6 +42,7 @@
|
||||||
"default": "RepRap"
|
"default": "RepRap"
|
||||||
},
|
},
|
||||||
"machine_disallowed_areas": {
|
"machine_disallowed_areas": {
|
||||||
|
"type": "polygons",
|
||||||
"default": []
|
"default": []
|
||||||
},
|
},
|
||||||
"machine_platform_offset": {
|
"machine_platform_offset": {
|
||||||
|
@ -52,6 +53,7 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"machine_head_polygon": {
|
"machine_head_polygon": {
|
||||||
|
"type": "polygon",
|
||||||
"default": [
|
"default": [
|
||||||
[
|
[
|
||||||
-1,
|
-1,
|
||||||
|
@ -73,6 +75,7 @@
|
||||||
},
|
},
|
||||||
"machine_head_with_fans_polygon":
|
"machine_head_with_fans_polygon":
|
||||||
{
|
{
|
||||||
|
"type": "polygon",
|
||||||
"default": [
|
"default": [
|
||||||
[
|
[
|
||||||
-20,
|
-20,
|
||||||
|
@ -308,7 +311,7 @@
|
||||||
"default": 6,
|
"default": 6,
|
||||||
"type": "int",
|
"type": "int",
|
||||||
"visible": false,
|
"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,
|
"default": 6,
|
||||||
"type": "int",
|
"type": "int",
|
||||||
"visible": false,
|
"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",
|
"type": "enum",
|
||||||
"options": {
|
"options": {
|
||||||
"lines": "Lines",
|
"lines": "Lines",
|
||||||
"concentric": "Concentric"
|
"concentric": "Concentric",
|
||||||
|
"zigzag": "Zig Zag"
|
||||||
},
|
},
|
||||||
"default": "lines",
|
"default": "lines",
|
||||||
"visible": false
|
"visible": false
|
||||||
|
@ -420,6 +424,18 @@
|
||||||
"type": "float",
|
"type": "float",
|
||||||
"default": 0,
|
"default": 0,
|
||||||
"visible": false
|
"visible": false
|
||||||
|
},
|
||||||
|
"z_seam_type": {
|
||||||
|
"label": "Z Seam Alignment",
|
||||||
|
"description": "Starting point of each part in a layer. When parts in consecutive layers start at the same point a vertical seam may show on the print. When aligning these at the back, the seam is easiest to remove. When placed randomly the inaccuracies at the part start will be less noticable. When taking the shortest path the print will be more quick.",
|
||||||
|
"type": "enum",
|
||||||
|
"options": [
|
||||||
|
"Back",
|
||||||
|
"Shortest",
|
||||||
|
"Random"
|
||||||
|
],
|
||||||
|
"default": "Shortest",
|
||||||
|
"visible": false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -436,20 +452,6 @@
|
||||||
"default": 20,
|
"default": 20,
|
||||||
"max_value_warning": "100.0",
|
"max_value_warning": "100.0",
|
||||||
"children": {
|
"children": {
|
||||||
"infill_pattern": {
|
|
||||||
"label": "Infill Pattern",
|
|
||||||
"description": "Cura defaults to switching between grid and line infill. But with this setting visible you can control this yourself. The line infill swaps direction on alternate layers of infill, while the grid prints the full cross-hatching on each layer of infill.",
|
|
||||||
"type": "enum",
|
|
||||||
"visible": false,
|
|
||||||
"options": {
|
|
||||||
"grid": "Grid",
|
|
||||||
"lines": "Lines",
|
|
||||||
"concentric": "Concentric",
|
|
||||||
"zigzag": "Zig Zag"
|
|
||||||
},
|
|
||||||
"default": "grid",
|
|
||||||
"inherit_function": "'lines' if parent_value > 25 else 'grid'"
|
|
||||||
},
|
|
||||||
"infill_line_distance": {
|
"infill_line_distance": {
|
||||||
"label": "Line distance",
|
"label": "Line distance",
|
||||||
"description": "Distance between the printed infill lines.",
|
"description": "Distance between the printed infill lines.",
|
||||||
|
@ -461,6 +463,20 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"infill_pattern": {
|
||||||
|
"label": "Infill Pattern",
|
||||||
|
"description": "Cura defaults to switching between grid and line infill. But with this setting visible you can control this yourself. The line infill swaps direction on alternate layers of infill, while the grid prints the full cross-hatching on each layer of infill.",
|
||||||
|
"type": "enum",
|
||||||
|
"visible": false,
|
||||||
|
"options": {
|
||||||
|
"grid": "Grid",
|
||||||
|
"lines": "Lines",
|
||||||
|
"concentric": "Concentric",
|
||||||
|
"zigzag": "Zig Zag"
|
||||||
|
},
|
||||||
|
"default": "grid",
|
||||||
|
"inherit_function": "'lines' if parent_value > 25 else 'grid'"
|
||||||
|
},
|
||||||
"infill_overlap": {
|
"infill_overlap": {
|
||||||
"label": "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.",
|
"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)"
|
"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",
|
"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.",
|
"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",
|
"type": "boolean",
|
||||||
"default": true
|
"default": true,
|
||||||
|
"visible": true
|
||||||
},
|
},
|
||||||
"retraction_amount": {
|
"retraction_amount": {
|
||||||
"label": "Retraction Distance",
|
"label": "Retraction Distance",
|
||||||
|
@ -1062,7 +1086,7 @@
|
||||||
},
|
},
|
||||||
"cool_min_layer_time_fan_speed_max": {
|
"cool_min_layer_time_fan_speed_max": {
|
||||||
"label": "Minimal Layer Time Full Fan Speed",
|
"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",
|
"unit": "sec",
|
||||||
"type": "float",
|
"type": "float",
|
||||||
"min_value": "0",
|
"min_value": "0",
|
||||||
|
@ -1248,6 +1272,38 @@
|
||||||
"visible": false,
|
"visible": false,
|
||||||
"enabled": "support_enable"
|
"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": {
|
"support_use_towers": {
|
||||||
"label": "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.",
|
"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.",
|
"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",
|
"type": "enum",
|
||||||
"options": {
|
"options": {
|
||||||
"grid": "Grid",
|
|
||||||
"lines": "Lines",
|
"lines": "Lines",
|
||||||
|
"grid": "Grid",
|
||||||
|
"triangles": "Triangles",
|
||||||
|
"concentric": "Concentric",
|
||||||
"zigzag": "Zig Zag"
|
"zigzag": "Zig Zag"
|
||||||
},
|
},
|
||||||
"default": "zigzag",
|
"default": "zigzag",
|
||||||
|
@ -1723,9 +1781,14 @@
|
||||||
},
|
},
|
||||||
"magic_mesh_surface_mode": {
|
"magic_mesh_surface_mode": {
|
||||||
"label": "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.",
|
"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": "boolean",
|
"type": "enum",
|
||||||
"default": false,
|
"options": [
|
||||||
|
"Normal",
|
||||||
|
"Surface",
|
||||||
|
"Both"
|
||||||
|
],
|
||||||
|
"default": "Normal",
|
||||||
"visible": false
|
"visible": false
|
||||||
},
|
},
|
||||||
"magic_spiralize": {
|
"magic_spiralize": {
|
||||||
|
|
|
@ -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 }
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -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 }
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -13,15 +13,6 @@
|
||||||
|
|
||||||
"machine_extruder_trains": [
|
"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": {
|
"machine_nozzle_size": {
|
||||||
"default": 0.4
|
"default": 0.4
|
||||||
},
|
},
|
||||||
|
|
|
@ -18,15 +18,6 @@
|
||||||
|
|
||||||
"machine_extruder_trains": [
|
"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": {
|
"machine_nozzle_size": {
|
||||||
"default": 0.4
|
"default": 0.4
|
||||||
},
|
},
|
||||||
|
|
|
@ -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 }
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -5,17 +5,21 @@ import QtQuick 2.2
|
||||||
import QtQuick.Controls 1.1
|
import QtQuick.Controls 1.1
|
||||||
import QtQuick.Window 2.1
|
import QtQuick.Window 2.1
|
||||||
|
|
||||||
import UM 1.0 as UM
|
import UM 1.1 as UM
|
||||||
|
|
||||||
UM.Dialog {
|
UM.Dialog
|
||||||
|
{
|
||||||
id: base
|
id: base
|
||||||
|
|
||||||
//: About dialog title
|
//: About dialog title
|
||||||
title: qsTr("About Cura")
|
title: catalog.i18nc("@title:window","About Cura")
|
||||||
minimumWidth: 400
|
minimumWidth: 400
|
||||||
minimumHeight: 300
|
minimumHeight: 300;
|
||||||
|
//UM.I18nCatalog { id: catalog; }
|
||||||
|
|
||||||
Image {
|
|
||||||
|
Image
|
||||||
|
{
|
||||||
id: logo
|
id: logo
|
||||||
width: parent.width * 0.75
|
width: parent.width * 0.75
|
||||||
height: width * (1/4.25)
|
height: width * (1/4.25)
|
||||||
|
@ -26,9 +30,11 @@ UM.Dialog {
|
||||||
sourceSize.height: height
|
sourceSize.height: height
|
||||||
anchors.centerIn: parent
|
anchors.centerIn: parent
|
||||||
anchors.verticalCenterOffset : -(height * 0.5)
|
anchors.verticalCenterOffset : -(height * 0.5)
|
||||||
|
UM.I18nCatalog{id: catalog; name:"cura"}
|
||||||
}
|
}
|
||||||
|
|
||||||
Label {
|
Label
|
||||||
|
{
|
||||||
id: version
|
id: version
|
||||||
|
|
||||||
text: "Cura %1".arg(UM.Application.version)
|
text: "Cura %1".arg(UM.Application.version)
|
||||||
|
@ -39,30 +45,33 @@ UM.Dialog {
|
||||||
anchors.topMargin : 5
|
anchors.topMargin : 5
|
||||||
}
|
}
|
||||||
|
|
||||||
Label {
|
Label
|
||||||
|
{
|
||||||
id: description
|
id: description
|
||||||
width: parent.width
|
width: parent.width
|
||||||
|
|
||||||
//: About dialog application description
|
//: 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
|
wrapMode: Text.WordWrap
|
||||||
anchors.top: version.bottom
|
anchors.top: version.bottom
|
||||||
anchors.topMargin : 10
|
anchors.topMargin : 10
|
||||||
}
|
}
|
||||||
|
|
||||||
Label {
|
Label
|
||||||
|
{
|
||||||
id: author_note
|
id: author_note
|
||||||
width: parent.width
|
width: parent.width
|
||||||
|
|
||||||
//: About dialog application author note
|
//: 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
|
wrapMode: Text.WordWrap
|
||||||
anchors.top: description.bottom
|
anchors.top: description.bottom
|
||||||
}
|
}
|
||||||
|
|
||||||
rightButtons: Button {
|
rightButtons: Button
|
||||||
|
{
|
||||||
//: Close about dialog button
|
//: Close about dialog button
|
||||||
text: qsTr("Close");
|
text: catalog.i18nc("@action:button","Close");
|
||||||
|
|
||||||
onClicked: base.visible = false;
|
onClicked: base.visible = false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,9 +3,10 @@
|
||||||
|
|
||||||
import QtQuick 2.2
|
import QtQuick 2.2
|
||||||
import QtQuick.Controls 1.1
|
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 open: openAction;
|
||||||
property alias save: saveAction;
|
property alias save: saveAction;
|
||||||
property alias quit: quitAction;
|
property alias quit: quitAction;
|
||||||
|
@ -42,60 +43,69 @@ Item {
|
||||||
|
|
||||||
property alias toggleFullScreen: toggleFullScreenAction;
|
property alias toggleFullScreen: toggleFullScreenAction;
|
||||||
|
|
||||||
|
UM.I18nCatalog{id: catalog; name:"cura"}
|
||||||
|
|
||||||
Action
|
Action
|
||||||
{
|
{
|
||||||
id:toggleFullScreenAction
|
id:toggleFullScreenAction
|
||||||
shortcut: StandardKey.FullScreen;
|
shortcut: StandardKey.FullScreen;
|
||||||
}
|
}
|
||||||
|
|
||||||
Action {
|
Action
|
||||||
|
{
|
||||||
id: undoAction;
|
id: undoAction;
|
||||||
//: Undo action
|
//: Undo action
|
||||||
text: qsTr("Undo");
|
text: catalog.i18nc("@action","Undo");
|
||||||
iconName: "edit-undo";
|
iconName: "edit-undo";
|
||||||
shortcut: StandardKey.Undo;
|
shortcut: StandardKey.Undo;
|
||||||
}
|
}
|
||||||
|
|
||||||
Action {
|
Action
|
||||||
|
{
|
||||||
id: redoAction;
|
id: redoAction;
|
||||||
//: Redo action
|
//: Redo action
|
||||||
text: qsTr("Redo");
|
text: catalog.i18nc("@action","Redo");
|
||||||
iconName: "edit-redo";
|
iconName: "edit-redo";
|
||||||
shortcut: StandardKey.Redo;
|
shortcut: StandardKey.Redo;
|
||||||
}
|
}
|
||||||
|
|
||||||
Action {
|
Action
|
||||||
|
{
|
||||||
id: quitAction;
|
id: quitAction;
|
||||||
//: Quit action
|
//: Quit action
|
||||||
text: qsTr("Quit");
|
text: catalog.i18nc("@action","Quit");
|
||||||
iconName: "application-exit";
|
iconName: "application-exit";
|
||||||
shortcut: StandardKey.Quit;
|
shortcut: StandardKey.Quit;
|
||||||
}
|
}
|
||||||
|
|
||||||
Action {
|
Action
|
||||||
|
{
|
||||||
id: preferencesAction;
|
id: preferencesAction;
|
||||||
//: Preferences action
|
//: Preferences action
|
||||||
text: qsTr("Preferences...");
|
text: catalog.i18nc("@action","Preferences...");
|
||||||
iconName: "configure";
|
iconName: "configure";
|
||||||
}
|
}
|
||||||
|
|
||||||
Action {
|
Action
|
||||||
|
{
|
||||||
id: addMachineAction;
|
id: addMachineAction;
|
||||||
//: Add Printer action
|
//: Add Printer action
|
||||||
text: qsTr("Add Printer...");
|
text: catalog.i18nc("@action","Add Printer...");
|
||||||
}
|
}
|
||||||
|
|
||||||
Action {
|
Action
|
||||||
|
{
|
||||||
id: settingsAction;
|
id: settingsAction;
|
||||||
//: Configure Printers action
|
//: Configure Printers action
|
||||||
text: qsTr("Configure Printers");
|
text: catalog.i18nc("@action","Configure Printers");
|
||||||
iconName: "configure";
|
iconName: "configure";
|
||||||
}
|
}
|
||||||
|
|
||||||
Action {
|
Action
|
||||||
|
{
|
||||||
id: documentationAction;
|
id: documentationAction;
|
||||||
//: Show Online Documentation action
|
//: Show Online Documentation action
|
||||||
text: qsTr("Show Online &Documentation");
|
text: catalog.i18nc("@action","Show Online &Documentation");
|
||||||
iconName: "help-contents";
|
iconName: "help-contents";
|
||||||
shortcut: StandardKey.Help;
|
shortcut: StandardKey.Help;
|
||||||
}
|
}
|
||||||
|
@ -103,118 +113,131 @@ Item {
|
||||||
Action {
|
Action {
|
||||||
id: reportBugAction;
|
id: reportBugAction;
|
||||||
//: Report a Bug Action
|
//: Report a Bug Action
|
||||||
text: qsTr("Report a &Bug");
|
text: catalog.i18nc("@action","Report a &Bug");
|
||||||
iconName: "tools-report-bug";
|
iconName: "tools-report-bug";
|
||||||
}
|
}
|
||||||
|
|
||||||
Action {
|
Action
|
||||||
|
{
|
||||||
id: aboutAction;
|
id: aboutAction;
|
||||||
//: About action
|
//: About action
|
||||||
text: qsTr("About...");
|
text: catalog.i18nc("@action","About...");
|
||||||
iconName: "help-about";
|
iconName: "help-about";
|
||||||
}
|
}
|
||||||
|
|
||||||
Action {
|
Action
|
||||||
|
{
|
||||||
id: deleteSelectionAction;
|
id: deleteSelectionAction;
|
||||||
//: Delete selection action
|
//: Delete selection action
|
||||||
text: qsTr("Delete Selection");
|
text: catalog.i18nc("@action","Delete Selection");
|
||||||
iconName: "edit-delete";
|
iconName: "edit-delete";
|
||||||
shortcut: StandardKey.Delete;
|
shortcut: StandardKey.Delete;
|
||||||
}
|
}
|
||||||
|
|
||||||
Action {
|
Action
|
||||||
|
{
|
||||||
id: deleteObjectAction;
|
id: deleteObjectAction;
|
||||||
//: Delete object action
|
//: Delete object action
|
||||||
text: qsTr("Delete Object");
|
text: catalog.i18nc("@action","Delete Object");
|
||||||
iconName: "edit-delete";
|
iconName: "edit-delete";
|
||||||
shortcut: StandardKey.Backspace;
|
shortcut: StandardKey.Backspace;
|
||||||
}
|
}
|
||||||
|
|
||||||
Action {
|
Action
|
||||||
|
{
|
||||||
id: centerObjectAction;
|
id: centerObjectAction;
|
||||||
//: Center object action
|
//: Center object action
|
||||||
text: qsTr("Center Object on Platform");
|
text: catalog.i18nc("@action","Center Object on Platform");
|
||||||
}
|
}
|
||||||
|
|
||||||
Action
|
Action
|
||||||
{
|
{
|
||||||
id: groupObjectsAction
|
id: groupObjectsAction
|
||||||
text: qsTr("Group objects");
|
text: catalog.i18nc("@action","Group objects");
|
||||||
enabled: UM.Scene.numObjectsSelected > 1 ? true: false
|
enabled: UM.Scene.numObjectsSelected > 1 ? true: false
|
||||||
}
|
}
|
||||||
|
|
||||||
Action
|
Action
|
||||||
{
|
{
|
||||||
id: unGroupObjectsAction
|
id: unGroupObjectsAction
|
||||||
text: qsTr("Ungroup objects");
|
text: catalog.i18nc("@action","Ungroup objects");
|
||||||
enabled: UM.Scene.isGroupSelected
|
enabled: UM.Scene.isGroupSelected
|
||||||
}
|
}
|
||||||
|
|
||||||
Action
|
Action
|
||||||
{
|
{
|
||||||
id: mergeObjectsAction
|
id: mergeObjectsAction
|
||||||
text: qsTr("Merge objects");
|
text: catalog.i18nc("@action","Merge objects");
|
||||||
enabled: UM.Scene.numObjectsSelected > 1 ? true: false
|
enabled: UM.Scene.numObjectsSelected > 1 ? true: false
|
||||||
}
|
}
|
||||||
|
|
||||||
Action {
|
Action
|
||||||
|
{
|
||||||
id: multiplyObjectAction;
|
id: multiplyObjectAction;
|
||||||
//: Duplicate object action
|
//: Duplicate object action
|
||||||
text: qsTr("Duplicate Object");
|
text: catalog.i18nc("@action","Duplicate Object");
|
||||||
}
|
}
|
||||||
|
|
||||||
Action {
|
Action
|
||||||
|
{
|
||||||
id: splitObjectAction;
|
id: splitObjectAction;
|
||||||
//: Split object action
|
//: Split object action
|
||||||
text: qsTr("Split Object into Parts");
|
text: catalog.i18nc("@action","Split Object into Parts");
|
||||||
enabled: false;
|
enabled: false;
|
||||||
}
|
}
|
||||||
|
|
||||||
Action {
|
Action
|
||||||
|
{
|
||||||
id: deleteAllAction;
|
id: deleteAllAction;
|
||||||
//: Clear build platform action
|
//: Clear build platform action
|
||||||
text: qsTr("Clear Build Platform");
|
text: catalog.i18nc("@action","Clear Build Platform");
|
||||||
iconName: "edit-clear";
|
iconName: "edit-clear";
|
||||||
}
|
}
|
||||||
|
|
||||||
Action {
|
Action
|
||||||
|
{
|
||||||
id: reloadAllAction;
|
id: reloadAllAction;
|
||||||
//: Reload all objects action
|
//: Reload all objects action
|
||||||
text: qsTr("Reload All Objects");
|
text: catalog.i18nc("@action","Reload All Objects");
|
||||||
}
|
}
|
||||||
|
|
||||||
Action {
|
Action
|
||||||
|
{
|
||||||
id: resetAllTranslationAction;
|
id: resetAllTranslationAction;
|
||||||
//: Reset all positions action
|
//: Reset all positions action
|
||||||
text: qsTr("Reset All Object Positions");
|
text: catalog.i18nc("@action","Reset All Object Positions");
|
||||||
}
|
}
|
||||||
|
|
||||||
Action {
|
Action
|
||||||
|
{
|
||||||
id: resetAllAction;
|
id: resetAllAction;
|
||||||
//: Reset all positions action
|
//: Reset all positions action
|
||||||
text: qsTr("Reset All Object Transformations");
|
text: catalog.i18nc("@action","Reset All Object Transformations");
|
||||||
}
|
}
|
||||||
|
|
||||||
Action {
|
Action
|
||||||
|
{
|
||||||
id: openAction;
|
id: openAction;
|
||||||
//: Open file action
|
//: Open file action
|
||||||
text: qsTr("Load file");
|
text: catalog.i18nc("@action","Load file");
|
||||||
iconName: "document-open";
|
iconName: "document-open";
|
||||||
shortcut: StandardKey.Open;
|
shortcut: StandardKey.Open;
|
||||||
}
|
}
|
||||||
|
|
||||||
Action {
|
Action
|
||||||
|
{
|
||||||
id: saveAction;
|
id: saveAction;
|
||||||
//: Save file action
|
//: Save file action
|
||||||
text: qsTr("Save...");
|
text: catalog.i18nc("@action","Save...");
|
||||||
iconName: "document-save";
|
iconName: "document-save";
|
||||||
shortcut: StandardKey.Save;
|
shortcut: StandardKey.Save;
|
||||||
}
|
}
|
||||||
|
|
||||||
Action {
|
Action
|
||||||
|
{
|
||||||
id: showEngineLogAction;
|
id: showEngineLogAction;
|
||||||
//: Show engine log action
|
//: Show engine log action
|
||||||
text: qsTr("Show engine &log...");
|
text: catalog.i18nc("@action","Show engine &log...");
|
||||||
iconName: "view-list-text";
|
iconName: "view-list-text";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,7 +15,7 @@ UM.Wizard
|
||||||
{
|
{
|
||||||
id: base;
|
id: base;
|
||||||
|
|
||||||
title: catalog.i18nc("@title", "Add Printer")
|
title: catalog.i18nc("@title:window", "Add Printer")
|
||||||
|
|
||||||
// This part is optional
|
// This part is optional
|
||||||
// This part checks whether there is a printer -> if not: some of the functions (delete for example) are disabled
|
// This part checks whether there is a printer -> if not: some of the functions (delete for example) are disabled
|
||||||
|
|
|
@ -9,38 +9,46 @@ import QtQuick.Dialogs 1.1
|
||||||
|
|
||||||
import UM 1.1 as UM
|
import UM 1.1 as UM
|
||||||
|
|
||||||
UM.MainWindow {
|
UM.MainWindow
|
||||||
|
{
|
||||||
id: base
|
id: base
|
||||||
visible: true
|
visible: true
|
||||||
//: Cura application window title
|
//: Cura application window title
|
||||||
title: qsTr("Cura");
|
title: catalog.i18nc("@title:window","Cura");
|
||||||
|
|
||||||
Item {
|
Item
|
||||||
|
{
|
||||||
id: backgroundItem;
|
id: backgroundItem;
|
||||||
anchors.fill: parent;
|
anchors.fill: parent;
|
||||||
|
UM.I18nCatalog{id: catalog; name:"cura"}
|
||||||
UM.ApplicationMenu {
|
UM.ApplicationMenu
|
||||||
|
{
|
||||||
id: menu
|
id: menu
|
||||||
window: base
|
window: base
|
||||||
|
|
||||||
Menu {
|
Menu
|
||||||
|
{
|
||||||
id: fileMenu
|
id: fileMenu
|
||||||
//: File menu
|
//: File menu
|
||||||
title: qsTr("&File");
|
title: catalog.i18nc("@title:menu","&File");
|
||||||
|
|
||||||
MenuItem { action: actions.open; }
|
MenuItem { action: actions.open; }
|
||||||
|
|
||||||
Menu {
|
Menu
|
||||||
|
{
|
||||||
id: recentFilesMenu;
|
id: recentFilesMenu;
|
||||||
title: "Open Recent"
|
title: catalog.i18nc("@title:menu","Open Recent")
|
||||||
iconName: "document-open-recent";
|
iconName: "document-open-recent";
|
||||||
|
|
||||||
enabled: Printer.recentFiles.length > 0;
|
enabled: Printer.recentFiles.length > 0;
|
||||||
|
|
||||||
Instantiator {
|
Instantiator
|
||||||
|
{
|
||||||
model: Printer.recentFiles
|
model: Printer.recentFiles
|
||||||
MenuItem {
|
MenuItem
|
||||||
text: {
|
{
|
||||||
|
text:
|
||||||
|
{
|
||||||
var path = modelData.toString()
|
var path = modelData.toString()
|
||||||
return (index + 1) + ". " + path.slice(path.lastIndexOf("/") + 1);
|
return (index + 1) + ". " + path.slice(path.lastIndexOf("/") + 1);
|
||||||
}
|
}
|
||||||
|
@ -53,22 +61,26 @@ UM.MainWindow {
|
||||||
|
|
||||||
MenuSeparator { }
|
MenuSeparator { }
|
||||||
|
|
||||||
MenuItem {
|
MenuItem
|
||||||
text: "Save Selection to File";
|
{
|
||||||
|
text: catalog.i18nc("@action:menu", "Save Selection to File");
|
||||||
enabled: UM.Selection.hasSelection;
|
enabled: UM.Selection.hasSelection;
|
||||||
iconName: "document-save-as";
|
iconName: "document-save-as";
|
||||||
onTriggered: UM.OutputDeviceManager.requestWriteSelectionToDevice("local_file");
|
onTriggered: UM.OutputDeviceManager.requestWriteSelectionToDevice("local_file");
|
||||||
}
|
}
|
||||||
Menu {
|
Menu
|
||||||
|
{
|
||||||
id: saveAllMenu
|
id: saveAllMenu
|
||||||
title: "Save All"
|
title: catalog.i18nc("@title:menu","Save All")
|
||||||
iconName: "document-save";
|
iconName: "document-save";
|
||||||
enabled: devicesModel.rowCount() > 0 && UM.Backend.progress > 0.99;
|
enabled: devicesModel.rowCount() > 0 && UM.Backend.progress > 0.99;
|
||||||
|
|
||||||
Instantiator {
|
Instantiator
|
||||||
|
{
|
||||||
model: UM.OutputDevicesModel { id: devicesModel; }
|
model: UM.OutputDevicesModel { id: devicesModel; }
|
||||||
|
|
||||||
MenuItem {
|
MenuItem
|
||||||
|
{
|
||||||
text: model.description;
|
text: model.description;
|
||||||
onTriggered: UM.OutputDeviceManager.requestWriteToDevice(model.id);
|
onTriggered: UM.OutputDeviceManager.requestWriteToDevice(model.id);
|
||||||
}
|
}
|
||||||
|
@ -82,9 +94,10 @@ UM.MainWindow {
|
||||||
MenuItem { action: actions.quit; }
|
MenuItem { action: actions.quit; }
|
||||||
}
|
}
|
||||||
|
|
||||||
Menu {
|
Menu
|
||||||
|
{
|
||||||
//: Edit menu
|
//: Edit menu
|
||||||
title: qsTr("&Edit");
|
title: catalog.i18nc("@title:menu","&Edit");
|
||||||
|
|
||||||
MenuItem { action: actions.undo; }
|
MenuItem { action: actions.undo; }
|
||||||
MenuItem { action: actions.redo; }
|
MenuItem { action: actions.redo; }
|
||||||
|
@ -94,7 +107,7 @@ UM.MainWindow {
|
||||||
}
|
}
|
||||||
Menu
|
Menu
|
||||||
{
|
{
|
||||||
title: qsTr("&View");
|
title: catalog.i18nc("@title:menu","&View");
|
||||||
id: top_view_menu
|
id: top_view_menu
|
||||||
Instantiator
|
Instantiator
|
||||||
{
|
{
|
||||||
|
@ -116,14 +129,17 @@ UM.MainWindow {
|
||||||
|
|
||||||
MenuItem { action: actions.toggleFullScreen; }
|
MenuItem { action: actions.toggleFullScreen; }
|
||||||
}
|
}
|
||||||
Menu {
|
Menu
|
||||||
|
{
|
||||||
id: machineMenu;
|
id: machineMenu;
|
||||||
//: Machine menu
|
//: Machine menu
|
||||||
title: qsTr("&Machine");
|
title: catalog.i18nc("@title:menu","&Machine");
|
||||||
|
|
||||||
Instantiator {
|
Instantiator
|
||||||
|
{
|
||||||
model: UM.MachineInstancesModel { }
|
model: UM.MachineInstancesModel { }
|
||||||
MenuItem {
|
MenuItem
|
||||||
|
{
|
||||||
text: model.name;
|
text: model.name;
|
||||||
checkable: true;
|
checkable: true;
|
||||||
checked: model.active;
|
checked: model.active;
|
||||||
|
@ -138,7 +154,8 @@ UM.MainWindow {
|
||||||
|
|
||||||
MenuSeparator { }
|
MenuSeparator { }
|
||||||
|
|
||||||
Instantiator {
|
Instantiator
|
||||||
|
{
|
||||||
model: UM.MachineVariantsModel { }
|
model: UM.MachineVariantsModel { }
|
||||||
MenuItem {
|
MenuItem {
|
||||||
text: model.name;
|
text: model.name;
|
||||||
|
@ -159,10 +176,11 @@ UM.MainWindow {
|
||||||
MenuItem { action: actions.configureMachines; }
|
MenuItem { action: actions.configureMachines; }
|
||||||
}
|
}
|
||||||
|
|
||||||
Menu {
|
Menu
|
||||||
|
{
|
||||||
id: extension_menu
|
id: extension_menu
|
||||||
//: Extensions menu
|
//: Extensions menu
|
||||||
title: qsTr("E&xtensions");
|
title: catalog.i18nc("@title:menu","E&xtensions");
|
||||||
|
|
||||||
Instantiator
|
Instantiator
|
||||||
{
|
{
|
||||||
|
@ -191,16 +209,18 @@ UM.MainWindow {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Menu {
|
Menu
|
||||||
|
{
|
||||||
//: Settings menu
|
//: Settings menu
|
||||||
title: qsTr("&Settings");
|
title: catalog.i18nc("@title:menu","&Settings");
|
||||||
|
|
||||||
MenuItem { action: actions.preferences; }
|
MenuItem { action: actions.preferences; }
|
||||||
}
|
}
|
||||||
|
|
||||||
Menu {
|
Menu
|
||||||
|
{
|
||||||
//: Help menu
|
//: Help menu
|
||||||
title: qsTr("&Help");
|
title: catalog.i18nc("@title:menu","&Help");
|
||||||
|
|
||||||
MenuItem { action: actions.showEngineLog; }
|
MenuItem { action: actions.showEngineLog; }
|
||||||
MenuItem { action: actions.documentation; }
|
MenuItem { action: actions.documentation; }
|
||||||
|
@ -210,7 +230,8 @@ UM.MainWindow {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Item {
|
Item
|
||||||
|
{
|
||||||
id: contentItem;
|
id: contentItem;
|
||||||
|
|
||||||
y: menu.height
|
y: menu.height
|
||||||
|
@ -219,19 +240,25 @@ UM.MainWindow {
|
||||||
|
|
||||||
Keys.forwardTo: menu
|
Keys.forwardTo: menu
|
||||||
|
|
||||||
DropArea {
|
DropArea
|
||||||
|
{
|
||||||
anchors.fill: parent;
|
anchors.fill: parent;
|
||||||
onDropped: {
|
onDropped:
|
||||||
if(drop.urls.length > 0) {
|
{
|
||||||
for(var i in drop.urls) {
|
if(drop.urls.length > 0)
|
||||||
|
{
|
||||||
|
for(var i in drop.urls)
|
||||||
|
{
|
||||||
UM.MeshFileHandler.readLocalFile(drop.urls[i]);
|
UM.MeshFileHandler.readLocalFile(drop.urls[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
UM.MessageStack {
|
UM.MessageStack
|
||||||
anchors {
|
{
|
||||||
|
anchors
|
||||||
|
{
|
||||||
horizontalCenter: parent.horizontalCenter
|
horizontalCenter: parent.horizontalCenter
|
||||||
horizontalCenterOffset: -(UM.Theme.sizes.logo.width/ 2)
|
horizontalCenterOffset: -(UM.Theme.sizes.logo.width/ 2)
|
||||||
top: parent.verticalCenter;
|
top: parent.verticalCenter;
|
||||||
|
@ -258,12 +285,14 @@ UM.MainWindow {
|
||||||
source: UM.ActiveView.valid ? UM.ActiveView.activeViewPanel : "";
|
source: UM.ActiveView.valid ? UM.ActiveView.activeViewPanel : "";
|
||||||
}
|
}
|
||||||
|
|
||||||
Button {
|
Button
|
||||||
|
{
|
||||||
id: openFileButton;
|
id: openFileButton;
|
||||||
//style: UM.Backend.progress < 0 ? UM.Theme.styles.open_file_button : UM.Theme.styles.tool_button;
|
//style: UM.Backend.progress < 0 ? UM.Theme.styles.open_file_button : UM.Theme.styles.tool_button;
|
||||||
style: UM.Theme.styles.open_file_button
|
style: UM.Theme.styles.open_file_button
|
||||||
tooltip: '';
|
tooltip: '';
|
||||||
anchors {
|
anchors
|
||||||
|
{
|
||||||
top: parent.top;
|
top: parent.top;
|
||||||
topMargin: UM.Theme.sizes.loadfile_margin.height
|
topMargin: UM.Theme.sizes.loadfile_margin.height
|
||||||
left: parent.left;
|
left: parent.left;
|
||||||
|
@ -272,9 +301,11 @@ UM.MainWindow {
|
||||||
action: actions.open;
|
action: actions.open;
|
||||||
}
|
}
|
||||||
|
|
||||||
Image {
|
Image
|
||||||
|
{
|
||||||
id: logo
|
id: logo
|
||||||
anchors {
|
anchors
|
||||||
|
{
|
||||||
left: parent.left
|
left: parent.left
|
||||||
leftMargin: UM.Theme.sizes.default_margin.width;
|
leftMargin: UM.Theme.sizes.default_margin.width;
|
||||||
bottom: parent.bottom
|
bottom: parent.bottom
|
||||||
|
@ -289,24 +320,29 @@ UM.MainWindow {
|
||||||
sourceSize.height: height;
|
sourceSize.height: height;
|
||||||
}
|
}
|
||||||
|
|
||||||
Button {
|
Button
|
||||||
|
{
|
||||||
id: viewModeButton
|
id: viewModeButton
|
||||||
anchors {
|
anchors
|
||||||
|
{
|
||||||
top: parent.top;
|
top: parent.top;
|
||||||
right: sidebar.left;
|
right: sidebar.left;
|
||||||
rightMargin: UM.Theme.sizes.window_margin.width;
|
rightMargin: UM.Theme.sizes.window_margin.width;
|
||||||
}
|
}
|
||||||
//: View Mode toolbar button
|
//: View Mode toolbar button
|
||||||
text: qsTr("View Mode");
|
text: catalog.i18nc("@action:button","View Mode");
|
||||||
iconSource: UM.Theme.icons.viewmode;
|
iconSource: UM.Theme.icons.viewmode;
|
||||||
|
|
||||||
style: UM.Theme.styles.tool_button;
|
style: UM.Theme.styles.tool_button;
|
||||||
tooltip: '';
|
tooltip: '';
|
||||||
menu: Menu {
|
menu: Menu
|
||||||
|
{
|
||||||
id: viewMenu;
|
id: viewMenu;
|
||||||
Instantiator {
|
Instantiator
|
||||||
|
{
|
||||||
model: UM.Models.viewModel;
|
model: UM.Models.viewModel;
|
||||||
MenuItem {
|
MenuItem
|
||||||
|
{
|
||||||
text: model.name;
|
text: model.name;
|
||||||
checkable: true;
|
checkable: true;
|
||||||
checked: model.active;
|
checked: model.active;
|
||||||
|
@ -321,38 +357,46 @@ UM.MainWindow {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Toolbar {
|
Toolbar
|
||||||
|
{
|
||||||
id: toolbar;
|
id: toolbar;
|
||||||
|
|
||||||
anchors {
|
anchors {
|
||||||
horizontalCenter: parent.horizontalCenter
|
left: parent.left
|
||||||
horizontalCenterOffset: -(UM.Theme.sizes.panel.width / 2)
|
top: parent.top
|
||||||
top: parent.top;
|
topMargin: 74
|
||||||
|
//horizontalCenter: parent.horizontalCenter
|
||||||
|
//horizontalCenterOffset: -(UM.Theme.sizes.sidebar.width / 2)
|
||||||
|
//top: parent.top;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Sidebar {
|
Sidebar
|
||||||
|
{
|
||||||
id: sidebar;
|
id: sidebar;
|
||||||
|
|
||||||
anchors {
|
anchors
|
||||||
|
{
|
||||||
top: parent.top;
|
top: parent.top;
|
||||||
bottom: parent.bottom;
|
bottom: parent.bottom;
|
||||||
right: parent.right;
|
right: parent.right;
|
||||||
}
|
}
|
||||||
|
|
||||||
width: UM.Theme.sizes.panel.width;
|
width: UM.Theme.sizes.sidebar.width;
|
||||||
|
|
||||||
addMachineAction: actions.addMachine;
|
addMachineAction: actions.addMachine;
|
||||||
configureMachinesAction: actions.configureMachines;
|
configureMachinesAction: actions.configureMachines;
|
||||||
}
|
}
|
||||||
|
|
||||||
Rectangle {
|
Rectangle
|
||||||
|
{
|
||||||
x: base.mouseX + UM.Theme.sizes.default_margin.width;
|
x: base.mouseX + UM.Theme.sizes.default_margin.width;
|
||||||
y: base.mouseY + UM.Theme.sizes.default_margin.height;
|
y: base.mouseY + UM.Theme.sizes.default_margin.height;
|
||||||
|
|
||||||
width: childrenRect.width;
|
width: childrenRect.width;
|
||||||
height: childrenRect.height;
|
height: childrenRect.height;
|
||||||
Label {
|
Label
|
||||||
|
{
|
||||||
text: UM.ActiveTool.properties.Rotation != undefined ? "%1°".arg(UM.ActiveTool.properties.Rotation) : "";
|
text: UM.ActiveTool.properties.Rotation != undefined ? "%1°".arg(UM.ActiveTool.properties.Rotation) : "";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -361,23 +405,26 @@ UM.MainWindow {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
UM.PreferencesDialog {
|
UM.PreferencesDialog
|
||||||
|
{
|
||||||
id: preferences
|
id: preferences
|
||||||
|
|
||||||
Component.onCompleted: {
|
Component.onCompleted:
|
||||||
|
{
|
||||||
//; Remove & re-add the general page as we want to use our own instead of uranium standard.
|
//; Remove & re-add the general page as we want to use our own instead of uranium standard.
|
||||||
removePage(0);
|
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
|
//: 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
|
//Force refresh
|
||||||
setPage(0)
|
setPage(0)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Actions {
|
Actions
|
||||||
|
{
|
||||||
id: actions;
|
id: actions;
|
||||||
|
|
||||||
open.onTriggered: openDialog.open();
|
open.onTriggered: openDialog.open();
|
||||||
|
@ -390,28 +437,36 @@ UM.MainWindow {
|
||||||
redo.onTriggered: UM.OperationStack.redo();
|
redo.onTriggered: UM.OperationStack.redo();
|
||||||
redo.enabled: UM.OperationStack.canRedo;
|
redo.enabled: UM.OperationStack.canRedo;
|
||||||
|
|
||||||
deleteSelection.onTriggered: {
|
deleteSelection.onTriggered:
|
||||||
if(objectContextMenu.objectId != 0) {
|
{
|
||||||
|
if(objectContextMenu.objectId != 0)
|
||||||
|
{
|
||||||
Printer.deleteObject(objectContextMenu.objectId);
|
Printer.deleteObject(objectContextMenu.objectId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
deleteObject.onTriggered: {
|
deleteObject.onTriggered:
|
||||||
if(objectContextMenu.objectId != 0) {
|
{
|
||||||
|
if(objectContextMenu.objectId != 0)
|
||||||
|
{
|
||||||
Printer.deleteObject(objectContextMenu.objectId);
|
Printer.deleteObject(objectContextMenu.objectId);
|
||||||
objectContextMenu.objectId = 0;
|
objectContextMenu.objectId = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
multiplyObject.onTriggered: {
|
multiplyObject.onTriggered:
|
||||||
if(objectContextMenu.objectId != 0) {
|
{
|
||||||
|
if(objectContextMenu.objectId != 0)
|
||||||
|
{
|
||||||
Printer.multiplyObject(objectContextMenu.objectId, 1);
|
Printer.multiplyObject(objectContextMenu.objectId, 1);
|
||||||
objectContextMenu.objectId = 0;
|
objectContextMenu.objectId = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
centerObject.onTriggered: {
|
centerObject.onTriggered:
|
||||||
if(objectContextMenu.objectId != 0) {
|
{
|
||||||
|
if(objectContextMenu.objectId != 0)
|
||||||
|
{
|
||||||
Printer.centerObject(objectContextMenu.objectId);
|
Printer.centerObject(objectContextMenu.objectId);
|
||||||
objectContextMenu.objectId = 0;
|
objectContextMenu.objectId = 0;
|
||||||
}
|
}
|
||||||
|
@ -450,7 +505,8 @@ UM.MainWindow {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Menu {
|
Menu
|
||||||
|
{
|
||||||
id: objectContextMenu;
|
id: objectContextMenu;
|
||||||
|
|
||||||
property variant objectId: -1;
|
property variant objectId: -1;
|
||||||
|
@ -469,7 +525,8 @@ UM.MainWindow {
|
||||||
MenuItem { action: actions.mergeObjects;}
|
MenuItem { action: actions.mergeObjects;}
|
||||||
}
|
}
|
||||||
|
|
||||||
Menu {
|
Menu
|
||||||
|
{
|
||||||
id: contextMenu;
|
id: contextMenu;
|
||||||
MenuItem { action: actions.deleteAll; }
|
MenuItem { action: actions.deleteAll; }
|
||||||
MenuItem { action: actions.reloadAll; }
|
MenuItem { action: actions.reloadAll; }
|
||||||
|
@ -480,23 +537,28 @@ UM.MainWindow {
|
||||||
MenuItem { action: actions.mergeObjects;}
|
MenuItem { action: actions.mergeObjects;}
|
||||||
}
|
}
|
||||||
|
|
||||||
Connections {
|
Connections
|
||||||
|
{
|
||||||
target: UM.Controller
|
target: UM.Controller
|
||||||
onContextMenuRequested: {
|
onContextMenuRequested:
|
||||||
if(objectId == 0) {
|
{
|
||||||
|
if(objectId == 0)
|
||||||
|
{
|
||||||
contextMenu.popup();
|
contextMenu.popup();
|
||||||
} else {
|
} else
|
||||||
|
{
|
||||||
objectContextMenu.objectId = objectId;
|
objectContextMenu.objectId = objectId;
|
||||||
objectContextMenu.popup();
|
objectContextMenu.popup();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
FileDialog {
|
FileDialog
|
||||||
|
{
|
||||||
id: openDialog;
|
id: openDialog;
|
||||||
|
|
||||||
//: File open dialog title
|
//: File open dialog title
|
||||||
title: qsTr("Open File")
|
title: catalog.i18nc("@title:window","Open File")
|
||||||
modality: UM.Application.platform == "linux" ? Qt.NonModal : Qt.WindowModal;
|
modality: UM.Application.platform == "linux" ? Qt.NonModal : Qt.WindowModal;
|
||||||
//TODO: Support multiple file selection, workaround bug in KDE file dialog
|
//TODO: Support multiple file selection, workaround bug in KDE file dialog
|
||||||
//selectMultiple: true
|
//selectMultiple: true
|
||||||
|
@ -509,22 +571,27 @@ UM.MainWindow {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
EngineLog {
|
EngineLog
|
||||||
|
{
|
||||||
id: engineLog;
|
id: engineLog;
|
||||||
}
|
}
|
||||||
|
|
||||||
AddMachineWizard {
|
AddMachineWizard
|
||||||
|
{
|
||||||
id: addMachineWizard
|
id: addMachineWizard
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
AboutDialog {
|
AboutDialog
|
||||||
|
{
|
||||||
id: aboutDialog
|
id: aboutDialog
|
||||||
}
|
}
|
||||||
|
|
||||||
Connections {
|
Connections
|
||||||
|
{
|
||||||
target: Printer
|
target: Printer
|
||||||
onRequestAddPrinter: {
|
onRequestAddPrinter:
|
||||||
|
{
|
||||||
addMachineWizard.visible = true
|
addMachineWizard.visible = true
|
||||||
addMachineWizard.firstRun = true
|
addMachineWizard.firstRun = true
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,40 +5,48 @@ import QtQuick 2.2
|
||||||
import QtQuick.Controls 1.1
|
import QtQuick.Controls 1.1
|
||||||
import QtQuick.Layouts 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;
|
id: dialog;
|
||||||
|
|
||||||
//: Engine Log dialog title
|
//: Engine Log dialog title
|
||||||
title: qsTr("Engine Log");
|
title: catalog.i18nc("@title:window","Engine Log");
|
||||||
|
|
||||||
modality: Qt.NonModal;
|
modality: Qt.NonModal;
|
||||||
|
|
||||||
TextArea {
|
TextArea
|
||||||
|
{
|
||||||
id: textArea
|
id: textArea
|
||||||
anchors.fill: parent;
|
anchors.fill: parent;
|
||||||
|
|
||||||
Timer {
|
Timer
|
||||||
|
{
|
||||||
id: updateTimer;
|
id: updateTimer;
|
||||||
interval: 1000;
|
interval: 1000;
|
||||||
running: false;
|
running: false;
|
||||||
repeat: true;
|
repeat: true;
|
||||||
onTriggered: textArea.text = Printer.getEngineLog();
|
onTriggered: textArea.text = Printer.getEngineLog();
|
||||||
}
|
}
|
||||||
|
UM.I18nCatalog{id: catalog; name:"cura"}
|
||||||
}
|
}
|
||||||
|
|
||||||
rightButtons: Button {
|
rightButtons: Button
|
||||||
|
{
|
||||||
//: Close engine log button
|
//: Close engine log button
|
||||||
text: qsTr("Close");
|
text: catalog.i18nc("@action:button","Close");
|
||||||
onClicked: dialog.visible = false;
|
onClicked: dialog.visible = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
onVisibleChanged: {
|
onVisibleChanged:
|
||||||
if(visible) {
|
{
|
||||||
|
if(visible)
|
||||||
|
{
|
||||||
textArea.text = Printer.getEngineLog();
|
textArea.text = Printer.getEngineLog();
|
||||||
updateTimer.start();
|
updateTimer.start();
|
||||||
} else {
|
} else
|
||||||
|
{
|
||||||
updateTimer.stop();
|
updateTimer.stop();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,26 +6,33 @@ import QtQuick.Controls 1.1
|
||||||
import QtQuick.Layouts 1.1
|
import QtQuick.Layouts 1.1
|
||||||
import QtQuick.Controls.Styles 1.1
|
import QtQuick.Controls.Styles 1.1
|
||||||
|
|
||||||
import UM 1.0 as UM
|
import UM 1.1 as UM
|
||||||
|
|
||||||
UM.PreferencesPage
|
UM.PreferencesPage
|
||||||
{
|
{
|
||||||
//: General configuration page title
|
//: General configuration page title
|
||||||
title: qsTr("General");
|
title: catalog.i18nc("@title:wizard","General");
|
||||||
|
|
||||||
function reset()
|
function reset()
|
||||||
{
|
{
|
||||||
UM.Preferences.resetPreference("general/language")
|
UM.Preferences.resetPreference("general/language")
|
||||||
UM.Preferences.resetPreference("physics/automatic_push_free")
|
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
|
GridLayout
|
||||||
{
|
{
|
||||||
columns: 2;
|
columns: 2;
|
||||||
//: Language selection label
|
//: Language selection label
|
||||||
|
UM.I18nCatalog{id: catalog; name:"cura"}
|
||||||
Label
|
Label
|
||||||
{
|
{
|
||||||
id: languageLabel
|
id: languageLabel
|
||||||
text: qsTr("Language")
|
text: catalog.i18nc("@label","Language")
|
||||||
}
|
}
|
||||||
|
|
||||||
ComboBox
|
ComboBox
|
||||||
|
@ -72,7 +79,7 @@ UM.PreferencesPage
|
||||||
// Because ListModel is stupid and does not allow using qsTr() for values.
|
// Because ListModel is stupid and does not allow using qsTr() for values.
|
||||||
for(var i = 0; i < languageList.count; ++i)
|
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
|
// Glorious hack time. ComboBox does not update the text properly after changing the
|
||||||
|
@ -88,7 +95,7 @@ UM.PreferencesPage
|
||||||
Layout.columnSpan: 2
|
Layout.columnSpan: 2
|
||||||
|
|
||||||
//: Language change warning
|
//: 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
|
wrapMode: Text.WordWrap
|
||||||
font.italic: true
|
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
|
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
|
//: Display Overhang preference checkbox
|
||||||
text: qsTr("Automatic push free");
|
text: catalog.i18nc("@action:checkbox","Automatic push free");
|
||||||
onClicked: pushFreeCheckbox.checked = !pushFreeCheckbox.checked
|
onClicked: pushFreeCheckbox.checked = !pushFreeCheckbox.checked
|
||||||
|
|
||||||
//: Display Overhang preference tooltip
|
//: 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
|
style: ButtonStyle
|
||||||
{
|
{
|
||||||
|
|
|
@ -14,115 +14,150 @@ Rectangle {
|
||||||
property real progress: UM.Backend.progress;
|
property real progress: UM.Backend.progress;
|
||||||
property bool activity: Printer.getPlatformActivity;
|
property bool activity: Printer.getPlatformActivity;
|
||||||
Behavior on progress { NumberAnimation { duration: 250; } }
|
Behavior on progress { NumberAnimation { duration: 250; } }
|
||||||
|
property int totalHeight: childrenRect.height
|
||||||
|
|
||||||
|
UM.I18nCatalog { id: catalog; name:"cura"}
|
||||||
|
|
||||||
property variant printDuration: PrintInformation.currentPrintTime;
|
property variant printDuration: PrintInformation.currentPrintTime;
|
||||||
property real printMaterialAmount: PrintInformation.materialAmount;
|
property real printMaterialAmount: PrintInformation.materialAmount;
|
||||||
|
|
||||||
Rectangle{
|
Rectangle{
|
||||||
id: background
|
id: printJobRow
|
||||||
implicitWidth: base.width;
|
implicitWidth: base.width;
|
||||||
implicitHeight: parent.height;
|
implicitHeight: UM.Theme.sizes.sidebar_header.height
|
||||||
color: UM.Theme.colors.save_button_background;
|
anchors.top: parent.top
|
||||||
border.width: UM.Theme.sizes.save_button_border.width
|
color: UM.Theme.colors.sidebar_header_bar
|
||||||
border.color: UM.Theme.colors.save_button_border
|
Label{
|
||||||
|
id: printJobTextfieldLabel
|
||||||
Rectangle {
|
text: catalog.i18nc("@label","Printjob name");
|
||||||
id: infoBox
|
|
||||||
width: parent.width - UM.Theme.sizes.default_margin.width * 2;
|
|
||||||
height: UM.Theme.sizes.save_button_slicing_bar.height
|
|
||||||
|
|
||||||
anchors.top: parent.top
|
|
||||||
anchors.topMargin: UM.Theme.sizes.default_margin.height;
|
|
||||||
anchors.left: parent.left
|
anchors.left: parent.left
|
||||||
anchors.leftMargin: UM.Theme.sizes.default_margin.width;
|
anchors.leftMargin: UM.Theme.sizes.default_margin.width;
|
||||||
|
anchors.verticalCenter: parent.verticalCenter
|
||||||
border.width: UM.Theme.sizes.save_button_border.width
|
font: UM.Theme.fonts.default;
|
||||||
border.color: UM.Theme.colors.save_button_border
|
color: UM.Theme.colors.text_white
|
||||||
color: UM.Theme.colors.save_button_estimated_text_background;
|
}
|
||||||
Label {
|
TextField {
|
||||||
id: label;
|
id: printJobTextfield
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
anchors.right: parent.right
|
||||||
anchors.left: parent.left
|
anchors.rightMargin: UM.Theme.sizes.default_margin.width;
|
||||||
anchors.leftMargin: UM.Theme.sizes.save_button_text_margin.width;
|
anchors.verticalCenter: parent.verticalCenter
|
||||||
visible: base.progress >= 0 && base.progress < 0.99 ? false : true
|
width: parent.width/100*55
|
||||||
color: UM.Theme.colors.save_button_estimated_text;
|
height: UM.Theme.sizes.sidebar_inputFields.height
|
||||||
font: UM.Theme.fonts.small;
|
property int unremovableSpacing: 5
|
||||||
text: {
|
text: "UM2" + "_" + "filename" ///TODO KOMT NOG
|
||||||
if(base.activity == false) {
|
onEditingFinished: {
|
||||||
//: Save button label
|
if (printJobTextfield.text != ''){
|
||||||
return qsTr("Please load a 3D model");
|
printJobTextfield.focus = false
|
||||||
} else if (base.progress < 0.99) {
|
|
||||||
//: Save button label
|
|
||||||
return qsTr("Calculating Print-time");
|
|
||||||
} else if (base.printDuration.days > 0 || base.progress == null){
|
|
||||||
return qsTr("");
|
|
||||||
}
|
|
||||||
else if (base.progress > 0.99){
|
|
||||||
//: Save button label
|
|
||||||
return qsTr("Estimated Print-time");
|
|
||||||
}
|
|
||||||
return "";
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Label {
|
validator: RegExpValidator {
|
||||||
id: printDurationLabel
|
regExp: /^[0-9a-zA-Z\_\-]*$/
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
Label {
|
style: TextFieldStyle{
|
||||||
id: printMaterialLabel
|
textColor: UM.Theme.colors.setting_control_text;
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
font: UM.Theme.fonts.default;
|
||||||
anchors.left: printDurationLabel.right;
|
background: Rectangle {
|
||||||
anchors.leftMargin: UM.Theme.sizes.save_button_text_margin.width;
|
radius: 0
|
||||||
color: base.printDuration.days > 0 ? UM.Theme.colors.save_button_estimated_text : UM.Theme.colors.save_button_printtime_text;
|
implicitWidth: parent.width
|
||||||
font: UM.Theme.fonts.small;
|
implicitHeight: parent.height
|
||||||
property bool mediumLengthDuration: base.printDuration.hours > 9 && base.printMaterialAmount > 9.99 && base.printDuration.days == 0
|
border.width: 1;
|
||||||
width: mediumLengthDuration ? 50 : undefined
|
border.color: UM.Theme.colors.slider_groove_border;
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Rectangle {
|
}
|
||||||
id: infoBoxOverlay
|
|
||||||
anchors {
|
Rectangle {
|
||||||
left: infoBox.left;
|
id: specsRow
|
||||||
top: infoBox.top;
|
implicitWidth: base.width
|
||||||
bottom: infoBox.bottom;
|
implicitHeight: UM.Theme.sizes.sidebar_specs_bar.height
|
||||||
|
anchors.top: printJobRow.bottom
|
||||||
|
Item{
|
||||||
|
id: time
|
||||||
|
width: (parent.width / 100 * 45) - UM.Theme.sizes.default_margin.width * 2
|
||||||
|
height: parent.height
|
||||||
|
anchors.left: parent.left
|
||||||
|
anchors.leftMargin: UM.Theme.sizes.default_margin.width
|
||||||
|
anchors.top: parent.top
|
||||||
|
visible: base.printMaterialAmount > 0 ? true : false
|
||||||
|
UM.RecolorImage {
|
||||||
|
id: timeIcon
|
||||||
|
anchors.verticalCenter: parent.verticalCenter
|
||||||
|
anchors.left: parent.left
|
||||||
|
width: UM.Theme.sizes.save_button_specs_icons.width
|
||||||
|
height: UM.Theme.sizes.save_button_specs_icons.height
|
||||||
|
sourceSize.width: width
|
||||||
|
sourceSize.height: width
|
||||||
|
color: UM.Theme.colors.text_hover
|
||||||
|
source: UM.Theme.icons.print_time;
|
||||||
|
}
|
||||||
|
Label{
|
||||||
|
id: timeSpec
|
||||||
|
anchors.verticalCenter: parent.verticalCenter
|
||||||
|
anchors.left: timeIcon.right
|
||||||
|
anchors.leftMargin: UM.Theme.sizes.default_margin.width/2
|
||||||
|
font: UM.Theme.fonts.default
|
||||||
|
color: UM.Theme.colors.text
|
||||||
|
text: (!base.printDuration || !base.printDuration.valid) ? "" : catalog.i18nc("@label", "%1 m").arg(base.printDuration.getDisplayString(UM.DurationFormat.Short))
|
||||||
}
|
}
|
||||||
width: Math.max(infoBox.width * base.progress);
|
|
||||||
color: UM.Theme.colors.save_button_active
|
|
||||||
visible: progress > 0.99 ? false : true
|
|
||||||
}
|
}
|
||||||
|
Item{
|
||||||
|
width: parent.width / 100 * 55
|
||||||
|
height: parent.height
|
||||||
|
anchors.left: time.right
|
||||||
|
anchors.top: parent.top
|
||||||
|
visible: base.printMaterialAmount > 0 ? true : false
|
||||||
|
UM.RecolorImage {
|
||||||
|
id: lengthIcon
|
||||||
|
anchors.verticalCenter: parent.verticalCenter
|
||||||
|
anchors.left: parent.left
|
||||||
|
width: UM.Theme.sizes.save_button_specs_icons.width
|
||||||
|
height: UM.Theme.sizes.save_button_specs_icons.height
|
||||||
|
sourceSize.width: width
|
||||||
|
sourceSize.height: width
|
||||||
|
color: UM.Theme.colors.text_hover
|
||||||
|
source: UM.Theme.icons.category_material;
|
||||||
|
}
|
||||||
|
Label{
|
||||||
|
id: lengthSpec
|
||||||
|
anchors.verticalCenter: parent.verticalCenter
|
||||||
|
anchors.left: lengthIcon.right
|
||||||
|
anchors.leftMargin: UM.Theme.sizes.default_margin.width/2
|
||||||
|
font: UM.Theme.fonts.default
|
||||||
|
color: UM.Theme.colors.text
|
||||||
|
text: base.printMaterialAmount <= 0 ? "" : catalog.i18nc("@label","%1 m").arg(base.printMaterialAmount)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Item{
|
||||||
|
id: saveRow
|
||||||
|
implicitWidth: base.width / 100 * 55
|
||||||
|
implicitHeight: saveToButton.height + (UM.Theme.sizes.default_margin.height / 2) // height + bottomMargin
|
||||||
|
anchors.top: specsRow.bottom
|
||||||
|
anchors.right: parent.right
|
||||||
|
anchors.rightMargin: UM.Theme.sizes.default_margin.width
|
||||||
|
|
||||||
Button {
|
Button {
|
||||||
id: saveToButton
|
id: saveToButton
|
||||||
anchors.top: infoBox.bottom
|
|
||||||
anchors.topMargin: UM.Theme.sizes.save_button_text_margin.height;
|
|
||||||
anchors.left: parent.left
|
anchors.left: parent.left
|
||||||
anchors.leftMargin: UM.Theme.sizes.default_margin.width;
|
|
||||||
tooltip: UM.OutputDeviceManager.activeDeviceDescription;
|
tooltip: UM.OutputDeviceManager.activeDeviceDescription;
|
||||||
enabled: progress > 0.99 && base.activity == true
|
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
|
height: UM.Theme.sizes.save_button_save_to_button.height
|
||||||
|
|
||||||
text: UM.OutputDeviceManager.activeDeviceShortDescription;
|
text: UM.OutputDeviceManager.activeDeviceShortDescription;
|
||||||
|
|
||||||
style: ButtonStyle {
|
style: ButtonStyle {
|
||||||
background: Rectangle {
|
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 {
|
Label {
|
||||||
anchors.centerIn: parent
|
anchors.centerIn: parent
|
||||||
color: UM.Theme.colors.save_button_safe_to_text;
|
color: UM.Theme.colors.load_save_button_text
|
||||||
font: UM.Theme.fonts.sidebar_save_to;
|
font: UM.Theme.fonts.default
|
||||||
text: control.text;
|
text: control.text;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -133,52 +168,35 @@ Rectangle {
|
||||||
|
|
||||||
Button {
|
Button {
|
||||||
id: deviceSelectionMenu;
|
id: deviceSelectionMenu;
|
||||||
anchors.top: infoBox.bottom
|
tooltip: catalog.i18nc("@info:tooltip","Select the active output device");
|
||||||
anchors.topMargin: UM.Theme.sizes.save_button_text_margin.height
|
|
||||||
anchors.right: parent.right
|
anchors.right: parent.right
|
||||||
anchors.rightMargin: UM.Theme.sizes.default_margin.width;
|
width: UM.Theme.sizes.save_button_save_to_button.height
|
||||||
|
|
||||||
tooltip: qsTr("Select the active output device");
|
|
||||||
|
|
||||||
width: infoBox.width/6*1.3 - UM.Theme.sizes.save_button_text_margin.height;
|
|
||||||
height: 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 {
|
style: ButtonStyle {
|
||||||
background: Rectangle {
|
background: Rectangle {
|
||||||
color: UM.Theme.colors.save_button_background;
|
id: deviceSelectionIcon
|
||||||
border.width: control.hovered ? UM.Theme.sizes.save_button_border.width : 0
|
color: control.hovered ? UM.Theme.colors.load_save_button_hover : UM.Theme.colors.load_save_button
|
||||||
border.color: UM.Theme.colors.save_button_border
|
Behavior on color { ColorAnimation { duration: 50; } }
|
||||||
|
anchors.left: parent.left
|
||||||
|
anchors.leftMargin: UM.Theme.sizes.save_button_text_margin.width / 2;
|
||||||
|
width: parent.height
|
||||||
|
height: parent.height
|
||||||
|
|
||||||
Rectangle {
|
UM.RecolorImage {
|
||||||
id: deviceSelectionIcon
|
id: lengthIcon
|
||||||
color: UM.Theme.colors.save_button_background;
|
anchors.verticalCenter: parent.verticalCenter
|
||||||
anchors.left: parent.left
|
anchors.horizontalCenter: parent.horizontalCenter
|
||||||
anchors.leftMargin: UM.Theme.sizes.save_button_text_margin.width / 2;
|
width: UM.Theme.sizes.standard_arrow.width
|
||||||
anchors.verticalCenter: parent.verticalCenter;
|
height: UM.Theme.sizes.standard_arrow.height
|
||||||
width: parent.height - UM.Theme.sizes.save_button_text_margin.width ;
|
sourceSize.width: width
|
||||||
height: parent.height - UM.Theme.sizes.save_button_text_margin.width;
|
sourceSize.height: width
|
||||||
|
color: UM.Theme.colors.load_save_button_text
|
||||||
UM.RecolorImage {
|
source: UM.Theme.icons.arrow_bottom
|
||||||
anchors.fill: parent;
|
|
||||||
sourceSize.width: width;
|
|
||||||
sourceSize.height: height;
|
|
||||||
color: UM.Theme.colors.save_button_active
|
|
||||||
source: control.iconSource;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Label {
|
|
||||||
id: deviceSelectionArrow
|
|
||||||
anchors.right: parent.right;
|
|
||||||
anchors.rightMargin: UM.Theme.sizes.save_button_text_margin.height
|
|
||||||
anchors.verticalCenter: parent.verticalCenter;
|
|
||||||
text: "▼";
|
|
||||||
font: UM.Theme.fonts.tiny;
|
|
||||||
color: UM.Theme.colors.save_button_active;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
label: Item { }
|
label: Label{ }
|
||||||
}
|
}
|
||||||
|
|
||||||
menu: Menu {
|
menu: Menu {
|
||||||
|
@ -200,9 +218,6 @@ Rectangle {
|
||||||
ExclusiveGroup { id: devicesMenuGroup; }
|
ExclusiveGroup { id: devicesMenuGroup; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
UM.OutputDevicesModel { id: devicesModel; }
|
||||||
}
|
}
|
||||||
|
}
|
||||||
UM.OutputDevicesModel {
|
|
||||||
id: devicesModel;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -8,162 +8,172 @@ import QtQuick.Layouts 1.1
|
||||||
|
|
||||||
import UM 1.1 as UM
|
import UM 1.1 as UM
|
||||||
|
|
||||||
Rectangle {
|
Rectangle
|
||||||
|
{
|
||||||
id: base;
|
id: base;
|
||||||
|
|
||||||
property Action addMachineAction;
|
property Action addMachineAction;
|
||||||
property Action configureMachinesAction;
|
property Action configureMachinesAction;
|
||||||
|
|
||||||
color: UM.Theme.colors.sidebar;
|
color: UM.Theme.colors.sidebar;
|
||||||
|
UM.I18nCatalog { id: catalog; name:"cura"}
|
||||||
|
|
||||||
function showTooltip(item, position, text) {
|
function showTooltip(item, position, text)
|
||||||
|
{
|
||||||
tooltip.text = text;
|
tooltip.text = text;
|
||||||
position = item.mapToItem(base, position.x, position.y / 2);
|
position = item.mapToItem(base, position.x, position.y / 2);
|
||||||
tooltip.show(position);
|
tooltip.show(position);
|
||||||
}
|
}
|
||||||
|
|
||||||
function hideTooltip() {
|
function hideTooltip()
|
||||||
|
{
|
||||||
tooltip.hide();
|
tooltip.hide();
|
||||||
}
|
}
|
||||||
|
|
||||||
MouseArea {
|
MouseArea
|
||||||
|
{
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
acceptedButtons: Qt.AllButtons;
|
acceptedButtons: Qt.AllButtons;
|
||||||
|
|
||||||
onWheel: {
|
onWheel:
|
||||||
|
{
|
||||||
wheel.accepted = true;
|
wheel.accepted = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ColumnLayout {
|
SidebarHeader {
|
||||||
anchors.fill: parent;
|
id: header;
|
||||||
anchors.topMargin: UM.Theme.sizes.default_margin.height;
|
|
||||||
|
|
||||||
spacing: UM.Theme.sizes.default_margin.height;
|
width: parent.width
|
||||||
|
height: totalHeightHeader
|
||||||
|
|
||||||
SidebarHeader {
|
addMachineAction: base.addMachineAction;
|
||||||
id: header;
|
configureMachinesAction: base.configureMachinesAction;
|
||||||
|
modesModel: modesListModel;
|
||||||
|
|
||||||
Layout.fillWidth: true;
|
currentModeIndex:
|
||||||
|
{
|
||||||
addMachineAction: base.addMachineAction;
|
var index = parseInt(UM.Preferences.getValue("cura/active_mode"))
|
||||||
configureMachinesAction: base.configureMachinesAction;
|
if(index)
|
||||||
modesModel: modesListModel;
|
|
||||||
|
|
||||||
currentModeIndex: {
|
|
||||||
var index = parseInt(UM.Preferences.getValue("cura/active_mode"))
|
|
||||||
if(index) {
|
|
||||||
return index;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
onCurrentModeIndexChanged: UM.Preferences.setValue("cura/active_mode", currentModeIndex);
|
|
||||||
}
|
|
||||||
|
|
||||||
Item {
|
|
||||||
Layout.fillWidth: true;
|
|
||||||
implicitHeight: UM.Theme.sizes.setting.height;
|
|
||||||
|
|
||||||
visible: UM.MachineManager.hasVariants;
|
|
||||||
|
|
||||||
Row {
|
|
||||||
spacing: UM.Theme.sizes.default_margin.width;
|
|
||||||
Label {
|
|
||||||
anchors.verticalCenter: parent.verticalCenter;
|
|
||||||
text: "Variant";
|
|
||||||
}
|
|
||||||
|
|
||||||
ComboBox {
|
|
||||||
anchors.verticalCenter: parent.verticalCenter;
|
|
||||||
model: UM.MachineVariantsModel { }
|
|
||||||
textRole: "name"
|
|
||||||
onActivated: UM.MachineManager.setActiveMachineVariant(model.getItem(index).name);
|
|
||||||
|
|
||||||
currentIndex: {
|
|
||||||
for(var i = 0; i < model.rowCount(); ++i) {
|
|
||||||
if(model.getItem(i).name == UM.MachineManager.activeMachineVariant) {
|
|
||||||
return i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Item {
|
|
||||||
Layout.fillWidth: true;
|
|
||||||
implicitHeight: UM.Theme.sizes.setting.height;
|
|
||||||
|
|
||||||
Row {
|
|
||||||
spacing: UM.Theme.sizes.default_margin.width;
|
|
||||||
Label {
|
|
||||||
anchors.verticalCenter: parent.verticalCenter;
|
|
||||||
text: "Global Profile";
|
|
||||||
}
|
|
||||||
|
|
||||||
ComboBox {
|
|
||||||
anchors.verticalCenter: parent.verticalCenter;
|
|
||||||
model: UM.ProfilesModel { }
|
|
||||||
textRole: "name"
|
|
||||||
onActivated: UM.MachineManager.setActiveProfile(model.getItem(index).name)
|
|
||||||
|
|
||||||
currentIndex: {
|
|
||||||
for(var i = 0; i < model.rowCount(); ++i) {
|
|
||||||
if(model.getItem(i).name == UM.MachineManager.activeProfile)
|
|
||||||
return i;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Button {
|
|
||||||
text: "Save";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Loader {
|
|
||||||
id: sidebarContents;
|
|
||||||
|
|
||||||
Layout.fillWidth: true;
|
|
||||||
Layout.fillHeight: true;
|
|
||||||
|
|
||||||
source: modesListModel.get(header.currentModeIndex).file;
|
|
||||||
|
|
||||||
property Item sidebar: base;
|
|
||||||
|
|
||||||
onLoaded:
|
|
||||||
{
|
{
|
||||||
if(item)
|
return index;
|
||||||
{
|
}
|
||||||
item.configureSettings = base.configureMachinesAction;
|
return 0;
|
||||||
if(item.onShowTooltip != undefined)
|
}
|
||||||
{
|
onCurrentModeIndexChanged: UM.Preferences.setValue("cura/active_mode", currentModeIndex);
|
||||||
item.showTooltip.connect(base.showTooltip)
|
}
|
||||||
}
|
|
||||||
if(item.onHideTooltip != undefined)
|
Item {
|
||||||
{
|
id: variantItem;
|
||||||
item.hideTooltip.connect(base.hideTooltip)
|
|
||||||
|
anchors.top: header.bottom;
|
||||||
|
height: UM.Theme.sizes.setting.height;
|
||||||
|
|
||||||
|
visible: UM.MachineManager.hasVariants;
|
||||||
|
|
||||||
|
Row {
|
||||||
|
spacing: UM.Theme.sizes.default_margin.width;
|
||||||
|
Label {
|
||||||
|
anchors.verticalCenter: parent.verticalCenter;
|
||||||
|
text: "Variant";
|
||||||
|
}
|
||||||
|
|
||||||
|
ComboBox {
|
||||||
|
anchors.verticalCenter: parent.verticalCenter;
|
||||||
|
model: UM.MachineVariantsModel { }
|
||||||
|
textRole: "name"
|
||||||
|
onActivated: UM.MachineManager.setActiveMachineVariant(model.getItem(index).name);
|
||||||
|
|
||||||
|
currentIndex: {
|
||||||
|
for(var i = 0; i < model.rowCount(); ++i) {
|
||||||
|
if(model.getItem(i).name == UM.MachineManager.activeMachineVariant) {
|
||||||
|
return i;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
SaveButton {
|
|
||||||
id: saveButton;
|
|
||||||
implicitWidth: base.width
|
|
||||||
implicitHeight: UM.Theme.sizes.save_button_text_margin.height * 2 + UM.Theme.sizes.save_button_slicing_bar.height + UM.Theme.sizes.save_button_save_to_button.height + UM.Theme.sizes.default_margin.height
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
SidebarTooltip {
|
Item {
|
||||||
|
id: profileItem;
|
||||||
|
|
||||||
|
anchors.top: variantItem.bottom;
|
||||||
|
height: UM.Theme.sizes.setting.height;
|
||||||
|
|
||||||
|
Row {
|
||||||
|
spacing: UM.Theme.sizes.default_margin.width;
|
||||||
|
Label {
|
||||||
|
anchors.verticalCenter: parent.verticalCenter;
|
||||||
|
text: "Global Profile";
|
||||||
|
}
|
||||||
|
|
||||||
|
ComboBox {
|
||||||
|
anchors.verticalCenter: parent.verticalCenter;
|
||||||
|
model: UM.ProfilesModel { }
|
||||||
|
textRole: "name"
|
||||||
|
onActivated: UM.MachineManager.setActiveProfile(model.getItem(index).name)
|
||||||
|
|
||||||
|
currentIndex: {
|
||||||
|
for(var i = 0; i < model.rowCount(); ++i) {
|
||||||
|
if(model.getItem(i).name == UM.MachineManager.activeProfile)
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Button {
|
||||||
|
text: "Save";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Loader {
|
||||||
|
id: sidebarContents;
|
||||||
|
anchors.bottom: saveButton.top
|
||||||
|
anchors.top: profileItem.bottom
|
||||||
|
anchors.left: base.left
|
||||||
|
anchors.right: base.right
|
||||||
|
|
||||||
|
source: modesListModel.get(header.currentModeIndex).file;
|
||||||
|
|
||||||
|
property Item sidebar: base;
|
||||||
|
|
||||||
|
onLoaded:
|
||||||
|
{
|
||||||
|
if(item)
|
||||||
|
{
|
||||||
|
item.configureSettings = base.configureMachinesAction;
|
||||||
|
if(item.onShowTooltip != undefined)
|
||||||
|
{
|
||||||
|
item.showTooltip.connect(base.showTooltip)
|
||||||
|
}
|
||||||
|
if(item.onHideTooltip != undefined)
|
||||||
|
{
|
||||||
|
item.hideTooltip.connect(base.hideTooltip)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
SaveButton {
|
||||||
|
id: saveButton;
|
||||||
|
implicitWidth: base.width
|
||||||
|
implicitHeight: totalHeight
|
||||||
|
anchors.bottom: parent.bottom
|
||||||
|
}
|
||||||
|
|
||||||
|
SidebarTooltip
|
||||||
|
{
|
||||||
id: tooltip;
|
id: tooltip;
|
||||||
}
|
}
|
||||||
|
|
||||||
ListModel {
|
ListModel
|
||||||
|
{
|
||||||
id: modesListModel;
|
id: modesListModel;
|
||||||
//: Simple configuration mode option
|
//: Simple configuration mode option
|
||||||
ListElement { text: QT_TR_NOOP("Simple"); file: "SidebarSimple.qml" }
|
ListElement { text: QT_TR_NOOP("Simple"); file: "SidebarSimple.qml" }
|
||||||
|
@ -171,10 +181,11 @@ Rectangle {
|
||||||
ListElement { text: QT_TR_NOOP("Advanced"); file: "SidebarAdvanced.qml" }
|
ListElement { text: QT_TR_NOOP("Advanced"); file: "SidebarAdvanced.qml" }
|
||||||
}
|
}
|
||||||
|
|
||||||
Component.onCompleted: {
|
Component.onCompleted:
|
||||||
|
{
|
||||||
for(var i = 0; i < modesListModel.count; ++i)
|
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));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,87 +8,117 @@ import QtQuick.Layouts 1.1
|
||||||
|
|
||||||
import UM 1.1 as UM
|
import UM 1.1 as UM
|
||||||
|
|
||||||
Column {
|
ColumnLayout
|
||||||
|
{
|
||||||
id: base;
|
id: base;
|
||||||
|
// Machine Setup
|
||||||
property variant modesModel;
|
property variant modesModel;
|
||||||
property alias currentModeIndex: modeMenu.currentIndex;
|
property alias currentModeIndex: modesList.currentIndex;
|
||||||
property Action addMachineAction;
|
property Action addMachineAction;
|
||||||
property Action configureMachinesAction;
|
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 {
|
Label{
|
||||||
anchors.horizontalCenter: parent.horizontalCenter;
|
id: settingsModeLabel
|
||||||
|
text: catalog.i18nc("@label","Print setup: ");
|
||||||
width: parent.width - UM.Theme.sizes.default_margin.width * 2;
|
anchors.left: parent.left
|
||||||
height: UM.Theme.sizes.line.height;
|
anchors.leftMargin: UM.Theme.sizes.default_margin.width;
|
||||||
|
anchors.verticalCenter: parent.verticalCenter
|
||||||
Label {
|
width: parent.width/100*45
|
||||||
//: Configuration mode label
|
font: UM.Theme.fonts.default;
|
||||||
text: qsTr("Mode:");
|
color: UM.Theme.colors.text_white
|
||||||
|
|
||||||
font: UM.Theme.fonts.sidebar_header;
|
|
||||||
color: UM.Theme.colors.text_inactive;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ToolButton {
|
Rectangle{
|
||||||
text: base.modesModel ? base.modesModel.get(modeMenu.currentIndex).text : "";
|
id: settingsModeSelection
|
||||||
|
width: parent.width/100*55
|
||||||
style: UM.Theme.styles.sidebar_header_button;
|
height: childrenRect.height - UM.Theme.sizes.default_margin.width;
|
||||||
|
anchors.right: parent.right
|
||||||
Layout.preferredWidth: base.width * 0.25;
|
anchors.rightMargin: UM.Theme.sizes.default_margin.width;
|
||||||
|
anchors.verticalCenter: parent.verticalCenter
|
||||||
menu: Menu {
|
color: "red"
|
||||||
id: modeMenu;
|
Component{
|
||||||
|
id: wizardDelegate
|
||||||
property int currentIndex: 0;
|
Button {
|
||||||
|
id: simpleModeButton
|
||||||
Instantiator {
|
height: settingsModeSelection.height
|
||||||
model: base.modesModel;
|
anchors.left: parent.left
|
||||||
|
anchors.leftMargin: model.index * (settingsModeSelection.width / 2)
|
||||||
MenuItem {
|
anchors.top: parent.top
|
||||||
text: model.text;
|
width: parent.width / 2
|
||||||
checkable: true;
|
text: model.text
|
||||||
checked: modeMenu.currentIndex == index;
|
style: ButtonStyle {
|
||||||
exclusiveGroup: modeMenuGroup;
|
background: Rectangle {
|
||||||
onTriggered: modeMenu.currentIndex = index;
|
color: control.hovered ? UM.Theme.colors.load_save_button_hover : UM.Theme.colors.load_save_button
|
||||||
|
Behavior on color { ColorAnimation { duration: 50; } }
|
||||||
|
Label {
|
||||||
|
anchors.centerIn: parent
|
||||||
|
color: UM.Theme.colors.load_save_button_text
|
||||||
|
font: UM.Theme.fonts.default
|
||||||
|
text: control.text;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
label: Item { }
|
||||||
}
|
}
|
||||||
onObjectAdded: modeMenu.insertItem(index, object)
|
|
||||||
onObjectRemoved: modeMenu.removeItem(object)
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
ExclusiveGroup { id: modeMenuGroup; }
|
ListView{
|
||||||
|
id: modesList
|
||||||
|
property var index: 0
|
||||||
|
model: base.modesModel
|
||||||
|
delegate: wizardDelegate
|
||||||
|
anchors.top: parent.top
|
||||||
|
anchors.left: parent.left
|
||||||
|
width: parent.width
|
||||||
|
height: UM.Theme.sizes.sidebar_header.height
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Rectangle {
|
Rectangle {
|
||||||
width: 1;
|
id: machineSelectionRow
|
||||||
height: parent.height;
|
width: base.width - (UM.Theme.sizes.default_margin.width * 2)
|
||||||
color: UM.Theme.colors.border;
|
height: UM.Theme.sizes.sidebar_header.height
|
||||||
}
|
anchors.top: settingsModeRow.bottom
|
||||||
|
anchors.horizontalCenter: parent.horizontalCenter
|
||||||
|
|
||||||
Label {
|
Label{
|
||||||
|
id: machineSelectionLabel
|
||||||
//: Machine selection label
|
//: Machine selection label
|
||||||
text: qsTr("Machine:");
|
text: catalog.i18nc("@label","Machine:");
|
||||||
|
anchors.left: parent.left
|
||||||
font: UM.Theme.fonts.sidebar_header;
|
anchors.verticalCenter: parent.verticalCenter
|
||||||
color: UM.Theme.colors.text_inactive;
|
font: UM.Theme.fonts.default;
|
||||||
}
|
}
|
||||||
|
|
||||||
ToolButton {
|
ToolButton {
|
||||||
id: machineButton;
|
id: machineSelection
|
||||||
text: UM.MachineManager.activeMachineInstance;
|
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;
|
menu: Menu
|
||||||
|
{
|
||||||
Layout.fillWidth: true;
|
id: machineSelectionMenu
|
||||||
|
Instantiator
|
||||||
menu: Menu {
|
{
|
||||||
id: machineMenu;
|
|
||||||
Instantiator {
|
|
||||||
model: UM.MachineInstancesModel { }
|
model: UM.MachineInstancesModel { }
|
||||||
MenuItem {
|
MenuItem
|
||||||
|
{
|
||||||
text: model.name;
|
text: model.name;
|
||||||
checkable: true;
|
checkable: true;
|
||||||
checked: model.active;
|
checked: model.active;
|
||||||
|
@ -99,7 +129,7 @@ Column {
|
||||||
onObjectRemoved: machineMenu.removeItem(object)
|
onObjectRemoved: machineMenu.removeItem(object)
|
||||||
}
|
}
|
||||||
|
|
||||||
ExclusiveGroup { id: machineMenuGroup; }
|
ExclusiveGroup { id: machineSelectionMenuGroup; }
|
||||||
|
|
||||||
MenuSeparator { }
|
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;
|
width: parent.width;
|
||||||
height: UM.Theme.sizes.section.height;
|
height: UM.Theme.sizes.section.height;
|
||||||
|
|
||||||
iconSource: UM.Theme.icons.printsetup;
|
iconSource: UM.Theme.icons.printsetup;
|
||||||
|
|
||||||
//: Sidebar header label
|
//: Sidebar header label
|
||||||
text: qsTr("Print Setup");
|
text: catalog.i18nc("@label","Print Setup");
|
||||||
enabled: false;
|
enabled: false;
|
||||||
|
|
||||||
color: UM.Theme.colors.primary;
|
color: UM.Theme.colors.primary;
|
||||||
}
|
}*/
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,9 +6,10 @@ import QtQuick.Controls 1.1
|
||||||
import QtQuick.Controls.Styles 1.1
|
import QtQuick.Controls.Styles 1.1
|
||||||
import QtQuick.Layouts 1.1
|
import QtQuick.Layouts 1.1
|
||||||
|
|
||||||
import UM 1.0 as UM
|
import UM 1.1 as UM
|
||||||
|
|
||||||
Item {
|
Item
|
||||||
|
{
|
||||||
id: base;
|
id: base;
|
||||||
|
|
||||||
anchors.fill: parent;
|
anchors.fill: parent;
|
||||||
|
@ -22,44 +23,47 @@ Item {
|
||||||
|
|
||||||
Component.onCompleted: PrintInformation.enabled = true
|
Component.onCompleted: PrintInformation.enabled = true
|
||||||
Component.onDestruction: PrintInformation.enabled = false
|
Component.onDestruction: PrintInformation.enabled = false
|
||||||
|
UM.I18nCatalog { id: catalog; name:"cura"}
|
||||||
ColumnLayout {
|
ColumnLayout
|
||||||
|
{
|
||||||
anchors.fill: parent;
|
anchors.fill: parent;
|
||||||
|
|
||||||
Item {
|
Item
|
||||||
|
{
|
||||||
Layout.fillWidth: true;
|
Layout.fillWidth: true;
|
||||||
Layout.preferredHeight: UM.Theme.sizes.section.height;
|
Layout.preferredHeight: UM.Theme.sizes.section.height;
|
||||||
|
|
||||||
Label {
|
Label
|
||||||
|
{
|
||||||
anchors.left: parent.left;
|
anchors.left: parent.left;
|
||||||
anchors.verticalCenter: parent.verticalCenter;
|
anchors.verticalCenter: parent.verticalCenter;
|
||||||
text: base.minimumPrintTime.valid ? base.minimumPrintTime.getDisplayString(UM.DurationFormat.Short) : "??:??";
|
text: base.minimumPrintTime.valid ? base.minimumPrintTime.getDisplayString(UM.DurationFormat.Short) : "??:??";
|
||||||
font: UM.Theme.fonts.timeslider_time;
|
font: UM.Theme.fonts.timeslider_time;
|
||||||
color: UM.Theme.colors.primary;
|
color: UM.Theme.colors.primary;
|
||||||
}
|
}
|
||||||
Label {
|
Label
|
||||||
|
{
|
||||||
anchors.centerIn: parent;
|
anchors.centerIn: parent;
|
||||||
text: {
|
text: //: Sidebar configuration label
|
||||||
|
{
|
||||||
if (UM.Backend.progress < 0)
|
if (UM.Backend.progress < 0)
|
||||||
{
|
{
|
||||||
//: Sidebar configuration label
|
return catalog.i18nc("@label","No Model Loaded");
|
||||||
return qsTr("No Model Loaded");
|
|
||||||
}
|
}
|
||||||
else if (!base.minimumPrintTime.valid || !base.maximumPrintTime.valid)
|
else if (!base.minimumPrintTime.valid || !base.maximumPrintTime.valid)
|
||||||
{
|
{
|
||||||
//: Sidebar configuration label
|
return catalog.i18nc("@label","Calculating...")
|
||||||
return qsTr("Calculating...")
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
//: Sidebar configuration label
|
return catalog.i18nc("@label","Estimated Print Time");
|
||||||
return qsTr("Estimated Print Time");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
color: UM.Theme.colors.text;
|
color: UM.Theme.colors.text;
|
||||||
font: UM.Theme.fonts.default;
|
font: UM.Theme.fonts.default;
|
||||||
}
|
}
|
||||||
Label {
|
Label
|
||||||
|
{
|
||||||
anchors.right: parent.right;
|
anchors.right: parent.right;
|
||||||
anchors.verticalCenter: parent.verticalCenter;
|
anchors.verticalCenter: parent.verticalCenter;
|
||||||
text: base.maximumPrintTime.valid ? base.maximumPrintTime.getDisplayString(UM.DurationFormat.Short) : "??:??";
|
text: base.maximumPrintTime.valid ? base.maximumPrintTime.getDisplayString(UM.DurationFormat.Short) : "??:??";
|
||||||
|
@ -68,7 +72,8 @@ Item {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Slider {
|
Slider
|
||||||
|
{
|
||||||
Layout.fillWidth: true;
|
Layout.fillWidth: true;
|
||||||
Layout.preferredHeight: UM.Theme.sizes.section.height;
|
Layout.preferredHeight: UM.Theme.sizes.section.height;
|
||||||
|
|
||||||
|
@ -81,38 +86,42 @@ Item {
|
||||||
style: UM.Theme.styles.slider;
|
style: UM.Theme.styles.slider;
|
||||||
}
|
}
|
||||||
|
|
||||||
Item {
|
Item
|
||||||
|
{
|
||||||
Layout.fillWidth: true;
|
Layout.fillWidth: true;
|
||||||
Layout.preferredHeight: UM.Theme.sizes.section.height;
|
Layout.preferredHeight: UM.Theme.sizes.section.height;
|
||||||
|
|
||||||
Label {
|
Label
|
||||||
|
{
|
||||||
anchors.left: parent.left;
|
anchors.left: parent.left;
|
||||||
anchors.verticalCenter: parent.verticalCenter;
|
anchors.verticalCenter: parent.verticalCenter;
|
||||||
|
|
||||||
//: Quality slider label
|
//: Quality slider label
|
||||||
text: qsTr("Minimum\nDraft");
|
text: catalog.i18nc("@label","Minimum\nDraft");
|
||||||
color: UM.Theme.colors.text;
|
color: UM.Theme.colors.text;
|
||||||
font: UM.Theme.fonts.default;
|
font: UM.Theme.fonts.default;
|
||||||
}
|
}
|
||||||
|
|
||||||
Label {
|
Label
|
||||||
|
{
|
||||||
anchors.right: parent.right;
|
anchors.right: parent.right;
|
||||||
anchors.verticalCenter: parent.verticalCenter;
|
anchors.verticalCenter: parent.verticalCenter;
|
||||||
|
|
||||||
//: Quality slider label
|
//: Quality slider label
|
||||||
text: qsTr("Maximum\nQuality");
|
text: catalog.i18nc("@label","Maximum\nQuality");
|
||||||
horizontalAlignment: Text.AlignRight;
|
horizontalAlignment: Text.AlignRight;
|
||||||
color: UM.Theme.colors.text;
|
color: UM.Theme.colors.text;
|
||||||
font: UM.Theme.fonts.default;
|
font: UM.Theme.fonts.default;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
CheckBox {
|
CheckBox
|
||||||
|
{
|
||||||
Layout.fillWidth: true;
|
Layout.fillWidth: true;
|
||||||
Layout.preferredHeight: UM.Theme.sizes.section.height;
|
Layout.preferredHeight: UM.Theme.sizes.section.height;
|
||||||
|
|
||||||
//: Setting checkbox
|
//: Setting checkbox
|
||||||
text: qsTr("Enable Support");
|
text: catalog.i18nc("@action:checkbox","Enable Support");
|
||||||
|
|
||||||
style: UM.Theme.styles.checkbox;
|
style: UM.Theme.styles.checkbox;
|
||||||
|
|
||||||
|
|
|
@ -13,8 +13,9 @@ Item {
|
||||||
|
|
||||||
width: buttons.width;
|
width: buttons.width;
|
||||||
height: buttons.height
|
height: buttons.height
|
||||||
|
property int activeY
|
||||||
|
|
||||||
RowLayout {
|
ColumnLayout {
|
||||||
id: buttons;
|
id: buttons;
|
||||||
|
|
||||||
anchors.bottom: parent.bottom;
|
anchors.bottom: parent.bottom;
|
||||||
|
@ -39,26 +40,30 @@ Item {
|
||||||
//just catch the click so we do not trigger that behaviour.
|
//just catch the click so we do not trigger that behaviour.
|
||||||
MouseArea {
|
MouseArea {
|
||||||
anchors.fill: parent;
|
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 {
|
Rectangle {
|
||||||
width: base.width - 10
|
width: base.width
|
||||||
height: base.height
|
height: base.height
|
||||||
z: parent.z - 1
|
z: parent.z - 1
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
anchors.verticalCenter: parent.verticalCenter
|
||||||
anchors.horizontalCenter: parent.horizontalCenter
|
anchors.horizontalCenter: parent.horizontalCenter
|
||||||
color: UM.Theme.colors.button_lining
|
color: UM.Theme.colors.lining
|
||||||
}
|
}
|
||||||
|
|
||||||
Rectangle {
|
Rectangle {
|
||||||
id: panelBackground;
|
id: panelBackground;
|
||||||
|
|
||||||
anchors.left: parent.left;
|
anchors.left: parent.right;
|
||||||
anchors.top: buttons.bottom;
|
y: base.activeY
|
||||||
|
|
||||||
width: panel.item ? Math.max(panel.width + 2 * UM.Theme.sizes.default_margin.width) : 0;
|
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;
|
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;
|
color: UM.Theme.colors.tool_panel_background;
|
||||||
border.width: UM.Theme.sizes.default_lining.width
|
border.width: UM.Theme.sizes.default_lining.width
|
||||||
border.color: UM.Theme.colors.button_lining
|
border.color: UM.Theme.colors.lining
|
||||||
|
|
||||||
Loader {
|
Loader {
|
||||||
id: panel
|
id: panel
|
||||||
|
|
|
@ -6,25 +6,27 @@ import QtQuick.Controls 1.1
|
||||||
import QtQuick.Layouts 1.1
|
import QtQuick.Layouts 1.1
|
||||||
import QtQuick.Controls.Styles 1.1
|
import QtQuick.Controls.Styles 1.1
|
||||||
|
|
||||||
import UM 1.0 as UM
|
import UM 1.1 as UM
|
||||||
|
|
||||||
UM.PreferencesPage
|
UM.PreferencesPage
|
||||||
{
|
{
|
||||||
id: preferencesPage
|
id: preferencesPage
|
||||||
|
|
||||||
//: View configuration page title
|
//: View configuration page title
|
||||||
title: qsTr("View");
|
title: catalog.i18nc("@title:window","View");
|
||||||
|
|
||||||
function reset()
|
function reset()
|
||||||
{
|
{
|
||||||
UM.Preferences.resetPreference("view/show_overhang");
|
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
|
GridLayout
|
||||||
{
|
{
|
||||||
columns: 2;
|
columns: 2;
|
||||||
|
UM.I18nCatalog { id: catalog; name:"cura"}
|
||||||
CheckBox
|
CheckBox
|
||||||
{
|
{
|
||||||
id: overhangCheckbox
|
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
|
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
|
//: Display Overhang preference checkbox
|
||||||
text: qsTr("Display Overhang");
|
text: catalog.i18nc("@action:button","Display Overhang");
|
||||||
onClicked: overhangCheckbox.checked = !overhangCheckbox.checked
|
onClicked: overhangCheckbox.checked = !overhangCheckbox.checked
|
||||||
|
|
||||||
//: Display Overhang preference tooltip
|
//: 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 {
|
style: ButtonStyle
|
||||||
background: Rectangle {
|
{
|
||||||
|
background: Rectangle
|
||||||
|
{
|
||||||
border.width: 0
|
border.width: 0
|
||||||
color: "transparent"
|
color: "transparent"
|
||||||
}
|
}
|
||||||
label: Text {
|
label: Text
|
||||||
|
{
|
||||||
renderType: Text.NativeRendering
|
renderType: Text.NativeRendering
|
||||||
horizontalAlignment: Text.AlignLeft
|
horizontalAlignment: Text.AlignLeft
|
||||||
text: control.text
|
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
|
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
|
//: 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
|
onClicked: centerCheckbox.checked = !centerCheckbox.checked
|
||||||
|
|
||||||
//: Display Overhang preference tooltip
|
//: 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
|
style: ButtonStyle
|
||||||
{
|
{
|
||||||
|
|
|
@ -19,6 +19,8 @@ Item
|
||||||
|
|
||||||
property variant wizard: null;
|
property variant wizard: null;
|
||||||
|
|
||||||
|
UM.I18nCatalog { id: catalog; name: "cura"}
|
||||||
|
|
||||||
Connections
|
Connections
|
||||||
{
|
{
|
||||||
target: base.wizard
|
target: base.wizard
|
||||||
|
@ -221,6 +223,11 @@ Item
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (elementRoot.getPageCount() == elementRoot.currentPage)
|
||||||
|
{
|
||||||
|
elementRoot.visible = false
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,7 @@ import QtQuick.Controls 1.1
|
||||||
import QtQuick.Layouts 1.1
|
import QtQuick.Layouts 1.1
|
||||||
import QtQuick.Window 2.1
|
import QtQuick.Window 2.1
|
||||||
|
|
||||||
import UM 1.0 as UM
|
import UM 1.1 as UM
|
||||||
|
|
||||||
Item
|
Item
|
||||||
{
|
{
|
||||||
|
@ -14,7 +14,7 @@ Item
|
||||||
property string title
|
property string title
|
||||||
|
|
||||||
SystemPalette{id: palette}
|
SystemPalette{id: palette}
|
||||||
|
UM.I18nCatalog { id: catalog; name:"cura"}
|
||||||
ScrollView
|
ScrollView
|
||||||
{
|
{
|
||||||
height: parent.height
|
height: parent.height
|
||||||
|
@ -36,7 +36,7 @@ Item
|
||||||
//: Add UM Original wizard page description
|
//: Add UM Original wizard page description
|
||||||
width: parent.width
|
width: parent.width
|
||||||
wrapMode: Text.WordWrap
|
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
|
Column
|
||||||
|
@ -46,19 +46,19 @@ Item
|
||||||
|
|
||||||
CheckBox
|
CheckBox
|
||||||
{
|
{
|
||||||
text: qsTr("Extruder driver ugrades")
|
text: catalog.i18nc("@action:checkbox","Extruder driver ugrades")
|
||||||
}
|
}
|
||||||
CheckBox
|
CheckBox
|
||||||
{
|
{
|
||||||
text: qsTr("Heated printer bed (kit)")
|
text: catalog.i18nc("@action:checkbox","Heated printer bed (kit)")
|
||||||
}
|
}
|
||||||
CheckBox
|
CheckBox
|
||||||
{
|
{
|
||||||
text: qsTr("Heated printer bed (self built)")
|
text: catalog.i18nc("@action:checkbox","Heated printer bed (self built)")
|
||||||
}
|
}
|
||||||
CheckBox
|
CheckBox
|
||||||
{
|
{
|
||||||
text: qsTr("Dual extrusion (experimental)")
|
text: catalog.i18nc("@action:checkbox","Dual extrusion (experimental)")
|
||||||
checked: true
|
checked: true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -67,14 +67,14 @@ Item
|
||||||
{
|
{
|
||||||
width: parent.width
|
width: parent.width
|
||||||
wrapMode: Text.WordWrap
|
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
|
Label
|
||||||
{
|
{
|
||||||
width: parent.width
|
width: parent.width
|
||||||
wrapMode: Text.WordWrap
|
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");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,7 +6,7 @@ import QtQuick.Controls 1.1
|
||||||
import QtQuick.Layouts 1.1
|
import QtQuick.Layouts 1.1
|
||||||
import QtQuick.Window 2.1
|
import QtQuick.Window 2.1
|
||||||
|
|
||||||
import UM 1.0 as UM
|
import UM 1.1 as UM
|
||||||
|
|
||||||
Column
|
Column
|
||||||
{
|
{
|
||||||
|
@ -23,7 +23,7 @@ Column
|
||||||
|
|
||||||
Component.onCompleted: printer_connection.startPollEndstop()
|
Component.onCompleted: printer_connection.startPollEndstop()
|
||||||
Component.onDestruction: printer_connection.stopPollEndstop()
|
Component.onDestruction: printer_connection.stopPollEndstop()
|
||||||
|
UM.I18nCatalog { id: catalog; name:"cura"}
|
||||||
Label
|
Label
|
||||||
{
|
{
|
||||||
text: parent.title
|
text: parent.title
|
||||||
|
@ -33,14 +33,14 @@ Column
|
||||||
Label
|
Label
|
||||||
{
|
{
|
||||||
//: Add Printer wizard page description
|
//: 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
|
Row
|
||||||
{
|
{
|
||||||
Label
|
Label
|
||||||
{
|
{
|
||||||
text: qsTr("Connection: ")
|
text: catalog.i18nc("@label","Connection: ")
|
||||||
}
|
}
|
||||||
Label
|
Label
|
||||||
{
|
{
|
||||||
|
@ -51,22 +51,22 @@ Column
|
||||||
{
|
{
|
||||||
Label
|
Label
|
||||||
{
|
{
|
||||||
text: qsTr("Min endstop X: ")
|
text: catalog.i18nc("@label","Min endstop X: ")
|
||||||
}
|
}
|
||||||
Label
|
Label
|
||||||
{
|
{
|
||||||
text: x_min_pressed ? qsTr("Works") : qsTr("Not checked")
|
text: x_min_pressed ? catalog.i18nc("@label","Works") : catalog.i18nc("@label","Not checked")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Row
|
Row
|
||||||
{
|
{
|
||||||
Label
|
Label
|
||||||
{
|
{
|
||||||
text: qsTr("Min endstop Y: ")
|
text: catalog.i18nc("@label","Min endstop Y: ")
|
||||||
}
|
}
|
||||||
Label
|
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
|
Label
|
||||||
{
|
{
|
||||||
text: qsTr("Min endstop Z: ")
|
text: catalog.i18nc("@label","Min endstop Z: ")
|
||||||
}
|
}
|
||||||
Label
|
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
|
Label
|
||||||
{
|
{
|
||||||
text: qsTr("Nozzle temperature check: ")
|
text: catalog.i18nc("@label","Nozzle temperature check: ")
|
||||||
}
|
}
|
||||||
Label
|
Label
|
||||||
{
|
{
|
||||||
|
@ -94,10 +94,10 @@ Column
|
||||||
}
|
}
|
||||||
Button
|
Button
|
||||||
{
|
{
|
||||||
text: "Start heating"
|
text: catalog.i18nc("@action:button","Start heating")
|
||||||
onClicked:
|
onClicked:
|
||||||
{
|
{
|
||||||
heater_status_label.text = qsTr("Checking")
|
heater_status_label.text = catalog.i18nc("@label","Checking")
|
||||||
printer_connection.heatupNozzle(190)
|
printer_connection.heatupNozzle(190)
|
||||||
wizardPage.extruder_target_temp = 190
|
wizardPage.extruder_target_temp = 190
|
||||||
}
|
}
|
||||||
|
@ -105,7 +105,7 @@ Column
|
||||||
Label
|
Label
|
||||||
{
|
{
|
||||||
id: heater_status_label
|
id: heater_status_label
|
||||||
text: qsTr("Not checked")
|
text: catalog.i18nc("@label","Not checked")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -113,7 +113,7 @@ Column
|
||||||
{
|
{
|
||||||
Label
|
Label
|
||||||
{
|
{
|
||||||
text: qsTr("bed temperature check: ")
|
text: catalog.i18nc("@label","bed temperature check: ")
|
||||||
}
|
}
|
||||||
Label
|
Label
|
||||||
{
|
{
|
||||||
|
@ -121,10 +121,10 @@ Column
|
||||||
}
|
}
|
||||||
Button
|
Button
|
||||||
{
|
{
|
||||||
text: "Start heating"
|
text: catalog.i18nc("@action:button","Start heating")
|
||||||
onClicked:
|
onClicked:
|
||||||
{
|
{
|
||||||
bed_status_label.text = qsTr("Checking")
|
bed_status_label.text = catalog.i18nc("@label","Checking")
|
||||||
printer_connection.printer.heatupBed(60)
|
printer_connection.printer.heatupBed(60)
|
||||||
wizardPage.bed_target_temp = 60
|
wizardPage.bed_target_temp = 60
|
||||||
}
|
}
|
||||||
|
@ -132,7 +132,7 @@ Column
|
||||||
Label
|
Label
|
||||||
{
|
{
|
||||||
id: bed_status_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)
|
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)
|
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)
|
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)
|
printer_connection.heatupBed(0)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
7
resources/themes/cura/icons/arrow_bottom.svg
Normal 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 |
7
resources/themes/cura/icons/arrow_left.svg
Normal 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 |
7
resources/themes/cura/icons/arrow_right.svg
Normal 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 |
7
resources/themes/cura/icons/arrow_top.svg
Normal 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 |
16
resources/themes/cura/icons/basic.svg
Normal 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 |
10
resources/themes/cura/icons/cross2.svg
Normal 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 |
15
resources/themes/cura/icons/light.svg
Normal 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 |
19
resources/themes/cura/icons/medium.svg
Normal 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 |
8
resources/themes/cura/icons/plus.svg
Normal 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 |
8
resources/themes/cura/icons/print_time.svg
Normal 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 |
10
resources/themes/cura/icons/quick.svg
Normal 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 |
7
resources/themes/cura/icons/setting_per_object.svg
Normal 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 |
14
resources/themes/cura/icons/strong.svg
Normal 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 |
16
resources/themes/cura/icons/ulti.svg
Normal 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 |
|
@ -67,11 +67,14 @@ QtObject {
|
||||||
|
|
||||||
Rectangle {
|
Rectangle {
|
||||||
id: tool_button_background
|
id: tool_button_background
|
||||||
anchors.top: parent.verticalCenter;
|
anchors.left: parent.right
|
||||||
|
anchors.verticalCenter: parent.verticalCenter
|
||||||
|
//anchors.top: parent.bottom
|
||||||
|
|
||||||
width: parent.width;
|
//width: label.width > parent.width ? label.width : parent.width
|
||||||
height: control.hovered ? parent.height / 2 + label.height : 0;
|
width: control.hovered ? label.width : 0;
|
||||||
Behavior on height { NumberAnimation { duration: 100; } }
|
height: label.height
|
||||||
|
Behavior on width { NumberAnimation { duration: 100; } }
|
||||||
|
|
||||||
opacity: control.hovered ? 1.0 : 0.0;
|
opacity: control.hovered ? 1.0 : 0.0;
|
||||||
Behavior on opacity { NumberAnimation { duration: 100; } }
|
Behavior on opacity { NumberAnimation { duration: 100; } }
|
||||||
|
@ -205,26 +208,23 @@ QtObject {
|
||||||
background:Rectangle {
|
background:Rectangle {
|
||||||
implicitWidth: UM.Theme.sizes.message.width - (UM.Theme.sizes.default_margin.width * 2)
|
implicitWidth: UM.Theme.sizes.message.width - (UM.Theme.sizes.default_margin.width * 2)
|
||||||
implicitHeight: UM.Theme.sizes.progressbar.height
|
implicitHeight: UM.Theme.sizes.progressbar.height
|
||||||
x: UM.Theme.sizes.default_margin.width
|
|
||||||
color: UM.Theme.colors.progressbar_background
|
color: UM.Theme.colors.progressbar_background
|
||||||
}
|
}
|
||||||
progress: Rectangle {
|
progress: Rectangle {
|
||||||
color: control.indeterminate ? "transparent" : UM.Theme.colors.progressbar_control
|
color: control.indeterminate ? "transparent" : UM.Theme.colors.progressbar_control
|
||||||
|
|
||||||
Rectangle{
|
Rectangle{
|
||||||
color: UM.Theme.colors.progressbar_control
|
color: UM.Theme.colors.progressbar_control
|
||||||
width: UM.Theme.sizes.progressbar_control.width
|
width: UM.Theme.sizes.progressbar_control.width
|
||||||
height: UM.Theme.sizes.progressbar_control.height
|
height: UM.Theme.sizes.progressbar_control.height
|
||||||
x: UM.Theme.sizes.default_margin.width
|
|
||||||
visible: control.indeterminate
|
visible: control.indeterminate
|
||||||
|
|
||||||
SequentialAnimation on x {
|
SequentialAnimation on x {
|
||||||
id: xAnim
|
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
|
running: control.indeterminate
|
||||||
loops: Animation.Infinite
|
loops: Animation.Infinite
|
||||||
NumberAnimation { from: UM.Theme.sizes.default_margin.width; to: xAnim.animEndPoint; duration: 2000;}
|
NumberAnimation { from: 0; to: xAnim.animEndPoint; duration: 2000;}
|
||||||
NumberAnimation { from: xAnim.animEndPoint; to: UM.Theme.sizes.default_margin.width; duration: 2000;}
|
NumberAnimation { from: xAnim.animEndPoint; to: 0; duration: 2000;}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -235,7 +235,7 @@ QtObject {
|
||||||
|
|
||||||
property Component sidebar_category: Component {
|
property Component sidebar_category: Component {
|
||||||
ButtonStyle {
|
ButtonStyle {
|
||||||
background: UM.AngledCornerRectangle {
|
background: Rectangle {
|
||||||
implicitHeight: UM.Theme.sizes.section.height;
|
implicitHeight: UM.Theme.sizes.section.height;
|
||||||
color: {
|
color: {
|
||||||
if(control.color) {
|
if(control.color) {
|
||||||
|
@ -253,37 +253,51 @@ QtObject {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Behavior on color { ColorAnimation { duration: 50; } }
|
Behavior on color { ColorAnimation { duration: 50; } }
|
||||||
cornerSize: UM.Theme.sizes.default_margin.width;
|
|
||||||
}
|
}
|
||||||
label: Item {
|
label: Item {
|
||||||
anchors.fill: parent;
|
anchors.fill: parent;
|
||||||
anchors.margins: UM.Theme.sizes.default_margin.width;
|
anchors.left: parent.left
|
||||||
|
Item{
|
||||||
Image {
|
|
||||||
id: icon;
|
id: icon;
|
||||||
|
anchors.left: parent.left
|
||||||
anchors.left: parent.left;
|
height: parent.height
|
||||||
anchors.verticalCenter: parent.verticalCenter;
|
width: UM.Theme.sizes.section_icon_column.width
|
||||||
|
UM.RecolorImage {
|
||||||
source: control.iconSource;
|
anchors.verticalCenter: parent.verticalCenter
|
||||||
width: UM.Theme.sizes.section_icon.width;
|
anchors.horizontalCenter: parent.horizontalCenter
|
||||||
height: UM.Theme.sizes.section_icon.height;
|
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 {
|
Label {
|
||||||
anchors {
|
anchors {
|
||||||
left: icon.right;
|
left: icon.right;
|
||||||
leftMargin: UM.Theme.sizes.default_margin.width;
|
|
||||||
right: parent.right;
|
right: parent.right;
|
||||||
verticalCenter: parent.verticalCenter;
|
verticalCenter: parent.verticalCenter;
|
||||||
}
|
}
|
||||||
|
|
||||||
text: control.text;
|
text: control.text;
|
||||||
font: UM.Theme.fonts.setting_category;
|
font: UM.Theme.fonts.setting_category;
|
||||||
color: UM.Theme.colors.setting_category_text;
|
color: UM.Theme.colors.setting_category_text;
|
||||||
fontSizeMode: Text.HorizontalFit;
|
fontSizeMode: Text.HorizontalFit;
|
||||||
minimumPointSize: 8
|
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
|
transientScrollBars: false
|
||||||
|
|
||||||
scrollBarBackground: UM.AngledCornerRectangle {
|
scrollBarBackground: Rectangle {
|
||||||
implicitWidth: UM.Theme.sizes.scrollbar.width;
|
implicitWidth: UM.Theme.sizes.scrollbar.width
|
||||||
|
|
||||||
cornerSize: UM.Theme.sizes.scrollbar.width;
|
|
||||||
|
|
||||||
color: UM.Theme.colors.scrollbar_background;
|
color: UM.Theme.colors.scrollbar_background;
|
||||||
}
|
}
|
||||||
|
|
||||||
handle: UM.AngledCornerRectangle {
|
handle: Rectangle {
|
||||||
id: scrollViewHandle
|
id: scrollViewHandle
|
||||||
implicitWidth: UM.Theme.sizes.scrollbar.width;
|
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;
|
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; } }
|
Behavior on color { ColorAnimation { duration: 50; } }
|
||||||
}
|
}
|
||||||
|
@ -317,14 +326,13 @@ QtObject {
|
||||||
|
|
||||||
property variant setting_item: UM.SettingItemStyle {
|
property variant setting_item: UM.SettingItemStyle {
|
||||||
labelFont: UM.Theme.fonts.default;
|
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;
|
fixedHeight: UM.Theme.sizes.setting.height;
|
||||||
|
|
||||||
controlWidth: UM.Theme.sizes.setting_control.width;
|
controlWidth: UM.Theme.sizes.setting_control.width;
|
||||||
controlRightMargin: UM.Theme.sizes.setting_control_margin.width;
|
controlRightMargin: UM.Theme.sizes.setting_control_margin.width;
|
||||||
controlBorderWidth: 1;
|
|
||||||
controlColor: UM.Theme.colors.setting_control;
|
controlColor: UM.Theme.colors.setting_control;
|
||||||
controlHighlightColor: UM.Theme.colors.setting_control_highlight;
|
controlHighlightColor: UM.Theme.colors.setting_control_highlight;
|
||||||
controlBorderColor: UM.Theme.colors.setting_control_border;
|
controlBorderColor: UM.Theme.colors.setting_control_border;
|
||||||
|
@ -419,26 +427,6 @@ QtObject {
|
||||||
color: UM.Theme.colors.slider_groove_fill;
|
color: UM.Theme.colors.slider_groove_fill;
|
||||||
width: (control.value / (control.maximumValue - control.minimumValue)) * parent.width;
|
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 {
|
handle: Rectangle {
|
||||||
id: layerSliderControl
|
id: layerSliderControl
|
||||||
|
@ -446,26 +434,37 @@ QtObject {
|
||||||
height: UM.Theme.sizes.slider_handle.height;
|
height: UM.Theme.sizes.slider_handle.height;
|
||||||
color: control.hovered ? UM.Theme.colors.slider_handle_hover : UM.Theme.colors.slider_handle;
|
color: control.hovered ? UM.Theme.colors.slider_handle_hover : UM.Theme.colors.slider_handle;
|
||||||
Behavior on color { ColorAnimation { duration: 50; } }
|
Behavior on color { ColorAnimation { duration: 50; } }
|
||||||
Label {
|
TextField {
|
||||||
id: valueLabel
|
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
|
visible: UM.LayerView.getLayerActivity && Printer.getPlatformActivity ? true : false
|
||||||
text: control.value + 1
|
|
||||||
anchors.bottom: layerSliderControl.bottom
|
anchors.bottom: layerSliderControl.bottom
|
||||||
anchors.right: layerSliderControl.left
|
anchors.right: layerSliderControl.left
|
||||||
anchors.bottomMargin: parent.width + UM.Theme.sizes.default_margin.width
|
anchors.rightMargin: valueLabel.unremovableSpacing / 2
|
||||||
font: UM.Theme.fonts.default
|
anchors.bottomMargin: parent.width + (UM.Theme.sizes.default_margin.width / 2)
|
||||||
transformOrigin: Item.BottomRight
|
transformOrigin: Item.BottomRight
|
||||||
rotation: 90
|
rotation: 90
|
||||||
Rectangle {
|
style: TextFieldStyle{
|
||||||
width: (parent.width + UM.Theme.sizes.tooltip_margins.width) < 35 ? 35 : parent.width + UM.Theme.sizes.tooltip_margins.width
|
textColor: UM.Theme.colors.setting_control_text;
|
||||||
height: parent.height + (UM.Theme.sizes.tooltip_margins.height / 2)
|
font: UM.Theme.fonts.default;
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
background: Rectangle {
|
||||||
anchors.horizontalCenter: parent.horizontalCenter
|
radius: 0
|
||||||
z: parent.z - 1
|
implicitWidth: control.maxValue.length * valueLabel.font.pixelSize
|
||||||
color: UM.Theme.colors.slider_text_background
|
implicitHeight: UM.Theme.sizes.slider_handle.height + valueLabel.unremovableSpacing
|
||||||
border.width: 1
|
border.width: 1;
|
||||||
border.color: UM.Theme.colors.slider_groove_fill;
|
border.color: UM.Theme.colors.slider_groove_border;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,10 +32,6 @@
|
||||||
"capitalize": true,
|
"capitalize": true,
|
||||||
"family": "ProximaNova"
|
"family": "ProximaNova"
|
||||||
},
|
},
|
||||||
"sidebar_save_to": {
|
|
||||||
"size": 1.0,
|
|
||||||
"family": "ProximaNova"
|
|
||||||
},
|
|
||||||
"timeslider_time": {
|
"timeslider_time": {
|
||||||
"size": 1.0,
|
"size": 1.0,
|
||||||
"bold": true,
|
"bold": true,
|
||||||
|
@ -47,13 +43,14 @@
|
||||||
"family": "ProximaNova"
|
"family": "ProximaNova"
|
||||||
},
|
},
|
||||||
"setting_category": {
|
"setting_category": {
|
||||||
"size": 1.5,
|
"size": 1.0,
|
||||||
"family": "ProximaNova"
|
"family": "ProximaNova"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
"colors": {
|
"colors": {
|
||||||
"sidebar": [255, 255, 255, 255],
|
"sidebar": [255, 255, 255, 255],
|
||||||
|
"lining": [208, 210, 211, 255],
|
||||||
|
|
||||||
"primary": [12, 169, 227, 255],
|
"primary": [12, 169, 227, 255],
|
||||||
"primary_hover": [34, 150, 190, 255],
|
"primary_hover": [34, 150, 190, 255],
|
||||||
|
@ -63,14 +60,16 @@
|
||||||
|
|
||||||
"text": [140, 144, 154, 255],
|
"text": [140, 144, 154, 255],
|
||||||
"text_inactive": [174, 174, 174, 255],
|
"text_inactive": [174, 174, 174, 255],
|
||||||
|
"text_white": [255, 255, 255, 255],
|
||||||
"text_hover": [35, 35, 35, 255],
|
"text_hover": [35, 35, 35, 255],
|
||||||
"text_pressed": [12, 169, 227, 255],
|
"text_pressed": [12, 169, 227, 255],
|
||||||
|
|
||||||
|
"sidebar_header_bar": [12, 169, 227, 255],
|
||||||
|
|
||||||
"button": [139, 143, 153, 255],
|
"button": [139, 143, 153, 255],
|
||||||
"button_hover": [116, 120, 127, 255],
|
"button_hover": [77, 184, 226, 255],
|
||||||
"button_active": [12, 169, 227, 255],
|
"button_active": [32, 166, 219, 255],
|
||||||
"button_active_hover": [77, 184, 226, 255],
|
"button_active_hover": [77, 184, 226, 255],
|
||||||
"button_lining": [208, 210, 211, 255],
|
|
||||||
"button_text": [255, 255, 255, 255],
|
"button_text": [255, 255, 255, 255],
|
||||||
"button_disabled": [245, 245, 245, 255],
|
"button_disabled": [245, 245, 245, 255],
|
||||||
"button_tooltip_text": [35, 35, 35, 255],
|
"button_tooltip_text": [35, 35, 35, 255],
|
||||||
|
@ -81,23 +80,23 @@
|
||||||
"load_save_button_active": [43, 45, 46, 255],
|
"load_save_button_active": [43, 45, 46, 255],
|
||||||
|
|
||||||
"scrollbar_background": [245, 245, 245, 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_hover": [174, 174, 174, 255],
|
||||||
"scrollbar_handle_down": [12, 159, 227, 255],
|
"scrollbar_handle_down": [12, 159, 227, 255],
|
||||||
|
|
||||||
"setting_category": [205, 202, 201, 255],
|
"setting_category": [238, 238, 238, 255],
|
||||||
"setting_category_disabled": [245, 245, 245, 255],
|
"setting_category_disabled": [238, 238, 238, 255],
|
||||||
"setting_category_hover": [174, 174, 174, 255],
|
"setting_category_hover": [240, 248, 255, 255],
|
||||||
"setting_category_active": [12, 169, 227, 255],
|
"setting_category_active": [238, 238, 238, 255],
|
||||||
"setting_category_active_hover": [34, 150, 190, 255],
|
"setting_category_active_hover": [240, 248, 255, 255],
|
||||||
"setting_category_text": [255, 255, 255, 255],
|
"setting_category_text": [35, 35, 35, 255],
|
||||||
|
|
||||||
"setting_label": [140, 144, 154, 255],
|
|
||||||
"setting_control": [255, 255, 255, 255],
|
"setting_control": [255, 255, 255, 255],
|
||||||
"setting_control_highlight": [245, 245, 245, 255],
|
"setting_control_highlight": [245, 245, 245, 255],
|
||||||
"setting_control_border": [174, 174, 174, 255],
|
"setting_control_border": [174, 174, 174, 255],
|
||||||
"setting_control_text": [35, 35, 35, 255],
|
"setting_control_text": [0, 0, 0, 255],
|
||||||
"setting_control_hover": [35, 35, 35, 255],
|
"setting_control_hover": [139, 143, 153, 255],
|
||||||
|
"setting_control_selected": [35, 35, 35, 255],
|
||||||
"setting_unit": [174, 174, 174, 255],
|
"setting_unit": [174, 174, 174, 255],
|
||||||
"setting_validation_error": [255, 57, 14, 255],
|
"setting_validation_error": [255, 57, 14, 255],
|
||||||
"setting_validation_warning": [255, 186, 15, 255],
|
"setting_validation_warning": [255, 186, 15, 255],
|
||||||
|
@ -107,10 +106,10 @@
|
||||||
"progressbar_control": [12, 169, 227, 255],
|
"progressbar_control": [12, 169, 227, 255],
|
||||||
|
|
||||||
"slider_groove": [245, 245, 245, 255],
|
"slider_groove": [245, 245, 245, 255],
|
||||||
"slider_groove_border": [160, 163, 171, 255],
|
"slider_groove_border": [139, 143, 153, 255],
|
||||||
"slider_groove_fill": [160, 163, 171, 255],
|
"slider_groove_fill": [139, 143, 153, 255],
|
||||||
"slider_handle": [12, 169, 227, 255],
|
"slider_handle": [32, 166, 219, 255],
|
||||||
"slider_handle_hover": [34, 150, 190, 255],
|
"slider_handle_hover": [77, 182, 226, 255],
|
||||||
"slider_text_background": [255, 255, 255, 255],
|
"slider_text_background": [255, 255, 255, 255],
|
||||||
|
|
||||||
"checkbox": [255, 255, 255, 255],
|
"checkbox": [255, 255, 255, 255],
|
||||||
|
@ -132,7 +131,8 @@
|
||||||
"save_button_background": [249, 249, 249, 255],
|
"save_button_background": [249, 249, 249, 255],
|
||||||
|
|
||||||
"message_background": [255, 255, 255, 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]
|
"tool_panel_background": [255, 255, 255, 255]
|
||||||
},
|
},
|
||||||
|
@ -141,7 +141,6 @@
|
||||||
"window_margin": [2.0, 2.0],
|
"window_margin": [2.0, 2.0],
|
||||||
"default_margin": [1.0, 1.0],
|
"default_margin": [1.0, 1.0],
|
||||||
"default_lining": [0.1, 0.1],
|
"default_lining": [0.1, 0.1],
|
||||||
"panel": [22.0, 10.0],
|
|
||||||
"logo": [9.5, 2.0],
|
"logo": [9.5, 2.0],
|
||||||
"toolbar_button": [2.0, 2.0],
|
"toolbar_button": [2.0, 2.0],
|
||||||
"toolbar_spacing": [1.0, 1.0],
|
"toolbar_spacing": [1.0, 1.0],
|
||||||
|
@ -149,11 +148,17 @@
|
||||||
"loadfile_button": [11.0, 2.4],
|
"loadfile_button": [11.0, 2.4],
|
||||||
"loadfile_margin": [0.8, 0.4],
|
"loadfile_margin": [0.8, 0.4],
|
||||||
|
|
||||||
"section": [22.0, 3.0],
|
"sidebar": [24.0, 10.0],
|
||||||
"section_icon": [2.14, 2.14],
|
"sidebar_header": [0.0, 3.2],
|
||||||
"section_text_margin": [0.33, 0.33],
|
"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": [6.0, 2.0],
|
||||||
"setting_control_margin": [3.0, 3.0],
|
"setting_control_margin": [3.0, 3.0],
|
||||||
"setting_unit_margin": [0.5, 0.5],
|
"setting_unit_margin": [0.5, 0.5],
|
||||||
|
@ -161,6 +166,7 @@
|
||||||
|
|
||||||
"standard_list_lineheight": [1.5, 1.5],
|
"standard_list_lineheight": [1.5, 1.5],
|
||||||
"standard_list_input": [20.0, 25.0],
|
"standard_list_input": [20.0, 25.0],
|
||||||
|
"standard_arrow": [0.6, 0.6],
|
||||||
|
|
||||||
"button": [3.2, 3.2],
|
"button": [3.2, 3.2],
|
||||||
"button_icon": [2.5, 2.5],
|
"button_icon": [2.5, 2.5],
|
||||||
|
@ -169,11 +175,11 @@
|
||||||
"progressbar_control": [8.0, 0.8],
|
"progressbar_control": [8.0, 0.8],
|
||||||
"progressbar_padding": [0.0, 1.0],
|
"progressbar_padding": [0.0, 1.0],
|
||||||
|
|
||||||
"scrollbar": [0.5, 0.5],
|
"scrollbar": [0.7, 0.5],
|
||||||
|
|
||||||
"slider_groove": [0.5, 0.5],
|
"slider_groove": [0.5, 0.5],
|
||||||
"slider_handle": [1.5, 1.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_smalltext_margin": [0.3, 0.00],
|
||||||
"slider_layerview_background_extension": [0.0, 2.2],
|
"slider_layerview_background_extension": [0.0, 2.2],
|
||||||
"slider_layerview_margin": [3.0, 3.0],
|
"slider_layerview_margin": [3.0, 3.0],
|
||||||
|
@ -188,6 +194,7 @@
|
||||||
"save_button_slicing_bar": [0.0, 2.2],
|
"save_button_slicing_bar": [0.0, 2.2],
|
||||||
"save_button_label_margin": [0.5, 0.5],
|
"save_button_label_margin": [0.5, 0.5],
|
||||||
"save_button_save_to_button": [0.3, 2.7],
|
"save_button_save_to_button": [0.3, 2.7],
|
||||||
|
"save_button_specs_icons": [1.4, 1.4],
|
||||||
|
|
||||||
"modal_window_minimum": [30.0, 30.0],
|
"modal_window_minimum": [30.0, 30.0],
|
||||||
"wizard_progress": [10.0, 0.0],
|
"wizard_progress": [10.0, 0.0],
|
||||||
|
|