aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--classes/Bowelyzer.sc10
-rw-r--r--classes/BowelyzerGUI.sc132
2 files changed, 93 insertions, 49 deletions
diff --git a/classes/Bowelyzer.sc b/classes/Bowelyzer.sc
index db6913d..3a61618 100644
--- a/classes/Bowelyzer.sc
+++ b/classes/Bowelyzer.sc
@@ -22,7 +22,7 @@ Bowelyzer{
server.waitForBoot({
hub = BowelyzerOSCHub.new(config.config);
analyzer = BowelyzerAnalyzer.new(config.config);
- gui = BowelyzerGUI.new(config.config);
+ gui = BowelyzerGUI.new(config);
this.addGUIListeners;
this.addServerListeners;
},
@@ -179,7 +179,13 @@ Bowelyzer{
func: {|msg, time, addr, recvPort|
var path = msg[1];
postln("Received: "++msg);
- config.writeConfigurationFile;
+ if(config.configFilePath.isNil || config.configFilePath == "",{
+ {
+ gui.saveAsAction(nil);
+ }.defer;
+ },{
+ config.writeConfigurationFile;
+ });
},
path: "/save",
srcID: hub.local
diff --git a/classes/BowelyzerGUI.sc b/classes/BowelyzerGUI.sc
index 02a621a..457abf7 100644
--- a/classes/BowelyzerGUI.sc
+++ b/classes/BowelyzerGUI.sc
@@ -21,7 +21,7 @@ BowelyzerGUI{
configViewSize,
meterViewWidth = 54,
meterViewHeight = 700,
- headViewHeight = 24,
+ headViewHeight = 30,
headViewWidth = 300,
controlsViewWidth = 246,
controlsViewHeight = 700
@@ -29,7 +29,7 @@ BowelyzerGUI{
*new{
arg config;
- ^super.new.init(config)
+ ^super.new.init(config);
}
init{
@@ -40,16 +40,16 @@ BowelyzerGUI{
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);
+ channels = Set.new(config.config.at(\inputs).size);
+ indicators = Dictionary.new(config.config.at(\inputs).size);
+ this.setupMainView(config.config, config.configFilePath);
this.setupChannelAddButton(channelContainerView);
- this.setupChannelViews(config);
+ this.setupChannelViews(config.config);
}
//setup the main view, in which all other views reside
setupMainView{
- arg config;
+ arg config, configFilePath;
var channelScrollView, configView, layout;
mainView = PageLayout.new("Bowelyzer");
mainView.asView.background = Color.fromHexString("#DBDBDB");
@@ -74,7 +74,7 @@ BowelyzerGUI{
configView.layout.margins = settingsSubViewMargins;
configView.name = "config";
configView.maxSize_(configViewSize);
- this.setupSaveButton(configView);
+ this.setupSaveButton(configView, configFilePath);
this.setupSaveAsButton(configView);
this.setupLoadButton(configView);
@@ -211,19 +211,16 @@ BowelyzerGUI{
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);
+ headView.layout.spacing = 4;
+ headView.layout.margins = [4,0,4,0];
+ headView.maxHeight_(headViewHeight);
Routine{
0.5.wait;
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.setupEZPopUpMenu(headView, "input", Server.default.options.numInputBusChannels, config.at(\inputs).at(name));
this.setupChannelCloseButton(headView, name);
}.play(AppClock);
@@ -255,7 +252,6 @@ BowelyzerGUI{
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];
@@ -368,23 +364,40 @@ BowelyzerGUI{
// create a save button, that launches a FileDialog on press
setupSaveButton{
- arg parent;
+ arg parent, file, state = 1;
^Button(parent, Rect(0, 0, buttonWidth, buttonHeight))
.states_([
- //TODO: set Color depending on whether config file is not ""
- ["save", Color.black, Color.fromHexString("#99FF99")],
+ ["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);
- })
+ arg controlUnit;
+ var address = NetAddr.new("127.0.0.1", NetAddr.langPort),
+ type = "/save";
+ postln("Sending: ["++type++"]");
+ address.sendMsg(type);
+ })
+ .value_(1)
.maxSize_(buttonWidth@buttonHeight)
;
}
+ // open a FileDialog to send a path via OSC to save config to that file
+ saveAsAction{
+ 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: 0,
+ acceptMode: 1,
+ stripResult: true
+ );
+ }
+
// create a save button, that launches a FileDialog on press
setupSaveAsButton{
arg parent;
@@ -392,21 +405,7 @@ BowelyzerGUI{
.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: 0,
- acceptMode: 1,
- stripResult: true
- );
- })
+ .action_({this.saveAsAction})
.maxSize_(buttonWidth@buttonHeight)
;
}
@@ -486,7 +485,8 @@ BowelyzerGUI{
});
if(control == "name", {
bounds = 140@buttonHeight;
- textWidth = 84;
+ labelWidth = 34;
+ textWidth = 106;
});
^EZText(
parent: parent,
@@ -521,6 +521,50 @@ BowelyzerGUI{
}
// setup a StaticText and a NumberBox
+ setupEZPopUpMenu{
+ arg parent, control, inputs, value;
+ var bounds = 120@buttonHeight,
+ labelWidth = 34,
+ menu = EZPopUpMenu.new(
+ parentView: parent,
+ bounds: bounds,
+ label: control,
+ initVal:value,
+ labelWidth: labelWidth,
+ labelHeight: buttonHeight
+ ),
+ 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;
+ postln("Sending: "++"["++type++", "++name++", "++controlName++", "++controlValue++"]");
+ address.sendMsg(type, name, controlName, controlValue);
+ };
+
+ // create state for each input
+ inputs.do({|i|
+ menu.addItem(i.asSymbol, action);
+ });
+ // set bounds properly
+ menu.view.bounds_(bounds);
+ // set alignment and bounds for StaticText
+ menu.view.children.do({|item|
+ if(item.isKindOf(StaticText),{
+ item.align_(\left);
+ item.bounds_(labelWidth@buttonHeight);
+ });
+ });
+ ^menu
+ .value_(value)
+ .view.maxSize_(bounds).bounds_(bounds)
+ .asView.name_(control)
+ ;
+ }
+
+ // setup a StaticText and a NumberBox
setupEZNumber{
arg parent, control, value;
var bounds = 144@buttonHeight,
@@ -532,12 +576,6 @@ BowelyzerGUI{
labelWidth = 70;
numberWidth = 70;
});
- //TODO: use EZPopupMenu
- if(control == "input", {
- bounds = 124@buttonHeight;
- labelWidth = 48;
- numberWidth = 76;
- });
^EZNumber(
parent: parent,
bounds: bounds,