Merge branch 'master' of

https://github.com/Ultimaker/Cura
This commit is contained in:
Tim Kuipers 2015-08-28 09:20:56 +02:00
commit 75cf4c922a
33 changed files with 802 additions and 428 deletions

View file

@ -6,6 +6,8 @@ from UM.Application import Application
from UM.Preferences import Preferences from UM.Preferences import Preferences
from UM.Scene.Iterator.DepthFirstIterator import DepthFirstIterator from UM.Scene.Iterator.DepthFirstIterator import DepthFirstIterator
from UM.Scene.SceneNode import SceneNode from UM.Scene.SceneNode import SceneNode
from UM.Message import Message
from UM.i18n import i18nCatalog
import collections import collections
import json import json
@ -16,6 +18,8 @@ import math
import urllib.request import urllib.request
import urllib.parse import urllib.parse
catalog = i18nCatalog("cura")
## This Extension runs in the background and sends several bits of information to the Ultimaker servers. ## 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 # The data is only sent when the user in question gave permission to do so. All data is anonymous and
@ -25,9 +29,19 @@ class SliceInfo(Extension):
super().__init__() super().__init__()
Application.getInstance().getOutputDeviceManager().writeStarted.connect(self._onWriteStarted) Application.getInstance().getOutputDeviceManager().writeStarted.connect(self._onWriteStarted)
Preferences.getInstance().addPreference("info/send_slice_info", True) 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): def _onWriteStarted(self, output_device):
print("Starting sending")
if not Preferences.getInstance().getValue("info/send_slice_info"): if not Preferences.getInstance().getValue("info/send_slice_info"):
return # Do nothing, user does not want to send data return # Do nothing, user does not want to send data
@ -105,5 +119,4 @@ class SliceInfo(Extension):
except Exception as e: except Exception as e:
print("Exception occured", e) print("Exception occured", e)
print("Result: ", f.read())
f.close() f.close()

View file

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

View file

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

View file

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

View file

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

View file

@ -6,18 +6,22 @@ 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.Wizard UM.Wizard
{ {
//: Add Printer dialog title //: Add Printer dialog title
wizardTitle: qsTr("Add Printer") wizardTitle: catalog.i18nc("@title:wizard","Add Printer")
wizardPages: [ wizardPages: [
{ {
title: "Add Printer", title: "Add Printer",
page: "AddMachine.qml" page: "AddMachine.qml"
} }
] ]
Item
{
UM.I18nCatalog{id: catalog; name:"cura"}
}
// 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

View file

@ -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.count > 0 && UM.Backend.progress > 0.99; enabled: devicesModel.count > 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
{ {
@ -112,14 +125,17 @@ UM.MainWindow {
} }
ExclusiveGroup { id: view_menu_top_group; } ExclusiveGroup { id: view_menu_top_group; }
} }
Menu { Menu
{
id: machineMenu; id: machineMenu;
//: Machine menu //: Machine menu
title: qsTr("&Machine"); title: catalog.i18nc("@title:menu","&Machine");
Instantiator { Instantiator
{
model: UM.Models.machinesModel model: UM.Models.machinesModel
MenuItem { MenuItem
{
text: model.name; text: model.name;
checkable: true; checkable: true;
checked: model.active; checked: model.active;
@ -138,10 +154,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
{ {
@ -170,16 +187,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; }
@ -189,7 +208,8 @@ UM.MainWindow {
} }
} }
Item { Item
{
id: contentItem; id: contentItem;
y: menu.height y: menu.height
@ -198,19 +218,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;
@ -237,12 +263,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;
@ -251,9 +279,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
@ -268,24 +298,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;
@ -300,38 +335,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) : "";
} }
@ -340,23 +383,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();
@ -369,28 +415,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;
} }
@ -429,7 +483,8 @@ UM.MainWindow {
} }
Menu { Menu
{
id: objectContextMenu; id: objectContextMenu;
property variant objectId: -1; property variant objectId: -1;
@ -448,7 +503,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; }
@ -459,23 +515,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
@ -488,22 +549,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.printer = false addMachineWizard.printer = false
} }

View file

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

View file

