2 Copyright 2009 by Hans Baier
13 public class Jackpanel
: JackpanelBase
{
16 TransportButton to_start
;
17 TransportButton fast_backward
;
20 TransportButton fast_forward
;
22 float acceleration
= 1.0f
;
24 protected override void on_transport_stopped () {
26 play
.set_active_no_signals (false);
30 protected override void on_transport_rolling () {
32 play
.set_active_no_signals (true);
36 private bool show_state () {
37 if (client
== null || !initialized
) {
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
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
;
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
;
81 display
.preferences
+= (display
) => {
82 show_configuration_dialog ();
85 display
.reset_xruns_requested
+= (display
) => {
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
+= () => {
111 play
= new
TransportButton ();
112 play
.icon_type
= TransportButton
.IconType
.PLAY
;
113 play
.set_size_request (31, 20);
114 play
.toggled
+= (button
, active
) => {
116 client
.transport_start ();
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 ();
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
+= () => {
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);
160 post_jack_init
+= () => {
161 debug ("post_jack_init: in handler");
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 ();
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
) {
189 init_error_dialog ();
200 private void wind_transport (float direction
) {
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
) {
210 client
.transport_locate((NFrames
)location
);
213 private bool accelerate_transport (TransportButton button
, float direction
) {
215 if (acceleration
< 120.0f
) {
216 acceleration
*= 1.11f
;
219 wind_transport (direction
);
226 } //namespace Jackpanel