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();
60 save_config();} open selected
61 xywh {31 41 640 480} resizable
62 extra_code {\#include <unistd.h>
65 \#include "trackmodule.h"
66 o->size_range(640,455);
67 o->resize(640,455);} visible
70 xywh {0 0 640 445} resizable
72 {fltk::Group} song_edit {
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::ScrollGroup} song_scroll {
102 xywh {255 15 385 430} resizable
103 extra_code {\#include <fltk/ScrollGroup.h>
104 \#include "customscroll.h"
105 o->type(fltk::ScrollGroup::BOTH_ALWAYS);}
108 {fltk::Widget} arranger {
110 xywh {0 0 245 220} box FLAT_BOX
111 extra_code {\#include "seq.h"
112 \#include "arranger.h"
113 o->resize(1000,30*16);}
118 {fltk::Group} pattern_edit {
119 xywh {0 0 640 445} hide
121 {fltk::Group} {} {open
122 xywh {45 0 595 445} resizable
124 {fltk::Group} {} {open
127 {fltk::Widget} pattern_timeline {
129 xywh {0 0 580 15} resizable box FLAT_BOX
130 extra_code {\#include "timeline.h"
135 {fltk::ScrollGroup} pattern_scroll {open
136 xywh {0 15 595 355} when CHANGED resizable box FLAT_BOX shortcut 0xff1b
137 extra_code {o->type(fltk::ScrollGroup::BOTH_ALWAYS);}
139 {fltk::Widget} piano_roll {
141 xywh {0 0 595 355} resizable box FLAT_BOX
142 extra_code {\#include "pianoroll.h"
147 {fltk::Group} {} {open
150 {fltk::Widget} event_edit {
152 xywh {0 0 580 75} box FLAT_BOX
153 extra_code {\#include "eventedit.h"}
156 {fltk::Widget} event_menu {
157 xywh {0 0 580 75} hide box FLAT_BOX
158 extra_code {\#include "eventmenu.h"}
161 {fltk::Button} event_menu_button {
163 callback {if(o->state()==0){
164 ui->event_menu->hide();
165 ui->event_edit->show();
168 ui->event_edit->hide();
169 ui->event_edit->recount_has();
170 ui->event_menu->show();
172 tooltip {pick event type}
174 extra_code {o->type(fltk::Button::TOGGLE);}
178 callback {ui->event_edit->label_flag = o->state();
179 ui->event_edit->redraw();}
180 tooltip {toggle event value labels}
182 extra_code {o->type(fltk::Button::TOGGLE);}
186 callback {ui->event_edit->clear_events();}
187 tooltip {clear these events}
192 callback {ui->event_edit->clear_non_note_events();}
193 tooltip {clear all non note events in pattern}
198 callback {ui->event_edit->clear_all_events();}
199 tooltip {clear everything}
200 xywh {580 60 15 15} labelcolor 0xff000000
204 {fltk::Group} {} {open
205 xywh {0 0 45 445} horizontal
211 {fltk::Group} {} {open
212 xywh {0 15 45 340} resizable
214 {fltk::Widget} track_select {
217 extra_code {\#include "trackselect.h"}
220 {fltk::Widget} sample_view {
223 extra_code {\#include "sampleview.h"}
226 {fltk::Widget} keyboard {
229 extra_code {\#include "keyboard.h"}
235 callback {show_song_edit();}
242 xywh {0 445 640 35} box UP_BOX
244 {fltk::Button} play_button {
246 callback {press_play();}
247 xywh {5 5 25 25} labelcolor 0x800000
249 {fltk::Button} stop_button {
251 callback {press_stop();}
252 xywh {35 5 25 25} labelcolor 0x800000
254 {fltk::Button} record_button {
256 callback {toggle_backend_recording();}
257 xywh {65 5 25 25} labelcolor 0xff000000
258 extra_code {o->type(fltk::Button::TOGGLE);}
260 {fltk::Widget} metronome {
262 xywh {95 5 25 25} color 56 labelcolor 0xffffff00
263 extra_code {\#include <metronome.h>}
267 xywh {200 0 20 35} resizable
269 {fltk::Group} pattern_buttons {
270 xywh {145 5 310 25} hide
272 {fltk::Button} qbutton4 {
273 callback {set_quant(4);}
275 extra_code {o->type(fltk::Button::TOGGLE);}
277 {fltk::Button} qbutton8 {
278 callback {set_quant(8);}
280 extra_code {o->type(fltk::Button::TOGGLE);}
282 {fltk::Button} qbutton16 {
283 callback {set_quant(16);}
285 extra_code {o->type(fltk::Button::TOGGLE);
288 {fltk::Button} qbutton32 {
289 callback {set_quant(32);}
291 extra_code {o->type(fltk::Button::TOGGLE);}
293 {fltk::Button} qbutton64 {
294 callback {set_quant(64);}
296 extra_code {o->type(fltk::Button::TOGGLE);}
298 {fltk::Button} qbutton128 {
299 callback {set_quant(128);}
301 extra_code {o->type(fltk::Button::TOGGLE);}
303 {fltk::Button} qbutton0 {
304 callback {set_quant(0);}
306 extra_code {o->type(fltk::Button::TOGGLE);}
308 {fltk::Button} quant1_button {
310 tooltip {quantize selected notes}
313 {fltk::Button} quant0_button {
315 tooltip {quantize length of selected notes}
318 {fltk::Button} tool_button {
320 callback {toggle_tool();}
324 {fltk::Group} song_buttons {
327 {fltk::Button} color_toggle {
328 callback {arranger->color_flag = o->state();}
331 extra_code {o->type(fltk::Button::TOGGLE);}
333 {fltk::Button} unclone_button {
335 tooltip {unclone selected block}
338 {fltk::Button} join_button {
340 tooltip {join selected blocks}
343 {fltk::Button} split_button {
345 tooltip {split selected block}
349 {fltk::Button} loop_toggle {
350 callback {toggle_loop();}
351 tooltip {toggle looping}
353 extra_code {o->type(fltk::Button::TOGGLE);}
355 {fltk::Button} config_button {
357 callback {ui->config_window->hide();
358 ui->config_window->show();}
359 tooltip configuration
362 {fltk::Button} scope_button {
363 callback {ui->scope_window->hide();
364 ui->scope_window->show();}
368 {fltk::Button} file_button {
369 callback {ui->action_window->hide();
370 ui->action_window->show();}
373 extra_code {\#include "saveload.h"}
375 {fltk::Button} help_button {
376 callback {help_window->hide();
377 help_window->show();}
383 {fltk::Window} config_window {
385 xywh {234 133 320 285} hide resizable
387 {fltk::TabGroup} {} {
392 xywh {145 15 170 265} horizontal
394 {fltk::ValueInput} beats_per_measure {
395 label {beats per measure}
396 callback {if(o->value() > o->maximum())
397 o->value(o->maximum());
398 if(o->value() < o->minimum())
399 o->value(o->minimum());
400 set_beats_per_measure((int)o->value());}
401 xywh {5 5 45 20} minimum 1 maximum 31 step 1 value 4
403 {fltk::ValueInput} measures_per_phrase {
404 label {measures per phrase}
405 callback {if(o->value() > o->maximum())
406 o->value(o->maximum());
407 if(o->value() < o->minimum())
408 o->value(o->minimum());
409 set_measures_per_phrase((int)o->value());}
410 xywh {5 30 45 20} maximum 128 step 1 value 4
412 {fltk::ValueOutput} bpm_output {
414 xywh {5 55 45 20} minimum 1 maximum 1000 step 1 value 120
416 {fltk::ThumbWheel} bpm_wheel {
417 callback {set_bpm((int)o->value());
418 ui->bpm_output->value(o->value());}
419 xywh {55 55 105 20} align 4 minimum 1 maximum 1000 step 1 value 120
421 {fltk::ValueInput} measures_until_record {
422 label {measures until record}
423 callback {if(o->value() > o->maximum())
424 o->value(o->maximum());
425 if(o->value() < o->minimum())
426 o->value(o->minimum());
427 set_measures_until_record((int)o->value());}
428 xywh {5 80 45 20} maximum 128 step 1 value 1
430 {fltk::CheckButton} check_alwayscopy {
431 label {always hard copy}
432 callback {set_alwayscopy(o->value());}
433 tooltip {instead of making a linked clone when you copy a block in the song view.}
434 xywh {5 105 25 25} align 4
436 {fltk::CheckButton} check_autotrackname {
437 label {auto track name}
438 callback {set_autotrackname(o->value());}
439 tooltip {Fill in GM instruments for track names when you change the program.}
440 xywh {145 105 25 25} align 4
442 {fltk::CheckButton} check_passthru {
443 label {record pass-thru}
444 callback {set_passthru(o->value());}
445 tooltip {Echo midi input to midi output.}
446 xywh {5 130 25 26} horizontal align 4 value 1
448 {fltk::CheckButton} check_playinsert {
449 label {play note insertion}
450 callback {set_playinsert(o->value());}
451 tooltip {Send midi note on when you create notes.}
452 xywh {145 130 25 26} horizontal align 4 value 1
454 {fltk::CheckButton} check_recordonchan {
455 label {record on channel}
456 callback {set_recordonchan(o->value());}
457 tooltip {Record on first track that matches channel of midi input instead of selected track.}
458 xywh {5 155 25 25} align 4
460 {fltk::CheckButton} check_playmove {
461 label {play note move}
462 callback {set_playmove(o->value());}
463 tooltip {Send midi note on when you move notes.}
464 xywh {145 155 25 26} horizontal align 4 value 1
466 {fltk::CheckButton} check_follow {
467 label {follow playback}
468 callback {set_follow(o->value());}
469 tooltip {Auto scroll horizontally when play head leaves viewing area.}
470 xywh {5 179 25 26} horizontal align 4 value 1
472 {fltk::ValueInput} default_velocity {
473 label {default velocity}
474 callback {if(o->value() > o->maximum())
475 o->value(o->maximum());
476 if(o->value() < o->minimum())
477 o->value(o->minimum());
478 set_defaultvelocity((int)o->value());}
479 xywh {120 180 45 20} maximum 127 step 1 value 96
481 {fltk::Choice} menu_recordmode {
482 label {record mode} open
487 callback {set_recordmode(0);}
491 callback {set_recordmode(1);}
495 callback {set_recordmode(2);}
498 {fltk::Choice} menu_rob {
499 label {record outside block} open
504 callback {set_robmode(0);}
508 callback {set_robmode(1);}
512 callback {set_robmode(2);}
518 xywh {0 15 320 270} hide
520 {fltk::Widget} kg_l0 {
522 xywh {35 5 45 15} align 4
525 {fltk::Widget} kg_l1 {
527 xywh {35 20 45 15} align 4
530 {fltk::Widget} kg_l2 {
532 xywh {35 35 45 15} align 4
535 {fltk::Widget} kg_l3 {
537 xywh {35 50 45 15} align 4
540 {fltk::Widget} kg_l4 {
542 xywh {35 65 45 15} align 4
545 {fltk::Widget} kg_l5 {
547 xywh {35 80 45 15} align 4
550 {fltk::Widget} kg_l6 {
552 xywh {35 95 45 15} align 4
555 {fltk::Widget} kg_l7 {
557 xywh {35 110 45 15} align 4
560 {fltk::Widget} kg_l8 {
562 xywh {35 125 45 15} align 4
565 {fltk::Widget} kg_l9 {
567 xywh {35 140 45 15} align 4
570 {fltk::Widget} kg_l10 {
573 xywh {35 155 45 15} align 4
576 {fltk::Widget} kg_l11 {
578 xywh {35 170 45 15} align 4
581 {fltk::Widget} kg_l12 {
583 xywh {35 185 45 15} align 4
586 {fltk::Widget} kg_l13 {
588 xywh {35 200 45 15} align 4
591 {fltk::Widget} kg_l14 {
593 xywh {35 215 45 15} align 4
596 {fltk::Widget} kg_l15 {
598 xywh {35 230 45 15} align 4
601 {fltk::Widget} kg_l16 {
603 xywh {35 245 45 15} align 4
606 {fltk::Widget} kg_u0 {
608 xywh {130 5 45 15} align 4
611 {fltk::Widget} kg_u1 {
613 xywh {130 20 45 15} align 4
616 {fltk::Widget} kg_u2 {
618 xywh {130 35 45 15} align 4
621 {fltk::Widget} kg_u3 {
623 xywh {130 50 45 15} align 4
626 {fltk::Widget} kg_u4 {
628 xywh {130 65 45 15} align 4
631 {fltk::Widget} kg_u5 {
633 xywh {130 80 45 15} align 4
636 {fltk::Widget} kg_u6 {
638 xywh {130 95 45 15} align 4
641 {fltk::Widget} kg_u7 {
643 xywh {130 110 45 15} align 4
646 {fltk::Widget} kg_u8 {
648 xywh {130 125 45 15} align 4
651 {fltk::Widget} kg_u9 {
653 xywh {130 140 45 15} align 4
656 {fltk::Widget} kg_u10 {
658 xywh {130 155 45 15} align 4
661 {fltk::Widget} kg_u11 {
663 xywh {130 170 45 15} align 4
666 {fltk::Widget} kg_u12 {
668 xywh {130 185 45 15} align 4
671 {fltk::Widget} kg_u13 {
673 xywh {130 200 45 15} align 4
676 {fltk::Widget} kg_u14 {
678 xywh {130 215 45 15} align 4
681 {fltk::Widget} kg_u15 {
683 xywh {130 230 45 15} align 4
686 {fltk::Widget} kg_u16 {
688 xywh {130 245 45 15} align 4
691 {fltk::Widget} kg_u17 {
693 xywh {265 5 45 15} align 4
696 {fltk::Widget} kg_u18 {
698 xywh {265 20 45 15} align 4
701 {fltk::Widget} kg_u19 {
703 xywh {265 35 45 15} align 4
706 {fltk::Widget} kg_u20 {
708 xywh {265 50 45 15} align 4
711 {fltk::Widget} kg_zi {
713 xywh {265 65 45 15} align 4
716 {fltk::Widget} kg_zo {
718 xywh {265 80 45 15} align 4
721 {fltk::Widget} kg_ou {
723 xywh {265 95 45 15} align 4
726 {fltk::Widget} kg_od {
728 xywh {265 110 45 15} align 4
734 {fltk::Window} help_window {
736 xywh {519 345 580 370} hide resizable
737 extra_code {o->size_range(580,370);}
739 {fltk::TabGroup} {} {open
744 xywh {0 25 580 345} resizable
746 {fltk::Input} title_text {
750 {fltk::Input} author_text {
754 {fltk::TextEditor} info_text {
755 xywh {5 55 570 285} resizable textfont 4
760 xywh {0 25 580 345} hide
762 {fltk::TextDisplay} {} {
763 xywh {5 5 570 335} resizable textfont 4
764 extra_code {load_text(o,ROOT_DATA_DIR"doc/controls.txt");}
769 xywh {0 25 580 345} hide
771 {fltk::TextDisplay} {} {
772 xywh {5 5 570 335} resizable textfont 4
773 extra_code {load_text(o,ROOT_DATA_DIR"doc/guide.txt");}
778 xywh {0 25 580 345} hide
780 {fltk::TextDisplay} {} {
781 xywh {5 5 570 335} resizable textfont 4
782 extra_code {load_text(o,ROOT_DATA_DIR"doc/license.txt");}
787 xywh {0 25 580 345} hide
789 {fltk::TextDisplay} {} {
790 xywh {5 5 570 335} resizable textfont 4
791 extra_code {load_text(o,ROOT_DATA_DIR"doc/README");}
796 {fltk::Window} action_window {
798 xywh {286 302 100 130} horizontal hide
802 callback {reset_song();}
807 callback {action_window->hide();
813 callback {action_window->hide();
814 save(fltk::file_chooser("save file",NULL,get_last_dir()));}
819 callback {action_window->hide();
820 if(load(fltk::file_chooser("open file",NULL,get_last_dir()))<0){
827 callback {action_window->hide();
828 if(loadsmf(fltk::file_chooser("import file",NULL,get_last_dir()))<0){
835 callback {action_window->hide();
836 savesmf(fltk::file_chooser("export file",NULL,get_last_dir()));}
840 {fltk::Window} scope_window {
842 xywh {647 310 425 280} hide resizable
844 {fltk::TextDisplay} scope {
845 xywh {5 5 415 245} resizable textfont 4 color 0x280000 textcolor 0xff0000
846 extra_code {o->wrap_mode(1);}
853 callback {if(o->state()){
860 extra_code {o->type(fltk::Button::TOGGLE);}
862 {fltk::InvisibleBox} {} {
863 xywh {45 0 95 20} resizable
867 code {loop_toggle->image(fltk::SharedImage::get(ROOT_DATA_DIR"gfx/loop.gif"));
868 color_toggle->image(fltk::SharedImage::get(ROOT_DATA_DIR"gfx/color.gif"));
869 scope_button->image(fltk::SharedImage::get(ROOT_DATA_DIR"gfx/conf.gif"));
870 file_button->image(fltk::SharedImage::get(ROOT_DATA_DIR"gfx/file.gif"));
871 help_button->image(fltk::SharedImage::get(ROOT_DATA_DIR"gfx/help.gif"));
873 qbutton4->image(fltk::SharedImage::get(ROOT_DATA_DIR"gfx/q4.gif"));
874 qbutton8->image(fltk::SharedImage::get(ROOT_DATA_DIR"gfx/q8.gif"));
875 qbutton16->image(fltk::SharedImage::get(ROOT_DATA_DIR"gfx/q16.gif"));
876 qbutton32->image(fltk::SharedImage::get(ROOT_DATA_DIR"gfx/q32.gif"));
877 qbutton64->image(fltk::SharedImage::get(ROOT_DATA_DIR"gfx/q64.gif"));
878 qbutton128->image(fltk::SharedImage::get(ROOT_DATA_DIR"gfx/q128.gif"));
879 qbutton0->image(fltk::SharedImage::get(ROOT_DATA_DIR"gfx/q0.gif"));} {}
880 code {track_info->set_rec(0);} {}
881 code {start_monitor();} {}
882 code {main_window->show();} {}