Freevo Plugin Writing HOWTO: Writing your own plugins for Freevo | ||
---|---|---|
Prev | Chapter 2. Internal Structure | Next |
Some plugins may want to draw something on the screen. One example is
the weather plugin (external plugin, download it from
http://freevo.sf.net/addons/
). Since this has
nothing to do with the normal menu system, such plugins also need an
eventhandler to react on buttons.
Since Freevo knows nothing about which elements should be displayed and were to put them, the plugin needs to define a fxd file in share/skins/plugins with the needed information.
<?xml version="1.0" ?> <freevo> <skin geometry="800x600"> <foo> <screen layout="screen" x="0" y="0" width="800" height="600"/> <title .../> <view .../> </foo> </skin> </freevo>
Now the freevo skin has fxd information about the type
foo
, but doesn't know which areas are allowed (ok,
the skin could guess it). So the plugin needs to call
skin.register('foo', ('screen', 'title', 'view', 'plugin'))once. Now the plugin can call
skin.draw('foo', item)to draw
item
with the settings of foo
.
So far so good, but it may happen that the plugin needs an area
which isn't defined right now. The default areas for Freevo are
screen
, title
,
subtitle
, listing
,
info
, view
and
plugin
. The plugin area is used for smaller
plugins to draw on the screen, e.g. the idlebar.
To create an area of your own, you first need to define it in the fxd file:
<?xml version="1.0" ?> <freevo> <skin geometry="800x600"> <foo> <screen layout="screen" x="0" y="0" width="800" height="600"/> <foo_area layout="foo" x="10" y="100" width="300" height="200"/> </foo> </skin> <layout label="foo"> <background> ... </background> <content ...> ... </content> </layout> </freevo>
Now the skin has fxd information about an area
foo
. The skin knows were it is and can also draw
the background of the layout. But it needs an object to draw the real
content. The following example defines a class which inherits from
skin.Area
. It defines itself as class to draw
foo_area
. The skin now calls the function
update_content_needed
to check if the area needs
an update (return True
or
False
). When Freevo knows that an update is
needed, this function may not be called after all. The real work is
done is update_content
.
(add more doc here)