remove debianization from main repo
[jackpanel.git] / jackpanel / Jackpanel.vala
blob65b850018d76e50be1a7dba0f5a82f00e0c14ba2
1 /*
2 Copyright 2009 by Hans Baier
3 License: GPLv2+
4 */
6 using Gtk;
7 using Gdk;
8 using Prolooks;
9 using Jack;
11 namespace Jackpanel {
13 public class Jackpanel : JackpanelBase {
14 // widgets
15 Display display;
16 TransportButton to_start;
17 TransportButton fast_backward;
18 TransportButton play;
19 TransportButton stop;
20 TransportButton fast_forward;
22 float acceleration = 1.0f;
24 protected override void on_transport_stopped () {
25 if (play.active) {
26 play.set_active_no_signals (false);
30 protected override void on_transport_rolling () {
31 if (!play.active) {
32 play.set_active_no_signals (true);
36 private bool show_state () {
37 if (client == null || !initialized) {
38 return false;
41 display.realtime = client.is_realtime();
43 display.sample_rate = client.get_sample_rate ();
45 display.buffer_size = client.get_buffer_size ();
47 display.xruns = no_xruns;
49 if (display.xruns != no_xruns) display.xruns = no_xruns;
51 // this one redraws the panel
52 show_time (display);
54 return true;
57 public Jackpanel (string client_name) {
58 this.client_name = client_name;
60 var table = new Table (5, 2, false);
61 display = new Display ();
63 display.sample_rate_changed += (display, new_rate) => {
64 config.sample_rate = (int)new_rate;
65 restart_jack ();
68 display.buffer_size_changed += (display, new_size) => {
69 client.set_buffer_size (new_size);
70 display.buffer_size = new_size;
71 config.buffer_size = (int)new_size;
74 display.toggle_realtime_requested += (display, should_be_realtime) => {
75 if (should_be_realtime != config.realtime) {
76 config.realtime = should_be_realtime;
77 restart_jack ();
81 display.preferences += (display) => {
82 show_configuration_dialog ();
85 display.reset_xruns_requested += (display) => {
86 no_xruns = 0;
89 to_start = new TransportButton ();
90 to_start.icon_type = TransportButton.IconType.TO_START;
91 to_start.set_size_request (31, 20);
92 to_start.pressed += () => {
93 client.transport_locate(0);
96 fast_backward = new TransportButton ();
97 fast_backward.icon_type = TransportButton.IconType.FAST_BACKWARD;
98 fast_backward.set_size_request (31, 20);
99 fast_backward.pressed += () => {
100 wind_transport (-1.0f);
102 Timeout.add (200, () => {
103 accelerate_transport (fast_backward, -1.0f);
107 fast_backward.released += () => {
108 acceleration = 1.0f;
111 play = new TransportButton ();
112 play.icon_type = TransportButton.IconType.PLAY;
113 play.set_size_request (31, 20);
114 play.toggled += (button, active) => {
115 if (active) {
116 client.transport_start ();
117 } else {
118 client.transport_stop ();
122 stop = new TransportButton ();
123 stop.icon_type = TransportButton.IconType.STOP;
124 stop.set_size_request (31, 20);
125 stop.pressed += () => {
126 client.transport_stop ();
127 play.active = false;
130 fast_forward = new TransportButton ();
131 fast_forward.icon_type = TransportButton.IconType.FAST_FORWARD;
132 fast_forward.set_size_request (31, 20);
133 fast_forward.pressed += () => {
134 wind_transport (1.0f);
136 Timeout.add (200, () => {
137 accelerate_transport (fast_forward, 1.0f);
141 fast_forward.released += () => {
142 acceleration = 1.0f;
146 table.attach_defaults (display, 0, 5, 0, 1);
148 table.attach_defaults (to_start, 0, 1, 1, 2);
149 table.attach_defaults (fast_backward, 1, 2, 1, 2);
150 table.attach_defaults (fast_forward, 2, 3, 1, 2);
151 table.attach_defaults (stop, 3, 4, 1, 2);
152 table.attach_defaults (play, 4, 5, 1, 2);
154 table.set_col_spacing (0, 4);
155 table.set_col_spacing (1, 4);
156 table.set_col_spacing (2, 10);
157 table.set_col_spacing (3, 4);
158 add (table);
160 post_jack_init += () => {
161 debug ("post_jack_init: in handler");
162 if (initialized) {
163 Timeout.add (100, show_state);
164 to_start.sensitive = true;
165 fast_backward.sensitive = true;
166 fast_forward.sensitive = true;
167 stop.sensitive = true;
168 play.sensitive = true;
169 Thread.usleep (120000);
170 display.jack_running = true;
171 display.queue_draw ();
172 } else {
173 to_start.sensitive = false;
174 fast_backward.sensitive = false;
175 fast_forward.sensitive = false;
176 stop.sensitive = false;
177 play.sensitive = false;
178 display.jack_running = false;
179 display.time = "-- : -- : --";
180 display.time_alt = "----------";
184 if (!initialized && config.start_jack) {
185 start_jack ();
186 post_jack_init ();
188 if (!initialized) {
189 init_error_dialog ();
191 } else {
192 post_jack_init ();
196 ~Jackpanel () {
197 stop_jack ();
200 private void wind_transport (float direction) {
201 Position pos;
202 client.transport_query(out pos);
204 float location = (((float) pos.frame / pos.frame_rate) + direction * acceleration) * pos.frame_rate;
206 if (location < 0.0f) {
207 location = 0.0f;
210 client.transport_locate((NFrames)location);
213 private bool accelerate_transport (TransportButton button, float direction) {
214 if (button.active) {
215 if (acceleration < 120.0f) {
216 acceleration *= 1.11f;
219 wind_transport (direction);
220 return true;
222 return false;
226 } //namespace Jackpanel