[ TAG 525 ][28.08.2022] -Erfolgreich -IAP-20220403-20220403-1150
Ich beginne heute meine Arbeit an [ LVL-3 ] Elementen. Am 25.08.2022 habe ich mir Gedanken über die Filterstruktur gemacht. Dabei kam ich zum folgenden Ergebnis.
Der erste Filter [ CHK_000 ] sollte nur folgende Aufgabe besitzen. Es soll schauen wo die [si_width] und [si_height] Eigenschaften definiert sind. Wenn es im [ USERSTL ] nicht definiert ist, wird im [ DeFSTL ] geschaut. Sollte es im [ USERSTL ] und [ DeFSTL ] nicht vorhanden sein, wird [si_width] und [si_height] auf [ None ] gelassen.
Den Wert auf [ None ] zu lassen ist ein wichtiger Effekt, weil man auf diese Art und Weise kontrolliert, ob es sich um eine gezielte User-Eingabe handelt oder ob es vom System korrigiert wurde.
Um vom System oder User vergebenen Wert zu trennen ist dieser Effekt wichtig. Deswegen wird die [si_width] und [si_height] Eigenschaft ganz zum Schluss vergeben.
Die [ CHK_000 ] hat auch noch zusätzlich die Aufgabe, die vom USER und DeF vergebenen Werte, wenn sie nicht [ None ] sind, auf Gültigkeit zu überprüfen. Die Methode überprüft ob die Vergebenen Werte größer sind als der Mindestwert.
def CHK_000(k_, user_, def_, defv_, type_):
if type(user_[k_]) is not type_:
if type(def_[k_]) is type_:
if def_[k_] > defv_:
# Fall - 1
user_[k_] = def_[k_]
else:
# Fall - 2
def_[k_] = defv_
user_[k_] = defv_
elif user_[k_] < defv_:
# Fall - 3
user_[k_] = defv_
CHK_000(k_=si_width, user_=userstl, def_=defstl, defv_=defv_chldw, type_=int)
CHK_000(k_=si_height, user_=userstl, def_=defstl, defv_=defv_chldh, type_=int)
[ Fall 1 ]
Die Eigenschaft [si_width] oder [si_height] ist im [ USERSTL ] nicht vom User vergeben worden.
Jedoch wurden die Eigenschaften für das spezifische GUI-Element im [DeFSTL] vergeben.
Die im [DeFSTL] vergebenen Werte sind größer als die Mindestwerte [defv_]. Sind somit legitim und können in [USERSTL] übernommen werden.
Hierbei handelt es sich um eine Ausnahme, die sich auf die Eigenschaften [si_width] und [si_height] beziehen. Weil die Werte im [DeFSTL] vergeben worden sind, muss man davon ausgehen, dass der User die Werte für alle GUI-Elemente des selben Typs vergeben hat. Somit handelt es sich um eine Usereingabe und muss dem entsprechend in [USERSTL] übernommen werden.
[ Fall 2 ]
Im [ Fall 2 ] geht man davon aus, dass der User im [ DeFSTL ] einen Wert für alle GUI-Elemente des Ziel-Typs vergeben hat.
Der vergebene Wert ist jedoch nicht legitim. Der Wert ist kleiner als der Mindestwert [defv_].
Ich habe mich entschieden, dass in diesem Fall der Wert im [DeFSTL] auf den Mindestwert korrigiert wird und zusätzlich auch in [USERSTL] übernommen wird.
[ Fall 3 ]
Der User hat im [USERSTL] einen illegalen Wert vergeben. Der Wert ist kleiner als der Mindestwert. In diesem Fall wird der Mindestwert im [USERSTL] übernommen.
[ Allgemeines zu CHK_000 ]
Nach der [CHK_000] werden die Eigenschaften [si_width] und [si_height] entweder einen Mindestwert entsprechen oder sie sind [None], weil der User es weder im [DeFSTL] noch im [USERSTL] vergeben hat. In diesem Fall entscheidet, dann das System über die Breite und Höhe der GUI-Elemente.
Das PAS-System übernimmt diese Entscheidung nur, wenn die Eigenschaften [si_width] und [si_height] vom User nirgendswo definiert worden sind.
Die CHK_010 ist ähnlich aufgebaut, hat jedoch einen anderen Schwerpunkt. Der Unterschied besteht darin, dass die [CHK_000] sich nur auf die Eigenschaften [si_width] und [si_height] bezieht und ob sie vom User gültig vergeben worden sind oder nicht.
Der Filter [CHK_010] baut auf [CHK_000] auf und setzt dessen Überprüfungsroutinen voraus.
[ Ergänzung zu CHK_000 ]
Ich muss eine Ergänzung zu [ Fall 3 ] einführen. Bei dieser Ergänzung muss überprüft werden ob im [ DeFSTL ] ein gültiger Wert vergeben wurde. Wenn im [ DeFSTL ] ein gültiger Wert vergeben wurde, wird dieser übernommen.
def CHK_000(k_, user_, def_, defv_, type_):
if type(user_[k_]) is not type_:
if type(def_[k_]) is type_:
if def_[k_] > defv_:
# Fall 1
user_[k_] = def_[k_]
else:
# Fall 2
def_[k_] = defv_
user_[k_] = defv_
elif user_[k_] < defv_:
# Fall 3
if type(def_[k_]) is type_:
if def_[k_] > defv_:
# Fall 3.1
user_[k_] = def_[k_]
else:
# Fall 3.2
user_[k_] = defv_
else:
# Fall 3.3
user_[k_] = defv_
def CHK_010(k_1, k_2, k_3, mv_, user_, def_, defv_, type_):
if type(user_[k_1]) is not type_:
if type(def_[k_1]) is not type_:
user_[k_2] = defv_
else:
user_[k_2] = def_[k_1]
else:
user_[k_2] = user_[k_1]
user_[k_3] = mv_ + user_[k_2]
CHK_010(
k_1=si_width,
k_2=si_chldw,
k_3=si_chldmw,
mv_=userstl[si_ml]+userstl[si_mr],
user_=userstl,
def_=defstl,
defv_=defv_chldw,
type_=int
)
CHK_010(
k_1=si_height,
k_2=si_chldh,
k_3=si_chldmh,
mv_=userstl[si_mt] + userstl[si_mb],
user_=userstl,
def_=defstl,
defv_=defv_chldh,
type_=int
)
Bei der Filter-Methode [ CHK_010 ] geht es um folgende Eigenschaften.
- [ si_chldw ]
- [ si_chldmw ]
- --------------
- [ si_chldh ]
- [ si_chldmh ]
Zu diesen Zeitpunkt haben diese Eigenschaften alle einen [ None ] Wert. Jetzt muss überprüft werden, ob vom User die legitime Breite und Höhe vergeben worden sind. Wenn dies der Fall ist, werden diese Werte übernommen und später bei den Elternelementen in nächsten LVL-Bereichen benutzt.
Kommentare
Kommentar veröffentlichen