/* * hello.c: A plugin for the Video Disk Recorder * * See the README file for copyright information and how to reach the author. * * $Id: hello.c 2.6 2013/03/31 09:30:18 kls Exp $ */ #include #include #include #include #include static const char *VERSION = "2.0.0"; static const char *DESCRIPTION = trNOOP("A friendly greeting"); static const char *MAINMENUENTRY = trNOOP("Hello"); class cPluginHello : public cPlugin { private: // Add any member variables or functions you may need here. const char *option_a; bool option_b; public: cPluginHello(void); virtual ~cPluginHello(); virtual const char *Version(void) { return VERSION; } virtual const char *Description(void) { return tr(DESCRIPTION); } virtual const char *CommandLineHelp(void); virtual bool ProcessArgs(int argc, char *argv[]); virtual bool Start(void); virtual void Housekeeping(void); virtual const char *MainMenuEntry(void) { return tr(MAINMENUENTRY); } virtual cOsdObject *MainMenuAction(void); virtual cMenuSetupPage *SetupMenu(void); virtual bool SetupParse(const char *Name, const char *Value); }; // Global variables that control the overall behaviour: int GreetingTime = 3; int UseAlternateGreeting = false; // --- cMenuSetupHello ------------------------------------------------------- class cMenuSetupHello : public cMenuSetupPage { private: int newGreetingTime; int newUseAlternateGreeting; protected: virtual void Store(void); public: cMenuSetupHello(void); }; cMenuSetupHello::cMenuSetupHello(void) { newGreetingTime = GreetingTime; newUseAlternateGreeting = UseAlternateGreeting; Add(new cMenuEditIntItem( tr("Greeting time (s)"), &newGreetingTime)); Add(new cMenuEditBoolItem(tr("Use alternate greeting"), &newUseAlternateGreeting)); } void cMenuSetupHello::Store(void) { SetupStore("GreetingTime", GreetingTime = newGreetingTime); SetupStore("UseAlternateGreeting", UseAlternateGreeting = newUseAlternateGreeting); } // --- cPluginHello ---------------------------------------------------------- cPluginHello::cPluginHello(void) { // Initialize any member variables here. // DON'T DO ANYTHING ELSE THAT MAY HAVE SIDE EFFECTS, REQUIRE GLOBAL // VDR OBJECTS TO EXIST OR PRODUCE ANY OUTPUT! option_a = NULL; option_b = false; } cPluginHello::~cPluginHello() { // Clean up after yourself! } const char *cPluginHello::CommandLineHelp(void) { // Return a string that describes all known command line options. return " -a ABC, --aaa=ABC do something nice with ABC\n" " -b, --bbb activate 'plan B'\n"; } bool cPluginHello::ProcessArgs(int argc, char *argv[]) { // Implement command line argument processing here if applicable. static struct option long_options[] = { { "aaa", required_argument, NULL, 'a' }, { "bbb", no_argument, NULL, 'b' }, { NULL, no_argument, NULL, 0 } }; int c; while ((c = getopt_long(argc, argv, "a:b", long_options, NULL)) != -1) { switch (c) { case 'a': option_a = optarg; break; case 'b': option_b = true; break; default: return false; } } return true; } bool cPluginHello::Start(void) { // Start any background activities the plugin shall perform. return true; } void cPluginHello::Housekeeping(void) { // Perform any cleanup or other regular tasks. } cOsdObject *cPluginHello::MainMenuAction(void) { // Perform the action when selected from the main VDR menu. Interface->Confirm(UseAlternateGreeting ? tr("Howdy folks!") : tr("Hello world!"), GreetingTime); return NULL; } cMenuSetupPage *cPluginHello::SetupMenu(void) { // Return a setup menu in case the plugin supports one. return new cMenuSetupHello; } bool cPluginHello::SetupParse(const char *Name, const char *Value) { // Parse your own setup parameters and store their values. if (!strcasecmp(Name, "GreetingTime")) GreetingTime = atoi(Value); else if (!strcasecmp(Name, "UseAlternateGreeting")) UseAlternateGreeting = atoi(Value); else return false; return true; } VDRPLUGINCREATOR(cPluginHello); // Don't touch this!