TemplatedMultiContentComponent

  • so weit bin ich noch nicht...


    so ganz passt der cpp code aber nicht hierzu (vermutlich habe ich den falschen cpp code erwischt)

    Code
    color, media_png, perc, backcolor, backcolor_sel
  • der dreamos elistboxboxcontent.cpp ist wohl nicht open source.
    aber wenn ich mal davon ausgehe, dass er sich gegenueber dem open source enigma2 nicht veraendert hat, muss in merlin irgendwo was umgebogen worden sein.

  • ja, aber unter der annahme, dass der cpp code unveraendert ist, kann es imho nicht funktionieren. da gibts kein progress percent.
    da ich davon ausgehe, dass es im merlin image funktioniert, musss irgendwo (im pyton code?) noch eine uebersetzung der parameter sein...

  • tja, dann weiss ich auch nicht :smiling_face:


    im moment kommt mir das alles wahnsinnig komplex vor, denn die template definition im code scheint auch nicht zu reichen. anscheinend muss man das auch noch im skin machen.


    von daher frage ich mich, ob es nicht einfacher ist (zumindest fuer mich), das ganze konventionell (wie ams, serienrecorder, etc) zu machen.


  • Also, das ganze ist gar nicht so schwer!
    Und wenn ich Dein Problem richtig rausgelesen habe versuche ich Dir das zu erklären:


    Was ein Template ist weisst Du ja bereits. Du musst natürlich im Python-Code dafür sorgen, dass Du diese Templates auch richtig füllst.


    Schauen wir uns das genauer an:


    Ich fange mit der Build-Func in Python an (das ist wichtig zu kapieren, was da gemacht wird): Die BuildFunc gibt eine Tuple-Liste zurück, und zwar genau eine Zeile. In dem Tuple definierst Du, was an welchem Index Du ausgeben willst.


    Hier siehst Du beispielsweise, was ich unter anderem in der Movielist damals bei uns im Merlin gebaut habe, und was ich zurück gebe:



    Wie Du also siehst, gebe ich an Index 2 beispielsweise das Aufnahme-Datum zurück, und an Index 7 die Prozent.
    Die Colors gebe ich bei dem obigen Stil in Index 5, 8 und 9 zurück.
    Insgesamt also:


    Code
    res.extend((displaytext, begin_string, folder_png, folder_name, color, media_png, perc, backcolor, backcolor_sel, servicename))


    Denk dran, Index fängt also bei 1 an (die Liste wird extended, Index 0 ist vorher schon gesetzt!)


    So, jetzt kommen wir zu den MultiContent-Entries:
    Beispiel:


    Code
    MultiContentEntryText(pos=(60+120, 0), size=(width-60-120-160, 25), font=2, flags=RT_HALIGN_LEFT|RT_VALIGN_CENTER, text=1, color=0xFF000005),


    Was sieht man hier:
    text = 1 --> holt sich Index 1 aus dem Rückgabe-Tuple (displaytext)


    So, jetzt wirds spannend: die Colors! :smiling_face:
    Diese müssen in dem Format 0xFF000001 bis beispielsweise 0xFF00000F zurückgegeben werden, damit Multicontent das verteht. Das sind aber keine Farben, sondern das ist ein Index: Die letzte Stelle ist die Hexadezimal. Das bedeutet:


    --> # 5 = color (text color) --> 0xFF000005 --> also Index 5


    Bei Index 9 wird auch eine Farbe übergeben, also 0xFF000009...


    Hätten wir eine Farbe als Index 12 definiert, dann wäre das 0xFF00000C


    Also einfach 0xFF00000 + INDEX in HEXA setzen...das ist ein MUSS bei Colors :winking_face:



    Vielleicht helfen Dir die Infos weiter. :winking_face:

  • Jetzt hab ich das auch verstanden. Deshalb hat das bei mir manchmal funktioniert.


    Somit muss im skin-template der index definiert werden und danach kannst du im Tuple die Farbe an der entsprechenden Indexposition zurückgeben.


    Solche Infos wären halt etwas, was dokumentiert sein sollte, da dies imho nur im cpp ersichtlich ist

    Gruss
    Dre


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

  • versuche ich Dir das zu erklären

    vielen dank, das hilft enorm.
    habe allerdings noch weitere fragen: :smiling_face:
    - klingt so, als wuerde das alles auch im original image funktionieren ohne merlin specials
    - die parameter ab pos 8:


    Code
    color, media_png, perc, backcolor, backcolor_sel))

    perc ist klar, wird ueber negativen index definiert.
    bei media_png ist der index hart kodiert?
    zu den farben: bisher verwende ich color, color_sel und backcolor. kann ich backcolor_sel einfach durch color_sel ersetzen oder die liste erweitern um color_sel?
    in welcher routine werden diese parameter eigentlich interpretiert?
    thanks again.

    Einmal editiert, zuletzt von alpha ()

  • Das gilt aber schon sehr lange so (bestimmt seit 10 Jahren :smiling_face: ), also da war der Core noch offen.
    Und da es als noch so funktioniert hat DP an der Logik nichts geändert.

    ah, lookupColor :smiling_face:

    Gruss
    Dre


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


  • Deine Fragen zeigen mir, dass Du es (noch nicht) verstanden hast. :winking_face:


    Ich breche es noch "gröber" runter:


    Du baust ein Tuple auf, welches du in der buildfunc in einer Liste zurückgibst.


    Beispielsweise:


    ((ich_bin_tuple_wert_index_1_und_bin_vom_typ_ein_string, ich_bin_tuple_wert_index_2_und_bin_vom_typ_eine_farbe))


    --> 2 Werte werden zurückgegeben --> diese müssen aber auch im Template richtig zugeordnet werden:


    MultiContentEntryText(pos=(0, 0), size=(100,100), font=0, flags=RT_HALIGN_LEFT, text=1, backcolor_sel=0xFF000002)


    --> Was passiert da also? Du baust ein MultiContextEntryText in deinem Template, Du übergibst die Parameter für den Kontruktor der Klasse, und der Parameter bekommt den Index-Wert Deines Tuples (Achtung: Color Index = 0xFF00000HEXZAHL), damit an der entsprechenden Stelle Deine Werte angezeigt werden.


    In diesem Beispiel wird also:
    - als Text der Inhalt von ich_bin_tuple_wert_index_1_und_bin_vom_typ_ein_string angezeigt --> text=1
    - als BackColor Selection der Inhalt von ich_bin_tuple_wert_index_2_und_bin_vom_typ_eine_farbe angezeigt --> backcolor_sel=0xFF000002



    Du kannst definieren, schalten, werkeln, machen wie Du willst.
    Um zu sehen, welche Parameter für die einzelnen Klassen von MultiContent zulässig sind, schaust Du hier nach: http://git.opendreambox.org/?p…048097b737a04c304;hb=HEAD


    Beispielsweise:


    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):
    	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)


    So, wenn Du nun in meinem Beispiel von Eben beispielsweise nicht die BackColor Selection setzen willst, sondern die Color-Selection, dann musst Du also Dein Template-Eintrag ändern in:


    MultiContentEntryText(pos=(0, 0), size=(100,100), font=0, flags=RT_HALIGN_LEFT, text=1, color_sel=0xFF000002)



    Willst Du beispielsweise zusätzlich eine Border Color setzen, musst Du Dein Tuple erweitern im Python-Code in der Buildfunc:


    ((ich_bin_tuple_wert_index_1_und_bin_vom_typ_ein_string, ich_bin_tuple_wert_index_2_und_bin_vom_typ_eine_farbe, ich_bin_tuple_wert_index_3_und_bin_vom_typ_eine_farbe))


    und Dein Eintrag im Skin für Dein Template auch erweitern:


    MultiContentEntryText(pos=(0, 0), size=(100,100), font=0, flags=RT_HALIGN_LEFT, text=1, color_sel=0xFF000002, border_color=0xFF000003)


    usw. usw. usw.


    Das ist alles kein Hexenwerk. :grinning_face_with_smiling_eyes:


    Verständlicher nun alles? :smiling_face:

  • ok... got it :smiling_face:
    die sequenz in res.extent() spielt keine rolle, sondern der index wird in der template def multicontententrytext festgelegt.
    trotzdem, wo wird der index fuer media_png definiert? dafuer haette ich eine png = 9 erwartet und die png = 7 ist wohl fuer folder_png.

  • Das sind Merlin Sachen, was Du da ansprichst....also ich erkläre gerne allgemeine Sachen, aber Sourcen aus unserem Merlin-Image zu erklären geht zu weit. :smiling_face:
    Und du willst doch auch nicht etwa unseren Code einfach so kopieren, oder? :winking_face:

  • oh nein, ich will keine merlin interna wissen.
    wenn die bisherigen dinge alle mit dem original dmm image gehen, dann vergesse ich einfach, dass ich media_png gesehen habe :smiling_face: ist perc auch merlin intern?
    noch eine generellere frage zu den templates:
    ich habe ein template im code definiert und zusaetzlich
    COMPONENT_ID = componentSizes.MOVIE_LIST
    damit nimmt er aber jetzt nicht mein intern definiertes template sondern das im skin definierte MOVIE_LIST template.
    ist ja auch logisch. jetzt dachte ich, ich gebe einen namen an, fuer den es im skin kein template gibt. aber da meckert er nur, dass es das template nicht gibt, aber nimmt nicht das interne.
    also habe ich gar keine COMPONENT_ID angegeben... geht aber auch nicht.
    also, wie bringe ich ihn dazu, das interne template zu verwenden?
    danke.

  • Prozent hat Dir doch schon Dre erklärt. Was genau ist da noch Deine Frage?
    Du benötigst für ein Plugin keine COMPONENT_ID.
    Da ich Deinen Code nicht kenne weiss ich nicht, was bei Dir da schief läuft.
    Wenn Du ein konkretes Beispiel brauchst kannst Du Dir mal das MerlinRemux Plugin anschauen, und dort in die Klasse MerlinRemuxListScreen schauen, dort verwende ich TemplatedMultiContent

  • ok, dann versuche ich es nochmal anders:
    wenn ich im template ein MultiContentEntryProgress einfuege und es mit res.extent(...., perc, ...) fuettere, dann sollte das im original image funktionieren... richtig?