trayicon.py

Go to the documentation of this file.
00001 import gtk,gtk.glade
00002 from plai.utility import PrettyPrintTime
00003 from plai import config
00004 
00005 class TrayIcon:
00006         """Tray icon, providing ability to pause/resume, skip and quit and a
00007         tooltip with track information."""
00008         def __init__(self,player):
00009                 """Pass me the player object so I can communicate, and the glade object
00010                 with my menu in."""
00011                 xml=gtk.glade.XML(config.gladefname)
00012                 self._traypause_traypause=xml.get_widget('TrayPause')
00013                 self._trayplay_trayplay=xml.get_widget('TrayPlay')
00014                 self._traymenu_traymenu=xml.get_widget('TrayMenu')
00015                 
00016                 self._player_player=player
00017                 self._icon_icon=gtk.StatusIcon()
00018                 self._icon_icon.set_from_stock(gtk.STOCK_MEDIA_PAUSE)
00019                 self._icon_icon.set_visible(True)
00020                 self._icon_icon.connect('activate',self._onActivate_onActivate)
00021                 self._icon_icon.connect('popup-menu',self._onMenu_onMenu)
00022                 
00023                 handlers={'on_TrayQuit_activate'  : self._onQuit_onQuit,
00024                                   'on_TrayNext_activate'  : self._onNext_onNext,
00025                                   'on_TrayPlay_activate'  : self._onActivate_onActivate,
00026                                   'on_TrayPause_activate' : self._onActivate_onActivate}
00027                 xml.signal_autoconnect(handlers)
00028                 
00029                 self._player_player.RegisterForNotifications(self._onNotify_onNotify)
00030                 
00031                 
00032         def _onNotify(self):
00033                 """Private callback. Updates state."""
00034                 self._Update_icon_Update_icon()
00035                 self._UpdateTooltip_UpdateTooltip()
00036                 
00037                 
00038         def _Update_icon(self):
00039                 """Private. Updates _icon depending whether the player is currently playing
00040                 or paused."""
00041                 if self._player_player.IsPaused():
00042                         self._icon_icon.set_from_stock(gtk.STOCK_MEDIA_PLAY)            
00043                 else:
00044                         self._icon_icon.set_from_stock(gtk.STOCK_MEDIA_PAUSE)
00045 
00046         
00047         def _UpdateTooltip(self):
00048                 """Private. Updates tooltip text to reflect the current track."""       
00049                 ct=self._player_player.GetCurrentTrack()
00050                 (pos,length)=self._player_player.GetSongPosAndLength()
00051                 if ct==None:
00052                         self._icon_icon.set_tooltip(None)
00053                 else:
00054                         text='Artist : '+ct.Artist()+'\n'
00055                         text=text+'Title : '+ct.Title()+'\n'
00056                         text=text+'Album : '+ct.Album()+'\n'
00057                         text=text+'Time : '+PrettyPrintTime(pos)+'/'+PrettyPrintTime(length)
00058                         self._icon_icon.set_tooltip(text)
00059                 
00060                 
00061         def _onActivate(self,widget):
00062                 """Callback to handle direct clicks, either pauses or resumes
00063                 the current track."""
00064                 if self._player_player.IsPaused():
00065                         self._player_player.UnPause()
00066                 else:
00067                         self._player_player.Pause()
00068                 
00069                 
00070         def _onNext(self,widget):
00071                 """Callback for the 'Next' menu item."""
00072                 self._player_player.GotoNextTrack()
00073 
00074 
00075         def _onMenu(self,widget,button,time):
00076                 """Callback to create the context menu."""
00077                 canplay=self._player_player.IsPaused()
00078                 self._traypause_traypause.set_sensitive(not canplay)
00079                 self._trayplay_trayplay.set_sensitive(canplay)
00080                 self._traymenu_traymenu.popup(None,None,gtk.status_icon_position_menu,button,time,widget)
00081                 
00082         
00083         def _onQuit(self,widget):
00084                 """Callback for the 'Quit' menu item"""
00085                 self._player_player.SaveState()
00086                 gtk.main_quit()

Generated on Mon Aug 6 21:24:20 2007 for plai by  doxygen 1.5.1