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()
def setSelectionZoom(self, zoom):
if self.__selectionZoom != zoom:
self.__selectionZoom = zoom
self.changed(self.CHANGED_SPECIFIC, "selectionZoom")
richtig (doppelte Klammer bei self.changed):
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
def setTemplate(self):
if self.source is not None:
buildfunc = self.source.buildfunc
if buildfunc != self.active_buildfunc:
self.active_buildfunc = buildfunc
self.content.setBuildFunc(buildfunc)
selection_enabled = self.source.selection_enabled
if selection_enabled != self.selectionEnabled:
self.selectionEnabled = selection_enabled
self.content.setSelectionEnable(selection_enabled)
+ self.selectionZoom = self.source.selectionZoom
style = self.source.style
if style == self.active_style:
return
...
Alles anzeigen
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.
Hab dazu mal wieder ein Test-Plugin gemacht, damit man das besser Testen kann
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