Initial commit.
authorTilman Sauerbeck <tilman@code-monkey.de>
Mon, 2 Oct 2006 08:09:42 +0000 (10:09 +0200)
committerTilman Sauerbeck <tilman@code-monkey.de>
Mon, 2 Oct 2006 08:09:42 +0000 (10:09 +0200)
307 files changed:
AUTHORS [new file with mode: 0644]
COPYING [new file with mode: 0644]
ChangeLog [new file with mode: 0644]
NEWS [new file with mode: 0644]
README [new file with mode: 0644]
Rakefile [new file with mode: 0644]
TODO [new file with mode: 0644]
bin/euphoria [new file with mode: 0644]
data/fonts/Vera.ttf [new file with mode: 0644]
data/fonts/micro.ttf [new file with mode: 0644]
data/fonts/redensek.ttf [new file with mode: 0644]
data/themes/common.inc [new file with mode: 0644]
data/themes/default/default.edc [new file with mode: 0644]
data/themes/default/default_images.edc [new file with mode: 0644]
data/themes/default/default_parts.edc [new file with mode: 0644]
data/themes/default/default_playlist_parts.edc [new file with mode: 0644]
data/themes/default/default_playlist_progs.edc [new file with mode: 0644]
data/themes/default/default_progs.edc [new file with mode: 0644]
data/themes/default/default_small_parts.edc [new file with mode: 0644]
data/themes/default/default_small_progs.edc [new file with mode: 0644]
data/themes/default/images/background-dark-green.png [new file with mode: 0644]
data/themes/default/images/background-green.png [new file with mode: 0644]
data/themes/default/images/border-scale.png [new file with mode: 0644]
data/themes/default/images/button-3stage-fulldown.png [new file with mode: 0644]
data/themes/default/images/button-3stage-selected.png [new file with mode: 0644]
data/themes/default/images/button-3stage-unselected.png [new file with mode: 0644]
data/themes/default/images/button-full-blinking.png [new file with mode: 0644]
data/themes/default/images/button-full-clicked.png [new file with mode: 0644]
data/themes/default/images/button-full-normal.png [new file with mode: 0644]
data/themes/default/images/button-full-unblinking.png [new file with mode: 0644]
data/themes/default/images/button-off.png [new file with mode: 0644]
data/themes/default/images/button-on.png [new file with mode: 0644]
data/themes/default/images/button-small-clicked.png [new file with mode: 0644]
data/themes/default/images/button-small-normal.png [new file with mode: 0644]
data/themes/default/images/close_button.png [new file with mode: 0644]
data/themes/default/images/controls-back.png [new file with mode: 0644]
data/themes/default/images/function-button-clicked.png [new file with mode: 0644]
data/themes/default/images/function-button-normal.png [new file with mode: 0644]
data/themes/default/images/lcd_area.png [new file with mode: 0644]
data/themes/default/images/minimize.png [new file with mode: 0644]
data/themes/default/images/set-button-normal.png [new file with mode: 0644]
data/themes/default/images/small-text-button.png [new file with mode: 0644]
data/themes/default/images/tracktor-sample-alive.png [new file with mode: 0644]
data/themes/default/images/tracktor-sample-dead.png [new file with mode: 0644]
data/themes/default/images/vol-display.png [new file with mode: 0644]
data/themes/default/images/vol-label.png [new file with mode: 0644]
data/themes/default/images/vol-minus-clicked.png [new file with mode: 0644]
data/themes/default/images/vol-minus.png [new file with mode: 0644]
data/themes/default/images/vol-plus-clicked.png [new file with mode: 0644]
data/themes/default/images/vol-plus.png [new file with mode: 0644]
data/themes/iio/collections/base_to.edc [new file with mode: 0644]
data/themes/iio/collections/esmart_fd.edc [new file with mode: 0644]
data/themes/iio/collections/playlist.edc [new file with mode: 0644]
data/themes/iio/collections/switch.edc [new file with mode: 0644]
data/themes/iio/fonts/fonts.edc [new file with mode: 0644]
data/themes/iio/fonts/visitor.txt [new file with mode: 0644]
data/themes/iio/fonts/visitor1.ttf [new file with mode: 0644]
data/themes/iio/hashes/containers.edc [new file with mode: 0644]
data/themes/iio/hashes/window.edc [new file with mode: 0644]
data/themes/iio/iio.edc [new file with mode: 0644]
data/themes/iio/img/a_s_lcd.png [new file with mode: 0644]
data/themes/iio/img/a_s_lcd_01.png [new file with mode: 0644]
data/themes/iio/img/a_s_lcd_010.png [new file with mode: 0644]
data/themes/iio/img/a_s_lcd_011.png [new file with mode: 0644]
data/themes/iio/img/a_s_lcd_0112.png [new file with mode: 0644]
data/themes/iio/img/a_s_lcd_0113.png [new file with mode: 0644]
data/themes/iio/img/a_s_lcd_0114.png [new file with mode: 0644]
data/themes/iio/img/a_s_lcd_0115.png [new file with mode: 0644]
data/themes/iio/img/a_s_lcd_0116.png [new file with mode: 0644]
data/themes/iio/img/a_s_lcd_0117.png [new file with mode: 0644]
data/themes/iio/img/a_s_lcd_0118.png [new file with mode: 0644]
data/themes/iio/img/a_s_lcd_0119.png [new file with mode: 0644]
data/themes/iio/img/a_s_lcd_0120.png [new file with mode: 0644]
data/themes/iio/img/a_s_lcd_0121.png [new file with mode: 0644]
data/themes/iio/img/a_s_lcd_0122.png [new file with mode: 0644]
data/themes/iio/img/a_s_lcd_0123.png [new file with mode: 0644]
data/themes/iio/img/a_s_lcd_0124.png [new file with mode: 0644]
data/themes/iio/img/a_s_lcd_0125.png [new file with mode: 0644]
data/themes/iio/img/a_s_lcd_0126.png [new file with mode: 0644]
data/themes/iio/img/a_s_lcd_0127.png [new file with mode: 0644]
data/themes/iio/img/a_s_lcd_0128.png [new file with mode: 0644]
data/themes/iio/img/a_s_lcd_0129.png [new file with mode: 0644]
data/themes/iio/img/a_s_lcd_0130.png [new file with mode: 0644]
data/themes/iio/img/a_s_lcd_0131.png [new file with mode: 0644]
data/themes/iio/img/a_s_lcd_0132.png [new file with mode: 0644]
data/themes/iio/img/a_s_lcd_0133.png [new file with mode: 0644]
data/themes/iio/img/a_s_lcd_02.png [new file with mode: 0644]
data/themes/iio/img/a_s_lcd_03.png [new file with mode: 0644]
data/themes/iio/img/a_s_lcd_04.png [new file with mode: 0644]
data/themes/iio/img/a_s_lcd_05.png [new file with mode: 0644]
data/themes/iio/img/a_s_lcd_06.png [new file with mode: 0644]
data/themes/iio/img/a_s_lcd_07.png [new file with mode: 0644]
data/themes/iio/img/a_s_lcd_08.png [new file with mode: 0644]
data/themes/iio/img/a_s_lcd_09.png [new file with mode: 0644]
data/themes/iio/img/add_track.png [new file with mode: 0644]
data/themes/iio/img/add_track_clicked.png [new file with mode: 0644]
data/themes/iio/img/add_track_hilited.png [new file with mode: 0644]
data/themes/iio/img/align_bottom.png [new file with mode: 0644]
data/themes/iio/img/align_center.png [new file with mode: 0644]
data/themes/iio/img/align_left.png [new file with mode: 0644]
data/themes/iio/img/align_right.png [new file with mode: 0644]
data/themes/iio/img/align_top.png [new file with mode: 0644]
data/themes/iio/img/arrow_down.png [new file with mode: 0644]
data/themes/iio/img/arrow_up.png [new file with mode: 0644]
data/themes/iio/img/bar_delay_clicked.png [new file with mode: 0644]
data/themes/iio/img/bar_delay_hilited.png [new file with mode: 0644]
data/themes/iio/img/bar_delay_left.png [new file with mode: 0644]
data/themes/iio/img/bar_delay_right.png [new file with mode: 0644]
data/themes/iio/img/bar_delay_right_clicked.png [new file with mode: 0644]
data/themes/iio/img/bar_delay_right_hilited.png [new file with mode: 0644]
data/themes/iio/img/base_anim.png [new file with mode: 0644]
data/themes/iio/img/base_layer.png [new file with mode: 0644]
data/themes/iio/img/bullet.png [new file with mode: 0644]
data/themes/iio/img/close_button.png [new file with mode: 0644]
data/themes/iio/img/close_button_clicked.png [new file with mode: 0644]
data/themes/iio/img/close_button_hilited.png [new file with mode: 0644]
data/themes/iio/img/close_mode_button_clicked.png [new file with mode: 0644]
data/themes/iio/img/close_mode_button_hilited.png [new file with mode: 0644]
data/themes/iio/img/close_mode_button_normal.png [new file with mode: 0644]
data/themes/iio/img/delete_track.png [new file with mode: 0644]
data/themes/iio/img/delete_track_clicked.png [new file with mode: 0644]
data/themes/iio/img/delete_track_hilited.png [new file with mode: 0644]
data/themes/iio/img/edit_track.png [new file with mode: 0644]
data/themes/iio/img/edit_track_clicked.png [new file with mode: 0644]
data/themes/iio/img/edit_track_hilited.png [new file with mode: 0644]
data/themes/iio/img/h_arrow.png [new file with mode: 0644]
data/themes/iio/img/images.edc [new file with mode: 0644]
data/themes/iio/img/lcd_window.png [new file with mode: 0644]
data/themes/iio/img/left_panel.png [new file with mode: 0644]
data/themes/iio/img/next_button.png [new file with mode: 0644]
data/themes/iio/img/next_button_clicked.png [new file with mode: 0644]
data/themes/iio/img/next_button_hilited.png [new file with mode: 0644]
data/themes/iio/img/pause_button.png [new file with mode: 0644]
data/themes/iio/img/pause_button_clicked.png [new file with mode: 0644]
data/themes/iio/img/pause_button_hilited.png [new file with mode: 0644]
data/themes/iio/img/play_button.png [new file with mode: 0644]
data/themes/iio/img/play_button_clicked.png [new file with mode: 0644]
data/themes/iio/img/play_button_hilited.png [new file with mode: 0644]
data/themes/iio/img/previous_button.png [new file with mode: 0644]
data/themes/iio/img/previous_button_clicked.png [new file with mode: 0644]
data/themes/iio/img/previous_button_hilited.png [new file with mode: 0644]
data/themes/iio/img/right_panel.png [new file with mode: 0644]
data/themes/iio/img/s_b_next.png [new file with mode: 0644]
data/themes/iio/img/s_b_pause.png [new file with mode: 0644]
data/themes/iio/img/s_b_play.png [new file with mode: 0644]
data/themes/iio/img/s_b_prev.png [new file with mode: 0644]
data/themes/iio/img/s_b_stop.png [new file with mode: 0644]
data/themes/iio/img/seeker_bar.png [new file with mode: 0644]
data/themes/iio/img/seeker_trough.png [new file with mode: 0644]
data/themes/iio/img/small_base.png [new file with mode: 0644]
data/themes/iio/img/small_lcd.png [new file with mode: 0644]
data/themes/iio/img/small_lcd_active.png [new file with mode: 0644]
data/themes/iio/img/stop_button.png [new file with mode: 0644]
data/themes/iio/img/stop_button_clicked.png [new file with mode: 0644]
data/themes/iio/img/stop_button_hilited.png [new file with mode: 0644]
data/themes/iio/img/switch_button.png [new file with mode: 0644]
data/themes/iio/img/switch_button_clicked.png [new file with mode: 0644]
data/themes/iio/img/switch_button_hilited.png [new file with mode: 0644]
data/themes/iio/img/switch_mode.png [new file with mode: 0644]
data/themes/iio/img/switch_mode_clicked.png [new file with mode: 0644]
data/themes/iio/img/switch_mode_hilited.png [new file with mode: 0644]
data/themes/iio/img/v_scrollbar.png [new file with mode: 0644]
data/themes/iio/img/v_scrollbar_base.png [new file with mode: 0644]
data/themes/iio/macros/fd_entity.edc [new file with mode: 0644]
data/themes/iio/macros/vpanel.edc [new file with mode: 0644]
data/themes/iio/programs/controls_to.edc [new file with mode: 0644]
data/themes/iio/programs/esmart_fd.edc [new file with mode: 0644]
data/themes/iio/programs/playlist.edc [new file with mode: 0644]
data/themes/iio/programs/switch.edc [new file with mode: 0644]
data/themes/streamline/images/background-dark-green.png [new file with mode: 0644]
data/themes/streamline/images/background-green.png [new file with mode: 0644]
data/themes/streamline/images/border-scale.png [new file with mode: 0644]
data/themes/streamline/images/button-3stage-fulldown.png [new file with mode: 0644]
data/themes/streamline/images/button-3stage-selected.png [new file with mode: 0644]
data/themes/streamline/images/button-3stage-unselected.png [new file with mode: 0644]
data/themes/streamline/images/button-full-blinking.png [new file with mode: 0644]
data/themes/streamline/images/button-full-clicked.png [new file with mode: 0644]
data/themes/streamline/images/button-full-normal.png [new file with mode: 0644]
data/themes/streamline/images/button-full-unblinking.png [new file with mode: 0644]
data/themes/streamline/images/button-off.png [new file with mode: 0644]
data/themes/streamline/images/button-on.png [new file with mode: 0644]
data/themes/streamline/images/button-small-clicked.png [new file with mode: 0644]
data/themes/streamline/images/button-small-normal.png [new file with mode: 0644]
data/themes/streamline/images/close_button.png [new file with mode: 0644]
data/themes/streamline/images/compact-nexttrack-clicked.png [new file with mode: 0644]
data/themes/streamline/images/compact-nexttrack-normal.png [new file with mode: 0644]
data/themes/streamline/images/compact-prevtrack-clicked.png [new file with mode: 0644]
data/themes/streamline/images/compact-prevtrack-normal.png [new file with mode: 0644]
data/themes/streamline/images/compact-seekback-clicked.png [new file with mode: 0644]
data/themes/streamline/images/compact-seekback-normal.png [new file with mode: 0644]
data/themes/streamline/images/compact-seekforward-clicked.png [new file with mode: 0644]
data/themes/streamline/images/compact-seekforward-normal.png [new file with mode: 0644]
data/themes/streamline/images/controls-back.png [new file with mode: 0644]
data/themes/streamline/images/eplayer-interface-2b.png [new file with mode: 0644]
data/themes/streamline/images/lcd_area.png [new file with mode: 0644]
data/themes/streamline/images/minimize.png [new file with mode: 0644]
data/themes/streamline/images/playpause-clicked.png [new file with mode: 0644]
data/themes/streamline/images/playpause-down.png [new file with mode: 0644]
data/themes/streamline/images/playpause-normal.png [new file with mode: 0644]
data/themes/streamline/images/playpause-orange-held.png [new file with mode: 0644]
data/themes/streamline/images/playpause-orange-released.png [new file with mode: 0644]
data/themes/streamline/images/set-button-normal.png [new file with mode: 0644]
data/themes/streamline/images/small-text-button.png [new file with mode: 0644]
data/themes/streamline/images/vol-display.png [new file with mode: 0644]
data/themes/streamline/images/vol-label.png [new file with mode: 0644]
data/themes/streamline/images/vol-minus-clicked.png [new file with mode: 0644]
data/themes/streamline/images/vol-minus.png [new file with mode: 0644]
data/themes/streamline/images/vol-plus-clicked.png [new file with mode: 0644]
data/themes/streamline/images/vol-plus.png [new file with mode: 0644]
data/themes/streamline/streamline.edc [new file with mode: 0644]
data/themes/streamline/streamline_images.edc [new file with mode: 0644]
data/themes/streamline/streamline_parts.edc [new file with mode: 0644]
data/themes/streamline/streamline_playlist_parts.edc [new file with mode: 0644]
data/themes/streamline/streamline_playlist_progs.edc [new file with mode: 0644]
data/themes/streamline/streamline_progs.edc [new file with mode: 0644]
data/themes/streamline/streamline_small_parts.edc [new file with mode: 0644]
data/themes/streamline/streamline_small_progs.edc [new file with mode: 0644]
data/themes/winter/groups/collapsed.edc [new file with mode: 0644]
data/themes/winter/groups/euphoria.edc [new file with mode: 0644]
data/themes/winter/groups/playlist_item.edc [new file with mode: 0644]
data/themes/winter/images/collapsed.edc [new file with mode: 0644]
data/themes/winter/images/euphoria.edc [new file with mode: 0644]
data/themes/winter/img/bot.png [new file with mode: 0644]
data/themes/winter/img/bot_grad.png [new file with mode: 0644]
data/themes/winter/img/dot.png [new file with mode: 0644]
data/themes/winter/img/edit1.png [new file with mode: 0644]
data/themes/winter/img/edit2.png [new file with mode: 0644]
data/themes/winter/img/ff1.png [new file with mode: 0644]
data/themes/winter/img/ff2.png [new file with mode: 0644]
data/themes/winter/img/main.png [new file with mode: 0644]
data/themes/winter/img/minus1.png [new file with mode: 0644]
data/themes/winter/img/minus2.png [new file with mode: 0644]
data/themes/winter/img/next1.png [new file with mode: 0644]
data/themes/winter/img/next2.png [new file with mode: 0644]
data/themes/winter/img/panel.png [new file with mode: 0644]
data/themes/winter/img/pause1.png [new file with mode: 0644]
data/themes/winter/img/pause2.png [new file with mode: 0644]
data/themes/winter/img/pl1.png [new file with mode: 0644]
data/themes/winter/img/pl2.png [new file with mode: 0644]
data/themes/winter/img/play1.png [new file with mode: 0644]
data/themes/winter/img/play2.png [new file with mode: 0644]
data/themes/winter/img/plus1.png [new file with mode: 0644]
data/themes/winter/img/plus2.png [new file with mode: 0644]
data/themes/winter/img/prev1.png [new file with mode: 0644]
data/themes/winter/img/prev2.png [new file with mode: 0644]
data/themes/winter/img/rew1.png [new file with mode: 0644]
data/themes/winter/img/rew2.png [new file with mode: 0644]
data/themes/winter/img/screen.png [new file with mode: 0644]
data/themes/winter/img/seeker_bar.png [new file with mode: 0644]
data/themes/winter/img/seeker_bar_grad.png [new file with mode: 0644]
data/themes/winter/img/seeker_trough.png [new file with mode: 0644]
data/themes/winter/img/shad.png [new file with mode: 0644]
data/themes/winter/img/small-ff1.png [new file with mode: 0644]
data/themes/winter/img/small-ff2.png [new file with mode: 0644]
data/themes/winter/img/small-left-grad.png [new file with mode: 0644]
data/themes/winter/img/small-main.png [new file with mode: 0644]
data/themes/winter/img/small-next1.png [new file with mode: 0644]
data/themes/winter/img/small-next2.png [new file with mode: 0644]
data/themes/winter/img/small-panel.png [new file with mode: 0644]
data/themes/winter/img/small-pause1.png [new file with mode: 0644]
data/themes/winter/img/small-pause2.png [new file with mode: 0644]
data/themes/winter/img/small-play1.png [new file with mode: 0644]
data/themes/winter/img/small-play2.png [new file with mode: 0644]
data/themes/winter/img/small-prev1.png [new file with mode: 0644]
data/themes/winter/img/small-prev2.png [new file with mode: 0644]
data/themes/winter/img/small-rew1.png [new file with mode: 0644]
data/themes/winter/img/small-rew2.png [new file with mode: 0644]
data/themes/winter/img/small-right-grad.png [new file with mode: 0644]
data/themes/winter/img/small-right.png [new file with mode: 0644]
data/themes/winter/img/small-seeker-bar.png [new file with mode: 0644]
data/themes/winter/img/small-seeker-trough.png [new file with mode: 0644]
data/themes/winter/img/top_grad.png [new file with mode: 0644]
data/themes/winter/img/vol-dn-border.png [new file with mode: 0644]
data/themes/winter/img/vol-dn-clicked.png [new file with mode: 0644]
data/themes/winter/img/vol-dn-over.png [new file with mode: 0644]
data/themes/winter/img/vol-dn.png [new file with mode: 0644]
data/themes/winter/img/vol-up-border.png [new file with mode: 0644]
data/themes/winter/img/vol-up-clicked.png [new file with mode: 0644]
data/themes/winter/img/vol-up-over.png [new file with mode: 0644]
data/themes/winter/img/vol-up.png [new file with mode: 0644]
data/themes/winter/img/volume.png [new file with mode: 0644]
data/themes/winter/img/x1.png [new file with mode: 0644]
data/themes/winter/img/x2.png [new file with mode: 0644]
data/themes/winter/macros/macros.inc [new file with mode: 0644]
data/themes/winter/macros/toggle.inc [new file with mode: 0644]
data/themes/winter/parts/ani.edc [new file with mode: 0644]
data/themes/winter/parts/buttons.edc [new file with mode: 0644]
data/themes/winter/parts/main.edc [new file with mode: 0644]
data/themes/winter/parts/playlist.edc [new file with mode: 0644]
data/themes/winter/parts/seeker.edc [new file with mode: 0644]
data/themes/winter/parts/text.edc [new file with mode: 0644]
data/themes/winter/parts/volume.edc [new file with mode: 0644]
data/themes/winter/programs/ani.edc [new file with mode: 0644]
data/themes/winter/programs/buttons.edc [new file with mode: 0644]
data/themes/winter/programs/playlist.edc [new file with mode: 0644]
data/themes/winter/programs/seeker.edc [new file with mode: 0644]
data/themes/winter/programs/switch.edc [new file with mode: 0644]
data/themes/winter/programs/text.edc [new file with mode: 0644]
data/themes/winter/programs/volume.edc [new file with mode: 0644]
data/themes/winter/winter.edc [new file with mode: 0644]
lib/file_dialog.rb [new file with mode: 0644]
lib/playback_status_handler.rb [new file with mode: 0644]
lib/playlist.rb [new file with mode: 0644]
lib/playlist_item.rb [new file with mode: 0644]
lib/playtime_updater.rb [new file with mode: 0644]
lib/slider.rb [new file with mode: 0644]
lib/volume_box.rb [new file with mode: 0644]

