cOsdObject aus cOsdMenu heraus erstellen

  • Hi!


    Ich probiere gerade ein wenig mit dem OSD vom VDR herum und hätte dazu eine Frage.
    Angenommen ich habe ein Objekt, welches auf cOsdMenu basiert. Dieses wird beim start vom Plugin erstellt. Dadurch wird ja das OSD von diesem Objekt belegt. Ist es dann irgendwie möglich, dass ich aus diesem Menü heraus ein neues Objekt erstelle welches auf cOsdObjekt basiert?
    Mit anderen Worten: Kann ich das OSD zuerst freigeben, damit ich dann das neue Objekt erstellen kann?


    Gruß,
    Brougs78


    P.S.: Ist wahrscheinlich ganz einfach, aber ich bin noch ziemlich unerfahren mit der C++-Programmierung.

    - -- --- ================================================================ --- -- -
    Antec Fusion, Intel E5200, Asus P5N7A-VM (VDPAU), DD CineS2 v6 + DD DuoFlex CI // yavdr-0.6.1
    - -- --- ================================================================ --- -- -

  • Hallo Brougs78,


    Zitat

    Original von Brougs78
    ... Mit anderen Worten: Kann ich das OSD zuerst freigeben, damit ich dann das neue Objekt erstellen kann?


    Nein, Dein cOSDObject muß ja solange aktiv bleiben, wie dein Plugin läuft.


    Entweder Du nutzt die Funktion AddSubmenu ... oder ein eigenes cControll (Dabei ist es aber fast unmöglich die Kontrolle über den VDR nach dem Ende des cControlls wiederzubekommen ....)


    Hardy


    PS: machs doch mal andersrum: was möchtest Du erreichen?

    Suche: 6 Richtige für die nächste Lottoziehung
    PS: Wer Rechtschreibfehler findet, darf sie behalten!

  • Hi!


    Danke für die Antwort.
    Also gerade ist mir eingefallen, dass das Game-Plugin das genau so löst wie ich das haben möchte ... denke ich zumindest.
    Zuerst werden die Spiele ja in einem normalen cOsdMenu angezeigt, die Spiele selbst werden dann aber in einem cOsdObject geöffnet. Und genau so etwas versuche ich auch zu realisieren. D.h. ich möchte zuerst eine Auswahl über eine geskinnte Menüstruktur, welche mir dann allerdings ein Fenster (bzw. halt das ganze OSD) öffnet, wo ich direkten Zugriff darauf habe.
    Muss ich mir mal genauer ansehen, wie das gemacht wurde.


    Gruß,
    Brougs78

    - -- --- ================================================================ --- -- -
    Antec Fusion, Intel E5200, Asus P5N7A-VM (VDPAU), DD CineS2 v6 + DD DuoFlex CI // yavdr-0.6.1
    - -- --- ================================================================ --- -- -

    Einmal editiert, zuletzt von Brougs78 ()

  • Gibt'n ganz einfachen Trick:


    In ProcessKey vom cOsdMenu erzeugst Du das neue cOsdObject, und speicherst den Zeiger irgendwo im Plugin-Objekt ab. Dann machst Du return osPlugin; wodurch das cOsdMenu ordentlich beendet und anschliessend der Hauptmenüpunkt nochmal aufgerufen wird.


    In MainMenuAction musst du dann halt abfragen, ob das cOsdObject abgelegt wurde, und wenn ja, gibst Du das zurück statt dem cOsdMenu.


    Als Graph:
    MainMenuAction -> osdObject == NULL? Ja -> return new cOsdMenu
    Später in ProcessKey: cMyPlugin::osdObject = new cOsdObject; return osPlugin -> MainMenuAction -> osdObject == NULL? Nein -> return osdObject


    EDIT: Umgekehrt gehts übrigens offenbar nicht (Vom Object wieder ins Menu wechseln)

  • Hi LordJaxom!


    Danke für den Tipp. Also so ähnlich ist das im Games-Plugin gelöst. Es gibt einfach eine Variable m für Menü, und wenn diese auf true gesetzt ist, dann wird ein cOsdMenu-Objekt erstellt und ansonsten ein cOsdObjekt. So habe ich das ganze jetzt auch getestet und funktioniert auch soweit.
    Der Wechsel zurück auf ein cOsdMenu hat bei mir übrigens auch nicht funktioniert ... warum auch immer.


    BTW, wenn man vorher nur ein wenig mit VB bzw. VBA herumprogrammiert hat, dann ist das ein ganz schöner Umstieg ... :D


    Gruß,
    Brougs78

    - -- --- ================================================================ --- -- -
    Antec Fusion, Intel E5200, Asus P5N7A-VM (VDPAU), DD CineS2 v6 + DD DuoFlex CI // yavdr-0.6.1
    - -- --- ================================================================ --- -- -

  • Hi!


    Entweder ich stehe auf der Leitung oder ich kapier das ganze noch nicht ganz richtig, aber wie kann ich denn zwischen dem cOsdMenu und cOsdObject eine Variable übergen?
    Habe schon mal mit dem "extern"-Parameter gespielt, das hat aber irgendwie nicht gefunzt --> undefined Symbol <variablenname>
    Wenn ich die Variable z.B. im Plugin-Objekt als Public definiere und dann einfach die h-Datei inkludiere funzt es leider auch nicht.
    Habe auch eine abstrakte Klasse mit der Variable (public und static) definiert und diese den beiden Objekten (cOsdMenu und cOsdObject) vererbt, aber das hat auch wieder ein undefined Symbol gebracht.


    ?( :rolleyes: ?( Help please.


    EDIT: Hab jetzt einfach die Variable im Plugin erstellt und den Pointer im Konstruktor an die zwei OSD-Objekte übergeben. Eigentlich ganz einfach ... hätte ich gleich draufkommen können. :O


    Gruß,
    Brougs78

    - -- --- ================================================================ --- -- -
    Antec Fusion, Intel E5200, Asus P5N7A-VM (VDPAU), DD CineS2 v6 + DD DuoFlex CI // yavdr-0.6.1
    - -- --- ================================================================ --- -- -

    Einmal editiert, zuletzt von Brougs78 ()

  • Zitat

    Original von Brougs78
    Entweder ich stehe auf der Leitung oder ich kapier das ganze noch nicht ganz richtig, aber wie kann ich denn zwischen dem cOsdMenu und cOsdObject eine Variable übergen?
    Habe schon mal mit dem "extern"-Parameter gespielt, das hat aber irgendwie nicht gefunzt --> undefined Symbol <variablenname>
    Wenn ich die Variable z.B. im Plugin-Objekt als Public definiere und dann einfach die h-Datei inkludiere funzt es leider auch nicht.
    Habe auch eine abstrakte Klasse mit der Variable (public und static) definiert und diese den beiden Objekten (cOsdMenu und cOsdObject) vererbt, aber das hat auch wieder ein undefined Symbol gebracht.


    EDIT: Hab jetzt einfach die Variable im Plugin erstellt und den Pointer im Konstruktor an die zwei OSD-Objekte übergeben. Eigentlich ganz einfach ... hätte ich gleich draufkommen können. :O


    Ich hab dafür in der cPluginBla Klasse eine static Variable definiert, und die Menüklasse als friend... Geht auch :]

Jetzt mitmachen!

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