# CallbackListener (Javadocs: controlP5)
Date: 2014-04-27

controlP5

## Interface CallbackListener

    public interface CallbackListener

Use a CallbackListener to listen for controller related actions such as pressed, released, etc. Callbacks cn be added via the ControlP5.addCallback() methods.

See Also:
  `ControlP5.addCallback(CallbackListener)`

+Example
  `

      /**
       * ControlP5 Callback
       *
       * The following example demonstrates the CallbackListener and CallbackEvent.
       * Here additional information about each available slider will be show when
       * hovering the controller with the mouse. The info will fade out when leaving
       * the controller.
       *
       * When hovering a controller, the mouse pointer will change as well.
       *
       * find a list of public methods available for the CallbackEvent Controller
       * at the bottom of this sketch.
       *
       * by Andreas Schlegel, 2012
       * www.sojamo.de/libraries/controlp5
       *
       */

      import controlP5.*;

      ControlP5 cp5;
      Slider s1, s2;
      Info info;
      CallbackListener cb;

      void setup() {
        size(800, 400);

        cp5 = new ControlP5(this);

        // create a new instance of class Info
        // info will be used to display a controller's information and
        // will fade in when a CallbackEvent is invoked.
        info = new Info();

        // add 2 sliders
        s1 = cp5.addSlider("hello")
                .setRange(0, 100)
                .setValue(50)
                .setPosition(40, 40)
                .setSize(100, 20);

        s2 = cp5.addSlider("world")
                .setRange(0, 100)
                .setValue(10)
                .setPosition(40, 70)
                .setSize(100, 20);

        // the following CallbackListener will listen to any controlP5
        // action such as enter, leave, pressed, released, releasedoutside, broadcast
        // see static variables starting with ACTION_ inside class controlP5.ControlP5Constants

        cb = new CallbackListener() {
          public void controlEvent(CallbackEvent theEvent) {
            switch(theEvent.getAction()) {
              case(ControlP5.ACTION_ENTER):
              info.n = 1;
              info.label.setText(theEvent.getController().getInfo());
              cursor(HAND);
              break;
              case(ControlP5.ACTION_LEAVE):
              case(ControlP5.ACTION_RELEASEDOUTSIDE):
              info.n = 0;
              cursor(ARROW);
              break;
            }
          }
        };

        // add the above callback to controlP5
        cp5.addCallback(cb);

        // add another callback to slider s1, callback event will only be invoked for this
        // particular controller.
        s1.addCallback(new CallbackListener() {
          public void controlEvent(CallbackEvent theEvent) {
            if (theEvent.getAction()==ControlP5.ACTION_BROADCAST) {
              s2.setValue(s2.getMax() - s1.getValue());
            }
          }
        }
        );
      }

      void draw() {
        background(0);
        info.update();
      }

      void controlEvent(ControlEvent theEvent) {
        println("Got a ControlEvent for "+theEvent.name()+" = "+theEvent.value());
        info.label.setText(theEvent.getController().getInfo());
      }

      void keyPressed() {
        // uncomment the line below to remove callback cb from controlP5
        // when a key is pressed.
        //controlP5.removeCallback(cb);
      }

      // controlEvent(CallbackEvent) is called whenever a callback
      // has been triggered. controlEvent(CallbackEvent) is detected by
      // controlP5 automatically.
      void controlEvent(CallbackEvent theEvent) {
        if (theEvent.getController().equals(s2)) {
          switch(theEvent.getAction()) {
            case(ControlP5.ACTION_ENTER):
            println("Action:ENTER");
            break;
            case(ControlP5.ACTION_LEAVE):
            println("Action:LEAVE");
            break;
            case(ControlP5.ACTION_PRESSED):
            println("Action:PRESSED");
            break;
            case(ControlP5.ACTION_RELEASED):
            println("Action:RELEASED");
            break;
            case(ControlP5.ACTION_RELEASEDOUTSIDE):
            println("Action:RELEASED OUTSIDE");
            break;
            case(ControlP5.ACTION_BROADCAST):
            println("Action:BROADCAST");
            break;
          }
        }
      }

      class Info {
        float a;
        float n = 0;
        String txt = "";
        Textarea label;

        Info() {
          label = cp5.addTextarea("Hello\nWorld")
                     .setSize(200,200)
                     .setPosition(300,40)
                     .setColor(color(255))
                     .setColorBackground(color(100,0))
                     .setLineHeight(12);

        }

        void update() {
          a += (n-a)*0.1;
          label.setColorBackground(color(100,255*a));
        }
      }

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

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

       Format:
       ClassName : returnType methodName(parameter type)

       controlP5.CallbackEvent : Controller getController()
       controlP5.CallbackEvent : int getAction()
       java.lang.Object : String toString()
       java.lang.Object : boolean equals(Object)

       */

  `

### Method Summary

Methods
`void` `controlEvent(CallbackEvent theEvent)`

### Method Detail

#### controlEvent

    void controlEvent(CallbackEvent theEvent)