summaryrefslogtreecommitdiff
path: root/contrib/items.doc
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/items.doc')
-rw-r--r--contrib/items.doc620
1 files changed, 620 insertions, 0 deletions
diff --git a/contrib/items.doc b/contrib/items.doc
new file mode 100644
index 0000000..716f4a2
--- /dev/null
+++ b/contrib/items.doc
@@ -0,0 +1,620 @@
+%LANGS = ("en" => 0, "de" => 1);
+
+%TRANS = (
+ "Known Sections" => [ "Bekannte Sektionen" ],
+ "Known drawable Items" => [ "Bekannte Zeichnungs-Items" ],
+ "Known Display-Items" => [ "Bekannte Anzeige-Items" ],
+ "Known Parameters" => [ "Bekannte Parameter" ],
+
+ "Section:" => [ "Sektion:" ],
+ "Description:" => [ "Beschreibung:" ],
+ "Item:" => [ "Item:" ],
+ "Parameters:" => [ "Parameter:" ],
+ "Display:" => [ "Anzeige:" ],
+ "Parameter:" => [ "Parameter:" ],
+ "Default:" => [ "Standard:" ],
+ "Substitutes:" => [ "Ersetzt:" ],
+);
+
+
+@INTRO = ( <<END_EN
+
+This is the documentation to the Text2Skin file-format (version 0.0.2).
+
+How To create text-based skins
+------------------------------
+
+It is important that you understand the limitations of the OSD memory. If there
+are too many objects with too many colors defined, VDR will throw an error and
+some areas will not be displayed. For other output devices this limitations may
+not apply, so if you are planning to design a skin for another output device,
+feel free to use more colors, but remember that VDR can handle a maximum of 256
+areas per object.
+
+An object is defined to be a specific area with a specific palette and color
+depth. Those objects will be referred to as 'backgrounds' later on. Calculate
+the dimensions of them wisely, since overlapping areas or oversized areas will
+lead to an error. Also, the width and height of each area has to be a multiple
+of four when using a DVB-Card.
+
+
+Creation of an image
+--------------------
+
+I used gimp to create some test images displaying things on screen, although
+I don't know much about image processing :-). To give an advice, I will point
+out how I created those test images.
+
+I've used a template for a menu provided by a community member, tiled it into
+sections fully covered by the image. That made three images in this case. Then
+I added a little bit of transparency to the image covering the middle part. I've
+resized the image so that it's width and height were multiples of four. Now I've
+added 50% transparency to the top layer of the image. Then I've reduced the
+colordepth of the image (Image->Mode->Indexed) to 14 colors (of course the
+image may not be too extensive, but 14 colors can give some nice gradients).
+That leaves two colors for text and progress bar in the same display. Reduce
+the number of colors according to the background depth and additional
+decoration you intend to use. I saved the results to a png file and placed the
+result into the skin.
+
+If you intend to use xpm's, be aware that VDR doesn't know about named colors,
+so some images GIMP creates will not be read on-the-fly, because GIMP may use
+some named colors, but VDR only recognizes "None".
+
+
+The Description File Format
+---------------------------
+
+It is a simple configuration file, consisting of Sections and items.
+Commentary lines can be added when they are lead in by a '#'. Blank lines will
+be ignored. A section is placed in '[]' brackets. All other lines specify
+drawable items and are lead in by the phrase "Item=<...>" followed by one or
+more parameters (separated by commas). The line must end with a semicolon.
+
+It is quite important that you understand the relation between the Item and
+it's display parameter. The display parameter doesn't only specify WHAT to
+display, it also specifies IF it is displayed. For example a rectangle with
+display=PresentVPSTime will only be drawn if there is a present VPS time given.
+A text with display=PresentVPSTime behaves the same, but the text is
+substituted by the actual VPS time string. If the text-parameter contains a
+dollar-sign, like in display=PresentVPSTime,text=VPS: $, the VPS time will be
+substituted in place of the dollar-sign.
+
+Example (sorry for the long lines):
+
+# Description of the skin file
+Item=Skin,name=Test,version=0.0.2;
+[Channel]
+# This is the full channel display
+# Background area to draw on (a background MUST be specified to make items
+# drawn on it actually visible!!!), with background picture. Bpp=4 equals 16
+# colors
+Item=Background,path=channeltop.xpm,x=42,y=350,width=540,height=32,bpp=4;
+# A second area below the first one, again with 16 colors (make 32 colors
+# alltogether)
+Item=Background,path=channel.png,x=48,y=382,width=528,height=84,bpp=4;
+# A textual item displaying the channel numer and name (if present)
+# The color is a symbolic name that will be filled in the .colors-file
+Item=Text,display=ChannelNumberName,x=50,y=355,width=250,height=28,fg=ChNumNameFG,font=Sml;
+# A textual item displaying the current date and time
+Item=Text,display=PresentDateTime,x=52,y=387,width=150,height=28,fg=DateTimeFG,font=Osd;
+[Volume]
+# This is the volume display
+# Again, we specify an area to be able to draw items on it
+Item=Background,x=10,y=10,width=20,height=200,bpp=4;
+# A progressbar displaying the current volume.
+Item=Progress,display=VolumeCurrent,x=10,y=10,width=20,height=200,bg=VolumeBG,fg=VolumeFG;
+
+
+END_EN
+
+, <<END_DE
+
+Wie man textbasierte Skins erstellt
+-----------------------------------
+
+Es ist wichtig, dass sie die Limitierungen des OSD Speichers verstehen. Wenn
+zuviele Objekte mit zuvielen Farben definiert werden, dann wird VDR einen
+Fehler ins Log schreiben und einige Bereiche werden nicht angezeigt werden. Bei
+anderen Ausgabegeräten mag es sein, dass diese Limitierungen nicht zutreffen,
+wenn Sie also ein Skin für ein anderes Gerät schreiben möchten, benutzen Sie
+ruhig ein paar mehr Farben, aber denken Sie daran, dass VDR generell maximal
+256 Farben pro Objekt verwalten kann.
+
+Ein Objekt ist als ein bestimmter Bereich definiert, der eine bestimmte
+Farbpalette und Farbtiefe verwendet. Diese Objekte werden im Verlauf dieses
+Dokuments "Backgrounds" genannt. Berechnen sie die Dimensionen dieser Bereiche
+weise, denn überlappende oder übergroße Backgrounds führen zu einem Fehler.
+Zusätzlich muss die Breite und Höhe jedes Backgrounds durch vier teilbar sein,
+wenn eine DVB-Karte verwendet wird.
+
+
+Die Erstellung eines Bildes
+---------------------------
+
+Ich habe mit gimp einige Beispielbilder erstellt, die Dinge auf dem Bildschirm
+anzeigen, obwohl ich mit Grafik eigentlich recht wenig am Hut habe. Um einige
+Hinweise zu geben, werde ich erklären wie ich diese Bilder erzeugt habe.
+
+Ich habe eine Vorlage für ein Kanaldisplay von einem Community-Mitglied
+erhalten, dieses in drei Bereiche zerlegt, die jeweils komplett vom Hintergrund
+gefüllt wurden. Nun habe ich das Bild so vergrößert, dass Breite und Höhe durch
+vier teilbar sind. Um im mittleren Bereich etwas Transparenz zu erzeugen, habe
+ich die Deckkraft der Bildebene auf 50% reduziert. Anschliessend habe ich alle
+Bilder auf 14 Farben reduziert (Bild->Modus->Indiziert) (natürlich darf das
+Bild nicht zu aufwändig sein, aber mit 14 Farben bekommt man schon schöne
+Übergänge hin. Dann bleiben zwei Farben für Text und Symbole übrig, und das
+ganze passt in einen 16-farb (4-bit) Background. Reduzieren sie die Azahl der
+Farben entsprechend, wenn Sie beabsichtigen, mehr Vordergrundobjekte zu
+zeichnen. Das Ergebnis habe ich als PNG gespeichert und in das Skin kopiert.
+
+Wenn sie beabsichtigen, xpm's zu nutzen, achten sie darauf dass VDR keine
+benannten Farben beherrscht, es könnte also sein dass Bilder die gimp erzeugt
+nicht sofort nutzbar sind. Die einzige benannte Farbe, die VDR beherrscht, ist
+"None".
+
+
+Das Format der Beschreibungsdatei
+---------------------------------
+
+Die Datei ist eine einfache Konfigurationsdatei, die aus Sektionen und Objekten
+besteht. Kommentarzeilen können mit einem '#' eingeleitet werden. Leerzeilen
+werden ignoriert. Eine Sektion ist von eckigen '[]' Klammern eingeschlossen.
+Ein Objekt beginnt mit dem Text "Item=", gefolgt von der Art des Objekts.
+Dahinter folgen Parameter für das Objekt, mit Komma getrennt. Die Zeile wird
+durch ein Semikolon ';' abgeschlossen.
+
+Es ist sehr wichtig, dass sie den Zusammenhang zwischen Item und seinem
+display-Parameter verstehen. Der display-Parameter gibt nicht nur an WAS
+angezeigt wird, sondern auch OB es angezeigt wird. Ein Rechteck mit
+display=PresentVPSTime wird nur angezeigt, wenn eine aktuelle VPS-Zeit gegeben
+ist. Ein Text-Item mit display=PresentVPSTime verhält sich genauso, aber der
+anzuzeigende Text durch die tatsächliche VPS-Zeit ersetzt. Wenn Text ein
+Dollarzeichen enthält, wie in display=PresentVPSTime,text=VPS: $, dann wird
+die VPS-Zeit an der Stelle des Dollarzeichens eingesetzt.
+
+Beispiel:
+
+# Description of the skin file
+Item=Skin,name=Test,version=0.0.2;
+[Channel]
+# Dies ist die grosse Kanalanzeige
+# Hintergrundbereich wo wir drauf zeichnen (so etwas MUSS angegeben werden,
+# damit Objekte die darauf gezeichnet werden überhaupt sichtbar werden), mit
+# Bild. Bpp=4 entspricht 16 Farben
+Item=Background,path=channeltop.xpm,x=42,y=350,width=540,height=32,bpp=4;
+# Ein zweiter Bereich unter dem ersten, wieder mit 16 Farben (macht 32 Farben
+# insgesamt)
+Item=Background,path=channel.png,x=48,y=382,width=528,height=84,bpp=4;
+# Ein Text-Objekt welches die Kanalnummer und den -namen anzeigt (wenn
+# vorhanden)
+Item=Text,display=ChannelNumberName,x=50,y=355,width=250,height=28,fg=ChNumNameFG,font=Sml;
+# Ein Text-Objekt welches das aktuelle Datum und die Zeit anzeigt.
+Item=Text,display=PresentDateTime,x=52,y=387,width=150,height=28,fg=DateTimeFG,font=Osd;
+[Volume]
+# Dies ist die Lautstärkeanzeige
+# Und wieder ein Bereich in dem wir Objekte zeichnen können (diesmal ohne Bild)
+# Wird keine BG-Farbe angegeben, so wird transparent (unsichtbar) benutzt.
+Item=Background,x=10,y=10,width=20,height=200,bpp=4;
+# Eine Fortschrittsleiste welche die aktuelle Lautstärke anzeigt.
+Item=Progress,display=VolumeCurrent,x=10,y=10,width=20,height=200,bg=VolumeBG,fg=VolumeFG;
+
+
+END_DE
+
+);
+
+%SECTIONS = (
+ "ChannelSmall" => [
+ "The channel display. It displays the current programme and number only, ".
+ "together with some decoration. [UNUSED]",
+
+ "Die Kanalanzeige, die nur den aktuellen Kanalnamen und die -nummer mit ".
+ "etwas Dekoration anzeigt. [UNGENUTZT]"
+ ],
+
+ "Channel" => [
+ "The channel display. It displays the current programme and number, ".
+ "together with the currently running programme and possibly a ".
+ "timebar, channel logo and some symbols.",
+
+ "Die Kanalanzeige. Sie zeigt aktuellen Kanalnamen und -nummer, ".
+ "gemeinsam mit dem aktuellen Programm und möglicherweise eine ".
+ "Zeitleiste und ein Kanallogo (noch nicht implementiert)."
+ ],
+
+ "Volume" => [
+ "The volume display. It displays the volumebar and possibly a mute ".
+ "symbol, along with decorative items.",
+
+ "Die Lautstärkeanzeige. Zeigt die Lautstärkeleiste und ".
+ "möglicherweise ein Mute-Symbol und etwas Dekoration."
+ ],
+
+ "ReplayMode" => [
+ "The replay modes display. Will be shown if only the replay mode ".
+ "symbol(s) shall be shown. This display can't contain a progress-bar.",
+
+ "Die Wiedergabeanzeige. Wird angezeigt wenn nur der ".
+ "Wiedergabemodus gezeigt werden soll. Diese Anzeige kann keine ".
+ "Wiedergabeleiste enthalten."
+ ],
+
+ "Replay" => [
+ "The full replay display. It shows the title, time and length of an ".
+ "ongoing replay, together with a Progressbar and maybe even a replay logo",
+
+ ""
+ ],
+
+ "Message" => [
+ "This display will be used only if there is no other display open, and ".
+ "VDR wants to display a message. Therefore this display shouldn't show ".
+ "much more than that message.",
+
+ ""
+ ],
+
+ "Menu" => [
+ "The full menu. This is the all-round display used when showing a list of ".
+ "items or when showing something in detail (EPG-summary for example).",
+
+ ""
+ ],
+);
+
+%ITEMS = (
+ "Background" => [
+ "This adds a background area for the specific display. This area ".
+ "will be used to draw anything else, so you have to define a ".
+ "background for everything that will be drawn later on. You can ".
+ "define a background image for that area here, too. That picture ".
+ "has to be the same width and height as the area. If you don't use ".
+ "a background image, the area will be initialized with the bg color ".
+ "(default transparent). If an image is present, the background color will ".
+ "replace the color 0 in the image's palette, and the foreground ".
+ "color will replace color 1.",
+
+ ""
+ ],
+
+ "Text" => [
+ "Draws plain text into the given area, using the given foreground ".
+ "color. Text has no background, only the pixels containing the foreground ".
+ "color will be drawn. If no width or height are given, the ".
+ "limits are the background areas. If you want to align the text, you need ".
+ "to specify at least the width. If this item is specified with an ".
+ "appropriate display parameter, and text is not given or contains a ".
+ "dollar sign, it will be substituted by the content given by the display ".
+ "parameter.",
+
+ ""
+ ],
+
+ "Scrolltext" => [
+ "Draws a line-wrapped, scrollable text-area into the area, using the ".
+ "given foreground color. Behaves like Text otherwise. This item makes ".
+ "most sense for display=MenuText, display=PresentDescription and ".
+ "display=MenuRecording, since those are the only one's supporting ".
+ "the actual scrolling mechanism (inside the menu).",
+
+ ""
+ ],
+
+ "Image" => [
+ "Draws the image from the parameter path into the area, substituting ".
+ "foreground and background colors like in Item=Background",
+
+ ""
+ ],
+
+ "Rectangle" => [
+ "Draws a rectangle filled with the foreground color into the area.",
+
+ ""
+ ],
+
+ "Ellipse" => [
+ "Draws an ellipse (or part of it) filled with the foreground color into ".
+ "the area. The parameter arc, if given, specifies which part of the ".
+ "ellipse will be drawn.",
+
+ ""
+ ],
+
+ "Slope" => [
+ "Draws a slope (some kind of wave) (or part of it) filled with the ".
+ "foreground color into the area. The parameter arc, if give, specifies ".
+ "how the slope is formed.",
+
+ ""
+ ],
+
+ "Progress" => [
+ "Draws a progress bar into the display. The \"shown\" fraction of the ".
+ "relevant display-parameter is drawn using the foreground color, while ".
+ "the \"rest\" fraction is drawn using the background color (if given). ".
+ "This item makes sense for display=PresentDuration, VolumeCurrent and ".
+ "ReplayTime",
+
+ ""
+ ],
+
+ "Logo" => [
+ "Draws an image displaying some kind of logo into the area. The image ".
+ "file is given by the path- and type-parameters, together with the result ".
+ "from the corresponding display-parameter. This item makes sense for ".
+ "display=ChannelName (where the channel name is the filename), for ".
+ "display=ReplayMode (where the filename can be one of \"normal\", ".
+ "\"dvd\", \"vcd\", \"mp3\" and \"mplayer\" (more to come hopefully) ".
+ "and for display=Language (where the language code is [WILL BE] the ".
+ "filename. Behaves like Item=Image otherwise",
+
+ ""
+ ],
+
+ "Symbol" => [
+ "Draws an On/Off-symbol into the area. The On-image is given by the path-".
+ "parameter, the Off-image with the altpath-parameter. Otherwise like ".
+ "Item=Image",
+
+ ""
+ ],
+
+ "MenuArea" => [
+ "Specifies the area that is considered to be the central menu area ".
+ "(where the list of menu items is drawn). Note that this will not display ".
+ "anything yet, you have to give additional Text items to actually draw ".
+ "the list",
+
+ ""
+ ],
+
+ "MenuItem" => [
+ "Specifies the area occupied by one item of the list which is displayed ".
+ "in the central menu area. The number of items that can be displayed is ".
+ "determined by the height of MenuArea and the height of this item. Note ".
+ "that this will not display anything yet, you have to give additional ".
+ "Text items to actually draw the list. Also note that the x- and y-".
+ "parameters (if given) are relative to the top-left corner of the ".
+ "MenuArea.",
+
+ ""
+ ],
+
+ "Scrollbar" => [
+ "Draws a real scrollbar into the display. The \"seen\" and \"rest\" ".
+ "fractions are drawn using the background color, while the bar indicating ".
+ "the \"shown\" fraction and the current position, is drawn using the ".
+ "foreground color. This item makes sense for display=MenuText, ".
+ "PresentDescription and MenuRecording",
+
+ ""
+ ],
+);
+
+%ITEMPARAMS = (
+ "Background" => "x, y, width, height, bpp, path, bg, fg",
+ "Text" => "display, x, y, width, height, fg, font, align",
+ "Scrolltext" => "display, x, y, width, height, fg, font",
+ "Image" => "display, x, y, width, height, bg, fg, path",
+ "Rectangle" => "display, x, y, width, height, fg",
+ "Ellipse" => "display, x, y, width, height, fg, arc",
+ "Slope" => "display, x, y, width, height, fg, arc",
+ "Progress" => "display, x, y, width, height, bg, fg",
+ "Logo" => "display, x, y, width, height, bg, fg, path, type",
+ "Symbol" => "display, x, y, width, height, bg, fg, path, altpath",
+ "MenuArea" => "x, y, width, height",
+ "MenuItem" => "x, y, width, height",
+ "Scrollbar" => "display, x, y, width, height, bg, fg",
+);
+
+%DISPLAYS = (
+ "DateTimeF" => [
+ "The current date and time, formatted according to the format-parameter. ".
+ "To learn how the string can be formatted, please see man strftime.",
+
+ ""
+ ],
+
+ "DateTime" => [
+ "The current date and time, pre-formatted like \"dd.mm. HH:MM\".",
+
+ ""
+ ],
+
+ "Date" => [
+ "The current date, pre-formatted like \"dd.mm.\".",
+
+ ""
+ ],
+
+ "Time" => [
+ "The current time, pre-formatted like \"HH:MM\".",
+
+ ""
+ ],
+
+ "ChannelNumberName" => [
+ "A string containing the current channel number and name, where the ".
+ "channel number can be followed by a minus (while entering a channel) ".
+ "or where the channel name can be a channel group separator",
+
+ ""
+ ],
+
+ "ChannelNumber" => [
+ "A string containing the current channel number, where the ".
+ "channel number can be followed by a minus (while entering a channel).",
+
+ ""
+ ],
+ "ChannelName" => [
+ "A string containing the current channel name, where the ".
+ "channel name can be a channel group separator. This also substitutes the ".
+ "channel logo (if present).",
+
+ ""
+ ],
+
+ "Language" => [
+ "This substitutes a language logo, which will someday show the flag of ".
+ "the language currently in programme. Today only \"Audio 1\", \"Audio 2\" ".
+ "and \"Digital Audio\" are possible.",
+
+ ""
+ ],
+
+ "PresentDateTimeF" => [
+ "The start date and time of the present event (in the channel display or ".
+ "while viewing EPG-details in the menu), formatted according to the ".
+ "format-parameter. ".
+ "To learn how the string can be formatted, please see man strftime.",
+
+ ""
+ ],
+
+ "PresentStartTime" => [
+ "The start time of the present event (in the channel display or ".
+ "while viewing EPG-details in the menu), formatted like \"HH:MM\"",
+
+ ""
+ ],
+
+ "PresentDate" => [
+ "The start date of the present event (in the channel display or ".
+ "while viewing EPG-details in the menu), formatted like \"dd.mm.\"",
+
+ ""
+ ],
+
+ "PresentVPSTime" => [
+ "The VPS start time of the present event (in the channel display or ".
+ "while viewing EPG-details in the menu), formatted like \"HH:MM\", ".
+ "if present and different from the normal start time.",
+
+ ""
+ ],
+
+ "PresentEndTime" => [
+ "The end time of the present event (in the channel display or ".
+ "while viewing EPG-details in the menu), formatted like \"HH:MM\"",
+
+ ""
+ ],
+
+ "PresentDuration" => [
+ "The duration time of the present event (in the channel display or ".
+ "while viewing EPG-details in the menu), formatted like \"HH:MM\". This ".
+ "also substitutes the progress bar (timebar).",
+
+ ""
+ ],
+
+ "PresentVPS" => [
+ "Substitutes a symbol, which shows whether the channel broadcasting ".
+ "the present event is a VPS-channel",
+
+ ""
+ ],
+
+ "PresentRunning" => [
+ "Substitutes a symbol, which shows whether the present event is running.",
+
+ ""
+ ],
+
+ "PresentTimer" => [
+ "Substitutes a symbol, which shows whether the present event is scheduled ".
+ "for recording.",
+
+ ""
+ ],
+
+ "PresentTitle" => [
+ "The title of the currently displayed event.",
+
+ ""
+ ],
+
+ "PresentShortText" => [
+ "The short text (or episode name) of the currently displayed event.",
+
+ ""
+ ],
+
+ "PresentDescription" => [
+ "The long description of the currently displayed event. Makes most sense ".
+ "when used when displaying an EPG-detail in the menu, inside a Scrolltext.",
+
+ ""
+ ],
+
+ "FollowingStartTime" => [
+ "The start time of the following event (in the channel display only), ".
+ "formatted like \"HH:MM\"",
+
+ ""
+ ],
+
+ "FollowingEndTime" => [
+ "The end time of the following event (in the channel display only), ".
+ "formatted like \"HH:MM\"",
+
+ ""
+ ],
+
+ "FollowingDuration" => [
+ "The duration time of the following event (in the channel display only), ".
+ "formatted like \"HH:MM\".",
+
+ ""
+ ],
+
+ "FollowingTitle" => [
+ "The title of the following event.",
+
+ ""
+ ],
+
+ "FollowingShortText" => [
+ "The short text (or episode name) of the following event.",
+
+ ""
+ ],
+);
+
+%DISPLAYPARAMS = (
+ "DateTimeF" => "format",
+ "PresentDateTimeF" => "format"
+);
+
+%DISPLAYSUBST = (
+ "DateTimeF" => "text",
+ "DateTime" => "text",
+ "Date" => "text",
+ "Time" => "text",
+ "ChannelNumberName" => "text",
+ "ChannelNumber" => "text",
+ "ChannelName" => "text, path",
+ "Language" => "path",
+ "PresentDateTimeF" => "text",
+ "PresentStartTime" => "text",
+ "PresentDate" => "text",
+ "PresentVPSTime" => "text",
+ "PresentEndTime" => "text",
+ "PresentDuration" => "text, progress",
+ "PresentVPS" => "path",
+ "PresentRunning" => "path",
+ "PresentTimer" => "path",
+ "PresentTitle" => "text",
+ "PresentShortText" => "text",
+ "PresentDescription" => "text",
+ "FollowingStartTime" => "text",
+ "FollowingEndTime" => "text",
+ "FollowingDuration" => "text, progress",
+ "FollowingTitle" => "text",
+ "FollowingShortText" => "text",
+);
+
+return 1;