Author: dmeyer Date: Tue Apr 18 20:03:33 2006 New Revision: 1409 Added: trunk/player/test/baloo.glade trunk/player/test/baloo.py
Log: add very simple beacon/gtk based player Added: trunk/player/test/baloo.glade ============================================================================== --- (empty file) +++ trunk/player/test/baloo.glade Tue Apr 18 20:03:33 2006 @@ -0,0 +1,201 @@ +<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*--> +<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd"> + +<glade-interface> + +<widget class="GtkWindow" id="baloo"> + <property name="visible">True</property> + <property name="title" translatable="yes">baloo</property> + <property name="type">GTK_WINDOW_TOPLEVEL</property> + <property name="window_position">GTK_WIN_POS_NONE</property> + <property name="modal">False</property> + <property name="resizable">False</property> + <property name="destroy_with_parent">False</property> + <property name="decorated">True</property> + <property name="skip_taskbar_hint">False</property> + <property name="skip_pager_hint">False</property> + <property name="type_hint">GDK_WINDOW_TYPE_HINT_NORMAL</property> + <property name="gravity">GDK_GRAVITY_NORTH_WEST</property> + <signal name="destroy" handler="on_exit" last_modification_time="Tue, 18 Apr 2006 20:00:01 GMT"/> + + <child> + <widget class="GtkVBox" id="vbox7"> + <property name="visible">True</property> + <property name="homogeneous">False</property> + <property name="spacing">0</property> + + <child> + <widget class="GtkFixed" id="fixed2"> + <property name="visible">True</property> + + <child> + <widget class="GtkLabel" id="title"> + <property name="width_request">180</property> + <property name="height_request">17</property> + <property name="visible">True</property> + <property name="label" translatable="yes"></property> + <property name="use_underline">False</property> + <property name="use_markup">False</property> + <property name="justify">GTK_JUSTIFY_LEFT</property> + <property name="wrap">False</property> + <property name="selectable">False</property> + <property name="xalign">0.5</property> + <property name="yalign">0.5</property> + <property name="xpad">0</property> + <property name="ypad">0</property> + </widget> + <packing> + <property name="x">8</property> + <property name="y">0</property> + </packing> + </child> + + <child> + <widget class="GtkLabel" id="artist"> + <property name="width_request">180</property> + <property name="height_request">17</property> + <property name="visible">True</property> + <property name="label" translatable="yes"></property> + <property name="use_underline">False</property> + <property name="use_markup">False</property> + <property name="justify">GTK_JUSTIFY_LEFT</property> + <property name="wrap">False</property> + <property name="selectable">False</property> + <property name="xalign">0.5</property> + <property name="yalign">0.5</property> + <property name="xpad">0</property> + <property name="ypad">0</property> + </widget> + <packing> + <property name="x">8</property> + <property name="y">16</property> + </packing> + </child> + + <child> + <widget class="GtkLabel" id="album"> + <property name="width_request">180</property> + <property name="height_request">17</property> + <property name="visible">True</property> + <property name="label" translatable="yes"></property> + <property name="use_underline">False</property> + <property name="use_markup">False</property> + <property name="justify">GTK_JUSTIFY_LEFT</property> + <property name="wrap">False</property> + <property name="selectable">False</property> + <property name="xalign">0.5</property> + <property name="yalign">0.5</property> + <property name="xpad">0</property> + <property name="ypad">0</property> + </widget> + <packing> + <property name="x">8</property> + <property name="y">32</property> + </packing> + </child> + + <child> + <widget class="GtkLabel" id="timer"> + <property name="width_request">60</property> + <property name="height_request">17</property> + <property name="visible">True</property> + <property name="label" translatable="yes">00:00</property> + <property name="use_underline">False</property> + <property name="use_markup">False</property> + <property name="justify">GTK_JUSTIFY_LEFT</property> + <property name="wrap">False</property> + <property name="selectable">False</property> + <property name="xalign">0.5</property> + <property name="yalign">0.5</property> + <property name="xpad">0</property> + <property name="ypad">0</property> + </widget> + <packing> + <property name="x">200</property> + <property name="y">16</property> + </packing> + </child> + </widget> + <packing> + <property name="padding">0</property> + <property name="expand">True</property> + <property name="fill">True</property> + </packing> + </child> + + <child> + <widget class="GtkEntry" id="search"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="editable">True</property> + <property name="visibility">True</property> + <property name="max_length">0</property> + <property name="text" translatable="yes"></property> + <property name="has_frame">True</property> + <property name="invisible_char">*</property> + <property name="activates_default">False</property> + <signal name="activate" handler="on_search_activate" last_modification_time="Tue, 18 Apr 2006 19:30:17 GMT"/> + </widget> + <packing> + <property name="padding">0</property> + <property name="expand">False</property> + <property name="fill">False</property> + </packing> + </child> + + <child> + <widget class="GtkHButtonBox" id="hbuttonbox4"> + <property name="visible">True</property> + <property name="layout_style">GTK_BUTTONBOX_DEFAULT_STYLE</property> + <property name="spacing">0</property> + + <child> + <widget class="GtkButton" id="pause"> + <property name="visible">True</property> + <property name="can_default">True</property> + <property name="can_focus">True</property> + <property name="label">gtk-media-pause</property> + <property name="use_stock">True</property> + <property name="relief">GTK_RELIEF_NORMAL</property> + <property name="focus_on_click">True</property> + <signal name="clicked" handler="on_pause_clicked" last_modification_time="Tue, 18 Apr 2006 19:29:26 GMT"/> + </widget> + </child> + + <child> + <widget class="GtkButton" id="next"> + <property name="visible">True</property> + <property name="can_default">True</property> + <property name="can_focus">True</property> + <property name="label">gtk-media-next</property> + <property name="use_stock">True</property> + <property name="relief">GTK_RELIEF_NORMAL</property> + <property name="focus_on_click">True</property> + <signal name="clicked" handler="on_next_clicked" last_modification_time="Tue, 18 Apr 2006 19:29:37 GMT"/> + </widget> + </child> + + <child> + <widget class="GtkButton" id="quit"> + <property name="visible">True</property> + <property name="can_default">True</property> + <property name="can_focus">True</property> + <property name="label">gtk-quit</property> + <property name="use_stock">True</property> + <property name="relief">GTK_RELIEF_NORMAL</property> + <property name="focus_on_click">True</property> + <signal name="clicked" handler="on_exit" last_modification_time="Tue, 18 Apr 2006 19:59:37 GMT"/> + </widget> + </child> + </widget> + <packing> + <property name="padding">0</property> + <property name="expand">False</property> + <property name="fill">False</property> + </packing> + </child> + </widget> + </child> +</widget> + +</glade-interface> Added: trunk/player/test/baloo.py ============================================================================== --- (empty file) +++ trunk/player/test/baloo.py Tue Apr 18 20:03:33 2006 @@ -0,0 +1,95 @@ +#!/usr/bin/env python + +import os +import sys + +# GTK import. It is important to import gtk before kaa so that +# kaa can detect it and switch to the gtk notifier wrapper from +# pynotifier + +import pygtk +pygtk.require('2.0') +import gtk +import gtk.glade + +# now import kaa +import kaa +import kaa.notifier +import kaa.beacon +import kaa.player + +class Baloo(object): + def __init__(self): + gladefile = os.path.dirname(os.path.abspath(__file__)) + '/baloo.glade' + self.xml = gtk.glade.XML(gladefile, 'baloo') + dic = { "on_search_activate" : self.on_search_activate, + "on_pause_clicked" : self.on_pause_clicked, + "on_next_clicked" : self.on_next_clicked, + "on_exit" : self.on_exit } + self.xml.signal_autoconnect (dic) + + self.timer = kaa.notifier.Timer(self.update_timer) + self.search = [] + self.current = None + self.player = kaa.player.Player() + self.player.signals['end'].connect(self.play_next) + + + def update_playlist(self): + if len(self.search): + return True + for t in ('artist', 'album'): + self.xml.get_widget(t).set_text('') + self.xml.get_widget('title').set_text('<no match>') + if self.timer.active(): + self.timer.stop() + return True + + def on_search_activate(self, data=None): + string = self.xml.get_widget("search").get_text() + self.search = kaa.beacon.query(type='audio', keywords=string) + self.search.monitor() + self.update_playlist() + if self.current: + self.player.stop() + else: + self.play_next() + if not self.timer.active(): + self.timer.start(0.1) + + def on_pause_clicked(self, data=None): + if not len(self.search): + return + self.player.pause_toggle() + + def on_next_clicked(self, data=None): + self.player.stop() + + def on_exit(self, data=None): + sys.exit(0) + + def update_timer(self): + secs = int(self.player.get_position()) + self.xml.get_widget('timer').set_text('%02d:%02d' % ((secs / 60), (secs % 60))) + return True + + def play_next(self): + try: + index = self.search.index(self.current) + 1 + if index == len(self.search): + index = 0 + except (KeyError, ValueError), e: + index = 0 + self.current = None + if not len(self.search): + return False + self.current = self.search[index] + self.player.open(self.current.filename) + self.player.play(video=False) + for t in ('title', 'artist', 'album'): + label = self.xml.get_widget(t) + value = self.current.getattr(t) or '' + label.set_text(value) + +baloo = Baloo() +kaa.main() ------------------------------------------------------- This SF.Net email is sponsored by xPML, a groundbreaking scripting language that extends applications into web and mobile media. Attend the live webcast and join the prime developer group breaking into this new coding territory! http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=121642 _______________________________________________ Freevo-cvslog mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/freevo-cvslog
