Hallo,
wenn man ein neues Plugin erzeugt, dann benutzt man ja das Script "newplugin" welches mit dem VDR mitgeliefert wird. Als unfähiger Programmierer wie ich stellt sich danach aber ständig die Frage: Wie die Konfiguration erstellen? Da diese Frage bei mir jedesmal wieder kommt (ich glaube ich werde alt...) habe ich mal das newplugin-Script angepasst, so dass gleich andere Dateien auch noch erzeugt werden.
torsten@vdr-entw:/usr/src/vdr/vdr$ ./newplugin neuerstellung
The new plugin source directory has been created in "PLUGINS/src/neuerstellung".
The next steps you should perform now are:
* edit the file "README" to adjust it to your specific implementation
* fill in the code skeleton in "neuerstellung.c" to implement your plugin function
* add further source files if necessary
* adapt the "Makefile" if necessary
* do "make plugins" from the VDR source directory to build your plugin
torsten@vdr-entw:/usr/src/vdr/vdr/$ ls -al PLUGINS/src/neuerstellung
insgesamt 64
drwxr-xr-x 2 torsten torsten 4096 2007-09-25 17:00 .
drwxr-xr-x 15 torsten torsten 4096 2007-09-25 16:59 ..
-rw-r--r-- 1 torsten torsten 17990 2007-09-25 16:59 COPYING
-rw-r--r-- 1 torsten torsten 136 2007-09-25 16:59 HISTORY
-rw-r--r-- 1 torsten torsten 2881 2007-09-25 16:59 Makefile
-rw-r--r-- 1 torsten torsten 4297 2007-09-25 16:59 neuerstellung.c
-rw-r--r-- 1 torsten torsten 277 2007-09-25 16:59 neuerstellung_config.c
-rw-r--r-- 1 torsten torsten 299 2007-09-25 16:59 neuerstellung_config.h
-rw-r--r-- 1 torsten torsten 805 2007-09-25 16:59 neuerstellung_setup.c
-rw-r--r-- 1 torsten torsten 370 2007-09-25 16:59 neuerstellung_setup.h
-rw-r--r-- 1 torsten torsten 477 2007-09-25 16:59 README
Alles anzeigen
Das Script erzeugt nun eine Übergabestruktur (*_config) in welcher die Setupparameter abgelegt werden können und auf die dann innerhalb des Plugins zugegriffen werden kann.
#ifndef __NEUERSTELLUNG_CONFIG_H
#define __NEUERSTELLUNG_CONFIG_H
#define MAXDUMMYSTRLEN 20
struct cNeuerstellungConfig
{
public:
cNeuerstellungConfig(void);
int hideMenu;
int dummyInt;
char dummyStr[MAXDUMMYSTRLEN+1];
};
extern cNeuerstellungConfig neuerstellungConfig;
#endif
Alles anzeigen
#include <string.h>
#include "neuerstellung_config.h"
cNeuerstellungConfig neuerstellungConfig;
cNeuerstellungConfig::cNeuerstellungConfig(void)
{
//initialization
hideMenu = 1;
dummyInt = 30;
strncpy(dummyStr, "aabb1122", sizeof(MAXDUMMYSTRLEN));
}
Alles anzeigen
Ausserdem wird ein Setupmenü angelegt, so dass man schon eine kleine Vorlage in seinem Plugin hat:
#ifndef __NEUERSTELLUNG_SETUP_H
#define __NEUERSTELLUNG_SETUP_H
#include <vdr/i18n.h>
#include <vdr/interface.h>
#include <vdr/plugin.h>
#include "neuerstellung_config.h"
class cMenuSetupNeuerstellung : public cMenuSetupPage {
private:
cNeuerstellungConfig data;
protected:
virtual void Store(void);
public:
cMenuSetupNeuerstellung();
};
#endif
Alles anzeigen
#include "neuerstellung_config.h"
#include "neuerstellung_setup.h"
const char *cDummyStrChars = "ab12";
cMenuSetupNeuerstellung::cMenuSetupNeuerstellung()
{
data = neuerstellungConfig;
int current = Current();
Clear();
Add(new cMenuEditStrItem( tr("DummyStr"), data.dummyStr,sizeof(data.dummyStr),cDummyStrChars));
Add(new cMenuEditIntItem( tr("DummyInt"), &data.dummyInt , 1, 100));
Add(new cMenuEditBoolItem(tr("Hide main menu entry"), &data.hideMenu, tr("no"), tr("yes"
)));
SetHelp(NULL, NULL, NULL, NULL);
SetCurrent(Get(current));
Display();
}
void cMenuSetupNeuerstellung::Store(void)
{
neuerstellungConfig = data;
SetupStore("DummyInt", data.dummyInt);
SetupStore("DummyStr", data.dummyStr);
SetupStore("HideMenu", data.hideMenu);
}
Alles anzeigen
Wie man sieht habe ich durch das Script bereits 3 Werte eintragen lassen, zum einen 2 Dummy-Werte welche als Vorlage dienen und man so ruck Zuck weitere Parameter hinzugefügt hat (Copy&Paste).
Ausserdem habe ich die Einträge einfügen lassen die für das Verstecken des Hauptmenüs (was ja immer mehr Plugins unterstützen) vorsehen.
Wie schon mehrfach gesagt ist mein C/CPP-Wissen absolut rudimentär, ich vermute einem erfahrenen Programmierer stehen nun die Nackenhaare zu Berge. Wenn dem so ist, dann bitte einfach kurz bescheidstossen wo Fehler oder Unschönheiten sind, ich passe dann das Script entsprechend an.
Dennoch bilde ich mir ein mit einer verbesserten Vorlage (Erstellscript) die Pluginentwicklung auch etwas einfacher wird und so die Hürde für Neueinsteiger etwas sinkt. Man bekommt nun ein wenig mehr Vorgelgt und muss weniger zusammensuchen.
Kritik ist jederzeit willkommen.
Gruß
Torsten