Echten Menü-Eintrag mit Untermenü-Einträgen per plugin.py ins DreamOS-Menü einfügen

  • Hallo


    Mit folgendem Code in def Plugins kann man ja einfache Menü-Einträge durch das Plugin im DreamOS platzieren:

    Damit kann man ja wie gesagt nur "einfache" Einträge (items) in einem vorhandenen Menü-Eintrag vornehmen.

    Wie kann man aber ein eigenes Untermenü z.B. im Menü "Einstellungen" erzeugen, wo man dann wiederum eigene einfache Einträge reinlegen kann ?


    Hintergrund:

    Der SoftwareManager hat ja im Menü Einstellungen einen eigenen Menüpunkt (siehe Code oben), wo sich dann bei Auswahl im Menü ein gesonderter Menü-Listen-Screen aus dem Plugin mit weiteren Auswahlmöglichkeiten öffnet.

    Mit der Möglichkeit der horizontalen/vertikalen MenuList sieht das natürlich sehr unschön aus, wenn diese weiteren Auswahlmöglichkeiten dann nicht mehr in der horizontalen/vertikalen MenuList erscheinen, sondern als eigener Screen, obwohl es ja auch eigentlich nur weitere Menü-Punkte sind.

    Von daher dachte ich, man integriert für diese weiteren Auswahlmöglichkeiten einfach eine eigene Menü-Struktur für die "Softwareverwaltung" ins DreamOS-Menü.


    Geht sowas ?

    Wenn ja, wie und kann man dabei auch die entryID mitgeben, so dass auch ein passendes Menu-Icon aus dem Skin verwendet werden kann ?

    Hab da noch kein Beispiel gefunden.


    PS:

    Eine Möglichkeit mit Anpassung der menu.xml habe ich schon gefunden, wobei mir das persönlich nicht besonders gefällt.

  • hmmmdada

    Ein Converter klingt für mich schon wieder kompliziert ;)

    Ist nicht mein Lieblingsthema.

    Dachte, es geht etwas einfacher über einen Code in der plugin.py ;)


    gutemine

    Ja, hab ich ja schon angefangen, macht aber mächtig Probleme.

    Fängt schon damit an, dass es eine "requires"-Prüfung in der SystemInfo für den Software-Manager noch nicht gibt.

    (falls einer das SystemPlugin mal deinstalliert - die Prüfung hatte ich schon ergänzt)

    Dann müsste man auch "<Code>"-Tags verwenden und Imports und self.session.open-Befehle verbauen, da dort Plugin-Screens geöffnet werden und keine System-Screens.


    Das ist der Anfang, der auch schon funktioniert (ohne Anpassung der SystemInfo.py muss man den requires-Parameter weglassen).

    Man würde das bestimmt hinbekommen, aber alles etwas kompliziert.

    Schöner wäre es eben, wenn es direkt über den Plugin-Code ginge ;)

    Und dann gibt es glaub ich unterschiedliche Menü-Detail-Level (langes und kurzes Menü).

    Da wüsste ich gar nicht, wie man das in der menu.xml unterscheidet.

    http://git.opendreambox.org/?p…9b;hb=refs/heads/4.3#l130

  • Also wir haben unser eigenes Menü, wo wir uns dann auch wieder reinhängen. Insofern: ja, das geht grundsätzlich. Das was du aber willst, wäre für jeden Eintrag im SoftwareManager zusätzlich den Hook WHERE_MENU definieren. Dabei müsstest du aber berücksichtigen, dass es Plugins gibt, die sich dynamisch in den SoftwareManager einklinken. Für die müsstest du wieder was bauen.


    Lange Rede, kurzer Sinn: sollte grundsätzlich möglich sein, wird aber sicherlich einiges an Arbeit bedeuten.

    Gruss
    Dre


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

  • hmmmdada

    Das klingt spannend ;)

    Leider diesbezüglich absolutes Neuland für mich 8|


    Falls du da ein paar zusätzliche erklärende Worte für mich hättest, wäre das toll.

    Ich brauche immer ein kleines Grundgerüst zum Einstieg, sonst finde ich den Anfang nicht ;)


    Wenn man jetzt nur einen neuen Converter nimmt, muss dann im Plugin-Code nicht irgendwo noch die entryID im Menuitem mitgeben, damit der Converter weiß, welches MenuIcon er dann verwenden soll ?

    Oder macht man das einfach hardcoded im Converter ?

  • ich hab nur mal eben ein paar icons in den menu ordner von skin geschmissen... aber so geht es ohne irgendwas am eigentlichen screen zu ändern...


    die passenden MenuIDs:

    install-extensions

    software-update

    software-restore

    system-backup

    system-restore

    ipkg-install

    update-checker

    advanced

    advancedrestore

    backuplocation

    backupfiles

    ipkg-manager

    ipkg-source



    und hier der Converter aus Fluid...

  • Ja, die menu.xml war ja auch wirklich nicht mein Favorit 8o

    Hatte da eher auf eine Codezeile im Plugin-Code gehoft, ala:


    addMenuitem(weight="10", text="Manage extensions" entryID="software_manager_ext" description="Manage extensions or plugins for your Dreambox.">)


    Das wäre dann noch einfacher.

    Hatte da was in Richtung menuupdater gefunden, aber weitergeholfen hat es auch nicht ;)


    Aber du hast dir das ja schonmal ausführlich durchdacht, wie ich sehe ;)

  • gutemine

    Ich weiß ;)

    So hatte ich ja schon begonnen und im Post #4 so gepostet.

    Aber das Problem wäre auch die Sache mit dem langen/kurzen Menü.


    Deshalb scheint der Converter dann wohl die einfachste Variante zu sein.

    Ich komme nur heute nicht mehr dazu.

    Muss ich mir mal ganz in Ruhe anschauen, weil da ja auch noch der Skin-Code passen muss.

    Da brauch ich bestimmt etwas mehr Zeit - bin ja nicht der geborene Skinner ;)

  • Heute hatte ich mal etwas Zeit, um mich mit dem Thema auseinanderzusetzen ;)


    Ich musste den Converter-Vorschlag von hmmmdada noch etwas erweitern und an den Code des originalen TemplatedMiltiContent-Converter anpassen.


    Nun sieht es schon ganz ordentlich aus ;)

    Mal zum Vergleich in Zombis Shadow-FHD-Skin vorher, nachher und das eigentliche Menü zum Vergleich.

    Ist bestimmt mit etwas Feintuning im Skin noch optimierbar, aber zumindest schonmal eine gute Lösung :D

    (es fehlen auch noch ein paar Grafiken)


    Und nun die gute Nachricht für alle Skinner: hmmmdada hat diesen TemplateMultiContent_SoftwareManager-Converter zur Nutzung in allen Skins freigeben :thumbup:

    Von daher nochmal vielen Dank für die Idee und die Freigabe an hmmmdada ;)


    Hier mal das Screen-Beispiel als Code für den Zombi-Shadow-FHD: