You are not logged in.

Dear visitor, welcome to VDR Portal. If this is your first visit here, please read the Help. It explains in detail how this page works. To use all features of this page, you should consider registering. Please use the registration form, to register here or read more information about the registration process. If you are already registered, please login here.

Brougs78

Master

  • "Brougs78" started this thread

Posts: 2,452

Location: Tirol (A)

  • Send private message

1

Tuesday, October 5th 2004, 5:03pm

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.
- -- --- ================================================================ --- -- -
VDR-Konfig: Antec Fusion, Intel E5200, Asus P5N7A-VM (VDPAU), 2xDVB-s2 // yavdr-0.2
- -- --- ================================================================ --- -- -

» Mein VDR-Zeugs (OSDImage-Plugin, Enigma-Skin): brougs78.vdr-developer.org «

HFlor

Master

Posts: 1,796

Location: Wutha-Farnroda

Occupation: Netzwerkadministrator

  • Send private message

2

Tuesday, October 5th 2004, 7:46pm

RE: cOsdObject aus cOsdMenu heraus erstellen

Hallo Brougs78,

Quoted

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!

Brougs78

Master

  • "Brougs78" started this thread

Posts: 2,452

Location: Tirol (A)

  • Send private message

3

Tuesday, October 5th 2004, 9:09pm

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
- -- --- ================================================================ --- -- -
VDR-Konfig: Antec Fusion, Intel E5200, Asus P5N7A-VM (VDPAU), 2xDVB-s2 // yavdr-0.2
- -- --- ================================================================ --- -- -

» Mein VDR-Zeugs (OSDImage-Plugin, Enigma-Skin): brougs78.vdr-developer.org «

This post has been edited 1 times, last edit by "Brougs78" (Oct 5th 2004, 9:10pm)


Posts: 2,101

Location: Kind der Kirmes am Kanal

Occupation: System- und Anwendungsprogrammierer

  • Send private message

4

Thursday, October 7th 2004, 5:17pm

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)

This post has been edited 1 times, last edit by "LordJaxom" (Oct 7th 2004, 5:18pm)


Brougs78

Master

  • "Brougs78" started this thread

Posts: 2,452

Location: Tirol (A)

  • Send private message

5

Thursday, October 7th 2004, 7:29pm

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
- -- --- ================================================================ --- -- -
VDR-Konfig: Antec Fusion, Intel E5200, Asus P5N7A-VM (VDPAU), 2xDVB-s2 // yavdr-0.2
- -- --- ================================================================ --- -- -

» Mein VDR-Zeugs (OSDImage-Plugin, Enigma-Skin): brougs78.vdr-developer.org «

Brougs78

Master

  • "Brougs78" started this thread

Posts: 2,452

Location: Tirol (A)

  • Send private message

6

Monday, October 11th 2004, 5:10pm

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
- -- --- ================================================================ --- -- -
VDR-Konfig: Antec Fusion, Intel E5200, Asus P5N7A-VM (VDPAU), 2xDVB-s2 // yavdr-0.2
- -- --- ================================================================ --- -- -

» Mein VDR-Zeugs (OSDImage-Plugin, Enigma-Skin): brougs78.vdr-developer.org «

This post has been edited 1 times, last edit by "Brougs78" (Oct 11th 2004, 6:15pm)


Posts: 2,101

Location: Kind der Kirmes am Kanal

Occupation: System- und Anwendungsprogrammierer

  • Send private message

7

Tuesday, October 12th 2004, 11:49pm

Quoted

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