Rev 2338 | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
964 | jag | 1 | /* |
2 | * menu.cc |
||
2302 | jag | 3 | * DIN Is Noise is copyright (c) 2006-2025 Jagannathan Sampath |
1713 | jag | 4 | * DIN Is Noise is released under GNU Public License 2.0 |
1479 | jag | 5 | * For more information, please visit https://dinisnoise.org/ |
964 | jag | 6 | */ |
7 | |||
8 | #include "main.h" |
||
9 | #include "menu.h" |
||
10 | #include "ui_list.h" |
||
11 | #include "viewwin.h" |
||
12 | #include "din.h" |
||
13 | #include "keyboard_keyboard.h" |
||
14 | #include "mondrian.h" |
||
15 | #include "binaural_drones.h" |
||
16 | #include "tcl_interp.h" |
||
17 | #include "console.h" |
||
18 | #include "recorder.h" |
||
19 | #include "oscilloscope.h" |
||
20 | #include "ball.h" |
||
1037 | jag | 21 | #include "mesh.h" |
1387 | jag | 22 | #include "noiser.h" |
1463 | jag | 23 | #include "log.h" |
1551 | jag | 24 | #include "fft.h" |
1757 | jag | 25 | #include "file-utils.h" |
1778 | jag | 26 | #include "drawrrow.h" |
1833 | jag | 27 | #include "autorotator.h" |
28 | #include "autoflip.h" |
||
29 | #include "defvelaccel.h" |
||
1897 | jag | 30 | #include "color.h" |
964 | jag | 31 | #include <string> |
32 | #include <fstream> |
||
1768 | jag | 33 | |
2049 | jag | 34 | #define DONT_MOUSE_WARP 0 |
35 | |||
964 | jag | 36 | using namespace std; |
37 | |||
38 | extern int mousex, mousey; |
||
39 | extern beat2value octave_shift; |
||
1473 | jag | 40 | |
964 | jag | 41 | extern std::string INSTRUMENT; |
1450 | jag | 42 | extern const char* INSTRUMENTS[]; |
1026 | jag | 43 | extern int CURRENT_INSTRUMENT, LAST_INSTRUMENT, NUM_INSTRUMENTS; |
1473 | jag | 44 | |
964 | jag | 45 | extern float VOICE_VOLUME; |
46 | extern int NUM_OCTAVES; |
||
47 | extern void setup_plugin_labels (); |
||
48 | extern oscilloscope scope; |
||
49 | extern const float PI_BY_180; |
||
50 | extern char BUFFER []; |
||
1485 | jag | 51 | extern int wheely; |
964 | jag | 52 | extern int line_height; |
1438 | jag | 53 | extern const char *ol_fixed_lbls []; |
1551 | jag | 54 | extern plugin_browser plugin__browser; |
1436 | jag | 55 | |
1677 | jag | 56 | #define SECONDS " seconds" |
1836 | jag | 57 | #define DEGREES " degrees" |
1677 | jag | 58 | |
1450 | jag | 59 | menu::menu () : |
1688 | jag | 60 | diram (modulator::AM), dirfm (modulator::FM), |
1450 | jag | 61 | bm_zoom_in(16), pb_zoom_in (16), bm_zoom_out(16), mb_zoom_out (16), |
62 | abm_left (12), abm_right(12), abm_up(12), abm_down(12), |
||
63 | abe_left (12), abe_right(12), abe_up(12), abe_down(12), |
||
64 | abl_left (12, arrow_button::left), abl_right (12, arrow_button::right), |
||
65 | gater_style_lis (ol_gater_style, "gr", " Style = "), |
||
66 | am_style_lis (ol_am_style, "am", " AM style = "), |
||
67 | fm_style_lis (ol_fm_style, "fm", " FM style = "), |
||
68 | s_phrase_position (256, 16), |
||
1468 | jag | 69 | td_tap_display (36), |
70 | gc_top(0), |
||
1472 | jag | 71 | gc_bottom(1) |
72 | { |
||
964 | jag | 73 | num_tabs = 0; |
74 | am_depth = fm_depth = 0; |
||
75 | dam_depth = dfm_depth = dam_bpm = dfm_bpm = 0; |
||
1472 | jag | 76 | |
964 | jag | 77 | cnl.id = 0; |
78 | cnl.name = "Left Note"; |
||
79 | cnl.orient = mouse_slider_listener::X; |
||
1472 | jag | 80 | |
964 | jag | 81 | cnr.id = 1; |
82 | cnr.name = "Right Note"; |
||
83 | cnr.orient = mouse_slider_listener::X; |
||
1472 | jag | 84 | |
964 | jag | 85 | arl.name = "Range Left"; |
86 | arl.orient = mouse_slider_listener::X; |
||
1472 | jag | 87 | |
964 | jag | 88 | arr.name = "Range Right"; |
89 | arr.orient = mouse_slider_listener::X; |
||
1472 | jag | 90 | |
964 | jag | 91 | arb.name = "Range Left & Right"; |
92 | arb.orient = mouse_slider_listener::Y; |
||
1472 | jag | 93 | |
964 | jag | 94 | rhl.name = "Range Height"; |
95 | rhl.orient = mouse_slider_listener::Y; |
||
1461 | jag | 96 | |
97 | s_phrase_position.sizer.visible = 1; |
||
1680 | jag | 98 | |
964 | jag | 99 | } |
100 | |||
101 | void menu::setup_items () { |
||
1450 | jag | 102 | |
1489 | jag | 103 | b_close.visible = 0; |
104 | |||
1449 | jag | 105 | button* inst_ed [] = { |
2338 | jag | 106 | &b_keyboard_keyboard, // instruments |
964 | jag | 107 | &b_microtonal_keyboard, |
108 | &b_mondrian, |
||
109 | &b_binaural_drones, |
||
1449 | jag | 110 | &b_microtonal_keyboard_waveform, // editors |
964 | jag | 111 | &b_drone_waveform, |
112 | &b_drone_modulation, |
||
113 | &b_voice_modulation, |
||
114 | &b_gater, |
||
115 | &b_keyboard_keyboard_waveform, |
||
116 | &b_attack, |
||
117 | &b_decay, |
||
118 | &b_midi_velocity, |
||
119 | &b_delays, |
||
120 | &b_octave_shift, |
||
121 | &b_compressor, |
||
122 | &b_morse_code, |
||
123 | &b_mondrian_waveform, |
||
124 | &b_mondrian_attack, |
||
125 | &b_mondrian_decay, |
||
126 | &b_binaural_drones_waveform, |
||
127 | &b_range_modulation, |
||
1026 | jag | 128 | &b_range_width_height, |
1104 | jag | 129 | &b_range_pitch_vol, |
1188 | jag | 130 | &b_point_modulation, |
1404 | jag | 131 | &b_noise_interpolator, |
1475 | jag | 132 | &b_drone_pend, |
1883 | jag | 133 | &edlife2vel, |
1449 | jag | 134 | }; |
1472 | jag | 135 | |
136 | // all other menu items |
||
1449 | jag | 137 | widget* mi [] = { |
964 | jag | 138 | &b_exit_din, |
139 | &l_octave_shift, |
||
140 | &ab_octave_down, |
||
141 | &ab_octave_up, |
||
142 | &sp_octave_shift_bpm, |
||
143 | &sp_gater_bpm, |
||
144 | &sp_voice_volume, |
||
145 | &cb_show_anchors, |
||
146 | &sp_change_drone_handle_size, |
||
147 | &sp_change_drone_trail_length, |
||
148 | &sp_am_depth, |
||
149 | &sp_fm_depth, |
||
150 | &sp_am_bpm, |
||
151 | &sp_fm_bpm, |
||
152 | &cb_instrument, |
||
153 | &cb_editors, |
||
1449 | jag | 154 | &cb_mkb_drone_params, |
964 | jag | 155 | &cb_file, |
156 | &ol_gater_style, |
||
157 | &l_gater, |
||
158 | &ol_am_style, |
||
159 | &ol_fm_style, |
||
160 | &cb_mkb_drone_tools, |
||
1674 | jag | 161 | &ol_add_wand, |
1984 | jag | 162 | &moverailstrafe, |
964 | jag | 163 | &b_delete_drones, |
164 | &b_select_all_drones, |
||
165 | &b_invert_drone_selection, |
||
166 | &b_record_phrase, |
||
167 | &b_clear_phrases, |
||
168 | &l_phrase_position, |
||
169 | &s_phrase_position, |
||
170 | &ol_set_range, |
||
171 | &b_default_to_selected, |
||
1403 | jag | 172 | &b_default_to_all, |
173 | &b_selected_to_all, |
||
964 | jag | 174 | &b_key_to_pitch_at_cursor, |
175 | &cb_scope, |
||
176 | &sp_scope_height, |
||
177 | &sp_scope_samples, |
||
178 | &l_tap_bpm, |
||
179 | &td_tap_display, |
||
180 | &l_tap_bpm_value, |
||
181 | &cb_am, |
||
182 | &cb_fm, |
||
183 | &cb_gater, |
||
184 | &cb_octave_shift, |
||
185 | &cb_auto_reset, |
||
186 | &cb_ed_tools, |
||
187 | &abe_left, |
||
188 | &abe_right, |
||
189 | &abe_up, |
||
190 | &abe_down, |
||
191 | &b_close, |
||
1901 | jag | 192 | &b_snapx, |
193 | &b_snapy, |
||
194 | &b_snapboth, |
||
195 | &b_snapnone, |
||
964 | jag | 196 | &l_snap, |
197 | &pb_zoom_in, |
||
198 | &mb_zoom_out, |
||
199 | &b_insert_vertex, |
||
200 | &b_delete_vertex, |
||
201 | &b_fold_tangents, |
||
1128 | jag | 202 | &ol_mirror, |
964 | jag | 203 | &ol_mirror_tangents, |
1128 | jag | 204 | &cb_selection_only, |
964 | jag | 205 | &b_undo, |
206 | &b_redo, |
||
207 | &b_copy, |
||
2340 | jag | 208 | &ol_paste, |
964 | jag | 209 | &b_draw_replacement_curve, |
210 | &l_library, |
||
211 | &abl_left, |
||
212 | &abl_right, |
||
213 | &lf_curve_name, |
||
214 | &b_add_curve, |
||
215 | &b_replace_curve, |
||
216 | &b_delete_curve, |
||
217 | &l_capture, |
||
218 | &b_start_capture, |
||
219 | &b_assign_capture, |
||
220 | &cb_label_vertices, |
||
221 | &cb_show_waveform_samples, |
||
2039 | jag | 222 | &crvwav.hz, |
964 | jag | 223 | &b_pick_curve, |
224 | &sp_curve_limit, |
||
2039 | jag | 225 | &crvwav.periods, |
964 | jag | 226 | &ol_curve_style, |
227 | &sp_curve_rpm, |
||
228 | &b_stop_rotating, |
||
229 | &cb_draw_curve, |
||
230 | &cb_record, |
||
231 | &b_clear_record, |
||
232 | &lf_file, |
||
233 | &b_save, |
||
234 | &b_select_attractees, |
||
235 | &b_select_attractors, |
||
236 | &b_orbit_selected_drones, |
||
237 | &cb_show_vel, |
||
238 | &cb_show_accel, |
||
239 | &sp_change_drone_vel, |
||
240 | &sp_change_drone_accel, |
||
241 | &cb_show_gravity, |
||
1827 | jag | 242 | &balloon, |
964 | jag | 243 | &sp_rotate_drone_vel, |
244 | &sp_drones_per_min, |
||
245 | &b_launch_drones, |
||
246 | &b_stop_launching_drones, |
||
1098 | jag | 247 | &ol_create_this, |
964 | jag | 248 | &sp_mesh_rows, |
249 | &sp_mesh_cols, |
||
250 | &b_track_drones, |
||
251 | &b_select_tracked_drones, |
||
252 | &sp_bounces, |
||
253 | &sp_rebound, |
||
254 | &b_add_balls, |
||
255 | &b_move_selected_balls, |
||
256 | &b_delete_selected_targets, |
||
257 | &b_delete_all_targets, |
||
258 | &b_select_all_targets, |
||
259 | &b_invert_selected_targets, |
||
260 | &b_select_targets_in_box, |
||
261 | &b_split_horizontal, |
||
262 | &b_split_vertical, |
||
263 | &b_delete_box, |
||
264 | &sp_mondrian_min_voices, |
||
265 | &sp_mondrian_change_attack_time, |
||
266 | &sp_mondrian_change_decay_time, |
||
267 | &sp_mondrian_change_speed, |
||
268 | &b_freeze_balls, |
||
269 | &b_thaw_balls, |
||
270 | &abm_left, |
||
271 | &abm_right, |
||
272 | &abm_up, |
||
273 | &abm_down, |
||
274 | &bm_zoom_in, |
||
275 | &bm_zoom_out, |
||
276 | &b_turn_off_ui, |
||
277 | &b_set_targets, |
||
278 | &b_clear_targets, |
||
279 | &sp_drone_lifetime, |
||
280 | &sp_orbit_insertion_time, |
||
281 | &b_clear_modulations, |
||
282 | &b_modulate_balls_up, |
||
283 | &b_modulate_balls_down, |
||
284 | &cb_binaural_drones_tools, |
||
285 | &lf_master_volume, |
||
286 | &sp_bd_separation, |
||
287 | &b_create_binaurals_on_notes, |
||
288 | &b_create_binaurals_from_pitch, |
||
289 | &lf_bd_start_pitch, |
||
290 | &sp_bd_pairs, |
||
291 | &lf_bd_spacing, |
||
292 | &cb_close_octave, |
||
293 | &lf_vol_fade_time, |
||
294 | &sp_mondrian_change_dir, |
||
295 | &sp_mondrian_change_trail_size, |
||
296 | &sp_mondrian_change_note_poly_points, |
||
297 | &sp_mondrian_change_note_poly_radius, |
||
298 | &b_auto_change_direction_clockwise, |
||
299 | &b_stop_auto_changing_direction, |
||
300 | &b_auto_change_direction_anti_clockwise, |
||
301 | &b_flip_direction, |
||
302 | &b_make_random_color, |
||
303 | &ol_justification, |
||
304 | &cb_resize_separation, |
||
305 | &ol_key_note, |
||
306 | &b_add_remove_slits, |
||
307 | &b_select_wreckers, |
||
308 | &b_select_healers, |
||
309 | &b_switch_ball_type, |
||
310 | &b_toggle_wreckers, |
||
311 | &b_toggle_healers, |
||
312 | &b_toggle_bouncers, |
||
313 | &sp_mondrian_change_slit_size, |
||
314 | &b_remove_slits_on_edge, |
||
315 | &b_toggle_slit_anim, |
||
316 | &cb_mondrian_auto_adjust_voices, |
||
317 | &sp_mondrian_change_vol, |
||
318 | &cb_draw_boxes, |
||
319 | &cb_fill_boxes, |
||
320 | &cb_draw_notes, |
||
321 | &cb_label_notes, |
||
322 | &ol_ball_types, |
||
323 | &ol_split_types_h, |
||
324 | &ol_split_types_v, |
||
325 | &sp_mondrian_num_boxes, |
||
326 | &b_make_note_grid, |
||
327 | &b_make_nxn_grid, |
||
328 | &b_delete_all_boxes, |
||
329 | &cb_mkb_voice, |
||
330 | &cb_mkb_misc, |
||
331 | &b_select_launchers, |
||
1812 | jag | 332 | &seloncre, |
964 | jag | 333 | &b_freeze_drones, |
334 | &b_thaw_drones, |
||
335 | &sp_dam_depth, |
||
336 | &sp_dfm_depth, |
||
337 | &sp_dam_bpm, |
||
338 | &sp_dfm_bpm, |
||
1430 | jag | 339 | &b_scale_drones, |
340 | &b_rotate_drones, |
||
964 | jag | 341 | &ol_selection_targets, |
342 | &sp_mondrian_change_slit_anim_time, |
||
343 | &cb_mark_segments, |
||
344 | &cb_auto_split_box, |
||
345 | &cb_auto_delete_box, |
||
346 | &sp_auto_split_time, |
||
347 | &sp_auto_delete_time, |
||
348 | &ol_auto_pick_box_split, |
||
349 | &ol_auto_split_at, |
||
350 | &ol_auto_split_orient, |
||
351 | &ol_auto_pick_box_delete, |
||
352 | &sp_min_split_size, |
||
353 | &cb_speed, |
||
354 | &cb_turn, |
||
355 | &cb_teleport, |
||
356 | &sp_turn_every, |
||
357 | &sp_turn_min, |
||
358 | &sp_turn_max, |
||
359 | &sp_speed_every, |
||
360 | &sp_speed_min, |
||
361 | &sp_speed_max, |
||
362 | &sp_max_speed, |
||
363 | &sp_tel_every, |
||
364 | &sp_tel_radius, |
||
365 | &cb_draw_ball_position, |
||
366 | &cb_draw_ball_heading, |
||
367 | &cb_draw_ball_trails, |
||
368 | &l_draw_ball, |
||
369 | &cb_turn_sync, |
||
370 | &cb_speed_sync, |
||
371 | &sp_clone_every, |
||
372 | &sp_max_clones, |
||
373 | &sp_clone_offset, |
||
374 | &sp_max_balls, |
||
375 | &cb_clone, |
||
376 | &cb_clone_can_clone, |
||
377 | &ol_browse_balls, |
||
378 | &cb_mon_tools, |
||
379 | &cb_mon_parameters, |
||
380 | &cb_mon_ballops, |
||
381 | &cb_mon_boxops, |
||
382 | &cb_mon_misc, |
||
383 | &cb_transform, |
||
384 | &sp_transform_every, |
||
385 | &ol_bouncer, |
||
386 | &ol_healer, |
||
387 | &ol_wrecker, |
||
388 | &cb_label_hz_vol, |
||
389 | &il_binaural_drones, |
||
390 | &cb_binaural_drones_edit, |
||
391 | &bbd_select_all, |
||
392 | &bbd_select_none, |
||
393 | &bbd_invert_select, |
||
394 | &bbd_delete, |
||
395 | &bbd_sync, |
||
396 | &lf_pitch_fade_time, |
||
397 | &lf_modulation_amount, |
||
398 | &bd_modulate_up, |
||
399 | &bd_modulate_down, |
||
400 | &bbd_modulate, |
||
401 | &bbd_select2, |
||
402 | &ol_select_what, |
||
403 | &ol_select_rule, |
||
404 | &bdf_value, |
||
405 | &lf_l, |
||
406 | &lf_r, |
||
407 | &lf_sep, |
||
408 | &lf_vol, |
||
409 | &ol_just, |
||
410 | &bbd_flip, |
||
411 | &b_adjust_board_height, |
||
412 | &b_adjust_range_left, |
||
413 | &b_adjust_range_right, |
||
414 | &b_adjust_range_both, |
||
415 | &sp_snap_left, |
||
416 | &sp_snap_right, |
||
417 | &ol_bounce_style, |
||
418 | &cb_mod_ran, |
||
419 | &sp_range, |
||
420 | &sp_ran_mod_width, |
||
421 | &sp_ran_mod_width_bpm, |
||
422 | &cb_mark_ran, |
||
423 | &l_ran_mod, |
||
424 | &b_rm_pause_resume, |
||
425 | &b_rm_start_all, |
||
426 | &b_rm_stop_all, |
||
427 | &b_rm_toggle, |
||
428 | &b_get_cur_ran, |
||
429 | &ol_snap_style, |
||
430 | &sp_ran_mod_height, |
||
431 | &sp_ran_mod_height_bpm, |
||
432 | &cb_mkb_ranges, |
||
433 | &l_adjust_range, |
||
434 | &l_adjust_height, |
||
435 | &b_adjust_range_height, |
||
1768 | jag | 436 | &dronearrow.shoulder.position, |
437 | &dronearrow.shoulder.width, |
||
964 | jag | 438 | &l_drone_arrow, |
439 | &sp_default_width, |
||
440 | &sp_default_height, |
||
441 | &b_change_note_left, |
||
442 | &b_change_note_right, |
||
443 | &ol_change_note_style, |
||
444 | &ol_set_unset_toggle, |
||
445 | &b_set, |
||
446 | &b_unset, |
||
447 | &b_toggle, |
||
1037 | jag | 448 | &sp_browse_drone, |
449 | &ol_drone_order, |
||
450 | &l_drone_order, |
||
451 | &ol_mesh_point, |
||
1040 | jag | 452 | &f_mesh_xy, |
453 | &cb_sync_rows_cols, |
||
1049 | jag | 454 | &sp_mesh_dur, |
455 | &b_flip_rows_cols, |
||
1551 | jag | 456 | &cb_overlay, |
1598 | jag | 457 | &dp_numdrones, |
1096 | jag | 458 | &dp_bpm1, |
1104 | jag | 459 | &dp_orient, |
1137 | jag | 460 | &b_swap_curves, |
461 | &cb_pitch_dis, |
||
1140 | jag | 462 | &cb_vol_dis, |
1144 | jag | 463 | &sp_lev_sz, |
1397 | jag | 464 | &ol_change_note, |
1235 | jag | 465 | &b_change_note_both, |
1320 | jag | 466 | &sp_drone_master_vol, |
1321 | jag | 467 | &l_use_drone_pend, |
1320 | jag | 468 | &sp_drones_per_pend, |
469 | &l_apply_to, |
||
470 | &cb_am_bpm, |
||
471 | &cb_fm_bpm, |
||
472 | &b_set_to_mesh_rows, |
||
1323 | jag | 473 | &b_set_to_mesh_cols, |
1423 | jag | 474 | &ol_drone_is, |
1429 | jag | 475 | &b_ball_trig, |
1436 | jag | 476 | &ol_fixed, |
1438 | jag | 477 | &cb_draw_mesh, |
1467 | jag | 478 | &lf_conn_steps, |
1461 | jag | 479 | &s_red_min, |
480 | &s_green_min, |
||
481 | &s_blue_min, |
||
482 | &s_red_max, |
||
483 | &s_green_max, |
||
484 | &s_blue_max, |
||
1463 | jag | 485 | &cb_conn_wrap, |
1465 | jag | 486 | &separators.main, |
1470 | jag | 487 | &separators.dp0, |
1465 | jag | 488 | &cb_modulation, |
489 | &cb_motion, |
||
1467 | jag | 490 | &cb_visual, |
491 | &b_connect, |
||
1468 | jag | 492 | &b_disconnect, |
1470 | jag | 493 | &ol_color, |
494 | &separators.dp1, |
||
1498 | jag | 495 | &b_abort_octave_shift, |
1499 | jag | 496 | &sp_stiff, |
1514 | jag | 497 | &b_arrow_reset, |
1547 | jag | 498 | &b_mute, |
499 | &b_unmute, |
||
1819 | jag | 500 | &gabt, |
1552 | jag | 501 | &sp_drone_vol, |
1557 | jag | 502 | &drone2noise, |
503 | &noise2drone, |
||
1666 | jag | 504 | &b_set_xform_center, |
1772 | jag | 505 | &autorotate.title, |
506 | &autorotate.whichl, |
||
507 | &autorotate.start, |
||
508 | &autorotate.stop, |
||
509 | &autorotate.toggle, |
||
510 | &autorotate.clockwise, |
||
511 | &autorotate.anticlockwise, |
||
512 | &autorotate.rpm, |
||
1675 | jag | 513 | &cb_defaults, |
514 | &sp_wand_dist, |
||
515 | &ol_drones_are, |
||
1828 | jag | 516 | &riset, |
517 | &fallt, |
||
1677 | jag | 518 | &lifetime, |
519 | &mortalize, |
||
520 | &reincarnate, |
||
521 | &immortalize, |
||
1688 | jag | 522 | &diram.vert, |
1682 | jag | 523 | &diram.hor, |
524 | &diram.vel, |
||
525 | &diram.accel, |
||
1688 | jag | 526 | &dirfm.vert, |
1682 | jag | 527 | &dirfm.hor, |
528 | &dirfm.vel, |
||
529 | &dirfm.accel, |
||
530 | &diram.lbl, |
||
531 | &dirfm.lbl, |
||
1695 | jag | 532 | &cb_chuck, |
533 | &chuck, |
||
1697 | jag | 534 | &chspeed, |
1695 | jag | 535 | &chflip, |
1697 | jag | 536 | &chtog, |
1695 | jag | 537 | &chlen, |
1705 | jag | 538 | &chapt, |
1702 | jag | 539 | &chtrail, |
1708 | jag | 540 | &handlesize, |
1715 | jag | 541 | &sva.lbl, |
542 | &sva.whats, |
||
1764 | jag | 543 | &sva.neg, |
544 | &sva.zero, |
||
1715 | jag | 545 | &sva.vert, |
546 | &sva.hor, |
||
547 | &sva.vel, |
||
548 | &sva.accel, |
||
1772 | jag | 549 | &autorotate.autoflip.lbl, |
550 | &autorotate.autoflip.angle, |
||
551 | &autorotate.autoflip.set, |
||
552 | &autorotate.autoflip.unset, |
||
553 | &autorotate.autoflip.toggle, |
||
1836 | jag | 554 | &dva.whichl,\ |
1732 | jag | 555 | &dva.ldir,\ |
556 | &dva.odir,\ |
||
557 | &dva.neg,\ |
||
558 | &dva.randomize,\ |
||
1738 | jag | 559 | &dva.mag,\ |
1894 | jag | 560 | &dva.anticlockwise,\ |
1738 | jag | 561 | &dva.clockwise,\ |
1748 | jag | 562 | &choutline, |
563 | &chautoresettrails, |
||
1753 | jag | 564 | &anchored, |
1756 | jag | 565 | &trailsize, |
1804 | jag | 566 | &dronearrow.neck, |
1768 | jag | 567 | &dronearrow.cap, |
1773 | jag | 568 | &dronearrow.decap, |
569 | &autorotate.deg, |
||
570 | &autorotate.tps, |
||
1807 | jag | 571 | &autorotate.mov, |
1774 | jag | 572 | &autorotate.smooth, |
573 | &autorotate.tick, |
||
1776 | jag | 574 | &dronearrowdefaults.lbl, |
1804 | jag | 575 | &dronearrowdefaults.neck, |
1805 | jag | 576 | &dronearrowdefaults.shoulder.position, |
1776 | jag | 577 | &dronearrowdefaults.shoulder.width, |
578 | &dronearrowdefaults.cap, |
||
1778 | jag | 579 | &dronearrowdefaults.arrow, |
1797 | jag | 580 | &trackcon, |
1806 | jag | 581 | &dva.autorotate.cb, |
582 | &dva.autorotate.mov, |
||
583 | &dva.autorotate.dir, |
||
584 | &dva.autorotate.rpm, |
||
585 | &dva.autorotate.dps, |
||
586 | &dva.autorotate.tps, |
||
587 | &dva.autoflip.cb, |
||
588 | &dva.autoflip.deg, |
||
2032 | jag | 589 | &vel0, |
590 | &accel0, |
||
1836 | jag | 591 | &dva.sync, |
1851 | jag | 592 | &gens, |
2106 | jag | 593 | &ddpm, |
1871 | jag | 594 | &dva.autorotate.uet.deg, |
595 | &dva.autorotate.uet.tps, |
||
1892 | jag | 596 | &ddpl, |
1893 | jag | 597 | &dpl, |
1912 | jag | 598 | &sp_dam_pos, |
599 | &sp_dfm_pos, |
||
1913 | jag | 600 | &am2fm, |
601 | &fm2am, |
||
1920 | jag | 602 | &scopacity, |
1941 | jag | 603 | &cb_ed_curves, |
1950 | jag | 604 | &ed_flip_rotation, |
605 | &cb_ed_autoflip, |
||
606 | &sp_curve_every, |
||
607 | &ed_autoflip_reset, |
||
1970 | jag | 608 | &dva.autopause.cb, |
609 | &dva.autopause.every, |
||
610 | &dva.autopause.f0r, |
||
1972 | jag | 611 | &autorotate.autopause.lbl, |
612 | &autorotate.autopause.set, |
||
613 | &autorotate.autopause.unset, |
||
614 | &autorotate.autopause.toggle, |
||
1973 | jag | 615 | &autorotate.autopause.every, |
616 | &autorotate.autopause.f0r, |
||
1976 | jag | 617 | &autorotate.rndflipause.whichl, |
618 | &autorotate.rndflipause.set, |
||
619 | &autorotate.rndflipause.unset, |
||
620 | &autorotate.rndflipause.toggle, |
||
1998 | jag | 621 | &damd0, |
622 | &dfmd0, |
||
2038 | jag | 623 | &dva.autopause.tar, |
624 | &masvol0, |
||
2039 | jag | 625 | &crvwav.time, |
2049 | jag | 626 | &texture, |
627 | &texstep, |
||
628 | &text_ure, |
||
2060 | jag | 629 | &revmod, |
2076 | jag | 630 | &sva.perp, |
2077 | jag | 631 | &rotaccel, |
2078 | jag | 632 | &rdvel, |
633 | &rdaccel, |
||
2125 | jag | 634 | &size_tangent, |
2126 | jag | 635 | &draweditables, |
2206 | jag | 636 | &track_phrase_position, |
2222 | jag | 637 | &viewtoo, |
638 | &drawsnaps, |
||
639 | &drawcursor, |
||
2219 | jag | 640 | &pinunpin, |
2273 | jag | 641 | &sep_bin, |
2276 | jag | 642 | &sep0, |
2306 | jag | 643 | &ancopa, |
1677 | jag | 644 | // next item here |
964 | jag | 645 | }; |
646 | |||
2078 | jag | 647 | |
1449 | jag | 648 | int ii = 0; |
1450 | jag | 649 | for (int i = 0; i < NUM_INSTRUMENTS; ++i) { |
1449 | jag | 650 | button* ei = inst_ed[i]; |
1450 | jag | 651 | ei->id = i; |
1645 | jag | 652 | #ifndef __WIDGET_MOVE__ |
1472 | jag | 653 | ei->set_listener (&insl); |
1645 | jag | 654 | #endif |
1449 | jag | 655 | items[ii++] = ei; |
656 | } |
||
1450 | jag | 657 | for (int i = NUM_INSTRUMENTS; i < n_inst_ed; ++i) { |
658 | button* ei = inst_ed[i]; |
||
1502 | jag | 659 | ei->id = i + 1; // as 0 is instrument |
1645 | jag | 660 | #ifndef __WIDGET_MOVE__ |
1472 | jag | 661 | ei->set_listener (&edl); |
1645 | jag | 662 | #endif |
1450 | jag | 663 | items[ii++] = ei; |
664 | } |
||
1472 | jag | 665 | |
1757 | jag | 666 | for (int i = n_inst_ed, j = 0; i < nitems; ++i) items[ii++] = mi[j++]; |
1449 | jag | 667 | |
1568 | jag | 668 | dlog << "+++ Items list setup +++ " << endl; |
669 | |||
1645 | jag | 670 | #ifndef __WIDGET_MOVE__ |
1321 | jag | 671 | { |
1477 | jag | 672 | button* btns [] = {&b_set_to_mesh_rows, &b_set_to_mesh_cols, &b_set, &b_unset, &b_toggle}; |
673 | click_listener* cl [] = {&stmrl, &stmcl, &sutl, &sutl, &sutl}; |
||
1321 | jag | 674 | checkbutton* cbtns [] = {&cb_am_bpm, &cb_fm_bpm}; |
675 | state_listener* sl [] = {&abl, &fbl}; |
||
1477 | jag | 676 | for (int i = 0; i < 5; ++i) btns[i]->set_listener (cl[i]); |
1449 | jag | 677 | for (int i = 0; i < 2; ++i) cbtns[i]->set_listener (sl[i]); |
1323 | jag | 678 | |
1321 | jag | 679 | } |
1645 | jag | 680 | #endif |
1321 | jag | 681 | |
964 | jag | 682 | // tabs |
683 | num_tabs = 0; |
||
1393 | jag | 684 | last_tab = next_tab = cur_tab = 0; |
1406 | jag | 685 | next_tab_instr = 0; |
1473 | jag | 686 | checkbutton* cb_tabs [] = { |
687 | &cb_file, |
||
688 | &cb_instrument, |
||
689 | &cb_editors, |
||
690 | &cb_mkb_voice, |
||
691 | &cb_mkb_drone_tools, |
||
692 | &cb_mkb_drone_params, |
||
693 | &cb_mkb_ranges, |
||
694 | &cb_mkb_misc, |
||
964 | jag | 695 | &cb_ed_tools, |
1473 | jag | 696 | &cb_mon_tools, |
697 | &cb_mon_parameters, |
||
698 | &cb_mon_ballops, |
||
699 | &cb_mon_boxops, |
||
700 | &cb_mon_misc, |
||
964 | jag | 701 | &cb_binaural_drones_tools, |
702 | &cb_binaural_drones_edit, |
||
1941 | jag | 703 | &cb_ed_curves, |
964 | jag | 704 | }; |
1319 | jag | 705 | |
1473 | jag | 706 | static const char* const cb_tab_lbls [] = { |
707 | "File", |
||
708 | "Instrument", |
||
709 | "Editors", |
||
710 | "Voice", |
||
711 | "Drone Tools", |
||
712 | "Drone Params", |
||
713 | "Ranges", |
||
714 | "Misc", |
||
964 | jag | 715 | "Tools", |
1473 | jag | 716 | "Tools", |
717 | "Params", |
||
718 | "Ball Ops", |
||
719 | "Box Ops", |
||
720 | "Misc", |
||
964 | jag | 721 | "Create", |
1941 | jag | 722 | "Edit", |
723 | "Curves", |
||
964 | jag | 724 | }; |
1319 | jag | 725 | |
1941 | jag | 726 | for (int i = 0; i < 17; ++i) { |
1473 | jag | 727 | checkbutton* ci = cb_tabs[i]; |
728 | ci->set_text (cb_tab_lbls[i]); |
||
729 | ci->set_listener (this); |
||
964 | jag | 730 | } |
731 | |||
732 | widget* wfile [] = { |
||
1319 | jag | 733 | &b_exit_din, |
964 | jag | 734 | &cb_record, |
735 | &b_clear_record, |
||
736 | &b_save, |
||
1319 | jag | 737 | &lf_file, |
964 | jag | 738 | &b_turn_off_ui, |
739 | &cb_scope, |
||
740 | &sp_scope_height, |
||
1920 | jag | 741 | &sp_scope_samples, |
742 | &scopacity, |
||
1319 | jag | 743 | }; |
744 | |||
1645 | jag | 745 | #ifndef __WIDGET_MOVE__ |
964 | jag | 746 | cb_record.set_listener (&recl); |
747 | b_clear_record.set_listener (&recl); |
||
748 | b_save.set_listener (&recl); |
||
1319 | jag | 749 | b_exit_din.set_listener (&miscl); |
750 | b_turn_off_ui.set_listener (&miscl); |
||
1645 | jag | 751 | lf_file.fld.typing_lsnr = &recl; |
752 | #endif |
||
1319 | jag | 753 | |
964 | jag | 754 | lf_file.fld.set_text ("din.wav"); |
755 | lf_file.lbl.set_text ("File on Desktop?"); |
||
756 | |||
757 | widget* winst [] = { |
||
758 | &b_microtonal_keyboard, |
||
759 | &b_keyboard_keyboard, |
||
760 | &b_mondrian, |
||
761 | &b_binaural_drones |
||
762 | }; |
||
763 | |||
764 | widget* weds [] = { |
||
1931 | jag | 765 | &b_keyboard_keyboard_waveform, |
766 | &b_attack, |
||
767 | &b_decay, |
||
768 | &b_midi_velocity, |
||
964 | jag | 769 | &b_microtonal_keyboard_waveform, |
770 | &b_drone_waveform, |
||
771 | &b_drone_modulation, |
||
772 | &b_voice_modulation, |
||
773 | &b_range_modulation, |
||
1026 | jag | 774 | &b_range_width_height, |
1104 | jag | 775 | &b_range_pitch_vol, |
964 | jag | 776 | &b_gater, |
1930 | jag | 777 | &b_point_modulation, |
778 | &b_drone_pend, |
||
779 | &edlife2vel, |
||
964 | jag | 780 | &b_mondrian_waveform, |
781 | &b_mondrian_attack, |
||
782 | &b_mondrian_decay, |
||
783 | &b_binaural_drones_waveform, |
||
784 | &b_delays, |
||
785 | &b_octave_shift, |
||
786 | &b_compressor, |
||
787 | &b_morse_code, |
||
1941 | jag | 788 | &b_noise_interpolator, |
964 | jag | 789 | }; |
790 | |||
791 | widget* wvoice [] = { |
||
792 | &sp_voice_volume, |
||
793 | &b_record_phrase, |
||
794 | &b_clear_phrases, |
||
795 | &s_phrase_position, |
||
796 | &l_phrase_position, |
||
2206 | jag | 797 | &track_phrase_position, |
964 | jag | 798 | &sp_am_depth, |
799 | &sp_fm_depth, |
||
800 | &sp_am_bpm, |
||
801 | &sp_fm_bpm, |
||
802 | &ol_am_style, |
||
1438 | jag | 803 | &ol_fm_style, |
964 | jag | 804 | }; |
805 | |||
1645 | jag | 806 | #ifndef __WIDGET_MOVE__ |
964 | jag | 807 | for (int i = 1; i < 3; ++i) static_cast<button*>(wvoice[i])->set_listener (&pcl); // phrase commands listener |
1645 | jag | 808 | #endif |
964 | jag | 809 | |
810 | widget* wdrone_tools [] = { |
||
1674 | jag | 811 | &ol_add_wand, |
964 | jag | 812 | &b_delete_drones, |
813 | &b_select_all_drones, |
||
814 | &b_invert_drone_selection, |
||
815 | &b_orbit_selected_drones, |
||
816 | &b_select_attractees, |
||
817 | &b_select_attractors, |
||
818 | &b_launch_drones, |
||
819 | &b_stop_launching_drones, |
||
820 | &b_track_drones, |
||
821 | &b_select_tracked_drones, |
||
822 | &b_set_targets, |
||
823 | &b_clear_targets, |
||
824 | &b_select_launchers, |
||
825 | &b_freeze_drones, |
||
826 | &b_thaw_drones, |
||
1049 | jag | 827 | &b_flip_rows_cols, |
1098 | jag | 828 | &ol_create_this, |
964 | jag | 829 | &sp_mesh_rows, |
830 | &sp_mesh_cols, |
||
1037 | jag | 831 | &sp_browse_drone, |
832 | &ol_drone_order, |
||
833 | &l_drone_order, |
||
1046 | jag | 834 | &cb_sync_rows_cols, |
1049 | jag | 835 | &sp_mesh_dur, |
1598 | jag | 836 | &dp_numdrones, |
1096 | jag | 837 | &dp_bpm1, |
1320 | jag | 838 | &dp_orient, |
1321 | jag | 839 | &l_use_drone_pend, |
1320 | jag | 840 | &cb_am_bpm, |
841 | &cb_fm_bpm, |
||
842 | &sp_drones_per_pend, |
||
843 | &l_apply_to, |
||
844 | &b_set_to_mesh_rows, |
||
845 | &b_set_to_mesh_cols, |
||
1984 | jag | 846 | &moverailstrafe, |
1496 | jag | 847 | &b_scale_drones, |
848 | &b_rotate_drones, |
||
1512 | jag | 849 | &b_connect, |
850 | &b_disconnect, |
||
851 | &lf_conn_steps, |
||
852 | &cb_conn_wrap, |
||
1547 | jag | 853 | &b_mute, |
854 | &b_unmute, |
||
1819 | jag | 855 | &gabt, |
1557 | jag | 856 | &drone2noise, |
857 | &noise2drone, |
||
1666 | jag | 858 | &b_set_xform_center, |
1677 | jag | 859 | &mortalize, |
860 | &reincarnate, |
||
861 | &immortalize, |
||
1797 | jag | 862 | &chuck, |
863 | &trackcon, |
||
1827 | jag | 864 | &balloon, |
865 | &b_set,\ |
||
866 | &b_unset,\ |
||
867 | &b_toggle,\ |
||
868 | &ol_set_unset_toggle,\ |
||
964 | jag | 869 | }; |
1320 | jag | 870 | |
1686 | jag | 871 | LISTEN(ol_add_wand,&awdl) |
872 | LISTEN(ol_add_wand.option,&dcl) |
||
873 | LISTEN(ol_drones_are, &darl) |
||
1675 | jag | 874 | |
1645 | jag | 875 | #ifndef __WIDGET_MOVE__ |
1473 | jag | 876 | LISTEN(b_scale_drones,&bsdl) |
877 | LISTEN(b_rotate_drones,&brdl) |
||
1984 | jag | 878 | LISTEN(moverailstrafe, &mrsl) |
879 | LISTEN(moverailstrafe.option, &bmdl) |
||
1827 | jag | 880 | LISTEN(balloon,&dugl) |
1547 | jag | 881 | LISTEN(b_mute,&mul) |
882 | LISTEN(b_unmute,&umul) |
||
1557 | jag | 883 | LISTEN(drone2noise,&d2nl) |
884 | LISTEN(noise2drone,&n2dl) |
||
1812 | jag | 885 | LISTEN(seloncre,&dcl); |
1646 | jag | 886 | LISTEN(cb_conn_wrap, &wrapl) |
887 | LISTEN(b_connect, &bconl) |
||
888 | LISTEN(b_disconnect, &bdconl) |
||
1666 | jag | 889 | LISTEN(b_set_xform_center, &xcl); |
1677 | jag | 890 | LISTEN(mortalize,&morl) |
891 | LISTEN(immortalize,&immorl) |
||
892 | LISTEN(reincarnate,&reinl) |
||
1695 | jag | 893 | LISTEN(chuck, &chl) |
894 | LISTEN(chflip,&flpl) |
||
1697 | jag | 895 | LISTEN(chtog,&ctogl) |
1749 | jag | 896 | LISTEN(chautoresettrails,&aurl) |
1645 | jag | 897 | #endif |
1646 | jag | 898 | |
1986 | jag | 899 | raill1.name = "Rail"; |
900 | strafel1.name = "Strafe"; |
||
901 | |||
1619 | jag | 902 | sp_stiff.set ("Connection stiffness", 0.001f, 0.0f, 1.0f, &stiffl); |
2306 | jag | 903 | ancopa.set ("Opacity", 0.01f, 0.0f, 1.0f, &anchl); |
904 | |||
1819 | jag | 905 | gabt.set (0.1f, 0, MILLION, &gabtl); |
906 | gabt.set_text ("In", SECONDS); |
||
1485 | jag | 907 | sp_drones_per_pend.set ("Drones Per Pendulum", 1, 2, MILLION, &dppl, 0); |
1321 | jag | 908 | l_use_drone_pend.set_text ("Drone Pendulum's parameters?"); |
1320 | jag | 909 | l_apply_to.set_text ("Apply to"); |
910 | |||
1686 | jag | 911 | DECL_DRONE_PARAMS |
1645 | jag | 912 | |
1686 | jag | 913 | ol_drone_is.set_listener (this); |
914 | diram.setup ("Set AM direction to: "); |
||
915 | dirfm.setup ("Set FM direction to: "); |
||
2105 | jag | 916 | |
2106 | jag | 917 | sp_wand_dist.set ("Wand distance", 1, 0, MILLION, &wandl); |
2105 | jag | 918 | riset.set ("Rise time", 0.1f, 0, MILLION, &rl); |
919 | fallt.set ("Fall time", 0.1f, 0, MILLION, &fl); |
||
920 | lifetime.set ("Lifetime", 0.1f, 0, MILLION, &lifel); |
||
2106 | jag | 921 | handlesize.set ("Handle size", 1, 0, MILLION, &handl); |
922 | trailsize.set ("Trail size", 1, 0, MILLION, &trll); |
||
923 | ddpm.set ("Launches per minute", 1, 0, MILLION, &ddpml); |
||
924 | ddpl.set ("Drones per launch", 1, 0, MILLION, &ddpll); |
||
925 | gens.set ("Generations", 1, 1, MILLION, &gensl); |
||
926 | gens.orient = mouse_slider_listener::NONE; |
||
2105 | jag | 927 | |
1772 | jag | 928 | autorotate.setup (); |
1715 | jag | 929 | sva.setup (); |
1732 | jag | 930 | dva.setup (); |
1807 | jag | 931 | |
1753 | jag | 932 | anchored.set_listener (&ancl); |
1675 | jag | 933 | |
2106 | jag | 934 | // chuck |
1760 | jag | 935 | chspeed.set ("Speed", 1.0f, &spdl); chspeed.limits = 0; |
1695 | jag | 936 | chlen.set ("Length", 1.0f, &lenl); |
1760 | jag | 937 | chapt.set ("Angle per turn", 0.1f, &apfl); chapt.limits = 0; |
1706 | jag | 938 | chtrail.set ("Trail length", 10000, &chtll); |
1695 | jag | 939 | |
1645 | jag | 940 | #ifndef __WIDGET_MOVE__ |
1750 | jag | 941 | for (int i = 1; i < 17; ++i) dynamic_cast<button*>(wdrone_tools[i])->set_listener (&dcl); |
1645 | jag | 942 | for (int i = 0, j = DRONE_PARAMS_N - 1; i < 4; ++i) dynamic_cast<checkbutton*>(wdrone_params[j--])->set_listener (&dcl); |
943 | #endif |
||
944 | |||
1686 | jag | 945 | static const char* txt [] = {"AM Depth", "FM Depth", "AM BPM", "FM BPM"}; |
964 | jag | 946 | spinner<float>* spn [] = {&sp_am_depth, &sp_fm_depth, &sp_am_bpm, &sp_fm_bpm}; |
1686 | jag | 947 | change_listener<field>* vlis [] = {&amdl, &fmdl, &ambpml, &fmbpml}; |
964 | jag | 948 | spinner<float>* dspn [] = {&sp_dam_depth, &sp_dfm_depth, &sp_dam_bpm, &sp_dfm_bpm}; |
1451 | jag | 949 | change_listener<field>* dlis [] = {&damdl, &dfmdl, &dambpml, &dfmbpml}; |
964 | jag | 950 | |
951 | for (int i = 0; i < 4; ++i) { |
||
1686 | jag | 952 | const char* txti = txt[i]; |
964 | jag | 953 | spinner<float>* dspni = dspn[i]; |
1686 | jag | 954 | dspni->set (txti, 1.0f, dlis[i]); |
964 | jag | 955 | spinner<float>* spni = spn[i]; |
1120 | jag | 956 | spni->set_text (txti); |
1452 | jag | 957 | spni->set_listener (vlis[i]); |
964 | jag | 958 | } |
959 | |||
960 | for (int i = 1; i < 4; ++i) spn[i]->set_delta (1.0f); |
||
2033 | jag | 961 | sp_am_depth.set_delta (0.01f); |
964 | jag | 962 | sp_am_bpm.set_limits (0, MILLION); |
963 | sp_fm_bpm.set_limits (0, MILLION); |
||
964 | |||
2016 | jag | 965 | sp_dam_pos.set ("AM Position", 0.01f, &dampl); |
966 | sp_dfm_pos.set ("FM Position", 0.01f, &dfmpl); |
||
1912 | jag | 967 | |
2027 | jag | 968 | sp_dam_depth.lim = &damd0; |
969 | sp_dfm_depth.lim = &dfmd0; |
||
970 | |||
2060 | jag | 971 | LISTEN(revmod,&revl) |
972 | LISTEN(revmod.option,&revcl) |
||
973 | |||
964 | jag | 974 | widget* wranges [] = { |
975 | &b_selected_to_all, |
||
976 | &b_default_to_selected, |
||
977 | &b_default_to_all, |
||
978 | &b_adjust_range_left, |
||
979 | &b_adjust_range_right, |
||
980 | &b_adjust_range_both, |
||
981 | &b_adjust_range_height, |
||
982 | &b_adjust_board_height, |
||
983 | &b_rm_start_all, |
||
984 | &b_rm_stop_all, |
||
985 | &b_rm_toggle, |
||
986 | &b_rm_pause_resume, |
||
987 | &b_get_cur_ran, |
||
988 | &cb_mod_ran, |
||
989 | &cb_mark_ran, |
||
990 | &sp_ran_mod_width, |
||
991 | &sp_ran_mod_width_bpm, |
||
992 | &sp_ran_mod_height, |
||
993 | &sp_ran_mod_height_bpm, |
||
994 | &sp_range, |
||
995 | &l_ran_mod, |
||
996 | &l_adjust_height, |
||
997 | &l_adjust_range, |
||
998 | &ol_set_range, |
||
999 | &sp_default_width, |
||
1000 | &sp_default_height, |
||
1001 | &b_change_note_left, |
||
1002 | &b_change_note_right, |
||
1235 | jag | 1003 | &ol_change_note_style, |
1397 | jag | 1004 | &ol_change_note, |
1235 | jag | 1005 | &b_change_note_both, |
1436 | jag | 1006 | &ol_fixed, |
1827 | jag | 1007 | &sp_snap_left, |
1008 | &sp_snap_right, |
||
1009 | &ol_snap_style, |
||
964 | jag | 1010 | }; |
1011 | |||
1645 | jag | 1012 | #ifndef __WIDGET_MOVE__ |
964 | jag | 1013 | for (int i = 0; i < 3; ++i) static_cast<button*>(wranges[i])->set_listener (&sral); |
1014 | for (int i = 3; i < 6; ++i) static_cast<button*>(wranges[i])->set_listener (&rwl); |
||
1015 | b_adjust_range_height.set_listener (&rhl); |
||
1016 | b_adjust_board_height.set_listener (&bhl); |
||
1017 | for (int i = 8; i < 13; ++i) static_cast<button*>(wranges[i])->set_listener (&rml); |
||
1018 | cb_mod_ran.set_listener (&rml); |
||
1019 | cb_mark_ran.set_listener (&rml); |
||
1020 | b_change_note_left.set_listener (&cnl); |
||
1021 | b_change_note_right.set_listener (&cnr); |
||
1235 | jag | 1022 | b_change_note_both.set_listener (&cnb); |
1645 | jag | 1023 | #endif |
964 | jag | 1024 | |
1675 | jag | 1025 | ol_change_note.set_listener (&cnol); |
1026 | ol_change_note_style.set_listener (&cnsl); |
||
964 | jag | 1027 | |
1028 | widget* wmisc [] = { |
||
1029 | &l_octave_shift, |
||
1030 | &ab_octave_down, |
||
1031 | &ab_octave_up, |
||
1032 | &sp_octave_shift_bpm, |
||
1033 | &l_gater, |
||
1034 | &sp_gater_bpm, |
||
1035 | &ol_gater_style, |
||
1036 | &b_key_to_pitch_at_cursor, |
||
1037 | &l_tap_bpm, |
||
1038 | &td_tap_display, |
||
1039 | &l_tap_bpm_value, |
||
1040 | &cb_am, |
||
1041 | &cb_fm, |
||
1042 | &cb_gater, |
||
1043 | &cb_octave_shift, |
||
1044 | &cb_auto_reset, |
||
1137 | jag | 1045 | &cb_pitch_dis, |
1140 | jag | 1046 | &cb_vol_dis, |
1438 | jag | 1047 | &sp_lev_sz, |
1481 | jag | 1048 | &b_abort_octave_shift, |
964 | jag | 1049 | }; |
1137 | jag | 1050 | |
1645 | jag | 1051 | #ifndef __WIDGET_MOVE__ |
1481 | jag | 1052 | LISTEN(b_abort_octave_shift, &aosl) |
1438 | jag | 1053 | cb_draw_mesh.set_listener (&dml); |
1137 | jag | 1054 | cb_pitch_dis.set_listener (&pvdl); |
1055 | cb_vol_dis.set_listener (&pvdl); |
||
1645 | jag | 1056 | #endif |
1137 | jag | 1057 | |
1645 | jag | 1058 | sp_lev_sz.set ("Level size", 1, 1, MILLION, &pvdl); |
964 | jag | 1059 | |
1950 | jag | 1060 | widget* wedtools [] = { // curve editors tools |
964 | jag | 1061 | &abe_left, |
1062 | &abe_right, |
||
1063 | &abe_up, |
||
1064 | &abe_down, |
||
1065 | &pb_zoom_in, |
||
1066 | &mb_zoom_out, |
||
1117 | jag | 1067 | &l_snap, |
1901 | jag | 1068 | &b_snapx, |
1069 | &b_snapy, |
||
1070 | &b_snapboth, |
||
1071 | &b_snapnone, |
||
2222 | jag | 1072 | &drawsnaps, |
964 | jag | 1073 | &b_pick_curve, |
1074 | &b_insert_vertex, |
||
1075 | &b_delete_vertex, |
||
1117 | jag | 1076 | &b_draw_replacement_curve, |
1077 | &b_undo, |
||
1078 | &b_redo, |
||
2222 | jag | 1079 | &viewtoo, |
1117 | jag | 1080 | &b_copy, |
2340 | jag | 1081 | &ol_paste, |
1128 | jag | 1082 | &b_swap_curves, |
2239 | jag | 1083 | &size_tangent, |
1117 | jag | 1084 | &b_fold_tangents, |
2214 | jag | 1085 | &cb_selection_only, |
1128 | jag | 1086 | &ol_mirror, |
2219 | jag | 1087 | &pinunpin, |
1117 | jag | 1088 | &ol_mirror_tangents, |
1089 | &lf_curve_name, |
||
1090 | &sp_curve_limit, |
||
1091 | &ol_curve_style, |
||
964 | jag | 1092 | &l_library, |
1093 | &abl_left, |
||
1094 | &abl_right, |
||
1117 | jag | 1095 | &b_add_curve, |
1096 | &b_replace_curve, |
||
1097 | &b_delete_curve, |
||
964 | jag | 1098 | &l_capture, |
1099 | &b_start_capture, |
||
1100 | &b_assign_capture, |
||
1101 | &cb_draw_curve, |
||
2126 | jag | 1102 | &draweditables, |
1103 | &cb_mark_segments, |
||
1117 | jag | 1104 | &cb_label_vertices, |
964 | jag | 1105 | &cb_show_waveform_samples, |
2039 | jag | 1106 | &crvwav.hz, |
1107 | &crvwav.periods, |
||
1108 | &crvwav.time, |
||
964 | jag | 1109 | &sp_curve_rpm, |
1110 | &b_stop_rotating, |
||
1950 | jag | 1111 | &ed_flip_rotation, |
1112 | &cb_ed_autoflip, |
||
2039 | jag | 1113 | &ed_autoflip_reset, |
1950 | jag | 1114 | &sp_curve_every, |
2039 | jag | 1115 | &cb_overlay, |
2222 | jag | 1116 | &drawcursor, |
2219 | jag | 1117 | &pinunpin, |
964 | jag | 1118 | }; |
1119 | |||
1120 | widget* wmon [] = { // mondrian tools |
||
1121 | &b_add_balls, |
||
1122 | &b_move_selected_balls, |
||
1123 | &b_delete_selected_targets, |
||
1124 | &b_delete_all_targets, |
||
1125 | &b_select_all_targets, |
||
1126 | &b_invert_selected_targets, |
||
1127 | &b_split_horizontal, |
||
1128 | &b_split_vertical, |
||
1129 | &b_delete_box, |
||
1130 | &b_select_targets_in_box, |
||
1131 | &b_freeze_balls, |
||
1132 | &b_thaw_balls, |
||
1133 | &b_clear_modulations, |
||
1134 | &b_modulate_balls_up, |
||
1135 | &b_modulate_balls_down, |
||
1136 | &b_auto_change_direction_clockwise, |
||
1137 | &b_auto_change_direction_anti_clockwise, |
||
1138 | &b_stop_auto_changing_direction, |
||
1139 | &b_flip_direction, |
||
1140 | &b_make_random_color, |
||
1141 | &b_add_remove_slits, |
||
1142 | &b_select_wreckers, |
||
1143 | &b_select_healers, |
||
1144 | &b_switch_ball_type, |
||
1145 | &b_toggle_wreckers, |
||
1146 | &b_toggle_healers, |
||
1147 | &b_toggle_bouncers, |
||
1148 | &b_remove_slits_on_edge, |
||
1149 | &b_toggle_slit_anim, |
||
1150 | &b_make_note_grid, |
||
1151 | &b_make_nxn_grid, |
||
1152 | &b_delete_all_boxes, |
||
1423 | jag | 1153 | &b_ball_trig, |
964 | jag | 1154 | &ol_ball_types, |
1155 | &ol_split_types_h, |
||
1156 | &ol_split_types_v, |
||
1157 | &sp_mondrian_num_boxes, |
||
1423 | jag | 1158 | &ol_selection_targets, |
964 | jag | 1159 | }; |
1160 | |||
1161 | |||
1162 | arrow_button* mnav[] = {&abm_left, &abm_down, &abm_right, &abm_up}; |
||
1163 | int mdirs [] = {arrow_button::left, arrow_button::down, arrow_button::right, arrow_button::up}; |
||
1164 | for (int i = 0; i < 4; ++i) { |
||
1165 | arrow_button* ab = mnav[i]; |
||
1015 | jag | 1166 | ab->set_dir (mdirs[i]); |
964 | jag | 1167 | } |
1168 | |||
1169 | widget* wmon_pars [] = { // mondrian parameters |
||
1170 | &l_octave_shift, |
||
1171 | &ab_octave_down, |
||
1172 | &ab_octave_up, |
||
1173 | &sp_octave_shift_bpm, |
||
1519 | jag | 1174 | &b_abort_octave_shift, |
964 | jag | 1175 | &sp_mondrian_min_voices, |
1176 | &sp_mondrian_change_attack_time, |
||
1177 | &sp_mondrian_change_decay_time, |
||
1178 | &sp_mondrian_change_speed, |
||
1179 | &sp_mondrian_change_dir, |
||
1180 | &sp_mondrian_change_trail_size, |
||
1181 | &sp_mondrian_change_note_poly_points, |
||
1182 | &sp_mondrian_change_note_poly_radius, |
||
1183 | &sp_mondrian_change_slit_size, |
||
1184 | &sp_mondrian_change_slit_anim_time, |
||
1185 | &cb_mondrian_auto_adjust_voices, |
||
1186 | &sp_mondrian_change_vol |
||
1187 | }; |
||
1188 | |||
1189 | widget* wmon_misc [] = { // mondrian misc |
||
1190 | &l_draw_ball, |
||
1191 | &abm_left, |
||
1192 | &abm_right, |
||
1193 | &abm_up, |
||
1194 | &abm_down, |
||
1195 | &bm_zoom_in, |
||
1196 | &bm_zoom_out, |
||
1197 | &cb_draw_boxes, |
||
1198 | &cb_fill_boxes, |
||
1199 | &cb_draw_notes, |
||
1200 | &cb_label_notes, |
||
1201 | &cb_label_hz_vol, |
||
1202 | &cb_draw_ball_position, |
||
1203 | &cb_draw_ball_heading, |
||
2049 | jag | 1204 | &cb_draw_ball_trails, |
1205 | &texture, |
||
1206 | &texstep, |
||
1207 | &text_ure, |
||
964 | jag | 1208 | }; |
1209 | |||
1210 | widget* wmon_boxops [] = { |
||
1211 | &cb_auto_split_box, |
||
1212 | &cb_auto_delete_box, |
||
1213 | &sp_auto_split_time, |
||
1214 | &sp_auto_delete_time, |
||
1215 | &ol_auto_pick_box_split, |
||
1216 | &ol_auto_split_at, |
||
1217 | &ol_auto_split_orient, |
||
1218 | &ol_auto_pick_box_delete, |
||
1219 | &sp_min_split_size |
||
1220 | }; |
||
1221 | |||
1222 | widget* wmon_ballops [] = { |
||
1223 | &cb_turn, &cb_speed, &cb_teleport, &cb_clone, &sp_turn_every, &sp_turn_min, &sp_turn_max, |
||
1224 | &sp_speed_every, &sp_speed_min, &sp_speed_max, &sp_max_speed, &sp_tel_every, &sp_tel_radius, |
||
1225 | &cb_turn_sync, &cb_speed_sync, &sp_clone_every, &sp_max_clones, &sp_clone_offset, &sp_max_balls, |
||
1226 | &cb_clone_can_clone, &ol_browse_balls, |
||
1227 | &cb_transform, &sp_transform_every, &ol_bouncer, &ol_healer, &ol_wrecker, |
||
1228 | }; |
||
1229 | |||
1230 | spinner<float>* bospn [] = {&sp_turn_every, &sp_speed_every, &sp_tel_every, &sp_clone_every, &sp_transform_every}; |
||
1231 | float bodta [] = {0.01f, 0.01f, 1.0f, 1.0f, 1.0f}; |
||
1232 | for (int i = 0; i < ball_op::NUM_OPS; ++i) { |
||
1233 | spinner<float>* spni = bospn[i]; |
||
1677 | jag | 1234 | spni->set_text ("Every", SECONDS); |
1646 | jag | 1235 | spni->set (bodta[i], 0.0f, MILLION, &bolis); |
964 | jag | 1236 | } |
1836 | jag | 1237 | sp_turn_min.set_text ("Clockwise Max", DEGREES); |
1646 | jag | 1238 | sp_turn_min.set (1, 0, MILLION, &bolis); |
1836 | jag | 1239 | sp_turn_max.set_text ("Anti-clockwise Max", DEGREES); |
1646 | jag | 1240 | sp_turn_max.set (1, 0, MILLION, &bolis); |
1241 | sp_speed_min.set ("Brake", 0.1f, 0, MILLION, &bolis); |
||
1242 | sp_speed_max.set ("Accelerate", 0.1f, 0, MILLION, &bolis); |
||
1243 | sp_max_speed.set ("Max speed", 1, 0, MILLION, &bolis); |
||
1244 | sp_tel_radius.set ("Max distance", 1, 0, MILLION, &bolis); |
||
1245 | sp_clone_offset.set ("Offset", 1.0f, 0, MILLION, &bolis); |
||
1246 | sp_max_clones.set ("Max clones", 1, 1, MILLION, &bolis); |
||
1247 | sp_max_balls.set ("Max balls", 1, 0, MILLION,&bolis); |
||
964 | jag | 1248 | |
1646 | jag | 1249 | #ifndef __WIDGET_MOVE__ |
2120 | jag | 1250 | |
964 | jag | 1251 | checkbutton* bocbn [] = {&cb_turn, &cb_speed, &cb_teleport, &cb_clone, &cb_transform}; |
1252 | for (int i = 0; i < ball_op::NUM_OPS; ++i) bocbn[i]->set_listener (&bolis); |
||
1253 | for (int i = 1; i < 7; ++i) static_cast<button*>(wmon_misc[i])->set_listener (&monl); |
||
1254 | for (int i = 7; i < 15; ++i) static_cast<checkbutton*>(wmon_misc[i])->set_listener (&monl); |
||
1646 | jag | 1255 | for (int i = 0; i < 33; ++i) static_cast<button*>(wmon[i])->set_listener (&monl); |
2222 | jag | 1256 | |
1950 | jag | 1257 | for (int i = 0; i < 6; ++i) static_cast<button*>(wedtools[i])->set_listener (&pzl); |
1258 | for (int i = 7; i < 11; ++i) static_cast<button*>(wedtools[i])->set_listener (&snl); |
||
2222 | jag | 1259 | drawsnaps.set_listener (&snl); |
1260 | drawcursor.set_listener (&cursl); |
||
1261 | viewtoo.set_listener (&urvl); |
||
964 | jag | 1262 | |
1263 | button* crvops [] = { |
||
1646 | jag | 1264 | &b_pick_curve, |
964 | jag | 1265 | &b_insert_vertex, |
1266 | &b_delete_vertex, |
||
1646 | jag | 1267 | &b_draw_replacement_curve, |
964 | jag | 1268 | &b_fold_tangents, |
1128 | jag | 1269 | &ol_mirror.option, |
964 | jag | 1270 | &b_copy, |
2340 | jag | 1271 | &ol_paste.option, |
1646 | jag | 1272 | &b_swap_curves, |
964 | jag | 1273 | &b_undo, |
1274 | &b_redo, |
||
1275 | &abl_left, |
||
1276 | &abl_right, |
||
1277 | &b_add_curve, |
||
1278 | &b_replace_curve, |
||
1279 | &b_delete_curve, |
||
1280 | &b_start_capture, |
||
1281 | &b_assign_capture, |
||
1948 | jag | 1282 | &b_stop_rotating, |
1950 | jag | 1283 | &ed_flip_rotation, |
1955 | jag | 1284 | &ed_autoflip_reset, |
2125 | jag | 1285 | &size_tangent, |
2219 | jag | 1286 | &pinunpin, |
964 | jag | 1287 | }; |
1646 | jag | 1288 | |
2238 | jag | 1289 | for (int i = 0; i < 23; ++i) crvops[i]->set_listener (&col); |
2131 | jag | 1290 | col.name = "Tangent size"; // via mouse slider |
964 | jag | 1291 | |
1646 | jag | 1292 | #endif |
1293 | |||
2340 | jag | 1294 | options_list* oll [] = { |
1295 | &ol_ball_types, &ol_split_types_h, &ol_split_types_v, &ol_selection_targets, |
||
1296 | &ol_auto_pick_box_split, &ol_auto_split_at, &ol_auto_split_orient, |
||
1297 | &ol_auto_pick_box_delete |
||
1298 | }; |
||
1646 | jag | 1299 | for (int i = 0; i < 8; ++i) { |
1300 | options_list* oli = oll[i]; |
||
1301 | oli->set_listener (&monl); |
||
1302 | } |
||
1303 | ol_split_types_h.set_text (mondrian_listener::split_types[monl.hsplit]); |
||
1304 | ol_split_types_v.set_text (mondrian_listener::split_types[monl.vsplit]); |
||
1305 | ol_selection_targets.set_text (mondrian_listener::selection_targets[mondrian0.sel_tar]); |
||
1306 | ol_browse_balls.set_listener (&bolis); |
||
1307 | |||
1308 | b_undo.click_repeat = b_redo.click_repeat = 1; |
||
1309 | abl_left.click_repeat = abl_right.click_repeat = 1; |
||
1310 | |||
1311 | ol_mirror.set_listener (this); |
||
2340 | jag | 1312 | |
1646 | jag | 1313 | lf_curve_name.set_listener (&col); |
2340 | jag | 1314 | ol_paste.set_listener (&pastl); |
1315 | |||
1646 | jag | 1316 | #ifndef __WIDGET_MOVE__ |
2126 | jag | 1317 | checkbutton* cbed [] = {&cb_label_vertices, &cb_mark_segments, &cb_overlay, &cb_draw_curve, &draweditables, &cb_ed_autoflip, &sp_curve_every.variance.cb, 0}; |
1950 | jag | 1318 | checkbutton** cp = cbed; |
1319 | while (*cp != 0) { |
||
1320 | (*cp)->set_listener (&col); |
||
1321 | cp++; |
||
1322 | } |
||
1646 | jag | 1323 | #endif |
964 | jag | 1324 | |
1325 | widget* wbd [] = { // binaural drones |
||
1326 | &b_create_binaurals_on_notes, |
||
1327 | &b_create_binaurals_from_pitch, |
||
1328 | &sp_bd_separation, |
||
1329 | &sp_bd_pairs, |
||
1330 | &lf_bd_start_pitch, |
||
1331 | &lf_bd_spacing, |
||
1332 | &ol_justification, |
||
1333 | &ol_key_note, |
||
1334 | &cb_resize_separation, |
||
1335 | &cb_close_octave, |
||
1336 | }; |
||
1337 | |||
1338 | widget* wbde [] = { |
||
1339 | &bbd_select_all, |
||
1340 | &bbd_select_none, |
||
1341 | &bbd_invert_select, |
||
1342 | &bbd_delete, |
||
1343 | &bbd_sync, |
||
1344 | &bbd_select2, |
||
1345 | &bd_modulate_up, |
||
1346 | &bd_modulate_down, |
||
1347 | &bbd_modulate, |
||
1348 | &bbd_flip, |
||
1349 | &il_binaural_drones, |
||
1350 | &lf_vol_fade_time, |
||
1351 | &lf_master_volume, |
||
1352 | &lf_pitch_fade_time, |
||
1353 | &lf_modulation_amount, |
||
1354 | &ol_select_what, |
||
1355 | &ol_select_rule, |
||
1356 | &bdf_value, |
||
1357 | &lf_l, |
||
1358 | &lf_r, |
||
1359 | &lf_sep, |
||
1360 | &lf_vol, |
||
1361 | &ol_just |
||
1362 | }; |
||
1363 | |||
1364 | il_binaural_drones.sel_lis = &bdl; |
||
1365 | lf_sep.fld.set_text (0.0f); |
||
1366 | ol_just.set_text (binaural_drones_listener::justs[binaural_drone::CENTER]); |
||
1367 | ol_just.set_listener (&bdl); |
||
1368 | |||
1369 | bd_modulate_up.set_size (24); |
||
1370 | bd_modulate_down.set_size (24); |
||
1015 | jag | 1371 | bd_modulate_down.set_dir (arrow_button::left); |
964 | jag | 1372 | |
1646 | jag | 1373 | #ifndef __WIDGET_MOVE__ |
964 | jag | 1374 | for (int i = 0; i < 10; ++i) static_cast<button*>(wbde[i])->set_listener (&bdl); |
1375 | for (int i = 0; i < 2; ++i) static_cast<button*>(wbd[i])->set_listener (&bdl); // binaural drones commands |
||
1376 | cb_close_octave.set_listener (&bdl); |
||
1377 | cb_resize_separation.set_listener (&bdl); |
||
1646 | jag | 1378 | #endif |
1379 | |||
1380 | ol_select_what.set_listener (&bdl); |
||
1381 | ol_select_rule.set_listener (&bdl); |
||
964 | jag | 1382 | ol_justification.set_listener (&bdl); |
1383 | ol_key_note.set_listener (&bdl); |
||
1384 | |||
1646 | jag | 1385 | label_field* lfb [] = { |
1386 | &lf_bd_start_pitch, &lf_bd_spacing, &lf_master_volume, &lf_vol_fade_time, |
||
1387 | &lf_pitch_fade_time, &lf_modulation_amount, &lf_l, &lf_r, &lf_sep, &lf_vol |
||
1388 | }; |
||
1389 | string lfbs [] = { |
||
1390 | "Start Pitch (Hz)", "Spacing (Hz)", "Master volume (%)", "Volume fade time (secs)", |
||
1391 | "Pitch fade time (secs)", "Amount", "L (Hz)", "R (Hz)", "Separation (Hz)", "Volume (%)" |
||
1392 | }; |
||
964 | jag | 1393 | for (int i = 0; i < 10; ++i) { |
1394 | label_field* li = lfb[i]; |
||
1144 | jag | 1395 | li->set_label (lfbs[i]); |
964 | jag | 1396 | li->set_listener (&bdl); |
1397 | } |
||
1521 | jag | 1398 | |
1399 | sp_bd_separation.set ("Separation (Hz)", 1.0f, 0.0f, MILLION, 0, 0); |
||
964 | jag | 1400 | sp_bd_separation.set_value (1.0f); |
1401 | sp_bd_separation.orient = mouse_slider_listener::NONE; |
||
1402 | |||
1521 | jag | 1403 | sp_bd_pairs.set ("Number of Pairs", 1, 1, MILLION, 0, 0); |
964 | jag | 1404 | sp_bd_pairs.set_value (1); |
1405 | sp_bd_pairs.orient = mouse_slider_listener::NONE; |
||
1406 | |||
1883 | jag | 1407 | for (int i = 0; i < 24; ++i) { |
1026 | jag | 1408 | editors.push_back (weds[i]); |
1409 | //weds[i]->set_moveable(1); |
||
1410 | } |
||
964 | jag | 1411 | |
1465 | jag | 1412 | widget** wmap [] = { |
1413 | wfile, |
||
1414 | winst, |
||
1415 | weds, |
||
1416 | wvoice, |
||
1417 | wdrone_tools, |
||
1418 | wdrone_params, |
||
1419 | wranges, |
||
1420 | wmisc, |
||
1950 | jag | 1421 | wedtools, |
1465 | jag | 1422 | wmon, |
1423 | wmon_pars, |
||
1424 | wmon_ballops, |
||
1425 | wmon_boxops, |
||
1426 | wmon_misc, |
||
1427 | wbd, |
||
1941 | jag | 1428 | wbde, |
1429 | |||
1465 | jag | 1430 | }; |
1431 | int numw [] = { |
||
1920 | jag | 1432 | 10, |
1465 | jag | 1433 | 4, |
1883 | jag | 1434 | 24, |
2206 | jag | 1435 | 12, |
1827 | jag | 1436 | 58, |
1474 | jag | 1437 | DRONE_PARAMS_N, |
1827 | jag | 1438 | 35, |
1481 | jag | 1439 | 20, |
2238 | jag | 1440 | 57, |
1465 | jag | 1441 | 38, |
1519 | jag | 1442 | 17, |
1465 | jag | 1443 | 26, |
1444 | 9, |
||
2049 | jag | 1445 | 18, |
1465 | jag | 1446 | 10, |
1941 | jag | 1447 | 23, |
1448 | |||
1465 | jag | 1449 | }; |
964 | jag | 1450 | |
1467 | jag | 1451 | lf_conn_steps.set_label ("Steps"); |
1512 | jag | 1452 | LISTEN(lf_conn_steps, &stepsl) |
1453 | lf_conn_steps.fld.typing_lsnr = &stepsl; |
||
1467 | jag | 1454 | lf_conn_steps.fld.expr = 0; |
1460 | jag | 1455 | |
1490 | jag | 1456 | DECL_COLOR_SLIDERS |
1489 | jag | 1457 | color clrs [] = {color(1.0f, 0.0f, 0.0f), color(0.0f, 1.0f, 0.0f), color(0.0f, 0.0f, 1.0f), |
1461 | jag | 1458 | color(1.0f, 0.0f, 0.0f), color(0.0f, 1.0f, 0.0f), color(0.0f, 0.0f, 1.0f)}; |
1489 | jag | 1459 | |
1490 | jag | 1460 | for (int i = 0; i < COLOR_SLIDERS_M; ++i) { |
1461 | slider<float>& si = dynamic_cast<slider<float>&>(*slrs [i]); |
||
1468 | jag | 1462 | si.set_width_height (128, si.extents.height); |
1461 | jag | 1463 | color& ci = clrs [i]; |
1464 | si.set_color (ci.r, ci.g, ci.b); |
||
1465 | si.set_limits (0.0f, 1.0f); |
||
1646 | jag | 1466 | #ifndef __WIDGET_MOVE__ |
1489 | jag | 1467 | si.set_listener (&cscl, &cssl); |
1646 | jag | 1468 | #endif |
1461 | jag | 1469 | } |
1470 | |||
1468 | jag | 1471 | colorer.schemes[0]=&gc_top; |
1472 | colorer.schemes[1]=&gc_bottom; |
||
1463 | jag | 1473 | colorer.schemes[2]=&gc_blend; |
1474 | colorer.schemes[3]=&gc_rand; |
||
1472 | jag | 1475 | colorer.i = colorer_t::RANDOM; |
1463 | jag | 1476 | |
1473 | jag | 1477 | LISTEN(ol_color,&ocoll) |
1646 | jag | 1478 | LISTEN(ol_fixed,&fxl) |
1479 | LISTEN(ol_snap_style,&sdl); |
||
1468 | jag | 1480 | |
1470 | jag | 1481 | separator* seps [] = {&separators.main, &separators.dp0, &separators.dp1}; |
1482 | const char* sepsn [] = {"main", "dp0", "dp1"}; |
||
1483 | for (int i = 0; i < 3; ++i) { |
||
1484 | separator& si = *seps[i]; |
||
1485 | si.set_name (sepsn[i]); |
||
1486 | } |
||
1465 | jag | 1487 | |
1941 | jag | 1488 | for (int i = 0; i < 17; ++i) { |
1489 | vector<widget*>& vw = tab_members[cb_tabs[i]]; |
||
964 | jag | 1490 | int n = numw[i]; |
1491 | widget** wmi = wmap[i]; |
||
1492 | for (int m = 0; m < n; ++m) { |
||
1493 | vw.push_back (wmi[m]); |
||
1748 | jag | 1494 | #ifdef __WIDGET_MOVE__ |
1495 | wmi[m]->set_moveable(1); // to move item |
||
1496 | #endif |
||
964 | jag | 1497 | } |
1465 | jag | 1498 | vw.push_back (&separators.main); |
964 | jag | 1499 | } |
1684 | jag | 1500 | |
1619 | jag | 1501 | sp_voice_volume.set ("Volume", 0.001f, -MILLION, MILLION, &vvl); |
1695 | jag | 1502 | sp_drone_master_vol.set ("Master volume", 0.001f, -MILLION, MILLION, &dmvol); |
2039 | jag | 1503 | masvol0.set_state (1); |
2102 | jag | 1504 | sp_drone_master_vol.lim = &masvol0; |
1505 | |||
1695 | jag | 1506 | sp_drone_vol.set ("Volume", 0.01f, -MILLION, MILLION, &dvol); |
1552 | jag | 1507 | sp_drone_vol.set_value (0.0f); |
964 | jag | 1508 | |
1509 | l_octave_shift.set_text ("Octave Shift"); |
||
1015 | jag | 1510 | ab_octave_down.set_dir (arrow_button::left); |
1646 | jag | 1511 | ab_octave_up.set_dir (arrow_button::right); |
1512 | |||
1513 | #ifndef __WIDGET_MOVE__ |
||
964 | jag | 1514 | ab_octave_down.set_listener (&osl); |
1515 | ab_octave_up.set_listener (&osl); |
||
1646 | jag | 1516 | #endif |
964 | jag | 1517 | int arrow_size = 24; |
1518 | ab_octave_up.set_size (arrow_size); |
||
1519 | ab_octave_down.set_size (arrow_size); |
||
1472 | jag | 1520 | sp_octave_shift_bpm.set ("BPM", 1, 0.0f, MILLION, &osl); |
964 | jag | 1521 | |
1472 | jag | 1522 | sp_gater_bpm.set ("BPM", 1, 0, MILLION, &gbl); |
964 | jag | 1523 | ol_gater_style.set_text (" style = "); |
1524 | ol_gater_style.set_listener (&gater_style_lis); |
||
1472 | jag | 1525 | |
2157 | jag | 1526 | l_gater.set_text ("Beater"); |
964 | jag | 1527 | l_gater.add_child (&sp_gater_bpm); |
1528 | l_gater.add_child (&ol_gater_style); |
||
1529 | |||
1403 | jag | 1530 | #ifdef __WIDGET_MOVE__ |
1531 | |||
2239 | jag | 1532 | int wek [] = {8, 14, 2, 3, 7, 3, 4, 4, 6}; |
1403 | jag | 1533 | for (int i = 0, j = 4, k = 0; i < 9; ++i) { |
1534 | k = wek[i]; |
||
1950 | jag | 1535 | makehier (&wedtools[j], k); |
1403 | jag | 1536 | j += k; |
1537 | } |
||
1538 | |||
1828 | jag | 1539 | widget* osn [] = {&l_octave_shift, &ab_octave_down, &ab_octave_up, &b_abort_octave_shift, &sp_octave_shift_bpm, 0}; |
1682 | jag | 1540 | makefam (osn, 5); |
964 | jag | 1541 | |
1828 | jag | 1542 | widget* brs [] = {&ol_set_range, &b_default_to_selected, &b_default_to_all, &b_selected_to_all, 0}; |
1543 | makehier (brs); |
||
964 | jag | 1544 | |
1828 | jag | 1545 | widget* aht [] = {&l_adjust_height, &b_adjust_range_height, &b_adjust_board_height, 0}; |
1546 | makehier (aht); |
||
964 | jag | 1547 | |
1828 | jag | 1548 | widget* arb [] = {&l_adjust_range, &b_adjust_range_left, &b_adjust_range_right, &b_adjust_range_both, 0}; |
1549 | makehier (arb); |
||
964 | jag | 1550 | |
1828 | jag | 1551 | widget* brm [] = {&l_ran_mod, &b_rm_pause_resume, &b_rm_start_all, &b_rm_stop_all, &b_rm_toggle, 0}; |
1552 | makehier (brm); |
||
964 | jag | 1553 | |
1828 | jag | 1554 | widget* brc [] = {&ol_change_note, &b_change_note_left, &b_change_note_right, &b_change_note_both, &ol_change_note_style, 0}; |
1555 | makehier (brc); |
||
964 | jag | 1556 | |
1828 | jag | 1557 | widget* wmmv [] = {&cb_modulation, &cb_visual, &cb_motion, &cb_chuck, &cb_defaults, 0}; |
1558 | makehier (wmmv); |
||
1465 | jag | 1559 | |
1828 | jag | 1560 | widget* dpw0 [] = {&cb_show_vel, &cb_show_accel, &cb_show_gravity, &cb_show_anchors, 0}; |
1561 | makehier (dpw0); |
||
964 | jag | 1562 | |
2060 | jag | 1563 | widget* dpw3 [] = {&sp_dam_depth, &sp_dfm_depth, &sp_dam_bpm, &sp_dfm_bpm, &damd0, &dfmd0, 0}; |
1828 | jag | 1564 | makehier (dpw3); |
964 | jag | 1565 | |
1893 | jag | 1566 | widget* dpw4 [] = { &sp_drones_per_min, &dpl, &sp_drone_lifetime, &sp_orbit_insertion_time, 0}; |
1828 | jag | 1567 | makehier (dpw4); |
964 | jag | 1568 | |
1828 | jag | 1569 | widget* dpw5 [] = {&sp_change_drone_trail_length, &sp_change_drone_handle_size, 0}; |
1570 | makehier (dpw5); |
||
964 | jag | 1571 | |
1828 | jag | 1572 | widget* dpw6 [] = {&ol_set_unset_toggle, &b_toggle, &b_set, &b_unset, 0}; |
1573 | makehier (dpw6); |
||
964 | jag | 1574 | |
1827 | jag | 1575 | widget* rmw [] = {&cb_mod_ran, &ol_fixed, &sp_ran_mod_width, &sp_ran_mod_width_bpm, &sp_ran_mod_height, &sp_ran_mod_height_bpm, 0}; |
1576 | makehier (rmw); |
||
1403 | jag | 1577 | |
1827 | jag | 1578 | widget* dpw [] = {&ol_create_this,&dp_orient,&dp_numdrones,&dp_bpm1, 0}; |
1579 | makehier (dpw); |
||
1403 | jag | 1580 | |
1828 | jag | 1581 | widget *rcw [] = {&ol_create_this, &sp_mesh_rows, &sp_mesh_cols, &cb_sync_rows_cols, &b_flip_rows_cols, 0}; |
1682 | jag | 1582 | makehier (rcw, 5); |
1828 | jag | 1583 | widget* dow [] = {&l_drone_order, &ol_drone_order, &ol_mesh_point, &f_mesh_xy, 0}; |
1682 | jag | 1584 | makehier (dow, 4); |
1828 | jag | 1585 | widget* mshw [] = {&sp_mesh_rows, &sp_mesh_dur, &l_use_drone_pend, 0,}; |
1682 | jag | 1586 | makehier (mshw, 3); |
1827 | jag | 1587 | sp_mesh_rows.add_child (&l_drone_order); |
1828 | jag | 1588 | widget* dpp [] = {&sp_drones_per_pend, &b_set_to_mesh_rows, &b_set_to_mesh_cols, 0}; |
1589 | makehier (dpp); |
||
1590 | widget* apt [] = {&l_apply_to, &cb_am_bpm, &cb_fm_bpm, 0}; |
||
1591 | makehier (apt); |
||
1592 | widget* udp [] = {&l_use_drone_pend, &sp_drones_per_pend, &l_apply_to, 0}; |
||
1593 | makehier (udp); |
||
1594 | widget* wsp [] = {&sp_snap_left, &sp_snap_right, &ol_snap_style, 0}; |
||
1595 | makehier (wsp); |
||
1596 | widget* wda [] = {&l_drone_arrow, &b_arrow_reset, &dronearrow.neck, &dronearrow.shoulder.width, &dronearrow.shoulder.position, &dronearrow.cap, &dronearrow.decap, 0}; |
||
1597 | makehier (wda); |
||
1778 | jag | 1598 | widget* wda2 [] = { |
1599 | &dronearrowdefaults.lbl, |
||
1600 | &dronearrowdefaults.arrow, |
||
1804 | jag | 1601 | &dronearrowdefaults.neck, |
1778 | jag | 1602 | &dronearrowdefaults.shoulder.width, |
1603 | &dronearrowdefaults.shoulder.position, |
||
1604 | &dronearrowdefaults.cap, |
||
1828 | jag | 1605 | 0, |
1778 | jag | 1606 | }; |
1828 | jag | 1607 | makehier (wda2); |
1608 | widget* wbo [] = {&sp_bounces, &sp_rebound, &ol_bounce_style, 0}; |
||
1609 | makehier (wbo); |
||
1827 | jag | 1610 | widget* wconn [] = {&b_disconnect, &b_connect, &lf_conn_steps, &cb_conn_wrap, &trackcon, 0}; |
1611 | makehier (wconn); |
||
1828 | jag | 1612 | widget* wsl [] = {&s_red_min, &s_red_max, &s_green_min, &s_green_max, &s_blue_min, &s_blue_max, &ol_color, 0}; |
1613 | makehier (wsl); |
||
1465 | jag | 1614 | |
1548 | jag | 1615 | { |
1616 | widget* w [] = { |
||
1617 | &b_select_all_drones, |
||
1618 | &b_invert_drone_selection, |
||
1619 | &b_select_attractees, |
||
1620 | &b_select_attractors, |
||
1813 | jag | 1621 | &b_select_launchers, |
1548 | jag | 1622 | &b_select_tracked_drones, |
1828 | jag | 1623 | &sp_browse_drone, 0, |
1548 | jag | 1624 | }; |
1828 | jag | 1625 | makehier (w); |
1548 | jag | 1626 | } |
1627 | |||
1628 | { |
||
1629 | widget* w[] = { |
||
1674 | jag | 1630 | &ol_add_wand, |
1548 | jag | 1631 | &b_delete_drones, |
1984 | jag | 1632 | &moverailstrafe, |
2011 | jag | 1633 | &b_rotate_drones, |
1548 | jag | 1634 | &b_scale_drones, |
1666 | jag | 1635 | &b_set_xform_center, |
1548 | jag | 1636 | &b_freeze_drones, |
1828 | jag | 1637 | &b_thaw_drones, 0, |
1557 | jag | 1638 | }; |
1828 | jag | 1639 | makehier (w); |
1557 | jag | 1640 | } |
1641 | |||
1642 | { |
||
1643 | widget* w[] = { |
||
1548 | jag | 1644 | &b_mute, |
1645 | &b_unmute, |
||
1557 | jag | 1646 | &drone2noise, |
1647 | &noise2drone, |
||
1828 | jag | 1648 | &gabt, 0, |
1548 | jag | 1649 | }; |
1828 | jag | 1650 | makehier (w); |
1548 | jag | 1651 | } |
1652 | |||
1557 | jag | 1653 | { |
1654 | widget* w[] = { |
||
1655 | &b_launch_drones, |
||
1656 | &b_stop_launching_drones, |
||
1983 | jag | 1657 | &balloon, |
1658 | &chuck, |
||
1557 | jag | 1659 | &b_orbit_selected_drones, |
1660 | &b_track_drones, |
||
1661 | &b_set_targets, |
||
1828 | jag | 1662 | &b_clear_targets, 0, |
1557 | jag | 1663 | }; |
1983 | jag | 1664 | makehier(w); |
1557 | jag | 1665 | } |
1552 | jag | 1666 | |
1674 | jag | 1667 | { |
2106 | jag | 1668 | widget* w[] = {&riset, &fallt, &lifetime, &ddpm, &ddpl, &gens, 0}; |
1828 | jag | 1669 | makehier (w); |
1676 | jag | 1670 | } |
1671 | |||
1677 | jag | 1672 | { |
1851 | jag | 1673 | |
1674 | widget* w[] = {&handlesize, &trailsize, 0}; |
||
1675 | makehier (w); |
||
1676 | } |
||
1677 | |||
1678 | { |
||
1828 | jag | 1679 | widget* w[] = {&mortalize, &reincarnate, &immortalize, 0}; |
1680 | makehier (w); |
||
1677 | jag | 1681 | } |
1682 | |||
1760 | jag | 1683 | { |
1828 | jag | 1684 | widget* w[] = {&chflip, &chtog, &chspeed, &chlen, &chtrail, &chapt, &choutline, &chautoresettrails, 0}; |
1685 | makehier (w); |
||
1760 | jag | 1686 | } |
1687 | |||
2049 | jag | 1688 | { |
1689 | widget* w[] = { |
||
1690 | &l_draw_ball, |
||
1691 | &cb_draw_ball_position, |
||
1692 | &cb_draw_ball_heading, |
||
1693 | &cb_draw_ball_trails, |
||
1694 | |||
1695 | }; |
||
1696 | makehier(w); |
||
1697 | } |
||
1698 | |||
1699 | { |
||
1700 | widget* w[] = { |
||
1701 | &cb_draw_boxes, |
||
1702 | &cb_fill_boxes, |
||
1703 | &texture, |
||
1704 | &text_ure, |
||
1705 | &texstep, |
||
1706 | |||
1707 | }; |
||
1708 | makehier(w); |
||
1709 | } |
||
1710 | { |
||
1711 | widget* w[] = { |
||
1712 | &abm_left, |
||
1713 | &abm_right, |
||
1714 | &abm_up, |
||
1715 | &abm_down, |
||
1716 | &bm_zoom_in, |
||
1717 | &bm_zoom_out, |
||
1718 | |||
1719 | }; |
||
1720 | makehier(w); |
||
1721 | } |
||
1722 | { |
||
1723 | widget* w[] = { |
||
1724 | &cb_draw_notes, |
||
1725 | &cb_label_notes, |
||
1726 | &cb_label_hz_vol, |
||
1727 | |||
1728 | }; |
||
1729 | makehier(w); |
||
1730 | } |
||
1731 | |||
2060 | jag | 1732 | |
1733 | { |
||
1734 | widget* w[] = { |
||
1735 | &am2fm, |
||
1736 | &fm2am, |
||
1737 | &sp_dam_pos, |
||
1738 | &sp_dfm_pos, |
||
1739 | |||
1740 | }; |
||
1741 | makehier(w); |
||
1742 | } |
||
1743 | |||
1557 | jag | 1744 | /* |
1745 | { |
||
1746 | widget* w[] = { |
||
1747 | }; |
||
2049 | jag | 1748 | makehier(w); |
1557 | jag | 1749 | } |
1750 | */ |
||
1751 | |||
1403 | jag | 1752 | #endif |
1753 | |||
1452 | jag | 1754 | sp_range.set ("Range", 1, &ranl); |
1755 | jag | 1755 | sp_range.draw_more = sp_range.variance.ui = 0; |
964 | jag | 1756 | |
1757 | const char* rms [] = {"Width", "BPM", "Height", "BPM"}; |
||
1758 | spinner<float>* srm [] = {&sp_ran_mod_width, &sp_ran_mod_width_bpm, &sp_ran_mod_height, &sp_ran_mod_height_bpm}; |
||
1759 | int srl [] = {-MILLION, 0, -MILLION, 0}; |
||
1760 | int sro[] = {mouse_slider_listener::X, mouse_slider_listener::X, mouse_slider_listener::Y, mouse_slider_listener::Y}; |
||
1452 | jag | 1761 | change_listener<field>* rlis[] = {&rmwl, &rmwbl, &rmhl, &rmhbl}; |
964 | jag | 1762 | for (int i = 0; i < 4; ++i) { |
1763 | spinner<float>* sp = srm[i]; |
||
1452 | jag | 1764 | sp->set (rms[i], 1.0f, srl[i], MILLION, rlis[i]); |
964 | jag | 1765 | sp->orient = sro[i]; |
1766 | } |
||
1767 | |||
1768 | const char* rde [] = {"Default width", "Default height"}; |
||
1769 | spinner<int>* sde [] = {&sp_default_width, &sp_default_height}; |
||
1770 | int msd [] = {mouse_slider_listener::X, mouse_slider_listener::Y}; |
||
1771 | for (int i = 0; i < 2; ++i) { |
||
1772 | spinner<int>& si = *sde[i]; |
||
1452 | jag | 1773 | si.set (rde[i], 1, 0, MILLION, &rdel); |
964 | jag | 1774 | si.orient = msd[i]; |
1755 | jag | 1775 | si.draw_more = si.variance.ui = 0; |
964 | jag | 1776 | } |
1777 | |||
1778 | // drones |
||
1779 | // |
||
1472 | jag | 1780 | sp_change_drone_trail_length.set ("Trail length", 1, &dtl); |
1060 | jag | 1781 | sp_change_drone_trail_length.set_value (0); |
964 | jag | 1782 | |
1472 | jag | 1783 | sp_change_drone_handle_size.set ("Handle size", 1, &dhsl); |
1784 | sp_change_drone_handle_size.set_value (0); |
||
964 | jag | 1785 | |
1472 | jag | 1786 | sp_change_drone_vel.set ("Velocity", 0.1f, -MILLION, +MILLION, &dvl); |
1634 | jag | 1787 | sp_change_drone_accel.set ("Acceleration", 0.01f, -MILLION, +MILLION, &dal); |
2032 | jag | 1788 | sp_change_drone_vel.lim = &vel0; |
1789 | sp_change_drone_accel.lim = &accel0; |
||
964 | jag | 1790 | |
1634 | jag | 1791 | sp_rotate_drone_vel.set ("Rotate velocity", 1.0f, &rdvl); |
2077 | jag | 1792 | rotaccel.set ("Rotate acceleration", 1.0f, &rdvl); |
1793 | sp_rotate_drone_vel.f_value.id = 0; |
||
1794 | rotaccel.f_value.id = 1; |
||
2078 | jag | 1795 | static const int rotdirsize = 12; |
1796 | rdvel.set_size (rotdirsize); |
||
1797 | rdaccel.set_size (rotdirsize); |
||
964 | jag | 1798 | |
1892 | jag | 1799 | sp_drones_per_min.set ("Launches per minute", 1.0f, &dpml); |
1893 | jag | 1800 | dpl.set ("Drones per launch", 1.0f, &dpll); |
1634 | jag | 1801 | sp_drone_lifetime.set ("Lifetime", 0.01f, &dlf); |
964 | jag | 1802 | |
1634 | jag | 1803 | sp_orbit_insertion_time.set ("Orbit insert time", 0.01f, &oil); |
964 | jag | 1804 | |
1472 | jag | 1805 | sp_browse_drone.set ("Browse drone", 1, &brwdl); |
1755 | jag | 1806 | sp_browse_drone.draw_more = sp_browse_drone.variance.ui = 0; |
964 | jag | 1807 | |
1098 | jag | 1808 | ol_create_this.set_listener (this); |
1096 | jag | 1809 | |
1810 | dp_orient.set_listener (this); |
||
1598 | jag | 1811 | dp_numdrones.set ("Number of Drones", 1, 2, MILLION, this); |
1477 | jag | 1812 | dp_bpm1.set ("BPM", 1.0f, 0, MILLION, this); |
1096 | jag | 1813 | |
964 | jag | 1814 | spinner<int>* msh [] = {&sp_mesh_rows, &sp_mesh_cols}; |
1815 | static const char* const mlb [] = {"Rows", "Columns"}; |
||
1816 | for (int i = 0; i < 2; ++i) { |
||
1817 | spinner<int>* sp = msh[i]; |
||
1485 | jag | 1818 | sp->set (mlb[i], 1, 2, MILLION, this, 0); |
1040 | jag | 1819 | sp->set_value (2); |
964 | jag | 1820 | sp->orient = mouse_slider_listener::NONE; |
1755 | jag | 1821 | sp->draw_more = sp->variance.ui = 0; |
964 | jag | 1822 | } |
1472 | jag | 1823 | |
1120 | jag | 1824 | cb_sync_rows_cols.set_text ("Sync"); |
1472 | jag | 1825 | |
1037 | jag | 1826 | l_drone_order.set_text ("Create drones"); |
1827 | ol_drone_order.set_listener (this); |
||
1828 | ol_mesh_point.set_listener (this); |
||
1096 | jag | 1829 | |
1037 | jag | 1830 | f_mesh_xy.set_text ("0 0"); |
1052 | jag | 1831 | f_mesh_xy.change_lsnr = this; |
1037 | jag | 1832 | |
1764 | jag | 1833 | sp_mesh_dur.set (0.1f, 0, MILLION, this); |
1557 | jag | 1834 | sp_mesh_dur.set_value (1.0f); |
1677 | jag | 1835 | sp_mesh_dur.set_text ("In", SECONDS); |
1046 | jag | 1836 | |
964 | jag | 1837 | ol_set_unset_toggle.set_listener (this); |
1838 | |||
1839 | ol_am_style.set_listener (&am_style_lis); // voice am |
||
1840 | ol_fm_style.set_listener (&fm_style_lis); // voice fm |
||
1841 | |||
1842 | l_phrase_position.set_text ("Phrase position "); |
||
1843 | s_phrase_position.set_limits (0.0f, 1.0f); |
||
1646 | jag | 1844 | |
1845 | #ifndef __WIDGET_MOVE__ |
||
1846 | ol_create_this.option.set_listener (&dcl); |
||
1847 | cb_sync_rows_cols.set_listener (&dcl); |
||
964 | jag | 1848 | s_phrase_position.set_listener (this); |
1646 | jag | 1849 | b_key_to_pitch_at_cursor.set_listener (&miscl); |
1850 | #endif |
||
964 | jag | 1851 | |
1400 | jag | 1852 | const char* lrs [] = {"Adjust Height?", "Adjust?", "Modulation?", "Change Note"}; |
1397 | jag | 1853 | label* lrm [] = {&l_adjust_height, &l_adjust_range, &l_ran_mod, &ol_change_note.option}; |
1235 | jag | 1854 | for (int i = 0; i < 4; ++i) lrm[i]->set_text (lrs[i]); |
964 | jag | 1855 | |
1856 | ol_set_range.set_listener (&sral); |
||
1857 | |||
1858 | const char* snp [] = {"Snap left", "Snap right"}; |
||
1859 | spinner<float>* snsp [] = {&sp_snap_left, &sp_snap_right}; |
||
1804 | jag | 1860 | float snv [] = {din0.dinfo.snap.left, din0.dinfo.snap.right}; |
964 | jag | 1861 | for (int i = 0; i < 2; ++i) { |
1862 | spinner<float>* si = snsp[i]; |
||
1472 | jag | 1863 | si->set (snp[i], 0.01f, &sdl); |
964 | jag | 1864 | si->draw_more = 0; |
1755 | jag | 1865 | si->variance.ui = 0; |
1804 | jag | 1866 | si->set_value (snv[i]); |
1867 | si->orient = mouse_slider_listener::X; |
||
964 | jag | 1868 | } |
1869 | |||
1512 | jag | 1870 | l_drone_arrow.set_text ("Drone Arrow"); |
1776 | jag | 1871 | dronearrowdefaults.lbl.set_text ("Drone Arrow"); |
1836 | jag | 1872 | spinner<float>* das [] = {&dronearrow.shoulder.position, &dronearrow.neck, &dronearrow.shoulder.width}; |
1873 | spinner2<float>* das2 [] = {&dronearrowdefaults.shoulder.position, &dronearrowdefaults.neck, &dronearrowdefaults.shoulder.width}; |
||
1874 | const char* dasl [] = {"Shoulder Position", "Neck", "Shoulder Width"}; |
||
1875 | float vals [] = {drone::arrowt::U, drone::arrowt::K, drone::arrowt::V}; |
||
1766 | jag | 1876 | for (int i = 0; i < 3; ++i) { |
964 | jag | 1877 | spinner<float>& si = *das[i]; |
1776 | jag | 1878 | spinner2<float>& si2 = *das2[i]; |
1768 | jag | 1879 | si.set (dasl[i], 0.1f, -MILLION, MILLION, &arrowl); |
1778 | jag | 1880 | si2.set (dasl[i], 0.1f, -MILLION, MILLION, &defarrowl, 0); |
1776 | jag | 1881 | si2.set_value (vals[i]); |
1779 | jag | 1882 | si2.orient = mouse_slider_listener::NONE; |
964 | jag | 1883 | } |
1836 | jag | 1884 | for (int i = 0; i < 2; ++i) { |
1885 | spinner<float>& si = *das[i]; |
||
1886 | spinner2<float>& si2 = *das2[i]; |
||
1887 | si.updowndecinc (); |
||
1888 | si2.updowndecinc (); |
||
1889 | } |
||
1778 | jag | 1890 | dronearrowdefaults.cap.set_listener (&defarrowl); |
1891 | dronearrowdefaults.arrow.calc (); |
||
964 | jag | 1892 | |
1120 | jag | 1893 | cb_scope.set_text ("Show oscilloscope"); |
964 | jag | 1894 | cb_scope.set_listener (&scol); |
1472 | jag | 1895 | sp_scope_height.set ("Height", 1, 0, MILLION, &scol); |
1924 | jag | 1896 | sp_scope_samples.set ("Samples", 1, 1, MILLION, &scol); |
1921 | jag | 1897 | scopacity.set ("Opacity", 0.01f, 0.0f, 1.0f, &scol); |
964 | jag | 1898 | |
1899 | l_tap_bpm.set_text ("Tap BPM"); |
||
1900 | checkbutton* cb_tars [] = {&cb_am, &cb_fm, &cb_gater, &cb_octave_shift, &cb_auto_reset}; |
||
2157 | jag | 1901 | static const char* const cb_text [] = {"AM", "FM", "Beater", "Octave Shift", "Auto reset"}; |
964 | jag | 1902 | |
1903 | cb_auto_reset.turn_on (); |
||
1904 | for (int i = 0; i < 5; ++i) { |
||
1905 | checkbutton* cbi = cb_tars[i]; |
||
1472 | jag | 1906 | cbi->set (cb_text[i], &tbl); |
964 | jag | 1907 | l_tap_bpm.add_child (cbi); |
1908 | } |
||
1647 | jag | 1909 | td_tap_display.set_listener (&tbl); |
1472 | jag | 1910 | |
964 | jag | 1911 | l_tap_bpm.add_child (&td_tap_display); |
1912 | l_tap_bpm.add_child (&l_tap_bpm_value); |
||
1913 | |||
1914 | const char* bpmstr [] = {"os", "fm", "am", "gr"}; |
||
1915 | spinner<float>* bpmspn [] = {&sp_octave_shift_bpm, &sp_fm_bpm, &sp_am_bpm, &sp_gater_bpm}; |
||
1916 | for (int i = 0; i < 4; ++i) bpm_map[bpmstr[i]] = bpmspn[i]; |
||
1917 | |||
1918 | // editor tools |
||
1919 | arrow_button* enav[] = {&abe_left, &abe_down, &abe_right, &abe_up}; |
||
1920 | int edirs [] = {arrow_button::left, arrow_button::down, arrow_button::right, arrow_button::up}; |
||
1921 | for (int i = 0; i < 4; ++i) { |
||
1922 | arrow_button* ab = enav[i]; |
||
1015 | jag | 1923 | ab->set_dir (edirs[i]); |
964 | jag | 1924 | } |
1925 | |||
1926 | l_snap.set_text ("Snap?"); |
||
1927 | l_library.set_text ("Library"); |
||
1928 | lf_curve_name.set_label ("Curve name"); |
||
1507 | jag | 1929 | lf_curve_name.fld.expr = 0; |
1117 | jag | 1930 | l_capture.set_text ("Mouse capture"); |
1647 | jag | 1931 | |
964 | jag | 1932 | ol_mirror_tangents.set_listener (this); |
1933 | ol_curve_style.set_listener (this); |
||
1934 | |||
1472 | jag | 1935 | sp_curve_rpm.set ("RPM", 1.0f, 0.0f, MILLION, &col); |
1936 | sp_curve_rpm.set_value (0.0f); |
||
2103 | jag | 1937 | |
1950 | jag | 1938 | sp_curve_every.set (1.0f, 0, MILLION, &col); |
1959 | jag | 1939 | sp_curve_every.set_listener (&col, 2); // variance |
1950 | jag | 1940 | sp_curve_every.set_text ("Every", DEGREES); |
1117 | jag | 1941 | |
1647 | jag | 1942 | #ifndef __WIDGET_MOVE__ |
964 | jag | 1943 | cb_show_waveform_samples.set_listener (&col); |
1647 | jag | 1944 | #endif |
1472 | jag | 1945 | |
2039 | jag | 1946 | crvwav.hz.set ("Hz", 1.0f, 0.01f, MILLION, &col); |
1947 | crvwav.periods.set ("Cycles", 1, 1, MILLION, &col); |
||
1948 | crvwav.time.set ("Time", 1.0f, 1, MILLION, &col); |
||
1949 | crvwav.hz.orient = crvwav.periods.orient = crvwav.time.orient = mouse_slider_listener::NONE; |
||
1472 | jag | 1950 | |
1951 | sp_curve_limit.set ("Curve roughness", 0.001f, 0.001f, MILLION, &col); |
||
964 | jag | 1952 | |
1953 | // button labels |
||
1954 | const char* labels [] = { |
||
1955 | "Menu", |
||
1956 | "Microtonal Keyboard", |
||
1368 | jag | 1957 | "Keyboard Keyboard", |
964 | jag | 1958 | "Mondrian", |
1959 | "Binaural Drones", |
||
1960 | "Waveform", |
||
1961 | "Drone Waveform", |
||
1962 | "Drone Modulation", |
||
1963 | "Voice Modulation", |
||
2157 | jag | 1964 | "Beater", |
964 | jag | 1965 | "Waveform", |
1966 | "Attack", |
||
1967 | "Decay", |
||
1968 | "MIDI Velocity", |
||
1969 | "Delays", |
||
1970 | "Octave Shift", |
||
1971 | "Compressor", |
||
1972 | "Morse Code", |
||
1973 | "Exit DIN Is Noise", |
||
1974 | "Show anchors", |
||
1984 | jag | 1975 | " Move", |
964 | jag | 1976 | "Delete", |
1977 | "Select all", |
||
1978 | "Invert selected", |
||
1979 | "Record a phrase", |
||
1980 | "Clear phrase", |
||
1981 | "Default to Selected", |
||
1982 | "Default to all", |
||
1403 | jag | 1983 | "Selected to all", |
964 | jag | 1984 | "Set key to pitch at cursor", |
1985 | "Insert vertex", |
||
1986 | "Delete vertex", |
||
1987 | "Fold tangents", |
||
1988 | "Undo", |
||
1989 | "Redo", |
||
1990 | "Copy", |
||
2340 | jag | 1991 | " Paste", |
964 | jag | 1992 | "Draw & replace curve", |
1993 | "Add", |
||
1994 | "Replace", |
||
1995 | "Delete", |
||
1996 | "Start", |
||
1997 | "Assign", |
||
1998 | "Label vertices", |
||
2214 | jag | 1999 | "Selection only", |
964 | jag | 2000 | "Show waveform", |
2001 | "Pick curve", |
||
2002 | "Stop", |
||
2126 | jag | 2003 | "Draw curve", |
964 | jag | 2004 | "Clear", |
2005 | "Record", |
||
2006 | "Select attractees", |
||
2007 | "Select attractors", |
||
2008 | "Orbit", |
||
2009 | "Show velocity", |
||
2010 | "Show acceleration", |
||
1888 | jag | 2011 | "Show gravity", |
1827 | jag | 2012 | "Balloon", |
964 | jag | 2013 | "Launch", |
2014 | "Stop launch", |
||
2015 | "Track", |
||
2016 | "Select tracked", |
||
2017 | "Waveform", |
||
2018 | "Attack", |
||
2019 | "Decay", |
||
2020 | "Add ", |
||
2021 | "Move balls", |
||
2022 | "Delete selected balls", |
||
2023 | "Delete all balls", |
||
2024 | "Select all balls", |
||
2025 | "Invert ball selection", |
||
2026 | "Select balls in box", |
||
2027 | "Split box horizontally", |
||
2028 | "Split box vertically", |
||
2029 | "Delete box", |
||
2030 | "Freeze balls", |
||
2031 | "Thaw balls", |
||
2032 | "Turn Off UI", |
||
2033 | "Set targets", |
||
2034 | "Clear targets", |
||
2035 | "Clear modulations", |
||
2036 | "Modulate balls up", |
||
2037 | "Modulate balls down", |
||
2038 | "Create binaural drones on the notes of the scale", |
||
2039 | "Create binaural drones using parameters above", |
||
2040 | "Waveform", |
||
2041 | "Close octave", |
||
2042 | "Auto-change ball direction clockwise", |
||
2043 | "Auto-change ball direction anti-clockwise", |
||
2044 | "Stop auto-changing ball direction", |
||
2045 | "Flip ball direction", |
||
2046 | "Randomize box color", |
||
2047 | "Resize separation", |
||
2048 | "Add / Remove slits", |
||
2049 | "Toggle wreckers", |
||
2050 | "Toggle healers", |
||
2051 | "Toggle bouncers", |
||
2052 | "Healers <> Wreckers", |
||
2053 | "Select wreckers", |
||
2054 | "Select healers", |
||
2055 | "Remove slits on edge", |
||
2056 | "Toggle slit animation", |
||
2057 | "Auto adjust voices", |
||
2058 | "Draw boxes", |
||
2059 | "Fill boxes", |
||
2060 | "Draw notes", |
||
2061 | "Label notes", |
||
2062 | "Position", |
||
2063 | "Make note grid", |
||
2064 | "Make N x N grid", |
||
2065 | "Delete all boxes", |
||
2066 | "Select launchers", |
||
1812 | jag | 2067 | "Select on Creation", |
964 | jag | 2068 | "Freeze", |
2069 | "Thaw", |
||
2070 | "Mark segments", |
||
2071 | "Auto split box", |
||
2072 | "Auto delete box", |
||
2073 | "Speed", |
||
2074 | "Turn", |
||
2075 | "Teleport", |
||
2076 | "Heading", |
||
2077 | "Trails", |
||
2078 | "Draw ball:", |
||
2079 | "Sync", |
||
2080 | "Sync", |
||
2081 | "Clone", |
||
2082 | "Clone can clone too", |
||
2083 | "Transform", |
||
2084 | "Label pitch and volume", |
||
2085 | "All", |
||
2086 | "None", |
||
2087 | "Invert", |
||
2088 | "Delete", |
||
2089 | "Sync", |
||
2090 | "Modulate", |
||
2091 | "Select", |
||
2092 | "Flip", |
||
2093 | "All", |
||
2094 | "Left", |
||
2095 | "Right", |
||
2096 | "Both", |
||
2097 | "Modulate", |
||
2098 | "Mark", |
||
2099 | "Pause/Resume", |
||
2100 | "Start", |
||
2101 | "Stop", |
||
2102 | "Toggle", |
||
1629 | jag | 2103 | "Get", |
964 | jag | 2104 | "Range modulation", |
2105 | "Selected", |
||
1235 | jag | 2106 | "Left", |
2107 | "Right", |
||
964 | jag | 2108 | "Set", |
2109 | "Unset", |
||
1026 | jag | 2110 | "Toggle", |
1049 | jag | 2111 | "Range Width & Height", |
1071 | jag | 2112 | "Flip", |
1551 | jag | 2113 | "Overlay Instrument/Editor", |
1104 | jag | 2114 | "Range Pitch & Volume", |
1128 | jag | 2115 | "Swap", |
1137 | jag | 2116 | "Overlay pitch distribution", |
1188 | jag | 2117 | "Overlay volume distributon", |
2118 | "Point Modulation", |
||
1320 | jag | 2119 | "Both", |
2120 | "AM BPM", |
||
2121 | "FM BPM", |
||
2122 | "Set to Rows", |
||
1323 | jag | 2123 | "Set to Columns", |
1423 | jag | 2124 | "Noise Interpolator", |
2125 | "Ball triggers note <> Ball triggers noise", |
||
1467 | jag | 2126 | "Scale", |
2127 | "Rotate", |
||
2128 | "Draw mesh outline", |
||
1465 | jag | 2129 | "Modulation", |
2130 | "Motion", |
||
2131 | "Visual", |
||
1467 | jag | 2132 | "Connect", |
1469 | jag | 2133 | "Disconnect", |
2134 | "Wrap", |
||
1475 | jag | 2135 | "Drone Pendulum", |
1481 | jag | 2136 | "Abort", |
1499 | jag | 2137 | "Close", |
1547 | jag | 2138 | "Reset", |
2139 | "Mute", |
||
1557 | jag | 2140 | "Unmute", |
2141 | "Drone > Noise", |
||
2142 | "Noise > Drone", |
||
1677 | jag | 2143 | "Find center", |
1675 | jag | 2144 | "Defaults", |
1677 | jag | 2145 | "Mortalize", |
2146 | "Reincarnate", |
||
2147 | "Immortalize", |
||
1695 | jag | 2148 | "Chuck", |
2149 | "Chuck", |
||
2150 | "Flip", |
||
1697 | jag | 2151 | "Toggle", |
1748 | jag | 2152 | "Draw chuck outline", |
2153 | "Auto reset trails", |
||
1768 | jag | 2154 | "Cap", |
1776 | jag | 2155 | "Decap", |
2156 | "Cap", |
||
1797 | jag | 2157 | "Track", |
1805 | jag | 2158 | "Auto rotate", |
2159 | "Auto flip", |
||
1809 | jag | 2160 | "-ve", |
1818 | jag | 2161 | "Randomize", |
2162 | "0", |
||
2163 | "0", |
||
1836 | jag | 2164 | "Sync", |
1871 | jag | 2165 | "Reset every tick", |
2166 | "Reset every tick", |
||
1883 | jag | 2167 | "Drone velocity modulation", |
1950 | jag | 2168 | "X", |
2169 | "Y", |
||
2170 | "Both", |
||
2171 | "None", |
||
1948 | jag | 2172 | "Set AM BPM to FM BPM", |
2173 | "Set FM BPM to AM BPM", |
||
2174 | "Flip", |
||
1950 | jag | 2175 | "Autoflip", |
2176 | "Reset", |
||
1970 | jag | 2177 | "Auto pause", |
1998 | jag | 2178 | "0", |
2038 | jag | 2179 | "0", |
2180 | "0", |
||
2049 | jag | 2181 | "Texture", |
2124 | jag | 2182 | "Size tangent", |
2126 | jag | 2183 | "Draw vertices & tangents", |
2206 | jag | 2184 | "Track", |
2212 | jag | 2185 | "View too", |
2219 | jag | 2186 | "Draw", |
2187 | "Draw cursor", |
||
2188 | "Pin / Unpin", |
||
2276 | jag | 2189 | "0", |
1695 | jag | 2190 | // next label |
964 | jag | 2191 | }; |
2192 | |||
2193 | button* buttons [] = { |
||
2194 | &b_menu, |
||
2195 | &b_microtonal_keyboard, |
||
2196 | &b_keyboard_keyboard, |
||
2197 | &b_mondrian, |
||
2198 | &b_binaural_drones, |
||
2199 | &b_microtonal_keyboard_waveform, |
||
2200 | &b_drone_waveform, |
||
2201 | &b_drone_modulation, |
||
2202 | &b_voice_modulation, |
||
2203 | &b_gater, |
||
2204 | &b_keyboard_keyboard_waveform, |
||
2205 | &b_attack, |
||
2206 | &b_decay, |
||
2207 | &b_midi_velocity, |
||
2208 | &b_delays, |
||
2209 | &b_octave_shift, |
||
2210 | &b_compressor, |
||
2211 | &b_morse_code, |
||
2212 | &b_exit_din, |
||
2213 | &cb_show_anchors, |
||
1984 | jag | 2214 | &moverailstrafe.option, |
964 | jag | 2215 | &b_delete_drones, |
2216 | &b_select_all_drones, |
||
2217 | &b_invert_drone_selection, |
||
2218 | &b_record_phrase, |
||
2219 | &b_clear_phrases, |
||
1403 | jag | 2220 | &b_default_to_selected, |
2221 | &b_default_to_all, |
||
964 | jag | 2222 | &b_selected_to_all, |
2223 | &b_key_to_pitch_at_cursor, |
||
2224 | &b_insert_vertex, |
||
2225 | &b_delete_vertex, |
||
2226 | &b_fold_tangents, |
||
2227 | &b_undo, |
||
2228 | &b_redo, |
||
2229 | &b_copy, |
||
2340 | jag | 2230 | &ol_paste.option, |
964 | jag | 2231 | &b_draw_replacement_curve, |
2232 | &b_add_curve, |
||
2233 | &b_replace_curve, |
||
2234 | &b_delete_curve, |
||
2235 | &b_start_capture, |
||
2236 | &b_assign_capture, |
||
2237 | &cb_label_vertices, |
||
1128 | jag | 2238 | &cb_selection_only, |
964 | jag | 2239 | &cb_show_waveform_samples, |
2240 | &b_pick_curve, |
||
2241 | &b_stop_rotating, |
||
2242 | &cb_draw_curve, |
||
2243 | &b_clear_record, |
||
2244 | &cb_record, |
||
2245 | &b_select_attractees, |
||
2246 | &b_select_attractors, |
||
2247 | &b_orbit_selected_drones, |
||
2248 | &cb_show_vel, |
||
2249 | &cb_show_accel, |
||
2250 | &cb_show_gravity, |
||
1827 | jag | 2251 | &balloon, |
964 | jag | 2252 | &b_launch_drones, |
2253 | &b_stop_launching_drones, |
||
2254 | &b_track_drones, |
||
2255 | &b_select_tracked_drones, |
||
2256 | &b_mondrian_waveform, |
||
2257 | &b_mondrian_attack, |
||
2258 | &b_mondrian_decay, |
||
2259 | &b_add_balls, |
||
2260 | &b_move_selected_balls, |
||
2261 | &b_delete_selected_targets, |
||
2262 | &b_delete_all_targets, |
||
2263 | &b_select_all_targets, |
||
2264 | &b_invert_selected_targets, |
||
2265 | &b_select_targets_in_box, |
||
2266 | &b_split_horizontal, |
||
2267 | &b_split_vertical, |
||
2268 | &b_delete_box, |
||
2269 | &b_freeze_balls, |
||
2270 | &b_thaw_balls, |
||
2271 | &b_turn_off_ui, |
||
2272 | &b_set_targets, |
||
2273 | &b_clear_targets, |
||
2274 | &b_clear_modulations, |
||
2275 | &b_modulate_balls_up, |
||
2276 | &b_modulate_balls_down, |
||
2277 | &b_create_binaurals_on_notes, |
||
2278 | &b_create_binaurals_from_pitch, |
||
2279 | &b_binaural_drones_waveform, |
||
2280 | &cb_close_octave, |
||
2281 | &b_auto_change_direction_clockwise, |
||
2282 | &b_auto_change_direction_anti_clockwise, |
||
2283 | &b_stop_auto_changing_direction, |
||
2284 | &b_flip_direction, |
||
2285 | &b_make_random_color, |
||
2286 | &cb_resize_separation, |
||
2287 | &b_add_remove_slits, |
||
2288 | &b_toggle_wreckers, |
||
2289 | &b_toggle_healers, |
||
2290 | &b_toggle_bouncers, |
||
2291 | &b_switch_ball_type, |
||
2292 | &b_select_wreckers, |
||
2293 | &b_select_healers, |
||
2294 | &b_remove_slits_on_edge, |
||
2295 | &b_toggle_slit_anim, |
||
2296 | &cb_mondrian_auto_adjust_voices, |
||
2297 | &cb_draw_boxes, |
||
2298 | &cb_fill_boxes, |
||
2299 | &cb_draw_notes, |
||
2300 | &cb_label_notes, |
||
2301 | &cb_draw_ball_position, |
||
2302 | &b_make_note_grid, |
||
2303 | &b_make_nxn_grid, |
||
2304 | &b_delete_all_boxes, |
||
2305 | &b_select_launchers, |
||
1812 | jag | 2306 | &seloncre, |
964 | jag | 2307 | &b_freeze_drones, |
2308 | &b_thaw_drones, |
||
2309 | &cb_mark_segments, |
||
2310 | &cb_auto_split_box, |
||
2311 | &cb_auto_delete_box, |
||
2312 | &cb_speed, |
||
2313 | &cb_turn, |
||
2314 | &cb_teleport, |
||
2315 | &cb_draw_ball_heading, |
||
2316 | &cb_draw_ball_trails, |
||
2317 | &l_draw_ball, |
||
2318 | &cb_turn_sync, |
||
2319 | &cb_speed_sync, |
||
2320 | &cb_clone, |
||
2321 | &cb_clone_can_clone, |
||
2322 | &cb_transform, |
||
2323 | &cb_label_hz_vol, |
||
2324 | &bbd_select_all, |
||
2325 | &bbd_select_none, |
||
2326 | &bbd_invert_select, |
||
2327 | &bbd_delete, |
||
2328 | &bbd_sync, |
||
2329 | &bbd_modulate, |
||
2330 | &bbd_select2, |
||
2331 | &bbd_flip, |
||
2332 | &b_adjust_board_height, |
||
2333 | &b_adjust_range_left, |
||
2334 | &b_adjust_range_right, |
||
2335 | &b_adjust_range_both, |
||
2336 | &cb_mod_ran, |
||
2337 | &cb_mark_ran, |
||
2338 | &b_rm_pause_resume, |
||
2339 | &b_rm_start_all, |
||
2340 | &b_rm_stop_all, |
||
2341 | &b_rm_toggle, |
||
2342 | &b_get_cur_ran, |
||
2343 | &b_range_modulation, |
||
2344 | &b_adjust_range_height, |
||
2345 | &b_change_note_left, |
||
2346 | &b_change_note_right, |
||
2347 | &b_set, |
||
2348 | &b_unset, |
||
1026 | jag | 2349 | &b_toggle, |
1049 | jag | 2350 | &b_range_width_height, |
1071 | jag | 2351 | &b_flip_rows_cols, |
1551 | jag | 2352 | &cb_overlay, |
1104 | jag | 2353 | &b_range_pitch_vol, |
1128 | jag | 2354 | &b_swap_curves, |
1137 | jag | 2355 | &cb_pitch_dis, |
1140 | jag | 2356 | &cb_vol_dis, |
1235 | jag | 2357 | &b_point_modulation, |
1320 | jag | 2358 | &b_change_note_both, |
2359 | &cb_am_bpm, |
||
2360 | &cb_fm_bpm, |
||
2361 | &b_set_to_mesh_rows, |
||
1323 | jag | 2362 | &b_set_to_mesh_cols, |
1423 | jag | 2363 | &b_noise_interpolator, |
2364 | &b_ball_trig, |
||
1429 | jag | 2365 | &b_scale_drones, |
1430 | jag | 2366 | &b_rotate_drones, |
1438 | jag | 2367 | &cb_draw_mesh, |
1465 | jag | 2368 | &cb_modulation, |
2369 | &cb_motion, |
||
1467 | jag | 2370 | &cb_visual, |
2371 | &b_connect, |
||
1469 | jag | 2372 | &b_disconnect, |
2373 | &cb_conn_wrap, |
||
1475 | jag | 2374 | &b_drone_pend, |
1485 | jag | 2375 | &b_abort_octave_shift, |
2376 | &b_close, |
||
1514 | jag | 2377 | &b_arrow_reset, |
1547 | jag | 2378 | &b_mute, |
1557 | jag | 2379 | &b_unmute, |
2380 | &drone2noise, |
||
2381 | &noise2drone, |
||
1666 | jag | 2382 | &b_set_xform_center, |
1675 | jag | 2383 | &cb_defaults, |
1677 | jag | 2384 | &mortalize, |
2385 | &reincarnate, |
||
2386 | &immortalize, |
||
1695 | jag | 2387 | &cb_chuck, |
2388 | &chuck, |
||
2389 | &chflip, |
||
1697 | jag | 2390 | &chtog, |
1748 | jag | 2391 | &choutline, |
2392 | &chautoresettrails, |
||
1768 | jag | 2393 | &dronearrow.cap, |
2394 | &dronearrow.decap, |
||
1776 | jag | 2395 | &dronearrowdefaults.cap, |
1797 | jag | 2396 | &trackcon, |
1806 | jag | 2397 | &dva.autorotate.cb, |
2398 | &dva.autoflip.cb, |
||
1809 | jag | 2399 | &dva.neg, |
2400 | &dva.randomize, |
||
2032 | jag | 2401 | &vel0, |
2402 | &accel0, |
||
1836 | jag | 2403 | &dva.sync, |
1871 | jag | 2404 | &dva.autorotate.uet.deg, |
2405 | &dva.autorotate.uet.tps, |
||
1883 | jag | 2406 | &edlife2vel, |
1950 | jag | 2407 | &b_snapx, |
2408 | &b_snapy, |
||
2409 | &b_snapboth, |
||
2410 | &b_snapnone, |
||
1948 | jag | 2411 | &am2fm, |
2412 | &fm2am, |
||
1950 | jag | 2413 | &ed_flip_rotation, |
2414 | &cb_ed_autoflip, |
||
2415 | &ed_autoflip_reset, |
||
1970 | jag | 2416 | &dva.autopause.cb, |
1998 | jag | 2417 | &damd0, |
2418 | &dfmd0, |
||
2038 | jag | 2419 | &masvol0, |
2049 | jag | 2420 | &texture, |
2125 | jag | 2421 | &size_tangent, |
2126 | jag | 2422 | &draweditables, |
2206 | jag | 2423 | &track_phrase_position, |
2222 | jag | 2424 | &viewtoo, |
2425 | &drawsnaps, |
||
2426 | &drawcursor, |
||
2219 | jag | 2427 | &pinunpin, |
2276 | jag | 2428 | &sep0 |
1677 | jag | 2429 | // next button |
2430 | }; |
||
964 | jag | 2431 | |
1970 | jag | 2432 | dlog << "+++ Labeling buttons +++" << endl; |
2433 | |||
2276 | jag | 2434 | for (int i = 0; i < 235; ++i) { |
964 | jag | 2435 | button* bi = buttons[i]; |
1120 | jag | 2436 | bi->set_text (labels[i]); |
964 | jag | 2437 | } |
2438 | |||
1568 | jag | 2439 | dlog << "+++ Labeled buttons +++" << endl; |
2440 | |||
1913 | jag | 2441 | am2fm.id = modulator::AM; |
2442 | fm2am.id = modulator::FM; |
||
2443 | LISTEN(am2fm, &am2fm2aml) |
||
2444 | LISTEN(fm2am, &am2fm2aml) |
||
2445 | |||
1465 | jag | 2446 | LISTEN(cb_modulation,&cmod) |
2447 | LISTEN(cb_motion,&cmot) |
||
2448 | LISTEN(cb_visual,&cvis) |
||
1675 | jag | 2449 | LISTEN(cb_defaults,&cdef) |
1695 | jag | 2450 | LISTEN(cb_chuck,&cch) |
1768 | jag | 2451 | LISTEN(dronearrow.cap,&arrowl) |
2452 | LISTEN(dronearrow.decap,&arrowl) |
||
1647 | jag | 2453 | |
1768 | jag | 2454 | |
1647 | jag | 2455 | #ifndef __WIDGET_MOVE__ |
2456 | LISTEN (b_arrow_reset,&awl) |
||
2457 | #endif |
||
1465 | jag | 2458 | |
964 | jag | 2459 | ol_select_what.set_text ("L"); |
2460 | ol_select_rule.set_text (" >= "); |
||
2461 | bdf_value.change_lsnr = &bdl; |
||
2462 | bdf_value.set_text (bdl.val[binaural_drones_listener::GREATER_THAN_EQUAL]); |
||
2463 | |||
1855 | jag | 2464 | sp_bounces.set ("Bounces", 1, -1, MILLION, &bol); |
964 | jag | 2465 | ol_bounce_style.set_listener (this); |
2466 | |||
2273 | jag | 2467 | sep_bin.set ("Binaural Separation (Hz)", 0.01f, -MILLION, MILLION, &sepbinl); |
2272 | jag | 2468 | |
1865 | jag | 2469 | sp_rebound.set ("Rebound Speed %", 1, 0, MILLION, &rebl); |
964 | jag | 2470 | |
1647 | jag | 2471 | sp_mondrian_min_voices.set ("Min Voices", 1, 1, MILLION, &monl); |
964 | jag | 2472 | sp_mondrian_min_voices.draw_more = 0; |
1755 | jag | 2473 | sp_mondrian_min_voices.variance.ui = 0; |
1647 | jag | 2474 | |
964 | jag | 2475 | cb_mondrian_auto_adjust_voices.set_listener (&monl); |
1647 | jag | 2476 | |
2477 | sp_mondrian_change_attack_time.set ("Ball attack time", 0.01f, &batl); |
||
2478 | sp_mondrian_change_decay_time.set ("Ball decay time", 0.01f, &bdtl); |
||
2479 | |||
1120 | jag | 2480 | sp_mondrian_change_speed.set_text ("Ball speed"); |
964 | jag | 2481 | sp_mondrian_change_speed.set_listener (&bsl); |
2482 | sp_mondrian_change_speed.set_listener (&monl, 1); |
||
1647 | jag | 2483 | |
2484 | sp_mondrian_change_dir.set ("Ball direction", 1, &brl); |
||
964 | jag | 2485 | sp_mondrian_change_dir.orient = mouse_slider_listener::X; |
1063 | jag | 2486 | sp_mondrian_change_dir.draw_more = 0; |
1755 | jag | 2487 | sp_mondrian_change_dir.variance.ui = 0; |
1551 | jag | 2488 | |
1647 | jag | 2489 | sp_mondrian_change_trail_size.set ("Ball trail length", 1, &tll); |
2490 | sp_mondrian_change_note_poly_points.set ("Note polygon points", 1, 2, MILLION, &nppl); |
||
2491 | sp_mondrian_change_note_poly_radius.set ("Note polygon radius", 1, 0, MILLION, &nprl); |
||
2492 | |||
2493 | sp_mondrian_change_slit_size.set ("Slit size", 1.0f, &ssl); |
||
2494 | |||
2495 | sp_mondrian_change_slit_anim_time.set ("Slit open/close time", 0.01f, &satl); |
||
2496 | sp_mondrian_change_slit_anim_time.set_value (0.0f); |
||
2497 | |||
1551 | jag | 2498 | sp_mondrian_change_vol.set ("Ball volume", 0.01f, -MILLION, MILLION, &bvl); |
964 | jag | 2499 | sp_mondrian_change_vol.set_value (0); |
1551 | jag | 2500 | |
2501 | sp_mondrian_num_boxes.set ("N", 1, 0, MILLION, &monl); |
||
964 | jag | 2502 | sp_mondrian_num_boxes.draw_more = 0; |
1755 | jag | 2503 | sp_mondrian_num_boxes.variance.ui = 0; |
964 | jag | 2504 | |
1647 | jag | 2505 | sp_auto_split_time.set ("", 0.1f, 0.01f, MILLION, &monl); |
1677 | jag | 2506 | sp_auto_split_time.set_text ("Every", SECONDS); |
964 | jag | 2507 | |
1647 | jag | 2508 | sp_auto_delete_time.set ("", 0.1f, 0.01f, MILLION, &monl); |
1677 | jag | 2509 | sp_auto_delete_time.set_text ("Every", SECONDS); |
964 | jag | 2510 | |
1647 | jag | 2511 | sp_min_split_size.set ("Min split size", 1, 2, MILLION, &monl); |
2049 | jag | 2512 | |
2513 | texstep.set ("Step", 1, 1, 1023, &stepl, 0); |
||
2514 | text_ure.set_text ("din is noise"); |
||
2515 | text_ure.typing_lsnr = &mondrian0; |
||
2516 | |||
964 | jag | 2517 | |
1647 | jag | 2518 | #ifndef __WIDGET_MOVE__ |
964 | jag | 2519 | cb_auto_split_box.set_listener (&monl); |
2520 | cb_auto_delete_box.set_listener (&monl); |
||
1647 | jag | 2521 | #endif |
964 | jag | 2522 | |
2523 | options_list* olt [] = {&ol_bouncer, &ol_wrecker, &ol_healer}; |
||
2524 | for (int i = 0; i < 3; ++i) olt[i]->set_listener (&bolis); |
||
2525 | |||
1015 | jag | 2526 | button* pb[] = {&sp_mondrian_change_dir.inc, &sp_mondrian_change_dir.dec}; |
964 | jag | 2527 | set_repeat (pb, 2, 0.005); |
2528 | |||
2529 | recl.typing (lf_file.fld); |
||
1647 | jag | 2530 | |
1686 | jag | 2531 | { |
2532 | |||
2533 | nullt* sp [] = { |
||
2534 | &sp_change_drone_handle_size, |
||
2535 | &sp_change_drone_trail_length, |
||
1772 | jag | 2536 | &autorotate.rpm, |
1776 | jag | 2537 | &autorotate.deg, |
2538 | &autorotate.tps, |
||
1686 | jag | 2539 | &sp_mondrian_change_vol, |
2540 | &sp_mondrian_change_attack_time, |
||
2541 | &sp_mondrian_change_decay_time, |
||
2542 | &sp_mondrian_change_speed, |
||
2543 | &sp_mondrian_change_slit_size, |
||
2544 | &sp_mondrian_change_slit_anim_time, |
||
2545 | &sp_change_drone_vel, |
||
2546 | &sp_change_drone_accel, |
||
2547 | &sp_dam_depth, |
||
2548 | &sp_dfm_depth, |
||
2549 | &sp_dam_bpm, |
||
2550 | &sp_dfm_bpm, |
||
1689 | jag | 2551 | &sp_drone_vol, |
1768 | jag | 2552 | &dronearrow.shoulder.position, |
2553 | &dronearrow.shoulder.width, |
||
1689 | jag | 2554 | &sp_rotate_drone_vel, |
2555 | &sp_drones_per_min, |
||
2556 | &sp_drone_lifetime, |
||
2557 | &sp_orbit_insertion_time, |
||
2558 | &sp_mondrian_change_attack_time, |
||
2559 | &sp_mondrian_change_decay_time, |
||
2560 | &sp_mondrian_change_speed, |
||
2561 | &sp_mondrian_change_dir, |
||
2562 | &sp_mondrian_change_trail_size, |
||
2563 | &sp_mondrian_change_vol, |
||
2564 | &sp_mondrian_change_slit_size, |
||
2565 | &sp_mondrian_change_slit_anim_time, |
||
1695 | jag | 2566 | &chspeed, |
2567 | &chlen, |
||
1705 | jag | 2568 | &chtrail, |
1772 | jag | 2569 | &autorotate.autoflip.angle, |
1804 | jag | 2570 | &dronearrow.neck, |
1776 | jag | 2571 | &dronearrow.shoulder.width, |
2572 | &dronearrow.shoulder.position, |
||
1894 | jag | 2573 | &dpl, |
1686 | jag | 2574 | |
2575 | }; |
||
2576 | |||
2577 | int i = 0; |
||
2578 | while (sp[i] != 0) sp[i++]->null = 1; |
||
2579 | |||
2580 | } |
||
2581 | |||
2582 | |||
2583 | |||
964 | jag | 2584 | } |
2585 | |||
2586 | void menu::update () { |
||
2587 | position_menu_items (); |
||
2588 | position_tabs (); |
||
2589 | } |
||
2590 | |||
2591 | void menu::position_menu_items () { |
||
2592 | static const int lines = 4; |
||
2593 | int targety = view.ymax - lines * line_height; |
||
2594 | int dy = targety - cb_file.extents.bottom; |
||
2311 | jag | 2595 | for (int p = 0; p < nitems; ++p) items[p]->move (0, dy, 0); |
964 | jag | 2596 | } |
2597 | |||
1757 | jag | 2598 | void menu::loadspinners () { |
2599 | file_in fi ("spinners"); |
||
2600 | ifstream& f = fi (); |
||
1804 | jag | 2601 | f >> handlesize >> trailsize >> dva.mag >> lifetime >> dronearrowdefaults.neck >> dronearrowdefaults.shoulder.width >> dronearrowdefaults.shoulder.position; |
1906 | jag | 2602 | f >> dva.autorotate.rpm >> dva.autorotate.dps >> dva.autorotate.tps >> dva.autoflip.deg >> gabt; |
1828 | jag | 2603 | f >> riset >> fallt; |
2604 | f >> sp_bounces >> sp_rebound; |
||
2106 | jag | 2605 | f >> gens >> ddpm >> ddpl >> sp_curve_every >> dva.autopause.every >> dva.autopause.f0r; |
2286 | jag | 2606 | f >> uis.settings_scr.binaural.sep; |
1757 | jag | 2607 | } |
2608 | |||
2609 | void menu::savespinners () { |
||
2610 | file_out fo ("spinners"); |
||
2611 | ofstream& f = fo (); |
||
1805 | jag | 2612 | f << handlesize << trailsize << dva.mag << lifetime << dronearrowdefaults.neck << dronearrowdefaults.shoulder.width << dronearrowdefaults.shoulder.position; |
1906 | jag | 2613 | f << dva.autorotate.rpm << dva.autorotate.dps << dva.autorotate.tps << dva.autoflip.deg << gabt; |
2286 | jag | 2614 | f << riset << fallt << sp_bounces << sp_rebound << gens << ddpm << ddpl << sp_curve_every << dva.autopause.every << dva.autopause.f0r << uis.settings_scr.binaural.sep << endl; |
1757 | jag | 2615 | } |
2616 | |||
1828 | jag | 2617 | |
964 | jag | 2618 | void menu::setup () { |
2619 | dlog << "*** setting up menu ***" << endl; |
||
1757 | jag | 2620 | show = screen_mousex = screen_mousey = 0; |
964 | jag | 2621 | setup_items (); |
1757 | jag | 2622 | widget_load ("d_menu", items, nitems); |
2623 | loadspinners (); |
||
1897 | jag | 2624 | initcolorsliders (); |
1450 | jag | 2625 | b_menu.set_listener (&mbl); |
964 | jag | 2626 | dlog << "+++ menu setup complete +++" << endl; |
2627 | } |
||
2628 | |||
2629 | void menu::set_pos (int x, int y) { |
||
2630 | b_menu.set_pos (x, y); |
||
2631 | } |
||
2632 | |||
2633 | void menu::draw () { |
||
1494 | jag | 2634 | |
964 | jag | 2635 | b_menu.draw (); |
1494 | jag | 2636 | |
964 | jag | 2637 | if (show) { |
1486 | jag | 2638 | |
1519 | jag | 2639 | // draw bg |
964 | jag | 2640 | glEnable (GL_BLEND); |
2641 | glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); |
||
1483 | jag | 2642 | glColor4f (0.0f, 0.0f, 0.0f, opacity); |
964 | jag | 2643 | glRecti (bg_extents.left, bg_extents.bottom, bg_extents.right, bg_extents.top); |
1483 | jag | 2644 | glDisable (GL_BLEND); |
964 | jag | 2645 | |
2646 | glPolygonMode (GL_FRONT, GL_LINE); |
||
1476 | jag | 2647 | glColor3f (0.5f, 0.5f, 0.5f); |
964 | jag | 2648 | glRecti (bg_extents.left, bg_extents.bottom, bg_extents.right, bg_extents.top); |
2649 | glPolygonMode (GL_FRONT, GL_FILL); |
||
2650 | |||
2651 | // draw items |
||
2652 | for (int i = 0; i < num_tabs; ++i) tabs[i]->draw (); |
||
2653 | if (cur_tab) { |
||
2654 | vector<widget*>& ti = tab_members [cur_tab]; |
||
1040 | jag | 2655 | for (int i = 0, j = ti.size (); i < j; ++i) ti[i]->draw (); |
964 | jag | 2656 | if (cur_tab == &cb_mkb_voice && din0.phrasor0.state == phrasor::playing) s_phrase_position.set_val (din0.phrasor0.amount); |
2657 | } |
||
2658 | } |
||
2659 | } |
||
2660 | |||
2661 | void menu::setup_tabs (ui* scr) { |
||
1941 | jag | 2662 | checkbutton* com [] = {&cb_file, &cb_instrument, &cb_editors, 0}; |
2663 | checkbutton* mkb [] = {&cb_mkb_voice, &cb_mkb_drone_tools, &cb_mkb_drone_params, &cb_mkb_ranges, &cb_mkb_misc, 0}; |
||
2664 | checkbutton* eds [] = {&cb_ed_tools, &cb_ed_curves, 0}; |
||
2665 | checkbutton* mon [] = {&cb_mon_tools, &cb_mon_parameters, &cb_mon_ballops, &cb_mon_boxops, &cb_mon_misc, 0}; |
||
2666 | checkbutton* bd [] = {&cb_binaural_drones_tools, &cb_binaural_drones_edit, 0}; |
||
964 | jag | 2667 | int clear_existing_tabs = 1; |
1941 | jag | 2668 | setup_tabs (com, clear_existing_tabs); |
964 | jag | 2669 | if (scr == &din0) { // microtonal keyboard |
1941 | jag | 2670 | setup_tabs (mkb); |
964 | jag | 2671 | } else if (scr == &keybd2) { // keyboard-keyboard |
2672 | } else if (scr == &mondrian0) { // mondrian |
||
1941 | jag | 2673 | setup_tabs (mon); |
964 | jag | 2674 | } else if (scr == &binaural_drones0) { // binaural drones |
1941 | jag | 2675 | setup_tabs (bd); |
964 | jag | 2676 | } else { // is an editor |
1941 | jag | 2677 | setup_tabs (com, clear_existing_tabs); |
2678 | setup_tabs (eds); |
||
1439 | jag | 2679 | next_tab = &cb_ed_tools; |
2680 | next_tab_instr = get_current_instrument (); |
||
964 | jag | 2681 | } |
2682 | position_tabs (); |
||
2683 | } |
||
2684 | |||
1941 | jag | 2685 | void menu::setup_tabs (checkbutton** tlist, int clear) { |
964 | jag | 2686 | if (clear) tabs.clear (); |
1941 | jag | 2687 | int i = 0; |
2688 | checkbutton* ci = tlist[i]; |
||
2689 | while (ci) { |
||
2690 | tabs.push_back (ci); |
||
2691 | ci = tlist[++i]; |
||
2692 | } |
||
964 | jag | 2693 | num_tabs = tabs.size (); |
2694 | } |
||
2695 | |||
2696 | void menu::position_tabs () { |
||
1470 | jag | 2697 | |
964 | jag | 2698 | if (num_tabs) { |
1470 | jag | 2699 | |
2311 | jag | 2700 | int x = cb_file.posx, y = cb_file.posy, spacing = 2 * fnt.spacing.word; |
964 | jag | 2701 | int i = 1, j = 0; |
1408 | jag | 2702 | for (; i < num_tabs;) { |
1095 | jag | 2703 | x = x + get_char_width (tabs[j]->text) + spacing; |
964 | jag | 2704 | tabs[i]->set_pos (x, y); |
1408 | jag | 2705 | ++i; |
2706 | j = i - 1; |
||
964 | jag | 2707 | } |
2708 | |||
1465 | jag | 2709 | int ss = x + get_char_width (tabs[j]->text) - cb_file.posx; |
2710 | separators.main.set_extents (ss); |
||
1470 | jag | 2711 | separators.dp0.set_extents (ss); |
2712 | separators.dp1.set_extents (ss); |
||
2311 | jag | 2713 | |
964 | jag | 2714 | calc_bg (); |
2715 | |||
2716 | checkbutton* lt = tabs[num_tabs - 1]; |
||
2717 | menu_mousex = lt->extents.right + 1; |
||
2718 | menu_mousey = view.ymax - lt->posy; |
||
1470 | jag | 2719 | |
964 | jag | 2720 | } |
2721 | } |
||
2722 | |||
2723 | void menu::remove_from_tab (checkbutton* cb, widget* w) { |
||
2724 | vector<widget*>& tw = tab_members [cb]; |
||
2725 | vector<widget*>::iterator end = tw.end (), i = find (tw.begin(), end, w); |
||
2726 | if (i != end) tw.erase (i); |
||
2727 | } |
||
2728 | |||
2729 | void menu::add_to_tab (checkbutton* cb, widget* w) { |
||
2730 | vector<widget*>& tw = tab_members[cb]; |
||
2731 | vector<widget*>::iterator end = tw.end (), i = find (tw.begin(), end, w); |
||
2732 | if (i == end) tw.push_back (w); |
||
2733 | } |
||
2734 | |||
1941 | jag | 2735 | void menu::populatecurvestab (curve_editor* ed) { |
2736 | destroycurvestab (); |
||
2737 | vector<curve_info>& cis = ed->curveinfo; |
||
2738 | vector<widget*>& tc = tab_members [&cb_ed_curves]; |
||
2739 | int lh = line_height, x = cb_file.extents.left, y = separators.main.extents.bottom - lh; |
||
1955 | jag | 2740 | for (int i = 0, j = ed->curves; i < j; ++i) { |
1941 | jag | 2741 | curve_info& ci = cis[i]; |
2742 | checkbutton* cb = new checkbutton; |
||
2743 | tc.push_back (cb); |
||
2744 | cb->id = i; |
||
2745 | cb->set_text (ci.curve->name); |
||
2746 | cb->set_state (ci.visible, 0); |
||
2747 | cb->set_pos (x, y); |
||
2748 | cb->set_listener (&curvesl); |
||
2749 | y -= lh; |
||
2750 | } |
||
2751 | } |
||
2752 | |||
2753 | void menu::destroycurvestab () { |
||
2754 | vector<widget*>& tw = tab_members [&cb_ed_curves]; |
||
2755 | for (int i = 1, j = tw.size (); i < j; ++i) { |
||
2756 | widget* wi = tw[i]; |
||
2757 | delete wi; |
||
2758 | } |
||
2759 | tw.clear (); |
||
2760 | tw.push_back (&separators.main); |
||
2761 | } |
||
2762 | |||
1465 | jag | 2763 | void menu::set_drone_params_items (int s, int e) { |
2764 | vector<widget*>& tw = tab_members[&cb_mkb_drone_params]; |
||
2765 | tw.clear (); |
||
2766 | tw.push_back (&separators.main); |
||
2767 | DECL_DRONE_PARAMS |
||
2038 | jag | 2768 | for (int i = 0; i < 10; ++i) { |
1465 | jag | 2769 | add_to_tab (&cb_mkb_drone_params, wdrone_params[i]); |
2770 | } |
||
2771 | for (int i = s; i < e; ++i) { |
||
2772 | add_to_tab (&cb_mkb_drone_params, wdrone_params[i]); |
||
2773 | } |
||
2774 | calc_bg (); |
||
2775 | } |
||
2776 | |||
964 | jag | 2777 | int menu::handle_input () { |
2778 | |||
1368 | jag | 2779 | if (b_menu.handle_input ()) return 1; |
964 | jag | 2780 | |
2781 | if (show) { |
||
2782 | |||
1804 | jag | 2783 | if (wheel && !widget::HOVER) move_items (0, wheel * wheely); |
2784 | |||
1368 | jag | 2785 | // find current tab |
964 | jag | 2786 | for (int i = 0; i < num_tabs; ++i) tabs[i]->handle_input (); |
2787 | |||
2788 | if (cur_tab) { // handle tab's items |
||
2789 | vector<widget*>& tm = tab_members [cur_tab]; |
||
1040 | jag | 2790 | for (int i = 0, j = tm.size (); i < j; ++i) if (tm[i]->handle_input ()) return 1; |
964 | jag | 2791 | } |
2792 | |||
2793 | } |
||
1368 | jag | 2794 | |
964 | jag | 2795 | return 0; |
1368 | jag | 2796 | |
964 | jag | 2797 | } |
2798 | |||
1485 | jag | 2799 | void menu::toggle (int mouse_warp) { |
964 | jag | 2800 | |
1640 | jag | 2801 | static int removedpluginbrowser; |
2802 | |||
964 | jag | 2803 | show = !show; |
1945 | jag | 2804 | |
964 | jag | 2805 | if (show) { |
2806 | |||
1120 | jag | 2807 | b_menu.set_text ("Close menu"); |
1485 | jag | 2808 | |
1568 | jag | 2809 | if (b_close.visible) b_close.call_listener (); |
1489 | jag | 2810 | |
1551 | jag | 2811 | if (uis.current->inst) { |
1576 | jag | 2812 | if (uis.current == &din0) { |
2201 | jag | 2813 | din0.dinfo.gravity.hide (); |
1551 | jag | 2814 | uis.remove (&mkb_selector); |
1576 | jag | 2815 | } |
1551 | jag | 2816 | else if (uis.current == &mondrian0) |
2817 | uis.remove (&mon_selector); |
||
2818 | } else { |
||
2819 | uis.remove (&CRVED->capturer); |
||
2820 | uis.remove (&CRVED->pomo); |
||
1640 | jag | 2821 | removedpluginbrowser = uis.remove (&uis.plugin__browser); |
1551 | jag | 2822 | if (CRVED->fft_enabled) uis.remove (&fft0); |
1945 | jag | 2823 | if (CRVED->curcrvchgd) CRVED->setup_tools_menu (); |
1551 | jag | 2824 | } |
2825 | |||
964 | jag | 2826 | style_listener* sl [] = {&gater_style_lis, &am_style_lis, &fm_style_lis}; |
2827 | for (int i = 0; i < 3; ++i) sl[i]->get_style (); |
||
2828 | |||
2829 | screen_mousex = mousex; |
||
2830 | screen_mousey = mousey; |
||
2831 | ::warp_mouse (menu_mousex, menu_mousey); |
||
2832 | |||
1406 | jag | 2833 | if (next_tab && (next_tab_instr == get_current_instrument())) { |
1393 | jag | 2834 | changed (*next_tab); |
2835 | cur_tab = next_tab; |
||
2836 | next_tab = 0; |
||
1439 | jag | 2837 | next_tab_instr = 0; |
1393 | jag | 2838 | } |
964 | jag | 2839 | |
2840 | } else { |
||
1120 | jag | 2841 | b_menu.set_text ("Menu"); |
964 | jag | 2842 | menu_mousex = mousex; |
2843 | menu_mousey = mousey; |
||
1551 | jag | 2844 | if (uis.current->inst) { |
1760 | jag | 2845 | if (uis.current == &din0 ) { |
2201 | jag | 2846 | if (MENU.cb_show_gravity.state) din0.dinfo.gravity.show (); |
1760 | jag | 2847 | if (!din0.adding && !b_close.visible) uis.add (&din0, &mkb_selector); |
1576 | jag | 2848 | } |
1568 | jag | 2849 | else if (uis.current == &mondrian0) |
1551 | jag | 2850 | uis.widgets_of [&mondrian0].push_back (&mon_selector); |
2851 | } else { |
||
2852 | uis.widgets_of[CRVED].push_back (&CRVED->capturer); |
||
2853 | uis.widgets_of[CRVED].push_back (&CRVED->pomo); |
||
1640 | jag | 2854 | if (removedpluginbrowser) uis.widgets_of[CRVED].push_back (&uis.plugin__browser); |
1551 | jag | 2855 | if (CRVED->fft_enabled) uis.widgets_of[CRVED].push_back (&fft0); |
1489 | jag | 2856 | } |
1485 | jag | 2857 | if (mouse_warp) warp_mouse (screen_mousex, screen_mousey); |
964 | jag | 2858 | } |
2859 | |||
2860 | uis.update_bottom_line (); |
||
2861 | |||
2862 | } |
||
2863 | |||
2864 | void menu::set_ball_ops (ball* b) { |
||
2865 | |||
2866 | ball_op* ops [ball_op::NUM_OPS] = {&b->op_turn, &b->op_speed, &b->op_teleport, &b->op_clone, &b->op_transform}; |
||
2867 | checkbutton* cbn [ball_op::NUM_OPS] = {&cb_turn, &cb_speed, &cb_teleport, &cb_clone, &cb_transform}; |
||
2868 | for (int i = 0; i < ball_op::NUM_OPS; ++i) cbn[i]->set_state (ops[i]->alarm.active, 0); |
||
2869 | |||
2870 | turn& trn = b->op_turn; |
||
2871 | sp_turn_min.set_value (-trn.rd.min); |
||
2872 | sp_turn_max.set_value (trn.rd.max); |
||
2873 | |||
2874 | speed& spd = b->op_speed; |
||
2875 | sp_speed_min.set_value (-spd.rd.min); |
||
2876 | sp_speed_max.set_value (spd.rd.max); |
||
2877 | sp_max_speed.set_value (spd.max); |
||
2878 | |||
2879 | teleport& tel = b->op_teleport; |
||
2880 | sp_tel_radius.set_value (tel.radius); |
||
2881 | |||
2882 | Clone& clo = b->op_clone; |
||
2883 | sp_clone_offset.set_value (clo.offset); |
||
2884 | sp_max_clones.set_value (clo.max); |
||
2885 | sp_max_balls.set_value (Clone::max_balls); |
||
2886 | cb_clone_can_clone.set_state (clo.clone_can_clone); |
||
2887 | |||
2888 | Transform& tf = b->op_transform; |
||
2889 | |||
2890 | ball_op* bpa [] = {&trn, &spd, &tel, &clo, &tf}; |
||
2891 | spinner<float>* spa [] = {&sp_turn_every, &sp_speed_every, &sp_tel_every, &sp_clone_every, &sp_transform_every}; |
||
2892 | for (int i = 0; i < ball_op::NUM_OPS; ++i) spa[i]->set_value (bpa[i]->alarm.triggert); |
||
2893 | |||
2894 | } |
||
2895 | |||
2896 | void menu::clear_ball_ops () { |
||
2897 | checkbutton* cbn [ball_op::NUM_OPS] = {&cb_turn, &cb_speed, &cb_teleport, &cb_clone, &cb_transform}; |
||
2898 | for (int i = 0; i < ball_op::NUM_OPS; ++i) cbn[i]->set_state (0, 0); |
||
2899 | } |
||
2900 | |||
1450 | jag | 2901 | CLICKED_BUTTON(menu, b_menu_lis) { |
2902 | cons << YELLOW << "You can use right click to open / close the menu and mouse wheel to scroll" << eol; |
||
1784 | jag | 2903 | TOGGLEMENU |
1450 | jag | 2904 | } |
2905 | |||
2906 | CLICKED_BUTTON(menu, b_inst_lis) { |
||
2907 | int i = b.id; |
||
2908 | scope.save_current_instrument (); |
||
2909 | CURRENT_INSTRUMENT = i; |
||
2910 | INSTRUMENT = INSTRUMENTS[i]; |
||
2911 | load_instrument (); |
||
2912 | } |
||
2913 | |||
2914 | CLICKED_BUTTON(menu, b_ed_lis) { |
||
1502 | jag | 2915 | int i = b.id; |
1450 | jag | 2916 | ui* ed = uis.uis[i]; |
1517 | jag | 2917 | uis.load_editor (ed); |
1450 | jag | 2918 | setup_plugin_labels (); |
2919 | if (curve_picker.visible) curve_picker.hide(); |
||
2920 | } |
||
2921 | |||
964 | jag | 2922 | void misc_listener::clicked (button& b) { |
1450 | jag | 2923 | if (&b == MENUP.b_exit_din) |
964 | jag | 2924 | try_quit (); |
2925 | else if (&b == MENUP.b_turn_off_ui) { |
||
2926 | turn_off_ui (); |
||
2927 | return; |
||
1475 | jag | 2928 | } else |
2929 | din0.set_key_to_pitch_at_cursor (); |
||
1828 | jag | 2930 | TOGGLEMENU |
964 | jag | 2931 | } |
2932 | |||
2933 | void menu::move_items (int dx, int dy) { |
||
1757 | jag | 2934 | for (int i = 0; i < nitems; ++i) { |
964 | jag | 2935 | widget* wi = items[i]; |
2936 | wi->move (dx, dy, 0); |
||
2937 | } |
||
1942 | jag | 2938 | |
2939 | if (CRVED) { |
||
2940 | vector<widget*>& vc = tab_members[&cb_ed_curves]; |
||
2941 | int n = vc.size (); |
||
2942 | for (int i = 1; i < n; ++i) vc[i]->move (dx, dy, 0); |
||
2943 | } |
||
2944 | |||
964 | jag | 2945 | calc_bg (); |
2946 | } |
||
2947 | |||
2948 | void menu::changed (checkbutton& tb) { // current tab has changed |
||
2949 | |||
2950 | cur_tab = &tb; |
||
1687 | jag | 2951 | tb.turn_on (DONT_CALL_LISTENER); // must be always on |
964 | jag | 2952 | |
2953 | if (cur_tab == last_tab) return; |
||
2954 | |||
1687 | jag | 2955 | if (last_tab) last_tab->turn_off (DONT_CALL_LISTENER); |
964 | jag | 2956 | |
2957 | last_tab = cur_tab; |
||
2958 | |||
2959 | calc_bg (); |
||
2960 | |||
1495 | jag | 2961 | opacity = 0.9f; |
2962 | if (&tb == &cb_mon_ballops || &tb == &cb_mon_boxops || &tb == &cb_mon_misc) opacity = 0.5f; |
||
1447 | jag | 2963 | |
964 | jag | 2964 | // save last tab to reload when loading new instrument |
2965 | extern checkbutton* LAST_TABS []; |
||
1941 | jag | 2966 | checkbutton* com [] = {&cb_file, &cb_instrument, &cb_editors, &cb_ed_tools, &cb_ed_curves}; // ignore these tabs |
2967 | for (int i = 0; i < 5; ++i) if (com[i] == cur_tab) return; |
||
964 | jag | 2968 | LAST_TABS [CURRENT_INSTRUMENT] = cur_tab; |
2969 | |||
2970 | } |
||
2971 | |||
2306 | jag | 2972 | |
2973 | VALUE_CHANGED(menu,ancopalis) { |
||
2974 | drone::anchoropacity = MENU.ancopa.value; |
||
2975 | cons << "Drone anchor opacity = " << drone::anchoropacity << eol; |
||
2976 | } |
||
2977 | |||
1498 | jag | 2978 | VALUE_CHANGED(menu,sp_stiff_lis) { |
2104 | jag | 2979 | drone::STIFFNESS = MENU.sp_stiff.value; |
1709 | jag | 2980 | clamp (0.0f, drone::STIFFNESS, 1.0f); |
2981 | cons << "Connection stiffness = " << drone::STIFFNESS << eol; |
||
1498 | jag | 2982 | } |
2983 | |||
1819 | jag | 2984 | VALUE_CHANGED(menu,gabt_lis) { |
2107 | jag | 2985 | drone::gabt = MENU.gabt.value; |
1559 | jag | 2986 | din0.gab.setgabt (); |
1677 | jag | 2987 | cons << YELLOW << "Mute/unmute and Drone <> Noise time = " << drone::gabt << SECONDS << eol; |
1547 | jag | 2988 | } |
2989 | |||
1452 | jag | 2990 | VALUE_CHANGED(menu,sp_dam_depth_lis) { |
1451 | jag | 2991 | din0.change_drone_depth (modulator::AM, MENU.sp_dam_depth); |
2992 | } |
||
2993 | |||
1452 | jag | 2994 | VALUE_CHANGED(menu,sp_dfm_depth_lis) { |
1451 | jag | 2995 | din0.change_drone_depth (modulator::FM, MENU.sp_dfm_depth); |
2996 | } |
||
2997 | |||
1912 | jag | 2998 | VALUE_CHANGED(menu,sp_dam_pos_lis) { |
2110 | jag | 2999 | MENU.sp_dam_pos.set_value (f); |
1912 | jag | 3000 | din0.change_drone_modpos (modulator::AM, MENU.sp_dam_pos); |
3001 | } |
||
3002 | |||
3003 | VALUE_CHANGED(menu,sp_dfm_pos_lis) { |
||
2110 | jag | 3004 | MENU.sp_dfm_pos.set_value (f); |
1912 | jag | 3005 | din0.change_drone_modpos (modulator::FM, MENU.sp_dfm_pos); |
3006 | } |
||
3007 | |||
1452 | jag | 3008 | VALUE_CHANGED(menu,sp_dam_bpm_lis) { |
3009 | din0.change_drone_bpm (modulator::AM, MENU.sp_dam_bpm); |
||
1451 | jag | 3010 | } |
3011 | |||
1452 | jag | 3012 | VALUE_CHANGED(menu,sp_dfm_bpm_lis) { |
3013 | din0.change_drone_bpm (modulator::FM, MENU.sp_dfm_bpm); |
||
1451 | jag | 3014 | } |
3015 | |||
1452 | jag | 3016 | VALUE_CHANGED(menu,sp_am_depth_lis) { |
3017 | din0.change_depth (din::AM, MENU.sp_am_depth()); |
||
3018 | } |
||
3019 | |||
3020 | VALUE_CHANGED(menu,sp_fm_depth_lis) { |
||
3021 | din0.change_depth (din::FM, MENU.sp_fm_depth()); |
||
3022 | } |
||
3023 | |||
3024 | VALUE_CHANGED(menu,sp_am_bpm_lis) { |
||
2107 | jag | 3025 | float v = MENU.sp_am_bpm.value; |
1452 | jag | 3026 | v = din0.am.set_bpm (v); |
2334 | jag | 3027 | cons << YELLOW << "Voice AM bpm = " << v << " or " << v / 60.0f << " hz" << eol; |
1452 | jag | 3028 | } |
3029 | |||
3030 | VALUE_CHANGED(menu,sp_fm_bpm_lis) { |
||
2107 | jag | 3031 | float v = MENU.sp_fm_bpm.value; |
1452 | jag | 3032 | v = din0.fm.set_bpm (v); |
2334 | jag | 3033 | cons << YELLOW << "Voice FM bpm = " << v << " or " << v / 60.0f << " hz" << eol; |
1452 | jag | 3034 | } |
3035 | |||
1686 | jag | 3036 | VALUE_CHANGED(menu,sp_browse_drone_lis) { |
2107 | jag | 3037 | din0.browsed_drone = MENU.sp_browse_drone.value; |
1686 | jag | 3038 | din0.browse_drone (0); |
3039 | } |
||
3040 | |||
1827 | jag | 3041 | VALUE_CHANGED (menu,sp_bounces_lis) { |
1855 | jag | 3042 | int& n = din0.dinfo.bounce.n; |
2107 | jag | 3043 | n = MENU.sp_bounces.value; |
1894 | jag | 3044 | if (n == -1) { |
3045 | cons << RED << "Drones will not bounce from bottom of the microtonal keyboard!" << eol; |
||
3046 | checkbutton& cb = MENU.sp_bounces.variance.cb; |
||
3047 | cb.set_state (0, 0); |
||
3048 | } else cons << GREEN << "Max bounces = " << n << eol; |
||
1452 | jag | 3049 | } |
3050 | |||
3051 | VALUE_CHANGED(menu,sp_rebound_lis) { |
||
2107 | jag | 3052 | din0.dinfo.bounce.speed = MENU.sp_rebound.value; |
1865 | jag | 3053 | cons << GREEN << "Rebound Max Speed % = " << din0.dinfo.bounce.speed << eol; |
1452 | jag | 3054 | } |
3055 | |||
964 | jag | 3056 | void menu::changed (field& f) { |
1451 | jag | 3057 | |
1452 | jag | 3058 | if (&f == &sp_mesh_rows.f_value) { |
2104 | jag | 3059 | din0.dinfo.rows = sp_mesh_rows.value; |
1040 | jag | 3060 | if (cb_sync_rows_cols.state) { |
1370 | jag | 3061 | din0.dinfo.cols = din0.dinfo.mesh_vars.dpp = din0.dinfo.rows; |
1040 | jag | 3062 | sp_mesh_cols.set_value (din0.dinfo.cols); |
1370 | jag | 3063 | sp_drones_per_pend.set_value (din0.dinfo.mesh_vars.dpp); |
1040 | jag | 3064 | } |
1438 | jag | 3065 | mkb_selector.set_mesh (din0.meshh.create, din0.dinfo.rows, din0.dinfo.cols); |
1049 | jag | 3066 | picked (ol_mesh_point.option, 0); |
964 | jag | 3067 | } else if (&f == &sp_mesh_cols.f_value) { |
2104 | jag | 3068 | din0.dinfo.cols = sp_mesh_cols.value; |
1040 | jag | 3069 | if (cb_sync_rows_cols.state) { |
1370 | jag | 3070 | din0.dinfo.rows = din0.dinfo.mesh_vars.dpp = din0.dinfo.cols; |
1040 | jag | 3071 | sp_mesh_rows.set_value (din0.dinfo.rows); |
1370 | jag | 3072 | sp_drones_per_pend.set_value (din0.dinfo.mesh_vars.dpp); |
1040 | jag | 3073 | } |
1438 | jag | 3074 | mkb_selector.set_mesh (din0.meshh.create, din0.dinfo.rows, din0.dinfo.cols); |
1049 | jag | 3075 | picked (ol_mesh_point.option, 0); |
1046 | jag | 3076 | } else if (&f == &sp_mesh_dur.f_value) { |
2104 | jag | 3077 | float t = sp_mesh_dur.value; |
1094 | jag | 3078 | din0.dinfo.mesh_vars.duration = t; |
1677 | jag | 3079 | cons << "Make mesh in " << t << SECONDS << eol; |
1052 | jag | 3080 | } else if (&f == &f_mesh_xy) { |
3081 | int r, c; |
||
3082 | tokenizer z (f.text); |
||
3083 | z >> r >> c; |
||
3084 | if (clamp (0, r, din0.dinfo.rows-1) || clamp (0, c, din0.dinfo.cols-1) ) { |
||
3085 | sprintf (BUFFER, "%d %d", r, c); |
||
3086 | f_mesh_xy.set_text(BUFFER); |
||
3087 | } |
||
3088 | proximity_orderer::ROW = r; |
||
3089 | proximity_orderer::COL = c; |
||
1598 | jag | 3090 | } else if (&f == &dp_numdrones.f_value) { |
2108 | jag | 3091 | din0.dinfo.drone_pend.n = MENU.dp_numdrones.value; |
1598 | jag | 3092 | cons << YELLOW << "Number of Drones = " << din0.dinfo.drone_pend.n << eol; |
1096 | jag | 3093 | } else if (&f == &dp_bpm1.f_value) { |
2108 | jag | 3094 | din0.dinfo.drone_pend.bpm = MENU.dp_bpm1.value; |
1477 | jag | 3095 | cons << YELLOW << "Drone Pendulum BPM = " << din0.dinfo.drone_pend.bpm << eol; |
3096 | } |
||
964 | jag | 3097 | } |
3098 | |||
3099 | void menu::changed (slider<float>& s) { |
||
1461 | jag | 3100 | din0.phrasor0.set_cur (s()); |
964 | jag | 3101 | } |
3102 | |||
3103 | void menu::picked (label& lbl, int dir) { |
||
3104 | const static char* mit [] = {" Tangents are not mirrored", " Tangents are mirrored"}; |
||
1829 | jag | 3105 | const static char* bbs [] = {" Drones bounce ahead", " Drones bounce back", " Drones bounce ahead or back"}; |
2077 | jag | 3106 | const static char *sut [] = {" Snap drones to notes", " Position affects vectors"}; |
1049 | jag | 3107 | const static char *ofl [] = {" in ascending rows", " in descending rows"," in ascending columns", " in descending columns", " randomly", " nearest to", " farthest from" }; |
1052 | jag | 3108 | const static char *wpt [] = {"bottom left", "bottom right", "top left", "top right", "center", "random point", "custom point"}; |
1320 | jag | 3109 | const static char *cwt [] = {" Create Drone Mesh", " Create Drone Pendulum"}; |
1096 | jag | 3110 | const static char *ort [] = {" Orientation = Horizontal", " Orientation = Vertical"}; |
2214 | jag | 3111 | const static char *mir [] = {" Horizontal Flip ", " Vertical Flip ", " Horizontal Flip (Local) ", " Vertical Flip (Local) " }; |
2287 | jag | 3112 | const static char *dris [] = {" Drone is Drone", " Drone is Noise", " Drone is Drone or Noise"}; |
1096 | jag | 3113 | |
1052 | jag | 3114 | static const int npt = 7, npt_1 = npt-1; |
1096 | jag | 3115 | static widget* mshw [] = { |
3116 | &sp_mesh_rows, |
||
3117 | &sp_mesh_cols, |
||
3118 | &cb_sync_rows_cols, |
||
3119 | &l_drone_order, |
||
1101 | jag | 3120 | &sp_mesh_dur, |
3121 | &b_flip_rows_cols, |
||
1096 | jag | 3122 | &ol_drone_order, |
1322 | jag | 3123 | &l_use_drone_pend, |
3124 | &sp_drones_per_pend, |
||
3125 | &l_apply_to, |
||
3126 | &cb_am_bpm, |
||
3127 | &cb_fm_bpm, |
||
3128 | &b_set_to_mesh_rows, |
||
3129 | &b_set_to_mesh_cols, |
||
1096 | jag | 3130 | &ol_mesh_point, |
3131 | &f_mesh_xy, |
||
3132 | }; |
||
3133 | static widget* dpw [] = { |
||
3134 | &dp_orient, |
||
1598 | jag | 3135 | &dp_numdrones, |
1096 | jag | 3136 | &dp_bpm1, |
3137 | }; |
||
1044 | jag | 3138 | |
2217 | jag | 3139 | if (&lbl == &ol_mirror_tangents.option) { |
1128 | jag | 3140 | CRVED->mirror_tangents = !CRVED->mirror_tangents; |
3141 | lbl.set_text (mit[CRVED->mirror_tangents]); |
||
964 | jag | 3142 | } else if (&lbl == &ol_curve_style.option) { |
1128 | jag | 3143 | CRVED->toggle_curve_style (); |
964 | jag | 3144 | } else if (&lbl == &ol_bounce_style.option) { |
3145 | din0.dinfo.bounce.style += dir; |
||
1829 | jag | 3146 | wrap<int> (din_info::bouncet::AHEAD, din0.dinfo.bounce.style, din_info::bouncet::RANDOM); |
964 | jag | 3147 | lbl.set_text (bbs[din0.dinfo.bounce.style]); |
3148 | } else if (&lbl == &ol_set_unset_toggle.option) { |
||
3149 | din0.dinfo.set_unset_toggle = !din0.dinfo.set_unset_toggle; |
||
3150 | lbl.set_text (sut[din0.dinfo.set_unset_toggle]); |
||
1545 | jag | 3151 | b_toggle.set_pos (lbl.extents.right + 20, b_toggle.posy); |
3152 | b_set.set_pos (b_toggle.extents.right + 10, b_toggle.posy); |
||
3153 | b_unset.set_pos (b_set.extents.right + 10, b_toggle.posy); |
||
1037 | jag | 3154 | } else if (&lbl == &ol_drone_order.option) { |
1094 | jag | 3155 | din0.dinfo.mesh_vars.order += dir; |
3156 | wrap (0, din0.dinfo.mesh_vars.order, LAST_ORDERER); |
||
3157 | lbl.set_text (ofl[din0.dinfo.mesh_vars.order]); |
||
3158 | if (din0.dinfo.mesh_vars.order > 4) { |
||
1040 | jag | 3159 | add_to_tab (&cb_mkb_drone_tools, &ol_mesh_point); |
3160 | add_to_tab (&cb_mkb_drone_tools, &f_mesh_xy); |
||
1408 | jag | 3161 | ol_mesh_point.set_pos (lbl.extents.right + 10, lbl.extents.bottom); |
3162 | f_mesh_xy.set_pos (ol_mesh_point.option.extents.right + 10, f_mesh_xy.extents.bottom); |
||
1040 | jag | 3163 | } else { |
3164 | remove_from_tab (&cb_mkb_drone_tools, &ol_mesh_point); |
||
3165 | remove_from_tab (&cb_mkb_drone_tools, &f_mesh_xy); |
||
3166 | } |
||
1037 | jag | 3167 | } else if (&lbl == &ol_mesh_point.option) { |
1094 | jag | 3168 | din0.dinfo.mesh_vars.point += dir; |
3169 | wrap (0, din0.dinfo.mesh_vars.point, npt_1); |
||
3170 | sprintf (BUFFER, " %s @ ", wpt[din0.dinfo.mesh_vars.point]); |
||
1037 | jag | 3171 | lbl.set_text (BUFFER); |
1044 | jag | 3172 | int cols_1 = din0.dinfo.cols - 1; |
3173 | int rows_1 = din0.dinfo.rows - 1; |
||
3174 | rnd<int> rdr (0, rows_1), rdc (0, cols_1); |
||
1052 | jag | 3175 | int ROW [] = {0, 0, rows_1, rows_1, din0.dinfo.rows / 2, rdr(), proximity_orderer::ROW}; |
3176 | int COL [] = {0, cols_1, 0, cols_1, din0.dinfo.cols / 2, rdc(), proximity_orderer::COL}; |
||
1094 | jag | 3177 | proximity_orderer::ROW = ROW [din0.dinfo.mesh_vars.point]; |
3178 | proximity_orderer::COL = COL [din0.dinfo.mesh_vars.point]; |
||
1049 | jag | 3179 | sprintf (BUFFER, "%d %d", proximity_orderer::ROW, proximity_orderer::COL); |
1044 | jag | 3180 | f_mesh_xy.set_text (BUFFER); |
1408 | jag | 3181 | f_mesh_xy.set_pos (lbl.extents.right + 10, f_mesh_xy.extents.bottom); |
1098 | jag | 3182 | } else if (&lbl == &ol_create_this.option) { |
3183 | din0.dinfo.create_this += dir; |
||
3184 | wrap (0, din0.dinfo.create_this, 1); |
||
3185 | int cw = din0.dinfo.create_this; |
||
1096 | jag | 3186 | lbl.set_text (cwt[cw]); |
1101 | jag | 3187 | if (cw) { // drone pendulum |
1322 | jag | 3188 | for (int i = 0; i < 16; ++i) remove_from_tab (&cb_mkb_drone_tools, mshw[i]); |
1477 | jag | 3189 | for (int i = 0; i < 3; ++i) add_to_tab (&cb_mkb_drone_tools, dpw[i]); |
1101 | jag | 3190 | } else { // mesh |
1477 | jag | 3191 | for (int i = 0; i < 3; ++i) remove_from_tab (&cb_mkb_drone_tools, dpw[i]); |
1322 | jag | 3192 | int j = 14; if (din0.dinfo.mesh_vars.order > 4) j = 16; |
1101 | jag | 3193 | for (int i = 0; i < j; ++i) add_to_tab (&cb_mkb_drone_tools, mshw[i]); |
1096 | jag | 3194 | } |
1495 | jag | 3195 | calc_bg (); |
1096 | jag | 3196 | } else if (&lbl == &dp_orient.option) { |
3197 | din0.dinfo.drone_pend.orient += dir; |
||
3198 | wrap (0, din0.dinfo.drone_pend.orient, 1); |
||
3199 | int o = din0.dinfo.drone_pend.orient; |
||
3200 | lbl.set_text (ort[o]); |
||
1128 | jag | 3201 | } else if (&lbl == &ol_mirror.option) { |
3202 | CRVED->axis += dir; |
||
1453 | jag | 3203 | wrap<int> (curve_editor::MIRROR_X, CRVED->axis, curve_editor::MIRROR_BBY); |
1128 | jag | 3204 | lbl.set_text (mir[CRVED->axis]); |
1453 | jag | 3205 | calc_bg (); |
1387 | jag | 3206 | } else if (&lbl == &ol_drone_is.option) { |
1813 | jag | 3207 | drone::IS += dir; |
2287 | jag | 3208 | wrap<int> (drone::DRONE, drone::IS, drone::RANDOM); |
1687 | jag | 3209 | const char* di = dris [drone::IS]; |
1398 | jag | 3210 | lbl.set_text (di); |
2286 | jag | 3211 | } |
964 | jag | 3212 | } |
3213 | |||
3214 | void menu::calc_bg () { |
||
3215 | if (cur_tab && num_tabs) { |
||
3216 | vector<widget*>& v = tab_members [cur_tab]; |
||
3217 | if (v.size () == 0) return; |
||
3218 | widget* w0 = v[0]; |
||
3219 | bg_extents.left = cb_file.extents.left; |
||
3220 | bg_extents.right = bg_extents.left; |
||
3221 | bg_extents.bottom = w0->extents.bottom; |
||
3222 | bg_extents.top = tabs[0]->extents.top; |
||
3223 | for (int i = 0, j = v.size (); i < j; ++i) { |
||
3224 | widget* wi = v[i]; |
||
3225 | if (wi->extents.left < bg_extents.left) bg_extents.left = wi->extents.left; |
||
3226 | if (wi->extents.right > bg_extents.right) bg_extents.right = wi->extents.right; |
||
3227 | if (wi->extents.bottom < bg_extents.bottom) bg_extents.bottom = wi->extents.bottom; |
||
3228 | if (wi->extents.top > bg_extents.top) bg_extents.top = wi->extents.top; |
||
3229 | } |
||
3230 | static const int GUTTER = 5; |
||
3231 | bg_extents.resize (GUTTER, GUTTER); |
||
3232 | } |
||
1319 | jag | 3233 | |
964 | jag | 3234 | } |
3235 | |||
3236 | void menu::show_editors (ui* inst) { |
||
1935 | jag | 3237 | // refer to weds |
1941 | jag | 3238 | int starts [] = {0, 4, 15, 18}; |
3239 | int ends [] = {4, 15, 18, 19}; |
||
964 | jag | 3240 | int starti = starts[CURRENT_INSTRUMENT], endi = ends[CURRENT_INSTRUMENT]; |
3241 | vector<widget*>& tw = tab_members [&cb_editors]; |
||
3242 | for (int i = starti; i < endi; ++i) { |
||
3243 | widget* ei = editors[i]; |
||
3244 | tw.push_back (ei); |
||
3245 | } |
||
3246 | } |
||
3247 | |||
3248 | void menu::hide_editors () { |
||
3249 | vector<widget*>& tw = tab_members [&cb_editors]; |
||
1941 | jag | 3250 | for (int i = 0; i < 19; ++i) { |
964 | jag | 3251 | widget* ei = editors[i]; |
3252 | vector<widget*>::iterator itr = find (tw.begin(), tw.end(), ei); |
||
3253 | if (itr != tw.end()) tw.erase (itr); |
||
3254 | } |
||
3255 | } |
||
3256 | |||
3257 | void menu::update_bpm (const string& name, float value) { |
||
3258 | spinner<float>* psp = bpm_map [name]; |
||
3259 | if (psp) psp->set_value (value); |
||
3260 | } |
||
3261 | |||
3262 | void menu::mark_tap_target () { |
||
3263 | interpreter ("set taptarget"); |
||
3264 | tokenizer tz (interpreter.result); |
||
3265 | while (1) { |
||
3266 | string target; tz >> target; |
||
3267 | if (target == "") break; |
||
1687 | jag | 3268 | if (target == "gr") cb_gater.turn_on (DONT_CALL_LISTENER); |
3269 | else if (target == "am") cb_am.turn_on (DONT_CALL_LISTENER); |
||
3270 | else if (target == "fm") cb_fm.turn_on (DONT_CALL_LISTENER); |
||
3271 | else if (target == "os") cb_octave_shift.turn_on (DONT_CALL_LISTENER); |
||
964 | jag | 3272 | } |
3273 | } |
||
3274 | |||
3275 | menu::~menu () { |
||
3276 | dlog << "--- destroying menu ---" << endl; |
||
2039 | jag | 3277 | |
3278 | #ifdef __WIDGET_MOVE__ |
||
1757 | jag | 3279 | widget_save ("d_menu", items, nitems); |
2039 | jag | 3280 | #endif |
1757 | jag | 3281 | savespinners (); |
1897 | jag | 3282 | savecolorsliders (); |
1941 | jag | 3283 | destroycurvestab (); |
2039 | jag | 3284 | |
964 | jag | 3285 | dlog << "--- destroyed menu ---" << endl; |
3286 | } |
||
3287 | |||
3288 | void octave_shift_listener::clicked (button& b) { |
||
3289 | if (&b == MENUP.ab_octave_up || &b == &uis.ab_octave_up) modulate_up (); else modulate_down (); |
||
3290 | } |
||
3291 | |||
3292 | void octave_shift_listener::changed (field& f) { |
||
2233 | jag | 3293 | float v = 0.0f; |
3294 | if (&f == MENUP.sp_octave_shift_bpm.f_value) { |
||
3295 | v = MENU.sp_octave_shift_bpm.value; |
||
3296 | uis.sp_octave_shift_bpm.set_value (v); |
||
3297 | } |
||
3298 | else { |
||
3299 | v = uis.sp_octave_shift_bpm.value; |
||
3300 | MENU.sp_octave_shift_bpm.set_value (v); |
||
3301 | } |
||
3302 | v = octave_shift.set_bpm (v); |
||
964 | jag | 3303 | static const string los = "Octave shift BPM = "; |
1368 | jag | 3304 | cons << YELLOW << los << v << eol; |
964 | jag | 3305 | } |
3306 | |||
3307 | void voice_volume_listener::changed (field& f) { |
||
2108 | jag | 3308 | VOICE_VOLUME = MENU.sp_voice_volume.value; |
1441 | jag | 3309 | static const string vv ("Volume = "); |
964 | jag | 3310 | cons << YELLOW << vv << VOICE_VOLUME << eol; |
3311 | } |
||
3312 | |||
1241 | jag | 3313 | void drone_master_volume_listener::changed (field& f) { |
2102 | jag | 3314 | din0.setdronemastervolume (MENU.sp_drone_master_vol.value); |
1241 | jag | 3315 | } |
3316 | |||
964 | jag | 3317 | void gater_bpm_listener::changed (field& f) { |
2108 | jag | 3318 | float v = MENU.sp_gater_bpm.value; |
964 | jag | 3319 | v = din0.gatr.set_bpm (v); |
2157 | jag | 3320 | static const string gt = "Beater BPM = "; |
964 | jag | 3321 | cons << YELLOW << gt << v << eol; |
3322 | } |
||
3323 | |||
3324 | void drone_handle_size_listener::changed (field& f) { |
||
1060 | jag | 3325 | din0.change_drone_handle_size (MENU.sp_change_drone_handle_size); |
964 | jag | 3326 | } |
3327 | |||
3328 | void drone_trail_length_listener::changed (field& f) { |
||
1060 | jag | 3329 | din0.change_drone_trail_points (MENU.sp_change_drone_trail_length); |
964 | jag | 3330 | } |
3331 | |||
3332 | void change_drone_vel_listener::changed (field& f) { |
||
1019 | jag | 3333 | din0.change_drone_vel (MENU.sp_change_drone_vel); |
964 | jag | 3334 | } |
3335 | |||
3336 | void change_drone_accel_listener::changed (field& f) { |
||
1058 | jag | 3337 | din0.change_drone_accel (MENU.sp_change_drone_accel); |
964 | jag | 3338 | } |
3339 | |||
2077 | jag | 3340 | void rotate_drone_vec_listener::changed (field& f) { |
3341 | int id = f.id; |
||
3342 | spinner<float>* sp [] = {MENUP.sp_rotate_drone_vel, MENUP.rotaccel}; |
||
2078 | jag | 3343 | rotdir* rd [] = {MENUP.rdvel, MENUP.rdaccel}; |
3344 | din0.rotate_drone_vec (id, *sp[id], rd[id]->val); |
||
964 | jag | 3345 | } |
3346 | |||
3347 | void drones_per_min_listener::changed (field& f) { |
||
1058 | jag | 3348 | din0.change_drones_per_min (MENU.sp_drones_per_min); |
964 | jag | 3349 | } |
3350 | |||
1893 | jag | 3351 | void menu::dpllis::changed (field& f) { |
3352 | din0.change_drones_per_launch (MENU.dpl); |
||
3353 | } |
||
3354 | |||
964 | jag | 3355 | void drone_lifetime_listener::changed (field& f) { |
1058 | jag | 3356 | din0.change_drone_lifetime (MENU.sp_drone_lifetime); |
964 | jag | 3357 | } |
3358 | |||
3359 | void orbit_insertion_time_listener::changed (field& f) { |
||
1058 | jag | 3360 | din0.change_orbit_insertion_time (MENU.sp_orbit_insertion_time); |
964 | jag | 3361 | } |
3362 | |||
3363 | void style_listener::set_style (const string& style) { |
||
3364 | for (int i = 0; i < num_styles; ++i) { |
||
3365 | if (styles[i] == style) { |
||
3366 | id = i; |
||
3367 | string command ("set-style " + what + " " + style); |
||
3368 | interpreter (command); |
||
3369 | oplist.set_text (prefix + style); |
||
3370 | } |
||
3371 | } |
||
3372 | } |
||
3373 | |||
3374 | void style_listener::get_style () { |
||
3375 | string command ("get-style " + what); |
||
3376 | interpreter (command); |
||
3377 | oplist.set_text (prefix + interpreter.result); |
||
3378 | } |
||
3379 | |||
3380 | void style_listener::next_style (int dir) { |
||
3381 | id += dir; |
||
3382 | if (id < 0) id = last_style; else if (id >= num_styles) id = 0; |
||
3383 | set_style (styles[id]); |
||
3384 | } |
||
3385 | |||
3386 | void style_listener::picked (label& lbl, int dir) { |
||
3387 | next_style (dir); |
||
3388 | } |
||
3389 | |||
3390 | void drone_commands_listener::changed (checkbutton& cb) { |
||
3391 | int state = cb.state; |
||
3392 | if (&cb == MENUP.cb_show_vel) din0.dinfo.vel = state; else |
||
3393 | if (&cb == MENUP.cb_show_accel) din0.dinfo.accel = state; else |
||
1868 | jag | 3394 | if (&cb == MENUP.cb_show_gravity) { |
3395 | gravity_t& gr = din0.dinfo.gravity; |
||
2201 | jag | 3396 | if (state) uis.add (&din0, &gr); else uis.remove (&gr); |
1868 | jag | 3397 | } else |
964 | jag | 3398 | if (&cb == MENUP.cb_show_anchors) din0.dinfo.anchor = state; else |
1812 | jag | 3399 | if (&cb == MENUP.seloncre) din0.dinfo.seloncre = state; |
1094 | jag | 3400 | else din0.dinfo.mesh_vars.sync = cb.state; |
964 | jag | 3401 | } |
3402 | |||
3403 | void phrase_commands_listener::clicked (button& b) { |
||
1784 | jag | 3404 | TOGGLEMENU |
964 | jag | 3405 | if (&b == MENUP.b_record_phrase) din0.do_phrase_recording (); |
3406 | else if (&b == MENUP.b_clear_phrases) din0.clear_all_phrases (); |
||
3407 | } |
||
3408 | |||
3409 | void range_data::read_mod () { |
||
3410 | int& a = din0.ranges[din0.dinfo.sel_range].mod.active; |
||
3411 | mod = a; |
||
3412 | a = 0; |
||
3413 | } |
||
3414 | |||
3415 | void range_data::write_mod () { |
||
3416 | din0.ranges[din0.dinfo.sel_range].mod.active = mod; |
||
3417 | } |
||
3418 | |||
3419 | void range_height_listener::clicked (button& b) { |
||
3420 | mouse_slider0.add (MENUP.rhl); |
||
3421 | MENU.rhl.read_mod (); |
||
3422 | activate_mouse_slider (); |
||
3423 | } |
||
3424 | |||
1566 | jag | 3425 | void range_height_listener::moused (int dh, double scl) { |
964 | jag | 3426 | din0.height_changed (din0.dinfo.sel_range, dh); |
3427 | } |
||
3428 | |||
3429 | void range_height_listener::after_slide () { |
||
3430 | MENU.rhl.write_mod (); |
||
3431 | } |
||
3432 | |||
3433 | void board_height_listener::read_mod () { |
||
3434 | int n = din0.num_ranges; |
||
3435 | moda.resize (n); |
||
3436 | for (int i = 0; i < n; ++i) { |
||
3437 | int& a = din0.ranges[i].mod.active; |
||
3438 | moda[i]=a; |
||
3439 | a = 0; |
||
3440 | } |
||
3441 | } |
||
3442 | |||
3443 | void board_height_listener::write_mod () { |
||
3444 | int n = din0.num_ranges; |
||
3445 | for (int i = 0; i < n; ++i) din0.ranges[i].mod.active = moda[i]; |
||
3446 | } |
||
3447 | |||
1566 | jag | 3448 | void board_height_listener::moused (int dh, double scl) { |
964 | jag | 3449 | din0.height_changed (-1, dh); |
3450 | } |
||
3451 | |||
3452 | void board_height_listener::clicked (button& b) { |
||
3453 | MENU.bhl.name = "Board height"; |
||
3454 | MENU.bhl.orient = mouse_slider_listener::Y; |
||
3455 | mouse_slider0.add (MENUP.bhl); |
||
3456 | MENU.bhl.read_mod (); |
||
3457 | activate_mouse_slider (); |
||
3458 | } |
||
3459 | |||
3460 | void board_height_listener::after_slide () { |
||
3461 | MENU.bhl.write_mod (); |
||
3462 | } |
||
3463 | |||
3464 | void set_range_listener::clicked (button& b) { |
||
3465 | if (&b == MENUP.b_selected_to_all) { |
||
3466 | din0.selected_range_to_all (i); |
||
3467 | } else if (&b == MENUP.b_default_to_selected) { |
||
3468 | din0.default_range_to_selected (i); |
||
3469 | } else if (&b == MENUP.b_default_to_all) { |
||
3470 | din0.default_range_to_all (i); |
||
3471 | } |
||
3472 | } |
||
3473 | |||
3474 | void set_range_listener::picked (label& lbl, int dir) { |
||
3475 | i = !i; |
||
3476 | static const char* opts [] = {" Set Width?", " Set Height?"}; |
||
3477 | lbl.set_text (opts[i]); |
||
3478 | } |
||
3479 | |||
3480 | void range_width_listener::clicked (button& b) { |
||
3481 | if (&b == MENUP.b_adjust_range_left) { |
||
3482 | MENU.arl.range = din0.dinfo.sel_range; |
||
3483 | MENU.arl.read_mod (); |
||
3484 | mouse_slider0.add (MENUP.arl); |
||
3485 | activate_mouse_slider (); |
||
3486 | } else if (&b == MENUP.b_adjust_range_right) { |
||
3487 | MENU.arr.range = din0.dinfo.sel_range; |
||
3488 | MENU.arr.read_mod (); |
||
3489 | mouse_slider0.add (MENUP.arr); |
||
3490 | activate_mouse_slider (); |
||
3491 | } else { |
||
3492 | MENU.arb.range = din0.dinfo.sel_range; |
||
3493 | MENU.arb.read_mod (); |
||
3494 | mouse_slider0.add (MENUP.arb); |
||
3495 | activate_mouse_slider (); |
||
3496 | } |
||
1605 | jag | 3497 | din0.adjustranges.set (); |
964 | jag | 3498 | } |
3499 | |||
1566 | jag | 3500 | void adjust_range_left_listener::moused (int dir, double scl) { |
964 | jag | 3501 | if (din0.range_left_changed (range, dir, 1)) { |
1402 | jag | 3502 | din0.refresh_drones (0, range); |
964 | jag | 3503 | din0.find_visible_ranges (); |
3504 | } |
||
3505 | } |
||
3506 | |||
3507 | void adjust_range_left_listener::after_slide () { |
||
3508 | MENU.arl.write_mod (); |
||
1605 | jag | 3509 | din0.adjustranges.unset (); |
964 | jag | 3510 | } |
3511 | |||
1566 | jag | 3512 | void adjust_range_right_listener::moused (int dir, double scl) { |
964 | jag | 3513 | if (din0.range_right_changed (range, dir, 1)) { |
1402 | jag | 3514 | din0.refresh_drones (range, din0.last_range); |
964 | jag | 3515 | din0.find_visible_ranges (); |
3516 | } |
||
3517 | } |
||
3518 | |||
3519 | void adjust_range_right_listener::after_slide () { |
||
3520 | MENU.arr.write_mod (); |
||
1605 | jag | 3521 | din0.adjustranges.unset (); |
964 | jag | 3522 | } |
3523 | |||
1566 | jag | 3524 | void adjust_range_both_listener::moused (int dir, double scl) { |
964 | jag | 3525 | int rl = din0.range_left_changed (range, -dir, 1); |
3526 | int rr = din0.range_right_changed (range, dir, 1); |
||
3527 | if (rl || rr) { |
||
1402 | jag | 3528 | din0.refresh_all_drones (); |
964 | jag | 3529 | din0.find_visible_ranges (); |
3530 | } |
||
3531 | } |
||
3532 | |||
3533 | void adjust_range_both_listener::after_slide () { |
||
3534 | MENU.arb.write_mod (); |
||
1605 | jag | 3535 | din0.adjustranges.unset (); |
964 | jag | 3536 | } |
1452 | jag | 3537 | |
3538 | VALUE_CHANGED(menu, sp_range_lis) { |
||
2108 | jag | 3539 | din0.dinfo.sel_range = MENU.sp_range.value; |
1764 | jag | 3540 | MENU.load_range_mod (din0.dinfo.sel_range); |
1452 | jag | 3541 | } |
3542 | |||
3543 | VALUE_CHANGED(menu, sp_ran_mod_width_lis) { |
||
2108 | jag | 3544 | float v = MENU.sp_ran_mod_width.value; |
3545 | din0.ranges [din0.dinfo.sel_range].mod.fm.depth = v; |
||
1764 | jag | 3546 | sprintf (BUFFER, "Range %d, Modulation Width = %0.3f", din0.dinfo.sel_range, v); |
3547 | cons << BUFFER << eol; |
||
1452 | jag | 3548 | } |
3549 | |||
3550 | VALUE_CHANGED(menu, sp_ran_mod_width_bpm_lis) { |
||
2108 | jag | 3551 | float v = MENU.sp_ran_mod_width_bpm.value; |
1764 | jag | 3552 | din0.ranges[din0.dinfo.sel_range].mod.fm.bv.set_bpm (v); |
3553 | sprintf (BUFFER, "Range %d, Modulation Width BPM = %0.3f", din0.dinfo.sel_range, v); |
||
3554 | cons << BUFFER << eol; |
||
1452 | jag | 3555 | } |
3556 | |||
3557 | VALUE_CHANGED(menu, sp_ran_mod_height_lis) { |
||
2108 | jag | 3558 | float v = MENU.sp_ran_mod_height.value; |
1764 | jag | 3559 | din0.ranges[din0.dinfo.sel_range].mod.am.depth = v; |
3560 | sprintf (BUFFER, "Range %d, Modulation Height = %0.3f", din0.dinfo.sel_range, v); |
||
3561 | cons << BUFFER << eol; |
||
1452 | jag | 3562 | } |
3563 | |||
3564 | VALUE_CHANGED(menu, sp_ran_mod_height_bpm_lis) { |
||
2108 | jag | 3565 | float v = MENU.sp_ran_mod_height_bpm.value; |
1764 | jag | 3566 | din0.ranges[din0.dinfo.sel_range].mod.am.bv.set_bpm (v); |
3567 | sprintf (BUFFER, "Range %d, Modulation Height BPM = %0.3f", din0.dinfo.sel_range, v); |
||
3568 | cons << BUFFER << eol; |
||
964 | jag | 3569 | } |
3570 | |||
3571 | void range_mod_lis::edited (curve_editor* ed, int i) { |
||
3572 | din0.update_range_mod_solvers (i, ed->mix); |
||
3573 | curve_listener::edited (ed, i); |
||
3574 | } |
||
3575 | |||
3576 | void menu::load_range (int r) { |
||
3577 | sp_range.set_value (r); |
||
1308 | jag | 3578 | load_range_mod (r); |
964 | jag | 3579 | } |
3580 | |||
1308 | jag | 3581 | void menu::load_range_mod (int r) { |
3582 | range& ri = din0.ranges [r]; |
||
1760 | jag | 3583 | cb_mod_ran.set_state (ri.mod.active, 0); |
964 | jag | 3584 | sp_ran_mod_width.set_value (ri.mod.fm.depth); |
3585 | sp_ran_mod_width_bpm.set_value (ri.mod.fm.bv.bpm); |
||
3586 | sp_ran_mod_height.set_value (ri.mod.am.depth); |
||
3587 | sp_ran_mod_height_bpm.set_value (ri.mod.am.bv.bpm); |
||
1436 | jag | 3588 | ol_fixed.set_text (ol_fixed_lbls [ri.fixed]); |
1401 | jag | 3589 | print_range_info (ri); |
964 | jag | 3590 | } |
3591 | |||
3592 | void snap_drones_listener::picked (label& l, int dir) { |
||
3593 | din0.dinfo.snap.style += dir; |
||
1012 | jag | 3594 | static const char* ss [] = {" Free", " Slide", " Lock", " Mirror"}; |
964 | jag | 3595 | wrap<int> (din_info::snap_t::FREE, din0.dinfo.snap.style, din_info::snap_t::MIRROR); |
3596 | l.set_text (ss[din0.dinfo.snap.style]); |
||
3597 | } |
||
3598 | |||
3599 | void snap_drones_listener::changed (field& f) { |
||
2108 | jag | 3600 | float v; |
964 | jag | 3601 | if (&f == MENUP.sp_snap_left.f_value) { |
2108 | jag | 3602 | v = MENU.sp_snap_left.value; |
1804 | jag | 3603 | float dl = v - din0.dinfo.snap.left; |
3604 | din0.dinfo.snap.left = v; |
||
964 | jag | 3605 | if (din0.dinfo.snap.style > din_info::snap_t::FREE) { |
1012 | jag | 3606 | if (din0.dinfo.snap.style == din_info::snap_t::SLIDE) { |
3607 | din0.dinfo.snap.right += dl; |
||
3608 | } |
||
3609 | else if (din0.dinfo.snap.style == din_info::snap_t::LOCK) { |
||
964 | jag | 3610 | din0.dinfo.snap.right = din0.dinfo.snap.left; |
1012 | jag | 3611 | } |
3612 | else { |
||
3613 | din0.dinfo.snap.right = 1.0f - din0.dinfo.snap.left; |
||
964 | jag | 3614 | } |
3615 | MENU.sp_snap_right.set_value (din0.dinfo.snap.right); |
||
1804 | jag | 3616 | } |
1012 | jag | 3617 | } else if (&f == MENUP.sp_snap_right.f_value) { |
2108 | jag | 3618 | v = MENU.sp_snap_right.value; |
1804 | jag | 3619 | float dr = v - din0.dinfo.snap.right; |
3620 | din0.dinfo.snap.right = v; |
||
964 | jag | 3621 | if (din0.dinfo.snap.style > din_info::snap_t::FREE) { |
3622 | if (din0.dinfo.snap.style == din_info::snap_t::LOCK) { |
||
3623 | din0.dinfo.snap.left = din0.dinfo.snap.right; |
||
1012 | jag | 3624 | } else if (din0.dinfo.snap.style == din_info::snap_t::SLIDE) { |
3625 | din0.dinfo.snap.left += dr; |
||
964 | jag | 3626 | } else { |
3627 | din0.dinfo.snap.left = 1.0f - din0.dinfo.snap.right; // mirror |
||
3628 | } |
||
3629 | MENU.sp_snap_left.set_value (din0.dinfo.snap.left); |
||
3630 | } |
||
3631 | } |
||
3632 | |||
1804 | jag | 3633 | if (din0.dinfo.snap.left > din0.dinfo.snap.right || din0.dinfo.snap.left < 0.0f || din0.dinfo.snap.right > 1.0f) |
3634 | cons << RED; |
||
3635 | else |
||
3636 | cons << GREEN; |
||
964 | jag | 3637 | sprintf (BUFFER, "Snap left = %0.3f, Snap right = %0.3f", din0.dinfo.snap.left, din0.dinfo.snap.right); |
3638 | cons << BUFFER << eol; |
||
3639 | } |
||
3640 | |||
3641 | void scope_listener::changed (field& f) { |
||
2109 | jag | 3642 | int n = 0; |
964 | jag | 3643 | if (&f == MENUP.sp_scope_height.f_value) { |
2109 | jag | 3644 | n = MENU.sp_scope_height.value; |
3645 | scope.set_height (n); |
||
964 | jag | 3646 | static const string ht = "Height = "; |
3647 | cons << YELLOW << ht << n << eol; |
||
1920 | jag | 3648 | } else if (&f == MENUP.sp_scope_samples.f_value) { |
2109 | jag | 3649 | n = MENU.sp_scope_samples.value; |
2113 | jag | 3650 | n = scope.set_num_samples (n); |
964 | jag | 3651 | static const string ns = "Samples = "; |
3652 | cons << YELLOW << ns << n << eol; |
||
1920 | jag | 3653 | } else { |
2109 | jag | 3654 | float o = MENU.scopacity.value; |
3655 | scope.setopacity (o); |
||
1920 | jag | 3656 | static const string op = "Opacity = "; |
1921 | jag | 3657 | cons << YELLOW << op << o << eol; |
964 | jag | 3658 | } |
3659 | } |
||
3660 | |||
3661 | void scope_listener::changed (checkbutton& cb) { |
||
3662 | scope.visible = cb.state; |
||
3663 | } |
||
3664 | |||
3665 | void scope_listener::setup () { |
||
3666 | if (scope.visible) MENU.cb_scope.turn_on (0); else MENU.cb_scope.turn_off (0); |
||
3667 | MENU.sp_scope_height.set_value (scope.height); |
||
3668 | MENU.sp_scope_samples.set_value (scope.num_samples); |
||
1921 | jag | 3669 | MENU.scopacity.set_value (scope.opacity); |
964 | jag | 3670 | } |
3671 | |||
3672 | void tap_bpm_listener::changed (tap_display& td) { |
||
3673 | sprintf (BUFFER, "%.3f", td.bpm); |
||
3674 | MENU.l_tap_bpm_value.set_text (BUFFER); |
||
3675 | extern double TAP_BPM; TAP_BPM = td.bpm; |
||
3676 | Tcl_UpdateLinkedVar (interpreter.interp, "tapbpm"); |
||
3677 | } |
||
3678 | |||
3679 | void tap_bpm_listener::changed (checkbutton& cb) { |
||
3680 | checkbutton* cbs [] = {MENUP.cb_am, MENUP.cb_fm, MENUP.cb_gater, MENUP.cb_octave_shift}; |
||
3681 | const char* targets [] = {"am", "fm", "gr", "os"}; |
||
3682 | for (int i = 0; i < 4; ++i) { |
||
3683 | checkbutton* cbi = cbs[i]; |
||
3684 | if (&cb == cbi) { |
||
3685 | if (cbi->state) |
||
3686 | sprintf (BUFFER, "add-tap-target %s", targets[i]); |
||
3687 | else |
||
3688 | sprintf (BUFFER, "remove-tap-target %s", targets[i]); |
||
3689 | interpreter (BUFFER); |
||
3690 | return; |
||
3691 | } |
||
3692 | } |
||
3693 | if (&cb == MENUP.cb_auto_reset) { |
||
3694 | if (MENU.cb_auto_reset.state) interpreter ("set resetbeat 1"); else interpreter ("set resetbeat 0"); |
||
3695 | } |
||
3696 | } |
||
3697 | |||
3698 | void pan_zoom_listener::clicked (button& b) { |
||
1128 | jag | 3699 | if (&b == MENUP.abe_left) {CRVED->do_panx (1); cons << YELLOW << "You can press a to move curves left" << eol;} |
3700 | else if (&b == MENUP.abe_right) {CRVED->do_panx (-1); cons << YELLOW << "You can press d to move curves right"<< eol;} |
||
3701 | else if (&b == MENUP.abe_up) {CRVED->do_pany (-1); cons << YELLOW << "You can press w to move curves up" << eol;} |
||
3702 | else if (&b == MENUP.abe_down) {CRVED->do_pany (+1); cons << YELLOW << "You can press s to move curves down" << eol;} |
||
3703 | else if (&b == MENUP.pb_zoom_in) {CRVED->do_zoom (-1); cons << YELLOW << "You can press e to zoom in" << eol;} |
||
3704 | else {CRVED->do_zoom (+1);cons << YELLOW << "You can press q to zoom out" << eol;} |
||
964 | jag | 3705 | } |
3706 | |||
1901 | jag | 3707 | void snap_listener::clicked (button& b) { |
3708 | static int xs [] = {0, 1, 0, 1}; |
||
3709 | static int ys [] = {0, 0, 1, 1}; |
||
3710 | static const char* mesgs [] = { |
||
3711 | "You can press n to turn off snapping", "You can press x to snap X", |
||
3712 | "You can press y to snap Y", "You can press b to snap both X and Y" |
||
3713 | }; |
||
3714 | button* snaps [] = {MENUP.b_snapnone, MENUP.b_snapx, MENUP.b_snapy, MENUP.b_snapboth}; |
||
1225 | jag | 3715 | for (int i = 0; i < 4; ++i) { |
1901 | jag | 3716 | if (&b == snaps[i]) { |
1900 | jag | 3717 | CRVED->set_snap (xs[i], ys[i]); |
964 | jag | 3718 | cons << YELLOW << mesgs[i] << eol; |
1225 | jag | 3719 | break; |
964 | jag | 3720 | } |
3721 | } |
||
3722 | } |
||
3723 | |||
2222 | jag | 3724 | void snap_listener::changed (checkbutton& cb) { |
3725 | toggle (CRVED->draww.snaps, basic_editor::drawt::snapss); |
||
3726 | } |
||
3727 | |||
3728 | void menu::undoredoviewlis::changed (checkbutton& cb) { |
||
2223 | jag | 3729 | int& urw = CRVED->undo_redo_win; |
3730 | urw = !urw; |
||
3731 | static const char* urws[] = {"Wont", "Will"}; |
||
3732 | cons << YELLOW << urws[urw] << " change view on undo or redo" << eol; |
||
2222 | jag | 3733 | } |
3734 | |||
3735 | void menu::drawcursorlis::changed (checkbutton& cb) { |
||
3736 | ::toggle (CRVED->draww.guide, basic_editor::drawt::guides); |
||
3737 | } |
||
3738 | |||
964 | jag | 3739 | void menu::set_mirror_tangents (int i) { |
3740 | const static char* mit [] = {" Tangents are not mirrored", " Tangents are mirrored"}; |
||
3741 | ol_mirror_tangents.option.set_text (mit[i]); |
||
3742 | } |
||
3743 | |||
3744 | void menu::set_repeat (button** B, int n, double dt) { |
||
3745 | for (int i = 0; i < n; ++i) { |
||
3746 | button* bi = B[i]; |
||
3747 | bi->click_repeat = 1; |
||
3748 | bi->first_repeat_time = bi->subsequent_repeat_time = dt; |
||
3749 | } |
||
3750 | } |
||
3751 | |||
3752 | void menu::set_pan_repeat (double dt) { |
||
3753 | button* ab [] = {&abe_left, &abe_right, &abe_up, &abe_down, &abm_left, &abm_right, &abm_up, &abm_down}; |
||
3754 | set_repeat (ab, 8, dt); |
||
3755 | } |
||
3756 | |||
3757 | void menu::set_zoom_repeat (double dt) { |
||
3758 | button* zb [] = {&pb_zoom_in, &mb_zoom_out, &bm_zoom_in, &bm_zoom_out}; |
||
3759 | set_repeat (zb, 4, dt); |
||
3760 | } |
||
3761 | |||
1685 | jag | 3762 | void menu::curve_ops_listener::clicked (button& b) { |
964 | jag | 3763 | int toggle = 1; |
3764 | if (&b == MENUP.b_undo) { |
||
3765 | cons << YELLOW << "You can press z to undo!" << eol; |
||
1128 | jag | 3766 | CRVED->do_undo (); |
964 | jag | 3767 | toggle = 0; |
3768 | } else |
||
3769 | if (&b == MENUP.b_redo) { |
||
3770 | cons << YELLOW << "You can press LSHIFT + z to redo!" << eol; |
||
1128 | jag | 3771 | CRVED->do_redo (); |
964 | jag | 3772 | toggle = 0; |
3773 | } else |
||
3774 | if (&b == MENUP.abl_left) { |
||
1117 | jag | 3775 | cons << YELLOW << "You can press 9 to load previous curve from library" << eol; |
1128 | jag | 3776 | CRVED->do_load_curve (-1); |
964 | jag | 3777 | toggle = 0; |
3778 | } else |
||
3779 | if (&b == MENUP.abl_right) { |
||
1117 | jag | 3780 | cons << YELLOW << "You can press 0 to load next curve from library" << eol; |
1128 | jag | 3781 | CRVED->do_load_curve (+1); |
964 | jag | 3782 | toggle = 0; |
3783 | } |
||
3784 | if (&b == MENUP.b_insert_vertex) { |
||
1128 | jag | 3785 | CRVED->insert_using_menu (); |
964 | jag | 3786 | } else if (&b == MENUP.b_delete_vertex) { |
1128 | jag | 3787 | CRVED->remove_using_menu (); |
1950 | jag | 3788 | } else if (&b == MENUP.b_stop_rotating) { |
3789 | MENU.sp_curve_rpm.set_value (0); |
||
3790 | CRVED->set_rpm (0); |
||
3791 | cons << "Stopped rotating curve" << eol; |
||
3792 | } else if (&b == MENUP.ed_flip_rotation) { |
||
1955 | jag | 3793 | int& dir = CRVED->curveinfo[CRVED->curcrv].dir; |
3794 | dir *= -1; |
||
1950 | jag | 3795 | static const char* cac [] = {"clockwise", "", "anti-clockwise"}; |
1955 | jag | 3796 | cons << "Curve rotation is " << cac[dir+1] << eol; |
1950 | jag | 3797 | } else if (&b == MENUP.ed_autoflip_reset) { |
1955 | jag | 3798 | CRVED->curveinfo[CRVED->curcrv].totang = 0.0f; |
1950 | jag | 3799 | cons << "Autoflip reset on curve rotation" << eol; |
964 | jag | 3800 | } else if (&b == MENUP.b_fold_tangents) { |
1128 | jag | 3801 | CRVED->fold_tangents_using_menu (); |
3802 | } else if (&b == MENUP.ol_mirror.option) { |
||
3803 | CRVED->mirror_using_menu (); |
||
964 | jag | 3804 | } else if (&b == MENUP.b_copy) { |
1128 | jag | 3805 | CRVED->copy_using_menu (); |
2340 | jag | 3806 | } else if (&b == MENUP.ol_paste.option) { |
1128 | jag | 3807 | CRVED->paste_using_menu (); |
3808 | } else if (&b == MENUP.b_swap_curves) { |
||
3809 | CRVED->swap (); |
||
3810 | } else if (&b == MENUP.b_pick_curve) { |
||
3811 | CRVED->do_pick_curve (); |
||
964 | jag | 3812 | } |
3813 | // to library |
||
3814 | else if (&b == MENUP.b_add_curve) { |
||
1128 | jag | 3815 | CRVED->add_curve (); |
964 | jag | 3816 | } else if (&b == MENUP.b_replace_curve) { |
1128 | jag | 3817 | CRVED->replace_curve (); |
964 | jag | 3818 | } else if (&b == MENUP.b_delete_curve) { |
1128 | jag | 3819 | CRVED->delete_curve (); |
964 | jag | 3820 | } else if (&b == MENUP.b_draw_replacement_curve) { |
1128 | jag | 3821 | CRVED->draw_replacement_curve_using_menu (); |
964 | jag | 3822 | } else if (&b == MENUP.b_start_capture) { |
1128 | jag | 3823 | CRVED->start_mouse_capture_from_menu (); |
964 | jag | 3824 | } else if (&b == MENUP.b_assign_capture) { |
1128 | jag | 3825 | CRVED->assign_mouse_capture_from_menu (); |
2125 | jag | 3826 | } else if (&b == MENUP.size_tangent) { |
3827 | CRVED->try_sizing_tangent (); |
||
2219 | jag | 3828 | } else if (&b == MENUP.pinunpin) { |
3829 | CRVED->pinunpin_using_menu (); |
||
964 | jag | 3830 | } |
1784 | jag | 3831 | if (toggle) TOGGLEMENU |
964 | jag | 3832 | } |
3833 | |||
2122 | jag | 3834 | void menu::curve_ops_listener::moused (int dir, double scl) { |
2125 | jag | 3835 | CRVED->size_tangent (dir * scl); |
2122 | jag | 3836 | } |
3837 | |||
1685 | jag | 3838 | void menu::curve_ops_listener::changed (checkbutton& cb) { |
1117 | jag | 3839 | int tog = 0; |
1950 | jag | 3840 | int cbstate = cb.state; |
3841 | if (&cb == MENUP.cb_ed_autoflip) { |
||
1955 | jag | 3842 | curve_info& ci = CRVED->curveinfo[CRVED->curcrv]; |
3843 | ci.autoflip = cbstate; |
||
3844 | ci.totang = 0.0f; |
||
1957 | jag | 3845 | } else if (&cb == MENUP.sp_curve_every.variance.cb) { |
3846 | curve_info& ci = CRVED->curveinfo[CRVED->curcrv]; |
||
1958 | jag | 3847 | ci.randoflip = cbstate; |
1950 | jag | 3848 | } else if (&cb == MENUP.cb_mark_segments) { |
2126 | jag | 3849 | CRVED->marksegments = cbstate; |
964 | jag | 3850 | } else if (&cb == MENUP.cb_label_vertices) { |
1950 | jag | 3851 | CRVED->label_vertices = cbstate; |
964 | jag | 3852 | } else if (&cb == MENUP.cb_show_waveform_samples) { |
1128 | jag | 3853 | CRVED->toggle_waveform_samples_display (); |
964 | jag | 3854 | } else if (&cb == MENUP.cb_draw_curve) { |
2126 | jag | 3855 | CRVED->drawcurve = cbstate; |
3856 | } else if (&cb == MENUP.draweditables) { |
||
3857 | CRVED->draweditables = cbstate; |
||
1071 | jag | 3858 | } else { |
1950 | jag | 3859 | CRVED->overlay = cbstate; |
1117 | jag | 3860 | string n (get_current_instrument()->name); |
1950 | jag | 3861 | if (cbstate) |
1117 | jag | 3862 | cons << GREEN << "Overlaid the " << n << eol; |
3863 | else |
||
3864 | cons << RED << "Removed " << n << " from overlay." << eol; |
||
3865 | tog = 1; |
||
1071 | jag | 3866 | } |
1784 | jag | 3867 | if (tog) TOGGLEMENU |
964 | jag | 3868 | } |
3869 | |||
1685 | jag | 3870 | void menu::curve_ops_listener::changed (field& f) { |
1959 | jag | 3871 | if (&f == MENUP.sp_curve_rpm.f_value) { |
2103 | jag | 3872 | CRVED->set_rpm (MENU.sp_curve_rpm.value); |
1950 | jag | 3873 | } else if (&f == MENUP.sp_curve_every.f_value) { |
1955 | jag | 3874 | curve_info& ci = CRVED->curveinfo[CRVED->curcrv]; |
2103 | jag | 3875 | ci.every0 = MENU.sp_curve_every.value; |
1958 | jag | 3876 | ci.every = ci.every0.deg; |
1950 | jag | 3877 | static const char* ae = "Autoflip every ", *deg = DEGREES; |
1958 | jag | 3878 | cons << ae << ci.every0.deg << deg << eol; |
1959 | jag | 3879 | } else if (&f == MENUP.sp_curve_every.variance.fld) { |
3880 | curve_info& ci = CRVED->curveinfo[CRVED->curcrv]; |
||
3881 | ci.rd = MENU.sp_curve_every.variance.rd; |
||
2039 | jag | 3882 | } else if (&f == MENUP.crvwav.hz.f_value) { |
2106 | jag | 3883 | CRVED->set_hz (MENU.crvwav.hz.value); |
2039 | jag | 3884 | } else if (&f == MENUP.crvwav.periods.f_value) { |
2106 | jag | 3885 | CRVED->set_periods (MENU.crvwav.periods.value); |
2039 | jag | 3886 | } else if (&f == MENUP.crvwav.time.f_value) { |
2106 | jag | 3887 | curve_samples::nsec = MENU.crvwav.time.value; |
964 | jag | 3888 | } else if (&f == MENUP.sp_curve_limit.f_value) { |
2106 | jag | 3889 | CRVED->set_limit (MENU.sp_curve_limit.value); |
964 | jag | 3890 | } else { |
3891 | if (f.text == "") f.set_text ("nameless"); |
||
1128 | jag | 3892 | CRVED->set_picked_curve_name (f.text); |
1945 | jag | 3893 | vector<widget*>& tc = MENU.tab_members [MENUP.cb_ed_curves]; |
3894 | widget* wcc = tc [1 + CRVED->curcrv]; // 0 = separator |
||
3895 | checkbutton* cb = dynamic_cast<checkbutton*>(wcc); |
||
3896 | cb->set_text (f.text); |
||
964 | jag | 3897 | } |
3898 | } |
||
3899 | |||
2121 | jag | 3900 | void menu::curve_ops_listener::after_slide () { |
2122 | jag | 3901 | CRVED->quick_nothing (); |
2121 | jag | 3902 | } |
964 | jag | 3903 | |
3904 | void recording_listener::typing (field& f) { |
||
3905 | string fname (recorder0.folder + f.text); |
||
3906 | string cmd ("file exists " + fname); |
||
3907 | interpreter (cmd); int result; stringstream ss; ss << interpreter.result; ss >> result; |
||
1120 | jag | 3908 | if (result) MENU.b_save.set_text ("Overwrite"); else MENU.b_save.set_text ("Save"); |
964 | jag | 3909 | recorder0.fname = f.text; |
3910 | } |
||
3911 | |||
3912 | void recording_listener::changed (checkbutton& cb) { |
||
3913 | int state = cb.state; |
||
3914 | if (state == 0) { // show recording save section of file menu |
||
3915 | MENU.changed (MENU.cb_file); |
||
1784 | jag | 3916 | if (MENU.show == 0) TOGGLEMENU |
964 | jag | 3917 | } else { // close file menu |
1784 | jag | 3918 | if (MENU.show == 1) TOGGLEMENU |
964 | jag | 3919 | } |
2146 | jag | 3920 | justset (uis.cb_record, state); |
3921 | justset (MENU.cb_record, state); |
||
964 | jag | 3922 | } |
3923 | |||
3924 | void mondrian_listener::handle_split (int& var, int dir, float t) { |
||
3925 | switch (var) { |
||
3926 | case 0: // into 2 boxes |
||
3927 | mondrian0.split_rect (dir, t); |
||
3928 | break; |
||
3929 | case 1: // into notes |
||
3930 | mondrian0.multi_split_rect (dir); |
||
3931 | break; |
||
3932 | case 2: // into n x n grid |
||
3933 | mondrian0.multi_split_rect (mondrian0.num_boxes, dir); |
||
3934 | } |
||
3935 | } |
||
3936 | |||
3937 | void mondrian_listener::clicked (button& b) { |
||
3938 | int toggle = 1; |
||
3939 | if (&b == MENUP.b_split_horizontal) handle_split (hsplit, split::HORIZONTAL, mondrian0.win.mousey); |
||
3940 | else if (&b == MENUP.b_split_vertical) handle_split (vsplit, split::VERTICAL, mondrian0.win.mousex); |
||
3941 | else if (&b == MENUP.b_add_balls) mondrian0.do_add_balls (mondrian0.added_ball_type); |
||
3942 | else if (&b == MENUP.b_add_remove_slits) mondrian0.start_slitting (); |
||
3943 | else if (&b == MENUP.b_modulate_balls_up) {if (!mondrian0.modulate_balls (+1)) cons << RED << "Please select some balls!" << eol;} |
||
3944 | else if (&b == MENUP.b_modulate_balls_down) {if (!mondrian0.modulate_balls (-1)) cons << RED << "Please select some balls!" << eol;} |
||
3945 | else if (&b == MENUP.b_select_all_targets) {mondrian0.select_all_targets ();toggle=0;} |
||
3946 | else if (&b == MENUP.b_invert_selected_targets) {mondrian0.invert_selected_targets ();toggle=0;} |
||
3947 | else if (&b == MENUP.b_select_targets_in_box) {mondrian0.select_box_targets ();toggle=0;} |
||
3948 | else if (&b == MENUP.b_delete_box) mondrian0.delete_current_rect (); |
||
3949 | else if (&b == MENUP.b_delete_all_boxes) mondrian0.delete_all_rects = 1; |
||
3950 | else if (&b == MENUP.b_freeze_balls) mondrian0.freeze_balls (mondrian0.get_balls()); |
||
3951 | else if (&b == MENUP.b_thaw_balls) mondrian0.thaw_balls (mondrian0.get_balls()); |
||
3952 | else if (&b == MENUP.b_delete_all_targets) mondrian0.delete_all_targets (); |
||
3953 | else if (&b == MENUP.b_delete_selected_targets) mondrian0.delete_selected_targets (); |
||
3954 | else if (&b == MENUP.b_move_selected_balls) mondrian0.do_move_balls (); |
||
3955 | else if (&b == MENUP.b_toggle_wreckers) mondrian0.toggle_balls_type (ball::WRECKER); |
||
3956 | else if (&b == MENUP.b_toggle_healers) mondrian0.toggle_balls_type (ball::HEALER); |
||
3957 | else if (&b == MENUP.b_toggle_bouncers) mondrian0.toggle_balls_type (ball::BOUNCER); |
||
3958 | else if (&b == MENUP.b_switch_ball_type) mondrian0.switch_balls_type (); |
||
3959 | else if (&b == MENUP.b_select_wreckers) mondrian0.select_type (ball::WRECKER); |
||
3960 | else if (&b == MENUP.b_select_healers) mondrian0.select_type (ball::HEALER); |
||
3961 | else if (&b == MENUP.b_remove_slits_on_edge) mondrian0.remove_slits_on_current_edge (); |
||
3962 | else if (&b == MENUP.b_toggle_slit_anim) mondrian0.toggle_slit_anim (); |
||
3963 | else if (&b == MENUP.b_clear_modulations) mondrian0.clear_modulations (mondrian0.get_balls()); |
||
3964 | else if (&b == MENUP.b_auto_change_direction_clockwise) {mondrian0.set_auto_rotate (-1);} |
||
3965 | else if (&b == MENUP.b_auto_change_direction_anti_clockwise) {mondrian0.set_auto_rotate (1);} |
||
3966 | else if (&b == MENUP.b_stop_auto_changing_direction) {mondrian0.set_auto_rotate (0);} |
||
3967 | else if (&b == MENUP.b_flip_direction) {mondrian0.flip_velocity();} |
||
3968 | else if (&b == MENUP.b_make_random_color) mondrian0.randomise_box_color(); |
||
3969 | else if (&b == MENUP.b_make_note_grid) mondrian0.make_note_grid (); |
||
3970 | else if (&b == MENUP.b_make_nxn_grid) mondrian0.make_nxn_grid (); |
||
1423 | jag | 3971 | else if (&b == MENUP.b_ball_trig) mondrian0.toggle_triggered_sound (); |
964 | jag | 3972 | else if (&b == MENUP.abm_left) {mondrian0.do_panx (1); toggle=0;} |
3973 | else if (&b == MENUP.abm_right) {mondrian0.do_panx (-1); toggle=0;} |
||
3974 | else if (&b == MENUP.abm_up) {mondrian0.do_pany (+1);toggle=0;} |
||
3975 | else if (&b == MENUP.abm_down) {mondrian0.do_pany (-1); toggle=0;} |
||
3976 | else if (&b == MENUP.bm_zoom_in) {mondrian0.do_zoom(-1); toggle=0;} |
||
3977 | else if (&b == MENUP.bm_zoom_out) {mondrian0.do_zoom(+1); toggle=0;} |
||
1784 | jag | 3978 | if (toggle) TOGGLEMENU |
964 | jag | 3979 | } |
3980 | |||
3981 | void mondrian_listener::changed (checkbutton& cb) { |
||
3982 | if (&cb == MENUP.cb_auto_split_box) { |
||
3983 | mondrian0.auto_split_rect.active = cb.state; |
||
1887 | jag | 3984 | if (cb.state) mondrian0.auto_split_rect.start (); |
964 | jag | 3985 | } else if (&cb == MENUP.cb_auto_delete_box) { |
3986 | mondrian0.auto_del_rect.active = cb.state; |
||
1887 | jag | 3987 | if (cb.state) mondrian0.auto_del_rect.start (); |
964 | jag | 3988 | } else if (&cb == MENUP.cb_draw_boxes) { |
3989 | mondrian0.draw__boxes = cb.state; |
||
3990 | } else if (&cb == MENUP.cb_fill_boxes) { |
||
3991 | mondrian0.fill_boxes = cb.state; |
||
3992 | } else if (&cb == MENUP.cb_draw_notes) { |
||
3993 | mondrian0.draw__notes = cb.state; |
||
3994 | } else if (&cb == MENUP.cb_label_notes) { |
||
3995 | mondrian0.label_notes = cb.state; |
||
3996 | } else if (&cb == MENUP.cb_label_hz_vol) { |
||
3997 | mondrian0.label_hz_vol = cb.state; |
||
3998 | } else if (&cb == MENUP.cb_draw_ball_position) { |
||
3999 | mondrian0.draw_ball.position = cb.state; |
||
4000 | } else if (&cb == MENUP.cb_draw_ball_heading) { |
||
4001 | mondrian0.draw_ball.heading = cb.state; |
||
4002 | } else if (&cb == MENUP.cb_draw_ball_trails) { |
||
4003 | mondrian0.draw_ball.trails = cb.state; |
||
4004 | } else if (&cb == MENUP.cb_mondrian_auto_adjust_voices) { |
||
4005 | mondrian0.auto_adjust_voices = cb.state; |
||
4006 | } |
||
4007 | } |
||
4008 | |||
4009 | void ball_speed_listener::changed (field& f) { |
||
1063 | jag | 4010 | mondrian0.change_speed (MENU.sp_mondrian_change_speed, MENU.sp_mondrian_change_speed.dir_delta ()); |
964 | jag | 4011 | } |
4012 | |||
4013 | void ball_direction_listener::changed (field& f) { |
||
1063 | jag | 4014 | mondrian0.rotate_velocity (MENU.sp_mondrian_change_dir.dir); |
964 | jag | 4015 | } |
4016 | |||
4017 | void ball_volume_listener::changed (field& f) { |
||
1069 | jag | 4018 | mondrian0.change_ball_vol_mult (MENU.sp_mondrian_change_vol); |
964 | jag | 4019 | } |
4020 | |||
4021 | void trail_length_listener:: changed (field& f) { |
||
1063 | jag | 4022 | mondrian0.change_trail_size (MENU.sp_mondrian_change_trail_size); |
964 | jag | 4023 | } |
4024 | |||
1063 | jag | 4025 | void ball_attack_time_listener:: changed (field& f) { |
4026 | mondrian0.change_attack_time_kb (MENU.sp_mondrian_change_attack_time); |
||
964 | jag | 4027 | } |
4028 | |||
1063 | jag | 4029 | void ball_decay_time_listener:: changed (field& f) { |
4030 | mondrian0.change_decay_time_kb (MENU.sp_mondrian_change_decay_time); |
||
964 | jag | 4031 | } |
4032 | |||
4033 | void slit_size_listener:: changed (field& f) { |
||
1063 | jag | 4034 | mondrian0.change_slit_size (MENU.sp_mondrian_change_slit_size); |
964 | jag | 4035 | } |
4036 | |||
4037 | void slit_anim_time_listener:: changed (field& f) { |
||
1063 | jag | 4038 | mondrian0.change_slit_anim_time (MENU.sp_mondrian_change_slit_anim_time); |
964 | jag | 4039 | } |
4040 | |||
4041 | void note_poly_radius_listener::changed (field& f) { |
||
2109 | jag | 4042 | mondrian0.set_note_poly_radius (MENU.sp_mondrian_change_note_poly_radius.value); |
964 | jag | 4043 | } |
4044 | |||
4045 | void note_poly_points_listener::changed (field& f) { |
||
2109 | jag | 4046 | mondrian0.set_note_poly_points (MENU.sp_mondrian_change_note_poly_points.value); |
964 | jag | 4047 | } |
4048 | |||
4049 | void mondrian_listener::changed (field& f) { |
||
2109 | jag | 4050 | |
4051 | if (&f == MENUP.sp_mondrian_change_speed.f_delta) { |
||
4052 | float ds = MENU.sp_mondrian_change_speed.value; |
||
4053 | mondrian0.delta_speed = ds; |
||
4054 | } else if (&f == MENUP.sp_mondrian_min_voices.f_value) { |
||
4055 | int v = MENU.sp_mondrian_min_voices.value; |
||
4056 | mondrian0.min_voices = v; |
||
964 | jag | 4057 | uis.update_bottom_line (); |
4058 | cons << YELLOW << "Min voices = " << mondrian0.min_voices << eol; |
||
4059 | } else if (&f == MENUP.sp_mondrian_num_boxes.f_value) { |
||
2109 | jag | 4060 | mondrian0.num_boxes = MENU.sp_mondrian_num_boxes.value; |
964 | jag | 4061 | cons << YELLOW << "Number of boxes = " << mondrian0.num_boxes << eol; |
4062 | } else if (&f == MENUP.sp_auto_split_time.f_value) { |
||
2109 | jag | 4063 | float t = MENU.sp_auto_split_time.value; |
4064 | mondrian0.auto_split_rect.triggert = t; |
||
4065 | cons << YELLOW << "Split box every = " << t << " secs" << eol; |
||
964 | jag | 4066 | } else if (&f == MENUP.sp_auto_delete_time.f_value) { |
2109 | jag | 4067 | float t = MENU.sp_auto_delete_time.value; |
4068 | mondrian0.auto_del_rect.triggert = t; |
||
4069 | cons << YELLOW << "Delete box every = " << t << " secs" << eol; |
||
964 | jag | 4070 | } else { |
2109 | jag | 4071 | int mss = MENU.sp_min_split_size.value; |
4072 | mondrian::min_split_size = mss; |
||
4073 | cons << YELLOW << "Min split size = " << mss << eol; |
||
964 | jag | 4074 | } |
4075 | } |
||
4076 | |||
4077 | void mondrian_listener::handle_auto_pick_box (options_list& ol, int dir, int& v) { |
||
4078 | v += dir; |
||
4079 | wrap<int> (rect::EARLIEST, v, rect::BALLED); |
||
4080 | ol.set_text (pick_box_types[v]); |
||
4081 | } |
||
4082 | |||
4083 | void mondrian_listener::picked (label& lbl, int dir) { |
||
4084 | if (&lbl == MENUP.ol_auto_pick_box_split.option) { |
||
4085 | handle_auto_pick_box (MENU.ol_auto_pick_box_split, dir, mondrian0.split_leaf); |
||
4086 | } else if (&lbl == MENUP.ol_auto_pick_box_delete.option) { |
||
4087 | handle_auto_pick_box (MENU.ol_auto_pick_box_delete, dir, mondrian0.delete_leaf); |
||
4088 | } else if (&lbl == MENUP.ol_auto_split_at.option) { |
||
4089 | mondrian0.auto_split_at += dir; |
||
4090 | if (mondrian0.auto_split_at < split::NOTES) mondrian0.auto_split_at = split::ANYWHERE; |
||
4091 | else if (mondrian0.auto_split_at > split::ANYWHERE) mondrian0.auto_split_at = split::NOTES; |
||
4092 | MENU.ol_auto_split_at.set_text (auto_split_at_types [mondrian0.auto_split_at]); |
||
4093 | } else if (&lbl == MENUP.ol_auto_split_orient.option) { |
||
4094 | mondrian0.auto_split_orient += dir; |
||
4095 | if (mondrian0.auto_split_orient < split::HORIZONTAL) mondrian0.auto_split_orient = split::BOTH; |
||
4096 | else if (mondrian0.auto_split_orient > split::BOTH) mondrian0.auto_split_orient = split::HORIZONTAL; |
||
4097 | MENU.ol_auto_split_orient.set_text (auto_split_orient_types [mondrian0.auto_split_orient]); |
||
4098 | } else if (&lbl == MENUP.ol_ball_types.option) { |
||
4099 | mondrian0.added_ball_type += dir; |
||
4100 | if (mondrian0.added_ball_type < ball::BOUNCER) |
||
4101 | mondrian0.added_ball_type = ball::HEALER; |
||
4102 | else if (mondrian0.added_ball_type > ball::HEALER) |
||
4103 | mondrian0.added_ball_type = ball::BOUNCER; |
||
4104 | MENU.ol_ball_types.set_text (ball::types_str[mondrian0.added_ball_type]); |
||
4105 | } else if (&lbl == MENUP.ol_split_types_h.option) { |
||
4106 | hsplit += dir; |
||
4107 | check_split_type (MENU.ol_split_types_h, hsplit); |
||
4108 | } else if (&lbl == MENUP.ol_split_types_v.option) { |
||
4109 | vsplit += dir; |
||
4110 | check_split_type (MENU.ol_split_types_v, vsplit); |
||
4111 | } else if (&lbl == MENUP.ol_selection_targets.option) { |
||
4112 | mondrian0.clear_selected_targets (); |
||
4113 | mondrian0.sel_tar = !mondrian0.sel_tar; |
||
4114 | MENU.ol_selection_targets.set_text (selection_targets[mondrian0.sel_tar]); |
||
4115 | static const char* bb [] = {"Select all balls", "Select balls in box", "Invert selected balls", "Delete all balls", "Delete selected balls"}; |
||
4116 | static const char* bs [] = {"Select all slits", "Select slits in box", "Invert selected slits", "Remove all slits", "Remove selected slits"}; |
||
4117 | const char** pb [] = {bs, bb}; |
||
4118 | button* bt [] = { |
||
4119 | MENUP.b_select_all_targets, MENUP.b_select_targets_in_box, |
||
4120 | MENUP.b_invert_selected_targets, MENUP.b_delete_all_targets, |
||
4121 | MENUP.b_delete_selected_targets |
||
4122 | }; |
||
4123 | const char** cb = pb[mondrian0.sel_tar]; |
||
1120 | jag | 4124 | for (int i = 0; i < 5; ++i) bt[i]->set_text (cb[i]); |
964 | jag | 4125 | } |
4126 | } |
||
4127 | |||
4128 | void mondrian_listener::check_split_type (options_list& ol, int& o) { |
||
4129 | if (o < 0) o = MAX_SPLIT_TYPES; else if (o > MAX_SPLIT_TYPES) o = 0; |
||
4130 | ol.set_text (split_types[o]); |
||
4131 | } |
||
4132 | |||
4133 | |||
4134 | binaural_drones_listener::binaural_drones_listener () : select_rule (GREATER_THAN_EQUAL), select_what (0) { |
||
4135 | val[EQUAL] = "0"; |
||
4136 | val[GREATER_THAN_EQUAL] = val[LESSER_THAN_EQUAL]= "100"; |
||
4137 | val[ID] = "1 2 1"; |
||
4138 | val[RANGE] = "100 200"; |
||
4139 | just = binaural_drone::CENTER; |
||
4140 | } |
||
4141 | |||
4142 | void binaural_drones_listener::changed (field& f) { |
||
2110 | jag | 4143 | float v = float (f); |
964 | jag | 4144 | if (&f == MENUP.lf_bd_start_pitch.fld) { |
4145 | binaural_drones0.starting_pitch = v; |
||
4146 | } else if (&f == MENUP.lf_master_volume.fld) { |
||
4147 | float ov = binaural_drones0.master_volume * 100.0f; |
||
4148 | float mv = v / 100.0f; |
||
4149 | binaural_drones0.master_volume = mv; |
||
4150 | stringstream cmd; |
||
4151 | cmd << "set-all-binaurals-volume " << mv; |
||
4152 | interpreter (cmd.str()); |
||
4153 | sprintf (BUFFER, "Master Volume from %0.2f%% to %0.2f%% : please wait or ESC to abort", ov, v); |
||
4154 | cons << YELLOW << BUFFER << eol; |
||
4155 | } else if (&f == MENUP.lf_vol_fade_time.fld) { |
||
4156 | binaural_drones0.vol_fader.set_duration (v); |
||
4157 | } else if (&f == MENUP.lf_pitch_fade_time.fld) { |
||
4158 | binaural_drones0.pitch_fader.set_duration (v); |
||
4159 | } else if (&f == MENUP.lf_modulation_amount.fld) { |
||
4160 | if (v < 1.0f) { |
||
4161 | v = 1.0f; |
||
4162 | MENU.lf_modulation_amount.fld.set_text (v); |
||
4163 | } |
||
4164 | binaural_drones0.modulation_amount = v; |
||
4165 | } else if (&f == MENUP.lf_bd_spacing.fld) { |
||
4166 | binaural_drones0.spacing = v; |
||
4167 | } else if (&f == MENUP.bdf_value) { |
||
4168 | val[select_rule] = MENU.bdf_value.text; |
||
4169 | MENU.bdl.clicked (MENU.bbd_select2); |
||
4170 | } else if (&f == MENUP.lf_vol.fld) { |
||
4171 | float vp = v / 100.0f; |
||
4172 | sprintf (BUFFER, "set-selected-binaurals-volume %f", vp); |
||
4173 | interpreter (BUFFER); |
||
4174 | } else if (&f == MENUP.lf_l.fld) { |
||
4175 | set_hz (binaural_drone::LEFT, v); |
||
4176 | } else if (&f == MENUP.lf_r.fld) { |
||
4177 | set_hz (binaural_drone::RIGHT, v); |
||
4178 | } else if (&f == MENUP.lf_sep.fld) { |
||
4179 | int j = 0; |
||
4180 | for (int i = 0; i < MENU.il_binaural_drones.n; ++i) { |
||
1532 | jag | 4181 | if (MENU.il_binaural_drones.items[i].sel) { |
964 | jag | 4182 | binaural_drone* bi = binaural_drones0.binaural_drones[i]; |
4183 | bi->set_sep (v); |
||
4184 | ++j; |
||
4185 | } |
||
4186 | } |
||
4187 | if (j) |
||
4188 | binaural_drones0.pitch_fader.start ("Separation Hz set"); |
||
4189 | else |
||
4190 | cons << RED << "Please select some binaural drone pairs" << eol; |
||
4191 | } |
||
4192 | } |
||
4193 | |||
4194 | void binaural_drones_listener::set_hz (int w, float v) { |
||
4195 | |||
4196 | int n = MENU.il_binaural_drones.num_selected (); |
||
4197 | if (n == 0) { |
||
4198 | cons << RED << "Please select some binaural drone pairs" << eol; |
||
4199 | return; |
||
4200 | } |
||
4201 | |||
4202 | if (n == 1) { |
||
4203 | int i = MENU.il_binaural_drones.get_first (); |
||
4204 | binaural_drone* bi = binaural_drones0.binaural_drones[i]; |
||
4205 | bi->set_hz (w, v); // v is absolute |
||
4206 | binaural_drones0.pitch_fader.start ("Hz set"); |
||
4207 | } else { |
||
4208 | for (int i = 0; i < MENU.il_binaural_drones.n; ++i) { |
||
1532 | jag | 4209 | if (MENU.il_binaural_drones.items[i].sel) { |
964 | jag | 4210 | binaural_drone* bi = binaural_drones0.binaural_drones[i]; |
4211 | float ohz [] = {bi->l_hz, bi->r_hz}; |
||
4212 | bi->set_hz (w, ohz[w] + v); // v is relative |
||
4213 | } |
||
4214 | } |
||
4215 | binaural_drones0.pitch_fader.start ("Hz change"); |
||
4216 | } |
||
4217 | } |
||
4218 | |||
4219 | void binaural_drones_listener::picked (label& lbl, int dir) { |
||
4220 | if (&lbl == MENUP.ol_justification.option) { |
||
4221 | int j = binaural_drones0.change_justification (dir); |
||
4222 | MENU.ol_justification.set_text (justs[j]); |
||
4223 | } else if (&lbl == MENUP.ol_key_note.option) { |
||
4224 | int k = binaural_drones0.change_key_note (dir); |
||
4225 | const string kn [] = {"start pitch", "from scale"}; |
||
4226 | MENU.ol_key_note.set_text (" Key note is " + kn[k]); |
||
4227 | } else if (&lbl == MENUP.ol_select_what.option) { |
||
4228 | select_what += dir; |
||
4229 | wrap<int> (binaural_drone::LEFT, select_what, binaural_drone::VOLUME); |
||
4230 | const string sc [] = {"L ", "R ", "Separation ", "Volume "}; |
||
4231 | MENU.ol_select_what.set_text (sc[select_what]); |
||
4232 | MENU.ol_select_rule.set_pos (MENU.ol_select_what.extents.right, MENU.ol_select_rule.posy); |
||
4233 | MENU.bdf_value.set_pos (MENU.ol_select_rule.extents.right, MENU.bdf_value.posy); |
||
4234 | } else if (&lbl == MENUP.ol_select_rule.option) { |
||
4235 | select_rule += dir; |
||
4236 | wrap<int> (EQUAL, select_rule, ID); |
||
4237 | const string sr [] = {" = ", " >= ", " <= ", " <> ", " id "}; |
||
4238 | MENU.ol_select_rule.set_text (sr[select_rule]); |
||
4239 | MENU.bdf_value.set_text (val[select_rule]); |
||
4240 | MENU.bdf_value.set_pos (MENU.ol_select_rule.extents.right, MENU.bdf_value.posy); |
||
4241 | } else if (&lbl == MENUP.ol_just.option) { |
||
4242 | just += dir; |
||
4243 | wrap<int> (binaural_drone::LEFT, just, binaural_drone::CENTER); |
||
4244 | MENU.ol_just.set_text (justs[just]); |
||
4245 | for (int i = 0; i < MENU.il_binaural_drones.n; ++i) { |
||
1532 | jag | 4246 | if (MENU.il_binaural_drones.items[i].sel) { |
964 | jag | 4247 | binaural_drone* bi = binaural_drones0.binaural_drones[i]; |
4248 | bi->set_just (just); |
||
4249 | } |
||
4250 | } |
||
4251 | } |
||
4252 | } |
||
4253 | |||
4254 | void binaural_drones_listener::selected (item_list& il, int s) { |
||
4255 | int ns = il.num_selected (); |
||
4256 | if (ns == 1) { |
||
1301 | jag | 4257 | binaural_drone* bs = binaural_drones0.binaural_drones[il.get_first()]; |
964 | jag | 4258 | bs->sel = 1; |
4259 | sprintf (BUFFER, "%0.3f", bs->vol*100.0); |
||
4260 | MENU.lf_vol.set_text (BUFFER); |
||
4261 | sprintf (BUFFER, "%0.3f", bs->l_hz); |
||
4262 | MENU.lf_l.set_text (BUFFER); |
||
4263 | sprintf (BUFFER, "%0.3f", bs->r_hz); |
||
4264 | MENU.lf_r.set_text (BUFFER); |
||
4265 | sprintf (BUFFER, "%0.3f", bs->sep); |
||
4266 | MENU.lf_sep.set_text (BUFFER); |
||
4267 | MENU.lf_l.set_label ("L (Hz) "); |
||
4268 | MENU.lf_r.set_label ("R (Hz) "); |
||
4269 | just = bs->just; |
||
4270 | MENU.ol_just.set_text (justs[just]); |
||
4271 | } else { |
||
4272 | if (ns) { |
||
4273 | MENU.lf_l.set_label ("dL (Hz) "); |
||
4274 | MENU.lf_r.set_label ("dR (Hz) "); |
||
4275 | } |
||
4276 | MENU.lf_vol.fld.set_text (0.0f); |
||
4277 | MENU.lf_l.fld.set_text (0.0f); |
||
4278 | MENU.lf_r.fld.set_text (0.0f); |
||
4279 | MENU.lf_sep.fld.set_text (0.0f); |
||
4280 | just = binaural_drone::CENTER; |
||
4281 | MENU.ol_just.set_text (justs[just]); |
||
4282 | for (int i = 0, n = il.n; i < n; ++i) { |
||
4283 | binaural_drone* bi = binaural_drones0.binaural_drones[i]; |
||
1532 | jag | 4284 | bi->sel = il.items[i].sel; |
964 | jag | 4285 | } |
4286 | } |
||
4287 | cons << GREEN << "Selected " << ns << " binaural drone pairs" << eol; |
||
4288 | } |
||
4289 | |||
4290 | void binaural_drones_listener::changed (checkbutton& cb) { |
||
4291 | binaural_drones0.close_octave = MENU.cb_close_octave.state; |
||
4292 | } |
||
4293 | |||
4294 | void menu::update_binaurals_list () { |
||
1532 | jag | 4295 | il_binaural_drones.set_pos (cb_file.extents.left, bbd_select_all.extents.bottom); |
964 | jag | 4296 | calc_bg (); |
4297 | } |
||
4298 | |||
4299 | ball_ops_listener::ball_ops_listener () { |
||
4300 | op_id = 0; |
||
4301 | } |
||
4302 | |||
4303 | void ball_ops_listener::picked (label& lbl, int dir) { |
||
1302 | jag | 4304 | if (&lbl == MENUP.ol_browse_balls.option) { |
4305 | mondrian0.browse_ball (dir); |
||
4306 | return; |
||
4307 | } else { |
||
4308 | label* olt [] = {MENUP.ol_bouncer.option, MENUP.ol_wrecker.option, MENUP.ol_healer.option}; |
||
4309 | for (int i = 0; i < 3; ++i) { |
||
4310 | if (&lbl == olt[i]) { |
||
4311 | int& t = Transform::rules [i]; |
||
4312 | t += dir; |
||
4313 | if (t < ball::BOUNCER) t = ball::INVALID; |
||
4314 | else if (t > ball::INVALID) t = ball::BOUNCER; |
||
4315 | sprintf (BUFFER, "%s becomes %s", ball::types_str[i], ball::types_str[t]); |
||
4316 | olt[i]->set_text (BUFFER); |
||
4317 | return; |
||
4318 | } |
||
964 | jag | 4319 | } |
4320 | } |
||
4321 | } |
||
4322 | |||
4323 | void ball_ops_listener::clicked (button& b) { |
||
4324 | } |
||
4325 | |||
4326 | void ball_ops_listener::changed (checkbutton& cb) { |
||
4327 | ball* b = mondrian0.get_one_selected_ball (); |
||
4328 | if (b) { |
||
4329 | ball_op* ops [] = {&b->op_turn, &b->op_speed, &b->op_teleport, &b->op_clone, &b->op_transform}; |
||
4330 | checkbutton* cbn [] = {MENUP.cb_turn, MENUP.cb_speed, MENUP.cb_teleport, MENUP.cb_clone, MENUP.cb_transform}; |
||
4331 | for (int i = 0; i < ball_op::NUM_OPS; ++i) { |
||
4332 | if (&cb == cbn[i]) { |
||
4333 | ball_op* opi = ops[i]; |
||
1310 | jag | 4334 | // if (cb.state) opi->alarm.start (); else opi->alarm.stop (); |
4335 | if (cb.state) opi->start (b); else opi->alarm.stop (); |
||
4336 | |||
964 | jag | 4337 | break; |
4338 | } |
||
4339 | } |
||
4340 | |||
1302 | jag | 4341 | /*if (cb.state && (&cb == MENUP.cb_speed)) { |
964 | jag | 4342 | MENU.sp_max_speed.set_value (b->V); |
4343 | b->op_speed.max = b->V; |
||
1302 | jag | 4344 | }*/ |
964 | jag | 4345 | |
4346 | b->op_clone.clone_can_clone = MENU.cb_clone_can_clone.state; |
||
4347 | |||
4348 | } else { |
||
4349 | cons << RED << "Please select a ball!" << eol; |
||
4350 | } |
||
4351 | } |
||
4352 | |||
4353 | void ball_ops_listener::changed (field& f) { |
||
4354 | if (&f == MENUP.sp_max_balls.f_value) { |
||
2110 | jag | 4355 | int i = MENU.sp_max_balls.value; |
964 | jag | 4356 | Clone::max_balls = i; |
4357 | cons << YELLOW << "Max balls = " << Clone::max_balls << eol; |
||
4358 | } else { |
||
4359 | ball* b = mondrian0.get_one_selected_ball (); |
||
4360 | if (b) { |
||
4361 | if (&f == MENUP.sp_turn_every.f_value) { |
||
2110 | jag | 4362 | float t = MENU.sp_turn_every.value; |
964 | jag | 4363 | b->op_turn.alarm.triggert = t; |
4364 | sprintf (BUFFER, "Turn every %0.3f seconds", t); |
||
4365 | cons << YELLOW << BUFFER << eol; |
||
4366 | } else |
||
4367 | if (&f == MENUP.sp_turn_min.f_value) { |
||
2110 | jag | 4368 | float minn = MENU.sp_turn_min.value, maxx; |
964 | jag | 4369 | if (MENU.cb_turn_sync.state) { |
4370 | maxx = minn; |
||
4371 | MENU.sp_turn_max.set_value (maxx); |
||
4372 | } else maxx = b->op_turn.rd.max; |
||
4373 | b->op_turn.rd.set (-minn, maxx); |
||
4374 | sprintf (BUFFER, "Turn Clockwise upto %0.3f degrees | Anti-clockwise upto %0.3f degrees", minn, maxx); |
||
4375 | cons << YELLOW << BUFFER << eol; |
||
4376 | } else |
||
4377 | if (&f == MENUP.sp_turn_max.f_value) { |
||
2110 | jag | 4378 | float minn, maxx = MENU.sp_turn_max.value; |
964 | jag | 4379 | if (MENU.cb_turn_sync.state) { |
4380 | MENU.sp_turn_min.set_value (maxx); |
||
4381 | minn = -maxx; |
||
4382 | } else minn = b->op_turn.rd.min; |
||
4383 | b->op_turn.rd.set (minn, maxx); |
||
4384 | sprintf (BUFFER, "Turn Clockwise upto %0.3f degrees | Anti-clockwise upto %0.3f degrees", -minn, maxx); |
||
4385 | cons << YELLOW << BUFFER << eol; |
||
4386 | } else |
||
4387 | if (&f == MENUP.sp_speed_min.f_value) { |
||
2110 | jag | 4388 | float minn = MENU.sp_speed_min.value, maxx; |
964 | jag | 4389 | if (MENU.cb_speed_sync.state) { |
4390 | maxx = minn; |
||
4391 | MENU.sp_speed_max.set_value (maxx); |
||
4392 | } else maxx = b->op_speed.rd.max; |
||
4393 | b->op_speed.rd.set (-minn, maxx); |
||
1310 | jag | 4394 | sprintf (BUFFER, "Accelerate = %0.3f | Brake = %0.3f", maxx, minn); |
964 | jag | 4395 | cons << YELLOW << BUFFER << eol; |
4396 | } else |
||
4397 | if (&f == MENUP.sp_speed_max.f_value) { |
||
2110 | jag | 4398 | float minn, maxx = MENU.sp_speed_max.value; |
964 | jag | 4399 | if (MENU.cb_speed_sync.state) { |
4400 | MENU.sp_speed_min.set_value (maxx); |
||
4401 | minn = -maxx; |
||
4402 | } else minn = b->op_speed.rd.min; |
||
4403 | b->op_speed.rd.set (minn, maxx); |
||
4404 | sprintf (BUFFER, "Accelerate = %0.3f | Brake = %0.3f", maxx, -minn); |
||
4405 | cons << YELLOW << BUFFER << eol; |
||
4406 | } else |
||
4407 | if (&f == MENUP.sp_speed_every.f_value) { |
||
2110 | jag | 4408 | float m = MENU.sp_speed_every.value; |
964 | jag | 4409 | b->op_speed.alarm.triggert = m; |
4410 | sprintf (BUFFER, "Speed every %0.3f seconds", m); |
||
4411 | cons << YELLOW << BUFFER << eol; |
||
4412 | } else |
||
4413 | if (&f == MENUP.sp_max_speed.f_value) { |
||
2110 | jag | 4414 | float m = MENU.sp_max_speed.value; |
964 | jag | 4415 | b->op_speed.max = m; |
4416 | sprintf (BUFFER, "Max speed = %0.3f", m); |
||
4417 | cons << YELLOW << BUFFER << eol; |
||
4418 | } else |
||
4419 | if (&f == MENUP.sp_tel_every.f_value) { |
||
2110 | jag | 4420 | float s = MENU.sp_tel_every.value; |
964 | jag | 4421 | b->op_teleport.alarm.triggert = s; |
4422 | sprintf (BUFFER, "Teleport every %0.3f seconds", s); |
||
4423 | cons << YELLOW << BUFFER << eol; |
||
4424 | } else |
||
4425 | if (&f == MENUP.sp_tel_radius.f_value) { |
||
2110 | jag | 4426 | float r = MENU.sp_tel_radius.value; |
964 | jag | 4427 | b->op_teleport.radius = r; |
4428 | sprintf (BUFFER, "Max Teleport distance = %0.3f", r); |
||
4429 | cons << YELLOW << BUFFER << eol; |
||
4430 | } else |
||
4431 | if (&f == MENUP.sp_clone_every.f_value) { |
||
2110 | jag | 4432 | float m = MENU.sp_clone_every.value; |
964 | jag | 4433 | b->op_clone.alarm.triggert = m; |
4434 | sprintf (BUFFER, "Clone every %0.3f seconds", m); |
||
4435 | cons << YELLOW << BUFFER << eol; |
||
4436 | } else |
||
4437 | if (&f == MENUP.sp_max_clones.f_value) { |
||
2110 | jag | 4438 | int i = MENU.sp_max_clones.value; |
964 | jag | 4439 | b->op_clone.n = b->op_clone.max = i; |
4440 | cons << "Max clones = " << i << eol; |
||
4441 | } else |
||
4442 | if (&f == MENUP.sp_clone_offset.f_value) { |
||
2110 | jag | 4443 | float m = MENU.sp_clone_offset.value; |
964 | jag | 4444 | b->op_clone.offset = m; |
4445 | cons << YELLOW << "Clone offset = " << m << eol; |
||
4446 | } else |
||
4447 | if (&f == MENUP.sp_transform_every.f_value) { |
||
2110 | jag | 4448 | float m = MENU.sp_transform_every.value; |
964 | jag | 4449 | b->op_transform.alarm.triggert = m; |
4450 | sprintf (BUFFER, "Transform every %0.3f seconds", m); |
||
4451 | cons << YELLOW << BUFFER << eol; |
||
4452 | } |
||
4453 | } else { |
||
4454 | cons << RED << "Please select a ball! " << eol; |
||
4455 | } |
||
4456 | } |
||
4457 | } |
||
4458 | |||
1768 | jag | 4459 | void arrowlis::changed (field& f) { |
4460 | if (&f == MENUP.dronearrow.shoulder.position.f_value) { |
||
4461 | din0.change_drone_arrow (MENU.dronearrow.shoulder.position, 0); |
||
4462 | } else if (&f == MENUP.dronearrow.shoulder.width.f_value) { |
||
4463 | din0.change_drone_arrow (MENU.dronearrow.shoulder.width, 1); |
||
1499 | jag | 4464 | } else { |
1804 | jag | 4465 | din0.change_drone_arrow (MENU.dronearrow.neck, 2); |
1766 | jag | 4466 | } |
964 | jag | 4467 | } |
4468 | |||
1778 | jag | 4469 | void defarrowlis::changed (field& f) { |
1792 | jag | 4470 | drone::arrowt::U = MENU.dronearrowdefaults.shoulder.position.value; |
4471 | drone::arrowt::V = MENU.dronearrowdefaults.shoulder.width.value; |
||
1804 | jag | 4472 | drone::arrowt::K = MENU.dronearrowdefaults.neck.value; |
2106 | jag | 4473 | /*cons << GREEN << |
1804 | jag | 4474 | "Drone arrow defaults: Neck = " << drone::arrowt::K << |
1792 | jag | 4475 | ", Shoulder pos = " << drone::arrowt::U << |
2106 | jag | 4476 | ", Shoulder width = " << drone::arrowt::V << eol;*/ |
1778 | jag | 4477 | MENU.dronearrowdefaults.arrow.calc (); |
4478 | } |
||
4479 | |||
4480 | void defarrowlis::changed (checkbutton& cb) { |
||
4481 | MENU.dronearrowdefaults.arrow.calc (); |
||
4482 | } |
||
4483 | |||
4484 | void drawrrow::calc () { |
||
4485 | int cap = MENU.dronearrowdefaults.cap.state; |
||
4486 | int n = 12; |
||
4487 | make_arrow (pts, 0, cap, n, x, y, ux, uy, vx, vy, |
||
4488 | MENU.dronearrowdefaults.shoulder.position.value, |
||
4489 | MENU.dronearrowdefaults.shoulder.width.value, |
||
1804 | jag | 4490 | MENU.dronearrowdefaults.neck.value); |
1778 | jag | 4491 | npts = n / 2; |
4492 | } |
||
4493 | |||
4494 | void drone::arrowt::reset () { |
||
4495 | u = MENU.dronearrowdefaults.shoulder.position (); |
||
4496 | v = MENU.dronearrowdefaults.shoulder.width (); |
||
1804 | jag | 4497 | t = MENU.dronearrowdefaults.neck (); |
1778 | jag | 4498 | cap = MENU.dronearrowdefaults.cap.state; |
4499 | } |
||
4500 | |||
1768 | jag | 4501 | void arrowlis::clicked (button& b) { |
4502 | if (&b == MENUP.dronearrow.cap) |
||
4503 | din0.capdronearrows (1); |
||
4504 | else |
||
4505 | din0.capdronearrows (0); |
||
1784 | jag | 4506 | TOGGLEMENU |
1768 | jag | 4507 | } |
4508 | |||
1778 | jag | 4509 | |
4510 | |||
964 | jag | 4511 | void range_defaults_lis::changed (field& f) { |
4512 | if (&f == MENUP.sp_default_width.f_value) { |
||
4513 | extern int WIDTH; |
||
2110 | jag | 4514 | WIDTH = MENU.sp_default_width.value; |
964 | jag | 4515 | cons << "Default Range Width = " << WIDTH << eol; |
4516 | } else { |
||
4517 | extern int HEIGHT; |
||
2110 | jag | 4518 | HEIGHT = MENU.sp_default_height.value; |
964 | jag | 4519 | cons << "Default Range Height = " << HEIGHT << eol; |
4520 | } |
||
4521 | } |
||
4522 | |||
1566 | jag | 4523 | void change_note_listener::moused (int dx, double scl) { |
1607 | jag | 4524 | int dir = sign (dx); |
4525 | din0.change_range_note (id, dir * scl * delta0); |
||
964 | jag | 4526 | } |
4527 | |||
4528 | void change_note_listener::clicked (button& b) { |
||
4529 | if (&b == MENUP.b_change_note_left) { |
||
4530 | mouse_slider0.add (MENUP.cnl); |
||
4531 | } else { |
||
4532 | mouse_slider0.add (MENUP.cnr); |
||
4533 | } |
||
1742 | jag | 4534 | activate_mouse_slider (0, 0); |
964 | jag | 4535 | } |
4536 | |||
1235 | jag | 4537 | void change_note_both_listener::clicked (button& b) { |
4538 | mouse_slider0.add (MENUP.cnl); |
||
4539 | mouse_slider0.add (MENUP.cnr); |
||
1742 | jag | 4540 | activate_mouse_slider (0, 0); |
1235 | jag | 4541 | } |
4542 | |||
1397 | jag | 4543 | void change_note_options_listener::picked (label& lbl, int dir) { |
4544 | if (&lbl == MENUP.ol_change_note.option) { |
||
1400 | jag | 4545 | static const string chg (" Change "), nte ("Note > "); |
1399 | jag | 4546 | din0.dinfo.change_note = !din0.dinfo.change_note; |
1400 | jag | 4547 | if (din0.dinfo.change_note) |
1401 | jag | 4548 | MENU.add_to_tab (MENUP.cb_mkb_ranges, MENUP.ol_change_note_style); |
4549 | else |
||
1400 | jag | 4550 | MENU.remove_from_tab (MENUP.cb_mkb_ranges, MENUP.ol_change_note_style); |
1402 | jag | 4551 | string cn (din_info::cnno[din0.dinfo.change_note]); |
1400 | jag | 4552 | lbl.set_text (chg+cn); |
1401 | jag | 4553 | print_range_info (din0.ranges[din0.dinfo.sel_range]); |
1397 | jag | 4554 | } else { |
4555 | din0.dinfo.change_note_style = !din0.dinfo.change_note_style; |
||
4556 | set (lbl, din0.dinfo.change_note_style); |
||
4557 | } |
||
964 | jag | 4558 | } |
4559 | |||
1397 | jag | 4560 | void change_note_options_listener::set (label& lbl, int v) { |
1402 | jag | 4561 | lbl.set_text (din_info::cnn_opts[v]); |
964 | jag | 4562 | extern scale_info all_notes; |
4563 | scale_info* ptr_si [] = {&din0.scaleinfo, &all_notes}; |
||
4564 | din0.ptr_scaleinfo = ptr_si[v]; |
||
4565 | } |
||
4566 | |||
1685 | jag | 4567 | void menu::pitch_vol_dis_pix_lis::changed (checkbutton& cb) { |
1137 | jag | 4568 | if (&cb == MENUP.cb_pitch_dis) { |
4569 | din0.dinfo.dist.pitch = cb.state; |
||
4570 | } else { |
||
4571 | din0.dinfo.dist.vol = cb.state; |
||
4572 | } |
||
4573 | } |
||
1140 | jag | 4574 | |
1685 | jag | 4575 | void menu::pitch_vol_dis_pix_lis::changed (field& f) { |
2110 | jag | 4576 | din0.dinfo.dist.pix = MENU.sp_lev_sz.value; |
1140 | jag | 4577 | cons << "Pixels per level = " << din0.dinfo.dist.pix << eol; |
4578 | } |
||
1320 | jag | 4579 | |
1742 | jag | 4580 | void prep_drone_xform (mouse_slider_listener* L, int shift = 0, int scalestyle = mouse_slider::scalet::CHANGING) { |
1429 | jag | 4581 | din0.freeze_orbiters (); |
1430 | jag | 4582 | mouse_slider0.add (L); |
1742 | jag | 4583 | activate_mouse_slider (shift, scalestyle); |
1429 | jag | 4584 | } |
4585 | |||
1984 | jag | 4586 | CLICKED_BUTTON (menu, movlis) { |
1679 | jag | 4587 | din0.start_moving_drones (); |
1986 | jag | 4588 | TOGGLEMENU |
1473 | jag | 4589 | } |
4590 | |||
1984 | jag | 4591 | CLICKED_BUTTON (menu, raillis) { |
1985 | jag | 4592 | _SELECTED_DRONES_EXIST_ |
1984 | jag | 4593 | mouse_slider0.add (MENUP.raill1); |
4594 | activate_mouse_slider (); |
||
4595 | } |
||
4596 | |||
4597 | MOUSED (menu, raillis1) { |
||
4598 | din0.rail (dir, scl); |
||
4599 | } |
||
4600 | |||
4601 | AFTER_SLIDE(menu, raillis1) {} |
||
4602 | |||
4603 | CLICKED_BUTTON (menu, strafelis) { |
||
1985 | jag | 4604 | _SELECTED_DRONES_EXIST_ |
1984 | jag | 4605 | mouse_slider0.add (MENUP.strafel1); |
4606 | activate_mouse_slider (); |
||
4607 | } |
||
4608 | |||
4609 | MOUSED (menu, strafelis1) { |
||
4610 | din0.strafe (dir, scl); |
||
4611 | } |
||
4612 | |||
4613 | AFTER_SLIDE(menu, strafelis1) {} |
||
4614 | |||
1666 | jag | 4615 | CLICKED_BUTTON (menu, b_set_xform_center_lis) { |
4616 | din0.calc_drones_centroid (); |
||
1784 | jag | 4617 | TOGGLEMENU |
1611 | jag | 4618 | } |
4619 | |||
1473 | jag | 4620 | CLICKED_BUTTON (menu, b_move_drones_under_gravity_lis) { |
4621 | din0.set_drones_under_gravity (); |
||
1784 | jag | 4622 | TOGGLEMENU |
1473 | jag | 4623 | } |
4624 | |||
1477 | jag | 4625 | CLICKED_BUTTON (menu,b_scale_drones_lis) { |
4626 | MENU.ms_sdl.name = "Scale"; |
||
1628 | jag | 4627 | if (din0.prep_scale_drones ()) { |
4628 | int shift = -2; // for 0.01f scaling, assuming base = 10 on mouse slider |
||
1742 | jag | 4629 | prep_drone_xform (MENUP.ms_sdl, shift, mouse_slider::scalet::CHANGING); |
1628 | jag | 4630 | } else cons << RED_PSD << eol; |
1477 | jag | 4631 | } |
4632 | |||
1429 | jag | 4633 | AFTER_SLIDE (menu,ms_scale_drones_lis) { |
4634 | din0.thaw_orbiters (); |
||
4635 | } |
||
4636 | |||
4637 | MOUSED (menu,ms_scale_drones_lis) { |
||
1628 | jag | 4638 | din0.scale_drones (dir * scl); |
1429 | jag | 4639 | din0.scale_drones (); |
4640 | } |
||
4641 | |||
1430 | jag | 4642 | CLICKED_BUTTON (menu,b_rotate_drones_lis) { |
1477 | jag | 4643 | MENU.ms_rdl.name = "Rotate"; |
1430 | jag | 4644 | if (din0.prep_rotate_drones ()) prep_drone_xform (MENUP.ms_rdl); else cons << RED << "Please select some drones!" << eol; |
4645 | } |
||
4646 | |||
4647 | AFTER_SLIDE (menu,ms_rotate_drones_lis) { |
||
4648 | din0.thaw_orbiters (); |
||
4649 | } |
||
4650 | |||
4651 | MOUSED (menu,ms_rotate_drones_lis) { |
||
1628 | jag | 4652 | din0.angle += (dir * scl * PI_BY_180); |
1430 | jag | 4653 | din0.rotate_drones (); |
4654 | } |
||
4655 | |||
1328 | jag | 4656 | CLICKED_BUTTON (menu,set_to_mesh_rows_lis) { |
1320 | jag | 4657 | MENU.sp_drones_per_pend.set_value (din0.dinfo.rows); |
4658 | MENU.dppl.changed (MENU.sp_drones_per_pend.f_value); |
||
4659 | } |
||
4660 | |||
1328 | jag | 4661 | CLICKED_BUTTON (menu,set_to_mesh_cols_lis) { |
1320 | jag | 4662 | MENU.sp_drones_per_pend.set_value (din0.dinfo.cols); |
4663 | MENU.dppl.changed (MENU.sp_drones_per_pend.f_value); |
||
4664 | } |
||
4665 | |||
1328 | jag | 4666 | CLICKED_CHECKBUTTON (menu,cb_am_bpm_lis) { |
1438 | jag | 4667 | din0.dinfo.mesh_vars.apply_to.am = cb.state; |
1321 | jag | 4668 | din0.dinfo.mesh_vars.apply_to.calc_active (); |
4669 | } |
||
4670 | |||
1328 | jag | 4671 | CLICKED_CHECKBUTTON (menu,cb_fm_bpm_lis) { |
1438 | jag | 4672 | din0.dinfo.mesh_vars.apply_to.fm = cb.state; |
1321 | jag | 4673 | din0.dinfo.mesh_vars.apply_to.calc_active (); |
4674 | } |
||
1323 | jag | 4675 | |
1328 | jag | 4676 | CLICKED_BUTTON(menu,b_set_unset_toggle_lis) { |
1326 | jag | 4677 | if (&b == MENUP.b_toggle) { |
1619 | jag | 4678 | if (din0.dinfo.set_unset_toggle) din0.pos_afx_vel (-1); else din0.snap_drones (-1); |
1326 | jag | 4679 | } else if (&b == MENUP.b_set) { |
1619 | jag | 4680 | if (din0.dinfo.set_unset_toggle) din0.pos_afx_vel (1); else din0.snap_drones (1); |
1326 | jag | 4681 | } else { |
1619 | jag | 4682 | if (din0.dinfo.set_unset_toggle) din0.pos_afx_vel (0); else din0.snap_drones (0); |
1326 | jag | 4683 | } |
1827 | jag | 4684 | TOGGLEMENU |
1326 | jag | 4685 | } |
4686 | |||
1452 | jag | 4687 | VALUE_CHANGED (menu,drones_per_pend_lis) { |
2110 | jag | 4688 | din0.dinfo.mesh_vars.dpp = MENU.sp_drones_per_pend.value; |
1326 | jag | 4689 | cons << "Drones per pendulum = " << din0.dinfo.mesh_vars.dpp << eol; |
4690 | } |
||
1402 | jag | 4691 | |
1436 | jag | 4692 | PICKED_OPTION (menu, ol_fixed_lis) { |
4693 | range& rs = din0.ranges [din0.dinfo.sel_range]; |
||
4694 | rs.fixed += dir; |
||
1802 | jag | 4695 | wrap<int> (range::LEFT, rs.fixed, range::RIGHT); |
1436 | jag | 4696 | MENU.ol_fixed.set_text (ol_fixed_lbls[rs.fixed]); |
4697 | } |
||
4698 | |||
1438 | jag | 4699 | CLICKED_CHECKBUTTON (menu,cb_draw_mesh_lis) { |
4700 | din0.meshh.draw = cb.state; |
||
1784 | jag | 4701 | TOGGLEMENU |
1438 | jag | 4702 | } |
4703 | |||
1469 | jag | 4704 | VALUE_CHANGED (menu,lf_conn_steps_lis) { |
1511 | jag | 4705 | din0.calc_stepz (f.text); |
4706 | cons << YELLOW << "Click connect to connect drones" << eol; |
||
1460 | jag | 4707 | } |
4708 | |||
1512 | jag | 4709 | void menu::lf_conn_steps_lis::typing (field& f) { |
4710 | static const int d = 12; |
||
4711 | MENU.cb_conn_wrap.set_pos (f.extents.right + d, MENU.cb_conn_wrap.posy); |
||
1797 | jag | 4712 | MENU.trackcon.set_pos (MENU.cb_conn_wrap.extents.right + d, MENU.trackcon.posy); |
1512 | jag | 4713 | } |
4714 | |||
1469 | jag | 4715 | CLICKED_CHECKBUTTON (menu, cb_conn_wrap_lis) { |
1511 | jag | 4716 | cons << YELLOW << "Click connect to connect drones" << eol; |
1469 | jag | 4717 | } |
4718 | |||
4719 | CLICKED_BUTTON (menu, b_connect_lis) { |
||
1784 | jag | 4720 | if (din0.connect_drones ()) TOGGLEMENU |
1469 | jag | 4721 | } |
4722 | |||
4723 | CLICKED_BUTTON (menu, b_disconnect_lis) { |
||
1784 | jag | 4724 | if (din0.disconnect_drones ()) TOGGLEMENU |
1469 | jag | 4725 | } |
4726 | |||
1468 | jag | 4727 | void get_color::update_data () { |
4728 | data.clr[0] = color (MENU.s_red_min(), MENU.s_green_min(), MENU.s_blue_min()); |
||
4729 | data.clr[1] = color (MENU.s_red_max(), MENU.s_green_max(), MENU.s_blue_max()); |
||
4730 | } |
||
4731 | |||
1489 | jag | 4732 | SLIDER_CHANGED(menu,sc_color_lis) { |
1468 | jag | 4733 | get_color::update_data (); |
1461 | jag | 4734 | din0.color_selected_drones (); |
1490 | jag | 4735 | MENU.b_close.set_pos (mousex, MENU.b_close.posy); |
1461 | jag | 4736 | } |
4737 | |||
1489 | jag | 4738 | START_SLIDE(menu, ss_color_lis, slider<float>) { |
4739 | if (MENU.b_close.visible == 0) { |
||
1490 | jag | 4740 | DECL_COLOR_SLIDERS |
1489 | jag | 4741 | button& b_close = detach_from_menu (slrs, COLOR_SLIDERS_N, MENU.s_red_max.posx, MENU.s_red_max.posy); |
4742 | LISTEN (b_close, MENUP.cscll) |
||
4743 | } |
||
4744 | } |
||
4745 | |||
4746 | CLICKED_BUTTON(menu, sc_close_lis) { |
||
1490 | jag | 4747 | DECL_COLOR_SLIDERS |
1489 | jag | 4748 | attach_to_menu (slrs, COLOR_SLIDERS_N); |
4749 | } |
||
4750 | |||
1468 | jag | 4751 | PICKED_OPTION(menu,ol_color_lis) { |
4752 | colorer_t& colorer = MENU.colorer; |
||
4753 | colorer += dir; |
||
1472 | jag | 4754 | l.set_text (colorer_t::s_schemes[colorer.i]); |
1468 | jag | 4755 | din0.color_selected_drones (); |
4756 | } |
||
4757 | |||
2340 | jag | 4758 | PICKED_OPTION(menu,ol_paste_lis) { |
4759 | static const char* types [] = {" Paste", " Paste Append"}; |
||
4760 | int& id = MENU.ol_paste.id; |
||
4761 | id = !id; |
||
4762 | MENU.ol_paste.set_text (types[id]); |
||
4763 | } |
||
1998 | jag | 4764 | |
4765 | void menu::initdroneparamtabs (checkbutton& cb) { |
||
4766 | MENU.cb_modulation.set_state (0,0); |
||
1695 | jag | 4767 | MENU.cb_visual.set_state (0,0); |
1675 | jag | 4768 | MENU.cb_motion.set_state (0,0); |
1695 | jag | 4769 | MENU.cb_chuck.set_state (0,0); |
1675 | jag | 4770 | MENU.cb_defaults.set_state (0,0); |
1998 | jag | 4771 | cb.set_state (1, 0); |
1465 | jag | 4772 | } |
1468 | jag | 4773 | |
2027 | jag | 4774 | // |
4775 | // drone params ui |
||
4776 | // |
||
4777 | |||
1998 | jag | 4778 | CLICKED_CHECKBUTTON (menu,cb_modulation_lis) { |
4779 | MENU.initdroneparamtabs (cb); |
||
2276 | jag | 4780 | MENU.set_drone_params_items (9, 33); |
1998 | jag | 4781 | } |
4782 | |||
1465 | jag | 4783 | CLICKED_CHECKBUTTON (menu,cb_motion_lis) { |
1998 | jag | 4784 | MENU.initdroneparamtabs (cb); |
2276 | jag | 4785 | MENU.set_drone_params_items (33, 82); |
1465 | jag | 4786 | } |
1468 | jag | 4787 | |
1675 | jag | 4788 | CLICKED_CHECKBUTTON (menu,cb_defaults_lis) { |
1998 | jag | 4789 | MENU.initdroneparamtabs (cb); |
2286 | jag | 4790 | MENU.set_drone_params_items (82, 127); |
1675 | jag | 4791 | } |
4792 | |||
1695 | jag | 4793 | CLICKED_CHECKBUTTON (menu,cb_chuck_lis) { |
1998 | jag | 4794 | MENU.initdroneparamtabs (cb); |
2286 | jag | 4795 | MENU.set_drone_params_items (127, 135); |
1695 | jag | 4796 | } |
4797 | |||
1465 | jag | 4798 | CLICKED_CHECKBUTTON (menu,cb_visual_lis) { |
1998 | jag | 4799 | MENU.initdroneparamtabs (cb); |
2286 | jag | 4800 | MENU.set_drone_params_items (135, DRONE_PARAMS_N); |
1465 | jag | 4801 | } |
4802 | |||
1481 | jag | 4803 | CLICKED_BUTTON (menu, b_abort_octave_shift_lis) { |
4804 | abort_octave_shift (get_current_instrument()); |
||
4805 | } |
||
4806 | |||
1514 | jag | 4807 | CLICKED_BUTTON (menu, b_arrow_reset_lis) { |
4808 | din0.reset_drone_arrows (); |
||
1499 | jag | 4809 | } |
4810 | |||
1441 | jag | 4811 | void menu::handle_voice_tab_items (const char* viv) { |
4812 | |||
4813 | cb_mkb_voice.set_text (viv); |
||
4814 | |||
4815 | widget* wvoice [] = { |
||
4816 | &sp_am_depth, |
||
4817 | &sp_fm_depth, |
||
4818 | &sp_am_bpm, |
||
4819 | &sp_fm_bpm, |
||
4820 | &ol_am_style, |
||
4821 | &ol_fm_style, |
||
4822 | }; |
||
4823 | |||
4824 | if (din0.dinfo.voice_is_voice) { |
||
4825 | for (int i = 0; i < 6; ++i) add_to_tab (&cb_mkb_voice, wvoice[i]); |
||
4826 | } else { |
||
4827 | for (int i = 0; i < 6; ++i) remove_from_tab (&cb_mkb_voice, wvoice[i]); |
||
4828 | } |
||
4829 | |||
4830 | calc_bg (); |
||
4831 | |||
4832 | } |
||
4833 | |||
1402 | jag | 4834 | void print_range_info (range& ri) { |
4835 | note& L = ri.notes[0]; |
||
4836 | note& R = ri.notes[1]; |
||
4837 | sprintf (BUFFER, "Note > %s | Left = %s @ %0.3f Hz, Right = %s @ %0.3f Hz | Range %d", din_info::cnno[din0.dinfo.change_note], L.name.c_str(), L.hz, R.name.c_str(), R.hz, din0.dinfo.sel_range); |
||
4838 | cons << CYAN << BUFFER << eol; |
||
4839 | } |
||
1436 | jag | 4840 | |
1489 | jag | 4841 | button& detach_from_menu (widget** wa, int n, int posx, int posy) { |
4842 | |||
1485 | jag | 4843 | button& close = MENU.b_close; |
1489 | jag | 4844 | close.set_pos (posx, posy - line_height); |
1485 | jag | 4845 | close.show (); |
1489 | jag | 4846 | |
2049 | jag | 4847 | if (MENU.show) MENU.toggle (DONT_MOUSE_WARP); |
1489 | jag | 4848 | |
1485 | jag | 4849 | vector<widget*>& vw = uis.widgets_of [uis.current]; |
4850 | vw.insert (vw.begin(), &close); |
||
1489 | jag | 4851 | |
4852 | if (n == 1) |
||
4853 | vw.insert (vw.begin(), wa[0]); |
||
4854 | else |
||
4855 | for (int i = 0; i < n; ++i) vw.insert (vw.begin(), wa[i]); |
||
4856 | |||
1485 | jag | 4857 | warp_mouse (MENU.menu_mousex, MENU.menu_mousey); |
1489 | jag | 4858 | |
1485 | jag | 4859 | return close; |
1489 | jag | 4860 | |
1485 | jag | 4861 | } |
4862 | |||
1489 | jag | 4863 | void attach_to_menu (widget** wa, int n) { |
1485 | jag | 4864 | uis.remove (MENUP.b_close); |
2049 | jag | 4865 | MENU.b_close.hide (); |
1489 | jag | 4866 | if (n == 1) uis.remove (wa[0]); else for (int i = 0; i < n; ++i) uis.remove (wa[i]); |
2049 | jag | 4867 | if (uis.current == &din0) uis.add (&din0, &mkb_selector); |
1485 | jag | 4868 | } |
1547 | jag | 4869 | |
4870 | CLICKED_BUTTON (menu, b_mute_lis) { |
||
1819 | jag | 4871 | din0.gab.set (&din0, 0.0f, "muting drones"); |
1784 | jag | 4872 | TOGGLEMENU |
1547 | jag | 4873 | } |
4874 | |||
4875 | CLICKED_BUTTON (menu, b_unmute_lis) { |
||
1819 | jag | 4876 | din0.gab.set (&din0, 1.0f, "unmuting drones"); |
1784 | jag | 4877 | TOGGLEMENU |
1547 | jag | 4878 | } |
1552 | jag | 4879 | |
4880 | VALUE_CHANGED (menu, sp_drone_vol_lis) { |
||
4881 | din0.setdronevol (MENU.sp_drone_vol); |
||
4882 | } |
||
1557 | jag | 4883 | |
4884 | CLICKED_BUTTON (menu, drone2noiselis) { |
||
4885 | din0.drone2noise (); |
||
1784 | jag | 4886 | TOGGLEMENU |
1557 | jag | 4887 | } |
4888 | |||
4889 | CLICKED_BUTTON (menu, noise2dronelis) { |
||
4890 | din0.noise2drone (); |
||
1784 | jag | 4891 | TOGGLEMENU |
1557 | jag | 4892 | } |
1564 | jag | 4893 | |
1732 | jag | 4894 | void menu::setvelaccel::setup () { |
1715 | jag | 4895 | lbl.set_text ("Set"); |
4896 | whats.option.set_text (" Velocity"); |
||
4897 | whats.set_listener (this); |
||
2076 | jag | 4898 | button* b[] = {&zero, &vert, &hor, &vel, &accel, &zero}; |
4899 | const char* l[] = {"0", "Vertical", "Horizontal", "Velocity", "Acceleration"}; |
||
1764 | jag | 4900 | for (int i = 0; i < 5; ++i) { |
1715 | jag | 4901 | button& bi = *b[i]; |
4902 | bi.id = i; |
||
2076 | jag | 4903 | #ifndef __WIDGET_MOVE__ |
1717 | jag | 4904 | bi.set_listener (this); |
2076 | jag | 4905 | #endif |
1715 | jag | 4906 | bi.set_text (l[i]); |
4907 | } |
||
1739 | jag | 4908 | neg.set_text ("-ve"); |
2076 | jag | 4909 | perp.set_size (line_height / 2); |
1728 | jag | 4910 | #ifdef __WIDGET_MOVE__ |
2076 | jag | 4911 | widget* w[] = {&lbl, &whats, &neg, &perp, &zero, &vert, &hor, &vel, &accel}; |
4912 | makehier (w, 9); |
||
4913 | for (int i = 0; i < 9; ++i) w[i]->set_moveable(1); |
||
1728 | jag | 4914 | #endif |
1715 | jag | 4915 | } |
4916 | |||
1732 | jag | 4917 | void menu::setvelaccel::clicked (button& b) { |
2076 | jag | 4918 | din0.setvelaccel (what, b.id, neg.state, perp.state); |
1784 | jag | 4919 | TOGGLEMENU |
1715 | jag | 4920 | } |
4921 | |||
1732 | jag | 4922 | void menu::setvelaccel::picked (label& l, int dir) { |
1728 | jag | 4923 | static const char* lbl [] = {" Velocity", " Acceleration", " Both"}; |
4924 | what += dir; |
||
4925 | wrap<int> (menu::autorott::VELOCITY, what, menu::autorott::BOTH); |
||
1715 | jag | 4926 | l.set_text (lbl[what]); |
4927 | } |
||
4928 | |||
1976 | jag | 4929 | |
4930 | void menu::autorott::clicked (button& b) { |
||
4931 | if (&b == &smooth) { |
||
4932 | mov.id = autorotator::SMOOTH; |
||
4933 | din0.setautorotparam (MENU.autorotate.which, autorott::MOVEMENT); |
||
4934 | } else { |
||
4935 | mov.id = autorotator::TICK; |
||
4936 | din0.setautorotparam (MENU.autorotate.which, autorott::MOVEMENT); |
||
4937 | } |
||
4938 | TOGGLEMENU |
||
4939 | } |
||
4940 | |||
4941 | void menu::autorott::picked (label& lbl, int dir) { |
||
4942 | static const char* strs [] = {" Velocity", " Acceleration", " Both"}; |
||
4943 | which += dir; |
||
4944 | wrap<int> (menu::autorott::VELOCITY, which, menu::autorott::BOTH); |
||
4945 | lbl.set_text (strs[which]); |
||
4946 | } |
||
4947 | |||
4948 | void menu::defvelaccelui::checksync (float v, anglet& t, spinner<float>& sp) { |
||
4949 | if (sync.state) { |
||
4950 | t = v; |
||
4951 | sp.set_value (v); |
||
4952 | } |
||
4953 | } |
||
4954 | |||
4955 | |||
1666 | jag | 4956 | void menu::autorott::setup () { |
1805 | jag | 4957 | |
1666 | jag | 4958 | title.set_text ("Auto rotate"); |
1802 | jag | 4959 | which = VELOCITY; |
1771 | jag | 4960 | whichl.option.set_text (" Velocity"); |
1861 | jag | 4961 | mov.set_text ("Movement?"); |
1771 | jag | 4962 | whichl.set_listener (this); |
1972 | jag | 4963 | { |
4964 | button* b[] = {&start, &stop, &toggle, &clockwise, &anticlockwise, &smooth, &tick}; |
||
4965 | static const char* l [] = {"Start", "Stop", "Toggle", "Clockwise", "Anti-clockwise", "Smooth", "Ticked"}; |
||
1982 | jag | 4966 | click_listener* clk [] = {&startl, &stopl, &togl, &clkl, &aclkl, this, this}; |
1972 | jag | 4967 | for (int i = 0; i < 7; ++i) { |
4968 | button& bi = *b[i]; |
||
4969 | bi.set_text (l[i]); |
||
1941 | jag | 4970 | #ifndef __WIDGET_MOVE__ |
1972 | jag | 4971 | bi.set_listener (clk[i]); |
1941 | jag | 4972 | #endif |
1972 | jag | 4973 | } |
1666 | jag | 4974 | } |
1972 | jag | 4975 | { |
1982 | jag | 4976 | widget* af [] = {&autoflip.lbl, &autoflip.unset, &autoflip.set, &autoflip.toggle, &autoflip.angle, 0}; |
4977 | widget* ap [] = {&autopause.lbl, &autopause.unset, &autopause.set, &autopause.toggle, &autopause.every, &autopause.f0r, 0}; |
||
4978 | widget* rfp [] = {&rndflipause.whichl.option, &rndflipause.unset, &rndflipause.set, &rndflipause.toggle, 0}; |
||
4979 | static const char* l [] = {"Unset", "Set", "Toggle"}; |
||
1972 | jag | 4980 | for (int i = 0, j = 1; i < 3; ++i, ++j) { |
4981 | button& bf = (button&) *af[j]; |
||
4982 | button& bp = (button&) *ap[j]; |
||
1976 | jag | 4983 | button& brfp = (button&) *rfp[j]; |
1972 | jag | 4984 | bf.set_text (l[i]); |
4985 | bp.set_text (l[i]); |
||
1976 | jag | 4986 | brfp.set_text (l[i]); |
1972 | jag | 4987 | #ifndef __WIDGET_MOVE__ |
1982 | jag | 4988 | bf.id = bp.id = brfp.id = i; |
4989 | bf.set_listener (&autoflip.sutl); |
||
4990 | bp.set_listener (&autopause.sutl); |
||
4991 | brfp.set_listener (&rndflipause.sutl); |
||
1972 | jag | 4992 | #endif |
4993 | } |
||
4994 | #ifdef __WIDGET_MOVE__ |
||
4995 | makehier (af); |
||
4996 | makehier (ap); |
||
1976 | jag | 4997 | makehier (rfp); |
1972 | jag | 4998 | #endif |
1982 | jag | 4999 | rndflipause.optl.picked (rndflipause.whichl.option, 0); |
1976 | jag | 5000 | rndflipause.whichl.set_listener (&rndflipause.optl); |
1972 | jag | 5001 | } |
5002 | |||
1732 | jag | 5003 | rpm.set ("RPM", 1.0f, 0.0f, MILLIONF, &rpml); |
1856 | jag | 5004 | deg.set ("Degrees per Tick", 1.0f, -MILLIONF, MILLIONF, °l); |
1773 | jag | 5005 | tps.set ("Ticks per Second", 1.0f, -MILLIONF, MILLIONF, &tpsl); |
1972 | jag | 5006 | autoflip.lbl.set_text ("Auto flip"); |
1732 | jag | 5007 | autoflip.angle.set (1.0f, 0.0f, MILLIONF, &autoflip.angl); |
1836 | jag | 5008 | autoflip.angle.set_text ("Every", DEGREES); |
1972 | jag | 5009 | autopause.lbl.set_text ("Auto pause"); |
1974 | jag | 5010 | autopause.every.set (0.1f, 0.0f, MILLIONF, &autopause.everyl); |
5011 | autopause.f0r.set (0.1f, 0.0f, MILLIONF, &autopause.f0rl); |
||
1973 | jag | 5012 | autopause.every.set_text ("Every", SECONDS); |
5013 | autopause.f0r.set_text ("For", SECONDS); |
||
1730 | jag | 5014 | |
1668 | jag | 5015 | #ifdef __WIDGET_MOVE__ |
1828 | jag | 5016 | widget* w[] = { |
1861 | jag | 5017 | &title, &whichl, |
5018 | &start, &stop, &toggle, |
||
1973 | jag | 5019 | &mov, |
5020 | &smooth, &tick, &clockwise, &anticlockwise, |
||
5021 | &rpm, °, &tps, |
||
1828 | jag | 5022 | |
5023 | }; |
||
5024 | makehier (w); |
||
1668 | jag | 5025 | #endif |
1666 | jag | 5026 | } |
5027 | |||
1806 | jag | 5028 | void menu::defvelaccelui::setup () { |
1732 | jag | 5029 | |
1836 | jag | 5030 | whichl.set_listener (this); |
1732 | jag | 5031 | |
1809 | jag | 5032 | spinner2<float>* sp [] = { |
5033 | &mag, |
||
5034 | &autorotate.rpm, |
||
5035 | &autorotate.dps, |
||
5036 | &autorotate.tps, |
||
5037 | &autoflip.deg, |
||
1970 | jag | 5038 | &autopause.every, |
5039 | &autopause.f0r, |
||
1809 | jag | 5040 | }; |
5041 | |||
5042 | const char* nam [] = { |
||
5043 | "Magnitude", |
||
5044 | "RPM", |
||
1858 | jag | 5045 | "Degrees per Tick", |
1809 | jag | 5046 | "Ticks Per Second", |
1976 | jag | 5047 | "Every", // autoflip (degrees) |
5048 | "Every", // autopause (seconds) |
||
1970 | jag | 5049 | "For", |
1809 | jag | 5050 | }; |
5051 | |||
5052 | change_listener<field>* chgl [] = { |
||
5053 | &magl, |
||
5054 | &rpml, |
||
5055 | &dpsl, |
||
5056 | &tpsl, |
||
1970 | jag | 5057 | °l, |
1971 | jag | 5058 | &everyl, |
5059 | &f0rl |
||
1809 | jag | 5060 | }; |
5061 | |||
1970 | jag | 5062 | float mins [] = {0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f}; |
1976 | jag | 5063 | float dels [] = {1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 0.01f, 0.01f}; |
1864 | jag | 5064 | |
1970 | jag | 5065 | int nsp = 7; |
1809 | jag | 5066 | for (int i = 0; i < nsp; ++i) { |
5067 | spinner2<float>& spi = *sp[i]; |
||
1976 | jag | 5068 | spi.set (nam[i], dels[i], mins[i], MILLIONF, chgl[i]); |
1809 | jag | 5069 | spi.lis[2] = &varl; |
5070 | spi.variance.cb.id = i; |
||
5071 | spi.variance.fld.id = i; |
||
5072 | spi.variance.cb.set_listener (&chkl); |
||
5073 | } |
||
5074 | |||
1836 | jag | 5075 | clockwise.set (1.0f, 0.0f, MILLIONF, &clockl); |
5076 | anticlockwise.set (1.0f, 0.0f, MILLIONF, &aclockl); |
||
5077 | clockwise.set_text ("Clockwise", DEGREES); |
||
5078 | anticlockwise.set_text ("Anti-clockwise", DEGREES); |
||
2106 | jag | 5079 | |
1836 | jag | 5080 | autoflip.deg.set_text ("Every", DEGREES); |
2106 | jag | 5081 | |
1970 | jag | 5082 | autopause.every.set_text ("Every", SECONDS); |
5083 | autopause.f0r.set_text ("For", SECONDS); |
||
2027 | jag | 5084 | autopause.tar.set_listener (&tarl); |
1732 | jag | 5085 | |
5086 | ldir.set_text ("Direction"); |
||
1735 | jag | 5087 | odir.set_listener (&dirl); |
5088 | |||
1809 | jag | 5089 | checkbutton* cb [] = { |
5090 | &neg, |
||
5091 | &randomize, |
||
5092 | &autorotate.cb, |
||
1871 | jag | 5093 | &autorotate.uet.deg, |
5094 | &autorotate.uet.tps, |
||
1970 | jag | 5095 | &autoflip.cb, |
5096 | &autopause.cb, |
||
1809 | jag | 5097 | }; |
1735 | jag | 5098 | |
1971 | jag | 5099 | for (int i = 0, j = 7; i < 7; ++i, ++j) { |
1809 | jag | 5100 | checkbutton& cbi = *cb[i]; |
5101 | cbi.id = j; |
||
5102 | cbi.set_listener (&chkl); |
||
5103 | } |
||
1732 | jag | 5104 | |
1807 | jag | 5105 | autorotate.setup (); |
5106 | |||
1732 | jag | 5107 | #ifdef __WIDGET_MOVE__ |
1828 | jag | 5108 | autoflip.setup (); |
1971 | jag | 5109 | autopause.setup (); |
1732 | jag | 5110 | widget* w[] = { |
1836 | jag | 5111 | &whichl, |
1756 | jag | 5112 | &mag, |
1732 | jag | 5113 | &ldir, &neg, &odir, |
1836 | jag | 5114 | &randomize, &clockwise, &anticlockwise, &sync, |
1828 | jag | 5115 | |
1732 | jag | 5116 | }; |
1828 | jag | 5117 | makehier (w); |
1732 | jag | 5118 | #endif |
1808 | jag | 5119 | |
1732 | jag | 5120 | } |
5121 | |||
1806 | jag | 5122 | void menu::defvelaccelui::load () { |
1810 | jag | 5123 | |
1806 | jag | 5124 | defvelaccel* dval [] = {&drone::v0, &drone::a0}; |
1836 | jag | 5125 | cur = dval [which]; |
5126 | whichl.set_text (cur->name); |
||
1810 | jag | 5127 | |
1836 | jag | 5128 | neg.set_state (cur->neg, 0); |
1810 | jag | 5129 | static const char* s [] = {" Horizontal", " Vertical", " Mouse"}; |
1836 | jag | 5130 | odir.set_text (s[cur->dir]); |
1837 | jag | 5131 | MENU.dva.idir = cur->dir; |
5132 | |||
1836 | jag | 5133 | randomize.set_state (cur->rndrot, 0); |
5134 | clockwise.set_value (cur->clock.deg); |
||
5135 | anticlockwise.set_value (cur->anticlock.deg); |
||
5136 | sync.set_state (cur->sync, 0); |
||
1810 | jag | 5137 | |
5138 | spinner2<float>* sp [] = { |
||
1971 | jag | 5139 | MENUP.dva.mag, |
5140 | MENUP.dva.autorotate.rpm, |
||
5141 | MENUP.dva.autorotate.dps, |
||
5142 | MENUP.dva.autorotate.tps, |
||
5143 | MENUP.dva.autoflip.deg, |
||
5144 | MENUP.dva.autopause.every, |
||
5145 | MENUP.dva.autopause.f0r, |
||
1810 | jag | 5146 | }; |
5147 | |||
5148 | valt* vt [] = { |
||
1836 | jag | 5149 | &cur->mag, |
5150 | &cur->autos.rot.rpm, |
||
5151 | &cur->autos.rot.dps, |
||
5152 | &cur->autos.rot.tps, |
||
5153 | &cur->autos.flip.deg, |
||
1971 | jag | 5154 | &cur->autos.pause.every, |
5155 | &cur->autos.pause.f0r, |
||
1810 | jag | 5156 | }; |
5157 | |||
1971 | jag | 5158 | for (int i = 0; i < 7; ++i) { |
1810 | jag | 5159 | spinner2<float>& spi = *sp[i]; |
5160 | valt& vti = *vt[i]; |
||
5161 | spi.set_value (vti.val); |
||
5162 | spi.variance.rd = vti.rd; |
||
5163 | spi.variance.setfld (); |
||
5164 | spi.variance.cb.set_state (vti.rndrd, 0); |
||
5165 | } |
||
5166 | |||
1836 | jag | 5167 | autorotate.load (); |
1971 | jag | 5168 | |
1836 | jag | 5169 | autoflip.cb.set_state (cur->autos.flip.yes); |
1810 | jag | 5170 | |
1971 | jag | 5171 | autopause.cb.set_state (cur->autos.pause.yes); |
2027 | jag | 5172 | autopause.tar.set_text (autopauset::tars[cur->autos.pause.tar]); |
1810 | jag | 5173 | |
1732 | jag | 5174 | } |
5175 | |||
1806 | jag | 5176 | void menu::defvelaccelui::picked (label& lbl, int p) { |
1836 | jag | 5177 | which = !which; |
1758 | jag | 5178 | load (); |
5179 | } |
||
1732 | jag | 5180 | |
1806 | jag | 5181 | VALUE_CHANGED (menu::defvelaccelui, varlis) { |
1809 | jag | 5182 | spinner2<float>* sp [] = { |
1971 | jag | 5183 | MENUP.dva.mag, |
5184 | MENUP.dva.autorotate.rpm, |
||
5185 | MENUP.dva.autorotate.dps, |
||
5186 | MENUP.dva.autorotate.tps, |
||
5187 | MENUP.dva.autoflip.deg, |
||
5188 | MENUP.dva.autopause.every, |
||
5189 | MENUP.dva.autopause.f0r, |
||
1809 | jag | 5190 | }; |
5191 | |||
1836 | jag | 5192 | defvelaccel& dva = *MENU.dva.cur; |
1809 | jag | 5193 | valt* vt [] = { |
5194 | &dva.mag, |
||
5195 | &dva.autos.rot.rpm, |
||
5196 | &dva.autos.rot.dps, |
||
5197 | &dva.autos.rot.tps, |
||
5198 | &dva.autos.flip.deg, |
||
1971 | jag | 5199 | &dva.autos.pause.every, |
5200 | &dva.autos.pause.f0r, |
||
1809 | jag | 5201 | }; |
5202 | |||
5203 | int id = f.id; |
||
5204 | vt[id]->rd = sp[id]->variance.rd; |
||
1732 | jag | 5205 | } |
5206 | |||
1809 | jag | 5207 | defvelaccel& getdva () { |
5208 | defvelaccel* dval [] = {&drone::v0, &drone::a0}; |
||
1836 | jag | 5209 | return *dval [MENU.dva.which]; |
1809 | jag | 5210 | } |
5211 | |||
2106 | jag | 5212 | VALUE_CHANGED (menu::defvelaccelui, maglis) { |
5213 | float v = MENU.dva.mag.value; |
||
5214 | MENU.dva.cur->mag.val = v; |
||
5215 | cons << "Magnitude of " << MENU.dva.cur->name << " = " << v << eol; |
||
5216 | } |
||
5217 | |||
1809 | jag | 5218 | VALUE_CHANGED (menu::defvelaccelui, rpmlis) { |
5219 | defvelaccel& dva = getdva (); |
||
2106 | jag | 5220 | float v = MENU.dva.autorotate.rpm.value; |
1809 | jag | 5221 | dva.autos.rot.rpm = v; |
5222 | cons << dva.name << " Auto rotate RPM = " << v << eol; |
||
5223 | } |
||
5224 | |||
5225 | VALUE_CHANGED (menu::defvelaccelui, dpslis) { |
||
5226 | defvelaccel& dva = getdva (); |
||
2106 | jag | 5227 | float v = MENU.dva.autorotate.dps.value; |
1809 | jag | 5228 | dva.autos.rot.dps = v; |
1856 | jag | 5229 | cons << dva.name << " Degrees per Tick = " << v << eol; |
1809 | jag | 5230 | } |
5231 | VALUE_CHANGED (menu::defvelaccelui, tpslis) { |
||
5232 | defvelaccel& dva = getdva (); |
||
2106 | jag | 5233 | float v = MENU.dva.autorotate.tps.value; |
1809 | jag | 5234 | dva.autos.rot.tps = v; |
5235 | cons << dva.name << " Ticks per Second = " << v << eol; |
||
5236 | } |
||
5237 | |||
5238 | VALUE_CHANGED (menu::defvelaccelui, deglis) { |
||
5239 | defvelaccel& dva = getdva (); |
||
2106 | jag | 5240 | float v = MENU.dva.autoflip.deg.value; |
1809 | jag | 5241 | dva.autos.flip.deg = v; |
1836 | jag | 5242 | cons << dva.name << " Auto flip every " << v << DEGREES << eol; |
1809 | jag | 5243 | } |
5244 | |||
1971 | jag | 5245 | VALUE_CHANGED (menu::defvelaccelui, everylis) { |
5246 | defvelaccel& dva = getdva (); |
||
2106 | jag | 5247 | float v = MENU.dva.autopause.every.value; |
1971 | jag | 5248 | dva.autos.pause.every = v; |
5249 | cons << dva.name << " Auto pause every " << v << SECONDS << eol; |
||
5250 | } |
||
5251 | |||
5252 | VALUE_CHANGED (menu::defvelaccelui, f0rlis) { |
||
5253 | defvelaccel& dva = getdva (); |
||
2106 | jag | 5254 | float v = MENU.dva.autopause.f0r.value; |
1971 | jag | 5255 | dva.autos.pause.f0r = v; |
5256 | cons << dva.name << " Auto pause for " << v << SECONDS << eol; |
||
5257 | } |
||
5258 | |||
1806 | jag | 5259 | VALUE_CHANGED (menu::defvelaccelui, clocklis) { |
2106 | jag | 5260 | float v = MENU.dva.clockwise.value; |
1836 | jag | 5261 | MENU.dva.cur->clock = v; |
5262 | MENU.dva.checksync (v, MENU.dva.cur->anticlock, MENU.dva.anticlockwise); |
||
5263 | MENU.dva.cur->setrotrd (); |
||
2106 | jag | 5264 | cons << MENU.dva.cur->name << " Clockwise Rotation = " << v << DEGREES << eol; |
1736 | jag | 5265 | } |
5266 | |||
1806 | jag | 5267 | VALUE_CHANGED (menu::defvelaccelui, anticlocklis) { |
2106 | jag | 5268 | float v = MENU.dva.anticlockwise.value; |
1836 | jag | 5269 | MENU.dva.cur->anticlock = v; |
5270 | MENU.dva.checksync (v, MENU.dva.cur->clock, MENU.dva.clockwise); |
||
5271 | MENU.dva.cur->setrotrd (); |
||
2106 | jag | 5272 | cons << MENU.dva.cur->name << " Anti-clockwise Rotation = " << v << DEGREES << eol; |
1736 | jag | 5273 | } |
5274 | |||
2106 | jag | 5275 | PICKED_OPTION (menu::defvelaccelui, tarlis) { |
5276 | defvelaccel& dva = getdva (); |
||
5277 | int& tar = dva.autos.pause.tar; |
||
5278 | tar = !tar; |
||
5279 | l.set_text (menu::defvelaccelui::autopauset::tars[tar]); |
||
5280 | } |
||
5281 | |||
1806 | jag | 5282 | PICKED_OPTION (menu::defvelaccelui, dirlis) { |
1738 | jag | 5283 | int& idir = MENU.dva.idir; |
5284 | idir += dir; |
||
1806 | jag | 5285 | wrap<int> (menu::defvelaccelui::HORIZONTAL, idir, menu::defvelaccelui::MOUSE); |
1836 | jag | 5286 | MENU.dva.cur->dir = idir; |
1738 | jag | 5287 | static const char* s [] = {" Horizontal", " Vertical", " Mouse"}; |
2027 | jag | 5288 | l.set_text (s[idir]); |
1738 | jag | 5289 | } |
5290 | |||
1858 | jag | 5291 | int gethandlesize () { return MENU.handlesize(); } |
1892 | jag | 5292 | |
1858 | jag | 5293 | int gettrailsize () {return MENU.trailsize(); } |
1892 | jag | 5294 | |
5295 | void initlaunch (drone* pd) { |
||
1877 | jag | 5296 | drone& d = *pd; |
2106 | jag | 5297 | d.lpm = MENU.ddpm (); |
1892 | jag | 5298 | d.launch_every.triggert = ppm2t (d.lpm); |
5299 | d.dpl = MENU.ddpl (); |
||
1877 | jag | 5300 | } |
1858 | jag | 5301 | |
1806 | jag | 5302 | void get (float& g, float& ux, float& uy, defvelaccel& dva) { |
1758 | jag | 5303 | g = dva.mag (); |
1750 | jag | 5304 | point<int> mous (din0.delta_mousex, din0.delta_mousey); |
5305 | if (mous.x == 0 && mous.y == 0) { |
||
5306 | ux = 0; |
||
5307 | uy = 1; |
||
5308 | } else { |
||
5309 | unit_vector<float> (ux, uy, mous.x, -mous.y); |
||
5310 | } |
||
1736 | jag | 5311 | float dirxa [] = {1, 0, ux}; |
5312 | float dirya [] = {0, 1, uy}; |
||
5313 | float nega [] = {1, -1}; |
||
5314 | float neg = nega [dva.neg]; |
||
5315 | ux = neg * dirxa [dva.dir]; |
||
5316 | uy = neg * dirya [dva.dir]; |
||
1737 | jag | 5317 | if (dva.rndrot) rotate_vector (ux, uy, dva.rotrd()); |
1736 | jag | 5318 | } |
5319 | |||
1755 | jag | 5320 | |
1806 | jag | 5321 | CLICKED_CHECKBUTTON (menu::defvelaccelui, chklis) { |
1836 | jag | 5322 | defvelaccel& dva = *MENU.dva.cur; |
1809 | jag | 5323 | int* val [] = { |
5324 | &dva.mag.rndrd, |
||
5325 | &dva.autos.rot.rpm.rndrd, |
||
5326 | &dva.autos.rot.dps.rndrd, |
||
5327 | &dva.autos.rot.tps.rndrd, |
||
5328 | &dva.autos.flip.deg.rndrd, |
||
1971 | jag | 5329 | &dva.autos.pause.every.rndrd, |
5330 | &dva.autos.pause.f0r.rndrd, |
||
1809 | jag | 5331 | &dva.neg, |
5332 | &dva.rndrot, |
||
5333 | &dva.autos.rot.yes, |
||
1871 | jag | 5334 | &dva.autos.rot.uet.deg, |
5335 | &dva.autos.rot.uet.tps, |
||
1809 | jag | 5336 | &dva.autos.flip.yes, |
1971 | jag | 5337 | &dva.autos.pause.yes, |
1809 | jag | 5338 | }; |
1735 | jag | 5339 | *val[cb.id] = cb.state; |
5340 | } |
||
5341 | |||
1666 | jag | 5342 | CLICKED_BUTTON (menu::autorott, startlis) { |
1772 | jag | 5343 | din0.setautorot (MENU.autorotate.which, 1); |
1666 | jag | 5344 | } |
5345 | |||
5346 | CLICKED_BUTTON (menu::autorott, stoplis) { |
||
1772 | jag | 5347 | din0.setautorot (MENU.autorotate.which, 0); |
1666 | jag | 5348 | } |
5349 | |||
5350 | CLICKED_BUTTON (menu::autorott, togglis) { |
||
1772 | jag | 5351 | din0.setautorot (MENU.autorotate.which, 0, 1); |
1666 | jag | 5352 | } |
5353 | |||
5354 | CLICKED_BUTTON (menu::autorott, clockwiselis) { |
||
1772 | jag | 5355 | din0.setautorotdir (MENU.autorotate.which, -1); |
1666 | jag | 5356 | } |
5357 | |||
5358 | CLICKED_BUTTON (menu::autorott, anticlockwiselis) { |
||
1772 | jag | 5359 | din0.setautorotdir (MENU.autorotate.which, 1); |
1666 | jag | 5360 | } |
1668 | jag | 5361 | |
1730 | jag | 5362 | VALUE_CHANGED (menu::autorott, rpmlis) { |
1773 | jag | 5363 | din0.setautorotparam (MENU.autorotate.which, menu::autorott::RPM); |
1730 | jag | 5364 | } |
5365 | |||
1773 | jag | 5366 | VALUE_CHANGED (menu::autorott, deglis) { |
5367 | din0.setautorotparam (MENU.autorotate.which, menu::autorott::DEG); |
||
5368 | } |
||
5369 | |||
5370 | VALUE_CHANGED (menu::autorott, tpslis) { |
||
5371 | din0.setautorotparam (MENU.autorotate.which, menu::autorott::TPS); |
||
5372 | } |
||
5373 | |||
1982 | jag | 5374 | CLICKED_BUTTON (menu::autorott::autoflipt, sutlis) { |
5375 | static int togs [] = {0, 0, 1}; |
||
5376 | din0.setautoflip (MENU.autorotate.which, b.id, togs[b.id]); |
||
1730 | jag | 5377 | } |
5378 | |||
1771 | jag | 5379 | VALUE_CHANGED (menu::autorott::autoflipt, anglis) { |
1772 | jag | 5380 | din0.setautoflipangle (MENU.autorotate.which); |
1771 | jag | 5381 | } |
5382 | |||
1974 | jag | 5383 | VALUE_CHANGED (menu::autorott::autopauset, everylis) { |
5384 | din0.setautopauseparam (MENU.autorotate.which, 0); |
||
5385 | } |
||
5386 | |||
5387 | VALUE_CHANGED (menu::autorott::autopauset, f0rlis) { |
||
5388 | din0.setautopauseparam (MENU.autorotate.which, 1); |
||
5389 | } |
||
5390 | |||
1982 | jag | 5391 | CLICKED_BUTTON (menu::autorott::autopauset, sutlis) { |
5392 | static int togs[] = {0, 0, 1}; |
||
5393 | din0.setautopause (MENU.autorotate.which, b.id, togs[b.id]); |
||
1972 | jag | 5394 | } |
5395 | |||
1982 | jag | 5396 | CLICKED_BUTTON (menu::autorott::rndflipauset, sutlis) { |
5397 | static int togs[] = {0, 0, 1}; |
||
1976 | jag | 5398 | menu::autorott& ar = MENU.autorotate; |
1982 | jag | 5399 | din0.setrndflipause (ar.which, ar.rndflipause.which, b.id, togs[b.id]); |
1976 | jag | 5400 | } |
1972 | jag | 5401 | |
1976 | jag | 5402 | PICKED_OPTION (menu::autorott::rndflipauset, rndflipauselis) { |
5403 | static const char* opts [] = { |
||
1981 | jag | 5404 | " Randomize Auto Flip Degrees", |
5405 | " Randomize Auto Pause : Every", |
||
5406 | " Randomize Auto Pause : For" |
||
1976 | jag | 5407 | }; |
5408 | int& which = MENU.autorotate.rndflipause.which; |
||
5409 | which += dir; |
||
5410 | wrap (0, which, 2); |
||
5411 | MENU.autorotate.rndflipause.whichl.set_text (opts[which]); |
||
5412 | } |
||
5413 | |||
1674 | jag | 5414 | PICKED_OPTION (menu, ol_add_wand_lis) { |
1675 | jag | 5415 | static const char* aws [] = {" Add", " Wand"}; |
1690 | jag | 5416 | din0.dinfo.wand = !din0.dinfo.wand; |
5417 | MENU.ol_add_wand.set_text (aws[din0.dinfo.wand]); |
||
1674 | jag | 5418 | } |
1675 | jag | 5419 | |
5420 | PICKED_OPTION (menu, ol_drones_are_lis) { |
||
1677 | jag | 5421 | static const char* das [] = {"are immortal", "are mortal", "reincarnate"}; |
1731 | jag | 5422 | drone::ARE += dir; |
5423 | wrap<int> (drone::IMMORTAL, drone::ARE, drone::REINCARNATE); |
||
5424 | sprintf (BUFFER, " Drones %s", das[drone::ARE]); |
||
1675 | jag | 5425 | MENU.ol_drones_are.set_text (BUFFER); |
5426 | } |
||
1676 | jag | 5427 | |
1828 | jag | 5428 | VALUE_CHANGED (menu,risel) { |
2105 | jag | 5429 | din0.dinfo.drone_rise_time = MENU.riset.value; |
1829 | jag | 5430 | cons << "Drone rise time = " << din0.dinfo.drone_rise_time << eol; |
1676 | jag | 5431 | } |
5432 | |||
1828 | jag | 5433 | VALUE_CHANGED (menu,falll) { |
2105 | jag | 5434 | din0.dinfo.drone_fall_time = MENU.fallt.value; |
1829 | jag | 5435 | cons << "Drone fall time = " << din0.dinfo.drone_fall_time << eol; |
1676 | jag | 5436 | } |
5437 | |||
1677 | jag | 5438 | VALUE_CHANGED(menu,lifetimel) { |
2105 | jag | 5439 | drone::LIFETIME = MENU.lifetime.value; |
1687 | jag | 5440 | cons << "Drone life time = " << drone::LIFETIME << SECONDS << eol; |
1677 | jag | 5441 | } |
5442 | |||
2106 | jag | 5443 | VALUE_CHANGED(menu,handlesizel) { |
5444 | drone::HANDLESIZE = MENU.handlesize.value; |
||
5445 | cons << GREEN << "Default drone handle size = " << drone::HANDLESIZE << eol; |
||
5446 | } |
||
5447 | |||
5448 | VALUE_CHANGED(menu,trailsizel) { |
||
5449 | TRAILSIZE = MENU.trailsize.value; |
||
5450 | cons << GREEN << "Default Drone / Ball trail size = " << TRAILSIZE << eol; |
||
5451 | } |
||
5452 | |||
5453 | VALUE_CHANGED(menu,ddpmlis) { |
||
5454 | int& ddpm = din0.dinfo.dpm; |
||
5455 | ddpm = MENU.ddpm.value; |
||
5456 | cons << GREEN << "Default drone launches per minute = " << ddpm << eol; |
||
5457 | } |
||
5458 | |||
5459 | VALUE_CHANGED(menu,ddpllis) { |
||
5460 | int& ddpl = din0.dinfo.dpl; |
||
5461 | ddpl = MENU.ddpl.value; |
||
5462 | cons << GREEN << "Default drones per launch = " << ddpl << eol; |
||
5463 | } |
||
5464 | |||
5465 | VALUE_CHANGED (menu,sp_wand_dist_lis) { |
||
5466 | int d = MENU.sp_wand_dist.value; |
||
5467 | drone::wand.set (d); |
||
5468 | cons << YELLOW << "Wand distance = " << d << eol; |
||
5469 | } |
||
5470 | |||
1695 | jag | 5471 | VALUE_CHANGED(menu,speedl) { |
5472 | din0.changechuckspeed (MENU.chspeed); |
||
5473 | } |
||
5474 | |||
5475 | VALUE_CHANGED(menu,lengthl) { |
||
5476 | din0.changechucklength (MENU.chlen); |
||
5477 | } |
||
5478 | |||
1702 | jag | 5479 | VALUE_CHANGED(menu,traill) { |
5480 | din0.change_drone_trail_points (MENU.chtrail); |
||
5481 | } |
||
5482 | |||
2105 | jag | 5483 | VALUE_CHANGED(menu,angleperframel) { |
5484 | drone::chuckt::apt += MENU.chapt(); |
||
5485 | RESETALLCHUCKTRAILS |
||
5486 | cons << YELLOW << "Angle per turn = " << drone::chuckt::apt.deg << DEGREES << eol; |
||
5487 | } |
||
5488 | |||
1708 | jag | 5489 | |
1677 | jag | 5490 | CLICKED_BUTTON(menu,mortalizel) { |
5491 | din0.mortalize_drones (); |
||
1784 | jag | 5492 | TOGGLEMENU |
1677 | jag | 5493 | } |
5494 | |||
1731 | jag | 5495 | CLICKED_BUTTON(menu,reincarnatel) { |
5496 | #define REINCARNATE 1 |
||
5497 | din0.mortalize_drones (REINCARNATE); |
||
1784 | jag | 5498 | TOGGLEMENU |
1677 | jag | 5499 | } |
5500 | |||
1731 | jag | 5501 | CLICKED_BUTTON(menu,immortalizel) { |
5502 | din0.immortalize_drones (); |
||
1784 | jag | 5503 | TOGGLEMENU |
1677 | jag | 5504 | } |
1680 | jag | 5505 | |
1695 | jag | 5506 | CLICKED_BUTTON(menu,chuckl) { |
5507 | din0.chuck (); |
||
1784 | jag | 5508 | TOGGLEMENU |
1695 | jag | 5509 | } |
5510 | |||
5511 | CLICKED_BUTTON(menu,chflipl) { |
||
5512 | din0.flipchuckspeed (); |
||
1784 | jag | 5513 | TOGGLEMENU |
1695 | jag | 5514 | } |
5515 | |||
1697 | jag | 5516 | CLICKED_BUTTON(menu,chtogl) { |
5517 | din0.togchuckspeed (); |
||
1784 | jag | 5518 | TOGGLEMENU |
1697 | jag | 5519 | } |
5520 | |||
1749 | jag | 5521 | CLICKED_CHECKBUTTON(menu,autoresettrailslis) { |
5522 | drone::chuckt::autoresettrails = cb.state; |
||
5523 | RESETALLCHUCKTRAILS |
||
5524 | } |
||
5525 | |||
1753 | jag | 5526 | PICKED_OPTION(menu,anchoredl) { |
5527 | drone::anchored = !drone::anchored; |
||
5528 | static const char* lbl [] = {" Drone is launched", " Drone is anchored"}; |
||
5529 | MENU.anchored.set_text (lbl[drone::anchored]); |
||
5530 | } |
||
5531 | |||
1682 | jag | 5532 | void menu::moddirs::clicked (button& cb) { |
5533 | DECL_BUTTONS |
||
1693 | jag | 5534 | for (int i = 0; i < 4; ++i) { |
1687 | jag | 5535 | if (&cb == b[i]) { |
5536 | din0.setmoddir (what, i); |
||
5537 | break; |
||
5538 | } |
||
1693 | jag | 5539 | } |
1784 | jag | 5540 | TOGGLEMENU |
1682 | jag | 5541 | } |
5542 | |||
5543 | void menu::moddirs::setup (const string& l) { |
||
5544 | DECL_BUTTONS |
||
5545 | lbl.set_text (l); |
||
2060 | jag | 5546 | const char* txt [] = {"Vertical", "Horizontal", "Velocity", "Acceleration"}; |
5547 | for (int i = 0; i < 4; ++i) b[i]->set_text (txt[i]); |
||
1682 | jag | 5548 | #ifdef __WIDGET_MOVE__ |
2060 | jag | 5549 | widget* u[] = {&lbl, &vert, &hor, &vel, &accel, 0}; |
5550 | makefam (u); |
||
1682 | jag | 5551 | #endif |
5552 | } |
||
1769 | jag | 5553 | |
1806 | jag | 5554 | void menu::defvelaccelui::autorotatet::setup () { |
1808 | jag | 5555 | dir.set_listener (&dirl); |
5556 | mov.set_listener (&movl); |
||
1828 | jag | 5557 | #ifdef __WIDGET_MOVE__ |
5558 | widget* w[] = { |
||
5559 | &cb, |
||
5560 | &dir, |
||
5561 | &mov, |
||
5562 | &rpm, |
||
5563 | &dps, |
||
1892 | jag | 5564 | &uet.deg, |
1828 | jag | 5565 | &tps, |
1892 | jag | 5566 | &uet.tps, |
1828 | jag | 5567 | |
5568 | }; |
||
5569 | makehier (w); |
||
5570 | #endif |
||
1805 | jag | 5571 | } |
1778 | jag | 5572 | |
1836 | jag | 5573 | void menu::defvelaccelui::autorotatet::load () { |
5574 | defvelaccel& dva = getdva (); |
||
5575 | defvelaccel::autost::rott& rot = dva.autos.rot; |
||
5576 | cb.set_state (rot.yes, 0); |
||
1871 | jag | 5577 | uet.deg.set_state (rot.uet.deg, 0); |
5578 | uet.tps.set_state (rot.uet.tps, 0); |
||
1980 | jag | 5579 | static const char* diropts [] = {" Clockwise", " Anti clockwise", " Clockwise or Anti-clockwise"}; |
5580 | static const char* movopts [] = {" Smooth", " Ticked", " Smooth or Ticked"}; |
||
1836 | jag | 5581 | dir.set_text (diropts[rot.dir]); |
5582 | mov.set_text (movopts[rot.mov]); |
||
5583 | } |
||
5584 | |||
1828 | jag | 5585 | #ifdef __WIDGET_MOVE__ |
5586 | void menu::defvelaccelui::autoflipt::setup () { |
||
5587 | widget* w[] = { |
||
5588 | &cb, |
||
5589 | °, |
||
5590 | |||
5591 | }; |
||
5592 | makehier (w); |
||
5593 | } |
||
1971 | jag | 5594 | |
5595 | void menu::defvelaccelui::autopauset::setup () { |
||
5596 | widget* w[] = { |
||
5597 | &cb, |
||
5598 | &every, |
||
5599 | &f0r, |
||
2027 | jag | 5600 | &tar, |
1971 | jag | 5601 | |
5602 | }; |
||
5603 | makehier (w); |
||
5604 | } |
||
1828 | jag | 5605 | #endif |
5606 | |||
1806 | jag | 5607 | PICKED_OPTION (menu::defvelaccelui::autorotatet, dirlis) { |
1807 | jag | 5608 | defvelaccel& dva = getdva (); |
1805 | jag | 5609 | dva.autos.rot.dir += dir; |
1807 | jag | 5610 | wrap<int> (autorotator::CLOCKWISE, dva.autos.rot.dir, autorotator::RANDOM); |
1805 | jag | 5611 | static const char* opts [] = {" Clockwise", " Anti clockwise", " Clockwise or Anti-clockwise"}; |
5612 | l.set_text (opts[dva.autos.rot.dir]); |
||
5613 | } |
||
5614 | |||
1806 | jag | 5615 | PICKED_OPTION (menu::defvelaccelui::autorotatet, movlis) { |
1807 | jag | 5616 | defvelaccel& dva = getdva (); |
1805 | jag | 5617 | dva.autos.rot.mov += dir; |
1980 | jag | 5618 | wrap<int> (autorotator::SMOOTH, dva.autos.rot.mov, autorotator::RANDOM); |
5619 | static const char* opts [] = {" Smooth", " Ticked", " Smooth or Ticked"}; |
||
1805 | jag | 5620 | l.set_text (opts[dva.autos.rot.mov]); |
5621 | } |
||
5622 | |||
1807 | jag | 5623 | CLICKED_CHECKBUTTON (menu::defvelaccelui::autorotatet, chklis) { |
5624 | defvelaccel& dva = getdva (); |
||
5625 | dva.autos.rot.yes = cb.state; |
||
5626 | } |
||
5627 | |||
1828 | jag | 5628 | drone::bouncet::bouncet () { |
5629 | n = 0; |
||
1855 | jag | 5630 | max = -1; |
1828 | jag | 5631 | } |
1852 | jag | 5632 | |
5633 | drone::genn::genn () { |
||
5634 | n = 0; |
||
5635 | max = MENU.gens (); |
||
5636 | } |
||
5637 | |||
1897 | jag | 5638 | std::ostream& operator<< (std::ostream& f, colorer_t& clr) { |
5639 | color_data_t& cd = clr.schemes[clr.i]->data; |
||
5640 | color &c0 = cd.clr[0], &c1 = cd.clr[1]; |
||
5641 | f << c0.r << spc << c0.g << spc << c0.b << spc << c1.r << spc << c1.g << spc << c1.b; |
||
5642 | return f; |
||
5643 | } |
||
5644 | |||
5645 | |||
5646 | std::istream& operator>> (std::istream& f, colorer_t& clr) { |
||
5647 | color_data_t& cd = clr.schemes[0]->data; |
||
5648 | color &c0 = cd.clr[0], &c1 = cd.clr[1]; |
||
5649 | f >> c0.r >> c0.g >> c0.b >> c1.r >> c1.g >> c1.b; |
||
5650 | return f; |
||
5651 | } |
||
5652 | |||
5653 | void menu::initcolorsliders () { |
||
5654 | file_in fi ("color-sliders"); |
||
5655 | ifstream& f = fi (); |
||
5656 | f >> colorer; |
||
5657 | color_data_t& cd = colorer.schemes[0]->data; |
||
5658 | color &c0 = cd.clr[0], &c1 = cd.clr[1]; |
||
5659 | float c [] = {c0.r, c0.g, c0.b, c1.r, c1.g, c1.b}; |
||
5660 | slider<float>* s [] = {&s_red_min, &s_green_min, &s_blue_min, &s_red_max, &s_green_max, &s_blue_max}; |
||
5661 | for (int i = 0; i < COLOR_SLIDERS_M; ++i) s[i]->set_val (c[i]); |
||
5662 | } |
||
5663 | void menu::savecolorsliders () { |
||
5664 | file_out fo ("color-sliders"); |
||
5665 | ofstream& f = fo (); |
||
5666 | f << colorer << endl; |
||
5667 | } |
||
1913 | jag | 5668 | |
5669 | CLICKED_BUTTON (menu, am2fm2amlis) { |
||
5670 | din0.set_drone_am2fm2am_bpm (b.id); |
||
5671 | } |
||
1941 | jag | 5672 | |
5673 | |||
5674 | CLICKED_CHECKBUTTON (menu, curveslistl) { |
||
1942 | jag | 5675 | if (!CRVED->setcrvvis (cb.id, cb.state)) cb.turn_on (DONT_CALL_LISTENER); |
1941 | jag | 5676 | } |
5677 | |||
1945 | jag | 5678 | void curve_editor::setup_tools_menu () { |
1955 | jag | 5679 | curve_info& ci = curveinfo [curcrv]; |
5680 | multi_curve* crv = ci.curve; |
||
5681 | MENU.sp_curve_rpm.set_value (ci.lastrpm); |
||
1958 | jag | 5682 | MENU.sp_curve_every.variance.cb.set_state (ci.randoflip); |
1959 | jag | 5683 | MENU.sp_curve_every.variance.rd = ci.rd; |
5684 | MENU.sp_curve_every.variance.setfld (); |
||
1958 | jag | 5685 | MENU.sp_curve_every.set_value (ci.every0.deg); |
1955 | jag | 5686 | MENU.cb_ed_autoflip.set_state (ci.autoflip); |
1945 | jag | 5687 | MENU.lf_curve_name.set_text (crv->name); |
5688 | MENU.sp_curve_limit.set_value (crv->limit); |
||
5689 | MENU.picked (MENU.ol_mirror.option, 0); |
||
5690 | set_curve_style (crv); |
||
5691 | curcrvchgd = 0; |
||
5692 | } |
||
1984 | jag | 5693 | |
5694 | |||
5695 | PICKED_OPTION (menu, moverailstrafelis) { |
||
5696 | static const char* opts [] = {" Move", " Rail", " Strafe"}; |
||
5697 | click_listener* clk [] = {MENUP.bmdl, MENUP.raill, MENUP.strafel}; |
||
5698 | int& id = MENU.moverailstrafe.id; |
||
5699 | button& option = MENU.moverailstrafe.option; |
||
5700 | id += dir; |
||
5701 | wrap (0, id, 2); |
||
5702 | option.set_text (opts[id]); |
||
5703 | LISTEN(option, clk[id]); |
||
5704 | } |
||
1990 | jag | 5705 | |
5706 | float getlifetime () { |
||
5707 | return MENU.lifetime (); |
||
5708 | } |
||
2049 | jag | 5709 | |
5710 | VALUE_CHANGED (menu,texsteplis) { |
||
5711 | mondrian0.patstep = MENU.texstep(); |
||
5712 | mondrian0.fillpatbuf (); |
||
5713 | cons << GREEN << "Texture step = " << mondrian0.patstep << eol; |
||
5714 | } |
||
2060 | jag | 5715 | |
5716 | PICKED_OPTION (menu, revmodl) { |
||
5717 | static const char* opts [] = {"Both", "AM", "FM"}; |
||
5718 | int& revmod = din0.dinfo.revmod; |
||
5719 | revmod += dir; |
||
5720 | wrap (0, revmod, 2); |
||
5721 | sprintf (BUFFER, " Reverse %s", opts[revmod]); |
||
5722 | l.set_text (BUFFER); |
||
5723 | } |
||
5724 | |||
5725 | CLICKED_BUTTON (menu, revclkl) { |
||
5726 | din0.reverse_drone_modulation (); |
||
5727 | } |
||
2272 | jag | 5728 | |
2273 | jag | 5729 | VALUE_CHANGED (menu,sep_bin_lis) { |
5730 | din0.change_drone_sep (MENU.sep_bin); |
||
5731 | } |