@ -6,12 +6,12 @@ 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()
{ {
@ -26,10 +26,11 @@ UM.PreferencesPage
{ {
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
@ -76,7 +77,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
@ -92,7 +93,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
} }
@ -108,11 +109,11 @@ 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 style: ButtonStyle
{ {
@ -141,11 +142,11 @@ UM.PreferencesPage
id: sendDataText //is a button so the user doesn't have te click inconvenientley precise to enable or disable the checkbox 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 //: Display Overhang preference checkbox
text: qsTr("Send (anonymous) slice info"); text: catalog.i18nc("@action:checkbox","Send (anonymous) slice info");
onClicked: sendDataCheckbox.checked = !sendDataCheckbox.checked onClicked: sendDataCheckbox.checked = !sendDataCheckbox.checked
//: Display Overhang preference tooltip //: Display Overhang preference tooltip
tooltip: "Should anonymous data about your slices be sent to Ultimaker. No models or IP's are sent / stored." 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 style: ButtonStyle
{ {

View file

@ -8,17 +8,20 @@ import QtQuick.Layouts 1.1
import UM 1.1 as UM import UM 1.1 as UM
Rectangle { Rectangle
{
id: base; id: base;
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
property variant printDuration: PrintInformation.currentPrintTime; property variant printDuration: PrintInformation.currentPrintTime;
property real printMaterialAmount: PrintInformation.materialAmount; property real printMaterialAmount: PrintInformation.materialAmount;
UM.I18nCatalog { id: catalog; name:"cura"}
Rectangle{ Rectangle
{
id: background id: background
implicitWidth: base.width; implicitWidth: base.width;
implicitHeight: parent.height; implicitHeight: parent.height;
@ -26,7 +29,8 @@ Rectangle {
border.width: UM.Theme.sizes.save_button_border.width border.width: UM.Theme.sizes.save_button_border.width
border.color: UM.Theme.colors.save_button_border border.color: UM.Theme.colors.save_button_border
Rectangle { Rectangle
{
id: infoBox id: infoBox
width: parent.width - UM.Theme.sizes.default_margin.width * 2; width: parent.width - UM.Theme.sizes.default_margin.width * 2;
height: UM.Theme.sizes.save_button_slicing_bar.height height: UM.Theme.sizes.save_button_slicing_bar.height
@ -35,94 +39,150 @@ Rectangle {
anchors.topMargin: UM.Theme.sizes.default_margin.height; 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; {
anchors.verticalCenter: parent.verticalCenter id: printJobTextfield
anchors.left: parent.left anchors.right: parent.right
anchors.leftMargin: UM.Theme.sizes.save_button_text_margin.width; anchors.rightMargin: UM.Theme.sizes.default_margin.width;
visible: base.progress >= 0 && base.progress < 0.99 ? false : true anchors.verticalCenter: parent.verticalCenter
color: UM.Theme.colors.save_button_estimated_text; width: parent.width/100*55
font: UM.Theme.fonts.small; height: UM.Theme.sizes.sidebar_inputFields.height
text: { property int unremovableSpacing: 5
if(base.activity == false) { text: "UM2" + "_" + "filename" ///TODO KOMT NOG
//: Save button label onEditingFinished:
return qsTr("Please load a 3D model"); {
} else if (base.progress < 0.99) { if (printJobTextfield.text != '')
//: Save button label {
return qsTr("Calculating Print-time"); printJobTextfield.focus = false
} 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 {
anchors.verticalCenter: parent.verticalCenter regExp: /^[0-9a-zA-Z\_\-]*$/
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 {
anchors.verticalCenter: parent.verticalCenter textColor: UM.Theme.colors.setting_control_text;
anchors.left: printDurationLabel.right; font: UM.Theme.fonts.default;
anchors.leftMargin: UM.Theme.sizes.save_button_text_margin.width; background: Rectangle
color: base.printDuration.days > 0 ? UM.Theme.colors.save_button_estimated_text : UM.Theme.colors.save_button_printtime_text; {
font: UM.Theme.fonts.small; radius: 0
property bool mediumLengthDuration: base.printDuration.hours > 9 && base.printMaterialAmount > 9.99 && base.printDuration.days == 0 implicitWidth: parent.width
width: mediumLengthDuration ? 50 : undefined implicitHeight: parent.height
elide: mediumLengthDuration ? Text.ElideRight : Text.ElideNone border.width: 1;
visible: base.activity == false || base.progress < 0.99 ? false : true border.color: UM.Theme.colors.slider_groove_border;
//: Print material amount save button label }
text: base.printMaterialAmount < 0 ? "" : qsTr("%1m of Material").arg(base.printMaterialAmount);
} }
} }
Rectangle { }
id: infoBoxOverlay
anchors {
left: infoBox.left;
top: infoBox.top;
bottom: infoBox.bottom;
}
width: Math.max(infoBox.width * base.progress);
color: UM.Theme.colors.save_button_active
visible: progress > 0.99 ? false : true
}
Button { Rectangle
id: saveToButton {
anchors.top: infoBox.bottom id: specsRow
anchors.topMargin: UM.Theme.sizes.save_button_text_margin.height; implicitWidth: base.width
implicitHeight: UM.Theme.sizes.sidebar_specs_bar.height
anchors.top: printJobRow.bottom
Item
{
id: time
width: (parent.width / 100 * 45) - UM.Theme.sizes.default_margin.width * 2
height: parent.height
anchors.left: parent.left
anchors.leftMargin: UM.Theme.sizes.default_margin.width
anchors.top: parent.top
visible: base.printMaterialAmount > 0 ? true : false
UM.RecolorImage
{
id: timeIcon
anchors.verticalCenter: parent.verticalCenter
anchors.left: parent.left
width: UM.Theme.sizes.save_button_specs_icons.width
height: UM.Theme.sizes.save_button_specs_icons.height
sourceSize.width: width
sourceSize.height: width
color: UM.Theme.colors.text_hover
source: UM.Theme.icons.print_time;
}
Label
{
id: timeSpec
anchors.verticalCenter: parent.verticalCenter
anchors.left: timeIcon.right
anchors.leftMargin: UM.Theme.sizes.default_margin.width/2
font: UM.Theme.fonts.default
color: UM.Theme.colors.text
text: (!base.printDuration || !base.printDuration.valid) ? "" : catalog.i18nc("@label","%1 h:m").arg(base.printDuration.getDisplayString(UM.DurationFormat.Short))
}
}
Item
{
width: parent.width / 100 * 55
height: parent.height
anchors.left: time.right
anchors.top: parent.top
visible: base.printMaterialAmount > 0 ? true : false
UM.RecolorImage
{
id: lengthIcon
anchors.verticalCenter: parent.verticalCenter
anchors.left: parent.left
width: UM.Theme.sizes.save_button_specs_icons.width
height: UM.Theme.sizes.save_button_specs_icons.height
sourceSize.width: width
sourceSize.height: width
color: UM.Theme.colors.text_hover
source: UM.Theme.icons.category_material;
}
Label
{
id: lengthSpec
anchors.verticalCenter: parent.verticalCenter
anchors.left: lengthIcon.right
anchors.leftMargin: UM.Theme.sizes.default_margin.width/2
font: UM.Theme.fonts.default
color: UM.Theme.colors.text
text: base.printMaterialAmount <= 0 ? "" : catalog.i18nc("@label","%1 m").arg(base.printMaterialAmount)
}
}
}
Item
{
id: saveRow
implicitWidth: base.width / 100 * 55
implicitHeight: saveToButton.height + (UM.Theme.sizes.default_margin.height / 2) // height + bottomMargin
anchors.top: specsRow.bottom
anchors.right: parent.right
anchors.rightMargin: UM.Theme.sizes.default_margin.width
Button
{
id: saveToButton
anchors.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 { {
color: !control.enabled ? UM.Theme.colors.save_button_inactive : control.hovered ? UM.Theme.colors.save_button_active_hover : UM.Theme.colors.save_button_active; background: Rectangle
{
color: control.hovered ? UM.Theme.colors.load_save_button_hover : UM.Theme.colors.load_save_button
Behavior on color { ColorAnimation { duration: 50; } }
Label { 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;
} }
} }
@ -131,66 +191,54 @@ Rectangle {
onClicked: UM.OutputDeviceManager.requestWriteToDevice(UM.OutputDeviceManager.activeDevice) onClicked: UM.OutputDeviceManager.requestWriteToDevice(UM.OutputDeviceManager.activeDevice)
} }
Button { Button
{
id: deviceSelectionMenu; id: deviceSelectionMenu;
anchors.top: infoBox.bottom tooltip: catalog.i18nc("@action:button","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
{
id: devicesMenu; id: devicesMenu;
Instantiator { Instantiator
{
model: devicesModel; model: devicesModel;
MenuItem { MenuItem
{
text: model.description text: model.description
checkable: true; checkable: true;
checked: model.id == UM.OutputDeviceManager.activeDevice; checked: model.id == UM.OutputDeviceManager.activeDevice;
exclusiveGroup: devicesMenuGroup; exclusiveGroup: devicesMenuGroup;
onTriggered: { onTriggered:
{
UM.OutputDeviceManager.setActiveDevice(model.id); UM.OutputDeviceManager.setActiveDevice(model.id);
} }
} }
@ -200,9 +248,6 @@ Rectangle {
ExclusiveGroup { id: devicesMenuGroup; } ExclusiveGroup { id: devicesMenuGroup; }
} }
} }
UM.OutputDevicesModel { id: devicesModel; }
} }
}
UM.OutputDevicesModel {
id: devicesModel;
}
}

View file

@ -6,42 +6,50 @@ 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
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 { ColumnLayout
{
anchors.fill: parent; anchors.fill: parent;
anchors.topMargin: UM.Theme.sizes.default_margin.height; anchors.topMargin: UM.Theme.sizes.default_margin.height;
spacing: UM.Theme.sizes.default_margin.height; spacing: UM.Theme.sizes.default_margin.height;
SidebarHeader { SidebarHeader
{
id: header; id: header;
Layout.fillWidth: true; Layout.fillWidth: true;
@ -50,9 +58,11 @@ Rectangle {
configureMachinesAction: base.configureMachinesAction; configureMachinesAction: base.configureMachinesAction;
modesModel: modesListModel; modesModel: modesListModel;
currentModeIndex: { currentModeIndex:
{
var index = parseInt(UM.Preferences.getValue("cura/active_mode")) var index = parseInt(UM.Preferences.getValue("cura/active_mode"))
if(index) { if(index)
{
return index; return index;
} }
return 0; return 0;
@ -60,7 +70,8 @@ Rectangle {
onCurrentModeIndexChanged: UM.Preferences.setValue("cura/active_mode", currentModeIndex); onCurrentModeIndexChanged: UM.Preferences.setValue("cura/active_mode", currentModeIndex);
} }
Loader { Loader
{
id: sidebarContents; id: sidebarContents;
Layout.fillWidth: true; Layout.fillWidth: true;
@ -87,18 +98,21 @@ Rectangle {
} }
} }
SaveButton { SaveButton
{
id: saveButton; id: saveButton;
implicitWidth: base.width implicitWidth: base.width
implicitHeight: UM.Theme.sizes.save_button_text_margin.height * 2 + UM.Theme.sizes.save_button_slicing_bar.height + UM.Theme.sizes.save_button_save_to_button.height + UM.Theme.sizes.default_margin.height implicitHeight: totalHeight
} }
} }
SidebarTooltip { 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" }
@ -106,10 +120,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));
} }
} }
} }

View file

@ -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
Column { Column
{
id: base; id: base;
property variant modesModel; property variant modesModel;
@ -17,37 +18,43 @@ Column {
property Action configureMachinesAction; property Action configureMachinesAction;
spacing: UM.Theme.sizes.default_margin.height; spacing: UM.Theme.sizes.default_margin.height;
UM.I18nCatalog { id: catalog; name:"cura"}
RowLayout { RowLayout
{
anchors.horizontalCenter: parent.horizontalCenter; anchors.horizontalCenter: parent.horizontalCenter;
width: parent.width - UM.Theme.sizes.default_margin.width * 2; width: parent.width - UM.Theme.sizes.default_margin.width * 2;
height: UM.Theme.sizes.line.height; height: UM.Theme.sizes.line.height;
Label { Label
{
//: Configuration mode label //: Configuration mode label
text: qsTr("Mode:"); text: catalog.i18nc("@label","Mode:");
font: UM.Theme.fonts.sidebar_header; font: UM.Theme.fonts.sidebar_header;
color: UM.Theme.colors.text_inactive; color: UM.Theme.colors.text_inactive;
} }
ToolButton { ToolButton
{
text: base.modesModel ? base.modesModel.get(modeMenu.currentIndex).text : ""; text: base.modesModel ? base.modesModel.get(modeMenu.currentIndex).text : "";
style: UM.Theme.styles.sidebar_header_button; style: UM.Theme.styles.sidebar_header_button;
Layout.preferredWidth: base.width * 0.25; Layout.preferredWidth: base.width * 0.25;
menu: Menu { menu: Menu
{
id: modeMenu; id: modeMenu;
property int currentIndex: 0; property int currentIndex: 0;
Instantiator { Instantiator
{
model: base.modesModel; model: base.modesModel;
MenuItem { MenuItem
{
text: model.text; text: model.text;
checkable: true; checkable: true;
checked: modeMenu.currentIndex == index; checked: modeMenu.currentIndex == index;
@ -62,21 +69,24 @@ Column {
} }
} }
Rectangle { Rectangle
{
width: 1; width: 1;
height: parent.height; height: parent.height;
color: UM.Theme.colors.border; color: UM.Theme.colors.border;
} }
Label { Label
{
//: Machine selection label //: Machine selection label
text: qsTr("Machine:"); text: catalog.i18nc("@label","Machine:");
font: UM.Theme.fonts.sidebar_header; font: UM.Theme.fonts.sidebar_header;
color: UM.Theme.colors.text_inactive; color: UM.Theme.colors.text_inactive;
} }
ToolButton { ToolButton
{
id: machineButton; id: machineButton;
text: UM.Application.machineName; text: UM.Application.machineName;
tooltip: UM.Application.machineName; tooltip: UM.Application.machineName;
@ -85,11 +95,14 @@ Column {
Layout.fillWidth: true; Layout.fillWidth: true;
menu: Menu { menu: Menu
{
id: machineMenu; id: machineMenu;
Instantiator { Instantiator
{
model: UM.Models.machinesModel model: UM.Models.machinesModel
MenuItem { MenuItem
{
text: model.name; text: model.name;
checkable: true; checkable: true;
checked: model.active; checked: model.active;
@ -110,14 +123,15 @@ Column {
} }
} }
UM.SidebarCategoryHeader { 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;

View file

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

View file

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

View file

@ -6,14 +6,14 @@ 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()
{ {
@ -26,7 +26,7 @@ UM.PreferencesPage
GridLayout GridLayout
{ {
columns: 2; columns: 2;
UM.I18nCatalog { id: catalog; name:"cura"}
CheckBox CheckBox
{ {
id: overhangCheckbox id: overhangCheckbox
@ -38,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
@ -68,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
{ {

View file

@ -7,7 +7,7 @@ import QtQuick.Layouts 1.1
import QtQuick.Window 2.1 import QtQuick.Window 2.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
import ".." import ".."
ColumnLayout ColumnLayout
@ -19,12 +19,12 @@ ColumnLayout
property var manufacturers: wizardPage.lineManufacturers() property var manufacturers: wizardPage.lineManufacturers()
property int manufacturerIndex: 0 property int manufacturerIndex: 0
SystemPalette{id: palette} SystemPalette {id: palette}
signal reloadModel(var newModel) signal reloadModel(var newModel)
width: wizardPage.pageWidth width: wizardPage.pageWidth
height: wizardPage.pageHeight height: wizardPage.pageHeight
UM.I18nCatalog { id: catalog; name: "cura"}
Connections Connections
{ {
target: elementRoot target: elementRoot
@ -62,7 +62,7 @@ ColumnLayout
anchors.left: parent.left anchors.left: parent.left
anchors.top: title.bottom anchors.top: title.bottom
//: Add Printer wizard page description //: Add Printer wizard page description
text: qsTr("Please select the type of printer:"); text: catalog.i18nc("@label","Please select the type of printer:");
} }
ScrollView ScrollView
@ -179,7 +179,7 @@ ColumnLayout
visible: model.author != "Ultimaker" ? true : false visible: model.author != "Ultimaker" ? true : false
height: wizardPage.manufacturers[wizardPage.manufacturerIndex] == model.manufacturer ? UM.Theme.sizes.standard_list_lineheight.height : 0 height: wizardPage.manufacturers[wizardPage.manufacturerIndex] == model.manufacturer ? UM.Theme.sizes.standard_list_lineheight.height : 0
//: Printer profile caption meaning: this profile is supported by the community //: Printer profile caption meaning: this profile is supported by the community
text: qsTr("community supported profile"); text: catalog.i18nc("@label","community supported profile");
opacity: wizardPage.manufacturers[wizardPage.manufacturerIndex] == model.manufacturer ? 1 : 0 opacity: wizardPage.manufacturers[wizardPage.manufacturerIndex] == model.manufacturer ? 1 : 0
anchors.left: machineButton.right anchors.left: machineButton.right
anchors.leftMargin: UM.Theme.sizes.standard_list_lineheight.height/2 anchors.leftMargin: UM.Theme.sizes.standard_list_lineheight.height/2
@ -231,7 +231,7 @@ ColumnLayout
{ {
id: insertNameLabel id: insertNameLabel
//: Add Printer wizard field label //: Add Printer wizard field label
text: qsTr("Printer Name:"); text: catalog.i18nc("@label","Printer Name:");
} }
TextField TextField
{ {

View file

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

View file

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

View file

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

After

Width:  |  Height:  |  Size: 493 B

View file

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

After

Width:  |  Height:  |  Size: 495 B

View file

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

After

Width:  |  Height:  |  Size: 496 B

View file

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

After

Width:  |  Height:  |  Size: 506 B

View file

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

After

Width:  |  Height:  |  Size: 773 B

View file

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

After

Width:  |  Height:  |  Size: 791 B

View file

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

After

Width:  |  Height:  |  Size: 1.1 KiB

View file

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

After

Width:  |  Height:  |  Size: 527 B

View file

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

After

Width:  |  Height:  |  Size: 670 B

View file

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

After

Width:  |  Height:  |  Size: 483 B

View file

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

After

Width:  |  Height:  |  Size: 526 B

View file

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

After

Width:  |  Height:  |  Size: 1.1 KiB

View file

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

After

Width:  |  Height:  |  Size: 773 B

View file

@ -67,11 +67,14 @@ QtObject {
Rectangle { Rectangle {
id: tool_button_background id: tool_button_background
anchors.top: parent.bottom anchors.left: parent.right
anchors.verticalCenter: parent.verticalCenter
//anchors.top: parent.bottom
width: label.width > parent.width ? label.width : parent.width //width: label.width > parent.width ? label.width : parent.width
height: control.hovered ? 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; } }

View file

@ -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,
@ -64,9 +60,12 @@
"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": [77, 184, 226, 255], "button_hover": [77, 184, 226, 255],
"button_active": [32, 166, 219, 255], "button_active": [32, 166, 219, 255],
@ -142,14 +141,20 @@
"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],
"loadfile_button": [11.0, 2.4], "loadfile_button": [11.0, 2.4],
"loadfile_margin": [0.8, 0.4], "loadfile_margin": [0.8, 0.4],
"sidebar": [24.0, 10.0],
"sidebar_header": [0.0, 3.2],
"sidebar_subParts": [0.0, 2.4],
"sidebar_specs_bar": [0.0, 2.2],
"sidebar_inputFields": [0.0, 1.9],
"section": [22.0, 3.0], "section": [22.0, 3.0],
"section_icon": [2.14, 2.14], "section_icon": [2.14, 2.14],
"section_text_margin": [0.33, 0.33], "section_text_margin": [0.33, 0.33],
@ -162,6 +167,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],
@ -189,6 +195,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],