wsc_ui.py 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. import logging
  2. import sys
  3. import time
  4. import sip
  5. from wsc_tools import ParsingTools
  6. from wsc_client import WSC_Client
  7. from wsc_device_encoder import EncoderUI
  8. from PyQt5 import QtCore, QtGui, QtWidgets
  9. from pyqt.mainwindow2 import Ui_MainWindow
  10. from pyqt.ideasxdevice import Ui_IdeasXDevice
  11. from pyqt.encoderconfigurationdialog import Ui_SwitchConfigDialog
  12. from pyqt.devicedialog import Ui_Dialog
  13. logging.basicConfig( level=logging.DEBUG)
  14. log = logging.getLogger("wsc_ui")
  15. class UIDeviceManager():
  16. def __init__(self, deviceClass, wsc):
  17. self.__devices = {}
  18. self.__deviceClass = deviceClass
  19. self.__deviceLayout = QtWidgets.QVBoxLayout()
  20. self.__deviceLayout.setAlignment(QtCore.Qt.AlignTop)
  21. self.__deviceLayout.setContentsMargins(9, 0, 9, 0)
  22. self.__deviceLayout.setSpacing(0)
  23. self.__wsc = wsc
  24. def refreshDevices(self, devices):
  25. for deviceMAC in list(devices.keys()):
  26. if deviceMAC in self.__devices.keys():
  27. self.__devices[deviceMAC].updateDevice(devices[deviceMAC])
  28. else:
  29. self.__devices[deviceMAC] = self.__deviceClass(devices[deviceMAC])
  30. self.__deviceLayout.addWidget(self.__devices[deviceMAC])
  31. for deviceMAC in list(self.__devices.keys()):
  32. if deviceMAC not in devices.keys():
  33. self.removeDevice(deviceMAC)
  34. def removeDevice(self, deviceMAC):
  35. self.__deviceLayout.removeWidget(self.__devices[deviceMAC])
  36. sip.delete(self.__devices[deviceMAC])
  37. self.__devices.pop(deviceMAC)
  38. def returnLayout(self):
  39. return self.__deviceLayout
  40. def filterDevices(self, searchPhase):
  41. log.debug("This currently doesn't work")
  42. def printDevices(self):
  43. print(self.__devices)
  44. class MainWindow(QtWidgets.QMainWindow):
  45. def __init__(self, wsc):
  46. super(MainWindow, self).__init__()
  47. self.__ui = Ui_MainWindow()
  48. self.__ui.setupUi(self)
  49. self.__wsc = wsc
  50. p = self.__ui.contentEncoder.palette()
  51. p.setColor(self.backgroundRole(), QtCore.Qt.white)
  52. self.__ui.contentEncoder.setPalette(p)
  53. self.__ui.statusMessageWidget = QtWidgets.QLabel()
  54. self.__ui.statusMessageWidget.setText("Starting WSC...")
  55. self.__ui.statusMessageWidget.setAlignment(QtCore.Qt.AlignLeft)
  56. self.__ui.statusbar.addWidget(self.__ui.statusMessageWidget, 1)
  57. self.__org = 'IdeasX'
  58. self.__app = 'Workstation-Client'
  59. self.restoreSettings()
  60. #self.__ui.buttonSettings.clicked.connect(self.updateBrokerSettings)
  61. self.__ui.buttonBoxNetwork.button(QtWidgets.QDialogButtonBox.Apply).clicked.connect(self.updateBrokerSettings)
  62. self.__ui.buttonBoxNetwork.button(QtWidgets.QDialogButtonBox.Cancel).clicked.connect(self.restoreBrokerSettings)
  63. def setEncoderLayout(self, layout):
  64. self.__ui.contentEncoder.setLayout(layout)
  65. def setStatusBarMessage(self, msg):
  66. self.__ui.statusbar.clearMessage()
  67. self.__ui.statusMessageWidget.setText(msg)
  68. def setStatusBarUpdate(self, msg):
  69. self.__ui.statusbar.showMessage(msg)
  70. def saveSettings(self):
  71. # MainWindow Settings
  72. settings = QtCore.QSettings(self.__org, self.__app)
  73. settings.beginGroup("MainWindow")
  74. settings.setValue("size", self.size())
  75. settings.setValue("pos", self.pos())
  76. settings.endGroup()
  77. def updateBrokerSettings(self):
  78. print(self.__ui.networkBroker.text())
  79. self.__NetworkBroker = self.__ui.networkBroker.text()
  80. self.__LocalBroker = self.__ui.localBroker.text()
  81. self.__NetworkPort = int(self.__ui.networkPort.text())
  82. self.__LocalPort = int(self.__ui.localPort.text())
  83. settings = QtCore.QSettings(self.__org, self.__app)
  84. settings.beginGroup("Broker")
  85. settings.setValue('NetworkBroker', self.__NetworkBroker)
  86. settings.setValue('NetworkPort', self.__NetworkPort)
  87. settings.setValue('LocalBroker', self.__LocalBroker)
  88. settings.setValue('LocalPort', self.__LocalPort)
  89. settings.endGroup()
  90. self.saveSettings()
  91. self.__wsc.restartWSC()
  92. def restoreSettings(self):
  93. settings = QtCore.QSettings(self.__org, self.__app)
  94. settings.beginGroup("MainWindow")
  95. self.resize(settings.value("size", QtCore.QSize(525, 648)))
  96. self.move(settings.value("pos", QtCore.QPoint(0, 0)))
  97. settings.endGroup()
  98. settings.beginGroup("Broker")
  99. self.__NetworkBroker = settings.value('NetworkBroker', 'ideasx.duckdns.org')
  100. self.__NetworkPort = settings.value('NetworkPort', 1883)
  101. self.__LocalBroker = settings.value('LocalBroker', '10.42.0.1')
  102. self.__LocalPort = settings.value('LocalPort', 1883)
  103. settings.endGroup()
  104. self.__ui.networkBroker.setText(self.__NetworkBroker)
  105. self.__ui.networkPort.setText(str(self.__NetworkPort))
  106. self.__ui.localBroker.setText(self.__LocalBroker)
  107. self.__ui.localPort.setText(str(self.__LocalPort))
  108. settings.beginGroup('OTAServer')
  109. self.__OTAServer = settings.value('OTAServer', 'ideasx.duckdns.org')
  110. settings.endGroup()
  111. def restoreBrokerSettings(self):
  112. settings = QtCore.QSettings(self.__org, self.__app)
  113. settings.beginGroup("Broker")
  114. self.__NetworkBroker = settings.value('NetworkBroker', 'ideasx.duckdns.org')
  115. self.__NetworkPort = settings.value('NetworkPort', 1883)
  116. self.__LocalBroker = settings.value('LocalBroker', '10.42.0.1')
  117. self.__LocalPort = settings.value('LocalPort', 1883)
  118. settings.endGroup()
  119. self.__ui.networkBroker.setText(self.__NetworkBroker)
  120. self.__ui.networkPort.setText(str(self.__NetworkPort))
  121. self.__ui.localBroker.setText(self.__LocalBroker)
  122. self.__ui.localPort.setText(str(self.__LocalPort))
  123. def closeEvent(self, event):
  124. self.saveSettings()
  125. super(MainWindow, self).closeEvent(event)
  126. if __name__ == "__main__":
  127. app = QtWidgets.QApplication(sys.argv)
  128. app.setWindowIcon(QtGui.QIcon('icon/logo/ideasx.png'))
  129. wsc = WSC_Client()
  130. mainWindow = MainWindow(wsc)
  131. encoderManager = UIDeviceManager(EncoderUI, wsc)
  132. mainWindow.setEncoderLayout(encoderManager.returnLayout())
  133. wsc.encoderUpdate.connect(encoderManager.refreshDevices)
  134. wsc.networkStatus.connect(mainWindow.setStatusBarMessage)
  135. wsc.networkUpdate.connect(mainWindow.setStatusBarUpdate)
  136. wsc.StartWorkstationClient(gui=True)
  137. mainWindow.show()
  138. sys.exit(app.exec_())