Bug in der List.py bei Nutzung von setSelectionZoom

  • Hallo


    Eigentlich wollte ich in einer List (Sources) das setSelectionEnabled(False) ausführen, was offensichtlich nur geht, wenn selectionZoom = 1.0 ist.

    Daher hab ich dann vor dem setSelectionEnabled(False) noch ein setSelectionZoom(1.0) machen wollen, was allerdings zu einem GS führt (TypeError: changed() takes exactly 2 arguments (3 given))

    Die List wird im Skin über TemplatedMultiContent befüllt.


    Fehler (nur einfache Klammer bei self.changed):

    Der gleiche Fehler ist auch noch bei setMargin()

    Code
        def setSelectionZoom(self, zoom):
            if self.__selectionZoom != zoom:
                self.__selectionZoom = zoom
                self.changed(self.CHANGED_SPECIFIC, "selectionZoom")

    richtig (doppelte Klammer bei self.changed):

    Code
        def setSelectionZoom(self, zoom):
            if self.__selectionZoom != zoom:
                self.__selectionZoom = zoom
                self.changed((self.CHANGED_SPECIFIC, "selectionZoom"))

    Wenn das Problem behoben ist, kommt zwar kein GS mehr, aber self["list"].setSelectionZoom(x) hat noch keine Wirkung.


    Hab daher im Converter TemplatedMultiContent.py folgende Zeile ergänzt:

    self.selectionZoom = self.source.selectionZoom

    Mit dieser Zeile wird dann auch das setSelectionZoom gewechselt.

    Allerdings bleibt noch ein Problem.


    Die List kennt nach dem Öffnen des Screens ihren echten selectionZoom nicht, der aus dem Skin kommt und auch genutzt wird.

    Fragt man diesen nach dem Öffnen des Screens ab, ist dieser immer 1.0, obwohl in der List gemäß Skin z.B. 1.2 verwendet wird.


    Reichi

    Hab dazu mal wieder ein Test-Plugin gemacht, damit man das besser Testen kann :winking_face:


    Testanleitung:

    - Plugin öffnen und mit grün den aktuellen Wert für selectionZoom anzeigen (da kommt nach dem Öffnen des Screens immer 1.0, obwohl ja gerade 1.2 verwendet wird)

    - bei gelb bzw. blau sollte ein Fehler kommen (solange der obige Fehler mit der fehlenden Doppelklammer in der List.py noch vorhanden ist) - Fehler kommt nur, wenn es eine Änderung zum aktuellen Wert ist

    - bei gelb oder blau zeigt sich keine Änderung des selectionZoom (solange die obige Zeile im Converter TemplatedMultiContent.py nicht vorhanden ist)


    Wenn die List.py und die TemplatedMultiContent.py angepasst sind, passiert nach dem Öffnen bei "gelb" immer noch nichts, weil die List ja denkt, sie hat bereits selectionZoom=1.0 und führt es deshalb nicht aus.

    Wenn man da erst auf "blau" umschaltet und dann auf gelb funktioniert die Umschaltung.


    Irgendwie müsste man der List nach dem Öffnen des Screens noch den aktuellen Wert aus den skinAttributes mitteilen.

    Wenn ich das manuell über self["list"].master.master.skinAttributes abfrage und in self["list"].selectionZoom speichere, geht es.

    Aber das müsste doch von allein passieren :winking_face:

  • Fall es jemand interessiert, hab ich mal ein Test-Plugin erstellt, das zeigt, wie das eigentlich funktionieren sollte :winking_face:

    Dazu habe ich die o.g. Probleme etwas "unschön" umgangen.


    Mit der OK-Taste kann man dann auch das SelectionEnable wechseln, was wie schon gesagt nur funktioniert, wenn die List aktuell keinen SelectionZoom hat.

    (diesen also ggf. vorher mit "setZoom 1.0" deaktivieren)

  • Reichi

    Danke für das heutige Update :thumbs_up:

    Das setSelectionZoom geht jetzt.


    Nur 2 Sachen:

    1. im krogoth ist der Fehler mit der einfachen Klammer noch drin:

    git.opendreambox.org Git - enigma2.git/blob - usr/lib/enigma2/python/Components/Sources/List.py


    2. wenn ich mein Test-Plugin aus Post #1 öffne und zuerst mit "grün" die aktuelle selectionZoom anzeigen lasse, kommt immer noch 1.0, obwohl die List ja optisch den Wert 1.2 aus dem Skin verwendet.


    Ich glaube, da stört ein "break" in Zeile 84 in der Listbox.py

    git.opendreambox.org Git - enigma2.git/blob - usr/lib/enigma2/python/Components/Renderer/Listbox.py

    Dadurch springt die Attribute-Schleife bei gesetztem scrollbarMode raus bevor der Wert für das selectionZoom gelesen werden konnte.


    Wenn ich das "break" in Zeile 84 rausnehme, wird der passende Wert nach dem Öffnen des Plugins korrekt angezeigt. :winking_face:

    Im PluginAssistance ergibt sich dadurch seit dem heutigen Update auch ein Fehler bei der Anzeige der Bilder-Liste im unteren Bereich, wo jetzt immer nur das aktuelle Bild angezeigt wird, anstatt 6 nebeneinander.


    Mit deaktiviertem "break" funktioniert dann auch wieder die Bilderliste im PluginAssistance :winking_face:

    Gruß Sven (aka Dreamy)


    DM920 mit unstable OE2.5 DP
    One mit unstable OE2.6 DP

    Einmal editiert, zuletzt von Sven H ()

  • Du meinst in krogoth ist es noch so :winking_face: setMargin übrigens auch.

    Ja, natürlich :winking_face:

    Da war ich etwas verwirrt - ändere ich noch.

    Danke für den Hinweis :thumbs_up:


    Dort hat reichi doch auch überhaupt nichts geändert, das ist dort überhaupt noch nicht backported.

    Ok, das erklärt es, warum es im krogoth noch fehlerhaft ist :winking_face:

    Dachte nur, weil die List.py ja auch dort ein Update bekommen hatte.

    Aber dann war das wohl ne andere Sache, die da evtl. schon vorher geplant war.

    Gruß Sven (aka Dreamy)


    DM920 mit unstable OE2.5 DP
    One mit unstable OE2.6 DP

    Einmal editiert, zuletzt von Sven H () aus folgendem Grund: Ein Beitrag von Sven H mit diesem Beitrag zusammengefügt.

  • Danke :winking_face:


    Nur komisch dass das Zoom 1.2 aus dem Skin dennoch optisch genutzt wurde ???


    Dann muss doch die Umsetzung des SkinAttributes noch irgendwo anders stattfinden :winking_face:


    Zumal das „break“ da ja schon ne Weile so drin war.

    Gruß Sven (aka Dreamy)


    DM920 mit unstable OE2.5 DP
    One mit unstable OE2.6 DP

    • Offizieller Beitrag

    Nur komisch dass das Zoom 1.2 aus dem Skin dennoch optisch genutzt wurde ???


    Dann muss doch die Umsetzung des SkinAttributes noch irgendwo anders stattfinden

    Das zuweisen beim e2 Start übernimmt die skin.py, darum ist das so nicht aufgefallen.

    Der Renderer muss es aber auch lesen um bescheid zu wissen, genau das hat dann halt das break versaut...


    Mittelfristig werde ich der listbox aber passende "getter" verpassen damit man das ordentlich zurücklesen kann statt ständig alles mehrfach vorhalten zu müssen.

    Ich hatte nicht geplant, dass das mal so umfangreich wird drum ist es aktuell nicht ganz optimal gelöst.

  • Ah direkt die skin.py :winking_face:


    Ja, hab bei meiner Code-Recherche ja auch an mehreren Stellen die sinngleichen Variablen für zoom, selectionEnable ... gefunden.


    Zum Schluss wusste ich dann schon nicht mehr, welche wo was bewirkt :grinning_squinting_face:


    Manchmal zeigt sich eben erst später, was man im Code besser machen könnte.


    Aber so ist es doch dann erstmal nutzbar :winking_face:

    Gruß Sven (aka Dreamy)


    DM920 mit unstable OE2.5 DP
    One mit unstable OE2.6 DP