Author: dmeyer
Date: Tue May  1 09:40:11 2007
New Revision: 9533

Added:
   trunk/ui/src/mediamenu.py
      - copied, changed from r9482, /trunk/ui/src/plugins/mediamenu.py
Removed:
   trunk/ui/src/plugins/mediamenu.py
Modified:
   trunk/ui/src/audio/interface.py
   trunk/ui/src/games/emulator.py
   trunk/ui/src/image/interface.py
   trunk/ui/src/video/interface.py

Log:
Make the video, image and audio plugins MediaPlugin and MainMenuPlugin.
The last changes to the plugin structure makes this possible. Move
mediamenu.py from plugins to root because it is no longer an extra
plugins. Games code needs to be adjusted, too.


Modified: trunk/ui/src/audio/interface.py
==============================================================================
--- trunk/ui/src/audio/interface.py     (original)
+++ trunk/ui/src/audio/interface.py     Tue May  1 09:40:11 2007
@@ -49,6 +49,8 @@
 from freevo.ui import fxditem
 from freevo.ui import config
 from freevo.ui.menu import MediaPlugin
+from freevo.ui.mediamenu import MediaMenu
+from freevo.ui.mainmenu import MainMenuPlugin
 
 # AudioItem
 from audioitem import AudioItem
@@ -57,7 +59,7 @@
 # fxdhandler for <audio> tags
 from fxdhandler import fxdhandler
 
-class PluginInterface(MediaPlugin):
+class PluginInterface(MediaPlugin, MainMenuPlugin):
     """
     Plugin to handle all kinds of audio items
     """
@@ -70,10 +72,6 @@
         # add fxd parser callback
         fxditem.add_parser(['audio'], 'audio', fxdhandler)
 
-        # activate the mediamenu for audio
-        args = _('Audio Main Menu'), 'audio', config.audio.items
-        plugin.activate('mediamenu', level=level, args=args)
-
 
     def suffix(self):
         """
@@ -114,3 +112,10 @@
             elif not p_artist and not p_album and not artist and album:
                 # parent has no info, item no artist but album (== collection)
                 diritem.name = album
+
+
+    def items(self, parent):
+        """
+        MainMenuPlugin.items to return the audio item.
+        """
+        return [ MediaMenu(parent, _('Audio Main Menu'), 'audio', 
config.audio.items) ]

Modified: trunk/ui/src/games/emulator.py
==============================================================================
--- trunk/ui/src/games/emulator.py      (original)
+++ trunk/ui/src/games/emulator.py      Tue May  1 09:40:11 2007
@@ -53,7 +53,7 @@
 from freevo.ui.event import EJECT
 from freevo.ui import plugin, application
 from freevo.ui.menu import Item, Action, Menu
-from freevo.ui.plugins.mediamenu import MediaMenu
+from freevo.ui.mediamenu import MediaMenu
 
 # games imports
 import player as gameplayer

Modified: trunk/ui/src/image/interface.py
==============================================================================
--- trunk/ui/src/image/interface.py     (original)
+++ trunk/ui/src/image/interface.py     Tue May  1 09:40:11 2007
@@ -44,6 +44,8 @@
 from freevo.ui import fxditem
 from freevo.ui.menu import MediaPlugin
 from freevo.ui import config
+from freevo.ui.mediamenu import MediaMenu
+from freevo.ui.mainmenu import MainMenuPlugin
 
 # ImageItem
 from imageitem import ImageItem
@@ -51,7 +53,7 @@
 # fxdhandler for <slideshow> tags
 from fxdhandler import fxdhandler
 
-class PluginInterface(MediaPlugin):
+class PluginInterface(MediaPlugin, MainMenuPlugin):
     """
     Plugin to handle all kinds of image items
     """
@@ -64,10 +66,6 @@
         # register the callbacks
         fxditem.add_parser(['image'], 'slideshow', fxdhandler)
 
-        # activate the mediamenu for image
-        args = _('Image Main Menu'), 'image', config.image.items
-        plugin.activate('mediamenu', level=level, args=args)
-
 
     def suffix(self):
         """
@@ -85,3 +83,10 @@
             for file in listing.get(suffix):
                 items.append(ImageItem(file, parent))
         return items
+
+
+    def items(self, parent):
+        """
+        MainMenuPlugin.items to return the image item.
+        """
+        return [ MediaMenu(parent, _('Image Main Menu'), 'image', 
config.image.items) ]

Copied: trunk/ui/src/mediamenu.py (from r9482, 
/trunk/ui/src/plugins/mediamenu.py)
==============================================================================
--- /trunk/ui/src/plugins/mediamenu.py  (original)
+++ trunk/ui/src/mediamenu.py   Tue May  1 09:40:11 2007
@@ -45,36 +45,14 @@
 from freevo.ui.mainmenu import MainMenuItem, MainMenuPlugin
 from freevo.ui.menu import Menu, Item, MediaPlugin
 
-# from games import machine
-
 # get logging object
 log = logging.getLogger()
 
 
-class PluginInterface(MainMenuPlugin):
-    """
-    Plugin to integrate a mediamenu (video/audio/image/games) into
-    the Freevo main menu. This plugin is auto-loaded when you activate
-    the 'video', 'audio', 'image' or 'games' plugin.
-    """
-    def __init__(self, name, type, items):
-        if not items:
-            self.reason = 'No items defined for %s menu' % type
-            return
-        MainMenuPlugin.__init__(self)
-        self._name = name
-        self._type = type
-        self._items = items
-        
-    def items(self, parent):
-        return [ MediaMenu(parent, self._name, self._type, self._items) ]
-
-
-
 class MediaMenu(MainMenuItem):
     """
-    This is the main menu for audio, video and images. It displays the default
-    directories and the ROM_DRIVES
+    This is the main menu for different media types. It displays the default
+    directories, the beacon mountpoints and sub-plugins.
     """
 
     def __init__(self, parent, title, type, items):
