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

Reply via email to