diff options
Diffstat (limited to 'BowelyzerGUI.sc')
-rw-r--r-- | BowelyzerGUI.sc | 520 |
1 files changed, 0 insertions, 520 deletions
diff --git a/BowelyzerGUI.sc b/BowelyzerGUI.sc deleted file mode 100644 index e26798e..0000000 --- a/BowelyzerGUI.sc +++ /dev/null @@ -1,520 +0,0 @@ -BowelyzerGUI{ - - var mainView, <settingsView, <channelContainerView, - <channels, - <indicators, - //TODO: move to BowelyzerConfig - fadeOutTime = 0.3, - fadeOutSteps = 20, - minWidth=1280, - minHeight=720, - channelViewHeight = 700, - channelViewWidth = 300, - channelViewSize, - controlMeterContainerViewHeight = 700, - controlMeterContainerViewWidth = 300, - controlMeterContainerViewSize, - buttonHeight = 20, - buttonWidth = 48, - settingsSubViewMargins = #[2,2,2,2], - settingsSubViewSize, - settingsViewSize, - configViewSize, - meterViewWidth = 54, - meterViewHeight = 700, - headViewHeight = 24, - headViewWidth = 300, - controlsViewWidth = 246, - controlsViewHeight = 700 - ; - - *new{ - arg config; - ^super.new.init(config) - } - - init{ - arg config; - postln("Launching GUI."); - settingsViewSize = 496@64; - settingsSubViewSize = 144@64; - configViewSize = 64@64; - controlMeterContainerViewSize = controlMeterContainerViewWidth@controlMeterContainerViewHeight; - channelViewSize = channelViewWidth@channelViewHeight; - channels = Set.new(config.at(\inputs).size); - indicators = Dictionary.new(config.at(\inputs).size); - this.setupMainView(config); - this.setupChannelViews(config); - } - - //setup the main view, in which all other views reside - setupMainView{ - arg config; - var channelScrollView, forwardView, hubView, synthServerView, configView, layout; - mainView = PageLayout.new("Bowelyzer"); - mainView.asView.background = Color.fromHexString("#DBDBDB"); - layout = mainView.asView.addFlowLayout(0@0, 0@0); - settingsView = View(mainView.asView, Rect(0, 0, settingsViewSize.x, settingsViewSize.y)); - settingsView.asView.background = Color.fromHexString("#99EF99"); - settingsView.layout = HLayout(); - settingsView.layout.spacing = 0; - settingsView.layout.margins = [0,0,0,0]; - - //config - configView = View(settingsView.asView); - configView.asView.background = Color.fromHexString("#DDDDEF"); - configView.layout = VLayout(); - configView.layout.spacing = 0; - configView.layout.margins = settingsSubViewMargins; - configView.name = "config"; - configView.maxSize_(configViewSize); - this.setupSaveButton(configView); - this.setupSaveAsButton(configView); - this.setupLoadButton(configView); - - //synthServer - synthServerView = View(settingsView.asView); - synthServerView.asView.background = Color.fromHexString("#DDDDEF"); - synthServerView.layout = VLayout(); - synthServerView.layout.spacing = 0; - synthServerView.layout.margins = settingsSubViewMargins; - synthServerView.name = "synthServer"; - synthServerView.maxSize_(settingsSubViewSize); - StaticText(synthServerView, Rect(0, 0, 140@20)).string_("synthServer").align_(\center); - this.setupEZText(synthServerView, "address", config.at(\synthServerAddress)).children.do({|item| - if(item.isKindOf(StaticText),{item.align_(\left)}); - if(item.isKindOf(TextField),{item.align_(\right)}); - }); - this.setupEZNumber(synthServerView, "port", config.at(\synthServerPort)).children.do({|item| - if(item.isKindOf(StaticText),{item.align_(\left)}); - if(item.isKindOf(NumberBox),{item.align_(\right)}); - }); - - //hub - hubView = View(settingsView.asView); - hubView.asView.background = Color.fromHexString("#DDDDEF"); - hubView.layout = VLayout(); - hubView.layout.spacing = 0; - hubView.layout.margins = settingsSubViewMargins; - hubView.name = "hub"; - hubView.maxSize_(settingsSubViewSize); - StaticText(hubView, Rect(0, 0, 140@20)).string_("hub").align_(\center); - this.setupEZText(hubView, "address", config.at(\hubAddress)).children.do({|item| - if(item.isKindOf(StaticText),{item.align_(\left)}); - if(item.isKindOf(TextField),{item.align_(\right)}); - }); - this.setupEZNumber(hubView, "port", config.at(\hubPort)).children.do({|item| - if(item.isKindOf(StaticText),{item.align_(\left)}); - if(item.isKindOf(NumberBox),{item.align_(\right)}); - }); - - //forward - forwardView = View(settingsView.asView); - forwardView.asView.background = Color.fromHexString("#DDDDEF"); - forwardView.layout = VLayout(); - forwardView.layout.spacing = 0; - forwardView.layout.margins = settingsSubViewMargins; - forwardView.name = "forward"; - forwardView.maxSize_(settingsSubViewSize); - StaticText(forwardView, Rect(0, 0, 140@20)).string_("forward").align_(\center); - this.setupEZText(forwardView, "address", config.at(\forwardAddress)).children.do({|item| - if(item.isKindOf(StaticText),{item.align_(\left)}); - if(item.isKindOf(TextField),{item.align_(\right)}); - }); - this.setupEZNumber(forwardView, "port", config.at(\forwardPort)).children.do({|item| - if(item.isKindOf(StaticText),{item.align_(\left)}); - if(item.isKindOf(NumberBox),{item.align_(\right)}); - }); - - // go to next line in layout - layout.nextLine; - channelScrollView = ScrollView(mainView.asView, Rect(0,0,mainView.bounds.width, mainView.bounds.height-settingsView.bounds.height)).autohidesScrollers_(false).hasBorder_(true); - // container for channelViews - channelContainerView = View(parent: channelScrollView, bounds: Rect(0, 0, channelViewWidth*config.at(\inputs).size, channelViewHeight)); - channelContainerView.asView.background = Color.fromHexString("#FEFEFE"); - channelContainerView.layout = HLayout(); - channelContainerView.layout.spacing = 0; - channelContainerView.layout.margins = [0,0,0,0]; - channelContainerView.maxSize_((channelViewWidth*config.at(\inputs).size)@channelViewHeight); - } - - //setup channel views - setupChannelViews{ - arg config; - var channelView, headView, controlMeterContainerView, meterView, controlsView, controlsFromConfig, levelIndicator; - config.at(\inputs).keysValuesDo({|name, input| - //channelView = View(mainView.asView, Rect(0, 0, mainView.bounds.width/config.at(\inputs).size, mainView.bounds.height)); - channelView = View(mainView.asView, Rect(0, 0, channelViewWidth, channelViewHeight)); - channelView.asView.background = Color.fromHexString("#FEEFEF"); - channelView.name = name; - channelView.layout = VLayout(); - channelView.layout.spacing = 0; - channelView.layout.margins = [2,0,2,0]; - channelView.maxSize_(300@700); - // adding name textfield of input - headView = View(channelView.asView, Rect(0, 0, headViewWidth, headViewHeight)); - headView.asView.background = Color.fromHexString("#DDEFDD"); - headView.name = \inputs; - headView.layout = HLayout(); - headView.layout.spacing = 0; - headView.layout.margins = [2,0,2,0]; - headView.maxHeight_(buttonHeight); - this.setupEZText(headView, "name", name.asString).children.do({|item| - if(item.isKindOf(StaticText),{item.align_(\left)}); - if(item.isKindOf(TextField),{item.align_(\right)}); - }); - this.setupEZNumber(headView, "input", config.at(\inputs).at(name)).children.do({|item| - item.postln; if(item.isKindOf(StaticText),{item.align_(\left)}); - item.postln; if(item.isKindOf(NumberBox),{item.align_(\right)}); - }); - - controlMeterContainerView = View(channelView.asView, Rect(0, 0, controlMeterContainerViewWidth, controlMeterContainerViewHeight)); - controlMeterContainerView.asView.background = Color.fromHexString("#DDDDEF"); - controlMeterContainerView.name = \meterAndControls; - controlMeterContainerView.layout = HLayout(); - controlMeterContainerView.layout.spacing = 0; - controlMeterContainerView.layout.margins = [0,0,0,0]; - - meterView = View(controlMeterContainerView.asView, Rect(0,0, meterViewWidth, meterViewHeight)); - meterView.asView.background = Color.fromHexString("#EEEFEE"); - meterView.name = \meterView; - meterView.layout = VLayout(); - meterView.maxWidth = meterViewWidth; - meterView.layout.spacing = 0; - meterView.layout.margins = [2,0,2,0]; - - //setup a toggle button for each channel - this.setupPauseButton(meterView); - - // setup a small View as indicator for incoming/outgoing OSC messages for each input - this.setupOSCIndicator(meterView); - this.addOSCIndicatorFadeOutTask(name); - - // setup LevelIndicator for each input - this.setupLevelIndicator(meterView); - - controlsView = View(controlMeterContainerView.asView, Rect(0,0, controlsViewWidth, controlsViewHeight)); - controlsView.asView.background = Color.fromHexString("#EEEFEE"); - controlsView.name = \controls; - controlsView.maxWidth = controlsViewWidth; - controlsView.layout = VLayout(); - controlsView.layout.spacing = 0; - controlsView.layout.margins = [2,0,2,0]; - - //TODO: add ranger for amplitude and pitch threshold/region - //TODO: rearrange sliders/rangers/knobs in groups (maybe even tabs) - config.at(\controls).at(name).order.do({|control, i| - var unit; - var value = config.at(\controls).at(name).at(control), controlIs = BowelyzerConfig.controlContainedIn(control); - switch( - controlIs.asSymbol, - \knob, {this.setupEZKnob(controlsView, control, value, \controls, name).view.children.do({|item| if(item.isKindOf(NumberBox),{item.align_(\right)})})}, - \slider, {this.setupEZSlider(controlsView, control, value).view.children.do({|item| if(item.isKindOf(NumberBox),{item.align_(\right)})})}, - \ranger, {this.setupEZRanger(controlsView, control, value, \controls, name).view.children.do({|item| if(item.isKindOf(NumberBox),{item.align_(\right)})})} - ); - }); - // add channelView to the container and the global Dictionary for better access - channelContainerView.layout.add(channelView); - channels.add(channelView); - }); - } - - // setup a OSC indicator view (one on each channel) - setupOSCIndicator{ - arg parent; - ^View(parent, Rect(0, 0, buttonWidth, buttonHeight)) - .name_(\OSCIndicator) - .background_(Color.fromHexString("#EEEFEE")) - .maxSize_(buttonWidth@buttonHeight) - .visible_(true) - ; - } - - // setup tasks for changing the OSC indicator color (on receiving a message) - addOSCIndicatorFadeOutTask{ - arg name; - indicators.put( - name.asSymbol, - Task({ - channels.do({|channel| - if(channel.name.asSymbol == name,{ - channel.children.do({|channelChild| - if(channelChild.name.asSymbol == \meterAndControls,{ - channelChild.children.do({|meterAndControls| - if(meterAndControls.name.asSymbol == \meterView, { - meterAndControls.children.do({|meterView| - if(meterView.isKindOf(View) && meterView.name.asSymbol == \OSCIndicator, { - meterView.background_(Color.fromHexString("#99FF99")); - fadeOutSteps.do({|item,i| - meterView.background_(meterView.background.blend(Color.fromHexString("#EEEFEE"), (fadeOutTime/fadeOutSteps))); - (fadeOutTime/fadeOutSteps).wait; - }); - meterView.background_(Color.fromHexString("#EEEFEE")); - }); - }); - }); - }); - }); - }); - }); - }); - }) - ); - } - - freeOSCIndicatorFadeOutTask{ - - } - - setupLevelIndicator{ - arg parent; - ^LevelIndicator( - parent - ).maxSize_(buttonWidth@600) - .style_(\led) - .drawsPeak_(true); - } - - // create a load button, that launches a FileDialog on press - setupLoadButton{ - arg parent; - ^Button(parent, Rect(0, 0, buttonWidth, buttonHeight)) - .states_([ - ["load", Color.black, Color.fromHexString("#99FF99")] - ]) - .action_({ - arg controlUnit; - var address = NetAddr.new("127.0.0.1", NetAddr.langPort), - type = "/load"; - FileDialog.new( - okFunc: {|path| - postln("Sending: ["++type++", "++path++"]"); - address.sendMsg(type, path.asString); - }, - cancelFunc: {}, - fileMode: 1, - acceptMode: 0, - stripResult: true - ); - }) - .maxSize_(buttonWidth@buttonHeight) - ; - } - - // create a save button, that launches a FileDialog on press - setupSaveButton{ - arg parent; - ^Button(parent, Rect(0, 0, buttonWidth, buttonHeight)) - .states_([ - ["save", Color.black, Color.fromHexString("#99FF99")], - ]) - .action_({ - arg controlUnit; - var address = NetAddr.new("127.0.0.1", NetAddr.langPort), - type = "/save"; - postln("Sending: ["++type++"]"); - address.sendMsg(type); - }) - .maxSize_(buttonWidth@buttonHeight) - ; - } - - // create a save button, that launches a FileDialog on press - setupSaveAsButton{ - arg parent; - ^Button(parent, Rect(0, 0, buttonWidth, buttonHeight)) - .states_([ - ["save as", Color.black, Color.fromHexString("#99FF99")], - ]) - .action_({ - arg controlUnit; - var address = NetAddr.new("127.0.0.1", NetAddr.langPort), - type = "/saveas"; - FileDialog.new( - okFunc: {|path| - postln("Sending: ["++type++", "++path++"]"); - address.sendMsg(type, path.asString); - }, - cancelFunc: {}, - fileMode: 1, - acceptMode: 1, - stripResult: true - ); - }) - .maxSize_(buttonWidth@buttonHeight) - ; - } - - // setup a button to pause the Synth for a channel - setupPauseButton{ - arg parent; - ^Button(parent, Rect(0, 0, buttonWidth, buttonHeight)) - .states_([ - ["on", Color.black, Color.fromHexString("#99FF99")], - ["off", Color.black, Color.fromHexString("#FF9999")] - ]) - .action_({ - arg controlUnit; - var address = NetAddr.new("127.0.0.1", NetAddr.langPort), - type = "/toggle", - name = controlUnit.parent.parent.parent.name.asSymbol, - controlValue = controlUnit.value; - address.sendMsg(type, name, controlValue); - }) - .maxSize_(buttonWidth@buttonHeight) - ; - } - - // setup a StaticText and a TextField - setupEZText{ - arg parent, control, value; - var bounds = 144@buttonHeight, - labelWidth= 48, - textWidth = 96; - // resize, depending on surrounding - if(control == "address",{ - bounds = 140@buttonHeight; - labelWidth = 60; - textWidth = 80; - }); - ^EZText( - parent: parent, - bounds: bounds, - label: control, - action: { - arg controlUnit; - var address = NetAddr.new("127.0.0.1", NetAddr.langPort), - type = "/"++controlUnit.view.parent.name.asString, - name = controlUnit.view.parent.parent.name.asSymbol, - controlName = controlUnit.labelView.string.asSymbol, - controlValue = controlUnit.value; - if((type == "/synthServer") || (type == "/hub") || (type == "/forward"), { - type = (type++"Address").replace("/","").asSymbol; - name = "/"++controlName; - postln("Sending: "++"["++name++", "++type++", "++controlValue++"]"); - address.sendMsg(name, type, controlValue); - },{ - postln("Sending: "++"["++type++", "++name++", "++controlName++", "++controlValue++"]"); - address.sendMsg(type, name, controlName, controlValue); - }); - }, - labelWidth: labelWidth, - textWidth: textWidth, - initVal:value.asString, - layout: \horz, - margin: nil - ) - .view.maxHeight_(buttonHeight) - ; - } - - // setup a StaticText and a NumberBox - setupEZNumber{ - arg parent, control, value; - var bounds = 144@buttonHeight, - labelWidth = 48, - numberWidth = 96; - // resize, depending on surrounding - if(control == "port",{ - bounds = 140@buttonHeight; - labelWidth = 70; - numberWidth = 70; - }); - ^EZNumber( - parent: parent, - bounds: bounds, - label: control, - controlSpec: control.asSymbol, - action: { - arg controlUnit; - var address = NetAddr.new("127.0.0.1", NetAddr.langPort), - type = "/"++controlUnit.view.parent.name.asString, - name = controlUnit.view.parent.parent.name.asSymbol, - controlName = controlUnit.labelView.string.asSymbol, - controlValue = controlUnit.value; - if((type == "/synthServer") || (type == "/hub") || (type == "/forward"), { - type = (type++"Port").replace("/", "").asSymbol; - name = "/"++controlName; - postln("Sending: "++"["++name++", "++type++", "++controlValue++"]"); - address.sendMsg(name, type, controlValue); - },{ - postln("Sending: "++"["++type++", "++name++", "++controlName++", "++controlValue++"]"); - address.sendMsg(type, name, controlName, controlValue); - }); - }, - initVal:value, - labelWidth: labelWidth, - numberWidth: numberWidth, - layout: \horz, - margin: nil - ) - .view.maxHeight_(buttonHeight) - ; - } - - // setup a Slider, a StaticText and a NumberBox for a Synth setting - setupEZSlider{ - arg parent, control, value; - ^EZSlider( - parent: parent, - bounds: 236@40, - label: control, - controlSpec: control.asSymbol, - action: { - arg controlUnit; - var address = NetAddr.new("127.0.0.1", NetAddr.langPort), - type = "/"++controlUnit.view.parent.name.asString, - name = controlUnit.view.parent.parent.parent.name.asSymbol, - controlName = controlUnit.labelView.string.asSymbol, - controlValue = controlUnit.value; - address.sendMsg(type, name, controlName, controlValue); - }, - numberWidth: 70, - layout: \line2, - margin: nil - ); - } - - setupEZRanger{ - arg parent, control, value; - ^EZRanger( - parent: parent, - bounds: 300@16, - label: control, - controlSpec: control, - action: { - arg controlUnit; - var address = NetAddr.new("127.0.0.1", NetAddr.langPort), - type = "/"++controlUnit.view.parent.name.asString, - name = controlUnit.view.parent.parent.parent.name.asSymbol, - controlName = controlUnit.labelView.string.asSymbol, - controlValue = controlUnit.value; - address.sendMsg(type, name, controlName, controlValue); - }, - labelWidth: 120, - unitWidth:30 - ); - } - - setupEZKnob{ - arg parent, control, value, type, name; - ^EZKnob( - parent: parent, - bounds: 300@16, - label: control, - controlSpec: \freq, - action: { - arg controlUnit; - var address = NetAddr.new("127.0.0.1", NetAddr.langPort), - type = "/"++controlUnit.view.parent.name.asString, - name = controlUnit.view.parent.parent.parent.name.asSymbol, - controlName = controlUnit.labelView.string.asSymbol, - controlValue = controlUnit.value; - address.sendMsg(type, name, controlName, controlValue); - }, - labelWidth: 120, - unitWidth:30 - ); - } -} - |