1 # $Id: playlist_item.rb,v 1.21 2006/07/29 01:55:31 tilman Exp $
4 attr_reader :id, :edje, :position, :selected, :hilighted
6 def initialize(id, xmms, playlist)
8 @position = playlist.size
20 @xmms.medialib_get_info(id).notifier do |res|
21 self.properties = res.value
25 def method_missing(method)
26 @props[method] || "unknown #{method}"
30 @props[:duration].to_i / 1000
34 @edje = Edje::Edje.new(@playlist.container.evas)
35 @edje.load(eet, "playlist_item")
36 w, @height = @edje.get_size_min
40 w, h = @edje.get_size_min
43 @playlist.container.append_element(@edje)
45 self.selected = @selected
47 @edje.on_signal("playlist_item.selected") do |sig, src|
48 next if src == "Euphoria"
50 @playlist.each do |item|
51 item.selected = (item == self)
55 @edje.on_signal("playlist_item.hilighted") do |sig, src|
56 next if src == "Euphoria"
58 @playlist.each do |item|
59 item.hilighted = (item == self)
63 @edje.on_signal("playlist_item.play") do
64 @xmms.playlist_set_next(@position).wait
65 @xmms.playback_tickle.wait
66 @xmms.playback_start.wait
69 @edje.on_signal("PLAYLIST_SCROLL_UP", "") do
70 @playlist.container.scroll(h * 3)
73 @edje.on_signal("PLAYLIST_SCROLL_DOWN", "") do
74 @playlist.container.scroll(h * -3)
81 sig = b ? "hilighted" : "unhilighted"
83 @edje.emit_signal("playlist_item.#{sig}", "Euphoria")
90 sig = b ? "selected" : "unselected"
92 @edje.emit_signal("playlist_item.#{sig}", "Euphoria")
97 # since we don't actually hide the edje, but just delete it,
98 # we don't need to check @edje.visible? here
103 @playlist.container.remove_element(@edje)
108 def properties=(hash)
111 set_parts_text unless @edje.nil?
116 set_parts_text unless @edje.nil?
121 tmp = (duration == -1) ? "" :
122 ("%i:%02i" % [duration / 60, duration % 60])
123 @edje.part("duration").text = tmp
124 @edje.part("title").text = "%i %s - %s" % [@position + 1, artist, title]