Fixed bug in DragBar.
[epichord.git] / src / ui.cpp
blob51c598aabe472eccbf766a506ece21e9573e9f21
1 // generated by Fast Light User Interface Designer (fluid) version 2.1000
3 #include "ui.h"
4 /*
5 Epichord - a midi sequencer
6 Copyright (C) 2008 Evan Rinehart
8 This program is free software; you can redistribute it and/or
9 modify it under the terms of the GNU General Public License
10 as published by the Free Software Foundation; either version 2
11 of the License, or (at your option) any later version.
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
18 You should have received a copy of the GNU General Public License
19 along with this program; if not, write to
21 The Free Software Foundation, Inc.
22 51 Franklin Street, Fifth Floor
23 Boston, MA 02110-1301, USA
25 #include <stdlib.h>
26 #include <fltk/events.h>
27 #include <fltk/file_chooser.h>
28 #include "backend.h"
29 #include "util.h"
30 #include "uihelper.h"
31 #include "config.h"
32 extern UI* ui;
34 inline void UI::cb_main_window_i(fltk::Window* o, void*) {
35 if(!fltk::ask("Quit?")){
36 return;
39 config_window->hide();
40 help_window->hide();
41 action_window->hide();
42 scope_window->hide();
43 o->hide();
45 save_config();
47 void UI::cb_main_window(fltk::Window* o, void* v) {
48 ((UI*)(o->user_data()))->cb_main_window_i(o,v);
51 inline void UI::cb__i(fltk::Button*, void*) {
52 ui->track_info->toggle_controls();
54 void UI::cb_(fltk::Button* o, void* v) {
55 ((UI*)(o->parent()->parent()->parent()->parent()->user_data()))->cb__i(o,v);
58 inline void UI::cb_1_i(fltk::Button*, void*) {
59 track* t = new track();
60 add_track(t);
61 ui->track_info->redraw();
62 ui->arranger->layout();
63 ui->song_vscroll->redraw();
65 void UI::cb_1(fltk::Button* o, void* v) {
66 ((UI*)(o->parent()->parent()->parent()->parent()->user_data()))->cb_1_i(o,v);
69 inline void UI::cb_song_vscroll_i(fltk::Scrollbar* o, void*) {
70 int target = (int)o->value();
71 int dummy = ui->arranger->scrollx;
72 ui->arranger->scrollTo(dummy,target);
74 void UI::cb_song_vscroll(fltk::Scrollbar* o, void* v) {
75 ((UI*)(o->parent()->parent()->parent()->parent()->user_data()))->cb_song_vscroll_i(o,v);
78 inline void UI::cb_song_hscroll_i(DragBar* o, void*) {
79 ui->arranger->scrollTo(o->value(), ui->arranger->scrolly);
81 void UI::cb_song_hscroll(DragBar* o, void* v) {
82 ((UI*)(o->parent()->parent()->parent()->parent()->user_data()))->cb_song_hscroll_i(o,v);
85 inline void UI::cb_pattern_vscroll_i(fltk::Scrollbar* o, void*) {
86 int target = (int)o->value();
87 int dummy = ui->piano_roll->scrollx;
88 ui->piano_roll->scrollTo(dummy,target);
90 void UI::cb_pattern_vscroll(fltk::Scrollbar* o, void* v) {
91 ((UI*)(o->parent()->parent()->parent()->parent()->parent()->user_data()))->cb_pattern_vscroll_i(o,v);
94 inline void UI::cb_pattern_hscroll_i(DragBar* o, void*) {
95 ui->piano_roll->scrollTo(o->value(),ui->piano_roll->scrolly);
97 void UI::cb_pattern_hscroll(DragBar* o, void* v) {
98 ((UI*)(o->parent()->parent()->parent()->parent()->parent()->user_data()))->cb_pattern_hscroll_i(o,v);
101 inline void UI::cb_event_menu_button_i(fltk::Button* o, void*) {
102 if(o->state()==0){
103 ui->event_menu->hide();
104 ui->event_edit->show();
106 else{
107 ui->event_edit->hide();
108 ui->event_edit->recount_has();
109 ui->event_menu->show();
112 void UI::cb_event_menu_button(fltk::Button* o, void* v) {
113 ((UI*)(o->parent()->parent()->parent()->parent()->parent()->user_data()))->cb_event_menu_button_i(o,v);
116 inline void UI::cb_L_i(fltk::Button* o, void*) {
117 ui->event_edit->label_flag = o->state();
118 ui->event_edit->redraw();
120 void UI::cb_L(fltk::Button* o, void* v) {
121 ((UI*)(o->parent()->parent()->parent()->parent()->parent()->user_data()))->cb_L_i(o,v);
124 inline void UI::cb_C_i(fltk::Button*, void*) {
125 ui->event_edit->clear_events();
127 void UI::cb_C(fltk::Button* o, void* v) {
128 ((UI*)(o->parent()->parent()->parent()->parent()->parent()->user_data()))->cb_C_i(o,v);
131 inline void UI::cb_X_i(fltk::Button*, void*) {
132 ui->event_edit->clear_non_note_events();
134 void UI::cb_X(fltk::Button* o, void* v) {
135 ((UI*)(o->parent()->parent()->parent()->parent()->parent()->user_data()))->cb_X_i(o,v);
138 inline void UI::cb_Z_i(fltk::Button*, void*) {
139 ui->event_edit->clear_all_events();
141 void UI::cb_Z(fltk::Button* o, void* v) {
142 ((UI*)(o->parent()->parent()->parent()->parent()->parent()->user_data()))->cb_Z_i(o,v);
145 inline void UI::cb_2_i(fltk::Button*, void*) {
146 show_song_edit();
148 void UI::cb_2(fltk::Button* o, void* v) {
149 ((UI*)(o->parent()->parent()->parent()->parent()->user_data()))->cb_2_i(o,v);
152 inline void UI::cb_play_button_i(fltk::Button*, void*) {
153 press_play();
155 void UI::cb_play_button(fltk::Button* o, void* v) {
156 ((UI*)(o->parent()->parent()->user_data()))->cb_play_button_i(o,v);
159 inline void UI::cb_stop_button_i(fltk::Button*, void*) {
160 press_stop();
162 void UI::cb_stop_button(fltk::Button* o, void* v) {
163 ((UI*)(o->parent()->parent()->user_data()))->cb_stop_button_i(o,v);
166 inline void UI::cb_record_button_i(fltk::Button*, void*) {
167 toggle_backend_recording();
169 void UI::cb_record_button(fltk::Button* o, void* v) {
170 ((UI*)(o->parent()->parent()->user_data()))->cb_record_button_i(o,v);
173 inline void UI::cb_loop_toggle_i(fltk::Button*, void*) {
174 toggle_loop();
176 void UI::cb_loop_toggle(fltk::Button* o, void* v) {
177 ((UI*)(o->parent()->parent()->user_data()))->cb_loop_toggle_i(o,v);
180 inline void UI::cb_tool_button_i(fltk::Button*, void*) {
181 toggle_tool();
183 void UI::cb_tool_button(fltk::Button* o, void* v) {
184 ((UI*)(o->parent()->parent()->parent()->user_data()))->cb_tool_button_i(o,v);
187 inline void UI::cb_qbutton4_i(fltk::Button*, void*) {
188 set_quant(4);
190 void UI::cb_qbutton4(fltk::Button* o, void* v) {
191 ((UI*)(o->parent()->parent()->parent()->user_data()))->cb_qbutton4_i(o,v);
194 inline void UI::cb_qbutton8_i(fltk::Button*, void*) {
195 set_quant(8);
197 void UI::cb_qbutton8(fltk::Button* o, void* v) {
198 ((UI*)(o->parent()->parent()->parent()->user_data()))->cb_qbutton8_i(o,v);
201 inline void UI::cb_qbutton16_i(fltk::Button*, void*) {
202 set_quant(16);
204 void UI::cb_qbutton16(fltk::Button* o, void* v) {
205 ((UI*)(o->parent()->parent()->parent()->user_data()))->cb_qbutton16_i(o,v);
208 inline void UI::cb_qbutton32_i(fltk::Button*, void*) {
209 set_quant(32);
211 void UI::cb_qbutton32(fltk::Button* o, void* v) {
212 ((UI*)(o->parent()->parent()->parent()->user_data()))->cb_qbutton32_i(o,v);
215 inline void UI::cb_qbutton64_i(fltk::Button*, void*) {
216 set_quant(64);
218 void UI::cb_qbutton64(fltk::Button* o, void* v) {
219 ((UI*)(o->parent()->parent()->parent()->user_data()))->cb_qbutton64_i(o,v);
222 inline void UI::cb_qbutton128_i(fltk::Button*, void*) {
223 set_quant(128);
225 void UI::cb_qbutton128(fltk::Button* o, void* v) {
226 ((UI*)(o->parent()->parent()->parent()->user_data()))->cb_qbutton128_i(o,v);
229 inline void UI::cb_qbutton0_i(fltk::Button*, void*) {
230 set_quant(0);
232 void UI::cb_qbutton0(fltk::Button* o, void* v) {
233 ((UI*)(o->parent()->parent()->parent()->user_data()))->cb_qbutton0_i(o,v);
236 inline void UI::cb_edit_button_i(fltk::Button*, void*) {
237 set_songtool(0);
239 void UI::cb_edit_button(fltk::Button* o, void* v) {
240 ((UI*)(o->parent()->parent()->parent()->user_data()))->cb_edit_button_i(o,v);
243 inline void UI::cb_color_button_i(fltk::Button*, void*) {
244 set_songtool(1);
246 void UI::cb_color_button(fltk::Button* o, void* v) {
247 ((UI*)(o->parent()->parent()->parent()->user_data()))->cb_color_button_i(o,v);
250 inline void UI::cb_unclone_button_i(fltk::Button*, void*) {
251 set_songtool(2);
253 void UI::cb_unclone_button(fltk::Button* o, void* v) {
254 ((UI*)(o->parent()->parent()->parent()->user_data()))->cb_unclone_button_i(o,v);
257 inline void UI::cb_split_button_i(fltk::Button*, void*) {
258 set_songtool(3);
260 void UI::cb_split_button(fltk::Button* o, void* v) {
261 ((UI*)(o->parent()->parent()->parent()->user_data()))->cb_split_button_i(o,v);
264 inline void UI::cb_join_button_i(fltk::Button*, void*) {
265 set_songtool(4);
267 void UI::cb_join_button(fltk::Button* o, void* v) {
268 ((UI*)(o->parent()->parent()->parent()->user_data()))->cb_join_button_i(o,v);
271 inline void UI::cb_conf_button_i(fltk::Button* o, void*) {
272 if(o->state()){
273 ui->config_window->show();
275 else{
276 ui->config_window->hide();
279 void UI::cb_conf_button(fltk::Button* o, void* v) {
280 ((UI*)(o->parent()->parent()->user_data()))->cb_conf_button_i(o,v);
283 inline void UI::cb_scope_button_i(fltk::Button* o, void*) {
284 if(o->state()){
285 ui->scope_window->show();
287 else{
288 ui->scope_window->hide();
291 void UI::cb_scope_button(fltk::Button* o, void* v) {
292 ((UI*)(o->parent()->parent()->user_data()))->cb_scope_button_i(o,v);
295 inline void UI::cb_file_button_i(fltk::Button* o, void*) {
296 if(o->state()){
297 ui->action_window->show();
299 else{
300 ui->action_window->hide();
303 void UI::cb_file_button(fltk::Button* o, void* v) {
304 ((UI*)(o->parent()->parent()->user_data()))->cb_file_button_i(o,v);
307 inline void UI::cb_new_i(fltk::Item*, void*) {
308 reset_song();
309 ui->file_button->state(0);
311 void UI::cb_new(fltk::Item* o, void* v) {
312 ((UI*)(o->parent()->parent()->parent()->user_data()))->cb_new_i(o,v);
315 inline void UI::cb_load_i(fltk::Item*, void*) {
316 action_window->hide();
317 ui->file_button->state(0);
318 const char* filename = fltk::file_chooser("open file",NULL,get_last_dir());
319 if(filename){
320 if(load(filename)<0){
321 reset_song();
325 void UI::cb_load(fltk::Item* o, void* v) {
326 ((UI*)(o->parent()->parent()->parent()->user_data()))->cb_load_i(o,v);
329 inline void UI::cb_save_i(fltk::Item*, void*) {
330 action_window->hide();
331 ui->file_button->state(0);
332 save();
334 void UI::cb_save(fltk::Item* o, void* v) {
335 ((UI*)(o->parent()->parent()->parent()->user_data()))->cb_save_i(o,v);
338 inline void UI::cb_save1_i(fltk::Item*, void*) {
339 action_window->hide();
340 ui->file_button->state(0);
341 save(fltk::file_chooser("save file",NULL,get_last_dir()));
343 void UI::cb_save1(fltk::Item* o, void* v) {
344 ((UI*)(o->parent()->parent()->parent()->user_data()))->cb_save1_i(o,v);
347 inline void UI::cb_import_i(fltk::Item*, void*) {
348 action_window->hide();
349 ui->file_button->state(0);
350 const char* filename = fltk::file_chooser("open file",NULL,get_last_dir());
351 if(filename){
352 if(loadsmf(filename)<0){
353 reset_song();
357 void UI::cb_import(fltk::Item* o, void* v) {
358 ((UI*)(o->parent()->parent()->parent()->user_data()))->cb_import_i(o,v);
361 inline void UI::cb_export_i(fltk::Item*, void*) {
362 action_window->hide();
363 ui->file_button->state(0);
364 savesmf(fltk::file_chooser("export file",NULL,get_last_dir()));
366 void UI::cb_export(fltk::Item* o, void* v) {
367 ((UI*)(o->parent()->parent()->parent()->user_data()))->cb_export_i(o,v);
370 inline void UI::cb_help_button_i(fltk::Button* o, void*) {
371 if(o->state()){
372 ui->help_window->show();
374 else{
375 ui->help_window->hide();
378 void UI::cb_help_button(fltk::Button* o, void* v) {
379 ((UI*)(o->parent()->parent()->user_data()))->cb_help_button_i(o,v);
382 inline void UI::cb_config_window_i(fltk::Window* o, void*) {
383 ui->conf_button->state(0);
384 o->hide();
386 void UI::cb_config_window(fltk::Window* o, void* v) {
387 ((UI*)(o->user_data()))->cb_config_window_i(o,v);
390 inline void UI::cb_beats_per_measure_i(fltk::ValueInput* o, void*) {
391 if(o->value() > o->maximum())
392 o->value(o->maximum());
393 if(o->value() < o->minimum())
394 o->value(o->minimum());
395 set_beats_per_measure((int)o->value());
397 void UI::cb_beats_per_measure(fltk::ValueInput* o, void* v) {
398 ((UI*)(o->parent()->parent()->parent()->user_data()))->cb_beats_per_measure_i(o,v);
401 inline void UI::cb_measures_per_phrase_i(fltk::ValueInput* o, void*) {
402 if(o->value() > o->maximum())
403 o->value(o->maximum());
404 if(o->value() < o->minimum())
405 o->value(o->minimum());
406 set_measures_per_phrase((int)o->value());
408 void UI::cb_measures_per_phrase(fltk::ValueInput* o, void* v) {
409 ((UI*)(o->parent()->parent()->parent()->user_data()))->cb_measures_per_phrase_i(o,v);
412 inline void UI::cb_bpm_wheel_i(fltk::ThumbWheel* o, void*) {
413 set_bpm((int)o->value());
414 ui->bpm_output->value(o->value());
416 void UI::cb_bpm_wheel(fltk::ThumbWheel* o, void* v) {
417 ((UI*)(o->parent()->parent()->parent()->user_data()))->cb_bpm_wheel_i(o,v);
420 inline void UI::cb_measures_until_record_i(fltk::ValueInput* o, void*) {
421 if(o->value() > o->maximum())
422 o->value(o->maximum());
423 if(o->value() < o->minimum())
424 o->value(o->minimum());
425 set_measures_until_record((int)o->value());
427 void UI::cb_measures_until_record(fltk::ValueInput* o, void* v) {
428 ((UI*)(o->parent()->parent()->parent()->user_data()))->cb_measures_until_record_i(o,v);
431 inline void UI::cb_check_alwayscopy_i(fltk::CheckButton* o, void*) {
432 set_alwayscopy(o->value());
434 void UI::cb_check_alwayscopy(fltk::CheckButton* o, void* v) {
435 ((UI*)(o->parent()->parent()->parent()->user_data()))->cb_check_alwayscopy_i(o,v);
438 inline void UI::cb_check_autotrackname_i(fltk::CheckButton* o, void*) {
439 set_autotrackname(o->value());
441 void UI::cb_check_autotrackname(fltk::CheckButton* o, void* v) {
442 ((UI*)(o->parent()->parent()->parent()->user_data()))->cb_check_autotrackname_i(o,v);
445 inline void UI::cb_check_passthru_i(fltk::CheckButton* o, void*) {
446 set_passthru(o->value());
448 void UI::cb_check_passthru(fltk::CheckButton* o, void* v) {
449 ((UI*)(o->parent()->parent()->parent()->user_data()))->cb_check_passthru_i(o,v);
452 inline void UI::cb_check_playinsert_i(fltk::CheckButton* o, void*) {
453 set_playinsert(o->value());
455 void UI::cb_check_playinsert(fltk::CheckButton* o, void* v) {
456 ((UI*)(o->parent()->parent()->parent()->user_data()))->cb_check_playinsert_i(o,v);
459 inline void UI::cb_check_recordonchan_i(fltk::CheckButton* o, void*) {
460 set_recordonchan(o->value());
462 void UI::cb_check_recordonchan(fltk::CheckButton* o, void* v) {
463 ((UI*)(o->parent()->parent()->parent()->user_data()))->cb_check_recordonchan_i(o,v);
466 inline void UI::cb_check_playmove_i(fltk::CheckButton* o, void*) {
467 set_playmove(o->value());
469 void UI::cb_check_playmove(fltk::CheckButton* o, void* v) {
470 ((UI*)(o->parent()->parent()->parent()->user_data()))->cb_check_playmove_i(o,v);
473 inline void UI::cb_check_follow_i(fltk::CheckButton* o, void*) {
474 set_follow(o->value());
476 void UI::cb_check_follow(fltk::CheckButton* o, void* v) {
477 ((UI*)(o->parent()->parent()->parent()->user_data()))->cb_check_follow_i(o,v);
480 inline void UI::cb_default_velocity_i(fltk::ValueInput* o, void*) {
481 if(o->value() > o->maximum())
482 o->value(o->maximum());
483 if(o->value() < o->minimum())
484 o->value(o->minimum());
485 set_defaultvelocity((int)o->value());
487 void UI::cb_default_velocity(fltk::ValueInput* o, void* v) {
488 ((UI*)(o->parent()->parent()->parent()->user_data()))->cb_default_velocity_i(o,v);
491 inline void UI::cb_merge_i(fltk::Item*, void*) {
492 set_recordmode(0);
494 void UI::cb_merge(fltk::Item* o, void* v) {
495 ((UI*)(o->parent()->parent()->parent()->parent()->user_data()))->cb_merge_i(o,v);
498 inline void UI::cb_overwrite_i(fltk::Item*, void*) {
499 set_recordmode(1);
501 void UI::cb_overwrite(fltk::Item* o, void* v) {
502 ((UI*)(o->parent()->parent()->parent()->parent()->user_data()))->cb_overwrite_i(o,v);
505 inline void UI::cb_layer_i(fltk::Item*, void*) {
506 set_recordmode(2);
508 void UI::cb_layer(fltk::Item* o, void* v) {
509 ((UI*)(o->parent()->parent()->parent()->parent()->user_data()))->cb_layer_i(o,v);
512 inline void UI::cb_do_i(fltk::Item*, void*) {
513 set_robmode(0);
515 void UI::cb_do(fltk::Item* o, void* v) {
516 ((UI*)(o->parent()->parent()->parent()->parent()->user_data()))->cb_do_i(o,v);
519 inline void UI::cb_new1_i(fltk::Item*, void*) {
520 set_robmode(1);
522 void UI::cb_new1(fltk::Item* o, void* v) {
523 ((UI*)(o->parent()->parent()->parent()->parent()->user_data()))->cb_new1_i(o,v);
526 inline void UI::cb_extend_i(fltk::Item*, void*) {
527 set_robmode(2);
529 void UI::cb_extend(fltk::Item* o, void* v) {
530 ((UI*)(o->parent()->parent()->parent()->parent()->user_data()))->cb_extend_i(o,v);
533 inline void UI::cb_kg_l10_i(KeyGrabber*, void*) {
536 void UI::cb_kg_l10(KeyGrabber* o, void* v) {
537 ((UI*)(o->parent()->parent()->parent()->user_data()))->cb_kg_l10_i(o,v);
540 inline void UI::cb_help_window_i(fltk::Window* o, void*) {
541 ui->help_button->state(0);
542 o->hide();
544 void UI::cb_help_window(fltk::Window* o, void* v) {
545 ((UI*)(o->user_data()))->cb_help_window_i(o,v);
548 inline void UI::cb_action_window_i(fltk::Window* o, void*) {
549 ui->file_button->state(0);
550 o->hide();
552 void UI::cb_action_window(fltk::Window* o, void* v) {
553 ((UI*)(o->user_data()))->cb_action_window_i(o,v);
556 inline void UI::cb_new2_i(fltk::Button*, void*) {
557 reset_song();
558 ui->file_button->state(0);
560 void UI::cb_new2(fltk::Button* o, void* v) {
561 ((UI*)(o->parent()->user_data()))->cb_new2_i(o,v);
564 inline void UI::cb_save2_i(fltk::Button*, void*) {
565 action_window->hide();
566 ui->file_button->state(0);
567 save();
569 void UI::cb_save2(fltk::Button* o, void* v) {
570 ((UI*)(o->parent()->user_data()))->cb_save2_i(o,v);
573 inline void UI::cb_save3_i(fltk::Button*, void*) {
574 action_window->hide();
575 ui->file_button->state(0);
576 save(fltk::file_chooser("save file",NULL,get_last_dir()));
578 void UI::cb_save3(fltk::Button* o, void* v) {
579 ((UI*)(o->parent()->user_data()))->cb_save3_i(o,v);
582 inline void UI::cb_load1_i(fltk::Button*, void*) {
583 action_window->hide();
584 ui->file_button->state(0);
585 if(load(fltk::file_chooser("open file",NULL,get_last_dir()))<0){
586 reset_song();
589 void UI::cb_load1(fltk::Button* o, void* v) {
590 ((UI*)(o->parent()->user_data()))->cb_load1_i(o,v);
593 inline void UI::cb_import1_i(fltk::Button*, void*) {
594 action_window->hide();
595 ui->file_button->state(0);
596 if(loadsmf(fltk::file_chooser("import file",NULL,get_last_dir()))<0){
597 reset_song();
600 void UI::cb_import1(fltk::Button* o, void* v) {
601 ((UI*)(o->parent()->user_data()))->cb_import1_i(o,v);
604 inline void UI::cb_export1_i(fltk::Button*, void*) {
605 action_window->hide();
606 ui->file_button->state(0);
607 savesmf(fltk::file_chooser("export file",NULL,get_last_dir()));
609 void UI::cb_export1(fltk::Button* o, void* v) {
610 ((UI*)(o->parent()->user_data()))->cb_export1_i(o,v);
613 inline void UI::cb_scope_window_i(fltk::Window* o, void*) {
614 ui->scope_button->state(0);
615 o->hide();
617 void UI::cb_scope_window(fltk::Window* o, void* v) {
618 ((UI*)(o->user_data()))->cb_scope_window_i(o,v);
621 inline void UI::cb_on_i(fltk::Button* o, void*) {
622 if(o->state()){
623 turnonscope();
625 else{
626 turnoffscope();
629 void UI::cb_on(fltk::Button* o, void* v) {
630 ((UI*)(o->parent()->parent()->user_data()))->cb_on_i(o,v);
633 UI::UI() {
634 fltk::Window* w;
635 {fltk::Window* o = main_window = new fltk::Window(640, 480, "Epichord");
636 o->shortcut(0xff1b);
637 o->callback((fltk::Callback*)cb_main_window, (void*)(this));
638 o->begin();
639 {fltk::Group* o = new fltk::Group(0, 0, 640, 445);
640 o->begin();
641 {fltk::Group* o = song_edit = new fltk::Group(0, 0, 640, 445);
642 o->begin();
643 {fltk::Group* o = new fltk::Group(0, 0, 255, 445);
644 o->set_vertical();
645 o->box(fltk::FLAT_BOX);
646 o->begin();
647 {TrackInfo* o = track_info = new TrackInfo(0, 15, 255, 415, "track info");
648 o->set_vertical();
649 fltk::Group::current()->resizable(o);
651 {fltk::Button* o = new fltk::Button(170, 0, 85, 15, "@");
652 o->callback((fltk::Callback*)cb_);
653 o->tooltip("more settings");
655 {fltk::Button* o = new fltk::Button(0, 0, 85, 15, "+");
656 o->callback((fltk::Callback*)cb_1);
657 o->tooltip("add new track");
659 {fltk::Button* o = new fltk::Button(85, 0, 85, 15, "-");
660 o->tooltip("delete last track");
662 o->end();
664 {fltk::Group* o = new fltk::Group(255, 0, 385, 15);
665 o->begin();
666 {Timeline* o = song_timeline = new Timeline(0, 0, 370, 15, "timeline");
667 fltk::Group::current()->resizable(o);
668 o->scale=16;
669 o->label_scale=4;
671 o->end();
673 {fltk::Group* o = song_scrollgroup = new fltk::Group(255, 15, 385, 430);
674 o->set_vertical();
675 o->begin();
676 {Arranger* o = arranger = new Arranger(0, 0, 370, 415, "arranger");
677 o->set_vertical();
678 o->box(fltk::FLAT_BOX);
679 fltk::Group::current()->resizable(o);
681 {fltk::Scrollbar* o = song_vscroll = new fltk::Scrollbar(370, 0, 15, 415);
682 o->set_vertical();
683 o->slider_size(60);
684 o->callback((fltk::Callback*)cb_song_vscroll);
686 {DragBar* o = song_hscroll = new DragBar(0, 415, 370, 15);
687 o->callback((fltk::Callback*)cb_song_hscroll);
689 o->end();
690 fltk::Group::current()->resizable(o);
692 o->end();
694 {fltk::Group* o = pattern_edit = new fltk::Group(0, 0, 640, 445);
695 o->hide();
696 o->begin();
697 {fltk::Group* o = new fltk::Group(45, 0, 595, 445);
698 o->begin();
699 {fltk::Group* o = new fltk::Group(0, 0, 595, 15);
700 o->begin();
701 {Timeline* o = pattern_timeline = new Timeline(0, 0, 580, 15, "timeline");
702 o->box(fltk::FLAT_BOX);
703 fltk::Group::current()->resizable(o);
704 o->edit_flag = 1;
706 o->end();
708 {fltk::Group* o = pattern_scrollgroup = new fltk::Group(0, 15, 595, 355);
709 o->begin();
710 {PianoRoll* o = piano_roll = new PianoRoll(0, 0, 580, 340, "pianoroll");
711 o->box(fltk::FLAT_BOX);
712 fltk::Group::current()->resizable(o);
714 {fltk::Scrollbar* o = pattern_vscroll = new fltk::Scrollbar(580, 0, 15, 340);
715 o->set_vertical();
716 o->callback((fltk::Callback*)cb_pattern_vscroll);
718 {DragBar* o = pattern_hscroll = new DragBar(0, 340, 580, 15);
719 o->callback((fltk::Callback*)cb_pattern_hscroll);
721 o->end();
722 fltk::Group::current()->resizable(o);
724 {fltk::Group* o = new fltk::Group(0, 370, 595, 75);
725 o->begin();
726 {EventEdit* o = event_edit = new EventEdit(0, 0, 580, 75, "event editor");
727 o->box(fltk::FLAT_BOX);
728 fltk::Group::current()->resizable(o);
730 {EventMenu* o = event_menu = new EventMenu(0, 0, 580, 75);
731 o->box(fltk::FLAT_BOX);
732 o->hide();
734 {fltk::Button* o = event_menu_button = new fltk::Button(580, 0, 15, 15, "E");
735 o->callback((fltk::Callback*)cb_event_menu_button);
736 o->tooltip("pick event type");
737 o->type(fltk::Button::TOGGLE);
739 {fltk::Button* o = new fltk::Button(580, 15, 15, 15, "L");
740 o->callback((fltk::Callback*)cb_L);
741 o->tooltip("toggle event value labels");
742 o->type(fltk::Button::TOGGLE);
744 {fltk::Button* o = new fltk::Button(580, 30, 15, 15, "C");
745 o->callback((fltk::Callback*)cb_C);
746 o->tooltip("clear these events");
748 {fltk::Button* o = new fltk::Button(580, 45, 15, 15, "X");
749 o->callback((fltk::Callback*)cb_X);
750 o->tooltip("clear all non note events in pattern");
752 {fltk::Button* o = new fltk::Button(580, 60, 15, 15, "Z");
753 o->labelcolor((fltk::Color)0xff000000);
754 o->callback((fltk::Callback*)cb_Z);
755 o->tooltip("clear everything");
757 o->end();
759 o->end();
760 fltk::Group::current()->resizable(o);
762 {fltk::Group* o = new fltk::Group(0, 0, 45, 445);
763 o->begin();
764 new fltk::Button(0, 0, 45, 15, "@line");
765 {fltk::Group* o = new fltk::Group(0, 15, 45, 340);
766 o->set_vertical();
767 o->begin();
768 {TrackSelect* o = track_select = new TrackSelect(0, 35, 45, 305, "track picker");
769 o->set_vertical();
771 {SampleView* o = sample_view = new SampleView(0, 35, 45, 305, "sample names");
772 o->set_vertical();
774 {Keyboard* o = keyboard = new Keyboard(0, 0, 45, 340, "keyboard");
775 o->set_vertical();
777 o->end();
778 fltk::Group::current()->resizable(o);
780 {fltk::Button* o = new fltk::Button(0, 370, 45, 75, "@<-");
781 o->set_vertical();
782 o->callback((fltk::Callback*)cb_2);
784 o->end();
786 o->end();
788 o->end();
789 fltk::Group::current()->resizable(o);
791 {fltk::Group* o = new fltk::Group(0, 445, 640, 35);
792 o->box(fltk::UP_BOX);
793 o->begin();
794 {fltk::Button* o = play_button = new fltk::Button(5, 5, 25, 25, "@>");
795 o->labelcolor((fltk::Color)0x800000);
796 o->callback((fltk::Callback*)cb_play_button);
798 {fltk::Button* o = stop_button = new fltk::Button(35, 5, 25, 25, "@square");
799 o->labelcolor((fltk::Color)0x800000);
800 o->callback((fltk::Callback*)cb_stop_button);
802 {fltk::Button* o = record_button = new fltk::Button(65, 5, 25, 25, "@circle");
803 o->labelcolor((fltk::Color)0xff000000);
804 o->callback((fltk::Callback*)cb_record_button);
805 o->type(fltk::Button::TOGGLE);
807 {Metronome* o = metronome = new Metronome(95, 5, 25, 25, "0");
808 o->color((fltk::Color)56);
809 o->labelcolor((fltk::Color)0xffffff00);
811 {fltk::Button* o = loop_toggle = new fltk::Button(125, 5, 25, 25);
812 o->callback((fltk::Callback*)cb_loop_toggle);
813 o->tooltip("toggle looping");
814 o->type(fltk::Button::TOGGLE);
816 {fltk::Group* o = new fltk::Group(155, 0, 20, 35);
817 o->set_vertical();
818 fltk::Group::current()->resizable(o);
820 {fltk::Group* o = pattern_buttons = new fltk::Group(200, 5, 310, 25);
821 o->hide();
822 o->begin();
823 {fltk::Button* o = quant1_button = new fltk::Button(35, 0, 25, 25, "qua");
824 o->tooltip("quantize selected notes");
826 {fltk::Button* o = quant0_button = new fltk::Button(60, 0, 25, 25, "qu_");
827 o->tooltip("quantize length of selected notes");
829 {fltk::Button* o = tool_button = new fltk::Button(85, 0, 25, 25, "tool");
830 o->callback((fltk::Callback*)cb_tool_button);
832 {fltk::Button* o = qbutton4 = new fltk::Button(135, 0, 25, 25);
833 o->callback((fltk::Callback*)cb_qbutton4);
834 o->type(fltk::Button::TOGGLE);
836 {fltk::Button* o = qbutton8 = new fltk::Button(160, 0, 25, 25);
837 o->callback((fltk::Callback*)cb_qbutton8);
838 o->type(fltk::Button::TOGGLE);
840 {fltk::Button* o = qbutton16 = new fltk::Button(185, 0, 25, 25);
841 o->callback((fltk::Callback*)cb_qbutton16);
842 o->type(fltk::Button::TOGGLE);
843 o->state(1);
845 {fltk::Button* o = qbutton32 = new fltk::Button(210, 0, 25, 25);
846 o->callback((fltk::Callback*)cb_qbutton32);
847 o->type(fltk::Button::TOGGLE);
849 {fltk::Button* o = qbutton64 = new fltk::Button(235, 0, 25, 25);
850 o->callback((fltk::Callback*)cb_qbutton64);
851 o->type(fltk::Button::TOGGLE);
853 {fltk::Button* o = qbutton128 = new fltk::Button(260, 0, 25, 25);
854 o->callback((fltk::Callback*)cb_qbutton128);
855 o->type(fltk::Button::TOGGLE);
857 {fltk::Button* o = qbutton0 = new fltk::Button(285, 0, 25, 25);
858 o->callback((fltk::Callback*)cb_qbutton0);
859 o->type(fltk::Button::TOGGLE);
861 o->end();
863 {fltk::Group* o = song_buttons = new fltk::Group(385, 5, 145, 25);
864 o->begin();
865 {fltk::Button* o = edit_button = new fltk::Button(0, 0, 25, 25);
866 o->set_flag(fltk::STATE);
867 o->callback((fltk::Callback*)cb_edit_button);
868 o->tooltip("create delete move resize select paste blocks");
870 {fltk::Button* o = color_button = new fltk::Button(25, 0, 25, 25);
871 o->callback((fltk::Callback*)cb_color_button);
872 o->tooltip("color tool");
873 o->type(fltk::Button::TOGGLE);
875 {fltk::Button* o = unclone_button = new fltk::Button(50, 0, 25, 25);
876 o->callback((fltk::Callback*)cb_unclone_button);
877 o->tooltip("click on blocks to unclone them");
878 o->type(fltk::Button::TOGGLE);
880 {fltk::Button* o = split_button = new fltk::Button(75, 0, 25, 25);
881 o->callback((fltk::Callback*)cb_split_button);
882 o->tooltip("click on a block to split in two");
883 o->type(fltk::Button::TOGGLE);
885 {fltk::Button* o = join_button = new fltk::Button(100, 0, 25, 25);
886 o->callback((fltk::Callback*)cb_join_button);
887 o->tooltip("click on adjacent blocks to join them");
888 o->type(fltk::Button::TOGGLE);
890 o->end();
892 {fltk::Button* o = conf_button = new fltk::Button(535, 5, 25, 25);
893 o->callback((fltk::Callback*)cb_conf_button);
894 o->tooltip("configuration");
895 o->type(fltk::Button::TOGGLE);
897 {fltk::Button* o = scope_button = new fltk::Button(560, 5, 25, 25);
898 o->callback((fltk::Callback*)cb_scope_button);
899 o->tooltip("scope");
900 o->type(fltk::Button::TOGGLE);
902 {fltk::Button* o = file_button = new fltk::Button(585, 5, 25, 25);
903 o->callback((fltk::Callback*)cb_file_button);
904 o->hide();
905 o->tooltip("disk");
906 o->type(fltk::Button::TOGGLE);
908 {fltk::PopupMenu* o = file_menu = new fltk::PopupMenu(585, 5, 25, 25);
909 o->begin();
910 {fltk::Item* o = new fltk::Item("new");
911 o->callback((fltk::Callback*)cb_new);
913 {fltk::Item* o = new fltk::Item("load");
914 o->callback((fltk::Callback*)cb_load);
916 {fltk::Item* o = new fltk::Item("save");
917 o->callback((fltk::Callback*)cb_save);
919 {fltk::Item* o = new fltk::Item("save as...");
920 o->callback((fltk::Callback*)cb_save1);
922 new fltk::Divider();
923 {fltk::Item* o = new fltk::Item("import");
924 o->callback((fltk::Callback*)cb_import);
926 {fltk::Item* o = new fltk::Item("export");
927 o->callback((fltk::Callback*)cb_export);
929 o->end();
931 {fltk::Button* o = help_button = new fltk::Button(610, 5, 25, 25);
932 o->callback((fltk::Callback*)cb_help_button);
933 o->tooltip("help");
934 o->type(fltk::Button::TOGGLE);
936 o->end();
938 o->end();
941 o->size_range(640,455);
942 o->resize(640,455);
944 {fltk::Window* o = config_window = new fltk::Window(320, 285, "config");
945 o->shortcut(0xff1b);
946 o->callback((fltk::Callback*)cb_config_window, (void*)(this));
947 o->begin();
948 {fltk::TabGroup* o = new fltk::TabGroup(0, 0, 320, 285);
949 o->begin();
950 {fltk::Group* o = new fltk::Group(145, 15, 170, 265, "options");
951 o->begin();
952 {fltk::ValueInput* o = beats_per_measure = new fltk::ValueInput(5, 5, 45, 20, "beats per measure");
953 o->minimum(1);
954 o->maximum(31);
955 o->step(1);
956 o->value(4);
957 o->callback((fltk::Callback*)cb_beats_per_measure);
959 {fltk::ValueInput* o = measures_per_phrase = new fltk::ValueInput(5, 30, 45, 20, "measures per phrase");
960 o->maximum(128);
961 o->step(1);
962 o->value(4);
963 o->callback((fltk::Callback*)cb_measures_per_phrase);
965 {fltk::ValueOutput* o = bpm_output = new fltk::ValueOutput(5, 55, 45, 20, "bpm");
966 o->minimum(1);
967 o->maximum(1000);
968 o->step(1);
969 o->value(120);
971 {fltk::ThumbWheel* o = bpm_wheel = new fltk::ThumbWheel(55, 55, 105, 20);
972 o->minimum(1);
973 o->maximum(1000);
974 o->step(1);
975 o->value(120);
976 o->callback((fltk::Callback*)cb_bpm_wheel);
977 o->align(fltk::ALIGN_LEFT);
979 {fltk::ValueInput* o = measures_until_record = new fltk::ValueInput(5, 80, 45, 20, "measures until record");
980 o->maximum(128);
981 o->step(1);
982 o->value(1);
983 o->callback((fltk::Callback*)cb_measures_until_record);
985 {fltk::CheckButton* o = check_alwayscopy = new fltk::CheckButton(5, 105, 25, 25, "always hard copy");
986 o->callback((fltk::Callback*)cb_check_alwayscopy);
987 o->align(fltk::ALIGN_LEFT);
988 o->tooltip("instead of making a linked clone when you copy a block in the song view.");
990 {fltk::CheckButton* o = check_autotrackname = new fltk::CheckButton(145, 105, 25, 25, "auto track name");
991 o->callback((fltk::Callback*)cb_check_autotrackname);
992 o->align(fltk::ALIGN_LEFT);
993 o->tooltip("Fill in GM instruments for track names when you change the program.");
995 {fltk::CheckButton* o = check_passthru = new fltk::CheckButton(5, 130, 25, 26, "record pass-thru");
996 o->set_flag(fltk::STATE);
997 o->callback((fltk::Callback*)cb_check_passthru);
998 o->align(fltk::ALIGN_LEFT);
999 o->tooltip("Echo midi input to midi output.");
1001 {fltk::CheckButton* o = check_playinsert = new fltk::CheckButton(145, 130, 25, 26, "play note insertion");
1002 o->set_flag(fltk::STATE);
1003 o->callback((fltk::Callback*)cb_check_playinsert);
1004 o->align(fltk::ALIGN_LEFT);
1005 o->tooltip("Send midi note on when you create notes.");
1007 {fltk::CheckButton* o = check_recordonchan = new fltk::CheckButton(5, 155, 25, 25, "record on channel");
1008 o->callback((fltk::Callback*)cb_check_recordonchan);
1009 o->align(fltk::ALIGN_LEFT);
1010 o->tooltip("Record on first track that matches channel of midi input instead of selected \
1011 track.");
1013 {fltk::CheckButton* o = check_playmove = new fltk::CheckButton(145, 155, 25, 26, "play note move");
1014 o->set_flag(fltk::STATE);
1015 o->callback((fltk::Callback*)cb_check_playmove);
1016 o->align(fltk::ALIGN_LEFT);
1017 o->tooltip("Send midi note on when you move notes.");
1019 {fltk::CheckButton* o = check_follow = new fltk::CheckButton(5, 179, 25, 26, "follow playback");
1020 o->set_flag(fltk::STATE);
1021 o->callback((fltk::Callback*)cb_check_follow);
1022 o->align(fltk::ALIGN_LEFT);
1023 o->tooltip("Auto scroll horizontally when play head leaves viewing area.");
1025 {fltk::ValueInput* o = default_velocity = new fltk::ValueInput(120, 180, 45, 20, "default velocity");
1026 o->maximum(127);
1027 o->step(1);
1028 o->value(96);
1029 o->callback((fltk::Callback*)cb_default_velocity);
1031 {fltk::Choice* o = menu_recordmode = new fltk::Choice(5, 210, 160, 25, "record mode");
1032 o->begin();
1033 {fltk::Item* o = new fltk::Item("merge");
1034 o->callback((fltk::Callback*)cb_merge);
1036 {fltk::Item* o = new fltk::Item("overwrite");
1037 o->callback((fltk::Callback*)cb_overwrite);
1039 {fltk::Item* o = new fltk::Item("layer");
1040 o->callback((fltk::Callback*)cb_layer);
1042 o->end();
1044 {fltk::Choice* o = menu_rob = new fltk::Choice(5, 240, 160, 25, "record outside block");
1045 o->begin();
1046 {fltk::Item* o = new fltk::Item("do nothing");
1047 o->callback((fltk::Callback*)cb_do);
1049 {fltk::Item* o = new fltk::Item("new block");
1050 o->callback((fltk::Callback*)cb_new1);
1052 {fltk::Item* o = new fltk::Item("extend block");
1053 o->callback((fltk::Callback*)cb_extend);
1055 o->end();
1057 o->end();
1059 {fltk::Group* o = new fltk::Group(0, 15, 320, 270, "keyboard");
1060 o->hide();
1061 o->begin();
1062 {KeyGrabber* o = kg_l0 = new KeyGrabber(35, 5, 45, 15, "C0");
1063 o->align(fltk::ALIGN_LEFT);
1065 {KeyGrabber* o = kg_l1 = new KeyGrabber(35, 20, 45, 15, "C#0");
1066 o->align(fltk::ALIGN_LEFT);
1068 {KeyGrabber* o = kg_l2 = new KeyGrabber(35, 35, 45, 15, "D0");
1069 o->align(fltk::ALIGN_LEFT);
1071 {KeyGrabber* o = kg_l3 = new KeyGrabber(35, 50, 45, 15, "D#0");
1072 o->align(fltk::ALIGN_LEFT);
1074 {KeyGrabber* o = kg_l4 = new KeyGrabber(35, 65, 45, 15, "E0");
1075 o->align(fltk::ALIGN_LEFT);
1077 {KeyGrabber* o = kg_l5 = new KeyGrabber(35, 80, 45, 15, "F0");
1078 o->align(fltk::ALIGN_LEFT);
1080 {KeyGrabber* o = kg_l6 = new KeyGrabber(35, 95, 45, 15, "F#0");
1081 o->align(fltk::ALIGN_LEFT);
1083 {KeyGrabber* o = kg_l7 = new KeyGrabber(35, 110, 45, 15, "G0");
1084 o->align(fltk::ALIGN_LEFT);
1086 {KeyGrabber* o = kg_l8 = new KeyGrabber(35, 125, 45, 15, "G#0");
1087 o->align(fltk::ALIGN_LEFT);
1089 {KeyGrabber* o = kg_l9 = new KeyGrabber(35, 140, 45, 15, "A0");
1090 o->align(fltk::ALIGN_LEFT);
1092 {KeyGrabber* o = kg_l10 = new KeyGrabber(35, 155, 45, 15, "A#0");
1093 o->callback((fltk::Callback*)cb_kg_l10);
1094 o->align(fltk::ALIGN_LEFT);
1096 {KeyGrabber* o = kg_l11 = new KeyGrabber(35, 170, 45, 15, "B0");
1097 o->align(fltk::ALIGN_LEFT);
1099 {KeyGrabber* o = kg_l12 = new KeyGrabber(35, 185, 45, 15, "C1");
1100 o->align(fltk::ALIGN_LEFT);
1102 {KeyGrabber* o = kg_l13 = new KeyGrabber(35, 200, 45, 15, "C#1");
1103 o->align(fltk::ALIGN_LEFT);
1105 {KeyGrabber* o = kg_l14 = new KeyGrabber(35, 215, 45, 15, "D1");
1106 o->align(fltk::ALIGN_LEFT);
1108 {KeyGrabber* o = kg_l15 = new KeyGrabber(35, 230, 45, 15, "D#1");
1109 o->align(fltk::ALIGN_LEFT);
1111 {KeyGrabber* o = kg_l16 = new KeyGrabber(35, 245, 45, 15, "E1");
1112 o->align(fltk::ALIGN_LEFT);
1114 {KeyGrabber* o = kg_u0 = new KeyGrabber(130, 5, 45, 15, "C1");
1115 o->align(fltk::ALIGN_LEFT);
1117 {KeyGrabber* o = kg_u1 = new KeyGrabber(130, 20, 45, 15, "C#1");
1118 o->align(fltk::ALIGN_LEFT);
1120 {KeyGrabber* o = kg_u2 = new KeyGrabber(130, 35, 45, 15, "D1");
1121 o->align(fltk::ALIGN_LEFT);
1123 {KeyGrabber* o = kg_u3 = new KeyGrabber(130, 50, 45, 15, "D#1");
1124 o->align(fltk::ALIGN_LEFT);
1126 {KeyGrabber* o = kg_u4 = new KeyGrabber(130, 65, 45, 15, "E1");
1127 o->align(fltk::ALIGN_LEFT);
1129 {KeyGrabber* o = kg_u5 = new KeyGrabber(130, 80, 45, 15, "F1");
1130 o->align(fltk::ALIGN_LEFT);
1132 {KeyGrabber* o = kg_u6 = new KeyGrabber(130, 95, 45, 15, "F#1");
1133 o->align(fltk::ALIGN_LEFT);
1135 {KeyGrabber* o = kg_u7 = new KeyGrabber(130, 110, 45, 15, "G1");
1136 o->align(fltk::ALIGN_LEFT);
1138 {KeyGrabber* o = kg_u8 = new KeyGrabber(130, 125, 45, 15, "G#1");
1139 o->align(fltk::ALIGN_LEFT);
1141 {KeyGrabber* o = kg_u9 = new KeyGrabber(130, 140, 45, 15, "A1");
1142 o->align(fltk::ALIGN_LEFT);
1144 {KeyGrabber* o = kg_u10 = new KeyGrabber(130, 155, 45, 15, "A#1");
1145 o->align(fltk::ALIGN_LEFT);
1147 {KeyGrabber* o = kg_u11 = new KeyGrabber(130, 170, 45, 15, "B1");
1148 o->align(fltk::ALIGN_LEFT);
1150 {KeyGrabber* o = kg_u12 = new KeyGrabber(130, 185, 45, 15, "C2");
1151 o->align(fltk::ALIGN_LEFT);
1153 {KeyGrabber* o = kg_u13 = new KeyGrabber(130, 200, 45, 15, "C#2");
1154 o->align(fltk::ALIGN_LEFT);
1156 {KeyGrabber* o = kg_u14 = new KeyGrabber(130, 215, 45, 15, "D2");
1157 o->align(fltk::ALIGN_LEFT);
1159 {KeyGrabber* o = kg_u15 = new KeyGrabber(130, 230, 45, 15, "D#2");
1160 o->align(fltk::ALIGN_LEFT);
1162 {KeyGrabber* o = kg_u16 = new KeyGrabber(130, 245, 45, 15, "E2");
1163 o->align(fltk::ALIGN_LEFT);
1165 {KeyGrabber* o = kg_u17 = new KeyGrabber(265, 5, 45, 15, "F2");
1166 o->align(fltk::ALIGN_LEFT);
1168 {KeyGrabber* o = kg_u18 = new KeyGrabber(265, 20, 45, 15, "F#2");
1169 o->align(fltk::ALIGN_LEFT);
1171 {KeyGrabber* o = kg_u19 = new KeyGrabber(265, 35, 45, 15, "G2");
1172 o->align(fltk::ALIGN_LEFT);
1174 {KeyGrabber* o = kg_u20 = new KeyGrabber(265, 50, 45, 15, "G#2");
1175 o->align(fltk::ALIGN_LEFT);
1177 {KeyGrabber* o = kg_zi = new KeyGrabber(265, 65, 45, 15, "zoom in");
1178 o->align(fltk::ALIGN_LEFT);
1180 {KeyGrabber* o = kg_zo = new KeyGrabber(265, 80, 45, 15, "zoom out");
1181 o->align(fltk::ALIGN_LEFT);
1183 {KeyGrabber* o = kg_ou = new KeyGrabber(265, 95, 45, 15, "octave up");
1184 o->align(fltk::ALIGN_LEFT);
1186 {KeyGrabber* o = kg_od = new KeyGrabber(265, 110, 45, 15, "octave down");
1187 o->align(fltk::ALIGN_LEFT);
1189 o->end();
1191 {fltk::Group* o = new fltk::Group(0, 15, 320, 270, "colors");
1192 o->hide();
1193 o->begin();
1194 new fltk::Button(250, 245, 65, 20, "apply");
1195 {fltk::Choice* o = new fltk::Choice(55, 10, 100, 20, "presets");
1196 o->begin();
1197 new fltk::Item("windo");
1198 new fltk::Item("midnight");
1199 new fltk::Item("xterm");
1200 o->end();
1202 o->end();
1204 o->end();
1206 o->end();
1208 {fltk::Window* o = help_window = new fltk::Window(580, 370, "help");
1209 o->shortcut(0xff1b);
1210 o->callback((fltk::Callback*)cb_help_window, (void*)(this));
1211 o->begin();
1212 {fltk::TabGroup* o = new fltk::TabGroup(0, 0, 580, 370);
1213 o->begin();
1214 {fltk::Group* o = new fltk::Group(0, 25, 580, 345, "info");
1215 o->begin();
1216 title_text = new fltk::Input(55, 5, 520, 20, "Title");
1217 author_text = new fltk::Input(55, 30, 520, 20, "Author");
1218 {fltk::TextEditor* o = info_text = new fltk::TextEditor(5, 55, 570, 285);
1219 o->textfont(fltk::COURIER);
1220 fltk::Group::current()->resizable(o);
1222 o->end();
1223 fltk::Group::current()->resizable(o);
1225 {fltk::Group* o = new fltk::Group(0, 25, 580, 345, "controls");
1226 o->hide();
1227 o->begin();
1228 {fltk::TextDisplay* o = new fltk::TextDisplay(5, 5, 570, 335);
1229 o->textfont(fltk::COURIER);
1230 fltk::Group::current()->resizable(o);
1231 load_text(o,ROOT_DATA_DIR"doc/controls.txt");
1233 o->end();
1235 {fltk::Group* o = new fltk::Group(0, 25, 580, 345, "guide");
1236 o->hide();
1237 o->begin();
1238 {fltk::TextDisplay* o = new fltk::TextDisplay(5, 5, 570, 335);
1239 o->textfont(fltk::COURIER);
1240 fltk::Group::current()->resizable(o);
1241 load_text(o,ROOT_DATA_DIR"doc/guide.txt");
1243 o->end();
1245 {fltk::Group* o = new fltk::Group(0, 25, 580, 345, "license");
1246 o->hide();
1247 o->begin();
1248 {fltk::TextDisplay* o = new fltk::TextDisplay(5, 5, 570, 335);
1249 o->textfont(fltk::COURIER);
1250 fltk::Group::current()->resizable(o);
1251 load_text(o,ROOT_DATA_DIR"doc/license.txt");
1253 o->end();
1255 {fltk::Group* o = new fltk::Group(0, 25, 580, 345, "about");
1256 o->hide();
1257 o->begin();
1258 {fltk::TextDisplay* o = new fltk::TextDisplay(5, 5, 570, 335);
1259 o->textfont(fltk::COURIER);
1260 fltk::Group::current()->resizable(o);
1261 load_text(o,ROOT_DATA_DIR"doc/README");
1263 o->end();
1265 o->end();
1267 o->end();
1268 o->size_range(580,370);
1269 o->resizable(o);
1271 {fltk::Window* o = action_window = new fltk::Window(100, 130, "menu");
1272 o->shortcut(0xff1b);
1273 o->callback((fltk::Callback*)cb_action_window, (void*)(this));
1274 o->begin();
1275 {fltk::Button* o = new fltk::Button(5, 5, 90, 20, "new");
1276 o->callback((fltk::Callback*)cb_new2);
1278 {fltk::Button* o = new fltk::Button(5, 25, 90, 20, "save");
1279 o->callback((fltk::Callback*)cb_save2);
1281 {fltk::Button* o = new fltk::Button(5, 45, 90, 20, "save as");
1282 o->callback((fltk::Callback*)cb_save3);
1284 {fltk::Button* o = new fltk::Button(5, 65, 90, 20, "load");
1285 o->callback((fltk::Callback*)cb_load1);
1287 {fltk::Button* o = new fltk::Button(5, 85, 90, 20, "import");
1288 o->callback((fltk::Callback*)cb_import1);
1290 {fltk::Button* o = new fltk::Button(5, 105, 90, 20, "export");
1291 o->callback((fltk::Callback*)cb_export1);
1293 o->end();
1294 o->resizable(o);
1296 {fltk::Window* o = scope_window = new fltk::Window(425, 280, "scope");
1297 w = o;
1298 o->shortcut(0xff1b);
1299 o->callback((fltk::Callback*)cb_scope_window, (void*)(this));
1300 o->begin();
1301 {fltk::TextDisplay* o = scope = new fltk::TextDisplay(5, 5, 415, 245);
1302 o->textfont(fltk::COURIER);
1303 o->color((fltk::Color)0x280000);
1304 o->textcolor((fltk::Color)0xff0000);
1305 fltk::Group::current()->resizable(o);
1306 o->wrap_mode(1);
1308 {fltk::Group* o = new fltk::Group(5, 255, 415, 20);
1309 o->begin();
1310 {fltk::Button* o = new fltk::Button(0, 0, 40, 20, "on");
1311 o->callback((fltk::Callback*)cb_on);
1312 o->type(fltk::Button::TOGGLE);
1314 {fltk::InvisibleBox* o = new fltk::InvisibleBox(45, 0, 95, 20);
1315 fltk::Group::current()->resizable(o);
1317 o->end();
1319 o->end();
1321 loop_toggle->image(fltk::SharedImage::get(ROOT_DATA_DIR"gfx/loop.gif"));
1322 conf_button->image(fltk::SharedImage::get(ROOT_DATA_DIR"gfx/conf.gif"));
1323 scope_button->image(fltk::SharedImage::get(ROOT_DATA_DIR"gfx/scope.gif"));
1324 file_button->image(fltk::SharedImage::get(ROOT_DATA_DIR"gfx/file.gif"));
1325 file_menu->image(fltk::SharedImage::get(ROOT_DATA_DIR"gfx/file.gif"));
1326 help_button->image(fltk::SharedImage::get(ROOT_DATA_DIR"gfx/help.gif"));
1328 edit_button->image(fltk::SharedImage::get(ROOT_DATA_DIR"gfx/edit.gif"));
1329 color_button->image(fltk::SharedImage::get(ROOT_DATA_DIR"gfx/color.gif"));
1330 unclone_button->image(fltk::SharedImage::get(ROOT_DATA_DIR"gfx/fork.gif"));
1331 split_button->image(fltk::SharedImage::get(ROOT_DATA_DIR"gfx/split.gif"));
1332 join_button->image(fltk::SharedImage::get(ROOT_DATA_DIR"gfx/join.gif"));
1334 qbutton4->image(fltk::SharedImage::get(ROOT_DATA_DIR"gfx/q4.gif"));
1335 qbutton8->image(fltk::SharedImage::get(ROOT_DATA_DIR"gfx/q8.gif"));
1336 qbutton16->image(fltk::SharedImage::get(ROOT_DATA_DIR"gfx/q16.gif"));
1337 qbutton32->image(fltk::SharedImage::get(ROOT_DATA_DIR"gfx/q32.gif"));
1338 qbutton64->image(fltk::SharedImage::get(ROOT_DATA_DIR"gfx/q64.gif"));
1339 qbutton128->image(fltk::SharedImage::get(ROOT_DATA_DIR"gfx/q128.gif"));
1340 qbutton0->image(fltk::SharedImage::get(ROOT_DATA_DIR"gfx/q0.gif"));
1341 track_info->set_rec(0);
1342 start_monitor();
1343 main_window->show();