void gModeBox::__cb_changeMode(int mode) { ch->mode = mode; gu_refreshActionEditor(); }
void gModeBox::__cb_change_chanmode(int mode) { ch->mode = mode; /* what to do when the channel is playing and you change the mode? * Nothing, since v0.5.3. Just refresh the action editor window, in * case it's open */ gu_refreshActionEditor(); }
void gMidiChannel::__cb_openMenu() { Fl_Menu_Item rclick_menu[] = { {"Edit actions..."}, // 0 {"Clear actions", 0, 0, 0, FL_SUBMENU}, // 1 {"All"}, // 2 {0}, // 3 {"Setup MIDI output..."}, // 4 {"Setup MIDI input..."}, // 5 {"Delete channel"}, // 6 {0} }; /* no 'clear actions' if there are no actions */ if (!ch->hasActions) rclick_menu[1].deactivate(); Fl_Menu_Button *b = new Fl_Menu_Button(0, 0, 100, 50); b->box(G_BOX); b->textsize(11); b->textcolor(COLOR_TEXT_0); b->color(COLOR_BG_0); const Fl_Menu_Item *m = rclick_menu->popup(Fl::event_x(), Fl::event_y(), 0, 0, b); if (!m) return; if (strcmp(m->label(), "Delete channel") == 0) { if (!gdConfirmWin("Warning", "Delete channel: are you sure?")) return; glue_deleteChannel(ch); return; } if (strcmp(m->label(), "All") == 0) { if (!gdConfirmWin("Warning", "Clear all actions: are you sure?")) return; recorder::clearChan(ch->index); gu_refreshActionEditor(); // refresh a.editor window, it could be open return; } if (strcmp(m->label(), "Edit actions...") == 0) { gu_openSubWindow(mainWin, new gdActionEditor(ch), WID_ACTION_EDITOR); return; } if (strcmp(m->label(), "Setup MIDI output...") == 0) { gu_openSubWindow(mainWin, new gdMidiInputSetup(ch), 0); return; } if (strcmp(m->label(), "Setup MIDI input...") == 0) { gu_openSubWindow(mainWin, new gdMidiGrabberChannel(ch), 0); return; } }
void glue_setBeats(int beats, int bars, bool expand) { /* temp vars to store old data (they are necessary) */ int oldvalue = G_Mixer.beats; unsigned oldfpb = G_Mixer.totalFrames; if (beats > MAX_BEATS) G_Mixer.beats = MAX_BEATS; else if (beats < 1) G_Mixer.beats = 1; else G_Mixer.beats = beats; /* update bars - bars cannot be greate than beats and must be a sub * multiple of beats. If not, approximation to the nearest (and greater) * value available. */ if (bars > G_Mixer.beats) G_Mixer.bars = G_Mixer.beats; else if (bars <= 0) G_Mixer.bars = 1; else if (beats % bars != 0) { G_Mixer.bars = bars + (beats % bars); if (beats % G_Mixer.bars != 0) // it could be an odd value, let's check it (and avoid it) G_Mixer.bars = G_Mixer.bars - (beats % G_Mixer.bars); } else G_Mixer.bars = bars; G_Mixer.updateFrameBars(); /* update recorded actions */ if (expand) { if (G_Mixer.beats > oldvalue) recorder::expand(oldfpb, G_Mixer.totalFrames); //else if (G_Mixer.beats < oldvalue) // recorder::shrink(G_Mixer.totalFrames); } char buf_batt[8]; sprintf(buf_batt, "%d/%d", G_Mixer.beats, G_Mixer.bars); mainWin->beats->copy_label(buf_batt); /* in case the action editor is open */ gu_refreshActionEditor(); }
void glue_stopRec() { /* stop the recorder and sort the new actions */ recorder::active = false; recorder::sortActions(); for (unsigned i=0; i<MAX_NUM_CHAN; i++) glue_setChannelWithActions(i); mainWin->beat_rec->value(0); mainWin->beat_rec->redraw(); /* if acton editor is on */ gu_refreshActionEditor(); }
void gModeBox::__cb_change_chanmode(int mode) { G_Mixer.chanMode[id] = mode; /* what to do when the channel is playing and you change the mode? * Probabily nothing, since v0.5.3 if (mode == LOOP_ONCE || mode == LOOP_BASIC) { if (recorder::chanEvents[id]) if (G_Mixer.running) G_Mixer.chanStatus[id] = STATUS_OFF; } */ /* when you change the mode, refresh the action editor window, in case * it's open */ gu_refreshActionEditor(); }
void gSampleChannel::__cb_openMenu() { /* if you're recording (actions or input) no menu is allowed; you can't * do anything, especially deallocate the channel */ if (G_Mixer.chanInput == ch || recorder::active) return; /* the following is a trash workaround for a FLTK menu. We need a gMenu * widget asap */ Fl_Menu_Item rclick_menu[] = { {"Load new sample..."}, // 0 {"Export sample to file..."}, // 1 {"Set key..."}, // 2 {"Setup MIDI input..."}, // 3 {"Edit sample..."}, // 4 {"Edit actions..."}, // 5 {"Clear actions", 0, 0, 0, FL_SUBMENU}, // 6 {"All"}, // 7 {"Mute"}, // 8 {"Volume"}, // 9 {"Start/Stop"}, // 10 {0}, // 11 {"Free channel"}, // 12 {"Delete channel"}, // 13 {0} }; if (ch->status & (STATUS_EMPTY | STATUS_MISSING)) { rclick_menu[1].deactivate(); rclick_menu[4].deactivate(); rclick_menu[12].deactivate(); } /* no 'clear actions' if there are no actions */ if (!ch->hasActions) rclick_menu[6].deactivate(); /* no 'clear start/stop actions' for those channels in loop mode: * they cannot have start/stop actions. */ if (ch->mode & LOOP_ANY) rclick_menu[10].deactivate(); Fl_Menu_Button *b = new Fl_Menu_Button(0, 0, 100, 50); b->box(G_BOX); b->textsize(11); b->textcolor(COLOR_TEXT_0); b->color(COLOR_BG_0); const Fl_Menu_Item *m = rclick_menu->popup(Fl::event_x(), Fl::event_y(), 0, 0, b); if (!m) return; if (strcmp(m->label(), "Load new sample...") == 0) { openBrowser(BROWSER_LOAD_SAMPLE); return; } if (strcmp(m->label(), "Set key...") == 0) { new gdKeyGrabber(ch); /// FIXME - use gu_openSubWindow return; } if (strcmp(m->label(), "Setup MIDI input...") == 0) { gu_openSubWindow(mainWin, new gdMidiGrabberChannel(ch), 0); return; } if (strcmp(m->label(), "Edit sample...") == 0) { gu_openSubWindow(mainWin, new gdEditor(ch), WID_SAMPLE_EDITOR); /// FIXME title it's up to gdEditor return; } if (strcmp(m->label(), "Export sample to file...") == 0) { openBrowser(BROWSER_SAVE_SAMPLE); return; } if (strcmp(m->label(), "Delete channel") == 0) { if (!gdConfirmWin("Warning", "Delete channel: are you sure?")) return; glue_deleteChannel(ch); return; } if (strcmp(m->label(), "Free channel") == 0) { if (ch->status == STATUS_PLAY) { if (!gdConfirmWin("Warning", "This action will stop the channel: are you sure?")) return; } else if (!gdConfirmWin("Warning", "Free channel: are you sure?")) return; glue_freeChannel(ch); /* delete any related subwindow */ /** FIXME - use gu_closeAllSubwindows() */ mainWin->delSubWindow(WID_FILE_BROWSER); mainWin->delSubWindow(WID_ACTION_EDITOR); mainWin->delSubWindow(WID_SAMPLE_EDITOR); mainWin->delSubWindow(WID_FX_LIST); return; } if (strcmp(m->label(), "Mute") == 0) { if (!gdConfirmWin("Warning", "Clear all mute actions: are you sure?")) return; recorder::clearAction(ch->index, ACTION_MUTEON | ACTION_MUTEOFF); if (!ch->hasActions) delActionButton(); /* TODO - set mute=false */ gu_refreshActionEditor(); // refresh a.editor window, it could be open return; } if (strcmp(m->label(), "Start/Stop") == 0) { if (!gdConfirmWin("Warning", "Clear all start/stop actions: are you sure?")) return; recorder::clearAction(ch->index, ACTION_KEYPRESS | ACTION_KEYREL | ACTION_KILLCHAN); if (!ch->hasActions) delActionButton(); gu_refreshActionEditor(); // refresh a.editor window, it could be open return; } if (strcmp(m->label(), "Volume") == 0) { if (!gdConfirmWin("Warning", "Clear all volume actions: are you sure?")) return; recorder::clearAction(ch->index, ACTION_VOLUME); if (!ch->hasActions) delActionButton(); gu_refreshActionEditor(); // refresh a.editor window, it could be open return; } if (strcmp(m->label(), "All") == 0) { if (!gdConfirmWin("Warning", "Clear all actions: are you sure?")) return; recorder::clearChan(ch->index); delActionButton(); gu_refreshActionEditor(); // refresh a.editor window, it could be open return; } if (strcmp(m->label(), "Edit actions...") == 0) { gu_openSubWindow(mainWin, new gdActionEditor(ch), WID_ACTION_EDITOR); return; } }
void geMidiChannel::__cb_openMenu() { Fl_Menu_Item rclick_menu[] = { {"Edit actions..."}, // 0 {"Clear actions", 0, 0, 0, FL_SUBMENU}, // 1 {"All"}, // 2 {0}, // 3 {"Setup keyboard input..."}, // 5 {"Setup MIDI input..."}, // 6 {"Setup MIDI output..."}, // 7 {"Clone channel"}, // 8 {"Delete channel"}, // 9 {0} }; /* no 'clear actions' if there are no actions */ if (!ch->hasActions) rclick_menu[1].deactivate(); Fl_Menu_Button *b = new Fl_Menu_Button(0, 0, 100, 50); b->box(G_CUSTOM_BORDER_BOX); b->textsize(GUI_FONT_SIZE_BASE); b->textcolor(COLOR_TEXT_0); b->color(COLOR_BG_0); const Fl_Menu_Item *m = rclick_menu->popup(Fl::event_x(), Fl::event_y(), 0, 0, b); if (!m) return; if (strcmp(m->label(), "Delete channel") == 0) { if (!gdConfirmWin("Warning", "Delete channel: are you sure?")) return; glue_deleteChannel(ch); return; } if (strcmp(m->label(), "Clone channel") == 0) { glue_cloneChannel(ch); return; } if (strcmp(m->label(), "Setup keyboard input...") == 0) { gu_openSubWindow(G_MainWin, new gdKeyGrabber(ch), 0); //new gdKeyGrabber(ch); return; } if (strcmp(m->label(), "All") == 0) { if (!gdConfirmWin("Warning", "Clear all actions: are you sure?")) return; G_Recorder.clearChan(ch->index); ch->hasActions = false; gu_refreshActionEditor(); // refresh a.editor window, it could be open return; } if (strcmp(m->label(), "Edit actions...") == 0) { gu_openSubWindow(G_MainWin, new gdActionEditor(ch), WID_ACTION_EDITOR); return; } if (strcmp(m->label(), "Setup MIDI input...") == 0) { gu_openSubWindow(G_MainWin, new gdMidiInputChannel(ch), 0); return; } if (strcmp(m->label(), "Setup MIDI output...") == 0) { //gu_openSubWindow(G_MainWin, new gdMidiGrabberChannel(ch, GrabForOutput), 0); gu_openSubWindow(G_MainWin, new gdMidiOutputMidiCh((MidiChannel*) ch), 0); return; } }
void gSampleChannel::__cb_openMenu() { if (G_Mixer.chanInput == ch || recorder::active) return; Fl_Menu_Item rclick_menu[] = { {"Load new sample..."}, {"Export sample to file..."}, {"Setup keyboard input..."}, {"Setup MIDI input..."}, {"Setup MIDI output..."}, {"Edit sample..."}, {"Edit actions..."}, {"Clear actions", 0, 0, 0, FL_SUBMENU}, {"All"}, {"Mute"}, {"Volume"}, {"Start/Stop"}, {0}, {"Clone channel"}, {"Free channel"}, {"Delete channel"}, {0} }; if (ch->status & (STATUS_EMPTY | STATUS_MISSING)) { rclick_menu[1].deactivate(); rclick_menu[5].deactivate(); rclick_menu[14].deactivate(); } if (!ch->hasActions) rclick_menu[7].deactivate(); if (ch->mode & LOOP_ANY) rclick_menu[11].deactivate(); Fl_Menu_Button *b = new Fl_Menu_Button(0, 0, 100, 50); b->box(G_BOX); b->textsize(GUI_FONT_SIZE_BASE); b->textcolor(COLOR_TEXT_0); b->color(COLOR_BG_0); const Fl_Menu_Item *m = rclick_menu->popup(Fl::event_x(), Fl::event_y(), 0, 0, b); if (!m) return; if (strcmp(m->label(), "Load new sample...") == 0) { openBrowser(BROWSER_LOAD_SAMPLE); return; } if (strcmp(m->label(), "Setup keyboard input...") == 0) { new gdKeyGrabber(ch); return; } if (strcmp(m->label(), "Setup MIDI input...") == 0) { gu_openSubWindow(mainWin, new gdMidiInputChannel(ch), 0); return; } if (strcmp(m->label(), "Setup MIDI output...") == 0) { gu_openSubWindow(mainWin, new gdMidiOutputSampleCh(ch), 0); return; } if (strcmp(m->label(), "Edit sample...") == 0) { gu_openSubWindow(mainWin, new gdEditor(ch), WID_SAMPLE_EDITOR); return; } if (strcmp(m->label(), "Export sample to file...") == 0) { openBrowser(BROWSER_SAVE_SAMPLE); return; } if (strcmp(m->label(), "Delete channel") == 0) { if (!gdConfirmWin("Warning", "Delete channel: are you sure?")) return; glue_deleteChannel(ch); return; } if (strcmp(m->label(), "Free channel") == 0) { if (ch->status == STATUS_PLAY) { if (!gdConfirmWin("Warning", "This action will stop the channel: are you sure?")) return; } else if (!gdConfirmWin("Warning", "Free channel: are you sure?")) return; glue_freeChannel(ch); mainWin->delSubWindow(WID_FILE_BROWSER); mainWin->delSubWindow(WID_ACTION_EDITOR); mainWin->delSubWindow(WID_SAMPLE_EDITOR); mainWin->delSubWindow(WID_FX_LIST); return; } if (strcmp(m->label(), "Clone channel") == 0) { glue_cloneChannel(ch); return; } if (strcmp(m->label(), "Mute") == 0) { if (!gdConfirmWin("Warning", "Clear all mute actions: are you sure?")) return; recorder::clearAction(ch->index, ACTION_MUTEON | ACTION_MUTEOFF); if (!ch->hasActions) delActionButton(); gu_refreshActionEditor(); return; } if (strcmp(m->label(), "Start/Stop") == 0) { if (!gdConfirmWin("Warning", "Clear all start/stop actions: are you sure?")) return; recorder::clearAction(ch->index, ACTION_KEYPRESS | ACTION_KEYREL | ACTION_KILLCHAN); if (!ch->hasActions) delActionButton(); gu_refreshActionEditor(); return; } if (strcmp(m->label(), "Volume") == 0) { if (!gdConfirmWin("Warning", "Clear all volume actions: are you sure?")) return; recorder::clearAction(ch->index, ACTION_VOLUME); if (!ch->hasActions) delActionButton(); gu_refreshActionEditor(); return; } if (strcmp(m->label(), "All") == 0) { if (!gdConfirmWin("Warning", "Clear all actions: are you sure?")) return; recorder::clearChan(ch->index); delActionButton(); gu_refreshActionEditor(); return; } if (strcmp(m->label(), "Edit actions...") == 0) { gu_openSubWindow(mainWin, new gdActionEditor(ch), WID_ACTION_EDITOR); return; } }