diff --git a/doc/index.html b/doc/index.html index 7b328d6..aa29915 100644 --- a/doc/index.html +++ b/doc/index.html @@ -25,15 +25,15 @@ Modules revpiinfo +revpilegacy + + revpilogfile revpioption -revpioptionlegacy - - revpiplclist diff --git a/doc/revpicheckclient.html b/doc/revpicheckclient.html index 2069514..8fd8d2e 100644 --- a/doc/revpicheckclient.html +++ b/doc/revpicheckclient.html @@ -17,7 +17,7 @@ Classes - +
RevPiCheckClientBaut Fenstererweiterung für 'watch modus'.

@@ -28,7 +28,9 @@ Functions



RevPiCheckClient

- +

+Baut Fenstererweiterung für 'watch modus'. +

Derived from

tkinter.Frame diff --git a/doc/revpiinfo.html b/doc/revpiinfo.html index ebc2484..228cfc2 100644 --- a/doc/revpiinfo.html +++ b/doc/revpiinfo.html @@ -17,7 +17,7 @@ Classes - +
RevPiInfoBaut Frame für Programminformationen.

@@ -28,7 +28,9 @@ Functions



RevPiInfo

- +

+Baut Frame für Programminformationen. +

Derived from

tkinter.Frame diff --git a/doc/revpilegacy.html b/doc/revpilegacy.html new file mode 100644 index 0000000..5cd1125 --- /dev/null +++ b/doc/revpilegacy.html @@ -0,0 +1,166 @@ + + +revpilegacy + + + +

+revpilegacy

+ +

+Global Attributes

+ + +
_
+

+Classes

+ + + + + +
RevPiOptionOptionen für RevPiPyload vor 0.6.0.
+

+Functions

+ + +
None
+

+ +

RevPiOption

+

+Optionen für RevPiPyload vor 0.6.0. +

+

+Derived from

+tkinter.Frame +

+Class Attributes

+ + +
None
+

+Class Methods

+ + +
None
+

+Methods

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
RevPiOptionInit RevPiOption-Class.
_changesdonePrüft ob sich die Einstellungen geändert haben.
_checkclosePrüft ob Fenster beendet werden soll.
_createwidgetsErstellt Widgets.
_loadappdataLäd aktuelle Einstellungen vom RevPi.
_setappdataSpeichert geänderte Einstellungen auf RevPi.
askxmlonFragt Nuter, ob wirklicht abgeschaltet werden soll.
xmlmod2_tailPasst XML-Optionszugriff an.
xmlmod_tailPasst XML-Optionszugriff an.
+

+Static Methods

+ + +
None
+ +

+RevPiOption (Constructor)

+RevPiOption(master, xmlcli) +

+Init RevPiOption-Class. +

+
Returns:
+
+None +
+
+

+RevPiOption._changesdone

+_changesdone() +

+Prüft ob sich die Einstellungen geändert haben. +

+
Returns:
+
+True, wenn min. eine Einstellung geändert wurde +
+
+

+RevPiOption._checkclose

+_checkclose(event=None) +

+Prüft ob Fenster beendet werden soll. +

+
event
+
+tkinter-Event +
+
+

+RevPiOption._createwidgets

+_createwidgets() +

+Erstellt Widgets. +

+

+RevPiOption._loadappdata

+_loadappdata(refresh=False) +

+Läd aktuelle Einstellungen vom RevPi. +

+
refresh
+
+Wenn True, werden Einstellungen heruntergeladen. +
+
+

+RevPiOption._setappdata

+_setappdata() +

+Speichert geänderte Einstellungen auf RevPi. +

+
Returns:
+
+None +
+
+

+RevPiOption.askxmlon

+askxmlon() +

+Fragt Nuter, ob wirklicht abgeschaltet werden soll. +

+

+RevPiOption.xmlmod2_tail

+xmlmod2_tail() +

