~voluntatefaber/beat-box/bug952329

« back to all changes in this revision

Viewing changes to TopDisplay.vala

  • Committer: Scott Ringwelski
  • Date: 2011-02-10 21:30:53 UTC
  • Revision ID: sgringwe@mtu.edu-20110210213053-d3c7mnexeref3cwj
sexy icons, sexy waf

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
namespace ElementaryWidgets {
2
 
        using Gtk;
3
 
        
4
 
        public class TopDisplay : VBox {
5
 
                BeatBox.LibraryManager lm;
6
 
                Label label;
7
 
                HBox scaleBox;
8
 
                Label leftTime;
9
 
                Label rightTime;
10
 
                HScale scale;
11
 
                ProgressBar progressbar;
12
 
                
13
 
                public signal void scale_value_changed(ScrollType scroll, double val);
14
 
                
15
 
                public TopDisplay(BeatBox.LibraryManager lmm) {
16
 
                        this.lm = lmm;
17
 
                        
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();
23
 
                        
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);
28
 
                        
29
 
                        scale.set_draw_value(false);
30
 
                        
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>");
35
 
                        
36
 
                        this.pack_start(label, false, true, 0);
37
 
                        this.pack_start(progressbar, false, true, 0);
38
 
                        this.pack_start(scaleBox, false, true, 0);
39
 
                        
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);
44
 
                        
45
 
                        show_all();
46
 
                }
47
 
                /** label functions **/
48
 
                public void set_label_text(string text) {
49
 
                        label.set_text(text);
50
 
                }
51
 
                
52
 
                public string get_label_text() {
53
 
                        return label.get_text();
54
 
                }
55
 
                
56
 
                public void set_label_showing(bool val) {
57
 
                        if(val)
58
 
                                label.show();
59
 
                        else
60
 
                                label.hide();
61
 
                }
62
 
                
63
 
                /** progressbar functions **/
64
 
                public void set_progress_value(double progress) {
65
 
                        progressbar.set_fraction(progress);
66
 
                }
67
 
                
68
 
                /** scale functions **/
69
 
                public void set_scale_range(double min, double max) {
70
 
                        scale.set_range(min, max);
71
 
                }
72
 
                
73
 
                public void set_scale_value(double val) {
74
 
                        scale.set_value(val);
75
 
                }
76
 
                
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;
82
 
                                int point_x = 0;
83
 
                                int point_y = 0;
84
 
                                
85
 
                                scale.get_pointer(out point_x, out point_y);
86
 
                                scale.get_allocation(out extents);
87
 
                                
88
 
                                // get seconds of song
89
 
                                double songtime = (double)((double)point_x/(double)extents.width) * scale.get_adjustment().upper;
90
 
                                
91
 
                                change_value(ScrollType.NONE, songtime);
92
 
                        }
93
 
                        
94
 
                        return false;
95
 
                }
96
 
                
97
 
                public virtual bool scale_button_release(Gdk.EventButton event) {
98
 
                        
99
 
                        return false;
100
 
                }
101
 
                
102
 
                public virtual void value_changed() {
103
 
                        //make pretty current time
104
 
                        int minute = 0;
105
 
                        int seconds = (int)scale.get_value();
106
 
                        
107
 
                        while(seconds >= 60) {
108
 
                                ++minute;
109
 
                                seconds -= 60;
110
 
                        }
111
 
                        
112
 
                        leftTime.set_text(minute.to_string() + ":" + ((seconds < 10 ) ? "0" + seconds.to_string() : seconds.to_string()));
113
 
                        
114
 
                        //make pretty remaining time
115
 
                        minute = 0;
116
 
                        seconds = (int)scale.get_adjustment().upper - (int)scale.get_value();
117
 
                        
118
 
                        while(seconds >= 60) {
119
 
                                ++minute;
120
 
                                seconds -= 60;
121
 
                        }
122
 
                        
123
 
                        rightTime.set_text(minute.to_string() + ":" + ((seconds < 10 ) ? "0" + seconds.to_string() : seconds.to_string()));
124
 
                }
125
 
                
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);
131
 
                        
132
 
                        return false;
133
 
                }
134
 
                
135
 
                /** other functions **/
136
 
                public void show_scale() {
137
 
                        scaleBox.show();
138
 
                        progressbar.hide();
139
 
                }
140
 
                
141
 
                public void show_progressbar() {
142
 
                        progressbar.show();
143
 
                        scaleBox.hide();
144
 
                }
145
 
                
146
 
                public virtual void player_position_update(int64 position) {
147
 
                        double sec = 0.0;
148
 
                        if(lm.song_info.song != null) {
149
 
                                sec = ((double)position/1000000000);
150
 
                                set_scale_value(sec);
151
 
                        }
152
 
                }
153
 
        }
154
 
}