Added button to add tracks.
[epichord.git] / src / ui.fl
blob6f7119b4c83ac4e416ea7dd93ab576df3b689236
1 # data file for the FLTK User Interface Designer (FLUID)
2 version 2.1000 
3 images_dir header_name 
4 do_not_include_H_from_C 
5 header_name {.h} 
6 code_name {.cpp} 
7 gridx 5 
8 gridy 5 
9 snap 3
10 decl {/*
11    Epichord - a midi sequencer
12    Copyright (C) 2008  Evan Rinehart
14    This program is free software; you can redistribute it and/or
15    modify it under the terms of the GNU General Public License
16    as published by the Free Software Foundation; either version 2
17    of the License, or (at your option) any later version.
19    This program is distributed in the hope that it will be useful,
20    but WITHOUT ANY WARRANTY; without even the implied warranty of
21    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
22    GNU General Public License for more details.
24    You should have received a copy of the GNU General Public License
25    along with this program; if not, write to
27    The Free Software Foundation, Inc.
28    51 Franklin Street, Fifth Floor
29    Boston, MA  02110-1301, USA
30 */} {} 
32 decl {\#include <stdlib.h>} {} 
34 decl {\#include <fltk/events.h>} {} 
36 decl {\#include <fltk/file_chooser.h>} {} 
38 decl {\#include "backend.h"} {} 
40 decl {\#include "util.h"} {} 
42 decl {\#include "uihelper.h"} {} 
44 decl {\#include "config.h"} {} 
46 decl {extern UI* ui;} {} 
48 class UI {open
49 } {
50   Function {UI()} {open
51   } {
52     {fltk::Window} main_window {
53       label Epichord
54       callback {if(!fltk::ask("Quit?")){
55   return;
58 config_window->hide();
59 help_window->hide();
60 action_window->hide();
61 scope_window->hide();
62 o->hide();
64 save_config();} open
65       xywh {362 103 640 480} hide resizable
66       extra_code {\#include <stdio.h>
68 \#include <fltk/ask.h>
70 \#include "seq.h"
71 \#include "trackmodule.h"
72 o->size_range(640,455);
73 o->resize(640,455);}
74     } {
75       {fltk::Group} {} {open
76         xywh {0 0 640 445}
77       } {
78         {fltk::Group} song_edit {open
79           xywh {0 0 640 445}
80         } {
81           {fltk::Group} {} {open
82             xywh {0 0 255 445} box FLAT_BOX
83           } {
84             {fltk::Widget} track_info {
85               label {track info}
86               xywh {0 15 255 415} resizable
87               extra_code {\#include "trackinfo.h"}
88               class TrackInfo
89             }
90             {fltk::Button} {} {
91               label {@}
92               callback {ui->track_info->toggle_controls();}
93               tooltip {more settings}
94               xywh {170 0 85 15}
95             }
96             {fltk::Button} {} {
97               label {+}
98               callback {track* t = new track();
99 add_track(t);
100 ui->track_info->redraw();
101 ui->arranger->layout();
102 ui->song_vscroll->redraw();}
103               tooltip {add new track}
104               xywh {0 0 85 15}
105             }
106             {fltk::Button} {} {
107               label {-} selected
108               tooltip {delete last track}
109               xywh {85 0 85 15}
110             }
111           }
112           {fltk::Group} {} {open
113             xywh {255 0 385 15}
114           } {
115             {fltk::Widget} song_timeline {
116               label timeline
117               xywh {0 0 370 15} resizable
118               extra_code {o->scale=16;
119 o->label_scale=4;}
120               class Timeline
121             }
122           }
123           {fltk::Group} song_scrollgroup {
124             xywh {255 15 385 430} resizable
125           } {
126             {fltk::Widget} arranger {
127               label arranger
128               xywh {0 0 370 415} resizable box FLAT_BOX
129               extra_code {\#include "seq.h"
130 \#include "arranger.h"}
131               class Arranger
132             }
133             {fltk::Scrollbar} song_vscroll {
134               callback {int target = (int)o->value();
135 int dummy = ui->arranger->scrollx;
136 ui->arranger->scrollTo(dummy,target);}
137               xywh {370 0 15 415} slider_size 60
138             }
139             {fltk::ThumbWheel} song_hscroll {
140               callback {ui->arranger->scrollTo((int)o->value(),ui->arranger->scrolly);}
141               xywh {0 415 370 15} maximum 10000 step 10
142             }
143           }
144         }
145         {fltk::Group} pattern_edit {
146           xywh {0 0 640 445} hide
147         } {
148           {fltk::Group} {} {open
149             xywh {45 0 595 445} resizable
150           } {
151             {fltk::Group} {} {
152               xywh {0 0 595 15}
153             } {
154               {fltk::Widget} pattern_timeline {
155                 label timeline
156                 xywh {0 0 580 15} resizable box FLAT_BOX
157                 extra_code {\#include "timeline.h"
158 o->edit_flag = 1;}
159                 class Timeline
160               }
161             }
162             {fltk::Group} pattern_scrollgroup {open
163               xywh {0 15 595 355} resizable
164             } {
165               {fltk::Widget} piano_roll {
166                 label pianoroll
167                 xywh {0 0 580 340} resizable box FLAT_BOX
168                 extra_code {\#include "pianoroll.h"}
169                 class PianoRoll
170               }
171               {fltk::Scrollbar} pattern_vscroll {
172                 callback {int target = (int)o->value();
173 int dummy = ui->piano_roll->scrollx;
174 ui->piano_roll->scrollTo(dummy,target);}
175                 xywh {580 0 15 340}
176               }
177               {fltk::ThumbWheel} pattern_hscroll {
178                 callback {ui->piano_roll->scrollTo((int)o->value(),ui->piano_roll->scrolly);}
179                 xywh {0 340 580 15} step 10
180               }
181             }
182             {fltk::Group} {} {
183               xywh {0 370 595 75}
184             } {
185               {fltk::Widget} event_edit {
186                 label {event editor}
187                 xywh {0 0 580 75} resizable box FLAT_BOX
188                 extra_code {\#include "eventedit.h"}
189                 class EventEdit
190               }
191               {fltk::Widget} event_menu {
192                 xywh {0 0 580 75} hide box FLAT_BOX
193                 extra_code {\#include "eventmenu.h"}
194                 class EventMenu
195               }
196               {fltk::Button} event_menu_button {
197                 label E
198                 callback {if(o->state()==0){
199   ui->event_menu->hide();
200   ui->event_edit->show();
202 else{
203   ui->event_edit->hide();
204   ui->event_edit->recount_has();
205   ui->event_menu->show();
207                 tooltip {pick event type}
208                 xywh {580 0 15 15}
209                 extra_code {o->type(fltk::Button::TOGGLE);}
210               }
211               {fltk::Button} {} {
212                 label L
213                 callback {ui->event_edit->label_flag = o->state();
214 ui->event_edit->redraw();}
215                 tooltip {toggle event value labels}
216                 xywh {580 15 15 15}
217                 extra_code {o->type(fltk::Button::TOGGLE);}
218               }
219               {fltk::Button} {} {
220                 label C
221                 callback {ui->event_edit->clear_events();}
222                 tooltip {clear these events}
223                 xywh {580 30 15 15}
224               }
225               {fltk::Button} {} {
226                 label X
227                 callback {ui->event_edit->clear_non_note_events();}
228                 tooltip {clear all non note events in pattern}
229                 xywh {580 45 15 15}
230               }
231               {fltk::Button} {} {
232                 label Z
233                 callback {ui->event_edit->clear_all_events();}
234                 tooltip {clear everything}
235                 xywh {580 60 15 15} labelcolor 0xff000000
236               }
237             }
238           }
239           {fltk::Group} {} {open
240             xywh {0 0 45 445} horizontal
241           } {
242             {fltk::Button} {} {
243               label {@line}
244               xywh {0 0 45 15}
245             }
246             {fltk::Group} {} {open
247               xywh {0 15 45 340} resizable
248             } {
249               {fltk::Widget} track_select {
250                 label {track picker}
251                 xywh {0 35 45 305}
252                 extra_code {\#include "trackselect.h"}
253                 class TrackSelect
254               }
255               {fltk::Widget} sample_view {
256                 label {sample names}
257                 xywh {0 35 45 305}
258                 extra_code {\#include "sampleview.h"}
259                 class SampleView
260               }
261               {fltk::Widget} keyboard {
262                 label keyboard
263                 xywh {0 0 45 340}
264                 extra_code {\#include "keyboard.h"}
265                 class Keyboard
266               }
267             }
268             {fltk::Button} {} {
269               label {@<-}
270               callback {show_song_edit();}
271               xywh {0 370 45 75}
272             }
273           }
274         }
275       }
276       {fltk::Group} {} {
277         xywh {0 445 640 35} box UP_BOX
278       } {
279         {fltk::Button} play_button {
280           label {@>}
281           callback {press_play();}
282           xywh {5 5 25 25} labelcolor 0x800000
283         }
284         {fltk::Button} stop_button {
285           label {@square}
286           callback {press_stop();}
287           xywh {35 5 25 25} labelcolor 0x800000
288         }
289         {fltk::Button} record_button {
290           label {@circle}
291           callback {toggle_backend_recording();}
292           xywh {65 5 25 25} labelcolor 0xff000000
293           extra_code {o->type(fltk::Button::TOGGLE);}
294         }
295         {fltk::Widget} metronome {
296           label 0
297           xywh {95 5 25 25} color 56 labelcolor 0xffffff00
298           extra_code {\#include <metronome.h>}
299           class Metronome
300         }
301         {fltk::Button} loop_toggle {
302           callback {toggle_loop();}
303           tooltip {toggle looping}
304           xywh {125 5 25 25}
305           extra_code {o->type(fltk::Button::TOGGLE);}
306         }
307         {fltk::Group} {} {open
308           xywh {155 0 20 35} resizable
309         } {}
310         {fltk::Group} pattern_buttons {
311           xywh {200 5 310 25} hide
312         } {
313           {fltk::Button} quant1_button {
314             label qua
315             tooltip {quantize selected notes}
316             xywh {35 0 25 25}
317           }
318           {fltk::Button} quant0_button {
319             label qu_
320             tooltip {quantize length of selected notes}
321             xywh {60 0 25 25}
322           }
323           {fltk::Button} tool_button {
324             label tool
325             callback {toggle_tool();}
326             xywh {85 0 25 25}
327           }
328           {fltk::Button} qbutton4 {
329             callback {set_quant(4);}
330             xywh {135 0 25 25}
331             extra_code {o->type(fltk::Button::TOGGLE);}
332           }
333           {fltk::Button} qbutton8 {
334             callback {set_quant(8);}
335             xywh {160 0 25 25}
336             extra_code {o->type(fltk::Button::TOGGLE);}
337           }
338           {fltk::Button} qbutton16 {
339             callback {set_quant(16);}
340             xywh {185 0 25 25}
341             extra_code {o->type(fltk::Button::TOGGLE);
342 o->state(1);}
343           }
344           {fltk::Button} qbutton32 {
345             callback {set_quant(32);}
346             xywh {210 0 25 25}
347             extra_code {o->type(fltk::Button::TOGGLE);}
348           }
349           {fltk::Button} qbutton64 {
350             callback {set_quant(64);}
351             xywh {235 0 25 25}
352             extra_code {o->type(fltk::Button::TOGGLE);}
353           }
354           {fltk::Button} qbutton128 {
355             callback {set_quant(128);}
356             xywh {260 0 25 25}
357             extra_code {o->type(fltk::Button::TOGGLE);}
358           }
359           {fltk::Button} qbutton0 {
360             callback {set_quant(0);}
361             xywh {285 0 25 25}
362             extra_code {o->type(fltk::Button::TOGGLE);}
363           }
364         }
365         {fltk::Group} song_buttons {open
366           xywh {385 5 145 25}
367         } {
368           {fltk::Button} edit_button {
369             callback {set_songtool(0);}
370             tooltip {create delete move resize select paste blocks}
371             xywh {0 0 25 25} value 1
372           }
373           {fltk::Button} color_button {
374             callback {set_songtool(1);}
375             tooltip {color tool}
376             xywh {25 0 25 25}
377             extra_code {o->type(fltk::Button::TOGGLE);}
378           }
379           {fltk::Button} unclone_button {
380             callback {set_songtool(2);}
381             tooltip {click on blocks to unclone them}
382             xywh {50 0 25 25}
383             extra_code {o->type(fltk::Button::TOGGLE);}
384           }
385           {fltk::Button} split_button {
386             callback {set_songtool(3);}
387             tooltip {click on a block to split in two}
388             xywh {75 0 25 25}
389             extra_code {o->type(fltk::Button::TOGGLE);}
390           }
391           {fltk::Button} join_button {
392             callback {set_songtool(4);}
393             tooltip {click on adjacent blocks to join them}
394             xywh {100 0 25 25}
395             extra_code {o->type(fltk::Button::TOGGLE);}
396           }
397         }
398         {fltk::Button} conf_button {
399           callback {if(o->state()){
400   ui->config_window->show();
402 else{
403   ui->config_window->hide();
405           tooltip configuration
406           xywh {535 5 25 25}
407           extra_code {o->type(fltk::Button::TOGGLE);}
408         }
409         {fltk::Button} scope_button {
410           callback {if(o->state()){
411   ui->scope_window->show();
413 else{
414   ui->scope_window->hide();
416           tooltip scope
417           xywh {560 5 25 25}
418           extra_code {o->type(fltk::Button::TOGGLE);}
419         }
420         {fltk::Button} file_button {
421           callback {if(o->state()){
422   ui->action_window->show();
424 else{
425   ui->action_window->hide();
427           tooltip disk
428           xywh {585 5 25 25}
429           extra_code {\#include "saveload.h"
430 o->type(fltk::Button::TOGGLE);}
431         }
432         {fltk::Button} help_button {
433           callback {if(o->state()){
434   ui->help_window->show();
436 else{
437   ui->help_window->hide();
439           tooltip help
440           xywh {610 5 25 25}
441           extra_code {o->type(fltk::Button::TOGGLE);}
442         }
443       }
444     }
445     {fltk::Window} config_window {
446       label config
447       callback {ui->conf_button->state(0);
448 o->hide();}
449       xywh {52 125 320 285} hide
450     } {
451       {fltk::TabGroup} {} {open
452         xywh {0 0 320 285}
453       } {
454         {fltk::Group} {} {
455           label options
456           xywh {145 15 170 265} horizontal
457         } {
458           {fltk::ValueInput} beats_per_measure {
459             label {beats per measure}
460             callback {if(o->value() > o->maximum())
461   o->value(o->maximum());
462 if(o->value() < o->minimum())
463   o->value(o->minimum());
464 set_beats_per_measure((int)o->value());}
465             xywh {5 5 45 20} minimum 1 maximum 31 step 1 value 4
466           }
467           {fltk::ValueInput} measures_per_phrase {
468             label {measures per phrase}
469             callback {if(o->value() > o->maximum())
470   o->value(o->maximum());
471 if(o->value() < o->minimum())
472   o->value(o->minimum());
473 set_measures_per_phrase((int)o->value());}
474             xywh {5 30 45 20} maximum 128 step 1 value 4
475           }
476           {fltk::ValueOutput} bpm_output {
477             label bpm
478             xywh {5 55 45 20} minimum 1 maximum 1000 step 1 value 120
479           }
480           {fltk::ThumbWheel} bpm_wheel {
481             callback {set_bpm((int)o->value());
482 ui->bpm_output->value(o->value());}
483             xywh {55 55 105 20} align 4 minimum 1 maximum 1000 step 1 value 120
484           }
485           {fltk::ValueInput} measures_until_record {
486             label {measures until record}
487             callback {if(o->value() > o->maximum())
488   o->value(o->maximum());
489 if(o->value() < o->minimum())
490   o->value(o->minimum());
491 set_measures_until_record((int)o->value());}
492             xywh {5 80 45 20} maximum 128 step 1 value 1
493           }
494           {fltk::CheckButton} check_alwayscopy {
495             label {always hard copy}
496             callback {set_alwayscopy(o->value());}
497             tooltip {instead of making a linked clone when you copy a block in the song view.}
498             xywh {5 105 25 25} align 4
499           }
500           {fltk::CheckButton} check_autotrackname {
501             label {auto track name}
502             callback {set_autotrackname(o->value());}
503             tooltip {Fill in GM instruments for track names when you change the program.}
504             xywh {145 105 25 25} align 4
505           }
506           {fltk::CheckButton} check_passthru {
507             label {record pass-thru}
508             callback {set_passthru(o->value());}
509             tooltip {Echo midi input to midi output.}
510             xywh {5 130 25 26} horizontal align 4 value 1
511           }
512           {fltk::CheckButton} check_playinsert {
513             label {play note insertion}
514             callback {set_playinsert(o->value());}
515             tooltip {Send midi note on when you create notes.}
516             xywh {145 130 25 26} horizontal align 4 value 1
517           }
518           {fltk::CheckButton} check_recordonchan {
519             label {record on channel}
520             callback {set_recordonchan(o->value());}
521             tooltip {Record on first track that matches channel of midi input instead of selected track.}
522             xywh {5 155 25 25} align 4
523           }
524           {fltk::CheckButton} check_playmove {
525             label {play note move}
526             callback {set_playmove(o->value());}
527             tooltip {Send midi note on when you move notes.}
528             xywh {145 155 25 26} horizontal align 4 value 1
529           }
530           {fltk::CheckButton} check_follow {
531             label {follow playback}
532             callback {set_follow(o->value());}
533             tooltip {Auto scroll horizontally when play head leaves viewing area.}
534             xywh {5 179 25 26} horizontal align 4 value 1
535           }
536           {fltk::ValueInput} default_velocity {
537             label {default velocity}
538             callback {if(o->value() > o->maximum())
539   o->value(o->maximum());
540 if(o->value() < o->minimum())
541   o->value(o->minimum());
542 set_defaultvelocity((int)o->value());}
543             xywh {120 180 45 20} maximum 127 step 1 value 96
544           }
545           {fltk::Choice} menu_recordmode {
546             label {record mode} open
547             xywh {5 210 160 25}
548           } {
549             {fltk::Item} {} {
550               label merge
551               callback {set_recordmode(0);}
552               }
553             {fltk::Item} {} {
554               label overwrite
555               callback {set_recordmode(1);}
556               }
557             {fltk::Item} {} {
558               label layer
559               callback {set_recordmode(2);}
560               }
561           }
562           {fltk::Choice} menu_rob {
563             label {record outside block} open
564             xywh {5 240 160 25}
565           } {
566             {fltk::Item} {} {
567               label {do nothing}
568               callback {set_robmode(0);}
569               }
570             {fltk::Item} {} {
571               label {new block}
572               callback {set_robmode(1);}
573               }
574             {fltk::Item} {} {
575               label {extend block}
576               callback {set_robmode(2);}
577               }
578           }
579         }
580         {fltk::Group} {} {
581           label keyboard
582           xywh {0 15 320 270} hide
583         } {
584           {fltk::Widget} kg_l0 {
585             label C0
586             xywh {35 5 45 15} align 4
587             class KeyGrabber
588           }
589           {fltk::Widget} kg_l1 {
590             label {C\#0}
591             xywh {35 20 45 15} align 4
592             class KeyGrabber
593           }
594           {fltk::Widget} kg_l2 {
595             label D0
596             xywh {35 35 45 15} align 4
597             class KeyGrabber
598           }
599           {fltk::Widget} kg_l3 {
600             label {D\#0}
601             xywh {35 50 45 15} align 4
602             class KeyGrabber
603           }
604           {fltk::Widget} kg_l4 {
605             label E0
606             xywh {35 65 45 15} align 4
607             class KeyGrabber
608           }
609           {fltk::Widget} kg_l5 {
610             label F0
611             xywh {35 80 45 15} align 4
612             class KeyGrabber
613           }
614           {fltk::Widget} kg_l6 {
615             label {F\#0}
616             xywh {35 95 45 15} align 4
617             class KeyGrabber
618           }
619           {fltk::Widget} kg_l7 {
620             label G0
621             xywh {35 110 45 15} align 4
622             class KeyGrabber
623           }
624           {fltk::Widget} kg_l8 {
625             label {G\#0}
626             xywh {35 125 45 15} align 4
627             class KeyGrabber
628           }
629           {fltk::Widget} kg_l9 {
630             label A0
631             xywh {35 140 45 15} align 4
632             class KeyGrabber
633           }
634           {fltk::Widget} kg_l10 {
635             label {A\#0}
636             callback {;}
637             xywh {35 155 45 15} align 4
638             class KeyGrabber
639           }
640           {fltk::Widget} kg_l11 {
641             label B0
642             xywh {35 170 45 15} align 4
643             class KeyGrabber
644           }
645           {fltk::Widget} kg_l12 {
646             label C1
647             xywh {35 185 45 15} align 4
648             class KeyGrabber
649           }
650           {fltk::Widget} kg_l13 {
651             label {C\#1}
652             xywh {35 200 45 15} align 4
653             class KeyGrabber
654           }
655           {fltk::Widget} kg_l14 {
656             label D1
657             xywh {35 215 45 15} align 4
658             class KeyGrabber
659           }
660           {fltk::Widget} kg_l15 {
661             label {D\#1}
662             xywh {35 230 45 15} align 4
663             class KeyGrabber
664           }
665           {fltk::Widget} kg_l16 {
666             label E1
667             xywh {35 245 45 15} align 4
668             class KeyGrabber
669           }
670           {fltk::Widget} kg_u0 {
671             label C1
672             xywh {130 5 45 15} align 4
673             class KeyGrabber
674           }
675           {fltk::Widget} kg_u1 {
676             label {C\#1}
677             xywh {130 20 45 15} align 4
678             class KeyGrabber
679           }
680           {fltk::Widget} kg_u2 {
681             label D1
682             xywh {130 35 45 15} align 4
683             class KeyGrabber
684           }
685           {fltk::Widget} kg_u3 {
686             label {D\#1}
687             xywh {130 50 45 15} align 4
688             class KeyGrabber
689           }
690           {fltk::Widget} kg_u4 {
691             label E1
692             xywh {130 65 45 15} align 4
693             class KeyGrabber
694           }
695           {fltk::Widget} kg_u5 {
696             label F1
697             xywh {130 80 45 15} align 4
698             class KeyGrabber
699           }
700           {fltk::Widget} kg_u6 {
701             label {F\#1}
702             xywh {130 95 45 15} align 4
703             class KeyGrabber
704           }
705           {fltk::Widget} kg_u7 {
706             label G1
707             xywh {130 110 45 15} align 4
708             class KeyGrabber
709           }
710           {fltk::Widget} kg_u8 {
711             label {G\#1}
712             xywh {130 125 45 15} align 4
713             class KeyGrabber
714           }
715           {fltk::Widget} kg_u9 {
716             label A1
717             xywh {130 140 45 15} align 4
718             class KeyGrabber
719           }
720           {fltk::Widget} kg_u10 {
721             label {A\#1}
722             xywh {130 155 45 15} align 4
723             class KeyGrabber
724           }
725           {fltk::Widget} kg_u11 {
726             label B1
727             xywh {130 170 45 15} align 4
728             class KeyGrabber
729           }
730           {fltk::Widget} kg_u12 {
731             label C2
732             xywh {130 185 45 15} align 4
733             class KeyGrabber
734           }
735           {fltk::Widget} kg_u13 {
736             label {C\#2}
737             xywh {130 200 45 15} align 4
738             class KeyGrabber
739           }
740           {fltk::Widget} kg_u14 {
741             label D2
742             xywh {130 215 45 15} align 4
743             class KeyGrabber
744           }
745           {fltk::Widget} kg_u15 {
746             label {D\#2}
747             xywh {130 230 45 15} align 4
748             class KeyGrabber
749           }
750           {fltk::Widget} kg_u16 {
751             label E2
752             xywh {130 245 45 15} align 4
753             class KeyGrabber
754           }
755           {fltk::Widget} kg_u17 {
756             label F2
757             xywh {265 5 45 15} align 4
758             class KeyGrabber
759           }
760           {fltk::Widget} kg_u18 {
761             label {F\#2}
762             xywh {265 20 45 15} align 4
763             class KeyGrabber
764           }
765           {fltk::Widget} kg_u19 {
766             label G2
767             xywh {265 35 45 15} align 4
768             class KeyGrabber
769           }
770           {fltk::Widget} kg_u20 {
771             label {G\#2}
772             xywh {265 50 45 15} align 4
773             class KeyGrabber
774           }
775           {fltk::Widget} kg_zi {
776             label {zoom in}
777             xywh {265 65 45 15} align 4
778             class KeyGrabber
779           }
780           {fltk::Widget} kg_zo {
781             label {zoom out}
782             xywh {265 80 45 15} align 4
783             class KeyGrabber
784           }
785           {fltk::Widget} kg_ou {
786             label {octave up}
787             xywh {265 95 45 15} align 4
788             class KeyGrabber
789           }
790           {fltk::Widget} kg_od {
791             label {octave down}
792             xywh {265 110 45 15} align 4
793             class KeyGrabber
794           }
795         }
796         {fltk::Group} {} {
797           label colors open
798           xywh {0 15 320 270} hide
799         } {
800           {fltk::Button} {} {
801             label apply
802             xywh {250 245 65 20}
803           }
804           {fltk::Choice} {} {
805             label presets open
806             xywh {55 10 100 20}
807           } {
808             {fltk::Item} {} {
809               label windo
810               }
811             {fltk::Item} {} {
812               label midnight
813               }
814             {fltk::Item} {} {
815               label xterm
816               }
817           }
818         }
819       }
820     }
821     {fltk::Window} help_window {
822       label help
823       callback {ui->help_button->state(0);
824 o->hide();}
825       xywh {519 345 580 370} hide resizable
826       extra_code {o->size_range(580,370);}
827     } {
828       {fltk::TabGroup} {} {open
829         xywh {0 0 580 370}
830       } {
831         {fltk::Group} {} {
832           label info open
833           xywh {0 25 580 345} resizable
834         } {
835           {fltk::Input} title_text {
836             label Title
837             xywh {55 5 520 20}
838           }
839           {fltk::Input} author_text {
840             label Author
841             xywh {55 30 520 20}
842           }
843           {fltk::TextEditor} info_text {
844             xywh {5 55 570 285} resizable textfont 4
845           }
846         }
847         {fltk::Group} {} {
848           label controls open
849           xywh {0 25 580 345} hide
850         } {
851           {fltk::TextDisplay} {} {
852             xywh {5 5 570 335} resizable textfont 4
853             extra_code {load_text(o,ROOT_DATA_DIR"doc/controls.txt");}
854           }
855         }
856         {fltk::Group} {} {
857           label guide open
858           xywh {0 25 580 345} hide
859         } {
860           {fltk::TextDisplay} {} {
861             xywh {5 5 570 335} resizable textfont 4
862             extra_code {load_text(o,ROOT_DATA_DIR"doc/guide.txt");}
863           }
864         }
865         {fltk::Group} {} {
866           label license open
867           xywh {0 25 580 345} hide
868         } {
869           {fltk::TextDisplay} {} {
870             xywh {5 5 570 335} resizable textfont 4
871             extra_code {load_text(o,ROOT_DATA_DIR"doc/license.txt");}
872           }
873         }
874         {fltk::Group} {} {
875           label about open
876           xywh {0 25 580 345} hide
877         } {
878           {fltk::TextDisplay} {} {
879             xywh {5 5 570 335} resizable textfont 4
880             extra_code {load_text(o,ROOT_DATA_DIR"doc/README");}
881           }
882         }
883       }
884     }
885     {fltk::Window} action_window {
886       label menu
887       callback {ui->file_button->state(0);
888 o->hide();}
889       xywh {286 302 100 130} horizontal hide
890     } {
891       {fltk::Button} {} {
892         label new
893         callback {reset_song();}
894         xywh {5 5 90 20}
895       }
896       {fltk::Button} {} {
897         label save
898         callback {action_window->hide();
899 save();}
900         xywh {5 25 90 20}
901       }
902       {fltk::Button} {} {
903         label {save as}
904         callback {action_window->hide();
905 save(fltk::file_chooser("save file",NULL,get_last_dir()));}
906         xywh {5 45 90 20}
907       }
908       {fltk::Button} {} {
909         label load
910         callback {action_window->hide();
911 if(load(fltk::file_chooser("open file",NULL,get_last_dir()))<0){
912   reset_song();
914         xywh {5 65 90 20}
915       }
916       {fltk::Button} {} {
917         label import
918         callback {action_window->hide();
919 if(loadsmf(fltk::file_chooser("import file",NULL,get_last_dir()))<0){
920   reset_song();
922         xywh {5 85 90 20}
923       }
924       {fltk::Button} {} {
925         label export
926         callback {action_window->hide();
927 savesmf(fltk::file_chooser("export file",NULL,get_last_dir()));}
928         xywh {5 105 90 20}
929       }
930     }
931     {fltk::Window} scope_window {
932       label scope
933       callback {ui->scope_button->state(0);
934 o->hide();}
935       xywh {647 310 425 280} hide resizable
936     } {
937       {fltk::TextDisplay} scope {
938         xywh {5 5 415 245} resizable textfont 4 color 0x280000 textcolor 0xff0000
939         extra_code {o->wrap_mode(1);}
940       }
941       {fltk::Group} {} {open
942         xywh {5 255 415 20}
943       } {
944         {fltk::Button} {} {
945           label on
946           callback {if(o->state()){
947   turnonscope();
949 else{
950   turnoffscope();
952           xywh {0 0 40 20}
953           extra_code {o->type(fltk::Button::TOGGLE);}
954         }
955         {fltk::InvisibleBox} {} {
956           xywh {45 0 95 20} resizable
957         }
958       }
959     }
960     code {loop_toggle->image(fltk::SharedImage::get(ROOT_DATA_DIR"gfx/loop.gif"));
961 conf_button->image(fltk::SharedImage::get(ROOT_DATA_DIR"gfx/conf.gif"));
962 scope_button->image(fltk::SharedImage::get(ROOT_DATA_DIR"gfx/scope.gif"));
963 file_button->image(fltk::SharedImage::get(ROOT_DATA_DIR"gfx/file.gif"));
964 help_button->image(fltk::SharedImage::get(ROOT_DATA_DIR"gfx/help.gif"));
966 edit_button->image(fltk::SharedImage::get(ROOT_DATA_DIR"gfx/edit.gif"));
967 color_button->image(fltk::SharedImage::get(ROOT_DATA_DIR"gfx/color.gif"));
968 unclone_button->image(fltk::SharedImage::get(ROOT_DATA_DIR"gfx/fork.gif"));
969 split_button->image(fltk::SharedImage::get(ROOT_DATA_DIR"gfx/split.gif"));
970 join_button->image(fltk::SharedImage::get(ROOT_DATA_DIR"gfx/join.gif"));
972 qbutton4->image(fltk::SharedImage::get(ROOT_DATA_DIR"gfx/q4.gif"));
973 qbutton8->image(fltk::SharedImage::get(ROOT_DATA_DIR"gfx/q8.gif"));
974 qbutton16->image(fltk::SharedImage::get(ROOT_DATA_DIR"gfx/q16.gif"));
975 qbutton32->image(fltk::SharedImage::get(ROOT_DATA_DIR"gfx/q32.gif"));
976 qbutton64->image(fltk::SharedImage::get(ROOT_DATA_DIR"gfx/q64.gif"));
977 qbutton128->image(fltk::SharedImage::get(ROOT_DATA_DIR"gfx/q128.gif"));
978 qbutton0->image(fltk::SharedImage::get(ROOT_DATA_DIR"gfx/q0.gif"));} {}
979     code {track_info->set_rec(0);} {}
980     code {start_monitor();} {}
981     code {main_window->show();} {}
982   }