@@ -83,8 +61,8 @@
         self.display_type = type
         self.item_menu = None
 
-        kaa.beacon.signals['media.add'].connect(self.media_change)
-        kaa.beacon.signals['media.remove'].connect(self.media_change)
+        kaa.beacon.signals['media.add'].connect_weak(self.media_change)
+        kaa.beacon.signals['media.remove'].connect_weak(self.media_change)
 
         self.menutitle = title
 
@@ -101,31 +79,20 @@
                 kaa.beacon.monitor(filename)
 
 
-    def main_menu_generate(self):
+    def _get_config_items(self):
         """
-        generate the items for the main menu. This is needed when first
-        generating the menu and if something changes by pressing the EJECT
-        button
+        Generate items based on the config settings
         """
-        # Generate the media menu, we need to create a new listing (that sucks)
-        # But with the listing we have, the order will be mixed up.
         items = []
-
-        # add default items
         for item in self._items:
             try:
-                # split the list on dir/file and title
-                if hasattr(item, 'path'):
-                    # kaa.config object
-                    title = unicode(item.name)
-                    filename = item.path.replace('$(HOME)', 
os.environ.get('HOME'))
-                else:
-                    # only a filename is given
-                    title, filename = u'', item
-
+                # kaa.config object
+                title = unicode(item.name)
+                filename = item.path.replace('$(HOME)', os.environ.get('HOME'))
                 filename = os.path.abspath(filename)
                 listing = 
kaa.beacon.query(filename=filename).get(filter='extmap')
 
+                # path is a directory
                 if os.path.isdir(filename):
                     for d in listing.get('beacon:dir'):
                         d = DirItem(d, self, name = title, type = 
self.display_type)
@@ -143,7 +110,14 @@
             except:
                 log.exception('Error parsing %s' % str(item))
                 continue
+        return items
 
+    
+    def _get_beacon_items(self):
+        """
+        Generate items based on beacon mountpoints
+        """
+        items = []
         for media in kaa.beacon.media:
             if media.mountpoint == '/':
                 continue
@@ -153,21 +127,33 @@
             for d in listing.get('beacon:dir'):
                 items.append(DirItem(d, self, name=media.label,
                                      type = self.display_type))
-        # add all plugin data
-        if self.display_type:
-            for p in MainMenuPlugin.plugins(self.display_type):
-                items += p.items( self )
+        return items
 
+
+    def _get_plugin_items(self):
+        """
+        Generate items based on plugins
+        """
+        items = []
+        for p in MainMenuPlugin.plugins(self.display_type):
+            items += p.items( self )
         return items
 
 
+    def _get_all_items(self):
+        """
+        Return items for the menu.
+        """
+        return self._get_config_items() + self._get_beacon_items() + \
+               self._get_plugin_items()
+
+
     def select(self):
         """
-        display the (IMAGE|VIDEO|AUDIO|GAMES) main menu
+        Display the media menu
         """
         # generate all other items
-        items = self.main_menu_generate()
-
+        items = self._get_all_items()
         type = '%s main menu' % self.display_type
         item_menu = Menu(self.menutitle, items, type = type,
                          reload_func = self.reload)
@@ -182,7 +168,7 @@
         Reload the menu. maybe a disc changed or some other plugin.
         """
         if self.item_menu:
-            self.item_menu.set_items(self.main_menu_generate())
+            self.item_menu.set_items(self._get_all_items())
 
 
     def media_change(self, media):
@@ -190,10 +176,13 @@
         Media change from kaa.beacon
         """
         if self.item_menu:
-            self.item_menu.set_items(self.main_menu_generate())
+            self.item_menu.set_items(self._get_all_items())
 
 
     def eventhandler(self, event):
+        """
+        Eventhandler for the media menu
+        """
         if event == EJECT and self.item_menu and \
            self.item_menu.selected.info['parent'] == \
            self.item_menu.selected.info['media']:

Modified: trunk/ui/src/video/interface.py
==============================================================================
--- trunk/ui/src/video/interface.py     (original)
+++ trunk/ui/src/video/interface.py     Tue May  1 09:40:11 2007
@@ -45,13 +45,15 @@
 from freevo.ui import fxditem
 from freevo.ui.menu import Files, MediaPlugin
 from freevo.ui import config
+from freevo.ui.mediamenu import MediaMenu
+from freevo.ui.mainmenu import MainMenuPlugin
 
 # video imports
 from videoitem import VideoItem
 import database
 import fxdhandler
 
-class PluginInterface(MediaPlugin):
+class PluginInterface(MediaPlugin, MainMenuPlugin):
     """
     Plugin to handle all kinds of video items
     """
@@ -67,10 +69,6 @@
 
         # update the database
         database.update()
-        
-        # activate the mediamenu for video
-        args = _('Video Main Menu'), 'video', config.video.items
-        plugin.activate('mediamenu', level=level, args=args)
 
         
     def suffix(self):
@@ -103,3 +101,10 @@
 
     def database(self):
         return database
+
+
+    def items(self, parent):
+        """
+        MainMenuPlugin.items to return the video item.
+        """
+        return [ MediaMenu(parent, _('Video Main Menu'), 'video', 
config.video.items) ]

-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
Freevo-cvslog mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/freevo-cvslog

Reply via email to