Finde VdrAssistant auf SourceForge.net. Schnell, sicher und kostenlos: Open Source Software download

Ein Assistent nicht nur zur Umwandlung von VDR-Aufnahmen zu einer DVD

Bau einer eigenen Themen-Bibliothek

Einführung

Der Themeneditor und der Skineditor sind da dafür da, eigene Menüvorlagen zu erstellen. Allerdings basieren all diese Vorlagen auf einer Bibliothek von Menüelementen. Wem die Gestaltungs-Möglichkeiten nicht ausreichen, kommt nicht drum herum, eine eigene Bibliothek mit Menüelementen zu erstellen.

Baustelle

Die Bibliothek der Menüelemente ist wohl der komplexeste Teil der VDRAssistant-Anwendung. Denn jedes Thema soll beliebig mit einem Skin anpassbar sein. Ferner wird die erstellte Menüvorlage in einer Datenbank gespeichert. Es ist also notwendig, in der Datenbank zu hinterlegen, mit welcher Bibliothek von Menüelementen die Menüvorlage erstellt wurde.

Der schlimmste Part wird über die Basisbibliothek SRDVDThemeLib bereitgestellt. Zum Verständnis sind die Zusammenhänge dennoch hilfreich.

Ein DVD-Menü besteht aus einer Menge möglicher Menüseiten, von denen jede eine (unterschiedliche) Menge von Menüelementen enthalten kann. Dies wird über MenuePageType, MenueElementType und MenueElementCategory abgebildet. Die Elementkategorie fasst mehrere gleichartige Menüelement-Typen zusammen. So gehöhren z.B. alle möglichen Menüschaltflächen zur Kategorie "Schaltfläche".

Beim Abspeichern einer erstellten Menüvorlage in die Datenbank wird jedes Menüelement mit seinem MenueElementType abgelegt. Um nun aus diesem Typ eine Klasse zu finden, mit der das Menüelement reproduziert werden kann, ist die Themenklasse nicht nur der Container, der alle Menüelemente enthält, sondern auch die Fabrik, die alle Menüelemente erzeugen kann. Die Fabrikmethode ist public ThemeElement createThemeElement(MenuePageType mpt, MenueElementType met, Rectangle r).

Jetzt können ja viele unterschiedliche Menüvorlagen gespeichert werden, die mit ein und derselben Themenklasse erstellt wurden. Andererseits können auch Menüvorlagen gespeichert werden, die mit unterschiedlichen Themenklassen erstellt wurden. Es soll sogar möglich sein, Menüvorlagen mit Themenklassen zu erstellen, die zum Zeitpunkt des Baus der Anwendung noch nicht bekannt waren. Da Objekte beim Lesen aus der Datenbank anonym erstellt werden, muss die Entscheidungstabelle, anhand derer die Fabrikmethode der Themenklasse ein Menüelement erzeugt austauschbar sein. Dafür gibt es die Methode public Map getElementVariantMap().

So gesehen muss eine neue Themenklasse nur die beiden erwähnten Methoden definieren.

Elemente

Die Erstellung einer Menüseite fängt mit einer leeren Leinwand an. Alles was sichtbar sein soll, muss von einem Menüelement gemalt werden. Wichtig ist hierbei die Trennung zwischen dem was und wo gemalt werden soll und wie es gemalt werden soll. Das was wird über den MenueElementType abgebildet, das wo sind die (Themen-)Eigenschaften eines Menüelements und das wie sind die (Skin-)Eigenschaften des Menüelements.

Um also das Aussehen einer Menüvorlage auch nachträglich verändern zu können, darf kein Menüelement sowas wie Farbe, Font etc. als Eigenschaft besitzen. Dafür besitzt die Basisklasse ThemeElement eine Methode protected final ElementSkin getSkin() und über das ElementSkin-Objekt kann Farbe, Schriftart etc. abgefragt werden. Die aktiven Elemente, wie z.B. eine Menüschaltfläche kann 2 unterschiedliche ElementSkin-Objekte haben - je nachdem, ob es gerade aktiv ist, oder nicht.

Die Basisklasse AbstractElementBase enthält die meisten Zeichenroutinen. Wer eine eigene Themenbibliothek erstellen will, wird hauptsächlich diese Zeichenroutinen überschreiben wollen. Die Bibliothek SRDVDStdTheme kann als Vorlage für die eigene Themen-Bibliothek dienen. Gedanklich ist diese Bibliothek zu ersetzen. Die Bibliothek SRDVDThemeLib ist die Basisbibliothek, die den ganzen unerfreulichen, aber notwendigen Kram bereits liefert.

Wer sich dafür interessiert, wie Menüelemente verwendet werden, dem sei die Klasse EditorManager und ComposerPane des Themeneditors ans Herz gelegt.

Viel Spaß beim Basteln!




 
change to english nach Deutsch wechseln