/**
 * ControlP5 snapshot
 *
 * this example shows how to use the snapshot methods for ControllerProperties.
 * Snapshots allow you to save controller states in memory, recall, save and remove them.
 *
 * How to load, save and remove snapshots? see keyPressed()
 *
 * find a list of public methods available for the ControllerProperties Controller
 * at the bottom of this sketch.
 *
 * by Andreas Schlegel, 2012
 * www.sojamo.de/libraries/controlp5
 *
 */





import controlP5.*;
ControlP5 cp5;

public float n = 50;
public float s = 10;
public float k = 100;

void setup() {
  size(400, 400);
  smooth();
  cp5 = new ControlP5(this);

  cp5.addNumberbox("n")
  .setPosition(10, 10)
  .setSize(42, 16)
  .setMultiplier(0.1)
  .setRange(10,60)
  .setValue(20)
  ;

  cp5.addSlider("s")
  .setPosition(10, 100)
  .setSize(100, 20)
  .setScrollSensitivity(0.01)
  .setRange(60,140)
  .setValue(100)
  ;
  

  cp5.addKnob("k")
  .setPosition(200, 100)
  .setRadius(50)
  .setScrollSensitivity(0.001)
  .setMin(60)
  .setMax(140)
  .setDisplayStyle(Controller.ARC)
  ;

  cp5.addRange("r")
  .setPosition(10,200)
  .setSize(100,20)
  .setRange(0, 200)
  .setRangeValues(50,100)
  ;
} 


void draw() {
  background(0);
}


void keyPressed() {
  switch(key) {
    case('1'):
    cp5.getProperties().setSnapshot("hello1");
    break;
    case('2'):
    cp5.getProperties().setSnapshot("hello2");
    break;
    case('3'):
    cp5.getProperties().setSnapshot("hello3");
    break;

    case('a'):
    cp5.getProperties().getSnapshot("hello1");
    break;
    case('s'):
    cp5.getProperties().getSnapshot("hello2");
    break;
    case('d'):
    cp5.getProperties().getSnapshot("hello3");
    break;
    
    case('z'):
    cp5.getProperties().removeSnapshot("hello1");
    break;
    case('x'):
    cp5.getProperties().removeSnapshot("hello2");
    break;
    case('c'):
    cp5.getProperties().removeSnapshot("hello3");
    break;
    
    case('i'):
    cp5.getProperties().saveSnapshot("hello1");
    break;
    case('o'):
    cp5.getProperties().load("hello1.ser");
    break;
  }

  println(cp5.getProperties().getSnapshotIndices());
}



/*
a list of all methods available for the ControllerProperties Controller
use ControlP5.printPublicMethodsFor(ControllerProperties.class);
to print the following list into the console.

You can find further details about class ControllerProperties in the javadoc.

Format:
ClassName : returnType methodName(parameter type)


controlP5.ControllerProperties : ArrayList getSnapshotIndices() 
controlP5.ControllerProperties : ControllerProperties addSet(String) 
controlP5.ControllerProperties : ControllerProperties delete(ControllerProperty) 
controlP5.ControllerProperties : ControllerProperties getSnapshot(String) 
controlP5.ControllerProperties : ControllerProperties move(ControllerInterface, String, String) 
controlP5.ControllerProperties : ControllerProperties move(ControllerProperty, String, String) 
controlP5.ControllerProperties : ControllerProperties only(ControllerProperty, String) 
controlP5.ControllerProperties : ControllerProperties print() 
controlP5.ControllerProperties : ControllerProperties register(ControllerInterface, String) 
controlP5.ControllerProperties : ControllerProperties remove(ControllerInterface) 
controlP5.ControllerProperties : ControllerProperties remove(ControllerInterface, String) 
controlP5.ControllerProperties : ControllerProperties remove(ControllerInterface, String, String) 
controlP5.ControllerProperties : ControllerProperties removeSnapshot(String) 
controlP5.ControllerProperties : ControllerProperties saveSnapshot(String) 
controlP5.ControllerProperties : ControllerProperties saveSnapshotAs(String, String) 
controlP5.ControllerProperties : ControllerProperties setSnapshot(String) 
controlP5.ControllerProperties : ControllerProperties updateSnapshot(String) 
controlP5.ControllerProperties : ControllerProperty getProperty(ControllerInterface, String) 
controlP5.ControllerProperties : ControllerProperty getProperty(ControllerInterface, String, String) 
controlP5.ControllerProperties : ControllerProperty register(ControllerInterface, String, String) 
controlP5.ControllerProperties : HashSet getPropertySet(ControllerInterface) 
controlP5.ControllerProperties : List get(ControllerInterface) 
controlP5.ControllerProperties : Map get() 
controlP5.ControllerProperties : String toString() 
controlP5.ControllerProperties : boolean load() 
controlP5.ControllerProperties : boolean load(String) 
controlP5.ControllerProperties : boolean save() 
controlP5.ControllerProperties : boolean saveAs(String) 
controlP5.ControllerProperties : void setFormat(Format) 
java.lang.Object : String toString() 
java.lang.Object : boolean equals(Object) 


*/