MixMan is compiling this page. Please help.
Creating a Plugin
The general idea is, a plugin is made into a .net dll. The dll must contain at least one class that implements the IMenuTask interface (see below). When the Plugin dll is placed in the GBPVR\plugin\"Your Plugin" directory it will be automatically detected by GB-PVR and shown in the list in the config app.
DLLs to reference
GBPVRPublic.dll
Core Library that contains API for loggning, keymappings etc.
To use GBPVR API calls in your project you must add a reference to GBPVR.Public.
PVRUiPublic.dll
Core Library that contains API for graphical user interface eg lists, popups and buttons
Interfaces
GBPVRPublic.dll Interfaces
IMenuTask
A plugin must implement this interface in order to appear in the GBPVR's main menu.
The general idea is, a plugin is made into a .net dll. The dll must contain at least one class that implements the IMenuTask interface. The IMenuTask interface is contained in the GBPVRPublic.dll file, so you'll need a reference to this file in you C# or VB.NET project. When the dll is placed in the GBPVR\plugin\"Your Plugin" directory it will be automatically detected by GB-PVR and shown in the list in the config app.
http://gbpvr.com/pmwiki/pmwiki.php/Development/IMenuTask
http://www.devnz.com/SDK/IMenuTask.htm
IVideoPlugin
IVideoPlugin stuff isnt used in PVRX2.exe. It only worked under the old now-defunct GBPVR.exe where it allowed a plugin to be shown on top of playing video
Read more about API here: http://www.devnz.com/SDK/sdk.htm
Convert C# to VB.Net or VB.net to C# http://www.developerfusion.com/tools/convert/csharp-to-vb/
PVRUiPublic.dll Interface
IUiTask
PVRUiPublic provides two different levels of functionality developers will use (or mix)
- Base classes which provide skeleton implementations of a couple of the main types of plugins we see, and for generic popups.
For developers just needing to create screens similar to the built in ones, this is a really easy way to get started, with only minimal code needed.
UI controls
At the moment we have the UiList, UiSimpleList, UiStatic and UiButton.\\ - Ui controls, which should be used by developers wanting to make their own screens. These are also used by the base classes, so there is a consistent look and feel across screens.
UiButton
UiButton can handles button animations etc.
UiList
UiList shows complex list with multiple view types. It also has got up/down buttons, and current position text, and selected item text,
The UiList is pretty cunning about how it uses resources, and is pretty efficient. It expects fixed names in the skin.xml file.
UiSimpleList
UiStatic
UiStatic can be used to hold a composite image (text/images etc).
PopupBase
The PopupBase which can be used as a base class to get that popping out at you animation etc.
PopupMessageBox
There is PopupMessageBox class that can be used for presenting a popup with one or two buttons.
- AnimationHelper
- BaseButtonListUiTask
- BaseButtonUiTask
- ChannelIconCache
- SkinHelper2
- ThumbnailCache
This Page is under construction
MixMan is compiling this page from post in the forum.
Example Plugins
Some people find it easier to learn by looking at real code.
With the introduction of GBPVR v1.x.x, Sub released some Plugin samples.
For those that have developed plugins in the past, 1.x plugin is basically the same in that it implements the old IMenuTask interface, but in addition it also implements the new IUiTask interface. This IUiTask interface has a new method called GetRenderList() which is used to get a list of images and their location on the screen that make up the picture.
There some new base classes and control that really help simplify plugin development. These base classes are used in the first two samples below, and make it easy to do plugins that have buttons + list (for example Video Library, Recordings etc), or buttons + data (for example Weather plugin etc).
Hello World plugin
Simple Hello World plugin, using the BaseButtonListUiTask base to show a list of button on the left, list view on the right, much like the Video Library, Recording screen etc.
http://www.devnz.com/SDK/helloworld.htm
HelloWorld for C# Δ
HelloWorld for VB.NET Δ
Tile plugin
The Tile Plugin is showing some advanced animation techniques, similar to those seen in Vista MCE.
The Tile sample is pretty much down to the metal, directly implementing both IMenuTask and IUiTask Interfaces, and call IUiTask.GetRenderList() to draw the screen. The purpose of showing how really advanced animation can be performed.
http://www.devnz.com/SDK/tile.htm
Download:Plugin.Tile.zip Δ
Weather plugin skeleton
This was a skeleton Sub supplied to Jeff, gives the basic layout of the weather plugin... a few buttons on the left, data one the right and a simple popup example.
Download:Plugin.Weather.zip Δ
DVD Ripper plugin
This was a fully functioning DVD Ripper plugin using the new GUI.
http://www.devnz.com/SDK/ripper.htm
DVD Ripper C# Code and Plugin Δ
Web Radio plugin
This is a fully functioning Web Radio plugin using the new GUI.
XML file is read and data is shown in a list/icon view on the right, much like the Video Library, Recording screen etc.
Yet, to be published, when KeyMappings is implemented.
Plugin Samples using other UI Libraries
Jeffs CommonGBPVRUtilities Library
Jeff Developed the CommonGBPVRUtilities library.
The source is closed, so it might get outdated when Jeff more or less has left the community.
http://gbpvr.com/pmwiki/pmwiki.php/Development/Utilities
JavaWiz WizUtilities Library
JavaWiz has developed a couple of DLLs.
The source is closed, so it might get outdated if JavaWiz leaves the community.
This zip file includes WizDLLs, test plugin code, tutorial and API help file. (You may want to install WizDLLs AFTER this to insure you have the most current versions)
http://gbpvr.com/pmwiki/pmwiki.php/Utility/WizUtilities
Download:WizUtilities
Revens GBPVRLibrary
Reven has created a project on google code.
http://code.google.com/p/gbpvrlibrary/
This is a community library for GB-PVR, which will contain GuiElements and Tools that will help plugin development for GB-PVR. So far planned is - OnScreen Keyboard - KeyPad Input - Media/Information Inset
Reven will add a vs2008 solution in the not to distant future, and if any one wants access to it, let me know so you can commit changes etc.
The code is using the BSD license, which i think is the best one (allows you to use the source code and do whatever you like with it - without you having to make your code opensource) http://www.opensource.org/licenses/bsd-license.php
Programmers
There are many programmers with experience from plugin devlopment
sub - GBPVR and some plugin
McBainUK - many plugins
alibert - TV Listings plugin
jason\ - Videos Library plugin
Reven - Video plugin
whurlston - NetFlix plugin
mvallevand - NMT/MVP emukator plugin
unclejhnband - Web Admin plugin
ubu - Ubu stream plugin
bgowland - DVB Radio plugin
jeff - Weather plugin
scb147 - Weather2
pvrproblems no plugin yet
Further Reading
- thecodeproject.com - .net articles, code snippets, discussions an news.
- .net MSDN class libary documentation.
- GBPVR developers forum.
