# data file for the Fltk User Interface Designer (fluid) version 1.0302 header_name {.h} code_name {.cc} decl {//Copyright (c) 2002-2009 Nasca Octavian Paul} {private local } decl {//License: GNU GPL version 2 or later} {private local } decl {\#include } {public local } decl {\#include } {public local } decl {\#include } {public local } decl {\#if ! defined(PLUGINVERSION) && HAS_X11 \#include "zynaddsubfx.xpm" \#endif} {private local } decl {\#include "WidgetPDial.h"} {public local } decl {\#include "ADnoteUI.h"} {public local } decl {\#include "SUBnoteUI.h"} {public local } decl {\#include "EffUI.h"} {public local } decl {\#include "VirKeyboard.h"} {public local } decl {\#include "ConfigUI.h"} {public local } decl {\#include "BankUI.h"} {public local } decl {\#include "PartUI.h"} {public local } decl {\#include "MicrotonalUI.h"} {public local } decl {\#include "PresetsUI.h"} {public local } decl {\#include "NioUI.h"} {public global } decl {\#include "VuPartMeter.h"} {public local } decl {\#include "Fl_Osc_Dial.H"} {private local } decl {\#include "Osc_DataModel.h"} {private local } decl {\#include "Fl_Osc_TSlider.H"} {private local } decl {\#include "VuMasterMeter.h"} {public local } decl {\#include "PartNameButton.h"} {public local } decl {\#include "common.H"} {public local } decl {\#if USE_NSM \#include "NSM.H" extern NSM_Client *nsm; \#endif} {public local } decl {\#if !defined(PLUGINVERSION) && HAS_X11 \#include \#endif} {public local } decl {\#include "../globals.h"} {public local } class SysEffSend {: {public Fl_Osc_Dial} } { Function {SysEffSend(int x,int y, int w, int h, const char *label=0):Fl_Osc_Dial(x,y,w,h,label)} {} { code {} {} } Function {init(int neff1,int neff2)} {} { code {//TODO figure out if this extra class is even needed minimum(0); maximum(127); step(1); labelfont(1); labelsize(10); align(FL_ALIGN_TOP); Fl_Osc_Dial::init("part"+to_s(neff1)+"/sysefxsend"+to_s(neff2)); char tmp[20];snprintf(tmp,20,"%d->%d",neff1+1,neff2+1); this->copy_label(tmp);} {} } Function {~SysEffSend()} {} { code {hide();} {} } } class Panellistitem {open : {public Fl_Osc_Group} } { Function {make_window()} {open private } { Fl_Window panellistitem {open private xywh {632 715 100 260} type Double box NO_BOX class Fl_Group visible } { Fl_Group panellistitemgroup {open private xywh {0 20 70 240} box UP_FRAME code0 {/*if (master->part[npart]->Penabled==0) o->deactivate();*/} code1 {set_module_parameters( o );} } { Fl_Group {} {open xywh {45 65 15 110} box ENGRAVED_FRAME } { Fl_Box partvu { label {V U} xywh {45 65 15 110} box FLAT_BOX color 0 selection_color 75 labelcolor 55 align 128 class VuPartMeter } } Fl_Button partname { label { } callback {if ((int)bankui->cbwig->value()!=(npart+1)){ bankui->cbwig->value(npart+1); bankui->cbwig->do_callback(); }; bankui->show();} xywh {5 27 60 30} box THIN_DOWN_BOX down_box FLAT_BOX labelfont 1 labelsize 10 align 208 code0 {o->ext = "Pname";o->oscRegister("Pname");} class PartNameButton } Fl_Slider partvolume { xywh {10 65 30 110} type {Vert Knob} box NO_BOX minimum 127 maximum 0 step 1 value 127 code0 {o->init("Pvolume", 'i');} class Fl_Osc_TSlider } Fl_Dial partpanning { xywh {20 180 30 30} maximum 127 step 1 code0 {o->init("Ppanning");o->reset_value=64;} class Fl_Osc_Dial } Fl_Button {} { label edit callback {if ((int)bankui->cbwig->value()!=(npart+1)){ bankui->cbwig->value(npart+1); bankui->cbwig->do_callback(); } if (Fl::event_shift()) partui->instrumenteditwindow->show(); else if (Fl::event_ctrl()) partui->instrumentkitlist->show(); } xywh {15 235 40 20} labelsize 10 } Fl_Choice partrcv { tooltip {receive from Midi channel} xywh {10 213 50 15} down_box BORDER_BOX labelsize 10 align 5 textfont 1 textsize 10 code0 {char nrstr[10]; for(int i=0;iadd(nrstr); else o->add("Dr10");};} code1 {o->init("Prcvchn");} class Fl_Osc_Choice } {} } Fl_Check_Button partenabled { label 01 callback {o->oscWrite("Penabled", o->value() ? "T" : "F"); if ((int) o->value()==0) panellistitemgroup->deactivate(); else { panellistitemgroup->activate(); /* if ((int)bankui->cbwig->value()!=(npart+1)){ bankui->cbwig->value(npart+1); bankui->cbwig->do_callback(); };*/ }; o->redraw();} private xywh {5 0 45 20} down_box DOWN_BOX labeltype EMBOSSED_LABEL labelfont 1 labelsize 13 align 24 code0 {char tmp[10];snprintf(tmp,10,"%d",npart+1);o->copy_label(tmp);} code1 {o->init("Penabled");} class Fl_Osc_Check } } } Function {Panellistitem(int x,int y, int w, int h, const char *label=0):Fl_Osc_Group(x,y,w,h,label)} {} { code {npart=0; bankui=NULL;} {} } Function {init(int npart_,BankUI *bankui_, PartUI *partui_)} {} { code {npart=npart_; bankui=bankui_; partui=partui_; ext = "part"+to_s(npart)+"/"; make_window(); panellistitem->show(); end();} {} } Function {refresh()} {} { code { partenabled->update(); partrcv->update(); partpanning->update(); partvolume->update(); partname->update(); if ((int)bankui->cbwig->value()!=(npart+1)) panellistitemgroup->color(fl_rgb_color(160,160,160)); else panellistitemgroup->color(fl_rgb_color(50,190,240)); panellistitemgroup->redraw();} {} } Function {~Panellistitem()} {} { code {} {} } decl {int npart;} {private local } decl {BankUI *bankui;} {private local } decl {PartUI *partui;} {private local } } class MasterUI {open } { Function {make_window()} {open } { Fl_Window masterwindow { label zynaddsubfx callback {if (( \#ifdef PLUGINVERSION 1 \#elif USE_NSM (nsm && nsm->is_active()) \#else 0 \#endif || fl_choice("Exit and leave the unsaved data?","No","Yes",NULL))) { close(); };} open xywh {330 365 390 525} type Double xclass zynaddsubfx visible class Fl_Osc_Window } { Fl_Box dummy_again { xywh {25 25 25 25} code0 {masterwindow->init(osc, "");} } Fl_Group win_root {open xywh {0 0 390 525} class Fl_Osc_Group } { Fl_Menu_Bar mastermenu { xywh {0 0 390 25} } { Submenu {} { label {&File} xywh {5 5 100 20} } { MenuItem {} { label {&New (erase all)...} callback {do_new_master();} xywh {25 25 100 20} } MenuItem {} { label {&Revert changes...} callback {do_revert_changes();} xywh {25 25 100 20} } MenuItem {} { label {&Open Parameters...} callback {\#if USE_NSM if ( nsm && nsm->is_active() ) { do_load_master(); do_save_master( nsm->project_filename ); } else \#endif { do_load_master(); }} xywh {25 25 100 20} } MenuItem {} { label {&Save All Parameters...} callback {\#if USE_NSM if ( nsm && nsm->is_active() ) { do_save_master( nsm->project_filename ); } else \#endif { do_save_master(); }} xywh {15 15 100 20} divider } MenuItem {} { label {&Load Midi Learn...} callback {char *filename; filename=fl_file_chooser("Open:","({*.xlz})",NULL,0); if (filename==NULL) return; osc->write("/load_xlz", "s", filename);} xywh {40 40 100 20} } MenuItem {} { label {Save Midi Learn...} callback {char *filename; int result; filename=fl_file_chooser("Save:","({*.xlz})",NULL,0); if (filename==NULL) return; filename=fl_filename_setext(filename,".xlz"); result=fileexists(filename); if (result) { result=0; if (!fl_choice("The file exists. \\nOverwrite it?","No","Yes",NULL)) return; }; osc->write("/save_xlz", "s", filename);} xywh {30 30 100 20} divider } MenuItem {} { label {&Load Scale Settings...} callback {char *filename; filename=fl_file_chooser("Open:","({*.xsz})",NULL,0); if (filename==NULL) return; osc->write("/load_xsz", "s", filename); /* if (result==-10) fl_alert("Error: Could not load the file\\nbecause it is not a scale file."); else if (result<0) fl_alert("Error: Could not load the file.");*/} xywh {40 40 100 20} } MenuItem {} { label {Save Sc&ale Settings ..} callback {char *filename; int result=0; filename=fl_file_chooser("Save:","({*.xsz})",NULL,0); if (filename==NULL) return; filename=fl_filename_setext(filename,".xsz"); result=fileexists(filename); if (result) { result=0; if (!fl_choice("The file exists. \\nOverwrite it?","No","Yes",NULL)) return; }; osc->write("/save_xsz", "s", filename); /*if (result<0) fl_alert("Error: Could not save the file.");*/} xywh {30 30 100 20} } MenuItem {} { label {Show Scale Settings...} callback {microtonalui->show();} xywh {5 5 100 20} divider } MenuItem {} { label {&Settings...} callback {configui->show();} xywh {30 30 100 20} } MenuItem {} { label {N&io Settings} callback {nioui.refresh(); nioui.show();} xywh {5 5 36 21} divider } MenuItem {} { label {&Copyright...} callback {aboutwindow->show();} xywh {20 20 100 20} divider } MenuItem {} { label {E&xit} callback {masterwindow->do_callback();} xywh {15 15 100 20} } } Submenu {} { label {&Instrument} xywh {15 15 100 20} } { MenuItem {} { label {&Clear Instrument...} callback {if (fl_choice("Clear instrument's parameters ?","No","Yes",NULL)){ // int npart=(int)npartcounter->value()-1; osc->write("/part"+to_s(npart)+"/clear"); }; updatepanel();} xywh {40 40 100 20} } MenuItem {} { label {&Open Instrument...} callback {const char *filename; filename=fl_file_chooser("Load:","({*.xiz})",NULL,0); if (filename==NULL) return; osc->write("/load_xiz", "is", npart, filename); npartcounter->do_callback(); updatepanel(); /* if (result==-10) fl_alert("Error: Could not load the file\\nbecause it is not an instrument file."); else if (result<0) fl_alert("Error: Could not load the file.");*/} xywh {35 35 100 20} } MenuItem {} { label {&Save Instrument ...} callback {char *filename; filename=fl_file_chooser("Save:","({*.xiz})",NULL,0); if (filename==NULL) return; filename=fl_filename_setext(filename,".xiz"); int result=fileexists(filename); if (result) { result=0; if (!fl_choice("The file exists. \\nOverwrite it?","No","Yes",NULL)) return; }; osc->write("/save_xiz", "is", npart, filename); /*if (result<0) fl_alert("Error: Could not save the file.");*/} xywh {25 25 100 20} divider } MenuItem {} { label {Show Instrument &Bank...} callback {bankui->show();} xywh {5 5 100 20} divider } MenuItem {} { label {&Virtual Keyboard...} callback {virkeyboard->show();} xywh {15 15 100 20} } } Submenu recordmenu { label {&Record} xywh {5 5 100 20} } { MenuItem {} { label {&Choose WAV file...} callback {char *filename; recordbutton->deactivate(); pausebutton->deactivate(); pauselabel->deactivate(); stopbutton->deactivate(); filename=fl_file_chooser("Record to audio file:","(*.wav)",NULL,0); if (filename==NULL) return; fl_filename_setext(filename,".wav"); //TODO TODO Test if a file exists if (fl_choice("The file *might* exist. \\nOverwrite it?","No","Yes",NULL)) { osc->write("/HDDRecorder/preparefile", "T"); recordbutton->activate();//TODO make this button osc controlled } /*if (result!=0) fl_alert("Error: Could not save the file.");*/} xywh {5 5 100 20} } } Submenu {} { label Misc xywh {15 15 100 20} } { MenuItem {} { label {Switch User Interface Mode} callback {if (fl_choice("Switch the User Interface to Beginner mode ?","No","Yes",NULL)){ masterwindow->hide(); refresh_master_ui(); simplemasterwindow->show(); osc->write("/cfg.UserInterfaceMode", "i", 2); };} xywh {15 15 100 20} } } } Fl_Box dummy { xywh {25 25 25 25} code0 {win_root->osc = osc;} code1 {win_root->base = "/";} } Fl_Dial mastervolumedial { label {Master Volume} tooltip {Master Volume} xywh {15 32 55 55} box ROUND_UP_BOX labelsize 9 align 130 maximum 127 step 1 code2 {o->init("volume"); o->selection_color(FL_RED);} class Fl_Osc_Dial } Fl_Counter masterkeyshiftcounter { label {Master KeyShift} xywh {150 97 120 23} type Simple labelsize 9 minimum -64 maximum 64 step 1 code0 {o->lstep(12);} code1 {o->init("Pkeyshift",'i',-64);} class Fl_Osc_Counter } Fl_Button {} { label {Panic!} callback {virkeyboard->releaseallkeys(); o->oscWrite("Panic");} xywh {280 29 105 53} color 90 labelfont 1 class Fl_Osc_Button } Fl_Group partuigroup {open xywh {0 310 390 205} } { Fl_Group partui {open xywh {0 310 383 175} code0 {o->init("/part0/", 0,bankui,"/part0/", osc);} code1 {o->show();} class PartUI } {} } Fl_Tabs {} {open xywh {0 145 390 165} box UP_FRAME } { Fl_Group {} { label {System Effects} open xywh {0 162 390 145} labelsize 15 align 9 } { Fl_Counter syseffnocounter { label {Sys.Effect No.} callback {nsyseff=(int) o->value()-1; syseffectuigroup->reext("sysefx"+to_s(nsyseff)+"/"); sysefftype->oscMove("sysefx"+to_s(nsyseff)+"/efftype"); syseffectui->refresh();} xywh {5 181 80 22} type Simple labelfont 1 labelsize 10 align 1 minimum 0 maximum 127 step 1 value 1 textfont 1 code0 {o->bounds(1,NUM_SYS_EFX);} code1 {o->value(nsyseff+1);} } Fl_Choice sysefftype { label EffType callback {syseffectui->efftype = o->value(); syseffectui->refresh();} xywh {285 176 100 22} down_box BORDER_BOX labelsize 10 code0 {o->init("sysefx"+to_s(nsyseff)+"/efftype");} class Fl_Osc_Choice } { MenuItem {} { label {No Effect} xywh {15 15 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Reverb xywh {25 25 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Echo xywh {35 35 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Chorus xywh {45 45 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Phaser xywh {55 55 100 20} labelfont 1 labelsize 10 } MenuItem {} { label AlienWah xywh {65 65 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Distortion xywh {75 75 100 20} labelfont 1 labelsize 10 } MenuItem {} { label EQ xywh {85 85 100 20} labelfont 1 labelsize 10 } MenuItem {} { label DynFilter xywh {95 95 100 20} labelfont 1 labelsize 10 } } Fl_Group syseffectuigroup { xywh {5 203 380 95} color 48 class Fl_Osc_Group } { Fl_Box {} { xywh {5 203 0 0} code0 {syseffectuigroup->ext = "sysefx0/";} } Fl_Group syseffectui { xywh {5 203 380 95} code0 {o->init(false);} class EffUI } {} } Fl_Button {} { label {Send to...} callback {syseffsendwindow->show();} xywh {90 181 85 22} box THIN_UP_BOX labelfont 1 labelsize 11 } Fl_Button {} { label C callback {presetsui->copy("/sysefx"+to_s(nsyseff)+"/");} xywh {180 187 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 55 } Fl_Button {} { label P callback { presetsui->paste("/sysefx"+to_s(nsyseff)+"/",syseffectui);} selected xywh {210 187 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 55 } } Fl_Group {} { label {Insertion Effects} open xywh {0 165 390 145} labelsize 15 align 9 hide } { Fl_Counter inseffnocounter { label {Ins.Effect No.} callback {ninseff=(int) o->value()-1; insefftype->oscMove("insefx"+to_s(ninseff)+"/efftype"); inseffectuigroup->reext("insefx"+to_s(ninseff)+"/"); inseffpart->oscMove("Pinsparts"+to_s(ninseff)); /* insefftype->value(master->insefx[ninseff]->geteffect()); inseffpart->value(master->Pinsparts[ninseff]+2); inseffectui->refresh(); if (master->Pinsparts[ninseff]!=-1) { insefftype->activate(); inseffectui->activate(); inseffectuigroup->activate(); } else { insefftype->deactivate(); inseffectui->deactivate(); inseffectuigroup->deactivate(); };*/} xywh {5 183 80 22} type Simple labelfont 1 labelsize 10 align 1 minimum 0 maximum 127 step 1 value 1 textfont 1 code0 {o->bounds(1,NUM_INS_EFX);} code1 {o->value(ninseff+1);} } Fl_Choice insefftype { label EffType callback {/*pthread_mutex_lock(&master->mutex); master->insefx[ninseff]->changeeffect((int) o->value()); pthread_mutex_unlock(&master->mutex);*/ inseffectui->efftype = o->value(); inseffectui->refresh(); inseffectui->show();} xywh {285 173 100 22} down_box BORDER_BOX labelsize 10 code0 {/*o->value(master->insefx[ninseff]->geteffect());*/} code1 {/*if (master->Pinsparts[ninseff]== -1) o->deactivate();*/} code2 {o->init("insefx"+to_s(ninseff)+"/efftype");} class Fl_Osc_Choice } { MenuItem {} { label {No Effect} xywh {30 30 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Reverb xywh {40 40 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Echo xywh {50 50 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Chorus xywh {60 60 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Phaser xywh {65 65 100 20} labelfont 1 labelsize 10 } MenuItem {} { label AlienWah xywh {75 75 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Distortion xywh {85 85 100 20} labelfont 1 labelsize 10 } MenuItem {} { label EQ xywh {95 95 100 20} labelfont 1 labelsize 10 } MenuItem {} { label DynFilter xywh {105 105 100 20} labelfont 1 labelsize 10 } } Fl_Group inseffectuigroup {open xywh {5 205 380 95} box FLAT_BOX color 48 class Fl_Osc_Group } { Fl_Box {} { xywh {5 205 0 0} code0 {inseffectuigroup->ext = "insefx0/";} } Fl_Group inseffectui { xywh {5 205 380 90} box UP_FRAME code0 {o->init(true);} class EffUI } {} } Fl_Choice inseffpart { label {Insert To.} callback {/*master->Pinsparts[ninseff]=(int) o->value()-2;*/ if ((int) o->value()==1){ inseffectuigroup->deactivate(); insefftype->deactivate(); inseffectui->deactivate(); } else { inseffectuigroup->activate(); insefftype->activate(); inseffectui->activate(); }; /*master->insefx[ninseff]->cleanup();*/} open xywh {95 183 80 22} down_box BORDER_BOX labelfont 1 labelsize 10 align 5 textsize 10 code0 {o->add("Master Out");o->add("Off");} code1 {char tmp[50]; for (int i=0;iadd(tmp);};} code3 {o->init("Pinsparts"+to_s(ninseff),-2);} class Fl_Osc_Choice } {} Fl_Button {} { label C callback {presetsui->copy(inseffectuigroup->loc());} xywh {180 185 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 55 } Fl_Button {} { label P callback {presetsui->paste(inseffectuigroup->loc(),inseffectui);} xywh {210 185 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 55 } } } Fl_Button {} { label Scales callback {microtonalui->show();} xywh {320 87 65 23} color 51 labelfont 1 } Fl_Group {} { xywh {150 40 117 45} box UP_FRAME } { Fl_Button recordbutton { label {Rec.} callback {o->deactivate(); recordmenu->deactivate(); recordmenu->label("&Record(*)"); stopbutton->activate(); pausebutton->activate(); pauselabel->activate(); o->oscWrite("HDDRecorder/start"); o->oscWrite("resetvu"); mastermenu->redraw();} tooltip {Start Recording} xywh {159 46 21 21} box ROUND_UP_BOX color 88 labelfont 1 labelsize 10 align 2 deactivate class Fl_Osc_Button } Fl_Button stopbutton { label Stop callback {o->deactivate(); o->oscWrite("HDDRecorder/stop"); recordbutton->deactivate(); pausebutton->deactivate(); pauselabel->deactivate(); recordmenu->activate(); recordmenu->label("&Record"); mastermenu->redraw();} tooltip {Stop Recording and close the audio file} xywh {237 46 21 21} box THIN_UP_BOX color 4 labelfont 1 labelsize 10 align 2 deactivate class Fl_Osc_Button } Fl_Button pausebutton { label {| |} callback {o->deactivate(); o->oscWrite("HDDRecorder/pause"); recordbutton->activate(); mastermenu->redraw();} tooltip {Pause Recording} xywh {198 46 21 21} box THIN_UP_BOX color 4 selection_color 4 labelfont 1 labelcolor 3 align 16 deactivate class Fl_Osc_Button } Fl_Box pauselabel { label Pause xywh {192 66 30 15} labelfont 1 labelsize 10 deactivate } } Fl_Group {} { xywh {1 490 389 55} } { Fl_Box mastervu { label {VU-Meter} xywh {5 490 380 30} box FLAT_BOX color 48 selection_color 75 code0 {o->init(osc);} class VuMasterMeter } } Fl_Check_Button nrpnbutton { label NRPN tooltip {Receive NRPNs} xywh {10 115 60 25} down_box DOWN_BOX labelsize 12 code0 {o->init("ctl/NRPN.receive");} class Fl_Osc_Check } Fl_Counter npartcounter { callback {int nval=(int) o->value()-1; /*partuigroup->remove(partui); delete partui; partui=new PartUI(0,0,765,525); partuigroup->add(partui); char buffer[1024]; snprintf(buffer, 1024, "/part%d/", nval); partui->init(master->part[nval], buffer, master, nval, bankui, "/part"+to_s(nval)+"/", osc); partui->redraw(); o->redraw(); */ npart=nval; partui->rebase("/part"+to_s(npart)+"/"); updatepanel(); simplenpartcounter->value(nval+1); simplenpartcounter->do_callback();} tooltip {The part number} xywh {5 312 50 18} type Simple labelfont 1 minimum 0 maximum 127 step 1 value 1 textfont 1 code0 {o->bounds(1,NUM_MIDI_PARTS);} code1 {bankui->init(o);} } Fl_Button {} { label vK callback {virkeyboard->show();} tooltip {Virtual Keyboard} xywh {280 87 40 23} color 51 labelfont 1 } Fl_Group {} { xywh {85 32 55 110} box UP_FRAME } { Fl_Button {} { label Reset callback {globalfinedetuneslider->value(64.0); globalfinedetuneslider->do_callback();} tooltip {Master fine detune reset} xywh {90 37 45 23} box THIN_UP_BOX labelsize 10 } Fl_Dial globalfinedetuneslider { label {Fine Detune} tooltip {global fine detune} xywh {90 68 45 45} box ROUND_UP_BOX labelsize 9 align 130 maximum 127 step 1 value 64 code0 {o->init("microtonal/Pglobalfinedetune");} class Fl_Osc_Dial } } Fl_Button {} { label {Panel Window} callback {updatepanel(); panelwindow->show();} tooltip {Panel Window} xywh {280 112 105 23} color 51 labelfont 1 labelsize 10 } Fl_Button sm_indicator1 { label SM xywh {350 5 35 15} box ROUNDED_BOX down_box ROUNDED_BOX color 45 selection_color 93 labelfont 3 labelcolor 39 deactivate } } } Fl_Window aboutwindow { label {Copyright...} xywh {411 344 365 280} type Double hide } { Fl_Box {} { label {Copyright (c) 2002-2009 Nasca O. PAUL and others. Please read AUTHORS.txt} xywh {15 35 335 55} labeltype EMBOSSED_LABEL labelsize 15 align 208 } Fl_Box {} { label {This is free software; you may redistribute it and/or modify it under the terms of the version 2 (or any later version) of the GNU General Public License as published by the Free Software Fundation. This program comes with ABSOLUTELY NO WARRANTY. See the version 2 (or any later version) of the GNU General Public License for details.} xywh {15 90 335 145} labelfont 1 labelsize 11 align 144 } Fl_Button {} { label {Close this window} callback {aboutwindow->hide();} xywh {80 245 190 25} box THIN_UP_BOX labelsize 11 } Fl_Box {} { label ZynAddSubFX xywh {15 5 335 30} labeltype EMBOSSED_LABEL labelfont 1 labelsize 20 align 16 } } Fl_Window syseffsendwindow { label {System Effects Send} xywh {171 234 120 250} type Double hide resizable class Fl_Osc_Window } { Fl_Box {} { xywh {0 0 0 0} code0 {syseffsendwindow->init(osc,"");} } Fl_Scroll syseffscroll {open xywh {0 45 120 170} box FLAT_BOX resizable code0 {syseffsendwindow->begin();for (int neff1=0;neff1x()+(neff2-1)*35,o->y()+15+neff1*50,30,30);syseffsend[neff1][neff2]->label(strdup((to_s(neff1) + "->" + to_s(neff2)).c_str()));syseffsend[neff1][neff2]->init("/sysefxfrom"+to_s(neff1)+"/to"+to_s(neff2));};syseffsendwindow->end();} } {} Fl_Button {} { label Close callback {syseffsendwindow->hide();} xywh {25 220 80 25} box THIN_UP_BOX } Fl_Box {} { label {Send system effect's output to other system effects} xywh {5 5 110 35} labelsize 10 align 192 } } Fl_Window panelwindow { label {ZynAddSubFX Panel} open xywh {615 247 630 635} type Double class Fl_Osc_Window visible } { Fl_Box {} { xywh {0 0 0 0} code0 {panelwindow->init(osc,"/");} } Fl_Scroll {} {open xywh {0 5 570 310} type HORIZONTAL box THIN_UP_BOX } { Fl_Pack {} {open xywh {5 10 560 285} type HORIZONTAL code0 {for (int i=0;iinit(i,bankui,partui);}} } {} } Fl_Scroll {} {open xywh {0 320 570 310} type HORIZONTAL box THIN_UP_BOX } { Fl_Pack {} {open xywh {5 325 560 285} type HORIZONTAL code0 {for (int i=NUM_MIDI_PARTS/2;iinit(i,bankui,partui);}} } {} } Fl_Button {} { label Close callback {panelwindow->hide(); updatepanel();} xywh {575 605 50 25} box THIN_UP_BOX labelsize 13 } Fl_Button {} { label Refresh callback {updatepanel();} xywh {575 570 55 25} box THIN_UP_BOX labelsize 13 } } Fl_Window simplemasterwindow { label ZynAddSubFX callback {\#ifndef PLUGINVERSION if (fl_choice("Exit and leave the unsaved data?","No","Yes",NULL)) \#endif { *exitprogram=1; };} open xywh {655 378 600 335} type Double class Fl_Osc_Window visible } { Fl_Box {} { xywh {0 0 0 0} code0 {simplemasterwindow->init(osc, "/");} } Fl_Menu_Bar simplemastermenu { xywh {0 0 600 25} } { Submenu {} { label {&File} xywh {10 10 100 20} } { MenuItem {} { label {&New (erase all)...} callback {do_new_master();} xywh {30 30 100 20} } MenuItem {} { label {&Revert changes...} callback {do_revert_changes();} xywh {30 30 100 20} } MenuItem {} { label {&Open Parameters...} callback {do_load_master();} xywh {30 30 100 20} } MenuItem {} { label {&Save All Parameters...} callback {\#if USE_NSM if ( nsm && nsm->is_active() ) { do_save_master( nsm->project_filename ); } else \#endif { do_save_master(); }} xywh {20 20 100 20} divider } MenuItem {} { label {&Settings...} callback {configui->show();} xywh {35 35 100 20} divider } MenuItem {} { label {&Copyright...} callback {aboutwindow->show();} xywh {25 25 100 20} divider } MenuItem {} { label {E&xit} callback {masterwindow->do_callback();} xywh {20 20 100 20} } } Submenu {} { label {&Instrument} xywh {20 20 100 20} } { MenuItem {} { label {&Open Instrument...} callback {const char *filename; filename=fl_file_chooser("Load:","({*.xiz})",NULL,0); if (filename==NULL) return; osc->write("/load_xiz", "si", filename, npart); simplenpartcounter->do_callback(); /* if (result==-10) fl_alert("Error: Could not load the file\\nbecause it is not an instrument file."); else if (result<0) fl_alert("Error: Could not load the file.");*/} xywh {40 40 100 20} } MenuItem {} { label {Show Instrument &Bank...} callback {bankui->show();} xywh {10 10 100 20} divider } } Submenu {} { label Misc xywh {0 0 100 20} } { MenuItem {} { label {Switch User Interface Mode} callback {if (fl_choice("Switch the User Interface to Advanced mode ?","No","Yes",NULL)){ simplemasterwindow->hide(); refresh_master_ui(); masterwindow->show(); osc->write("/cfg.UserInterfaceMode", "i", 1); };} xywh {0 0 100 20} } } } Fl_Group simplelistitemgroup { private xywh {125 65 215 145} box UP_FRAME class Fl_Osc_Group } { Fl_Box {} { xywh {125 65 0 0} code0 {simplelistitemgroup->ext = "part0/";} } Fl_Button partname { callback {if ((int)bankui->cbwig->value()!=(npart+1)){ bankui->cbwig->value(npart+1); bankui->cbwig->do_callback(); }; bankui->show();} xywh {130 72 205 18} box THIN_DOWN_BOX down_box FLAT_BOX color 50 labelfont 1 labelsize 11 align 208 code0 {o->ext = "Pname";o->oscRegister("Pname");} class PartNameButton } Fl_Slider partpanning { label Pan xywh {185 95 145 15} type {Horz Knob} box NO_BOX labelsize 11 maximum 127 step 1 value 64 code0 {o->init("Ppanning",'i'); o->reset_value=64;} class Fl_Osc_TSlider } Fl_Choice partrcv { label {Midi Channel Receive} callback {virkeys->releaseallkeys(0); virkeys->midich=(int) o->value();} open tooltip {receive from Midi channel} xywh {140 157 65 18} down_box BORDER_BOX labelsize 10 align 130 textfont 1 code0 {char nrstr[10]; for(int i=0;iadd(nrstr); else o->add("Dr10");};} code1 {o->init("Prcvchn");} class Fl_Osc_Choice } {} Fl_Dial partvolume { xywh {135 95 45 40} labelsize 9 maximum 127 step 1 code0 {o->init("Pvolume");} class Fl_Osc_Dial } Fl_Box {} { label Volume xywh {130 130 55 20} labelsize 10 } Fl_Check_Button simplepartportamento { label Portamento tooltip {Enable/Disable the portamento} xywh {193 127 79 23} down_box DOWN_BOX labelsize 9 code0 {o->init("ctl/portamento.portamento");} class Fl_Osc_Check } Fl_Counter simpleminkcounter { label {Min.key} callback {if (simpleminkcounter->value()>simplemaxkcounter->value()) o->textcolor(FL_RED); else o->textcolor(FL_BLACK);} tooltip {Minimum key (that the part receives NoteOn messages)} xywh {210 158 40 15} type Simple labelsize 10 minimum 0 maximum 127 step 1 textsize 10 code0 {o->init("Pminkey");} class Fl_Osc_Counter } Fl_Counter simplemaxkcounter { label {Max.key} callback {if (simpleminkcounter->value()>simplemaxkcounter->value()) o->textcolor(FL_RED); else o->textcolor(FL_BLACK);} tooltip {Maximum key (that the part receives NoteOn messages)} xywh {255 158 40 15} type Simple labelsize 10 minimum 0 maximum 127 step 1 textsize 10 code0 {o->init("Pmaxkey");} class Fl_Osc_Counter } Fl_Button {} { label m callback {o->oscWrite("grabMinNote");} tooltip {set the minimum key to the last pressed key} xywh {230 188 15 12} box THIN_UP_BOX labelsize 10 class Fl_Osc_Button } Fl_Button {} { label M callback {o->oscWrite("grabMaxNote");} tooltip {set the maximum key to the last pressed key} xywh {260 188 15 12} box THIN_UP_BOX labelsize 10 class Fl_Osc_Button } Fl_Button {} { label R callback {simpleminkcounter->value(0); simpleminkcounter->do_callback(); simplemaxkcounter->value(127); simplemaxkcounter->do_callback();} tooltip {reset the minimum key to 0 and maximum key to 127} xywh {245 188 15 12} box THIN_UP_BOX labelfont 1 labelsize 10 } Fl_Counter simplepartkeyshiftcounter { label KeyShift xywh {280 120 50 20} type Simple labelsize 11 minimum -64 maximum 64 step 1 code0 {o->lstep(12);} code1 {o->init("Pkeyshift", 'i', -64);} class Fl_Osc_Counter } Fl_Dial simplesyseffsend { xywh {300 160 30 30} maximum 127 step 1 code0 {o->alt_init("/","Psysefxvol"+to_s(nsyseff)+"/part"+to_s(npart));} class Fl_Osc_Dial } Fl_Box {} { label Effect xywh {295 190 40 15} labelsize 10 } } Fl_Check_Button partenabled { label Enabled callback {if ((int) o->value()==0) simplelistitemgroup->deactivate(); else { simplelistitemgroup->activate(); if ((int)bankui->cbwig->value()!=(npart+1)){ bankui->cbwig->value(npart+1); bankui->cbwig->do_callback(); }; }; o->redraw();} private xywh {250 40 85 20} down_box DOWN_BOX labeltype EMBOSSED_LABEL labelfont 1 labelsize 13 align 24 code0 {//char tmp[10];snprintf(tmp,10,"%d",npart+1);o->copy_label(tmp);} code1 {o->init("part0/Penabled");} class Fl_Osc_Check } Fl_Box virkeys { label Keyboard xywh {5 215 590 80} box BORDER_BOX color 17 code0 {o->init(osc, "/");} class VirKeys } Fl_Group {} { xywh {340 30 255 185} } { Fl_Tabs {} { xywh {345 35 245 175} box UP_FRAME align 18 } { Fl_Group {} { label {System Effects} xywh {345 55 245 155} box UP_FRAME labelfont 1 labelsize 12 align 18 } { Fl_Counter simplesyseffnocounter { label {Sys.Effect No.} callback {nsyseff=(int) o->value()-1; /*simplesysefftype->value(master->sysefx[nsyseff]->geteffect());*/ simplesyseffectui->refresh(); simplesysefftype->oscMove("sysefx"+to_s(nsyseff)+"/efftype"); simplesyseffectuigroup->reext("sysefx"+to_s(nsyseff)+"/"); simplesyseffsend->oscMove("Psysefxvol"+to_s(nsyseff)+"/part"+to_s(npart)); simplerefresh();} xywh {350 75 80 20} type Simple labelfont 1 labelsize 10 align 1 minimum 0 maximum 127 step 1 value 1 textfont 1 code0 {o->bounds(1,NUM_SYS_EFX);} code1 {o->value(nsyseff+1);} } Fl_Choice simplesysefftype { label EffType callback { simplesyseffectui->efftype = o->value(); simplesyseffectui->refresh(); } xywh {515 80 70 15} down_box BORDER_BOX labelsize 10 align 5 code0 {o->init("sysefx"+to_s(nsyseff)+"/efftype");} class Fl_Osc_Choice } { MenuItem {} { label {No Effect} xywh {20 20 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Reverb xywh {30 30 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Echo xywh {40 40 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Chorus xywh {50 50 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Phaser xywh {60 60 100 20} labelfont 1 labelsize 10 } MenuItem {} { label AlienWah xywh {70 70 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Distortion xywh {80 80 100 20} labelfont 1 labelsize 10 } MenuItem {} { label EQ xywh {90 90 100 20} labelfont 1 labelsize 10 } MenuItem {} { label DynFilter xywh {100 100 100 20} labelfont 1 labelsize 10 } } Fl_Group simplesyseffectuigroup { xywh {350 95 235 95} color 48 class Fl_Osc_Group } { Fl_Box {} { xywh {350 95 0 0} code0 {simplesyseffectuigroup->ext = "sysefx0/";} } Fl_Group simplesyseffectui { xywh {350 95 234 95} code0 {o->init(false);} code1 {o->refresh();} class SimpleEffUI } {} } Fl_Button {} { label {Send to...} callback {syseffsendwindow->show();} xywh {435 75 75 20} box THIN_UP_BOX labelfont 1 labelsize 11 } Fl_Button {} { label P callback {/*pthread_mutex_lock(&master->mutex); presetsui->paste(master->sysefx[nsyseff],simplesyseffectui); pthread_mutex_unlock(&master->mutex);*/} xywh {560 65 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 55 } } Fl_Group {} { label {Insertion Effects} xywh {345 55 245 155} box UP_FRAME labelfont 1 labelsize 12 align 18 hide } { Fl_Counter simpleinseffnocounter { label {Ins.Effect No.} callback {ninseff=(int) o->value()-1; /*simpleinsefftype->value(master->insefx[ninseff]->geteffect()); simpleinseffpart->value(master->Pinsparts[ninseff]+2);*/ simpleinseffectuigroup->reext("insefx"+to_s(ninseff)+"/"); simpleinsefftype->oscMove("insefx"+to_s(ninseff)+"/efftype"); simpleinseffectui->refresh(); /* if (master->Pinsparts[ninseff]!=-1) { simpleinsefftype->activate(); simpleinseffectui->activate(); simpleinseffectuigroup->activate(); } else { simpleinsefftype->deactivate(); simpleinseffectui->deactivate(); simpleinseffectuigroup->deactivate(); };*/} xywh {350 75 80 20} type Simple labelfont 1 labelsize 10 align 1 minimum 0 maximum 127 step 1 value 1 textfont 1 code0 {o->bounds(1,NUM_INS_EFX);} code1 {o->value(ninseff+1);} } Fl_Choice simpleinsefftype { label EffType callback {/*pthread_mutex_lock(&master->mutex); master->insefx[ninseff]->changeeffect((int) o->value()); pthread_mutex_unlock(&master->mutex);*/ simpleinseffectui->efftype = o->value(); simpleinseffectui->refresh(); simpleinseffectui->show();} xywh {515 80 70 15} down_box BORDER_BOX labelsize 10 align 5 code0 {/*o->value(master->insefx[ninseff]->geteffect());*/} code1 {/*if (master->Pinsparts[ninseff]== -1) o->deactivate();*/} code2 {o->init("insefx"+to_s(ninseff)+"/efftype");} class Fl_Osc_Choice } { MenuItem {} { label {No Effect} xywh {35 35 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Reverb xywh {45 45 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Echo xywh {55 55 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Chorus xywh {65 65 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Phaser xywh {70 70 100 20} labelfont 1 labelsize 10 } MenuItem {} { label AlienWah xywh {80 80 100 20} labelfont 1 labelsize 10 } MenuItem {} { label Distortion xywh {90 90 100 20} labelfont 1 labelsize 10 } MenuItem {} { label EQ xywh {100 100 100 20} labelfont 1 labelsize 10 } MenuItem {} { label DynFilter xywh {110 110 100 20} labelfont 1 labelsize 10 } } Fl_Group simpleinseffectuigroup { xywh {350 95 234 95} box FLAT_BOX color 48 class Fl_Osc_Group } { Fl_Box {} { xywh {350 95 0 0} code0 {simpleinseffectuigroup->ext = "insefx0/";} } Fl_Group simpleinseffectui { xywh {350 95 234 95} code0 {o->init(true);} class SimpleEffUI } {} } Fl_Choice simpleinseffpart { label {Insert To.} callback {/*master->Pinsparts[ninseff]=(int) o->value()-2;*/ if ((int) o->value()==1){ simpleinseffectuigroup->deactivate(); simpleinsefftype->deactivate(); simpleinseffectui->deactivate(); } else { simpleinseffectuigroup->activate(); simpleinsefftype->activate(); simpleinseffectui->activate(); }; /*master->insefx[ninseff]->cleanup();*/} open xywh {435 75 80 20} down_box BORDER_BOX labelfont 1 labelsize 10 align 5 textsize 10 code0 {o->add("Master Out");o->add("Off");} code1 {char tmp[50]; for (int i=0;iadd(tmp);};} code3 {/*o->value(master->Pinsparts[ninseff]+2);*/} } {} Fl_Button {} { label P callback {/*pthread_mutex_lock(&master->mutex); presetsui->paste(master->insefx[ninseff],simpleinseffectui); pthread_mutex_unlock(&master->mutex);*/} xywh {560 65 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 55 } } } } Fl_Group {} { xywh {5 300 590 30} box ENGRAVED_FRAME } { Fl_Box simplemastervu { label {VU-Meter} xywh {5 300 590 30} box FLAT_BOX color 41 selection_color 75 code0 {o->init(osc);} class VuMasterMeter } } Fl_Dial simplemastervolumedial { label {Master Volume} tooltip {Master Volume} xywh {10 35 40 40} box ROUND_UP_BOX labelfont 1 labelsize 11 align 130 maximum 127 step 1 code0 {o->init("Pvolume");} class Fl_Osc_Dial } Fl_Counter simplemasterkeyshiftcounter { label {Master KeyShift} xywh {15 110 90 20} labelsize 11 minimum -64 maximum 64 step 1 code0 {o->lstep(12);} code1 {o->init("Pkeyshift",'i',-64);} class Fl_Osc_Counter } Fl_Button {} { label {Stop ALL sounds!} callback {virkeyboard->releaseallkeys(); o->oscWrite("Panic");} xywh {5 149 115 31} color 90 labelfont 1 labelsize 10 class Fl_Osc_Button } Fl_Button {} { label Reset callback {simpleglobalfinedetuneslider->value(64.0); simpleglobalfinedetuneslider->do_callback();} tooltip {Master fine detune reset} xywh {70 30 50 17} box THIN_UP_BOX labelsize 11 align 128 } Fl_Dial simpleglobalfinedetuneslider { label {Fine Detune} tooltip {global fine detune} xywh {80 50 30 30} box ROUND_UP_BOX labelsize 11 align 130 maximum 127 step 1 value 64 code0 {o->init("microtonal/Pglobalfinedetune");} class Fl_Osc_Dial } Fl_Counter simplenpartcounter { label Part callback {virkeys->releaseallkeys(0); npartcounter->value(o->value()); npart=(int) o->value()-1; simplelistitemgroup->reext("part"+to_s(npart)+"/"); partenabled->oscMove("part"+to_s(npart)+"/Penabled"); simplerefresh();} tooltip {The part number} xywh {170 40 70 20} type Simple labelfont 1 align 4 minimum 0 maximum 127 step 1 value 1 textfont 1 code0 {o->bounds(1,NUM_MIDI_PARTS);} } Fl_Counter {} { label {Keyb.Oct.} callback {virkeys->releaseallkeys(0); virkeys->midioct=(int) o->value(); virkeys->take_focus();} tooltip {Midi Octave} xywh {5 190 55 20} type Simple labelsize 11 align 8 when 6 minimum 0 maximum 5 step 1 textfont 1 textsize 11 code0 {o->value(virkeys->midioct);} } Fl_Button sm_indicator2 { label SM xywh {560 5 35 15} box ROUNDED_BOX down_box ROUNDED_BOX color 45 selection_color 93 labelfont 3 labelcolor 39 deactivate } } Fl_Window selectuiwindow { label {User Interface mode} callback {*exitprogram=1;} xywh {342 246 430 250} type Double hide non_modal class Fl_Osc_Window } { Fl_Box {} { label {Welcome to ZynAddSubFX} xywh {5 5 425 40} labeltype SHADOW_LABEL labelfont 1 labelsize 26 } Fl_Box {} { label {Please choose the interface mode:} xywh {10 50 265 25} labelfont 1 labelsize 13 } Fl_Button {} { label Advanced callback { osc->write("/config/cfg.UserInterfaceMode", "i", 1); masterwindow->show(); selectuiwindow->hide();} xywh {10 165 100 35} color 229 labelfont 1 labelsize 16 } Fl_Box {} { label {.. if you have used ZynAddSubFX before, or you like to have full controll to all parameters.} xywh {110 165 310 35} labelfont 1 labelsize 11 align 144 } Fl_Button {} { label Beginner callback {simplemasterwindow->show(); selectuiwindow->hide(); osc->write("/config/cfg.UserInterfaceMode", "i", 2);} xywh {10 80 100 65} color 238 labelfont 1 labelsize 16 } Fl_Box {} { label {..if you are a beginner, you prefer using presets or you prefer to use simpler user interfaces. Most functionality of ZynAddSubFX will be hidden in this mode to make simple the learning/using it.} xywh {110 75 320 75} labelfont 1 labelsize 11 align 144 } Fl_Box {} { label {You can switch the interface modes anytime you want.} xywh {30 215 360 25} box BORDER_BOX color 51 labelfont 1 labelsize 11 align 144 } } } Function {updatesendwindow()} {} { code {/*for (int neff1=0;neff1value(master->Psysefxsend[neff1][neff2]);*/} {} } Function {updatepanel()} {} { code {for (int npart=0;npartrefresh(); };} {} } Function {setfilelabel(const char *filename)} {} { code {if (filename!=NULL) snprintf(&masterwindowlabel[0],100,"%s - ZynAddSubFX",fl_filename_name(filename)); else snprintf(&masterwindowlabel[0],100,"%s","ZynAddSubFX"); masterwindowlabel[99]='\\0'; masterwindow->label(&masterwindowlabel[0]); simplemasterwindow->label(&masterwindowlabel[0]); masterwindow->update_title(); simplemasterwindow->update_title(); } {} } Function {MasterUI(int *exitprogram_, class Fl_Osc_Interface *osc_):nioui(osc_)} {open } { code {exitprogram=exitprogram_; osc=osc_; ninseff=0; nsyseff=0; npart=0; last_loaded[0]=0; loading_next[0]=0; last_xmz = new Osc_DataModel(osc); last_xmz->callback = [this](std::string filestr) { const char *filename = filestr.c_str(); if (filename[0] != 0) strncpy(last_loaded, filename, XMZ_PATH_MAX); else if (loading_next[0] != 0) { strncpy(last_loaded, loading_next, XMZ_PATH_MAX); loading_next[0] = 0; } else last_loaded[0] = 0; last_loaded[XMZ_PATH_MAX - 1] = 0; char *label = NULL; if(last_loaded[0] != 0) { label = strrchr(last_loaded, '/'); if(label && *label) label = label+1; else label = last_loaded; } setfilelabel(label); }; last_xmz->doUpdate("/last_xmz"); for (int i=0;iicon((char *)p); \#endif assert(osc); presetsui=new PresetsUI(osc); setfilelabel(NULL); swapefftype=0; simplerefresh();} {} } Function {~MasterUI()} {} { code {masterwindow->hide(); delete masterwindow; simplemasterwindow->hide(); delete simplemasterwindow; aboutwindow->hide(); delete aboutwindow; syseffsendwindow->hide(); delete syseffsendwindow; delete virkeyboard; delete microtonalui; delete bankui; delete configui; delete presetsui; delete panelwindow; delete selectuiwindow;} {} } Function {showUI(int UIMode)} {} { code {switch (UIMode){ case 0:selectuiwindow->show(); break; case 1:masterwindow->show(); break; case 2:simplemasterwindow->show(); break; };} {} } Function {simplerefresh()} {} { code {/* if (master->part[npart]->Pname[0]!=0) partname->label((char *)master->part[npart]->Pname); else partname->label("Click here to load a instrument"); */ simplelistitemgroup->redraw();} {} } Function {do_new_master_unconditional()} {} { code {delete microtonalui; microtonalui=new MicrotonalUI(osc, "/microtonal/"); osc->write("/reset_master"); osc->write("/last_xmz"); npartcounter->value(1); refresh_master_ui(); updatepanel();} {} } Function {do_new_master()} {} { code {if (fl_choice("Clear *ALL* the parameters ?","No","Yes",NULL)){ do_new_master_unconditional(); }} {} } Function {do_revert_changes_unconditional()} {return_type int } { code {strncpy(loading_next, last_loaded, XMZ_PATH_MAX); osc->write("/load_xmz", "s", last_loaded); osc->write("/last_xmz"); refresh_master_ui(); updatepanel(); return 1;} {} } Function {do_revert_changes()} {} { code {if (last_loaded[0] == 0) do_new_master(); else if (fl_choice("Revert *ALL* the parameters ?","No","Yes",NULL)){ do_revert_changes_unconditional(); }} {} } Function {do_load_master_unconditional(const char *filename, const char *display_name)} {return_type int } { code {strncpy(loading_next, filename, XMZ_PATH_MAX); osc->write("/load_xmz", "s", filename); osc->write("/last_xmz"); refresh_master_ui(); updatepanel(); setfilelabel(display_name); return 1;} {} } Function {do_load_master(const char* file = NULL)} {} { code {const char *filename; if (file == NULL) { filename=fl_file_chooser("Open:","({*.xmz})",NULL,0); if (filename==NULL) return; } else { filename = file; } int result = do_load_master_unconditional( filename, filename ); if (result==-10) fl_alert("Error: Could not load the file\\nbecause it is not a zynaddsubfx parameters file."); else if (result<0) fl_alert("Error: Could not load the file.");} {} } Function {do_save_master(const char* file = NULL)} {} { code {const char *filename; char *tmp; int result=0; if (file == NULL) { tmp=fl_file_chooser("Save:","({*.xmz})",NULL,0); if (tmp==NULL) return; tmp=fl_filename_setext(tmp,".xmz"); filename=tmp; result=fileexists(tmp); if (result) { result=0; if (!fl_choice("The file exists. Overwrite it?","No","Yes",NULL)) return; } } else { filename = file; } osc->write("/save_xmz", "s", filename); if (result<0) fl_alert("Error: Could not save the file."); else { osc->write("/last_xmz", "s", filename); \#if USE_NSM if ( nsm && nsm->is_active() ) setfilelabel( nsm->display_name ); else \#endif setfilelabel(filename); } updatepanel();} {} } Function {refresh_master_ui()} {} { code {ninseff=0; nsyseff=0; npart=0; //the Master UI npartcounter->do_callback(); syseffnocounter->do_callback(); inseffnocounter->do_callback(); delete microtonalui; microtonalui=new MicrotonalUI(osc, "/microtonal/"); updatesendwindow(); updatepanel(); //the simle MasterUI simplenpartcounter->value(1); simplesyseffnocounter->value(1); simpleinseffnocounter->value(1); simplenpartcounter->do_callback(); simplesyseffnocounter->do_callback(); simpleinseffnocounter->do_callback(); simplerefresh(); bankui->hide();} {} } decl {class Osc_DataModel *last_xmz;} {public local } decl {MicrotonalUI *microtonalui;} {private local } decl {BankUI *bankui;} {private local } decl {int ninseff,npart;} {private local } decl {int nsyseff;} {private local } decl {int *exitprogram;} {private local } decl {Fl_Osc_Dial *syseffsend[NUM_SYS_EFX][NUM_SYS_EFX];} {private local } decl {VirKeyboard *virkeyboard;} {private local } decl {ConfigUI *configui;} {private local } decl {int swapefftype;} {private local } decl {char masterwindowlabel[100];} {private local } decl {Panellistitem *panellistitem[NUM_MIDI_PARTS];} {public local } decl {NioUI nioui;} {private local } decl {class Fl_Osc_Interface *osc;} {public local } decl {char last_loaded[XMZ_PATH_MAX];} {public local } decl {char loading_next[XMZ_PATH_MAX];} {public local } Function {close()} {open return_type void } { code {*exitprogram=1;} {} } }