diff --git a/src/revpicommander/aclmanager.py b/src/revpicommander/aclmanager.py index eabfa2b..ad18462 100644 --- a/src/revpicommander/aclmanager.py +++ b/src/revpicommander/aclmanager.py @@ -85,7 +85,7 @@ class AclManager(QtWidgets.QDialog, Ui_diag_aclmanager): ) ) == QtWidgets.QMessageBox.Yes if ask: - self.on_btn_add_pressed() + self.on_btn_add_clicked() if self.__check_load_error(): return @@ -252,11 +252,11 @@ class AclManager(QtWidgets.QDialog, Ui_diag_aclmanager): self.btn_remove.setEnabled(not self.__read_only and selected_rows > 0) @QtCore.pyqtSlot() - def on_btn_edit_pressed(self): + def on_btn_edit_clicked(self): self.__load_selected_entry() @QtCore.pyqtSlot() - def on_btn_remove_pressed(self): + def on_btn_remove_clicked(self): lst_selected_row_indexes = [mi.row() for mi in self.tb_acls.selectionModel().selectedRows(0)] if len(lst_selected_row_indexes) == 0: return @@ -355,7 +355,7 @@ class AclManager(QtWidgets.QDialog, Ui_diag_aclmanager): self._check_all_filled() @QtCore.pyqtSlot() - def on_btn_add_pressed(self): + def on_btn_add_clicked(self): """Add a new entry to acl table.""" ip_level = "{0}.{1}.{2}.{3},{4}".format( self.txt_ip_a.text(), @@ -366,7 +366,7 @@ class AclManager(QtWidgets.QDialog, Ui_diag_aclmanager): ) if self.__re_ipacl.match(ip_level): self.__table_add_acl(ip_level) - self.on_btn_clear_pressed() + self.on_btn_clear_clicked() else: QtWidgets.QMessageBox.critical( self, self.tr("Error"), self.tr( @@ -376,7 +376,7 @@ class AclManager(QtWidgets.QDialog, Ui_diag_aclmanager): ) @QtCore.pyqtSlot() - def on_btn_clear_pressed(self): + def on_btn_clear_clicked(self): """Clear entry widgets.""" self.txt_ip_a.clear() self.txt_ip_b.clear() diff --git a/src/revpicommander/backgroundworker.py b/src/revpicommander/backgroundworker.py index 9eb55b0..2eba87f 100644 --- a/src/revpicommander/backgroundworker.py +++ b/src/revpicommander/backgroundworker.py @@ -45,7 +45,7 @@ class BackgroundWorker(QtCore.QThread): while counter != 0: counter -= 1 self.msleep(250) - if self._check_cancel(): + if self.check_cancel(): break def run(self) -> None: @@ -54,7 +54,7 @@ class BackgroundWorker(QtCore.QThread): self.status_message.emit("Started dummy thread...") self.wait_interruptable(5) self.status_message.emit("Completed dummy thread.") - self._save_wait(3) + self.wait_interruptable(2) class WorkerDialog(QtWidgets.QDialog, Ui_diag_backgroundworker): diff --git a/src/revpicommander/debugcontrol.py b/src/revpicommander/debugcontrol.py index 1af0d17..6db2708 100644 --- a/src/revpicommander/debugcontrol.py +++ b/src/revpicommander/debugcontrol.py @@ -7,7 +7,7 @@ __license__ = "GPLv3" import pickle from xmlrpc.client import Binary, Fault, MultiCall, MultiCallIterator -from PyQt5 import QtCore, QtWidgets +from PyQt5 import QtCore, QtGui, QtWidgets from . import helper from . import proginit as pi @@ -76,6 +76,16 @@ class DebugControl(QtWidgets.QWidget, Ui_wid_debugcontrol): self.cbx_write.setEnabled(False) self.cbx_stay_on_top.setChecked(helper.settings.value("debugcontrol/stay_on_top", False, bool)) + self.shc_read_io = QtWidgets.QShortcut(QtGui.QKeySequence("F4"), self) + self.shc_read_io.setContext(QtCore.Qt.ApplicationShortcut) + self.shc_read_io.activated.connect(self.on_btn_read_io_pressed) + self.shc_refresh_io = QtWidgets.QShortcut(QtGui.QKeySequence("F5"), self) + self.shc_refresh_io.setContext(QtCore.Qt.ApplicationShortcut) + self.shc_refresh_io.activated.connect(self.on_btn_refresh_io_pressed) + self.shc_write_o = QtWidgets.QShortcut(QtGui.QKeySequence("F6"), self) + self.shc_write_o.setContext(QtCore.Qt.ApplicationShortcut) + self.shc_write_o.activated.connect(self.on_btn_write_o_clicked) + def __del__(self): pi.logger.debug("DebugControl.__del__") @@ -323,8 +333,6 @@ class DebugControl(QtWidgets.QWidget, Ui_wid_debugcontrol): dict_inps[position], dict_outs[position] ) win.device_closed.connect(self.on_device_closed) - win.do_read.connect(self.btn_refresh_io.pressed) - win.do_write.connect(self.btn_write_o.pressed) self.dict_windows[position] = win btn = QtWidgets.QPushButton(self.gb_devices) @@ -380,9 +388,9 @@ class DebugControl(QtWidgets.QWidget, Ui_wid_debugcontrol): self._work_values(refresh=True) @QtCore.pyqtSlot() - def on_btn_write_o_pressed(self): + def on_btn_write_o_clicked(self): """Write outputs.""" - pi.logger.debug("DebugControl.on_btn_write_o_pressed") + pi.logger.debug("DebugControl.on_btn_write_o_clicked") if not self.cbx_write.isChecked() and (helper.cm.xml_mode >= 3 or helper.cm.simulating): for win in self.dict_windows.values(): # type: DebugIos win.reset_label_colors() diff --git a/src/revpicommander/debugios.py b/src/revpicommander/debugios.py index 40ef2e0..c5a2561 100644 --- a/src/revpicommander/debugios.py +++ b/src/revpicommander/debugios.py @@ -18,8 +18,7 @@ class DebugIos(QtWidgets.QMainWindow, Ui_win_debugios): device_closed = QtCore.pyqtSignal(int) """This window was closed.""" - do_read = QtCore.pyqtSignal() - do_write = QtCore.pyqtSignal() + search_class = (QtWidgets.QLineEdit, QtWidgets.QDoubleSpinBox, QtWidgets.QCheckBox) def __init__(self, position: int, name: str, inputs: list, outputs: list, parent=None): @@ -48,11 +47,6 @@ class DebugIos(QtWidgets.QMainWindow, Ui_win_debugios): self._create_io(self.outputs, self.saw_out, False) self.style_sheet = "background-color: red;" - shc_read = QtWidgets.QShortcut(QtGui.QKeySequence("F5"), self) - shc_read.activated.connect(self.do_read) - shc_write = QtWidgets.QShortcut(QtGui.QKeySequence("F6"), self) - shc_write.activated.connect(self.do_write) - def __del__(self): pi.logger.debug("DebugIos.__del__") diff --git a/src/revpicommander/locale/revpicommander_de.qm b/src/revpicommander/locale/revpicommander_de.qm index 82d94a4..77e78b0 100644 Binary files a/src/revpicommander/locale/revpicommander_de.qm and b/src/revpicommander/locale/revpicommander_de.qm differ diff --git a/src/revpicommander/locale/revpicommander_de.ts b/src/revpicommander/locale/revpicommander_de.ts index caae61b..f26bef3 100644 --- a/src/revpicommander/locale/revpicommander_de.ts +++ b/src/revpicommander/locale/revpicommander_de.ts @@ -75,25 +75,25 @@ Nicht gespeicherte Änderunen gehen verloren Already in list... - Bereits in Liste... + Bereits in Liste... Success - Erfolgreich + Erfolgreich The connection with the name '{0}' was successfully saved to folder '{1}' in your connections. - Die Verbindung mit dem Namen '{0}' wurde erfolgreich im Ordner '{1}' gespeichert. + Die Verbindung mit dem Namen '{0}' wurde erfolgreich im Ordner '{1}' gespeichert. The selected Revolution Pi is already saved in your connection list as '{0}'. - Der ausgewählte RevPi ist schon in der Verbindungsliste als '{0}'. + Der ausgewählte RevPi ist schon in der Verbindungsliste als '{0}'. - + over SSH über SSH @@ -101,62 +101,62 @@ Nicht gespeicherte Änderunen gehen verloren ConnectionManager - + SIMULATING SIMULATION - + NOT CONNECTED NICHT VERBUNDEN - + SERVER ERROR SERVER FEHLER - + RUNNING LÄUFT - + PLC FILE NOT FOUND SPS PROGRAMM NICHT GEFUNDEN - + NOT RUNNING (NO STATUS) LÄUFT NICHT (KEIN STATUS) - + PROGRAM KILLED PROGRAMM GETÖTET - + PROGRAM TERMED PROGRAMM BEENDET - + NOT RUNNING LÄUFT NICHT - + FINISHED WITH CODE {0} BEENDET MIT CODE {0} - + Error Fehler - + The combination of username and password was rejected from the SSH server. Try again. @@ -165,7 +165,7 @@ Try again. Bitte erneut versuchen. - + Could not establish a SSH connection to server: {0} @@ -174,7 +174,7 @@ Bitte erneut versuchen. {0} - + Can not connect to RevPi XML-RPC Service! This could have the following reasons: The RevPi is not online, the XML-RPC service is not running / bind to localhost or the ACL permission is not set for your IP!!! @@ -190,34 +190,34 @@ Führe 'sudo revpipyload_secure_installation' auf dem Revolution Pi au DebugControl - + Driver reset for piControl detected. Treiberneustart in piCtory erkannt. - + Error while getting values from Revolution Pi. Fehler bei Werteempfang von RevPi. - + Auto update values... Werte automatisch aktualisiert... - + Values updated... Werte aktualisiert... - + Error set value of device '{0}' Output '{1}': {2} Fehler beim Setzen des Ausgangs '{1}' auf Modul '{0}': {2} - + Error Fehler @@ -225,32 +225,32 @@ Führe 'sudo revpipyload_secure_installation' auf dem Revolution Pi au DebugIos - + signed - + big_endian - + as text - + as number - + Can not use format text Formatierung nicht möglich - + Can not convert bytes {0} to a text for IO '{1}'. Switch to number format instead! Kann bytes {0} für '{1}' nicht in Text konvertieren. Wechseln Sie auf Nummernformat! @@ -683,22 +683,22 @@ Ungesicherte Änderungen gehen verloren. RevPiProgram - + Error Fehler - + You have to select a start program, before uploading the settings. Es muss erst ein Startprogramm gewählt werden. - + Question Frage - + The settings will be set on the Revolution Pi now. If you made changes on the 'PCL Program' section, your plc program will restart now! @@ -707,245 +707,245 @@ If you made changes on the 'PCL Program' section, your plc program wil Sollte es Änderungen in dem SPS Programmabschnitt geben, wird das SPS Programm neu gestartet! - + The settings could not be saved on the Revolution Pi! Try to save the values one mor time and check the log files of RevPiPyLoad if the error rises again. Die Einstellungen konnten nicht auf dem Revolution Pi gespeichert werden! Versuche es erneut und prüfe die Logdateien von RevPiPyLoad, wenn der Fehler erneut auftritt. - + Do you really want to quit? Unsaved changes will be lost. Soll das Fenster wirklich geschlossen werden? Ungesicherte Änderungen gehen verloren. - + Reset driver... Treiber zurücksetzen... - + Reset piControl driver after successful uploading new piCtory configuration? The process image will be interrupted for a short time! Soll piControl nach dem erfolgreichen Hochladen der neuen piCtory Konfiguration zurückgesetzt werden? Das Prozessabbild wird kurzzeitig nicht verfügbar sein! - + Got an network error while send data to Revolution Pi. Please try again. Beim Senden der Daten an den Revolution Pi trat ein Netzwerkfehler auf. Versuche es erneut. - + Success Erfolgreich - + The transfer of the piCtory configuration and the reset of piControl have been successfully executed. Die piCtory Übertragung und der Reset von piControl wurden erfolgreich durchgeführt. - + The piCtory configuration was successfully transferred. Die piCtory Konfiguration wurde erfolgreich übertragen. - + Can not process the transferred file. Kann die Übertragene Datei nicht verarbeiten. - + Can not find main elements in piCtory file. Konnte piCtory Struktur nicht erkennen. - + Contained devices could not be found on Revolution Pi. The configuration may be from a newer piCtory version! Enthaltene Module können auf dem Revolution Pi nicht gefunden werden. Die Konfiguraiton könnte von einer neueren piCtory Version stammen! - + Could not load RAP catalog on Revolution Pi. Kann RAP Katalog auf dem Revolution Pi nicht laden. - + The piCtory configuration could not be written on the Revolution Pi. Die piCtory Konfiguration konnte nicht auf dem Revolution Pi geschrieben werden. - + Warning Warnung - + The piCtroy configuration has been saved successfully. An error occurred on piControl reset! Die piCtory Konfiguration wurde erfolgreich hochgeladen. Es trat jedoch ein Fehler beim Zurücksetzen von piControl auf! - + Save ZIP archive... ZIP Archiv speichern... - + ZIP archive (*.zip);;All files (*.*) ZIP Archive (*.zip);;Alle Dateien (*.*) - + Save TGZ archive... TGZ Archiv speichern... - + TGZ archive (*.tgz);;All files (*.*) TAR Archive (*.tgz);;Alle Dateien (*.*) - + Could not load PLC program from Revolution Pi. Kann SPS Programm nicht vom Revolution Pi laden. - + Coud not save the archive or extract the files! Please retry. Konnte das Archiv nicht speichern oder extrahieren! Versuche es erneut. - + Transfer successfully completed. Übertragung erfolgreich abgeschlossen. - + Upload content of ZIP archive... ZIP Archiv hochladen... - + The selected file ist not a ZIP archive. Die ausgewählte Datei ist kein ZIP Archiv. - + Upload content of TAR archive... TAR Archiv hochladen... - + TAR archive (*.tgz);;All files (*.*) TAR Archive (*.tgz);;Alle Dateien (*.*) - + The selected file ist not a TAR archive. Die ausgewählte Datei ist kein TAR Archiv. - + No files to upload... Keine Dateien zum Hochladen... - + Found no files to upload in given location or archive. Konnte keine Dateien in der Quelle zum Hochladen finden. - + There was an error deleting the files on the Revolution Pi. Upload aborted! Please try again. Beim Löschen der Dateien auf dem Revolution Pi ist ein Fehler aufgetreten. Hochladen abgebrochen! Versuche es erneut. - + The PLC program was transferred successfully. Das SPS Programm wurde erfolgreich übertragen. - + Information Information - + Could not find the selected PLC start program in uploaded files. This is not an error, if the file was already on the Revolution Pi. Check PLC start program field Konnte eingestelltes SPS Starprogramm in hochgeladenen Dateien nicht finden. Dies ist kein Fehler, wenn das SPS Startprogramm bereits auf dem Rev Pi ist. Prüfe SPS Programm Einstellungen - + There is no piCtory configuration in this archive. Kann keine piCtory Konfiguration im Archiv finden. - + The Revolution Pi could not process some parts of the transmission. Der Revolution Pi konnte Teile der Übertragung nicht verarbeiten. - + Errors occurred during transmission. Fehler bei Übertragung aufgetreten. - + Save piCtory file... piCtory Datei speichern... - + piCtory file (*.rsc);;All files (*.*) piCtory Datei (*.rsc);;Alle Dateien (*.*) - + Could not load piCtory file from Revolution Pi. Kann piCtory Konfiguration nicht vom Revolution Pi laden. - + piCtory configuration successfully loaded and saved to: {0}. piCtory Konfiguration erfolgreich geladen und gespeichert als: {0}. - + Upload piCtory file... piCtory datei hochladen... - + Save piControl file... piCtory Datei speichern... - + Process image file (*.img);;All files (*.*) Processabbild (*.img);;Alle Dateien (*.*) - + Could not load process image from Revolution Pi. Kann Prozessabbild von Revolution Pi nicht laden. - + Process image successfully loaded and saved to: {0}. Prozessabbild erfolgreich geladen und gespeichert als: @@ -1693,43 +1693,61 @@ applicable law. Read all IO values and discard local changes (F4) - Alle EA Werte lesen und lokale Änderungen überschreiben (F4) + Alle EA Werte lesen und lokale Änderungen überschreiben (F4) - + Read &all IO values &Alle EA Werte lesen Refresh all IO values which are locally not changed (F5) - Alle EA Werte aktualisieren, die lokal nicht geändert sind (F5) + Alle EA Werte aktualisieren, die lokal nicht geändert sind (F5) - + &Refresh unchanged IOs Unve&ränderte EAs lesen - + Write locally changed output values to process image (F6) Schreibe lokal veränderte Ausgangswerte in das Prozessabbild (F6) - + &Write changed outputs Ausgänge &schreiben - + &Auto refresh values &Automatisch aktualisieren - + and write outputs und Ausgänge schreiben + + + Read all IO values and discard local changes (F4) + +Hold this button pressed and it will refresh the IOs every 200 ms. + Alle EA Werte lesen und lokale Änderungen überschreiben (F4) + +Wird der Button gehalten, aktualisieren sich die EAs alle 200 ms. + + + + Refresh all IO values which are locally not changed (F5) + +Hold this button pressed and it will refresh the IOs every 200 ms. + Alle EA Werte aktualisieren, die lokal nicht geändert sind (F5) + +Wird der Button gehalten, aktualisieren sich die EAs alle 200 ms. + win_debugios diff --git a/src/revpicommander/revpicommander.py b/src/revpicommander/revpicommander.py index 5fbeed5..5457be0 100644 --- a/src/revpicommander/revpicommander.py +++ b/src/revpicommander/revpicommander.py @@ -54,7 +54,7 @@ class RevPiCommander(QtWidgets.QMainWindow, Ui_win_revpicommander): self.win_files = RevPiFiles(self) self.win_log = revpilogfile.RevPiLogfile(self) - self.btn_plc_logs.pressed.connect(self.on_act_logs_triggered) + self.btn_plc_logs.clicked.connect(self.on_act_logs_triggered) helper.cm.connection_disconnected.connect(self.on_cm_connection_disconnected) helper.cm.connection_disconnecting.connect(self.on_cm_connection_disconnecting) diff --git a/src/revpicommander/revpifiles.py b/src/revpicommander/revpifiles.py index d6a6f8e..8f53aba 100644 --- a/src/revpicommander/revpifiles.py +++ b/src/revpicommander/revpifiles.py @@ -207,7 +207,7 @@ class RevPiFiles(QtWidgets.QMainWindow, Ui_win_files): elif item.type() == NodeType.FILE: item.setSelected(value) - def __item_selection_changed(self, tree_view: QtWidgets.QTreeView): + def __item_selection_changed(self, tree_view: QtWidgets.QTreeWidget): """Manager vor item selection of three views.""" item = tree_view.currentItem() if item is None: @@ -434,14 +434,14 @@ class RevPiFiles(QtWidgets.QMainWindow, Ui_win_files): # endregion # # # # # @QtCore.pyqtSlot() - def on_btn_all_pressed(self): - pi.logger.debug("RevPiFiles.on_btn_all_pressed") + def on_btn_all_clicked(self): + pi.logger.debug("RevPiFiles.on_btn_all_clicked") self._do_my_job(True) self.file_list_revpi() @QtCore.pyqtSlot() - def on_btn_select_local_pressed(self): - pi.logger.debug("RevPiFiles.on_btn_select_pressed") + def on_btn_select_local_clicked(self): + pi.logger.debug("RevPiFiles.on_btn_select_clicked") diag_folder = QtWidgets.QFileDialog( self, self.tr("Select folder..."), @@ -471,26 +471,26 @@ class RevPiFiles(QtWidgets.QMainWindow, Ui_win_files): self._load_files_local(False) @QtCore.pyqtSlot() - def on_btn_refresh_local_pressed(self): - pi.logger.debug("RevPiFiles.on_btn_refresh_pressed") + def on_btn_refresh_local_clicked(self): + pi.logger.debug("RevPiFiles.on_btn_refresh_clicked") self._load_files_local(False) @QtCore.pyqtSlot() - def on_btn_refresh_revpi_pressed(self): - pi.logger.debug("RevPiFiles.on_btn_refresh_revpi_pressed") + def on_btn_refresh_revpi_clicked(self): + pi.logger.debug("RevPiFiles.on_btn_refresh_revpi_clicked") self._load_files_revpi(False) @QtCore.pyqtSlot() - def on_btn_to_right_pressed(self): + def on_btn_to_right_clicked(self): """Upload selected files to revolution pi.""" - pi.logger.debug("RevPiFiles.on_btn_to_right_pressed") + pi.logger.debug("RevPiFiles.on_btn_to_right_clicked") self._do_my_job(False) self._load_files_revpi(True) @QtCore.pyqtSlot() - def on_btn_to_left_pressed(self): + def on_btn_to_left_clicked(self): """Download selected file.""" - pi.logger.debug("RevPiFiles.on_btn_to_left_pressed") + pi.logger.debug("RevPiFiles.on_btn_to_left_clicked") override = None for item in self.tree_files_revpi.selectedItems(): @@ -535,9 +535,9 @@ class RevPiFiles(QtWidgets.QMainWindow, Ui_win_files): self._load_files_local() @QtCore.pyqtSlot() - def on_btn_delete_revpi_pressed(self): + def on_btn_delete_revpi_clicked(self): """Remove selected files from working directory on revolution pi.""" - pi.logger.debug("RevPiFiles.btn_delete_revpi_pressed") + pi.logger.debug("RevPiFiles.btn_delete_revpi_clicked") lst_delete = [] for item in self.tree_files_revpi.selectedItems(): diff --git a/src/revpicommander/revpilogfile.py b/src/revpicommander/revpilogfile.py index 271e9a9..4edea13 100644 --- a/src/revpicommander/revpilogfile.py +++ b/src/revpicommander/revpilogfile.py @@ -166,12 +166,12 @@ class RevPiLogfile(QtWidgets.QMainWindow, Ui_win_revpilogfile): self.th_data.resume() @QtCore.pyqtSlot() - def on_btn_daemon_pressed(self): + def on_btn_daemon_clicked(self): """Clear the daemon log view.""" self.txt_daemon.clear() @QtCore.pyqtSlot() - def on_btn_app_pressed(self): + def on_btn_app_clicked(self): """Clear the app log view.""" self.txt_app.clear() diff --git a/src/revpicommander/revpiplclist.py b/src/revpicommander/revpiplclist.py index 49210ff..d8ac40e 100644 --- a/src/revpicommander/revpiplclist.py +++ b/src/revpicommander/revpiplclist.py @@ -123,7 +123,7 @@ class RevPiPlcList(QtWidgets.QDialog, Ui_diag_connections): :return: Dialog status """ self._load_settings() - self.on_btn_add_pressed(presets) + self.on_btn_add_clicked(presets) return super(RevPiPlcList, self).exec() @QtCore.pyqtSlot(QtWidgets.QAbstractButton) @@ -231,15 +231,15 @@ class RevPiPlcList(QtWidgets.QDialog, Ui_diag_connections): self.cbb_folder.setCurrentText(current.text(0) if current else "") @QtCore.pyqtSlot() - def on_btn_up_pressed(self): + def on_btn_up_clicked(self): self._move_item(-1) @QtCore.pyqtSlot() - def on_btn_down_pressed(self): + def on_btn_down_clicked(self): self._move_item(1) @QtCore.pyqtSlot() - def on_btn_delete_pressed(self): + def on_btn_delete_clicked(self): """Remove selected entry.""" item = self.tre_connections.currentItem() if item and item.type() == NodeType.CON: @@ -253,7 +253,7 @@ class RevPiPlcList(QtWidgets.QDialog, Ui_diag_connections): self._edit_state() @QtCore.pyqtSlot() - def on_btn_add_pressed(self, settings_preset: RevPiSettings = None): + def on_btn_add_clicked(self, settings_preset: RevPiSettings = None): """Create new element.""" settings = settings_preset or RevPiSettings() new_item = QtWidgets.QTreeWidgetItem(NodeType.CON) diff --git a/src/revpicommander/revpiprogram.py b/src/revpicommander/revpiprogram.py index e9ee879..1749edf 100644 --- a/src/revpicommander/revpiprogram.py +++ b/src/revpicommander/revpiprogram.py @@ -318,7 +318,7 @@ class RevPiProgram(QtWidgets.QDialog, Ui_diag_program): self.cbx_pictory.setEnabled(index >= 1) @QtCore.pyqtSlot() - def on_btn_program_download_pressed(self): + def on_btn_program_download_clicked(self): """Download plc program from Revolution Pi.""" if not helper.cm.connected: return @@ -396,7 +396,7 @@ class RevPiProgram(QtWidgets.QDialog, Ui_diag_program): ) @QtCore.pyqtSlot() - def on_btn_program_upload_pressed(self): + def on_btn_program_upload_clicked(self): """Upload plc program to Revolution Pi.""" if not helper.cm.connected: return @@ -589,7 +589,7 @@ class RevPiProgram(QtWidgets.QDialog, Ui_diag_program): # region # REGION: Control files @QtCore.pyqtSlot() - def on_btn_pictory_download_pressed(self): + def on_btn_pictory_download_clicked(self): """Download piCtory configuration.""" if not helper.cm.connected: return @@ -630,7 +630,7 @@ class RevPiProgram(QtWidgets.QDialog, Ui_diag_program): ) @QtCore.pyqtSlot() - def on_btn_pictory_upload_pressed(self): + def on_btn_pictory_upload_clicked(self): if not helper.cm.connected: return @@ -650,7 +650,7 @@ class RevPiProgram(QtWidgets.QDialog, Ui_diag_program): self._upload_pictory(diag_open.selectedFiles()[0]) @QtCore.pyqtSlot() - def on_btn_procimg_download_pressed(self): + def on_btn_procimg_download_clicked(self): """Download process image.""" if not helper.cm.connected: return diff --git a/src/revpicommander/ui/debugcontrol_ui.py b/src/revpicommander/ui/debugcontrol_ui.py index a742012..5a8b3e2 100644 --- a/src/revpicommander/ui/debugcontrol_ui.py +++ b/src/revpicommander/ui/debugcontrol_ui.py @@ -36,15 +36,18 @@ class Ui_wid_debugcontrol(object): self.verticalLayout = QtWidgets.QVBoxLayout(self.gb_control) self.verticalLayout.setObjectName("verticalLayout") self.btn_read_io = QtWidgets.QPushButton(self.gb_control) - self.btn_read_io.setShortcut("F4") + self.btn_read_io.setAutoRepeat(True) + self.btn_read_io.setAutoRepeatDelay(100) + self.btn_read_io.setAutoRepeatInterval(200) self.btn_read_io.setObjectName("btn_read_io") self.verticalLayout.addWidget(self.btn_read_io) self.btn_refresh_io = QtWidgets.QPushButton(self.gb_control) - self.btn_refresh_io.setShortcut("F5") + self.btn_refresh_io.setAutoRepeat(True) + self.btn_refresh_io.setAutoRepeatDelay(100) + self.btn_refresh_io.setAutoRepeatInterval(200) self.btn_refresh_io.setObjectName("btn_refresh_io") self.verticalLayout.addWidget(self.btn_refresh_io) self.btn_write_o = QtWidgets.QPushButton(self.gb_control) - self.btn_write_o.setShortcut("F6") self.btn_write_o.setObjectName("btn_write_o") self.verticalLayout.addWidget(self.btn_write_o) self.cbx_refresh = QtWidgets.QCheckBox(self.gb_control) @@ -65,9 +68,13 @@ class Ui_wid_debugcontrol(object): self.gb_devices.setTitle(_translate("wid_debugcontrol", "Revolution Pi devices")) self.cbx_stay_on_top.setText(_translate("wid_debugcontrol", "Open to stay on top")) self.gb_control.setTitle(_translate("wid_debugcontrol", "IO Control")) - self.btn_read_io.setToolTip(_translate("wid_debugcontrol", "Read all IO values and discard local changes (F4)")) + self.btn_read_io.setToolTip(_translate("wid_debugcontrol", "Read all IO values and discard local changes (F4)\n" +"\n" +"Hold this button pressed and it will refresh the IOs every 200 ms.")) self.btn_read_io.setText(_translate("wid_debugcontrol", "Read &all IO values")) - self.btn_refresh_io.setToolTip(_translate("wid_debugcontrol", "Refresh all IO values which are locally not changed (F5)")) + self.btn_refresh_io.setToolTip(_translate("wid_debugcontrol", "Refresh all IO values which are locally not changed (F5)\n" +"\n" +"Hold this button pressed and it will refresh the IOs every 200 ms.")) self.btn_refresh_io.setText(_translate("wid_debugcontrol", "&Refresh unchanged IOs")) self.btn_write_o.setToolTip(_translate("wid_debugcontrol", "Write locally changed output values to process image (F6)")) self.btn_write_o.setText(_translate("wid_debugcontrol", "&Write changed outputs")) diff --git a/ui_dev/debugcontrol.ui b/ui_dev/debugcontrol.ui index ca3fd6e..f7a429a 100644 --- a/ui_dev/debugcontrol.ui +++ b/ui_dev/debugcontrol.ui @@ -53,26 +53,42 @@ - Read all IO values and discard local changes (F4) + Read all IO values and discard local changes (F4) + +Hold this button pressed and it will refresh the IOs every 200 ms. Read &all IO values - - F4 + + true + + + 100 + + + 200 - Refresh all IO values which are locally not changed (F5) + Refresh all IO values which are locally not changed (F5) + +Hold this button pressed and it will refresh the IOs every 200 ms. &Refresh unchanged IOs - - F5 + + true + + + 100 + + + 200 @@ -84,9 +100,6 @@ &Write changed outputs - - F6 -