+Passt XML-Optionszugriff an. +

+

+RevPiOption.xmlmod_tail

+xmlmod_tail() +

+Passt XML-Optionszugriff an. +

+
Up
+
+ \ No newline at end of file diff --git a/doc/revpilogfile.html b/doc/revpilogfile.html index 3e0242b..1bf3eac 100644 --- a/doc/revpilogfile.html +++ b/doc/revpilogfile.html @@ -17,7 +17,7 @@ Classes - +
RevPiLogfileBaut Fenster für Logfiles.

@@ -28,7 +28,9 @@ Functions



RevPiLogfile

- +

+Baut Fenster für Logfiles. +

Derived from

tkinter.Frame diff --git a/doc/revpioption.html b/doc/revpioption.html index 2e2fd97..f6bfe29 100644 --- a/doc/revpioption.html +++ b/doc/revpioption.html @@ -17,7 +17,7 @@ Classes - +
RevPiOptionZeigt Optionen von RevPiPyLoad an.

@@ -28,7 +28,9 @@ Functions



RevPiOption

- +

+Zeigt Optionen von RevPiPyLoad an. +

Derived from

tkinter.Frame @@ -55,6 +57,9 @@ Methods _checkclose Prüft ob Fenster beendet werden soll. +_checkvalues +Prüft alle Werte auf Gültigkeit. + _createwidgets Erstellt Widgets. @@ -112,6 +117,17 @@ Prüft ob Fenster beendet werden soll.
tkinter-Event
+ +

+RevPiOption._checkvalues

+_checkvalues() +

+Prüft alle Werte auf Gültigkeit. +

+
Returns:
+
+True, wenn alle Werte gültig sind +

RevPiOption._createwidgets

diff --git a/doc/revpiprogram.html b/doc/revpiprogram.html index 4709afd..a739a06 100644 --- a/doc/revpiprogram.html +++ b/doc/revpiprogram.html @@ -17,7 +17,7 @@ Classes - +
RevPiProgramZeigt Programmfenster an.

@@ -28,7 +28,9 @@ Functions



RevPiProgram

- +

+Zeigt Programmfenster an. +

Derived from

tkinter.Frame diff --git a/doc/revpipycontrol.html b/doc/revpipycontrol.html index f1ea29b..77aa118 100644 --- a/doc/revpipycontrol.html +++ b/doc/revpipycontrol.html @@ -17,7 +17,7 @@ Classes - +
RevPiPyControlBaut Hauptprogramm auf.

@@ -28,7 +28,9 @@ Functions



RevPiPyControl

- +

+Baut Hauptprogramm auf. +

Derived from

