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 {config_window->hide();
56 action_window->hide();
61 xywh {31 41 640 480} hide resizable
62 extra_code {\#include <unistd.h>
65 \#include "trackmodule.h"
66 o->size_range(640,455);
70 xywh {0 0 640 445} resizable
72 {fltk::Group} song_edit {open
76 xywh {0 0 255 445} box FLAT_BOX
78 {fltk::Widget} track_info {
80 xywh {0 15 255 415} resizable
81 extra_code {\#include "trackinfo.h"}
86 callback {ui->track_info->toggle_controls();}
90 {fltk::Group} {} {open
93 {fltk::Widget} song_timeline {
95 xywh {0 0 370 15} resizable
96 extra_code {o->scale=16;
101 {fltk::Group} song_scrollgroup {open
102 xywh {255 15 385 430} resizable
104 {fltk::Widget} arranger {
106 xywh {0 0 370 415} resizable box FLAT_BOX
107 extra_code {\#include "seq.h"
108 \#include "arranger.h"}
111 {fltk::Scrollbar} song_vscroll {
112 callback {int target = (int)o->value();
113 int dummy = ui->arranger->scrollx;
114 ui->arranger->scrollTo(dummy,target);}
115 xywh {370 0 15 415} slider_size 60
117 {fltk::ThumbWheel} song_hscroll {
118 callback {ui->arranger->scrollTo((int)o->value(),ui->arranger->scrolly);}
119 xywh {0 415 370 15} maximum 10000 step 10
123 {fltk::Group} pattern_edit {open
124 xywh {0 0 640 445} hide
126 {fltk::Group} {} {open
127 xywh {45 0 595 445} resizable
132 {fltk::Widget} pattern_timeline {
134 xywh {0 0 580 15} resizable box FLAT_BOX
135 extra_code {\#include "timeline.h"
140 {fltk::Group} pattern_scrollgroup {open
141 xywh {0 15 595 355} resizable
143 {fltk::Widget} piano_roll {
145 xywh {0 0 580 340} resizable box FLAT_BOX
146 extra_code {\#include "pianoroll.h"}
149 {fltk::Scrollbar} pattern_vscroll {
150 callback {int target = (int)o->value();
151 int dummy = ui->piano_roll->scrollx;
152 ui->piano_roll->scrollTo(dummy,target);}
155 {fltk::ThumbWheel} pattern_hscroll {
156 callback {ui->piano_roll->scrollTo((int)o->value(),ui->piano_roll->scrolly);}
157 xywh {0 340 580 15} step 10
163 {fltk::Widget} event_edit {
165 xywh {0 0 580 75} resizable box FLAT_BOX
166 extra_code {\#include "eventedit.h"}
169 {fltk::Widget} event_menu {
170 xywh {0 0 580 75} hide box FLAT_BOX
171 extra_code {\#include "eventmenu.h"}
174 {fltk::Button} event_menu_button {
176 callback {if(o->state()==0){
177 ui->event_menu->hide();
178 ui->event_edit->show();
181 ui->event_edit->hide();
182 ui->event_edit->recount_has();
183 ui->event_menu->show();
185 tooltip {pick event type}
187 extra_code {o->type(fltk::Button::TOGGLE);}
191 callback {ui->event_edit->label_flag = o->state();
192 ui->event_edit->redraw();}
193 tooltip {toggle event value labels}
195 extra_code {o->type(fltk::Button::TOGGLE);}
199 callback {ui->event_edit->clear_events();}
200 tooltip {clear these events}
205 callback {ui->event_edit->clear_non_note_events();}
206 tooltip {clear all non note events in pattern}
211 callback {ui->event_edit->clear_all_events();}
212 tooltip {clear everything}
213 xywh {580 60 15 15} labelcolor 0xff000000
217 {fltk::Group} {} {open
218 xywh {0 0 45 445} horizontal
224 {fltk::Group} {} {open
225 xywh {0 15 45 340} resizable
227 {fltk::Widget} track_select {
230 extra_code {\#include "trackselect.h"}
233 {fltk::Widget} sample_view {
236 extra_code {\#include "sampleview.h"}
239 {fltk::Widget} keyboard {
242 extra_code {\#include "keyboard.h"}
248 callback {show_song_edit();}
254 {fltk::Group} {} {open
255 xywh {0 445 640 35} box UP_BOX
257 {fltk::Button} play_button {
259 callback {press_play();}
260 xywh {5 5 25 25} labelcolor 0x800000
262 {fltk::Button} stop_button {
264 callback {press_stop();}
265 xywh {35 5 25 25} labelcolor 0x800000
267 {fltk::Button} record_button {
269 callback {toggle_backend_recording();}
270 xywh {65 5 25 25} labelcolor 0xff000000
271 extra_code {o->type(fltk::Button::TOGGLE);}
273 {fltk::Widget} metronome {
275 xywh {95 5 25 25} color 56 labelcolor 0xffffff00
276 extra_code {\#include <metronome.h>}
279 {fltk::Group} {} {open
280 xywh {125 0 20 35} resizable
282 {fltk::Group} pattern_buttons {
283 xywh {145 5 310 25} hide
285 {fltk::Button} qbutton4 {
286 callback {set_quant(4);}
288 extra_code {o->type(fltk::Button::TOGGLE);}
290 {fltk::Button} qbutton8 {
291 callback {set_quant(8);}
293 extra_code {o->type(fltk::Button::TOGGLE);}
295 {fltk::Button} qbutton16 {
296 callback {set_quant(16);}
298 extra_code {o->type(fltk::Button::TOGGLE);
301 {fltk::Button} qbutton32 {
302 callback {set_quant(32);}
304 extra_code {o->type(fltk::Button::TOGGLE);}
306 {fltk::Button} qbutton64 {
307 callback {set_quant(64);}
309 extra_code {o->type(fltk::Button::TOGGLE);}
311 {fltk::Button} qbutton128 {
312 callback {set_quant(128);}
314 extra_code {o->type(fltk::Button::TOGGLE);}
316 {fltk::Button} qbutton0 {
317 callback {set_quant(0);}
319 extra_code {o->type(fltk::Button::TOGGLE);}
321 {fltk::Button} quant1_button {
323 tooltip {quantize selected notes}
326 {fltk::Button} quant0_button {
328 tooltip {quantize length of selected notes}
331 {fltk::Button} tool_button {
333 callback {toggle_tool();}
337 {fltk::Group} song_buttons {open
340 {fltk::Button} edit_button {
341 callback {set_songtool(0);}
342 tooltip {create delete move resize select paste blocks}
343 xywh {0 0 25 25} value 1
345 {fltk::Button} color_button {
346 callback {set_songtool(1);}
349 extra_code {o->type(fltk::Button::TOGGLE);}
351 {fltk::Button} unclone_button {
352 callback {set_songtool(2);}
353 tooltip {click on blocks to unclone them}
355 extra_code {o->type(fltk::Button::TOGGLE);}
357 {fltk::Button} split_button {
358 callback {set_songtool(3);}
359 tooltip {click on a block to split in two}
361 extra_code {o->type(fltk::Button::TOGGLE);}
363 {fltk::Button} join_button {
364 callback {set_songtool(4);}
365 tooltip {click on adjacent blocks to join them}
367 extra_code {o->type(fltk::Button::TOGGLE);}
370 {fltk::Button} loop_toggle {
371 callback {toggle_loop();}
372 tooltip {toggle looping}
374 extra_code {o->type(fltk::Button::TOGGLE);}
376 {fltk::Button} conf_toggle {
377 callback {if(o->state()){
378 ui->config_window->show();
381 ui->config_window->hide();
383 tooltip configuration
385 extra_code {o->type(fltk::Button::TOGGLE);}
387 {fltk::Button} scope_button {
388 callback {if(o->state()){
389 ui->scope_window->show();
392 ui->scope_window->hide();
396 extra_code {o->type(fltk::Button::TOGGLE);}
398 {fltk::Button} file_button {
399 callback {if(o->state()){
400 ui->action_window->show();
403 ui->action_window->hide();
407 extra_code {\#include "saveload.h"
408 o->type(fltk::Button::TOGGLE);}
410 {fltk::Button} help_button {
411 callback {if(o->state()){
412 ui->help_window->show();
415 ui->help_window->hide();
419 extra_code {o->type(fltk::Button::TOGGLE);}
423 {fltk::Window} config_window {
425 xywh {52 125 320 285} hide
427 {fltk::TabGroup} {} {open
432 xywh {145 15 170 265} horizontal
434 {fltk::ValueInput} beats_per_measure {
435 label {beats per measure}
436 callback {if(o->value() > o->maximum())
437 o->value(o->maximum());
438 if(o->value() < o->minimum())
439 o->value(o->minimum());
440 set_beats_per_measure((int)o->value());}
441 xywh {5 5 45 20} minimum 1 maximum 31 step 1 value 4
443 {fltk::ValueInput} measures_per_phrase {
444 label {measures per phrase}
445 callback {if(o->value() > o->maximum())
446 o->value(o->maximum());
447 if(o->value() < o->minimum())
448 o->value(o->minimum());
449 set_measures_per_phrase((int)o->value());}
450 xywh {5 30 45 20} maximum 128 step 1 value 4
452 {fltk::ValueOutput} bpm_output {
454 xywh {5 55 45 20} minimum 1 maximum 1000 step 1 value 120
456 {fltk::ThumbWheel} bpm_wheel {
457 callback {set_bpm((int)o->value());
458 ui->bpm_output->value(o->value());}
459 xywh {55 55 105 20} align 4 minimum 1 maximum 1000 step 1 value 120
461 {fltk::ValueInput} measures_until_record {
462 label {measures until record}
463 callback {if(o->value() > o->maximum())
464 o->value(o->maximum());
465 if(o->value() < o->minimum())
466 o->value(o->minimum());
467 set_measures_until_record((int)o->value());}
468 xywh {5 80 45 20} maximum 128 step 1 value 1
470 {fltk::CheckButton} check_alwayscopy {
471 label {always hard copy}
472 callback {set_alwayscopy(o->value());}
473 tooltip {instead of making a linked clone when you copy a block in the song view.}
474 xywh {5 105 25 25} align 4
476 {fltk::CheckButton} check_autotrackname {
477 label {auto track name}
478 callback {set_autotrackname(o->value());}
479 tooltip {Fill in GM instruments for track names when you change the program.}
480 xywh {145 105 25 25} align 4
482 {fltk::CheckButton} check_passthru {
483 label {record pass-thru}
484 callback {set_passthru(o->value());}
485 tooltip {Echo midi input to midi output.}
486 xywh {5 130 25 26} horizontal align 4 value 1
488 {fltk::CheckButton} check_playinsert {
489 label {play note insertion}
490 callback {set_playinsert(o->value());}
491 tooltip {Send midi note on when you create notes.}
492 xywh {145 130 25 26} horizontal align 4 value 1
494 {fltk::CheckButton} check_recordonchan {
495 label {record on channel}
496 callback {set_recordonchan(o->value());}
497 tooltip {Record on first track that matches channel of midi input instead of selected track.}
498 xywh {5 155 25 25} align 4
500 {fltk::CheckButton} check_playmove {
501 label {play note move}
502 callback {set_playmove(o->value());}
503 tooltip {Send midi note on when you move notes.}
504 xywh {145 155 25 26} horizontal align 4 value 1
506 {fltk::CheckButton} check_follow {
507 label {follow playback}
508 callback {set_follow(o->value());}
509 tooltip {Auto scroll horizontally when play head leaves viewing area.}
510 xywh {5 179 25 26} horizontal align 4 value 1
512 {fltk::ValueInput} default_velocity {
513 label {default velocity}
514 callback {if(o->value() > o->maximum())
515 o->value(o->maximum());
516 if(o->value() < o->minimum())
517 o->value(o->minimum());
518 set_defaultvelocity((int)o->value());}
519 xywh {120 180 45 20} maximum 127 step 1 value 96
521 {fltk::Choice} menu_recordmode {
522 label {record mode} open
527 callback {set_recordmode(0);}
531 callback {set_recordmode(1);}
535 callback {set_recordmode(2);}
538 {fltk::Choice} menu_rob {
539 label {record outside block} open
544 callback {set_robmode(0);}
548 callback {set_robmode(1);}
552 callback {set_robmode(2);}
558 xywh {0 15 320 270} hide
560 {fltk::Widget} kg_l0 {
562 xywh {35 5 45 15} align 4
565 {fltk::Widget} kg_l1 {
567 xywh {35 20 45 15} align 4
570 {fltk::Widget} kg_l2 {
572 xywh {35 35 45 15} align 4
575 {fltk::Widget} kg_l3 {
577 xywh {35 50 45 15} align 4
580 {fltk::Widget} kg_l4 {
582 xywh {35 65 45 15} align 4
585 {fltk::Widget} kg_l5 {
587 xywh {35 80 45 15} align 4
590 {fltk::Widget} kg_l6 {
592 xywh {35 95 45 15} align 4
595 {fltk::Widget} kg_l7 {
597 xywh {35 110 45 15} align 4
600 {fltk::Widget} kg_l8 {
602 xywh {35 125 45 15} align 4
605 {fltk::Widget} kg_l9 {
607 xywh {35 140 45 15} align 4
610 {fltk::Widget} kg_l10 {
613 xywh {35 155 45 15} align 4
616 {fltk::Widget} kg_l11 {
618 xywh {35 170 45 15} align 4
621 {fltk::Widget} kg_l12 {
623 xywh {35 185 45 15} align 4
626 {fltk::Widget} kg_l13 {
628 xywh {35 200 45 15} align 4
631 {fltk::Widget} kg_l14 {
633 xywh {35 215 45 15} align 4
636 {fltk::Widget} kg_l15 {
638 xywh {35 230 45 15} align 4
641 {fltk::Widget} kg_l16 {
643 xywh {35 245 45 15} align 4
646 {fltk::Widget} kg_u0 {
648 xywh {130 5 45 15} align 4
651 {fltk::Widget} kg_u1 {
653 xywh {130 20 45 15} align 4
656 {fltk::Widget} kg_u2 {
658 xywh {130 35 45 15} align 4
661 {fltk::Widget} kg_u3 {
663 xywh {130 50 45 15} align 4
666 {fltk::Widget} kg_u4 {
668 xywh {130 65 45 15} align 4
671 {fltk::Widget} kg_u5 {
673 xywh {130 80 45 15} align 4
676 {fltk::Widget} kg_u6 {
678 xywh {130 95 45 15} align 4
681 {fltk::Widget} kg_u7 {
683 xywh {130 110 45 15} align 4
686 {fltk::Widget} kg_u8 {
688 xywh {130 125 45 15} align 4
691 {fltk::Widget} kg_u9 {
693 xywh {130 140 45 15} align 4
696 {fltk::Widget} kg_u10 {
698 xywh {130 155 45 15} align 4
701 {fltk::Widget} kg_u11 {
703 xywh {130 170 45 15} align 4
706 {fltk::Widget} kg_u12 {
708 xywh {130 185 45 15} align 4
711 {fltk::Widget} kg_u13 {
713 xywh {130 200 45 15} align 4
716 {fltk::Widget} kg_u14 {
718 xywh {130 215 45 15} align 4
721 {fltk::Widget} kg_u15 {
723 xywh {130 230 45 15} align 4
726 {fltk::Widget} kg_u16 {
728 xywh {130 245 45 15} align 4
731 {fltk::Widget} kg_u17 {
733 xywh {265 5 45 15} align 4
736 {fltk::Widget} kg_u18 {
738 xywh {265 20 45 15} align 4
741 {fltk::Widget} kg_u19 {
743 xywh {265 35 45 15} align 4
746 {fltk::Widget} kg_u20 {
748 xywh {265 50 45 15} align 4
751 {fltk::Widget} kg_zi {
753 xywh {265 65 45 15} align 4
756 {fltk::Widget} kg_zo {
758 xywh {265 80 45 15} align 4
761 {fltk::Widget} kg_ou {
763 xywh {265 95 45 15} align 4
766 {fltk::Widget} kg_od {
768 xywh {265 110 45 15} align 4
774 xywh {0 15 320 270} hide
797 {fltk::Window} help_window {
799 xywh {519 345 580 370} hide resizable
800 extra_code {o->size_range(580,370);}
802 {fltk::TabGroup} {} {open
807 xywh {0 25 580 345} resizable
809 {fltk::Input} title_text {
813 {fltk::Input} author_text {
817 {fltk::TextEditor} info_text {
818 xywh {5 55 570 285} resizable textfont 4
823 xywh {0 25 580 345} hide
825 {fltk::TextDisplay} {} {
826 xywh {5 5 570 335} resizable textfont 4
827 extra_code {load_text(o,ROOT_DATA_DIR"doc/controls.txt");}
832 xywh {0 25 580 345} hide
834 {fltk::TextDisplay} {} {
835 xywh {5 5 570 335} resizable textfont 4
836 extra_code {load_text(o,ROOT_DATA_DIR"doc/guide.txt");}
841 xywh {0 25 580 345} hide
843 {fltk::TextDisplay} {} {
844 xywh {5 5 570 335} resizable textfont 4
845 extra_code {load_text(o,ROOT_DATA_DIR"doc/license.txt");}
850 xywh {0 25 580 345} hide
852 {fltk::TextDisplay} {} {
853 xywh {5 5 570 335} resizable textfont 4
854 extra_code {load_text(o,ROOT_DATA_DIR"doc/README");}
859 {fltk::Window} action_window {
861 xywh {286 302 100 130} horizontal hide
865 callback {reset_song();}
870 callback {action_window->hide();
876 callback {action_window->hide();
877 save(fltk::file_chooser("save file",NULL,get_last_dir()));}
882 callback {action_window->hide();
883 if(load(fltk::file_chooser("open file",NULL,get_last_dir()))<0){
890 callback {action_window->hide();
891 if(loadsmf(fltk::file_chooser("import file",NULL,get_last_dir()))<0){
898 callback {action_window->hide();
899 savesmf(fltk::file_chooser("export file",NULL,get_last_dir()));}
903 {fltk::Window} scope_window {
905 xywh {647 310 425 280} hide resizable
907 {fltk::TextDisplay} scope {
908 xywh {5 5 415 245} textfont 4 color 0x280000 textcolor 0xff0000
909 extra_code {o->wrap_mode(1);}
916 callback {if(o->state()){
923 extra_code {o->type(fltk::Button::TOGGLE);}
925 {fltk::InvisibleBox} {} {
926 xywh {45 0 95 20} resizable
930 code {loop_toggle->image(fltk::SharedImage::get(ROOT_DATA_DIR"gfx/loop.gif"));
931 conf_toggle->image(fltk::SharedImage::get(ROOT_DATA_DIR"gfx/conf.gif"));
932 scope_button->image(fltk::SharedImage::get(ROOT_DATA_DIR"gfx/scope.gif"));
933 file_button->image(fltk::SharedImage::get(ROOT_DATA_DIR"gfx/file.gif"));
934 help_button->image(fltk::SharedImage::get(ROOT_DATA_DIR"gfx/help.gif"));
936 edit_button->image(fltk::SharedImage::get(ROOT_DATA_DIR"gfx/edit.gif"));
937 color_button->image(fltk::SharedImage::get(ROOT_DATA_DIR"gfx/color.gif"));
938 unclone_button->image(fltk::SharedImage::get(ROOT_DATA_DIR"gfx/fork.gif"));
939 split_button->image(fltk::SharedImage::get(ROOT_DATA_DIR"gfx/split.gif"));
940 join_button->image(fltk::SharedImage::get(ROOT_DATA_DIR"gfx/join.gif"));
942 qbutton4->image(fltk::SharedImage::get(ROOT_DATA_DIR"gfx/q4.gif"));
943 qbutton8->image(fltk::SharedImage::get(ROOT_DATA_DIR"gfx/q8.gif"));
944 qbutton16->image(fltk::SharedImage::get(ROOT_DATA_DIR"gfx/q16.gif"));
945 qbutton32->image(fltk::SharedImage::get(ROOT_DATA_DIR"gfx/q32.gif"));
946 qbutton64->image(fltk::SharedImage::get(ROOT_DATA_DIR"gfx/q64.gif"));
947 qbutton128->image(fltk::SharedImage::get(ROOT_DATA_DIR"gfx/q128.gif"));
948 qbutton0->image(fltk::SharedImage::get(ROOT_DATA_DIR"gfx/q0.gif"));} {}
949 code {track_info->set_rec(0);} {}
950 code {start_monitor();} {}
951 code {main_window->show();} {}