7 public class Jackpanel
: JackpanelBase
{
10 TransportButton to_start
;
11 TransportButton fast_backward
;
14 TransportButton fast_forward
;
16 float acceleration
= 1.0f
;
18 protected override void on_transport_stopped () {
20 play
.set_active_no_signals (false);
24 protected override void on_transport_rolling () {
26 play
.set_active_no_signals (true);
30 private bool show_state () {
35 display
.realtime
= jack_is_realtime (client
) != 0;
37 display
.sample_rate
= jack_get_sample_rate (client
);
39 display
.buffer_size
= jack_get_buffer_size (client
);
41 display
.xruns
= no_xruns
;
43 // this one redraws the panel
49 public Jackpanel (string client_name
) {
50 this
.client_name
= client_name
;
52 var table
= new
Table (5, 2, false);
53 display
= new
Display ();
54 display
.sample_rate_changed
+= (display
, new_rate
) => {
55 config
.sample_rate
= (int)new_rate
;
58 display
.buffer_size_changed
+= (display
, new_size
) => {
59 jack_set_buffer_size (client
, new_size
);
60 display
.buffer_size
= new_size
;
61 config
.buffer_size
= (int)new_size
;
63 display
.toggle_realtime_requested
+= (display
, should_be_realtime
) => {
64 if (should_be_realtime
!= config
.realtime
) {
65 config
.realtime
= should_be_realtime
;
68 display
.realtime
= jack_is_realtime (client
) != 0;
70 display
.reset_xruns_requested
+= (display
) => {
74 to_start
= new
TransportButton (TransportButton
.IconType
.TO_START
);
77 to_start
.pressed
+= () => {
78 jack_transport_locate(client
, 0);
81 fast_backward
= new
TransportButton (TransportButton
.IconType
.FAST_BACKWARD
);
82 fast_backward
.height
= 20;
83 fast_backward
.width
= 31;
84 fast_backward
.pressed
+= () => {
85 wind_transport (-1.0f
);
87 Timeout
.add (200, () => {
88 accelerate_transport (fast_backward
, -1.0f
);
92 fast_backward
.released
+= () => {
96 play
= new
TransportButton (TransportButton
.IconType
.PLAY
);
99 play
.toggled
+= (button
, active
) => {
101 jack_transport_start (client
);
103 jack_transport_stop (client
);
107 stop
= new
TransportButton (TransportButton
.IconType
.STOP
);
110 stop
.pressed
+= () => {
111 jack_transport_stop (client
);
115 fast_forward
= new
TransportButton (TransportButton
.IconType
.FAST_FORWARD
);
116 fast_forward
.height
= 20;
117 fast_forward
.width
= 31;
118 fast_forward
.pressed
+= () => {
119 wind_transport (1.0f
);
121 Timeout
.add (200, () => {
122 accelerate_transport (fast_forward
, 1.0f
);
126 fast_forward
.released
+= () => {
131 table
.attach_defaults (display
, 0, 5, 0, 1);
133 table
.attach_defaults (to_start
, 0, 1, 1, 2);
134 table
.attach_defaults (fast_backward
, 1, 2, 1, 2);
135 table
.attach_defaults (fast_forward
, 2, 3, 1, 2);
136 table
.attach_defaults (stop
, 3, 4, 1, 2);
137 table
.attach_defaults (play
, 4, 5, 1, 2);
139 table
.set_col_spacing (0, 4);
140 table
.set_col_spacing (1, 4);
141 table
.set_col_spacing (2, 10);
142 table
.set_col_spacing (3, 4);
145 initialized
= initialize_jack ();
147 Timeout
.add (100, show_state
);
156 private void wind_transport (float direction
) {
157 jack_position_t pos
= jack_position_t ();
158 jack_transport_query(client
, ref pos
);
161 float location
= (((float) pos
.frame
/ pos
.frame_rate
) + direction
* acceleration
) * pos
.frame_rate
;
163 if (location
< 0.0f
) {
167 jack_transport_locate(client
, (jack_nframes_t
)location
);
170 private bool accelerate_transport (TransportButton button
, float direction
) {
172 if (acceleration
< 120.0f
) {
173 acceleration
*= 1.11f
;
176 wind_transport (direction
);
183 } //namespace Jackpanel