2 attr_reader :id, :edje, :position, :selected, :hilighted
4 def initialize(id, xmms, playlist)
6 @position = playlist.size
18 @xmms.medialib_get_info(id).notifier do |res|
19 self.properties = res.value
23 def method_missing(method)
24 @props[method] || "unknown #{method}"
28 @props[:duration].to_i / 1000
32 @edje = Edje::Edje.new(@playlist.container.evas)
33 @edje.load(eet, "playlist_item")
34 w, @height = @edje.get_size_min
38 w, h = @edje.get_size_min
41 @playlist.container.append_element(@edje)
43 self.selected = @selected
45 @edje.on_signal("playlist_item.selected") do |sig, src|
46 next if src == "Euphoria"
48 @playlist.each do |item|
49 item.selected = (item == self)
53 @edje.on_signal("playlist_item.hilighted") do |sig, src|
54 next if src == "Euphoria"
56 @playlist.each do |item|
57 item.hilighted = (item == self)
61 @edje.on_signal("playlist_item.play") do
62 @xmms.playlist_set_next(@position).wait
63 @xmms.playback_tickle.wait
64 @xmms.playback_start.wait
67 @edje.on_signal("PLAYLIST_SCROLL_UP", "") do
68 @playlist.container.scroll(h * 3)
71 @edje.on_signal("PLAYLIST_SCROLL_DOWN", "") do
72 @playlist.container.scroll(h * -3)
79 sig = b ? "hilighted" : "unhilighted"
81 @edje.emit_signal("playlist_item.#{sig}", "Euphoria")
88 sig = b ? "selected" : "unselected"
90 @edje.emit_signal("playlist_item.#{sig}", "Euphoria")
95 # since we don't actually hide the edje, but just delete it,
96 # we don't need to check @edje.visible? here
101 @playlist.container.remove_element(@edje)
106 def properties=(hash)
109 set_parts_text unless @edje.nil?
114 set_parts_text unless @edje.nil?
117 def track_info_message
118 unless @props[:channel].nil?
119 Edje::Message.new(0, channel)
121 Edje::Message.new(0, artist, title, album)
127 tmp = (duration == -1) ? "" :
128 ("%i:%02i" % [duration / 60, duration % 60])
129 @edje.part("duration").text = tmp
130 @edje.part("title").text = "%i %s - %s" % [@position + 1, artist, title]