diff --git a/doc/revpioption.html b/doc/revpioption.html
index 0fc6641..031fc00 100644
--- a/doc/revpioption.html
+++ b/doc/revpioption.html
@@ -51,6 +51,9 @@ Methods
RevPiOption |
Init RevPiOption-Class. |
+| __state_replace_ios |
+Konfiguriert Werte für replace_io. |
+
| _changesdone |
Prüft ob sich die Einstellungen geändert haben. |
@@ -104,6 +107,17 @@ Init RevPiOption-Class.
None
+
+
+RevPiOption.__state_replace_ios
+__state_replace_ios(text)
+
+Konfiguriert Werte für replace_io.
+
+- text:
+-
+Ausgewählter Eintrag in Liste
+
RevPiOption._changesdone
diff --git a/eric-revpipycontrol.api b/eric-revpipycontrol.api
index 6de61a4..da05dce 100644
--- a/eric-revpipycontrol.api
+++ b/eric-revpipycontrol.api
@@ -116,6 +116,7 @@ revpilogfile._?8
revpilogfile.__author__?9
revpilogfile.__copyright__?9
revpilogfile.__license__?9
+revpioption.RevPiOption.__state_replace_ios?6(text)
revpioption.RevPiOption._changesdone?5()
revpioption.RevPiOption._changesdone_mqtt?5()
revpioption.RevPiOption._checkclose?5(event=None)
diff --git a/revpipycontrol.e4p b/revpipycontrol.e4p
index f8c2415..44232dd 100644
--- a/revpipycontrol.e4p
+++ b/revpipycontrol.e4p
@@ -1,14 +1,14 @@
-
+
en_US
66103e2eaf8a762f14d1fd51d8b1c9dcaf35a275
Python3
Console
- 0.7.2
+ 0.8.0
Sven Sager
akira@narux.de
@@ -387,6 +387,41 @@
+
+ BuiltinsChecker
+
+
+
+
+ chr
+
+
+
+ unichr
+
+
+
+ str
+
+
+
+ unicode
+
+
+
+
+
+ CopyrightAuthor
+
+
+
+
+
+ CopyrightMinFileSize
+
+
+ 0
+
DocstringType
@@ -403,7 +438,7 @@
ExcludeMessages
- E123,E226,E24
+ E123,E226,E24,C101
FixCodes
@@ -417,6 +452,12 @@
False
+
+ FutureChecker
+
+
+
+
HangClosing
@@ -429,6 +470,24 @@
+
+ LineComplexity
+
+
+ 15
+
+
+ LineComplexityScore
+
+
+ 10
+
+
+ MaxCodeComplexity
+
+
+ 10
+
MaxLineLength
@@ -453,6 +512,12 @@
False
+
+ ValidEncodings
+
+
+ latin-1, utf-8
+
diff --git a/revpipycontrol/revpioption.py b/revpipycontrol/revpioption.py
index bbe35fa..0fb117e 100644
--- a/revpipycontrol/revpioption.py
+++ b/revpipycontrol/revpioption.py
@@ -54,6 +54,13 @@ class RevPiOption(tkinter.Frame):
"mqttwrite_outputs": 0,
}
+ self.replace_ios_options = [
+ _("Do not use replace io file"),
+ _("Use static file from RevPiPyLoad"),
+ _("Use dynamic file from work directory"),
+ _("Give own path and filename"),
+ ]
+
self.mrk_xmlmodask = False
self.dorestart = False
@@ -61,6 +68,25 @@ class RevPiOption(tkinter.Frame):
self._createwidgets()
self._loadappdata()
+ def __state_replace_ios(self, text):
+ u"""Konfiguriert Werte für replace_io.
+ @param text: Ausgewählter Eintrag in Liste"""
+ selected_id = self.replace_ios_options.index(text)
+
+ # Preset value
+ if selected_id == 0:
+ self.var_replace_ios.set("")
+ elif selected_id == 1:
+ self.var_replace_ios.set("/etc/revpipyload/replace_ios.conf")
+ else:
+ self.var_replace_ios.set("replace_ios.conf")
+
+ # Set state of input field
+ self.txt_replace_ios["state"] = "normal" \
+ if self.xmlmodus >= 4 and \
+ selected_id == 3 \
+ else "disabled"
+
def _changesdone(self):
u"""Prüft ob sich die Einstellungen geändert haben.
@return True, wenn min. eine Einstellung geändert wurde"""
@@ -71,10 +97,13 @@ class RevPiOption(tkinter.Frame):
str(self.dc.get("autoreloaddelay", 5)) or
self.var_zexit.get() != self.dc.get("zeroonexit", 0) or
self.var_zerr.get() != self.dc.get("zeroonerror", 0) or
+ self.var_replace_ios.get() != self.dc.get("replace_ios", "") or
# TODO: rtlevel (0)
self.var_startpy.get() != self.dc.get("plcprogram", "none.py") or
self.var_startargs.get() != self.dc.get("plcarguments", "") or
self.var_pythonver.get() != self.dc.get("pythonversion", 3) or
+ self.var_plcworkdir_set_uid.get() != \
+ self.dc.get("plcworkdir_set_uid") or
self.var_slave.get() != self.dc.get("plcslave", 0) or
self.var_slaveacl.get() != self.dc.get("plcslaveacl", "") or
self.var_mqtton.get() != self.dc.get("mqtt", 0) or
@@ -133,6 +162,9 @@ class RevPiOption(tkinter.Frame):
# Gruppe Start/Stop
stst = tkinter.LabelFrame(self)
+ stst.columnconfigure(0, weight=1)
+ stst.columnconfigure(2, weight=1)
+ stst.columnconfigure(3, weight=1)
stst["text"] = _("Start / Stop behavior")
stst.grid(columnspan=2, pady=2, sticky="we")
@@ -141,82 +173,112 @@ class RevPiOption(tkinter.Frame):
self.var_reload_delay = tkinter.StringVar(stst)
self.var_zexit = tkinter.BooleanVar(stst)
self.var_zerr = tkinter.BooleanVar(stst)
+ self.var_replace_ios = tkinter.StringVar(stst)
+ self.var_replace_ios_options = tkinter.StringVar(stst)
+ # Row 0
ckb_start = tkinter.Checkbutton(stst)
ckb_start["text"] = _("Start program automatically")
ckb_start["state"] = xmlstate
ckb_start["variable"] = self.var_start
- ckb_start.grid(columnspan=2, **cpadw)
+ ckb_start.grid(columnspan=3, **cpadw)
+ # Row 1
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(columnspan=2, **cpadw)
+ ckb_reload.grid(columnspan=3, **cpadw)
+ # Row 2
lbl = tkinter.Label(stst)
lbl["text"] = _("Restart after n seconds of delay")
- lbl.grid(**cpadw)
+ lbl.grid(columnspan=2, **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)
+ sbx.grid(column=2, row=2, **cpade)
+ # Row 3
lbl = tkinter.Label(stst)
lbl["text"] = _("Set process image to NULL if program terminates...")
- lbl.grid(columnspan=2, **cpadw)
+ lbl.grid(columnspan=3, **cpadw)
+ # Row 4
ckb_zexit = tkinter.Checkbutton(stst, justify="left")
ckb_zexit["state"] = xmlstate
ckb_zexit["text"] = _("... successfully")
ckb_zexit["variable"] = self.var_zexit
- ckb_zexit.grid(**cpadw)
+ ckb_zexit.grid(column=1, **cpadw)
+ # Row 5
ckb_zerr = tkinter.Checkbutton(stst, justify="left")
ckb_zerr["state"] = xmlstate
ckb_zerr["text"] = _("... with errors")
ckb_zerr["variable"] = self.var_zerr
- ckb_zerr.grid(**cpadw)
+ ckb_zerr.grid(column=1, **cpadw)
+
+ # Row 6
+ lbl = tkinter.Label(stst)
+ lbl["text"] = _("Replace IO file:")
+ lbl.grid(row=6, **cpadw)
+
+ opt = tkinter.OptionMenu(
+ stst, self.var_replace_ios_options, *self.replace_ios_options,
+ command=self.__state_replace_ios
+ )
+ opt["state"] = xmlstate
+ opt["width"] = 30
+ opt.grid(row=6, column=1, columnspan=2, **cpadwe)
+
+ # Row 7
+ self.txt_replace_ios = tkinter.Entry(stst)
+ self.txt_replace_ios["state"] = xmlstate
+ self.txt_replace_ios["textvariable"] = self.var_replace_ios
+ self.txt_replace_ios.grid(column=1, columnspan=2, **cpadwe)
# Gruppe Programm
prog = tkinter.LabelFrame(self)
prog.columnconfigure(0, weight=1)
prog.columnconfigure(1, weight=1)
+ prog.columnconfigure(2, weight=1)
prog["text"] = _("PLC program")
prog.grid(columnspan=2, pady=2, sticky="we")
self.var_pythonver = tkinter.IntVar(prog)
self.var_startpy = tkinter.StringVar(prog)
self.var_startargs = tkinter.StringVar(prog)
+ self.var_plcworkdir_set_uid = tkinter.BooleanVar(prog)
self.var_pythonver.set(3)
+ # Row 0
lbl = tkinter.Label(prog)
lbl["text"] = _("Python version") + ":"
- lbl.grid(columnspan=2, row=0, **cpadw)
+ lbl.grid(row=0, **cpadw)
rbn = tkinter.Radiobutton(prog)
rbn["state"] = xmlstate
rbn["text"] = "Python2"
rbn["value"] = 2
rbn["variable"] = self.var_pythonver
- rbn.grid(column=0, row=1, **cpade)
+ rbn.grid(row=0, column=1, **cpade)
rbn = tkinter.Radiobutton(prog)
rbn["state"] = xmlstate
rbn["text"] = "Python3"
rbn["value"] = 3
rbn["variable"] = self.var_pythonver
- rbn.grid(column=1, row=1, **cpadw)
+ rbn.grid(row=0, column=2, **cpadw)
- # Row 2
+ # Row 1
lbl = tkinter.Label(prog)
lbl["text"] = _("Python PLC program name")
- lbl.grid(columnspan=2, **cpadw)
+ lbl.grid(columnspan=3, **cpadw)
- # Row 3
+ # Row 2
lst = self.xmlcli.get_filelist()
lst.sort()
if ".placeholder" in lst:
@@ -227,17 +289,23 @@ class RevPiOption(tkinter.Frame):
prog, self.var_startpy, *lst
)
opt_startpy["state"] = xmlstate
- opt_startpy.grid(columnspan=2, **cpadwe)
+ opt_startpy.grid(columnspan=3, **cpadwe)
- # Row 4
+ # Row 3
lbl = tkinter.Label(prog)
- lbl["text"] = _("Program arguments")
- lbl.grid(columnspan=2, **cpadw)
+ lbl["text"] = _("Program arguments:")
+ lbl.grid(**cpadw)
- # Row 5
txt = tkinter.Entry(prog)
txt["textvariable"] = self.var_startargs
- txt.grid(columnspan=2, **cpadw)
+ txt.grid(row=3, column=1, columnspan=2, **cpadwe)
+
+ # Row 4
+ ckb = tkinter.Checkbutton(prog)
+ ckb["text"] = _("Set write access to workdirectory")
+ ckb["state"] = xmlstate
+ ckb["variable"] = self.var_plcworkdir_set_uid
+ ckb.grid(columnspan=2, **cpadw)
# Gruppe Services
services = tkinter.LabelFrame(self)
@@ -338,11 +406,24 @@ class RevPiOption(tkinter.Frame):
self.var_reload_delay.set(self.dc.get("autoreloaddelay", 5))
self.var_zexit.set(self.dc.get("zeroonexit", 0))
self.var_zerr.set(self.dc.get("zeroonerror", 0))
+ replace_ios = self.dc.get("replace_ios", "")
+ self.var_replace_ios.set(replace_ios)
+ if replace_ios == "":
+ self.var_replace_ios_options.set(self.replace_ios_options[0])
+ elif replace_ios == "/etc/revpipyload/replace_ios.conf":
+ self.var_replace_ios_options.set(self.replace_ios_options[1])
+ elif replace_ios == "replace_ios.conf":
+ self.var_replace_ios_options.set(self.replace_ios_options[2])
+ else:
+ self.var_replace_ios_options.set(self.replace_ios_options[3])
+ self.__state_replace_ios(self.var_replace_ios_options.get())
# TODO: rtlevel (0)
self.var_startpy.set(self.dc.get("plcprogram", "none.py"))
self.var_startargs.set(self.dc.get("plcarguments", ""))
self.var_pythonver.set(self.dc.get("pythonversion", 3))
+ self.var_plcworkdir_set_uid.set(
+ self.dc.get("plcworkdir_set_uid", False))
# MQTT Einstellungen laden
self.var_mqtton.set(self.dc.get("mqtt", 0))
@@ -388,9 +469,12 @@ class RevPiOption(tkinter.Frame):
self.dc["plcprogram"] = self.var_startpy.get()
self.dc["plcarguments"] = self.var_startargs.get()
self.dc["pythonversion"] = self.var_pythonver.get()
+ self.dc["plcworkdir_set_uid"] = \
+ int(self.var_plcworkdir_set_uid.get())
# TODO: rtlevel (0)
self.dc["zeroonerror"] = int(self.var_zerr.get())
self.dc["zeroonexit"] = int(self.var_zexit.get())
+ self.dc["replace_ios"] = self.var_replace_ios.get()
# MQTT Settings
self.dc["mqtt"] = int(self.var_mqtton.get())
diff --git a/revpipycontrol/revpipycontrol.py b/revpipycontrol/revpipycontrol.py
index 437125c..770c423 100755
--- a/revpipycontrol/revpipycontrol.py
+++ b/revpipycontrol/revpipycontrol.py
@@ -5,7 +5,7 @@ u"""RevPiPyControl main program."""
__author__ = "Sven Sager"
__copyright__ = "Copyright (C) 2018 Sven Sager"
__license__ = "GPLv3"
-__version__ = "0.7.2"
+__version__ = "0.8.0"
import revpicheckclient
import revpidevelop
diff --git a/setup.py b/setup.py
index 751ea92..2fb1924 100644
--- a/setup.py
+++ b/setup.py
@@ -23,7 +23,7 @@ globsetup = {
"author_email": "akira@narux.de",
"url": "https://revpimodio.org/revpipyplc/",
"license": "LGPLv3",
- "version": "0.7.2",
+ "version": "0.8.0",
"name": "revpipycontrol",