summaryrefslogtreecommitdiff
path: root/muggle-plugin/sh_console_osd.c
diff options
context:
space:
mode:
Diffstat (limited to 'muggle-plugin/sh_console_osd.c')
-rw-r--r--muggle-plugin/sh_console_osd.c212
1 files changed, 212 insertions, 0 deletions
diff --git a/muggle-plugin/sh_console_osd.c b/muggle-plugin/sh_console_osd.c
new file mode 100644
index 0000000..ebb4702
--- /dev/null
+++ b/muggle-plugin/sh_console_osd.c
@@ -0,0 +1,212 @@
+/*
+ * osd.c: Abstract On Screen Display layer
+ *
+ * See the main source file 'vdr.c' for copyright information and
+ * how to reach the author.
+ *
+ * $Id: sh_console_osd.c,v 1.1 2004/02/01 18:22:53 LarsAC Exp $
+ */
+
+#include "myosd.h"
+#include <string.h>
+//#include "device.h"
+// #include "i18n.h"
+//#include "status.h"
+
+// --- cOsdItem --------------------------------------------------------------
+
+cOsdItem::cOsdItem(eOSState State)
+{
+ text = NULL;
+}
+
+cOsdItem::cOsdItem(const char *Text, eOSState State)
+{
+ text = NULL;
+ SetText(Text,true);
+}
+
+cOsdItem::~cOsdItem()
+{
+ free(text);
+}
+
+void cOsdItem::SetText(const char *Text, bool Copy)
+{
+ free(text);
+ text = Copy ? strdup(Text) : (char *)Text; // text assumes ownership!
+}
+
+const char* cOsdItem::Get()
+{
+ return text;
+}
+void cOsdItem::Display()
+{
+ printf("%s\n", text);
+}
+
+// --- cOsdMenu --------------------------------------------------------------
+
+cOsdMenu::cOsdMenu(const char *Title, int c0, int c1, int c2, int c3, int c4)
+{
+ cols[0] = c0;
+ cols[1] = c1;
+ cols[2] = c2;
+ cols[3] = c3;
+ cols[4] = c4;
+ m_first = 0;
+ m_current = m_marked = -1;
+ subMenu = NULL;
+ helpRed = helpGreen = helpYellow = helpBlue = NULL;
+ status = NULL;
+}
+
+cOsdMenu::~cOsdMenu()
+{
+ free(title);
+ delete subMenu;
+ free(status);
+}
+
+
+void cOsdMenu::SetTitle(const char *Title, bool ShowDate)
+{
+ title = strdup(Title);
+}
+
+void cOsdMenu::Add(cOsdItem *Item)
+{
+ m_display.push_back(Item);
+}
+
+void cOsdMenu::Display(void)
+{
+ //Interface->Clear();
+ printf("\n\n\n\n");
+ printf("----------(start %d, current %d)--------------------\n",
+ m_first, m_current);
+ //Interface->SetCols(cols);
+ //Interface->Title(title);
+ printf(" Title: %s\n", title);
+ //Interface->Help(helpRed, helpGreen, helpYellow, helpBlue);
+ for(int i= m_first; i < (int) m_display.size() && i < m_first+DISPLAY_SIZE; i++)
+ {
+ if(i == m_current)
+ {
+ printf("==>");
+
+ }
+ else
+ {
+ printf(" ");
+
+ }
+ printf("%s\n", m_display[i]->Get());
+ }
+ printf("----------------------------------------------\n");
+ if(hasHotkeys)
+ {
+ printf("%15s (r) %15s (g) %15s (y) %15s (b)\n",
+ helpRed? helpRed :"" ,
+ helpGreen? helpGreen :"" ,
+ helpYellow? helpYellow :"" ,
+ helpBlue? helpBlue :"" );
+
+ }
+}
+
+int cOsdMenu::Index(cOsdItem *Item)
+{
+ int pos=0;
+ for(vector<cOsdItem*>::iterator iter = m_display.begin();
+ iter != m_display.end(); iter++)
+ {
+ if((*iter) == Item)
+ {
+ break;
+ }
+ pos++;
+ }
+ return pos;
+}
+void cOsdMenu::SetCurrent(cOsdItem *Item)
+{
+ m_current = Item ? Index(Item) : -1;
+}
+void cOsdMenu::CursorUp(void)
+{
+ if(m_current >0) m_current--;
+ if(m_current < m_first) m_first = m_first - PAGE_JUMP;
+ Display();
+}
+void cOsdMenu::CursorDown(void)
+{
+ if(m_current < (int)m_display.size()-1)
+ m_current++;
+ if(m_current >= m_first+DISPLAY_SIZE) m_first =m_first + PAGE_JUMP;
+ Display();
+}
+
+void cOsdMenu::PageUp(void)
+{
+ if(m_first >= PAGE_JUMP)
+ {
+ m_first -= PAGE_JUMP;
+ m_current -= PAGE_JUMP;
+ }
+ Display();
+
+}
+void cOsdMenu::PageDown(void)
+{
+ if(m_first+ PAGE_JUMP< (int)m_display.size())
+ {
+ m_first += PAGE_JUMP;
+ m_current += PAGE_JUMP;
+ if(m_current < m_first) m_current = m_first;
+ if(m_current >= (int) m_display.size())
+ m_current = (int) m_display.size();
+ }
+ Display();
+}
+
+void cOsdMenu::Clear(void)
+{
+ m_first = 0;
+ m_current = m_marked = -1;
+ hasHotkeys = false;
+ for(vector<cOsdItem*>::iterator iter = m_display.begin();
+ iter != m_display.end(); iter++)
+ {
+ delete *iter;
+ }
+ m_display.clear();
+}
+
+eOSState cOsdMenu::ProcessKey(eKeys Key)
+{
+
+ switch (Key) {
+ case kUp|k_Repeat:
+ case kUp: CursorUp(); break;
+ case kDown|k_Repeat:
+ case kDown: CursorDown(); break;
+ case kLeft|k_Repeat:
+ case kLeft: PageUp(); break;
+ case kRight|k_Repeat:
+ case kRight: PageDown(); break;
+ case kBack: return osBack;
+ default: if (m_marked < 0)
+ return osUnknown;
+ }
+ return osContinue;
+}
+
+void cOsdMenu::SetHelp(const char *Red, const char *Green, const char *Yellow, const char *Blue)
+{
+ helpRed = Red;
+ helpGreen = Green;
+ helpYellow = Yellow;
+ helpBlue = Blue;
+}