Merge remote-tracking branch 'upstream/CURA-4057'

This commit is contained in:
Lipu Fei 2017-07-21 14:14:27 +02:00
commit 3d378ebc5f
3 changed files with 67 additions and 3 deletions

View file

@ -65,6 +65,11 @@ class PrinterOutputDevice(QObject, OutputDevice):
self._monitor_view_qml_path = "" self._monitor_view_qml_path = ""
self._monitor_component = None self._monitor_component = None
self._monitor_item = None self._monitor_item = None
self._control_view_qml_path = ""
self._control_component = None
self._control_item = None
self._qml_context = None self._qml_context = None
def requestWrite(self, nodes, file_name = None, filter_by_machine = False, file_handler = None): def requestWrite(self, nodes, file_name = None, filter_by_machine = False, file_handler = None):
@ -131,6 +136,29 @@ class PrinterOutputDevice(QObject, OutputDevice):
return self._monitor_item return self._monitor_item
@pyqtProperty(QObject, constant=True)
def controlItem(self):
if not self._control_component:
self._createControlViewFromQML()
return self._control_item
def _createControlViewFromQML(self):
path = QUrl.fromLocalFile(self._control_view_qml_path)
# Because of garbage collection we need to keep this referenced by python.
self._control_component = QQmlComponent(Application.getInstance()._engine, path)
# Check if the context was already requested before (Printer output device might have multiple items in the future)
if self._qml_context is None:
self._qml_context = QQmlContext(Application.getInstance()._engine.rootContext())
self._qml_context.setContextProperty("OutputDevice", self)
self._control_item = self._control_component.create(self._qml_context)
if self._control_item is None:
Logger.log("e", "QQmlComponent status %s", self._control_component.status())
Logger.log("e", "QQmlComponent error string %s", self._control_component.errorString())
def _createMonitorViewFromQML(self): def _createMonitorViewFromQML(self):
path = QUrl.fromLocalFile(self._monitor_view_qml_path) path = QUrl.fromLocalFile(self._monitor_view_qml_path)

View file

@ -179,7 +179,6 @@ class NetworkPrinterOutputDevice(PrinterOutputDevice):
self._compressing_print = False self._compressing_print = False
self._monitor_view_qml_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "MonitorItem.qml") self._monitor_view_qml_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "MonitorItem.qml")
printer_type = self._properties.get(b"machine", b"").decode("utf-8") printer_type = self._properties.get(b"machine", b"").decode("utf-8")
if printer_type.startswith("9511"): if printer_type.startswith("9511"):
self._updatePrinterType("ultimaker3_extended") self._updatePrinterType("ultimaker3_extended")

View file

@ -20,6 +20,7 @@ Rectangle
// Is there an output device for this printer? // Is there an output device for this printer?
property bool printerConnected: Cura.MachineManager.printerOutputDevices.length != 0 property bool printerConnected: Cura.MachineManager.printerOutputDevices.length != 0
property bool printerAcceptsCommands: printerConnected && Cura.MachineManager.printerOutputDevices[0].acceptsCommands property bool printerAcceptsCommands: printerConnected && Cura.MachineManager.printerOutputDevices[0].acceptsCommands
property var connectedPrinter: Cura.MachineManager.printerOutputDevices.length >= 1 ? Cura.MachineManager.printerOutputDevices[0] : null
property int backendState: UM.Backend.state; property int backendState: UM.Backend.state;
property bool monitoringPrint: false property bool monitoringPrint: false
@ -344,11 +345,47 @@ Rectangle
Loader Loader
{ {
id: controlItem
anchors.bottom: footerSeparator.top anchors.bottom: footerSeparator.top
anchors.top: headerSeparator.bottom anchors.top: headerSeparator.bottom
anchors.left: base.left anchors.left: base.left
anchors.right: base.right anchors.right: base.right
source: monitoringPrint ? "PrintMonitor.qml": "SidebarContents.qml" sourceComponent:
{
if(monitoringPrint && connectedPrinter != null)
{
if(connectedPrinter.controlItem != null)
{
return connectedPrinter.controlItem
}
}
return null
}
}
Loader
{
anchors.bottom: footerSeparator.top
anchors.top: headerSeparator.bottom
anchors.left: base.left
anchors.right: base.right
source:
{
if(controlItem.sourceComponent == null)
{
if(monitoringPrint)
{
return "PrintMonitor.qml"
} else
{
return "SidebarContents.qml"
}
}
else
{
return ""
}
}
} }
Rectangle Rectangle