Merge pull request #4864 from Ultimaker/CURA-5943_ui_usb_printing

Cura 5943 ui usb printing
This commit is contained in:
Lipu Fei 2018-12-03 10:42:58 +01:00 committed by GitHub
commit c688f0ea88
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
16 changed files with 534 additions and 350 deletions

View file

@ -146,6 +146,7 @@ UM.MainWindow
Rectangle
{
id: stageMenuBackground
anchors
{
left: parent.left
@ -153,7 +154,7 @@ UM.MainWindow
top: parent.top
}
visible: stageMenu.source != ""
height: Math.round(UM.Theme.getSize("stage_menu").height / 2)
height: visible ? Math.round(UM.Theme.getSize("stage_menu").height / 2) : 0
LinearGradient
{
@ -254,7 +255,13 @@ UM.MainWindow
// A stage can control this area. If nothing is set, it will therefore show the 3D view.
id: main
anchors.fill: parent
anchors
{
top: stageMenuBackground.bottom
left: parent.left
right: parent.right
bottom: parent.bottom
}
source: UM.Controller.activeStage != null ? UM.Controller.activeStage.mainComponent : ""
}

View file

@ -70,7 +70,7 @@ Column
Label
{
id: materialLabel
text: printCoreConfiguration.material.name
text: printCoreConfiguration.material == null ? "" : printCoreConfiguration.material.name
renderType: Text.NativeRendering
elide: Text.ElideRight
width: parent.width

View file

@ -1,15 +1,17 @@
// Copyright (c) 2018 Ultimaker B.V.
// Cura is released under the terms of the LGPLv3 or higher.
import QtQuick 2.7
import QtQuick 2.10
import QtQuick.Controls 2.0
import QtQuick.Layouts 1.3
import UM 1.2 as UM
import Cura 1.0 as Cura
import "Menus"
import "Menus/ConfigurationMenu"
Rectangle
{
id: base
@ -85,7 +87,7 @@ Rectangle
}
}
MachineSelection
MachineSelector
{
id: machineSelection
width: base.width - configSelection.width - separator.width
@ -104,7 +106,7 @@ Rectangle
anchors.left: machineSelection.right
}
ConfigurationSelection
CustomConfigurationSelector
{
id: configSelection
visible: isNetworkPrinter && printerConnected
@ -112,7 +114,6 @@ Rectangle
height: UM.Theme.getSize("stage_menu").height
anchors.top: base.top
anchors.right: parent.right
panelWidth: base.width
}
Loader

View file

@ -11,136 +11,180 @@ import Cura 1.0 as Cura
import "PrinterOutput"
Column
Rectangle
{
id: printMonitor
id: base
UM.I18nCatalog { id: catalog; name: "cura"}
function showTooltip(item, position, text)
{
tooltip.text = text;
position = item.mapToItem(base, position.x - UM.Theme.getSize("default_arrow").width, position.y);
tooltip.show(position);
}
function hideTooltip()
{
tooltip.hide();
}
function strPadLeft(string, pad, length) {
return (new Array(length + 1).join(pad) + string).slice(-length);
}
function getPrettyTime(time)
{
var hours = Math.floor(time / 3600)
time -= hours * 3600
var minutes = Math.floor(time / 60);
time -= minutes * 60
var seconds = Math.floor(time);
var finalTime = strPadLeft(hours, "0", 2) + ":" + strPadLeft(minutes, "0", 2) + ":" + strPadLeft(seconds, "0", 2);
return finalTime;
}
property var connectedDevice: Cura.MachineManager.printerOutputDevices.length >= 1 ? Cura.MachineManager.printerOutputDevices[0] : null
property var activePrinter: connectedDevice != null ? connectedDevice.activePrinter : null
property var activePrintJob: activePrinter != null ? activePrinter.activePrintJob: null
Cura.ExtrudersModel
SidebarTooltip
{
id: extrudersModel
simpleNames: true
id: tooltip
}
OutputDeviceHeader
Column
{
outputDevice: connectedDevice
}
id: printMonitor
Rectangle
{
color: UM.Theme.getColor("wide_lining")
width: parent.width
height: childrenRect.height
anchors.fill: parent
Flow
Cura.ExtrudersModel
{
id: extrudersGrid
spacing: UM.Theme.getSize("thick_lining").width
id: extrudersModel
simpleNames: true
}
OutputDeviceHeader
{
outputDevice: connectedDevice
}
Rectangle
{
color: UM.Theme.getColor("wide_lining")
width: parent.width
height: childrenRect.height
Repeater
Flow
{
id: extrudersRepeater
model: activePrinter != null ? activePrinter.extruders : null
id: extrudersGrid
spacing: UM.Theme.getSize("thick_lining").width
width: parent.width
ExtruderBox
Repeater
{
color: UM.Theme.getColor("main_background")
width: index == machineExtruderCount.properties.value - 1 && index % 2 == 0 ? extrudersGrid.width : Math.round(extrudersGrid.width / 2 - UM.Theme.getSize("thick_lining").width / 2)
extruderModel: modelData
id: extrudersRepeater
model: activePrinter != null ? activePrinter.extruders : null
ExtruderBox
{
color: UM.Theme.getColor("main_background")
width: index == machineExtruderCount.properties.value - 1 && index % 2 == 0 ? extrudersGrid.width : Math.round(extrudersGrid.width / 2 - UM.Theme.getSize("thick_lining").width / 2)
extruderModel: modelData
}
}
}
}
}
Rectangle
{
color: UM.Theme.getColor("wide_lining")
width: parent.width
height: UM.Theme.getSize("thick_lining").width
}
HeatedBedBox
{
visible: {
if(activePrinter != null && activePrinter.bedTemperature != -1)
{
return true
}
return false
}
printerModel: activePrinter
}
UM.SettingPropertyProvider
{
id: bedTemperature
containerStack: Cura.MachineManager.activeMachine
key: "material_bed_temperature"
watchedProperties: ["value", "minimum_value", "maximum_value", "resolve"]
storeIndex: 0
property var resolve: Cura.MachineManager.activeStack != Cura.MachineManager.activeMachine ? properties.resolve : "None"
}
UM.SettingPropertyProvider
{
id: machineExtruderCount
containerStack: Cura.MachineManager.activeMachine
key: "machine_extruder_count"
watchedProperties: ["value"]
}
ManualPrinterControl
{
printerModel: activePrinter
visible: activePrinter != null ? activePrinter.canControlManually : false
}
MonitorSection
{
label: catalog.i18nc("@label", "Active print")
width: base.width
visible: activePrinter != null
}
MonitorItem
{
label: catalog.i18nc("@label", "Job Name")
value: activePrintJob != null ? activePrintJob.name : ""
width: base.width
visible: activePrinter != null
}
MonitorItem
{
label: catalog.i18nc("@label", "Printing Time")
value: activePrintJob != null ? getPrettyTime(activePrintJob.timeTotal) : ""
width: base.width
visible: activePrinter != null
}
MonitorItem
{
label: catalog.i18nc("@label", "Estimated time left")
value: activePrintJob != null ? getPrettyTime(activePrintJob.timeTotal - activePrintJob.timeElapsed) : ""
visible:
Rectangle
{
if(activePrintJob == null)
color: UM.Theme.getColor("wide_lining")
width: parent.width
height: UM.Theme.getSize("thick_lining").width
}
HeatedBedBox
{
visible:
{
if(activePrinter != null && activePrinter.bedTemperature != -1)
{
return true
}
return false
}
return (activePrintJob.state == "printing" ||
activePrintJob.state == "resuming" ||
activePrintJob.state == "pausing" ||
activePrintJob.state == "paused")
printerModel: activePrinter
}
UM.SettingPropertyProvider
{
id: bedTemperature
containerStack: Cura.MachineManager.activeMachine
key: "material_bed_temperature"
watchedProperties: ["value", "minimum_value", "maximum_value", "resolve"]
storeIndex: 0
property var resolve: Cura.MachineManager.activeStack != Cura.MachineManager.activeMachine ? properties.resolve : "None"
}
UM.SettingPropertyProvider
{
id: machineExtruderCount
containerStack: Cura.MachineManager.activeMachine
key: "machine_extruder_count"
watchedProperties: ["value"]
}
ManualPrinterControl
{
printerModel: activePrinter
visible: activePrinter != null ? activePrinter.canControlManually : false
}
MonitorSection
{
label: catalog.i18nc("@label", "Active print")
width: base.width
visible: activePrinter != null
}
MonitorItem
{
label: catalog.i18nc("@label", "Job Name")
value: activePrintJob != null ? activePrintJob.name : ""
width: base.width
visible: activePrinter != null
}
MonitorItem
{
label: catalog.i18nc("@label", "Printing Time")
value: activePrintJob != null ? getPrettyTime(activePrintJob.timeTotal) : ""
width: base.width
visible: activePrinter != null
}
MonitorItem
{
label: catalog.i18nc("@label", "Estimated time left")
value: activePrintJob != null ? getPrettyTime(activePrintJob.timeTotal - activePrintJob.timeElapsed) : ""
visible:
{
if(activePrintJob == null)
{
return false
}
return (activePrintJob.state == "printing" ||
activePrintJob.state == "resuming" ||
activePrintJob.state == "pausing" ||
activePrintJob.state == "paused")
}
width: base.width
}
width: base.width
}
}
}

View file

@ -12,6 +12,8 @@ Item
property alias color: background.color
property var extruderModel
property var position: index
property var connectedPrinter: Cura.MachineManager.printerOutputDevices.length >= 1 ? Cura.MachineManager.printerOutputDevices[0] : null
implicitWidth: parent.width
implicitHeight: UM.Theme.getSize("print_setup_extruder_box").height

View file

@ -1,10 +1,10 @@
// Copyright (c) 2017 Ultimaker B.V.
// Cura is released under the terms of the LGPLv3 or higher.
import QtQuick 2.2
import QtQuick.Controls 1.1
import QtQuick.Controls.Styles 1.1
import QtQuick.Layouts 1.1
import QtQuick 2.10
import QtQuick.Controls 1.4
import QtQuick.Controls.Styles 1.4
import QtQuick.Layouts 1.3
import UM 1.2 as UM
import Cura 1.0 as Cura
@ -14,6 +14,7 @@ Item
implicitWidth: parent.width
height: visible ? UM.Theme.getSize("print_setup_extruder_box").height : 0
property var printerModel
property var connectedPrinter: Cura.MachineManager.printerOutputDevices.length >= 1 ? Cura.MachineManager.printerOutputDevices[0] : null
Rectangle
{
@ -114,7 +115,7 @@ Item
{
return false; //Can't preheat if not connected.
}
if (!connectedPrinter.acceptsCommands)
if (connectedPrinter == null || !connectedPrinter.acceptsCommands)
{
return false; //Not allowed to do anything.
}

View file

@ -1,103 +1,26 @@
// Copyright (c) 2017 Ultimaker B.V.
// Cura is released under the terms of the LGPLv3 or higher.
import QtQuick 2.2
import QtQuick.Controls 1.1
import QtQuick.Controls.Styles 1.1
import QtQuick.Layouts 1.1
import QtQuick 2.10
import QtQuick.Controls 1.4
import QtQuick.Controls.Styles 1.4
import QtQuick.Layouts 1.3
import UM 1.2 as UM
import UM 1.3 as UM
import Cura 1.0 as Cura
import "."
Item
{
property var printerModel
property var printerModel: null
property var activePrintJob: printerModel != null ? printerModel.activePrintJob : null
property var connectedPrinter: Cura.MachineManager.printerOutputDevices.length >= 1 ? Cura.MachineManager.printerOutputDevices[0] : null
implicitWidth: parent.width
implicitHeight: childrenRect.height
Component
{
id: monitorButtonStyle
ButtonStyle
{
background: Rectangle
{
border.width: UM.Theme.getSize("default_lining").width
border.color:
{
if(!control.enabled)
{
return UM.Theme.getColor("action_button_disabled_border");
}
else if(control.pressed)
{
return UM.Theme.getColor("action_button_active_border");
}
else if(control.hovered)
{
return UM.Theme.getColor("action_button_hovered_border");
}
return UM.Theme.getColor("action_button_border");
}
color:
{
if(!control.enabled)
{
return UM.Theme.getColor("action_button_disabled");
}
else if(control.pressed)
{
return UM.Theme.getColor("action_button_active");
}
else if(control.hovered)
{
return UM.Theme.getColor("action_button_hovered");
}
return UM.Theme.getColor("action_button");
}
Behavior on color
{
ColorAnimation
{
duration: 50
}
}
}
label: Item
{
UM.RecolorImage
{
anchors.verticalCenter: parent.verticalCenter
anchors.horizontalCenter: parent.horizontalCenter
width: Math.floor(control.width / 2)
height: Math.floor(control.height / 2)
sourceSize.width: width
sourceSize.height: width
color:
{
if(!control.enabled)
{
return UM.Theme.getColor("action_button_disabled_text");
}
else if(control.pressed)
{
return UM.Theme.getColor("action_button_active_text");
}
else if(control.hovered)
{
return UM.Theme.getColor("action_button_hovered_text");
}
return UM.Theme.getColor("action_button_text");
}
source: control.iconSource
}
}
}
}
Column
{
enabled:
@ -180,7 +103,7 @@ Item
Layout.preferredWidth: width
Layout.preferredHeight: height
iconSource: UM.Theme.getIcon("arrow_top");
style: monitorButtonStyle
style: UM.Theme.styles.monitor_button_style
width: height
height: UM.Theme.getSize("setting_control").height
@ -197,7 +120,7 @@ Item
Layout.preferredWidth: width
Layout.preferredHeight: height
iconSource: UM.Theme.getIcon("arrow_left");
style: monitorButtonStyle
style: UM.Theme.styles.monitor_button_style
width: height
height: UM.Theme.getSize("setting_control").height
@ -214,7 +137,7 @@ Item
Layout.preferredWidth: width
Layout.preferredHeight: height
iconSource: UM.Theme.getIcon("arrow_right");
style: monitorButtonStyle
style: UM.Theme.styles.monitor_button_style
width: height
height: UM.Theme.getSize("setting_control").height
@ -231,7 +154,7 @@ Item
Layout.preferredWidth: width
Layout.preferredHeight: height
iconSource: UM.Theme.getIcon("arrow_bottom");
style: monitorButtonStyle
style: UM.Theme.styles.monitor_button_style
width: height
height: UM.Theme.getSize("setting_control").height
@ -248,7 +171,7 @@ Item
Layout.preferredWidth: width
Layout.preferredHeight: height
iconSource: UM.Theme.getIcon("home");
style: monitorButtonStyle
style: UM.Theme.styles.monitor_button_style
width: height
height: UM.Theme.getSize("setting_control").height
@ -278,7 +201,7 @@ Item
Button
{
iconSource: UM.Theme.getIcon("arrow_top");
style: monitorButtonStyle
style: UM.Theme.styles.monitor_button_style
width: height
height: UM.Theme.getSize("setting_control").height
@ -291,7 +214,7 @@ Item
Button
{
iconSource: UM.Theme.getIcon("home");
style: monitorButtonStyle
style: UM.Theme.styles.monitor_button_style
width: height
height: UM.Theme.getSize("setting_control").height
@ -304,7 +227,7 @@ Item
Button
{
iconSource: UM.Theme.getIcon("arrow_bottom");
style: monitorButtonStyle
style: UM.Theme.styles.monitor_button_style
width: height
height: UM.Theme.getSize("setting_control").height
@ -356,72 +279,7 @@ Item
checked: distancesRow.currentDistance == model.value
onClicked: distancesRow.currentDistance = model.value
style: ButtonStyle {
background: Rectangle {
border.width: control.checked ? UM.Theme.getSize("default_lining").width * 2 : UM.Theme.getSize("default_lining").width
border.color:
{
if(!control.enabled)
{
return UM.Theme.getColor("action_button_disabled_border");
}
else if (control.checked || control.pressed)
{
return UM.Theme.getColor("action_button_active_border");
}
else if(control.hovered)
{
return UM.Theme.getColor("action_button_hovered_border");
}
return UM.Theme.getColor("action_button_border");
}
color:
{
if(!control.enabled)
{
return UM.Theme.getColor("action_button_disabled");
}
else if (control.checked || control.pressed)
{
return UM.Theme.getColor("action_button_active");
}
else if (control.hovered)
{
return UM.Theme.getColor("action_button_hovered");
}
return UM.Theme.getColor("action_button");
}
Behavior on color { ColorAnimation { duration: 50; } }
Label {
anchors.left: parent.left
anchors.right: parent.right
anchors.verticalCenter: parent.verticalCenter
anchors.leftMargin: UM.Theme.getSize("default_lining").width * 2
anchors.rightMargin: UM.Theme.getSize("default_lining").width * 2
color:
{
if(!control.enabled)
{
return UM.Theme.getColor("action_button_disabled_text");
}
else if (control.checked || control.pressed)
{
return UM.Theme.getColor("action_button_active_text");
}
else if (control.hovered)
{
return UM.Theme.getColor("action_button_hovered_text");
}
return UM.Theme.getColor("action_button_text");
}
font: UM.Theme.getFont("default")
text: control.text
horizontalAlignment: Text.AlignHCenter
elide: Text.ElideMiddle
}
}
label: Item { }
}
style: UM.Theme.styles.monitor_checkable_button_style
}
}
}
@ -462,7 +320,7 @@ Item
if (printerModel == null) {
return false // Can't send custom commands if not connected.
}
if (!connectedPrinter.acceptsCommands) {
if (connectedPrinter == null || !connectedPrinter.acceptsCommands) {
return false // Not allowed to do anything
}
if (connectedPrinter.jobState == "printing" || connectedPrinter.jobState == "pre_print" || connectedPrinter.jobState == "resuming" || connectedPrinter.jobState == "pausing" || connectedPrinter.jobState == "paused" || connectedPrinter.jobState == "error" || connectedPrinter.jobState == "offline") {
@ -551,4 +409,4 @@ Item
}
ExclusiveGroup { id: distanceGroup }
}
}
}

View file

@ -15,6 +15,8 @@ Item
property string value: ""
height: childrenRect.height;
property var connectedPrinter: Cura.MachineManager.printerOutputDevices.length >= 1 ? Cura.MachineManager.printerOutputDevices[0] : null
Row
{
height: UM.Theme.getSize("setting_control").height

View file

@ -1,10 +1,10 @@
// Copyright (c) 2017 Ultimaker B.V.
// Cura is released under the terms of the LGPLv3 or higher.
import QtQuick 2.2
import QtQuick.Controls 1.1
import QtQuick.Controls.Styles 1.1
import QtQuick.Layouts 1.1
import QtQuick 2.10
import QtQuick.Controls 1.4
import QtQuick.Controls.Styles 1.4
import QtQuick.Layouts 1.3
import UM 1.2 as UM
import Cura 1.0 as Cura
@ -13,7 +13,8 @@ Item
{
id: base
property string label
height: childrenRect.height;
height: childrenRect.height
Rectangle
{
color: UM.Theme.getColor("setting_category")
@ -30,4 +31,4 @@ Item
color: UM.Theme.getColor("setting_category_text")
}
}
}
}

View file

@ -45,8 +45,8 @@ Item
text: (outputDevice != null && outputDevice.address != null) ? outputDevice.address : ""
font: UM.Theme.getFont("small")
color: UM.Theme.getColor("text_inactive")
anchors.top: parent.top
anchors.right: parent.right
anchors.top: outputDeviceNameLabel.bottom
anchors.left: parent.left
anchors.margins: UM.Theme.getSize("default_margin").width
}