mirror of
https://github.com/Ultimaker/Cura.git
synced 2025-07-08 07:27:29 -06:00
Changes to USB printer manager so its usable by other qml files
This commit is contained in:
parent
c20b3bc2d5
commit
c95cf5263b
4 changed files with 69 additions and 26 deletions
|
@ -10,6 +10,7 @@ from UM.Resources import Resources
|
||||||
from UM.Logger import Logger
|
from UM.Logger import Logger
|
||||||
from UM.PluginRegistry import PluginRegistry
|
from UM.PluginRegistry import PluginRegistry
|
||||||
from UM.OutputDevice.OutputDevicePlugin import OutputDevicePlugin
|
from UM.OutputDevice.OutputDevicePlugin import OutputDevicePlugin
|
||||||
|
from UM.Qt.ListModel import ListModel
|
||||||
|
|
||||||
import threading
|
import threading
|
||||||
import platform
|
import platform
|
||||||
|
@ -35,6 +36,7 @@ class USBPrinterManager(QObject, SignalEmitter, OutputDevicePlugin, Extension):
|
||||||
Extension.__init__(self)
|
Extension.__init__(self)
|
||||||
self._serial_port_list = []
|
self._serial_port_list = []
|
||||||
self._printer_connections = {}
|
self._printer_connections = {}
|
||||||
|
self._printer_connections_model = None
|
||||||
self._update_thread = threading.Thread(target = self._updateThread)
|
self._update_thread = threading.Thread(target = self._updateThread)
|
||||||
self._update_thread.setDaemon(True)
|
self._update_thread.setDaemon(True)
|
||||||
|
|
||||||
|
@ -49,6 +51,7 @@ class USBPrinterManager(QObject, SignalEmitter, OutputDevicePlugin, Extension):
|
||||||
self.addConnectionSignal.connect(self.addConnection) #Because the model needs to be created in the same thread as the QMLEngine, we use a signal.
|
self.addConnectionSignal.connect(self.addConnection) #Because the model needs to be created in the same thread as the QMLEngine, we use a signal.
|
||||||
|
|
||||||
addConnectionSignal = Signal()
|
addConnectionSignal = Signal()
|
||||||
|
printerConnectionStateChanged = pyqtSignal()
|
||||||
|
|
||||||
def start(self):
|
def start(self):
|
||||||
self._check_updates = True
|
self._check_updates = True
|
||||||
|
@ -88,11 +91,28 @@ class USBPrinterManager(QObject, SignalEmitter, OutputDevicePlugin, Extension):
|
||||||
except FileNotFoundError:
|
except FileNotFoundError:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
|
@pyqtSlot(str, result = bool)
|
||||||
def updateFirmwareBySerial(self, serial_port):
|
def updateFirmwareBySerial(self, serial_port):
|
||||||
printer_connection = self.getConnectionByPort(serial_port)
|
print("OMG ZOMG: ", serial_port)
|
||||||
if printer_connection is not None:
|
if serial_port in self._printer_connections:
|
||||||
self.spawnFirmwareInterface(printer_connection.getSerialPort())
|
self.spawnFirmwareInterface(self._printer_connections[serial_port].getSerialPort())
|
||||||
printer_connection.updateFirmware(Resources.getPath(Resources.FirmwareLocation, self._getDefaultFirmwareName()))
|
try:
|
||||||
|
self._printer_connections[serial_port].updateFirmware(Resources.getPath(Resources.FirmwareLocation, self._getDefaultFirmwareName()))
|
||||||
|
except FileNotFoundError:
|
||||||
|
self._firmware_view.close()
|
||||||
|
Logger.log("e", "Could not find firmware required for this machine")
|
||||||
|
return False
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
## Return the singleton instance of the USBPrinterManager
|
||||||
|
@classmethod
|
||||||
|
def getInstance(cls, engine = None, script_engine = None):
|
||||||
|
# Note: Explicit use of class name to prevent issues with inheritance.
|
||||||
|
if USBPrinterManager._instance is None:
|
||||||
|
USBPrinterManager._instance = cls()
|
||||||
|
|
||||||
|
return USBPrinterManager._instance
|
||||||
|
|
||||||
def _getDefaultFirmwareName(self):
|
def _getDefaultFirmwareName(self):
|
||||||
machine_type = Application.getInstance().getActiveMachine().getTypeID()
|
machine_type = Application.getInstance().getActiveMachine().getTypeID()
|
||||||
|
@ -136,10 +156,23 @@ class USBPrinterManager(QObject, SignalEmitter, OutputDevicePlugin, Extension):
|
||||||
self._printer_connections[serial_port] = connection
|
self._printer_connections[serial_port] = connection
|
||||||
|
|
||||||
def _onPrinterConnectionStateChanged(self, serial_port):
|
def _onPrinterConnectionStateChanged(self, serial_port):
|
||||||
|
print("On state changed: ", self)
|
||||||
if self._printer_connections[serial_port].isConnected():
|
if self._printer_connections[serial_port].isConnected():
|
||||||
self.getOutputDeviceManager().addOutputDevice(self._printer_connections[serial_port])
|
self.getOutputDeviceManager().addOutputDevice(self._printer_connections[serial_port])
|
||||||
else:
|
else:
|
||||||
self.getOutputDeviceManager().removeOutputDevice(serial_port)
|
self.getOutputDeviceManager().removeOutputDevice(serial_port)
|
||||||
|
self.printerConnectionStateChanged.emit()
|
||||||
|
|
||||||
|
@pyqtProperty(QObject , notify = printerConnectionStateChanged)
|
||||||
|
def connectedPrinterList(self):
|
||||||
|
print("ConnectedPrinterList: ", self)
|
||||||
|
self._printer_connections_model = ListModel()
|
||||||
|
self._printer_connections_model.addRoleName(Qt.UserRole + 1,"name")
|
||||||
|
self._printer_connections_model.addRoleName(Qt.UserRole + 2, "printer")
|
||||||
|
for connection in self._printer_connections:
|
||||||
|
if self._printer_connections[connection].isConnected():
|
||||||
|
self._printer_connections_model.appendItem({"name":connection, "printer": self._printer_connections[connection]})
|
||||||
|
return self._printer_connections_model
|
||||||
|
|
||||||
## Create a list of serial ports on the system.
|
## Create a list of serial ports on the system.
|
||||||
# \param only_list_usb If true, only usb ports are listed
|
# \param only_list_usb If true, only usb ports are listed
|
||||||
|
@ -163,4 +196,6 @@ class USBPrinterManager(QObject, SignalEmitter, OutputDevicePlugin, Extension):
|
||||||
base_list = filter(lambda s: "Bluetooth" not in s, base_list) # Filter because mac sometimes puts them in the list
|
base_list = filter(lambda s: "Bluetooth" not in s, base_list) # Filter because mac sometimes puts them in the list
|
||||||
else:
|
else:
|
||||||
base_list = base_list + glob.glob("/dev/ttyUSB*") + glob.glob("/dev/ttyACM*") + glob.glob("/dev/cu.*") + glob.glob("/dev/tty.usb*") + glob.glob("/dev/rfcomm*") + glob.glob("/dev/serial/by-id/*")
|
base_list = base_list + glob.glob("/dev/ttyUSB*") + glob.glob("/dev/ttyACM*") + glob.glob("/dev/cu.*") + glob.glob("/dev/tty.usb*") + glob.glob("/dev/rfcomm*") + glob.glob("/dev/serial/by-id/*")
|
||||||
return list(base_list)
|
return list(base_list)
|
||||||
|
|
||||||
|
_instance = None
|
|
@ -2,7 +2,7 @@
|
||||||
# Cura is released under the terms of the AGPLv3 or higher.
|
# Cura is released under the terms of the AGPLv3 or higher.
|
||||||
|
|
||||||
from . import USBPrinterManager
|
from . import USBPrinterManager
|
||||||
|
from PyQt5.QtQml import qmlRegisterType, qmlRegisterSingletonType
|
||||||
from UM.i18n import i18nCatalog
|
from UM.i18n import i18nCatalog
|
||||||
i18n_catalog = i18nCatalog("cura")
|
i18n_catalog = i18nCatalog("cura")
|
||||||
|
|
||||||
|
@ -19,4 +19,5 @@ def getMetaData():
|
||||||
}
|
}
|
||||||
|
|
||||||
def register(app):
|
def register(app):
|
||||||
return {"extension":USBPrinterManager.USBPrinterManager(),"output_device": USBPrinterManager.USBPrinterManager() }
|
qmlRegisterSingletonType(USBPrinterManager.USBPrinterManager, "UM", 1, 0, "USBPrinterManager", USBPrinterManager.USBPrinterManager.getInstance)
|
||||||
|
return {"extension":USBPrinterManager.USBPrinterManager.getInstance(),"output_device": USBPrinterManager.USBPrinterManager.getInstance() }
|
||||||
|
|
|
@ -252,6 +252,10 @@ ColumnLayout
|
||||||
UM.Models.availableMachinesModel.createMachine(machineList.currentIndex, machineName.text)
|
UM.Models.availableMachinesModel.createMachine(machineList.currentIndex, machineName.text)
|
||||||
var pages = UM.Models.availableMachinesModel.getItem(machineList.currentIndex).pages
|
var pages = UM.Models.availableMachinesModel.getItem(machineList.currentIndex).pages
|
||||||
var old_page_count = elementRoot.getPageCount()
|
var old_page_count = elementRoot.getPageCount()
|
||||||
|
for(var i = 0; i < UM.Models.count; i++)
|
||||||
|
{
|
||||||
|
print(UM.Models.getItem(i))
|
||||||
|
}
|
||||||
// Delete old pages (if any)
|
// Delete old pages (if any)
|
||||||
for (var i = old_page_count - 1; i > 0; i--)
|
for (var i = old_page_count - 1; i > 0; i--)
|
||||||
{
|
{
|
||||||
|
|
|
@ -13,13 +13,12 @@ Column
|
||||||
id: wizardPage
|
id: wizardPage
|
||||||
property string title
|
property string title
|
||||||
anchors.fill: parent;
|
anchors.fill: parent;
|
||||||
|
|
||||||
Label
|
Label
|
||||||
{
|
{
|
||||||
text: parent.title
|
text: parent.title
|
||||||
font.pointSize: 18;
|
font.pointSize: 18;
|
||||||
}
|
}
|
||||||
|
Component.onCompleted: console.log(UM.USBPrinterManager.connectedPrinterList.count)
|
||||||
Label
|
Label
|
||||||
{
|
{
|
||||||
//: Add Printer wizard page description
|
//: Add Printer wizard page description
|
||||||
|
@ -33,14 +32,26 @@ Column
|
||||||
ListView
|
ListView
|
||||||
{
|
{
|
||||||
id: machineList;
|
id: machineList;
|
||||||
model: UM.Models.availableMachinesModel
|
model: UM.USBPrinterManager.connectedPrinterList
|
||||||
delegate: RadioButton
|
|
||||||
|
delegate:Row
|
||||||
{
|
{
|
||||||
exclusiveGroup: printerGroup;
|
id: derp
|
||||||
text: model.name;
|
Text
|
||||||
onClicked:
|
|
||||||
{
|
{
|
||||||
ListView.view.currentIndex = index;
|
id: text_area
|
||||||
|
text: model.name
|
||||||
|
}
|
||||||
|
Button
|
||||||
|
{
|
||||||
|
text: "Update";
|
||||||
|
onClicked:
|
||||||
|
{
|
||||||
|
if(!UM.USBPrinterManager.updateFirmwareBySerial(text_area.text))
|
||||||
|
{
|
||||||
|
status_text.text = "ERROR"
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -48,15 +59,10 @@ Column
|
||||||
|
|
||||||
Label
|
Label
|
||||||
{
|
{
|
||||||
//: Add Printer wizard field label
|
id: status_text
|
||||||
text: qsTr("Printer Name:");
|
text: ""
|
||||||
}
|
}
|
||||||
|
|
||||||
TextField
|
|
||||||
{
|
|
||||||
id: machineName; Layout.fillWidth: true; text: machineList.model.getItem(machineList.currentIndex).name
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
Item
|
Item
|
||||||
{
|
{
|
||||||
|
@ -64,8 +70,5 @@ Column
|
||||||
Layout.fillHeight: true;
|
Layout.fillHeight: true;
|
||||||
}
|
}
|
||||||
|
|
||||||
ExclusiveGroup
|
|
||||||
{
|
|
||||||
id: printerGroup;
|
|
||||||
}
|
|
||||||
}
|
}
|
Loading…
Add table
Add a link
Reference in a new issue