tkinter.Frame diff --git a/revpipycontrol.api b/revpipycontrol.api index 40df179..4ce4859 100644 --- a/revpipycontrol.api +++ b/revpipycontrol.api @@ -53,6 +53,16 @@ revpiinfo.RevPiInfo._createwidgets?5(extended=False) revpiinfo.RevPiInfo.visitwebsite?4(event=None) revpiinfo.RevPiInfo?1(master, xmlcli, version) revpiinfo._?8 +revpilegacy.RevPiOption._changesdone?5() +revpilegacy.RevPiOption._checkclose?5(event=None) +revpilegacy.RevPiOption._createwidgets?5() +revpilegacy.RevPiOption._loadappdata?5(refresh=False) +revpilegacy.RevPiOption._setappdata?5() +revpilegacy.RevPiOption.askxmlon?4() +revpilegacy.RevPiOption.xmlmod2_tail?4() +revpilegacy.RevPiOption.xmlmod_tail?4() +revpilegacy.RevPiOption?1(master, xmlcli) +revpilegacy._?8 revpilogfile.RevPiLogfile._checkclose?5(event=None) revpilogfile.RevPiLogfile._createwidgets?5() revpilogfile.RevPiLogfile._load_log?5(textwidget, xmlcall, startposition, full) @@ -64,6 +74,7 @@ revpilogfile.RevPiLogfile?1(master, xmlcli) revpilogfile._?8 revpioption.RevPiOption._changesdone?5() revpioption.RevPiOption._checkclose?5(event=None) +revpioption.RevPiOption._checkvalues?5() revpioption.RevPiOption._createwidgets?5() revpioption.RevPiOption._loadappdata?5(refresh=False) revpioption.RevPiOption._setappdata?5() @@ -72,16 +83,6 @@ revpioption.RevPiOption.btn_slaveacl?4() revpioption.RevPiOption.btn_xmlacl?4() revpioption.RevPiOption?1(master, xmlcli) revpioption._?8 -revpioptionlegacy.RevPiOption._changesdone?5() -revpioptionlegacy.RevPiOption._checkclose?5(event=None) -revpioptionlegacy.RevPiOption._createwidgets?5() -revpioptionlegacy.RevPiOption._loadappdata?5(refresh=False) -revpioptionlegacy.RevPiOption._setappdata?5() -revpioptionlegacy.RevPiOption.askxmlon?4() -revpioptionlegacy.RevPiOption.xmlmod2_tail?4() -revpioptionlegacy.RevPiOption.xmlmod_tail?4() -revpioptionlegacy.RevPiOption?1(master, xmlcli) -revpioptionlegacy._?8 revpiplclist.RevPiPlcList._checkclose?5(event=None) revpiplclist.RevPiPlcList._createwidgets?5() revpiplclist.RevPiPlcList._saveappdata?5() diff --git a/revpipycontrol.e4p b/revpipycontrol.e4p index 7c939e0..fa98f89 100644 --- a/revpipycontrol.e4p +++ b/revpipycontrol.e4p @@ -1,7 +1,7 @@ - + en_US @@ -23,8 +23,8 @@ revpipycontrol/revpiprogram.py revpipycontrol/mytools.py revpipycontrol/revpiinfo.py - revpipycontrol/revpioptionlegacy.py revpipycontrol/aclmanager.py + revpipycontrol/revpilegacy.py diff --git a/revpipycontrol/aclmanager.py b/revpipycontrol/aclmanager.py index dbffdcd..d773182 100644 --- a/revpipycontrol/aclmanager.py +++ b/revpipycontrol/aclmanager.py @@ -376,6 +376,7 @@ class AclManager(ttk.Frame): def _save(self): u"""Übernimt die Änderungen.""" self.__oldacl = self.__acl.acl + self._checkclose() def _savefields(self): u"""Übernimmt neuen ACL Eintrag.""" diff --git a/revpipycontrol/revpicheckclient.py b/revpipycontrol/revpicheckclient.py index b32d970..303ad18 100644 --- a/revpipycontrol/revpicheckclient.py +++ b/revpipycontrol/revpicheckclient.py @@ -7,6 +7,7 @@ # # Thranks to: http://stackoverflow.com/questions/3085696/adding-a- # scrollbar-to-a-group-of-widgets-in-tkinter +u"""Fenstererweiterung für den 'watch modus'.""" import pickle import tkinter import tkinter.messagebox as tkmsg @@ -20,6 +21,8 @@ _ = gettrans() class RevPiCheckClient(tkinter.Frame): + u"""Baut Fenstererweiterung für 'watch modus'.""" + def __init__(self, master, xmlcli, xmlmode=0): """Instantiiert MyApp-Klasse.""" super().__init__(master) diff --git a/revpipycontrol/revpiinfo.py b/revpipycontrol/revpiinfo.py index 46e93ad..58393e5 100644 --- a/revpipycontrol/revpiinfo.py +++ b/revpipycontrol/revpiinfo.py @@ -5,6 +5,7 @@ # Webpage: https://revpimodio.org/revpipyplc/ # (c) Sven Sager, License: LGPLv3 # +u"""Programminformationen anzeigen.""" import tkinter import tkinter.font as tkf import webbrowser @@ -16,6 +17,8 @@ _ = gettrans() class RevPiInfo(tkinter.Frame): + u"""Baut Frame für Programminformationen.""" + def __init__(self, master, xmlcli, version): u"""Init RevPiLogfile-Class.""" self.master = master diff --git a/revpipycontrol/revpioptionlegacy.py b/revpipycontrol/revpilegacy.py similarity index 99% rename from revpipycontrol/revpioptionlegacy.py rename to revpipycontrol/revpilegacy.py index 7cda9ff..6c97f09 100644 --- a/revpipycontrol/revpioptionlegacy.py +++ b/revpipycontrol/revpilegacy.py @@ -5,6 +5,7 @@ # Webpage: https://revpimodio.org/revpipyplc/ # (c) Sven Sager, License: LGPLv3 # +u"""Alte Klassen laden hier, bevor sie entsorgt werden.""" import tkinter import tkinter.messagebox as tkmsg from mytools import gettrans @@ -15,6 +16,8 @@ _ = gettrans() class RevPiOption(tkinter.Frame): + u"""Optionen für RevPiPyload vor 0.6.0.""" + def __init__(self, master, xmlcli): u"""Init RevPiOption-Class. @return None""" diff --git a/revpipycontrol/revpilogfile.py b/revpipycontrol/revpilogfile.py index ef3a2bb..5666b4b 100644 --- a/revpipycontrol/revpilogfile.py +++ b/revpipycontrol/revpilogfile.py @@ -5,6 +5,7 @@ # Webpage: https://revpimodio.org/revpipyplc/ # (c) Sven Sager, License: LGPLv3 # +u"""Zeigt die Logfiles an.""" import tkinter from mytools import gettrans @@ -14,6 +15,8 @@ _ = gettrans() class RevPiLogfile(tkinter.Frame): + u"""Baut Fenster für Logfiles.""" + def __init__(self, master, xmlcli): u"""Init RevPiLogfile-Class.""" super().__init__(master) diff --git a/revpipycontrol/revpioption.py b/revpipycontrol/revpioption.py index 6f6aa16..cb772e4 100644 --- a/revpipycontrol/revpioption.py +++ b/revpipycontrol/revpioption.py @@ -5,6 +5,7 @@ # Webpage: https://revpimodio.org/revpipyplc/ # (c) Sven Sager, License: LGPLv3 # +u"""Optionsfenster.""" import tkinter import tkinter.messagebox as tkmsg from aclmanager import AclManager @@ -16,6 +17,8 @@ _ = gettrans() class RevPiOption(tkinter.Frame): + u"""Zeigt Optionen von RevPiPyLoad an.""" + def __init__(self, master, xmlcli): u"""Init RevPiOption-Class. @return None""" @@ -76,6 +79,19 @@ class RevPiOption(tkinter.Frame): if ask: self.master.destroy() + def _checkvalues(self): + u"""Prüft alle Werte auf Gültigkeit. + @return True, wenn alle Werte gültig sind""" + if not self.var_reload_delay.get().isdigit(): + tkmsg.showerror( + _("Error"), + _("The value of 'restart delay' ist not valid."), + parent=self.master + ) + return False + + return True + def _createwidgets(self): u"""Erstellt Widgets.""" self.master.wm_title(_("RevPi Python PLC Options")) @@ -102,17 +118,27 @@ class RevPiOption(tkinter.Frame): ckb_start["text"] = _("Start program automatically") ckb_start["state"] = xmlstate ckb_start["variable"] = self.var_start - ckb_start.grid(**cpadw) + ckb_start.grid(columnspan=2, **cpadw) ckb_reload = tkinter.Checkbutton(stst) ckb_reload["text"] = _("Restart program after exit") ckb_reload["state"] = xmlstate ckb_reload["variable"] = self.var_reload - ckb_reload.grid(**cpadw) + ckb_reload.grid(columnspan=2, **cpadw) + + lbl = tkinter.Label(stst) + lbl["text"] = _("Restart after n seconds of delay") + lbl.grid(**cpadw) + sbx = tkinter.Spinbox(stst) + sbx["to"] = 60 + sbx["from_"] = 5 + sbx["textvariable"] = self.var_reload_delay + sbx["width"] = 4 + sbx.grid(column=1, row=2, **cpade) lbl = tkinter.Label(stst) lbl["text"] = _("Set process image to NULL if program terminates...") - lbl.grid(**cpadw) + lbl.grid(columnspan=2, **cpadw) ckb_zexit = tkinter.Checkbutton(stst, justify="left") ckb_zexit["state"] = xmlstate @@ -263,6 +289,10 @@ class RevPiOption(tkinter.Frame): self._checkclose() return None + # Gültigkeitsprüfung + if not self._checkvalues(): + return None + ask = tkmsg.askyesnocancel( _("Question"), _("The settings are now saved on the Revolution Pi. \n\n" diff --git a/revpipycontrol/revpiprogram.py b/revpipycontrol/revpiprogram.py index 94e57f4..d15ae4b 100644 --- a/revpipycontrol/revpiprogram.py +++ b/revpipycontrol/revpiprogram.py @@ -5,6 +5,7 @@ # Webpage: https://revpimodio.org/revpipyplc/ # (c) Sven Sager, License: LGPLv3 # +u"""PLC Programm und Konfig hoch und runterladen.""" import gzip import os import pickle @@ -34,6 +35,8 @@ savefile = os.path.join(homedir, ".revpipyplc", "programpath.dat") class RevPiProgram(tkinter.Frame): + u"""Zeigt Programmfenster an.""" + def __init__(self, master, xmlcli, xmlmode, revpi): u"""Init RevPiProgram-Class. @return None""" diff --git a/revpipycontrol/revpipycontrol.py b/revpipycontrol/revpipycontrol.py index 1be69d1..e20eb7b 100755 --- a/revpipycontrol/revpipycontrol.py +++ b/revpipycontrol/revpipycontrol.py @@ -12,6 +12,7 @@ import revpicheckclient import revpiinfo import revpilogfile import revpioption +import revpilegacy import revpiplclist import revpiprogram import socket @@ -29,6 +30,8 @@ pycontrolversion = "0.6.0" class RevPiPyControl(tkinter.Frame): + u"""Baut Hauptprogramm auf.""" + def __init__(self, master=None): u"""Init RevPiPyControl-Class. @param master tkinter master""" @@ -40,6 +43,7 @@ class RevPiPyControl(tkinter.Frame): self.dict_conn = revpiplclist.get_connections() self.errcount = 0 self.revpiname = None + self.revpipyversion = [0, 0, 0] self.xmlfuncs = [] self.xmlmode = 0 @@ -203,6 +207,7 @@ class RevPiPyControl(tkinter.Frame): try: self.xmlfuncs = sp.system.listMethods() self.xmlmode = sp.xmlmodus() + self.revpipyversion = list(map(int, sp.version().split("."))) except: self.servererror() else: @@ -319,8 +324,16 @@ class RevPiPyControl(tkinter.Frame): win = tkinter.Toplevel(self) win.focus_set() win.grab_set() - self.tkoptions = \ - revpioption.RevPiOption(win, self.cli) + + # Gegenstelle prüfen und passende Optionen laden + print(self.revpipyversion) + if self.revpipyversion[0] == 0 and self.revpipyversion[1] < 6: + self.tkoptions = \ + revpilegacy.RevPiOption(win, self.cli) + else: + self.tkoptions = \ + revpioption.RevPiOption(win, self.cli) + self.wait_window(win) if self.tkoptions.dc is not None and self.tkoptions.dorestart: