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

controlP5

## Class DropdownList

- java.lang.Object
- - controlP5.ControllerGroup<T>
  - - controlP5.ControlGroup<DropdownList>
    - - controlP5.DropdownList

All Implemented Interfaces:
  ControllerInterface<DropdownList>, ControlListener, ControlP5Constants

    public class DropdownList
    extends ControlGroup<DropdownList>

### Field Summary

### Fields inherited from interface controlP5.ControlP5Constants

`acceptClassList, ACTION_BROADCAST, ACTION_CLICK, ACTION_DRAG, ACTION_ENTER, ACTION_EXIT, ACTION_LEAVE, ACTION_MOVE, ACTION_PRESS, ACTION_PRESSED, ACTION_RELEASE, ACTION_RELEASED, ACTION_RELEASEDOUTSIDE, ACTION_WHEEL, ACTIVE, ALL, ALT, AQUA, ARC, ARRAY, BACKSPACE, BASELINE, BITFONT, BLACK, BLUE, BOOLEAN, BOTTOM, BOTTOM_OUTSIDE, CAPTIONLABEL, CENTER, CHECKBOX, COMMANDKEY, CONTROL, controlEventClass, CUSTOM, DECREASE, DEFAULT, DELETE, DONE, DOWN, DROPDOWN, ELLIPSE, ENTER, ESCAPE, EVENT, eventMethod, FADEIN, FADEOUT, FIELD, FLOAT, FUCHSIA, GRAY, GREEN, grixel, HALF_PI, HIDE, HIGHLIGHT, HORIZONTAL, IDLE, IMAGE, INACTIVE, INCREASE, INTEGER, INVALID, J2D, KEYCONTROL, LEFT, LEFT_OUTSIDE, LIME, LINE, LIST, LOAD, MAROON, MENU, METHOD, MOVE, MULTI, MULTIPLES, NAVY, OLIVE, ORANGE, OVER, P2D, P3D, PI, PRESSED, PRINT, PURPLE, RED, RELEASE, RESET, RIGHT, RIGHT_OUTSIDE, SAVE, SHIFT, SILVER, SINGLE, SINGLE_COLUMN, SINGLE_ROW, SPRITE, standard56, standard58, STRING, SWITCH, SWITCH_BACK, SWITCH_FORE, synt24, TAB, TEAL, THEME_A, THEME_CP52014, THEME_CP5BLUE, THEME_RED, THEME_RETRO, THEME_WHITE, TOP, TOP_OUTSIDE, TRANSITION_WAIT_FADEIN, TREE, TWO_PI, UP, VALUELABEL, VERBOSE, VERTICAL, WAIT, WHITE, YELLOW`

### Constructor Summary

Constructors
Constructor and Description
`DropdownList(ControlP5 theControlP5, java.lang.String theName)` Convenience constructor to extend DropdownList.

### Method Summary

Methods
`DropdownList` `actAsPulldownMenu(boolean theValue)` Enables a ListBox to act as a pulldown menu.
`ListBoxItem` `addItem(java.lang.String theName, int theValue)` Adds an item to the ListBox.
`DropdownList` `addItems(java.util.List<?> theItems)`
`DropdownList` `addItems(java.util.List<?> theItems, int theOffset)`
`DropdownList` `addItems(java.lang.String[] theItems)` adds a list of items from a string array.
`void` `beginItems()`
`DropdownList` `clear()` Removes all items from a list box
`void` `controlEvent(ControlEvent theEvent)` controlEvent is called by controlP5's ControlBroadcaster to inform available listeners about value changes.
`void` `endItems()`
`ListBoxItem` `getItem(Controller<?> theButton)` returns a ListBoxItem based on its Button reference.
`ListBoxItem` `getItem(int theIndex)` returns a listBoxItem by index in the list of items.
`ListBoxItem` `getItem(java.lang.String theItemName)` TODO faulty returns a listBoxItem by name.
`java.lang.String[][]` `getListBoxItems()`
`float` `getScrollPosition()`
`java.lang.String` `getStringValue()`
`DropdownList` `hideScrollbar()`
`boolean` `isScrollable()`
`boolean` `isScrollbarEnabled()`
`void` `keyEvent(processing.event.KeyEvent theEvent)` Adding key support.
`DropdownList` `removeItem(java.lang.String theItemName)` Removes an item from the ListBox using the unique name of the item given when added to the list.
`DropdownList` `scroll(float theValue)` scroll the scrollList remotely.
`void` `scrolled(int theStep)`
`DropdownList` `setColor(CColor theColor)`
`DropdownList` `setColorActive(int theColor)`
`DropdownList` `setColorBackground(int theColor)`
`DropdownList` `setColorForeground(int theColor)`
`DropdownList` `setColorLabel(int theColor)`
`DropdownList` `setColorValue(int theColor)`
`DropdownList` `setHeight(int theHeight)`
`DropdownList` `setIndex(int theIndex)`
`DropdownList` `setItemHeight(int theHeight)`
`DropdownList` `setListBoxItems(java.lang.String[][] l)`
`DropdownList` `setScrollbarVisible(boolean theValue)`
`DropdownList` `setScrollbarWidth(int theWidth)`
`DropdownList` `setSize(int theWidth, int theHeight)`
`DropdownList` `setValue(float theValue)`
`DropdownList` `setWidth(int theWidth)`
`DropdownList` `showScrollbar()`
`DropdownList` `toUpperCase(boolean theFlag)`
`DropdownList` `updateInternalEvents(processing.core.PApplet theApplet)` a method for putting input events like e.g.
`DropdownList` `updateListBoxItems()`

### Methods inherited from class controlP5.ControlGroup

`activateEvent, addListener, getBackgroundHeight, getBarHeight, getInfo, listenerSize, mousePressed, removeListener, setBackgroundColor, setBackgroundHeight, setBarHeight, stringValue, toString`

### Methods inherited from class controlP5.ControllerGroup

`absolutePosition, add, addCanvas, addCloseButton, addDrawable, arrayValue, bringToFront, bringToFront, close, color, continuousUpdateEvents, controller, disableCollapse, draw, enableCollapse, getAbsolutePosition, getAddress, getArrayValue, getArrayValue, getCaptionLabel, getColor, getController, getHeight, getId, getName, getParent, getPickingColor, getPosition, getProperty, getProperty, getTab, getValue, getValueLabel, getWidth, getWindow, hide, hideArrow, hideBar, id, init, isBarVisible, isCollapse, isMouseOver, isMoveable, isOpen, isUpdate, isVisible, moveTo, moveTo, moveTo, moveTo, moveTo, moveTo, moveTo, moveTo, moveTo, name, open, parent, position, registerProperty, registerProperty, remove, remove, remove, removeCanvas, removeCloseButton, removeProperty, removeProperty, setAbsolutePosition, setAddress, setArrayValue, setArrayValue, setCaptionLabel, setGroup, setGroup, setId, setLabel, setMouseOver, setMousePressed, setMoveable, setOpen, setPosition, setPosition, setStringValue, setTab, setTab, setTab, setTitle, setUpdate, setVisible, show, showArrow, showBar, update, updateAbsolutePosition, updateEvents, value`

### Methods inherited from class java.lang.Object

`equals, getClass, hashCode, notify, notifyAll, wait, wait, wait`

### Constructor Detail

#### DropdownList

    public DropdownList(ControlP5 theControlP5,
                java.lang.String theName)

Convenience constructor to extend DropdownList.

Parameters:
  `theControlP5` -
  `theName` -

+Example
  `

      /**
       * ControlP5 extending Controllers
       *
       * the following example shows how to extend the Controller class to
       * create customizable Controllers. You can either extend the Controller class itself,
       * or any class that extends Controller itself like the Slider, Button, DropdownList, etc.
       *
       * How to:
       *
       * 1) do a super call to the convenience constructor requiring
       * 2 parameter (ControlP5 instance, name)
       *
       * 2) the Controller class has a set of empty methods that allow you to capture
       * inputs from the mouse including
       * onEnter(), onLeave(), onPress(), onRelease(), onClick(), onScroll(int), onDrag()
       * These you can override and include functionality as needed.
       *
       * 3) use method getPointer() to return the local (relative)
       * xy-coordinates of the controller
       *
       * 4) after instantiation custom controllers are treated the same
       * as default controlP5 controllers.
       *
       * by Andreas Schlegel, 2012
       * www.sojamo.de/libraries/controlp5
       *
       */

      import controlP5.*;

      ControlP5 cp5;
      PApplet p;

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

        // create 2 groups to show nesting of custom controllers and
        //
        Group g1 = cp5.addGroup("a").setPosition(0,100).setWidth(180);
        Group g2 = cp5.addGroup("b").setPosition(0,10).setWidth(180);
        g2.moveTo(g1);

        // create 2 custom Controllers from class MyButton
        // MyButton extends Controller and inherits all methods accordingly.
        new MyButton(cp5, "b1").setPosition(0, 0).setSize(180, 200).moveTo(g2);
        new MyButton(cp5, "b2").setPosition(205, 15).setSize(180, 200);

      }

      void draw() {
        background(0);
      }

      // b1 will be called from Controller b1
      public void b1(float theValue) {
        println("yay button "+theValue);
      }

      public void controlEvent(ControlEvent theEvent) {
        println("controlEvent : "+theEvent);
      }

      // Create a custom Controller, please not that
      // MyButton extends Controller<MyButton>, <MyButton>
      // is an indicator for the super class about the type of
      // custom controller to be created.

      class MyButton extends Controller<MyButton> {

        int current = 0xffff0000;

        float a = 128;

        float na;

        int y;

        // use the convenience constructor of super class Controller
        // MyButton will automatically registered and move to the
        // default controlP5 tab.

        MyButton(ControlP5 cp5, String theName) {
          super(cp5, theName);

          // replace the default view with a custom view.
          setView(new ControllerView() {
            public void display(PApplet p, Object b) {
              // draw button background
              na += (a-na) * 0.1;
              p.fill(current,na);
              p.rect(0, 0, getWidth(), getHeight());

              // draw horizontal line which can be moved on the x-axis
              // using the scroll wheel.
              p.fill(0,255,0);
              p.rect(0,y,width,10);

              // draw the custom label
              p.fill(128);
              translate(0,getHeight()+14);
              p.text(getName(),0,0);
              p.text(getName(),0,0);

            }
          }
          );
        }

        // override various input methods for mouse input control
        void onEnter() {
          cursor(HAND);
          println("enter");
          a = 255;
        }

        void onScroll(int n) {
          println("scrolling");
          y -= n;
          y = constrain(y,0,getHeight()-10);
        }

        void onPress() {
          println("press");
          current = 0xffffff00;
        }

        void onClick() {
          Pointer p1 = getPointer();
          println("clicked at "+p1.x()+", "+p1.y());
          current = 0xffffff00;
          setValue(y);
        }

        void onRelease() {
          println("release");
          current = 0xffffffff;
        }

        void onMove() {
          println("moving "+this+" "+_myControlWindow.getMouseOverList());
        }

        void onDrag() {
          current = 0xff0000ff;
          Pointer p1 = getPointer();
          float dif = dist(p1.px(),p1.py(),p1.x(),p1.y());
          println("dragging at "+p1.x()+", "+p1.y()+" "+dif);
        }

        void onReleaseOutside() {
          onLeave();
        }

        void onLeave() {
          println("leave");
          cursor(ARROW);
          a = 128;
        }
      }

  `

### Method Detail

#### actAsPulldownMenu

    public DropdownList actAsPulldownMenu(boolean theValue)

Enables a ListBox to act as a pulldown menu. Alternatively use class PulldownMenu instead.

#### addItem

    public ListBoxItem addItem(java.lang.String theName,
                      int theValue)

Adds an item to the ListBox.

Parameters:
  `theName` - String
  `theValue` - int
See Also:
  `controlP5.ListBox#removeItem(String,int)`

#### addItems

    public DropdownList addItems(java.util.List<?> theItems)

#### addItems

    public DropdownList addItems(java.util.List<?> theItems,
                        int theOffset)

#### addItems

    public DropdownList addItems(java.lang.String[] theItems)

adds a list of items from a string array. when iterating through the array, the index of each item will be used as value.

Parameters:
  `theItems` -

#### beginItems

    public void beginItems()

#### clear

    public DropdownList clear()

Removes all items from a list box

#### controlEvent

    public void controlEvent(ControlEvent theEvent)

Description copied from interface: `ControlListener`
controlEvent is called by controlP5's ControlBroadcaster to inform available listeners about value changes. Use the CallbackListener to get informed when actions such as pressed, release, drag, etc are performed.

Specified by:
  `controlEvent` in interface `ControlListener`
Overrides:
  `controlEvent` in class `ControlGroup<DropdownList>`
Parameters:
  `theEvent` - ControlEvent
See Also:
  `CallbackListener`, `CallbackEvent`

#### endItems

    public void endItems()

#### getItem

    public ListBoxItem getItem(Controller<?> theButton)

returns a ListBoxItem based on its Button reference.

Parameters:
  `theButton` -
Returns:

#### getItem

    public ListBoxItem getItem(int theIndex)

returns a listBoxItem by index in the list of items.

Parameters:
  `theIndex` -
Returns:

#### getItem

    public ListBoxItem getItem(java.lang.String theItemName)

TODO faulty returns a listBoxItem by name.

Parameters:
  `theItemName` -
Returns:

#### getListBoxItems

    public java.lang.String[][] getListBoxItems()

#### getScrollPosition

    public float getScrollPosition()

#### getStringValue

    public java.lang.String getStringValue()

Description copied from class: `ControllerGroup`

Specified by:
  `getStringValue` in interface `ControllerInterface<DropdownList>`
Overrides:
  `getStringValue` in class `ControllerGroup<DropdownList>`

#### hideScrollbar

    public DropdownList hideScrollbar()

#### isScrollable

    public boolean isScrollable()

#### isScrollbarEnabled

    public boolean isScrollbarEnabled()

#### keyEvent

    public void keyEvent(processing.event.KeyEvent theEvent)

Adding key support. up and down arrows can be used to scroll listbox or dropdownList,up and down, use shift+up/down for faster scrolling, use alt+up/down to jump to the top or bottom.

Specified by:
  `keyEvent` in interface `ControllerInterface<DropdownList>`
Overrides:
  `keyEvent` in class `ControllerGroup<DropdownList>`
Parameters:
  `theEvent` - KeyEvent

#### removeItem

    public DropdownList removeItem(java.lang.String theItemName)

Removes an item from the ListBox using the unique name of the item given when added to the list.

Parameters:
  `theItemName` - String
See Also:
  `ListBox.addItem(String,int)`

#### scroll

    public DropdownList scroll(float theValue)

scroll the scrollList remotely. values must range between 0 and 1.

#### scrolled

    public void scrolled(int theStep)

#### setColor

    public DropdownList setColor(CColor theColor)

Specified by:
  `setColor` in interface `ControllerInterface<DropdownList>`
Overrides:
  `setColor` in class `ControllerGroup<DropdownList>`

#### setColorActive

    public DropdownList setColorActive(int theColor)

Specified by:
  `setColorActive` in interface `ControllerInterface<DropdownList>`
Overrides:
  `setColorActive` in class `ControllerGroup<DropdownList>`

#### setColorBackground

    public DropdownList setColorBackground(int theColor)

Specified by:
  `setColorBackground` in interface `ControllerInterface<DropdownList>`
Overrides:
  `setColorBackground` in class `ControllerGroup<DropdownList>`

#### setColorForeground

    public DropdownList setColorForeground(int theColor)

Specified by:
  `setColorForeground` in interface `ControllerInterface<DropdownList>`
Overrides:
  `setColorForeground` in class `ControllerGroup<DropdownList>`

#### setColorLabel

    public DropdownList setColorLabel(int theColor)

Specified by:
  `setColorLabel` in interface `ControllerInterface<DropdownList>`
Overrides:
  `setColorLabel` in class `ControllerGroup<DropdownList>`

#### setColorValue

    public DropdownList setColorValue(int theColor)

Specified by:
  `setColorValue` in interface `ControllerInterface<DropdownList>`
Overrides:
  `setColorValue` in class `ControllerGroup<DropdownList>`

#### setHeight

    public DropdownList setHeight(int theHeight)

Overrides:
  `setHeight` in class `ControllerGroup<DropdownList>`
Returns:
  ControllerGroup

#### setIndex

    public DropdownList setIndex(int theIndex)

#### setItemHeight

    public DropdownList setItemHeight(int theHeight)

#### setListBoxItems

    public DropdownList setListBoxItems(java.lang.String[][] l)

#### setScrollbarVisible

    public DropdownList setScrollbarVisible(boolean theValue)

#### setScrollbarWidth

    public DropdownList setScrollbarWidth(int theWidth)

#### setSize

    public DropdownList setSize(int theWidth,
                       int theHeight)

Overrides:
  `setSize` in class `ControlGroup<DropdownList>`

#### setValue

    public DropdownList setValue(float theValue)

Description copied from class: `ControllerGroup`

Specified by:
  `setValue` in interface `ControllerInterface<DropdownList>`
Overrides:
  `setValue` in class `ControllerGroup<DropdownList>`

#### setWidth

    public DropdownList setWidth(int theWidth)

Overrides:
  `setWidth` in class `ControllerGroup<DropdownList>`
Returns:
  ControllerGroup

#### showScrollbar

    public DropdownList showScrollbar()

#### toUpperCase

    public DropdownList toUpperCase(boolean theFlag)

#### updateInternalEvents

    public DropdownList updateInternalEvents(processing.core.PApplet theApplet)

Description copied from interface: `ControllerInterface`
a method for putting input events like e.g. mouse or keyboard events and queries. this has been taken out of the draw method for better overwriting capability.

Specified by:
  `updateInternalEvents` in interface `ControllerInterface<DropdownList>`
Overrides:
  `updateInternalEvents` in class `ControlGroup<DropdownList>`

#### updateListBoxItems

    public DropdownList updateListBoxItems()