--- /dev/null
+Tilman Sauerbeck (tilman at code-monkey de)
--- /dev/null
+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.
--- /dev/null
+$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
--- /dev/null
+$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!
+
--- /dev/null
+# $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
--- /dev/null
+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.
--- /dev/null
+#!/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
--- /dev/null
+#if defined __COMMON_INC
+#endinput
+#endif
+#define __COMMON_INC
+
+#define MSG_ID_SET_SONGNAME 0
--- /dev/null
+/*****************************************************************/
+/* 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"
+ }
+ }
+}
+
--- /dev/null
+/** 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;
--- /dev/null
+/*** 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 ***************/
--- /dev/null
+/*** 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;
+ }
+ }
+ }
+
--- /dev/null
+/*** 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" "";
+ }
+
--- /dev/null
+/*** 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 *************/
+
--- /dev/null
+/*** 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 ********************/
--- /dev/null
+/*** 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 */
+ program {
+ name, "pause_click";
+ signal, "mouse,down,1";
+ source, "pause_button";
+ action, STATE_SET "clicked" 0.0;
+ transition, LINEAR 0.0;
+ target, "pause_button";
+ }
+
+ program {
+ name, "pause_unclick";
+ signal, "mouse,up,1";
+ source, "pause_button";
+ action, STATE_SET "default" 0.0;
+ transition, DECELERATE 0.25;
+ target, "pause_button";
+ }
+ program {
+ name, "pause_click_emission";
+ signal, "mouse,up,1";
+ source, "pause_button";
+ action, SIGNAL_EMIT "PAUSE" "pause_button";
+ }
+
+ /* Next */
+ 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";
+ }
+
+
+ /* Quit */
+ program {
+ name, "quit_click";
+ signal, "mouse,down,1";
+ source, "quit_button";
+ action, STATE_SET "clicked" 0.0;
+ transition, LINEAR 0.0;
+ target, "quit_button";
+ }
+
+ program {
+ name, "quit_unclick";
+ signal, "mouse,up,1";
+ source, "quit_button";
+ action, STATE_SET "default" 0.0;
+ transition, DECELERATE 0.25;
+ target, "quit_button";
+ }
+ program {
+ name, "quit_click_emission";
+ signal, "mouse,up,1";
+ source, "quit_button";
+ action, SIGNAL_EMIT "close" "quit";
+ }
+ /* 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";
+ }
+
+ /* switch to "large" mode */
+ program {
+ name, "titlebar_dbl_click";
+ signal, "mouse,down,1,double";
+ source, "background";
+ action, SIGNAL_EMIT "SWITCH_GROUP" "euphoria";
+ }
+
+/********* FIN *****************/
--- /dev/null
+#define BASE "base_to"
+
+ part { name, BASE; type, IMAGE; mouse_events, 1; repeat_events, 1;
+ description { state, "default" 0.0; min, 123 94; max, 123 94;
+ rel1 { relative, 0.0 0.0; offset, 0.0 0.0; }
+ rel2 { relative, 1.0 1.0; offset, 0 0; }
+ image { normal, "base_layer.png"; border, 6 6 6 6; }
+ fill { smooth, 1; } } }
+///////////////////////////////////////////////////////////////////////
+ part { name, RIGHT"panel"; type, IMAGE; mouse_events, 1; repeat_events, 1;
+ description { state, "default" 0.0; min, 0 94; max, 145 94;
+ rel1 { to, BASE; relative, 1.0 0.0; offset, 0 0; }
+ rel2 { to, RIGHT"border"; relative, 0.0 1.0; offset, -1 -1; }
+ image { normal, "base_layer.png"; border, 6 6 6 6; }
+ fill { smooth, 1; } } }
+
+ part { name, RIGHT"border"; mouse_events, 1;
+ description { state, "default" 0.0; min, 19 94; max, 19 94;
+ rel1 { to, BASE; relative, 2.0 0.0; offset, 145 0; }
+ rel2 { to, BASE; relative, 1.0 1.0; offset, 3 -1; }
+ image { normal, "bar_delay_right.png"; border, 0 0 7 8; } }
+
+ description { state, "slide" 0.0; min, 19 94; max, 19 94;
+ rel1 { to, BASE; relative, 1.0 1.0; offset, -3 0; }
+ rel2 { to, BASE; relative, 0.0 0.0; offset, 145 -1; }
+ image { normal, "bar_delay_right.png"; border, 0 0 7 8; } } }
+
+ part { name, RIGHT"border-slide"; type, RECT;
+ description { state, "default" 0.0; visible, 0; min, 0 94; max, 9999 9999;
+ color, 0 0 0 0;
+ rel1 { to, RIGHT"border"; relative, 1.0 0.0; offset, 0 0; }
+ rel2 { to, RIGHT"border"; relative, 1.0 1.0; offset, 0 0; } }
+
+ description { state, "slide" 0.0; visible, 1; min, 0 94; max, 9999 9999;
+ color, 0 0 0 0;
+ rel1 { to, RIGHT"border"; relative, 0.0 0.0; offset, 0 0; }
+ rel2 { to, RIGHT"border"; relative, 1.0 1.0; offset, 0 0; } } }
+///////////////////////////////////////////////////////////////////////
+ part { name, LEFT"panel"; type, IMAGE; mouse_events, 1; repeat_events, 1;
+ description { state, "default" 0.0; min, 0 94; max, 145 94;
+ rel1 { to, LEFT"border"; relative, 1.0 0.0; offset, 0 0; }
+ rel2 { to, BASE; relative, 0.0 1.0; offset, -1 -1; }
+ image { normal, "base_layer.png"; border, 6 6 6 6; }
+ fill { smooth, 1; } } }
+
+ part { name, LEFT"border"; mouse_events, 1;
+ description { state, "default" 0.0; min, 19 94; max, 19 94; align, 0.0 0.0;
+ rel1 { to, BASE; relative, 0.0 0.0; offset, -145 0; }
+ rel2 { to, BASE; relative, 0.0 1.0; offset, 0 -1; }
+ image { normal, "bar_delay_left.png"; } }
+
+ description { state, "slide" 0.0; min, 19 94; max, 19 94; align, 0.0 0.0;
+ rel1 { to, BASE; relative, 0.0 0.0; offset, -19 0; }
+ rel2 { to, BASE; relative, 0.0 1.0; offset, 1 -1; }
+ image { normal, "bar_delay_left.png"; } } }
+
+ part { name, LEFT"border-slide"; type, RECT;
+ description { state, "default" 0.0; visible, 0; min, 0 94; max, 9999 9999;
+ color, 0 0 0 0;
+ rel1 { to, LEFT"border"; relative, 0.0 0.0; offset, 0 0; }
+ rel2 { to, LEFT"border"; relative, 1.0 1.0; offset, 0 0; } }
+
+ description { state, "slide" 0.0; visible, 1; min, 0 94; max, 9999 9999;
+ color, 0 0 0 0;
+ rel1 { to, LEFT"border"; relative, 0.0 0.0; offset, 0 0; }
+ rel2 { to, LEFT"border"; relative, 1.0 1.0; offset, 0 0; } } }
+///////////////////////////////////////////////////////////////////////
+ part { name, RIGHT"lcd"; type, IMAGE; mouse_events, 0;
+ description { state, "default" 0.0; min, 0 94; max, 142 94;
+ rel1 { to, BASE; relative, 1.0 0.0; offset, -16 0; }
+ rel2 { to, RIGHT"border"; relative, 0.0 1.0; offset, -1 -1; }
+ image { normal, "lcd_window.png"; border, 9 9 9 9; }
+ fill { smooth, 0; } }
+
+ description { state, "slide" 0.0; min, 0 94; max, 142 94;
+ rel1 { to, BASE; relative, 1.0 0.0; offset, -8 0; }
+ rel2 { to, RIGHT"border"; relative, 0.0 1.0; offset, -1 -1; }
+ image { normal, "lcd_window.png"; border, 9 9 9 9; }
+ fill { smooth, 0; } } }
+
+// part { name, "RpanelClipArea"; description {
+// state, "default" 0.0; min, 0 94; max, 142 94;
+// rel1 { to, RIGHT"panel"; relative, 0.0 0.0; offset, 0 0; }
+// rel2 { to, BASE; relative, 1.0 1.0; offset, 0 0; }
+// border, 0 0 0 0; } }
+//
+ part { name, LEFT"lcd"; type, IMAGE; mouse_events, 0;
+ description { state, "default" 0.0; min, 0 94; max, 142 94; align, 0.0 0.0;
+ rel1 { to, LEFT"border"; relative, 1.0 0.0; offset, 0 0; }
+ rel2 { to, BASE; relative, 0.0 1.0; offset, 16 0; }
+ image { normal, "lcd_window.png"; border, 9 9 9 9; }
+ fill { smooth, 0; } }
+
+ description { state, "slide" 0.0; min, 0 94; max, 142 94; align, 0.0 0.0;
+ rel1 { to, LEFT"border"; relative, 1.0 0.0; offset, 0 0; }
+ rel2 { to, BASE; relative, 0.0 1.0; offset, 7 0; }
+ image { normal, "lcd_window.png"; border, 9 9 9 9; }
+ fill { smooth, 0; } } }
+//
+///////////////////////////////////////////////////////////////////////
+ part { name, "CenterClipArea"; type, RECT;
+ mouse_events, 1; repeat_events, 1;
+ description { state, "default" 0.0; min, 123 94; max, 123 94;
+ color, 0 0 0 0;
+ rel1 { to, BASE; relative, 0.0 0.0; offset, 0 0; }
+ rel2 { to, BASE; relative, 1.0 1.0; offset, 0 0; } } }
+///////////////////////////////////////////////////////////////////////
+// Placements
+
+ part { name, "ct_align"; type, IMAGE; mouse_events, 0;
+ description { state, "default" 0.0; min, 85 28; max, 85 28;
+ rel1 { relative, 0.0 0.5; offset, 0 -20; to, "CenterClipArea"; }
+ rel2 { relative, 1.0 0.0; offset, 0 0; to, "CenterClipArea"; }
+ image { normal, "align_top.png"; } } }
+//
+ part { name, "cl_align"; type, IMAGE; mouse_events, 0;
+ description { state, "default" 0.0; min, 22 41; max, 22 41;
+ rel1 { relative, 0.0 0.5; offset, 0 2; to, "CenterClipArea"; }
+ rel2 { relative, 0.5 0.5; offset, -1 0; to, "CenterClipArea"; }
+ image { normal, "align_left.png"; } } }
+//
+ part { name, "cc_align"; type, IMAGE; mouse_events, 0;
+ description { state, "default" 0.0; min, 41 41; max, 41 41;
+ rel1 { relative, 0.0 0.5; offset, 0 2; to, "CenterClipArea"; }
+ rel2 { relative, 1.0 0.5; offset, 0 0; to, "CenterClipArea"; }
+ image { normal, "align_center.png"; } } }
+//
+ part { name, "cr_align"; type, IMAGE; mouse_events, 0;
+ description { state, "default" 0.0; max, 22 41; min, 22 41;
+ rel1 { relative, 0.5 0.5; offset, 0 2; to, "CenterClipArea"; }
+ rel2 { relative, 1.0 0.5; offset, 1 0; to, "CenterClipArea"; }
+ image { normal, "align_right.png"; } } }
+//
+ part { name, "cb_align"; type, IMAGE; mouse_events, 0;
+ description { state, "default" 0.0; min, 85 25; max, 85 25;
+ rel1 { relative, 0.0 0.5; offset, 0 1; to, "CenterClipArea"; }
+ rel2 { relative, 1.0 1.0; offset, 0 20; to, "CenterClipArea"; }
+ image { normal, "align_bottom.png"; } } }
+//
+///////////////////////////////////////////////////////////////////////
+// Buttons
+
+ part { name, "prev_button"; type, IMAGE; mouse_events, 1;
+ description { state, "default" 0.0; min, 13 39; max, 13 39;
+ rel1 { relative, 0.0 0.0; offset, 0 0; to, "cl_align"; }
+ rel2 { relative, 1.0 1.0; offset, 5 0; to, "cl_align"; }
+ image { normal, "previous_button.png"; } }
+
+ description { state, "hilited" 0.0; min, 13 39; max, 13 39;
+ rel1 { relative, 0.0 0.0; offset, 0 0; to, "cl_align"; }
+ rel2 { relative, 1.0 1.0; offset, 5 0; to, "cl_align"; }
+ image { normal, "previous_button_hilited.png";} }
+
+ description { state, "clicked" 0.0; max, 13 39; min, 13 39;
+ rel1 { relative, 0.0 0.0; offset, 0 0; to, "cl_align"; }
+ rel2 { relative, 1.0 1.0; offset, 5 0; to, "cl_align"; }
+ image { normal, "previous_button_clicked.png"; } } }
+//
+ part { name, "pause_button"; type, IMAGE; mouse_events, 1;
+ description { state, "default" 0.0; min, 39 12; max, 39 12;
+ rel1 { relative, 0.0 0.0; offset, 0 0; to, "ct_align"; }
+ rel2 { relative, 1.0 1.0; offset, 0 12; to, "ct_align"; }
+ image { normal, "pause_button.png"; } }
+
+ description { state, "hilited" 0.0; max, 39 12; min, 39 12;
+ rel1 { relative, 0.0 0.0; offset, 0 0; to, "ct_align"; }
+ rel2 { relative, 1.0 1.0; offset, 0 12; to, "ct_align"; }
+ image { normal, "pause_button_hilited.png"; } }
+
+ description { state, "clicked" 0.0; min, 39 12; max, 39 12;
+ rel1 { relative, 0.0 0.0; offset, 0 0; to, "ct_align"; }
+ rel2 { relative, 1.0 1.0; offset, 0 12;to, "ct_align"; }
+ image { normal, "pause_button_clicked.png"; } } }
+//
+ part { name, "play_button"; type, IMAGE; mouse_events, 1;
+ description { state, "default" 0.0; min, 23 23; max, 23 23;
+ rel1 { relative, 0.0 0.0; offset, 0 0; to, "cc_align"; }
+ rel2 { relative, 1.0 1.0; offset, 0 0; to, "cc_align"; }
+ image { normal, "play_button.png"; border, 1 1 1 1; }
+ fill { smooth, 0; } }
+
+ description { state, "hilited" 0.0; min, 23 23; max, 23 23;
+ rel1 { relative, 0.0 0.0; offset, 0 0; to, "cc_align"; }
+ rel2 { relative, 1.0 1.0; offset, 0 0; to, "cc_align"; }
+ image { normal, "play_button_hilited.png"; border, 1 1 1 1; }
+ fill { smooth, 1; } }
+
+ description { state, "clicked" 0.0; min, 23 23; max, 23 23;
+ rel1 { relative, 0.0 0.0; offset, 0 0; to, "cc_align"; }
+ rel2 { relative, 1.0 1.0; offset, 0 0; to, "cc_align"; }
+ image { normal, "play_button_clicked.png"; border, 1 1 1 1; }
+ fill { smooth, 0; } } }
+//
+ part { name, "next_button"; type, IMAGE; mouse_events, 1;
+ description { state, "default" 0.0; min, 13 39; max, 13 39;
+ rel1 { relative, 0.0 0.0; offset, 0 0; to, "cr_align"; }
+ rel2 { relative, 1.0 1.0; offset, -5 0; to, "cr_align"; }
+ image { normal, "next_button.png"; } }
+
+ description { state, "hilited" 0.0; min, 13 39; max, 13 39;
+ rel1 { relative, 0.0 0.0; offset, 0 0; to, "cr_align"; }
+ rel2 { relative, 1.0 1.0; offset, -5 0; to, "cr_align"; }
+ image { normal, "next_button_hilited.png"; } }
+
+ description { state, "clicked" 0.0; min, 13 39; max, 13 39;
+ rel1 { relative, 0.0 0.0; offset, 0 0; to, "cr_align"; }
+ rel2 { relative, 1.0 1.0; offset, -5 0; to, "cr_align"; }
+ image { normal, "next_button_clicked.png"; } } }
+//
+ part { name, "stop_button"; type, IMAGE; mouse_events, 1;
+ description { state, "default" 0.0; min, 39 13; max, 39 13;
+ rel1 { relative, 0.0 0.0; offset, 0 0; to, "cb_align"; }
+ rel2 { relative, 1.0 1.0; offset, 0 -8; to, "cb_align"; }
+ image { normal, "stop_button.png"; } }
+
+ description { state, "hilited" 0.0; min, 39 13; max, 39 13;
+ rel1 { relative, 0 0; offset, 0 0; to, "cb_align"; }
+ rel2 { relative, 1.0 1.0; offset, 0 -8; to, "cb_align"; }
+ image { normal, "stop_button_hilited.png"; } }
+
+ description { state, "clicked" 0.0; min, 39 13; max, 39 13;
+ rel1 { relative, 0.0 0.0; offset, 0 0; to, "cb_align"; }
+ rel2 { relative, 1.0 1.0; offset, 0 -8; to, "cb_align"; }
+ image { normal, "stop_button_clicked.png"; } } }
+//
+///////////////////////////////////////////////////////////////////
+/* Track information and misc. */
+// First object CONTAINER for LEFT "lcd" data
+
+ part { name, "trans_Rect"; type, RECT;
+ description { state, "default" 0.0; min, 132 71; max, 124 71;
+ rel1 { relative, 1.0 1.0; offset, 19 0; to, LEFT"border"; }
+ rel2 { relative, 1.0 0.0; offset, 0 0; to, LEFT"panel"; } }
+
+ description { state, "slide" 0.0; min, 0 71; max, 132 71;
+ rel1 { relative, 1.0 1.0; offset, 19 0; to, LEFT"border"; }
+ rel2 { relative, 1.0 0.0; offset, 0 0; to, LEFT"panel"; } } }
+//
+ part { name, "time_arrow"; type, IMAGE; clip_to, "trans_Rect";
+ description { min, 4 7; max, 4 7; state, "default" 0.0;
+ rel1 { relative, 0 0; offset, 6 19; to, "trans_Rect"; }
+ rel2 { relative, 0 0; offset, 0 0; to, "trans_Rect"; }
+ image { normal, "h_arrow.png"; }
+ fill { smooth, 1; } } }
+
+ part { name, "player.time"; type, TEXT; mouse_events, 0; clip_to, "trans_Rect";
+ description { state, "default" 0.0; visible, 1;
+ rel1 { to, "trans_Rect"; relative, 0 0; offset, 10 14; }
+ rel2 { to, "trans_Rect"; relative, 0.5 0; offset, 0 0; }
+ color, 76 67 88 255;
+ text { text, "00:00"; font, "Edje.visitor1"; size, 9; align, 0 0; } } }
+//
+ part { name, "artist_bullet"; type, IMAGE; clip_to, "trans_Rect";
+ description { min, 3 3; max, 3 3; state, "default" 0.0;
+ rel1 { relative, 0 0; offset, 2 30; to, "time_arrow"; }
+ rel2 { relative, 0 0; offset, 0 0; to, "time_arrow"; }
+ image { normal, "bullet.png"; }
+ fill { smooth, 1; } } }
+
+ part { name, "artist_name"; type, TEXT; clip_to, "trans_Rect";
+ description { state, "default" 0.0;
+ rel1 { relative, 0.0 0.0; offset, 10 13; to, "trans_Rect"; }
+ rel2 { relative, 1.0 1.0; offset, -4 12; to, "trans_Rect"; }
+ color, 76 67 88 255;
+ text { text, "Artist"; font, "Edje.visitor1"; size, 9; align, 0.0 0.1; } } }
+//
+ part { name, "album_bullet"; type, IMAGE; clip_to, "trans_Rect";
+ description { min, 3 3; max, 3 3; state, "default" 0.0;
+ rel1 { relative, 0 0; offset, 0 8; to, "artist_bullet"; }
+ rel2 { relative, 1 1; offset, 0 10; to, "artist_bullet"; }
+ image { normal, "bullet.png"; }
+ fill { smooth, 1; } } }
+
+ part { name, "album_name"; type, TEXT; clip_to, "trans_Rect";
+ description { state, "default" 0.0;
+ rel1 { relative, 0.0 0.0; offset, 0 15; to, "artist_name"; }
+ rel2 { relative, 1.0 1.0; offset, 0 17; to, "artist_name"; }
+ color, 76 67 88 255;
+ text { text, "Album"; font, "Edje.visitor1"; size, 9; align, 0 0; } } }
+//
+ part { name, "song_bullet"; type, IMAGE; clip_to, "trans_Rect";
+ description { min, 3 3; max, 3 3; state, "default" 0.0;
+ rel1 { relative, 0 0; offset, 0 11; to, "album_bullet"; }
+ rel2 { relative, 1 1; offset, 0 10; to, "album_bullet"; }
+ image { normal, "bullet.png"; }
+ fill { smooth, 1; } } }
+
+ part { name, "song_name"; type, TEXT; mouse_events, 0; clip_to, "trans_Rect";
+ description { state, "default" 0.0;
+ rel1 { relative, 0 0; offset, 0 10; to, "album_name"; }
+ rel2 { relative, 1 0; offset, 0 10; to, "album_name"; }
+ color, 76 67 88 255;
+ text { text, "Song"; font, "Edje.visitor1"; size, 9; align, 0 0; } } }
+//
+ part { name, "bitrate_bullet"; type, IMAGE; clip_to, "trans_Rect";
+ description { min, 3 3; max, 3 3; state, "default" 0.0;
+ rel1 { relative, 0 0; offset, 2 19; to, "song_bullet"; }
+ rel2 { relative, 0 1; offset, 0 19; to, "song_bullet"; }
+ image { normal, "bullet.png"; }
+ fill { smooth, 1; } } }
+
+ part { name, "track_bitrate"; type, TEXT; clip_to, "trans_Rect";
+ description { state, "default" 0.0; min, 20 7; max, 20 7;
+ rel1 { relative, 0 0; offset, 48 22; to, "trans_Rect"; }
+ rel2 { relative, 0 1; offset, -8 30; to, "trans_Rect"; }
+ color, 76 67 88 255;
+ text { text, "000"; font, "Edje.visitor1"; size, 9; align, 0 0; } } }
+///////////////////////////////////////////////////////////////////////
+// SeekerBar
+
+ part { name, "seekerTrough"; clip_to, "trans_Rect";
+ description { state, "default" 0.0; visible, 1; min, 10 5; max, 9999 5;
+ rel1 { relative, 0.0 0.0; offset, 1 15; to, "trans_Rect"; }
+ rel2 { relative, 1.0 1.0; offset, -7 15; to, "trans_Rect"; }
+ image { normal, "seeker_trough.png"; border, 5 5 1 1; } } }
+//
+ part { name, "seekerBar"; clip_to, "trans_Rect";
+ description { state, "default" 0.0; visible, 1; min, 0 5; max, 9999 5;
+ rel1 { to, "seekerTrough"; relative, 0 0; offset, 0 0; }
+ rel2 { to_x, "seeker"; to_y, "seekerTrough"; relative, 0 1; offset, 0 -1; }
+ image { normal, "seeker_bar.png"; border, 5 5 1 1; } } }
+//
+ part { name, "seeker"; type, RECT; clip_to, "trans_Rect";
+ dragable { x, 1 1 1; y, 0 0 0; confine, "seekerTrough"; }
+ description { state, "default" 0.0; visible, 0; color, 0 0 0 255; min, 1 5; max, 1 5;
+ rel1 { to, "seekerTrough"; relative, 0 0; offset, 0 0; }
+ rel2 { to, "seekerTrough"; relative, 1 1; offset, -1 -1; } } }
+//
+ part { name, "switch_stance"; type, RECT; mouse_events, 1; clip_to, "trans_Rect";
+ description { min, 10 10; max, 10 10; state, "default" 0.0;
+ rel1 { relative, 1.0 0.0; offset, 190 4; to, "time_arrow"; }
+ rel2 { relative, 1.0 0.0; offset, 0 0; to, "time_arrow"; }
+ color, 0 0 0 0; } }
+///////////////////////////////////////////////////////////////////////
+// PLAYLIST
+
+ part { name, "playlistPanel"; mouse_events, 1; type, RECT;
+ description { state, "default" 0.0; min, 0 72; max, 120 72;
+ rel1 { to, RIGHT"lcd"; relative, 0 1; offset, 8 0; }
+ rel2 { to, RIGHT"border"; relative, 0 0; offset, -8 -1; } } }
+
+ part { name, "playlist.container"; type, RECT; mouse_events, 1; repeat_events, 1; clip_to, "playlistPanel";
+ description { state, "default" 0.0; min, 0 62; max, 120 62;
+ rel1 { to, "playlistPanel"; relative, 0.0 0.0; offset, 0 -10; }
+ rel2 { to, "playlistPanel"; relative, 1.0 1.0; offset, 0 1; }
+ color, 0 0 0 0; } }
+//
+ part { name, "add_button"; type, IMAGE; mouse_events, 1; clip_to, "playlistPanel";
+ description { min, 14 12; max, 14 12; state, "default" 0.0;
+ rel1 { relative, 0 0; offset, 4 20; to, "playlistPanel"; }
+ rel2 { relative, 0.5 1; offset, 0 37; to, "playlistPanel"; }
+ image { normal, "add_track.png"; } fill { smooth, 1; } }
+
+ description { min, 14 12; max, 14 12; state, "hilited" 0.0;
+ rel1 { relative, 0 0; offset, 4 20; to, "playlistPanel"; }
+ rel2 { relative, 0.5 1; offset, 0 37; to, "playlistPanel"; }
+ image { normal, "add_track_hilited.png"; } }
+
+ description { min, 14 12; max, 14 12; state, "clicked" 0.0;
+ rel1 { relative, 0 0; offset, 4 20; to, "playlistPanel"; }
+ rel2 { relative, 0.5 1; offset, 0 37; to, "playlistPanel"; }
+ image { normal, "add_track_clicked.png"; } } }
+
+ part { name, "delete_button"; type, IMAGE; mouse_events, 1; clip_to, "playlistPanel";
+ description { min, 24 10; max, 24 10; state, "default" 0.0;
+ rel1 { relative, 0 0; offset, 57 21; to, "playlistPanel"; }
+ rel2 { relative, 0.5 1; offset, 0 38; to, "playlistPanel"; }
+ image { normal, "delete_track.png"; } fill { smooth, 1; } }
+
+ description { min, 24 10; max, 24 10; state, "hilited" 0.0;
+ rel1 { relative, 0 0; offset, 57 21; to, "playlistPanel"; }
+ rel2 { relative, 0.5 1; offset, 0 38; to, "playlistPanel"; }
+ image { normal, "delete_track_hilited.png"; } }
+
+ description { min, 24 10; max, 24 10; state, "clicked" 0.0;
+ rel1 { relative, 0 0; offset, 57 21; to, "playlistPanel"; }
+ rel2 { relative, 0.5 1; offset, 0 38; to, "playlistPanel"; }
+ image { normal, "delete_track_clicked.png"; } } }
+
+ part { name, "edit_button"; type, IMAGE; mouse_events, 1; clip_to, "playlistPanel";
+ description { min, 16 12; max, 16 12; state, "default" 0.0;
+ rel1 { relative, 0 0; offset, 104 20; to, "playlistPanel"; }
+ rel2 { relative, 0.5 1; offset, 10 37; to, "playlistPanel"; }
+ image { normal, "edit_track.png"; } fill { smooth, 1; } }
+
+ description { min, 16 12; max, 16 12; state, "hilited" 0.0;
+ rel1 { relative, 0 0; offset, 104 20; to, "playlistPanel"; }
+ rel2 { relative, 0.5 1; offset, 10 37; to, "playlistPanel"; }
+ image { normal, "edit_track_hilited.png"; } }
+
+ description { min, 16 12; max, 16 12; state, "clicked" 0.0;
+ rel1 { relative, 0 0; offset, 104 20; to, "playlistPanel"; }
+ rel2 { relative, 0.5 1; offset, 10 37; to, "playlistPanel"; }
+ image { normal, "edit_track_clicked.png"; } } }
+///////////////////////////////////////////////////////////////////////
+ part { name, "quit"; type, IMAGE; mouse_events, 1; clip_to, "trans_Rect";
+ description { min, 10 10; max, 10 10; state, "default" 0.0;
+ rel1 { relative, 1 0; offset, 10 10; to, "switch_stance"; }
+ rel2 { relative, 1.0 0.0; offset, 6 0; to, "switch_stance"; }
+ image { normal, "close_button.png"; }
+ fill { smooth, 1; } }
+
+ description { min, 10 10; max, 10 10; state, "hilited" 0.0;
+ rel1 { relative, 1 0; offset, 10 10; to, "switch_stance"; }
+ rel2 { relative, 1.0 0.0; offset, 6 0; to, "switch_stance"; }
+ image { normal, "close_button_hilited.png"; }
+ fill { smooth, 1; } }
+
+ description { min, 10 10; max, 10 10; state, "clicked" 0.0;
+ rel1 { relative, 1 0; offset, 10 10; to, "switch_stance"; }
+ rel2 { relative, 1.0 0.0; offset, 6 0; to, "switch_stance"; }
+ image { normal, "close_button_clicked.png"; }
+ fill { smooth, 1; } } }
+//
--- /dev/null
+
+part { name, "base"; type, IMAGE; mouse_events, 1; repeat_events, 1;
+ description { state, "default" 0.0; visible, 1;
+ rel1 { relative, 0.0 0.0; offset, 20 0; }
+ rel2 { relative, 1.0 1.0; offset, -18 0; }
+ image { border, 0 0 12 12; normal, "base_layer.png"; }
+ }
+}
+
+part { name, "base.confine"; type, RECT; mouse_events, 0;
+ description { state, "default" 0.0; visible, 1;
+ rel1 { relative, 0.0 0.0; offset, 20 0; }
+ rel2 { relative, 1.0 1.0; offset, -20 0; }
+ color, 255 255 255 0;
+ }
+}
+
+part { name, "base.dragable"; type, IMAGE; mouse_events, 1;
+ dragable { y, 0 0 0; x, 1 1 0; confine, "base.confine"; }
+ description { state, "default" 0.0; visible, 1; min, 11 85;
+ rel1 { relative, 0.5 0.5; offset, 0 0; }
+ rel2 { relative, 0.5 0.5; offset, 0 0; }
+ image { normal, "v_scrollbar.png"; border, 4 4 17 17; }
+ color, 255 255 255 200;
+ }
+}
+
+part { name, "base_left"; type, IMAGE; repeat_events, 1;
+ description { state, "default" 0.0; visible, 1;
+ rel1 { relative, 0.0 0.0; offset, 0 0; }
+ rel2 { relative, 0.0 1.0; offset, 19 0; }
+ image { border, 18 0 12 12; normal, "bar_delay_left.png"; }
+ }
+}
+
+part { name, "base.directory.clip"; type, RECT; mouse_events, 0;
+ description { state, "default" 0.0; visible, 1;
+ rel1 { relative, 0.0 0.0; offset, 15 -9; }
+ rel2 { relative, 0.0 1.0; offset, -2 8; to_x, "base.dragable"; }
+ color, 255 255 255 255;
+ }
+}
+
+VPANEL("directory", "arrow_up.png", "arrow_up.png", 14, 14,
+ "arrow_down.png", "arrow_down.png", 14, 14,
+ "base.directory.clip", 0.0 0.0, 0 0,
+ "base.directory.clip", 1.0 1.0, 0 0,
+ "base.directory.clip")
+
+part { name, "base_right"; type, IMAGE; repeat_events, 1;
+ description { state, "default" 0.0; visible, 1;
+ rel1 { relative, 1.0 0.0; offset, -19 0; }
+ rel2 { relative, 1.0 1.0; offset, 0 0; }
+ image { border, 0 18 12 12; normal, "bar_delay_right.png"; }
+ }
+}
+
+part { name, "base.files.clip"; type, RECT; mouse_events, 0;
+ description { state, "default" 0.0; visible, 1;
+ rel1 { relative, 0.5 0.0; offset, 5 -9; to_x, "base.dragable"; }
+ rel2 { relative, 1.0 1.0; offset, -18 8; }
+ color, 255 255 255 255;
+ }
+}
+
+VPANEL("files", "arrow_up.png", "arrow_up.png", 14, 14,
+ "arrow_down.png", "arrow_down.png", 14, 14,
+ "base.files.clip", 0.0 0.0, 0 0,
+ "base.files.clip", 1.0 1.0, 0 0,
+ "base.files.clip")
--- /dev/null
+#define BG "background"
+
+ part { name, BG; type, RECT;
+ description { state, "default" 0.0; color, 249 249 251 255; }
+ // Enable line bellow if you want to hilite your playlist entry
+ //description { state, "selected" 0.0; color, 225 222 229 255; }
+ description { state, "selected" 0.0; color, 249 249 251 255; } }
+//
+ part { name, "title"; type, TEXT; mouse_events, 1;
+ description { state, "default" 0.0; color, 31 31 55 128; max, 103 7;
+ rel1 { relative, 0.0 0.0; offset, 0 0; to, BG; }
+ rel2 { relative, 1.0 1.0; offset, -25 2; to, BG; }
+ text { text, "title"; font, "Edje.visitor1"; size, 9; align, 0.0 0.0; } }
+
+ description { state, "selected" 0.0; color, 31 31 55 255; max, 103 7;
+ rel1 { to, BG; relative, 0.0 0.0; offset, 0 0; }
+ rel2 { to, BG; relative, 1.0 1.0; offset, -25 2; }
+ text { text, "title"; font, "Edje.visitor1"; size, 9; align, 0.0 0.0; } } }
+//
+ part { name, "duration"; type, TEXT; mouse_events, 1;
+ description { state, "default" 0.0; color, 31 31 55 128;
+ text { text, "00:00"; font, "Edje.visitor1"; size, 9; align, 1.0 1.0; } }
+
+ description { state, "selected" 0.0; color, 31 31 55 255;
+ text { text, "00:00"; font, "Edje.visitor1"; size, 9; align, 1.0 1.0; } } }
--- /dev/null
+
+ part { name, "small_base"; type, IMAGE; mouse_events, 0;
+ description { state, "default" 0.0; max, 93 187; min, 93 187;
+ rel1 { relative, 0.0 0.0; offset, 0 0; }
+ rel2 { relative, 1.0 1.0; offset, 0 0; }
+ image { normal, "small_base.png"; }
+ border, 3 3 10 20; fill { smooth, 0; } } }
+//
+ part { name, "small_lcd"; type, IMAGE; mouse_events, 0;
+ description { state, "default" 0.0; max, 93 71; min, 93 71; align, 0.0 0.0;
+ rel1 { relative, 1.0 0.0; offset, 0 0; to, "small_base"; }
+ rel2 { relative, 1.0 1.0; offset, -1 0; to, "small_base"; }
+ image { normal, "small_lcd.png"; } }
+
+ description { state, "active" 0.0; max, 93 71; min, 93 71; align, 0.0 0.0;
+ rel1 { relative, 1.0 0.0; offset, 0 0; to, "small_base"; }
+ rel2 { relative, 1.0 1.0; offset, -1 0; to, "small_base"; }
+ image { normal, "small_lcd_active.png"; } } }
+//
+ part { name, "a_stop_b"; type, IMAGE; mouse_events, 0;
+ description { state, "default" 0.0; max, 89 25; min, 89 25; align, 0.0 0.0;
+ rel1 { relative, 1.0 1.0; offset, 0 0; to, "small_base"; }
+ rel2 { relative, 1.0 1.0; offset, -3 -2; to, "small_base"; }
+ image { normal, "s_b_stop.png"; } } }
+//
+ part { name, "a_prev_b"; type, IMAGE; mouse_events, 0;
+ description { state, "default" 0.0; max, 25 41; min, 25 41; align, 0.0 0.0;
+ rel1 { relative, 0.0 0.0; offset, -2 0; to, "a_stop_b"; }
+ rel2 { relative, 0.5 0.0; offset, 0 -1; to, "a_stop_b"; }
+ image { normal, "s_b_prev.png"; } } }
+//
+ part { name, "a_play_b"; type, IMAGE; mouse_events, 0;
+ description { state, "default" 0.0; max, 42 41; min, 42 41; align, 0.0 0.0;
+ rel1 { relative, 1.0 1.0; offset, 0 0; to, "a_prev_b"; }
+ rel2 { relative, 1.0 1.0; offset,42 -1; to, "a_prev_b"; }
+ image { normal, "s_b_play.png"; } } }
+//
+ part { name, "a_next_b"; type, IMAGE; mouse_events, 0;
+ description { state, "default" 0.0; max, 26 41; min, 26 41; align, 0.0 0.0;
+ rel1 { relative, 1.0 1.0; offset, 0 0; to, "a_play_b"; }
+ rel2 { relative, 1.0 1.0; offset,42 -1; to, "a_play_b"; }
+ image { normal, "s_b_next.png"; } } }
+//
+ part { name, "a_pause_b"; type, IMAGE; mouse_events, 0;
+ description { state, "default" 0.0; max, 93 25; min, 93 25; align, 0.0 0.0;
+ rel1 { relative, 1.0 0.0; offset, 0 0; to, "a_play_b"; }
+ rel2 { relative, 1.0 0.0; offset, 25 -1; to, "a_play_b"; }
+ image { normal, "s_b_pause.png"; } } }
+
+ part { name, "peak_analyzer_img"; type, IMAGE; clip_to, "peak_analyzer_clip";
+ description { state, "default" 0.0; max, 63 32; min, 63 32; align, 0.0 0.0;
+
+ rel1 { relative, 0.5 1.0; offset, 0 0; to, "small_lcd"; }
+ rel2 { relative, 1.0 1.0; offset, -16 -13; to, "small_lcd"; }
+
+ image { normal, "a_s_lcd_011.png"; } } }
+
+ part { name, "peak_analyzer_clip"; type, RECT;
+ description { state, "default" 0.0;
+
+ rel1 { relative, 0.0 0.0; to, "peak_analyzer"; }
+ rel2 { relative, 1.0 1.0; to, "peak_analyzer"; } } }
+
+ part { name, "peak_analyzer_trough"; type, RECT; repeat_events, 1;
+ description { state, "default" 0.0; color, 0 0 0 0;
+
+ rel1 { relative, 0.0 0.0; to, "peak_analyzer_img"; }
+ rel2 { relative, 1.0 1.0; to, "peak_analyzer_img"; offset, 0 32; } } }
+
+ part { name, "peak_analyzer"; type, RECT; mouse_events, 0;
+ dragable { x, 0 0 0; y, 1 1 0; confine, "peak_analyzer_trough"; }
+ description { state, "default" 0.0; color, 0 0 0 0; min, 1 1;
+
+ rel1 { relative, 0.0 0.0; to, "peak_analyzer_img"; }
+ rel2 { relative, 1.0 1.0; to, "peak_analyzer_img"; } } }
+//
+ part { name, "time_text"; type, TEXT; mouse_events, 0;
+ description { state, "default" 0.0;
+ rel1 { relative, 0.5 1.0; offset, -10 -3; to, "small_lcd"; }
+ rel2 { relative, 1.0 0.5; offset, 0 0; to, "small_lcd"; }
+ color, 31 31 55 255;
+ text { text, "0:00"; font, "Edje.visitor1"; size, 9; align, 0.0 0.0; } } }
+//
+ part { name, "_prev_button"; type, IMAGE; mouse_events, 1;
+ description { state, "default" 0.0; max, 13 39; min, 13 39;
+ rel1 { relative, 0.0 0.0; offset, 0 0; to, "a_prev_b"; }
+ rel2 { relative, 1.0 1.0; offset, 9 0; to, "a_prev_b"; }
+ image { normal, "previous_button.png"; } }
+
+ description { state, "hilited" 0.0; max, 13 39; min, 13 39;
+ rel1 { relative, 0.0 0.0; offset, 0 0; to, "a_prev_b"; }
+ rel2 { relative, 1.0 1.0; offset, 9 0; to, "a_prev_b"; }
+ image { normal, "previous_button_hilited.png"; } }
+
+ description { state, "clicked" 0.0; max, 13 39; min, 13 39;
+ rel1 { relative, 0.0 0.0; offset, 0 0; to, "a_prev_b"; }
+ rel2 { relative, 1.0 1.0; offset, 9 0; to, "a_prev_b"; }
+ image { normal, "previous_button_clicked.png"; } } }
+//
+ part { name, "_pause_button"; type, IMAGE; mouse_events, 1;
+ description { state, "default" 0.0; max, 39 12; min, 39 12;
+ rel1 { relative, 0.0 0.0; offset, 0 0; to, "a_pause_b"; }
+ rel2 { relative, 1.0 1.0; offset, 0 8; to, "a_pause_b"; }
+ image { normal, "pause_button.png"; } }
+
+ description { state, "hilited" 0.0; max, 39 12; min, 39 12;
+ rel1 { relative, 0.0 0.0; offset, 0 0; to, "a_pause_b"; }
+ rel2 { relative, 1.0 1.0; offset, 0 8; to, "a_pause_b"; }
+ image { normal, "pause_button_hilited.png"; } }
+
+ description { state, "clicked" 0.0; max, 39 12; min, 39 12;
+ rel1 { relative, 0.0 0.0; offset, 0 0; to, "a_pause_b"; }
+ rel2 { relative, 1.0 1.0; offset, 0 8; to, "a_pause_b"; }
+ image { normal, "pause_button_clicked.png"; } } }
+//
+ part { name, "_play_button"; type, IMAGE; mouse_events, 1;
+ description { state, "default" 0.0; max, 23 23; min, 23 23;
+ rel1 { relative, 0.0 0.0; offset, 0 0; to, "a_play_b"; }
+ rel2 { relative, 1.0 1.0; offset, 0 0; to, "a_play_b"; }
+ image { normal, "play_button.png"; }
+ border, 1 1 1 1; fill { smooth, 0; } }
+
+ description { state, "hilited" 0.0; max, 23 23; min, 23 23;
+ rel1 { relative, 0.0 0.0; offset, 0 0; to, "a_play_b"; }
+ rel2 { relative, 1.0 1.0; offset, 0 0; to, "a_play_b"; }
+ image { normal, "play_button_hilited.png"; }
+ border, 1 1 1 1;
+ fill { smooth, 1; } }
+
+ description { state, "clicked" 0.0; max, 23 23; min, 23 23;
+ rel1 { relative, 0.0 0.0; offset, 0 0; to, "a_play_b"; }
+ rel2 { relative, 1.0 1.0; offset, 0 0; to, "a_play_b"; }
+ image { normal, "play_button_clicked.png"; }
+ border, 1 1 1 1;
+ fill { smooth, 0; } } }
+//
+ part { name, "_next_button"; type, IMAGE; mouse_events, 1;
+ description { state, "default" 0.0; max, 13 39; min, 13 39;
+ rel1 { relative, 0.0 0.0; offset, 0 0; to, "a_next_b"; }
+ rel2 { relative, 1.0 1.0; offset, -9 0; to, "a_next_b"; }
+ image { normal, "next_button.png"; } }
+
+ description { state, "hilited" 0.0; max, 13 39; min, 13 39;
+ rel1 { relative, 0.0 0.0; offset, 0 0; to, "a_next_b"; }
+ rel2 { relative, 1.0 1.0; offset, -9 0; to, "a_next_b"; }
+ image { normal, "next_button_hilited.png"; } }
+
+ description { state, "clicked" 0.0; max, 13 39; min, 13 39;
+ rel1 { relative, 0.0 0.0; offset, 0 0; to, "a_next_b"; }
+ rel2 { relative, 1.0 1.0; offset, -9 0; to, "a_next_b"; }
+ image { normal, "next_button_clicked.png"; } } }
+//
+ part { name, "_stop_button"; type, IMAGE; mouse_events, 1;
+ description { state, "default" 0.0; max, 39 13; min, 39 13;
+ rel1 { relative, 0.0 0.0; offset, 0 0; to, "a_stop_b"; }
+ rel2 { relative, 1.0 1.0; offset, 0 -8; to, "a_stop_b"; }
+ image { normal, "stop_button.png"; } }
+
+ description { state, "hilited" 0.0; max, 39 13; min, 39 13;
+ rel1 { relative, 0.0 0.0; offset, 0 0; to, "a_stop_b"; }
+ rel2 { relative, 1.0 1.0; offset, 0 -8; to, "a_stop_b"; }
+ image { normal, "stop_button_hilited.png"; } }
+
+ description { state, "clicked" 0.0; max, 39 13; min, 39 13;
+ rel1 { relative, 0.0 0.0; offset, 0 0; to, "a_stop_b"; }
+ rel2 { relative, 1.0 1.0; offset, 0 -8; to, "a_stop_b"; }
+ image { normal, "stop_button_clicked.png"; } } }
+//
+ part { name, "sw_base"; type, IMAGE; mouse_events, 1;
+ description { state, "default" 0.0; max, 13 27; min, 13 27; align, 0.0 0.0;
+ rel1 { relative, 0.5 1.0; offset, 0 0; to, "small_base"; }
+ rel2 { relative, 0.0 0.5; offset, 12 3; to, "small_base"; }
+ image { normal, "switch_mode.png"; } }
+
+ description { state, "hilited" 0.0; max, 13 27; min, 13 27; align, 0.0 0.0;
+ rel1 { relative, 0.5 1.0; offset, 0 0; to, "small_base"; }
+ rel2 { relative, 0.0 0.5; offset, 12 3; to, "small_base"; }
+ image { normal, "switch_mode_hilited.png"; } }
+
+ description { state, "clicked" 0.0; max, 13 27; min, 13 27; align, 0.0 0.0;
+ rel1 { relative, 0.5 1.0; offset, 0 0; to, "small_base"; }
+ rel2 { relative, 0.0 0.5; offset, 12 3; to, "small_base"; }
+ image { normal, "switch_mode_clicked.png"; } } }
+//
+ part { name, "_quit"; type, IMAGE; mouse_events, 1;
+ description { state, "default" 0.0; max, 22 22; min, 22 22;
+ rel1 { relative, 1.0 0.3; offset, 0 10; to, "small_base"; }
+ rel2 { relative, 0.5 0.5; offset, 13 3; to, "small_base"; }
+ image { normal, "close_mode_button_normal.png"; } }
+
+ description { state, "hilited" 0.0; max, 22 22; min, 22 22;
+ rel1 { relative, 1.0 0.3; offset, 0 10; to, "small_base"; }
+ rel2 { relative, 0.5 0.5; offset, 13 3; to, "small_base"; }
+ image { normal, "close_mode_button_hilited.png"; } }
+
+ description { state, "clicked" 0.0; max, 22 22; min, 22 22;
+ rel1 { relative, 1.0 0.3; offset, 0 10; to, "small_base"; }
+ rel2 { relative, 0.5 0.5; offset, 13 3; to, "small_base"; }
+ image { normal, "close_mode_button_clicked.png"; } } }
+//
+ part { name, "strans_Rect"; type, RECT; mouse_events, 0;
+ description { state, "default" 0.0;
+ color, 252 252 254 255;
+ min, 47 20; max, 47 20;
+ rel1 { relative, 0.5 0.5; offset, 0 15; to, "small_lcd"; }
+ rel2 { relative, 0.5 0.0; offset, 0 1; to, "small_lcd"; } }
+
+ description { state, "active" 0.0;
+ color, 243 243 249 255;
+ min, 47 20; max, 47 20;
+ rel1 { relative, 0.5 0.5; offset, 0 15; to, "small_lcd"; }
+ rel2 { relative, 0.5 0.0; offset, 0 1; to, "small_lcd"; } } }
+//
+ part { name, "song_name"; type, TEXT; mouse_events, 0;
+ description { state, "default" 0.0;
+ rel1 { relative, 0.10 0.6; offset, 0 0; to, "strans_Rect"; }
+ rel2 { relative, 1.0 0.0; offset, 0 0; to, "strans_Rect"; }
+ color, 31 31 55 255;
+ text { text, "song"; font, "Edje.visitor1"; size, 9; align, 0.0 0.0; } } }
--- /dev/null
+
+font, "visitor1.ttf" "Edje.visitor1";
--- /dev/null
+______________________________\r
+Visitor Created by Brian Kent\r
+¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯\r
+\r
+Thanks for Downloading Visitor.\r
+\r
+-Visitor TT1 [.ttf]\r
+-Visitor TT2 [.ttf]\r
+-Visitor [7pt] [.fon]\r
+\r
+ 'Visitor.fon' is a Windows Bitmap Font (.fon). This font is best\r
+used at 7pt. To use it at larger point sizes (for images), try using\r
+a graphics program like Photo Shop, Paint Shop Pro, or the Paint\r
+program that comes with Windows. Type out your text at the recommended\r
+point size [7pt], then resize the image. Set the color mode to 256\r
+or 2 colors so the edges don't get blured when resizing, then after you\r
+have the text to the size that you want, then change back to a higher\r
+color mode and edit the image.\r
+\r
+ For programs that don't show Bitmap Fonts in the Font Selector, you\r
+may be able to get the font to work by typing in:\r
+visitor -brk-\r
+\r
+ The TTF versions were created different ways. TT1 was created from\r
+within FontLab and TT2 was created in Illustrator then imported into\r
+FontLab. I didn't know which one to include so I just included both.\r
+\r
+\r
+If you have any questions or comments, you can e-mail me at\r
+kentpw@norwich.net\r
+\r
+You can visit my Homepage <ÆNIGMA GAMES & FONTS> at\r
+http://www.aenigmafonts.com/\r
+\r
+____________\r
+!!! NOTE !!!\r
+¯¯¯¯¯¯¯¯¯¯¯¯\r
+This font has been updated! I've edited the (BRK) in the font name\r
+to just BRK. It seems that Adobe Illustrator and web pages with CSS\r
+don't like fonts with ( and ) in their name.\r
+\r
+________________\r
+INSTALLING FONTS\r
+¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯\r
+ There's a couple of ways to install Fonts. The 'easy' way to\r
+install fonts is to just Unzip/place the font file(s) into your\r
+Windows\Fonts directory (I always use this method). If you're unable\r
+to do it the 'easy' way, then try to do it this way (for Windows\r
+95/98/NT):\r
+\r
+1] Unzip the Font(s) to a folder (or somewhere, just remember where\r
+you unzipped it) on your Computer.\r
+\r
+2] Next, click on the START button, then select SETTINGS then\r
+CONTROL PANEL.\r
+\r
+3] When the Control Panel Window pops up, Double Click on FONTS.\r
+\r
+4] When the FONTS window pops up, select File then Install New Font...\r
+\r
+5] A Add Fonts window will pop up, just go to the folder that you\r
+unzipped the Font(s) to, select the Font(s) and then click on OK.\r
+Now the Font(s) are installed.\r
+\r
+ Now you can use the Font(s) in programs the utilize Fonts. Make\r
+sure that you install the font(s) first, then open up your apps\r
+(so the app will recognize the font). Sometimes you'll have to\r
+wait until you computer 'auto-refreshes' for programs to recognize\r
+fonts (Windows is sometimes slow to do that). You can refresh your\r
+computer quicker by going into Windows Explorer -or- My Computer and\r
+press F5 (or in the menubar select VIEW then REFRESH).\r
+\r
+\r
+__________\r
+DISCLAIMER\r
+¯¯¯¯¯¯¯¯¯¯\r
+-The font(s) in this zip file were created by me (Brian Kent). All\r
+of my Fonts are Freeware, you can use them any way you want to\r
+(Personal use, Commercial use, or whatever).\r
+\r
+-If you have a Font related site and would like to offer my fonts on\r
+your site, go right ahead. All I ask is that you keep this text file\r
+intact with the Font.\r
+\r
+-You may not Sell or Distribute my Fonts for profit or alter them in\r
+any way without asking me first. [e-mail - kentpw@norwich.net]
\ No newline at end of file
--- /dev/null
+ /* boxtype, app id, container layout */
+ item, "e,fd,container,files,direction" "vertical";
+ item, "e,fd,container,directory,direction" "vertical";
+
+ item, "e,fd,container,files,dragbar" "files_scrollbar";
+ item, "e,fd,container,directory,dragbar" "directory_scrollbar";
+
+ item, "e,fd,container,files" "files_list";
+ item, "e,fd,container,directory" "directory_list";
+
+ item, "e,fd,container,scrollbar,scroll,files" "files_list";
+ item, "e,fd,container,scrollbar,scroll,directory" "directory_list";
+
+ /* unused :( */
+ item, "e,fd,container,files,spacing" "4";
+ item, "e,fd,container,directory,spacing" "4";
--- /dev/null
+ item, "e,fd,window,type" "shaped";
+ //item, "e,fd,window,type" "borderless";
+ //item, "e,fd,window,type" "trans";
--- /dev/null
+#include "../common.inc"
+
+#include "macros/vpanel.edc"
+#include "macros/fd_entity.edc"
+
+#define RIGHT "right-"
+#define LEFT "left-"
+
+ images {
+#include "img/images.edc"
+ }
+
+ fonts {
+#include "fonts/fonts.edc"
+ }
+
+// author: tokyo
+// esmart.filedialog by atmos
+// iio for euphoria
+// various fixed by trill
+
+ collections {
+ group { name, "euphoria"; min, 413 94; max, 413 94;
+
+ data {
+ item, "shaped" "you bet";
+ }
+
+ script {
+ public message (Msg_Type:type, id, ...)
+ {
+ switch (id) {
+ case MSG_ID_SET_SONGNAME: {
+ new buf[128];
+
+ if (type != MSG_STRING_SET || numargs () < 5)
+ return;
+
+ getsarg (2, buf, 128);
+ set_text (PART:"artist_name", buf);
+
+ getsarg (3, buf, 128);
+ set_text (PART:"song_name", buf);
+
+ getsarg (4, buf, 128);
+ set_text (PART:"album_name", buf);
+ }
+ }
+ }
+ }
+
+ parts {
+#include "collections/base_to.edc"
+ }
+ programs {
+#include "programs/controls_to.edc"
+ }
+ }
+
+ group { name, "playlist_item"; min, 122 9; max, 122 9;
+ parts {
+#include "collections/playlist.edc"
+ }
+ programs {
+#include "programs/playlist.edc"
+ }
+ }
+/*
+ group { name, "alternate"; min, 93 187; max, 93 187;
+ parts {
+#include "collections/switch.edc"
+ }
+ programs {
+#include "programs/switch.edc"
+ }
+ }
+*/
+group { name, "esmart.filedialog"; min, 413 188; max, 413 9999;
+ data {
+#include "hashes/containers.edc"
+#include "hashes/window.edc"
+ }
+
+ parts {
+#include "collections/esmart_fd.edc"
+ }
+ programs {
+#include "programs/esmart_fd.edc"
+ }
+ }
+ group { name, "esmart.filedialog.file"; min, 80 15; max, 800 15;
+ parts {
+ FD_ENTITY("file", 1.0 0.5)
+ }
+ programs {
+ FD_ENTITY_PROGS("file")
+ }
+ }
+ group { name, "esmart.filedialog.directory"; min, 80 15; max, 800 15;
+ parts {
+ FD_ENTITY("directory", 0.0 0.5)
+ }
+ programs {
+ FD_ENTITY_DIRECTORY_PROGS("directory")
+ }
+ }
+}
--- /dev/null
+// Syntax: images { image "name" COMPRESSION_TYPE; }
+
+ image, "seeker_bar.png" RAW;
+ image, "seeker_trough.png" RAW;
+ image, "small_base.png" LOSSY 98;
+ image, "small_lcd.png" LOSSY 98;
+ image, "small_lcd_active.png" LOSSY 98;
+ image, "base_layer.png" LOSSY 98;
+ image, "lcd_window.png" LOSSY 98;
+ image, "bullet.png" LOSSY 98;
+ image, "h_arrow.png" LOSSY 98;
+ image, "s_b_pause.png" RAW;
+ image, "s_b_prev.png" RAW;
+ image, "s_b_play.png" RAW;
+ image, "s_b_next.png" RAW;
+ image, "s_b_stop.png" RAW;
+ /* unused
+ image, "a_s_lcd.png" LOSSY 98;
+ image, "a_s_lcd_01.png" LOSSY 98;
+ image, "a_s_lcd_02.png" LOSSY 98;
+ image, "a_s_lcd_03.png" LOSSY 98;
+ image, "a_s_lcd_04.png" LOSSY 98;
+ image, "a_s_lcd_05.png" LOSSY 98;
+ image, "a_s_lcd_06.png" LOSSY 98;
+ image, "a_s_lcd_07.png" LOSSY 98;
+ image, "a_s_lcd_08.png" LOSSY 98;
+ image, "a_s_lcd_09.png" LOSSY 98;
+ image, "a_s_lcd_010.png" LOSSY 98;*/
+ image, "a_s_lcd_011.png" LOSSY 98;
+ /* unused
+ image, "a_s_lcd_0112.png" LOSSY 98;
+ image, "a_s_lcd_0113.png" LOSSY 98;
+ image, "a_s_lcd_0114.png" LOSSY 98;
+ image, "a_s_lcd_0115.png" LOSSY 98;
+ image, "a_s_lcd_0116.png" LOSSY 98;
+ image, "a_s_lcd_0117.png" LOSSY 98;
+ image, "a_s_lcd_0118.png" LOSSY 98;
+ image, "a_s_lcd_0119.png" LOSSY 98;
+ image, "a_s_lcd_0120.png" LOSSY 98;
+ image, "a_s_lcd_0121.png" LOSSY 98;
+ image, "a_s_lcd_0122.png" LOSSY 98;
+ image, "a_s_lcd_0123.png" LOSSY 98;
+ image, "a_s_lcd_0124.png" LOSSY 98;
+ image, "a_s_lcd_0125.png" LOSSY 98;
+ image, "a_s_lcd_0126.png" LOSSY 98;
+ image, "a_s_lcd_0127.png" LOSSY 98;
+ image, "a_s_lcd_0128.png" LOSSY 98;
+ image, "a_s_lcd_0129.png" LOSSY 98;
+ image, "a_s_lcd_0130.png" LOSSY 98;
+ image, "a_s_lcd_0131.png" LOSSY 98;
+ image, "a_s_lcd_0132.png" LOSSY 98;
+ image, "a_s_lcd_0133.png" LOSSY 98;*/
+ image, "bar_delay_left.png" LOSSY 98;
+ image, "bar_delay_right.png" LOSSY 98;
+ image, "align_top.png" LOSSY 98;
+ image, "align_left.png" LOSSY 98;
+ image, "align_center.png" LOSSY 98;
+ image, "align_right.png" LOSSY 98;
+ image, "align_bottom.png" LOSSY 98;
+ image, "previous_button.png" RAW;
+ image, "previous_button_hilited.png" RAW;
+ image, "previous_button_clicked.png" RAW;
+ image, "pause_button.png" RAW;
+ image, "pause_button_hilited.png" RAW;
+ image, "pause_button_clicked.png" RAW;
+ image, "play_button.png" RAW;
+ image, "play_button_hilited.png" RAW;
+ image, "play_button_clicked.png" RAW;
+ image, "next_button.png" RAW;
+ image, "next_button_hilited.png" RAW;
+ image, "next_button_clicked.png" RAW;
+ image, "stop_button.png" RAW;
+ image, "stop_button_hilited.png" RAW;
+ image, "stop_button_clicked.png" RAW;
+ image, "switch_mode.png" LOSSY 98;
+ image, "switch_mode_hilited.png" LOSSY 98;
+ image, "switch_mode_clicked.png" LOSSY 98;
+ image, "close_mode_button_normal.png" LOSSY 98;
+ image, "close_mode_button_hilited.png" LOSSY 98;
+ image, "close_mode_button_clicked.png" LOSSY 98;
+ image, "close_button.png" LOSSY 98;
+ image, "close_button_hilited.png" LOSSY 98;
+ image, "close_button_clicked.png" LOSSY 98;
+ image, "switch_button.png" LOSSY 98;
+ image, "switch_button_hilited.png" LOSSY 98;
+ image, "switch_button_clicked.png" LOSSY 98;
+ image, "add_track.png" LOSSY 98;
+ image, "add_track_hilited.png" LOSSY 98;
+ image, "add_track_clicked.png" LOSSY 98;
+ image, "delete_track.png" LOSSY 98;
+ image, "delete_track_hilited.png" LOSSY 98;
+ image, "delete_track_clicked.png" LOSSY 98;
+ image, "edit_track.png" LOSSY 98;
+ image, "edit_track_hilited.png" LOSSY 98;
+ image, "edit_track_clicked.png" LOSSY 98;
+ image, "arrow_up.png" LOSSY 98;
+ image, "arrow_down.png" LOSSY 98;
+ image, "v_scrollbar.png" LOSSY 98;
+ image, "v_scrollbar_base.png" LOSSY 98;
+
+
--- /dev/null
+#define FD_ENTITY(pname, talign) \
+part { name, pname".name"; type, TEXT; mouse_events, 0; effect, NONE; \
+ description { \
+ state, "default" 0.0; visible, 1; \
+ rel1 { relative, 0.0 0.0; offset, 5 0; } \
+ rel2 { relative, 1.0 1.0; offset, -5 0; } \
+ color, 150 150 160 255; text {text,"";font,"Edje.visitor1"; \
+ size, 9; align, talign; fit, 0 0; } } \
+ description { \
+ state, "hilited" 0.0; visible, 1; \
+ rel1 { relative, 0.0 0.0; offset, 5 0; } \
+ rel2 { relative, 1.0 1.0; offset, -5 0; } \
+ color, 31 31 55 255; \
+ text {text,"";font,"Edje.visitor1"; size, 9; align, talign; fit, 0 0; } } \
+ } \
+part { name, "base"; type, RECT; mouse_events, 1; repeat_events, 1; \
+ description { state, "default" 0.0; visible, 1; \
+ rel1 { relative, 0.0 0.0; offset, 0 0; } \
+ rel2 { relative, 1.0 1.0; offset, 0 0; } \
+ color, 255 255 255 0; } \
+ description { state, "hilited" 0.0; visible, 1; \
+ rel1 { relative, 0.0 0.0; offset, 0 0; } \
+ rel2 { relative, 1.0 1.0; offset, 0 0; } \
+ color, 100 100 100 0; } }
+#define FD_ENTITY_PROGS(pname) \
+program { name, pname"_fd_right_clicked"; signal, "mouse,clicked,3"; \
+ source, "base"; action, SIGNAL_EMIT "e,fd,"pname",unselected" ""; } \
+program { name, pname"_fd_double_clicked"; signal, "mouse,down,1,double"; \
+ source, "base"; action, SIGNAL_EMIT "e,fd,"pname",load" ""; } \
+program { name, pname"_fd_clicked_kill"; signal, "mouse,down,1,double"; \
+ source, "base"; action, ACTION_STOP; target, pname"_fd_clicked"; } \
+program { name, pname"_fd_clicked"; signal, "mouse,down,1"; \
+ source, "base"; action, SIGNAL_EMIT "e,fd,"pname",selected" ""; \
+ in, 0.25 0.0; } \
+program { name, pname"_file_mouse_in_stop"; signal, "mouse,in"; \
+ source, "base"; action, ACTION_STOP; target, pname"_file_mouse_out"; } \
+program { name, pname"_file_mouse_in_start"; signal, "mouse,in"; \
+ source, "base"; action, STATE_SET "hilited" 0.0; target, "base"; \
+ target, pname".name"; transition, ACCELERATE 0.25; } \
+program { name, pname"_file_mouse_out"; signal, "mouse,out"; \
+ source, "base"; action, STATE_SET "default" 0.0; target, "base"; \
+ target, pname".name"; transition, DECELERATE 0.25; in, 0.25 0.0; }
+#define FD_ENTITY_DIRECTORY_PROGS(pname) \
+program { name, pname"_fd_dir_triple_clicked"; signal, "mouse,down,1,triple"; \
+ source, "base"; action, SIGNAL_EMIT "e,fd,"pname",load,recursive" ""; } \
+program { name, pname"_fd_dir_double_clicked_kill"; \
+ signal, "mouse,down,1,triple"; source, "base"; \
+ action, ACTION_STOP; target, pname"_fd_dir_double_clicked"; \
+ target, pname"_fd_dir_clicked"; } \
+program { name, pname"_fd_dir_right_clicked"; signal, "mouse,clicked,3"; \
+ source, "base"; action, SIGNAL_EMIT "e,fd,"pname",unselected" ""; } \
+program { name, pname"_fd_dir_double_clicked"; signal, "mouse,down,1,double"; \
+ source, "base"; action, SIGNAL_EMIT "e,fd,"pname",load" ""; in, 0.25 0.0; } \
+program { name, pname"_fd_dir_clicked_kill"; \
+ signal, "mouse,down,1,double"; source, "base"; \
+ action, ACTION_STOP; target, pname"_fd_dir_clicked"; } \
+program { name, pname"_fd_dir_clicked"; signal, "mouse,down,1"; \
+ source, "base"; action, SIGNAL_EMIT "e,fd,"pname",selected" ""; \
+ in, 0.25 0.0; } \
+program { name, pname"_file_dir_mouse_in_stop"; signal, "mouse,in"; \
+ source, "base"; action, ACTION_STOP; target, pname"_file_dir_mouse_out"; } \
+program { name, pname"_file_dir_mouse_in_start"; signal, "mouse,in"; \
+ source, "base"; action, STATE_SET "hilited" 0.0; target, "base"; \
+ target, pname".name"; transition, ACCELERATE 0.25; } \
+program { name, pname"_file_dir_mouse_out"; signal, "mouse,out"; \
+ source, "base"; action, STATE_SET "default" 0.0; target, "base"; \
+ target, pname".name"; transition, DECELERATE 0.25; in, 0.25 0.0; }
--- /dev/null
+#define V_PREV_REL(NAME) \
+ rel1 { to, NAME"_scrollbar_trough_img"; relative, 0.5 0.0; offset, -7 -14; } \
+ rel2 { to, NAME"_scrollbar_trough_img"; relative, 0.5 0.0; offset, 7 0; }
+#define V_NEXT_REL(NAME) \
+ rel1 { to, NAME"_scrollbar_trough_img"; relative, 0.0 1.0; offset, -7 0; } \
+ rel2 { to, NAME"_scrollbar_trough_img"; relative, 1.0 1.0; offset, 7 14; }
+#define VPANEL(NAME, BIMG, BIMG2, BW, BH, NIMG, NIMG2, NW, NH, REL1_TO, \
+ REL1_REL, REL1_OFF, REL2_TO, REL2_REL, REL2_OFF, CLIPTO) \
+ part { \
+ name, NAME"_rect"; \
+ clip_to, CLIPTO; \
+ type, RECT; \
+ mouse_events, 0; \
+ description { \
+ state, "default" 0.0; \
+ color, 255 0 0 0; \
+ rel1 { \
+ to, REL1_TO; \
+ relative, REL1_REL; \
+ offset, REL1_OFF; \
+ } \
+ rel2 { \
+ to, REL2_TO; \
+ relative, REL2_REL; \
+ offset, REL2_OFF; \
+ } \
+ } \
+ } \
+ part { \
+ name, NAME"_list_border"; \
+ clip_to, CLIPTO; \
+ type, IMAGE; \
+ repeat_events, 1; \
+ description { \
+ state, "default" 0.0; \
+ rel1 { \
+ to, NAME"_rect"; \
+ relative, 0.0 0.0; \
+ offset, 3 9; \
+ } \
+ rel2 { \
+ to, NAME"_rect"; \
+ relative, 1.0 1.0; \
+ offset, -3 -10; \
+ } \
+ image { \
+ normal, "lcd_window.png"; \
+ border, 9 9 14 10; \
+ } \
+ } \
+ } \
+ part { \
+ name, NAME"_scrollbar_trough_img"; \
+ clip_to, CLIPTO; \
+ type, IMAGE; \
+ mouse_events, 0; \
+ description { \
+ state, "default" 0.0; \
+ color, 255 255 255 255; \
+ rel1 { \
+ to, NAME"_rect"; \
+ relative, 1.0 0.0; \
+ offset, -25 45; \
+ } \
+ rel2 { \
+ to, NAME"_rect"; \
+ relative, 1.0 1.0; \
+ offset, -14 -45; \
+ } \
+ image { \
+ normal, "v_scrollbar_base.png"; \
+ border, 6 6 20 20; \
+ } \
+ } \
+ } \
+ part { \
+ name, NAME"_scrollbar_trough"; \
+ clip_to, CLIPTO; \
+ type, RECT; \
+ mouse_events, 1; \
+ description { \
+ state, "default" 0.0; \
+ color, 192 192 192 0; \
+ rel1 { \
+ to, NAME"_scrollbar_trough_img"; \
+ relative, 0.0 0.0; \
+ offset, 0 0; \
+ } \
+ rel2 { \
+ to, NAME"_scrollbar_trough_img"; \
+ relative, 1.0 1.0; \
+ offset, 0 0; \
+ } \
+ } \
+ } \
+ part { \
+ name, NAME"_scrollbar"; \
+ clip_to, CLIPTO; \
+ type, IMAGE; \
+ mouse_events, 1; \
+ dragable { \
+ x, 0 0 0; \
+ y, 1 1 0; \
+ confine, NAME"_scrollbar_trough"; \
+ } \
+ description { \
+ state, "default" 0.0; \
+ min, 11 35; \
+ align, 0.5 0.5; \
+ rel1 { \
+ relative, 0.5 0.0; \
+ offset, 0 0; \
+ to, NAME"_scrollbar_trough";\
+ } \
+ rel2 { \
+ relative, 0.5 0.0; \
+ offset, 0 35; \
+ to, NAME"_scrollbar_trough";\
+ } \
+ image { \
+ normal, "v_scrollbar.png"; \
+ } \
+ } \
+ description { \
+ state, "down" 0.0; \
+ min, 11 35; \
+ rel1 { \
+ relative, 0.5 0.0; \
+ offset, 0 0; \
+ to, NAME"_scrollbar_trough";\
+ } \
+ rel2 { \
+ relative, 0.5 0.0; \
+ offset, 0 35; \
+ to, NAME"_scrollbar_trough";\
+ } \
+ image { \
+ normal, "v_scrollbar.png"; \
+ } \
+ color, 255 255 255 127; \
+ } \
+ } \
+ part { \
+ name, NAME"_back"; \
+ clip_to, CLIPTO; \
+ description { \
+ state, "default" 0.0; \
+ min, BW BH; \
+ max, BW BH; \
+ color, 255 255 255 127; \
+ V_PREV_REL(NAME) \
+ image { \
+ normal, BIMG; \
+ } \
+ } \
+ description { \
+ state, "over" 0.0; \
+ min, BW BH; \
+ max, BW BH; \
+ color, 255 255 255 255; \
+ V_PREV_REL(NAME) \
+ image { \
+ normal, BIMG; \
+ } \
+ } \
+ description { \
+ state, "down" 0.0; \
+ min, BW BH; \
+ max, BW BH; \
+ color, 255 255 255 255; \
+ V_PREV_REL(NAME) \
+ image { \
+ normal, BIMG2; \
+ } \
+ } \
+ } \
+ part { \
+ name, NAME"_next"; \
+ clip_to, CLIPTO; \
+ description { \
+ state, "default" 0.0; \
+ min, NW NH; \
+ max, NW NH; \
+ color, 255 255 255 127; \
+ V_NEXT_REL(NAME) \
+ image { \
+ normal, NIMG; \
+ } \
+ } \
+ description { \
+ state, "over" 0.0; \
+ min, NW NH; \
+ max, NW NH; \
+ color, 255 255 255 255; \
+ V_NEXT_REL(NAME) \
+ image { \
+ normal, NIMG; \
+ } \
+ } \
+ description { \
+ state, "down" 0.0; \
+ min, NW NH; \
+ max, NW NH; \
+ color, 255 255 255 255; \
+ V_NEXT_REL(NAME) \
+ image { \
+ normal, NIMG2; \
+ } \
+ } \
+ } \
+ part { \
+ name, NAME"_list"; \
+ clip_to, NAME"_list_clip"; \
+ type, RECT; \
+ mouse_events, 0; \
+ description { \
+ state, "default" 0.0; \
+ color, 255 0 0 0; \
+ rel1 { \
+ to, NAME"_rect"; \
+ relative, 0.0 0.0; \
+ offset, 15 30; \
+ } \
+ rel2 { \
+ to, NAME"_rect"; \
+ relative, 1.0 1.0; \
+ offset, -30 -30; \
+ } \
+ } \
+ } \
+ part { \
+ name, NAME"_list_clip"; \
+ clip_to, CLIPTO; \
+ type, RECT; \
+ description { \
+ state, "default" 0.0; \
+ color, 255 255 255 255; \
+ rel1 { \
+ to, NAME"_rect"; \
+ relative, 0.0 0.0; \
+ offset, 5 10; \
+ } \
+ rel2 { \
+ to, NAME"_rect"; \
+ relative, 1.0 1.0; \
+ offset, -15 -10; \
+ } \
+ } \
+ } \
+ part { \
+ name, NAME"_wheel_rect"; \
+ clip_to, CLIPTO; \
+ type, RECT; \
+ mouse_events, 1; \
+ repeat_events, 1; \
+ description { \
+ state, "default" 0.0; \
+ color, 255 0 0 0; \
+ rel1 { \
+ to, REL1_TO; \
+ relative, REL1_REL; \
+ offset, REL1_OFF; \
+ } \
+ rel2 { \
+ to, REL2_TO; \
+ relative, REL2_REL; \
+ offset, REL2_OFF; \
+ } \
+ } \
+ }
+
+#define STEP_TIME 0.31
+#define SCROLL_TIME 0.3
+
+#define VPANEL_PROG(NAME, SIGBACK, SIGNEXT, SIGDRAG) \
+ program { \
+ name, NAME"_back-in"; \
+ signal, "mouse,in"; \
+ source, NAME"_back"; \
+ action, STATE_SET "over" 0.0; \
+ transition, DECELERATE 0.5; \
+ target, NAME"_back"; \
+ } \
+ program { \
+ name, NAME"_back-out"; \
+ signal, "mouse,out"; \
+ source, NAME"_back"; \
+ action, STATE_SET "default" 0.0;\
+ transition, DECELERATE 0.5; \
+ target, NAME"_back"; \
+ } \
+ program { \
+ name, NAME"_back-down-1"; \
+ signal, "mouse,clicked,1"; \
+ source, NAME"_back"; \
+ action, DRAG_VAL_STEP -0.1 -0.1;\
+ target, NAME"_scrollbar"; \
+ } \
+ program { \
+ name, NAME"_back-down-2"; \
+ signal, "mouse,clicked,1"; \
+ source, NAME"_back"; \
+ action, SIGNAL_EMIT SIGDRAG NAME"_scrollbar"; \
+ } \
+ program { \
+ name, NAME"_next-in"; \
+ signal, "mouse,in"; \
+ source, NAME"_next"; \
+ action, STATE_SET "over" 0.0; \
+ transition, DECELERATE 0.5; \
+ target, NAME"_next"; \
+ } \
+ program { \
+ name, NAME"_next-out"; \
+ signal, "mouse,out"; \
+ source, NAME"_next"; \
+ action, STATE_SET "default" 0.0;\
+ transition, DECELERATE 0.5; \
+ target, NAME"_next"; \
+ } \
+ program { \
+ name, NAME"_next-down-1"; \
+ signal, "mouse,clicked,1"; \
+ source, NAME"_next"; \
+ action, DRAG_VAL_STEP 0.0 0.1; \
+ target, NAME"_scrollbar"; \
+ } \
+ program { \
+ name, NAME"_next-down-2"; \
+ signal, "mouse,clicked,1"; \
+ source, NAME"_next"; \
+ action, SIGNAL_EMIT SIGDRAG NAME"_scrollbar"; \
+ } \
+ program { \
+ name, NAME"_scrollbar_move"; \
+ signal, "drag"; \
+ source, NAME"_scrollbar"; \
+ action, SIGNAL_EMIT SIGDRAG NAME"_scrollbar"; \
+ } \
+ program { \
+ name, NAME"_scrollbar_mouse_up";\
+ signal, "mouse,up,1"; \
+ source, NAME"_scrollbar"; \
+ action, STATE_SET "default" 0.0;\
+ transition, DECELERATE 0.25; \
+ target, NAME"_scrollbar"; \
+ } \
+ program { \
+ name, NAME"_scrollbar_mouse_down"; \
+ signal, "mouse,down,1"; \
+ source, NAME"_scrollbar"; \
+ action, STATE_SET "down" 0.0; \
+ transition, ACCELERATE 0.25; \
+ target, NAME"_scrollbar"; \
+ } \
+ program { \
+ name, NAME"_scrollbar_show"; \
+ signal, "show"; \
+ source, ""; \
+ action, DRAG_VAL_SET 0.0 0.0; \
+ target, NAME"_scrollbar"; \
+ } \
+ program { \
+ name, NAME"_scrollbar_mouse_wheel_up"; \
+ signal, "mouse,wheel,0,-1"; \
+ source, NAME"_wheel_rect"; \
+ action, DRAG_VAL_STEP -0.1 -0.1;\
+ target, NAME"_scrollbar"; \
+ } \
+ program { \
+ name, NAME"_scrollbar_mouse_wheel_down"; \
+ signal, "mouse,wheel,0,1"; \
+ source, NAME"_wheel_rect"; \
+ action, DRAG_VAL_STEP 0.1 0.1;\
+ target, NAME"_scrollbar"; \
+ } \
+ program { \
+ name, NAME"_scrollbar_mouse_wheel"; \
+ signal, "mouse,wheel,*"; \
+ source, NAME"_wheel_rect"; \
+ action, SIGNAL_EMIT SIGDRAG NAME"_scrollbar"; \
+ }
+/*
+ program { \
+ name, NAME"_back-down_timer"; \
+ signal, "mouse,down,1"; \
+ source, NAME"_back"; \
+ action, SIGNAL_EMIT SIGBACK",start" NAME"_back"; \
+ in, SCROLL_TIME 0.0; \
+ } \
+ program { \
+ name, NAME"_next-down_timer"; \
+ signal, "mouse,down,1"; \
+ source, NAME"_next"; \
+ action, SIGNAL_EMIT SIGNEXT",start" NAME"_next"; \
+ in, SCROLL_TIME 0.0; \
+ } \
+ program { \
+ name, NAME"_back-up_timer"; \
+ signal, "mouse,up,1"; \
+ source, NAME"_back"; \
+ action, SIGNAL_EMIT SIGBACK",stop" NAME"_back"; \
+ } \
+ program { \
+ name, NAME"_next-up_timer"; \
+ signal, "mouse,up,1"; \
+ source, NAME"_next"; \
+ action, SIGNAL_EMIT SIGNEXT",stop" NAME"_next"; \
+ } \
+*/
--- /dev/null
+program {
+ name, "titlebar_click"; signal, "mouse,clicked,*"; source, BASE;
+ action, SIGNAL_EMIT "RAISE" BASE; }
+program {
+ name, "rslider_bar_click"; signal, "mouse,clicked,*"; source, "CenterClipArea";
+ action, SIGNAL_EMIT "RAISE" "CenterClipArea"; }
+
+#define PB "PLAYBACK_STATE_"
+///////////////////////////////////////////////////////////////////////
+// slides
+/*
+program { name, "hide_Lpanel"; signal, "mouse,clicked,*"; source, LEFT"border";
+ action, STATE_SET "slide" 0.0; transition, DECELERATE, 0.5;
+ target, LEFT"border"; target, LEFT"border-slide"; target, LEFT"lcd";
+ target, "trans_Rect";
+}
+
+program { name, "show_Lpanel"; signal, "mouse,clicked,*"; source, LEFT"border-slide";
+ action, STATE_SET "default" 0.0; transition, DECELERATE, 0.5;
+ target, LEFT"border"; target, LEFT"border-slide"; target, LEFT"lcd";
+ target, "trans_Rect";
+}
+
+program { name, "hide_Rpanel"; signal, "mouse,clicked,*"; source, RIGHT"border";
+ action, STATE_SET "slide" 0.0; transition, DECELERATE, 0.5;
+ target, RIGHT"border"; target, RIGHT"border-slide"; target, RIGHT"lcd";
+}
+
+program { name, "show_Rpanel"; signal, "mouse,clicked,*"; source, RIGHT"border-slide";
+ action, STATE_SET "default" 0.0; transition, DECELERATE, 0.5;
+ target, RIGHT"border"; target, RIGHT"border-slide"; target, RIGHT"lcd";
+}
+*/
+///////////////////////////////////////////////////////////////////////
+// playback signals
+// no longer in use
+
+//program { name, "pb_started"; signal, PB"PLAYING"; source, "*";
+// action, SIGNAL_EMIT "PLAY" "play_button";
+//}
+//
+//program {
+// name, "pb_paused"; signal, PB"PAUSED"; source, "*";
+// action, SIGNAL_EMIT "PAUSE" "pause_button";
+//}
+//
+//program {
+// name, "pb_stopped"; signal, PB"STOPPED"; source, "*";
+// action, SIGNAL_EMIT "STOP" "stop_button";
+//}
+
+///////////////////////////////////////////////////////////////////////
+// seeker program
+
+program { name, "seeker-start"; signal, "mouse,down,1"; source, "seeker_grabber";
+ action, SIGNAL_EMIT "SEEKER_START" "";
+}
+
+program { name, "seeker-update"; signal, "mouse,move"; source, "seeker_grabber";
+ action, SIGNAL_EMIT "SEEKER_UPDATE" "";
+}
+
+program { name, "seeker-stop"; signal, "mouse,up,1"; source, "seeker_grabber";
+ action, SIGNAL_EMIT "SEEKER_STOP" "";
+}
+///////////////////////////////////////////////////////////////////////
+// switch
+/*
+program { name, "switch_hi"; signal, "mouse,in"; source, "switch_stance";
+ action, STATE_SET "hilited" 0.0; transition, LINEAR 0.1; target, "switch_stance";
+}
+program { name, "switch_unhilited"; signal, "mouse,out"; source, "switch_stance";
+ action, STATE_SET "default" 0.0; transition, LINEAR 0.1; target, "switch_stance";
+}
+program { name, "switch_clicked"; signal, "mouse,down,*"; source, "switch_stance";
+ action, STATE_SET "clicked" 0.0; transition, LINEAR 1.0; target, "switch_stance";
+}
+program { name, "switch_unclicked"; signal, "mouse,up,*"; source, "switch_stance";
+ action, STATE_SET "clicked" 0.0; transition, LINEAR 1.0; target, "switch_stance";
+}
+program { name, "switch_exec"; signal, "mouse,down,*"; source, "switch_stance";
+ action, SIGNAL_EMIT "SWITCH_GROUP" "alternate"; }
+*/
+///////////////////////////////////////////////////////////////////////
+
+#define PLAY "play_button"
+
+program { name, "play_hilited"; signal, "mouse,in"; source, PLAY;
+ action, STATE_SET "hilited" 0.0; transition, LINEAR 0.1; target, PLAY;
+ /*after, "play_unhilited";*/ in, 0.15 0.0;
+}
+program { name, "play_unhilited"; signal, "mouse,out"; source, PLAY;
+ action, ACTION_STOP; target, "play_hilited";
+ after, "play_unhilited_real";
+}
+program { name, "play_unhilited_real";
+ action, STATE_SET "default" 0.0; transition, LINEAR 0.1; target, PLAY;
+}
+program { name, "play_click"; signal, "mouse,down,*";source, PLAY;
+ action, STATE_SET "clicked" 0.0; transition, LINEAR 0.1; target, PLAY;
+ after, "play_unclick"; in, 0.15 0.0;
+}
+program { name, "play_unclick"; signal, "mouse,up,*"; source, PLAY;
+ action, STATE_SET "default" 0.0; transition, LINEAR 0.1; target, PLAY;
+}
+program { name, "play_click_emission"; signal, "mouse,down,*"; source, PLAY;
+ action, SIGNAL_EMIT "playback.play" PLAY; }
+
+#define PREV "prev_button"
+
+program { name, "prev_button_hilited"; signal, "mouse,in"; source, PREV;
+ action, STATE_SET "hilited" 0.0; transition, LINEAR 0.1; target, PREV;
+ /*after, "prev_button_unhilited";*/ in, 0.15 0.0;
+}
+program { name, "prev_button_unhilited"; signal, "mouse,out"; source, PREV;
+ action, ACTION_STOP; target, "prev_button_hilited";
+ after, "prev_button_unhilited_real";
+}
+program { name, "prev_button_unhilited_real";
+ action, STATE_SET "default" 0.0; transition, LINEAR 0.1; target, PREV;
+}
+program { name, "prev_clicked"; signal, "mouse,down,*"; source, PREV;
+ action, STATE_SET "clicked" 0.0; transition, LINEAR 0.1; target, PREV;
+ after, "prev_unclicked"; in, 0.15 0.0;
+}
+program { name, "prev_unclicked"; signal, "mouse,up,*"; source, PREV;
+ action, STATE_SET "default" 0.0; transition, LINEAR 0.1; target, PREV;
+}
+program { name, "previous_click"; signal, "mouse,down,*"; source, PREV;
+ action, SIGNAL_EMIT "playback.prev" PREV; }
+
+#define NEXT "next_button"
+
+program { name, "next_hilited"; signal, "mouse,in"; source, NEXT;
+ action, STATE_SET "hilited" 0.0; transition, LINEAR 0.1; target, NEXT;
+ /*after, "next_unhilited";*/ in, 0.15 0.0;
+}
+program { name, "next_unhilited"; signal, "mouse,out"; source, NEXT;
+ action, ACTION_STOP; target, "next_hilited";
+ after, "next_unhilited_real";
+}
+program { name, "next_unhilited_real";
+ action, STATE_SET "default" 0.0; transition, LINEAR 0.1; target, NEXT;
+}
+program { name, "next_click"; signal, "mouse,down,*"; source, NEXT;
+ action, STATE_SET "clicked" 0.0; transition, LINEAR 0.1; target, NEXT;
+ after, "next_unclick"; in, 0.15 0.0;
+}
+program { name, "next_unclick"; signal, "mouse,up,*"; source, NEXT;
+ action, STATE_SET "default" 0.0; transition, LINEAR 0.1; target, NEXT;
+}
+program { name, "next_click_emission"; signal, "mouse,down,*"; source, NEXT;
+ action, SIGNAL_EMIT "playback.next" NEXT; }
+
+#define PAUSE "pause_button"
+
+program { name, "pause_hilited"; signal, "mouse,in"; source, PAUSE;
+ action, STATE_SET "hilited" 0.0; transition, LINEAR 0.1; target, PAUSE;
+ /*after, "pause_unhilited";*/ in, 0.15 0.0;
+}
+program { name, "pause_unhilited"; signal, "mouse,out"; source, PAUSE;
+ action, ACTION_STOP; target, "pause_hilited";
+ after, "pause_unhilited_real";
+}
+program { name, "pause_unhilited_real";
+ action, STATE_SET "default" 0.0; transition, LINEAR 0.1; target, PAUSE;
+}
+program { name, "pause_click"; signal, "mouse,down,*"; source, PAUSE;
+ action, STATE_SET "clicked" 0.0; transition, LINEAR 0.1; target, PAUSE;
+}
+program { name, "pause_unclick"; signal, "mouse,up,*"; source, PAUSE;
+ action, STATE_SET "default" 0.0; transition, LINEAR 0.1; target, PAUSE;
+}
+program { name, "pause_click_emission"; signal, "mouse,down,*"; source, PAUSE;
+ action, SIGNAL_EMIT "PAUSE" PAUSE; }
+
+#define STOP "stop_button"
+
+program { name, "stop_hilited"; signal, "mouse,in"; source, STOP;
+ action, STATE_SET "hilited" 0.0; transition, LINEAR 0.1; target, STOP;
+ /*after, "stop_unhilited";*/ in, 0.15 0.0;
+}
+program { name, "stop_unhilited"; signal, "mouse,out"; source, STOP;
+ action, ACTION_STOP; target, "stop_hilited";
+ after, "stop_unhilited_real";
+}
+program { name, "stop_unhilited_real";
+ action, STATE_SET "default" 0.0; transition, LINEAR 0.1; target, STOP;
+}
+program { name, "stop_click"; signal, "mouse,down,*"; source, STOP;
+ action, STATE_SET "clicked" 0.0; transition, LINEAR 0.1; target, STOP;
+ after, "stop_unclick"; in, 0.15 0.0;
+}
+program { name, "stop_unclick"; signal, "mouse,up,*"; source, STOP;
+ action, STATE_SET "default" 0.0; transition, LINEAR 0.1; target, STOP;
+}
+program { name, "stop_click_emission"; signal, "mouse,down,*"; source, STOP;
+ action, SIGNAL_EMIT "STOP" STOP; }
+///////////////////////////////////////////////////////////////////////
+
+#define ADD "add_button"
+#define DELETE "delete_button"
+#define EDIT "edit_button"
+
+program { name, "addFile_hilited"; signal, "mouse,in"; source, ADD;
+ action, STATE_SET "hilited" 0.0; transition, LINEAR 0.1; target, ADD;
+}
+program { name, "addFile_unhilited"; signal, "mouse,out"; source, ADD;
+ action, STATE_SET "default" 0.0; transition, LINEAR 0.1; target, ADD;
+}
+program { name, "addFile_clicked"; signal, "mouse,down,1"; source, ADD;
+ action, STATE_SET "clicked" 0.0; transition, LINEAR 0.1; target, ADD;
+}
+program { name, "addFile_unclicked"; signal, "mouse,down"; source, ADD;
+ action, STATE_SET "clicked" 0.0; transition, LINEAR 0.1; target, ADD;
+}
+program { name, "AddFile"; signal, "mouse,up,1"; source, ADD;
+ action, SIGNAL_EMIT "file_dialog.open" ADD; }
+//
+program { name, "deleteFile_hilited"; signal, "mouse,in"; source, DELETE;
+ action, STATE_SET "hilited" 0.0; transition, LINEAR 0.1; target, DELETE;
+}
+program { name, "deleteFile_unhilited"; signal, "mouse,out"; source, DELETE;
+ action, STATE_SET "default" 0.0; transition, LINEAR 0.1; target, DELETE;
+}
+program { name, "deleteFile_clicked"; signal, "mouse,down,1"; source, DELETE;
+ action, STATE_SET "clicked" 0.0; transition, LINEAR 0.1; target, DELETE;
+}
+program { name, "deleteFile_unclicked"; signal, "mouse,down"; source, DELETE;
+ action, STATE_SET "clicked" 0.0; transition, LINEAR 0.1; target, DELETE;
+}
+program { name, "deleteFile"; signal, "mouse,up,1"; source, DELETE;
+ action, SIGNAL_EMIT "PLAYLIST_DEL" "*"; }
+//
+program { name, "editFile_hilited"; signal, "mouse,in"; source, EDIT;
+ action, STATE_SET "hilited" 0.0; transition, LINEAR 0.1; target, EDIT;
+}
+program { name, "editFile_unhilited"; signal, "mouse,out"; source, EDIT;
+ action, STATE_SET "default" 0.0; transition, LINEAR 0.1; target, EDIT;
+}
+program { name, "editFile_clicked"; signal, "mouse,down,1"; source, EDIT;
+ action, STATE_SET "clicked" 0.0; transition, LINEAR 0.1; target, EDIT;
+}
+program { name, "editFile_unclicked"; signal, "mouse,down"; source, EDIT;
+ action, STATE_SET "clicked" 0.0; transition, LINEAR 0.1; target, EDIT;
+}
+program { name, "editFile"; signal, "mouse,up,1"; source, EDIT;
+ action, SIGNAL_EMIT "PLAYLIST_EDIT" EDIT; }
+
+///////////////////////////////////////////////////////////////////////
+// program: quit
+
+program { name, "quit_hilited"; signal, "mouse,in"; source, "quit";
+ action, STATE_SET "hilited" 0.0; transition, LINEAR 0.1; target, "quit";
+}
+program { name, "quit_unhilited"; signal, "mouse,out"; source, "quit";
+ action, STATE_SET "default" 0.0; transition, LINEAR 0.1; target, "quit";
+}
+program { name, "quit_clicked"; signal, "mouse,down,*"; source, "quit";
+ action, STATE_SET "clicked" 0.0; transition, LINEAR 1.0; target, "quit";
+}
+program { name, "quit_unclicked"; signal, "mouse,up,*"; source, "quit";
+ action, STATE_SET "clicked" 0.0; transition, LINEAR 1.0; target, "quit";
+}
+program { name, "quit_exit"; signal, "mouse,down,*"; source, "quit";
+ action, SIGNAL_EMIT "close" "quit"; }
--- /dev/null
+VPANEL_PROG("directory",
+ "e,fd,container,scroll,back,directory",
+ "e,fd,container,scroll,next,directory",
+ "e,fd,container,scrollbar,scroll,,directory")
+VPANEL_PROG("files",
+ "e,fd,container,scroll,back,files",
+ "e,fd,container,scroll,next,files",
+ "e,fd,container,scrollbar,scroll,,files")
+program {
+ name, "file_dialog_align_show";
+ signal, "show";
+ source, "";
+ action, DRAG_VAL_SET 0.5 0.5;
+ target, "base.dragable";
+}
--- /dev/null
+
+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, "title"; target, "duration"; target, "background"; }
+
+program { name, "unselected"; signal, "PLAYLIST_ITEM_UNSELECTED"; source, "";
+ action, STATE_SET "default" 0.0; transition, LINEAR 0.2;
+ target, "title"; target, "duration"; 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" ""; }
+
--- /dev/null
+
+// switch_mode
+program { name, "switch_mode_hilited"; signal, "mouse,in"; source, "sw_base";
+ action, STATE_SET "hilited" 0.0; transition, LINEAR, 0.1; target, "sw_base"; }
+
+program { name, "switch_mode_un_unhilited"; signal, "mouse,out"; source, "sw_base";
+ action, STATE_SET "default" 0.0; transition, LINEAR, 0.1; target, "sw_base"; }
+
+program { name, "switch_mode_clicked"; signal, "mouse,down,1"; source, "sw_base";
+ action, STATE_SET "clicked" 0.0; transition, LINEAR, 1.0; target, "sw_base"; }
+
+program { name, "switch_mode_unclicked"; signal, "mouse,down"; source, "sw_base";
+ action, STATE_SET "clicked" 0.0; transition, LINEAR, 1.0; target, "sw_base"; }
+
+program { name, "switch_mode_2"; signal, "mouse,down,1"; source, "sw_base";
+ action, SIGNAL_EMIT "SWITCH_GROUP", "euphoria"; }
+//
+program { name, "_titlebar_click"; signal, "mouse,clicked,1"; source, "small_base";
+ action, SIGNAL_EMIT "RAISE", "small_base"; }
+//
+program { name, "_play_hilited"; signal, "mouse,in"; source, "_play_button";
+ action, STATE_SET "hilited" 0.0; transition, LINEAR, 0.1; target, "_play_button";
+}
+program { name, "_play_unhilited"; signal, "mouse,out"; source, "_play_button";
+ action, STATE_SET "default" 0.0; transition, LINEAR, 1.0; target, "_play_button";
+}
+program { name, "_play_click"; signal, "mouse,down,1"; source, "_play_button";
+ action, STATE_SET "clicked" 0.0; transition, LINEAR, 0.1; target, "_play_button";
+}
+program { name, "_play_unclick"; signal, "mouse,down"; source, "_play_button";
+ action, STATE_SET "default" 0.0; transition, LINEAR, 0.1; target, "_play_button";
+}
+program { name, "_play_click"; signal, "mouse,down,1"; source, "_play_button";
+ action, SIGNAL_EMIT "playback.play" "play_button";
+}
+
+//
+program { name, "_prev_button_hilited"; signal, "mouse,in"; source, "_prev_button";
+ action, STATE_SET "hilited" 0.0; transition, LINEAR, 0.1; target, "_prev_button";
+}
+program { name, "_prev_button_unhilited"; signal, "mouse,out"; source, "_prev_button";
+ action, STATE_SET "default" 0.0; transition, LINEAR, 1.0; target, "_prev_button";
+}
+program { name, "_prev_clicked"; signal, "mouse,down,1"; source, "_prev_button";
+ action, STATE_SET "clicked" 0.0; transition, LINEAR, 0.1; target, "_prev_button";
+}
+program { name, "_prev_unclicked"; signal, "mouse,down"; source, "_prev_button";
+ action, STATE_SET "default" 0.0; transition, LINEAR, 0.1; target, "_prev_button";
+}
+program { name, "_previous_click"; signal, "mouse,down,1"; source, "_prev_button";
+ action, SIGNAL_EMIT "playback.prev" "previous_button";
+}
+
+//
+program { name, "_next_hilited"; signal, "mouse,in"; source, "_next_button";
+ action, STATE_SET "hilited" 0.0; transition, LINEAR, 0.1; target, "_next_button";
+}
+program { name, "_next_unhilited"; signal, "mouse,out"; source, "_next_button";
+ action, STATE_SET "default" 0.0; transition, LINEAR, 1.0; target, "_next_button";
+}
+program { name, "_next_click"; signal, "mouse,down,1"; source, "_next_button";
+action, STATE_SET "clicked" 0.0; transition, LINEAR, 0.1; target, "_next_button";
+}
+program { name, "_next_unclick"; signal, "mouse,down"; source, "_next_button";
+ action, STATE_SET "default" 0.0; transition, LINEAR, 0.1; target, "_next_button";
+}
+program { name, "_next_click"; signal, "mouse,down,1"; source, "_next_button";
+ action, SIGNAL_EMIT "playback.next" "next_button";
+}
+
+//
+program { name, "_pause_hilited"; signal, "mouse,in"; source, "_pause_button";
+ action, STATE_SET "hilited" 0.0; transition, LINEAR, 0.1; target, "_pause_button";
+}
+program { name, "_pause_unhilited"; signal, "mouse,out"; source, "_pause_button";
+ action, STATE_SET "default" 0.0; transition, LINEAR, 1.0; target, "_pause_button";
+}
+program { name, "_pause_click"; signal, "mouse,down,1"; source, "_pause_button";
+ action, STATE_SET "clicked" 0.0; transition, LINEAR, 0.1; target, "_pause_button";
+}
+program { name, "_pause_unclick"; signal, "mouse,down"; source, "_pause_button";
+ action, STATE_SET "default" 0.0; transition, LINEAR, 0.1; target, "_pause_button";
+}
+program { name, "_pause_click"; signal, "mouse,down,1"; source, "_pause_button";
+ action, SIGNAL_EMIT "PAUSE" "pause_button";
+}
+
+//
+program { name, "_stop_hilited"; signal, "mouse,in"; source, "_stop_button";
+ action, STATE_SET "hilited" 0.0; transition, LINEAR, 0.1; target, "_stop_button";
+}
+program { name, "_stop_unhilited"; signal, "mouse,out"; source, "_stop_button";
+ action, STATE_SET "default" 0.0; transition, LINEAR, 1.0; target, "_stop_button";
+}
+program { name, "_stop_click"; signal, "mouse,down,1"; source, "_stop_button";
+ action, STATE_SET "clicked" 0.0; transition, LINEAR, 0.1; target, "_stop_button";
+}
+program { name, "_stop_unclick"; signal, "mouse,down"; source, "_stop_button";
+ action, STATE_SET "default" 0.0; transition, LINEAR, 0.1; target, "_stop_button";
+}
+program { name, "_stop_click"; signal, "mouse,down,1"; source, "_stop_button";
+ action, SIGNAL_EMIT "STOP" "stop_button";
+}
+
+program { name, "playback_has_begun"; signal, "PLAYBACK_STATE_PLAYING"; source, "*";
+ action, STATE_SET "active" 0.0; transition, DECELERATE 0.1;
+ target, "small_lcd";
+ target, "strans_Rect";
+ after, "playback_has_begun"; }
+//
+program { name, "playback_is_paused"; signal, "PLAYBACK_STATE_PAUSED"; source, "*";
+ action, STATE_SET "default" 0.0; transition, DECELERATE 0.1;
+ target, "small_lcd";
+ target, "strans_Rect";
+ after, "playback_blink"; }
+//
+program { name, "playback_blink"; signal, "PLAYBACK_STATE_PAUSED"; source, "*";
+ action, STATE_SET "active" 0.0; transition, LINEAR 0.5;
+ target, "small_lcd";
+ target, "strans_Rect";
+ after, "playback_is_paused"; }
+//
+program { name, "playback_has_stopped"; signal, "PLAYBACK_STATE_STOPPED"; source, "*";
+ action, STATE_SET "default" 0.0; transition, DECELERATE 0.5;
+ target, "small_lcd";
+ target, "strans_Rect"; }
+//
+program { name, "_quit_hilited"; signal, "mouse,in"; source, "_quit";
+ action, STATE_SET "hilited" 0.0; transition, LINEAR, 0.1; target, "_quit";
+}
+program { name, "_quit_unhilited"; signal, "mouse,out"; source, "_quit";
+ action, STATE_SET "default" 0.0; transition, LINEAR, 0.1; target, "_quit";
+}
+program { name, "_quit_clicked"; signal, "mouse,down,1"; source, "_quit";
+ action, STATE_SET "clicked" 0.0; transition, LINEAR, 1.0; target, "_quit";
+}
+program { name, "_quit_unclicked"; signal, "mouse,down"; source, "_quit";
+ action, STATE_SET "clicked" 0.0; transition, LINEAR, 1.0; target, "_quit";
+}
+program { name, "_quit_exit"; signal, "mouse,down,1"; source, "_quit";
+ action, SIGNAL_EMIT "close" "quit";
+}
--- /dev/null
+/*** Streamline Euphoria Theme - An Alternation on the default theme ***/
+/*** By: Ben Rockwood ***/
+
+images {
+ #include "streamline_images.edc"
+}
+
+collections {
+ group {
+ min, 300 60;
+ max, 300 60;
+ name, "euphoria_small";
+
+ parts {
+ #include "streamline_small_parts.edc"
+ }
+ programs {
+ #include "streamline_small_progs.edc"
+ }
+
+ }
+
+ group {
+ min, 510 90;
+ max, 510 90;
+ name, "euphoria";
+ parts {
+ #include "streamline_parts.edc"
+ }
+ programs {
+ #include "streamline_progs.edc"
+ }
+
+ }
+
+ group {
+ name, "playlist_item";
+ min, 200 12;
+ max, 200 12;
+
+ parts {
+ #include "streamline_playlist_parts.edc"
+ }
+ programs {
+ #include "streamline_playlist_progs.edc"
+ }
+
+ }
+
+}
+
+
--- /dev/null
+/* **************************************************************************************
+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
+compact-nexttrack-clicked.png: PNG image data, 27 x 20, 8-bit/color RGB, non-interlaced
+compact-nexttrack-normal.png: PNG image data, 27 x 20, 8-bit/color RGB, non-interlaced
+compact-prevtrack-clicked.png: PNG image data, 29 x 20, 8-bit/color RGB, non-interlaced
+compact-prevtrack-normal.png: PNG image data, 29 x 20, 8-bit/color RGB, non-interlaced
+compact-seekback-clicked.png: PNG image data, 29 x 20, 8-bit/color RGB, non-interlaced
+compact-seekback-normal.png: PNG image data, 29 x 20, 8-bit/color RGB, non-interlaced
+compact-seekforward-clicked.png: PNG image data, 27 x 20, 8-bit/color RGB, non-interlaced
+compact-seekforward-normal.png: PNG image data, 27 x 20, 8-bit/color RGB, non-interlaced
+controls-back.png: PNG image data, 37 x 19, 8-bit/color RGBA, 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
+playpause-clicked.png: PNG image data, 56 x 40, 8-bit/color RGB, non-interlaced
+playpause-down.png: PNG image data, 1600 x 1200, 16-bit/color RGB, non-interlaced
+playpause-normal.png: PNG image data, 56 x 40, 8-bit/color RGB, non-interlaced
+playpause-orange-held.png: PNG image data, 56 x 40, 8-bit/color RGB, non-interlaced
+playpause-orange-released.png: PNG image data, 56 x 40, 8-bit/color RGB, 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, "compact-nexttrack-normal.png" RAW;
+ image, "compact-prevtrack-normal.png" RAW;
+ image, "compact-seekback-normal.png" RAW;
+ image, "compact-seekforward-normal.png" RAW;
+ image, "compact-nexttrack-clicked.png" RAW;
+ image, "compact-prevtrack-clicked.png" RAW;
+ image, "compact-seekback-clicked.png" RAW;
+ image, "compact-seekforward-clicked.png" RAW;
+ image, "playpause-normal.png" RAW;
+ image, "playpause-clicked.png" RAW;
--- /dev/null
+ /* Border Scaled Image for Background */
+ 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;
+
+ rel1 {
+ relative, 0.0 0.0;
+ offset, 4 17;
+ }
+
+ rel2 {
+ relative, 0.0 0.0;
+ offset, 193 86;
+ }
+
+ 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 0.0;
+ offset, 196 40;
+ }
+
+ rel2 {
+ relative, 0.0 0.0;
+ offset, 316 86;
+ }
+
+ 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, 29 20;
+ max, 29 20;
+
+ rel1 {
+ relative, 0.0 0.0;
+ offset, 3 2;
+ to, "button_background";
+ }
+ rel2 {
+ relative, 0.0 0.0;
+ offset, 32 22;
+ to, "button_background";
+ }
+ image {
+ normal, "compact-prevtrack-normal.png";
+ }
+ }
+
+ description {
+ state, "clicked" 0.0;
+ min, 29 20;
+ max, 29 20;
+
+ rel1 {
+ relative, 0.0 0.0;
+ offset, 3 2;
+ to, "button_background";
+ }
+ rel2 {
+ relative, 0.0 0.0;
+ offset, 32 22;
+ to, "button_background";
+ }
+
+ image {
+ normal, "compact-prevtrack-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, 0.0 0.0;
+ offset, 62 3;
+ to, "button_background";
+ }
+ rel2 {
+ relative, 0.0 0.0;
+ offset, 117 43;
+ to, "button_background";
+ }
+ image {
+ normal, "playpause-normal.png";
+ }
+ }
+ description {
+ state, "clicked" 0.0;
+ min, 56 40;
+ max, 56 40;
+ align, 0.5 0.0;
+
+ rel1 {
+ relative, 0.0 0.0;
+ offset, 62 3;
+ to, "button_background";
+ }
+ rel2 {
+ relative, 0.0 0.0;
+ offset, 117 43;
+ to, "button_background";
+ }
+ image {
+ normal, "playpause-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";
+ }
+ }
+
+ }
+
+ /* Pause Button */
+
+ part {
+ name, "pause_button";
+ mouse_events, 0;
+ description {
+ state, "default" 0.0;
+ min, 56 40;
+ max, 56 40;
+ visible, 0;
+
+ 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";
+ }
+ }
+ }
+
+
+
+ /* Next Button */
+ part {
+ name, "next_button";
+ mouse_events, 1;
+ description {
+ state, "default" 0.0;
+ min, 27 20;
+ max, 27 20;
+
+ rel1 {
+ relative, 0.0 0.0;
+ offset, 32 2;
+ to, "button_background";
+ }
+ rel2 {
+ relative, 0.0 0.0;
+ offset, 59 22;
+ to, "button_background";
+ }
+ image {
+ normal, "compact-nexttrack-normal.png";
+ }
+ }
+ description {
+ state, "clicked" 0.0;
+ min, 27 20;
+ max, 27 20;
+
+ rel1 {
+ relative, 0.0 0.0;
+ offset, 32 2;
+ to, "button_background";
+ }
+ rel2 {
+ relative, 0.0 0.0;
+ offset, 59 22;
+ to, "button_background";
+ }
+ image {
+ normal, "compact-nexttrack-clicked.png";
+ }
+ }
+ }
+
+ /* Seekback Button */
+ part {
+ name, "seekback_button";
+ mouse_events, 1;
+ description {
+ state, "default" 0.0;
+ min, 29 20;
+ max, 29 20;
+ visible, 1;
+
+ rel1 {
+ relative, 0.0 0.0;
+ offset, 3 24;
+ to, "button_background";
+ }
+ rel2 {
+ relative, 0.0 0.0;
+ offset, 32 44;
+ to, "button_background";
+ }
+
+ image {
+ normal, "compact-seekback-normal.png";
+ }
+ }
+ description {
+ state, "clicked" 0.0;
+ min, 29 20;
+ max, 29 20;
+ visible, 1;
+
+ rel1 {
+ relative, 0.0 0.0;
+ offset, 3 24;
+ to, "button_background";
+ }
+ rel2 {
+ relative, 0.0 0.0;
+ offset, 32 44;
+ to, "button_background";
+ }
+
+ image {
+ normal, "compact-seekback-clicked.png";
+ }
+ }
+ }
+
+ /* Seekforward Button */
+ part {
+ name, "seekforward_button";
+ mouse_events, 1;
+ description {
+ state, "default" 0.0;
+ min, 27 20;
+ max, 27 20;
+ visible, 1;
+
+ rel1 {
+ relative, 0.0 0.0;
+ offset, 32 24;
+ to, "button_background";
+ }
+ rel2 {
+ relative, 0.0 0.0;
+ offset, 59 44;
+ to, "button_background";
+ }
+
+ image {
+ normal, "compact-seekforward-normal.png";
+ }
+ }
+ description {
+ state, "clicked" 0.0;
+ min, 27 20;
+ max, 27 20;
+ visible, 1;
+
+ rel1 {
+ relative, 0.0 0.0;
+ offset, 32 24;
+ to, "button_background";
+ }
+ rel2 {
+ relative, 0.0 0.0;
+ offset, 59 44;
+ to, "button_background";
+ }
+
+ image {
+ normal, "compact-seekforward-clicked.png";
+ }
+ }
+ }
+
+
+ /*************** Toggle Repeat **************/
+
+ part {
+ name, "repeat_toggle_disabled_img";
+ type, IMAGE;
+ mouse_events, 0;
+
+ description {
+ state, "default" 0.0;
+ visible, 0;
+ 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";
+ mouse_events, 0;
+
+ description {
+ state, "default" 0.0;
+ visible, 0;
+ 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-on.png";
+ }
+ }
+
+ description {
+ state, "enabled" 0.0;
+ inherit, "default" 0.0;
+ visible, 0;
+ }
+ }
+ part {
+ name, "repeat_toggle_label";
+ type, TEXT;
+ mouse_events, 0;
+
+ description {
+ state, "default" 0.0;
+ visible, 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, 0.0 0.0;
+ offset, 282 17;
+ }
+ rel2 {
+ relative, 0.0 0.0;
+ offset, 305 36;
+ }
+
+ 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, 319 17;
+ }
+
+ rel2 {
+ relative, 1.0 1.0;
+ offset, -5 -4;
+ }
+
+ 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;
+ }
+ }
+
+
--- /dev/null
+
+ 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;
+ }
+ }
+ }
+
--- /dev/null
+
+ 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" "";
+ }
+
--- /dev/null
+
+ /* 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 "QUIT" "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";
+ }
--- /dev/null
+/** Minimized functionality 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";
+ }
+ }
+ }
--- /dev/null
+/** Minimize funcationlity 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.prev" "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 */
+ program {
+ name, "pause_click";
+ signal, "mouse,down,1";
+ source, "pause_button";
+ action, STATE_SET "clicked" 0.0;
+ transition, LINEAR 0.0;
+ target, "pause_button";
+ }
+
+ program {
+ name, "pause_unclick";
+ signal, "mouse,up,1";
+ source, "pause_button";
+ action, STATE_SET "default" 0.0;
+ transition, DECELERATE 0.25;
+ target, "pause_button";
+ }
+ program {
+ name, "pause_click_emission";
+ signal, "mouse,up,1";
+ source, "pause_button";
+ action, SIGNAL_EMIT "playback.pause" "pause_button";
+ }
+ /* Next */
+ 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";
+ }
+
+
+ /* Quit */
+ program {
+ name, "quit_click";
+ signal, "mouse,down,1";
+ source, "quit_button";
+ action, STATE_SET "clicked" 0.0;
+ transition, LINEAR 0.0;
+ target, "quit_button";
+ }
+
+ program {
+ name, "quit_unclick";
+ signal, "mouse,up,1";
+ source, "quit_button";
+ action, STATE_SET "default" 0.0;
+ transition, DECELERATE 0.25;
+ target, "quit_button";
+ }
+ program {
+ name, "quit_click_emission";
+ signal, "mouse,up,1";
+ source, "quit_button";
+ action, SIGNAL_EMIT "close" "quit";
+ }
+ /* 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";
+ }
+
+ /* switch to "large" mode */
+ program {
+ name, "titlebar_dbl_click";
+ signal, "mouse,down,1,double";
+ source, "background";
+ action, SIGNAL_EMIT "SWITCH_GROUP" "euphoria";
+ }
+
--- /dev/null
+ group {
+ name, "collapsed";
+ min, 118 32;
+ max, 9999 32;
+ parts {
+ part {
+ name, "main";
+ mouse_events, 1;
+ repeat_events, 1;
+ description {
+ state, "default" 0.0;
+ min, 110 32;
+ max, 110 32;
+ rel1 {
+ relative, 0 0;
+ offset, 0 0;
+ }
+ rel2 {
+ relative, 0 1;
+ offset, 110 -1;
+ }
+ image {
+ normal, "small-main.png";
+ border, 10 2 2 2;
+ }
+ }
+ } //part
+ part {
+ name, "left-grad";
+ mouse_events, 0;
+ description {
+ state, "default" 0.0;
+ min, 9 32;
+ max, 9 32;
+ color, WINTER_COLOR;
+ rel1 {
+ to, "main";
+ relative, 0 0;
+ offset, 0 0;
+ }
+ rel2 {
+ to, "main";
+ relative, 0 1;
+ offset, 9 -1;
+ }
+ image {
+ normal, "small-left-grad.png";
+ }
+ }
+ } //part
+ part {
+ name, "right";
+ mouse_events, 1;
+ repeat_events, 1;
+ description {
+ state, "default" 0.0;
+ min, 9 32;
+ max, 9 32;
+ rel1 {
+ relative, 1 0;
+ offset, -9 0;
+ }
+ rel2 {
+ relative, 1 1;
+ offset, -1 -1;
+ }
+ image {
+ normal, "small-right.png";
+ }
+ }
+ } //part
+ part {
+ name, "right-grad";
+ mouse_events, 0;
+ description {
+ state, "default" 0.0;
+ min, 9 32;
+ max, 9 32;
+ color, WINTER_COLOR;
+ rel1 {
+ to, "right";
+ relative, 0 0;
+ offset, 0 0;
+ }
+ rel2 {
+ to, "right";
+ relative, 1 1;
+ offset, -1 -1;
+ }
+ image {
+ normal, "small-right-grad.png";
+ }
+ }
+ } //part
+ part {
+ name, "panel";
+ mouse_events, 1;
+ repeat_events, 1;
+ description {
+ state, "default" 0.0;
+ min, 0 30;
+ max, 9999 30;
+ rel1 {
+ to, "main";
+ relative, 1 0;
+ offset, 0 1;
+ }
+ rel2 {
+ to, "right";
+ relative, 0 1;
+ offset, -1 -2;
+ }
+ image {
+ normal, "small-panel.png";
+ border, 10 2 2 2;
+ }
+ }
+ } //part
+
+ BUTTON("prev", "small-prev1.png", "small-prev2.png", 16, 14,
+ "main", 0 1, 31 -17,
+ "main", 0 1, 47 -3);
+ BUTTON("rew", "small-rew1.png", "small-rew2.png", 11, 14,
+ "main", 0 1, 45 -17,
+ "main", 0 1, 56 -3);
+ TOGGLE_BUTTON("play", "small-play1.png", "small-play2.png",
+ "small-pause1.png", "small-pause2.png", 13, 13,
+ "main", 0 1, 55 -17,
+ "main", 0 1, 68 -4);
+ BUTTON("ff", "small-ff1.png", "small-ff2.png", 11, 14,
+ "main", 0 1, 66 -17,
+ "main", 0 1, 77 -3);
+ BUTTON("next", "small-next1.png", "small-next2.png", 16, 14,
+ "main", 0 1, 75 -17,
+ "main", 0 1, 91 -3);
+
+ part {
+ name, "seekerTrough";
+ mouse_events, 0;
+ description {
+ state, "default" 0.0;
+ min, 17 4;
+ max, 9999 4;
+ rel1 {
+ to, "main";
+ relative, 0 0;
+ offset, 18 7;
+ }
+ rel2 {
+ to, "main";
+ relative, 1 0;
+ offset, -9 11;
+ }
+ image {
+ normal, "small-seeker-trough.png";
+ border, 3 3 2 2;
+ }
+ }
+ } //part
+
+ part {
+ name, "seekerBar";
+ mouse_events, 0;
+ description {
+ state, "default" 0.0;
+ min, 0 2;
+ max, 9999 2;
+ color, WINTER_COLOR;
+ rel1 {
+ to, "seekerTrough";
+ relative, 0 0;
+ offset, 1 1;
+ }
+ rel2 {
+ to_x, "seeker";
+ to_y, "seekerTrough";
+ relative, 0 1;
+ offset, 0 -2;
+ }
+ image {
+ normal, "small-seeker-bar.png";
+ border, 3 3 2 2;
+ }
+ }
+ } //part
+
+ part {
+ name, "seeker";
+ type, RECT;
+ mouse_events, 0;
+ dragable {
+ x, 1 1 1;
+ y, 0 0 0;
+ confine, "seekerTrough";
+ }
+ description {
+ state, "default" 0.0;
+ visible, 0;
+ min, 1 4;
+ max, 1 4;
+ rel1 {
+ to, "seekerTrough";
+ relative, 0 0;
+ offset, 0 0;
+ }
+ rel2 {
+ to, "seekerTrough";
+ relative, 1 1;
+ offset, -1 -1;
+ }
+ }
+ } //part
+
+ part {
+ name, "seeker_grabber";
+ type, RECT;
+ mouse_events, 1;
+ description {
+ state, "default" 0.0;
+ visible, 1;
+ color, 0 0 0 0;
+ rel1 {
+ to, "seekerTrough";
+ relative, 0 0;
+ offset, -2 -2;
+ }
+ rel2 {
+ to, "seekerTrough";
+ relative, 1 1;
+ offset, 1 1;
+ }
+ }
+ } //part
+
+ } //parts
+
+ programs {
+ BUTTON_PROG("prev", "playback.prev")
+ BUTTON_PROG3("rew", "SEEK_BACK_START", "SEEK_BACK_STOP")
+ TOGGLE_BUTTON_PROG("play", "playback.play", "playback.pause")
+ BUTTON_PROG3("ff", "SEEK_FORWARD_START", "SEEK_FORWARD_STOP")
+ BUTTON_PROG("next", "playback.next")
+
+ program {
+ name, "switch";
+ signal, "mouse,down,1,double";
+ source, "main";
+ action, SIGNAL_EMIT "SWITCH_GROUP" "euphoria";
+ }
+ program {
+ name, "seeker-start";
+ signal, "mouse,down,1";
+ source, "seeker_grabber";
+ action, SIGNAL_EMIT "SEEKER_START" "";
+ }
+ program {
+ name, "seeker-update";
+ signal, "mouse,move";
+ source, "seeker_grabber";
+ action, SIGNAL_EMIT "SEEKER_UPDATE" "";
+ }
+ program {
+ name, "seeker-stop";
+ signal, "mouse,up,1";
+ source, "seeker_grabber";
+ action, SIGNAL_EMIT "SEEKER_STOP" "";
+ }
+ program {
+ name, "toggle-playing";
+ signal, "PLAYBACK_STATE_PLAYING";
+ source, "*";
+ action, STATE_SET "toggled" 0.0;
+ transition, LINEAR 0.0;
+ target, "play";
+ target, "play-2";
+ }
+ program {
+ name, "toggle-stopped";
+ signal, "PLAYBACK_STATE_STOPPED";
+ source, "*";
+ action, STATE_SET "default" 0.0;
+ transition, LINEAR 0.0;
+ target, "play";
+ target, "play-2";
+ }
+ program {
+ name, "toggle-paused";
+ signal, "PLAYBACK_STATE_PAUSED";
+ source, "*";
+ action, STATE_SET "default" 0.0;
+ transition, LINEAR 0.0;
+ target, "play";
+ target, "play-2";
+ }
+ } //programs
+ } //group
--- /dev/null
+ group {
+ name, "euphoria";
+ min, 200 300;
+ max, 99999 99999;
+
+ data {
+ item, "shaped" "hell yeah";
+ }
+
+ script {
+ public message (Msg_Type:type, id, ...)
+ {
+ switch (id) {
+ case MSG_ID_SET_SONGNAME: {
+ new buf[128];
+
+ if (type != MSG_STRING_SET || numargs () < 5)
+ return;
+
+ getsarg (2, buf, 128);
+ set_text (PART:"artist_name", buf);
+
+ getsarg (3, buf, 128);
+ set_text (PART:"song_name", buf);
+
+ getsarg (4, buf, 128);
+ set_text (PART:"album_name", buf);
+ }
+ }
+ }
+ }
+
+ parts {
+#include "../parts/main.edc"
+#include "../parts/playlist.edc"
+#include "../parts/buttons.edc"
+#include "../parts/volume.edc"
+#include "../parts/text.edc"
+#include "../parts/seeker.edc"
+#include "../parts/ani.edc"
+
+ } //parts
+
+ programs {
+#include "../programs/buttons.edc"
+#include "../programs/volume.edc"
+#include "../programs/playlist.edc"
+#include "../programs/seeker.edc"
+#include "../programs/text.edc"
+#include "../programs/ani.edc"
+#include "../programs/switch.edc"
+ } //programs
+
+ } //group
--- /dev/null
+ group {
+ name, "playlist_item";
+ min, 50 15;
+ max, 9999 15;
+ parts {
+ part {
+ name, "bg";
+ type, RECT;
+ mouse_events, 1;
+
+ description {
+ state, "default" 0.0;
+ color, 0 0 0 0;
+ }
+ }
+ part {
+ name, "title";
+ type, TEXT;
+ mouse_events, 1;
+ description {
+ state, "default" 0.0;
+ color, 0 0 0 128;
+ rel1 {
+ relative, 0.0 0.0;
+ offset, 5 0;
+ }
+ rel2 {
+ to_x, "duration";
+ relative, 0.0 1.0;
+ offset, -5 0;
+ }
+ text {
+ text, "title";
+ font, "Vera";
+ size, 12;
+ align, 0.0 0.0;
+ }
+ }
+ description {
+ state, "selected" 0.0;
+ color, 0 0 0 255;
+ rel1 {
+ relative, 0.0 0.0;
+ offset, 5 0;
+ }
+ rel2 {
+ to_x, "duration";
+ relative, 0.0 1.0;
+ offset, -5 0;
+ }
+ text {
+ text, "title";
+ font, "Vera";
+ size, 12;
+ align, 0.0 0.0;
+ }
+ }
+ } //part
+ part {
+ name, "duration";
+ type, TEXT;
+ mouse_events, 1;
+ description {
+ state, "default" 0.0;
+ color, 0 0 0 128;
+ rel1 {
+ relative, 1.0 0.0;
+ offset, -30 0;
+ }
+ rel2 {
+ relative, 1.0 1.0;
+ offset, -5 -1;
+ }
+ text {
+ text, "00:00";
+ font, "Vera";
+ size, 12;
+ min, 1 1;
+ align, 1.0 0.0;
+ }
+ }
+ description {
+ state, "selected" 0.0;
+ color, 0 0 0 255;
+ rel1 {
+ relative, 1.0 0.0;
+ offset, -30 0;
+ }
+ rel2 {
+ relative, 1.0 1.0;
+ offset, -5 -1;
+ }
+ text {
+ text, "00:00";
+ font, "Vera";
+ size, 12;
+ min, 1 1;
+ align, 1.0 0.0;
+ }
+ }
+ } //part
+
+ } //parts
+
+ 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, DECELERATE 0.5;
+ target, "title";
+ target, "duration";
+ }
+ program {
+ name, "unselected";
+ signal, "PLAYLIST_ITEM_UNSELECTED";
+ source, "";
+ action, STATE_SET "default" 0.0;
+ transition, DECELERATE 0.5;
+ target, "title";
+ target, "duration";
+ }
+ program {
+ name, "play_it";
+ 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" "";
+ }
+
+ } //programs
+
+ } //group
--- /dev/null
+ image, "small-main.png" LOSSY 98;
+ image, "small-right.png" LOSSY 98;
+ image, "small-panel.png" LOSSY 98;
+ image, "small-left-grad.png" LOSSY 98;
+ image, "small-right-grad.png" LOSSY 98;
+
+ image, "small-seeker-bar.png" LOSSY 98;
+ image, "small-seeker-trough.png" LOSSY 98;
+
+ image, "small-prev1.png" LOSSY 98;
+ image, "small-prev2.png" LOSSY 98;
+ image, "small-rew1.png" LOSSY 98;
+ image, "small-rew2.png" LOSSY 98;
+ image, "small-play1.png" LOSSY 98;
+ image, "small-play2.png" LOSSY 98;
+ image, "small-pause1.png" LOSSY 98;
+ image, "small-pause2.png" LOSSY 98;
+ image, "small-ff1.png" LOSSY 98;
+ image, "small-ff2.png" LOSSY 98;
+ image, "small-next1.png" LOSSY 98;
+ image, "small-next2.png" LOSSY 98;
--- /dev/null
+ image, "main.png" LOSSY 98;
+ image, "screen.png" LOSSY 98;
+ image, "bot.png" LOSSY 98;
+ image, "bot_grad.png" LOSSY 98;
+ image, "top_grad.png" LOSSY 98;
+ image, "shad.png" LOSSY 98;
+ image, "panel.png" LOSSY 98;
+ image, "prev1.png" LOSSY 98;
+ image, "prev2.png" LOSSY 98;
+ image, "rew1.png" LOSSY 98;
+ image, "rew2.png" LOSSY 98;
+ image, "play1.png" LOSSY 98;
+ image, "play2.png" LOSSY 98;
+ image, "pause1.png" LOSSY 98;
+ image, "pause2.png" LOSSY 98;
+ image, "ff1.png" LOSSY 98;
+ image, "ff2.png" LOSSY 98;
+ image, "next1.png" LOSSY 98;
+ image, "next2.png" LOSSY 98;
+ image, "pl1.png" LOSSY 98;
+ image, "pl2.png" LOSSY 98;
+ image, "x1.png" LOSSY 98;
+ image, "x2.png" LOSSY 98;
+
+ image, "volume.png" LOSSY 98;
+ image, "vol-dn.png" LOSSY 98;
+ image, "vol-dn-over.png" LOSSY 98;
+ image, "vol-dn-clicked.png" LOSSY 98;
+ image, "vol-dn-border.png" LOSSY 98;
+ image, "vol-up.png" LOSSY 98;
+ image, "vol-up-over.png" LOSSY 98;
+ image, "vol-up-clicked.png" LOSSY 98;
+ image, "vol-up-border.png" LOSSY 98;
+
+ image, "plus1.png" LOSSY 98;
+ image, "plus2.png" LOSSY 98;
+ image, "minus1.png" LOSSY 98;
+ image, "minus2.png" LOSSY 98;
+ image, "edit1.png" LOSSY 98;
+ image, "edit2.png" LOSSY 98;
+
+ image, "seeker_trough.png" LOSSY 98;
+ image, "seeker_bar.png" LOSSY 98;
+ image, "seeker_bar_grad.png" LOSSY 98;
+
+ image, "dot.png" LOSSY 98;
--- /dev/null
+/* yeah. i know. this file is messy right now. still playing with things... */
+
+#define BUTTON(NAME, IMG, IMG2, W, H, REL1_TO, REL1_REL, REL1_OFF, REL2_TO, REL2_REL, REL2_OFF) \
+ part { \
+ name, NAME; \
+ description { \
+ state, "default" 0.0; \
+ min, W H; \
+ max, W H; \
+ color, 255 255 255 127; \
+ rel1 { \
+ to, REL1_TO; \
+ relative, REL1_REL; \
+ offset, REL1_OFF; \
+ } \
+ rel2 { \
+ to, REL2_TO; \
+ relative, REL2_REL; \
+ offset, REL2_OFF; \
+ } \
+ image { \
+ normal, IMG; \
+ } \
+ } \
+ description { \
+ state, "over" 0.0; \
+ min, W H; \
+ max, W H; \
+ color, 255 255 255 255; \
+ rel1 { \
+ to, REL1_TO; \
+ relative, REL1_REL; \
+ offset, REL1_OFF; \
+ } \
+ rel2 { \
+ to, REL2_TO; \
+ relative, REL2_REL; \
+ offset, REL2_OFF; \
+ } \
+ image { \
+ normal, IMG; \
+ } \
+ } \
+ description { \
+ state, "down" 0.0; \
+ min, W H; \
+ max, W H; \
+ color, 255 255 255 255; \
+ rel1 { \
+ to, REL1_TO; \
+ relative, REL1_REL; \
+ offset, REL1_OFF; \
+ } \
+ rel2 { \
+ to, REL2_TO; \
+ relative, REL2_REL; \
+ offset, REL2_OFF; \
+ } \
+ image { \
+ normal, IMG2; \
+ } \
+ } \
+ }
+
+
+#define BUTTON_PROG(NAME, SIG) \
+ program { \
+ name, NAME"-in"; \
+ signal, "mouse,in"; \
+ source, NAME; \
+ action, STATE_SET "over" 0.0; \
+ transition, DECELERATE 0.5; \
+ target, NAME; \
+ } \
+ program { \
+ name, NAME"-out"; \
+ signal, "mouse,out"; \
+ source, NAME; \
+ action, STATE_SET "default" 0.0;\
+ transition, DECELERATE 0.5; \
+ target, NAME; \
+ } \
+ program { \
+ name, NAME"-clicked"; \
+ signal, "mouse,clicked,1"; \
+ source, NAME; \
+ action, SIGNAL_EMIT SIG NAME; \
+ } \
+ program { \
+ name, NAME"-down2"; \
+ signal, "mouse,down,1"; \
+ source, NAME; \
+ action, STATE_SET "down" 0.0; \
+ transition, LINEAR 0.0; \
+ target, NAME; \
+ } \
+ program { \
+ name, NAME"-up"; \
+ signal, "mouse,up,1"; \
+ source, NAME; \
+ action, STATE_SET "over" 0.0; \
+ transition, LINEAR 0.0; \
+ target, NAME; \
+ } \
+
+
+
+
+#define BUTTON2(NAME, IMG, IMG2, IMG3, W, H, REL1_TO, REL1_REL, REL1_OFF, REL2_TO, REL2_REL, REL2_OFF) \
+ part { \
+ name, NAME; \
+ description { \
+ state, "default" 0.0; \
+ min, W H; \
+ max, W H; \
+ color, 255 255 255 255; \
+ rel1 { \
+ to, REL1_TO; \
+ relative, REL1_REL; \
+ offset, REL1_OFF; \
+ } \
+ rel2 { \
+ to, REL2_TO; \
+ relative, REL2_REL; \
+ offset, REL2_OFF; \
+ } \
+ image { \
+ normal, IMG; \
+ } \
+ } \
+ description { \
+ state, "over" 0.0; \
+ min, W H; \
+ max, W H; \
+ color, WINTER_COLOR; \
+ rel1 { \
+ to, REL1_TO; \
+ relative, REL1_REL; \
+ offset, REL1_OFF; \
+ } \
+ rel2 { \
+ to, REL2_TO; \
+ relative, REL2_REL; \
+ offset, REL2_OFF; \
+ } \
+ image { \
+ normal, IMG; \
+ } \
+ } \
+ description { \
+ state, "down" 0.0; \
+ min, W H; \
+ max, W H; \
+ color, WINTER_COLOR; \
+ rel1 { \
+ to, REL1_TO; \
+ relative, REL1_REL; \
+ offset, REL1_OFF; \
+ } \
+ rel2 { \
+ to, REL2_TO; \
+ relative, REL2_REL; \
+ offset, REL2_OFF; \
+ } \
+ image { \
+ normal, IMG2; \
+ } \
+ } \
+ } \
+ part { \
+ name, NAME"-border"; \
+ mouse_events, 0; \
+ description { \
+ state, "default" 0.0; \
+ min, W H; \
+ max, W H; \
+ color, 255 255 255 255; \
+ rel1 { \
+ to, REL1_TO; \
+ relative, REL1_REL; \
+ offset, REL1_OFF; \
+ } \
+ rel2 { \
+ to, REL2_TO; \
+ relative, REL2_REL; \
+ offset, REL2_OFF; \
+ } \
+ image { \
+ normal, IMG3; \
+ } \
+ } \
+ }
+
+
+
+
+
+
+
+
+#define BUTTON_PROG2(NAME, P1, P2, P3, P4, P5, SIG) \
+ program { \
+ name, P1; \
+ signal, "mouse,in"; \
+ source, NAME; \
+ action, STATE_SET "over" 0.0; \
+ transition, DECELERATE 0.25; \
+ target, NAME; \
+ } \
+ program { \
+ name, P2; \
+ signal, "mouse,out"; \
+ source, NAME; \
+ action, STATE_SET "default" 0.0;\
+ transition, DECELERATE 0.25; \
+ target, NAME; \
+ } \
+ program { \
+ name, P3; \
+ signal, "mouse,up,1"; \
+ source, NAME; \
+ action, SIGNAL_EMIT SIG NAME; \
+ } \
+ program { \
+ name, P4; \
+ signal, "mouse,down,1"; \
+ source, NAME; \
+ action, STATE_SET "down" 0.0; \
+ transition, LINEAR 0.0; \
+ target, NAME; \
+ } \
+ program { \
+ name, P5; \
+ signal, "mouse,up,1"; \
+ source, NAME; \
+ action, STATE_SET "over" 0.0; \
+ transition, LINEAR 0.0; \
+ target, NAME; \
+ } \
+
+
+
+#define BUTTON_CLIPPED(NAME, IMG, IMG2, W, H, REL1_TO, REL1_REL, REL1_OFF, REL2_TO, REL2_REL, REL2_OFF, CLIP)\
+ part { \
+ name, NAME; \
+ clip_to, CLIP; \
+ description { \
+ state, "default" 0.0; \
+ min, W H; \
+ max, W H; \
+ color, 255 255 255 127; \
+ rel1 { \
+ to, REL1_TO; \
+ relative, REL1_REL; \
+ offset, REL1_OFF; \
+ } \
+ rel2 { \
+ to, REL2_TO; \
+ relative, REL2_REL; \
+ offset, REL2_OFF; \
+ } \
+ image { \
+ normal, IMG; \
+ } \
+ } \
+ description { \
+ state, "over" 0.0; \
+ min, W H; \
+ max, W H; \
+ color, 255 255 255 255; \
+ rel1 { \
+ to, REL1_TO; \
+ relative, REL1_REL; \
+ offset, REL1_OFF; \
+ } \
+ rel2 { \
+ to, REL2_TO; \
+ relative, REL2_REL; \
+ offset, REL2_OFF; \
+ } \
+ image { \
+ normal, IMG; \
+ } \
+ } \
+ description { \
+ state, "down" 0.0; \
+ min, W H; \
+ max, W H; \
+ color, 255 255 255 255; \
+ rel1 { \
+ to, REL1_TO; \
+ relative, REL1_REL; \
+ offset, REL1_OFF; \
+ } \
+ rel2 { \
+ to, REL2_TO; \
+ relative, REL2_REL; \
+ offset, REL2_OFF; \
+ } \
+ image { \
+ normal, IMG2; \
+ } \
+ } \
+ }
+
+
+
+#define BUTTON_PROG3(NAME, SIG_DN, SIG_UP)\
+ program { \
+ name, NAME"-in"; \
+ signal, "mouse,in"; \
+ source, NAME; \
+ action, STATE_SET "over" 0.0; \
+ transition, DECELERATE 0.5; \
+ target, NAME; \
+ } \
+ program { \
+ name, NAME"-out"; \
+ signal, "mouse,out"; \
+ source, NAME; \
+ action, STATE_SET "default" 0.0;\
+ transition, DECELERATE 0.5; \
+ target, NAME; \
+ } \
+ program { \
+ name, NAME"-down1"; \
+ signal, "mouse,down,1"; \
+ source, NAME; \
+ action, SIGNAL_EMIT SIG_DN NAME; \
+ } \
+ program { \
+ name, NAME"-down2"; \
+ signal, "mouse,down,1"; \
+ source, NAME; \
+ action, STATE_SET "down" 0.0; \
+ transition, LINEAR 0.0; \
+ target, NAME; \
+ } \
+ program { \
+ name, NAME"-up1"; \
+ signal, "mouse,up,1"; \
+ source, NAME; \
+ action, SIGNAL_EMIT SIG_UP NAME; \
+ } \
+ program { \
+ name, NAME"-up2"; \
+ signal, "mouse,up,1"; \
+ source, NAME; \
+ action, STATE_SET "over" 0.0; \
+ transition, LINEAR 0.0; \
+ target, NAME; \
+ } \
+
+
+
+
+#define TOG_BUTTON(NAME, NAME2, IMG, IMG2, IMG3, IMG4, W, H, REL1_TO, REL1_REL, REL1_OFF, REL2_TO, REL2_REL, REL2_OFF) \
+ part { \
+ name, NAME; \
+ description { \
+ state, "default" 0.0; \
+ min, W H; \
+ max, W H; \
+ color, 255 255 255 127; \
+ rel1 { \
+ to, REL1_TO; \
+ relative, REL1_REL; \
+ offset, REL1_OFF; \
+ } \
+ rel2 { \
+ to, REL2_TO; \
+ relative, REL2_REL; \
+ offset, REL2_OFF; \
+ } \
+ image { \
+ normal, IMG; \
+ } \
+ } \
+ description { \
+ state, "toggled" 0.0; \
+ min, W H; \
+ max, W H; \
+ visible, 0; \
+ color, 255 255 255 127; \
+ rel1 { \
+ to, REL1_TO; \
+ relative, REL1_REL; \
+ offset, REL1_OFF; \
+ } \
+ rel2 { \
+ to, REL2_TO; \
+ relative, REL2_REL; \
+ offset, REL2_OFF; \
+ } \
+ image { \
+ normal, IMG; \
+ } \
+ } \
+ description { \
+ state, "over" 0.0; \
+ min, W H; \
+ max, W H; \
+ color, 255 255 255 255; \
+ rel1 { \
+ to, REL1_TO; \
+ relative, REL1_REL; \
+ offset, REL1_OFF; \
+ } \
+ rel2 { \
+ to, REL2_TO; \
+ relative, REL2_REL; \
+ offset, REL2_OFF; \
+ } \
+ image { \
+ normal, IMG; \
+ } \
+ } \
+ description { \
+ state, "down" 0.0; \
+ min, W H; \
+ max, W H; \
+ color, 255 255 255 255; \
+ rel1 { \
+ to, REL1_TO; \
+ relative, REL1_REL; \
+ offset, REL1_OFF; \
+ } \
+ rel2 { \
+ to, REL2_TO; \
+ relative, REL2_REL; \
+ offset, REL2_OFF; \
+ } \
+ image { \
+ normal, IMG2; \
+ } \
+ } \
+ } \
+ part { \
+ name, NAME2; \
+ description { \
+ state, "default" 0.0; \
+ min, W H; \
+ max, W H; \
+ visible, 0; \
+ color, 255 255 255 0; \
+ rel1 { \
+ to, REL1_TO; \
+ relative, REL1_REL; \
+ offset, REL1_OFF; \
+ } \
+ rel2 { \
+ to, REL2_TO; \
+ relative, REL2_REL; \
+ offset, REL2_OFF; \
+ } \
+ image { \
+ normal, IMG3; \
+ } \
+ } \
+ description { \
+ state, "toggled" 0.0; \
+ min, W H; \
+ max, W H; \
+ color, 255 255 255 127; \
+ rel1 { \
+ to, REL1_TO; \
+ relative, REL1_REL; \
+ offset, REL1_OFF; \
+ } \
+ rel2 { \
+ to, REL2_TO; \
+ relative, REL2_REL; \
+ offset, REL2_OFF; \
+ } \
+ image { \
+ normal, IMG3; \
+ } \
+ } \
+ description { \
+ state, "over" 0.0; \
+ min, W H; \
+ max, W H; \
+ color, 255 255 255 255; \
+ rel1 { \
+ to, REL1_TO; \
+ relative, REL1_REL; \
+ offset, REL1_OFF; \
+ } \
+ rel2 { \
+ to, REL2_TO; \
+ relative, REL2_REL; \
+ offset, REL2_OFF; \
+ } \
+ image { \
+ normal, IMG3; \
+ } \
+ } \
+ description { \
+ state, "down" 0.0; \
+ min, W H; \
+ max, W H; \
+ color, 255 255 255 255; \
+ rel1 { \
+ to, REL1_TO; \
+ relative, REL1_REL; \
+ offset, REL1_OFF; \
+ } \
+ rel2 { \
+ to, REL2_TO; \
+ relative, REL2_REL; \
+ offset, REL2_OFF; \
+ } \
+ image { \
+ normal, IMG4; \
+ } \
+ } \
+ }
+
+
+#define TOG_BUTTON_PROG(NAME, NAME2, SIG, SIG2) \
+ program { \
+ name, NAME"-in"; \
+ signal, "mouse,in"; \
+ source, NAME; \
+ action, STATE_SET "over" 0.0; \
+ transition, DECELERATE 0.5; \
+ target, NAME; \
+ } \
+ program { \
+ name, NAME"-out"; \
+ signal, "mouse,out"; \
+ source, NAME; \
+ action, STATE_SET "default" 0.0;\
+ transition, DECELERATE, 0.5; \
+ target, NAME; \
+ } \
+ program { \
+ name, NAME"-down1"; \
+ signal, "mouse,up,1"; \
+ source, NAME; \
+ action, SIGNAL_EMIT SIG NAME; \
+ } \
+ program { \
+ name, NAME"-down2"; \
+ signal, "mouse,down,1"; \
+ source, NAME; \
+ action, STATE_SET "down" 0.0 \
+ transition, LINEAR, 0.0; \
+ target, NAME; \
+ } \
+ program { \
+ name, NAME"-up"; \
+ signal, "mouse,up,1"; \
+ source, NAME; \
+ action, STATE_SET "over" 0.0 \
+ transition, LINEAR, 0.0; \
+ target, NAME; \
+ } \
+ program { \
+ name, NAME2"-in"; \
+ signal, "mouse,in"; \
+ source, NAME2; \
+ action, STATE_SET "over" 0.0; \
+ transition, DECELERATE 0.5; \
+ target, NAME2; \
+ } \
+ program { \
+ name, NAME2"-out"; \
+ signal, "mouse,out"; \
+ source, NAME2; \
+ action, STATE_SET "toggled" 0.0;\
+ transition, DECELERATE, 0.5; \
+ target, NAME2; \
+ } \
+ program { \
+ name, NAME2"-up1"; \
+ signal, "mouse,up,1"; \
+ source, NAME2; \
+ action, SIGNAL_EMIT SIG NAME2; \
+ } \
+ program { \
+ name, NAME2"-down2"; \
+ signal, "mouse,down,1"; \
+ source, NAME2; \
+ action, STATE_SET "down" 0.0 \
+ transition, LINEAR, 0.0; \
+ target, NAME2; \
+ } \
+ program { \
+ name, NAME2"-up"; \
+ signal, "mouse,up,1"; \
+ source, NAME2; \
+ action, STATE_SET "over" 0.0 \
+ transition, LINEAR, 0.0; \
+ target, NAME2; \
+ } \
+ program { \
+ name, NAME"-toggle"; \
+ signal, "mouse,clicked,1"; \
+ source, NAME; \
+ action, STATE_SET "toggled" 0.0; \
+ transition, LINEAR 0.0; \
+ target, NAME; \
+ target, NAME2; \
+ } \
+ program { \
+ name, NAME2"-toggle"; \
+ signal, "mouse,clicked,1"; \
+ source, NAME2; \
+ action, STATE_SET "default" 0.0; \
+ transition, LINEAR 0.0; \
+ target, NAME; \
+ target, NAME2; \
+ } \
+
+
+
+#define TEST_BUTTON_PROG(NAME, NAME2, SIG, SIG2) \
+ program { \
+ name, NAME"-toggle"; \
+ signal, "mouse,clicked,1"; \
+ source, NAME; \
+ action, STATE_SET "toggled" 0.0; \
+ transition, LINEAR 0.0; \
+ target, NAME; \
+ target, NAME2; \
+ } \
+ program { \
+ name, NAME2"-toggle"; \
+ signal, "mouse,clicked,1"; \
+ source, NAME2; \
+ action, STATE_SET "default" 0.0; \
+ transition, LINEAR 0.0; \
+ target, NAME; \
+ target, NAME2; \
+ }
+
+
--- /dev/null
+/* this makes life MUCH easier */
+
+#define TOGGLE_BUTTON(NAME, IMG, IMG2, IMG3, IMG4, W, H, REL1_TO, REL1_REL, REL1_OFF, REL2_TO, REL2_REL, REL2_OFF) \
+ part { \
+ name, NAME"-clip"; \
+ type, RECT; \
+ mouse_events, 0; \
+ description { \
+ state, "default" 0.0; \
+ visible, 1; \
+ rel1 { \
+ relative, REL1_REL; \
+ offset, REL1_OFF; \
+ to, REL1_TO; \
+ } \
+ rel2 { \
+ relative, REL2_REL; \
+ offset, REL2_OFF; \
+ to, REL2_TO; \
+ } \
+ color, 255 255 255 128; \
+ } \
+ description { \
+ state, "over" 0.0; \
+ visible, 1; \
+ rel1 { \
+ relative, REL1_REL; \
+ offset, REL1_OFF; \
+ to, REL1_TO; \
+ } \
+ rel2 { \
+ relative, REL2_REL; \
+ offset, REL2_OFF; \
+ to, REL2_TO; \
+ } \
+ color, 255 255 255 255; \
+ } \
+ } \
+ part { \
+ name, NAME; \
+ clip_to, NAME"-clip"; \
+ description { \
+ state, "default" 0.0; \
+ min, W H; \
+ max, W H; \
+ visible, 1; \
+ color, 255 255 255 255; \
+ rel1 { \
+ to, REL1_TO; \
+ relative, REL1_REL; \
+ offset, REL1_OFF; \
+ } \
+ rel2 { \
+ to, REL2_TO; \
+ relative, REL2_REL; \
+ offset, REL2_OFF; \
+ } \
+ image { \
+ normal, IMG; \
+ } \
+ } \
+ description { \
+ state, "toggled" 0.0; \
+ min, W H; \
+ max, W H; \
+ visible, 0; \
+ color, 255 255 255 0; \
+ rel1 { \
+ to, REL1_TO; \
+ relative, REL1_REL; \
+ offset, REL1_OFF; \
+ } \
+ rel2 { \
+ to, REL2_TO; \
+ relative, REL2_REL; \
+ offset, REL2_OFF; \
+ } \
+ image { \
+ normal, IMG; \
+ } \
+ } \
+ description { \
+ state, "down" 0.0; \
+ min, W H; \
+ max, W H; \
+ color, 255 255 255 255; \
+ rel1 { \
+ to, REL1_TO; \
+ relative, REL1_REL; \
+ offset, REL1_OFF; \
+ } \
+ rel2 { \
+ to, REL2_TO; \
+ relative, REL2_REL; \
+ offset, REL2_OFF; \
+ } \
+ image { \
+ normal, IMG2; \
+ } \
+ } \
+ } \
+ part { \
+ name, NAME"-2"; \
+ clip_to, NAME"-clip"; \
+ description { \
+ state, "default" 0.0; \
+ min, W H; \
+ max, W H; \
+ visible, 0; \
+ color, 255 255 255 0; \
+ rel1 { \
+ to, REL1_TO; \
+ relative, REL1_REL; \
+ offset, REL1_OFF; \
+ } \
+ rel2 { \
+ to, REL2_TO; \
+ relative, REL2_REL; \
+ offset, REL2_OFF; \
+ } \
+ image { \
+ normal, IMG3; \
+ } \
+ } \
+ description { \
+ state, "toggled" 0.0; \
+ min, W H; \
+ max, W H; \
+ visible, 1; \
+ color, 255 255 255 255; \
+ rel1 { \
+ to, REL1_TO; \
+ relative, REL1_REL; \
+ offset, REL1_OFF; \
+ } \
+ rel2 { \
+ to, REL2_TO; \
+ relative, REL2_REL; \
+ offset, REL2_OFF; \
+ } \
+ image { \
+ normal, IMG3; \
+ } \
+ } \
+ description { \
+ state, "down" 0.0; \
+ min, W H; \
+ max, W H; \
+ color, 255 255 255 255; \
+ rel1 { \
+ to, REL1_TO; \
+ relative, REL1_REL; \
+ offset, REL1_OFF; \
+ } \
+ rel2 { \
+ to, REL2_TO; \
+ relative, REL2_REL; \
+ offset, REL2_OFF; \
+ } \
+ image { \
+ normal, IMG4; \
+ } \
+ } \
+ } \
+ part { \
+ name, NAME"-grabber"; \
+ type, RECT; \
+ mouse_events, 1; \
+ repeat_events, 1; \
+ description { \
+ state, "default" 0.0; \
+ visible, 1; \
+ color, 0 0 0 0; \
+ rel1 { \
+ relative, REL1_REL; \
+ offset, REL1_OFF; \
+ to, REL1_TO; \
+ } \
+ rel2 { \
+ relative, REL2_REL; \
+ offset, REL2_OFF; \
+ to, REL2_TO; \
+ } \
+ } \
+ } \
+
+
+
+#define TOGGLE_BUTTON_PROG(NAME, SIG, SIG2) \
+ program { \
+ name, NAME"-toggle-on"; \
+ signal, "mouse,clicked,1"; \
+ source, NAME; \
+ action, STATE_SET "toggled" 0.0; \
+ transition, LINEAR 0.0; \
+ target, NAME; \
+ target, NAME"-2"; \
+ after, NAME"-sig"; \
+ } \
+ program { \
+ name, NAME"-sig"; \
+ action, SIGNAL_EMIT SIG NAME; \
+ } \
+ program { \
+ name, NAME"-toggle-off"; \
+ signal, "mouse,clicked,1"; \
+ source, NAME"-2"; \
+ action, STATE_SET "default" 0.0; \
+ transition, LINEAR 0.0; \
+ target, NAME; \
+ target, NAME"-2"; \
+ after, NAME"-sig2"; \
+ } \
+ program { \
+ name, NAME"-sig2"; \
+ action, SIGNAL_EMIT SIG2 NAME"-2"; \
+ } \
+ program { \
+ name, NAME"-grabber-in"; \
+ signal, "mouse,in"; \
+ source, NAME"-grabber"; \
+ action, STATE_SET "over" 0.0; \
+ transition, DECELERATE 0.5; \
+ target, NAME"-clip"; \
+ } \
+ program { \
+ name, NAME"-grabber-out"; \
+ signal, "mouse,out"; \
+ source, NAME"-grabber"; \
+ action, STATE_SET "default" 0.0; \
+ transition, DECELERATE 0.5; \
+ target, NAME"-clip"; \
+ } \
+ program { \
+ name, NAME"-down"; \
+ signal, "mouse,down,1"; \
+ source, NAME; \
+ action, STATE_SET "down" 0.0; \
+ transition, LINEAR 0.0; \
+ target, NAME; \
+ } \
+ program { \
+ name, NAME"-2-down"; \
+ signal, "mouse,down,1"; \
+ source, NAME"-2"; \
+ action, STATE_SET "down" 0.0; \
+ transition, LINEAR 0.0; \
+ target, NAME"-2"; \
+ } \
+
+
--- /dev/null
+#define DOT(NUM, Y1, Y2) \
+ part { \
+ name, "dot"NUM; \
+ description { \
+ state, "default" 0.0; \
+ min, 3 3; \
+ max, 3 3; \
+ color, 0 0 0 127; \
+ rel1 { \
+ to, "screen"; \
+ relative, 0 1; \
+ offset, 5 Y1; \
+ } \
+ rel2 { \
+ to, "screen"; \
+ relative, 0 1; \
+ offset, 8 Y2; \
+ } \
+ image { \
+ normal, "dot.png"; \
+ } \
+ } \
+ description { \
+ state, "end" 0.0; \
+ min, 3 3; \
+ max, 3 3; \
+ color, 0 0 0 0; \
+ rel1 { \
+ to, "screen"; \
+ relative, .5 1; \
+ offset, -3 Y1; \
+ } \
+ rel2 { \
+ to, "screen"; \
+ relative, .5 1; \
+ offset, 0 Y2; \
+ } \
+ image { \
+ normal, "dot.png"; \
+ } \
+ } \
+ }
+
+DOT(0, -24, -21)
+DOT(1, -20, -17)
+DOT(2, -16, -13)
+DOT(3, -12, -9)
+DOT(4, -8, -5)
+
--- /dev/null
+ part {
+ name, "controlArea";
+ type, RECT;
+ description {
+ state, "default" 0.0;
+ visible, 0;
+ min, 120 25;
+ max, 120 25;
+ rel1 {
+ to, "main";
+ relative, 0 1;
+ offset, 0 -59;
+ }
+ rel2 {
+ to, "main";
+ relative, 1 1;
+ offset, -1 -35;
+ }
+ }
+ } //part
+
+BUTTON("prev", "prev1.png", "prev2.png", 26, 22,
+ "controlArea", 0 0, 5 0,
+ "controlArea", 0 1, 31 -1)
+BUTTON("rew", "rew1.png", "rew2.png", 17, 22,
+ "controlArea", 0 0, 32 0,
+ "controlArea", 0 1, 51 -1)
+TOGGLE_BUTTON("play", "play1.png", "play2.png",
+ "pause1.png", "pause2.png", 20, 22,
+ "controlArea", 0 0, 51 0,
+ "controlArea", 0 1, 71 -1)
+BUTTON("ff", "ff1.png", "ff2.png", 17, 22,
+ "controlArea", 0 0, 71 0,
+ "controlArea", 0 1, 88 -1)
+BUTTON("next", "next1.png", "next2.png", 26, 22,
+ "controlArea", 0 0, 89 0,
+ "controlArea", 0 1, 117 -1)
+
+
+BUTTON("pl", "pl1.png", "pl2.png", 17, 17,
+ "main", 1 1, -21 -47,
+ "main", 1 1, -4 -30)
+
+BUTTON("x", "x1.png", "x2.png", 15, 15,
+ "main", 1 1, -20 -27,
+ "main", 1 1, -5 -12)
+
+
+ part {
+ name, "playlistButtonArea";
+ type, RECT;
+ description {
+ state, "default" 0.0;
+ visible, 0;
+ min, 61 20;
+ max, 61 20;
+ rel1 {
+ to, "playlistPanel";
+ relative, 0 1;
+ offset, 0 -23;
+ }
+ rel2 {
+ to, "playlistPanel";
+ relative, 1 1;
+ offset, -1 -4;
+ }
+ }
+ } //part
+
+BUTTON_CLIPPED("plus", "plus1.png", "plus2.png", 17, 17,
+ "playlistButtonArea", 0 0, 3 2,
+ "playlistButtonArea", 0 0, 20 19,
+ "playlistClip")
+BUTTON_CLIPPED("minus", "minus1.png", "minus2.png", 19, 10,
+ "playlistButtonArea", 0 0, 21 6,
+ "playlistButtonArea", 0 0, 40 16,
+ "playlistClip")
+BUTTON_CLIPPED("edit", "edit1.png", "edit2.png", 20, 9,
+ "playlistButtonArea", 0 0, 39 6,
+ "playlistButtonArea", 0 0, 59 15,
+ "playlistClip")
+
+
+
+ part {
+ name, "playlistOpenner";
+ type, RECT;
+ repeat_events, 1;
+ description {
+ state, "default" 0.0;
+ visible, 1;
+ color, 0 0 0 0;
+ rel1 {
+ to, "pl";
+ relative, 0 0;
+ offset, 0 0;
+ }
+ rel2 {
+ to, "pl";
+ relative, 1 1;
+ offset, -1 -1;
+ }
+ }
+ description {
+ state, "open" 0.0;
+ visible, 0;
+ color, 0 0 0 0;
+ rel1 {
+ to, "pl";
+ relative, 0 0;
+ offset, 0 0;
+ }
+ rel2 {
+ to, "pl";
+ relative, 1 1;
+ offset, -1 -1;
+ }
+ }
+ } //part
+
+
+ part {
+ name, "playlistCloser";
+ type, RECT;
+ repeat_events, 1;
+ description {
+ state, "default" 0.0;
+ visible, 0;
+ color, 0 0 0 0;
+ rel1 {
+ to, "pl";
+ relative, 0 0;
+ offset, 0 0;
+ }
+ rel2 {
+ to, "pl";
+ relative, 1 1;
+ offset, -1 -1;
+ }
+ }
+ description {
+ state, "open" 0.0;
+ visible, 1;
+ color, 0 0 0 0;
+ rel1 {
+ to, "pl";
+ relative, 0 0;
+ offset, 0 0;
+ }
+ rel2 {
+ to, "pl";
+ relative, 1 1;
+ offset, -1 -1;
+ }
+ }
+ } //part
--- /dev/null
+
+ part {
+ name, "main";
+ mouse_events, 1;
+ repeat_events, 1;
+ description {
+ state, "default" 0.0;
+ min, 199 182;
+ max, 99999 182;
+ rel1 {
+ relative, 0 0;
+ offset, 0 0;
+ }
+ rel2 {
+ relative, 1 0;
+ offset, -1 182;
+ }
+ image {
+ normal, "main.png";
+ border, 10 10 20 10;
+ }
+ }
+ } //part
+
+ part {
+ name, "top_grad";
+ mouse_events, 1;
+ repeat_events, 1;
+ description {
+ state, "default" 0.0;
+ min, 30 10;
+ max, 99999 10;
+ color, WINTER_COLOR;
+ rel1 {
+ to, "main";
+ relative, 0 0;
+ offset, 0 0;
+ }
+ rel2 {
+ to, "main";
+ relative, 1 0;
+ offset, -1 10;
+ }
+ image {
+ normal, "top_grad.png";
+ border, 10 10 10 10;
+ }
+ }
+ } //part
+
+ part {
+ name, "screen";
+ description {
+ state, "default" 0.0;
+ visible, 1;
+ rel1 {
+ to, "main";
+ relative, 0 0;
+ offset, 7 17;
+ }
+ rel2 {
+ to, "main";
+ relative, 1 0;
+ offset, -8 101;
+ }
+ image {
+ normal, "screen.png";
+ border, 5 5 5 5;
+ }
+ }
+ }
+
+
+ part {
+ name, "bottomConfine";
+ mouse_events, 0;
+ type, RECT;
+ description {
+ state, "default" 0.0;
+ visible, 0;
+ rel1 {
+ to, "main";
+ relative, 0 1;
+ offset, 0 -1;
+ }
+ rel2 {
+ relative, 1 1;
+ offset, -1 -1;
+ }
+ }
+ } //part
+
+ part {
+ name, "bottom";
+ mouse_events, 1;
+ repeat_events, 1;
+ //dragable {
+ // x, 1 0 0;
+ // y, -1 1 25;
+ // confine, "bottomConfine";
+ //}
+/*
+ description {
+ state, "default" 0.0;
+ min, 199 10;
+ rel1 {
+ to_x, "main";
+ relative, 0 1;
+ offset, 0 -11;
+ }
+ rel2 {
+ to_x, "main";
+ relative, 1 1;
+ offset, -1 -1;
+ }
+ image {
+ normal, "bot.png";
+ border, 0 0 0 0;
+ }
+ border, 7 7 0 0;
+ }
+*/
+
+
+ description {
+ state, "default" 0.0;
+ min, 199 10;
+ max, 99999 10;
+ rel1 {
+ to, "main";
+ relative, 0 1;
+ offset, 0 -1;
+ }
+ rel2 {
+ to, "main";
+ relative, 1 1;
+ offset, -1 9;
+ }
+ image {
+ normal, "bot.png";
+ border, 7 7 0 0;
+ }
+ }
+ description {
+ state, "open" 0.0;
+ min, 199 10;
+ max, 99999 10;
+ rel1 {
+ to_x, "main";
+ relative, 0 1;
+ offset, 0 -11;
+ }
+ rel2 {
+ to_x, "main";
+ relative, 1 1;
+ offset, -1 -1;
+ }
+ image {
+ normal, "bot.png";
+ border, 7 7 0 0;
+ }
+ }
+ } //part
+
+ part {
+ name, "bottom_grad";
+ mouse_events, 1;
+ repeat_events, 1;
+ description {
+ state, "default" 0.0;
+ min, 30 10;
+ max, 99999 10;
+ color, WINTER_COLOR;
+ rel1 {
+ to, "bottom";
+ relative, 0 0;
+ offset, 0 0;
+ }
+ rel2 {
+ to, "bottom";
+ relative, 1 1;
+ offset, -1 -1;
+ }
+ image {
+ normal, "bot_grad.png";
+ border, 10 10 10 10;
+ }
+ }
+ } //part
--- /dev/null
+
+ part {
+ name, "playlistPanel";
+ mouse_events, 1;
+ description {
+ state, "default" 0.0;
+ rel1 {
+ to, "main";
+ relative, 0 1;
+ offset, 1 0;
+ }
+ rel2 {
+ to, "bottom";
+ relative, 1 0;
+ offset, -2 -1;
+ }
+ image {
+ normal, "panel.png";
+ border, 3 3 0 0;
+ }
+ }
+ } //part
+
+ part {
+ name, "playlist.container";
+ type, SWALLOW;
+ mouse_events, 1;
+ repeat_events, 1;
+ clip_to, "playlistClip";
+ description {
+ state, "default" 0.0;
+ color, 0 0 0 0;
+ min, 5 5;
+ rel1 {
+ to, "playlistPanel";
+ relative, 0 0;
+ offset, 5 5;
+ }
+ rel2 {
+ to_x, "playlistPanel";
+ to_y, "playlistButtonArea";
+ relative, 1 0;
+ offset, -6 -5;
+ }
+ }
+ } //part
+
+ part {
+ name, "playlistGrabber";
+ type, RECT;
+ mouse_events, 1;
+ repeat_events, 1;
+ description {
+ state, "default" 0.0;
+ color, 0 0 0 0;
+ rel1 {
+ to, "playlist.container";
+ relative, 0 0;
+ offset, 0 0;
+ }
+ rel2 {
+ to, "playlist.container";
+ relative, 1 1;
+ offset, -1 -1;
+ }
+ }
+ } // end playlistGrabber
+
+ part {
+ name, "playlistShadow";
+ mouse_events, 1;
+ clip_to, "playlistClip";
+ description {
+ state, "default" 0.0;
+ rel1 {
+ to, "playlistPanel";
+ relative, 0 0;
+ offset, 0 0;
+ }
+ rel2 {
+ to, "playlistPanel";
+ relative, 1 0;
+ offset, -1 5;
+ }
+ image {
+ normal, "shad.png";
+ }
+ }
+ } //part
+
+
+ part {
+ name, "playlistClip";
+ type, RECT;
+ mouse_events, 1;
+ description {
+ state, "default" 0.0;
+ rel1 {
+ to, "playlistPanel";
+ relative, 0 0;
+ offset, 0 0;
+ }
+ rel2 {
+ to, "playlistPanel";
+ relative, 1 1;
+ offset, -1 -1;
+ }
+ }
+ } //part
+
--- /dev/null
+
+ part {
+ name, "seekerTrough";
+ description {
+ state, "default" 0.0;
+ visible, 1;
+ min, 10 6;
+ max, 9999 6;
+ rel1 {
+ to, "screen";
+ relative, 0 1;
+ offset, 5 7;
+ }
+ rel2 {
+ to, "screen";
+ relative, 1 1;
+ offset, -6 13;
+ }
+ image {
+ normal, "seeker_trough.png";
+ border, 5 5 1 1;
+ }
+ }
+ }
+
+ part {
+ name, "seekerBar";
+ description {
+ state, "default" 0.0;
+ visible, 1;
+ min, 0 6;
+ max, 9999 6;
+ rel1 {
+ to, "seekerTrough";
+ relative, 0 0;
+ offset, 0 0;
+ }
+ rel2 {
+ to_x, "seeker";
+ to_y, "seekerTrough";
+ relative, 0 1;
+ offset, 0 -1;
+ }
+ image {
+ normal, "seeker_bar.png";
+ border, 5 5 1 1;
+ }
+ }
+ }
+ part {
+ name, "seekerBarGrad";
+ description {
+ state, "default" 0.0;
+ visible, 1;
+ min, 0 6;
+ max, 9999 6;
+ color, WINTER_COLOR;
+ rel1 {
+ to, "seekerBar";
+ relative, 0 0;
+ offset, 0 0;
+ }
+ rel2 {
+ to, "seekerBar";
+ relative, 1 1;
+ offset, -1 -1;
+ }
+ image {
+ normal, "seeker_bar_grad.png";
+ border, 5 5 1 1;
+ }
+ }
+ }
+
+ part {
+ name, "seeker";
+ type, RECT;
+ dragable {
+ x, 1 1 1;
+ y, 0 0 0;
+ confine, "seekerTrough";
+ }
+ description {
+ state, "default" 0.0;
+ visible, 0;
+ color, 0 0 0 255;
+ min, 1 6;
+ max, 1 6;
+ rel1 {
+ to, "seekerTrough";
+ relative, 0 0;
+ offset, 0 0;
+ }
+ rel2 {
+ to, "seekerTrough";
+ relative, 1 1;
+ offset, -1 -1;
+ }
+ }
+ }
+
+ part {
+ name, "seeker_grabber";
+ type, RECT;
+ description {
+ state, "default" 0.0;
+ visible, 1;
+ color, 0 0 0 0;
+ rel1 {
+ to, "seekerTrough";
+ relative, 0 0;
+ offset, -2 -2;
+ }
+ rel2 {
+ to, "seekerTrough";
+ relative, 1 1;
+ offset, 1 1;
+ }
+ }
+ }
+
+
+
--- /dev/null
+ part {
+ name, "artist_name";
+ type, TEXT;
+ mouse_events, 1;
+ description {
+ state, "default" 0.0;
+ visible, 1;
+ color, 0 0 0 200;
+ rel1 {
+ to, "screen";
+ relative, 0 0;
+ offset, 7 7;
+ }
+ rel2 {
+ to, "screen";
+ relative, 1 0;
+ offset, -5 25;
+ }
+ text {
+ text, "artist";
+ font, "Vera";
+ size, 12;
+ min, 0 1;
+ align, 0 0;
+ }
+ }
+ } //artist_name part
+
+ part {
+ name, "album_name";
+ type, TEXT;
+ mouse_events, 1;
+ description {
+ state, "default" 0.0;
+ visible, 1;
+ color, 0 0 0 200;
+ rel1 {
+ to, "artist_name";
+ relative, 0 1;
+ offset, 0 5;
+ }
+ rel2 {
+ to, "artist_name";
+ relative, 1 0;
+ offset, 0 25;
+ }
+ text {
+ text, "album";
+ font, "Vera";
+ size, 10;
+ min, 0 1;
+ align, 0 0;
+ }
+ }
+ } // album_name part
+
+ part {
+ name, "song_name";
+ type, TEXT;
+ mouse_events, 1;
+ description {
+ state, "default" 0.0;
+ visible, 1;
+ color, 0 0 0 200;
+ rel1 {
+ to, "album_name";
+ relative, 0 1;
+ offset, 0 5;
+ }
+ rel2 {
+ to, "album_name";
+ relative, 1 0;
+ offset, 0 25;
+ }
+ text {
+ text, "song";
+ font, "Vera";
+ size, 10;
+ min, 0 1;
+ align, 0 0;
+ }
+ }
+ } //part
+
+ part {
+ name, "player.time";
+ type, TEXT;
+ mouse_events, 1;
+ description {
+ state, "default" 0.0;
+ visible, 1;
+ color, 0 0 0 200;
+ rel1 {
+ to_x, "screen";
+ to_y, "song_name";
+ relative, 0 1;
+ offset, 7 5;
+ }
+ rel2 {
+ to, "screen";
+ relative, 1 1;
+ offset, -8 -8;
+ }
+ text {
+ text, "00:00";
+ font, "Vera";
+ size, 14;
+ min, 0 1;
+ align, 1 0;
+ }
+ }
+ } //time_text part
+
+
+ part {
+ name, "vol_display_text";
+ type, TEXT;
+ mouse_events, 1;
+ description {
+ state, "default" 0.0;
+ visible, 1;
+ color, 0 0 0 200;
+ rel1 {
+ to, "volumeBox";
+ relative, 0 0;
+ offset, 2 3;
+ }
+ rel2 {
+ to, "volumeBox";
+ relative, 1 1;
+ offset, -3 -3;
+ }
+ text {
+ text, "100";
+ font, "Vera";
+ size, 10;
+ min, 0 0;
+ align, .5 .5;
+ }
+ }
+ } //part
--- /dev/null
+ part {
+ name, "volumeBox";
+ description {
+ min, 27 16;
+ max, 27 16;
+ rel1 {
+ to, "controlArea";
+ relative, 0 1;
+ offset, 0 7;
+ }
+ rel2 {
+ to, "controlArea";
+ relative, 1 1;
+ offset, -1 23;
+ }
+ image {
+ normal, "volume.png";
+ }
+ }
+ } //part
+
+BUTTON2("vol-dn", "vol-dn.png", "vol-dn-clicked.png", "vol-dn-border.png",
+ 11, 16,
+ "volumeBox", 0 0, -10 0,
+ "volumeBox", 0 1, 0 -1)
+BUTTON2("vol-up", "vol-up.png", "vol-up-clicked.png", "vol-up-border.png",
+ 11, 16,
+ "volumeBox", 1 0, -1 0,
+ "volumeBox", 1 1, 10 -1)
+
--- /dev/null
+#define DOT_PROG(NUM, S1, S2) \
+ program { \
+ name, "ani"NUM".1"; \
+ action, STATE_SET "end" 0.0; \
+ transition, DECELERATE S1; \
+ target, "dot"NUM; \
+ after, "ani"NUM".2"; \
+ } \
+ program { \
+ name, "ani"NUM".2"; \
+ action, STATE_SET "default" 0.0; \
+ target, "dot"NUM; \
+ transition, LINEAR 0.0; \
+ after, "ani"NUM".3"; \
+ in, .5 .5; \
+ } \
+ program { \
+ name, "ani"NUM".3"; \
+ action, STATE_SET "end" 0.0; \
+ transition, DECELERATE S2; \
+ target, "dot"NUM; \
+ after, "ani"NUM".4"; \
+ } \
+ program { \
+ name, "ani"NUM".4"; \
+ action, STATE_SET "default" 0.0; \
+ target, "dot"NUM; \
+ transition, LINEAR 0.0; \
+ after, "ani"NUM".1"; \
+ in, .5 .5; \
+ } \
+ program { \
+ name, "ani"NUM".stop"; \
+ action, ACTION_STOP; \
+ target, "ani"NUM".1"; \
+ target, "ani"NUM".2"; \
+ target, "ani"NUM".3"; \
+ target, "ani"NUM".4"; \
+ after, "ani"NUM".reset"; \
+ } \
+ program { \
+ name, "ani"NUM".init"; \
+ signal, "show"; \
+ source, ""; \
+ after, "ani"NUM".stop"; \
+ } \
+ program { \
+ name, "ani"NUM".reset"; \
+ action, STATE_SET "default" 0.0; \
+ target, "dot"NUM; \
+ transition, LINEAR 0.0; \
+ /* the following line breaks the animation, since the
+ * program's execution is delayed by 0.5-1.0 seconds.
+ * This kinda spoils the effect though :/
+ * rewrite with embryo! :)
+ in, .5 .5;*/ \
+ } \
+ program { \
+ name, "ani"NUM".playing"; \
+ signal, "PLAYBACK_STATE_PLAYING"; \
+ source, "*"; \
+ after, "ani"NUM".1"; \
+ } \
+ program { \
+ name, "ani"NUM".paused"; \
+ signal, "PLAYBACK_STATE_PAUSED"; \
+ source, "*"; \
+ after, "ani"NUM".stop"; \
+ } \
+ program { \
+ name, "ani"NUM".stopped"; \
+ signal, "PLAYBACK_STATE_STOPPED"; \
+ source, "*"; \
+ after, "ani"NUM".stop"; \
+ }
+
+DOT_PROG(0, 1.15, .85)
+DOT_PROG(1, .75, 1)
+DOT_PROG(2, 1.5, 2.0)
+DOT_PROG(3, 1.25, .75)
+DOT_PROG(4, 1.0, 1.5)
--- /dev/null
+BUTTON_PROG("prev", "playback.prev")
+//BUTTON_PROG("rew", "SEEK_BACK")
+BUTTON_PROG3("rew", "SEEK_BACK_START", "SEEK_BACK_STOP")
+//BUTTON_PROG("play", "playback.play")
+//BUTTON_PROG("pause", "playback.pause")
+TOGGLE_BUTTON_PROG("play", "playback.play", "playback.pause")
+//BUTTON_PROG("ff", "SEEK_FORWARD")
+BUTTON_PROG3("ff", "SEEK_FORWARD_START", "SEEK_FORWARD_STOP")
+BUTTON_PROG("next", "playback.next")
+
+
+BUTTON_PROG("pl", "")
+BUTTON_PROG("x", "close")
+
+
+BUTTON_PROG("plus", "file_dialog.open")
+BUTTON_PROG("minus", "PLAYLIST_DEL")
+BUTTON_PROG("edit", "")
+
+
+ program {
+ name, "play-started";
+ signal, "PLAYBACK_STATE_PLAYING";
+ source, "*";
+ action, STATE_SET "toggled" 0.0;
+ transition, LINEAR 0.0;
+ target, "play";
+ target, "play-2";
+ }
+ program {
+ name, "play-stopped";
+ signal, "PLAYBACK_STATE_STOPPED";
+ source, "*";
+ action, STATE_SET "default" 0.0;
+ transition, LINEAR 0.0;
+ target, "play";
+ target, "play-2";
+ }
--- /dev/null
+ program {
+ name, "playlistOpen";
+ signal, "mouse,up,1";
+ source, "playlistOpenner";
+ action, STATE_SET "open" 0.0;
+ transition, DECELERATE 0.5;
+ target, "bottom";
+ target, "playlistOpenner";
+ target, "playlistCloser";
+ }
+ program {
+ name, "playlistClose";
+ signal, "mouse,up,1";
+ source, "playlistCloser";
+ action, STATE_SET "default" 0.0;
+ transition, DECELERATE 0.5;
+ target, "bottom";
+ target, "playlistOpenner";
+ target, "playlistCloser";
+ }
+
+
+ program {
+ name, "scroll_up";
+ signal, "mouse,wheel,0,-1";
+ source, "playlistGrabber";
+ action, SIGNAL_EMIT "PLAYLIST_SCROLL_UP" "";
+ }
+ program {
+ name, "scroll_down";
+ signal, "mouse,wheel,0,1";
+ source, "playlistGrabber";
+ action, SIGNAL_EMIT "PLAYLIST_SCROLL_DOWN" "";
+ }
--- /dev/null
+ program {
+ name, "seeker-start";
+ signal, "mouse,down,1";
+ source, "seeker_grabber";
+ action, SIGNAL_EMIT "SEEKER_START" "";
+ }
+ program {
+ name, "seeker-update";
+ signal, "mouse,move";
+ source, "seeker_grabber";
+ action, SIGNAL_EMIT "SEEKER_UPDATE" "";
+ }
+ program {
+ name, "seeker-stop";
+ signal, "mouse,up,1";
+ source, "seeker_grabber";
+ action, SIGNAL_EMIT "SEEKER_STOP" "";
+ }
--- /dev/null
+ program {
+ name, "switch";
+ signal, "mouse,down,1,double";
+ source, "main";
+ action, SIGNAL_EMIT "SWITCH_GROUP" "collapsed";
+ }
--- /dev/null
+ program {
+ name, "time_toggle";
+ signal, "mouse,clicked,1";
+ source, "time_text";
+ action, SIGNAL_EMIT "TOGGLE_TIME_DISPLAY_MODE" "time_toggle";
+ }
+ program {
+ name, "repeat_toggle";
+ signal, "mouse,clicked,1";
+ source, "repeat*";
+ action, "SIGNAL_EMIT" "TOGGLE_REPEAT_MODE" "repeat_toggle";
+ }
--- /dev/null
+
+BUTTON_PROG2("vol-dn", "vol-dn.over", "vol-dn.out", "vol-dn.down", "vol-dn.down2", "vol-dn.up", "VOL_DECR")
+BUTTON_PROG2("vol-up", "vol-up.over", "vol-up.out", "vol-up.down", "vol-up.down2", "vol-up.up", "VOL_INCR")
--- /dev/null
+#define WINTER_BLUE 229 239 255 255
+#define WINTER_GREEN 229 255 239 255
+#define WINTER_RED 255 229 229 255
+
+#define WINTER_COLOR WINTER_BLUE
+
+#include "../common.inc"
+
+#include "macros/macros.inc"
+#include "macros/toggle.inc"
+
+images {
+#include "images/euphoria.edc"
+#include "images/collapsed.edc"
+}
+
+fonts {
+ font, "Vera.ttf" "Vera";
+}
+
+collections {
+#include "groups/euphoria.edc"
+#include "groups/collapsed.edc"
+#include "groups/playlist_item.edc"
+} //collections
--- /dev/null
+require "esmart_file_dialog"
+
+class FileDialog < Ecore::Evas::SoftwareX11
+ def FileDialog.open(eet)
+ fd = FileDialog.new(eet) { |file| yield file }
+ fd.show
+ end
+
+ def initialize(eet)
+ super()
+
+ setup_ee
+
+ @fd = Esmart::FileDialog.new(evas, eet) do |op|
+ case op
+ when :ok
+ @fd.selections.each do |sel|
+ yield File.join(@fd.current_directory, sel)
+ end
+ when :cancel
+ close
+ end
+ end
+
+ @fd.show
+
+ w, h = @fd.edje.get_size_max
+ set_size_max(w, h)
+
+ w, h = @fd.edje.get_size_min
+ set_size_min(w, h)
+
+ resize(w, h)
+ end
+
+ def close
+ @bg = nil
+ @dragger = nil
+ delete
+ end
+
+ private
+ def setup_ee
+ self.title = "Euphoria File Dialog"
+ self.borderless = true
+
+ on_pre_render { Edje.thaw }
+ on_post_render { Edje.freeze }
+
+ on_resize do
+ x, y, w, h = geometry
+
+ @dragger.resize(w, h)
+ @bg.resize(w, h)
+ @fd.resize(w, h)
+ end
+
+ @bg = Evas::Rectangle.new(evas)
+ @bg.set_color(89, 94, 97, 255)
+ @bg.show
+
+ @dragger = Esmart::Draggies.new(self)
+ @dragger.button = 1
+ @dragger.show
+ end
+end
--- /dev/null
+# $Id: playback_status_handler.rb,v 1.1 2005/04/24 22:33:15 tsauerbeck Exp $
+
+class PlaybackStatusHandler
+ def initialize(xmms, &block)
+ @block = block
+
+ @state = xmms.playback_status.wait.value
+ @block.call(@state)
+
+ xmms.broadcast_playback_status.notifier do |res|
+ if @state != res.value
+ @state = res.value
+ @block.call(@state)
+ end
+ end
+ end
+end
--- /dev/null
+# $Id: playlist.rb,v 1.30 2006/03/11 19:09:32 tsauerbeck Exp $
+
+require "euphoria/playlist_item"
+
+class Playlist < Array
+ attr_reader :container
+
+ def initialize(xmms, on_cur_item_changed)
+ super()
+
+ @xmms = xmms
+ @on_cur_item_changed = on_cur_item_changed
+ @ee = nil
+ @eet = nil
+ @container = nil
+
+ @xmms.playlist_list.notifier { |res| push(*res.value) }
+
+ begin
+ @current_pos = @xmms.playlist_current_pos.wait.value
+ rescue Xmms::Result::ValueError
+ @current_pos = nil
+ end
+
+ @xmms.broadcast_playlist_current_pos.notifier do |res|
+ @current_pos = res.value
+
+ tmp = find { |i| i.hilighted }
+ tmp.hilighted = false unless tmp.nil?
+
+ current_item.hilighted = true
+ end
+
+ @xmms.broadcast_playlist_changed.notifier do |res|
+ case res.value[:type]
+ when Xmms::Result::PLAYLIST_CHANGED_ADD
+ self << res.value[:id]
+ when Xmms::Result::PLAYLIST_CHANGED_REMOVE
+ # the daemon sends the position of the song, not the
+ # unique mlib id
+ delete(self[res.value[:position]])
+ when Xmms::Result::PLAYLIST_CHANGED_CLEAR
+ clear
+ end
+ end
+
+ @xmms.broadcast_medialib_entry_changed.notifier do |res|
+ @xmms.medialib_get_info(res.value).notifier do |res2|
+ props = res2.value
+
+ find_all { |i| i.id == props[:id] }.each do |item|
+ item.properties = props
+
+ if current_item && current_item.id == item.id
+ @on_cur_item_changed.call(item)
+ end
+ end
+ end
+ end
+ end
+
+ def current_item
+ @current_pos && self[@current_pos]
+ end
+
+ def show(eet, is_separate)
+ return unless @ee.nil?
+
+ @eet = eet
+
+ if is_separate
+ setup_ee
+ else
+ @ee = Euphoria.instance.ee
+ @edje = Euphoria.instance.edje
+ end
+
+ @container = Esmart::Container.new(@edje.evas)
+ @container.name = "playlist"
+ @container.direction = Esmart::Container::VERTICAL
+ @container.spacing = 0
+ @container.fill_policy = Esmart::Container::FILL_X
+ @container.show
+
+ @edje.part("playlist.container").swallow(@container)
+
+ if is_separate
+ @edje.on_signal("close") do
+ each { |i| i.hide }
+
+ @edje = nil
+ @container = nil
+ @dragger = nil
+ @ee.delete
+ @ee = nil
+ end
+ end
+
+ @edje.on_signal("drag", "playlist.scrollbar.handle") do
+ @container.scroll_percent =
+ @edje.part("playlist.scrollbar.handle").
+ get_drag_value.last
+ end
+
+ if is_separate
+ @edje.on_signal("file_dialog.open") do
+ Euphoria.instance.show_file_dialog
+ end
+ end
+
+ @edje.on_signal("playlist_item.remove") do
+ find_all { |i| i.selected }.each do |i|
+ @xmms.playlist_remove(i.position)
+ end
+ end
+
+ each { |i| i.show(eet) }
+
+ current_item && (current_item.hilighted = true)
+ end
+
+ def <<(id)
+ push(id)
+ end
+
+ def push(*args)
+ args.each do |id|
+ item = PlaylistItem.new(id, @xmms, self)
+ super(item)
+
+ item.show(@eet) unless @container.nil?
+ (item.selected = true) if size == 1
+ end
+
+ self
+ end
+
+ def delete(item)
+ unless item.is_a?(PlaylistItem)
+ item = find { |i| i.id == item }
+ end
+
+ item.hide if item.visible?
+ super
+
+ # fix up positions of the remaining items
+ self[item.position..-1].each do |item|
+ item.position -= 1
+ end
+ end
+
+ def clear
+ each { |i| i.hide if i.visible? }
+ super
+ end
+
+ private
+ def setup_ee
+ @ee = Ecore::Evas::SoftwareX11.new
+ @ee.title = "Euphoria Playlist"
+ @ee.borderless = true
+
+ @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
+
+ @edje = Edje::Edje.new(@ee.evas)
+ @edje.load(@eet, "playlist")
+ @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.show
+
+ @ee.shaped = !@edje.data("shaped").nil?
+ end
+end
--- /dev/null
+# $Id: playlist_item.rb,v 1.21 2006/07/29 01:55:31 tilman Exp $
+
+class PlaylistItem
+ attr_reader :id, :edje, :position, :selected, :hilighted
+
+ def initialize(id, xmms, playlist)
+ @id = id
+ @position = playlist.size
+
+ @xmms = xmms
+ @playlist = playlist
+
+ @edje = nil
+ @height = 0
+ @selected = false
+ @hilighted = false
+
+ @props = {}
+
+ @xmms.medialib_get_info(id).notifier do |res|
+ self.properties = res.value
+ end
+ end
+
+ def method_missing(method)
+ @props[method] || "unknown #{method}"
+ end
+
+ def duration
+ @props[:duration].to_i / 1000
+ end
+
+ def show(eet)
+ @edje = Edje::Edje.new(@playlist.container.evas)
+ @edje.load(eet, "playlist_item")
+ w, @height = @edje.get_size_min
+
+ set_parts_text
+
+ w, h = @edje.get_size_min
+ @edje.resize(w, h)
+
+ @playlist.container.append_element(@edje)
+
+ self.selected = @selected
+
+ @edje.on_signal("playlist_item.selected") do |sig, src|
+ next if src == "Euphoria"
+
+ @playlist.each do |item|
+ item.selected = (item == self)
+ end
+ end
+
+ @edje.on_signal("playlist_item.hilighted") do |sig, src|
+ next if src == "Euphoria"
+
+ @playlist.each do |item|
+ item.hilighted = (item == self)
+ end
+ end
+
+ @edje.on_signal("playlist_item.play") do
+ @xmms.playlist_set_next(@position).wait
+ @xmms.playback_tickle.wait
+ @xmms.playback_start.wait
+ end
+
+ @edje.on_signal("PLAYLIST_SCROLL_UP", "") do
+ @playlist.container.scroll(h * 3)
+ end
+
+ @edje.on_signal("PLAYLIST_SCROLL_DOWN", "") do
+ @playlist.container.scroll(h * -3)
+ end
+ end
+
+ def hilighted=(b)
+ @hilighted = b
+
+ sig = b ? "hilighted" : "unhilighted"
+ unless @edje.nil?
+ @edje.emit_signal("playlist_item.#{sig}", "Euphoria")
+ end
+ end
+
+ def selected=(b)
+ @selected = b
+
+ sig = b ? "selected" : "unselected"
+ unless @edje.nil?
+ @edje.emit_signal("playlist_item.#{sig}", "Euphoria")
+ end
+ end
+
+ def visible?
+ # since we don't actually hide the edje, but just delete it,
+ # we don't need to check @edje.visible? here
+ !@edje.nil?
+ end
+
+ def hide
+ @playlist.container.remove_element(@edje)
+ @edje.delete
+ @edje = nil
+ end
+
+ def properties=(hash)
+ @props = hash || {}
+
+ set_parts_text unless @edje.nil?
+ end
+
+ def position=(pos)
+ @position = pos
+ set_parts_text unless @edje.nil?
+ end
+
+ private
+ def set_parts_text
+ tmp = (duration == -1) ? "" :
+ ("%i:%02i" % [duration / 60, duration % 60])
+ @edje.part("duration").text = tmp
+ @edje.part("title").text = "%i %s - %s" % [@position + 1, artist, title]
+ end
+end
--- /dev/null
+# $Id: playtime_updater.rb,v 1.4 2005/07/07 16:33:55 tsauerbeck Exp $
+
+class PlaytimeUpdater
+ INTERVAL = 0.25
+
+ def initialize(xmms, &block)
+ @xmms = xmms
+ @block = block
+ @timer = nil
+ @current_pos = nil
+
+ on_timer
+ end
+
+ def enabled=(v)
+ if !v && !@timer.nil?
+ @timer.delete
+ @timer = nil
+ elsif v
+ @current_pos = nil
+ on_timer
+
+ @timer = Ecore::Timer.new(INTERVAL) do
+ on_timer
+ true
+ end
+ end
+ end
+
+ private
+ def on_timer
+ pltime = @xmms.playback_playtime.wait.value
+ cur_pos = pltime / 1000
+
+ if @current_pos != cur_pos
+ @current_pos = cur_pos
+ @block.call(@current_pos)
+ end
+ end
+end
--- /dev/null
+# $Id: slider.rb,v 1.3 2006/05/13 14:59:17 tilman Exp $
+
+class Slider
+ def initialize(edje, xmms, part, config)
+ @edje = edje
+ @xmms = xmms
+ @part = part
+ @config = config
+ @val = nil
+
+ self.value = @xmms.configval_get(config).wait.value
+
+ @edje.on_signal("drag", @part) do
+ v = on_drag(@edje.part(@part).get_drag_value)
+ @xmms.configval_set(@config, v).wait unless v.nil?
+ end
+ end
+
+ def value=(v)
+ end
+
+protected
+ def on_drag(d)
+ end
+end
+
+class VolumeSlider < Slider
+ attr_reader :part, :config
+
+ def initialize(edje, xmms, part)
+ @edje = edje
+ @xmms = xmms
+ @part = part
+ @val = nil
+
+ self.value = @xmms.playback_volume_get.wait.value
+
+ @edje.on_signal("drag", @part) do
+ v = on_drag(@edje.part(@part).get_drag_value)
+
+ unless v.nil?
+ @xmms.playback_volume_set("left", v).wait
+ @xmms.playback_volume_set("right", v).wait
+ end
+ end
+ end
+
+ def value=(v)
+ v = (1.0 - (v[:left].to_f / 100.0)).abs
+
+ if !@val || @val != v
+ @val = v
+ @edje.part(@part).set_drag_value(0.1, v)
+ end
+ end
+
+ def on_drag(d)
+ ret = nil
+ v = (1.0 - d[1]).abs
+
+ if @val != v
+ @val = v
+ ret = (v * 100).to_i
+ end
+
+ ret
+ end
+end
+
+class EqSlider < Slider
+ attr_reader :part, :config
+
+ def value=(v)
+ v = (1.0 - v.to_f).abs
+
+ if !@val || @val != v
+ @val = v
+ @edje.part(@part).set_drag_value(0.1, v)
+ end
+ end
+
+ def on_drag(d)
+ ret = nil
+ v = (1.0 - d[1]).abs
+
+ if @val != v
+ @val = v
+ ret = v.to_s
+ end
+
+ ret
+ end
+end
--- /dev/null
+# $Id: volume_box.rb,v 1.1 2006/07/29 02:07:04 tilman Exp $
+
+class VolumeBox
+ def initialize(edje, xmms, part)
+ @edje = edje
+ @xmms = xmms
+ @part = part
+
+ self.value = @xmms.playback_volume_get.wait.value
+
+ @edje.on_signal("VOL_INCR") do
+ unless @vol[:left] == 100
+ tmp = @vol[:left] + 1
+ @xmms.playback_volume_set("left", tmp).wait
+ end
+
+ unless @vol[:right] == 100
+ tmp = @vol[:right] + 1
+ @xmms.playback_volume_set("right", tmp).wait
+ end
+ end
+
+ @edje.on_signal("VOL_DECR") do
+ unless @vol[:left] == 0
+ tmp = @vol[:left] - 1
+ @xmms.playback_volume_set("left", tmp).wait
+ end
+
+ unless @vol[:right] == 0
+ tmp = @vol[:right] - 1
+ @xmms.playback_volume_set("right", tmp).wait
+ end
+ end
+ end
+
+ def value=(v)
+ unless v.nil?
+ @vol = v
+ @edje.part("vol_display_text").text = v[:left].to_s
+ end
+ end
+end