diff --git a/AUTHORS b/AUTHORS
new file mode 100644 (file)
index 0000000..5864b3d
--- /dev/null
+++ b/AUTHORS
@@ -0,0 +1 @@
+Tilman Sauerbeck (tilman at code-monkey de)
diff --git a/COPYING b/COPYING
new file mode 100644 (file)
index 0000000..838979c
--- /dev/null
+++ b/COPYING
@@ -0,0 +1,21 @@
+Copyright (C) 2004 - 2005 Tilman Sauerbeck and various contributors
+                          (see AUTHORS)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to
+deal in the Software without restriction, including without limitation the
+rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+sell copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+  
+The above copyright notice and this permission notice shall be included in
+all copies of the Software, its documentation and marketing & publicity 
+materials, and acknowledgment shall be given in the documentation, materials
+and software packages that this Software was used.
+   
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/ChangeLog b/ChangeLog
new file mode 100644 (file)
index 0000000..42948b6
--- /dev/null
+++ b/ChangeLog
@@ -0,0 +1,168 @@
+$Id: ChangeLog,v 1.2 2004/03/16 18:14:33 tsauerbeck Exp $
+
+2004-03-16 Tilman Sauerbeck <tilman -at- code-monkey.de>
+        * data/README, src/interface.c, src/euphoria.[ch],
+          src/callbacks.c: added support for vertical and inverted
+          seekers.
+
+2004-02-22 Tilman Sauerbeck <tilman -at- code-monkey.de>
+        * This sweet application is a XMMS2 frontend now
+
+2004-02-15 Tilman Sauerbeck <tilman -at- code-monkey.de>
+        * src/interface.c, src/playlist_item.[ch], src/plugin.h,
+          src/input/vorbis/vorbis.c: added bitrate and sample rate
+          parts
+
+2004-02-03 Tilman Sauerbeck <tilman -at- code-monkey.de>
+        * src/playlist.c, src/playlist_item.c, src/callbacks.c:
+          The UI parts and playlist are now correctly re-initialized
+          after a group switch
+
+2004-02-01 Tilman Sauerbeck <tilman -at- code-monkey.de>
+        * src/eplayer.c, src/interface.c, src/playlist.c,
+          src/playlist_item.c: Each PlayListItem object now
+          has its own Edje object
+        * data/README, src/eplayer.c: Added two signals,
+          PLAYBACK_STARTED and PLAYBACK_STOPPED
+        * src/callbacks.c: The playlist marker now always follows
+          the track that's being played
+
+2004-01-24 Tilman Sauerbeck <tilman -at- code-monkey.de>
+        * src/eplayer.c, src/plugin.c: Switched to libltdl
+        * src/interface.c: added draggie support, removed the RAISE
+          signal.
+
+2003-12-28 Tilman Sauerbeck <tilman -at- code-monkey.de>
+        * src/callbacks.c, src/playlist.c, src/interface.c,
+          data/README: Added PLAYLIST_ITEM_REMOVE (thanks to atmos).
+
+2003-12-07 Tilman Sauerbeck <tilman -at- code-monkey.de>
+        * src/output/alsa/alsa.c: make sure changes made to the
+          mixer levels w/ other applications (like alsamixer) are
+          reflected in eplayer
+        * src/eplayer.c, src/track.c, src/interface.c:
+          update the track info parts etc on group switch
+        * src/interface.c, src/callbacks.[ch], data/README:
+          added STOP signal
+
+2003-12-04 Tilman Sauerbeck <tilman -at- code-monkey.de>
+        * src/eplayer.c: eplayer.db lives in ~/.e/apps/eplayer now
+        * data/themes/default/default.edc: Added repeat mode toggle
+          button
+
+2003-11-30 Tilman Sauerbeck <tilman -at- code-monkey.de>
+        * src/data/eplayer.edc: Added "small" (collapsed) mode
+          to the eplayer theme (thanks to digitalfallout!).
+          Fixed indentation as well.
+
+2003-11-24 Tilman Sauerbeck <tilman -at- code-monkey.de>
+        * src/interface.[ch], scr/callbacks.[ch], data/README:
+          Added SWITCH_GROUP edje signal
+
+2003-11-18 Tilman Sauerbeck <tilman -at- code-monkey.de>
+        * src/interface.c, src/eplayer.c, src/eplayer.h:
+          The theme that's to be used can now be set in eplayer.db
+
+2003-11-17 Tilman Sauerbeck <tilman -at- code-monkey.de>
+        * src/playlist.c: Fixed playlist_load_dir()
+        * src/interface.c, data/README:
+          Added QUIT signal, thanks to digitalfallout
+        * src/interface.c, src/callbacks.c, data/README:
+          Updated playlist scrolling signals/code, added
+          PLAYLIST_ITEM_PLAY
+
+2003-11-15 Tilman Sauerbeck <tilman -at- code-monkey.de>
+        * src/interface.c: Fixed playlist scrolling
+        * src/interface.c, src/callbacks.c, data/README:
+          Added repeat mode stuff
+        * src/interface.c, src/callbacks.c, data/eplayer.edc,
+          data/README: Simplified playlist code
+
+2003-11-14 Tilman Sauerbeck <tilman -at- Â¢ode-monkey.de>
+        * src/playlist.c, src/eplayer.c, src/interface.c:
+          The playlist is loaded/displayed after the GUI has been
+          initialized now.
+
+2003-11-10 Tilman Sauerbeck <tilman -at- code-monkey.de>
+        * src/playlist.c: Misc fixes
+        * src/callbacks.c: Reset paused state on next/prev/seek
+        * data/README: Updated Edje documentation
+
+2003-10-25 Tilman Sauerbeck <tilman -at- code-monkey.de>
+        * src/eplayer.c, src/track.c: Put the decoding/playing
+          code in a separate thread
+
+2003-10-24 Tilman Sauerbeck <tilman -at- code-monkey.de>
+        * src/input/avcodec: Added libavcodec input plugin
+        * src/input/avcodec/avcodec.c: Now uses libavformat to read
+          MP3 tags.
+
+2003-10-23 Tilman Sauerbeck <tilman -at- code-monkey.de>
+        * src/input: Added a input plugin system
+        * src/vorbis.c, src/input/vorbis: Move vorbis specific code
+          to its own plugin
+
+2003-10-22 Tilman Sauerbeck <tilman -at- code-monkey.de>
+        * configure.ac: Fix OSS check, add checks for Solaris' audioio.h
+          and ALSA
+        * src/output/solaris: Added Solaris output plugin
+        * src/output/alsa: Added ALSA output plugin
+        * etc/Makefile.am, src/eplayer.c: We have a config file now
+
+2003-10-21 Tilman Sauerbeck <tilman -at- code-monkey.de>
+        * configure.ac: check for sys/soundcard.h to determine whether
+          the OSS output plugin should be built
+        * src/vorbis.c, src/output: added output plugin stuff to replace
+          libao
+        * src/output/oss/oss.c: added OSS output plugin
+        * src/mixer.c, src/mixer.h: removed, mixer is controlled by the
+          output plugin now
+        * misc other stuff
+
+2003-10-18 Tilman Sauerbeck <tilman -at- code-monkey.de>
+        * src/vorbis.c: track_open() initializes the "time_text"
+          part, too
+        * src/callbacks.c: when cb_track_next() is called after the
+          last playlist item, it moves to the beginning again, without
+          starting playback.
+        * src/callbacks.c: cb_track_prev() does nothing when it's
+          called on the beginning of the playlist
+
+2003-10-17 Tilman Sauerbeck <tilman -at- code-monkey.de>
+        * src/mixer.c, src/mixer.h, src/eplayer.c, src/callbacks.c,
+          interface.c:
+          Rewrote mixer code, the mixer is periodically read now to
+          reflect changes made by other applications
+        * src/eplayer.c: Added _playback_start(), _playback_stop()
+        * src/vorbis.c: The "time" part is updated in a sane
+          period now
+        * src/vorbis.c, src/eplayer.c: Tidied up libao calls
+        * data/eplayer.edc: buttons emit their signals on mouse_up now
+        * src/vorbis.c: Fixed a memory leak which was caused by not
+          calling ao_close() in track_close()
+        * data/eplayer.edc, src/callbacks.c, src/interface.c:
+          The playlist can be scrolled using the mousewheel now
+        * src/eplayer.c: check ao_default_driver_id() on startup
+
+2003-10-16 Tilman Sauerbeck <tilman -at- code-monkey.de>
+        * configure.ac: Added endianess-check, added --enable-debug
+          switch
+        * src/eplayer.c, src/playlist.c: added playlist_load_any(),
+          eplayer will now load files and directories as well
+        * code cleanup
+        * configure.ac, Makefile.am etc: implemented install and
+          dist targets
+        * src/playlist.c: Fixed a potential segfault
+        * src/vorbis.c: Fixed a segfault that occurred when
+          play_loop() called open_track() with player->cur_item
+          being NULL
+
+2003-10-15 Tilman Sauerbeck <tilman -at- code-monkey.de>
+        * data/eplayer.edc: Added basic playlist support,
+          time_text shows elapsed time or time left
+        * src/Makefile.am: Now linking to libesmart, included playlist.c
+          and playlist.h
+        * src/playlist.c,h: Added playlist object
+        * src/eplayer.c, interface.c: Added basic playlist support
+        * autogen.sh, configure.ac, src/Makefile.am:
+          Updated build system
diff --git a/NEWS b/NEWS
new file mode 100644 (file)
index 0000000..53a90bf
--- /dev/null
+++ b/NEWS
@@ -0,0 +1 @@
+Empty
diff --git a/README b/README
new file mode 100644 (file)
index 0000000..450f719
--- /dev/null
+++ b/README
@@ -0,0 +1,78 @@
+$Id: README,v 1.11 2005/05/21 08:39:19 tsauerbeck Exp $
+
+Euphoria v0.8.0
+
+Written by Tilman Sauerbeck and various contributors.
+See AUTHORS for details/the complete list.
+
+
+DEPENDENCIES
+------------
+
+Euphoria requires the following:
+
+Evas
+Ecore
+Edje
+Esmart
+XMMS2
+Ruby-EFL
+Rake
+
+
+ABOUT
+-------
+
+Euphoria is an audio player which is based on Ecore, Evas and Edje.
+It acts as a frontend to XMMS2.
+
+INSTALLATION OF EUPHORIA & XMMS2
+--------------------------------
+To use build Euphoria you will need to first install XMMS2.
+See http://wiki.xmms2.xmms.se for instructions.
+
+Now install Euphoria by running "rake install".
+
+At this point you're ready to rock.  Start Euphoria but make sure
+the XMMS2 Daemon is running.
+
+RUNNING EUPHORIA
+----------------
+
+For the time being (as of this writting) you need to manage your
+play list using the CLI client.  An example session would be:
+
+1) Open an Eterm and start the daemon so you can see debugging
+       information: "xmms2d"
+2) Open an Eterm to control XMMS2, use the following commands:
+       $ xmms2 add /path/to/some/files
+       $ xmms2 add http://205.188.234.65:8022
+       $ xmms2 list
+       (now the playlist has stuff in it)
+3) Start Euphoria with no options.
+
+REPORTING BUGS
+---------------
+
+You can report bugs here: http://xcomputerman.com/bugs/
+
+
+FAQ
+-------
+
+Q: Will you support WinAmp skins?
+A: -> Nope.... go use XMMS(1) if you want traditional skins.
+Refer to the first question.
+
+But I will admit that I have considered the possiblity of automating
+the conversion of WinAmpv3 skins (.wal's) to Edje.
+It doesn't look hard, and Edje can do everything and more that WinAmp
+can do with it's interface, but in a far more general way.
+
+The problem is really just parsing all that XML (the WA skin config
+files are now XML).  With PERL there could probly be an easy conversion,
+but if there is one thing I hate parsing it's XML.
+
+It would instantly make this audio player the player to use though!
+
diff --git a/Rakefile b/Rakefile
new file mode 100644 (file)
index 0000000..b5fb11f
--- /dev/null
+++ b/Rakefile
@@ -0,0 +1,37 @@
+# $Id: Rakefile,v 1.10 2005/06/14 16:41:52 tsauerbeck Exp $
+
+require "rbconfig"
+require "rake/clean"
+
+sitelibdir = ENV["RUBYLIBDIR"] || Config::CONFIG["sitelibdir"]
+destdir = "#{ENV["DESTDIR"]}"
+prefix = ENV["PREFIX"] || "/usr/local"
+
+themes = ["iio", "winter"].map do |t|
+       "data/themes/#{t}/#{t}.edj"
+end
+
+CLOBBER.include(themes)
+
+task :default => :themes
+task :themes => themes
+
+rule ".edj" => [".edc"] do |t|
+       Dir.chdir(File.dirname(t.source)) do
+               sh "edje_cc -id img -id images " +
+                  "-fd ../../fonts -fd fonts #{File.basename(t.source)}"
+       end
+end
+
+task :install => :themes do |t|
+       ddir = destdir + prefix + "/bin"
+       FileUtils::Verbose.install("bin/euphoria", ddir, :mode => 0755)
+
+       ddir = destdir + sitelibdir + "/euphoria"
+       FileUtils::Verbose.mkdir_p(ddir) unless File.directory?(ddir)
+       FileUtils::Verbose.install(Dir["lib/*.rb"], ddir, :mode => 0644)
+
+       ddir = destdir + prefix + "/share/euphoria/themes"
+       FileUtils::Verbose.mkdir_p(ddir) unless File.directory?(ddir)
+       FileUtils::Verbose.install(themes, ddir, :mode => 0644)
+end
diff --git a/TODO b/TODO
new file mode 100644 (file)
index 0000000..22ce51e
--- /dev/null
+++ b/TODO
@@ -0,0 +1,11 @@
+EDC Default Theme TODO: 
+
+-> Fix default size of the time text in the "minimized version" -> DONE
+-> Replace the ugly close button.      -> DONE
+-> Constrain double clicks to active minimized action only on the top "title bar" area. -> DONE
+-> When switching from minimized to fullsize and back title, etc, aren't updated.
+       Also, the playlist doesn't redraw.
+-> Holding down seek forward or back should seek in a loop.
+-> Change the full size buttons to something with graphics instead of text and use diffrent buttons.
+-> Add codec display to LCD
+-> Fix push animations.
diff --git a/bin/euphoria b/bin/euphoria
new file mode 100644 (file)
index 0000000..707d9e0
--- /dev/null
@@ -0,0 +1,402 @@
+#!/usr/bin/ruby -w
+
+# $Id: euphoria,v 1.41 2006/09/07 13:38:26 tilman Exp $
+
+require "ecore"
+require "ecore_x"
+require "ecore_evas"
+require "edje"
+require "esmart"
+require "esmart_draggies"
+require "esmart_container"
+require "xmmsclient"
+require "xmmsclient_ecore"
+require "singleton"
+require "yaml"
+require "find"
+require "fileutils"
+
+require "euphoria/playlist"
+require "euphoria/playlist_item"
+require "euphoria/slider"
+require "euphoria/volume_box"
+require "euphoria/playtime_updater"
+require "euphoria/playback_status_handler"
+require "euphoria/file_dialog"
+
+Config = Struct.new("Config", :ipc_path, :theme, :time_display_elapsed)
+
+# backwards compatibility w/ DrFeelgood and earlier
+unless Xmms.respond_to?(:userconfdir)
+       def Xmms.userconfdir
+               File.join(File.expand_path("~"), ".xmms2")
+       end
+end
+
+class Euphoria
+       DATA_DIR = "/usr/local/share/euphoria"
+       DATA_DIR_PRIV = File.join(Xmms.userconfdir,
+                                 "clients",
+                                 "euphoria")
+
+       include Singleton
+
+       attr_reader :xmms, :ee, :edje
+
+       def initialize
+               @edje = nil
+               @xmms = nil
+               @volume_box = nil
+
+               # settings
+               unless File.directory?(DATA_DIR_PRIV)
+                       FileUtils.mkdir_p(DATA_DIR_PRIV)
+               end
+
+               @config_file = DATA_DIR_PRIV + "/config.yaml"
+
+               load_config
+               init_xmms
+               init_gui
+
+               blk = lambda { |item| ui_fill_track_info(item) }
+               @playlist = Playlist.new(@xmms, blk)
+
+               setup_callbacks
+
+               @playtime_updater = PlaytimeUpdater.new(xmms) do |current_pos|
+                       ui_refresh_time(current_pos)
+
+                       # refresh the seeker
+                       if !@playlist.current_item.nil?
+                               d = @playlist.current_item.duration
+                               if d > 0
+                                       ui_refresh_seeker(current_pos / d.to_f)
+                               end
+                       end
+               end
+
+               PlaybackStatusHandler.new(xmms) do |state|
+                       @playback_state = state
+
+                       signal_playback_state
+                       @playtime_updater.enabled =
+                               (@playback_state == Xmms::Client::PLAY)
+               end
+
+               # is repeat enabled?
+               s = @xmms.configval_get("playlist.repeat_all").wait.value
+               @repeat = (s == "1")
+               @edje.emit_signal("TOGGLE_REPEAT_MODE", "Euphoria") if @repeat
+
+               @sliders = {}
+
+               unless @edje.data("has_volume_slider").nil?
+                       @sliders["volume"] = VolumeSlider.new(@edje, @xmms,
+                                                             "player.slider.volume")
+               end
+
+               if @edje.part_exists?("vol_display_text")
+                       # FIXME Maybe rename the part to volume_box
+                       @volume_box = VolumeBox.new(@edje, @xmms, "player.volumeBox")
+               end
+
+=begin
+               unless @edje.data("has_eq_slider").nil?
+                       1.upto(10) do |i|
+                               p = "player.slider.eq.band%02i" % i
+                               k = "equalizer.gain#{i - 1}"
+                               @sliders[k] = EqSlider.new(@edje, @xmms, p, k)
+                       end
+               end
+=end
+
+               handle_current_pos(@xmms.playlist_current_pos.wait)
+       end
+
+       def show
+               if @edje.data("has_separate_playlist").nil?
+                       @playlist.show(@theme, false)
+               end
+
+               @ee.show
+       end
+
+       def save_config
+               File.open(@config_file, "w") { |fo| YAML.dump(@config, fo) }
+       end
+
+       def show_file_dialog
+               if @file_dialog_theme.nil?
+                       puts "file dialog edje not found"
+                       return
+               end
+
+               FileDialog.open(@file_dialog_theme) do |sel|
+                       if File.directory?(sel)
+                               files = []
+                               Find.find(sel) { |f| files << f if File.file?(f) }
+
+                               files.sort.each do |f|
+                                       @xmms.playlist_add("file://" + f).wait
+                               end
+                       elsif File.exists?(sel)
+                               @xmms.playlist_add("file://" + sel).wait
+                       end
+               end
+       end
+
+private
+       def init_gui
+               @ee = Ecore::Evas::SoftwareX11.new
+               @ee.title = "Euphoria"
+               @ee.name_class = ["Euphoria", "Euphoria"]
+               @ee.borderless = true
+
+               #@ee.evas.font_path_append("/usr/X11R6/lib/X11/fonts/TTF")
+               #@ee.evas.font_path_append(ENV["HOME"] + "/.fonts")
+
+               @ee.on_pre_render { Edje::thaw }
+               @ee.on_post_render { Edje::freeze }
+
+               @ee.on_resize do
+                       x, y, w, h = @ee.geometry
+
+                       @edje.resize(w, h)
+                       @dragger.resize(w, h)
+               end
+
+               @dragger = Esmart::Draggies.new(@ee)
+               @dragger.name = "dragger"
+               @dragger.button = 1
+               @dragger.show
+
+               @theme = find_theme(@config.theme)
+               raise "Cannot find theme - #{@config.theme}" if @theme.nil?
+
+               if Edje.collections(@theme).include?("esmart.filedialog")
+                       @file_dialog_theme = @theme
+               else
+                       @file_dialog_theme = find_theme("file_dialog")
+               end
+
+               @edje = Edje::Edje.new(@ee.evas)
+               @edje.load(@theme, "euphoria")
+               @edje.name = "edje"
+               @edje.show
+
+               w, h = @edje.get_size_max
+               @ee.set_size_max(w, h)
+
+               w, h = @edje.get_size_min
+               @ee.set_size_min(w, h)
+
+               @ee.resize(w, h)
+
+               @ee.shaped = !@edje.data("shaped").nil?
+
+               ui_refresh_seeker(0)
+       end
+
+       def init_xmms
+               @xmms = Xmms::Client.new("Euphoria")
+               @xmms.connect(ENV["XMMS_PATH"] || @config.ipc_path)
+               @xmms.add_to_ecore_mainloop
+
+               @xmms.on_disconnect do
+                       puts "daemon exited, shutting down"
+                       Ecore.main_loop_quit
+               end
+       end
+
+       def setup_callbacks
+               @edje.on_signal("quit") do
+                       Ecore::main_loop_quit
+               end
+
+               @edje.on_signal("close") do
+                       Ecore::main_loop_quit
+               end
+
+               @edje.on_signal("playback.play") do
+                       case @playback_state
+                               when Xmms::Client::PLAY
+                                       @xmms.playback_stop.wait
+                                       sleep(0.5) # evil hack, fix xmms2d instead
+                                       @xmms.playback_start.wait
+                               else
+                                       @xmms.playback_start.wait
+                       end
+               end
+
+               @edje.on_signal("playback.stop") do
+                       @xmms.playback_stop.wait
+               end
+
+               @edje.on_signal("playback.pause") do
+                       case @playback_state
+                               when Xmms::Client::PLAY
+                                       @xmms.playback_pause.wait
+                               when Xmms::Client::PAUSE
+                                       @xmms.playback_start.wait
+                       end
+               end
+
+               @edje.on_signal("playback.next") do
+                       @xmms.playlist_set_next_rel(1).wait
+                       @xmms.playback_tickle.wait
+
+                       if @playback_state != Xmms::Client::PLAY
+                               @xmms.playback_start.wait
+                       end
+               end
+
+               @edje.on_signal("playback.prev") do
+                       @xmms.playlist_set_next_rel(-1).wait
+                       @xmms.playback_tickle.wait
+
+                       if @playback_state != Xmms::Client::PLAY
+                               @xmms.playback_start.wait
+                       end
+               end
+
+               @edje.on_signal("TOGGLE_TIME_DISPLAY_MODE") do
+                       @config.time_display_elapsed = !@config.time_display_elapsed
+               end
+
+               @edje.on_signal("DEBUG") do |sig, source|
+                       puts source
+               end
+
+               @edje.on_signal("playlist.open") { @playlist.show(@theme, true) }
+
+               @edje.on_signal("file_dialog.open") do
+                       show_file_dialog
+               end
+
+               @edje.on_signal("TOGGLE_REPEAT_MODE") do |sig, source|
+                       # don't react on our own emission
+                       next if source == "Euphoria"
+
+                       @repeat = !@repeat
+
+                       v = @repeat ? "1" : "0"
+                       @xmms.configval_set("playlist.repeat_all", v).wait
+               end
+
+               @xmms.broadcast_configval_changed.notifier do |res|
+                       k = res.value.keys.first
+                       v = res.value.values.first
+
+                       case k
+                               when "playlist.repeat_all"
+                                       tmp = (v == "1")
+                                       if tmp != @repeat
+                                               @repeat = tmp
+                                               @edje.emit_signal("TOGGLE_REPEAT_MODE", "Euphoria")
+                                       end
+                               when /equalizer\.gain(\d+)/
+                                       @sliders[k].value = v.to_f
+                       end
+               end
+
+               @xmms.broadcast_playback_volume_changed.notifier do |res|
+                       if @edje.data("has_volume_slider")
+                               @sliders["volume"].value = res.value
+                       end
+
+                       if @edje.part_exists?("vol_display_text")
+                               @volume_box.value = res.value
+                       end
+               end
+
+               @xmms.broadcast_playlist_current_pos.notifier do |res|
+                       handle_current_pos(res)
+               end
+       end
+
+       def handle_current_pos(res)
+               begin
+                       pos = res.value
+               rescue Xmms::Result::ValueError
+               else
+                       ui_fill_track_info(@playlist[pos])
+               end
+       end
+
+       def ui_fill_track_info(item)
+               unless item.nil?
+                       if item.channel.nil?
+                               msg = Edje::Message.new(0, item.artist, item.title, item.album)
+                       else
+                               msg = Edje::Message.new(0, "", item.title, "")
+                       end
+                       @edje.send_message(msg)
+               end
+       end
+
+       def ui_refresh_time(time)
+               return unless @edje.part_exists?("player.time")
+
+               fmt = "%i:%02i"
+
+               unless @config.time_display_elapsed
+                       time = @playlist.current_item.duration - time
+                       fmt = "-" + fmt
+               end
+
+               tmp = fmt % [time / 60, time % 60]
+               @edje.part("player.time").text = tmp
+       end
+
+       def ui_refresh_seeker(pos)
+               if @edje.part_exists?("seeker")
+                       @edje.part("seeker").set_drag_value(pos, 0.1)
+                       #@edje.thaw
+                       #@edje.evas.render
+               end
+       end
+
+       def signal_playback_state
+               sig = case @playback_state
+                       when Xmms::Client::PAUSE
+                               "PLAYBACK_STATE_PAUSED"
+                       when Xmms::Client::PLAY
+                               "PLAYBACK_STATE_PLAYING"
+                       else
+                               "PLAYBACK_STATE_STOPPED"
+               end
+
+               @edje.emit_signal(sig, "Euphoria")
+       end
+
+       def load_config
+               @config = nil
+
+               if File.exist?(@config_file)
+                       File.open(@config_file) { |fo| @config = YAML.load(fo) }
+               end
+
+               if @config.nil? || !@config.is_a?(Config)
+                       @config = Config.new
+                       @config.ipc_path = nil
+                       @config.theme = "winter"
+                       @config.time_display_elapsed = true
+               end
+       end
+
+       def find_theme(name)
+               dirs = [DATA_DIR_PRIV, DATA_DIR]
+               dirs.each do |dir|
+                       tmp = File.join(dir, "themes/#{name}.edj")
+                       return tmp if File.exist?(tmp)
+               end
+
+               nil
+       end
+end
+
+$x = Euphoria.instance
+Euphoria.instance.show
+Ecore::main_loop_begin
+Euphoria.instance.save_config
diff --git a/data/fonts/Vera.ttf b/data/fonts/Vera.ttf
new file mode 100644 (file)
index 0000000..58cd6b5
Binary files /dev/null and b/data/fonts/Vera.ttf differ
diff --git a/data/fonts/micro.ttf b/data/fonts/micro.ttf
new file mode 100644 (file)
index 0000000..a94ae16
Binary files /dev/null and b/data/fonts/micro.ttf differ
diff --git a/data/fonts/redensek.ttf b/data/fonts/redensek.ttf
new file mode 100644 (file)
index 0000000..a616653
Binary files /dev/null and b/data/fonts/redensek.ttf differ
diff --git a/data/themes/common.inc b/data/themes/common.inc
new file mode 100644 (file)
index 0000000..1a07e8f
--- /dev/null
@@ -0,0 +1,6 @@
+#if defined __COMMON_INC
+#endinput
+#endif
+#define __COMMON_INC
+
+#define MSG_ID_SET_SONGNAME 0
diff --git a/data/themes/default/default.edc b/data/themes/default/default.edc
new file mode 100644 (file)
index 0000000..23df4b9
--- /dev/null
@@ -0,0 +1,50 @@
+/*****************************************************************/
+/* Euphoria Default Theme - by: Ben Rockwood                     */
+/* Design to pay homage to the awsome interface design           */
+/*    of the Native Instruments tools, namely Traktor            */
+/*****************************************************************/
+
+images {
+       #include "default_images.edc"
+}
+
+collections {
+        group {
+                min, 300 60;
+                max, 300 60;
+                name, "euphoria_small";
+
+               parts {
+                       #include "default_small_parts.edc"
+               }
+               programs {
+                       #include "default_small_progs.edc"
+               }
+       }
+
+       group {
+               min, 200 320;
+                max, 200 1280;
+                name, "euphoria";
+                parts {
+                       #include "default_parts.edc"
+               }
+                programs {
+                        #include "default_progs.edc"
+                }
+        }
+
+        group {
+                name, "playlist_item";
+                min, 200 12;
+                max, 200 12;
+
+                parts {
+                       #include "default_playlist_parts.edc"
+               }
+               programs {
+                       #include "default_playlist_progs.edc"
+               }
+       }
+}
+
diff --git a/data/themes/default/default_images.edc b/data/themes/default/default_images.edc
new file mode 100644 (file)
index 0000000..3d9bd61
--- /dev/null
@@ -0,0 +1,57 @@
+/** Image Spec List:
+background-dark-green.png:    PNG image data, 32 x 32, 8-bit/color RGBA, non-interlaced
+background-green.png:         PNG image data, 30 x 30, 8-bit/color RGB, non-interlaced
+border-scale.png:             PNG image data, 28 x 28, 8-bit/color RGBA, non-interlaced
+button-3stage-fulldown.png:   PNG image data, 56 x 40, 8-bit/color RGBA, non-interlaced
+button-3stage-selected.png:   PNG image data, 56 x 40, 8-bit/color RGBA, non-interlaced
+button-3stage-unselected.png: PNG image data, 56 x 40, 8-bit/color RGBA, non-interlaced
+button-full-blinking.png:     PNG image data, 56 x 40, 8-bit/color RGBA, non-interlaced
+button-full-clicked.png:      PNG image data, 56 x 40, 8-bit/color RGBA, non-interlaced
+button-full-normal.png:       PNG image data, 56 x 40, 8-bit/color RGBA, non-interlaced
+button-full-unblinking.png:   PNG image data, 56 x 40, 8-bit/color RGBA, non-interlaced
+button-off.png:               PNG image data, 57 x 20, 8-bit/color RGB, non-interlaced
+button-on.png:                PNG image data, 57 x 20, 8-bit/color RGB, non-interlaced
+button-small-clicked.png:     PNG image data, 28 x 20, 8-bit/color RGBA, non-interlaced
+button-small-normal.png:      PNG image data, 28 x 20, 8-bit/color RGBA, non-interlaced
+close_button.png:             PNG image data, 8 x 8, 8-bit/color RGBA, non-interlaced
+controls-back.png:            PNG image data, 37 x 19, 8-bit/color RGBA, non-interlaced
+function-button-clicked.png:  PNG image data, 54 x 20, 8-bit/color RGB, non-interlaced
+function-button-normal.png:   PNG image data, 54 x 20, 8-bit/color RGB, non-interlaced
+lcd_area.png:                 PNG image data, 14 x 13, 8-bit/color RGB, non-interlaced
+minimize.png:                 PNG image data, 7 x 2, 8-bit/color RGBA, non-interlaced
+set-button-normal.png:        PNG image data, 58 x 43, 8-bit/color RGB, non-interlaced
+small-text-button.png:        PNG image data, 34 x 20, 8-bit/color RGBA, non-interlaced
+vol-display.png:              PNG image data, 23 x 20, 8-bit/color RGBA, non-interlaced
+vol-label.png:                PNG image data, 21 x 20, 8-bit/color RGBA, non-interlaced
+vol-minus-clicked.png:        PNG image data, 29 x 20, 8-bit/color RGBA, non-interlaced
+vol-minus.png:                PNG image data, 29 x 20, 8-bit/color RGBA, non-interlaced
+vol-plus-clicked.png:         PNG image data, 25 x 20, 8-bit/color RGBA, non-interlaced
+vol-plus.png:                 PNG image data, 25 x 20, 8-bit/color RGBA, non-interlaced
+                                                                                       **/
+
+        image, "border-scale.png" RAW;
+        image, "button-full-clicked.png" RAW;
+        image, "button-full-normal.png" RAW;
+        image, "lcd_area.png" RAW;
+        image, "background-dark-green.png" RAW;
+        image, "controls-back.png" RAW;
+        image, "button-3stage-fulldown.png"     RAW;
+        image, "button-3stage-selected.png"     RAW;
+        image, "button-3stage-unselected.png"   RAW;
+        image, "button-full-blinking.png" RAW;
+        image, "button-full-unblinking.png" RAW;
+        image, "vol-display.png" RAW;
+        image, "vol-label.png" RAW;
+        image, "vol-minus.png" RAW;
+        image, "vol-plus.png" RAW;
+        image, "vol-minus-clicked.png" RAW;
+        image, "vol-plus-clicked.png" RAW;
+        image, "small-text-button.png" RAW;
+        image, "button-small-normal.png" RAW;
+        image, "button-small-clicked.png" RAW;
+        image, "button-on.png" RAW;
+        image, "button-off.png" RAW;
+        image, "close_button.png" RAW;
+        image, "minimize.png" RAW;
+        image, "function-button-clicked.png" RAW;
+        image, "function-button-normal.png" RAW;
diff --git a/data/themes/default/default_parts.edc b/data/themes/default/default_parts.edc
new file mode 100644 (file)
index 0000000..eea2069
--- /dev/null
@@ -0,0 +1,1491 @@
+/*** Euphoria Default theme - by Ben Rockwood ***/
+/***   E D J E    P A R T S                   ***/
+
+                       part {
+                                name, "background";
+                                mouse_events, 0;
+                                type,   IMAGE;
+                                description {
+                                        state,  "default" 0.0;
+
+                                        rel1 {
+                                                relative, 0.0 0.0;
+                                                offset, 0 0;
+                                        }
+                                        rel2 {
+                                                relative, 1.0 1.0;
+                                                offset, -1 -1;
+                                        }
+                                        image {
+                                                normal, "border-scale.png";
+                                                border, 6 6 6 6;
+                                        }
+
+                                        fill {
+                                                smooth, 0;
+                                        }
+                                }
+                        }
+
+                        part {
+                                name, "title";
+                                type,   TEXT;
+                                //effect, SHADOW;
+                                mouse_events, 1;
+                               repeat_events, 1;
+                                description {
+                                        state,  "default" 0.0;
+
+                                        rel1 {
+                                                relative, 0.0 0.0;
+                                                offset, 0 4;
+                                        }
+                                        rel2 {
+                                                relative, 1.0 0.0;
+                                                offset, -1 15;
+                                        }
+                                        color,  255 255 255 255;
+                                        text {
+                                                text, "Euphoria";
+                                                font, "Vera";   /* Only font Vera works!  Use other and segv */
+                                                size, 8;       /* Font Size */
+                                                align,   0.5 1.0;       /* Text alignment based on rel1/rel2 */
+                                        }
+                                }
+                        }
+
+                        part {
+                                name, "titlebar";
+                                type, RECT;
+                                mouse_events, 1;
+                               repeat_events, 1;
+
+                                description {
+                                        state, "default" 0.0;
+
+                                        rel1 {
+                                                relative, 0.0 0.0;
+                                                offset, 0 0;
+                                        }
+
+                                        rel2 {
+                                                relative, 1.0 0.0;
+                                                offset, -1 16;
+                                        }
+
+                                        color, 0 0 0 0;
+                                }
+
+                        }
+
+                        part {
+                                name, "quit";
+                                type, IMAGE;
+                                mouse_events, 1;
+                                description {
+                                        state,  "default" 0.0;
+
+                                        rel1 {
+                                                relative, 1.0 0.0;
+                                                offset, -15 4;
+                                        }
+
+                                        rel2 {
+                                                relative, 1.0 0.0;
+                                                offset, -8 11;
+                                        }
+
+                                        image {
+                                                normal, "close_button.png";
+                                        }
+
+                                        fill {
+                                                smooth, 0;
+                                        }
+                                }
+                        }
+
+
+                        /* LCD Backdrop Image */
+                        part {
+                                name, "lcd_backdrop";
+                                type, IMAGE;
+                                mouse_events, 0;
+                                description {
+                                        state,  "default" 0.0;
+
+                                        /* Part should fill from the far left, 20 pixels down */
+                                        rel1 {
+                                                relative, 0.0 0.0;
+                                                offset, 5 16;
+                                        }
+
+                                        /* all the way to the far right, 40 pixels north of the bottom right corner */
+                                        rel2 {
+                                                relative, 1.0 0.0;
+                                                offset, -6 81;
+                                        }
+
+                                        image {
+                                                normal, "lcd_area.png";
+                                                border, 5 5 5 5;
+                                        }
+
+                                        fill {
+                                                smooth, 0;
+                                        }
+                                }
+                        }
+
+                        /* LCD Clipping Area - Invisible Rect */
+                        part {
+                                name, "lcd_clip";
+                                type, RECT;
+                                mouse_events, 0;
+                                description {
+                                        state,  "default" 0.0;
+
+                                        rel1 {
+                                                relative, 0.0 0.0;
+                                                offset, 5 5;
+                                                to, "lcd_backdrop";
+                                        }
+
+                                        rel2 {
+                                                relative, 1.0 1.0;
+                                                offset, -5 -5;
+                                                to, "lcd_backdrop";
+                                        }
+                                        //color, 0 0 0 0;
+
+                                }
+                        }
+                        part {
+                                name, "artist_name";
+                                type,   TEXT;
+                                //effect, SOFT_OUTLINE;
+                                mouse_events, 0;
+                                clip_to, "lcd_clip";
+                                description {
+                                        state,  "default" 0.0;
+
+                                        /* Use the relative size of the LCD itself, then position with align */
+                                        rel1 {
+                                                relative, 0.0 0.0;
+                                                offset, 8 0;
+                                                to, "lcd_backdrop";
+                                        }
+
+                                        rel2 {
+                                                relative, 1.0 1.0;
+                                                offset, -1 -1;
+                                                to, "lcd_backdrop";
+                                        }
+
+
+                                        color,  181 247 255 255;
+                                        text {
+                                                text, "Artist Name";       /* Text String */
+                                                font, "redensek";   /* Only font Vera works!  Use other and segv */
+                                                size, 12;       /* Font Size */
+                                                align, 0.0 0.1;       /* Text alignment based on rel1/rel2 */
+                                        }
+                                }
+                        }
+
+                        part {
+                                name, "album_name";
+                                type,   TEXT;
+                                //effect, SOFT_OUTLINE;
+                                mouse_events, 0;
+                                clip_to, "lcd_clip";
+                                description {
+                                        state,  "default" 0.0;
+
+                                        /* Use the relative size of the LCD itself, then position with align */
+                                        rel1 {
+                                                relative, 0.0 0.0;
+                                                offset, 8 0;
+                                                to, "lcd_backdrop";
+                                        }
+
+                                        rel2 {
+                                                relative, 1.0 1.0;
+                                                offset, -1 -1;
+                                                to, "lcd_backdrop";
+                                        }
+
+
+                                        color,  181 247 255 255;
+                                        text {
+                                                text, "Album Name";       /* Text String */
+                                                font, "redensek";   /* Only font Vera works!  Use other and segv */
+                                                size, 12;       /* Font Size */
+                                                align, 0.0 0.3;       /* Text alignment based on rel1/rel2 */
+                                        }
+                                }
+                        }
+                        part {
+                                name, "song_name";
+                                type,   TEXT;
+                                //effect, SOFT_OUTLINE;
+                                mouse_events, 0;
+                                clip_to, "lcd_clip";
+                                description {
+                                        state,  "default" 0.0;
+
+                                        /* Use the relative size of the LCD itself, then position with align */
+                                        rel1 {
+                                                relative, 0.0 0.0;
+                                                offset, 8 0;
+                                                to, "lcd_backdrop";
+                                        }
+
+                                        rel2 {
+                                                relative, 1.0 1.0;
+                                                offset, -1 -1;
+                                                to, "lcd_backdrop";
+                                        }
+
+
+                                        color,  181 247 255 255;
+                                        text {
+                                                text, "Song Name";       /* Text String */
+                                                font, "redensek";   /* Only font Vera works!  Use other and segv */
+                                                size, 12;       /* Font Size */
+                                                align, 0.0 0.5;       /* Text alignment based on rel1/rel2 */
+                                        }
+                                }
+                        }
+
+                        /* Time Counter  */
+                        part {
+                                name, "time_text";
+                                type,   TEXT;
+                                //effect, OUTLINE_SOFT_SHADOW;
+                                clip_to, "lcd_clip";
+                                mouse_events, 1;
+                                description {
+                                        state,  "default" 0.0;
+
+                                        /* Use the relative size of the LCD itself, then position with align */
+                                        rel1 {
+                                                relative, 0.0 0.0;
+                                                offset, 0 0;
+                                                to, "lcd_backdrop";
+                                        }
+
+                                        rel2 {
+                                                relative, 1.0 1.0;
+                                                offset, -9 -1;
+                                                to, "lcd_backdrop";
+                                        }
+
+
+                                        color,  181 247 255 255;
+                                        text {
+                                                text, "0:00";       /* Text String */
+                                                font, "micro";   /* Only font Vera works!  Use other and segv */
+                                                size, 26;       /* Font Size */
+                                                align, 1.0 1.0;       /* Text alignment based on rel1/rel2 */
+                                        }
+                                }
+                        }
+
+
+                        /************* Buttons *******************************/
+                        /* Button Area */
+                        part {
+                                name, "button_background";
+                                type, IMAGE;
+                                mouse_events, 0;
+                                description {
+                                        state,  "default" 0.0;
+
+                                        rel1 {
+                                                relative, 0.0 1.0;
+                                                offset, 1 5;
+                                                to, "lcd_backdrop";
+                                        }
+
+                                        rel2 {
+                                                relative, 1.0 1.0;
+                                                offset, 0 100;
+                                                to, "lcd_backdrop";
+                                        }
+
+                                        image {
+                                                normal, "controls-back.png";
+                                                border, 5 5 5 5;
+                                        }
+
+
+                                        fill {
+                                                smooth, 0;
+                                        }
+                                }
+                        }
+
+
+                        /* Previous Button */
+                        part {
+                                name, "previous_button";
+                                mouse_events, 1;
+                                description {
+                                        state,  "default" 0.0;
+                                        min, 56 40;
+                                        max, 56 40;
+
+                                        rel1 {
+                                                relative, 0.0 0.0;
+                                                offset, 5 5;
+                                                to, "button_background";
+                                        }
+                                        rel2 {
+                                                relative, 0.0 0.0;
+                                                offset, 61 45;
+                                                to, "button_background";
+                                        }
+                                        image {
+                                                normal, "button-full-normal.png";
+                                        }
+                                }
+
+                                description {
+                                        state,  "clicked" 0.0;
+                                        min, 56 40;
+                                        max, 56 40;
+
+                                        rel1 {
+                                                relative, 0.0 0.0;
+                                                offset, 5 5;
+                                                to, "button_background";
+                                        }
+                                        rel2 {
+                                                relative, 0.0 0.0;
+                                                offset, 61 45;
+                                                to, "button_background";
+                                        }
+
+                                        image {
+                                                normal, "button-full-clicked.png";
+                                        }
+                                }
+
+                        }
+                        /* Play Button */
+                        part {
+                                name, "play_button";
+                                mouse_events, 1;
+                                description {
+                                        state,  "default" 0.0;
+                                        min, 56 40;
+                                        max, 56 40;
+                                        align, 0.5 0.0;
+
+                                        rel1 {
+                                                relative, 1.0 0.0;
+                                                offset, 0 0;
+                                                to, "previous_button";
+                                        }
+                                        rel2 {
+                                                relative, 0.0 1.0;
+                                                offset, -0 -0;
+                                                to, "next_button";
+                                        }
+                                        image {
+                                                normal, "button-full-normal.png";
+                                        }
+                                }
+                                description {
+                                        state,  "clicked" 0.0;
+                                        min, 56 40;
+                                        max, 56 40;
+                                        align, 0.5 0.0;
+
+                                        rel1 {
+                                                relative, 1.0 0.0;
+                                                offset, 0 0;
+                                                to, "previous_button";
+                                        }
+                                        rel2 {
+                                                relative, 0.0 1.0;
+                                                offset, -0 -0;
+                                                to, "next_button";
+                                        }
+
+                                        image {
+                                                normal, "button-full-clicked.png";
+                                        }
+                                }
+                                description {
+                                        state,  "blink" 0.0;
+                                        min, 56 40;
+                                        max, 56 40;
+                                        align, 0.5 0.0;
+
+                                        rel1 {
+                                                relative, 1.0 0.0;
+                                                offset, 0 0;
+                                                to, "previous_button";
+                                        }
+                                        rel2 {
+                                                relative, 0.0 1.0;
+                                                offset, -0 -0;
+                                                to, "next_button";
+                                        }
+
+                                        image {
+                                                normal, "button-full-blinking.png";
+                                                tween,  "button-full-unblinking.png";
+                                        }
+                                }
+
+                        }
+
+                        /* Next Button */
+                        part {
+                                name, "next_button";
+                                mouse_events, 1;
+                                description {
+                                        state,  "default" 0.0;
+                                        min, 56 40;
+                                        max, 56 40;
+
+                                        rel1 {
+                                                relative, 1.0 0.0;
+                                                offset, -61 5;
+                                                to, "button_background";
+                                        }
+                                        rel2 {
+                                                relative, 1.0 0.0;
+                                                offset, -5 45;
+                                                to, "button_background";
+                                        }
+                                        image {
+                                                normal, "button-full-normal.png";
+                                        }
+                                }
+                                description {
+                                        state,  "clicked" 0.0;
+                                        min, 56 40;
+                                        max, 56 40;
+
+                                        rel1 {
+                                                relative, 1.0 0.0;
+                                                offset, -61 5;
+                                                to, "button_background";
+                                        }
+                                        rel2 {
+                                                relative, 1.0 0.0;
+                                                offset, -5 45;
+                                                to, "button_background";
+                                        }
+                                        image {
+                                                normal, "button-full-clicked.png";
+                                        }
+                                }
+                        }
+
+                        /* Seekback Button */
+                        part {
+                                name, "seekback_button";
+                                mouse_events, 1;
+                                description {
+                                        state,  "default" 0.0;
+                                        min, 56 40;
+                                        max, 56 40;
+                                        visible, 1;
+
+                                        rel1 {
+                                                relative, 0.0 0.0;
+                                                offset, 5 50;
+                                                to, "button_background";
+                                        }
+                                        rel2 {
+                                                relative, 0.0 0.0;
+                                                offset, 61 90;
+                                                to, "button_background";
+                                        }
+
+                                        image {
+                                                normal, "button-full-normal.png";
+                                        }
+                                }
+                                description {
+                                        state,  "clicked" 0.0;
+                                        min, 56 40;
+                                        max, 56 40;
+                                        visible, 1;
+
+                                        rel1 {
+                                                relative, 0.0 0.0;
+                                                offset, 5 50;
+                                                to, "button_background";
+                                        }
+                                        rel2 {
+                                                relative, 0.0 0.0;
+                                                offset, 61 90;
+                                                to, "button_background";
+                                        }
+
+                                        image {
+                                                normal, "button-full-clicked.png";
+                                        }
+                                }
+                        }
+
+                        /* Pause Button */
+                        part {
+                                name, "pause_button";
+                                mouse_events, 1;
+                                description {
+                                        state,  "default" 0.0;
+                                        min, 56 40;
+                                        max, 56 40;
+                                        visible, 1;
+
+                                        rel1 {
+                                                relative, 1.0 0.0;
+                                                offset, 0 0;
+                                                to, "seekback_button";
+                                        }
+                                        rel2 {
+                                                relative, 0.0 1.0;
+                                                offset, -0 -0;
+                                                to, "seekforward_button";
+                                        }
+
+                                        image {
+                                                normal, "button-3stage-unselected.png";
+                                                tween,  "button-3stage-fulldown.png";
+                                        }
+                                }
+                                description {
+                                        state,  "clicked" 0.0;
+                                        min, 56 40;
+                                        max, 56 40;
+                                        visible, 1;
+
+                                        rel1 {
+                                                relative, 1.0 0.0;
+                                                offset, 0 0;
+                                                to, "seekback_button";
+                                        }
+                                        rel2 {
+                                                relative, 0.0 1.0;
+                                                offset, -0 -0;
+                                                to, "seekforward_button";
+                                        }
+
+                                        image {
+                                                normal, "button-3stage-selected.png";
+                                                tween, "button-3stage-fulldown.png";
+                                        }
+                                }
+                                description {
+                                        state,  "blink" 0.0;
+                                        min, 56 40;
+                                        max, 56 40;
+                                        visible, 1;
+
+                                        rel1 {
+                                                relative, 1.0 0.0;
+                                                offset, 0 0;
+                                                to, "seekback_button";
+                                        }
+                                        rel2 {
+                                                relative, 0.0 1.0;
+                                                offset, -0 -0;
+                                                to, "seekforward_button";
+                                        }
+
+                                        image {
+                                                normal, "button-full-blinking.png";
+                                                tween,  "button-full-unblinking.png";
+                                        }
+                                }
+                        }
+                        /* Seekforward Button */
+                        part {
+                                name, "seekforward_button";
+                                mouse_events, 1;
+                                description {
+                                        state,  "default" 0.0;
+                                        min, 56 40;
+                                        max, 56 40;
+                                        visible, 1;
+
+                                        rel1 {
+                                                relative, 1.0 0.0;
+                                                offset, -61 50;
+                                                to, "button_background";
+                                        }
+                                        rel2 {
+                                                relative, 1.0 0.0;
+                                                offset, -5 90;
+                                                to, "button_background";
+                                        }
+
+                                        image {
+                                                normal, "button-full-normal.png";
+                                        }
+                                }
+                                description {
+                                        state,  "clicked" 0.0;
+                                        min, 56 40;
+                                        max, 56 40;
+                                        visible, 1;
+
+                                        rel1 {
+                                                relative, 1.0 0.0;
+                                                offset, -61 50;
+                                                to, "button_background";
+                                        }
+                                        rel2 {
+                                                relative, 1.0 0.0;
+                                                offset, -5 90;
+                                                to, "button_background";
+                                        }
+
+                                        image {
+                                                normal, "button-full-clicked.png";
+                                        }
+                                }
+                        }
+
+                        /***************** BUTTON TEXT ELEMENTS *******************************/
+                        part {
+                                name, "previous_text";
+                                type, TEXT;
+                                //effect, SOFT_SHADOW;
+                                mouse_events, 0;                /* Does part accept mouse events? */
+                                //                      clip_to, "previous_button";     /* Clip anything outside of the specified object */
+                                description {
+                                        state, "default" 0.0;
+
+                                        rel1 {
+                                                relative, 0.0 0.0;
+                                                offset, 0 0;
+                                                to, "previous_button";
+                                        }
+                                        rel2 {
+                                                relative, 1.0 1.0;
+                                                offset, -1 -1;
+                                                to, "previous_button";
+                                        }
+
+
+                                        color, 255 255 255 255;  /* Color of text */
+                                        color2, 0 0 255 255;    /* Does nothing for SOFT_SHADOW */
+                                        color3, 0 0 0 32;        /* Color of shadow */
+
+                                        text {
+                                                text, "Previous";       /* Text String */
+                                                font, "Vera";   /* Only font Vera works!  Use other and segv */
+                                                size, 6;        /* Font Size */
+                                                align,   0.5 0.5;       /* Text alignment based on rel1/rel2 */
+                                        }
+                                }
+                        }
+
+                        part {
+                                name, "play_text";
+                                type, TEXT;
+                                //effect, SOFT_SHADOW;
+                                mouse_events, 0;                /* Does part accept mouse events? */
+                                //                      clip_to, "play_button";     /* Clip anything outside of the specified object */
+                                description {
+                                        state, "default" 0.0;
+
+                                        rel1 {
+                                                relative, 0.0 0.0;
+                                                offset, 0 0;
+                                                to, "play_button";
+                                        }
+                                        rel2 {
+                                                relative, 1.0 1.0;
+                                                offset, -1 -1;
+                                                to, "play_button";
+                                        }
+
+
+                                        color, 255 255 255 255;  /* Color of text */
+                                        color2, 0 0 255 255;    /* Does nothing for SOFT_SHADOW */
+                                        color3, 0 0 0 32;      /* Color of shadow */
+
+                                        text {
+                                                text, "Play";       /* Text String */
+                                                font, "Vera";   /* Only font Vera works!  Use other and segv */
+                                                size, 6;       /* Font Size */
+                                                align,   0.5 0.5;       /* Text alignment based on rel1/rel2 */
+                                        }
+                                }
+                        }
+
+                        part {
+                                name, "next_text";
+                                type, TEXT;
+                                //effect, SOFT_SHADOW;
+                                mouse_events, 0;                /* Does part accept mouse events? */
+                                //                      clip_to, "next_button";     /* Clip anything outside of the specified object */
+                                description {
+                                        state, "default" 0.0;
+
+                                        rel1 {
+                                                relative, 0.0 0.0;
+                                                offset, 0 0;
+                                                to, "next_button";
+                                        }
+                                        rel2 {
+                                                relative, 1.0 1.0;
+                                                offset, -1 -1;
+                                                to, "next_button";
+                                        }
+
+
+                                        color, 255 255 255 255;  /* Color of text */
+                                        color2, 0 0 255 255;    /* Does nothing for SOFT_SHADOW */
+                                        color3, 0 0 0 32;      /* Color of shadow */
+
+                                        text {
+                                                text, "Next";       /* Text String */
+                                                font, "Vera";   /* Only font Vera works!  Use other and segv */
+                                                size, 6;       /* Font Size */
+                                                align,   0.5 0.5;       /* Text alignment based on rel1/rel2 */
+                                        }
+                                }
+                        }
+
+                        part {
+                                name, "seekback_text";
+                                type, TEXT;
+                                //effect, SOFT_SHADOW;
+                                mouse_events, 0;                /* Does part accept mouse events? */
+                                //                      clip_to, "seekback_button";     /* Clip anything outside of the specified object */
+                                description {
+                                        state, "default" 0.0;
+
+                                        rel1 {
+                                                relative, 0.0 0.0;
+                                                offset, 0 0;
+                                                to, "seekback_button";
+                                        }
+                                        rel2 {
+                                                relative, 1.0 1.0;
+                                                offset, -1 -1;
+                                                to, "seekback_button";
+                                        }
+
+
+                                        color, 255 255 255 255;  /* Color of text */
+                                        color2, 0 0 255 255;    /* Does nothing for SOFT_SHADOW */
+                                        color3, 0 0 0 32;      /* Color of shadow */
+
+                                        text {
+                                                text, "<<";       /* Text String */
+                                                font, "Vera";   /* Only font Vera works!  Use other and segv */
+                                                size, 6;       /* Font Size */
+                                                align,   0.5 0.5;       /* Text alignment based on rel1/rel2 */
+                                        }
+                                }
+                        }
+
+                        part {
+                                name, "pause_text";
+                                type, TEXT;
+                                //effect, SOFT_SHADOW;
+                                mouse_events, 0;                /* Does part accept mouse events? */
+                                //                      clip_to, "pause_button";     /* Clip anything outside of the specified object */
+                                description {
+                                        state, "default" 0.0;
+
+                                        rel1 {
+                                                relative, 0.0 0.0;
+                                                offset, 0 0;
+                                                to, "pause_button";
+                                        }
+                                        rel2 {
+                                                relative, 1.0 1.0;
+                                                offset, -1 -1;
+                                                to, "pause_button";
+                                        }
+
+
+                                        color, 255 255 255 255;  /* Color of text */
+                                        color2, 0 0 255 255;    /* Does nothing for SOFT_SHADOW */
+                                        color3, 0 0 0 32;      /* Color of shadow */
+
+                                        text {
+                                                text, "Pause";       /* Text String */
+                                                font, "Vera";   /* Only font Vera works!  Use other and segv */
+                                                size, 6;       /* Font Size */
+                                                align,   0.5 0.5;       /* Text alignment based on rel1/rel2 */
+                                        }
+                                }
+                        }
+
+                        part {
+                                name, "seekforward_text";
+                                type, TEXT;
+                                //effect, SOFT_SHADOW;
+                                mouse_events, 0;                /* Does part accept mouse events? */
+                                //                      clip_to, "seekforward_button";     /* Clip anything outside of the specified object */
+                                description {
+                                        state, "default" 0.0;
+
+                                        rel1 {
+                                                relative, 0.0 0.0;
+                                                offset, 0 0;
+                                                to, "seekforward_button";
+                                        }
+                                        rel2 {
+                                                relative, 1.0 1.0;
+                                                offset, -1 -1;
+                                                to, "seekforward_button";
+                                        }
+
+
+                                        color, 255 255 255 255;  /* Color of text */
+                                        color2, 0 0 255 255;    /* Does nothing for SOFT_SHADOW */
+                                        color3, 0 0 0 32;      /* Color of shadow */
+
+                                        text {
+                                                text, ">>";       /* Text String */
+                                                font, "Vera";   /* Only font Vera works!  Use other and segv */
+                                                size, 6;       /* Font Size */
+                                                align,   0.5 0.5;       /* Text alignment based on rel1/rel2 */
+                                        }
+                                }
+                        }
+
+                        part {
+                                name, "repeat_toggle_disabled_img";
+                                type, IMAGE;
+                                mouse_events, 1;
+
+                                description {
+                                        state, "default" 0.0;
+                                        visible, 1;
+                                        min, 57 20;
+                                        max, 57 20;
+
+                                        rel1 {
+                                                relative, 0.0 1.0;
+                                                offset, 25 28;
+                                                to, "button_background";
+                                        }
+
+                                        rel2 {
+                                                relative, 0.25 1.0;
+                                                offset, 0 0;
+                                                to, "button_background";
+                                        }
+
+                                        image {
+                                                normal, "button-off.png";
+                                        }
+                                }
+
+                                description {
+                                        state, "disabled" 0.0;
+                                       inherit, "default" 0.0;
+                                        visible, 0;
+                                }
+                        }
+
+                        part {
+                                name, "repeat_toggle_enabled_img";
+
+                                description {
+                                        state, "default" 0.0;
+                                        min, 57 20;
+                                        max, 57 20;
+                                        visible, 0;
+
+                                        rel1 {
+                                                relative, 0.0 1.0;
+                                                offset, 25 28;
+                                                to, "button_background";
+                                        }
+
+                                        rel2 {
+                                                relative, 0.25 1.0;
+                                                offset, 0 0;
+                                                to, "button_background";
+                                        }
+
+                                        image {
+                                                normal, "button-on.png";
+                                        }
+                                }
+
+                                description {
+                                        state, "enabled" 0.0;
+                                       inherit: "default" 0.0;
+                                        visible, 1;
+                                }
+                        }
+                        part {
+                                name, "repeat_toggle_label";
+                                type, TEXT;
+                                mouse_events, 0;
+
+                                description {
+                                        state, "default" 0.0;
+
+                                        rel1 {
+                                                relative, 0.0 0.0;
+                                                offset, 0 0;
+                                                to, "repeat_toggle_disabled_img";
+                                        }
+
+                                        rel2 {
+                                                relative, 1.0 1.0;
+                                                offset, -1 -1;
+                                                to, "repeat_toggle_disabled_img";
+                                        }
+
+                                        color, 0 0 0 255;
+
+                                        text {
+                                                text, "REPEAT";
+                                                font, "Vera";
+                                                size, 5;
+                                                align, 0.5 0.6;
+                                        }
+                                }
+                        }
+
+                        /********** Volume  Controls ***************************************/
+                        part {
+                                name, "vol_label";
+                                mouse_events, 0;
+                                description {
+                                        state,  "default" 0.0;
+                                        min, 21 20;
+                                        max, 21 20;
+
+                                        rel1 {
+                                                relative, 1.0 1.0;
+                                                offset, -21 4;
+                                                to, "button_background";
+                                        }
+                                        rel2 {
+                                                relative, 1.0 1.0;
+                                                offset, 0 24;
+                                                to, "button_background";
+                                        }
+
+                                        image {
+                                                normal, "vol-label.png";
+                                        }
+                                }
+                        }
+
+                        part {
+                                name, "vol_label_text";
+                                type, TEXT;
+                                mouse_events, 0;                /* Does part accept mouse events? */
+                                description {
+                                        state, "default" 0.0;
+
+                                        rel1 {
+                                                relative, 0.0 0.0;
+                                                offset, 0 0;
+                                                to, "vol_label";
+                                        }
+                                        rel2 {
+                                                relative, 1.0 1.0;
+                                                offset, -1 -1;
+                                                to, "vol_label";
+                                        }
+
+
+                                        color, 255 255 255 255;  /* Color of text */
+                                        color2, 0 0 255 255;    /* Does nothing for SOFT_SHADOW */
+                                        color3, 0 0 0 32;        /* Color of shadow */
+
+                                        text {
+                                                text, "VOL";       /* Text String */
+                                                font, "Vera";   /* Only font Vera works!  Use other and segv */
+                                                size, 5;        /* Font Size */
+                                                align,   0.5 0.6;       /* Text alignment based on rel1/rel2 */
+                                        }
+                                }
+                        }
+
+                        part {
+                                name, "vol_display";
+                                mouse_events, 0;
+                                description {
+                                        state,  "default" 0.0;
+                                        min, 23 20;
+                                        max, 23 20;
+
+                                        rel1 {
+                                                relative, 0.0 0.0;
+                                                offset, -23 0;
+                                                to, "vol_label";
+                                        }
+                                        rel2 {
+                                                relative, 0.0 1.0;
+                                                offset, 0 0;
+                                                to, "vol_label";
+                                        }
+
+                                        image {
+                                                normal, "vol-display.png";
+                                        }
+                                }
+                        }
+
+                        part {
+                                name, "vol_display_text";
+                                type,   TEXT;
+                                //clip_to, "vol_display";
+                                description {
+                                        state,  "default" 0.0;
+
+                                        /* Use the relative size of the LCD itself, then position with align */
+                                        rel1 {
+                                                relative, 0.0 0.0;
+                                                offset, 0 0;
+                                                to, "vol_display";
+                                        }
+
+                                        rel2 {
+                                                relative, 1.0 1.0;
+                                                offset, -1 -1;
+                                                to, "vol_display";
+                                        }
+
+
+                                        color,  181 247 255 255;
+                                        text {
+                                                text, "00";       /* Text String */
+                                                font, "Vera";   /* Only font Vera works!  Use other and segv */
+                                                size, 8;       /* Font Size */
+                                                align, 0.5 0.6;       /* Text alignment based on rel1/rel2 */
+                                        }
+                                }
+                        }
+
+                        part {
+                                name, "vol_incr_button";
+                                mouse_events, 1;
+                                description {
+                                        state,  "default" 0.0;
+                                        min, 25 20;
+                                        max, 25 20;
+
+                                        rel1 {
+                                                relative, 0.0 0.0;
+                                                offset, -25 0;
+                                                to, "vol_display";
+                                        }
+                                        rel2 {
+                                                relative, 0.0 1.0;
+                                                offset, 0 0;
+                                                to, "vol_display";
+                                        }
+
+                                        image {
+                                                normal, "vol-plus.png";
+                                        }
+                                }
+                                description {
+                                        state,  "clicked" 0.0;
+                                        min, 25 20;
+                                        max, 25 20;
+
+                                        rel1 {
+                                                relative, 0.0 0.0;
+                                                offset, -25 0;
+                                                to, "vol_display";
+                                        }
+                                        rel2 {
+                                                relative, 0.0 1.0;
+                                                offset, 0 0;
+                                                to, "vol_display";
+                                        }
+
+                                        image {
+                                                normal, "vol-plus-clicked.png";
+                                        }
+                                }
+                        }
+
+                        part {
+                                name, "vol_decr_button";
+                                mouse_events, 1;
+                                description {
+                                        state,  "default" 0.0;
+                                        min, 29 20;
+                                        max, 29 20;
+
+                                        rel1 {
+                                                relative, 0.0 0.0;
+                                                offset, -29 0;
+                                                to, "vol_incr_button";
+                                        }
+                                        rel2 {
+                                                relative, 0.0 1.0;
+                                                offset, 0 0;
+                                                to, "vol_incr_button";
+                                        }
+
+                                        image {
+                                                normal, "vol-minus.png";
+                                        }
+                                }
+                                description {
+                                        state,  "clicked" 0.0;
+                                        min, 29 20;
+                                        max, 29 20;
+
+                                        rel1 {
+                                                relative, 0.0 0.0;
+                                                offset, -29 0;
+                                                to, "vol_incr_button";
+                                        }
+                                        rel2 {
+                                                relative, 0.0 1.0;
+                                                offset, 0 0;
+                                                to, "vol_incr_button";
+                                        }
+
+                                        image {
+                                                normal, "vol-minus-clicked.png";
+                                        }
+                                }
+                        }
+
+                        /************ PLAYLIST **************************************************/
+
+                        /* LCD Playlist Backdrop Image */
+                        part {
+                                name, "playlist_backdrop";
+                                type, IMAGE;
+                                mouse_events, 0;
+                                description {
+                                        state,  "default" 0.0;
+
+                                        rel1 {
+                                                relative, 0.0 0.0;
+                                                offset, 5 210;
+                                        }
+
+                                        rel2 {
+                                                relative, 1.0 1.0;
+                                                offset, -6 -24;
+                                        }
+
+                                        image {
+                                                normal, "lcd_area.png";
+                                                border, 5 5 5 5;
+                                        }
+
+                                        fill {
+                                                smooth, 0;
+                                        }
+                                }
+                        }
+
+                        part {
+                                name, "playlist";
+                                type, RECT;
+                                mouse_events, 1;
+
+                                description {
+                                        state, "default" 0.0;
+
+                                        rel1 {
+                                                relative, 0.0 0.0;
+                                                offset, 8 5;
+                                                to, "playlist_backdrop";
+                                        }
+
+                                        rel2 {
+                                                relative, 1.0 1.0;
+                                                offset, -6 -6;
+                                                to, "playlist_backdrop";
+                                        }
+                                        color, 0 0 0 0;
+                                }
+                        }
+
+                        /********* PLAYLIST CONTROLS ****************************/
+                        /* Button Area */
+                        part {
+                                name, "controls_background";
+                                type, IMAGE;
+                                mouse_events, 0;
+                                description {
+                                        state,  "default" 0.0;
+
+                                        rel1 {
+                                                relative, 0.0 1.0;
+                                                offset, 0 1;
+                                                to, "playlist_backdrop";
+                                        }
+
+                                        rel2 {
+                                                relative, 1.0 1.0;
+                                                offset, -6 -3;
+                                                //to, "playlist_backdrop";
+                                        }
+
+                                        image {
+                                                normal, "controls-back.png";
+                                                border, 5 5 5 5;
+                                        }
+
+                                        fill {
+                                                smooth, 0;
+                                        }
+                                }
+                        }
+
+                        part {
+                                name, "add_button";
+                                type, IMAGE;
+                                mouse_events, 1;
+
+                                description {
+                                        state, "default" 0.0;
+
+                                        rel1 {
+                                                relative, 0.0 1.0;
+                                                offset, 2 2;
+                                                to, "playlist_backdrop";
+                                        }
+
+                                        rel2 {
+                                                relative, 0.0 1.0;
+                                                offset, 56 20;
+                                                to, "playlist_backdrop";
+                                        }
+
+
+                                        image {
+                                                normal, "function-button-normal.png";
+                                                border, 5 5 5 5;
+                                        }
+                                }
+                                description {
+                                        state, "clicked" 0.0;
+
+                                        rel1 {
+                                                relative, 0.0 1.0;
+                                                offset, 2 2;
+                                                to, "playlist_backdrop";
+                                        }
+
+                                        rel2 {
+                                                relative, 0.0 1.0;
+                                                offset, 56 20;
+                                                to, "playlist_backdrop";
+                                        }
+
+                                        image {
+                                                normal, "function-button-clicked.png";
+                                                border, 5 5 5 5;
+                                        }
+                                }
+                        }
+
+                        part {
+                                name, "del_button";
+                                type, IMAGE;
+                                mouse_events, 1;
+
+                                description {
+                                        state, "default" 0.0;
+
+                                        rel1 {
+                                                relative, 0.0 1.0;
+                                                offset, 67 2;
+                                                to, "playlist_backdrop";
+                                        }
+
+                                        rel2 {
+                                                relative, 0.0 1.0;
+                                                offset, 121 20;
+                                                to, "playlist_backdrop";
+                                        }
+
+                                        image {
+                                                normal, "function-button-normal.png";
+                                                border, 5 5 5 5;
+                                        }
+                                }
+                                description {
+                                        state, "clicked" 0.0;
+
+                                        rel1 {
+                                                relative, 0.0 1.0;
+                                                offset, 67 2;
+                                                to, "playlist_backdrop";
+                                        }
+
+                                        rel2 {
+                                                relative, 0.0 1.0;
+                                                offset, 121 20;
+                                                to, "playlist_backdrop";
+                                        }
+
+                                        image {
+                                                normal, "function-button-clicked.png";
+                                                border, 5 5 5 5;
+                                        }
+                                }
+                        }
+
+                        part {
+                                name, "edit_button";
+                                type, IMAGE;
+                                mouse_events, 1;
+
+                                description {
+                                        state, "default" 0.0;
+
+                                        rel1 {
+                                                relative, 0.0 1.0;
+                                                offset, 132 2;
+                                                to, "playlist_backdrop";
+                                        }
+
+                                        rel2 {
+                                                relative, 0.0 1.0;
+                                                offset, 188 20;
+                                                to, "playlist_backdrop";
+                                        }
+
+                                        image {
+                                                normal, "function-button-normal.png";
+                                                border, 5 5 5 5;
+                                        }
+                                }
+                                description {
+                                        state, "clicked" 0.0;
+
+                                        rel1 {
+                                                relative, 0.0 1.0;
+                                                offset, 132 2;
+                                                to, "playlist_backdrop";
+                                        }
+
+                                        rel2 {
+                                                relative, 0.0 1.0;
+                                                offset, 188 20;
+                                                to, "playlist_backdrop";
+                                        }
+
+                                        image {
+                                                normal, "function-button-clicked.png";
+                                                border, 5 5 5 5;
+                                        }
+                                }
+                        }
+
+                        /*** CONTROL TEXT ***/
+
+                        part {
+                                name, "add_text";
+                                type, TEXT;
+                                mouse_events, 0;
+
+                                description {
+                                        state, "default" 0.0;
+                                        visible, 1;
+
+                                        rel1 {
+                                                relative, 0.0 0.0;
+                                                offset, 0 0;
+                                                to, "add_button";
+                                        }
+
+                                        rel2 {
+                                                relative, 1.0 1.0;
+                                                offset, -1 -1;
+                                                to, "add_button";
+                                        }
+
+                                        text {
+                                                text, "Add";
+                                                font, "Vera";
+                                                size, 6;
+                                                align, 0.5 0.7;
+                                        }
+
+                                        color, 255 255 255 255;
+                                }
+                        }
+
+                        part {
+                                name, "del_text";
+                                type, TEXT;
+                                mouse_events, 0;
+
+                                description {
+                                        state, "default" 0.0;
+                                        visible, 1;
+
+                                        rel1 {
+                                                relative, 0.0 0.0;
+                                                offset, 0 0;
+                                                to, "del_button";
+                                        }
+
+                                        rel2 {
+                                                relative, 1.0 1.0;
+                                                offset, -1 -1;
+                                                to, "del_button";
+                                        }
+
+                                        text {
+                                                text, "Delete";
+                                                font, "Vera";
+                                                size, 6;
+                                                align, 0.5 0.7;
+                                        }
+
+                                        color, 255 255 255 255;
+                                }
+                        }
+
+                        part {
+                                name, "edit_text";
+                                type, TEXT;
+                                mouse_events, 0;
+
+                                description {
+                                        state, "default" 0.0;
+                                        visible, 1;
+
+                                        rel1 {
+                                                relative, 0.0 0.0;
+                                                offset, 0 0;
+                                                to, "edit_button";
+                                        }
+
+                                        rel2 {
+                                                relative, 1.0 1.0;
+                                                offset, -1 -1;
+                                                to, "edit_button";
+                                        }
+
+                                        text {
+                                                text, "Edit";
+                                                font, "Vera";
+                                                size, 6;
+                                                align, 0.5 0.7;
+                                        }
+
+                                        color, 255 255 255 255;
+                                }
+                        }
+
+
+/************ FIN ***************/
diff --git a/data/themes/default/default_playlist_parts.edc b/data/themes/default/default_playlist_parts.edc
new file mode 100644 (file)
index 0000000..ea3896c
--- /dev/null
@@ -0,0 +1,67 @@
+/*** Euphoria Default theme - by Ben Rockwood ***/
+/***   Playlist Item Parts                    ***/
+
+
+                        part {  
+                                name, "clip";
+                                type, RECT;
+
+                                description {
+                                        state, "default" 0.0;
+                                }
+                        }       
+                                
+                        part {
+                                name, "background";
+                                type, RECT;
+                                clip_to, "clip";
+                                
+                                description {
+                                        state, "default" 0.0;
+                                        color, 0 0 0 0;
+                                }
+                        
+                                description {
+                                        state, "selected" 0.0;
+                                        color, 73 104 111 128;
+                                }
+                        }
+                
+                        part {
+                                name, "title";
+                                type, TEXT;
+                                mouse_events, 1;
+                                clip_to, "clip";
+
+                                description {
+                                        color, 181 247 255 255;
+                                        align, 0.0 0.0;
+                                        max, 150 12;
+
+                                        text {
+                                                text, "Dummy";
+                                                font, "redensek";
+                                                size, 12;
+                                                align, 0.0 0.0;
+                                        }
+                                }
+                        }
+
+                        part {
+                                name, "length";
+                                type, TEXT;
+                                mouse_events, 1;
+                                clip_to, "clip";
+
+                                description {
+                                        color, 181 247 255 255;
+
+                                        text {
+                                                text, "2:55";
+                                                font, "redensek";
+                                                size, 12;
+                                                align, 1.0 0.0;
+                                        }
+                                }
+                        }
+
diff --git a/data/themes/default/default_playlist_progs.edc b/data/themes/default/default_playlist_progs.edc
new file mode 100644 (file)
index 0000000..3dbadd9
--- /dev/null
@@ -0,0 +1,49 @@
+/*** Euphoria Default theme - by Ben Rockwood ***/
+/***    Playlist Item Programs                ***/
+
+                        program {
+                                name, "selected_mouse";
+                                signal, "mouse,clicked,1";
+                                source, "*";
+                                action, SIGNAL_EMIT "PLAYLIST_ITEM_SELECTED" "";
+                        }
+
+                        program {
+                                name, "selected";
+                                signal, "PLAYLIST_ITEM_SELECTED";
+                                source, "";
+                                action, STATE_SET "selected" 0.0;
+                                transition, LINEAR 0.2;
+                                target, "background";
+                        }
+
+                        program {
+                                name, "unselected";
+                                signal, "PLAYLIST_ITEM_UNSELECTED";
+                                source, "";
+                                action, STATE_SET "default" 0.0;
+                                transition, LINEAR 0.2;
+                                target, "background";
+                        }
+
+                        program {
+                                name, "dbl_clicked";
+                                signal, "mouse,down,1,double";
+                                source, "*";
+                                action, SIGNAL_EMIT "PLAYLIST_ITEM_PLAY" "";
+                        }
+
+                        program {
+                                name, "scroll_up";
+                                signal, "mouse,wheel,0,-1";
+                                source, "*";
+                                action, SIGNAL_EMIT "PLAYLIST_SCROLL_UP" "";
+                        }
+
+                        program {
+                                name, "scroll_down";
+                                signal, "mouse,wheel,0,1";
+                                source, "*";
+                                action, SIGNAL_EMIT "PLAYLIST_SCROLL_DOWN" "";
+                        }
+
diff --git a/data/themes/default/default_progs.edc b/data/themes/default/default_progs.edc
new file mode 100644 (file)
index 0000000..d8e863e
--- /dev/null
@@ -0,0 +1,435 @@
+/*** Euphoria Default theme - by Ben Rockwood ***/
+/***   E D J E         P R O G R A M S           ***/
+
+                        /* Quit Handlers */
+                        program {
+                                name, "quit_button_in";
+                                signal, "mouse,in";
+                                source, "quit";
+                                action, STATE_SET "active" 0.0;
+                                target, "quit";
+                                transition, LINEAR 0.5;
+                        }
+                        program {
+                                name, "quit_button_out";
+                                signal, "mouse,out";
+                                source, "quit";
+                                action, STATE_SET "default" 0.0;
+                                target, "quit";
+                                transition, LINEAR 0.5;
+                        }
+                        program {
+                                name, "quit_button_click";
+                                signal, "mouse,clicked,1";
+                                source, "quit";
+                                action, SIGNAL_EMIT "close" "quit";
+                        }
+
+                        /* switch to "small" mode */
+                        program {
+                                name, "titlebar_dbl_click";
+                                signal, "mouse,down,1,double";
+                                source, "titlebar";
+                                action, SIGNAL_EMIT "SWITCH_GROUP" "euphoria_small";
+                        }
+
+                        /* Previous File */
+                        program {
+                                name,       "previous_click";
+                                signal,     "mouse,down,1";
+                                source,     "previous_button";
+                                action,     STATE_SET "clicked" 0.0;
+                                transition, LINEAR 0.0;
+                                target,     "previous_button";
+                        }
+                        program {
+                                name,       "previous_unclick";
+                                signal,     "mouse,up,1";
+                                source,     "previous_button";
+                                action,     STATE_SET "default" 0.0;
+                                transition, DECELERATE 0.25;
+                                target,     "previous_button";
+                        }
+
+                        program {
+                                name,       "previous_click_emission";
+                                signal,     "mouse,up,1";
+                                source,     "previous_button";
+                                /* Emit signal to handler "previous file", from part/sender "previous_button" */
+                                /* Catch with the following Edje code in your app */
+                                /* edje_object_signal_callback_add(edje, "playback.prev", "previous_button", function) */
+                                action,     SIGNAL_EMIT "playback.prev" "previous_button";
+                        }
+
+                        program {
+                                name, "time_text_click";
+                                signal, "mouse,up,1";
+                                source, "time_text";
+                                action, SIGNAL_EMIT "TOGGLE_TIME_DISPLAY_MODE" "time_text";
+                        }
+
+                        /* Seek Backwards */
+
+                        program {
+                                name,       "seekback_click";
+                                signal,     "mouse,down,1";
+                                source,     "seekback_button";
+                                action,     STATE_SET "clicked" 0.0;
+                                transition, LINEAR 0.0;
+                                target,     "seekback_button";
+                        }
+                        program {
+                                name,       "seekback_unclick";
+                                signal,     "mouse,up,1";
+                                source,     "seekback_button";
+                                action,     STATE_SET "default" 0.0;
+                                transition, DECELERATE 0.25;
+                                target,     "seekback_button";
+                        }
+
+                        program {
+                                name,       "seekback_start";
+                                signal,     "mouse,down,1";
+                                source,     "seekback_button";
+                                action,     SIGNAL_EMIT "SEEK_BACK_START" "seekback_button";
+                        }
+
+                        program {
+                                name,       "seekback_stop";
+                                signal,     "mouse,up,1";
+                                source,     "seekback_button";
+                                action,     SIGNAL_EMIT "SEEK_BACK_STOP" "seekback_button";
+                        }
+
+
+
+                        /* Play */
+                        program {
+                                name,       "play_click";
+                                signal,     "mouse,down,1";
+                                source,     "play_button";
+                                action,     STATE_SET "clicked" 0.0;
+                                transition, LINEAR 0.0;
+                                target,     "play_button";
+                                //after,      "play_blink";
+                        }
+
+                        program {
+                                name,       "play_unclick";
+                                signal,     "mouse,up,1";
+                                source,     "play_button";
+                                action,     STATE_SET "default" 0.0;
+                                transition, DECELERATE 0.25;
+                                target,     "play_button";
+                                //after,      "pause_unblink";
+                        }
+
+                        /* Stop Pause Blinker */
+                        /* When using the action STOP, the target is the program to be stopped */
+                        program {
+                                name,       "pause_unblink";
+                                source,     "*";
+                                action,     ACTION_STOP;
+                                target,     "pause_blink";
+                                after,      "play_blink";
+                        }
+
+
+                        /* Loop Play Blinker */
+                        program {
+                                name,       "play_blink";
+                                source,     "*";
+                                action,     STATE_SET "blink" 0.0;
+                                transition, LINEAR 1.0;
+                                target,     "play_button";
+                                after,      "play_blink";
+                        }
+
+                        program {
+                                name,       "play_click_emission";
+                                signal,     "mouse,up,1";
+                                source,     "play_button";
+                                action,     SIGNAL_EMIT "playback.play" "play_button";
+                        }
+
+                        /**************** Pause ****************/
+                        program {
+                                name,       "pause_click";
+                                signal,     "mouse,down,1";
+                                source,     "pause_button";
+                                action,     STATE_SET "clicked" 0.0;
+                                transition, LINEAR 0.2;
+                                target,     "pause_button";
+                                //after,            "pause_blink";
+                        }
+                        program {
+                                name,       "pause_unclick";
+                                signal,     "mouse,up,1";
+                                source,     "pause_button";
+                                action,     STATE_SET "default" 0.0;
+                                transition, DECELERATE 0.2;
+                                target,     "pause_button";
+                                //after,      "play_unblink";
+                        }
+
+                        program {
+                                name,       "play_unblink";
+                                source,     "*";
+                                action,     ACTION_STOP;
+                                target,     "play_blink";
+                                after,      "pause_blink";
+                        }
+
+                        program {
+                                name,       "pause_blink";
+                                source,     "*";
+                                action,     STATE_SET "blink" 0.0;
+                                transition, LINEAR 1.0;
+                                target,     "pause_button";
+                                after,      "pause_blink";
+                        }
+
+                        program {
+                                name,       "pause_click_emission";
+                                signal,     "mouse,up,1";
+                                source,     "pause_button";
+                                action,     SIGNAL_EMIT "playback.pause" "pause_button";
+                        }
+
+                        /**************** Seek Forward ********************/
+                        program {
+                                name,       "seekforward_click";
+                                signal,     "mouse,down,1";
+                                source,     "seekforward_button";
+                                action,     STATE_SET "clicked" 0.0;
+                                transition, LINEAR 0.0;
+                                target,     "seekforward_button";
+                        }
+                        program {
+                                name,       "seekforward_unclick";
+                                signal,     "mouse,up,1";
+                                source,     "seekforward_button";
+                                action,     STATE_SET "default" 0.0;
+                                transition, DECELERATE 0.25;
+                                target,     "seekforward_button";
+                        }
+
+                        program {
+                                name,       "seekforward_start";
+                                signal,     "mouse,down,1";
+                                source,     "seekforward_button";
+                                action,     SIGNAL_EMIT "SEEK_FORWARD_START" "seekforward_button";
+                        }
+
+                        program {
+                                name,       "seekforward_stop";
+                                signal,     "mouse,up,1";
+                                source,     "seekforward_button";
+                                action,     SIGNAL_EMIT "SEEK_FORWARD_STOP" "seekforward_button";
+                        }
+
+
+
+                        /* Next File */
+                        program {
+                                name,       "next_click";
+                                signal,     "mouse,down,1";
+                                source,     "next_button";
+                                action,     STATE_SET "clicked" 0.0;
+                                transition, LINEAR 0.0;
+                                target,     "next_button";
+                        }
+                        program {
+                                name,       "next_unclick";
+                                signal,     "mouse,up,1";
+                                source,     "next_button";
+                                action,     STATE_SET "default" 0.0;
+                                transition, DECELERATE 0.25;
+                                target,     "next_button";
+                        }
+                        program {
+                                name,       "next_click_emission";
+                                signal,     "mouse,up,1";
+                                source,     "next_button";
+                                action,     SIGNAL_EMIT "playback.next" "next_button";
+                        }
+
+                        /* Volume Button Proggies */
+                        /* Raise Volume */
+                        program {
+                                name,       "volplus_click";
+                                signal,     "mouse,down,1";
+                                source,     "vol_incr_button";
+                                action,     STATE_SET "clicked" 0.0;
+                                transition, LINEAR 0.0;
+                                target,     "vol_incr_button";
+                        }
+                        program {
+                                name,       "volplus_unclick";
+                                signal,     "mouse,up,1";
+                                source,     "vol_incr_button";
+                                action,     STATE_SET "default" 0.0;
+                                transition, LINEAR 0.0;
+                                target,     "vol_incr_button";
+                        }
+
+                        program {
+                                name,       "vol_incr_sig_wheel1";
+                                signal,     "mouse,wheel,0,-1";
+                                source,     "vol_incr_button";
+                                action,     SIGNAL_EMIT "VOL_INCR" "vol_incr_button";
+                        }
+
+                        program {
+                                name,       "vol_incr_sig_wheel2";
+                                signal,     "mouse,wheel,0,1";
+                                source,     "vol_incr_button";
+                                action,     SIGNAL_EMIT "VOL_DECR" "vol_decr_button";
+                        }
+
+
+                        /** NOTES: All programs MUST have AT LEAST, a NAME, SOURCE (even if "*";), and an ACTION **/
+
+                        program {
+                                name,       "vol_incr_sig";
+                                //signal,           "*";
+                                //source,     "volplus_click";
+                                signal,     "mouse,up,1";
+                                source,     "vol_incr_button";
+                                action,     SIGNAL_EMIT "VOL_INCR" "vol_incr_button";
+                        }
+
+                        /* Lower Volume */
+                        program {
+                                name,       "volminus_click";
+                                signal,     "mouse,down,1";
+                                source,     "vol_decr_button";
+                                action,     STATE_SET "clicked" 0.0;
+                                transition, LINEAR 0.0;
+                                target,     "vol_decr_button";
+                        }
+                        program {
+                                name,       "volminus_unclick";
+                                signal,     "mouse,up,1";
+                                source,     "vol_decr_button";
+                                action,     STATE_SET "default" 0.0;
+                                transition, LINEAR 0.0;
+                                target,     "vol_decr_button";
+                        }
+                        program {
+                                name,       "vol_decr_sig";
+                                signal,     "mouse,up,1";
+                                source,     "vol_decr_button";
+                                action,     SIGNAL_EMIT "VOL_DECR" "vol_decr_button";
+                        }
+
+                        program {
+                                name,       "vol_decr_sig_wheel1";
+                                signal,     "mouse,wheel,0,-1";
+                                source,     "vol_decr_button";
+                                action,     SIGNAL_EMIT "VOL_INCR" "vol_incr_button";
+                        }
+
+                        program {
+                                name,       "vol_decr_sig_wheel2";
+                                signal,     "mouse,wheel,0,1";
+                                source,     "vol_decr_button";
+                                action,     SIGNAL_EMIT "VOL_DECR" "vol_decr_button";
+                        }
+
+                        program {
+                                name, "repeat_toggle_activated";
+                                signal, "mouse,clicked,1";
+                                source, "repeat_toggle_disabled_img";
+                                action, STATE_SET "disabled" 0.0;
+                                target, "repeat_toggle_disabled_img";
+                                action, STATE_SET "enabled" 0.0;
+                                target, "repeat_toggle_enabled_img";
+                                after, "repeat_toggle_signal";
+                        }
+
+                        program {
+                                name, "repeat_toggle_deactivated";
+                                signal, "mouse,clicked,1";
+                                source, "repeat_toggle_enabled_img";
+                                action, STATE_SET "default" 0.0;
+                                target, "repeat_toggle_enabled_img";
+                                action, STATE_SET "default" 0.0;
+                                target, "repeat_toggle_disabled_img";
+                                after, "repeat_toggle_signal";
+                        }
+
+                        program {
+                                name, "repeat_toggle_signal";
+                                action, SIGNAL_EMIT "TOGGLE_REPEAT_MODE" "repeat_mode";
+                        }
+
+                        /** Playlist control programs **/
+                        program {
+                                name,       "add_click";
+                                signal,     "mouse,down,1";
+                                source,     "add_button";
+                                action,     STATE_SET "clicked" 0.0;
+                                transition, LINEAR 0.0;
+                                target,     "add_button";
+                        }
+                        program {
+                                name,       "add_unclick";
+                                signal,     "mouse,up,1";
+                                source,     "add_button";
+                                action,     STATE_SET "default" 0.0;
+                                transition, DECELERATE 0.25;
+                                target,     "add_button";
+                        }
+
+                        program {
+                                name,       "add_signal";
+                                signal,     "mouse,up,1";
+                                source,     "add_button";
+                                action,     SIGNAL_EMIT "file_dialog.open" "add_button";
+                        }
+
+
+                        program {
+                                name,       "del_click";
+                                signal,     "mouse,down,1";
+                                source,     "del_button";
+                                action,     STATE_SET "clicked" 0.0;
+                                transition, LINEAR 0.0;
+                                target,     "del_button";
+                        }
+                        program {
+                                name,       "del_unclick";
+                                signal,     "mouse,up,1";
+                                source,     "del_button";
+                                action,     STATE_SET "default" 0.0;
+                                transition, DECELERATE 0.25;
+                                target,     "del_button";
+                        }
+
+                        program {
+                                name,       "del_signal";
+                                signal,     "mouse,up,1";
+                                source,     "del_button";
+                                action,     SIGNAL_EMIT "PLAYLIST_DEL" "del_button";
+                        }
+
+                        program {
+                                name,       "edit_click";
+                                signal,     "mouse,down,1";
+                                source,     "edit_button";
+                                action,     STATE_SET "clicked" 0.0;
+                                transition, LINEAR 0.0;
+                                target,     "edit_button";
+                        }
+                        program {
+                                name,       "edit_unclick";
+                                signal,     "mouse,up,1";
+                                source,     "edit_button";
+                                action,     STATE_SET "default" 0.0;
+                                transition, DECELERATE 0.25;
+                                target,     "edit_button";
+                        }
+
+/********** FIN *************/
+
diff --git a/data/themes/default/default_small_parts.edc b/data/themes/default/default_small_parts.edc
new file mode 100644 (file)
index 0000000..b65c7a4
--- /dev/null
@@ -0,0 +1,742 @@
+/*** Minimized Interface for Default theme - by digitalfallout ***/
+                        part {
+                                name, "background";
+                                mouse_events, 1;
+                               repeat_events, 1;
+                                type, IMAGE;
+
+                                description {
+                                        state, "default" 0.0;
+                                        rel1 {
+                                                relative, 0.0 0.0;
+                                                offset, 0 0;
+                                        }
+                                        rel2 {
+                                                relative, 1.0 1.0;
+                                                offset, -1 -1;
+                                        }
+                                        image {
+                                                normal, "border-scale.png";
+                                                border, 6 6 6 6;
+                                        }
+                                        fill {
+                                                smooth, 0;
+                                        }
+                                }
+                        }
+                        part {
+                                name, "title";
+                                type,   TEXT;
+                                mouse_events, 1;
+                               repeat_events, 1;
+                                description {
+                                        state,  "default" 0.0;
+
+                                        rel1 {
+                                                relative, 0.0 0.0;
+                                                offset, 0 0;
+                                        }
+                                        rel2 {
+                                                relative, 1.0 1.0;
+                                                offset, -4 -4;
+                                        }
+                                        color,  255 255 255 255;
+                                        text {
+                                                text, "Euphoria";
+                                                font, "Vera";   /* Only font Vera works!  Use other and segv */
+                                                size, 6;       /* Font Size */
+                                                align,   1.0 1.0;       /* Text alignment based on rel1/rel2 */
+                                        }
+                                }
+                        }
+                        /***** START LCD AREA *****/
+                        /* LCD Backdrop Image */
+                        part {
+                                name, "lcd_backdrop";
+                                type, IMAGE;
+                                mouse_events, 0;
+                                description {
+                                        state,  "default" 0.0;
+
+                                        /* Part should fill from the far left, 20 pixels down */
+                                        rel1 {
+                                                relative, 0.0 0.0;
+                                                offset, 4 4;
+                                        }
+
+                                        /* all the way to the far right, 40 pixels north of the bottom right corner */
+                                        rel2 {
+                                                relative, 1.0 0.0;
+                                                offset, -6 35;
+                                        }
+
+                                        image {
+                                                normal, "lcd_area.png";
+                                                border, 5 5 5 5;
+                                        }
+
+                                        fill {
+                                                smooth, 0;
+                                        }
+                                }
+                        }
+                        /* LCD Clipping Area - Invisible Rect */
+                        part {
+                                name, "lcd_clip";
+                                type, RECT;
+                                mouse_events, 0;
+                                description {
+                                        state,  "default" 0.0;
+
+                                        rel1 {
+                                                relative, 0.0 0.0;
+                                                offset, 5 5;
+                                                to, "lcd_backdrop";
+                                        }
+
+                                        rel2 {
+                                                relative, 1.0 1.0;
+                                                offset, -5 -5;
+                                                to, "lcd_backdrop";
+                                        }
+
+                                }
+                        }
+
+                        part {
+                                name, "artist_name";
+                                type,   TEXT;
+                                mouse_events, 0;
+                                clip_to, "lcd_clip";
+                                description {
+                                        state,  "default" 0.0;
+
+                                        /* Use the relative size of the LCD itself, then position with align */
+                                        rel1 {
+                                                relative, 0.0 0.0;
+                                                offset, 8 0;
+                                                to, "lcd_backdrop";
+                                        }
+
+                                        rel2 {
+                                                relative, 1.0 1.0;
+                                                offset, -1 -1;
+                                                to, "lcd_backdrop";
+                                        }
+
+
+                                        color,  181 247 255 255;
+                                        text {
+                                                text, "Artist Name";       /* Text String */
+                                                font, "redensek";   /* Only font Vera works!  Use other and segv */
+                                                size, 12;       /* Font Size */
+                                                align, 0.0 0.1;       /* Text alignment based on rel1/rel2 */
+                                        }
+                                }
+                        }
+
+                        part {
+                                name, "song_name";
+                                type,   TEXT;
+                                mouse_events, 0;
+                                clip_to, "lcd_clip";
+                                description {
+                                        state,  "default" 0.0;
+
+                                        /* Use the relative size of the LCD itself, then position with align */
+                                        rel1 {
+                                                relative, 0.0 0.0;
+                                                offset, 8 5;
+                                                to, "lcd_backdrop";
+                                        }
+
+                                        rel2 {
+                                                relative, 1.0 1.0;
+                                                offset, -1 -1;
+                                                to, "lcd_backdrop";
+                                        }
+
+
+                                        color,  181 247 255 255;
+                                        text {
+                                                text, "Song Name";       /* Text String */
+                                                font, "redensek";   /* Only font Vera works!  Use other and segv */
+                                                size, 12;       /* Font Size */
+                                                align, 0.0 0.5;       /* Text alignment based on rel1/rel2 */
+                                        }
+                                }
+                        }
+                        /* Time Counter  */
+                        part {
+                                name, "time_text";
+                                type,   TEXT;
+                                clip_to, "lcd_clip";
+                                mouse_events, 1;
+                                description {
+                                        state,  "default" 0.0;
+
+                                        /* Use the relative size of the LCD itself, then position with align */
+                                        rel1 {
+                                                relative, 0.0 0.0;
+                                                offset, 0 0;
+                                                to, "lcd_backdrop";
+                                        }
+
+                                        rel2 {
+                                                relative, 1.0 1.0;
+                                                offset, -9 -1;
+                                                to, "lcd_backdrop";
+                                        }
+
+
+                                        color,  181 247 255 255;
+                                        text {
+                                                text, "0:00";       /* Text String */
+                                                font, "micro";   /* Only font Vera works!  Use other and segv */
+                                                size, 32;       /* Font Size */
+                                                align, 1.0 1.0;       /* Text alignment based on rel1/rel2 */
+                                        }
+                                }
+                        }
+                        /***** END LCD AREA *****/
+
+                        /***** START BUTTON AREA *****/
+
+                        /***** start previous button *****/
+                        part {
+                                name, "previous_button";
+                                mouse_events, 1;
+                                type, IMAGE;
+                                description {
+                                        state, "default" 0.0;
+                                        rel1 {
+                                                relative, 0.0 0.0;
+                                                offset,  5 37;
+                                        }
+                                        rel2 {
+                                                relative, 0.0 1.0;
+                                                offset, 30 -5;
+                                        }
+                                        image {
+                                                normal, "button-small-normal.png";
+                                        }
+                                }
+                                description {
+                                        state, "clicked" 0.0;
+                                        rel1 {
+                                                relative, 0.0 0.0;
+                                                offset, 5 37;
+                                        }
+                                        rel2 {
+                                                relative, 0.0 1.0;
+                                                offset, 30 -5;
+                                        }
+                                        image {
+                                                normal, "button-small-clicked.png";
+                                        }
+                                }
+                        }
+
+                        part {
+                                name, "previous_text";
+                                type, TEXT;
+                                mouse_events, 0;                /* Does part accept mouse events? */
+                                description {
+                                        state, "default" 0.0;
+
+                                        rel1 {
+                                                relative, 0.0 0.0;
+                                                offset, 0 0;
+                                                to, "previous_button";
+                                        }
+                                        rel2 {
+                                                relative, 1.0 1.0;
+                                                offset, -1 -1;
+                                                to, "previous_button";
+                                        }
+
+
+                                        color, 255 255 255 255;  /* Color of text */
+                                        color2, 0 0 255 255;    /* Does nothing for SOFT_SHADOW */
+                                        color3, 0 0 0 32;      /* Color of shadow */
+
+                                        text {
+                                                text, "Back";       /* Text String */
+                                                font, "Vera";   /* Only font Vera works!  Use other and segv */
+                                                size, 6;       /* Font Size */
+                                                align,   0.5 0.5;       /* Text alignment based on rel1/rel2 */
+                                        }
+                                }
+                        }
+                        /***** stop previous button *****/
+                        /***** start play button *****/
+                        part {
+                                name, "play_button";
+                                mouse_events, 1;
+                                type, IMAGE;
+                                description {
+                                        state, "default" 0.0;
+                                        rel1 {
+                                                relative, 0.0 0.0;
+                                                offset,  35 37;
+                                        }
+                                        rel2 {
+                                                relative, 0.0 1.0;
+                                                offset, 60 -5;
+                                        }
+                                        image {
+                                                normal, "button-small-normal.png";
+                                        }
+                                }
+                                description {
+                                        state, "clicked" 0.0;
+                                        rel1 {
+                                                relative, 0.0 0.0;
+                                                offset, 35 37;
+                                        }
+                                        rel2 {
+                                                relative, 0.0 1.0;
+                                                offset, 60 -5;
+                                        }
+                                        image {
+                                                normal, "button-small-clicked.png";
+                                        }
+                                }
+                        }
+
+                        part {
+                                name, "stop_text";
+                                type, TEXT;
+                                mouse_events, 0;                /* Does part accept mouse events? */
+                                description {
+                                        state, "default" 0.0;
+
+                                        rel1 {
+                                                relative, 0.0 0.0;
+                                                offset, 0 0;
+                                                to, "play_button";
+                                        }
+                                        rel2 {
+                                                relative, 1.0 1.0;
+                                                offset, -1 -1;
+                                                to, "play_button";
+                                        }
+
+
+                                        color, 255 255 255 255;  /* Color of text */
+                                        color2, 0 0 255 255;    /* Does nothing for SOFT_SHADOW */
+                                        color3, 0 0 0 32;      /* Color of shadow */
+
+                                        text {
+                                                text, "Play";       /* Text String */
+                                                font, "Vera";   /* Only font Vera works!  Use other and segv */
+                                                size, 6;       /* Font Size */
+                                                align,   0.5 0.5;       /* Text alignment based on rel1/rel2 */
+                                        }
+                                }
+                        }
+                        /***** stop play button  *****/
+                        /***** start pause button *****/
+                        part {
+                                name, "pause_button";
+                                mouse_events, 1;
+                                type, IMAGE;
+                                description {
+                                        state, "default" 0.0;
+                                        rel1 {
+                                                relative, 0.0 0.0;
+                                                offset,  65 37;
+                                        }
+                                        rel2 {
+                                                relative, 0.0 1.0;
+                                                offset, 90 -5;
+                                        }
+                                        image {
+                                                normal, "button-small-normal.png";
+                                        }
+                                }
+                                description {
+                                        state, "clicked" 0.0;
+                                        rel1 {
+                                                relative, 0.0 0.0;
+                                                offset, 65 37;
+                                        }
+                                        rel2 {
+                                                relative, 0.0 1.0;
+                                                offset, 90 -5;
+                                        }
+                                        image {
+                                                normal, "button-small-clicked.png";
+                                        }
+                                }
+                        }
+
+                        part {
+                                name, "pause_text";
+                                type, TEXT;
+                                mouse_events, 0;                /* Does part accept mouse events? */
+                                description {
+                                        state, "default" 0.0;
+
+                                        rel1 {
+                                                relative, 0.0 0.0;
+                                                offset, 0 0;
+                                                to, "pause_button";
+                                        }
+                                        rel2 {
+                                                relative, 1.0 1.0;
+                                                offset, -1 -1;
+                                                to, "pause_button";
+                                        }
+
+
+                                        color, 255 255 255 255;  /* Color of text */
+                                        color2, 0 0 255 255;    /* Does nothing for SOFT_SHADOW */
+                                        color3, 0 0 0 32;      /* Color of shadow */
+
+                                        text {
+                                                text, "Stop";       /* Text String */
+                                                font, "Vera";   /* Only font Vera works!  Use other and segv */
+                                                size, 6;       /* Font Size */
+                                                align,   0.5 0.5;       /* Text alignment based on rel1/rel2 */
+                                        }
+                                }
+                        }
+                        /***** stop next button *****/
+                        /***** start next button *****/
+                        part {
+                                name, "next_button";
+                                mouse_events, 1;
+                                type, IMAGE;
+                                description {
+                                        state, "default" 0.0;
+                                        rel1 {
+                                                relative, 0.0 0.0;
+                                                offset,  95 37;
+                                        }
+                                        rel2 {
+                                                relative, 0.0 1.0;
+                                                offset, 120 -5;
+                                        }
+                                        image {
+                                                normal, "button-small-normal.png";
+                                        }
+                                }
+                                description {
+                                        state, "clicked" 0.0;
+                                        rel1 {
+                                                relative, 0.0 0.0;
+                                                offset, 95 37;
+                                        }
+                                        rel2 {
+                                                relative, 0.0 1.0;
+                                                offset, 120 -5;
+                                        }
+                                        image {
+                                                normal, "button-small-clicked.png";
+                                        }
+                                }
+                       }
+
+                        part {
+                                name, "next_text";
+                                type, TEXT;
+                                mouse_events, 0;                /* Does part accept mouse events? */
+                                description {
+                                        state, "default" 0.0;
+
+                                        rel1 {
+                                                relative, 0.0 0.0;
+                                                offset, 0 0;
+                                                to, "next_button";
+                                        }
+                                        rel2 {
+                                                relative, 1.0 1.0;
+                                                offset, -1 -1;
+                                                to, "next_button";
+                                        }
+
+
+                                        color, 255 255 255 255;  /* Color of text */
+                                        color2, 0 0 255 255;    /* Does nothing for SOFT_SHADOW */
+                                        color3, 0 0 0 32;      /* Color of shadow */
+
+                                        text {
+                                                text, "Next";       /* Text String */
+                                                font, "Vera";   /* Only font Vera works!  Use other and segv */
+                                                size, 6;       /* Font Size */
+                                                align,   0.5 0.5;       /* Text alignment based on rel1/rel2 */
+                                        }
+                                }
+                        }
+                        /***** stop next button *****/
+                        /***** start quit button *****/
+                        part {
+                                name, "quit_button";
+                                mouse_events, 1;
+                                type, IMAGE;
+                                description {
+                                        state, "default" 0.0;
+                                        rel1 {
+                                                relative, 0.0 0.0;
+                                                offset,  125 37;
+                                        }
+                                        rel2 {
+                                                relative, 0.0 1.0;
+                                                offset, 150 -5;
+                                        }
+                                        image {
+                                                normal, "button-small-normal.png";
+                                        }
+                                }
+                                description {
+                                        state, "clicked" 0.0;
+                                        rel1 {
+                                                relative, 0.0 0.0;
+                                                offset, 125 37;
+                                        }
+                                        rel2 {
+                                                relative, 0.0 1.0;
+                                                offset, 150 -5;
+                                        }
+                                        image {
+                                                normal, "button-small-clicked.png";
+                                        }
+                                }
+                        }
+
+                        part {
+                                name, "quit_text";
+                                type, TEXT;
+                                mouse_events, 0;                /* Does part accept mouse events? */
+                                description {
+                                        state, "default" 0.0;
+
+                                        rel1 {
+                                                relative, 0.0 0.0;
+                                                offset, 0 0;
+                                                to, "quit_button";
+                                        }
+                                        rel2 {
+                                                relative, 1.0 1.0;
+                                                offset, -1 -1;
+                                                to, "quit_button";
+                                        }
+
+
+                                        color, 255 255 255 255;  /* Color of text */
+                                        color2, 0 0 255 255;    /* Does nothing for SOFT_SHADOW */
+                                        color3, 0 0 0 32;      /* Color of shadow */
+
+                                        text {
+                                                text, "Quit";       /* Text String */
+                                                font, "Vera";   /* Only font Vera works!  Use other and segv */
+                                                size, 6;       /* Font Size */
+                                                align,   0.5 0.5;       /* Text alignment based on rel1/rel2 */
+                                        }
+                                }
+                        }
+                        /***** stop exit button *****/
+                        /********** Volume  Controls ***************************************/
+                        part {
+                                name, "vol_label";
+                                mouse_events, 0;
+                                description {
+                                        state,  "default" 0.0;
+                                        min, 21 20;
+                                        max, 21 20;
+
+                                        rel1 {
+                                                relative, 1.0 1.0;
+                                                offset, -115 -50;
+                                        }
+                                        rel2 {
+                                                relative, 1.0 1.0;
+                                                offset, 0 24;
+                                        }
+
+                                        image {
+                                                normal, "vol-label.png";
+                                        }
+                                }
+                        }
+
+                        part {
+                                name, "vol_label_text";
+                                type, TEXT;
+                                mouse_events, 0;                /* Does part accept mouse events? */
+                                description {
+                                        state, "default" 0.0;
+
+                                        rel1 {
+                                                relative, 0.0 0.0;
+                                                offset, 0 0;
+                                                to, "vol_label";
+                                        }
+                                        rel2 {
+                                                relative, 1.0 1.0;
+                                                offset, -1 -1;
+                                                to, "vol_label";
+                                        }
+
+
+                                        color, 255 255 255 255;  /* Color of text */
+                                        color2, 0 0 255 255;    /* Does nothing for SOFT_SHADOW */
+                                        color3, 0 0 0 32;        /* Color of shadow */
+
+                                        text {
+                                                text, "VOL";       /* Text String */
+                                                font, "Vera";   /* Only font Vera works!  Use other and segv */
+                                                size, 5;        /* Font Size */
+                                                align,   0.5 0.6;       /* Text alignment based on rel1/rel2 */
+                                        }
+                                }
+                        }
+                        part {
+                                name, "vol_display";
+                                mouse_events, 0;
+                                description {
+                                        state,  "default" 0.0;
+                                        min, 23 20;
+                                        max, 23 20;
+
+                                        rel1 {
+                                                relative, 0.0 0.0;
+                                                offset, -23 0;
+                                                to, "vol_label";
+                                        }
+                                        rel2 {
+                                                relative, 0.0 1.0;
+                                                offset, 0 0;
+                                                to, "vol_label";
+                                        }
+
+                                        image {
+                                                normal, "vol-display.png";
+                                        }
+                                }
+                        }
+
+                        part {
+                                name, "vol_display_text";
+                                type,   TEXT;
+                                //clip_to, "vol_display";
+                                description {
+                                        state,  "default" 0.0;
+
+                                        /* Use the relative size of the LCD itself, then position with align */
+                                        rel1 {
+                                                relative, 0.0 0.0;
+                                                offset, 0 0;
+                                                to, "vol_display";
+                                        }
+
+                                        rel2 {
+                                                relative, 1.0 1.0;
+                                                offset, -1 -1;
+                                                to, "vol_display";
+                                        }
+
+
+                                        color,  181 247 255 255;
+                                        text {
+                                                text, "00";       /* Text String */
+                                                font, "Vera";   /* Only font Vera works!  Use other and segv */
+                                                size, 8;       /* Font Size */
+                                                align, 0.5 0.6;       /* Text alignment based on rel1/rel2 */
+                                        }
+                                }
+                        }
+
+
+                        part {
+                                name, "vol_incr_button";
+                                mouse_events, 1;
+                                description {
+                                        state,  "default" 0.0;
+                                        min, 25 20;
+                                        max, 25 20;
+
+                                        rel1 {
+                                                relative, 0.0 0.0;
+                                                offset, -25 0;
+                                                to, "vol_display";
+                                        }
+                                        rel2 {
+                                                relative, 0.0 1.0;
+                                                offset, 0 0;
+                                                to, "vol_display";
+                                        }
+
+                                        image {
+                                                normal, "vol-plus.png";
+                                        }
+                                }
+                                description {
+                                        state,  "clicked" 0.0;
+                                        min, 25 20;
+                                        max, 25 20;
+
+                                        rel1 {
+                                                relative, 0.0 0.0;
+                                                offset, -25 0;
+                                                to, "vol_display";
+                                        }
+                                        rel2 {
+                                                relative, 0.0 1.0;
+                                                offset, 0 0;
+                                                to, "vol_display";
+                                        }
+
+                                        image {
+                                                normal, "vol-plus-clicked.png";
+                                        }
+                                }
+                        }
+
+                        part {
+                                name, "vol_decr_button";
+                                mouse_events, 1;
+                                description {
+                                        state,  "default" 0.0;
+                                        min, 29 20;
+                                        max, 29 20;
+
+                                        rel1 {
+                                                relative, 0.0 0.0;
+                                                offset, -29 0;
+                                                to, "vol_incr_button";
+                                        }
+                                        rel2 {
+                                                relative, 0.0 1.0;
+                                                offset, 0 0;
+                                                to, "vol_incr_button";
+                                        }
+
+                                        image {
+                                                normal, "vol-minus.png";
+                                        }
+                                }
+                                description {
+                                        state,  "clicked" 0.0;
+                                        min, 29 20;
+                                        max, 29 20;
+
+                                        rel1 {
+                                                relative, 0.0 0.0;
+                                                offset, -29 0;
+                                                to, "vol_incr_button";
+                                        }
+                                        rel2 {
+                                                relative, 0.0 1.0;
+                                                offset, 0 0;
+                                                to, "vol_incr_button";
+                                        }
+
+                                        image {
+                                                normal, "vol-minus-clicked.png";
+                                        }
+                                }
+                        }
+
+/************** EOF ********************/
diff --git a/data/themes/default/default_small_progs.edc b/data/themes/default/default_small_progs.edc
new file mode 100644 (file)
index 0000000..5a05116
--- /dev/null
@@ -0,0 +1,219 @@
+/*** Minimized Interface for Default theme - by digitalfallout ***/
+
+                        /* Previous */
+                        program {
+                                name,       "previous_click";
+                                signal,     "mouse,down,1";
+                                source,     "previous_button";
+                                action,     STATE_SET "clicked" 0.0;
+                                transition, LINEAR 0.0;
+                                target,     "previous_button";
+                        }
+
+                        program {
+                                name,       "previous_unclick";
+                                signal,     "mouse,up,1";
+                                source,     "previous_button";
+                                action,     STATE_SET "default" 0.0;
+                                transition, DECELERATE 0.25;
+                                target,     "previous_button";
+                        }
+                        program {
+                                name,       "previous_click_emission";
+                                signal,     "mouse,up,1";
+                                source,     "previous_button";
+                                action,     SIGNAL_EMIT "playback.previous" "previous_button";
+                        }
+
+                        /* Play */
+                        program {
+                                name,       "play_click";
+                                signal,     "mouse,down,1";
+                                source,     "play_button";
+                                action,     STATE_SET "clicked" 0.0;
+                                transition, LINEAR 0.0;
+                                target,     "play_button";
+                        }
+
+                        program {
+                                name,       "play_unclick";
+                                signal,     "mouse,up,1";
+                                source,     "play_button";
+                                action,     STATE_SET "default" 0.0;
+                                transition, DECELERATE 0.25;
+                                target,     "play_button";
+                        }
+                        program {
+                                name,      "play_click_emission";
+                                signal,    "mouse,up,1";
+                                source,    "play_button";
+                                action,    SIGNAL_EMIT "playback.play" "play_button";
+                        }
+
+                        /* Pause */
+             &nbs