From 2a0e5fd6a745deb1c44c5cf31b9209250d163aee Mon Sep 17 00:00:00 2001 From: Nathan Koch Date: Sat, 25 Jun 2011 14:17:10 -0500 Subject: [PATCH] working architecture for oscillator control panel --- src/modulatorp5/ControlPanel.java | 22 +++++++ src/modulatorp5/ModulatorP5.java | 26 ++++++++ src/modulatorp5/OscillatorControlPanel.java | 72 +++++++++++++++++++++ src/modulatorp5/OscillatorUI.java | 68 ------------------- 4 files changed, 120 insertions(+), 68 deletions(-) create mode 100644 src/modulatorp5/ControlPanel.java create mode 100644 src/modulatorp5/OscillatorControlPanel.java delete mode 100644 src/modulatorp5/OscillatorUI.java diff --git a/src/modulatorp5/ControlPanel.java b/src/modulatorp5/ControlPanel.java new file mode 100644 index 0000000..411b1c4 --- /dev/null +++ b/src/modulatorp5/ControlPanel.java @@ -0,0 +1,22 @@ +package modulatorp5; + +import controlP5.Slider; + +public interface ControlPanel { + + public static final int SLIDER_WIDTH = 200; + public static final int SLIDER_HEIGHT = 20; + public static final int SLIDER_VERTICAL_SPACER = new Float(SLIDER_HEIGHT * 0.66).intValue(); + + public void buildInterface(); + + public void addInitialControls(); + + public Slider addSlider(String name, float minVal, float maxVal, float curVal); + + public void advanceCursorForSlider(); + + public void rateSlider(float newRate); + + public void amountSlider(float newAmount); +} diff --git a/src/modulatorp5/ModulatorP5.java b/src/modulatorp5/ModulatorP5.java index 55b673e..3929c6c 100644 --- a/src/modulatorp5/ModulatorP5.java +++ b/src/modulatorp5/ModulatorP5.java @@ -27,11 +27,13 @@ import processing.core.*; import java.util.ArrayList; +import controlP5.*; public class ModulatorP5 { // parent is a reference to the parent sketch PApplet parent; + ControlP5 controlP5; public final static String VERSION = "##version##"; @@ -40,7 +42,16 @@ public class ModulatorP5 { public ModulatorP5(PApplet theParent) { parent = theParent; parent.registerDraw(this); + controlP5 = new ControlP5(parent); + allModulators = new ArrayList(); + welcomeMessage(); + } + + public ModulatorP5(PApplet theParent, ControlP5 controlP5_) { + parent = theParent; + parent.registerDraw(this); + controlP5 = controlP5_; allModulators = new ArrayList(); welcomeMessage(); @@ -73,5 +84,20 @@ public NoiseOscillator createNoiseOscillator() { allModulators.add(newOsc); return newOsc; } + + public OscillatorControlPanel createControlPanel(Oscillator oscillator) { + OscillatorControlPanel cp = new OscillatorControlPanel(parent, controlP5, oscillator); + return cp; + } + + public OscillatorControlPanel createControlPanel(int x, int y, Oscillator oscillator) { + OscillatorControlPanel cp = new OscillatorControlPanel(parent, controlP5, x, y, oscillator); + return cp; + } + + public OscillatorControlPanel createControlPanel(int x, int y, String name, Oscillator oscillator) { + OscillatorControlPanel cp = new OscillatorControlPanel(parent, controlP5, x, y, name, oscillator); + return cp; + } } diff --git a/src/modulatorp5/OscillatorControlPanel.java b/src/modulatorp5/OscillatorControlPanel.java new file mode 100644 index 0000000..fef4699 --- /dev/null +++ b/src/modulatorp5/OscillatorControlPanel.java @@ -0,0 +1,72 @@ +package modulatorp5; + +import java.util.ArrayList; + +import processing.core.PApplet; +import controlP5.*; + +public class OscillatorControlPanel implements ControlPanel { + + private PApplet parent; + private ControlP5 controlP5; + private int x, y; + private int yCursor; + private String groupName; + + private ControlGroup controlGroup; + + Oscillator oscillator; + + OscillatorControlPanel(PApplet parent_, ControlP5 controlP5_, Oscillator oscillator_) { + this(parent_, controlP5_, 0, 0, "Entity", oscillator_); + } + + OscillatorControlPanel(PApplet parent_, ControlP5 controlP5_, int x_, int y_, Oscillator oscillator_) { + this(parent_, controlP5_, x_, y_, "Entity", oscillator_); + } + + OscillatorControlPanel(PApplet parent_, ControlP5 controlP5_, int x_, int y_, String groupName_, Oscillator oscillator_) { + parent = parent_; + controlP5 = controlP5_; + x = x_; + y = y_; + yCursor = 0; + groupName = groupName_; + + oscillator = oscillator_; + + buildInterface(); + addInitialControls(); + } + + public void buildInterface() { + controlGroup = controlP5.addGroup(groupName, x, y); + } + + public void addInitialControls() { + addSlider("rateSlider", oscillator.getMinRate(), oscillator.getMaxRate(), oscillator.getRate()); + addSlider("amountSlider", oscillator.MIN_AMOUNT, oscillator.MAX_AMOUNT, oscillator.getAmount()); + } + + public Slider addSlider(String name, float minVal, float maxVal, float curVal) { + Slider slider = controlP5.addSlider(name, minVal, maxVal, curVal, 0, yCursor, SLIDER_WIDTH, SLIDER_HEIGHT); + advanceCursorForSlider(); + slider.setLabel(controlGroup.name() + " " + name); + slider.setGroup(controlGroup.name()); + slider.plugTo(this); + return slider; + } + + public void advanceCursorForSlider() { + yCursor = yCursor + (SLIDER_HEIGHT + SLIDER_VERTICAL_SPACER); + } + + public void rateSlider(float newRate) { + oscillator.setRate(newRate); + } + + public void amountSlider(float newAmount) { + oscillator.setAmount(newAmount); + } + +} diff --git a/src/modulatorp5/OscillatorUI.java b/src/modulatorp5/OscillatorUI.java deleted file mode 100644 index e344a14..0000000 --- a/src/modulatorp5/OscillatorUI.java +++ /dev/null @@ -1,68 +0,0 @@ -package modulatorp5; - -import processing.core.PApplet; -import controlP5.*; - -public class OscillatorUI { - protected PApplet parent; - - protected ControlP5 controlP5; - protected ControlGroup controlGroup; - protected Oscillator osc; - - public final int SLIDER_WIDTH = 160; - public final int SLIDER_HEIGHT = 20; - public final int VERTICAL_DISTANCE = new Float(SLIDER_HEIGHT * 0.66).intValue(); - - OscillatorUI(PApplet parent_, ControlP5 controlP5_, Oscillator osc_) { - setup(parent_, controlP5_, osc_, 0, 0, "Osc"); - } - - OscillatorUI(PApplet parent_, ControlP5 controlP5_, Oscillator osc_, int x_, int y_) { - setup(parent_, controlP5_, osc_, x_, y_, "Osc"); - } - - OscillatorUI(PApplet parent_, ControlP5 controlP5_, Oscillator osc_, int x_, int y_, String groupName_) { - setup(parent_, controlP5_, osc_, x_, y_, groupName_); - } - - public int getHeight() { - return controlGroup.getHeight(); - } - - protected void setup(PApplet p_, ControlP5 c_, Oscillator o_, int x_, int y_, String g_) { - parent = p_; - controlP5 = c_; - osc = o_; - setupUI(x_, y_, g_); - } - - protected void setupUI(int x, int y, String groupName) { - controlGroup = controlP5.addGroup(groupName, x, y); - - setupRateSlider(); - setupAmountSlider(); - } - - protected void setupRateSlider() { - Slider s1 = controlP5.addSlider("newRate", osc.getMinRate(), osc.getMaxRate(), osc.getRate(), 0, 0, SLIDER_WIDTH, SLIDER_HEIGHT); - s1.setLabel(controlGroup.name() + " Rate"); - s1.plugTo(this); - s1.setGroup(controlGroup.name()); - } - - protected void setupAmountSlider() { - Slider s2 = controlP5.addSlider("newAmount", Oscillator.MIN_AMOUNT, Oscillator.MAX_AMOUNT, osc.getAmount(), 0, SLIDER_HEIGHT + VERTICAL_DISTANCE, SLIDER_WIDTH, SLIDER_HEIGHT); - s2.setLabel(controlGroup.name() + " Amount"); - s2.plugTo(this); - s2.setGroup(controlGroup.name()); - } - - public void newRate(float rate_) { - osc.setRate(rate_); - } - - public void newAmount(float amount_) { - osc.setAmount(amount_); - } -}