aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--classes/BowelyzerGUI.sc193
1 files changed, 111 insertions, 82 deletions
diff --git a/classes/BowelyzerGUI.sc b/classes/BowelyzerGUI.sc
index ad4507c..403c911 100644
--- a/classes/BowelyzerGUI.sc
+++ b/classes/BowelyzerGUI.sc
@@ -14,8 +14,8 @@ BowelyzerGUI{
controlMeterContainerViewHeight = 700,
controlMeterContainerViewWidth = 300,
controlMeterContainerViewSize,
- buttonHeight = 20,
- buttonWidth = 48,
+ <buttonHeight = 20,
+ <buttonWidth = 48,
settingsSubViewMargins = #[2,2,2,2],
settingsSubViewSize,
settingsViewSize,
@@ -44,6 +44,7 @@ BowelyzerGUI{
channels = Set.new(config.at(\inputs).size);
indicators = Dictionary.new(config.at(\inputs).size);
this.setupMainView(config);
+ this.setupChannelAddButton(channelContainerView);
this.setupChannelViews(config);
}
@@ -134,101 +135,109 @@ BowelyzerGUI{
// 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);
+ 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 = View(parent: channelScrollView, bounds: Rect(0, 0, (channelViewWidth*config.at(\inputs).size)+buttonWidth, channelViewHeight));
channelContainerView.asView.background = Color.fromHexString("#FEFEFE");
channelContainerView.layout = HLayout();
channelContainerView.layout.spacing = 0;
channelContainerView.layout.margins = [0,0,0,0];
channelContainerView.name = \channelContainerView;
- //channelContainerView.minSize_(channelViewWidth@channelViewHeight);
- channelContainerView.maxSize_((channelViewWidth*config.at(\inputs).size)@channelViewHeight);
+ //channelContainerView.maxSize_(((channelViewWidth*config.at(\inputs).size)+buttonWidth)@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, channelViewWidth, channelViewHeight));
- channelView.asView.background = Color.fromHexString("#FEEFEF");
- channelView.name = name.asString;
- channelView.layout = VLayout();
- channelView.layout.spacing = 0;
- channelView.layout.margins = [2,0,2,0];
- channelView.maxSize_(300@700);
- channelView.deleteOnClose_(true);
-
- // 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|
- if(item.isKindOf(StaticText),{item.align_(\left)});
- if(item.isKindOf(NumberBox),{item.align_(\right)});
- });
- this.setupChannelCloseButton(headView, name);
-
- 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);
+ this.setupChannelView(name, config);
});
}
+ // setup a single channel View by name
+ setupChannelView{
+ arg name, config;
+ var channelView, headView, controlMeterContainerView, meterView, controlsView, controlsFromConfig, levelIndicator;
+ channelView = View(channelContainerView.asView, Rect(0, 0, channelViewWidth, channelViewHeight));
+ channelView.asView.background = Color.fromHexString("#FEEFEF");
+ channelView.name = name.asString;
+ channelView.layout = VLayout();
+ channelView.layout.spacing = 0;
+ channelView.layout.margins = [2,0,2,0];
+ channelView.maxSize_(channelViewWidth@channelViewHeight);
+ channelView.deleteOnClose_(true);
+
+ // 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|
+ if(item.isKindOf(StaticText),{item.align_(\left)});
+ if(item.isKindOf(NumberBox),{item.align_(\right)});
+ });
+ this.setupChannelCloseButton(headView, name);
+
+ 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)
+ //Routine{
+ config.at(\controls).at(name).order.do({|control, i|
+ var value = config.at(\controls).at(name).at(control),
+ controlIs = BowelyzerConfig.controlContainedIn(control);
+ //(0.1).wait;
+ 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)}); if(item.isKindOf(Slider), {item.orientation_(\horizontal)});})},
+ \ranger, {this.setupEZRanger(controlsView, control, value, \controls, name).view.children.do({|item| if(item.isKindOf(NumberBox),{item.align_(\right)})})}
+ );
+ });
+ //}.play(AppClock);
+ // 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;
@@ -399,6 +408,25 @@ BowelyzerGUI{
;
}
+ // setup a button to add a channel
+ setupChannelAddButton{
+ arg parent;
+ ^Button(parent, Rect(0, 0, buttonWidth, buttonWidth))
+ .states_([
+ ["+", Color.black, Color.fromHexString("#99FF99")]
+ ])
+ .action_({
+ arg controlUnit;
+ var address = NetAddr.new("127.0.0.1", NetAddr.langPort),
+ type = "/add";
+ postln("Sending: ["++type++"]");
+ address.sendMsg(type);
+ })
+ .maxSize_(buttonWidth@buttonWidth)
+ .name_("add")
+ ;
+ }
+
// setup a StaticText and a TextField
setupEZText{
arg parent, control, value;
@@ -459,6 +487,7 @@ BowelyzerGUI{
labelWidth = 70;
numberWidth = 70;
});
+ //TODO: use EZPopupMenu
if(control == "input", {
bounds = 124@buttonHeight;
labelWidth = 48;