4 # Copyright (C) 2006 Rafaël Carré <funman at videolanorg>
8 # This program is free software; you can redistribute it and/or modify
9 # it under the terms of the GNU General Public License as published by
10 # the Free Software Foundation; either version 2 of the License, or
11 # (at your option) any later version.
13 # This program is distributed in the hope that it will be useful,
14 # but WITHOUT ANY WARRANTY; without even the implied warranty of
15 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 # GNU General Public License for more details.
18 # You should have received a copy of the GNU General Public License
19 # along with this program; if not, write to the Free Software
20 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
35 def itemchange_handler(item):
36 gobject.timeout_add( 2000, timeset)
39 bus = dbus.SessionBus()
40 remote_object = bus.get_object("org.videolan.vlc", "/org/videolan/vlc")
41 interface = dbus.Interface(remote_object, "org.videolan.vlc")
43 remote_object.connect_to_signal("ItemChange", itemchange_handler, dbus_interface="org.videolan.vlc")
48 mrl = e_mrl.get_text()
49 if mrl != None and mrl != "":
50 interface.AddMRL(mrl, True)
52 mrl = bt_file.get_filename()
53 if mrl != None and mrl != "":
54 interface.AddMRL("directory://" + mrl, True)
57 interface.Next(reply_handler=(lambda *args: None), error_handler=(lambda *args: None))
61 interface.Prev(reply_handler=(lambda *args: None), error_handler=(lambda *args: None))
65 interface.Stop(reply_handler=(lambda *args: None), error_handler=(lambda *args: None))
69 itemchange_handler(str(interface.GetPlayingItem()))
70 vol.set_value(interface.VolumeGet())
73 def GetPlayStatus(widget):
75 status = str(interface.GetPlayStatus())
76 if status == "playing":
77 img_bt_toggle.set_from_stock("gtk-media-pause", gtk.ICON_SIZE_SMALL_TOOLBAR)
80 img_bt_toggle.set_from_stock("gtk-media-play", gtk.ICON_SIZE_SMALL_TOOLBAR)
84 interface.Quit(reply_handler=(lambda *args: None), error_handler=(lambda *args: None))
87 def TogglePause(widget):
88 if interface.TogglePause() == True:
89 img_bt_toggle.set_from_stock(gtk.STOCK_MEDIA_PAUSE, gtk.ICON_SIZE_SMALL_TOOLBAR)
91 img_bt_toggle.set_from_stock(gtk.STOCK_MEDIA_PLAY, gtk.ICON_SIZE_SMALL_TOOLBAR)
94 def volchange(widget, data):
95 interface.VolumeSet(vol.get_value_as_int(), reply_handler=(lambda *args: None), error_handler=(lambda *args: None))
97 def timechange(widget, x=None, y=None):
98 interface.PositionSet(time_s.get_value(), reply_handler=(lambda *args: None), error_handler=(lambda *args: None))
102 time_s.set_value(interface.PositionGet())
105 def expander(widget):
106 if exp.get_expanded() == False:
107 exp.set_label("Less")
109 exp.set_label("More")
111 def delete_event(self, widget):
118 def key_release(widget, event):
120 if event.keyval == gtk.keysyms.Escape:
121 position = window.get_position()
124 def tray_button(widget,event):
126 if event.button == 1:
127 if window.get_property('visible'):
128 position = window.get_position()
131 window.move(position[0], position[1])
133 if event.button == 3:
134 menu.popup(None,None,None,event.button,event.time)
136 xml = gtk.glade.XML('dbus-vlc.glade')
138 bt_close = xml.get_widget('close')
139 bt_quit = xml.get_widget('quit')
140 bt_file = xml.get_widget('ChooseFile')
141 bt_mrl = xml.get_widget('AddMRL')
142 bt_next = xml.get_widget('next')
143 bt_prev = xml.get_widget('prev')
144 bt_stop = xml.get_widget('stop')
145 bt_toggle = xml.get_widget('toggle')
146 l_item = xml.get_widget('item')
147 e_mrl = xml.get_widget('mrl')
148 window = xml.get_widget('window1')
149 img_bt_toggle=xml.get_widget('image6')
150 exp = xml.get_widget('expander2')
151 expvbox = xml.get_widget('expandvbox')
152 menu = xml.get_widget('menu1')
153 menuitem = xml.get_widget('menuquit')
154 vlcicon = xml.get_widget('eventicon')
155 vol = xml.get_widget('vol')
156 time_s = xml.get_widget('time_s')
157 time_l = xml.get_widget('time_l')
159 window.connect('delete_event', delete_event)
160 window.connect('destroy', destroy)
161 window.connect('key_release_event', key_release)
163 tray = egg.trayicon.TrayIcon("VLC")
164 eventbox = gtk.EventBox()
166 eventbox.set_events(gtk.gdk.BUTTON_PRESS_MASK)
167 eventbox.connect('button_press_event', tray_button)
170 image.set_from_icon_name("vlc", gtk.ICON_SIZE_MENU)
173 def icon_clicked(widget, event):
176 menu.attach_to_widget(eventbox,None)
178 bt_close.connect('clicked', destroy)
179 bt_quit.connect('clicked', Quit)
180 bt_mrl.connect('clicked', AddMRL)
181 bt_toggle.connect('clicked', TogglePause)
182 bt_next.connect('clicked', Next)
183 bt_prev.connect('clicked', Prev)
184 bt_stop.connect('clicked', Stop)
185 exp.connect('activate', expander)
186 menuitem.connect('activate', destroy)
187 vlcicon.set_events(gtk.gdk.BUTTON_PRESS_MASK)
188 vlcicon.connect('button_press_event', icon_clicked)
189 vol.connect('change-value', volchange)
190 vol.connect('scroll-event', volchange)
191 time_s.connect('adjust-bounds', timechange)
193 time_s.set_update_policy(gtk.UPDATE_DISCONTINUOUS)
194 gobject.timeout_add( 2000, timeset)
196 library = "/media/mp3"
200 bt_file.set_current_folder(library)
202 print "edit this file to point to your media library"
204 window.set_icon_name('vlc')
205 window.set_title("VLC - D-Bus ctrl")