summaryrefslogtreecommitdiff
path: root/osdbase.h
diff options
context:
space:
mode:
Diffstat (limited to 'osdbase.h')
-rw-r--r--osdbase.h296
1 files changed, 101 insertions, 195 deletions
diff --git a/osdbase.h b/osdbase.h
index 3277d82..53fbf6b 100644
--- a/osdbase.h
+++ b/osdbase.h
@@ -4,221 +4,127 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: osdbase.h 1.9 2004/01/31 10:28:49 kls Exp $
+ * $Id: osdbase.h 1.10 2004/04/30 13:40:11 kls Exp $
*/
#ifndef __OSDBASE_H
#define __OSDBASE_H
-#include <stdio.h>
-#include "font.h"
+#include "config.h"
+#include "osd.h"
+#include "skins.h"
+#include "tools.h"
-#define MAXNUMCOLORS 256
+enum eOSState { osUnknown,
+ osContinue,
+ osSchedule,
+ osChannels,
+ osTimers,
+ osRecordings,
+ osPlugin,
+ osSetup,
+ osCommands,
+ osPause,
+ osRecord,
+ osReplay,
+ osStopRecord,
+ osStopReplay,
+ osCancelEdit,
+ osSwitchDvb,
+ osBack,
+ osEnd,
+ os_User, // the following values can be used locally
+ osUser1,
+ osUser2,
+ osUser3,
+ osUser4,
+ osUser5,
+ osUser6,
+ osUser7,
+ osUser8,
+ osUser9,
+ osUser10,
+ };
-enum eDvbColor {
-#ifdef DEBUG_OSD
- clrBackground,
- clrTransparent = clrBackground,
- clrBlack = clrBackground,
- clrRed,
- clrGreen,
- clrYellow,
- clrBlue,
- clrMagenta,
- clrCyan,
- clrWhite,
-#else
- clrTransparent = 0x00000000,
- clrBackground = 0x7F000000, // 50% gray
- clrBlack = 0xFF000000,
- clrRed = 0xFF1414FC,
- clrGreen = 0xFF24FC24,
- clrYellow = 0xFF24C0FC,
- clrMagenta = 0xFFFC00B0,
- clrBlue = 0xFFFC0000,
- clrCyan = 0xFFFCFC00,
- clrWhite = 0xFFFCFCFC,
-#endif
- };
-
-class cPalette {
+class cOsdItem : public cListObject {
private:
- eDvbColor color[MAXNUMCOLORS];
- int maxColors, numColors;
- bool used[MAXNUMCOLORS];
- bool fetched[MAXNUMCOLORS];
- bool full;
+ char *text;
+ int offset;
+ eOSState state;
+ bool selectable;
protected:
- typedef u_char tIndexes[MAXNUMCOLORS];
+ bool fresh;
public:
- cPalette(int Bpp);
- int Index(eDvbColor Color);
- void Reset(void);
- void SetColor(int Index, eDvbColor Color);
- eDvbColor GetColor(int Index) { return Index < maxColors ? color[Index] : clrBlack; }
- const eDvbColor *NewColors(int &FirstColor, int &LastColor);
- // With every call this function returns a consecutive range of
- // color entries that have been added since the last call. The
- // return value is the address of the first new color, and the
- // index of the first and last new color are returned in the given
- // int parameters. If there are no new color entries, NULL will
- // be returned.
- const eDvbColor *AllColors(int &NumColors);
- // Returns a pointer to the complete color table and stores the
- // number of valid entries in NumColors. If no colors have been
- // stored yet, NumColors will be set to 0 and the function will
- // return NULL.
- void Take(const cPalette &Palette, tIndexes *Indexes = NULL);
+ cOsdItem(eOSState State = osUnknown);
+ cOsdItem(const char *Text, eOSState State = osUnknown);
+ virtual ~cOsdItem();
+ bool Selectable(void) { return selectable; }
+ void SetText(const char *Text, bool Copy = true);
+ void SetSelectable(bool Selectable);
+ void SetFresh(bool Fresh);
+ const char *Text(void) { return text; }
+ virtual void Set(void) {}
+ virtual eOSState ProcessKey(eKeys Key);
};
-class cBitmap : public cPalette {
+class cOsdObject {
+ friend class cOsdMenu;
private:
- const cFont *font;
- eDvbFont fontType;
- u_char *bitmap;
- bool clearWithBackground;
+ bool isMenu;
protected:
- int width, height;
- int dirtyX1, dirtyY1, dirtyX2, dirtyY2;
+ bool needsFastResponse;
public:
- cBitmap(int Width, int Height, int Bpp, bool ClearWithBackground = true);
- virtual ~cBitmap();
- bool ClearWithBackground(void) { return clearWithBackground; }
- eDvbFont SetFont(eDvbFont Font);
- bool Dirty(int &x1, int &y1, int &x2, int &y2);
- void SetIndex(int x, int y, u_char Index);
- void SetPixel(int x, int y, eDvbColor Color);
- void SetBitmap(int x, int y, const cBitmap &Bitmap);
- int Width(void) { return width; }
- int Width(unsigned char c);
- int Width(const char *s);
- int Height(void) { return height; }
- void Text(int x, int y, const char *s, eDvbColor ColorFg = clrWhite, eDvbColor ColorBg = clrBackground);
- void Fill(int x1, int y1, int x2, int y2, eDvbColor Color);
- void Clean(void);
- void Clear(void);
- const u_char *Data(int x, int y);
+ cOsdObject(bool FastResponse = false) { isMenu = false; needsFastResponse = FastResponse; }
+ virtual ~cOsdObject() {}
+ bool NeedsFastResponse(void) { return needsFastResponse; }
+ bool IsMenu(void) { return isMenu; }
+ virtual void Show(void) {}
+ virtual eOSState ProcessKey(eKeys Key) { return osUnknown; }
};
-#define MAXNUMWINDOWS 7 // OSD windows are counted 1...7
-
-class cWindow : public cBitmap {
-private:
- int handle; // the index within the OSD's window array (0...MAXNUMWINDOWS - 1)
- int x0, y0;
- int bpp;
- bool tiled;
- bool shown;
-public:
- cWindow(int Handle, int x, int y, int w, int h, int Bpp, bool ClearWithBackground, bool Tiled);
- int X0(void) { return x0; }
- int Y0(void) { return y0; }
- int Bpp(void) { return bpp; }
- bool Tiled(void) { return tiled; }
- bool Shown(void) { bool s = shown; shown = true; return s; }
- int Handle(void) { return handle; }
- bool Contains(int x, int y);
- void Relocate(int x, int y);
- void Fill(int x1, int y1, int x2, int y2, eDvbColor Color);
- void SetBitmap(int x, int y, const cBitmap &Bitmap);
- void Text(int x, int y, const char *s, eDvbColor ColorFg = clrWhite, eDvbColor ColorBg = clrBackground);
- const u_char *Data(int x, int y);
- };
-
-typedef int tWindowHandle;
-
-// '-1' is used as an error return value!
-#define ALL_WINDOWS (-2)
-#define ALL_TILED_WINDOWS (-3)
-#define LAST_CREATED_WINDOW (-4)
-
-class cOsdBase {
+class cOsdMenu : public cOsdObject, public cList<cOsdItem> {
private:
- int numWindows;
- int x0, y0;
- cWindow *window[MAXNUMWINDOWS];
- cWindow *GetWindow(int x, int y);
- cWindow *GetWindow(tWindowHandle Window);
+ static cSkinDisplayMenu *displayMenu;
+ static int displayMenuCount;
+ static int displayMenuItems;
+ char *title;
+ int cols[cSkinDisplayMenu::MaxTabs];
+ int first, current, marked;
+ cOsdMenu *subMenu;
+ const char *helpRed, *helpGreen, *helpYellow, *helpBlue;
+ char *status;
+ int digit;
+ bool hasHotkeys;
protected:
- cWindow *GetWindowNr(int i) { return i < MAXNUMWINDOWS ? window[i] : NULL; }
- int NumWindows(void) { return numWindows; }
- int X0(void) { return x0; }
- int Y0(void) { return y0; }
- virtual bool OpenWindow(cWindow *Window) = 0;
- // Opens the window on the OSD hardware, without actually showing it (the
- // initial state shall be "hidden").
- virtual void CommitWindow(cWindow *Window) = 0;
- // Write any modified data and color definitions to the OSD hardware.
- // Use the window's Dirty() function to find out which area of data
- // actually needs to be transferred. If the window has not yet been explicitly
- // shown through a call to ShowWindow(), no visible activity shall take place.
- virtual void ShowWindow(cWindow *Window) = 0;
- // Make the window actually visible on the OSD hardware.
- virtual void HideWindow(cWindow *Window, bool Hide) = 0;
- // Temporarily hide the window (if 'Hide' is 'true') or make a previously
- // hidden window visible again (if 'Hide' is 'false').
- virtual void MoveWindow(cWindow *Window, int x, int y) = 0;
- // Move the window to a new location.
- virtual void CloseWindow(cWindow *Window) = 0;
- // Close the window and release any OSD hardware resources allocated for it.
+ cSkinDisplayMenu *DisplayMenu(void) { return displayMenu; }
+ const char *hk(const char *s);
+ void SetHasHotkeys(void);
+ virtual void Clear(void);
+ bool SelectableItem(int idx);
+ void SetCurrent(cOsdItem *Item);
+ void RefreshCurrent(void);
+ void DisplayCurrent(bool Current);
+ void CursorUp(void);
+ void CursorDown(void);
+ void PageUp(void);
+ void PageDown(void);
+ void Mark(void);
+ eOSState HotKey(eKeys Key);
+ eOSState AddSubMenu(cOsdMenu *SubMenu);
+ eOSState CloseSubMenu();
+ bool HasSubMenu(void) { return subMenu; }
+ void SetStatus(const char *s);
+ void SetTitle(const char *Title);
+ void SetHelp(const char *Red, const char *Green = NULL, const char *Yellow = NULL, const char *Blue = NULL);
+ virtual void Del(int Index);
public:
- cOsdBase(int x, int y);
- // Initializes the OSD, starting at screen coordinates (x, y).
- virtual ~cOsdBase();
- // Destroys all windows and shuts down the OSD.
- tWindowHandle Create(int x, int y, int w, int h, int Bpp, bool ClearWithBackground = true, bool Tiled = true);
- // Creates a window at coordinates (x, y), which are relative to the OSD's
- // origin given in the constructor, with the given width, height and color
- // depth. ClearWithBackground controls whether the window will be filled with
- // clrBackground when it is cleared. Setting this to 'false' may be useful
- // for windows that don't need clrBackground but want to save this color
- // palette entry for a different color. Tiled controls whether this will
- // be part of a multi section OSD (with several windows that all have
- // different color depths and palettes and form one large OSD area), or
- // whether this is a "standalone" window that will be drawn "in front"
- // of any windows defined *after* this one (this can be used for highlighting
- // certain parts of the OSD, as would be done in a 'cursor').
- // Returns a handle that can be used to identify this window.
- void AddColor(eDvbColor Color, tWindowHandle Window = LAST_CREATED_WINDOW);
- // Adds the Color to the color palette of the given window if it is not
- // already contained in the palette (and if the palette still has free
- // slots for new colors). The default value LAST_CREATED_WINDOW will
- // access the most recently created window, without the need of explicitly
- // using a window handle.
- void Flush(void);
- // Actually commits all data of all windows to the OSD.
- void Clear(tWindowHandle Window = ALL_TILED_WINDOWS);
- // Clears the given window. If ALL_TILED_WINDOWS is given, only the tiled
- // windows will be cleared, leaving the standalone windows untouched. If
- // ALL_WINDOWS is given, the standalone windows will also be cleared.
- void Fill(int x1, int y1, int x2, int y2, eDvbColor Color, tWindowHandle Window = ALL_TILED_WINDOWS);
- // Fills the rectangle defined by the upper left (x1, y2) and lower right
- // (x2, y2) corners with the given Color. If a specific window is given,
- // the coordinates are relative to that window's upper left corner.
- // Otherwise they are relative to the upper left corner of the entire OSD.
- // If all tiled windows are selected, only that window which contains the
- // point (x1, y1) will actually be filled.
- void SetBitmap(int x, int y, const cBitmap &Bitmap, tWindowHandle Window = ALL_TILED_WINDOWS);
- // Sets the pixels within the given window with the data from the given
- // Bitmap. See Fill() for details about the coordinates.
- int Width(unsigned char c);
- // Returns the width (in pixels) of the given character in the current font.
- int Width(const char *s);
- // Returns the width (in pixels) of the given string in the current font.
- eDvbFont SetFont(eDvbFont Font);
- // Sets the current font for subsequent Width() and Text() operations.
- void Text(int x, int y, const char *s, eDvbColor ColorFg = clrWhite, eDvbColor ColorBg = clrBackground, tWindowHandle Window = ALL_TILED_WINDOWS);
- // Writes the given string at coordinates (x, y) with the given foreground
- // and background color into the given window (see Fill() for details
- // about the coordinates).
- void Relocate(tWindowHandle Window, int x, int y, int NewWidth = -1, int NewHeight = -1);
- // Moves the given window to the new location at (x, y). If NewWidth and
- // NewHeight are also given, the window will also be resized to the new
- // width and height.
- void Hide(tWindowHandle Window);
- // Hides the given window.
- void Show(tWindowHandle Window);
- // Shows the given window.
+ cOsdMenu(const char *Title, int c0 = 0, int c1 = 0, int c2 = 0, int c3 = 0, int c4 = 0);
+ virtual ~cOsdMenu();
+ int Current(void) { return current; }
+ void Add(cOsdItem *Item, bool Current = false, cOsdItem *After = NULL);
+ void Ins(cOsdItem *Item, bool Current = false, cOsdItem *Before = NULL);
+ virtual void Display(void);
+ virtual eOSState ProcessKey(eKeys Key);
};
#endif //__OSDBASE_H