summaryrefslogtreecommitdiff
path: root/displaymenu.c
diff options
context:
space:
mode:
authorlouis <louis.braun@gmx.de>2014-09-27 09:25:14 +0200
committerlouis <louis.braun@gmx.de>2014-09-27 09:25:14 +0200
commitb0509b5182b6e0d04f05e6b3d5676b0d21f51966 (patch)
tree22b302342f22843e0815eb5f516c85f1478cbf0b /displaymenu.c
downloadvdr-plugin-skindesigner-0.0.1.tar.gz
vdr-plugin-skindesigner-0.0.1.tar.bz2
initial commit version 0.0.10.0.1
Diffstat (limited to 'displaymenu.c')
-rw-r--r--displaymenu.c233
1 files changed, 233 insertions, 0 deletions
diff --git a/displaymenu.c b/displaymenu.c
new file mode 100644
index 0000000..73e489d
--- /dev/null
+++ b/displaymenu.c
@@ -0,0 +1,233 @@
+#include "displaymenu.h"
+#include "libcore/helpers.h"
+
+cSDDisplayMenu::cSDDisplayMenu(cTemplate *menuTemplate) {
+ doOutput = true;
+ state = vsInit;
+ if (!menuTemplate) {
+ doOutput = false;
+ esyslog("skindesigner: displayMenu no valid template - aborting");
+ return;
+ }
+ rootView = new cDisplayMenuRootView(menuTemplate->GetRootView());
+ if (!rootView->createOsd()) {
+ doOutput = false;
+ return;
+ }
+}
+
+cSDDisplayMenu::~cSDDisplayMenu() {
+ if (!doOutput)
+ return;
+ delete rootView;
+}
+
+void cSDDisplayMenu::Scroll(bool Up, bool Page) {
+ if (!doOutput)
+ return;
+ rootView->KeyInput(Up, Page);
+}
+
+int cSDDisplayMenu::MaxItems(void) {
+ if (!doOutput)
+ return 0;
+ int maxItems = rootView->GetMaxItems();
+ return maxItems;
+}
+
+void cSDDisplayMenu::Clear(void) {
+ if (!doOutput)
+ return;
+ rootView->Clear();
+}
+
+void cSDDisplayMenu::SetMenuCategory(eMenuCategory MenuCat) {
+ if (!doOutput)
+ return;
+ rootView->SetMenu(MenuCat, (state == vsInit) ? true : false);
+ cSkinDisplayMenu::SetMenuCategory(MenuCat);
+ if (state != vsInit)
+ state = vsMenuInit;
+}
+
+void cSDDisplayMenu::SetTitle(const char *Title) {
+ if (!doOutput)
+ return;
+ rootView->SetTitle(Title);
+}
+
+void cSDDisplayMenu::SetButtons(const char *Red, const char *Green, const char *Yellow, const char *Blue) {
+ if (!doOutput)
+ return;
+ rootView->SetButtonTexts(Red, Green, Yellow, Blue);
+ if (state != vsInit && MenuCategory() != mcMain)
+ state = vsMenuInit;
+}
+
+void cSDDisplayMenu::SetMessage(eMessageType Type, const char *Text) {
+ if (!doOutput)
+ return;
+ rootView->SetMessage(Type, Text);
+ rootView->DoFlush();
+}
+
+bool cSDDisplayMenu::SetItemEvent(const cEvent *Event, int Index, bool Current, bool Selectable, const cChannel *Channel, bool WithDate, eTimerMatch TimerMatch) {
+ if (!doOutput)
+ return true;
+ if (!rootView->SubViewAvailable())
+ return false;
+ if (Current) {
+ if (Channel) {
+ rootView->SetChannel(Channel);
+ } else if (Event) {
+ rootView->SetChannel(Channels.GetByChannelID(Event->ChannelID()));
+ }
+ }
+ cDisplayMenuListView *list = rootView->GetListView();
+ if (!list)
+ return false;
+ list->AddSchedulesMenuItem(Index, Event, Channel, TimerMatch, MenuCategory(), Current, Selectable);
+ if (state == vsIdle)
+ state = vsMenuUpdate;
+ return true;
+}
+
+bool cSDDisplayMenu::SetItemTimer(const cTimer *Timer, int Index, bool Current, bool Selectable) {
+ if (!doOutput)
+ return true;
+ if (!rootView->SubViewAvailable())
+ return false;
+ cDisplayMenuListView *list = rootView->GetListView();
+ if (!list)
+ return false;
+ list->AddTimersMenuItem(Index, Timer, Current, Selectable);
+ if (state == vsIdle)
+ state = vsMenuUpdate;
+ return true;
+}
+
+bool cSDDisplayMenu::SetItemChannel(const cChannel *Channel, int Index, bool Current, bool Selectable, bool WithProvider) {
+ if (!doOutput)
+ return true;
+ if (!rootView->SubViewAvailable())
+ return false;
+ cDisplayMenuListView *list = rootView->GetListView();
+ if (!list)
+ return false;
+ list->AddChannelsMenuItem(Index, Channel, WithProvider, Current, Selectable);
+ if (state == vsIdle)
+ state = vsMenuUpdate;
+ return true;
+}
+
+bool cSDDisplayMenu::SetItemRecording(const cRecording *Recording, int Index, bool Current, bool Selectable, int Level, int Total, int New) {
+ if (!doOutput)
+ return true;
+ if (!rootView->SubViewAvailable())
+ return false;
+ cDisplayMenuListView *list = rootView->GetListView();
+ if (!list)
+ return false;
+ list->AddRecordingMenuItem(Index, Recording, Level, Total, New, Current, Selectable);
+ if (state == vsIdle)
+ state = vsMenuUpdate;
+ return true;
+}
+
+void cSDDisplayMenu::SetItem(const char *Text, int Index, bool Current, bool Selectable) {
+ if (!doOutput)
+ return;
+ cDisplayMenuListView *list = rootView->GetListView();
+ if (!list) {
+ return;
+ }
+ eMenuCategory cat = MenuCategory();
+ if (cat == mcMain) {
+ list->AddMainMenuItem(Index, Text, Current, Selectable);
+ } else if (cat == mcSetup) {
+ list->AddSetupMenuItem(Index, Text, Current, Selectable);
+ } else {
+ string *tabTexts = new string[MaxTabs];
+ for (int i=0; i<MaxTabs; i++) {
+ const char *s = GetTabbedText(Text, i);
+ if (s) {
+ tabTexts[i] = s;
+ } else {
+ tabTexts[i] = "";
+ }
+ }
+ list->AddDefaultMenuItem(Index, tabTexts, Current, Selectable);
+ SetEditableWidth( rootView->GetListViewWidth() / 2);
+ }
+ if (state == vsIdle)
+ state = vsMenuUpdate;
+}
+
+void cSDDisplayMenu::SetTabs(int Tab1, int Tab2, int Tab3, int Tab4, int Tab5) {
+ if (!doOutput)
+ return;
+ rootView->SetTabs(Tab1, Tab2, Tab3, Tab4, Tab5);
+}
+
+int cSDDisplayMenu::GetTextAreaWidth(void) const {
+ int areaWidth = rootView->GetTextAreaWidth();
+ return areaWidth;
+}
+
+const cFont *cSDDisplayMenu::GetTextAreaFont(bool FixedFont) const {
+ return NULL;
+}
+
+void cSDDisplayMenu::SetScrollbar(int Total, int Offset) {
+ if (!doOutput)
+ return;
+ rootView->RenderMenuScrollBar(Total, Offset);
+}
+
+void cSDDisplayMenu::SetEvent(const cEvent *Event) {
+ if (!doOutput)
+ return;
+ rootView->SetDetailedViewEvent(Event);
+ state = vsMenuDetail;
+}
+
+void cSDDisplayMenu::SetRecording(const cRecording *Recording) {
+ if (!doOutput)
+ return;
+ rootView->SetDetailedViewRecording(Recording);
+ state = vsMenuDetail;
+}
+
+void cSDDisplayMenu::SetText(const char *Text, bool FixedFont) {
+ if (!doOutput)
+ return;
+ rootView->SetDetailedViewText(Text);
+ state = vsMenuDetail;
+}
+
+void cSDDisplayMenu::Flush(void) {
+ if (!doOutput)
+ return;
+ if (state == vsInit) {
+ rootView->Start();
+ rootView->RenderMenuItems();
+ rootView->DoFlush();
+ } else if (state == vsMenuInit) {
+ rootView->Render();
+ rootView->DoFlush();
+ rootView->RenderMenuItems();
+ rootView->DoFlush();
+ } else if (state == vsMenuUpdate) {
+ rootView->RenderMenuItems();
+ rootView->DoFlush();
+ } else if (state == vsMenuDetail) {
+ rootView->Render();
+ rootView->DoFlush();
+ rootView->RenderDetailView();
+ rootView->DoFlush();
+ } else {
+ if (rootView->RenderDynamicElements())
+ rootView->DoFlush();
+ }
+ state = vsIdle;
+}