+/*
+ * app_music - zavai music player UI functions
+ *
+ * Copyright (C) 2010 Enrico Zini <enrico@enricozini.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+using GLib;
+
+namespace zavai {
+namespace ui {
+namespace music {
+
+public class PlayPauseButton : Gtk.Button
+{
+ protected Gtk.Image img_play;
+ protected Gtk.Image img_pause;
+ protected bool is_play;
+
+ construct
+ {
+ img_play = new Gtk.Image.from_stock(Gtk.STOCK_MEDIA_PLAY, Gtk.IconSize.BUTTON);
+ img_pause = new Gtk.Image.from_stock(Gtk.STOCK_MEDIA_PAUSE, Gtk.IconSize.BUTTON);
+
+ clicked += on_clicked;
+
+ is_play = audio.musicplayer.get_state() == Gst.State.PAUSED;
+
+ audio.musicplayer.state_changed += (state) => {
+ if (is_play != (state == Gst.State.PAUSED))
+ {
+ is_play = !is_play;
+ update_image();
+ }
+ };
+
+ update_image();
+ }
+
+ protected void update_image()
+ {
+ if (is_play)
+ {
+ set_image(img_play);
+ } else {
+ set_image(img_pause);
+ }
+ }
+
+ void on_clicked(Gtk.Button b)
+ {
+ if (is_play)
+ audio.musicplayer.pause();
+ else
+ audio.musicplayer.resume();
+ }
+}
+
+public class Player : Gtk.VBox
+{
+ protected Gtk.Label l_status;
+ protected PlayPauseButton b_playpause;
+ protected Gtk.Button b_stop;
+ protected Gtk.Button b_prev;
+ protected Gtk.Button b_next;
+
+ construct
+ {
+ l_status = new Gtk.Label("");
+ //l_date.modify_font(Pango.FontDescription.from_string("Sans 40"));
+ b_playpause = new PlayPauseButton();
+ b_stop = new Gtk.Button.from_stock(Gtk.STOCK_MEDIA_STOP);
+ b_stop.clicked += (b) => { audio.musicplayer.stop(); };
+ b_prev = new Gtk.Button.from_stock(Gtk.STOCK_MEDIA_PREVIOUS);
+ b_next = new Gtk.Button.from_stock(Gtk.STOCK_MEDIA_NEXT);
+ pack_start(l_status, false, false, 0);
+ var buttons = new Gtk.HButtonBox();
+ buttons.add(b_prev);
+ buttons.add(b_playpause);
+ buttons.add(b_stop);
+ buttons.add(b_next);
+ pack_start(buttons, false, false, 0);
+
+ //zavai.clock.clock.minute_changed += on_minute_changed;
+ //zavai.clock.clock.schedule_changed += on_schedule_changed;
+ //on_schedule_changed(zavai.clock.clock.next_alarm());
+ }
+
+#if 0
+ private void on_date_clicked(Gtk.Button b)
+ {
+ zavai.app.push_applet(zavai.ui.calendar.calendar);
+ }
+
+ private void on_schedule_changed(zavai.clock.Alarm? next)
+ {
+ if (next == null)
+ {
+ last_deadline = 0;
+ last_deadline_label = "";
+ } else {
+ last_deadline = next.ev.deadline;
+ last_deadline_label = next.label;
+ }
+ on_minute_changed((long)last_time, last_time_type);
+ }
+
+ private void on_minute_changed(long ts, zavai.clock.SourceType type)
+ {
+ last_time = (time_t)ts;
+ last_time_type = type;
+
+ string typetag = "unknown";
+ switch (type)
+ {
+ case zavai.clock.SourceType.GPS:
+ typetag = "gps";
+ break;
+ case zavai.clock.SourceType.SYSTEM:
+ typetag = "sys";
+ break;
+ }
+
+ var t = Time.local((time_t)ts);
+ l_date.set_text(t.format("%a %d %b"));
+ l_time.set_text("%2d:%02d (%s)".printf(t.hour, t.minute, typetag));
+
+ if (last_deadline == 0)
+ l_deadline.set_text("");
+ else
+ {
+ int remaining = (int)(last_deadline - last_time);
+ int hours = remaining / 3600;
+ int minutes = (remaining % 3600) / 60;
+ if (hours == 0 && minutes == 0)
+ l_deadline.set_text(last_deadline_label + "\nanytime now");
+ else
+ l_deadline.set_text("%s\nin %02dh %02dm".printf(last_deadline_label, hours, minutes));
+ }
+ }
+#endif
+}
+
+public Player player = null;
+
+public void init()
+{
+ player = new Player();
+ // Menus
+ //zavai.menu_gsm.add_service_toggle(zavai.gsm.gsm, "Start GSM", "Stop GSM");
+ //zavai.menu_gsm.add_service_toggle(zavai.gsm.gprs, "Start GPRS", "Stop GPRS");
+}
+
+}
+}
+}