From patchwork Sun Aug 12 12:31:43 2007 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christian Wieninger X-Patchwork-Id: 12498 Received: from mail.gmx.net ([213.165.64.20]) by www.linuxtv.org with smtp (Exim 4.63) (envelope-from ) id 1IKChs-00010s-M1 for vdr@linuxtv.org; Sun, 12 Aug 2007 14:38:08 +0200 Received: (qmail invoked by alias); 12 Aug 2007 12:30:57 -0000 Received: from F547c.f.strato-dslnet.de (EHLO [192.168.178.23]) [195.4.84.124] by mail.gmx.net (mp042) with SMTP; 12 Aug 2007 14:30:57 +0200 X-Authenticated: #2425893 X-Provags-ID: V01U2FsdGVkX181Tlk1FCA1Nnq6pzwBRqoE4SL9oHidngn8uEGKjj R7Wt1AMXAEH5VX Message-ID: <46BEFDAF.2060606@gmx.de> Date: Sun, 12 Aug 2007 14:31:43 +0200 From: Christian Wieninger User-Agent: Icedove 1.5.0.12 (X11/20070730) MIME-Version: 1.0 To: VDR Mailinglist X-Y-GMX-Trusted: 0 Subject: [vdr] FRQ: VDR core support for online help X-BeenThere: vdr@linuxtv.org X-Mailman-Version: 2.1.9 Precedence: list Reply-To: VDR Mailing List List-Id: VDR Mailing List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 12 Aug 2007 12:38:08 -0000 Status: O X-Status: X-Keywords: X-UID: 13682 Hi, today many TV equipment offers online help, even my remote does ;) VDR currently only gives help by manuals or WIKI, but this is far away every time you need it, i.e. if you whatch TV. So I was wondering if it would be interesting to add online help for VDR with the following requirements: - a dedicated key should give help in any situations (-> kHelp) - help may be available per OSD item, or - if not present - per OSD menu (e.g. some setup values could give an extra explanation) - help may be available for all player controls (e.g. I'll never keep in mind the keys for the dvd-plugin ;) ) - the implementation should also work for plugins What do you (especially Klaus) think about an online help? I've added a quick and dirty patch, that adds the basics for an online help. With the patch the implemenation of an online help works like this: To add help to an OSD item, simply replace for example Add(new cMenuEditItem(tr("an osd item"), &data.value)); with cOsdItem* item = new cMenuEditItem(tr("an osd item"), &data.value); Add(item); item->SetOnlineHelp(tr("Help for item")); To add help for an OSD menu add the following line to the contructor: SetOnlineHelp(tr("Help for this menu")); The same for an object derived from cControl. Whenever the user presses the 'Help' key he gets a simple text menu with the online help. I've already added online help to epgsearch's setup previously, but I think it would be better if there was core support in VDR for this and a common implementation. The patch really needs some refinement (especially the part in vdr.c), but it should only serve as a starting point for a discussion. BR, Christian diff -Nru --exclude PLUGINS vdr-1.5.6/keys.c vdr-1.5.6-patched/keys.c --- vdr-1.5.6/keys.c 2006-10-14 12:18:05.000000000 +0200 +++ vdr-1.5.6-patched/keys.c 2007-08-12 11:23:05.000000000 +0200 @@ -64,6 +64,7 @@ { kUser7, "User7" }, { kUser8, "User8" }, { kUser9, "User9" }, + { kHelp, "Help" }, { kNone, "" }, { k_Setup, "_Setup" }, { kNone, NULL }, diff -Nru --exclude PLUGINS vdr-1.5.6/keys.h vdr-1.5.6-patched/keys.h --- vdr-1.5.6/keys.h 2007-02-25 11:49:35.000000000 +0100 +++ vdr-1.5.6-patched/keys.h 2007-08-12 11:05:50.000000000 +0200 @@ -50,6 +50,7 @@ kSetup, kCommands, kUser1, kUser2, kUser3, kUser4, kUser5, kUser6, kUser7, kUser8, kUser9, + kHelp, kNone, kKbd, // The following codes are used internally: diff -Nru --exclude PLUGINS vdr-1.5.6/osdbase.c vdr-1.5.6-patched/osdbase.c --- vdr-1.5.6/osdbase.c 2007-06-09 12:07:46.000000000 +0200 +++ vdr-1.5.6-patched/osdbase.c 2007-08-12 13:38:00.000000000 +0200 @@ -13,6 +13,7 @@ #include "i18n.h" #include "remote.h" #include "status.h" +#include "menu.h" // --- cOsdItem -------------------------------------------------------------- @@ -22,6 +23,7 @@ state = State; selectable = true; fresh = true; + help = NULL; } cOsdItem::cOsdItem(const char *Text, eOSState State, bool Selectable) @@ -30,12 +32,14 @@ state = State; selectable = Selectable; fresh = true; + help = NULL; SetText(Text); } cOsdItem::~cOsdItem() { free(text); + free(help); } void cOsdItem::SetText(const char *Text, bool Copy) @@ -54,6 +58,12 @@ fresh = Fresh; } +void cOsdItem::SetOnlineHelp(const char *Help, bool Copy) +{ + free(help); + help = Copy ? strdup(Help) : (char *)Help; // help assumes ownership! +} + eOSState cOsdItem::ProcessKey(eKeys Key) { return Key == kOk ? state : osUnknown; @@ -67,6 +77,12 @@ ((cOsdMenu *)this)->Display(); } +void cOsdObject::SetOnlineHelp(const char *Help, bool Copy) +{ + free(help); + help = Copy ? strdup(Help) : (char *)Help; // help assumes ownership! +} + // --- cOsdMenu -------------------------------------------------------------- cSkinDisplayMenu *cOsdMenu::displayMenu = NULL; @@ -447,6 +463,18 @@ } } +eOSState cOsdMenu::Help(void) +{ + const char* Help = OnlineHelp(); + cOsdItem *item = Get(current); + if (item && item->OnlineHelp()) + Help = item->OnlineHelp(); + if (Help) + return AddSubMenu(new cMenuText(tr("Help"), Help)); + else + return osUnknown; +} + eOSState cOsdMenu::HotKey(eKeys Key) { for (cOsdItem *item = First(); item; item = Next(item)) { @@ -517,6 +545,7 @@ marked = -1; break; } + case kHelp: return Help(); // else run into default default: if (marked < 0) return osUnknown; diff -Nru --exclude PLUGINS vdr-1.5.6/osdbase.h vdr-1.5.6-patched/osdbase.h --- vdr-1.5.6/osdbase.h 2007-06-09 13:49:00.000000000 +0200 +++ vdr-1.5.6-patched/osdbase.h 2007-08-12 14:00:43.000000000 +0200 @@ -51,6 +51,7 @@ char *text; eOSState state; bool selectable; + char *help; protected: bool fresh; public: @@ -61,7 +62,9 @@ void SetText(const char *Text, bool Copy = true); void SetSelectable(bool Selectable); void SetFresh(bool Fresh); + void SetOnlineHelp(const char *Help, bool Copy = true); const char *Text(void) { return text; } + const char *OnlineHelp(void) { return help; } virtual void Set(void) {} virtual eOSState ProcessKey(eKeys Key); }; @@ -71,15 +74,18 @@ private: bool isMenu; bool needsFastResponse; + char *help; protected: void SetNeedsFastResponse(bool NeedsFastResponse) { needsFastResponse = NeedsFastResponse; } public: - cOsdObject(bool FastResponse = false) { isMenu = false; needsFastResponse = FastResponse; } - virtual ~cOsdObject() {} + cOsdObject(bool FastResponse = false) { isMenu = false; needsFastResponse = FastResponse; help = NULL; } + virtual ~cOsdObject() { free(help); } virtual bool NeedsFastResponse(void) { return needsFastResponse; } bool IsMenu(void) { return isMenu; } virtual void Show(void); virtual eOSState ProcessKey(eKeys Key) { return osUnknown; } + virtual void SetOnlineHelp(const char *Help, bool Copy = true); + const char *OnlineHelp(void) { return help; } }; class cOsdMenu : public cOsdObject, public cList { @@ -120,6 +126,7 @@ 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); + virtual eOSState Help(void); public: cOsdMenu(const char *Title, int c0 = 0, int c1 = 0, int c2 = 0, int c3 = 0, int c4 = 0); virtual ~cOsdMenu(); diff -Nru --exclude PLUGINS vdr-1.5.6/player.c vdr-1.5.6-patched/player.c --- vdr-1.5.6/player.c 2007-07-20 17:25:24.000000000 +0200 +++ vdr-1.5.6-patched/player.c 2007-08-12 13:49:24.000000000 +0200 @@ -9,6 +9,7 @@ #include "player.h" #include "i18n.h" +#include "menu.h" // --- cPlayer --------------------------------------------------------------- @@ -94,3 +95,12 @@ control = NULL; delete c; } + +cOsdObject *cControl::Help(void) +{ + const char* Help = OnlineHelp(); + if (Help) + return new cMenuText(tr("Help"), Help); + else + return NULL; +} diff -Nru --exclude PLUGINS vdr-1.5.6/player.h vdr-1.5.6-patched/player.h --- vdr-1.5.6/player.h 2006-01-06 12:29:27.000000000 +0100 +++ vdr-1.5.6-patched/player.h 2007-08-12 13:48:50.000000000 +0200 @@ -78,6 +78,7 @@ static void Attach(void); static void Shutdown(void); static cControl *Control(void); + virtual cOsdObject *Help(void); }; #endif //__PLAYER_H diff -Nru --exclude PLUGINS vdr-1.5.6/vdr.c vdr-1.5.6-patched/vdr.c --- vdr-1.5.6/vdr.c 2007-07-22 13:40:01.000000000 +0200 +++ vdr-1.5.6-patched/vdr.c 2007-08-12 13:54:35.000000000 +0200 @@ -923,8 +923,18 @@ cRemote::Put(kSchedule, true); } } - } + } + break; + // Help: + case kHelp: + if (cControl::Control()) { + cControl::Control()->Hide(); + Menu = cControl::Control()->Help(); + if (Menu) + Menu->Show(); + } break; + // Direct main menu functions: #define DirectMainFunction(function)\ DELETE_MENU;\