1 # data file for the FLTK User Interface Designer (FLUID)
4 do_not_include_H_from_C
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
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;} {}
52 {fltk::Window} main_window {
54 callback {if(!fltk::ask("Quit?")){
61 xywh {634 268 640 480} resizable
62 extra_code {\#include <stdio.h>
64 \#include <fltk/ask.h>
67 \#include "trackmodule.h"
68 o->size_range(640,455);
69 o->resize(640,455);} visible
71 {fltk::Group} {} {open
72 xywh {0 0 640 445} resizable
74 {fltk::Group} song_edit {open
77 {fltk::Group} {} {open
78 xywh {0 0 255 445} box FLAT_BOX
80 {fltk::Widget} track_info {
82 xywh {0 15 255 415} resizable
83 extra_code {\#include "trackinfo.h"}
88 callback {ui->track_info->toggle_controls();}
89 tooltip {more settings}
94 callback {track* t = new track();
96 ui->track_info->redraw();
97 ui->arranger->layout();
98 ui->song_vscroll->redraw();}
99 tooltip {add new track}
104 tooltip {delete last track}
108 {fltk::Group} {} {open
111 {fltk::Widget} song_timeline {
113 xywh {0 0 370 15} resizable
114 extra_code {o->scale=16;
119 {fltk::Group} song_scrollgroup {open
120 xywh {255 15 385 430} resizable
122 {fltk::Widget} arranger {
124 xywh {0 0 370 415} resizable box FLAT_BOX
125 extra_code {\#include "seq.h"
126 \#include "arranger.h"}
129 {fltk::Scrollbar} song_vscroll {
130 callback {int target = (int)o->value();
131 int dummy = ui->arranger->scrollx;
132 ui->arranger->scrollTo(dummy,target);}
133 xywh {370 0 15 415} slider_size 60
135 {fltk::Widget} song_hscroll {
136 callback {ui->arranger->scrollTo(o->value(), ui->arranger->scrolly);}
138 extra_code {\#include "dragbar.h"}
143 {fltk::Group} pattern_edit {
144 xywh {0 0 640 445} hide
146 {fltk::Group} {} {open
147 xywh {45 0 595 445} resizable
152 {fltk::Widget} pattern_timeline {
154 xywh {0 0 580 15} resizable box FLAT_BOX
155 extra_code {\#include "timeline.h"
160 {fltk::Group} pattern_scrollgroup {open
161 xywh {0 15 595 355} resizable
163 {fltk::Widget} piano_roll {
165 xywh {0 0 580 340} resizable box FLAT_BOX
166 extra_code {\#include "pianoroll.h"}
169 {fltk::Scrollbar} pattern_vscroll {
170 callback {int target = (int)o->value();
171 int dummy = ui->piano_roll->scrollx;
172 ui->piano_roll->scrollTo(dummy,target);}
175 {fltk::Widget} pattern_hscroll {
176 callback {ui->piano_roll->scrollTo(o->value(),ui->piano_roll->scrolly);}
178 extra_code {\#include "dragbar.h"}
185 {fltk::Widget} event_edit {
187 xywh {0 0 580 75} resizable box FLAT_BOX
188 extra_code {\#include "eventedit.h"}
191 {fltk::Widget} event_menu {
192 xywh {0 0 580 75} hide box FLAT_BOX
193 extra_code {\#include "eventmenu.h"}
196 {fltk::Button} event_menu_button {
198 callback {if(o->state()==0){
199 ui->event_menu->hide();
200 ui->event_edit->show();
203 ui->event_edit->hide();
204 ui->event_edit->recount_has();
205 ui->event_menu->show();
207 tooltip {pick event type}
209 extra_code {o->type(fltk::Button::TOGGLE);}
213 callback {ui->event_edit->label_flag = o->state();
214 ui->event_edit->redraw();}
215 tooltip {toggle event value labels}
217 extra_code {o->type(fltk::Button::TOGGLE);}
221 callback {ui->event_edit->clear_events();}
222 tooltip {clear these events}
227 callback {ui->event_edit->clear_non_note_events();}
228 tooltip {clear all non note events in pattern}
233 callback {ui->event_edit->clear_all_events();}
234 tooltip {clear everything}
235 xywh {580 60 15 15} labelcolor 0xff000000
239 {fltk::Group} {} {open
240 xywh {0 0 45 445} horizontal
246 {fltk::Group} {} {open
247 xywh {0 15 45 340} resizable
249 {fltk::Widget} track_select {
252 extra_code {\#include "trackselect.h"}
255 {fltk::Widget} sample_view {
258 extra_code {\#include "sampleview.h"}
261 {fltk::Widget} keyboard {
264 extra_code {\#include "keyboard.h"}
270 callback {show_song_edit();}
276 {fltk::Group} {} {open
277 xywh {0 445 640 35} box UP_BOX
279 {fltk::Button} play_button {
281 callback {press_play();}
282 xywh {5 5 25 25} labelcolor 0x800000
284 {fltk::Button} stop_button {
286 callback {press_stop();}
287 xywh {35 5 25 25} labelcolor 0x800000
289 {fltk::Button} record_button {
291 callback {toggle_backend_recording();}
292 xywh {65 5 25 25} labelcolor 0xff000000
293 extra_code {o->type(fltk::Button::TOGGLE);}
295 {fltk::Widget} metronome {
297 xywh {95 5 25 25} color 56 labelcolor 0xffffff00
298 extra_code {\#include <metronome.h>}
301 {fltk::Button} loop_toggle {
302 callback {toggle_loop();}
303 tooltip {toggle looping}
305 extra_code {o->type(fltk::Button::TOGGLE);}
307 {fltk::Group} {} {open
308 xywh {155 0 20 35} resizable
310 {fltk::Group} pattern_buttons {
311 xywh {200 5 310 25} hide
313 {fltk::Button} tri_button {
315 callback {set_trip(o->value());}
317 extra_code {o->type(fltk::Button::TOGGLE);}
319 {fltk::Button} quant1_button {
321 tooltip {quantize selected notes}
324 {fltk::Button} quant0_button {
326 tooltip {quantize length of selected notes}
329 {fltk::Button} tool_button {
331 callback {toggle_tool();}
334 {fltk::Button} qbutton4 {
335 callback {set_quant(4);}
337 extra_code {o->type(fltk::Button::TOGGLE);}
339 {fltk::Button} qbutton8 {
340 callback {set_quant(8);}
342 extra_code {o->type(fltk::Button::TOGGLE);}
344 {fltk::Button} qbutton16 {
345 callback {set_quant(16);}
347 extra_code {o->type(fltk::Button::TOGGLE);
350 {fltk::Button} qbutton32 {
351 callback {set_quant(32);}
353 extra_code {o->type(fltk::Button::TOGGLE);}
355 {fltk::Button} qbutton64 {
356 callback {set_quant(64);}
358 extra_code {o->type(fltk::Button::TOGGLE);}
360 {fltk::Button} qbutton128 {
361 callback {set_quant(128);}
363 extra_code {o->type(fltk::Button::TOGGLE);}
365 {fltk::Button} qbutton0 {
366 callback {set_quant(0);}
368 extra_code {o->type(fltk::Button::TOGGLE);}
371 {fltk::Group} song_buttons {
374 {fltk::Button} edit_button {
375 callback {set_songtool(0);}
376 tooltip {create delete move resize select paste blocks}
377 xywh {0 0 25 25} value 1
379 {fltk::Button} color_button {
380 callback {set_songtool(1);}
383 extra_code {o->type(fltk::Button::TOGGLE);}
385 {fltk::Button} unclone_button {
386 callback {set_songtool(2);}
387 tooltip {click on blocks to unclone them}
389 extra_code {o->type(fltk::Button::TOGGLE);}
391 {fltk::Button} split_button {
392 callback {set_songtool(3);}
393 tooltip {click on a block to split in two}
395 extra_code {o->type(fltk::Button::TOGGLE);}
397 {fltk::Button} join_button {
398 callback {set_songtool(4);}
399 tooltip {click on adjacent blocks to join them}
401 extra_code {o->type(fltk::Button::TOGGLE);}
404 {fltk::Button} conf_button {
405 callback {if(o->state()){
406 ui->config_window->show();
409 ui->config_window->hide();
411 tooltip configuration
413 extra_code {o->type(fltk::Button::TOGGLE);}
415 {fltk::Button} scope_button {
416 callback {if(o->state()){
417 ui->scope_window->show();
420 ui->scope_window->hide();
424 extra_code {o->type(fltk::Button::TOGGLE);}
426 {fltk::Button} file_button {
427 callback {if(o->state()){
428 ui->action_window->show();
431 ui->action_window->hide();
434 xywh {585 5 25 25} hide
435 extra_code {\#include "saveload.h"
436 o->type(fltk::Button::TOGGLE);}
438 {fltk::PopupMenu} file_menu {open
443 callback {reset_song();
444 ui->file_button->state(0);}
448 callback {action_window->hide();
449 ui->file_button->state(0);
450 const char* filename = fltk::file_chooser("open file",NULL,get_last_dir());
453 if(load(filename)<0){
460 callback {action_window->hide();
461 ui->file_button->state(0);
466 callback {action_window->hide();
467 ui->file_button->state(0);
468 save(fltk::file_chooser("save file",NULL,get_last_dir()));}
474 callback {action_window->hide();
475 ui->file_button->state(0);
476 const char* filename = fltk::file_chooser("open file",NULL,get_last_dir());
479 if(loadsmf(filename)<0){
486 callback {action_window->hide();
487 ui->file_button->state(0);
488 savesmf(fltk::file_chooser("export file",NULL,get_last_dir()));}
491 {fltk::Button} help_button {
492 callback {if(o->state()){
493 ui->help_window->show();
496 ui->help_window->hide();
500 extra_code {o->type(fltk::Button::TOGGLE);}
504 {fltk::Window} config_window {
506 callback {ui->conf_button->state(0);
508 xywh {52 125 320 285} hide resizable
510 {fltk::TabGroup} {} {open
515 xywh {145 15 170 265} horizontal
517 {fltk::ValueInput} beats_per_measure {
518 label {beats per measure}
519 callback {if(o->value() > o->maximum())
520 o->value(o->maximum());
521 if(o->value() < o->minimum())
522 o->value(o->minimum());
523 set_beats_per_measure((int)o->value());}
524 xywh {5 5 45 20} minimum 1 maximum 31 step 1 value 4
526 {fltk::ValueInput} measures_per_phrase {
527 label {measures per phrase}
528 callback {if(o->value() > o->maximum())
529 o->value(o->maximum());
530 if(o->value() < o->minimum())
531 o->value(o->minimum());
532 set_measures_per_phrase((int)o->value());}
533 xywh {5 30 45 20} maximum 128 step 1 value 4
535 {fltk::ValueOutput} bpm_output {
537 xywh {5 55 45 20} minimum 1 maximum 1000 step 1 value 120
539 {fltk::ThumbWheel} bpm_wheel {
540 callback {set_bpm((int)o->value());
541 ui->bpm_output->value(o->value());}
542 xywh {55 55 105 20} align 4 minimum 1 maximum 1000 step 1 value 120
544 {fltk::ValueInput} measures_until_record {
545 label {measures until record}
546 callback {if(o->value() > o->maximum())
547 o->value(o->maximum());
548 if(o->value() < o->minimum())
549 o->value(o->minimum());
550 set_measures_until_record((int)o->value());}
551 xywh {5 80 45 20} maximum 128 step 1 value 1
553 {fltk::CheckButton} check_alwayscopy {
554 label {always hard copy}
555 callback {set_alwayscopy(o->value());}
556 tooltip {instead of making a linked clone when you copy a block in the song view.}
557 xywh {5 105 25 25} align 4
559 {fltk::CheckButton} check_trackinit {
561 callback {set_trackinit(o->value());}
562 xywh {145 80 25 25} align 4 value 1
564 {fltk::CheckButton} check_autotrackname {
565 label {auto track name}
566 callback {set_autotrackname(o->value());}
567 tooltip {Fill in GM instruments for track names when you change the program.}
568 xywh {145 105 25 25} align 4
570 {fltk::CheckButton} check_passthru {
571 label {record pass-thru}
572 callback {set_passthru(o->value());}
573 tooltip {Echo midi input to midi output.}
574 xywh {5 130 25 26} horizontal align 4 value 1
576 {fltk::CheckButton} check_playinsert {
577 label {play note insertion}
578 callback {set_playinsert(o->value());}
579 tooltip {Send midi note on when you create notes.}
580 xywh {145 130 25 26} horizontal align 4 value 1
582 {fltk::CheckButton} check_recordonchan {
583 label {record on channel}
584 callback {set_recordonchan(o->value());}
585 tooltip {Record on first track that matches channel of midi input instead of selected track.}
586 xywh {5 155 25 25} align 4
588 {fltk::CheckButton} check_playmove {
589 label {play note move}
590 callback {set_playmove(o->value());}
591 tooltip {Send midi note on when you move notes.}
592 xywh {145 155 25 26} horizontal align 4 value 1
594 {fltk::CheckButton} check_follow {
595 label {follow playback}
596 callback {set_follow(o->value());}
597 tooltip {Auto scroll horizontally when play head leaves viewing area.}
598 xywh {5 179 25 26} horizontal align 4 value 1
600 {fltk::ValueInput} default_velocity {
601 label {default velocity}
602 callback {if(o->value() > o->maximum())
603 o->value(o->maximum());
604 if(o->value() < o->minimum())
605 o->value(o->minimum());
606 set_defaultvelocity((int)o->value());}
607 xywh {120 180 45 20} maximum 127 step 1 value 96
609 {fltk::Choice} menu_recordmode {
610 label {record mode} open
615 callback {set_recordmode(0);}
619 callback {set_recordmode(1);}
623 callback {set_recordmode(2);}
626 {fltk::Choice} menu_rob {
627 label {record outside block} open
632 callback {set_robmode(0);}
636 callback {set_robmode(1);}
640 callback {set_robmode(2);}
646 xywh {0 15 320 270} hide
648 {fltk::Widget} kg_l0 {
650 xywh {35 5 45 15} align 4
653 {fltk::Widget} kg_l1 {
655 xywh {35 20 45 15} align 4
658 {fltk::Widget} kg_l2 {
660 xywh {35 35 45 15} align 4
663 {fltk::Widget} kg_l3 {
665 xywh {35 50 45 15} align 4
668 {fltk::Widget} kg_l4 {
670 xywh {35 65 45 15} align 4
673 {fltk::Widget} kg_l5 {
675 xywh {35 80 45 15} align 4
678 {fltk::Widget} kg_l6 {
680 xywh {35 95 45 15} align 4
683 {fltk::Widget} kg_l7 {
685 xywh {35 110 45 15} align 4
688 {fltk::Widget} kg_l8 {
690 xywh {35 125 45 15} align 4
693 {fltk::Widget} kg_l9 {
695 xywh {35 140 45 15} align 4
698 {fltk::Widget} kg_l10 {
701 xywh {35 155 45 15} align 4
704 {fltk::Widget} kg_l11 {
706 xywh {35 170 45 15} align 4
709 {fltk::Widget} kg_l12 {
711 xywh {35 185 45 15} align 4
714 {fltk::Widget} kg_l13 {
716 xywh {35 200 45 15} align 4
719 {fltk::Widget} kg_l14 {
721 xywh {35 215 45 15} align 4
724 {fltk::Widget} kg_l15 {
726 xywh {35 230 45 15} align 4
729 {fltk::Widget} kg_l16 {
731 xywh {35 245 45 15} align 4
734 {fltk::Widget} kg_u0 {
736 xywh {130 5 45 15} align 4
739 {fltk::Widget} kg_u1 {
741 xywh {130 20 45 15} align 4
744 {fltk::Widget} kg_u2 {
746 xywh {130 35 45 15} align 4
749 {fltk::Widget} kg_u3 {
751 xywh {130 50 45 15} align 4
754 {fltk::Widget} kg_u4 {
756 xywh {130 65 45 15} align 4
759 {fltk::Widget} kg_u5 {
761 xywh {130 80 45 15} align 4
764 {fltk::Widget} kg_u6 {
766 xywh {130 95 45 15} align 4
769 {fltk::Widget} kg_u7 {
771 xywh {130 110 45 15} align 4
774 {fltk::Widget} kg_u8 {
776 xywh {130 125 45 15} align 4
779 {fltk::Widget} kg_u9 {
781 xywh {130 140 45 15} align 4
784 {fltk::Widget} kg_u10 {
786 xywh {130 155 45 15} align 4
789 {fltk::Widget} kg_u11 {
791 xywh {130 170 45 15} align 4
794 {fltk::Widget} kg_u12 {
796 xywh {130 185 45 15} align 4
799 {fltk::Widget} kg_u13 {
801 xywh {130 200 45 15} align 4
804 {fltk::Widget} kg_u14 {
806 xywh {130 215 45 15} align 4
809 {fltk::Widget} kg_u15 {
811 xywh {130 230 45 15} align 4
814 {fltk::Widget} kg_u16 {
816 xywh {130 245 45 15} align 4
819 {fltk::Widget} kg_u17 {
821 xywh {265 5 45 15} align 4
824 {fltk::Widget} kg_u18 {
826 xywh {265 20 45 15} align 4
829 {fltk::Widget} kg_u19 {
831 xywh {265 35 45 15} align 4
834 {fltk::Widget} kg_u20 {
836 xywh {265 50 45 15} align 4
839 {fltk::Widget} kg_zi {
841 xywh {265 65 45 15} align 4
844 {fltk::Widget} kg_zo {
846 xywh {265 80 45 15} align 4
849 {fltk::Widget} kg_ou {
851 xywh {265 95 45 15} align 4
854 {fltk::Widget} kg_od {
856 xywh {265 110 45 15} align 4
862 xywh {0 15 320 270} hide
885 {fltk::Window} help_window {
887 callback {ui->help_button->state(0);
889 xywh {519 345 580 370} hide resizable
890 extra_code {o->size_range(580,370);}
892 {fltk::TabGroup} {} {open
897 xywh {0 25 580 345} resizable
899 {fltk::Input} title_text {
903 {fltk::Input} author_text {
907 {fltk::TextEditor} info_text {
908 xywh {5 55 570 285} resizable textfont 4
913 xywh {0 25 580 345} hide
915 {fltk::TextDisplay} {} {
916 xywh {5 5 570 335} resizable textfont 4
917 extra_code {load_text(o,ROOT_DATA_DIR"doc/controls.txt");}
922 xywh {0 25 580 345} hide
924 {fltk::TextDisplay} {} {
925 xywh {5 5 570 335} resizable textfont 4
926 extra_code {load_text(o,ROOT_DATA_DIR"doc/guide.txt");}
931 xywh {0 25 580 345} hide
933 {fltk::TextDisplay} {} {
934 xywh {5 5 570 335} resizable textfont 4
935 extra_code {load_text(o,ROOT_DATA_DIR"doc/license.txt");}
940 xywh {0 25 580 345} hide
942 {fltk::TextDisplay} {} {
943 xywh {5 5 570 335} resizable textfont 4
944 extra_code {load_text(o,ROOT_DATA_DIR"doc/README");}
949 {fltk::Window} action_window {
951 callback {ui->file_button->state(0);
953 xywh {286 302 100 130} horizontal hide resizable
957 callback {reset_song();
958 ui->file_button->state(0);}
963 callback {action_window->hide();
964 ui->file_button->state(0);
970 callback {action_window->hide();
971 ui->file_button->state(0);
972 save(fltk::file_chooser("save file",NULL,get_last_dir()));}
977 callback {action_window->hide();
978 ui->file_button->state(0);
979 if(load(fltk::file_chooser("open file",NULL,get_last_dir()))<0){
986 callback {action_window->hide();
987 ui->file_button->state(0);
988 if(loadsmf(fltk::file_chooser("import file",NULL,get_last_dir()))<0){
995 callback {action_window->hide();
996 ui->file_button->state(0);
997 savesmf(fltk::file_chooser("export file",NULL,get_last_dir()));}
1001 {fltk::Window} scope_window {
1003 callback {ui->scope_button->state(0);
1005 xywh {647 310 425 280} hide resizable
1007 {fltk::TextDisplay} scope {
1008 xywh {5 5 415 245} resizable textfont 4 color 0x280000 textcolor 0xff0000
1009 extra_code {o->wrap_mode(1);}
1011 {fltk::Group} {} {open
1016 callback {if(o->state()){
1023 extra_code {o->type(fltk::Button::TOGGLE);}
1025 {fltk::InvisibleBox} {} {
1026 xywh {45 0 95 20} resizable
1030 code {loop_toggle->image(fltk::SharedImage::get(ROOT_DATA_DIR"gfx/loop.gif"));
1031 conf_button->image(fltk::SharedImage::get(ROOT_DATA_DIR"gfx/conf.gif"));
1032 scope_button->image(fltk::SharedImage::get(ROOT_DATA_DIR"gfx/scope.gif"));
1033 file_button->image(fltk::SharedImage::get(ROOT_DATA_DIR"gfx/file.gif"));
1034 file_menu->image(fltk::SharedImage::get(ROOT_DATA_DIR"gfx/file.gif"));
1035 help_button->image(fltk::SharedImage::get(ROOT_DATA_DIR"gfx/help.gif"));
1037 edit_button->image(fltk::SharedImage::get(ROOT_DATA_DIR"gfx/edit.gif"));
1038 color_button->image(fltk::SharedImage::get(ROOT_DATA_DIR"gfx/color.gif"));
1039 unclone_button->image(fltk::SharedImage::get(ROOT_DATA_DIR"gfx/fork.gif"));
1040 split_button->image(fltk::SharedImage::get(ROOT_DATA_DIR"gfx/split.gif"));
1041 join_button->image(fltk::SharedImage::get(ROOT_DATA_DIR"gfx/join.gif"));
1043 qbutton4->image(fltk::SharedImage::get(ROOT_DATA_DIR"gfx/q4.gif"));
1044 qbutton8->image(fltk::SharedImage::get(ROOT_DATA_DIR"gfx/q8.gif"));
1045 qbutton16->image(fltk::SharedImage::get(ROOT_DATA_DIR"gfx/q16.gif"));
1046 qbutton32->image(fltk::SharedImage::get(ROOT_DATA_DIR"gfx/q32.gif"));
1047 qbutton64->image(fltk::SharedImage::get(ROOT_DATA_DIR"gfx/q64.gif"));
1048 qbutton128->image(fltk::SharedImage::get(ROOT_DATA_DIR"gfx/q128.gif"));
1049 qbutton0->image(fltk::SharedImage::get(ROOT_DATA_DIR"gfx/q0.gif"));} {}
1050 code {track_info->set_rec(0);} {}
1051 code {start_monitor();} {}
1052 code {main_window->show();} {}