[gelöst] cOsdMenu innerhalb Player

  • Hi zusammen,


    ich würde gerne ein cOsdMenu öffnen und zwar innerhalb eines Players. Also mein Plugin startet einen cDvbPlayer und steuert diesen durch einen cReplayControl. Jetzt möchte ich gerne, wenn ein Knopf gedrückt wird, ein Menü öffnen. Gibt's dafür eine fertige Methode oder muss ich vom Öffnen bis zum Schließen des Menüs alles selbst machen, also irgendwie meinOsdMenu->Display() ... bis nachher delete meinOsdMenu?


    Kennt irgendjemand ein Plugin, das einen Player startet und dann innerhalb noch ein Menü erzeugt auf Knopfdruck? Dann könnte ich das ja dort abschauen...

    Hardware: AMD Duron 900 MHz, 256 MB Ram, 1 x 400 GB und 2 x 200 GB Maxtor, 1 x 500 GB USB 2.0, Nec DVD-RW ND-3500AG, 1 x TT 1.6 FF DVB-S, 1 x Twinhan Budget DVB-T
    Software: VDR 1.4.1, BigPatch, DMH-DVD-Archive-Patch, Kernel 2.6.12
    ---
    "Hörma, wie heißt nomma dat Instrument mit den 3 Knöppen oben drauf...? - Ja richtig, Flöte!"

    Einmal editiert, zuletzt von dmh ()

  • Das ist in VDR etwas unglücklich konstruiert. In VDR gilt: Jedes Menü stammt in letzter Konsequenz vom Hauptmenü ab. Die einzige Möglichkeit für ein Plugin, ein Menü zu öffnen, ist daher die MainMenuAction-Methode. Damit der User sich nicht deswegen von Hand durch das Menü hangeln muss, gibt es cRemote::CalllPlugin. Das funktioniert auch bei nicht sichtbarem Menü.


    Du musst also in MainMenuAction eine Verzweigung haben. Normalerweise führst du die Menü-Aktion durch. Willst du ein Menü außerplanmäßig öffnen, hinterlegst du das cMenu-Objekt in einer globalen Variable und rufst CallPlugin auf. (Achtung, kann fehlschlagen! Eventuell später nochmal versuchen.)
    In MainMenuAction wird das erkannt, und dein Menü direkt zurück gegeben. Vorher die globale Variable löschen, damit das nur ein mal geschieht.


    Gruß,


    Udo

  • Super, danke! Das ist genau das, was ich gesucht habe.


    Ich habe mir dazu einen eigenen Service erstellt, der die zu editierenden Daten an das Plugin übergibt. Dann kann ich mit Plugin->Service(..., data) die Daten an das Plugin übergeben. Danach cRemote::CallPlugin("cutalot") aufrufen und das Plugin startet dann, sofern data nicht NULL ist, ein neues cOsdMenu. Klappt prima.

    Hardware: AMD Duron 900 MHz, 256 MB Ram, 1 x 400 GB und 2 x 200 GB Maxtor, 1 x 500 GB USB 2.0, Nec DVD-RW ND-3500AG, 1 x TT 1.6 FF DVB-S, 1 x Twinhan Budget DVB-T
    Software: VDR 1.4.1, BigPatch, DMH-DVD-Archive-Patch, Kernel 2.6.12
    ---
    "Hörma, wie heißt nomma dat Instrument mit den 3 Knöppen oben drauf...? - Ja richtig, Flöte!"

  • Nein, ich rufe aus dem Cut-a-Lot-Plugin wieder das Cut-a-Lot-Plugin auf. Welche Methode würdest Du denn vorziehen, wenn nicht die Service-Methode? Und warum?

    Hardware: AMD Duron 900 MHz, 256 MB Ram, 1 x 400 GB und 2 x 200 GB Maxtor, 1 x 500 GB USB 2.0, Nec DVD-RW ND-3500AG, 1 x TT 1.6 FF DVB-S, 1 x Twinhan Budget DVB-T
    Software: VDR 1.4.1, BigPatch, DMH-DVD-Archive-Patch, Kernel 2.6.12
    ---
    "Hörma, wie heißt nomma dat Instrument mit den 3 Knöppen oben drauf...? - Ja richtig, Flöte!"

  • Zitat

    Original von dmh
    Nein, ich rufe aus dem Cut-a-Lot-Plugin wieder das Cut-a-Lot-Plugin auf. Welche Methode würdest Du denn vorziehen, wenn nicht die Service-Methode? Und warum?


    Verstehe ich richtig, dass Du aus dem Plugin den Service Deines Plugins mit bestimmten Daten aufrufst, und als Ergebnis dieses Service landen diese Daten irgendwo im Plugin und werden dann durch den Aufruf des MainMenus verarbeitet?


    Pseudocode


    Da würde ich eher vorschlagen eine neue Methode einzuführen, die die Daten direkt annimmt, ohne Umweg über den Service. Warum? Weil es zum einen das Rumsuchen in der Liste der Plugins erspart, dich vor Tippfehlern im String "cutalot" bewahrt und das gecaste nach void* erspart. Mit einigem Nachdenken fällt mir bestimmt noch mehr ein ;)



    EDIT: Wir brauchen langsam auch [ cpp] Tags - ich vergesse immer dass ich hier [ code] verwenden muss :D

  • Dann müsste ich allerdings, um die Methode von "außen" aufrufen zu können, eine Header-Datei des Plugins erstellen, richtig?


    Das heißt also, ich müsste Sachen aus der cutalot.c nach cutalot.h schieben bzw. besser gesagt die Klassendefinition. Ok, werde ich dann mal sehen, wie ich so damit zurecht komme. Danke schon mal.

    Hardware: AMD Duron 900 MHz, 256 MB Ram, 1 x 400 GB und 2 x 200 GB Maxtor, 1 x 500 GB USB 2.0, Nec DVD-RW ND-3500AG, 1 x TT 1.6 FF DVB-S, 1 x Twinhan Budget DVB-T
    Software: VDR 1.4.1, BigPatch, DMH-DVD-Archive-Patch, Kernel 2.6.12
    ---
    "Hörma, wie heißt nomma dat Instrument mit den 3 Knöppen oben drauf...? - Ja richtig, Flöte!"

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!