mirror of
https://github.com/naruxde/revpicommander.git
synced 2025-11-08 16:43:53 +01:00
Bugfix for simulator to prevent GUI crash after first use
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -153,7 +153,7 @@ class Ui_win_revpicommander(object):
|
||||
self.act_disconnect.setText(_translate("win_revpicommander", "&Disconnect"))
|
||||
self.act_disconnect.setShortcut(_translate("win_revpicommander", "Ctrl+X"))
|
||||
self.act_reset.setText(_translate("win_revpicommander", "Reset driver..."))
|
||||
self.act_simulator.setText(_translate("win_revpicommander", "Start local si&mulator..."))
|
||||
self.act_simulator.setText(_translate("win_revpicommander", "RevPi si&mulator..."))
|
||||
from . import ressources_rc
|
||||
|
||||
|
||||
|
||||
@@ -226,7 +226,7 @@
|
||||
</action>
|
||||
<action name="act_simulator">
|
||||
<property name="text">
|
||||
<string>Start local si&mulator...</string>
|
||||
<string>RevPi si&mulator...</string>
|
||||
</property>
|
||||
</action>
|
||||
</widget>
|
||||
|
||||
@@ -248,6 +248,7 @@ class ConnectionManager(QtCore.QThread):
|
||||
xml_funcs = sp.system.listMethods()
|
||||
xml_mode = sp.xmlmodus()
|
||||
except Exception as e:
|
||||
pi.logger.exception(e)
|
||||
self.connection_error_observed.emit(str(e))
|
||||
return False
|
||||
|
||||
@@ -322,10 +323,14 @@ class ConnectionManager(QtCore.QThread):
|
||||
|
||||
self.xml_funcs = ["psstart", "psstop", "ps_devices", "ps_inps", "ps_outs", "ps_values", "ps_setvalue"]
|
||||
|
||||
self.connection_established.emit()
|
||||
|
||||
except Exception as e:
|
||||
pi.logger.exception(e)
|
||||
self.connection_error_observed.emit(str(e))
|
||||
self._revpi_output = None
|
||||
self._revpi = None
|
||||
if settings.value("simulator/stop_remove", False, bool):
|
||||
remove(procimg)
|
||||
|
||||
return self._revpi is not None
|
||||
@@ -453,15 +458,23 @@ class ConnectionManager(QtCore.QThread):
|
||||
return None
|
||||
|
||||
@property
|
||||
def connected(self):
|
||||
def connected(self) -> bool:
|
||||
"""True if we have an active connection."""
|
||||
return self._cli is not None
|
||||
|
||||
@property
|
||||
def simulating(self):
|
||||
def simulating(self) -> bool:
|
||||
"""True, if simulating mode is running."""
|
||||
return self._revpi is not None
|
||||
|
||||
@property
|
||||
def simulating_configrsc(self) -> str:
|
||||
return self._revpi.configrsc if self._revpi else ""
|
||||
|
||||
@property
|
||||
def simulating_procimg(self) -> str:
|
||||
return self._revpi.procimg if self._revpi else ""
|
||||
|
||||
|
||||
cm = ConnectionManager()
|
||||
"""Clobal connection manager instance."""
|
||||
|
||||
@@ -70,6 +70,12 @@ class RevPiCommander(QtWidgets.QMainWindow, Ui_win_revpicommander):
|
||||
|
||||
def _set_gui_control_states(self):
|
||||
"""Setup states of actions and buttons."""
|
||||
if helper.cm.simulating:
|
||||
self.btn_plc_stop.setEnabled(True) # Stop simulator
|
||||
self.btn_plc_restart.setEnabled(True) # Reset simulator values
|
||||
self.btn_plc_debug.setEnabled(True)
|
||||
|
||||
else:
|
||||
connected = helper.cm.connected
|
||||
self.men_plc.setEnabled(connected)
|
||||
self.act_logs.setEnabled(connected)
|
||||
@@ -128,6 +134,12 @@ class RevPiCommander(QtWidgets.QMainWindow, Ui_win_revpicommander):
|
||||
pi.logger.debug("RevPiCommander.on_cm_connection_established")
|
||||
|
||||
self._set_gui_control_states()
|
||||
if helper.cm.simulating:
|
||||
self.txt_connection.setText("configrsc=\"{0}\", procimg=\"{1}\"".format(
|
||||
helper.cm.simulating_configrsc,
|
||||
helper.cm.simulating_procimg,
|
||||
))
|
||||
else:
|
||||
self.txt_connection.setText("{0} - {1}:{2}".format(
|
||||
helper.cm.name,
|
||||
helper.cm.address,
|
||||
@@ -194,13 +206,12 @@ class RevPiCommander(QtWidgets.QMainWindow, Ui_win_revpicommander):
|
||||
@QtCore.pyqtSlot()
|
||||
def on_act_simulator_triggered(self):
|
||||
"""Start the simulator function."""
|
||||
helper.cm.pyload_disconnect()
|
||||
|
||||
diag = Simulator(self)
|
||||
if diag.exec() != QtWidgets.QDialog.Accepted:
|
||||
diag.deleteLater()
|
||||
return
|
||||
|
||||
helper.cm.pyload_disconnect()
|
||||
configrsc_file = helper.settings.value("simulator/configrsc", "", str)
|
||||
procimg_file = helper.settings.value("simulator/procimg", "", str)
|
||||
|
||||
@@ -212,12 +223,6 @@ class RevPiCommander(QtWidgets.QMainWindow, Ui_win_revpicommander):
|
||||
"You can copy that from header textbox."
|
||||
).format(procimg_file, configrsc_file)
|
||||
)
|
||||
self.txt_connection.setText("configrsc=\"{0}\", procimg=\"{1}\"".format(configrsc_file, procimg_file))
|
||||
|
||||
# Stop button will disable simulating
|
||||
self.btn_plc_stop.setEnabled(True)
|
||||
self.btn_plc_restart.setEnabled(True)
|
||||
self.btn_plc_debug.setEnabled(True)
|
||||
else:
|
||||
pi.logger.error("Can not start simulator")
|
||||
QtWidgets.QMessageBox.critical(
|
||||
|
||||
Reference in New Issue
Block a user