TemplatedMultiContentComponent

  • mit dem templatedmulticontentcomponent kann man ja sehr komfortabel mehrzeilige listen definieren:

    Code
    "default" : (75, [
    				MultiContentEntryText(pos=(0, 0), size=(width-182, 30), font=0, flags=RT_HALIGN_LEFT, text=1),
    				MultiContentEntryText(pos=(width-180, 0), size=(180, 30), font=3, flags=RT_HALIGN_RIGHT, text=2),
    				MultiContentEntryText(pos=(200, 50), size=(200, 20), font=2, flags=RT_HALIGN_LEFT, text=3),
    				MultiContentEntryText(pos=(0, 30), size=(width, 20), font=2, flags=RT_HALIGN_LEFT, text=4),
    				MultiContentEntryText(pos=(0, 50), size=(200, 20), font=2, flags=RT_HALIGN_LEFT, text=5),
    				MultiContentEntryText(pos=(width-200, 50), size=(198, 20), font=2, flags=RT_HALIGN_RIGHT, text=6),
    			]),
    			"compact_descrip


    und dann auch fuellen:


    Code
    self.res.extend((txt, tags, servicename, description, begin_string, len))

    aber wie gebe ich die farben fuer die einzelnen elemente an?
    danke.

  • Die kommen weiter hinten in der Liste. In der Movielist wird das so gemacht. Wenn du dir alte Sourcen der eListbox anschaust, siehst du dort eine Abfrage auf die Position. Aber vielleicht kann da ja Reichi/Ghost mal schreiben, welche Parameter an welcher Position kommen müssen. Schöner wäre, wenn man kwargs mitgeben könnte. Also zuerst den Inhalt der Listbox und dann [color:0x000f0f0f, backcolor:0x00000000]

    Gruss
    Dre


    Boxen (im Einsatz): DM920, DM900, DMOne
    Developer Project Merlin - we are OpenSource

  • steht doch in ...../Components/MultiContent.py

    Code
    def MultiContentEntryText(pos = (0, 0), size = (0, 0), font = 0, flags = RT_HALIGN_LEFT | RT_VALIGN_TOP, text = "", color = None, color_sel = None, backcolor = None, backcolor_sel = None, border_width = None, border_color = None): 
    6 	return (eListboxPythonMultiContent.TYPE_TEXT, pos[0], pos[1], size[0], size[1], font, flags, text, color, color_sel, backcolor, backcolor_sel, border_width, border_color

    z.B. color = 0x00ffc000, color_sel = 0x00ffc000

  • steht doch in ...../Components/MultiContent.py

    Code
    def MultiContentEntryText(pos = (0, 0), size = (0, 0), font = 0, flags = RT_HALIGN_LEFT | RT_VALIGN_TOP, text = "", color = None, color_sel = None, backcolor = None, backcolor_sel = None, border_width = None, border_color = None): 
    6 	return (eListboxPythonMultiContent.TYPE_TEXT, pos[0], pos[1], size[0], size[1], font, flags, text, color, color_sel, backcolor, backcolor_sel, border_width, border_color

    z.B. color = 0x00ffc000, color_sel = 0x00ffc000

    ja, so mache ich das momentan fuer eine normale einzeilige liste.
    aber wie soll das bei der templated liste gehen, wo ich dann pro listenzeile eine andere farbe setzen will... z.b. bei movielist fuer aufnahmen rot.

  • Schau dir ein Merlin Skin , mit der MerlinMovieListr an.


    da gibt es dann zB. sowas .....


    DM 920 UHD sss :smiling_face_with_heart_eyes:

  • Also zuerst den Inhalt der Listbox und dann [color:0x000f0f0f, backcolor:0x00000000]

    hmmm.... die farbe muesste doch hier irgendwie angegeben werden


    Code
    self.res.extend(([txt, color:0x000f0f0f, backcolor:0x00000000], [tags, color:0x000f0f0f, backcolor:0x00000000], [servicename,color:0x000f0f0f, backcolor:0x00000000], [description, color:0x000f0f0f, backcolor:0x00000000], begin_string, color:0x000f0f0f, backcolor:0x00000000], [len, color:0x000f0f0f, backcolor:0x00000000]))

    oder so.
    ich will ja nicht nur eine farbe fuer die gesamte liste... sondern pro element.

  • Schau dir ein Merlin Skin , mit der MerlinMovieListr an.

    ja, das hilft schon mal... aber wo gebe ich da an, dass ne aufnahme rot dargestellt wird.
    wenn ich das richtig verstehe, dann gelten diese farben fuer alle zeilen in der liste.

  • Doch in der Movielist wird das gemacht. Aber eventuell nur bei uns im Merlin.


    mr_vica: hilft wenig, wenn du unterschiediche Farben willst. Da musst du den Wert setzen können

    Gruss
    Dre


    Boxen (im Einsatz): DM920, DM900, DMOne
    Developer Project Merlin - we are OpenSource

  • Aber eventuell nur bei uns im Merlin.

    ja, das war ein guter hinweis.


    Code
    default_template = """{"templates":
    		{
    			"default" : (75, [
    				MultiContentEntryText(pos=(0, 0), size=(full_width, 75), font=0, flags=RT_HALIGN_LEFT, text="", color=None, backcolor=0xFF00000C, backcolor_sel=0xFF00000D),
    				MultiContentEntryText(pos=(0, 0), size=(width-182, 30), font=0, flags=RT_HALIGN_LEFT, text=1, color=0xFF000009),
    Code
    if self.list_type == MovieList.LISTTYPE_ORIGINAL:
    			res.extend((txt, tags, servicename, description, begin_string, len, folder_png, folder_name, color, media_png, perc, backcolor, backcolor_sel))


    anscheinend kann man da die farben einfach mitgeben.
    wobei ich noch rausfinden muss, ob das was "merlin spezifisches" ist :smiling_face:

    Einmal editiert, zuletzt von alpha ()

  • Du gibst da aber immer alles (also auch die Grösse) im Code vor. Schöner wäre ja etwas wie setForegroundColor und da wird nur die Farbe geändert. Das Layout soll ja aus dem skin kommen.

    Gruss
    Dre


    Boxen (im Einsatz): DM920, DM900, DMOne
    Developer Project Merlin - we are OpenSource

  • Die Farben haben im SerienRecorder bestimmte Bedeutungen deswegen sind die dort (zum Teil) fest im Code.
    Die Position und Größen werden über einen Skinfaktor an die verschiedenen Skingrößen angepasst.
    Zumindest die Sache mit den Positionen/Größen ist wohl nicht ganz optimal, aber die Skinbauer können damit wohl leben.
    Diese ganzen Skin Sachen habe ich von den (bis auf einfall, inzwischen verschollenen) Vorgänger Entwicklern übernommen, ich stehe noch auf Kriegsfuss mit Skins.

    Einmal editiert, zuletzt von MacDisein ()

  • ich stehe noch auf Kriegsfuss mit Skins

    ha, ein bruder im geiste :smiling_face:


    habe mir mal den serienrecorder kurz angeschaut... das ist imho kein templated design, sondern da werden die zeilen explizit zusammengebastelt.... bei ams ist das imho auch so.
    wollte eigentlich einen "echten" templated design verwenden. :winking_face:

    Einmal editiert, zuletzt von alpha ()

  • Deshalb die Movielist. Ich hab das an anderer Stelle auch eingebaut und dort klappt es noch nicht. Deshalb fände ich kwargs oder functions super

    Gruss
    Dre


    Boxen (im Einsatz): DM920, DM900, DMOne
    Developer Project Merlin - we are OpenSource

  • was ich noch nicht so ganz verstehe ist, wie das template und res zusammengehoeren...


    template:


    res:


    Code
    res.extend((txt, tags, servicename, description, begin_string, len, folder_png, folder_name, color, media_png, perc, backcolor, backcolor_sel))

    die erste zeile im template (text="") gibt anscheinend die gesamte listenzeile an.
    die naechsten zeielen im template (text=1 bis text=8 und png=7) geben die einzelnen elemente in der listenzeile an und entsprechen in res wohl "txt, tags, servicename, description, begin_string, len, folder_png, folder_name".
    die letzte zeile MultiContentEntryProgress entspricht "perc" in res. perc ist der 11. parameter... wird das durch "percent = -11" angegeben???
    und wo ist die reihenfolge von color, media_png, backcolor und backcolor_sel definiert?

  • Bei perc musst du - davor machen, damit das element mit index 11 verwendet wird. Sonst kriegst du 11 % angezeigt in der progress bar.


    Die anschliessenden Elemente sind hardcoded in der elistboxcontent.cpp. Da gab es (und vermutlich ist das auch heute noch so) explizite Abfragen auf die Länge und Typ. Beispiel: Länge > 8, dann ist index 8 foregroundColor.


    Deshalb sagte ich, kwargs wären da schöner als optionale Parameter. Dann gibst du einfach mit, was es ist und im Core kann das ausgewertet werden.

    Gruss
    Dre


    Boxen (im Einsatz): DM920, DM900, DMOne
    Developer Project Merlin - we are OpenSource

  • yep, so ist es: