1
namespace ElementaryWidgets {
4
public class TopDisplay : VBox {
5
BeatBox.LibraryManager lm;
11
ProgressBar progressbar;
13
public signal void scale_value_changed(ScrollType scroll, double val);
15
public TopDisplay(BeatBox.LibraryManager lmm) {
18
label = new Label("");
19
scale = new HScale.with_range(0, 1, 1);
20
leftTime = new Label("0:00");
21
rightTime = new Label("0:00");
22
progressbar = new ProgressBar();
24
scaleBox = new HBox(false, 1);
25
scaleBox.pack_start(leftTime, false, false, 0);
26
scaleBox.pack_start(scale, true, true, 0);
27
scaleBox.pack_start(rightTime, false, false, 0);
29
scale.set_draw_value(false);
31
label.set_justify(Justification.CENTER);
32
label.set_single_line_mode(true);
33
label.ellipsize = Pango.EllipsizeMode.END;
34
//label.set_markup("<b></b>");
36
this.pack_start(label, false, true, 0);
37
this.pack_start(progressbar, false, true, 0);
38
this.pack_start(scaleBox, false, true, 0);
40
this.lm.player.current_position_update.connect(player_position_update);
41
this.scale.button_press_event.connect(scale_button_press);
42
this.scale.value_changed.connect(value_changed);
43
this.scale.change_value.connect(change_value);
47
/** label functions **/
48
public void set_label_text(string text) {
52
public string get_label_text() {
53
return label.get_text();
56
public void set_label_showing(bool val) {
63
/** progressbar functions **/
64
public void set_progress_value(double progress) {
65
progressbar.set_fraction(progress);
68
/** scale functions **/
69
public void set_scale_range(double min, double max) {
70
scale.set_range(min, max);
73
public void set_scale_value(double val) {
77
public virtual bool scale_button_press(Gdk.EventButton event) {
78
if(event.type == Gdk.EventType.BUTTON_PRESS && event.button == 1) {
79
//seek to right position
80
//calculate percentage to go to based on location
81
Gtk.Allocation extents;
85
scale.get_pointer(out point_x, out point_y);
86
scale.get_allocation(out extents);
88
// get seconds of song
89
double songtime = (double)((double)point_x/(double)extents.width) * scale.get_adjustment().upper;
91
change_value(ScrollType.NONE, songtime);
97
public virtual bool scale_button_release(Gdk.EventButton event) {
102
public virtual void value_changed() {
103
//make pretty current time
105
int seconds = (int)scale.get_value();
107
while(seconds >= 60) {
112
leftTime.set_text(minute.to_string() + ":" + ((seconds < 10 ) ? "0" + seconds.to_string() : seconds.to_string()));
114
//make pretty remaining time
116
seconds = (int)scale.get_adjustment().upper - (int)scale.get_value();
118
while(seconds >= 60) {
123
rightTime.set_text(minute.to_string() + ":" + ((seconds < 10 ) ? "0" + seconds.to_string() : seconds.to_string()));
126
public virtual bool change_value(ScrollType scroll, double val) {
127
this.lm.player.current_position_update.disconnect(player_position_update);
128
scale_value_changed(scroll, scale.get_value());
129
scale.set_value(val);
130
this.lm.player.current_position_update.connect(player_position_update);
135
/** other functions **/
136
public void show_scale() {
141
public void show_progressbar() {
146
public virtual void player_position_update(int64 position) {
148
if(lm.song_info.song != null) {
149
sec = ((double)position/1000000000);
150
set_scale_value(sec);