From 4921cf32c8bda089a21dc4a14ce191ed477f80ff Mon Sep 17 00:00:00 2001 From: Midas Date: Thu, 22 Apr 2010 01:06:40 +0200 Subject: Initial release. Version 0.0.1b. Fork of the taste plugin 0.0.2d by LordJaxom. Patches for the taste plugin by tomg and mapovi were added permanently to the source of the block plugin. For more information, feature list und bugfixes read HISTORY and README please. --- block/setup.c | 178 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 178 insertions(+) create mode 100644 block/setup.c (limited to 'block/setup.c') diff --git a/block/setup.c b/block/setup.c new file mode 100644 index 0000000..4f48739 --- /dev/null +++ b/block/setup.c @@ -0,0 +1,178 @@ +/** + * based on setup.c,v 1.1.1.1 2006/02/26 14:11:02 lordjaxom + * + * version by Midas + * + */ + +#include "setup.h" + +#include + +cMenuSetupBlock::cMenuSetupBlock(): + cMenuSetupPage() +{ + mEventsData = EventsBlock; // need to use copy constructor + mSetupData = SetupBlock; + Set(); +} + +void cMenuSetupBlock::Set(void) { + int current = Current(); + cOsdItem *item; + + Clear(); + + Add(new cMenuEditBoolItem(tr("Hide Mainmenu Entry"), &mSetupData.HideMenuEntry)); + Add(new cMenuEditIntItem(tr("Message Timeout [s]"), &mSetupData.MessageTimeout, 0, 10)); + + item = new cOsdItem(""); + item->SetSelectable(false); + Add(item); + + item = new cOsdItem(tr("--- Keywords -------------------------------------------------------------------")); + item->SetSelectable(false); + Add(item); + +#define NONKEYWORDITEMS 4 + + int index = 0; + cEventBlock *event = mEventsData.First(); + while (event != NULL) { + Add(new cOsdItem(event->Pattern())); + event = mEventsData.Next(event); + ++index; + } + + SetCurrent(Get(current)); + SetHelpKeys(); + Display(); +} + +void cMenuSetupBlock::SetHelpKeys(void) +{ + const char *red = NULL; + const char *yellow = NULL; + + printf("sethelpkeys, current = %d\n", Current()); + + if (Current() >= NONKEYWORDITEMS) { + red = trVDR("Button$Edit"); + yellow = trVDR("Button$Delete"); + } + SetHelp(red, trVDR("Button$New"), yellow, NULL); +} + +void cMenuSetupBlock::Store(void) +{ + EventsBlock = mEventsData; + EventsBlock.Save(); + + SetupBlock = mSetupData; + SetupStore("HideMenuEntry", SetupBlock.HideMenuEntry); + SetupStore("MessageTimeout", SetupBlock.MessageTimeout); +} + +eOSState cMenuSetupBlock::Edit(void) +{ + if (HasSubMenu() || Current() < NONKEYWORDITEMS) + return osContinue; + + cEventBlock *event = mEventsData.Get(Current() - NONKEYWORDITEMS); + if (event != NULL) + return AddSubMenu(new cMenuSetupEditBlock(event)); + return osContinue; +} + +eOSState cMenuSetupBlock::New(void) +{ + if (HasSubMenu()) + return osContinue; + + mEventsData.Add(new cEventBlock()); + Set(); + return osContinue; +} + +eOSState cMenuSetupBlock::Delete(void) +{ + if (HasSubMenu() || Current() < NONKEYWORDITEMS) + return osContinue; + + cEventBlock *event = mEventsData.Get(Current() - NONKEYWORDITEMS); + if (event != NULL) { + if (Interface->Confirm(tr("Delete keyword?"))) + mEventsData.Del(event); + } + Set(); + return osContinue; +} + +eOSState cMenuSetupBlock::ProcessKey(eKeys Key) { + bool hadSubMenu = HasSubMenu(); + eOSState state = cMenuSetupPage::ProcessKey(Key); + + if (hadSubMenu && !HasSubMenu()) { + Set(); + return state; + } + + switch (state) { + case osUnknown: // normal key handling + switch (Key) { + case kRed: return Edit(); + case kGreen: return New(); + case kYellow: return Delete(); + + default: + break; + } + break; + + default: + break; + } + + if (!HasSubMenu()) + Set(); + + return state; +} + +static const char *ALLOWEDCHARS = "$ abcdefghijklmnopqrstuvwxyz0123456789-_.#~/[]{}()+*^$"; + +cMenuSetupEditBlock::cMenuSetupEditBlock(cEventBlock *Event): + cOsdMenu("", 33), + mEvent(Event), + mData(*Event) +{ + char buf[80]; + snprintf(buf, sizeof(buf), "%s - %s '%s'", trVDR("Setup"), trVDR("Plugin"), "block"); + SetTitle(buf); + Add(new cMenuEditStrItem(tr("Pattern"), mData.mPattern, sizeof(mData.mPattern), tr(ALLOWEDCHARS))); + Add(new cMenuEditBoolItem(tr("Regular Expression"), &mData.mRegularExp)); + Add(new cMenuEditBoolItem(tr("Ignore Case"), &mData.mIgnoreCase)); +} + +eOSState cMenuSetupEditBlock::ProcessKey(eKeys Key) +{ + eOSState state = cOsdMenu::ProcessKey(Key); + + if (state == osUnknown) { + switch (Key) { + case kOk: + if (!mData.Compile()) { + Skins.Message(mtError, tr("Malformed regular expression!")); + state = osContinue; + } else { + *mEvent = mData; + state = osBack; + } + break; + + default: + break; + } + } + return state; +} -- cgit v1.2.3