From bbc6ce6e6b816d9a6dd60d51404ff4d9d9af13d4 Mon Sep 17 00:00:00 2001 From: Gabriel Salvador Date: Sun, 9 Jul 2023 14:33:50 +0100 Subject: [PATCH] refactored folder structure to a more conventional maven structure --- .DS_Store | Bin 10244 -> 10244 bytes .idea/libraries/processing.xml | 9 + .idea/modules.xml | 1 + controlP5/Accordion.java | 287 +++ controlP5/Background.java | 37 + controlP5/Bang.java | 205 ++ controlP5/BitFont.java | 203 ++ controlP5/Button.java | 316 +++ controlP5/ButtonBar.java | 244 ++ controlP5/CColor.java | 203 ++ controlP5/CDrawable.java | 37 + controlP5/CP.java | 377 +++ controlP5/CallbackEvent.java | 65 + controlP5/CallbackListener.java | 41 + controlP5/Canvas.java | 124 + controlP5/Chart.java | 561 +++++ controlP5/ChartData.java | 72 + controlP5/ChartDataSet.java | 95 + controlP5/CheckBox.java | 615 +++++ controlP5/ColorPalette.java | 33 + controlP5/ColorPicker.java | 259 ++ controlP5/ColorWheel.java | 599 +++++ controlP5/ControlBehavior.java | 106 + controlP5/ControlBroadcaster.java | 401 +++ controlP5/ControlElement.java | 48 + controlP5/ControlEvent.java | 339 +++ controlP5/ControlFont.java | 292 +++ controlP5/ControlGroup.java | 199 ++ controlP5/ControlKey.java | 31 + controlP5/ControlListener.java | 52 + controlP5/ControlP5.java | 1455 +++++++++++ controlP5/ControlP5Base.java | 794 ++++++ controlP5/ControlP5Constants.java | 191 ++ controlP5/ControlP5Legacy.java | 705 ++++++ controlP5/ControlTimer.java | 150 ++ controlP5/ControlWindow.java | 978 ++++++++ controlP5/ControlWindowCanvas.java | 34 + controlP5/Controller.java | 2232 +++++++++++++++++ controlP5/ControllerAutomator.java | 352 +++ controlP5/ControllerDisplay.java | 52 + controlP5/ControllerGroup.java | 987 ++++++++ controlP5/ControllerInterface.java | 185 ++ controlP5/ControllerLayout.java | 180 ++ controlP5/ControllerLayoutElement.java | 52 + controlP5/ControllerList.java | 97 + controlP5/ControllerPlug.java | 273 ++ controlP5/ControllerProperties.java | 921 +++++++ controlP5/ControllerProperty.java | 173 ++ controlP5/ControllerStyle.java | 153 ++ controlP5/ControllerView.java | 50 + controlP5/DropdownList.java | 466 ++++ controlP5/FieldChangedListener.java | 134 + controlP5/FrameRate.java | 58 + controlP5/Group.java | 43 + controlP5/Icon.java | 405 +++ controlP5/Knob.java | 568 +++++ controlP5/Label.java | 542 ++++ controlP5/ListBox.java | 469 ++++ controlP5/Matrix.java | 422 ++++ controlP5/MultiList.java | 270 ++ controlP5/MultiListButton.java | 223 ++ controlP5/MultiListInterface.java | 48 + controlP5/MultilineTextfield.java | 26 + controlP5/Numberbox.java | 302 +++ controlP5/Pad.java | 31 + controlP5/Pointer.java | 47 + controlP5/Println.java | 108 + controlP5/Radio.java | 39 + controlP5/RadioButton.java | 643 +++++ controlP5/Range.java | 519 ++++ controlP5/ScrollableList.java | 483 ++++ controlP5/Slider.java | 648 +++++ controlP5/Slider2D.java | 287 +++ controlP5/Spacer.java | 67 + controlP5/TODO | 92 + controlP5/Tab.java | 228 ++ controlP5/Textarea.java | 447 ++++ controlP5/Textfield.java | 484 ++++ controlP5/TextfieldCommand.java | 5 + controlP5/Textlabel.java | 243 ++ controlP5/TickMark.java | 93 + controlP5/Toggle.java | 266 ++ controlP5/Tooltip.java | 390 +++ controlP5/changeLog.txt | 867 +++++++ controlP5/events/ReleasedOutsideListener.java | 6 + controlP5/layout/ControllerFactory.java | 132 + controlP5/layout/LayoutBuilder.java | 165 ++ controlP5/layout/XML.g4 | 35 + controlP5/layout/lang/XML.interp | 44 + controlP5/layout/lang/XML.tokens | 20 + controlP5/layout/lang/XMLBaseListener.java | 124 + controlP5/layout/lang/XMLBaseVisitor.java | 64 + controlP5/layout/lang/XMLLexer.interp | 58 + controlP5/layout/lang/XMLLexer.java | 185 ++ controlP5/layout/lang/XMLLexer.tokens | 20 + controlP5/layout/lang/XMLListener.java | 80 + controlP5/layout/lang/XMLParser.java | 578 +++++ controlP5/layout/lang/XMLVisitor.java | 55 + controlP5/package.html | 16 + controlp5.iml | 8 + .../ControlP5ButtonBar/ControlP5ButtonBar.pde | 288 +-- .../ControlP5ColorWheel.pde | 304 +-- .../ControlP5accordion/ControlP5accordion.pde | 216 +- .../ControlP5background.pde | 192 +- .../ControlP5bang/ControlP5bang.pde | 270 +- .../ControlP5button/ControlP5button.pde | 282 +-- .../ControlP5canvas/ControlP5canvas.pde | 6 +- .../ControlP5chart/ControlP5chart.pde | 344 +-- .../ControlP5checkBox/ControlP5checkBox.pde | 250 +- .../ControlP5colorPicker.pde | 204 +- .../ControlP5controlTimer.pde | 20 +- .../ControlP5controllerProperties.pde | 60 +- .../ControlP5dropdownList.pde | 320 +-- .../ControlP5group/ControlP5group.pde | 192 +- .../ControlP5icon/ControlP5icon.pde | 316 +-- .../ControlP5knob/ControlP5knob.pde | 328 +-- .../ControlP5listBox/ControlP5listBox.pde | 320 +-- .../ControlP5matrix/ControlP5matrix.pde | 302 +-- .../ControlP5numberbox/ControlP5numberbox.pde | 276 +- .../ControlP5radioButton.pde | 272 +- .../ControlP5range/ControlP5range.pde | 302 +-- .../ControlP5scrollableList.pde | 320 +-- .../ControlP5slider/ControlP5slider.pde | 314 +-- .../ControlP5slider2D/ControlP5slider2D.pde | 304 +-- .../controllers/ControlP5tab/ControlP5tab.pde | 192 +- .../ControlP5textarea/ControlP5textarea.pde | 222 +- .../ControlP5textfield/ControlP5textfield.pde | 308 +-- .../ControlP5textlabel/ControlP5Textlabel.pde | 298 +-- .../ControlP5toggle/ControlP5toggle.pde | 278 +- .../ControlP5tooltip/ControlP5tooltip.pde | 40 +- examples/examples.iml | 1 + .../ControlP5MenuList/ControlP5MenuList.pde | 2 +- .../ControlP5chartsCombined.pde | 344 +-- .../ControlP5frameRate/ControlP5frameRate.pde | 302 +-- .../ControlP5propertiesSets.pde | 40 +- .../extra/ControlP5style/ControlP5style.pde | 32 +- .../ControlP5behavior/ControlP5behavior.pde | 8 +- .../ControlP5callback/ControlP5callback.pde | 6 +- .../ControlP5controlEvent.pde | 36 +- .../ControlP5controlFont.pde | 34 +- .../ControlP5customView.pde | 2 +- .../ControlP5mouseover/ControlP5mouseover.pde | 6 +- .../ControlP5snapshot/ControlP5snapshot.pde | 58 +- gen/controlP5/layout/XML.interp | 37 + gen/controlP5/layout/XML.tokens | 15 + gen/controlP5/layout/XMLBaseListener.java | 112 + gen/controlP5/layout/XMLBaseVisitor.java | 57 + gen/controlP5/layout/XMLLexer.interp | 49 + gen/controlP5/layout/XMLLexer.java | 166 ++ gen/controlP5/layout/XMLLexer.tokens | 15 + gen/controlP5/layout/XMLListener.java | 70 + gen/controlP5/layout/XMLParser.java | 520 ++++ gen/controlP5/layout/XMLVisitor.java | 49 + pom.xml | 4 +- resources/.DS_Store | Bin 0 -> 6148 bytes .../addons/AddMethodList/AddMethodList.java | 2 +- resources/addons/addons.iml | 1 + resources/resources.iml | 5 +- src/main/java/.DS_Store | Bin 6148 -> 6148 bytes src/main/java/controlP5/Accordion.java | 8 +- src/main/java/controlP5/Background.java | 2 +- src/main/java/controlP5/Bang.java | 2 +- src/main/java/controlP5/BitFont.java | 2 +- src/main/java/controlP5/Button.java | 8 +- src/main/java/controlP5/ButtonBar.java | 6 +- src/main/java/controlP5/CColor.java | 4 +- src/main/java/controlP5/CDrawable.java | 2 +- src/main/java/controlP5/CP.java | 2 +- src/main/java/controlP5/CallbackEvent.java | 2 +- src/main/java/controlP5/CallbackListener.java | 4 +- src/main/java/controlP5/Canvas.java | 2 +- src/main/java/controlP5/Chart.java | 2 +- src/main/java/controlP5/ChartData.java | 2 +- src/main/java/controlP5/ChartDataSet.java | 2 +- src/main/java/controlP5/CheckBox.java | 8 +- src/main/java/controlP5/ColorPalette.java | 2 +- src/main/java/controlP5/ColorPicker.java | 4 +- src/main/java/controlP5/ColorWheel.java | 2 +- src/main/java/controlP5/ControlBehavior.java | 2 +- .../java/controlP5/ControlBroadcaster.java | 4 +- src/main/java/controlP5/ControlElement.java | 2 +- src/main/java/controlP5/ControlEvent.java | 8 +- src/main/java/controlP5/ControlFont.java | 2 +- src/main/java/controlP5/ControlGroup.java | 6 +- src/main/java/controlP5/ControlKey.java | 2 +- src/main/java/controlP5/ControlListener.java | 10 +- src/main/java/controlP5/ControlP5.java | 74 +- src/main/java/controlP5/ControlP5Base.java | 4 +- .../java/controlP5/ControlP5Constants.java | 2 +- src/main/java/controlP5/ControlP5Legacy.java | 4 +- src/main/java/controlP5/ControlTimer.java | 2 +- src/main/java/controlP5/ControlWindow.java | 17 +- .../java/controlP5/ControlWindowCanvas.java | 2 +- src/main/java/controlP5/Controller.java | 52 +- .../java/controlP5/ControllerAutomator.java | 2 +- .../java/controlP5/ControllerDisplay.java | 2 +- src/main/java/controlP5/ControllerGroup.java | 2 +- .../java/controlP5/ControllerInterface.java | 2 +- src/main/java/controlP5/ControllerLayout.java | 2 +- .../controlP5/ControllerLayoutElement.java | 2 +- src/main/java/controlP5/ControllerList.java | 2 +- src/main/java/controlP5/ControllerPlug.java | 2 +- .../java/controlP5/ControllerProperties.java | 7 +- .../java/controlP5/ControllerProperty.java | 2 +- src/main/java/controlP5/ControllerStyle.java | 4 +- src/main/java/controlP5/ControllerView.java | 2 +- src/main/java/controlP5/DropdownList.java | 16 +- .../java/controlP5/FieldChangedListener.java | 4 +- src/main/java/controlP5/FrameRate.java | 2 +- src/main/java/controlP5/Group.java | 2 +- src/main/java/controlP5/Icon.java | 6 +- src/main/java/controlP5/Knob.java | 14 +- src/main/java/controlP5/Label.java | 4 +- src/main/java/controlP5/ListBox.java | 18 +- src/main/java/controlP5/Matrix.java | 4 +- src/main/java/controlP5/MultiList.java | 6 +- src/main/java/controlP5/MultiListButton.java | 7 +- .../java/controlP5/MultiListInterface.java | 2 +- .../java/controlP5/MultilineTextfield.java | 2 +- src/main/java/controlP5/Numberbox.java | 12 +- src/main/java/controlP5/Pad.java | 2 +- src/main/java/controlP5/Pointer.java | 2 +- src/main/java/controlP5/Println.java | 2 +- src/main/java/controlP5/Radio.java | 2 +- src/main/java/controlP5/RadioButton.java | 6 +- src/main/java/controlP5/Range.java | 6 +- src/main/java/controlP5/ScrollableList.java | 14 +- src/main/java/controlP5/Slider.java | 4 +- src/main/java/controlP5/Slider2D.java | 8 +- src/main/java/controlP5/Spacer.java | 2 +- src/main/java/controlP5/Tab.java | 6 +- src/main/java/controlP5/Textarea.java | 2 +- src/main/java/controlP5/Textfield.java | 8 +- src/main/java/controlP5/TextfieldCommand.java | 2 +- src/main/java/controlP5/Textlabel.java | 2 +- src/main/java/controlP5/TickMark.java | 2 +- src/main/java/controlP5/Toggle.java | 2 +- src/main/java/controlP5/Tooltip.java | 12 +- src/main/java/controlP5/changeLog.txt | 94 +- .../events/ReleasedOutsideListener.java | 2 +- .../controlP5/layout/ControllerFactory.java | 5 +- .../java/controlP5/layout/LayoutBuilder.java | 10 +- .../layout/lang/XMLBaseListener.java | 2 +- .../controlP5/layout/lang/XMLBaseVisitor.java | 2 +- .../java/controlP5/layout/lang/XMLLexer.java | 2 +- .../controlP5/layout/lang/XMLListener.java | 2 +- .../java/controlP5/layout/lang/XMLParser.java | 5 +- .../controlP5/layout/lang/XMLVisitor.java | 2 +- src/main/java/sketch/Sketch.java | 9 +- src/test/{java => tests}/LayoutTests.java | 0 .../main/java/controlp5/Accordion.class | Bin 0 -> 7311 bytes .../main/java/controlp5/Background.class | Bin 0 -> 1115 bytes .../classes/main/java/controlp5/Bang$1.class | Bin 0 -> 200 bytes .../java/controlp5/Bang$BangImageView.class | Bin 0 -> 1751 bytes .../main/java/controlp5/Bang$BangView.class | Bin 0 -> 1875 bytes target/classes/main/java/controlp5/Bang.class | Bin 0 -> 4664 bytes .../classes/main/java/controlp5/BitFont.class | Bin 0 -> 7717 bytes .../main/java/controlp5/Button$1.class | Bin 0 -> 206 bytes .../controlp5/Button$ButtonImageView.class | Bin 0 -> 1865 bytes .../java/controlp5/Button$ButtonView.class | Bin 0 -> 2041 bytes .../classes/main/java/controlp5/Button.class | Bin 0 -> 5805 bytes .../main/java/controlp5/ButtonBar$1.class | Bin 0 -> 772 bytes .../controlp5/ButtonBar$ButtonBarView.class | Bin 0 -> 3165 bytes .../main/java/controlp5/ButtonBar.class | Bin 0 -> 8292 bytes .../classes/main/java/controlp5/CColor.class | Bin 0 -> 5296 bytes .../main/java/controlp5/CDrawable.class | Bin 0 -> 167 bytes target/classes/main/java/controlp5/CP.class | Bin 0 -> 9293 bytes .../main/java/controlp5/CallbackEvent.class | Bin 0 -> 908 bytes .../java/controlp5/CallbackListener.class | Bin 0 -> 197 bytes .../classes/main/java/controlp5/Canvas.class | Bin 0 -> 1700 bytes .../java/controlp5/Chart$ChartViewArea.class | Bin 0 -> 2648 bytes .../java/controlp5/Chart$ChartViewBar.class | Bin 0 -> 2605 bytes .../Chart$ChartViewBarCentered.class | Bin 0 -> 2796 bytes .../java/controlp5/Chart$ChartViewLine.class | Bin 0 -> 2926 bytes .../java/controlp5/Chart$ChartViewPie.class | Bin 0 -> 2648 bytes .../classes/main/java/controlp5/Chart.class | Bin 0 -> 11920 bytes .../main/java/controlp5/ChartData.class | Bin 0 -> 1148 bytes .../main/java/controlp5/ChartDataSet.class | Bin 0 -> 2179 bytes .../main/java/controlp5/CheckBox.class | Bin 0 -> 14415 bytes .../main/java/controlp5/ColorPalette.class | Bin 0 -> 951 bytes .../main/java/controlp5/ColorPicker$1.class | Bin 0 -> 221 bytes .../controlp5/ColorPicker$ColorField.class | Bin 0 -> 1138 bytes .../main/java/controlp5/ColorPicker.class | Bin 0 -> 7917 bytes .../main/java/controlp5/ColorWheel$1.class | Bin 0 -> 218 bytes .../controlp5/ColorWheel$ColorWheelView.class | Bin 0 -> 3853 bytes .../main/java/controlp5/ColorWheel.class | Bin 0 -> 14107 bytes .../main/java/controlp5/ControlBehavior.class | Bin 0 -> 1603 bytes .../ControlBroadcaster$EmptyController.class | Bin 0 -> 1426 bytes .../java/controlp5/ControlBroadcaster.class | Bin 0 -> 14169 bytes .../main/java/controlp5/ControlElement.class | Bin 0 -> 487 bytes .../main/java/controlp5/ControlEvent.class | Bin 0 -> 5196 bytes .../main/java/controlp5/ControlFont.class | Bin 0 -> 7392 bytes .../main/java/controlp5/ControlGroup.class | Bin 0 -> 7525 bytes .../main/java/controlp5/ControlKey.class | Bin 0 -> 146 bytes .../main/java/controlp5/ControlListener.class | Bin 0 -> 194 bytes .../main/java/controlp5/ControlP5$1.class | Bin 0 -> 666 bytes .../main/java/controlp5/ControlP5$2.class | Bin 0 -> 666 bytes .../main/java/controlp5/ControlP5$3.class | Bin 0 -> 852 bytes .../main/java/controlp5/ControlP5$4.class | Bin 0 -> 834 bytes .../java/controlp5/ControlP5$Invisible.class | Bin 0 -> 387 bytes .../java/controlp5/ControlP5$Layout.class | Bin 0 -> 381 bytes .../main/java/controlp5/ControlP5.class | Bin 0 -> 39716 bytes .../controlp5/ControlP5Base$KeyCode.class | Bin 0 -> 2033 bytes .../main/java/controlp5/ControlP5Base.class | Bin 0 -> 29010 bytes .../java/controlp5/ControlP5Constants.class | Bin 0 -> 5100 bytes .../main/java/controlp5/ControlP5Legacy.class | Bin 0 -> 36368 bytes .../main/java/controlp5/ControlTimer.class | Bin 0 -> 2167 bytes .../controlp5/ControlWindow$Pointer.class | Bin 0 -> 2253 bytes .../main/java/controlp5/ControlWindow.class | Bin 0 -> 21093 bytes .../java/controlp5/ControlWindowCanvas.class | Bin 0 -> 416 bytes .../main/java/controlp5/Controller$1.class | Bin 0 -> 2494 bytes .../java/controlp5/Controller$DebugView.class | Bin 0 -> 1460 bytes .../main/java/controlp5/Controller.class | Bin 0 -> 48457 bytes .../controlp5/ControllerAutomator$1.class | Bin 0 -> 1260 bytes .../java/controlp5/ControllerAutomator.class | Bin 0 -> 12634 bytes .../java/controlp5/ControllerDisplay.class | Bin 0 -> 342 bytes .../main/java/controlp5/ControllerGroup.class | Bin 0 -> 30832 bytes .../java/controlp5/ControllerInterface.class | Bin 0 -> 3888 bytes .../java/controlp5/ControllerLayout.class | Bin 0 -> 6236 bytes .../controlp5/ControllerLayoutElement.class | Bin 0 -> 1199 bytes .../main/java/controlp5/ControllerList.class | Bin 0 -> 2586 bytes .../main/java/controlp5/ControllerPlug.class | Bin 0 -> 7944 bytes .../ControllerProperties$JSONFormat.class | Bin 0 -> 6843 bytes .../ControllerProperties$JSONReader.class | Bin 0 -> 2952 bytes ...erProperties$PropertiesStorageFormat.class | Bin 0 -> 511 bytes ...ontrollerProperties$SerializedFormat.class | Bin 0 -> 5276 bytes .../ControllerProperties$XMLFormat.class | Bin 0 -> 10112 bytes .../java/controlp5/ControllerProperties.class | Bin 0 -> 17463 bytes .../java/controlp5/ControllerProperty.class | Bin 0 -> 4434 bytes .../main/java/controlp5/ControllerStyle.class | Bin 0 -> 2859 bytes .../main/java/controlp5/ControllerView.class | Bin 0 -> 305 bytes .../main/java/controlp5/DropdownList$1.class | Bin 0 -> 790 bytes .../DropdownList$DropdownListView.class | Bin 0 -> 3776 bytes .../main/java/controlp5/DropdownList.class | Bin 0 -> 13640 bytes .../controlp5/FieldChangedListener$1.class | Bin 0 -> 1654 bytes .../controlp5/FieldChangedListener$2.class | Bin 0 -> 1654 bytes .../controlp5/FieldChangedListener$3.class | Bin 0 -> 1697 bytes .../controlp5/FieldChangedListener$4.class | Bin 0 -> 1687 bytes .../java/controlp5/FieldChangedListener.class | Bin 0 -> 2390 bytes .../main/java/controlp5/FieldValue.class | Bin 0 -> 153 bytes .../main/java/controlp5/FrameRate.class | Bin 0 -> 1699 bytes .../classes/main/java/controlp5/Group.class | Bin 0 -> 1359 bytes .../classes/main/java/controlp5/Icon$1.class | Bin 0 -> 200 bytes .../java/controlp5/Icon$IconImageView.class | Bin 0 -> 2089 bytes .../main/java/controlp5/Icon$IconView.class | Bin 0 -> 2919 bytes target/classes/main/java/controlp5/Icon.class | Bin 0 -> 8704 bytes .../main/java/controlp5/Knob$KnobView.class | Bin 0 -> 3334 bytes target/classes/main/java/controlp5/Knob.class | Bin 0 -> 11145 bytes .../main/java/controlp5/Label$Labeltype.class | Bin 0 -> 628 bytes .../java/controlp5/Label$MultilineLabel.class | Bin 0 -> 2162 bytes .../controlp5/Label$SinglelineLabel.class | Bin 0 -> 3215 bytes .../controlp5/Label$SinglelineTextfield.class | Bin 0 -> 702 bytes .../classes/main/java/controlp5/Label.class | Bin 0 -> 11334 bytes .../main/java/controlp5/ListBox$1.class | Bin 0 -> 760 bytes .../java/controlp5/ListBox$ListBoxView.class | Bin 0 -> 3785 bytes .../classes/main/java/controlp5/ListBox.class | Bin 0 -> 13421 bytes .../main/java/controlp5/Matrix$1.class | Bin 0 -> 869 bytes .../java/controlp5/Matrix$MatrixView.class | Bin 0 -> 2202 bytes .../classes/main/java/controlp5/Matrix.class | Bin 0 -> 10492 bytes .../main/java/controlp5/MultiList.class | Bin 0 -> 7812 bytes .../main/java/controlp5/MultiListButton.class | Bin 0 -> 6672 bytes .../java/controlp5/MultiListInterface.class | Bin 0 -> 430 bytes .../java/controlp5/MultilineTextfield.class | Bin 0 -> 1464 bytes .../controlp5/Numberbox$NumberboxView.class | Bin 0 -> 1996 bytes .../main/java/controlp5/Numberbox.class | Bin 0 -> 6504 bytes target/classes/main/java/controlp5/Pad.class | Bin 0 -> 274 bytes .../classes/main/java/controlp5/Pointer.class | Bin 0 -> 241 bytes .../main/java/controlp5/Println$1.class | Bin 0 -> 1631 bytes .../classes/main/java/controlp5/Println.class | Bin 0 -> 1846 bytes .../classes/main/java/controlp5/Radio.class | Bin 0 -> 797 bytes .../main/java/controlp5/RadioButton.class | Bin 0 -> 15517 bytes .../java/controlp5/Range$RangeImageView.class | Bin 0 -> 1285 bytes .../controlp5/Range$RangeSpriteView.class | Bin 0 -> 1287 bytes .../main/java/controlp5/Range$RangeView.class | Bin 0 -> 4107 bytes .../classes/main/java/controlp5/Range.class | Bin 0 -> 13726 bytes .../java/controlp5/ScrollableList$1.class | Bin 0 -> 802 bytes .../ScrollableList$ScrollableListView.class | Bin 0 -> 3798 bytes .../main/java/controlp5/ScrollableList.class | Bin 0 -> 13932 bytes .../main/java/controlp5/Slider$1.class | Bin 0 -> 206 bytes .../java/controlp5/Slider$SliderView.class | Bin 0 -> 991 bytes .../java/controlp5/Slider$SliderViewH.class | Bin 0 -> 4824 bytes .../java/controlp5/Slider$SliderViewV.class | Bin 0 -> 5095 bytes .../classes/main/java/controlp5/Slider.class | Bin 0 -> 11615 bytes .../controlp5/Slider2D$Slider2DView.class | Bin 0 -> 1973 bytes .../main/java/controlp5/Slider2D.class | Bin 0 -> 7504 bytes .../main/java/controlp5/Spacer$1.class | Bin 0 -> 206 bytes .../java/controlp5/Spacer$SpacerView.class | Bin 0 -> 1649 bytes .../classes/main/java/controlp5/Spacer.class | Bin 0 -> 2197 bytes target/classes/main/java/controlp5/TODO | 92 + target/classes/main/java/controlp5/Tab.class | Bin 0 -> 6592 bytes .../main/java/controlp5/Textarea.class | Bin 0 -> 12242 bytes .../controlp5/Textfield$DeleteCharacter.class | Bin 0 -> 983 bytes .../main/java/controlp5/Textfield$Enter.class | Bin 0 -> 1291 bytes .../controlp5/Textfield$InputFilter.class | Bin 0 -> 3089 bytes .../controlp5/Textfield$InsertCharacter.class | Bin 0 -> 1270 bytes .../java/controlp5/Textfield$MoveDown.class | Bin 0 -> 1203 bytes .../java/controlp5/Textfield$MoveLeft.class | Bin 0 -> 978 bytes .../java/controlp5/Textfield$MoveRight.class | Bin 0 -> 1105 bytes .../java/controlp5/Textfield$MoveUp.class | Bin 0 -> 1157 bytes .../main/java/controlp5/Textfield.class | Bin 0 -> 12586 bytes .../java/controlp5/TextfieldCommand.class | Bin 0 -> 157 bytes .../main/java/controlp5/Textlabel.class | Bin 0 -> 8739 bytes .../main/java/controlp5/TickMark.class | Bin 0 -> 2239 bytes .../controlp5/Toggle$ToggleImageView.class | Bin 0 -> 1373 bytes .../controlp5/Toggle$ToggleSwitchView.class | Bin 0 -> 1727 bytes .../java/controlp5/Toggle$ToggleView.class | Bin 0 -> 1741 bytes .../classes/main/java/controlp5/Toggle.class | Bin 0 -> 5940 bytes .../java/controlp5/Tooltip$TooltipView.class | Bin 0 -> 2419 bytes .../classes/main/java/controlp5/Tooltip.class | Bin 0 -> 8437 bytes .../classes/main/java/controlp5/changeLog.txt | 867 +++++++ .../events/ReleasedOutsideListener.class | Bin 0 -> 191 bytes .../controlp5/layout/ControllerFactory.class | Bin 0 -> 6045 bytes .../layout/LayoutBuilder$Attribute.class | Bin 0 -> 1189 bytes .../layout/LayoutBuilder$ElementProps.class | Bin 0 -> 662 bytes .../controlp5/layout/LayoutBuilder$Tag.class | Bin 0 -> 1376 bytes .../layout/LayoutBuilder$XMLVisitor.class | Bin 0 -> 5562 bytes .../java/controlp5/layout/LayoutBuilder.class | Bin 0 -> 2711 bytes .../classes/main/java/controlp5/layout/XML.g4 | 35 + .../java/controlp5/layout/lang/XML.interp | 44 + .../java/controlp5/layout/lang/XML.tokens | 20 + .../layout/lang/XMLBaseListener.class | Bin 0 -> 3694 bytes .../layout/lang/XMLBaseVisitor.class | Bin 0 -> 3688 bytes .../java/controlp5/layout/lang/XMLLexer.class | Bin 0 -> 5803 bytes .../controlp5/layout/lang/XMLLexer.interp | 58 + .../controlp5/layout/lang/XMLLexer.tokens | 20 + .../controlp5/layout/lang/XMLListener.class | Bin 0 -> 1633 bytes .../lang/XMLParser$AttributeContext.class | Bin 0 -> 2489 bytes .../lang/XMLParser$ContentContext.class | Bin 0 -> 2410 bytes .../lang/XMLParser$DocumentContext.class | Bin 0 -> 2486 bytes .../lang/XMLParser$ElementContext.class | Bin 0 -> 2869 bytes .../layout/lang/XMLParser$EndTagContext.class | Bin 0 -> 2232 bytes .../lang/XMLParser$StartTagContext.class | Bin 0 -> 2823 bytes .../layout/lang/XMLParser$ValueContext.class | Bin 0 -> 2221 bytes .../controlp5/layout/lang/XMLParser.class | Bin 0 -> 10532 bytes .../controlp5/layout/lang/XMLVisitor.class | Bin 0 -> 2225 bytes .../classes/main/java/controlp5/package.html | 16 + target/classes/main/java/sketch/Sketch.class | Bin 0 -> 1315 bytes .../PACKAGE_NAME/LayoutTests.class | Bin 0 -> 284 bytes 438 files changed, 34072 insertions(+), 4419 deletions(-) create mode 100644 .idea/libraries/processing.xml create mode 100755 controlP5/Accordion.java create mode 100644 controlP5/Background.java create mode 100755 controlP5/Bang.java create mode 100755 controlP5/BitFont.java create mode 100755 controlP5/Button.java create mode 100644 controlP5/ButtonBar.java create mode 100755 controlP5/CColor.java create mode 100755 controlP5/CDrawable.java create mode 100755 controlP5/CP.java create mode 100755 controlP5/CallbackEvent.java create mode 100755 controlP5/CallbackListener.java create mode 100755 controlP5/Canvas.java create mode 100755 controlP5/Chart.java create mode 100755 controlP5/ChartData.java create mode 100755 controlP5/ChartDataSet.java create mode 100755 controlP5/CheckBox.java create mode 100644 controlP5/ColorPalette.java create mode 100755 controlP5/ColorPicker.java create mode 100644 controlP5/ColorWheel.java create mode 100755 controlP5/ControlBehavior.java create mode 100755 controlP5/ControlBroadcaster.java create mode 100755 controlP5/ControlElement.java create mode 100755 controlP5/ControlEvent.java create mode 100755 controlP5/ControlFont.java create mode 100755 controlP5/ControlGroup.java create mode 100755 controlP5/ControlKey.java create mode 100755 controlP5/ControlListener.java create mode 100755 controlP5/ControlP5.java create mode 100755 controlP5/ControlP5Base.java create mode 100755 controlP5/ControlP5Constants.java create mode 100644 controlP5/ControlP5Legacy.java create mode 100755 controlP5/ControlTimer.java create mode 100755 controlP5/ControlWindow.java create mode 100755 controlP5/ControlWindowCanvas.java create mode 100755 controlP5/Controller.java create mode 100755 controlP5/ControllerAutomator.java create mode 100755 controlP5/ControllerDisplay.java create mode 100755 controlP5/ControllerGroup.java create mode 100755 controlP5/ControllerInterface.java create mode 100755 controlP5/ControllerLayout.java create mode 100755 controlP5/ControllerLayoutElement.java create mode 100755 controlP5/ControllerList.java create mode 100755 controlP5/ControllerPlug.java create mode 100755 controlP5/ControllerProperties.java create mode 100755 controlP5/ControllerProperty.java create mode 100755 controlP5/ControllerStyle.java create mode 100755 controlP5/ControllerView.java create mode 100755 controlP5/DropdownList.java create mode 100755 controlP5/FieldChangedListener.java create mode 100755 controlP5/FrameRate.java create mode 100755 controlP5/Group.java create mode 100644 controlP5/Icon.java create mode 100755 controlP5/Knob.java create mode 100755 controlP5/Label.java create mode 100755 controlP5/ListBox.java create mode 100755 controlP5/Matrix.java create mode 100755 controlP5/MultiList.java create mode 100755 controlP5/MultiListButton.java create mode 100755 controlP5/MultiListInterface.java create mode 100644 controlP5/MultilineTextfield.java create mode 100755 controlP5/Numberbox.java create mode 100755 controlP5/Pad.java create mode 100755 controlP5/Pointer.java create mode 100755 controlP5/Println.java create mode 100755 controlP5/Radio.java create mode 100755 controlP5/RadioButton.java create mode 100755 controlP5/Range.java create mode 100644 controlP5/ScrollableList.java create mode 100755 controlP5/Slider.java create mode 100755 controlP5/Slider2D.java create mode 100644 controlP5/Spacer.java create mode 100755 controlP5/TODO create mode 100755 controlP5/Tab.java create mode 100755 controlP5/Textarea.java create mode 100755 controlP5/Textfield.java create mode 100644 controlP5/TextfieldCommand.java create mode 100755 controlP5/Textlabel.java create mode 100755 controlP5/TickMark.java create mode 100755 controlP5/Toggle.java create mode 100755 controlP5/Tooltip.java create mode 100755 controlP5/changeLog.txt create mode 100644 controlP5/events/ReleasedOutsideListener.java create mode 100644 controlP5/layout/ControllerFactory.java create mode 100644 controlP5/layout/LayoutBuilder.java create mode 100644 controlP5/layout/XML.g4 create mode 100644 controlP5/layout/lang/XML.interp create mode 100644 controlP5/layout/lang/XML.tokens create mode 100644 controlP5/layout/lang/XMLBaseListener.java create mode 100644 controlP5/layout/lang/XMLBaseVisitor.java create mode 100644 controlP5/layout/lang/XMLLexer.interp create mode 100644 controlP5/layout/lang/XMLLexer.java create mode 100644 controlP5/layout/lang/XMLLexer.tokens create mode 100644 controlP5/layout/lang/XMLListener.java create mode 100644 controlP5/layout/lang/XMLParser.java create mode 100644 controlP5/layout/lang/XMLVisitor.java create mode 100755 controlP5/package.html create mode 100644 controlp5.iml create mode 100644 gen/controlP5/layout/XML.interp create mode 100644 gen/controlP5/layout/XML.tokens create mode 100644 gen/controlP5/layout/XMLBaseListener.java create mode 100644 gen/controlP5/layout/XMLBaseVisitor.java create mode 100644 gen/controlP5/layout/XMLLexer.interp create mode 100644 gen/controlP5/layout/XMLLexer.java create mode 100644 gen/controlP5/layout/XMLLexer.tokens create mode 100644 gen/controlP5/layout/XMLListener.java create mode 100644 gen/controlP5/layout/XMLParser.java create mode 100644 gen/controlP5/layout/XMLVisitor.java create mode 100644 resources/.DS_Store rename src/test/{java => tests}/LayoutTests.java (100%) create mode 100644 target/classes/main/java/controlp5/Accordion.class create mode 100644 target/classes/main/java/controlp5/Background.class create mode 100644 target/classes/main/java/controlp5/Bang$1.class create mode 100644 target/classes/main/java/controlp5/Bang$BangImageView.class create mode 100644 target/classes/main/java/controlp5/Bang$BangView.class create mode 100644 target/classes/main/java/controlp5/Bang.class create mode 100644 target/classes/main/java/controlp5/BitFont.class create mode 100644 target/classes/main/java/controlp5/Button$1.class create mode 100644 target/classes/main/java/controlp5/Button$ButtonImageView.class create mode 100644 target/classes/main/java/controlp5/Button$ButtonView.class create mode 100644 target/classes/main/java/controlp5/Button.class create mode 100644 target/classes/main/java/controlp5/ButtonBar$1.class create mode 100644 target/classes/main/java/controlp5/ButtonBar$ButtonBarView.class create mode 100644 target/classes/main/java/controlp5/ButtonBar.class create mode 100644 target/classes/main/java/controlp5/CColor.class create mode 100644 target/classes/main/java/controlp5/CDrawable.class create mode 100644 target/classes/main/java/controlp5/CP.class create mode 100644 target/classes/main/java/controlp5/CallbackEvent.class create mode 100644 target/classes/main/java/controlp5/CallbackListener.class create mode 100644 target/classes/main/java/controlp5/Canvas.class create mode 100644 target/classes/main/java/controlp5/Chart$ChartViewArea.class create mode 100644 target/classes/main/java/controlp5/Chart$ChartViewBar.class create mode 100644 target/classes/main/java/controlp5/Chart$ChartViewBarCentered.class create mode 100644 target/classes/main/java/controlp5/Chart$ChartViewLine.class create mode 100644 target/classes/main/java/controlp5/Chart$ChartViewPie.class create mode 100644 target/classes/main/java/controlp5/Chart.class create mode 100644 target/classes/main/java/controlp5/ChartData.class create mode 100644 target/classes/main/java/controlp5/ChartDataSet.class create mode 100644 target/classes/main/java/controlp5/CheckBox.class create mode 100644 target/classes/main/java/controlp5/ColorPalette.class create mode 100644 target/classes/main/java/controlp5/ColorPicker$1.class create mode 100644 target/classes/main/java/controlp5/ColorPicker$ColorField.class create mode 100644 target/classes/main/java/controlp5/ColorPicker.class create mode 100644 target/classes/main/java/controlp5/ColorWheel$1.class create mode 100644 target/classes/main/java/controlp5/ColorWheel$ColorWheelView.class create mode 100644 target/classes/main/java/controlp5/ColorWheel.class create mode 100644 target/classes/main/java/controlp5/ControlBehavior.class create mode 100644 target/classes/main/java/controlp5/ControlBroadcaster$EmptyController.class create mode 100644 target/classes/main/java/controlp5/ControlBroadcaster.class create mode 100644 target/classes/main/java/controlp5/ControlElement.class create mode 100644 target/classes/main/java/controlp5/ControlEvent.class create mode 100644 target/classes/main/java/controlp5/ControlFont.class create mode 100644 target/classes/main/java/controlp5/ControlGroup.class create mode 100644 target/classes/main/java/controlp5/ControlKey.class create mode 100644 target/classes/main/java/controlp5/ControlListener.class create mode 100644 target/classes/main/java/controlp5/ControlP5$1.class create mode 100644 target/classes/main/java/controlp5/ControlP5$2.class create mode 100644 target/classes/main/java/controlp5/ControlP5$3.class create mode 100644 target/classes/main/java/controlp5/ControlP5$4.class create mode 100644 target/classes/main/java/controlp5/ControlP5$Invisible.class create mode 100644 target/classes/main/java/controlp5/ControlP5$Layout.class create mode 100644 target/classes/main/java/controlp5/ControlP5.class create mode 100644 target/classes/main/java/controlp5/ControlP5Base$KeyCode.class create mode 100644 target/classes/main/java/controlp5/ControlP5Base.class create mode 100644 target/classes/main/java/controlp5/ControlP5Constants.class create mode 100644 target/classes/main/java/controlp5/ControlP5Legacy.class create mode 100644 target/classes/main/java/controlp5/ControlTimer.class create mode 100644 target/classes/main/java/controlp5/ControlWindow$Pointer.class create mode 100644 target/classes/main/java/controlp5/ControlWindow.class create mode 100644 target/classes/main/java/controlp5/ControlWindowCanvas.class create mode 100644 target/classes/main/java/controlp5/Controller$1.class create mode 100644 target/classes/main/java/controlp5/Controller$DebugView.class create mode 100644 target/classes/main/java/controlp5/Controller.class create mode 100644 target/classes/main/java/controlp5/ControllerAutomator$1.class create mode 100644 target/classes/main/java/controlp5/ControllerAutomator.class create mode 100644 target/classes/main/java/controlp5/ControllerDisplay.class create mode 100644 target/classes/main/java/controlp5/ControllerGroup.class create mode 100644 target/classes/main/java/controlp5/ControllerInterface.class create mode 100644 target/classes/main/java/controlp5/ControllerLayout.class create mode 100644 target/classes/main/java/controlp5/ControllerLayoutElement.class create mode 100644 target/classes/main/java/controlp5/ControllerList.class create mode 100644 target/classes/main/java/controlp5/ControllerPlug.class create mode 100644 target/classes/main/java/controlp5/ControllerProperties$JSONFormat.class create mode 100644 target/classes/main/java/controlp5/ControllerProperties$JSONReader.class create mode 100644 target/classes/main/java/controlp5/ControllerProperties$PropertiesStorageFormat.class create mode 100644 target/classes/main/java/controlp5/ControllerProperties$SerializedFormat.class create mode 100644 target/classes/main/java/controlp5/ControllerProperties$XMLFormat.class create mode 100644 target/classes/main/java/controlp5/ControllerProperties.class create mode 100644 target/classes/main/java/controlp5/ControllerProperty.class create mode 100644 target/classes/main/java/controlp5/ControllerStyle.class create mode 100644 target/classes/main/java/controlp5/ControllerView.class create mode 100644 target/classes/main/java/controlp5/DropdownList$1.class create mode 100644 target/classes/main/java/controlp5/DropdownList$DropdownListView.class create mode 100644 target/classes/main/java/controlp5/DropdownList.class create mode 100644 target/classes/main/java/controlp5/FieldChangedListener$1.class create mode 100644 target/classes/main/java/controlp5/FieldChangedListener$2.class create mode 100644 target/classes/main/java/controlp5/FieldChangedListener$3.class create mode 100644 target/classes/main/java/controlp5/FieldChangedListener$4.class create mode 100644 target/classes/main/java/controlp5/FieldChangedListener.class create mode 100644 target/classes/main/java/controlp5/FieldValue.class create mode 100644 target/classes/main/java/controlp5/FrameRate.class create mode 100644 target/classes/main/java/controlp5/Group.class create mode 100644 target/classes/main/java/controlp5/Icon$1.class create mode 100644 target/classes/main/java/controlp5/Icon$IconImageView.class create mode 100644 target/classes/main/java/controlp5/Icon$IconView.class create mode 100644 target/classes/main/java/controlp5/Icon.class create mode 100644 target/classes/main/java/controlp5/Knob$KnobView.class create mode 100644 target/classes/main/java/controlp5/Knob.class create mode 100644 target/classes/main/java/controlp5/Label$Labeltype.class create mode 100644 target/classes/main/java/controlp5/Label$MultilineLabel.class create mode 100644 target/classes/main/java/controlp5/Label$SinglelineLabel.class create mode 100644 target/classes/main/java/controlp5/Label$SinglelineTextfield.class create mode 100644 target/classes/main/java/controlp5/Label.class create mode 100644 target/classes/main/java/controlp5/ListBox$1.class create mode 100644 target/classes/main/java/controlp5/ListBox$ListBoxView.class create mode 100644 target/classes/main/java/controlp5/ListBox.class create mode 100644 target/classes/main/java/controlp5/Matrix$1.class create mode 100644 target/classes/main/java/controlp5/Matrix$MatrixView.class create mode 100644 target/classes/main/java/controlp5/Matrix.class create mode 100644 target/classes/main/java/controlp5/MultiList.class create mode 100644 target/classes/main/java/controlp5/MultiListButton.class create mode 100644 target/classes/main/java/controlp5/MultiListInterface.class create mode 100644 target/classes/main/java/controlp5/MultilineTextfield.class create mode 100644 target/classes/main/java/controlp5/Numberbox$NumberboxView.class create mode 100644 target/classes/main/java/controlp5/Numberbox.class create mode 100644 target/classes/main/java/controlp5/Pad.class create mode 100644 target/classes/main/java/controlp5/Pointer.class create mode 100644 target/classes/main/java/controlp5/Println$1.class create mode 100644 target/classes/main/java/controlp5/Println.class create mode 100644 target/classes/main/java/controlp5/Radio.class create mode 100644 target/classes/main/java/controlp5/RadioButton.class create mode 100644 target/classes/main/java/controlp5/Range$RangeImageView.class create mode 100644 target/classes/main/java/controlp5/Range$RangeSpriteView.class create mode 100644 target/classes/main/java/controlp5/Range$RangeView.class create mode 100644 target/classes/main/java/controlp5/Range.class create mode 100644 target/classes/main/java/controlp5/ScrollableList$1.class create mode 100644 target/classes/main/java/controlp5/ScrollableList$ScrollableListView.class create mode 100644 target/classes/main/java/controlp5/ScrollableList.class create mode 100644 target/classes/main/java/controlp5/Slider$1.class create mode 100644 target/classes/main/java/controlp5/Slider$SliderView.class create mode 100644 target/classes/main/java/controlp5/Slider$SliderViewH.class create mode 100644 target/classes/main/java/controlp5/Slider$SliderViewV.class create mode 100644 target/classes/main/java/controlp5/Slider.class create mode 100644 target/classes/main/java/controlp5/Slider2D$Slider2DView.class create mode 100644 target/classes/main/java/controlp5/Slider2D.class create mode 100644 target/classes/main/java/controlp5/Spacer$1.class create mode 100644 target/classes/main/java/controlp5/Spacer$SpacerView.class create mode 100644 target/classes/main/java/controlp5/Spacer.class create mode 100755 target/classes/main/java/controlp5/TODO create mode 100644 target/classes/main/java/controlp5/Tab.class create mode 100644 target/classes/main/java/controlp5/Textarea.class create mode 100644 target/classes/main/java/controlp5/Textfield$DeleteCharacter.class create mode 100644 target/classes/main/java/controlp5/Textfield$Enter.class create mode 100644 target/classes/main/java/controlp5/Textfield$InputFilter.class create mode 100644 target/classes/main/java/controlp5/Textfield$InsertCharacter.class create mode 100644 target/classes/main/java/controlp5/Textfield$MoveDown.class create mode 100644 target/classes/main/java/controlp5/Textfield$MoveLeft.class create mode 100644 target/classes/main/java/controlp5/Textfield$MoveRight.class create mode 100644 target/classes/main/java/controlp5/Textfield$MoveUp.class create mode 100644 target/classes/main/java/controlp5/Textfield.class create mode 100644 target/classes/main/java/controlp5/TextfieldCommand.class create mode 100644 target/classes/main/java/controlp5/Textlabel.class create mode 100644 target/classes/main/java/controlp5/TickMark.class create mode 100644 target/classes/main/java/controlp5/Toggle$ToggleImageView.class create mode 100644 target/classes/main/java/controlp5/Toggle$ToggleSwitchView.class create mode 100644 target/classes/main/java/controlp5/Toggle$ToggleView.class create mode 100644 target/classes/main/java/controlp5/Toggle.class create mode 100644 target/classes/main/java/controlp5/Tooltip$TooltipView.class create mode 100644 target/classes/main/java/controlp5/Tooltip.class create mode 100755 target/classes/main/java/controlp5/changeLog.txt create mode 100644 target/classes/main/java/controlp5/events/ReleasedOutsideListener.class create mode 100644 target/classes/main/java/controlp5/layout/ControllerFactory.class create mode 100644 target/classes/main/java/controlp5/layout/LayoutBuilder$Attribute.class create mode 100644 target/classes/main/java/controlp5/layout/LayoutBuilder$ElementProps.class create mode 100644 target/classes/main/java/controlp5/layout/LayoutBuilder$Tag.class create mode 100644 target/classes/main/java/controlp5/layout/LayoutBuilder$XMLVisitor.class create mode 100644 target/classes/main/java/controlp5/layout/LayoutBuilder.class create mode 100644 target/classes/main/java/controlp5/layout/XML.g4 create mode 100644 target/classes/main/java/controlp5/layout/lang/XML.interp create mode 100644 target/classes/main/java/controlp5/layout/lang/XML.tokens create mode 100644 target/classes/main/java/controlp5/layout/lang/XMLBaseListener.class create mode 100644 target/classes/main/java/controlp5/layout/lang/XMLBaseVisitor.class create mode 100644 target/classes/main/java/controlp5/layout/lang/XMLLexer.class create mode 100644 target/classes/main/java/controlp5/layout/lang/XMLLexer.interp create mode 100644 target/classes/main/java/controlp5/layout/lang/XMLLexer.tokens create mode 100644 target/classes/main/java/controlp5/layout/lang/XMLListener.class create mode 100644 target/classes/main/java/controlp5/layout/lang/XMLParser$AttributeContext.class create mode 100644 target/classes/main/java/controlp5/layout/lang/XMLParser$ContentContext.class create mode 100644 target/classes/main/java/controlp5/layout/lang/XMLParser$DocumentContext.class create mode 100644 target/classes/main/java/controlp5/layout/lang/XMLParser$ElementContext.class create mode 100644 target/classes/main/java/controlp5/layout/lang/XMLParser$EndTagContext.class create mode 100644 target/classes/main/java/controlp5/layout/lang/XMLParser$StartTagContext.class create mode 100644 target/classes/main/java/controlp5/layout/lang/XMLParser$ValueContext.class create mode 100644 target/classes/main/java/controlp5/layout/lang/XMLParser.class create mode 100644 target/classes/main/java/controlp5/layout/lang/XMLVisitor.class create mode 100755 target/classes/main/java/controlp5/package.html create mode 100644 target/classes/main/java/sketch/Sketch.class create mode 100644 target/test-classes/PACKAGE_NAME/LayoutTests.class diff --git a/.DS_Store b/.DS_Store index c4707ce708083fc5386f89d400e4315a4b1d034e..57c876834275a21fd18beca139289f7d444ef074 100644 GIT binary patch delta 354 zcmZn(XbG6$FDk*nz`)4BAi%&-#E{RB!w|q=>Y1~#a2or>2Hwr=94s95AQhYp$w1jW zh7x2|`N>H+`AI-opk}6YAU*Ft7ywxe47_MM3K&co^cXT3av5?wbC7j1I09AcA?f5` zNM)#CNCc`Z0Jpi@)|1NxN<~b~%ykqDP0VX`6sj#PO?4E^Ees|Jnr_Y$ pKFzAh2K06!(BmLSl%P4{C&+A=<2Rd09%0?guJDUxvw{dSGXN2TS|9)b delta 140 zcmV;70CWF@P=rvBPZbgX0003101yBGZ~$xoWdL(YY;R++ah3;>fDN+;2m}ZL5|elk zHM7$Y(gBmx5@eHq69eWuG%z$QATl>IeJmh*F)}kWEFd;EHGO>v u2o)nQJ5pb3Y;A6Di<2r89|4TBN)*rqvql=h1+jn)0ka1n`UJD$6$1l=dnic& diff --git a/.idea/libraries/processing.xml b/.idea/libraries/processing.xml new file mode 100644 index 0000000..cbeb255 --- /dev/null +++ b/.idea/libraries/processing.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml index be50d7a..2d61aea 100644 --- a/.idea/modules.xml +++ b/.idea/modules.xml @@ -3,6 +3,7 @@ + diff --git a/controlP5/Accordion.java b/controlP5/Accordion.java new file mode 100755 index 0000000..d5489df --- /dev/null +++ b/controlP5/Accordion.java @@ -0,0 +1,287 @@ +package main.java.src2.main.java.controlP5.controlP5; + +/** + * controlP5 is a processing gui library. + * + * 2006-2015 by Andreas Schlegel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place, Suite 330, + * Boston, MA 02111-1307 USA + * + * @author Andreas Schlegel (http://www.sojamo.de) + * @modified ##date## + * @version ##version## + * + */ + +/** + *

+ * An Accordion here is a list of ControlGroups which can be expanded and collapsed. + * + * @see ControllerGroup + * @see ControlGroup + * @example controllers/ControlP5accordion + */ +@SuppressWarnings( "rawtypes" ) public class Accordion extends ControlGroup< Accordion > { + + + protected int spacing = 1; + protected int minHeight = 100; + protected int itemheight; + protected int _myMode = SINGLE; + + public Accordion( ControlP5 theControlP5 , String theName ) { + this( theControlP5 , theControlP5.getDefaultTab( ) , theName , 0 , 0 , 200 ); + theControlP5.register( theControlP5.papplet , theName , this ); + } + + Accordion( ControlP5 theControlP5 , Tab theTab , String theName , int theX , int theY , int theW ) { + super( theControlP5 , theTab , theName , theX , theY , theW , 9 ); + hideBar( ); + } + + /** + * Adds items of type ControlGroup to the Accordion, only ControlGroups can be added. + * + * @exclude + * @param theGroup + * @return Accordion + */ + public Accordion addItem( ControlGroup< ? > theGroup ) { + theGroup.close( ); + theGroup.moveTo( this ); + theGroup.activateEvent( true ); + theGroup.addListener( this ); + theGroup.setMoveable( false ); + if ( theGroup.getBackgroundHeight( ) < minHeight ) { + theGroup.setBackgroundHeight( minHeight ); + } + controllers.add( theGroup ); + updateItems( ); + return this; + } + + /** + * Removes a ControlGroup from the accordion AND from controlP5 remove(ControllerInterface + * theGroup) overwrites it's super method. if you want to remove a ControlGroup only from the + * accordion, use removeItem(ControlGroup). + * + * @see controlP5.Accordion#removeItem(ControlGroup) + * @return ControllerInterface + */ + @Override public Accordion remove( ControllerInterface< ? > theGroup ) { + if ( theGroup instanceof ControlGroup< ? > ) { + controllers.remove( theGroup ); + ( ( ControlGroup< ? > ) theGroup ).removeListener( this ); + updateItems( ); + } + super.remove( theGroup ); + return this; + } + + /** + * Removes a ControlGroup from the accordion and puts it back into the default tab of controlP5. + * if you dont have access to a ControlGroup via a variable, use + * controlP5.group("theNameOfTheGroup") which will return a + * + * @return Accordion + */ + public Accordion removeItem( ControlGroup< ? > theGroup ) { + if ( theGroup == null ) { + return this; + } + controllers.remove( theGroup ); + theGroup.removeListener( this ); + theGroup.moveTo( cp5.controlWindow ); + updateItems( ); + return this; + } + + /** + * UpdateItems is called when changes such as remove, change of height is performed on an + * accordion. updateItems() is called automatically for such cases, but by calling updateItems + * manually an update will be forced. + * + * @return Accordion + */ + public Accordion updateItems( ) { + int n = 0; + setWidth( _myWidth ); + + for ( ControllerInterface< ? > cg : controllers.get( ) ) { + if ( cg instanceof ControlGroup ) { + n += ( ( ControlGroup ) cg ).getBarHeight( ) + spacing; + cg.setPosition( 0 , n ); + if ( ( ( ControlGroup ) cg ).isOpen( ) ) { + n += ( ( ControlGroup ) cg ).getBackgroundHeight( ); + } + } + } + return this; + } + + /** + * Sets the minimum height of a collapsed item, default value is 100. + * + * @param theHeight + * @return Accordion + */ + public Accordion setMinItemHeight( int theHeight ) { + minHeight = theHeight; + for ( ControllerInterface< ? > cg : controllers.get( ) ) { + if ( cg instanceof ControlGroup ) { + if ( ( ( ControlGroup ) cg ).getBackgroundHeight( ) < minHeight ) { + ( ( ControlGroup ) cg ).setBackgroundHeight( minHeight ); + } + } + } + updateItems( ); + return this; + } + + public int getMinItemHeight( ) { + return minHeight; + } + + public Accordion setItemHeight( int theHeight ) { + itemheight = theHeight; + for ( ControllerInterface< ? > cg : controllers.get( ) ) { + if ( cg instanceof ControlGroup ) { + ( ( ControlGroup ) cg ).setBackgroundHeight( itemheight ); + } + } + updateItems( ); + return this; + } + + public int getItemHeight( ) { + return itemheight; + } + + @Override public Accordion setWidth( int theWidth ) { + super.setWidth( theWidth ); + for ( ControllerInterface< ? > cg : controllers.get( ) ) { + if ( cg instanceof ControlGroup ) { + ( ( ControlGroup ) cg ).setWidth( theWidth ); + } + } + return this; + } + + /** + * @exclude {@inheritDoc} + */ + @Override @ControlP5.Invisible public void controlEvent( ControlEvent theEvent ) { + if ( theEvent.isGroup( ) ) { + int n = 0; + for ( ControllerInterface< ? > cg : controllers.get( ) ) { + if ( cg instanceof ControlGroup ) { + n += ( ( ControlGroup ) cg ).getBarHeight( ) + spacing; + cg.setPosition( 0 , n ); + if ( _myMode == SINGLE ) { + if ( cg == theEvent.getGroup( ) && ( ( ControlGroup ) cg ).isOpen( ) ) { + n += ( ( ControlGroup ) cg ).getBackgroundHeight( ); + } else { + ( ( ControlGroup ) cg ).close( ); + } + } else { + if ( ( ( ControlGroup ) cg ).isOpen( ) ) { + n += ( ( ControlGroup ) cg ).getBackgroundHeight( ); + } + } + } + } + } + } + + public Accordion open( ) { + int[] n = new int[ controllers.size( ) ]; + for ( int i = 0 ; i < controllers.size( ) ; i++ ) { + n[ i ] = i; + } + return open( n ); + } + + public Accordion close( ) { + int[] n = new int[ controllers.size( ) ]; + for ( int i = 0 ; i < controllers.size( ) ; i++ ) { + n[ i ] = i; + } + return close( n ); + } + + public Accordion open( int ... theId ) { + if ( theId[ 0 ] == -1 ) { + return open( ); + } + int n = 0 , i = 0; + for ( ControllerInterface< ? > cg : controllers.get( ) ) { + if ( cg instanceof ControlGroup ) { + boolean a = false; + for ( int j = 0 ; j < theId.length ; j++ ) { + if (theId[j] == i) { + a = true; + break; + } + } + boolean b = ((ControlGroup) cg).isOpen() || a; + i++; + n += ( ( ControlGroup ) cg ).getBarHeight( ) + spacing; + cg.setPosition( 0 , n ); + if ( b ) { + n += ( ( ControlGroup ) cg ).getBackgroundHeight( ); + ( ( ControlGroup ) cg ).open( ); + } + } + } + return this; + } + + public Accordion close( int ... theId ) { + if ( theId[ 0 ] == -1 ) { + return close( ); + } + int n = 0 , i = 0; + for ( ControllerInterface< ? > cg : controllers.get( ) ) { + if ( cg instanceof ControlGroup ) { + boolean a = false; + for ( int j = 0 ; j < theId.length ; j++ ) { + if (theId[j] == i) { + a = true; + break; + } + } + boolean b = !((ControlGroup) cg).isOpen() || a; + i++; + n += ( ( ControlGroup ) cg ).getBarHeight( ) + spacing; + ( ( ControlGroup ) cg ).setPosition( 0 , n ); + if ( b ) { + ( ( ControlGroup ) cg ).close( ); + } else { + n += ( ( ControlGroup ) cg ).getBackgroundHeight( ); + } + } + } + return this; + } + + public Accordion setCollapseMode( int theMode ) { + if ( theMode == 0 ) { + _myMode = SINGLE; + } else { + _myMode = MULTI; + } + return this; + } +} diff --git a/controlP5/Background.java b/controlP5/Background.java new file mode 100644 index 0000000..19a45f3 --- /dev/null +++ b/controlP5/Background.java @@ -0,0 +1,37 @@ +package main.java.src2.main.java.controlP5.controlP5; + +/** + * controlP5 is a processing gui library. + * + * 2006-2015 by Andreas Schlegel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place, Suite 330, + * Boston, MA 02111-1307 USA + * + * @author Andreas Schlegel (http://www.sojamo.de) + * @modified ##date## + * @version ##version## + * + */ + +public class Background extends ControlGroup< Background > { + + public Background( ControlP5 theControlP5 , ControllerGroup< ? > theParent , String theName , int theX , int theY , int theW , int theH ) { + super( theControlP5 , theParent , theName , theX , theY , theW , theH ); + hideBar( ); + setBackgroundColor( 0x55000000 ); + setSize(theW, theH); + } + +} diff --git a/controlP5/Bang.java b/controlP5/Bang.java new file mode 100755 index 0000000..2db5893 --- /dev/null +++ b/controlP5/Bang.java @@ -0,0 +1,205 @@ +package main.java.src2.main.java.controlP5.controlP5; + +/** + * controlP5 is a processing gui library. + * + * 2006-2015 by Andreas Schlegel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place, Suite 330, + * Boston, MA 02111-1307 USA + * + * @author Andreas Schlegel (http://www.sojamo.de) + * @modified ##date## + * @version ##version## + * + */ + +import processing.core.PGraphics; + +/** + *

+ * The Bang controller triggers an event when pressed. A bang can only be assigned to a function in + * your program but not to a field like other controllers. Bang extends superclass Controller, for a + * full documentation see the {@link Controller} reference. + * + * @example controllers/ControlP5bang + */ +@ControlP5.Layout public class Bang extends Controller< Bang > { + + protected int cnt; + + protected int triggerId = PRESSED; + + /** + * Convenience constructor to extend Bang. + * + * @example use/ControlP5extendController + * @param theControlP5 + * @param theName + */ + public Bang( ControlP5 theControlP5 , String theName ) { + this( theControlP5 , theControlP5.getDefaultTab( ) , theName , 0 , 0 , 20 , 20 ); + theControlP5.register( theControlP5.papplet , theName , this ); + } + + protected Bang( ControlP5 theControlP5 , ControllerGroup< ? > theParent , String theName , float theX , float theY , int theWidth , int theHeight ) { + super( theControlP5 , theParent , theName , theX , theY , theWidth , theHeight ); + _myCaptionLabel.setPadding( 0 , Label.paddingY ).align( LEFT , BOTTOM_OUTSIDE ); + _myValue = 1; + } + + @Override protected void onEnter( ) { + cnt = 0; + isActive = true; + } + + @Override protected void onLeave( ) { + isActive = false; + } + + @Override protected void mousePressed( ) { + if ( triggerId == PRESSED ) { + cnt = -3; + isActive = true; + update( ); + } + } + + @Override protected void mouseReleased( ) { + if ( triggerId == RELEASE ) { + cnt = -3; + isActive = true; + update( ); + } + } + + @Override protected void mouseReleasedOutside( ) { + onLeave( ); + } + + /** + * By default a bang is triggered when the mouse is pressed. use setTriggerEvent(Bang.PRESSED) + * or setTriggerEvent(Bang.RELEASE) to define the action for triggering a bang. currently only + * Bang.PRESSED and Bang.RELEASE are supported. + * + * @param theEventID + * @return Bang + */ + @ControlP5.Layout public Bang setTriggerEvent( int theEventID ) { + triggerId = theEventID; + return this; + } + + @ControlP5.Layout public int getTriggerEvent( ) { + return triggerId; + } + + /** + * Sets the value of the bang controller. since bang can be true or false, false=0 and true=1 + * + * @param theValue float + * @return Bang + */ + @Override public Bang setValue( float theValue ) { + _myValue = theValue; + broadcast( FLOAT ); + return this; + } + + /** + * @exclude + */ + @Override public Bang update( ) { + return setValue( _myValue ); + } + + /** + * @exclude + */ + @Override @ControlP5.Invisible public Bang updateDisplayMode( int theMode ) { + updateViewMode( theMode ); + return this; + } + + /** + * @exclude + */ + @ControlP5.Invisible public Bang updateViewMode( int theMode ) { + _myDisplayMode = theMode; + switch ( theMode ) { + case ( DEFAULT ): + _myControllerView = new BangView( ); + break; + case ( IMAGE ): + _myControllerView = new BangImageView( ); + break; + case ( CUSTOM ): + default: + break; + } + return this; + } + + private class BangView implements ControllerView< Bang > { + + public void display( PGraphics theGraphics , Bang theController ) { + if ( isActive ) { + theGraphics.fill( color.getActive( ) ); + } else { + theGraphics.fill( color.getForeground( ) ); + } + + if ( cnt < 0 ) { + theGraphics.fill( color.getForeground( ) ); + cnt++; + } + theGraphics.rect( 0 , 0 , getWidth( ) , getHeight( ) ); + if ( isLabelVisible ) { + _myCaptionLabel.draw( theGraphics , 0 , 0 , theController ); + } + } + } + + private class BangImageView implements ControllerView< Bang > { + + public void display( PGraphics theGraphics , Bang theController ) { + if ( isActive ) { + theGraphics.image( (availableImages[ACTIVE]) ? images[ ACTIVE ] : images[ DEFAULT ] , 0 , 0 ); + } else { + theGraphics.image( (availableImages[OVER]) ? images[ OVER ] : images[ DEFAULT ] , 0 , 0 ); + } + if ( cnt < 0 ) { + theGraphics.image( (availableImages[OVER]) ? images[ OVER ] : images[ DEFAULT ] , 0 , 0 ); + cnt++; + } + } + } + + /** + * {@inheritDoc} + * + * @exclude + */ + @Override public String getInfo( ) { + return "type:\tBang\n" + super.getInfo( ); + } + + /** + * @exclude {@inheritDoc} + */ + @Override public String toString( ) { + return super.toString( ) + " [ " + getValue( ) + " ] " + "Bang" + " (" + this.getClass( ).getSuperclass( ) + ")"; + } + +} diff --git a/controlP5/BitFont.java b/controlP5/BitFont.java new file mode 100755 index 0000000..94ceb6e --- /dev/null +++ b/controlP5/BitFont.java @@ -0,0 +1,203 @@ +package main.java.src2.main.java.controlP5.controlP5; + +/** + * controlP5 is a processing gui library. + * + * 2006-2015 by Andreas Schlegel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place, Suite 330, + * Boston, MA 02111-1307 USA + * + * @author Andreas Schlegel (http://www.sojamo.de) + * @modified ##date## + * @version ##version## + * + */ + +import java.lang.reflect.Constructor; +import java.util.Arrays; + +import processing.core.PApplet; +import processing.core.PFont; +import processing.core.PImage; + +public class BitFont extends PFont { + + static public final String standard58base64 = "AakACQBgACAEAgQGBggGAgMDBAYDBAIGBQMFBQUFBQUFBQICBAUEBQgFBQUFBQUFBQIFBQQGBQUFBQUFBAUGCAUGBQMFAwYGAwQEBAQEBAQEAgQEAgYEBAQEAwQEBAQGBAQEBAIEBQKgUgghIaUAAIiRMeiZZwwAAANgjjnvmRRKESVzzDGXoqQUvYURQCCAQCCSCAAAAAgAAABEqECleCVFkRAAiLSUWEgoJQAAiSOllEJIKVRiSymllCRFSSlCEVIAQQBBQAARAAAAEAAAACQpgeALJASiIwAQSQipE1BKRS+QSEohhRBSqES1UkopSIqSkkIiFAGwEZOwSaplZGx2VVXVSQIAgeIgSETy4RCSCEnoEONAgJCkd0I6p73QiKilk46RpCQZQoQIAFBVVVOVVFVVVUKqqiqKCACCDyKpiIoAICQJ9FAiCUE8ElUphRRCSqESUUohJSRJSUpECBEAoCrqoiqZqqqqiFRVUiIJAADKI5UQASEgSAoJpSRSCgECUlJKKYSUSiWilEJKSRKRlIgQJABAVVVEVVJVVVUhqaqqQhIACBQixEIBQFBg9AwyRhhDBEIIpGPOCyZl0kXJBJOMGMImEW9owAcbMQmrpKpKxjJiopQdFQAAAAAAAABAAAAAAAAAAIAAAOAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAQIAAAEAQAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAgAAAgCAAAAAgAA"; + static public final String standard56base64 = "AeYACQBgACAEAgQGBggHAgMDBgYDBQIFBgMGBgYGBgYGBgIDBAYEBggGBgYGBgYGBgIGBgUIBgYGBgYGBgYGCAYGBgMFAwYHAwUFBQUFAwUFAgMFAggFBQUFBAQEBQUIBQUFBAMEBQKgUgghRwoBAIAcOQ7yOZ/jAADAAXAe5/k+JwqKQlDkPM7jfFGUFEXfwghAQAAICIQUAgAAAAABAAAAQAkVqBSvJFJUEQCQaFHEBBEURQAAiDiiKIqCIIqCkjAWRVEURUQUJUURFCEFIBAAAgEBhAAAAABAAAAAAEikBIIvkFAQOQQAJBIEKU8ARVGiLyCRKAqiIAiioCJUTVEURQERRUmKgkQoAsAd40zcSambY447u5SSUnoSAYBAcRBMRNWHh4iEMAn0II4HBBAk6XuC6HmyL2gISVX0RI9DREoSQRAhAgBIKaW0lFIpKaWUIiSlpJRQhAAg+CCSFBFBACAiEdAHRUgEgfiIqIqiIAqCKAoqQlAWBVEBEZGSpBBCiAAAUgrpJaU0SkoppRBJKckkIxEAAJRHKkIEEACESEKERBERRUEAAVKiKIqCIIqKkhAURUGUREREJEVEECQAgJRSCkkplZJSSilIUkpKKUgEAAKFCHGhAIBAwdHnII5DOA4iIAiB6HGeL3CinOgFRU7gRA7hEDYR8QUJ+MEd40xcSqmkZI6LEWdsknsSAQAAAAAAAAAgAAAAAAAAAACAAACAAwAAAAAAAAAAAAAAQAAAAAAAAAADAwAAAAAABBAAAICAAAAAAIAAJQAAAAAAAAAABAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAACAAAgIAAAAAAYAAA="; + static public final String grixelbase64 = "AnoADABgACAFAgQICAoIAgQEBgYDBQIKCQMICAgICAcICAIDBQYFBwkICAgIBwcICAYHCAcJCAgICAgICAgICggICAQKBAQHBAcHBwcHBQcHAgUHBAoHBwcHBgcGBwcKBwcHBQIFCAJAJeIjkENBAAAAQHzk4wPz5/Pz8QEAAB4ePj8+Pz6fX9AHCgoECvL58fnx+QsKiigo6C8CIAEIIAAAARwgEAoEAAAAAAAABAAAAAAAICIAAZVIUiERBQEAAIAIWlAQSkAQKCgIICCEhAQFBQUFAgFBBCgoMGwoKCgoKAghKCiioCCgEIAKQIAAAAQIgAAgEAAAAAAAABAAAAAAAICIsAUEfwlCRBCkEAAAIUhAQCQBAaCgIEAAAcoUFBQQFAgEBBGgoECpoqCgoKAAhKCgiEREQIIAAgAAAgAQIAACgEAAAAAAAABAAAAAAAAAIrIBEIgkgBBBEEEAAIIgAQGJ/ARAgoKS+AioVFBQQFAgEBBEgEICmZKCgoKCAhCCgiKioIAIBAgA4Pl4fJ7n+YRC8c7H8/F5ni8UiigU+okIAEAg4gOBA0HfhwcEguTDEwL0g/DxAwFAoFJ/PwFBv1/eHwH6CASKCgoKCvJBCAqKCAEBISAgAAAoFAqFQigUikREoVAoFISEUCgiSQgSQgAAgQgSAlEEEQQACAhSANAfUBAhCAiIj2BKBQUFBAUCQUEEKCQQKCzoJ+gHCCEoKCIKBIIAgQAAvlAg9AuhUOgREYVCoVBgEEKhiBghhIgAAAB/SITEEKQQABAgSAFAIEBBhCAgQABByBMUFBAUCAQFEaGgQKCgoICgECCEIJGIRBAEAggCAIRCgVAghEKhSEQUCoVCAUYIhSJihAgiAgAAiCQJFUMQAAgggCAFBIEEBRGCghACAkBAUFBQUCAQFESEggKBgoICkoKCEIIoIgpCCAhACAAQCoVCoRAKhUIRUSgUCgUhISSJSBISiAgAQCDiE4gTQQAgUAB89OcD4uND8PFJAAAEfkE/Pj++gF/Q5wn6BQryCfAJ8kHwQXAnCOEvACIAgM/j8XiCLxQKWUQhz8cXeDgPw52Q7yciAAAAAAIAANgAQAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAgAPg4AcAAAAAACAACAAAAAABEAAAAAAAACAAawAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4ABgAAAAABEAAAAAAAAB4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="; + protected int characters; + protected int[] charWidth = new int[ 255 ]; + protected int charHeight; + protected int[][] chars; + protected int lineHeight = 10; + protected int kerning = 0; + protected int wh; + protected PImage texture; + public static int defaultChar = 32; + + public BitFont( byte[] theBytes ) { + super( ); + + texture = decodeBitFont( theBytes ); + make( ); + + size = lineHeight; + glyphs = new Glyph[ 256 ]; + ascii = new int[ 128 ]; + Arrays.fill( ascii , -1 ); + lazy = false; + ascent = 4; + descent = 4; + glyphCount = 128; + for ( int i = 0 ; i < 128 ; i++ ) { + + // unfortunately the PFont.Glyph constructor in + // the android source code is for whatever + // reason protected and not public like in the + // java application source, therefore the + // bitfont will only be used in the java + // application mode until changes to the + // processing core code have been made. see + // issue + // http://code.google.com/p/processing/issues/detail?id=1293 + + try { + Constructor< PFont.Glyph >[] constructors = ( Constructor< PFont.Glyph >[] ) PFont.Glyph.class.getDeclaredConstructors( ); + Constructor< PFont.Glyph > constructor = ( Constructor< PFont.Glyph > ) PFont.Glyph.class.getDeclaredConstructors( )[ 0 ]; + constructor.setAccessible( true ); + for ( Constructor< PFont.Glyph > c : constructors ) { + c.setAccessible( true ); + if ( c.getParameterTypes( ).length == 1 ) { + glyphs[ i ] = c.newInstance( this ); + break; + } + } + } catch ( Exception e ) { + System.out.println( e ); + } + + // as soon as the constructor is public, the + // line below will replace the hack above + // glyphs[i] = new Glyph(); + + glyphs[ i ].value = i; + + if ( glyphs[ i ].value < 128 ) { + ascii[ glyphs[ i ].value ] = i; + } + + glyphs[ i ].index = i; + int id = i - 32; + if ( id >= 0 ) { + glyphs[ i ].image = new PImage( charWidth[ id ] , 9 , PConstants.ALPHA ); + for ( int n = 0 ; n < chars[ id ].length ; n++ ) { + glyphs[ i ].image.pixels[ n ] = ( chars[ id ][ n ] == 1 ) ? 0xffffffff : 0x00000000; + } + glyphs[ i ].height = 9; + glyphs[ i ].width = charWidth[ id ]; + glyphs[ i ].index = i; + glyphs[ i ].value = i; + glyphs[ i ].setWidth = charWidth[ id ]; + glyphs[ i ].topExtent = 4; + glyphs[ i ].leftExtent = 0; + } else { + glyphs[ i ].image = new PImage( 1 , 1 ); + } + } + } + + public Glyph getGlyph( char c ) { + int n = c; + /* if c is out of the BitFont-glyph bounds, return + * the defaultChar glyph (the space char by + * default). */ + n = ( n >= 128 ) ? defaultChar : n; + return glyphs[ n ]; + } + + PImage decodeBitFont( byte[] bytes ) { + + PImage tex; + + // read width + int w = CP.byteArrayToInt( new byte[] { bytes[ 0 ] , bytes[ 1 ] } ); + + // read height + int h = CP.byteArrayToInt( new byte[] { bytes[ 2 ] , bytes[ 3 ] } ); + + // read size of chars + int s = CP.byteArrayToInt( new byte[] { bytes[ 4 ] , bytes[ 5 ] } ); + + // read first ascii char + int c = CP.byteArrayToInt( new byte[] { bytes[ 6 ] , bytes[ 7 ] } ); + + tex = new PImage( w , h , PApplet.ALPHA ); + + // read bytes and write pixels into image + int off = 8 + s; + for ( int i = off ; i < bytes.length ; i++ ) { + for ( int j = 0 ; j < 8 ; j++ ) { + tex.pixels[ ( i - off ) * 8 + j ] = CP.getBit( bytes[ i ] , j ) == 1 ? 0xff000000 : 0xffffffff; + } + } + + int cnt = 0 , n = 0 , i = 0; + + // add character seperators on top of the texture + for ( i = 0 ; i < s ; i++ ) { + while ( ++cnt != bytes[ i + 8 ] ) { + } + n += cnt; + tex.pixels[ n ] = 0xffff0000; + cnt = 0; + } + + return tex; + } + + int getHeight( ) { + return texture.height; + } + + BitFont make( ) { + + charHeight = texture.height; + + lineHeight = charHeight; + + int currWidth = 0; + + for ( int i = 0 ; i < texture.width ; i++ ) { + currWidth++; + if ( texture.pixels[ i ] == 0xffff0000 ) { + charWidth[ characters++ ] = currWidth; + currWidth = 0; + } + } + + chars = new int[ characters ][]; + + int indent = 0; + + for ( int i = 0 ; i < characters ; i++ ) { + chars[ i ] = new int[ charWidth[ i ] * charHeight ]; + for ( int u = 0 ; u < charWidth[ i ] * charHeight ; u++ ) { + chars[ i ][ u ] = texture.pixels[ indent + ( u / charWidth[ i ] ) * texture.width + ( u % charWidth[ i ] ) ] == 0xff000000 ? 1 : 0; + } + indent += charWidth[ i ]; + } + return this; + } +} diff --git a/controlP5/Button.java b/controlP5/Button.java new file mode 100755 index 0000000..fb2f454 --- /dev/null +++ b/controlP5/Button.java @@ -0,0 +1,316 @@ +package main.java.src2.main.java.controlP5.controlP5; + +/** + * controlP5 is a processing gui library. + * + * 2006-2015 by Andreas Schlegel + * + * This library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser + * General Public License as published by the Free Software + * Foundation; either version 2.1 of the License, or (at + * your option) any later version. This library is + * distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU Lesser General Public License for more + * details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, write to + * the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * @author Andreas Schlegel (http://www.sojamo.de) + * @modified ##date## + * @version ##version## + * + */ + +import processing.core.PGraphics; + +/** + *

+ * A button triggers an event after it has been release. + * Events can be linked to functions and fields inside your + * program/sketch. for a full documentation of this + * controller see the {@link Controller} class. + * + * @example controllers/ControlP5button + */ + +public class Button extends Controller< Button > { + + protected boolean isPressed; + protected boolean isOn = false; + public static int autoWidth = 69; + public static int autoHeight = 19; + protected int activateBy = RELEASE; + protected boolean isSwitch = false; + + /** + * Convenience constructor to extend Button. + * + * @example use/ControlP5extendController + */ + public Button( ControlP5 theControlP5 , String theName ) { + this( theControlP5 , theControlP5.getDefaultTab( ) , theName , 0 , 0 , 0 , autoWidth , autoHeight ); + theControlP5.register( theControlP5.papplet , theName , this ); + } + + protected Button( ControlP5 theControlP5 , ControllerGroup< ? > theParent , String theName , float theDefaultValue , int theX , int theY , int theWidth , int theHeight ) { + super( theControlP5 , theParent , theName , theX , theY , theWidth , theHeight ); + _myValue = theDefaultValue; + _myCaptionLabel.align( CENTER , CENTER ); + } + + /** + * @exclude + */ + public Button( ) { + super( null , null , null , 0 , 0 , 1 , 1 ); + } + + @Override protected void onEnter( ) { + isActive = true; + } + + @Override protected void onLeave( ) { + isActive = false; + setIsInside( false ); + } + + /** + * @exclude + */ + @Override @ControlP5.Invisible public void mousePressed( ) { + isActive = getIsInside( ); + isPressed = true; + if ( activateBy == PRESSED ) { + activate( ); + } + } + + /** + * @exclude + */ + @Override @ControlP5.Invisible public void mouseReleased( ) { + isPressed = false; + if ( activateBy == RELEASE ) { + activate( ); + } + isActive = false; + } + + /** + * A button can be activated by a mouse PRESSED or mouse + * RELEASE. Default value is RELEASE. + * + * @param theValue use ControlP5.PRESSED or + * ControlP5.RELEASE as parameter + * @return Button + */ + public Button activateBy( int theValue ) { + if ( theValue == PRESS ) { + activateBy = PRESS; + } else { + activateBy = RELEASE; + } + return this; + } + + protected void activate( ) { + if ( isActive ) { + isActive = false; + isOn = !isOn; + setValue( _myValue ); + } + } + + /** + * @exclude + */ + @Override @ControlP5.Invisible public void mouseReleasedOutside( ) { + mouseReleased( ); + } + + /** + * {@inheritDoc} + */ + @Override public Button setValue( float theValue ) { + _myValue = theValue; + broadcast( FLOAT ); + return this; + } + + /** + * {@inheritDoc} + */ + @Override public Button update( ) { + return setValue( _myValue ); + } + + /** + * Turns a button into a switch, or use a Toggle + * instead. + * + */ + public Button setSwitch( boolean theFlag ) { + isSwitch = theFlag; + if ( isSwitch ) { + _myBroadcastType = BOOLEAN; + } else { + _myBroadcastType = FLOAT; + } + return this; + } + + /** + * If the button acts as a switch, setOn will turn on + * the switch. Use + * {@link Button#setSwitch(boolean) setSwitch} + * to turn a Button into a Switch. + * + * @return Button + */ + public Button setOn( ) { + if ( isSwitch ) { + isOn = false; + isActive = true; + activate( ); + } + return this; + } + + /** + * If the button acts as a switch, setOff will turn off + * the switch. Use + * {@link Button#setSwitch(boolean) setSwitch} + * to turn a Button into a Switch. + * + * @return Button + */ + public Button setOff( ) { + if ( isSwitch ) { + isOn = true; + isActive = true; + activate( ); + } + return this; + } + + /** + * @return boolean + */ + public boolean isOn( ) { + return isOn; + } + + public boolean isSwitch( ) { + return isSwitch; + } + + /** + * @return boolean + */ + public boolean isPressed( ) { + return isPressed; + } + + /** + * Returns true or false and indicates the switch state + * of the button. {@link setSwitch(boolean) setSwitch} + * should have been set before. + * + * @see Button#setSwitch(boolean) + * @return boolean + */ + public boolean getBooleanValue( ) { + return isOn; + } + + /** + * @exclude + */ + @Override @ControlP5.Invisible public Button updateDisplayMode( int theMode ) { + return updateViewMode( theMode ); + } + + /** + * @exclude + */ + @ControlP5.Invisible public Button updateViewMode( int theMode ) { + _myDisplayMode = theMode; + switch ( theMode ) { + case ( DEFAULT ): + _myControllerView = new ButtonView( ); + break; + case ( IMAGE ): + _myControllerView = new ButtonImageView( ); + break; + case ( CUSTOM ): + default: + break; + + } + return this; + } + + private class ButtonView implements ControllerView< Button > { + + public void display( PGraphics theGraphics , Button theController ) { + theGraphics.noStroke( ); + if ( isOn && isSwitch ) { + theGraphics.fill( color.getActive( ) ); + } else { + if ( getIsInside( ) ) { + if ( isPressed ) { + theGraphics.fill( color.getActive( ) ); + } else { + theGraphics.fill( color.getForeground( ) ); + } + } else { + theGraphics.fill( color.getBackground( ) ); + } + } + theGraphics.rect( 0 , 0 , getWidth( ) , getHeight( ) ); + if ( isLabelVisible ) { + _myCaptionLabel.draw( theGraphics , 0 , 0 , theController ); + } + } + } + + private class ButtonImageView implements ControllerView< Button > { + + public void display( PGraphics theGraphics , Button theController ) { + if ( isOn && isSwitch ) { + theGraphics.image( (availableImages[HIGHLIGHT]) ? images[ HIGHLIGHT ] : images[ DEFAULT ] , 0 , 0 ); + return; + } + if ( getIsInside( ) ) { + if ( isPressed ) { + theGraphics.image( (availableImages[ACTIVE]) ? images[ ACTIVE ] : images[ DEFAULT ] , 0 , 0 ); + } else { + theGraphics.image( (availableImages[OVER]) ? images[ OVER ] : images[ DEFAULT ] , 0 , 0 ); + } + } else { + theGraphics.image( images[ DEFAULT ] , 0 , 0 ); + } + } + } + + /** + * @exclude + */ + @Override public String getInfo( ) { + return "type:\tButton\n" + super.getInfo( ); + } + + /** + * @exclude + */ + @Override public String toString( ) { + return super.toString( ) + " [ " + getValue( ) + " ] " + "Button" + " (" + this.getClass( ).getSuperclass( ) + ")"; + } + +} \ No newline at end of file diff --git a/controlP5/ButtonBar.java b/controlP5/ButtonBar.java new file mode 100644 index 0000000..bc7ae2a --- /dev/null +++ b/controlP5/ButtonBar.java @@ -0,0 +1,244 @@ +package main.java.src2.main.java.controlP5.controlP5; + + +/** + * controlP5 is a processing gui library. + * + * 2006-2015 by Andreas Schlegel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place, Suite 330, + * Boston, MA 02111-1307 USA + * + * @author Andreas Schlegel (http://www.sojamo.de) + * @modified ##date## + * @version ##version## + * + */ + + +import static main.java.src2.main.java.controlP5.controlP5.ControlP5.b; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import static main.java.src2.main.java.controlP5.controlP5.ControlP5.s; +import processing.core.PGraphics; + +public class ButtonBar extends Controller< ButtonBar > { + + public static int autoWidth = 69; + public static int autoHeight = 19; + + private final List< Map< String , Object >> items = new ArrayList< Map< String , Object >>( ); + + /** + * Convenience constructor to extend ButtonBar. + */ + public ButtonBar( ControlP5 theControlP5 , String theName ) { + this( theControlP5 , theControlP5.getDefaultTab( ) , theName , 0 , 0 , autoWidth , autoHeight ); + theControlP5.register( theControlP5.papplet , theName , this ); + } + + protected ButtonBar( ControlP5 theControlP5 , ControllerGroup< ? > theParent , String theName , float theX , float theY , int theWidth , int theHeight ) { + super( theControlP5 , theParent , theName , theX , theY , theWidth , theHeight ); + } + + @Override + @ControlP5.Invisible + public ButtonBar updateDisplayMode( int theMode ) { + return updateViewMode( theMode ); + } + + public void changeItem( String theItem , String theKey , Object theValue ) { + Map m = modifiableItem( theItem ); + if ( !m.equals( Collections.EMPTY_MAP ) ) { + m.put( theKey , theValue ); + } + } + + private Map modifiableItem( String theItem ) { + if ( theItem != null ) { + for ( Map< String , Object > o : items ) { + if ( theItem.equals( o.get( "name" ) ) ) { + return o; + } + } + } + return Collections.EMPTY_MAP; + } + + public Map getItem( String theItem ) { + return Collections.unmodifiableMap( modifiableItem( theItem ) ); + } + + @ControlP5.Invisible + public ButtonBar updateViewMode( int theMode ) { + _myDisplayMode = theMode; + switch ( theMode ) { + case ( DEFAULT ): + _myControllerView = new ButtonBarView( ); + break; + case ( IMAGE ): + break; + case ( CUSTOM ): + default: + break; + + } + return this; + } + + @Override + public void onClick( ) { + int index = hover( ); + if ( index > -1 ) { + for ( Map m : items ) { + m.put( "selected" , false ); + } + items.get( index ).put( "selected" , true ); + setValue( hover( ) ); + } + } + + public int hover( ) { + int w = getWidth( ) / ( items.isEmpty( ) ? 1 : items.size( ) ); + int h = getHeight( ); + for ( int i = 0 ; i < items.size( ) ; i++ ) { + if ( getPointer( ).x( ) >= i * w && getPointer( ).x( ) < ( i + 1 ) * w ) { + return i; + } + } + return -1; + } + + private class ButtonBarView implements ControllerView< ButtonBar > { + + public void display( PGraphics theGraphics , ButtonBar theController ) { + theGraphics.noStroke( ); + theGraphics.fill( color.getBackground( ) ); + theGraphics.rect( 0 , 0 , theController.getWidth( ) , theController.getHeight( ) ); + int index = hover( ); + int w = theController.getWidth( ) / ( items.isEmpty( ) ? 1 : items.size( ) ); + int h = theController.getHeight( ); + theGraphics.textFont( theController.getValueLabel( ).getFont( ).pfont ); + theGraphics.pushMatrix( ); + for ( int i = 0 ; i < items.size( ) ; i++ ) { + int c = ControlP5.b( items.get( i ).get( "selected" ) , false ) ? color.getActive( ) : ( isInside( ) && index == i ) ? isMousePressed ? color.getActive( ) : color.getForeground( ) : color.getBackground( ); + theGraphics.fill( c ); + theGraphics.rect( 0 , 0 , w , h ); + theGraphics.fill( theController.getValueLabel( ).getColor( ) ); + theController.getValueLabel( ).set( ControlP5.s( items.get( i ).get( "text" ) ) ).align( CENTER , CENTER ).draw( theGraphics , 0 , 0 , w , h ); + theGraphics.translate( w , 0 ); + } + theGraphics.popMatrix( ); + } + } + + private Map< String , Object > getDefaultItemMap( String theName , Object theValue ) { + Map< String , Object > item = new HashMap< String , Object >( ); + item.put( "name" , theName ); + item.put( "text" , theName ); + item.put( "value" , theValue ); + item.put( "color" , getColor( ) ); + item.put( "view" , new CDrawable( ) { + @Override + public void draw( PGraphics theGraphics ) { + } + + } ); + item.put( "selected" , false ); + return item; + } + + public ButtonBar addItem( String theName , Object theValue ) { + Map< String , Object > item = getDefaultItemMap( theName , theValue ); + items.add( item ); + return this; + } + + public ButtonBar addItems( String[] theItems ) { + addItems( Arrays.asList( theItems ) ); + return this; + } + + public ButtonBar addItems( List< String > theItems ) { + for ( int i = 0 ; i < theItems.size( ) ; i++ ) { + addItem(theItems.get( i ), i ); + } + return this; + } + + public ButtonBar addItems( Map< String , Object > theItems ) { + for ( Map.Entry< String , Object > item : theItems.entrySet( ) ) { + addItem( item.getKey( ) , item.getValue( ) ); + } + return this; + } + + public ButtonBar setItems( String[] theItems ) { + setItems( Arrays.asList( theItems ) ); + return this; + } + + public ButtonBar setItems( List< String > theItems ) { + items.clear( ); + return addItems( theItems ); + } + + public ButtonBar setItems( Map< String , Object > theItems ) { + items.clear( ); + return addItems( theItems ); + } + + public ButtonBar removeItems( List< String > theItems ) { + for ( String s : theItems ) { + removeItem( s ); + } + return this; + } + + public ButtonBar removeItem( String theName ) { + if ( theName != null ) { + + List l = new ArrayList( ); + for ( Map m : items ) { + if ( theName.equals( m.get( "name" ) ) ) { + l.add( m ); + } + } + items.removeAll( l ); + } + return this; + } + + private Map< String , Object > getItem( int theIndex ) { + return items.get( theIndex ); + } + + public List getItems( ) { + return Collections.unmodifiableList( items ); + } + + public ButtonBar clear( ) { + for ( int i = items.size( ) - 1 ; i >= 0 ; i-- ) { + items.remove( i ); + } + items.clear( ); + return this; + } + +} diff --git a/controlP5/CColor.java b/controlP5/CColor.java new file mode 100755 index 0000000..b2e4ee7 --- /dev/null +++ b/controlP5/CColor.java @@ -0,0 +1,203 @@ +package main.java.src2.main.java.controlP5.controlP5; + +/** + * controlP5 is a processing gui library. + * + * 2006-2015 by Andreas Schlegel + * + * This library is free software; you can redistribute it and/or modify it under + * the terms of the GNU Lesser General Public License as published by the Free + * Software Foundation; either version 2.1 of the License, or (at your option) + * any later version. This library is distributed in the hope that it will be + * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library; if not, write to the Free Software Foundation, Inc., + * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * @author Andreas Schlegel (http://www.sojamo.de) + * @modified ##date## + * @version ##version## + * + */ + +import java.io.Serializable; + +/** + * A CColor instance contains the colors of a controller including the foreground-, background-, + * active-, captionlabel- and valuelabel-colors. + */ + +@SuppressWarnings( "serial" ) +public class CColor implements Serializable { + + private int colorBackground = 0xff003652; + private int colorForeground = 0xff00698c; + private int colorActive = 0xff08a2cf; // 0699C4; + private int colorCaptionLabel = 0xffffffff; + private int colorValueLabel = 0xffffffff; + private int colorBackgroundAlpha = 0xff; + private int colorForegroundAlpha = 0xff; + private int colorActiveAlpha = 0xff; // 0699C4; + private int colorCaptionLabelAlpha = 0xff; + private int colorValueLabelAlpha = 0xff; + + private final int alpha = 0xff; + private final int maskA = 0x00ffffff; + int maskR = 0xff00ffff; + int maskG = 0xffff00ff; + int maskB = 0xffffff00; + + protected CColor set( CColor theColor ) { + colorBackground = theColor.colorBackground; + colorForeground = theColor.colorForeground; + colorActive = theColor.colorActive; + colorCaptionLabel = theColor.colorCaptionLabel; + colorValueLabel = theColor.colorValueLabel; + colorBackgroundAlpha = theColor.colorBackgroundAlpha; + colorForegroundAlpha = theColor.colorForegroundAlpha; + colorActiveAlpha = theColor.colorActiveAlpha; + colorCaptionLabelAlpha = theColor.colorCaptionLabelAlpha; + colorValueLabelAlpha = theColor.colorValueLabelAlpha; + return this; + } + + protected CColor copyTo( ControllerInterface< ? > theControl ) { + theControl.setColorBackground( colorBackground ); + theControl.setColorForeground( colorForeground ); + theControl.setColorActive( colorActive ); + theControl.setColorLabel( colorCaptionLabel ); + return this; + } + + /** + * @exclude {@inheritDoc} + */ + public String toString( ) { + + return ( "bg (" + ( colorBackground >> 16 & 0xff ) + "," + ( colorBackground >> 8 & 0xff ) + "," + ( colorBackground >> 0 & 0xff ) + "), " + "fg (" + ( colorForeground >> 16 & 0xff ) + "," + ( colorForeground >> 8 & 0xff ) + "," + + ( colorForeground >> 0 & 0xff ) + "), " + "active (" + ( colorActive >> 16 & 0xff ) + "," + ( colorActive >> 8 & 0xff ) + "," + ( colorActive >> 0 & 0xff ) + "), " + "captionlabel (" + ( colorCaptionLabel >> 16 & 0xff ) + "," + + ( colorCaptionLabel >> 8 & 0xff ) + "," + ( colorCaptionLabel >> 0 & 0xff ) + "), " + "valuelabel (" + ( colorValueLabel >> 16 & 0xff ) + "," + ( colorValueLabel >> 8 & 0xff ) + "," + ( colorValueLabel >> 0 & 0xff ) + ")" ); + } + + public CColor( ) { + set( ControlP5.getColor( ) ); + } + + public CColor( int cfg , int cbg , int cactive , int ccl , int cvl ) { + setForeground( cfg ); + setBackground( cbg ); + setActive( cactive ); + setCaptionLabel( ccl ); + setValueLabel( cvl ); + } + + public CColor( CColor theColor ) { + set( theColor ); + } + + /** + * @exclude + * @param theAlpha + */ + public CColor setAlpha( int theAlpha ) { + System.out.println( "main.java.src2.main.java.controlP5.controlp5.CColor.setAlpha: setting alpha values disabled for this version of controlP5." ); + return this; + } + + public CColor setForeground( int theColor ) { + if ( ( theColor & 0xff000000 ) == 0 ) { + colorForeground = 0xff000000; + } else { + colorForeground = theColor; + } + return this; + } + + public CColor setBackground( int theColor ) { + if ( ( theColor & 0xff000000 ) == 0 ) { + colorBackground = 0xff000000; + } else { + colorBackground = theColor; + } + return this; + } + + public CColor setActive( int theColor ) { + if ( ( theColor & 0xff000000 ) == 0 ) { + colorActive = 0xff000000; + } else { + colorActive = theColor; + } + return this; + } + + public CColor setCaptionLabel( int theColor ) { + if ( ( theColor & 0xff000000 ) == 0 ) { + colorCaptionLabel = 0xff000000; + } else { + colorCaptionLabel = theColor; + } + return this; + } + + public CColor setValueLabel( int theColor ) { + if ( ( theColor & 0xff000000 ) == 0 ) { + colorValueLabel = 0xff000000; + } else { + colorValueLabel = theColor; + } + return this; + } + + public int getAlpha( ) { + return alpha; + } + + public int getForeground( ) { + return colorForeground; + } + + public int getBackground( ) { + return colorBackground; + } + + public int getActive( ) { + return colorActive; + } + + public int getCaptionLabel( ) { + return colorCaptionLabel; + } + + public int getValueLabel( ) { + return colorValueLabel; + } + + /** + * @exclude {@inheritDoc} + */ + public int hashCode( ) { + int result = 23; + result = 37 * result + colorBackground; + result = 37 * result + colorForeground; + result = 37 * result + colorActive; + return result; + } + + /** + * @exclude {@inheritDoc} + */ + public boolean equals( Object o ) { + if ( this == o ) { + return true; + } + if ( o == null || getClass( ) != o.getClass( ) ) { + return false; + } + CColor cc = ( CColor ) o; + return colorBackground == cc.colorBackground && colorForeground == cc.colorForeground && colorActive == cc.colorActive && colorCaptionLabel == cc.colorCaptionLabel && colorValueLabel == cc.colorValueLabel; + } +} diff --git a/controlP5/CDrawable.java b/controlP5/CDrawable.java new file mode 100755 index 0000000..c7900bb --- /dev/null +++ b/controlP5/CDrawable.java @@ -0,0 +1,37 @@ +package main.java.src2.main.java.controlP5.controlP5; + +/** + * controlP5 is a processing gui library. + * + * 2006-2015 by Andreas Schlegel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place, Suite 330, + * Boston, MA 02111-1307 USA + * + * @author Andreas Schlegel (http://www.sojamo.de) + * @modified ##date## + * @version ##version## + * + */ + +import processing.core.PGraphics; + +/** + * The CDrawable interface is used to draw controllers, primarily for internal use. + */ +public interface CDrawable { + + void draw( PGraphics theGraphics ); + +} diff --git a/controlP5/CP.java b/controlP5/CP.java new file mode 100755 index 0000000..9525014 --- /dev/null +++ b/controlP5/CP.java @@ -0,0 +1,377 @@ +package main.java.src2.main.java.controlP5.controlP5; + +/** + * controlP5 is a processing gui library. + * + * 2006-2015 by Andreas Schlegel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place, Suite 330, + * Boston, MA 02111-1307 USA + * + * @author Andreas Schlegel (http://www.sojamo.de) + * @modified ##date## + * @version ##version## + * + */ + +import java.io.UnsupportedEncodingException; +import java.lang.reflect.Array; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.text.CharacterIterator; +import java.text.StringCharacterIterator; +import java.util.List; + +public class CP { + + /** + * borrowed from http://www.javapractices.com/Topic96.cjp + * + * + * @param aURLFragment String + * @return String + */ + static public String forURL( String aURLFragment ) { + String result = null; + try { + result = URLEncoder.encode( aURLFragment , "UTF-8" ); + } catch ( UnsupportedEncodingException ex ) { + throw new RuntimeException( "UTF-8 not supported" , ex ); + } + return result; + } + + /** + * borrowed from http://www.javapractices.com/Topic96.cjp + * + * @param aTagFragment String + * @return String + */ + static public String forHTMLTag( String aTagFragment ) { + final StringBuffer result = new StringBuffer( ); + + final StringCharacterIterator iterator = new StringCharacterIterator( aTagFragment ); + char character = iterator.current( ); + while ( character != CharacterIterator.DONE ) { + if ( character == '<' ) { + result.append( "<" ); + } else if ( character == '>' ) { + result.append( ">" ); + } else if ( character == '\"' ) { + result.append( """ ); + } else if ( character == '\'' ) { + result.append( "'" ); + } else if ( character == '\\' ) { + result.append( "\" ); + } else if ( character == '&' ) { + result.append( "&" ); + } else { + // the char is not a special one + // add it to the result as is + result.append( character ); + } + character = iterator.next( ); + } + return result.toString( ); + } + + /** + * http://processing.org/discourse/yabb_beta/YaBB.cgi?board=Programs;action= + * display;num=1159828167;start=0#0 + * + * @param string String + * @return String + */ + String URLEncode( String string ) { + String output = ""; + byte[] input = string.getBytes(StandardCharsets.UTF_8); + for ( int i = 0 ; i < input.length ; i++ ) { + if ( input[ i ] < 0 ) { + // output += ('%' + hex(input[i])); // see hex method in + // processing + } else if ( input[ i ] == 32 ) { + output += '+'; + } else { + output += ( char ) ( input[ i ] ); + } + } + + return output; + } + + static public String replace( String theSourceString , String theSearchForString , String theReplaceString ) { + if ( theSourceString.length( ) < 1 ) { + return ""; + } + int p = 0; + + while ( p < theSourceString.length( ) && ( p = theSourceString.indexOf( theSearchForString , p ) ) >= 0 ) { + theSourceString = theSourceString.substring( 0 , p ) + theReplaceString + theSourceString.substring( p + theSearchForString.length( )); + p += theReplaceString.length( ); + } + return theSourceString; + } + + /** + * convert a hex number into an int + * + * @param theHex + * @return + */ + static public int parseHex( String theHex ) { + int myLen = theHex.length( ); + int a , r , b , g; + switch ( myLen ) { + case ( 8 ): + break; + case ( 6 ): + theHex = "ff" + theHex; + break; + default: + theHex = "ff000000"; + break; + } + a = (Integer.valueOf(Integer.parseInt(theHex.substring(0, 2), 16))).intValue( ); + r = (Integer.valueOf(Integer.parseInt(theHex.substring(2, 4), 16))).intValue( ); + g = (Integer.valueOf(Integer.parseInt(theHex.substring(4, 6), 16))).intValue( ); + b = (Integer.valueOf(Integer.parseInt(theHex.substring(6, 8), 16))).intValue( ); + return ( a << 24 | r << 16 | g << 8 | b ); + } + + static public String intToString( int theInt ) { + int a = ( ( theInt >> 24 ) & 0xff ); + int r = ( ( theInt >> 16 ) & 0xff ); + int g = ( ( theInt >> 8 ) & 0xff ); + int b = ( ( theInt >> 0 ) & 0xff ); + String sa = ( ( Integer.toHexString( a ) ).length( ) == 1 ) ? "0" + Integer.toHexString( a ) : Integer.toHexString( a ); + String sr = ( ( Integer.toHexString( r ) ).length( ) == 1 ) ? "0" + Integer.toHexString( r ) : Integer.toHexString( r ); + String sg = ( ( Integer.toHexString( g ) ).length( ) == 1 ) ? "0" + Integer.toHexString( g ) : Integer.toHexString( g ); + String sb = ( ( Integer.toHexString( b ) ).length( ) == 1 ) ? "0" + Integer.toHexString( b ) : Integer.toHexString( b ); + return sa + sr + sg + sb; + } + + /** + * @deprecated + */ + @Deprecated protected boolean save( ControlP5 theControlP5 , String theFilePath ) { + ControlP5.logger( ).info( "Saving ControlP5 settings in XML format has been removed, have a look at controlP5's properties instead." ); + return false; + } + + /** + * * Convenience method for producing a simple textual representation of an array. + * + *

+ * The format of the returned String is the same as + * AbstractCollection.toString: + *

    + *
  • non-empty array: [blah, blah] + *
  • empty array: [] + *
  • null array: null + *
+ * + * + * aArray is a possibly-null array whose elements are primitives or objects; arrays + * of arrays are also valid, in which case aArray is rendered in a nested, + * recursive fashion. + * + * @author Jerome Lacoste + * @author www.javapractices.com + */ + static public String arrayToString( Object aArray ) { + if ( aArray == null ) { + return fNULL; + } + + checkObjectIsArray( aArray ); + + StringBuilder result = new StringBuilder( fSTART_CHAR ); + int length = Array.getLength( aArray ); + for ( int idx = 0 ; idx < length ; ++idx ) { + Object item = Array.get( aArray , idx ); + if ( isNonNullArray( item ) ) { + // recursive call! + result.append( arrayToString( item ) ); + } else { + result.append( item ); + } + if ( !isLastItem( idx , length ) ) { + result.append( fSEPARATOR ); + } + } + result.append( fEND_CHAR ); + return result.toString( ); + } + + // PRIVATE // + private static final String fSTART_CHAR = "["; + + private static final String fEND_CHAR = "]"; + + private static final String fSEPARATOR = ", "; + + private static final String fNULL = "null"; + + private static void checkObjectIsArray( Object aArray ) { + if ( !aArray.getClass( ).isArray( ) ) { + throw new IllegalArgumentException( "Object is not an array." ); + } + } + + private static boolean isNonNullArray( Object aItem ) { + return aItem != null && aItem.getClass( ).isArray( ); + } + + private static boolean isLastItem( int aIdx , int aLength ) { + return ( aIdx == aLength - 1 ); + } + + protected static String formatGetClass( Class< ? > c ) { + if ( c == null ) + return null; + final String pattern = "class "; + return c.toString( ).startsWith( pattern ) ? c.toString( ).substring( pattern.length( ) ) : c.toString( ); + } + + + static public boolean inside( int[] theRect , float theX , float theY ) { + if ( theRect.length == 4 ) { + return ( theX > theRect[ 0 ] && theX < theRect[ 2 ] && theY > theRect[ 1 ] && theY < theRect[ 3 ] ); + } else { + return false; + } + } + + /* Base64 static methods to encode and decode + * bytes into a String and back + * + * from + * http://examples.oreilly.com/javacrypt/files/oreilly/jonathan/util/ + * http://oreilly.com/catalog/javacrypt/chapter/ch06.html */ + + static public String encodeBase64( byte[] raw ) { + StringBuffer encoded = new StringBuffer( ); + for ( int i = 0 ; i < raw.length ; i += 3 ) { + encoded.append( encodeBlock( raw , i ) ); + } + return encoded.toString( ); + } + + protected static char[] encodeBlock( byte[] raw , int offset ) { + int block = 0; + int slack = raw.length - offset - 1; + int end = ( slack >= 2 ) ? 2 : slack; + for ( int i = 0 ; i <= end ; i++ ) { + byte b = raw[ offset + i ]; + int neuter = ( b < 0 ) ? b + 256 : b; + block += neuter << ( 8 * ( 2 - i ) ); + } + char[] base64 = new char[ 4 ]; + for ( int i = 0 ; i < 4 ; i++ ) { + int sixbit = ( block >>> ( 6 * ( 3 - i ) ) ) & 0x3f; + base64[ i ] = getBase64Char( sixbit ); + } + if ( slack < 1 ) + base64[ 2 ] = '='; + if ( slack < 2 ) + base64[ 3 ] = '='; + return base64; + } + + static char getBase64Char( int sixBit ) { + if ( sixBit >= 0 && sixBit <= 25 ) + return ( char ) ( 'A' + sixBit ); + if ( sixBit >= 26 && sixBit <= 51 ) + return ( char ) ( 'a' + ( sixBit - 26 ) ); + if ( sixBit >= 52 && sixBit <= 61 ) + return ( char ) ( '0' + ( sixBit - 52 ) ); + if ( sixBit == 62 ) + return '+'; + if ( sixBit == 63 ) + return '/'; + return '?'; + } + + static public byte[] decodeBase64( String base64 ) { + int pad = 0; + for ( int i = base64.length( ) - 1 ; base64.charAt( i ) == '=' ; i-- ) + pad++; + int length = base64.length( ) * 6 / 8 - pad; + byte[] raw = new byte[ length ]; + int rawIndex = 0; + for ( int i = 0 ; i < base64.length( ) ; i += 4 ) { + int block = ( getBase64Value( base64.charAt( i ) ) << 18 ) + ( getBase64Value( base64.charAt( i + 1 ) ) << 12 ) + ( getBase64Value( base64.charAt( i + 2 ) ) << 6 ) + ( getBase64Value( base64.charAt( i + 3 ) ) ); + for ( int j = 0 ; j < 3 && rawIndex + j < raw.length ; j++ ) + raw[ rawIndex + j ] = ( byte ) ( ( block >> ( 8 * ( 2 - j ) ) ) & 0xff ); + rawIndex += 3; + } + return raw; + } + + static int getBase64Value( char c ) { + if ( c >= 'A' && c <= 'Z' ) + return c - 'A'; + if ( c >= 'a' && c <= 'z' ) + return c - 'a' + 26; + if ( c >= '0' && c <= '9' ) + return c - '0' + 52; + if ( c == '+' ) + return 62; + if ( c == '/' ) + return 63; + if ( c == '=' ) + return 0; + return -1; + } + + static public int getBit( int theByte , int theIndex ) { + int bitmask = 1 << theIndex; + return ( ( theByte & bitmask ) > 0 ) ? 1 : 0; + } + + static public byte setHigh( byte theByte , int theIndex ) { + return ( byte ) ( theByte | ( 1 << theIndex ) ); + } + + static public byte setLow( byte theByte , int theIndex ) { + return ( byte ) ( theByte & ~ ( 1 << theIndex ) ); + } + + static public byte[] intToByteArray( int a ) { + byte[] ret = new byte[ 2 ]; + ret[ 1 ] = ( byte ) ( a & 0xFF ); + ret[ 0 ] = ( byte ) ( ( a >> 8 ) & 0xFF ); + //ret[0] = (byte) ((a >> 16) & 0xFF); + //ret[0] = (byte) ((a >> 24) & 0xFF); + return ret; + } + + static public int byteArrayToInt( byte[] b ) { + int value = 0; + for ( int i = 0 ; i < 2 ; i++ ) { + int shift = ( 2 - 1 - i ) * 8; + value += ( b[ i ] & 0x00FF ) << shift; + } + return value; + } + + static String join( List< String > list , String delimiter ) { + StringBuilder b = new StringBuilder( ); + for ( String item : list ) { + b.append( item ).append( delimiter ); + } + return b.toString( ); + } + +} diff --git a/controlP5/CallbackEvent.java b/controlP5/CallbackEvent.java new file mode 100755 index 0000000..ab087bc --- /dev/null +++ b/controlP5/CallbackEvent.java @@ -0,0 +1,65 @@ +package main.java.src2.main.java.controlP5.controlP5; + +/** + * controlP5 is a processing gui library. + * + * 2006-2015 by Andreas Schlegel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place, Suite 330, + * Boston, MA 02111-1307 USA + * + * @author Andreas Schlegel (http://www.sojamo.de) + * @modified ##date## + * @version ##version## + * + */ + +/** + *

+ * A CallbackEvent is send when a controller action such as enter, leave, press, etc has occurs. + * + * @example use/ControlP5callback + */ +public class CallbackEvent { + + private final int _myAction; + + private final Controller< ? > _myController; + + CallbackEvent( Controller< ? > theController , int theAction ) { + _myController = theController; + _myAction = theAction; + } + + /** + * + * @return int Returns an int value of either one of the following static variables + * ControlP5.ACTION_PRESS, ControlP5.ACTION_ENTER, ControlP5.ACTION_LEAVE, + * ControlP5.ACTION_RELEASE, ControlP5.ACTION_RELEASEDOUTSIDE, + * ControlP5.ACTION_BROADCAST + */ + public int getAction( ) { + return _myAction; + } + + /** + * Returns the Controller that triggered the Callback Event. + * + * @return Controller + */ + public Controller< ? > getController( ) { + return _myController; + } + +} diff --git a/controlP5/CallbackListener.java b/controlP5/CallbackListener.java new file mode 100755 index 0000000..be2235a --- /dev/null +++ b/controlP5/CallbackListener.java @@ -0,0 +1,41 @@ +package main.java.src2.main.java.controlP5.controlP5; + +/** + * controlP5 is a processing gui library. + * + * 2006-2015 by Andreas Schlegel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place, Suite 330, + * Boston, MA 02111-1307 USA + * + * @author Andreas Schlegel (http://www.sojamo.de) + * @modified ##date## + * @version ##version## + * + */ + +/** + *

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

+ * + * @example use/ControlP5callback + * @see ControlP5#addCallback(CallbackListener) + */ +public interface CallbackListener { + + void controlEvent( CallbackEvent theEvent ); + +} diff --git a/controlP5/Canvas.java b/controlP5/Canvas.java new file mode 100755 index 0000000..c40d1f6 --- /dev/null +++ b/controlP5/Canvas.java @@ -0,0 +1,124 @@ +package main.java.src2.main.java.controlP5.controlP5; + +/** + * controlP5 is a processing gui library. + * + * 2006-2015 by Andreas Schlegel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place, Suite 330, + * Boston, MA 02111-1307 USA + * + * @author Andreas Schlegel (http://www.sojamo.de) + * @modified ##date## + * @version ##version## + * + */ + +import processing.core.PApplet; +import processing.core.PGraphics; + +/** + * Use a Canvas to draw custom graphics into a control + * window or the default sketch window. + * + * The Canvas is an abstract class and must be extended by + * your custom Canvas class, see the ControlP5canvas example + * for details. + * + * @example controllers/ControlP5canvas + * + */ + +public abstract class Canvas { + + protected ControlWindow _myControlWindow; + + public final static int PRE = 0; + + public final static int POST = 1; + + protected int _myMode = PRE; + + public void setup( PGraphics theGraphics ) { + } + + // TODO should be called from within ControlWindow when + // calling draw(PGraphics) + public void update( PApplet theApplet ) { + } + + /** + * controlWindowCanvas is an abstract class and + * therefore needs to be extended by your class. + * draw(PApplet theApplet) is the only method that needs + * to be overwritten. + */ + public abstract void draw( PGraphics theGraphics ); + + /** + * move a canvas to another controlWindow + * + * @param theControlWindow + */ + public void moveTo( ControlWindow theControlWindow ) { + if ( _myControlWindow != null ) { + _myControlWindow.removeCanvas( this ); + } + theControlWindow.addCanvas( this ); + } + + /** + * get the drawing mode of a Canvas. this can be PRE or + * POST. + * + * @return + */ + public final int mode( ) { + return _myMode; + } + + /** + * set the drawing mode to PRE. PRE is the default. + */ + public final void pre( ) { + setMode( PRE ); + } + + /** + * set the drawing mode to POST. + */ + public final void post( ) { + setMode( POST ); + } + + /** + * + * @param theMode + */ + public final void setMode( int theMode ) { + if ( theMode == PRE ) { + _myMode = PRE; + } else { + _myMode = POST; + } + } + + protected final void setControlWindow( ControlWindow theControlWindow ) { + _myControlWindow = theControlWindow; + } + + public final ControlWindow window( ) { + return _myControlWindow; + } +} diff --git a/controlP5/Chart.java b/controlP5/Chart.java new file mode 100755 index 0000000..c303d08 --- /dev/null +++ b/controlP5/Chart.java @@ -0,0 +1,561 @@ +package main.java.src2.main.java.controlP5.controlP5; + +/** + * controlP5 is a processing gui library. + * + * 2006-2015 by Andreas Schlegel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place, Suite 330, + * Boston, MA 02111-1307 USA + * + * @author Andreas Schlegel (http://www.sojamo.de) + * @modified ##date## + * @version ##version## + * + */ + +import java.util.Iterator; +import java.util.LinkedHashMap; + +import processing.core.PApplet; +import processing.core.PGraphics; + +/** + * Use charts to display float array data as line chart, yet experimental, but see the + * ControlP5chart example for more details. + * + * @example controllers/ControlP5chart + */ +public class Chart extends Controller< Chart > { + + public final static int LINE = 0; + public final static int BAR = 1; + public final static int BAR_CENTERED = 2; + public final static int HISTOGRAM = 3; + public final static int PIE = 4; + public final static int AREA = 5; + + protected final LinkedHashMap< String , ChartDataSet > _myDataSet; + protected float resolution = 1; + protected float strokeWeight = 1; + protected float _myMin = 0; + protected float _myMax = 1; + + /** + * Convenience constructor to extend Chart. + * + * @example use/ControlP5extendController + * @param theControlP5 + * @param theName + */ + public Chart( ControlP5 theControlP5 , String theName ) { + this( theControlP5 , theControlP5.getDefaultTab( ) , theName , 0 , 0 , 200 , 100 ); + theControlP5.register( theControlP5.papplet , theName , this ); + } + + protected Chart( ControlP5 theControlP5 , ControllerGroup< ? > theParent , String theName , float theX , float theY , int theWidth , int theHeight ) { + super( theControlP5 , theParent , theName , theX , theY , theWidth , theHeight ); + setRange( 0 , theHeight ); + _myDataSet = new LinkedHashMap< String , ChartDataSet >( ); + getCaptionLabel( ).align( LEFT, BOTTOM_OUTSIDE ).paddingX = 0; + + } + + public Chart setRange( float theMin , float theMax ) { + _myMin = theMin; + _myMax = theMax; + return this; + } + + public Chart setColors( String theSetIndex , int ... theColors ) { + getDataSet( ).get( theSetIndex ).setColors( theColors ); + return this; + } + + public Chart addData( ChartData theItem ) { + return addData( getFirstDataSetIndex( ) , theItem ); + } + + private String getFirstDataSetIndex( ) { + return getDataSet( ).keySet( ).iterator( ).next( ); + } + + private String getLastDataSetIndex( ) { + Iterator< String > it = getDataSet( ).keySet( ).iterator( ); + String last = null; + while ( it.hasNext( ) ) { + last = it.next( ); + } + return last; + } + + public Chart addData( String theSetIndex , ChartData theItem ) { + getDataSet( theSetIndex ).add( theItem ); + return this; + } + + public Chart addData( float theValue ) { + ChartData cdi = new ChartData( theValue ); + getDataSet( getFirstDataSetIndex( ) ).add( cdi ); + return this; + } + + public Chart addData( String theSetIndex , float theValue ) { + ChartData cdi = new ChartData( theValue ); + getDataSet( theSetIndex ).add( cdi ); + return this; + } + + public Chart addData( ChartDataSet theChartData , float theValue ) { + ChartData cdi = new ChartData( theValue ); + theChartData.add( cdi ); + return this; + } + + // array operations see syntax + // http://www.w3schools.com/jsref/jsref_obj_array.asp + + /** + * adds a new float at the beginning of the data set. + */ + public Chart unshift( float theValue ) { + return unshift( getFirstDataSetIndex( ) , theValue ); + } + + public Chart unshift( String theSetIndex , float theValue ) { + if ( getDataSet( theSetIndex ).size( ) > ( getWidth() / resolution ) ) { + removeLast( theSetIndex ); + } + return addFirst( theSetIndex , theValue ); + } + + public Chart push( float theValue ) { + return push( getFirstDataSetIndex( ) , theValue ); + } + + public Chart push( String theSetIndex , float theValue ) { + if ( getDataSet( theSetIndex ).size( ) > ( getWidth() / resolution ) ) { + removeFirst( theSetIndex ); + } + return addLast( theSetIndex , theValue ); + } + + public Chart addFirst( float theValue ) { + return addFirst( getFirstDataSetIndex( ) , theValue ); + } + + public Chart addFirst( String theSetIndex , float theValue ) { + ChartData cdi = new ChartData( theValue ); + getDataSet( theSetIndex ).add( 0 , cdi ); + return this; + } + + public Chart addLast( float theValue ) { + return addLast( getFirstDataSetIndex( ) , theValue ); + } + + public Chart addLast( String theSetIndex , float theValue ) { + ChartData cdi = new ChartData( theValue ); + getDataSet( theSetIndex ).add( cdi ); + return this; + } + + public Chart removeLast( ) { + return removeLast( getFirstDataSetIndex( ) ); + } + + public Chart removeLast( String theSetIndex ) { + return removeData( theSetIndex , getDataSet( theSetIndex ).size( ) - 1 ); + } + + public Chart removeFirst( ) { + return removeFirst( getFirstDataSetIndex( ) ); + } + + public Chart removeFirst( String theSetIndex ) { + return removeData( theSetIndex , 0 ); + } + + public Chart removeData( ChartData theItem ) { + removeData( getFirstDataSetIndex( ) , theItem ); + return this; + } + + public Chart removeData( String theSetIndex , ChartData theItem ) { + getDataSet( theSetIndex ).remove( theItem ); + return this; + } + + public Chart removeData( int theItemIndex ) { + removeData( getFirstDataSetIndex( ) , theItemIndex ); + return this; + } + + public Chart removeData( String theSetIndex , int theItemIndex ) { + if ( getDataSet( theSetIndex ).size( ) < 1 ) { + return this; + } + getDataSet( theSetIndex ).remove( theItemIndex ); + return this; + } + + public Chart setData( int theItemIndex , ChartData theItem ) { + getDataSet( getFirstDataSetIndex( ) ).set( theItemIndex , theItem ); + return this; + } + + public Chart setData( String theSetItem , int theItemIndex , ChartData theItem ) { + getDataSet( theSetItem ).set( theItemIndex , theItem ); + return this; + } + + public Chart addDataSet( String theName ) { + getDataSet( ).put( theName , new ChartDataSet( theName ) ); + return this; + } + + public Chart setDataSet( ChartDataSet theItems ) { + setDataSet( getFirstDataSetIndex( ) , theItems ); + return this; + } + + public Chart setDataSet( String theSetIndex , ChartDataSet theChartData ) { + getDataSet( ).put( theSetIndex , theChartData ); + return this; + } + + public Chart removeDataSet( String theIndex ) { + getDataSet( ).remove( theIndex ); + return this; + } + + public Chart setData( float ... theValues ) { + setData( getFirstDataSetIndex( ) , theValues ); + return this; + } + + public Chart setData( String theSetIndex , float ... theValues ) { + if ( getDataSet( ).get( theSetIndex ).size( ) != theValues.length ) { + getDataSet( ).get( theSetIndex ).clear( ); + for ( int i = 0 ; i < theValues.length ; i++ ) { + getDataSet( ).get( theSetIndex ).add( new ChartData( 0 ) ); + } + } + int n = 0; + resolution = ( float ) getWidth() / ( getDataSet( ).get( theSetIndex ).size( ) - 1 ); + for ( float f : theValues ) { + getDataSet( ).get( theSetIndex ).get( n++ ).setValue( f ); + } + return this; + } + + public Chart updateData( float ... theValues ) { + return setData( theValues ); + } + + public Chart updateData( String theSetIndex , float ... theValues ) { + return setData( theSetIndex , theValues ); + } + + public LinkedHashMap< String , ChartDataSet > getDataSet( ) { + return _myDataSet; + } + + public ChartDataSet getDataSet( String theIndex ) { + return getDataSet( ).get( theIndex ); + } + + public float[] getValuesFrom( String theIndex ) { + return getDataSet( theIndex ).getValues( ); + } + + public ChartData getData( String theIndex , int theItemIndex ) { + return getDataSet( theIndex ).get( theItemIndex ); + } + + public int size( ) { + return getDataSet( ).size( ); + } + + @Override + public void onEnter( ) { + } + + @Override + public void onLeave( ) { + } + + @Override + public Chart setValue( float theValue ) { + // TODO Auto-generated method stub + return this; + } + + public Chart setStrokeWeight( float theWeight ) { + strokeWeight = theWeight; + for ( ChartDataSet c : getDataSet( ).values( ) ) { + c.setStrokeWeight( theWeight ); + } + return this; + } + + public float getStrokeWeight( ) { + return strokeWeight; + } + + /** + * ? + * + * @param theValue + * @return + */ + public Chart setResolution( int theValue ) { + resolution = theValue; + return this; + } + + public int getResolution( ) { + return ( int ) resolution; + } + + /** + * @exclude + */ + @Override + @ControlP5.Invisible + public Chart updateDisplayMode( int theMode ) { + return updateViewMode( theMode ); + } + + /** + * @exclude + */ + @ControlP5.Invisible + public Chart updateViewMode( int theMode ) { + _myDisplayMode = theMode; + switch ( theMode ) { + case ( DEFAULT ): + _myControllerView = new ChartViewPie( ); + break; + case ( IMAGE ): + // _myDisplay = new ChartImageDisplay(); + break; + case ( SPRITE ): + // _myDisplay = new ChartSpriteDisplay(); + break; + case ( CUSTOM ): + default: + break; + } + return this; + } + + public class ChartViewBar implements ControllerView< Chart > { + + public void display( PGraphics theGraphics , Chart theController ) { + theGraphics.pushStyle( ); + theGraphics.fill( getColor( ).getBackground( ) ); + theGraphics.rect( 0 , 0 , getWidth( ) , getHeight( ) ); + theGraphics.noStroke( ); + + Iterator< String > it = getDataSet( ).keySet( ).iterator( ); + String index = null; + float o = 0; + while ( it.hasNext( ) ) { + index = it.next( ); + float s = getDataSet( index ).size( ); + for ( int i = 0 ; i < s ; i++ ) { + theGraphics.fill( getDataSet( index ).getColor( i ) ); + float ww = ( ( getWidth() / s ) ); + float hh = PApplet.map( getDataSet( index ).get( i ).getValue( ) , _myMin , _myMax , 0 , getHeight( ) ); + theGraphics.rect( o + i * ww , getHeight( ) , ( ww / getDataSet( ).size( ) ) , -PApplet.min( getHeight( ) , PApplet.max( 0 , hh ) ) ); + } + o += ( ( getWidth() / s ) ) / getDataSet( ).size( ); + } + theGraphics.popStyle( ); + } + } + + public class ChartViewBarCentered implements ControllerView< Chart > { + + public void display( PGraphics theGraphics , Chart theController ) { + theGraphics.pushStyle( ); + theGraphics.fill( getColor( ).getBackground( ) ); + theGraphics.rect( 0 , 0 , getWidth( ) , getHeight( ) ); + theGraphics.noStroke( ); + + Iterator< String > it = getDataSet( ).keySet( ).iterator( ); + String index = null; + float o = 0; + int n = 4; + int off = ( getDataSet( ).size( ) - 1 ) * n; + while ( it.hasNext( ) ) { + index = it.next( ); + int s = getDataSet( index ).size( ); + float step = ( float ) getWidth() / ( float ) ( s ); + float ww = step - ( getWidth() % step ); + ww -= 1; + ww = PApplet.max( 1 , ww ); + + for ( int i = 0 ; i < s ; i++ ) { + theGraphics.fill( getDataSet( index ).getColor( i ) ); + ww = ( ( getWidth() / s ) * 0.5f ); + float hh = PApplet.map( getDataSet( index ).get( i ).getValue( ) , _myMin , _myMax , 0 , getHeight( ) ); + theGraphics.rect( -off / 2 + o + i * ( ( getWidth() / s ) ) + ww / 2 , getHeight( ) , ww , -PApplet.min( getHeight( ) , PApplet.max( 0 , hh ) ) ); + } + o += n; + } + theGraphics.popStyle( ); + } + } + + public class ChartViewLine implements ControllerView< Chart > { + + public void display( PGraphics theGraphics , Chart theController ) { + + theGraphics.pushStyle( ); + theGraphics.fill( getColor( ).getBackground( ) ); + theGraphics.rect( 0 , 0 , getWidth( ) , getHeight( ) ); + theGraphics.noFill( ); + Iterator< String > it = getDataSet( ).keySet( ).iterator( ); + String index = null; + while ( it.hasNext( ) ) { + index = it.next( ); + theGraphics.stroke( getDataSet( index ).getColor( 0 ) ); + theGraphics.strokeWeight( getDataSet( index ).getStrokeWeight( ) ); + + theGraphics.beginShape( ); + float res = ( ( float ) getWidth( ) ) / ( getDataSet( index ).size( ) - 1 ); + for ( int i = 0 ; i < getDataSet( index ).size( ) ; i++ ) { + float hh = PApplet.map( getDataSet( index ).get( i ).getValue( ) , _myMin , _myMax , getHeight( ) , 0 ); + theGraphics.vertex( i * res , PApplet.min( getHeight( ) , PApplet.max( 0 , hh ) ) ); + } + theGraphics.endShape( ); + } + theGraphics.noStroke( ); + theGraphics.popStyle( ); + getCaptionLabel( ).draw( theGraphics , 0 , 0 , theController ); + } + } + + public class ChartViewArea implements ControllerView< Chart > { + + public void display( PGraphics theGraphics , Chart theController ) { + + theGraphics.pushStyle( ); + theGraphics.fill( getColor( ).getBackground( ) ); + theGraphics.rect( 0 , 0 , getWidth( ) , getHeight( ) ); + theGraphics.noStroke( ); + + Iterator< String > it = getDataSet( ).keySet( ).iterator( ); + String index = null; + while ( it.hasNext( ) ) { + index = it.next( ); + float res = ( ( float ) getWidth( ) ) / ( getDataSet( index ).size( ) - 1 ); + + theGraphics.fill( getDataSet( index ).getColor( 0 ) ); + theGraphics.beginShape( ); + theGraphics.vertex( 0 , getHeight( ) ); + + for ( int i = 0 ; i < getDataSet( index ).size( ) ; i++ ) { + float hh = PApplet.map( getDataSet( index ).get( i ).getValue( ) , _myMin , _myMax , getHeight( ) , 0 ); + theGraphics.vertex( i * res , PApplet.min( getHeight( ) , PApplet.max( 0 , hh ) ) ); + } + theGraphics.vertex( getWidth( ) , getHeight( ) ); + theGraphics.endShape( PApplet.CLOSE ); + } + theGraphics.noStroke( ); + theGraphics.popStyle( ); + } + } + + public class ChartViewPie implements ControllerView< Chart > { + + public void display( PGraphics theGraphics , Chart theController ) { + theGraphics.pushStyle( ); + theGraphics.pushMatrix( ); + + Iterator< String > it = getDataSet( ).keySet( ).iterator( ); + String index = null; + while ( it.hasNext( ) ) { + index = it.next( ); + float total = 0; + for ( int i = 0 ; i < getDataSet( index ).size( ) ; i++ ) { + total += getDataSet( index ).get( i ).getValue( ); + } + + float segment = TWO_PI / total; + float angle = -HALF_PI; + + theGraphics.noStroke( ); + for ( int i = 0 ; i < getDataSet( index ).size( ) ; i++ ) { + theGraphics.fill( getDataSet( index ).getColor( i ) ); + float nextAngle = angle + getDataSet( index ).get( i ).getValue( ) * segment; + + // a tiny offset to even out render artifacts when in smooth() mode. + float a = PApplet.max( 0 , PApplet.map( getWidth( ) , 0 , 200 , 0.05f , 0.01f ) ); + + theGraphics.arc( 0 , 0 , getWidth( ) , getHeight( ) , angle - a , nextAngle ); + angle = nextAngle; + } + theGraphics.translate( 0 , ( getHeight( ) + 10 ) ); + } + theGraphics.popMatrix( ); + theGraphics.popStyle( ); + } + } + + public Chart setView( int theType ) { + switch ( theType ) { + case ( PIE ): + setView( new ChartViewPie( ) ); + break; + case ( LINE ): + setView( new ChartViewLine( ) ); + break; + case ( BAR ): + setView( new ChartViewBar( ) ); + break; + case ( BAR_CENTERED ): + setView( new ChartViewBarCentered( ) ); + break; + case ( AREA ): + setView( new ChartViewArea( ) ); + break; + default: + System.out.println( "Sorry, this ChartView does not exist" ); + break; + } + return this; + } + + @Override + public String getInfo( ) { + return "type:\tChart\n" + super.toString( ); + } + + @Override + public String toString( ) { + return super.toString( ) + " [ " + getValue( ) + " ]" + " Chart " + "(" + this.getClass( ).getSuperclass( ) + ")"; + } + +} + +/* NOTES what is the difference in meaning between chart and graph + * http://answers.yahoo.com/question/index?qid=20090101193325AA3mgMl + * + * more charts to implement: from https://vimeo.com/groups/oaod/videos/60013194 (44:40) scatter + * plot, star plot, histogram, dendrogram, box plot, physical map, tree, 2d 3d isosurfaces table, + * half matrix, graph, hierarchical pie, line graph, numeric matrix, heat map, permutation matrix + * bar graph, radial graph, */ diff --git a/controlP5/ChartData.java b/controlP5/ChartData.java new file mode 100755 index 0000000..0b40feb --- /dev/null +++ b/controlP5/ChartData.java @@ -0,0 +1,72 @@ +package main.java.src2.main.java.controlP5.controlP5; + +/** + * controlP5 is a processing gui library. + * + * 2006-2015 by Andreas Schlegel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place, Suite 330, + * Boston, MA 02111-1307 USA + * + * @author Andreas Schlegel (http://www.sojamo.de) + * @modified ##date## + * @version ##version## + * + */ + +/** + * Used by Chart, single chart data is stored here including value, (label) text, and color. + */ +public class ChartData { + + protected float _myValue; + + protected String _myText; + + protected int _myColor; + + public ChartData( float theValue ) { + this( theValue , "" ); + } + + public ChartData( float theValue , String theText ) { + _myValue = theValue; + _myText = theText; + } + + public void setValue( float theValue ) { + _myValue = theValue; + } + + public void setText( String theText ) { + _myText = theText; + } + + public float getValue( ) { + return _myValue; + } + + public String getText( ) { + return _myText; + } + + public void setColor( int theColor ) { + _myColor = theColor; + } + + public int getColor( ) { + return _myColor; + } + +} diff --git a/controlP5/ChartDataSet.java b/controlP5/ChartDataSet.java new file mode 100755 index 0000000..6705454 --- /dev/null +++ b/controlP5/ChartDataSet.java @@ -0,0 +1,95 @@ +package main.java.src2.main.java.controlP5.controlP5; + +/** + * controlP5 is a processing gui library. + * + * 2006-2015 by Andreas Schlegel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place, Suite 330, + * Boston, MA 02111-1307 USA + * + * @author Andreas Schlegel (http://www.sojamo.de) + * @modified ##date## + * @version ##version## + * + */ + +import java.util.ArrayList; +import java.util.ListIterator; + +import processing.core.PApplet; +import processing.core.PGraphics; + +/** + * Used by Chart, a chart data set is a container to store chart data. + */ +@SuppressWarnings( "serial" ) +public class ChartDataSet extends ArrayList< ChartData > { + + protected CColor _myColor; + protected float _myStrokeWeight = 1; + protected int[] colors = new int[ 0 ]; + protected final String _myName; + + public ChartDataSet( String theName ) { + _myName = theName; + _myColor = new CColor( ); + } + + public CColor getColor( ) { + return _myColor; + } + + public ChartDataSet setColors( int ... theColors ) { + colors = theColors; + return this; + } + + public int[] getColors( ) { + return colors; + } + + public int getColor( int theIndex ) { + if ( colors.length == 0 ) { + return getColor( ).getForeground( ); + } + if ( colors.length == 2 ) { + return PGraphics.lerpColor( colors[ 0 ] , colors[ 1 ] , theIndex / ( float ) size( ) , PApplet.RGB ); + } + if ( theIndex >= 0 && theIndex < colors.length ) { + return colors[ theIndex ]; + } + return getColor( 0 ); + } + + public ChartDataSet setStrokeWeight( float theStrokeWeight ) { + _myStrokeWeight = theStrokeWeight; + return this; + } + + public float getStrokeWeight( ) { + return _myStrokeWeight; + } + + public float[] getValues( ) { + float[] v = new float[ size( ) ]; + int n = 0; + ListIterator< ChartData > litr = listIterator( ); + while ( litr.hasNext( ) ) { + v[ n++ ] = litr.next( ).getValue( ); + } + return v; + } + +} diff --git a/controlP5/CheckBox.java b/controlP5/CheckBox.java new file mode 100755 index 0000000..80f1211 --- /dev/null +++ b/controlP5/CheckBox.java @@ -0,0 +1,615 @@ +package main.java.src2.main.java.controlP5.controlP5; + +/** + * controlP5 is a processing gui library. + * + * 2006-2015 by Andreas Schlegel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place, Suite 330, + * Boston, MA 02111-1307 USA + * + * @author Andreas Schlegel (http://www.sojamo.de) + * @modified ##date## + * @version ##version## + * + */ + +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.List; +import processing.core.PImage; + + +/** + * A multiple-choice radioButton. items are added to a checkBox and can be organized in rows and + * columns. items of a checkBox are of type Toggle. + * + * @example controllers/ControlP5checkBox + * + * @see Toggle + * + */ +public class CheckBox extends ControlGroup< CheckBox > { + + private Object _myPlug; + + private String _myPlugName; + + /** + * Convenience constructor to extend CheckBox. + * + * @example use/ControlP5extendController + * @param theControlP5 + * @param theName + */ + public CheckBox( ControlP5 theControlP5 , String theName ) { + this( theControlP5 , theControlP5.getDefaultTab( ) , theName , 0 , 0 ); + theControlP5.register( theControlP5.papplet , theName , this ); + } + + /** + * A CheckBox should only be added to controlP5 by using controlP5.addCheckBox() + * + * @exclude + * @param theControlP5 + * @param theParent + * @param theName + * @param theX + * @param theY + */ + public CheckBox( final ControlP5 theControlP5 , final ControllerGroup< ? > theParent , final String theName , final int theX , final int theY ) { + super( theControlP5 , theParent , theName , theX , theY , 99 , 9 ); + isBarVisible = false; + isCollapse = false; + _myRadioToggles = new ArrayList< Toggle >( ); + setItemsPerRow( 1 ); + isMultipleChoice = true; + _myPlug = cp5.papplet; + _myPlugName = getName( ); + if ( !ControllerPlug.checkPlug( _myPlug , _myPlugName , new Class[] { float[].class } ) ) { + _myPlug = null; + } + } + + public final CheckBox activateAll( ) { + int n = _myRadioToggles.size( ); + for ( int i = 0 ; i < n ; i++ ) { + _myRadioToggles.get( i ).activate( ); + } + updateValues( ); + return this; + } + + /** + * Activates a single checkbox item by index + */ + public final CheckBox activate( int theIndex ) { + if ( theIndex < _myRadioToggles.size( ) ) { + _myRadioToggles.get( theIndex ).activate( ); + updateValues( ); + } + return this; + } + + /** + * deactivate a single checkbox item by index + */ + public final CheckBox deactivate( int theIndex ) { + if ( theIndex < _myRadioToggles.size( ) ) { + _myRadioToggles.get( theIndex ).deactivate( ); + updateValues( ); + } + return this; + } + + /** + * toggle a single checkbox item by index + */ + public final CheckBox toggle( int theIndex ) { + if ( theIndex < _myRadioToggles.size( ) ) { + Toggle t = _myRadioToggles.get( theIndex ); + if (t.getState()) { + t.deactivate( ); + } else { + t.activate( ); + } + updateValues( ); + } + return this; + } + + /** + * deactivate a single checkbox item by name + */ + public final void toggle( String theName ) { + int n = _myRadioToggles.size( ); + for ( int i = 0 ; i < n ; i++ ) { + Toggle t = _myRadioToggles.get( i ); + if ( theName.equals( t.getName( ) ) ) { + if (t.getState()) { + t.deactivate( ); + } else { + t.activate( ); + } + updateValues( ); + return; + } + } + } + + /** + * Activates a single checkbox item by name + */ + public final CheckBox activate( String theName ) { + int n = _myRadioToggles.size( ); + for ( int i = 0 ; i < n ; i++ ) { + Toggle t = _myRadioToggles.get( i ); + if ( theName.equals( t.getName( ) ) ) { + t.activate( ); + updateValues( ); + return this; + } + } + return this; + } + + /** + * Deactivates a single checkbox item by name + */ + public final CheckBox deactivate( String theName ) { + int n = _myRadioToggles.size( ); + for ( int i = 0 ; i < n ; i++ ) { + Toggle t = _myRadioToggles.get( i ); + if ( theName.equals( t.getName( ) ) ) { + t.deactivate( ); + updateValues( ); + return this; + } + } + return this; + } + + private final void updateValues( ) { + _myValue = -1; + updateValues( true ); + } + + /** + * Sets the value for all CheckBox items according to the values of the array passed on. 0 will + * turn off an item, any other value will turn it on. + */ + @Override public CheckBox setArrayValue( float[] theArray ) { + for ( int i = 0 ; i < theArray.length ; i++ ) { + if ( _myArrayValue[ i ] != theArray[ i ] ) { + if ( theArray[ i ] == 0 ) { + _myRadioToggles.get( i ).deactivate( ); + } else { + _myRadioToggles.get( i ).activate( ); + } + } + } + super.setArrayValue( theArray ); + return this; + } + + /** + * @exclude {@inheritDoc} + */ + @Override public String getInfo( ) { + return "type:\tCheckBox\n" + super.getInfo( ); + } + + /** + * @exclude {@inheritDoc} + */ + @Override public String toString( ) { + return super.toString( ); + } + + protected List< Toggle > _myRadioToggles; + + protected int spacingRow = 1; + + protected int spacingColumn = 1; + + protected int itemsPerRow = -1; + + protected boolean isMultipleChoice; + + protected int itemHeight = 9; + + protected int itemWidth = 9; + + protected boolean[] availableImages = new boolean[ 3 ]; + + protected PImage[] images = new PImage[ 3 ]; + + protected boolean noneSelectedAllowed = true; + + /** + * @param theName + * @param theValue + * @return + */ + public CheckBox addItem( final String theName , final float theValue ) { + Toggle t = cp5.addToggle( theName , 0 , 0 , itemWidth , itemHeight ); + t.getCaptionLabel( ).align( RIGHT_OUTSIDE , CENTER ).setPadding( Label.paddingX , 0 ); + t.setMode(DEFAULT); + t.setImages( images[ 0 ] , images[ 1 ] , images[ 2 ] ); + t.setSize( images[ 0 ] ); + addItem( t , theValue ); + return this; + } + + /** + * @param theToggle + * @param theValue + * @return + */ + public CheckBox addItem( final Toggle theToggle , final float theValue ) { + theToggle.setGroup( this ); + theToggle.isMoveable = false; + theToggle.setInternalValue( theValue ); + theToggle.isBroadcast = false; + _myRadioToggles.add( theToggle ); + updateLayout( ); + getColor( ).copyTo( theToggle ); + theToggle.addListener( this ); + updateValues( false ); + cp5.removeProperty( theToggle ); + return this; + } + + /** + * @param theName + */ + public CheckBox removeItem( final String theName ) { + int n = _myRadioToggles.size( ); + for ( int i = 0 ; i < n ; i++ ) { + if ( ( _myRadioToggles.get( i ) ).getName( ).equals( theName ) ) { + ( _myRadioToggles.get( i ) ).removeListener( this ); + _myRadioToggles.remove( i ); + } + } + updateValues( false ); + return this; + } + + /** + * + * @param theDefaultImage + * @param theOverImage + * @param theActiveImage + * @return CheckBox + */ + public CheckBox setImages( PImage theDefaultImage , PImage theOverImage , PImage theActiveImage ) { + setImage( theDefaultImage , DEFAULT ); + setImage( theOverImage , OVER ); + setImage( theActiveImage , ACTIVE ); + return this; + } + + /** + * @param theImage + */ + public CheckBox setImage( PImage theImage ) { + return setImage( theImage , DEFAULT ); + } + + /** + * @param theImage + * @param theState + * use Controller.DEFAULT (background), or Controller.OVER (foreground), or + * Controller.ACTIVE (active) + * @return + */ + public CheckBox setImage( PImage theImage , int theState ) { + if ( theImage != null ) { + images[ theState ] = theImage; + availableImages[ theState ] = true; + for ( int i = 0 ; i < _myRadioToggles.size( ) ; i++ ) { + _myRadioToggles.get( i ).setImage( theImage , theState ); + } + } + return this; + } + + public CheckBox setSize( PImage theImage ) { + return setSize( theImage.width , theImage.height ); + } + + public CheckBox setSize( int theWidth , int theHeight ) { + setItemWidth( theWidth ); + setItemHeight( theHeight ); + return this; + } + + /** + * set the height of a radioButton/checkBox item. by default the height is 11px. in order to + * recognize a custom height, the itemHeight has to be set before adding items to a + * radioButton/checkBox. + * + * @param theItemHeight + */ + public CheckBox setItemHeight( int theItemHeight ) { + itemHeight = theItemHeight; + for ( Toggle t : _myRadioToggles ) { + t.setHeight( theItemHeight ); + } + updateLayout( ); + return this; + } + + /** + * set the width of a radioButton/checkBox item. by default the width is 11px. in order to + * recognize a custom width, the itemWidth has to be set before adding items to a + * radioButton/checkBox. + * + * @param theItemWidth + */ + public CheckBox setItemWidth( int theItemWidth ) { + itemWidth = theItemWidth; + for ( Toggle t : _myRadioToggles ) { + t.setWidth( theItemWidth ); + } + updateLayout( ); + return this; + } + + /** + * Gets a radio button item by index. + * + * @param theIndex + * @return Toggle + */ + public Toggle getItem( int theIndex ) { + return _myRadioToggles.get( theIndex ); + } + + public List< Toggle > getItems( ) { + return _myRadioToggles; + } + + /** + * Gets the state of an item - this can be true (for on) or false (for off) - by index. + * + * @param theIndex + * @return boolean + */ + public boolean getState( int theIndex ) { + if ( theIndex < _myRadioToggles.size( ) && theIndex >= 0 ) { + return _myRadioToggles.get( theIndex ).getState( ); + } + return false; + } + + /** + * Gets the state of an item - this can be true (for on) or false (for off) - by name. + * + * @param theName + * @return + */ + public boolean getState( String theName ) { + int n = _myRadioToggles.size( ); + for ( int i = 0 ; i < n ; i++ ) { + Toggle t = _myRadioToggles.get( i ); + if ( theName.equals( t.getName( ) ) ) { + return t.getState( ); + } + } + return false; + } + + /** + * @exclude + */ + public void updateLayout( ) { + int nn = 0; + int xx = 0; + int yy = 0; + int n = _myRadioToggles.size( ); + for ( int i = 0 ; i < n ; i++ ) { + Toggle t = _myRadioToggles.get( i ); + set( t.position , xx , yy ); + + xx += t.getWidth( ) + spacingColumn; + nn++; + if ( nn == itemsPerRow ) { + nn = 0; + _myWidth = xx; + yy += t.getHeight( ) + spacingRow; + xx = 0; + } else { + _myWidth = xx; + } + } + } + + /** + * Items of a radioButton or a checkBox are organized in columns and rows. SetItemsPerRow sets + * the limit of items per row. items exceeding the limit will be pushed to the next row. + * + * @param theValue + */ + public CheckBox setItemsPerRow( final int theValue ) { + itemsPerRow = theValue; + updateLayout( ); + return this; + } + + /** + * Sets the spacing in pixels between columns. + * + * @param theSpacing + */ + public CheckBox setSpacingColumn( final int theSpacing ) { + spacingColumn = theSpacing; + updateLayout( ); + return this; + } + + /** + * Sets the spacing in pixels between rows. + * + * @param theSpacing + */ + public CheckBox setSpacingRow( final int theSpacing ) { + spacingRow = theSpacing; + updateLayout( ); + return this; + } + + public CheckBox deactivateAll( ) { + if ( !isMultipleChoice && !noneSelectedAllowed ) { + return this; + } + int n = _myRadioToggles.size( ); + for ( int i = 0 ; i < n ; i++ ) { + _myRadioToggles.get( i ).deactivate( ); + } + _myValue = -1; + updateValues( true ); + return this; + } + + /** + * {@inheritDoc} + * + * @exclude + */ + @ControlP5.Invisible @Override public void controlEvent( ControlEvent theEvent ) { + + if ( !isMultipleChoice ) { + if ( !noneSelectedAllowed && theEvent.getController( ).getValue( ) < 1 ) { + if ( theEvent.getController( ) instanceof Toggle ) { + Toggle t = ( ( Toggle ) theEvent.getController( ) ); + boolean b = t.isBroadcast( ); + t.setBroadcast( false ); + t.setState( true ); + t.setBroadcast( b ); + return; + } + } + _myValue = -1; + int n = _myRadioToggles.size( ); + for ( int i = 0 ; i < n ; i++ ) { + Toggle t = _myRadioToggles.get( i ); + if ( !t.equals( theEvent.getController( ) ) ) { + t.deactivate( ); + } else { + if ( t.isOn ) { + _myValue = t.internalValue( ); + } + } + } + } + updateValues( true ); + if ( _myPlug != null ) { + try { + Method method = _myPlug.getClass( ).getMethod( _myPlugName , float[].class ); + method.invoke( _myPlug , getArrayValue( )); + } catch ( SecurityException ex ) { + ex.printStackTrace( ); + } catch ( NoSuchMethodException ex ) { + ex.printStackTrace( ); + } catch ( IllegalArgumentException ex ) { + ex.printStackTrace( ); + } catch ( IllegalAccessException ex ) { + ex.printStackTrace( ); + } catch ( InvocationTargetException ex ) { + ex.printStackTrace( ); + } + } + + } + + public CheckBox plugTo( Object theObject ) { + _myPlug = theObject; + if ( !ControllerPlug.checkPlug( _myPlug , _myPlugName , new Class[] { float[].class } ) ) { + _myPlug = null; + } + return this; + } + + public CheckBox plugTo( Object theObject , String thePlugName ) { + _myPlug = theObject; + _myPlugName = thePlugName; + if ( !ControllerPlug.checkPlug( _myPlug , _myPlugName , new Class[] { float[].class } ) ) { + _myPlug = null; + } + return this; + } + + protected void updateValues( boolean theBroadcastFlag ) { + int n = _myRadioToggles.size( ); + _myArrayValue = new float[ n ]; + for ( int i = 0 ; i < n ; i++ ) { + Toggle t = _myRadioToggles.get( i ); + _myArrayValue[ i ] = t.getValue( ); + } + if ( theBroadcastFlag ) { + ControlEvent myEvent = new ControlEvent( this ); + cp5.getControlBroadcaster( ).broadcast( myEvent , FLOAT); + } + } + + /** + * In order to always have 1 item selected, use setNoneSelectedAllowed(false), by default this + * is true. setNoneSelectedAllowed does not apply when in multipleChoice mode. + * + * @param theValue + */ + public CheckBox setNoneSelectedAllowed( boolean theValue ) { + noneSelectedAllowed = theValue; + return this; + } + + public CheckBox setColorLabels( int theColor ) { + for ( Toggle t : _myRadioToggles ) { + t.getCaptionLabel( ).setColor( theColor ); + } + return this; + } + + public CheckBox hideLabels( ) { + for ( Toggle t : _myRadioToggles ) { + t.getCaptionLabel( ).setVisible( false ); + } + return this; + } + + public CheckBox showLabels( ) { + for ( Toggle t : _myRadioToggles ) { + t.getCaptionLabel( ).setVisible( true ); + } + return this; + } + + public CheckBox toUpperCase( boolean theValue ) { + for ( Toggle t : _myRadioToggles ) { + t.getCaptionLabel( ).toUpperCase( theValue ); + } + return this; + } + + /** + * @deprecated + * @exclude + */ + @Deprecated public CheckBox add( final String theName , final float theValue ) { + return addItem( theName , theValue ); + } + +} diff --git a/controlP5/ColorPalette.java b/controlP5/ColorPalette.java new file mode 100644 index 0000000..21b5b04 --- /dev/null +++ b/controlP5/ColorPalette.java @@ -0,0 +1,33 @@ +package main.java.src2.main.java.controlP5.controlP5; + +/** + * controlP5 is a processing gui library. + * + * 2006-2015 by Andreas Schlegel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place, Suite 330, + * Boston, MA 02111-1307 USA + * + * @author Andreas Schlegel (http://www.sojamo.de) + * @modified ##date## + * @version ##version## + * + */ + +class ColorPalette extends ControlGroup< ColorPalette > { + + protected ColorPalette( ControlP5 theControlP5 , ControllerGroup< ? > theParent , String theName , int theX , int theY , int theWidth , int theHeight ) { + super( theControlP5 , theParent , theName , theX , theY , theWidth , theHeight ); + } +} diff --git a/controlP5/ColorPicker.java b/controlP5/ColorPicker.java new file mode 100755 index 0000000..3f87274 --- /dev/null +++ b/controlP5/ColorPicker.java @@ -0,0 +1,259 @@ +package main.java.src2.main.java.controlP5.controlP5; + +/** + * controlP5 is a processing gui library. + * + * 2006-2015 by Andreas Schlegel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place, Suite 330, + * Boston, MA 02111-1307 USA + * + * @author Andreas Schlegel (http://www.sojamo.de) + * @modified ##date## + * @version ##version## + * + */ + +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; + +import processing.core.PGraphics; + +/** + * A simple color picker using sliders to adjust RGBA values. + * + * @example controllers/ControlP5colorPicker + */ +public class ColorPicker extends ControlGroup< ColorPicker > { + + protected Slider sliderRed; + + protected Slider sliderGreen; + + protected Slider sliderBlue; + + protected Slider sliderAlpha; + + protected Canvas currentColor; + + private Object _myPlug; + + private String _myPlugName; + + private boolean broadcast; + + /** + * Convenience constructor to extend ColorPicker. + * + * @example use/ControlP5extendController + * @param theControlP5 + * @param theName + */ + public ColorPicker( ControlP5 theControlP5 , String theName ) { + this( theControlP5 , theControlP5.getDefaultTab( ) , theName , 0 , 0 , 255 , 10 ); + theControlP5.register( theControlP5.papplet , theName , this ); + } + + protected ColorPicker( ControlP5 theControlP5 , ControllerGroup< ? > theParent , String theName , int theX , int theY , int theWidth , int theHeight ) { + super( theControlP5 , theParent , theName , theX , theY , theWidth , theHeight ); + isBarVisible = false; + isCollapse = false; + _myArrayValue = new float[] { 255 , 255 , 255 , 255 }; + + currentColor = addCanvas( new ColorField( ) ); + sliderRed = cp5.addSlider( theName + "-red" , 0 , 255 , 0 , 0 , theWidth , theHeight ); + cp5.removeProperty( sliderRed ); + sliderRed.setId( 0 ); + sliderRed.setBroadcast( false ); + sliderRed.addListener( this ); + sliderRed.moveTo( this ); + sliderRed.setMoveable( false ); + sliderRed.setColorBackground( 0xff660000 ); + sliderRed.setColorForeground( 0xffaa0000 ); + sliderRed.setColorActive( 0xffff0000 ); + sliderRed.getCaptionLabel( ).setVisible( false ); + sliderRed.setDecimalPrecision( 0 ); + sliderRed.setValue( 255 ); + + sliderGreen = cp5.addSlider( theName + "-green" , 0 , 255 , 0 , theHeight + 1 , theWidth , theHeight ); + cp5.removeProperty( sliderGreen ); + sliderGreen.setId( 1 ); + sliderGreen.setBroadcast( false ); + sliderGreen.addListener( this ); + sliderGreen.moveTo( this ); + sliderGreen.setMoveable( false ); + sliderGreen.setColorBackground( 0xff006600 ); + sliderGreen.setColorForeground( 0xff00aa00 ); + sliderGreen.setColorActive( 0xff00ff00 ); + sliderGreen.getCaptionLabel( ).setVisible( false ); + sliderGreen.setDecimalPrecision( 0 ); + sliderGreen.setValue( 255 ); + + sliderBlue = cp5.addSlider( theName + "-blue" , 0 , 255 , 0 , ( theHeight + 1 ) * 2 , theWidth , theHeight ); + cp5.removeProperty( sliderBlue ); + sliderBlue.setId( 2 ); + sliderBlue.setBroadcast( false ); + sliderBlue.addListener( this ); + sliderBlue.moveTo( this ); + sliderBlue.setMoveable( false ); + sliderBlue.setColorBackground( 0xff000066 ); + sliderBlue.setColorForeground( 0xff0000aa ); + sliderBlue.setColorActive( 0xff0000ff ); + sliderBlue.getCaptionLabel( ).setVisible( false ); + sliderBlue.setDecimalPrecision( 0 ); + sliderBlue.setValue( 255 ); + + sliderAlpha = cp5.addSlider( theName + "-alpha" , 0 , 255 , 0 , ( theHeight + 1 ) * 3 , theWidth , theHeight ); + cp5.removeProperty( sliderAlpha ); + sliderAlpha.setId( 3 ); + sliderAlpha.setBroadcast( false ); + sliderAlpha.addListener( this ); + + sliderAlpha.moveTo( this ); + sliderAlpha.setMoveable( false ); + sliderAlpha.setColorBackground( 0xff666666 ); + sliderAlpha.setColorForeground( 0xffaaaaaa ); + sliderAlpha.setColorActive( 0xffffffff ); + sliderAlpha.getCaptionLabel( ).setVisible( false ); + sliderAlpha.setDecimalPrecision( 0 ); + sliderAlpha.getValueLabel( ).setColor( 0xff000000 ); + sliderAlpha.setValue( 255 ); + + _myPlug = cp5.papplet; + _myPlugName = getName( ); + if ( !ControllerPlug.checkPlug( _myPlug , _myPlugName , new Class[] { int.class } ) ) { + _myPlug = null; + } + broadcast = true; + } + + public ColorPicker plugTo( Object theObject ) { + _myPlug = theObject; + if ( !ControllerPlug.checkPlug( _myPlug , _myPlugName , new Class[] { int.class } ) ) { + _myPlug = null; + } + return this; + } + + public ColorPicker plugTo( Object theObject , String thePlugName ) { + _myPlug = theObject; + _myPlugName = thePlugName; + if ( !ControllerPlug.checkPlug( _myPlug , _myPlugName , new Class[] { int.class } ) ) { + _myPlug = null; + } + return this; + } + + @Override + @ControlP5.Invisible + public void controlEvent( ControlEvent theEvent ) { + if ( broadcast ) { + _myArrayValue[ theEvent.getId( ) ] = theEvent.getValue( ); + broadcast( ); + } + } + + private ColorPicker broadcast( ) { + ControlEvent ev = new ControlEvent( this ); + setValue( getColorValue( ) ); + cp5.getControlBroadcaster( ).broadcast( ev , ControlP5Constants.EVENT); + if ( _myPlug != null ) { + try { + Method method = _myPlug.getClass( ).getMethod( _myPlugName , int.class ); + method.invoke( _myPlug , getColorValue( )); + } catch ( SecurityException ex ) { + ex.printStackTrace( ); + } catch ( NoSuchMethodException ex ) { + ex.printStackTrace( ); + } catch ( IllegalArgumentException ex ) { + ex.printStackTrace( ); + } catch ( IllegalAccessException ex ) { + ex.printStackTrace( ); + } catch ( InvocationTargetException ex ) { + ex.printStackTrace( ); + } + } + return this; + } + + /** + * Requires an array of size 4 for RGBA + * + * @return ColorPicker + */ + @Override + public ColorPicker setArrayValue( float[] theArray ) { + broadcast = false; + sliderRed.setValue( theArray[ 0 ] ); + sliderGreen.setValue( theArray[ 1 ] ); + sliderBlue.setValue( theArray[ 2 ] ); + sliderAlpha.setValue( theArray[ 3 ] ); + broadcast = true; + _myArrayValue = theArray; + return broadcast( ); + } + + /** + * {@inheritDoc} + */ + @Override + public ColorPicker setColorValue( int theColor ) { + setArrayValue( new float[] { theColor >> 16 & 0xff , theColor >> 8 & 0xff , theColor >> 0 & 0xff , theColor >> 24 & 0xff } ); + return this; + } + + public int getColorValue( ) { + return 0xffffffff & ( int ) ( _myArrayValue[ 3 ] ) << 24 | ( int ) ( _myArrayValue[ 0 ] ) << 16 | ( int ) ( _myArrayValue[ 1 ] ) << 8 | ( int ) ( _myArrayValue[ 2 ] ) << 0; + } + + private class ColorField extends Canvas { + + public void draw( PGraphics theGraphics ) { + theGraphics.fill( _myArrayValue[ 0 ] , _myArrayValue[ 1 ] , _myArrayValue[ 2 ] , _myArrayValue[ 3 ] ); + theGraphics.rect( 0 , 44 , getWidth( ) , 15 ); + } + } + + // public ColorPicker setColor(int... theArray) { + // switch (theArray.length) { + // case (1): + // setArrayValue(new float[] { theArray[0], theArray[0], theArray[0], getColorValue() >> 24 & + // 0xff }); + // break; + // case (2): + // setArrayValue(new float[] { theArray[0], theArray[0], theArray[0], theArray[1] }); + // break; + // case (3): + // setArrayValue(new float[] { theArray[0], theArray[1], theArray[2], getColorValue() >> 24 & + // 0xff }); + // break; + // case (4): + // setArrayValue(new float[] { theArray[0], theArray[1], theArray[2], theArray[3] }); + // break; + // } + // return this; + // } + + /** + * @exclude {@inheritDoc} + */ + @Override + public String getInfo( ) { + return "type:\tColorPicker\n" + super.toString( ); + } +} + +// some inspiration +// http://www.nbdtech.com/blog/archive/2008/04/27/Calculating-the-Perceived-Brightness-of-a-Color.aspx +// http://alienryderflex.com/hsp.html \ No newline at end of file diff --git a/controlP5/ColorWheel.java b/controlP5/ColorWheel.java new file mode 100644 index 0000000..49a4f5e --- /dev/null +++ b/controlP5/ColorWheel.java @@ -0,0 +1,599 @@ +package main.java.src2.main.java.controlP5.controlP5; + +/** + * controlP5 is a processing gui library. + * + * 2006-2015 by Andreas Schlegel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place, Suite 330, + * Boston, MA 02111-1307 USA + * + * @author Andreas Schlegel (http://www.sojamo.de) + * @modified ##date## + * @version ##version## + * + */ + +import java.util.HashMap; +import java.util.Map; + +import processing.core.PApplet; +import processing.core.PGraphics; + +public class ColorWheel extends Controller< ColorWheel > { + + /* TODO _myColorValue should only be used internally, + * when broadcasting, a composed value based on the hsl + * and alpha value should be distributed, same goes for + * getValue. */ + + private int _myColorValue = 0xffffffff; + private final Map< String , PGraphics > _myColorResources; + private final float[] _myCursor; + private final float scalar = 0.8f; + private int yoff = 10; + private final boolean isInfo = false; + private final Label _myInfoLabel; + private int drag = NONE; + private final static int NONE = -1; + private final static int SATURATION = 0; + private final static int COLOR = 1; + private final static int ALPHA = 2; + int _sideHandleHeight = 8; + private final double[] hsl = new double[] { 1.0 , 1.0 , 1.0 }; + + // argb = int ( 0-255 , 0-255 , 0-255 , 0-255 ) + // hue = double ( 0.0-1.0 ) 0-360 + // saturation = double ( 0.0-1.0 ) 0-100% + // lightness = double ( 0.0-1.0 ) 0-100% + // brightness = double ( 0.0-1.0 ) 0-100% + + public ColorWheel( ControlP5 theControlP5 , String theName ) { + this( theControlP5 , theControlP5.getDefaultTab( ) , theName , 0 , 0 , autoWidth , autoHeight ); + theControlP5.register( theControlP5.papplet , theName , this ); + } + + public ColorWheel( ControlP5 theControlP5 , ControllerGroup< ? > theParent , String theName , int theX , int theY , int theWidth , int theHeight ) { + super( theControlP5 , theParent , theName , theX , theY , theWidth , theHeight ); + + _myColorResources = new HashMap< String , PGraphics >( ); + _myColorResources.put( "default" , cp5.papplet.createGraphics( theWidth , theHeight ) ); + _myCursor = new float[] { getWidth( ) / 2 , getHeight( ) / 2 }; + _myCaptionLabel.align( LEFT , BOTTOM_OUTSIDE ); + _myCaptionLabel.setPaddingX( 0 ); + _myInfoLabel = new Label( cp5 , theName + "-info" ); + _myInfoLabel.setPaddingX( 4 ).getStyle( ).marginTop = 4; + yoff = ( int ) ( getWidth( ) * 0.05 ); + + setColorResources( ); + } + + @Override public void onStartDrag( ) { + checkDrag( ); + } + + private void checkDrag( ) { + double x = getPointer( ).x( ); + double y = getPointer( ).y( ) + yoff; + double xcenter = getWidth( ) / 2; + double ycenter = getHeight( ) / 2; + double d1 = ( ( getWidth( ) / 2 ) * scalar ) + 1; + double d = Math.sqrt( Math.pow( x - xcenter , 2 ) + Math.pow( y - ycenter , 2 ) ); + double w = ( getWidth( ) - ( d1 * 2 ) ) / 2; + drag = NONE; + if ( d <= d1 ) { + drag = COLOR; + } else if ( x >= 0 && x <= w ) { + drag = SATURATION; + } else if ( x >= getWidth( ) - w && x <= getWidth( ) ) { + drag = ALPHA; + } + } + + public void onEndDrag( ) { + drag = NONE; + } + + @Override public void onDrag( ) { + switch ( drag ) { + case ( COLOR ): + double x = getPointer( ).x( ); + double y = getPointer( ).y( ) + yoff; + double xcenter = getWidth( ) / 2; + double ycenter = getHeight( ) / 2; + double a = Math.atan2( y - ycenter , x - xcenter ); + double d0 = getWidth( ) * 0.1; + double d1 = ( ( getWidth( ) / 2 ) * scalar ) + 1; + double d = Math.sqrt( Math.pow( x - xcenter , 2 ) + Math.pow( y - ycenter , 2 ) ); + if ( d >= d1 - 1 ) { + x = ( xcenter + Math.cos( a ) * d1 ); + y = ( ycenter + Math.sin( a ) * d1 ); + } else if ( d <= d0 ) { + x = ( xcenter + Math.cos( a ) * d0 ); + y = ( ycenter + Math.sin( a ) * d0 ); + } + set( _myCursor , ( float ) x , ( float ) y ); + + int xx = ( int ) x; + int yy = ( int ) y; + + double[] t = RGBtoHSL( _myColorResources.get( "default" ).get( xx , yy ) ); + hsl[ 0 ] = t[ 0 ]; + hsl[ 2 ] = t[ 2 ]; + _myColorValue = HSLtoRGB( hsl ); + setValue( _myColorValue ); + break; + case ( SATURATION ): + float s1 = ( getHeight( ) - ( yoff * 2 ) - _sideHandleHeight ); + setSaturation( map( getPointer( ).y( ) , 0 , s1 , 1.0 , 0.0 ) ); + _myColorValue = HSLtoRGB( hsl ); + setValue( _myColorValue ); + break; + case ( ALPHA ): + float a1 = ( getHeight( ) - ( yoff * 2 ) - _sideHandleHeight ); + setAlpha( ( int ) map( getPointer( ).y( ) , 0 , a1 , 255 , 0 ) ); + _myColorValue = HSLtoRGB( hsl ); + setValue( _myColorValue ); + break; + } + } + + @Override public void onPress( ) { + checkDrag( ); + } + + @Override public void onRelease( ) { + onDrag( ); + } + + public ColorWheel scrolled( int theRotationValue ) { + if ( isVisible ) { + double x = getPointer( ).x( ); + double d1 = ( ( getWidth( ) / 2 ) * scalar ) + 1; + double w = ( getWidth( ) - ( d1 * 2 ) ) / 2; + if ( x >= 0 && x <= w ) { + setSaturation( hsl[ 1 ] + theRotationValue * 0.01 ); + _myColorValue = HSLtoRGB( hsl ); + setValue( _myColorValue ); + } else if ( x >= getWidth( ) - w && x <= getWidth( ) ) { + setAlpha( a( ) + theRotationValue ); + } + } + return this; + } + + private void setColorResources( ) { + /* for now there is only a default resource but this + * can be extended to support other color models in + * the future. */ + + PGraphics buffer = _myColorResources.get( "default" ); + + buffer.beginDraw( ); + + buffer.background( 0 , 0 ); + + int w = buffer.width; + + int h = buffer.height; + + float[] center = new float[] { w / 2 , h / 2 }; + + int inner_radius = ( int ) ( buffer.width * 0.1 ); + + int outer_radius = ( int ) ( buffer.width * scalar / 2 ); + buffer.fill( 0 ); + buffer.ellipseMode( CENTER ); + buffer.ellipse( buffer.width / 2 , buffer.height / 2 , buffer.width * scalar + 4 , buffer.width * scalar + 4 ); + buffer.fill( 255 ); + buffer.ellipse( buffer.width / 2 , buffer.height / 2 , ( inner_radius + 1 ) * 2 , ( inner_radius + 1 ) * 2 ); + + for ( int y = 0 ; y < h ; y++ ) { + int dy = ( int ) ( y( center ) - y ); + for ( int x = 0 ; x < w ; x++ ) { + int dx = ( int ) ( x( center ) - x ); + double dist = Math.sqrt( dx * dx + dy * dy ); + if ( dist >= inner_radius && dist <= outer_radius ) { + double theta = Math.atan2( dy , dx ); + // theta can go from -pi to pi + double hue = ( theta + PI ) / ( TWO_PI ); + double sat , val; + if ( dist < ( inner_radius + ( outer_radius - inner_radius ) / 2 ) ) { + sat = map( dist , inner_radius , outer_radius , 0 , 2 ); + val = 1; + } else { + sat = 1; + val = map( dist , inner_radius , outer_radius , 2 , 0 ); + } + buffer.set( x , y , HSVtoRGB( hue , sat , val ) ); + } + } + } + buffer.endDraw( ); + } + + public void setHue( double theH ) { + hsl[ 0 ] = Math.max( 0 , Math.min( 1 , theH ) ); + } + + public void setSaturation( double theS ) { + hsl[ 1 ] = Math.max( 0 , Math.min( 1 , theS ) ); + } + + public void setLightness( double theL ) { + hsl[ 2 ] = Math.max( 0 , Math.min( 1 , theL ) ); + } + + public ColorWheel setHSL( double theH , double theS , double theL ) { + setHue( theH ); + setSaturation( theS ); + setLightness( theL ); + return this; + } + + public int getRGB( ) { + return _myColorValue; + } + + public ColorWheel setRGB( int theColor ) { + double[] t = RGBtoHSL( theColor ); + hsl[ 0 ] = t[ 0 ]; + hsl[ 2 ] = t[ 2 ]; + + float theta = ( float ) ( t[ 0 ] * TWO_PI ) - PI; + float d0 = getWidth( ) * 0.1f; + float d1 = ( ( getWidth( ) / 2 ) * scalar ) + 1f; + float s = ( float ) map( t[ 2 ] , 0f , 1f , d1 , d0 ); + float x = _myColorResources.get( "default" ).width / 2 - ( float ) Math.cos( theta ) * s; + float y = _myColorResources.get( "default" ).height / 2 - ( float ) Math.sin( theta ) * s; + set( _myCursor , x , y ); + setSaturation( t[ 1 ] ); + // TODO resolve rounding error issue as reported here https://github.com/sojamo/controlp5/issues/21 + _myColorValue = HSLtoRGB( hsl ); + setValue( _myColorValue ); + return this; + } + + public ColorWheel setAlpha( int theAlpha ) { + /* TODO */ + return this; + } + + /** + * @exclude + */ + @Override @ControlP5.Invisible public ColorWheel updateDisplayMode( int theMode ) { + return updateViewMode( theMode ); + } + + /** + * @exclude + */ + @ControlP5.Invisible public ColorWheel updateViewMode( int theMode ) { + _myDisplayMode = theMode; + switch ( theMode ) { + case ( DEFAULT ): + case ( IMAGE ): + case ( CUSTOM ): + _myControllerView = new ColorWheelView( ); + default: + break; + + } + return this; + } + + public int a( ) { + int a = ( _myColorValue & 0xff000000 ) >> 24; + return ( a < 0 ) ? 255 : a; + } + + public int r( ) { + return ( _myColorValue & 0x00ff0000 ) >> 16; + } + + public int g( ) { + return ( _myColorValue & 0x0000ff00 ) >> 8; + } + + public int b( ) { + return ( _myColorValue & 0x000000ff ) >> 0; + } + + private class ColorWheelView implements ControllerView< ColorWheel > { + + public void display( PGraphics theGraphics , ColorWheel theController ) { + + PGraphics buffer = _myColorResources.get( "default" ); + + theGraphics.fill( 0 , 100 ); + theGraphics.rect( 0 , 0 , getWidth( ) , getHeight( ) ); + theGraphics.ellipseMode( PApplet.CENTER ); + theGraphics.pushMatrix( ); + theGraphics.translate( 0 , -yoff ); + theGraphics.image( buffer , 0 , 0 ); + theGraphics.pushMatrix( ); + theGraphics.translate( x( _myCursor ) , y( _myCursor ) ); + theGraphics.strokeWeight( 2 ); + theGraphics.noFill( ); + theGraphics.stroke( 255 , 40 ); + theGraphics.ellipse( 1 , 1 , 10 , 10 ); + theGraphics.stroke( 250 ); + theGraphics.fill( _myColorValue ); + theGraphics.ellipse( 0 , 0 , 10 , 10 ); + + theGraphics.popMatrix( ); + theGraphics.noStroke( ); + theGraphics.translate( 0 , -yoff ); + theGraphics.fill( HSLtoRGB( hsl[ 0 ] , hsl[ 1 ] , hsl[ 2 ] ) ); + theGraphics.rect( 0 , getHeight( ) , getWidth( ) , yoff * 2 ); + theGraphics.popMatrix( ); + if ( isLabelVisible ) { + _myCaptionLabel.draw( theGraphics , 0 , 0 , theController ); + } + if ( isInfo ) { + _myInfoLabel.setText( String.format( "RGB %d %d %d\nALPHA %d\nHSL %d %.2f %.2f " , r( ) , g( ) , b( ) , a( ) , ( int ) ( hsl[ 0 ] * 360 ) , hsl[ 1 ] , hsl[ 2 ] ) ); + _myInfoLabel.draw( theGraphics , 0 , 0 , theController ); + } + theGraphics.fill( 255 ); + theGraphics.pushMatrix( ); + int s = _sideHandleHeight / 2; + float v = ( getHeight( ) - ( yoff * 2 ) - _sideHandleHeight ); + theGraphics.translate( 2 , ( int ) map( hsl[ 1 ] , 1 , 0 , 0 , v ) ); + theGraphics.triangle( 0 , s , s , 0 , s , _sideHandleHeight ); + theGraphics.popMatrix( ); + /* TODO alpha handle theGraphics.pushMatrix( ); + * theGraphics.translate( getWidth( ) - s - 2 , + * ( int ) map( a( ) , 255 , 0 , 0 , v ) ); + * theGraphics.triangle( s , s , 0 , 0 , 0 , + * _sideHandleHeight ); theGraphics.popMatrix( + * ); */ + } + } + + public double[] RGBtoHSL( int theRGB ) { + return RGBtoHSL( theRGB >> 16 & 0xff , theRGB >> 8 & 0xff , theRGB >> 0 & 0xff ); + } + + /** + * + * @param theR value between 0 and 255 + * @param theG value between 0 and 255 + * @param theB value between 0 and 255 + * @return double[] values h,s,l are between 0-1 + */ + public double[] RGBtoHSL( int theR , int theG , int theB ) { + double[] rgb = new double[ 3 ]; + rgb[ 0 ] = theR / 255.0; + rgb[ 1 ] = theG / 255.0; + rgb[ 2 ] = theB / 255.0; + double max = Math.max( rgb[ 0 ] , Math.max( rgb[ 1 ] , rgb[ 2 ] ) ); + double min = Math.min( rgb[ 0 ] , Math.min( rgb[ 1 ] , rgb[ 2 ] ) ); + double h = ( max + min ) / 2; + double s = ( max + min ) / 2; + double l = ( max + min ) / 2; + + if ( max == min ) { + h = s = 0; // achromatic + } else { + double d = max - min; + s = l > 0.5 ? ( d / ( 2 - max - min ) ) : ( d / ( max + min ) ); + if ( max == rgb[ 0 ] ) { + h = ( rgb[ 1 ] - rgb[ 2 ] ) / d + ( rgb[ 1 ] < rgb[ 2 ] ? 6 : 0 ); + } else if ( max == rgb[ 1 ] ) { + h = ( rgb[ 2 ] - rgb[ 0 ] ) / d + 2; + } else if ( max == rgb[ 2 ] ) { + h = ( rgb[ 0 ] - rgb[ 1 ] ) / d + 4; + } + h /= 6; + } + + return new double[] { h , s , l }; + } + + public int HSVtoRGB( double[] hsv ) { + return HSVtoRGB( hsv[ 0 ] , hsv[ 1 ] , hsv[ 2 ] ); + } + + /** + * + * @param H value between 0-1 + * @param S value between 0-1 + * @param V value between 0-1 + * @return int + */ + public int HSVtoRGB( double H , double S , double V ) { + + /* http://viziblr.com/news/2011/12/1/drawing-a-color- + * hue-wheel-with-c.html */ + + double[] rgb = new double[ 3 ]; + + if ( H == 1.0 ) { + H = 0.0; + } + + double step = 1.0 / 6.0; + double vh = H / step; + + int i = ( int ) Math.floor( vh ); + + double f = vh - i; + double p = V * ( 1.0 - S ); + double q = V * ( 1.0 - ( S * f ) ); + double t = V * ( 1.0 - ( S * ( 1.0 - f ) ) ); + + switch ( i ) { + case 0: { + rgb[ 0 ] = V; + rgb[ 1 ] = t; + rgb[ 2 ] = p; + break; + } + case 1: { + rgb[ 0 ] = q; + rgb[ 1 ] = V; + rgb[ 2 ] = p; + break; + } + case 2: { + rgb[ 0 ] = p; + rgb[ 1 ] = V; + rgb[ 2 ] = t; + break; + } + case 3: { + rgb[ 0 ] = p; + rgb[ 1 ] = q; + rgb[ 2 ] = V; + break; + } + case 4: { + rgb[ 0 ] = t; + rgb[ 1 ] = p; + rgb[ 2 ] = V; + break; + } + case 5: { + rgb[ 0 ] = V; + rgb[ 1 ] = p; + rgb[ 2 ] = q; + break; + } + default: { + // not possible - if we get here it is an + // internal error + // throw new ArgumentException(); + System.out.println( "hsv to rgb not possible" ); + } + } + return ( a( ) << 24 ) | ( ( int ) ( rgb[ 0 ] * 255 ) << 16 ) | ( ( int ) ( rgb[ 1 ] * 255 ) << 8 ) | ( int ) ( rgb[ 2 ] * 255 ); + } + + public final double[] RGBtoHSV( final int c ) { + return RGBtoHSV( ( c & 0xff0000 ) >> 16 , ( c & 0x00ff00 ) >> 8 , ( c & 0x0000ff ) >> 0 ); + } + + /** + * + * @param theR value between 0 and 255 + * @param theG value between 0 and 255 + * @param theB value between 0 and 255 + * @return hsv [ hue (0-1) sat (0-1) val (0-1) ] + */ + public final double[] RGBtoHSV( final int theR , final int theG , final double theB ) { + + double hue = 0; + + double sat = 0; + + double val = 0; + + final double r = theR / 255.0; + final double g = theG / 255.0; + final double b = theB / 255.0; + + double minRGB = Math.min( r , Math.min( g , b ) ); + double maxRGB = Math.max( r , Math.max( g , b ) ); + + // Black-gray-white + if ( minRGB == maxRGB ) { + return new double[] { 0 , 0 , minRGB }; + } + + // Colors other than black-gray-white: + double d = ( r == minRGB ) ? g - b : ( ( b == minRGB ) ? r - g : b - r ); + double h = ( r == minRGB ) ? 3 : ( ( b == minRGB ) ? 1 : 5 ); + hue = map( ( h - ( d / ( maxRGB - minRGB ) ) ) , 0 , 6.0 , 0 , 1.0 ); + sat = ( maxRGB - minRGB ) / maxRGB; + val = maxRGB; + return new double[] { hue , sat , val }; + } + + public int HSLtoRGB( final double[] theHSL ) { + if ( theHSL.length == 3 ) { + return HSLtoRGB( theHSL[ 0 ] , theHSL[ 1 ] , theHSL[ 2 ] ); + } else { + String message = "HSLtoRGB(double[]) a length of 3 is expected. "; + throw new IllegalArgumentException( message ); + } + + } + + /** + * + * @param h value between 0 and 360 + * @param s value between 0 and 100 + * @param l) value between 0 and 100 + * @param alpha value between 0 and 1 + * @return + */ + public int HSLtoRGB( final double h , double s , double l ) { + if ( h < 0.0 || h > 1.0 ) { + String message = "Color parameter outside of expected range - Hue ( 0.0 - 1.0 )"; + throw new IllegalArgumentException( message ); + } + if ( s < 0.0 || s > 1.0 ) { + String message = "Color parameter outside of expected range - Saturation ( 0.0 - 1.0 )"; + throw new IllegalArgumentException( message ); + } + + if ( l < 0.0 || l > 1.0 ) { + String message = "Color parameter outside of expected range - Luminance ( 0.0 - 1.0 )"; + throw new IllegalArgumentException( message ); + } + + double q = 0; + + if ( l < 0.5 ) { + q = l * ( 1 + s ); + } else { + q = ( l + s ) - ( s * l ); + } + + double p = 2 * l - q; + + double r = Math.max( 0 , HueToRGB( p , q , h + ( 1.0f / 3.0f ) ) ); + double g = Math.max( 0 , HueToRGB( p , q , h ) ); + double b = Math.max( 0 , HueToRGB( p , q , h - ( 1.0f / 3.0f ) ) ); + + return ( 255 << 24 ) | ( ( int ) ( r * 255 ) << 16 ) | ( ( int ) ( g * 255 ) << 8 ) | ( int ) ( b * 255 ); + } + + private static double HueToRGB( double p , double q , double h ) { + if ( h < 0 ) + h += 1; + + if ( h > 1 ) + h -= 1; + + if ( 6 * h < 1 ) { + return p + ( ( q - p ) * 6 * h ); + } + + if ( 2 * h < 1 ) { + return q; + } + + if ( 3 * h < 2 ) { + return p + ( ( q - p ) * 6 * ( ( 2.0f / 3.0f ) - h ) ); + } + + return p; + } + + private final double map( double val , double a1 , double a2 , double b1 , double b2 ) { + return b1 + ( b2 - b1 ) * ( ( val - a1 ) / ( a2 - a1 ) ); + } +} diff --git a/controlP5/ControlBehavior.java b/controlP5/ControlBehavior.java new file mode 100755 index 0000000..c2fde7b --- /dev/null +++ b/controlP5/ControlBehavior.java @@ -0,0 +1,106 @@ +package main.java.src2.main.java.controlP5.controlP5; + +/** + * controlP5 is a processing gui library. + * + * 2006-2015 by Andreas Schlegel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place, Suite 330, + * Boston, MA 02111-1307 USA + * + * @author Andreas Schlegel (http://www.sojamo.de) + * @modified ##date## + * @version ##version## + * + */ + +/** + * The abstract class control behavior allows you to add custom behavior to controllers. Since it is + * an abstract class it must be extended and method update() must be implemented in your custom + * control behavior. how to use ControlBehavior please see the ControlP5behavior example in the + * examples folder. + * + * @example use/ControlP5behavior + */ +public abstract class ControlBehavior { + + protected Controller< ? > _myController; + + protected float value; + + protected boolean isActive = true; + + protected void init( Controller< ? > theController ) { + _myController = theController; + } + + /** + * Returns the controller this behavior is connected to. + * + * @return Controller + */ + public Controller< ? > getController( ) { + return _myController; + } + + public float getValue( ) { + return value; + } + + public void setValue( float theValue ) { + value = theValue; + _myController.setValue( value ); + } + + /** + * When extending ControlBehavior, update() has to be overridden. + */ + public abstract void update( ); + + /** + * (de)activate the behavior. + * + * @param theFlag + * boolean + */ + public void setActive( boolean theFlag ) { + isActive = theFlag; + } + + /** + * check if the behavior is active or not. + * + * @return boolean + */ + public boolean isActive( ) { + return isActive; + } + + /** + * @exclude + * @return + */ + @Deprecated + public float value( ) { + return value; + } + + /** + * @exclude + */ + @Deprecated + public Controller< ? > controller( ) { + return _myController; + } +} diff --git a/controlP5/ControlBroadcaster.java b/controlP5/ControlBroadcaster.java new file mode 100755 index 0000000..3fc9115 --- /dev/null +++ b/controlP5/ControlBroadcaster.java @@ -0,0 +1,401 @@ +package main.java.src2.main.java.controlP5.controlP5; + +/** + * controlP5 is a processing gui library. + * + * 2006-2015 by Andreas Schlegel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place, Suite 330, + * Boston, MA 02111-1307 USA + * + * @author Andreas Schlegel (http://www.sojamo.de) + * @modified ##date## + * @version ##version## + * + */ + +import java.lang.reflect.Field; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.*; +import java.util.AbstractMap.SimpleEntry; +import java.util.Map.Entry; + +/** + * The ControlBroadcaster handles all controller value changes and distributes them accordingly to + * its listeners. The ControlBroadcaster is primarily for internal use only but can be accessed + * through an instance of the ControlP5 class. Instead of accessing the ControlBroadcaster directly, + * use the convenience methods available from the ControlP5 class. + * + * @see ControlP5#getControlBroadcaster() + */ +public class ControlBroadcaster { + + private int _myControlEventType = ControlP5Constants.INVALID; + private ControllerPlug _myControlEventPlug = null; + private ControllerPlug _myControllerCallbackEventPlug = null; + private final ControlP5 cp5; + private final String _myEventMethod = "controlEvent"; + private final String _myControllerCallbackEventMethod = "controlEvent"; + private final ArrayList< ControlListener > _myControlListeners; + private final Set< Entry< CallbackListener , Controller< ? >>> _myControllerCallbackListeners; + private static boolean setPrintStackTrace = true; + private static boolean ignoreErrorMessage = false; + private static final Map< Class< ? > , Field[] > fieldcache = new HashMap< Class< ? > , Field[] >( ); + private static final Map< Class< ? > , Method[] > methodcache = new HashMap< Class< ? > , Method[] >( ); + boolean broadcast = true; + + protected ControlBroadcaster( ControlP5 theControlP5 ) { + cp5 = theControlP5; + _myControlListeners = new ArrayList< ControlListener >( ); + _myControllerCallbackListeners = new HashSet< Entry< CallbackListener , Controller< ? >>>( ); + _myControlEventPlug = checkObject( cp5.papplet , getEventMethod( ) , new Class[] { ControlEvent.class } ); + _myControllerCallbackEventPlug = checkObject( cp5.papplet , _myControllerCallbackEventMethod , new Class[] { CallbackEvent.class } ); + if ( _myControlEventPlug != null ) { + _myControlEventType = ControlP5Constants.METHOD; + } + } + + public ControlBroadcaster addListener( ControlListener ... theListeners ) { + Collections.addAll(_myControlListeners, theListeners); + return this; + } + + public ControlBroadcaster removeListener( ControlListener ... theListeners ) { + for ( ControlListener l : theListeners ) { + _myControlListeners.remove( l ); + } + return this; + } + + /** + * Returns a ControlListener by index + * + * @param theIndex + * @return + */ + public ControlListener getListener( int theIndex ) { + if ( theIndex < 0 || theIndex >= _myControlListeners.size( ) ) { + return null; + } + return _myControlListeners.get( theIndex ); + } + + /** + * Returns the size of the ControlListener list + * + * @return + */ + public int listenerSize( ) { + return _myControlListeners.size( ); + } + + public ControlBroadcaster addCallback( CallbackListener ... theListeners ) { + for ( CallbackListener l : theListeners ) { + _myControllerCallbackListeners.add( new SimpleEntry< CallbackListener , Controller< ? >>( l , new EmptyController( ) ) ); + } + return this; + } + + public ControlBroadcaster addCallback( CallbackListener theListener ) { + _myControllerCallbackListeners.add( new SimpleEntry< CallbackListener , Controller< ? >>( theListener , new EmptyController( ) ) ); + return this; + } + + /** + * Adds a CallbackListener for a list of controllers. + * + * @param theListener + * @param theController + */ + public void addCallback( CallbackListener theListener , Controller< ? > ... theController ) { + for ( Controller< ? > c : theController ) { + _myControllerCallbackListeners.add( new SimpleEntry< CallbackListener , Controller< ? >>( theListener , c ) ); + } + } + + public ControlBroadcaster removeCallback( CallbackListener ... theListeners ) { + for ( CallbackListener c : theListeners ) { + _myControllerCallbackListeners.remove( c ); + } + return this; + } + + public ControlBroadcaster removeCallback( CallbackListener theListener ) { + _myControllerCallbackListeners.remove( theListener ); + return this; + } + + /** + * Removes a CallbackListener for a particular controller + * + * @param theController + */ + public ControlBroadcaster removeCallback( Controller< ? > ... theControllers ) { + for ( Controller< ? > c : theControllers ) { + for ( Entry< CallbackListener , Controller< ? >> entry : _myControllerCallbackListeners ) { + if (entry.getValue().equals(c)) { + _myControllerCallbackListeners.remove( entry ); + } + } + } + return this; + } + + public ControlBroadcaster plug( Object theObject , final String theControllerName , final String theTargetMethod ) { + plug( theObject , cp5.getController( theControllerName ) , theTargetMethod ); + return this; + } + + public ControlBroadcaster plug( Object theObject , final Controller< ? > theController , final String theTargetMethod ) { + if ( theController != null ) { + ControllerPlug myControllerPlug = checkObject( theObject , theTargetMethod , ControlP5Constants.acceptClassList ); + if ( myControllerPlug == null ) { + return this; + } else { + if (!theController.checkControllerPlug(myControllerPlug)) { + theController.addControllerPlug( myControllerPlug ); + } + return this; + } + } + return this; + } + + static Field[] getFieldsFor( Class< ? > theClass ) { + if ( !fieldcache.containsKey( theClass ) ) { + fieldcache.put( theClass , theClass.getDeclaredFields( ) ); + } + return fieldcache.get( theClass ); + } + + static Method[] getMethodFor( Class< ? > theClass ) { + if ( !methodcache.containsKey( theClass ) ) { + methodcache.put( theClass , theClass.getMethods( ) ); + } + return methodcache.get( theClass ); + } + + protected static ControllerPlug checkObject( final Object theObject , final String theTargetName , final Class< ? >[] theAcceptClassList ) { + + Class< ? > myClass = theObject.getClass( ); + + Method[] myMethods = getMethodFor( myClass ); + + for ( int i = 0 ; i < myMethods.length ; i++ ) { + if ( ( myMethods[ i ].getName( ) ).equals( theTargetName ) ) { + + if ( myMethods[ i ].getParameterTypes( ).length == 1 ) { + + // hack to detect controlEvent(CallbackEvent) which is otherwise + // overwritten by controlEvent(ControlEvent) + if ( theAcceptClassList.length == 1 ) { + if ( theAcceptClassList[ 0 ] == CallbackEvent.class ) { + ControllerPlug cp = new ControllerPlug( CallbackEvent.class , theObject , theTargetName , ControlP5Constants.EVENT , -1 ); + if ( cp.getMethod( ) == null ) { + return null; + } + return cp; + } + } + if ( myMethods[ i ].getParameterTypes( )[ 0 ] == ControlP5Constants.controlEventClass ) { + return new ControllerPlug( ControlEvent.class , theObject , theTargetName , ControlP5Constants.EVENT , -1 ); + } + for ( int j = 0 ; j < theAcceptClassList.length ; j++ ) { + if ( myMethods[ i ].getParameterTypes( )[ 0 ] == theAcceptClassList[ j ] ) { + return new ControllerPlug( theObject , theTargetName , ControlP5Constants.METHOD , j , theAcceptClassList ); + } + } + } else if ( myMethods[ i ].getParameterTypes( ).length == 0 ) { + return new ControllerPlug( theObject , theTargetName , ControlP5Constants.METHOD , -1 , theAcceptClassList ); + } + break; + } + } + + Field[] myFields = getFieldsFor( myClass ); + + for ( int i = 0 ; i < myFields.length ; i++ ) { + + if ( ( myFields[ i ].getName( ) ).equals( theTargetName ) ) { + for ( int j = 0 ; j < theAcceptClassList.length ; j++ ) { + if ( myFields[ i ].getType( ) == theAcceptClassList[ j ] ) { + return new ControllerPlug( theObject , theTargetName , ControlP5Constants.FIELD , j , theAcceptClassList ); + } + } + break; + } + } + return null; + } + + public ControlBroadcaster broadcast( final ControlEvent theControlEvent , final int theType ) { + if ( broadcast ) { + for ( ControlListener cl : _myControlListeners ) { + cl.controlEvent( theControlEvent ); + } + if ( !theControlEvent.isTab( ) && !theControlEvent.isGroup( ) ) { + + if ( theControlEvent.getController( ).getControllerPlugList( ).size( ) > 0 ) { + + if ( theType == ControlP5Constants.STRING ) { + for ( ControllerPlug cp : theControlEvent.getController( ).getControllerPlugList( ) ) { + callTarget( cp , theControlEvent.getStringValue( ) ); + } + } else if ( theType == ControlP5Constants.ARRAY ) { + + } else if ( theType == ControlP5Constants.BOOLEAN ) { + for ( ControllerPlug cp : theControlEvent.getController( ).getControllerPlugList( ) ) { + Controller controller = theControlEvent.getController( ); + if ( controller instanceof Icon ) { + callTarget( cp , ( ( Icon ) controller ).getBooleanValue( ) ); + } else if ( controller instanceof Button ) { + callTarget( cp , ( ( Button ) controller ).getBooleanValue( ) ); + } else if ( controller instanceof Toggle ) { + callTarget( cp , ( ( Toggle ) controller ).getBooleanValue( ) ); + } + } + } else { + + for ( ControllerPlug cp : theControlEvent.getController( ).getControllerPlugList( ) ) { + if ( cp.checkType( ControlP5Constants.EVENT ) ) { + invokeMethod( cp.getObject( ) , cp.getMethod( ) , new Object[] { theControlEvent } ); + } else { + callTarget( cp , theControlEvent.getValue( ) ); + } + } + } + } + } + if ( _myControlEventType == ControlP5Constants.METHOD ) { + invokeMethod( _myControlEventPlug.getObject( ) , _myControlEventPlug.getMethod( ) , new Object[] { theControlEvent } ); + } + } + return this; + } + + protected void callTarget( final ControllerPlug thePlug , final float theValue ) { + if ( thePlug.checkType( ControlP5Constants.METHOD ) ) { + invokeMethod( thePlug.getObject( ) , thePlug.getMethod( ) , thePlug.getMethodParameter( theValue ) ); + } else if ( thePlug.checkType( ControlP5Constants.FIELD ) ) { + invokeField( thePlug.getObject( ) , thePlug.getField( ) , thePlug.getFieldParameter( theValue ) ); + } + } + + protected void callTarget( final ControllerPlug thePlug , final String theValue ) { + if ( thePlug.checkType( ControlP5Constants.METHOD ) ) { + invokeMethod( thePlug.getObject( ) , thePlug.getMethod( ) , new Object[] { theValue } ); + } else if ( thePlug.checkType( ControlP5Constants.FIELD ) ) { + invokeField( thePlug.getObject( ) , thePlug.getField( ) , theValue ); + } + } + + protected void callTarget( final ControllerPlug thePlug , final boolean theValue ) { + if ( thePlug.checkType( ControlP5Constants.METHOD ) ) { + invokeMethod( thePlug.getObject( ) , thePlug.getMethod( ) , new Object[] { theValue } ); + } else if ( thePlug.checkType( ControlP5Constants.FIELD ) ) { + invokeField( thePlug.getObject( ) , thePlug.getField( ) , theValue ); + } + } + + private void invokeField( final Object theObject , final Field theField , final Object theParam ) { + try { + theField.set( theObject , theParam ); + } catch ( IllegalAccessException e ) { + ControlP5.logger( ).warning( e.toString( ) ); + } + } + + private void invokeMethod( final Object theObject , final Method theMethod , final Object[] theParam ) { + try { + if ( theParam[ 0 ] == null ) { + theMethod.invoke( theObject); + } else { + theMethod.invoke( theObject , theParam ); + } + } catch ( IllegalArgumentException e ) { + ControlP5.logger( ).warning( e.toString( ) ); + /** + * TODO thrown when plugging a String method/field. + */ + } catch ( IllegalAccessException e ) { + printMethodError( theMethod , e ); + } catch ( InvocationTargetException e ) { + printMethodError( theMethod , e ); + } catch ( NullPointerException e ) { + printMethodError( theMethod , e ); + } + + } + + protected String getEventMethod( ) { + return _myEventMethod; + } + + protected void invokeAction( CallbackEvent theEvent ) { + boolean invoke; + for ( Entry< CallbackListener , Controller< ? >> entry : _myControllerCallbackListeners ) { + invoke = entry.getValue().getClass().equals(EmptyController.class) || entry.getValue().equals(theEvent.getController()); + if ( invoke ) { + entry.getKey( ).controlEvent( theEvent ); + } + } + + if ( _myControllerCallbackEventPlug != null ) { + invokeMethod( cp5.papplet , _myControllerCallbackEventPlug.getMethod( ) , new Object[] { theEvent } ); + } + } + + private void printMethodError( Method theMethod , Exception theException ) { + if ( !ignoreErrorMessage ) { + ControlP5.logger( ).severe( "An error occured while forwarding a Controller event, please check your code at " + theMethod.getName( ) + ( !setPrintStackTrace ? " " + "exception: " + theException : "" ) ); + if ( setPrintStackTrace ) { + theException.printStackTrace( ); + } + } + } + + public static void ignoreErrorMessage( boolean theFlag ) { + ignoreErrorMessage = theFlag; + } + + public static void setPrintStackTrace( boolean theFlag ) { + setPrintStackTrace = theFlag; + } + + private class EmptyController extends Controller< EmptyController > { + + protected EmptyController( ) { + this( 0 , 0 ); + } + + protected EmptyController( int theX , int theY ) { + super( "empty" + ( ( int ) ( Math.random( ) * 1000000 ) ) , theX , theY ); + // TODO Auto-generated constructor stub + } + + @Override public EmptyController setValue( float theValue ) { + // TODO Auto-generated method stub + return this; + } + + } + + /** + * @exclude + */ + @Deprecated public void plug( final String theControllerName , final String theTargetMethod ) { + plug( cp5.papplet , theControllerName , theTargetMethod ); + } +} diff --git a/controlP5/ControlElement.java b/controlP5/ControlElement.java new file mode 100755 index 0000000..f5a82a8 --- /dev/null +++ b/controlP5/ControlElement.java @@ -0,0 +1,48 @@ +package main.java.src2.main.java.controlP5.controlP5; + +/** + * controlP5 is a processing gui library. + * + * 2006-2015 by Andreas Schlegel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place, Suite 330, + * Boston, MA 02111-1307 USA + * + * @author Andreas Schlegel (http://www.sojamo.de) + * @modified ##date## + * @version ##version## + * + */ + +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + +/** + * Used for automated controller creation using annotations. Very much inspired by Karsten Schmidt's + * (toxi) cp5magic + * + * @example use/ControlP5annotation + */ +@Retention( RetentionPolicy.RUNTIME ) +public @interface ControlElement { + + String[] properties() default { }; + + String label() default ""; + + int x() default -1; + + int y() default -1; + +} diff --git a/controlP5/ControlEvent.java b/controlP5/ControlEvent.java new file mode 100755 index 0000000..cdd8f33 --- /dev/null +++ b/controlP5/ControlEvent.java @@ -0,0 +1,339 @@ +package main.java.src2.main.java.controlP5.controlP5; + +/** + * controlP5 is a processing gui library. + * + * 2006-2015 by Andreas Schlegel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place, Suite 330, + * Boston, MA 02111-1307 USA + * + * @author Andreas Schlegel (http://www.sojamo.de) + * @modified ##date## + * @version ##version## + * + */ + +/** + * A controlEvent is sent to a PApplet or a ControlListener whenever a controller value has changed. + * Events can also be sent when a tab is activated, but by default tab events are disabled and have + * to be enabled with {@link Tab} Tab.activateEvent(). for detailed information see the tab + * documentation. + * + * @example use/ControlP5controlEvent + */ +public class ControlEvent { + + public static int UNDEFINDED = -1; + + public static int CONTROLLER = 0; + + public static int TAB = 1; + + public static int GROUP = 2; + + protected final ControllerInterface< ? > _myController; + + protected boolean isTab; + + protected boolean isController; + + protected boolean isGroup; + + protected int myAction; + + /** + * + * @param theController + * Controller + */ + protected ControlEvent( Controller< ? > theController ) { + _myController = theController; + isTab = false; + isController = true; + isGroup = false; + } + + /** + * @exclude + * @param theController + * Controller + */ + public ControlEvent( Tab theController ) { + _myController = theController; + isTab = true; + isGroup = false; + isController = false; + } + + /** + * @exclude + * @param theController + * Controller + */ + public ControlEvent( ControllerGroup< ? > theController ) { + _myController = theController; + isTab = false; + isGroup = true; + isController = false; + } + + public float getValue( ) { + return _myController.getValue( ); + } + + public String getStringValue( ) { + return _myController.getStringValue( ); + } + + /** + * Returns a float array, applies to e.g. Range. + * + * @return float[] + */ + public float[] getArrayValue( ) { + return _myController.getArrayValue( ); + } + + /** + * Returns a float value at a particular index from a controller's array value. No error + * checking available here, will throw ArrayIndexOutOfBOundsException in case of unavailable + * index. + * + * @param theIndex + * @return + */ + public float getArrayValue( int theIndex ) { + return _myController.getArrayValue( )[ theIndex ]; + } + + /** + * Returns the instance of the controller sending the ControlEvent. + * + * @return Controller + */ + public Controller< ? > getController( ) { + return ( ( Controller< ? > ) _myController ); + } + + /** + * Returns the tab that triggered the ControlEvent + * + * @return Tab Tab + */ + public Tab getTab( ) { + return ( Tab ) _myController; + } + + /** + * Returns the group that evoked the ControlEvent + * + * @return ControlGroup + */ + public ControlGroup< ? > getGroup( ) { + return ( ControlGroup< ? > ) _myController; + } + + /** + * Gets the text of the controller's label that has evoked the event. + * + * @return String + */ + public String getLabel( ) { + return ( ( Controller< ? > ) _myController ).getLabel( ); + } + + /** + * Checks if the ControlEvent was triggered by a tab + * + * @see Tab + * @return boolean + */ + public boolean isTab( ) { + return isTab; + } + + /** + * Checks if the ControlEvent was triggered by a controller + * + * @see Controller + * @return boolean + */ + public boolean isController( ) { + return isController; + } + + /** + * Checks if the ControlEvent was triggered by a ControlGroup + * + * @see ControllerGroup + * @return boolean + */ + public boolean isGroup( ) { + return isGroup; + } + + /** + * returns the controller's name + * + * @return String + */ + public String getName( ) { + return _myController.getName( ); + } + + /** + * Returns the controller's id, if an id has not been set before the default value -1 will be + * returned. + * + * @return + */ + public int getId( ) { + return _myController.getId( ); + } + + /** + * @return int returned is ControlP5.CONTROLLER, or ControlP5.TAB, or ControlP5.GROUP + */ + public int getType( ) { + if ( isController ) { + return CONTROLLER; + } else if ( isTab ) { + return TAB; + } else if ( isGroup ) { + return GROUP; + } + return -1; + } + + /** + * Checks if the ControlEvent originates from a specific Controller or ControllerGroup. + * + * @param theController + * @return boolean + */ + public boolean isFrom( ControllerInterface< ? > theController ) { + return _myController.equals( theController ); + } + + /** + * checks if the ControlEvent originates from a specific Controller or ControllerGroup + * identifiable by name. + * + * @param theController + * @return boolean + */ + + public boolean isFrom( String theControllerName ) { + return _myController.getName( ).equals( theControllerName ); + } + + public boolean isAssignableFrom( Class< ? > c ) { + return _myController.getClass( ).isAssignableFrom( c ); + } + + /** + * @exclude + * @deprecated + */ + @Deprecated + public int type( ) { + return getType( ); + } + + /** + * @exclude + * @deprecated + */ + @Deprecated + public int id( ) { + return getId( ); + } + + /** + * @exclude + * @deprecated + */ + @Deprecated + public String name( ) { + return getName( ); + } + + /** + * @exclude + * @deprecated + */ + @Deprecated + public String label( ) { + return getLabel( ); + } + + /** + * @exclude + * @deprecated + */ + @Deprecated + public float value( ) { + return getValue( ); + } + + /** + * @exclude + * @deprecated + */ + @Deprecated + public String stringValue( ) { + return getStringValue( ); + } + + /** + * @exclude + * @deprecated + */ + @Deprecated + public float[] arrayValue( ) { + return getArrayValue( ); + } + + /** + * @exclude + * @deprecated + */ + @Deprecated + public Controller< ? > controller( ) { + return getController( ); + } + + /** + * @exclude + * @deprecated + */ + @Deprecated + public ControlGroup< ? > group( ) { + return getGroup( ); + } + + /** + * @exclude + * @deprecated + */ + @Deprecated + public Tab tab( ) { + return getTab( ); + } + + public String toString( ) { + return "[ ControlEvent from:" + _myController.getClass( ).getSimpleName( ) + " value:" + getValue( ) + " name:" + getName( ) + " ]"; + } +} diff --git a/controlP5/ControlFont.java b/controlP5/ControlFont.java new file mode 100755 index 0000000..33c06d6 --- /dev/null +++ b/controlP5/ControlFont.java @@ -0,0 +1,292 @@ +package main.java.src2.main.java.controlP5.controlP5; + +/** + * controlP5 is a processing gui library. + * + * 2006-2015 by Andreas Schlegel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place, Suite 330, + * Boston, MA 02111-1307 USA + * + * @author Andreas Schlegel (http://www.sojamo.de) + * @modified ##date## + * @version ##version## + * + */ + +import java.util.ArrayList; +import java.util.List; + +import processing.core.PApplet; +import processing.core.PFont; +import processing.core.PGraphics; + +/** + * A ControlFont is a container for a PFont that can be used to customize the font of a label. + * (Designing the Font handling gave me a big headache, especially when it comes to calculating the + * dimensions of a font which are not available at all times but only at certain times. The current + * status I suppose is a good compromise and works for standard font handling cases. For any special + * cases it will be difficult to convince me to make any changes.) + * + * @example extra/ControlP5controlFont + */ +public class ControlFont { + + public static boolean DEBUG = false; + + /** + * set the RENDER_2X variable to true to double render text, this makes the font look bolder + * especially in OpenGL mode. use: ControlFont.RENDER_2X = true; + */ + public static boolean RENDER_2X; + + /** + * renders a PFont twice for better and sharper readability + */ + public static void sharp( ) { + RENDER_2X = true; + } + + /** + * sets the rendering of a PFont back to normal and single rendering. + */ + public static void normal( ) { + RENDER_2X = false; + } + + PFont pfont; + List< String > txt; + String s = ""; + private int top; + private int bottom; + private int center; + private int height; + private int width; + private final int baseline = 0; + private int _myTextHeight = 1; + private final int[] offset = new int[ 2 ]; + private int size; + + public ControlFont( PFont theFont ) { + this( theFont , checkFontSize( theFont ) ); + } + + public ControlFont( PFont theFont , int theFontSize ) { + this( theFont , theFontSize , theFontSize + 2 ); + } + + public ControlFont( PFont theFont , int theFontSize , int theLineHeight ) { + pfont = theFont; + size = theFontSize; + txt = new ArrayList< String >( ); + } + + static private int checkFontSize( PFont theFont ) { + try { + // was: return theFont.getFont().getSize(); but disappeared with p5 2.0b1 + return theFont.getSize( ); + } catch ( NullPointerException e ) { + System.out.println( "ControlP5: could not find font-size details for font " + theFont.getName( ) + ", use constructor ControlFont(PFont theFont, int theFontSize) to specify the font size." ); + return 10; + } + } + + public void init( Label theLabel ) { + // when the font changes, init is called. + // width and height should be adjusted to the updated font here, + // but we need PApplet here to determine the width of the label. + // unfortunately we dont have access to PApplet here, so a change + // might result in a 1-frame-flickr but doesnt necessarily need + // to happen. + } + + public void setSize( int theSize ) { + size = theSize; + } + + public int getSize( ) { + /* quickfix http://code.google.com/p/controlp5/issues/detail?id=46 first check the pfont + * size then default back to size */ + return size; + } + + public int getOffset( int theIndex ) { + return offset[ theIndex ]; + } + + public int getTextHeight( ) { + return _myTextHeight; + } + + public int getWidth( ) { + return width; + } + + public int getHeight( ) { + return height; + } + + public int getCenter( ) { + return center; + } + + public int getTop( ) { + return top; + } + + public int getBottom( ) { + return bottom; + } + + public int getBaseline( ) { + return baseline; + } + + public PFont getFont( ) { + return pfont; + } + + public void adjust( PGraphics theGraphics , Label theLabel ) { + if ( theLabel.isChanged( ) ) { + theGraphics.textFont( pfont , size ); + // the origin of a PFont Label is top left corner, therefore + // the following the following measures have to be calculated + // when a font is changed. we have to do that here since PApplet + // is required to calculate a font's ascent and descent value. + // values are calculated based on the baseline (which is 0), + // therefore center and top are negative values. + // to order to sync the line height with the height of the font, + // the value of lineHeightOffset carries this offset value. + // This becomes necessary when working with multiple lines. + top = -( int ) theGraphics.textAscent( ); + bottom = ( int ) theGraphics.textDescent( ); + center = -( int ) ( ( -top - bottom ) / 2 ); + height = theLabel.isMultiline( ) ? theLabel.getHeight( ) : ( int ) ( theGraphics.textAscent( ) + theGraphics.textDescent( ) ); + width = theLabel.isMultiline( ) ? theLabel.getWidth( ) : ( int ) theGraphics.textWidth( theLabel.getTextFormatted( ) ); + if ( theLabel.isMultiline( ) ) { + calculateHeight( theGraphics , theLabel ); + } + theLabel.setChanged( false ); + } + } + + private void calculateHeight( PGraphics theGraphics , Label theLabel ) { + txt.clear( ); + String myString = theLabel.getTextFormatted( ); + String[] paragraphs = myString.split( "\n" ); + // does not recognize linebreaks at the end of theString. + myString = ""; + for ( String p : paragraphs ) { + String[] words = p.split( "\\s" ); + for ( String w : words ) { + if ( theGraphics.textWidth( myString + w ) < width ) { + myString += w + " "; + } else { + txt.add( myString.substring( 0 , PApplet.max( 0 , myString.length( ) - 1 ) ) ); + myString = w + " "; + } + } + txt.add( myString.substring( 0 , myString.length( ) - 1 ) ); + myString = ""; + } + if ( theLabel.getHeight( ) % theLabel.getLineHeight( ) != 0 ) { + txt.add( "" ); + } + _myTextHeight = ( PApplet.round( txt.size( ) * theLabel.getLineHeight( ) ) ); + int maxLineNum = PApplet.round( theLabel.getHeight( ) / theLabel.getLineHeight( ) ); + int offset = ( int ) ( PApplet.max( 0 , txt.size( ) - maxLineNum ) * ( PApplet.abs( theLabel.getOffsetYratio( ) ) ) ); + int lim = PApplet.min( txt.size( ) , maxLineNum ); + s = ""; + for ( int i = 0 ; i < lim ; i++ ) { + s += txt.get( i + offset ) + "\n"; + } + } + + public int getOverflow( ) { + return ( _myTextHeight - height ); + } + + public void draw( ControlP5 c , Label theLabel ) { + draw( c.pg , theLabel ); + } + + public void draw( PGraphics theGraphics , Label theLabel ) { + + PFont loadedFont = theGraphics.textFont; + float loadedSize = theGraphics.textSize; + if ( loadedFont == null ) { + theGraphics.textSize( loadedSize ); // forces default font + loadedFont = theGraphics.textFont; + } + int loadedAlign = theGraphics.textAlign; + + + theGraphics.textFont( pfont , size ); + theGraphics.textAlign( theLabel.textAlign ); + theGraphics.fill( theLabel.getColor( ) ); + + if ( theLabel.isMultiline( ) ) { + theGraphics.fill( theLabel.getColor( ) ); + theGraphics.textLeading( theLabel.getLineHeight( ) ); + theGraphics.text( s , 0 , 0 , theLabel.getWidth( ) , theLabel.getHeight( ) ); + } else { + + theGraphics.translate( 0 , -top + 1 ); + debug( theGraphics , theLabel ); + theGraphics.fill( theLabel.getColor( ) ); + theGraphics.textLeading( theLabel.getLineHeight( ) ); + theGraphics.text( theLabel.getTextFormatted( ) , 0 , 0 ); + if ( RENDER_2X ) { + theGraphics.text( theLabel.getTextFormatted( ) , 0 , 0 ); + } + + } + + theGraphics.textFont( loadedFont , loadedSize ); + theGraphics.textAlign( loadedAlign ); + + } + + private void debug( PGraphics theGraphics , Label theLabel ) { + if ( DEBUG ) { + + theGraphics.stroke( 0 , 255 , 0 ); // BASELINE + theGraphics.line( 0 , getBaseline( ) , theGraphics.textWidth( theLabel.getText( ) ) , getBaseline( ) ); + + theGraphics.stroke( 0 , 0 , 255 ); // TOP + theGraphics.line( 0 , getTop( ) , theGraphics.textWidth( theLabel.getText( ) ) , getTop( ) ); + + theGraphics.stroke( 255 , 255 , 0 ); // BOTTOM + theGraphics.line( 0 , getBottom( ) , theGraphics.textWidth( theLabel.getText( ) ) , getBottom( ) ); + + theGraphics.stroke( 255 , 0 , 0 ); // CENTER + theGraphics.line( 0 , getCenter( ) , theGraphics.textWidth( theLabel.getText( ) ) , getCenter( ) ); + + theGraphics.stroke( 255 , 128 , 0 ); // CENTER_CAPS + theGraphics.line( 0 , getTop( ) / 2 , theGraphics.textWidth( theLabel.getText( ) ) , getTop( ) / 2 ); + + theGraphics.noStroke( ); + } + } + + public static int getWidthFor( String theText , Label theLabel , PGraphics theGraphics ) { + theGraphics.textFont( theLabel.getFont( ).pfont , theLabel.getFont( ).size ); + return ( int ) theGraphics.textWidth( theText ); + } + +} + +// textorize, a Ruby-based font rasterizer command line utility for Mac OS X +// http://textorize.org/ + diff --git a/controlP5/ControlGroup.java b/controlP5/ControlGroup.java new file mode 100755 index 0000000..e58b8a0 --- /dev/null +++ b/controlP5/ControlGroup.java @@ -0,0 +1,199 @@ +package main.java.src2.main.java.controlP5.controlP5; + +/** + * controlP5 is a processing gui library. + * + * 2006-2015 by Andreas Schlegel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place, Suite 330, + * Boston, MA 02111-1307 USA + * + * @author Andreas Schlegel (http://www.sojamo.de) + * @modified ##date## + * @version ##version## + * + */ + +import java.util.ArrayList; +import java.util.List; + +import processing.core.PApplet; +import processing.core.PGraphics; + +/** + *

+ * In previous versions you would use the ControlGroup class + * to bundle controllers in a group. Now please use the + * Group class to do so. + *

+ *

+ * ControlGroup extends ControllerGroup, for a list and + * documentation of available methods see the + * {@link ControllerGroup} documentation. + *

+ * + * @see Group + * @example controllers/ControlP5group + */ +public class ControlGroup< T > extends ControllerGroup< T > implements ControlListener { + + protected int _myBackgroundHeight = 0; + + protected int _myBackgroundColor = 0x00ffffff; + + protected boolean isEventActive = false; + + protected List< ControlListener > _myControlListener; + + /** + * Convenience constructor to extend ControlGroup. + */ + public ControlGroup( ControlP5 theControlP5 , String theName ) { + this( theControlP5 , theControlP5.getDefaultTab( ) , theName , 0 , 0 , 100 , 9 ); + theControlP5.register( theControlP5.papplet , theName , this ); + } + + public ControlGroup( ControlP5 theControlP5 , ControllerGroup< ? > theParent , String theName , int theX , int theY , int theW , int theH ) { + super( theControlP5 , theParent , theName , theX , theY ); + _myControlListener = new ArrayList< ControlListener >( ); + _myValueLabel = new Label( cp5 , "" ); + _myWidth = theW; + _myHeight = theH; + } + + @ControlP5.Invisible + public void mousePressed( ) { + if ( isBarVisible && isCollapse ) { + if ( !cp5.isAltDown( ) ) { + isOpen = !isOpen; + if ( isEventActive ) { + final ControlEvent myEvent = new ControlEvent( this ); + cp5.getControlBroadcaster( ).broadcast( myEvent , METHOD); + for ( ControlListener cl : _myControlListener ) { + cl.controlEvent( myEvent ); + } + } + } + } + } + + /** + * activates or deactivates the Event status of a + * ControlGroup. + */ + public T activateEvent( boolean theFlag ) { + isEventActive = theFlag; + return me; + } + + public T setSize( int theWidth , int theHeight ) { + super.setSize( theWidth , theHeight ); + setBackgroundHeight( theHeight ); + return me; + } + + public int getBackgroundHeight( ) { + return _myBackgroundHeight; + } + + public T setBackgroundHeight( int theHeight ) { + _myBackgroundHeight = theHeight; + return me; + } + + public T setBackgroundColor( int theColor ) { + _myBackgroundColor = theColor; + return me; + } + + public T setBarHeight( int theHeight ) { + _myHeight = theHeight; + return me; + } + + public int getBarHeight( ) { + return _myHeight; + } + + @Override + public T updateInternalEvents( PApplet theApplet ) { + if ( isInside && isBarVisible ) { + cp5.getWindow( ).setMouseOverController( this ); + } + return me; + } + + protected void preDraw( PGraphics theGraphics ) { + if ( isOpen ) { + theGraphics.fill( _myBackgroundColor ); + theGraphics.rect( 0 , 0 , _myWidth , _myBackgroundHeight - 1 ); + } + } + + protected void postDraw( PGraphics theGraphics ) { + if ( isBarVisible ) { + theGraphics.fill( isInside ? color.getForeground( ) : color.getBackground( ) ); + theGraphics.rect( 0 , -1 , _myWidth , -_myHeight ); + _myLabel.draw( theGraphics , 0 , -_myHeight - 1 , this ); + if ( isCollapse && isArrowVisible ) { + theGraphics.fill( _myLabel.getColor( ) ); + theGraphics.pushMatrix( ); + theGraphics.translate( 2 , 0 ); + if ( isOpen ) { + theGraphics.triangle( _myWidth - 10 , -_myHeight / 2 - 3 , _myWidth - 4 , -_myHeight / 2 - 3 , _myWidth - 7 , -_myHeight / 2 ); + } else { + theGraphics.triangle( _myWidth - 10 , -_myHeight / 2 , _myWidth - 4 , -_myHeight / 2 , _myWidth - 7 , -_myHeight / 2 - 3 ); + } + theGraphics.popMatrix( ); + } + } + } + + @ControlP5.Invisible + public void controlEvent( ControlEvent theEvent ) { + if ( theEvent.getController( ).getName( ).equals( getName( ) + "close" ) ) { + hide( ); + } + } + + @ControlP5.Invisible + public String stringValue( ) { + return Float.toString( _myValue ); + } + + @Override + public String toString( ) { + return super.toString( ); + } + + @Override + public String getInfo( ) { + return "type:\tControlGroup\n" + super.getInfo( ); + } + + public T addListener( final ControlListener theListener ) { + _myControlListener.add( theListener ); + return me; + } + + public T removeListener( final ControlListener theListener ) { + _myControlListener.remove( theListener ); + return me; + } + + public int listenerSize( ) { + return _myControlListener.size( ); + } + +} diff --git a/controlP5/ControlKey.java b/controlP5/ControlKey.java new file mode 100755 index 0000000..34d0186 --- /dev/null +++ b/controlP5/ControlKey.java @@ -0,0 +1,31 @@ +package main.java.src2.main.java.controlP5.controlP5; + +/** + * controlP5 is a processing gui library. + * + * 2006-2015 by Andreas Schlegel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place, Suite 330, + * Boston, MA 02111-1307 USA + * + * @author Andreas Schlegel (http://www.sojamo.de) + * @modified ##date## + * @version ##version## + * + */ + +public interface ControlKey { + + void keyEvent(); +} diff --git a/controlP5/ControlListener.java b/controlP5/ControlListener.java new file mode 100755 index 0000000..7843430 --- /dev/null +++ b/controlP5/ControlListener.java @@ -0,0 +1,52 @@ +package main.java.src2.main.java.controlP5.controlP5; + +/** + * controlP5 is a processing gui library. + * + * 2006-2015 by Andreas Schlegel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place, Suite 330, + * Boston, MA 02111-1307 USA + * + * @author Andreas Schlegel (http://www.sojamo.de) + * @modified ##date## + * @version ##version## + * + */ + +/** + * ControlListener is an interface that can be implemented by a custom class to be notified when + * controller values change. To add a ControlListener to a controller use Controller.addListner() + * + * @see Controller#addListener(ControlListener) + * @see CallbackListener + * + * @example use/ControlP5listenerForSingleController + */ +public 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. + * + * @see CallbackListener + * @see CallbackEvent + * @param theEvent + * ControlEvent + * @example ControlP5listener + */ + void controlEvent( ControlEvent theEvent ); + +} diff --git a/controlP5/ControlP5.java b/controlP5/ControlP5.java new file mode 100755 index 0000000..8630a7a --- /dev/null +++ b/controlP5/ControlP5.java @@ -0,0 +1,1455 @@ +package main.java.src2.main.java.controlP5.controlP5; + +/** + * controlP5 is a processing gui library. + * + * 2006-2015 by Andreas Schlegel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place, Suite 330, + * Boston, MA 02111-1307 USA + * + * @author Andreas Schlegel (http://www.sojamo.de) + * @modified ##date## + * @version ##version## + * + */ + +import java.io.File; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.reflect.Field; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.Date; +import java.util.HashMap; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.TreeMap; +import java.util.logging.Logger; + +import processing.core.PApplet; +import processing.core.PFont; +import processing.core.PGraphics; +import processing.event.KeyEvent; +import processing.event.MouseEvent; +import main.java.src2.main.java.controlP5.controlP5.ControlWindow.Pointer; + +/** + *

+ * controlP5 is a processing and java library for creating + * simple control GUIs. The ControlP5 class, the core of + * controlP5. + *

+ *

+ * All addController-Methods are located inside the + * ControlP5Base class. + *

+ * + * @see ControlP5Base + * @example use/ControlP5basics + */ +public class ControlP5 extends ControlP5Base { + + /** + * @exclude + */ + @ControlP5.Invisible public ControlWindow controlWindow; + + /** + * @exclude + */ + @ControlP5.Invisible static CColor color = new CColor( THEME_CP52014 ); + + /** + * @exclude + */ + @ControlP5.Invisible public PApplet papplet; + + /** + * @exclude + */ + @ControlP5.Invisible PGraphics pg; + int pgx = 0 , pgy = 0 , pgw = 0 , pgh = 0; + int ox = 0; + int oy = 0; + + boolean isGraphics = false; + + /** + * @exclude + */ + @ControlP5.Invisible public static final String VERSION = "2.2.6";// "##version##"; + + /** + * @exclude + */ + @ControlP5.Invisible public static boolean isApplet = false; + + static int renderer = J2D; + + /** + * use this static variable to turn DEBUG on or off. + */ + public static boolean DEBUG; + + /** + * @exclude + */ + @ControlP5.Invisible public static final Logger logger = Logger.getLogger( ControlP5.class.getName( ) ); + + private Map< String , ControllerInterface< ? >> _myControllerMap; + protected ControlBroadcaster _myControlBroadcaster; + protected ControlWindow window; + protected boolean isMoveable = false; + + /* TODO does not work anymore, deprecate? */ + protected boolean isAutoInitialization = false; + protected boolean isGlobalControllersAlwaysVisible = true; + protected boolean isTabEventsActive; + protected boolean isUpdate; + protected boolean isControlFont; + protected ControlFont controlFont; + static public final PFont BitFontStandard56 = new BitFont( CP.decodeBase64( BitFont.standard56base64 ) ); + static public final PFont BitFontStandard58 = new BitFont( CP.decodeBase64( BitFont.standard58base64 ) ); + protected ControlFont defaultFont = new ControlFont( BitFontStandard58 ); + protected ControlFont defaultFontForText = new ControlFont( BitFontStandard56 ); + + /** + * from version 0.7.2 onwards shortcuts are disabled by + * default. shortcuts can be enabled using + * controlP5.enableShortcuts(); + * + * @see #enableShortcuts() + */ + protected boolean isShortcuts = false; + + @Deprecated public boolean blockDraw; + protected Tooltip _myTooltip; + protected boolean isAnnotation; + boolean isAndroid = false; + + /** + * Create a new instance of controlP5. + * + * @param theParent PApplet + */ + public ControlP5( final PApplet theParent ) { + papplet = theParent; + init( ); + } + + public ControlP5( final PApplet theParent , PFont thePFont ) { + papplet = theParent; + init( ); + setFont( thePFont ); + } + + public ControlP5( final PApplet theParent , ControlFont theControlFont ) { + papplet = theParent; + init( ); + setFont( theControlFont ); + } + + protected void init( ) { + renderer = ( papplet.g.getClass( ).getCanonicalName( ).indexOf( "Java2D" ) > -1 ) ? J2D : P3D; + Class< ? > check = papplet.getClass( ); + while ( check != null ) { + check = check.getSuperclass( ); + if ( check != null ) { + if ( check.toString( ).toLowerCase( ).indexOf( "android.app." ) > -1 ) { + isAndroid = true; + break; + } + } + } + + isTabEventsActive = false; + + _myControlBroadcaster = new ControlBroadcaster( this ); + + // } else { + // defaultFont = new + // ControlFont(papplet.createFont("", 10)); + // + // defaultFontForText = new + // ControlFont(papplet.createFont("", 10)); + // } + + controlFont = defaultFont; + controlWindow = new ControlWindow( this , papplet ); + papplet.registerMethod( "pre" , this ); + papplet.registerMethod( "dispose" , this ); + setGraphics( papplet , 0 , 0 ); + _myControllerMap = new TreeMap< String , ControllerInterface< ? >>( ); + setFont( controlFont ); + _myTooltip = new Tooltip( this ); + super.init( this ); + + if ( welcome++ < 1 ) { + welcome( ); + } + + mapKeyFor( new ControlKey( ) { + + public void keyEvent( ) { + saveProperties( ); + } + } , PApplet.ALT , PApplet.SHIFT , 's' ); + + mapKeyFor( new ControlKey( ) { + + public void keyEvent( ) { + loadProperties( ); + } + } , PApplet.ALT , PApplet.SHIFT , 'l' ); + + mapKeyFor( new ControlKey( ) { + + public void keyEvent( ) { + if ( controlWindow.isVisible ) { + hide( ); + } else { + show( ); + } + } + } , PApplet.ALT , PApplet.SHIFT , 'h' ); + + disableShortcuts( ); + + setFont( controlFont ); + + } + + static int welcome = 0; + + private void welcome( ) { + System.out.println( "ControlP5 " + VERSION + " " + "infos, comments, questions at http://www.sojamo.de/libraries/controlP5" ); + } + + public ControlP5 setGraphics( PApplet theApplet , int theX , int theY ) { + setGraphics( theApplet.g , theX , theY ); + isGraphics = false; + return this; + } + + public ControlP5 setGraphics( PGraphics theGraphics , int theX , int theY ) { + pg = theGraphics; + pgx = theX; + pgy = theY; + pgw = pg.width; + pgh = pg.height; + isGraphics = true; + return this; + } + + public ControlP5 setPosition( int theX , int theY ) { + ox = theX; + oy = theY; + return this; + } + + /** + * By default event originating from tabs are disabled, + * use setTabEventsActive(true) to receive controlEvents + * when tabs are clicked. + * + * @param theFlag + */ + public void setTabEventsActive( boolean theFlag ) { + isTabEventsActive = theFlag; + } + + /** + * autoInitialization can be very handy when it comes to + * initializing values, e.g. you load a set of + * controllers, then the values that are attached to the + * controllers will be reset to its saved state. to turn + * of auto intialization, call + * setAutoInitialization(false) right after initializing + * controlP5 and before creating any controller. + * + * @param theFlag boolean + */ + public void setAutoInitialization( boolean theFlag ) { + isAutoInitialization = theFlag; + } + + /** + * by default controlP5 draws any controller on top of + * any drawing done in the draw() function (this doesnt + * apply to P3D where controlP5.draw() has to be called + * manually in the sketch's draw() function ). to turn + * off the auto drawing of controlP5, use + * controlP5.setAutoDraw(false). now you can call + * controlP5.draw() any time whenever controllers should + * be drawn into the sketch. + * + * @param theFlag boolean + */ + public void setAutoDraw( boolean theFlag ) { + if ( isAutoDraw( ) && !theFlag) { + controlWindow.papplet( ).unregisterMethod( "draw" , controlWindow ); + } + if ( !isAutoDraw() && theFlag) { + controlWindow.papplet( ).registerMethod( "draw" , controlWindow ); + } + controlWindow.isAutoDraw = theFlag; + } + + /** + * check if the autoDraw function for the main window is + * enabled(true) or disabled(false). + * + * @return boolean + */ + public boolean isAutoDraw( ) { + return controlWindow.isAutoDraw; + } + + /** + * + * @see ControlBroadcaster + */ + public ControlBroadcaster getControlBroadcaster( ) { + return _myControlBroadcaster; + } + + /** + * @see ControlListener + */ + public ControlP5 addListener( ControlListener ... theListeners ) { + getControlBroadcaster( ).addListener( theListeners ); + return this; + } + + /** + * @see ControlListener + */ + public ControlP5 removeListener( ControlListener ... theListeners ) { + getControlBroadcaster( ).removeListener( theListeners ); + return this; + } + + /** + * @see ControlListener + */ + public ControlP5 removeListener( ControlListener theListener ) { + getControlBroadcaster( ).removeListener( theListener ); + return this; + } + + /** + * @see ControlListener + */ + public ControlListener getListener( int theIndex ) { + return getControlBroadcaster( ).getListener( theIndex ); + } + + /** + * @see CallbackEvent + * @see CallbackListener + */ + public ControlP5 addCallback( CallbackListener ... theListeners ) { + getControlBroadcaster( ).addCallback( theListeners ); + return this; + } + + /** + * @see CallbackEvent + * @see CallbackListener + */ + public ControlP5 addCallback( CallbackListener theListener ) { + getControlBroadcaster( ).addCallback( theListener ); + return this; + } + + /** + * @see CallbackEvent + * @see CallbackListener + */ + public ControlP5 addCallback( CallbackListener theListener , Controller< ? > ... theControllers ) { + getControlBroadcaster( ).addCallback( theListener , theControllers ); + return this; + } + + /** + * @see CallbackEvent + * @see CallbackListener + */ + public ControlP5 removeCallback( CallbackListener ... theListeners ) { + getControlBroadcaster( ).removeCallback( theListeners ); + return this; + } + + /** + * @see CallbackEvent + * @see CallbackListener + */ + public ControlP5 removeCallback( Controller< ? > ... theControllers ) { + getControlBroadcaster( ).removeCallback( theControllers ); + return this; + } + + /** + * @see CallbackEvent + * @see CallbackListener + */ + public ControlP5 removeCallback( Controller< ? > theController ) { + getControlBroadcaster( ).removeCallback( theController ); + return this; + } + + /** + * TODO + * + * @exclude + */ + public void addControlsFor( Object theObject ) { + + } + + public Tab getTab( String theName ) { + for ( int i = 0 ; i < controlWindow.getTabs( ).size( ) ; i++ ) { + if ( controlWindow.getTabs( ).get( i ).getName( ).equals( theName ) ) { + return ( Tab ) controlWindow.getTabs( ).get( i ); + } + } + Tab myTab = addTab( theName ); + return myTab; + } + + public Tab getTab( ControlWindow theWindow , String theName ) { + for ( int i = 0 ; i < theWindow.getTabs( ).size( ) ; i++ ) { + if ( theWindow.getTabs( ).get( i ).getName( ).equals( theName ) ) { + return ( Tab ) theWindow.getTabs( ).get( i ); + } + } + Tab myTab = theWindow.add( new Tab( this , theWindow , theName ) ); + return myTab; + } + + /** + * registers a Controller with ControlP5, a Controller + * should/must be registered with a unique name. If not, + * accessing Controllers by name is not guaranteed. the + * rule here is last come last serve, existing + * Controllers with the same name will be overridden. + * + * @param theController ControllerInterface + * @return ControlP5 + */ + public ControlP5 register( Object theObject , String theIndex , ControllerInterface< ? > theController ) { + String address = ""; + if ( theObject == papplet ) { + address = ( theController.getName( ).startsWith( "/" ) ) ? "" : "/"; + address += theController.getName( ); + } else { + address = ( ( ( theIndex.length( ) == 0 ) || theIndex.startsWith( "/" ) ) ? "" : "/" ); + address += theIndex; + address += ( theController.getName( ).startsWith( "/" ) ? "" : "/" ); + address += theController.getName( ); + } + + theController.setAddress( address ); + + if ( checkName( theController.getAddress( ) ) ) { + /* in case a controller with the same name + * already exists, will be deleted */ + remove( theController.getAddress( ) ); + } + + /* add the controller to the controller map */ + _myControllerMap.put( theController.getAddress( ) , theController ); + + /* update the properties' controller address */ + List< ControllerProperty > ps = getProperties( ).get( theController ); + if ( ps != null ) { + for ( ControllerProperty p : ps ) { + p.setAddress( theController.getAddress( ) ); + } + } + /* initialize the controller */ + + theController.init( ); + + /* handle controller plugs and map controllers to + * its reference objects if applicable. */ + + if ( theObject == null ) { + theObject = papplet; + } + + if ( theController instanceof Controller< ? > ) { + + if ( !theObject.equals( papplet ) ) { + ( ( Controller< ? > ) ( ( Controller< ? > ) theController ).unplugFrom( papplet ) ).plugTo( theObject ); + } + + } + + if ( !_myObjectToControllerMap.containsKey( theObject ) ) { + _myObjectToControllerMap.put( theObject , new ArrayList< ControllerInterface< ? >>( ) ); + } + + _myObjectToControllerMap.get( theObject ).add( theController ); + return this; + } + + public ControlP5 register( ControllerInterface< ? > theController ) { + return register( papplet , "" , theController ); + } + + /** + * Returns a List of all controllers currently + * registered. + * + * @return List> + */ + public List< ControllerInterface< ? >> getAll( ) { + return new ArrayList< ControllerInterface< ? >>( _myControllerMap.values( ) ); + } + + /** + * Returns a list of controllers or groups of a + * particular type. The following example will return a + * list of registered Bangs only:
+ *
+	 * List list = controlP5.getAll(Bang.class);
+	 * println(list);
+	 * for(Bang b:list) {
+	 *   b.setColorForeground(color(255,255,0));
+	 * }
+	 * 
Here the foreground color of all Bangs + * is changed to yellow. + * + * @param + * @param theClass A class that extends + * ControllerInterface, which applies to all + * Controllers and ControllerGroups + * @return List + */ + @SuppressWarnings( "unchecked" ) public < T > List< T > getAll( Class< T > theClass ) { + ArrayList< T > l = new ArrayList< T >( ); + for ( ControllerInterface ci : _myControllerMap.values( ) ) { + if ( ci.getClass( ) == theClass || ci.getClass( ).getSuperclass( ) == theClass ) { + l.add( ( T ) ci ); + } + } + return l; + } + + protected void deactivateControllers( ) { + for ( Textfield t : getAll( Textfield.class ) ) { + t.setFocus( false ); + } + } + + private String checkAddress( String theName ) { + if ( !theName.startsWith( "/" ) ) { + return "/" + theName; + } + return theName; + } + + /** + * @excude + */ + public void printControllerMap( ) { + List< String > strs = new ArrayList< String >( ); + System.out.println( "============================================" ); + for ( Iterator it = _myControllerMap.entrySet( ).iterator( ) ; it.hasNext( ) ; ) { + Map.Entry entry = ( Map.Entry ) it.next( ); + Object key = entry.getKey( ); + Object value = entry.getValue( ); + strs.add( key + " = " + value ); + } + Collections.sort( strs ); + for ( String s : strs ) { + System.out.println( s ); + } + System.out.println( "============================================" ); + } + + /** + * removes a controller by instance. + * + * TODO Fix this. this only removes the reference to a + * controller from the controller map but not its + * children, fatal for controller groups! + * + * @param theController ControllerInterface + */ + protected void remove( ControllerInterface< ? > theController ) { + _myControllerMap.remove( theController.getAddress( ) ); + } + + /** + * removes a controlP5 element such as a controller, + * group, or tab by name. + * + * @param theString String + */ + public void remove( String theName ) { + String address = checkAddress( theName ); + + if ( getController( address ) != null ) { + getController( address ).remove( ); + } + + if ( getGroup( address ) != null ) { + getGroup( address ).remove( ); + } + + for ( int i = 0 ; i < controlWindow.getTabs( ).size( ) ; i++ ) { + if ( controlWindow.getTabs( ).get( i ).getAddress( ).equals( address ) ) { + controlWindow.getTabs( ).get( i ).remove( ); + } + } + _myControllerMap.remove( address ); + } + + public ControllerInterface< ? > get( String theName ) { + String address = checkAddress( theName ); + if ( _myControllerMap.containsKey( address ) ) { + return _myControllerMap.get( address ); + } + return null; + } + + public ControllerInterface< ? > get( Object theObject , String theName ) { + return getController( theName , theObject ); + } + + public < C > C get( Class< C > theClass , String theName ) { + for ( ControllerInterface< ? > ci : _myControllerMap.values( ) ) { + if ( ci.getClass( ) == theClass || ci.getClass( ).getSuperclass( ) == theClass ) { + return ( C ) get( theName ); + } + } + return null; + } + + /** + * @exclude + * @see ControlP5#getAll(Class) + * @return List + */ + @ControlP5.Invisible public List< ControllerInterface< ? >> getList( ) { + LinkedList< ControllerInterface< ? >> l = new LinkedList< ControllerInterface< ? >>( ); + l.addAll( controlWindow.getTabs( ).get( ) ); + l.addAll( getAll( ) ); + return l; + } + + public float getValue( String theIndex ) { + Controller c = getController( theIndex ); + if ( c != null ) { + return c.getValue( ); + } + return Float.NaN; + } + + public Controller< ? > getController( String theName ) { + String address = checkAddress( theName ); + if ( _myControllerMap.containsKey( address ) ) { + if ( _myControllerMap.get( address ) instanceof Controller< ? > ) { + return ( Controller< ? > ) _myControllerMap.get( address ); + } + } + return null; + } + + public ControllerGroup< ? > getGroup( String theGroupName ) { + String address = checkAddress( theGroupName ); + if ( _myControllerMap.containsKey( address ) ) { + if ( _myControllerMap.get( address ) instanceof ControllerGroup< ? > ) { + return ( ControllerGroup< ? > ) _myControllerMap.get( address ); + } + } + return null; + } + + private boolean checkName( String theName ) { + if ( _myControllerMap.containsKey( checkAddress( theName ) ) ) { + ControlP5.logger( ).warning( "Controller with name \"" + theName + "\" already exists. overwriting reference of existing controller." ); + return true; + } + return false; + } + + public void moveControllersForObject( Object theObject , ControllerGroup< ? > theGroup ) { + if ( _myObjectToControllerMap.containsKey( theObject ) ) { + ArrayList< ControllerInterface< ? >> cs = _myObjectToControllerMap.get( theObject ); + for ( ControllerInterface< ? > c : cs ) { + ( ( Controller< ? > ) c ).moveTo( theGroup ); + } + } + } + + public void move( Object theObject , ControllerGroup< ? > theGroup ) { + moveControllersForObject( theObject , theGroup ); + } + + protected void clear( ) { + controlWindow.clear( ); + _myControllerMap.clear( ); + } + + /** + * @exclude + */ + @ControlP5.Invisible public void pre( ) { + Iterator< FieldChangedListener > itr = _myFieldChangedListenerMap.values( ).iterator( ); + while ( itr.hasNext( ) ) { + itr.next( ).update( ); + } + } + + /** + * call draw() from your program when autoDraw is + * disabled. + * + * @exclude + */ + @ControlP5.Invisible public void draw( ) { + if ( !isAutoDraw( ) ) { + controlWindow.draw( ); + } + } + + /** + * convenience method to access the main window + * (ControlWindow class). + */ + public ControlWindow getWindow( ) { + return getWindow( papplet ); + } + + public void mouseEvent( MouseEvent theMouseEvent ) { + getWindow( ).mouseEvent( theMouseEvent ); + } + + public void keyEvent( KeyEvent theKeyEvent ) { + getWindow( ).keyEvent( theKeyEvent ); + } + + /** + * convenience method to access the pointer of the main + * control window. + */ + public Pointer getPointer( ) { + return getWindow( papplet ).getPointer( ); + } + + /** + * convenience method to check if the mouse (or pointer) + * is hovering over any controller. only applies to the + * main window. To receive the mouseover information for + * a ControlWindow use + * getWindow(nameOfWindow).isMouseOver(); + */ + public boolean isMouseOver( ) { + return getWindow( papplet ).isMouseOver( ); + } + + /** + * convenience method to check if the mouse (or pointer) + * is hovering over a specific controller. only applies + * to the main window. To receive the mouseover + * information for a ControlWindow use + * getWindow(nameOfWindow + * ).isMouseOver(ControllerInterface); + */ + public boolean isMouseOver( ControllerInterface< ? > theController ) { + return getWindow( papplet ).isMouseOver( theController ); + } + + /** + * convenience method to check if the mouse (or pointer) + * is hovering over a specific controller. only applies + * to the main window. To receive the mouseover + * information for a ControlWindow use + * getWindow(nameOfWindow).getMouseOverList(); + */ + public List< ControllerInterface< ? >> getMouseOverList( ) { + return getWindow( papplet ).getMouseOverList( ); + } + + public ControlWindow getWindow( PApplet theApplet ) { + if ( theApplet.equals( papplet ) ) { + return controlWindow; + } + // TODO !!! check for another window in case + // theApplet is of type + // PAppletWindow. + return controlWindow; + } + + /** + * adds a Canvas to the default sketch window. + * + * @see Canvas + */ + public ControlP5 addCanvas( Canvas theCanvas ) { + getWindow( ).addCanvas( theCanvas ); + return this; + } + + public ControlP5 removeCanvas( Canvas theCanvas ) { + getWindow( ).removeCanvas( theCanvas ); + return this; + } + + public ControlP5 setColor( CColor theColor ) { + setColorBackground( theColor.getBackground( ) ); + setColorForeground( theColor.getForeground( ) ); + setColorActive( theColor.getActive( ) ); + setColorCaptionLabel( theColor.getCaptionLabel( ) ); + setColorValueLabel( theColor.getValueLabel( ) ); + return this; + } + + public static CColor getColor( ) { + return color; + } + + /** + * sets the active state color of tabs and controllers, + * this cascades down to all known controllers. + */ + public ControlP5 setColorActive( int theColor ) { + color.setActive( theColor ); + controlWindow.setColorActive( theColor ); + return this; + } + + /** + * sets the foreground color of tabs and controllers, + * this cascades down to all known controllers. + */ + public ControlP5 setColorForeground( int theColor ) { + color.setForeground( theColor ); + controlWindow.setColorForeground( theColor ); + return this; + } + + /** + * sets the background color of tabs and controllers, + * this cascades down to all known controllers. + */ + public ControlP5 setColorBackground( int theColor ) { + color.setBackground( theColor ); + controlWindow.setColorBackground( theColor ); + return this; + } + + /** + * sets the label color of tabs and controllers, this + * cascades down to all known controllers. + */ + public ControlP5 setColorCaptionLabel( int theColor ) { + color.setCaptionLabel( theColor ); + controlWindow.setColorLabel( theColor ); + return this; + } + + /** + * sets the value color of controllers, this cascades + * down to all known controllers. + */ + public ControlP5 setColorValueLabel( int theColor ) { + color.setValueLabel( theColor ); + controlWindow.setColorValue( theColor ); + return this; + } + + public ControlP5 setBackground( int theColor ) { + controlWindow.setBackground( theColor ); + return this; + } + + /** + * Enables/disables Controllers to be moved around when + * ALT-key is down and mouse is dragged. Other key + * events are still available like ALT-h to hide and + * show the controllers To disable all key events, use + * disableKeys() + */ + public ControlP5 setMoveable( boolean theFlag ) { + isMoveable = theFlag; + return this; + } + + /** + * Checks if controllers are generally moveable + * + */ + public boolean isMoveable( ) { + return isMoveable; + } + + /** + * Saves the current values of controllers into a + * default properties file + * + * @see ControllerProperties + */ + public boolean saveProperties( ) { + return _myProperties.save( ); + } + + /** + * Saves the current values of controllers into a file, + * the filepath is given by parameter theFilePath. + * + * @see ControllerProperties + */ + public boolean saveProperties( String theFilePath ) { + return _myProperties.saveAs( theFilePath ); + } + + public boolean saveProperties( String theFilePath , String ... theSets ) { + return _myProperties.saveAs( theFilePath , theSets ); + } + + /** + * Loads properties from a default properties file and + * changes values of controllers accordingly. + * + * @see ControllerProperties + * @return + */ + public boolean loadProperties( ) { + return _myProperties.load( ); + } + + /** + * Loads properties from a properties file and changes + * the values of controllers accordingly, the filepath + * is given by parameter theFilePath. + * + * @param theFilePath + * @return + */ + public boolean loadProperties( final String theFilePath ) { + String path = theFilePath.endsWith( _myProperties.format.getExtension( ) ) ? theFilePath : theFilePath + "." + _myProperties.format.getExtension( ); + path = checkPropertiesPath( path ); + File f = new File( path); + + if ( f.exists( ) ) { + return _myProperties.load( path ); + } + logger.info( "Properties File " + path + " does not exist." ); + return false; + } + + String checkPropertiesPath( String theFilePath ) { + theFilePath = ( theFilePath.startsWith( "/" ) || theFilePath.startsWith( "." ) ) ? theFilePath : papplet.sketchPath( theFilePath ); + return theFilePath; + } + + /** + * @exclude + * @param theFilePath + * @return + */ + @ControlP5.Invisible public boolean loadLayout( String theFilePath ) { + theFilePath = checkPropertiesPath( theFilePath ); + File f = new File( theFilePath ); + if ( f.exists( ) ) { + getLayout( ).load( theFilePath ); + return true; + } + logger.info( "Layout File " + theFilePath + " does not exist." ); + return false; + } + + /** + * @exclude + * @param theFilePath + */ + public void saveLayout( String theFilePath ) { + getLayout( ).save( theFilePath ); + } + + /** + * Returns the current version of controlP5 + * + * @return String + */ + public String version( ) { + return VERSION; + } + + /** + * shows all controllers and tabs in your sketch. + * + * @see ControlP5#isVisible() + * @see ControlP5#hide() + */ + + public void show( ) { + controlWindow.show( ); + } + + public ControlP5 setBroadcast( boolean theValue ) { + _myControlBroadcaster.broadcast = theValue; + return this; + } + + /** + * returns true or false according to the current + * visibility flag. + * + * @see ControlP5#show() + * @see ControlP5#hide() + */ + public boolean isVisible( ) { + return controlWindow.isVisible( ); + } + + public ControlP5 setVisible( boolean b ) { + if ( b ) { + show( ); + } else { + hide( ); + } + return this; + } + + /** + * hide all controllers and tabs inside your sketch + * window. + * + * @see ControlP5#show() + * @see ControlP5#isVisible() + */ + public void hide( ) { + controlWindow.hide( ); + } + + /** + * forces all controllers to update. + * + * @see ControlP5#isUpdate() + * @see ControlP5#setUpdate() + */ + public void update( ) { + controlWindow.update( ); + } + + /** + * checks if automatic updates are enabled. By default + * this is true. + * + * @see ControlP5#update() + * @see ControlP5#setUpdate(boolean) + * @return + */ + public boolean isUpdate( ) { + return isUpdate; + } + + /** + * changes the update behavior according to parameter + * theFlag + * + * @see ControlP5#update() + * @see ControlP5#isUpdate() + * @param theFlag + */ + public void setUpdate( boolean theFlag ) { + isUpdate = theFlag; + controlWindow.setUpdate( theFlag ); + } + + public boolean setFont( ControlFont theControlFont ) { + controlFont = theControlFont; + isControlFont = true; + updateFont( controlFont ); + return isControlFont; + } + + public boolean setFont( PFont thePFont , int theFontSize ) { + controlFont = new ControlFont( thePFont , theFontSize ); + isControlFont = true; + updateFont( controlFont ); + return isControlFont; + } + + public boolean setFont( PFont thePFont ) { + controlFont = new ControlFont( thePFont ); + isControlFont = true; + updateFont( controlFont ); + return isControlFont; + } + + protected void updateFont( ControlFont theControlFont ) { + controlWindow.updateFont( theControlFont ); + } + + public ControlFont getFont( ) { + return controlFont; + } + + /** + * disables shortcuts such as alt-h for hiding/showing + * controllers + * + */ + public void disableShortcuts( ) { + isShortcuts = false; + } + + public boolean isShortcuts( ) { + return isShortcuts; + } + + /** + * enables shortcuts. + */ + public void enableShortcuts( ) { + isShortcuts = true; + } + + public Tooltip getTooltip( ) { + return _myTooltip; + } + + public void setTooltip( Tooltip theTooltip ) { + _myTooltip = theTooltip; + } + + public void setMouseWheelRotation( int theRotation ) { + getWindow( ).setMouseWheelRotation( theRotation ); + } + + /** + * cp5.begin() and cp5.end() are mechanisms to + * auto-layout controllers, see the ControlP5beginEnd + * example. + */ + public ControllerGroup< ? > begin( ) { + // TODO replace controlWindow.tab("default") with + // controlWindow.tabs().get(1); + return begin( controlWindow.getTab( "default" ) ); + } + + public ControllerGroup< ? > begin( ControllerGroup< ? > theGroup ) { + setCurrentPointer( theGroup ); + return theGroup; + } + + public ControllerGroup< ? > begin( int theX , int theY ) { + // TODO replace controlWindow.tab("default") with + // controlWindow.tabs().get(1); + return begin( controlWindow.getTab( "default" ) , theX , theY ); + } + + public ControllerGroup< ? > begin( ControllerGroup< ? > theGroup , int theX , int theY ) { + setCurrentPointer( theGroup ); + ControllerGroup.set( theGroup.autoPosition , theX , theY ); + theGroup.autoPositionOffsetX = theX; + return theGroup; + } + + public ControllerGroup< ? > begin( ControlWindow theWindow ) { + return begin( theWindow.getTab( "default" ) ); + } + + public ControllerGroup< ? > begin( ControlWindow theWindow , int theX , int theY ) { + return begin( theWindow.getTab( "default" ) , theX , theY ); + } + + public ControllerGroup< ? > end( ControllerGroup< ? > theGroup ) { + releaseCurrentPointer( theGroup ); + return theGroup; + } + + /** + * cp5.begin() and cp5.end() are mechanisms to + * auto-layout controllers, see the ControlP5beginEnd + * example. + */ + public ControllerGroup< ? > end( ) { + return end( controlWindow.getTab( "default" ) ); + } + + public void addPositionTo( int theX , int theY , List< ControllerInterface< ? >> theControllers ) { + float[] v = new float[] { theX , theY }; + for ( ControllerInterface< ? > c : theControllers ) { + float[] v1 = new float[ 2 ]; + Controller.set( v1 , Controller.x( c.getPosition( ) ) , Controller.y( c.getPosition( ) ) ); + c.setPosition( Controller.x( v ) + Controller.x( v1 ) , Controller.y( v ) + Controller.y( v1 ) ); + } + } + + public void addPositionTo( int theX , int theY , ControllerInterface< ? > ... theControllers ) { + addPositionTo( theX , theY , Arrays.asList( theControllers ) ); + } + + /** + * disposes and clears all controlP5 elements. When + * running in applet mode, opening new tabs or switching + * to another tab causes the applet to call dispose(). + * therefore dispose() is disabled when running ing + * applet mode. TODO implement better dispose handling + * for applets. + * + * @exclude + */ + public void dispose( ) { + if ( !isApplet ) { + clear( ); + } + } + + /* static helper functions including Object-to-Type + * conversions, invokes */ + + static public Object invoke( final Object theObject , final String theMember , final Object ... theParams ) { + return invoke( theObject , theObject.getClass( ) , theMember , theParams ); + } + + static public Object invoke( final Object theObject , final Class< ? > theClass , final String theMember , final Object ... theParams ) { + if ( theClass == null ) { + return null; + } + Class[] cs = new Class[ theParams.length ]; + + for ( int i = 0 ; i < theParams.length ; i++ ) { + Class c = theParams[ i ].getClass( ); + cs[ i ] = classmap.containsKey( c ) ? classmap.get( c ) : c; + } + try { + final Field f = theClass.getDeclaredField( theMember ); + /* TODO check super */ + f.setAccessible( true ); + Object o = theParams[ 0 ]; + Class cf = o.getClass( ); + if ( cf.equals( Integer.class ) ) { + f.setInt( theObject , i( o ) ); + } else if ( cf.equals( Float.class ) ) { + f.setFloat( theObject , f( o ) ); + } else if ( cf.equals( Long.class ) ) { + f.setLong( theObject , l( o ) ); + } else if ( cf.equals( Double.class ) ) { + f.setDouble( theObject , d( o ) ); + } else if ( cf.equals( Boolean.class ) ) { + f.setBoolean( theObject , b( o ) ); + } else if ( cf.equals( Character.class ) ) { + f.setChar( theObject , ( char ) i( o ) ); + } else { + f.set( theObject , o ); + } + } catch ( NoSuchFieldException e1 ) { + try { + final Method m = theClass.getDeclaredMethod( theMember , cs ); + m.setAccessible( true ); + try { + return m.invoke( theObject , theParams ); + } catch ( IllegalArgumentException e ) { + System.err.println( e ); + } catch ( IllegalAccessException e ) { + System.err.println( e ); + } catch ( InvocationTargetException e ) { + System.err.println( e ); + } + + } catch ( SecurityException e ) { + System.err.println( e ); + } catch ( NoSuchMethodException e ) { + invoke( theObject , theClass.getSuperclass( ) , theMember , theParams ); + } + } catch ( IllegalArgumentException e ) { + System.err.println( e ); + } catch ( IllegalAccessException e ) { + System.err.println( e ); + } + return null; + } + + static public boolean b( Object o ) { + return b( o , false ); + } + + static public boolean b( Object o , boolean theDefault ) { + return ( o instanceof Boolean ) ? ( ( Boolean ) o ).booleanValue( ) : ( o instanceof Number ) ? ((Number) o).intValue() != 0 : theDefault; + } + + static public boolean b( String o ) { + return b( o , false ); + } + + static public boolean b( String o , boolean theDefault ) { + return o.equalsIgnoreCase("true") || theDefault; + } + + static public int i( Object o ) { + return i( o , Integer.MIN_VALUE ); + } + + static public int i( Object o , int theDefault ) { + return ( o instanceof Number ) ? ( ( Number ) o ).intValue( ) : ( o instanceof String ) ? i( s( o ) ) : theDefault; + } + + static public int i( String o ) { + return i( o , Integer.MIN_VALUE ); + } + + static public int i( String o , int theDefault ) { + return isNumeric( o ) ? Integer.parseInt( o ) : theDefault; + } + + static public float f( Object o ) { + return f( o , Float.MIN_VALUE ); + } + + static public float f( Object o , float theDefault ) { + return ( o instanceof Number ) ? ( ( Number ) o ).floatValue( ) : ( o instanceof String ) ? f( s( o ) ) : theDefault; + } + + static public float f( String o ) { + return f( o , Float.MIN_VALUE ); + } + + static public float f( String o , float theDefault ) { + return isNumeric( o ) ? Float.parseFloat( o ) : theDefault; + } + + static public double d( Object o ) { + return d( o , Double.MIN_VALUE ); + } + + static public double d( Object o , double theDefault ) { + return ( o instanceof Number ) ? ( ( Number ) o ).doubleValue( ) : ( o instanceof String ) ? d( s( o ) ) : theDefault; + } + + static public double d( String o ) { + return d( o , Double.MIN_VALUE ); + } + + static public double d( String o , double theDefault ) { + return isNumeric( o ) ? Double.parseDouble( o ) : theDefault; + } + + static public long l( Object o ) { + return l( o , Long.MIN_VALUE ); + } + + static public long l( Object o , long theDefault ) { + return ( o instanceof Number ) ? ( ( Number ) o ).longValue( ) : ( o instanceof String ) ? l( s( o ) ) : theDefault; + } + + static public String s( Object o ) { + return ( o != null ) ? o.toString( ) : ""; + } + + static public String s( Object o , String theDefault ) { + return ( o != null ) ? o.toString( ) : theDefault; + } + + static public boolean isNumeric( Object o ) { + return isNumeric( o.toString( ) ); + } + + static public boolean isNumeric( String str ) { + return str.matches( "(-|\\+)?\\d+(\\.\\d+)?" ); + } + + static public List toList( final Object ... args ) { + List l = new ArrayList( ); + Collections.addAll( l , args ); + return l; + } + + static public List toList( Object o ) { + return o != null ? ( o instanceof List ) ? ( List ) o : ( o instanceof String ) ? toList( o.toString( ) ) : Collections.EMPTY_LIST : Collections.EMPTY_LIST; + } + + static public Map toMap( final String s ) { + /* similar to mapFrom(Object ... args) but with type + * (Number,String) sensitivity */ + String[] arr = s.trim( ).split( delimiter ); + Map m = new LinkedHashMap( ); + if ( arr.length % 2 == 0 ) { + for ( int i = 0 ; i < arr.length ; i += 2 ) { + String s1 = arr[ i + 1 ]; + m.put( arr[ i ] , isNumeric( s1 ) ? s1.indexOf( "." ) == -1 ? i( s1 ) : f( s1 ) : s1 ); + } + } + return m; + } + + static public Map toMap( Object o ) { + return o != null ? ( o instanceof Map ) ? ( Map ) o : Collections.EMPTY_MAP : Collections.EMPTY_MAP; + } + + static public Map toMap( final Object ... args ) { + Map m = new LinkedHashMap( ); + if ( args.length % 2 == 0 ) { + for ( int i = 0 ; i < args.length ; i += 2 ) { + m.put( args[ i ] , args[ i + 1 ] ); + } + } + return m; + } + + static public String s( String o ) { + return ( o != null ) ? o : ""; + } + + static Map< Class< ? > , Class< ? > > classmap = new HashMap< Class< ? > , Class< ? > >( ) { + { + put( Integer.class , int.class ); + put( Float.class , float.class ); + put( Double.class , double.class ); + put( Boolean.class , boolean.class ); + put( Character.class , char.class ); + put( Long.class , long.class ); + } + }; + + static public void sleep( long theMillis ) { + try { + Thread.sleep( theMillis ); + } catch ( Exception e ) { + + } + } + + static public String timestamp( ) { + return new SimpleDateFormat( "yyyyMMdd-HHmmss" ).format( new Date( ) ); + } + + /* add Objects with Annotation */ + + public static Logger logger( ) { + return logger; + } + + @Retention( RetentionPolicy.RUNTIME ) @interface Invisible { + } + + @Retention( RetentionPolicy.RUNTIME ) @interface Layout { + } + +} \ No newline at end of file diff --git a/controlP5/ControlP5Base.java b/controlP5/ControlP5Base.java new file mode 100755 index 0000000..9c6b47e --- /dev/null +++ b/controlP5/ControlP5Base.java @@ -0,0 +1,794 @@ +package main.java.src2.main.java.controlP5.controlP5; + +/** + * controlP5 is a processing gui library. + * + * 2006-2015 by Andreas Schlegel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place, Suite 330, + * Boston, MA 02111-1307 USA + * + * @author Andreas Schlegel (http://www.sojamo.de) + * @modified ##date## + * @version ##version## + * + */ + +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.TreeSet; + +import processing.core.PApplet; +import processing.event.Event; + +import static main.java.src2.main.java.controlP5.controlP5.Controller.*; + +/** + * The ControlP5Base supports the ControlP5 class and + * implements all adder methods to add controllers to + * controlP5. + */ +@SuppressWarnings( { "unchecked" , "rawtypes" } ) public class ControlP5Base extends ControlP5Legacy implements ControlP5Constants { + + protected ControlP5 cp5; + protected ControllerProperties _myProperties; + private ControllerAutomator _myAutomator; + protected Map< Object , ArrayList< ControllerInterface< ? >>> _myObjectToControllerMap = new HashMap< Object , ArrayList< ControllerInterface< ? >>>( ); + protected Map< String , FieldChangedListener > _myFieldChangedListenerMap = new HashMap< String , FieldChangedListener >( ); + protected Map< KeyCode , List< ControlKey >> keymap = new HashMap< KeyCode , List< ControlKey >>( ); + protected ControllerGroup< ? > currentGroupPointer; + protected boolean isCurrentGroupPointerClosed = true; + protected int autoDirection = ControlP5Constants.HORIZONTAL; + + public Tab getDefaultTab( ) { + return ( Tab ) cp5.controlWindow.getTabs( ).get( 1 ); + } + + protected void init( ControlP5 theControlP5 ) { + super.init( theControlP5 ); + cp5 = theControlP5; + _myProperties = new ControllerProperties( cp5 ); + _myAutomator = new ControllerAutomator( cp5 ); + currentGroupPointer = cp5.controlWindow.getTab( "default" ); + } + + public ControllerLayout getLayout( ) { + return new ControllerLayout( cp5 ); + } + + public Tab addTab( String theName ) { + for ( int i = 0 ; i < cp5.getWindow( ).getTabs( ).size( ) ; i++ ) { + if ( cp5.getWindow( ).getTabs( ).get( i ).getName( ).equals( theName ) ) { + return ( Tab ) cp5.getWindow( ).getTabs( ).get( i ); + } + } + Tab myTab = new Tab( cp5 , cp5.getWindow( ) , theName ); + cp5.getWindow( ).getTabs( ).add( myTab ); + return myTab; + } + + /** + * A Bang triggers an event without passing a value. + */ + public Bang addBang( final String theName ) { + return addBang( null , theName ); + } + + public Bang addBang( final Object theObject , final String theName ) { + return addBang( theObject , theObject != null ? theObject.toString( ) : "" , theName ); + } + + /** + * Triggers an event and passing a value. + */ + + public Button addButton( String theName ) { + return addButton( null , theName ); + } + + public Button addButton( final Object theObject , final String theName ) { + return addButton( theObject , theObject != null ? theObject.toString( ) : "" , theName , 1 ); + } + + public ButtonBar addButtonBar( String theName ) { + return addButtonBar( null , theName ); + } + + public ButtonBar addButtonBar( final Object theObject , final String theName ) { + return addButtonBar( theObject , theObject != null ? theObject.toString( ) : "" , theName , 1 ); + } + + /** + * Toggles a boolean field or passes a value when + * triggered. + */ + public Toggle addToggle( final Object theObject , final String theName ) { + return addToggle( theObject , theObject != null ? theObject.toString( ) : "" , theName ); + } + + public Toggle addToggle( final String theName ) { + return addToggle( null , theName ); + } + + /** + * Adds a default slider with a default width of 100 and + * height of 10. the default value range is from 0-100. + * + * By default it will be added to the default tab of the + * main window. Sliders can be arranged vertically and + * horizontally depending on their width and height. The + * look of a sliders control can either be a bar or a + * handle. you can add tickmarks to a slider or use the + * default free-control setting. A slider can be + * controller by mouse click, drag or mouse-wheel. + */ + public Slider addSlider( String theName ) { + return addSlider( null , theName ); + } + + public Slider addSlider( Object theObject , String theName ) { + return addSlider( theObject , theObject != null ? theObject.toString( ) : "" , theName ); + } + + /** + * A range controller, a slider that allows control on + * both ends of the slider. + */ + public Range addRange( final String theName ) { + return addRange( theName , 0 , 100 , 0 , 100 , 0 , 0 , 100 , 10 ); + } + + public Range addRange( final Object theObject , final String theName ) { + return addRange( theObject , theObject != null ? theObject.toString( ) : "" , theName , 0 , 100 , 0 , 100 , 0 , 0 , 100 , 10 ); + } + + public Numberbox addNumberbox( String theName ) { + return addNumberbox( null , theName ); + } + + public Numberbox addNumberbox( Object theObject , String theName ) { + return addNumberbox( theObject , theObject != null ? theObject.toString( ) : "" , theName ); + } + + /** + * Knobs can use limited and endless revolutions, custom + * angles and starting points. There are 2 control areas + * for a knob, an area closer to the edge allows + * 'click-and-adjust' control, a click and drag action + * at the inside allows to gradually change the value of + * a know when dragged. A knob can be controller by + * mouse click, drag or mouse-wheel. + */ + public Knob addKnob( String theName ) { + return addKnob( theName , 0 , 100 ); + } + + public Knob addKnob( Object theObject , String theName ) { + return addKnob( theObject , theObject != null ? theObject.toString( ) : "" , theName ); + } + + /** + * Matrix is a 2-D matrix controller using toggle + * controllers in a rows and a columns setup. useful for + * software drum machines. + */ + + public Matrix addMatrix( final String theName ) { + return addMatrix( theName , 10 , 10 , 0 , 0 , 100 , 100 ); + } + + public Matrix addMatrix( final Object theObject , final String theName ) { + return addMatrix( theObject , theObject != null ? theObject.toString( ) : "" , theName , 10 , 10 , 0 , 0 , 100 , 100 ); + } + + /** + * Adds a 2D slider to controlP5. A 2D slider is a 2D + * area with 1 cursor returning its xy coordinates. + */ + public Slider2D addSlider2D( final String theName ) { + return addSlider2D( null , theName ); + } + + public Slider2D addSlider2D( final Object theObject , final String theName ) { + return addSlider2D( theObject , theObject != null ? theObject.toString( ) : "" , theName , 0 , 100 , 0 , 100 , 0 , 0 , 0 , 0 , 100 , 100 ); + } + + public Textlabel addTextlabel( final String theName ) { + return addTextlabel( theName , "" , 0 , 0 ); + } + + /** + * A Textarea is a label without any controller + * functionality and can be used to leave notes, + * headlines, etc when extending the dedicated area of + * the Textrea, a scrollbar is added on the right. + */ + public Textarea addTextarea( final String theName ) { + return addTextarea( theName , "" , 0 , 0 , 200 , 100 ); + } + + // TODO + // addTextarea theObject + + /** + * A Textfield allows single line text input. If text + * goes beyond the edges of a Textfield box, the text + * will automatically scroll. Use Arrow keys to navigate + * back and forth. + */ + + public Textfield addTextfield( final String theIndex ) { + return addTextfield( theIndex , 0 , 0 , 200 , 20 ); + } + + public Textfield addTextfield( final Object theObject , final String theIndex ) { + return addTextfield( theObject , theObject != null ? theObject.toString( ) : "" , theIndex , 0 , 0 , 200 , 20 ); + } + + /** + * Use radio buttons for multiple choice options. + */ + public RadioButton addRadioButton( final String theName ) { + return addRadioButton( null , theName ); + } + + public RadioButton addRadioButton( final Object theObject , final String theName ) { + return addRadioButton( theObject , theObject != null ? theObject.toString( ) : "" , theName , 0 , 0 ); + } + + /** + * Use a checkbox for single choice options. + */ + public CheckBox addCheckBox( final String theName ) { + return addCheckBox( theName , 0 , 0 ); + } + + public CheckBox addCheckBox( final Object theObject , final String theName ) { + return addCheckBox( theObject , theObject != null ? theObject.toString( ) : "" , theName , 0 , 0 ); + } + + /** + * the ScrollableList replaces the DropwdownList and + * ListBox, the type for a ScrollableList can be set + * with setType(ControlP5.DROPDOWN | ControlP5.LIST). + */ + public ScrollableList addScrollableList( final String theName ) { + return addScrollableList( theName , 0 , 0 , 100 , 200 ); + } + + public ScrollableList addScrollableList( final Object theObject , String theName ) { + return addScrollableList( theObject , theObject != null ? theObject.toString( ) : "" , theName , 0 , 0 , 100 , 100 ); + } + + /** + * Multilist is a tree like menu. + */ + public MultiList addMultiList( final String theName ) { + return addMultiList( null , theName ); + } + + public MultiList addMultiList( final Object theObject , final String theName ) { + return addMultiList( theObject , theObject != null ? theObject.toString( ) : "" , theName , 0 , 0 , 100 , 100 ); + } + + public ColorWheel addColorWheel( final String theName ) { + return addColorWheel( null , theName ); + } + + public ColorWheel addColorWheel( final Object theObject , final String theName ) { + return addColorWheel( theObject , theObject != null ? theObject.toString( ) : "" , theName , 0 , 0 , 200 ); + } + + /** + * adds a simple RGBA colorpicker. + */ + public ColorPicker addColorPicker( final String theName ) { + return addColorPicker( null , theName ); + } + + public ColorPicker addColorPicker( final Object theObject , final String theName ) { + return addColorPicker( theObject , theObject != null ? theObject.toString( ) : "" , theName , 0 , 0 , 255 , 10 ); + } + + public Println addConsole( Textarea theTextarea ) { + return new Println( theTextarea ); + } + + /** + * returns the current framerate of the running sketch. + */ + public FrameRate addFrameRate( ) { + FrameRate myController = new FrameRate( cp5 , ( Tab ) cp5.controlWindow.getTabs( ).get( 1 ) , "-" , 0 , 4 ); + cp5.register( null , "" , myController ); + return myController; + } + + /** + * adds chart support to display float array based data. + */ + public Chart addChart( String theName ) { + return addChart( theName , 0 , 0 , 200 , 100 ); + } + + /** + * A controller group can be used to group controllers + * for a better organization of single controllers. + */ + + public Group addGroup( String theName ) { + return addGroup( theName , 0 , 0 ); + } + + public Group addGroup( final Object theObject , final String theName ) { + return addGroup( theObject , theObject != null ? theObject.toString( ) : "" , theName ); + } + + public Accordion addAccordion( final String theName ) { + return addAccordion( null , "" , theName ); + } + + public Accordion addAccordion( final Object theObject , final String theName ) { + return addAccordion( theObject , theObject != null ? theObject.toString( ) : "" , theName ); + } + + protected void setCurrentPointer( ControllerGroup< ? > theGroup ) { + currentGroupPointer = theGroup; + isCurrentGroupPointerClosed = false; + } + + protected void releaseCurrentPointer( ControllerGroup< ? > theGroup ) { + if (!isCurrentGroupPointerClosed) { + currentGroupPointer = theGroup; + isCurrentGroupPointerClosed = true; + } else { + ControlP5.logger( ).warning( "use .end() first before using .begin() again." ); + } + } + + public void setAutoAddDirection( int theDirection ) { + if ( theDirection == ControlP5Constants.HORIZONTAL ) { + autoDirection = ControlP5Constants.HORIZONTAL; + return; + } + autoDirection = ControlP5Constants.VERTICAL; + } + + public void setAutoSpacing( ) { + set( Controller.autoSpacing , 10 , 10 ); + } + + public void setAutoSpacing( float theX , float theY ) { + set( Controller.autoSpacing , theX , theY ); + } + + public void setAutoSpacing( float theX , float theY , float theZ ) { + setAutoSpacing( theX , theY ); + } + + @SuppressWarnings( "static-access" ) protected void linebreak( Controller< ? > theController , boolean theFlag , int theW , int theH , float[] theSpacing ) { + if ( x( currentGroupPointer.autoPosition ) + x( theController.autoSpacing ) + theW > cp5.papplet.width ) { + float x = x( currentGroupPointer.autoPosition ) + currentGroupPointer.autoPositionOffsetX; + float y = y( currentGroupPointer.autoPosition ) + currentGroupPointer.tempAutoPositionHeight; + set( currentGroupPointer.autoPosition , x , y ); + currentGroupPointer.tempAutoPositionHeight = 0; + Controller.set( theController.position , Controller.x( currentGroupPointer.autoPosition ) , Controller.y( currentGroupPointer.autoPosition ) ); + theFlag = false; + } + + if (theFlag) { + float y = y( currentGroupPointer.autoPosition ) + currentGroupPointer.tempAutoPositionHeight; + set( currentGroupPointer.autoPosition , currentGroupPointer.autoPositionOffsetX , y ); + currentGroupPointer.tempAutoPositionHeight = 0; + + } else { + if ( theController instanceof Slider ) { + float x = x( currentGroupPointer.autoPosition ) + theController.getCaptionLabel( ).getWidth( ); + float y = y( currentGroupPointer.autoPosition ); + set( currentGroupPointer.autoPosition , x , y ); + } + float x = x( currentGroupPointer.autoPosition ) + x( theController.autoSpacing ) + theW; + float y = y( currentGroupPointer.autoPosition ); + set( currentGroupPointer.autoPosition , x , y ); + if ( ( theH + y( theSpacing ) ) > currentGroupPointer.tempAutoPositionHeight ) { + currentGroupPointer.tempAutoPositionHeight = theH + y( theSpacing ); + } + } + } + + public ControlP5Base addControllersFor( PApplet theApplet ) { + addControllersFor( "" , theApplet ); + return cp5; + } + + /** + * Adds controllers for a specific object using + * annotations. + *

+ * Uses a forward slash delimited address, for example: + *

+ *

+ * lets say the theAddressSpace parameter is set to + * "hello", and the Object (second parameter) contains + * an annotated field "x", addControllersFor("hello", + * o); will add a controller for field x with address + * /hello/x This address can be used with + * getController("/hello/x") to access the controller of + * that particular Object and field. + *

+ */ + public ControlP5Base addControllersFor( final String theAddressSpace , Object t ) { + _myAutomator.addControllersFor( theAddressSpace , t ); + return cp5; + } + + public Object getObjectForController( ControllerInterface theController ) { + for ( Iterator it = _myObjectToControllerMap.entrySet( ).iterator( ) ; it.hasNext( ) ; ) { + Map.Entry entry = ( Map.Entry ) it.next( ); + Object key = entry.getKey( ); + ArrayList< ControllerInterface > value = ( ArrayList< ControllerInterface > ) entry.getValue( ); + for ( ControllerInterface c : value ) { + if ( c.equals( theController ) ) { + return key; + } + } + } + return null; + } + + public ControlP5Base setPosition( int theX , int theY , Object o ) { + if ( o != null && _myObjectToControllerMap.containsKey( o ) ) { + ArrayList< ControllerInterface< ? >> cs = _myObjectToControllerMap.get( o ); + for ( ControllerInterface< ? > c : cs ) { + int x = ( int ) x( c.getPosition( ) ) + theX; + int y = ( int ) y( c.getPosition( ) ) + theY; + c.setPosition( x , y ); + } + } + return cp5; + } + + public ControlP5Base hide( Object theObject ) { + if ( theObject != null && _myObjectToControllerMap.containsKey( theObject ) ) { + ArrayList< ControllerInterface< ? >> cs = _myObjectToControllerMap.get( theObject ); + for ( ControllerInterface< ? > c : cs ) { + c.hide( ); + } + } + return cp5; + } + + public ControlP5Base show( Object theObject ) { + if ( theObject != null && _myObjectToControllerMap.containsKey( theObject ) ) { + ArrayList< ControllerInterface< ? >> cs = _myObjectToControllerMap.get( theObject ); + for ( ControllerInterface< ? > c : cs ) { + c.show( ); + } + } + return cp5; + } + + /** + * for internal use only. use Controller.remove() + * instead. + * + * @param theObject + * @return + */ + public ControlP5Base remove( Object theObject ) { + if ( theObject != null && _myObjectToControllerMap.containsKey( theObject ) ) { + ArrayList< ControllerInterface< ? >> cs = _myObjectToControllerMap.get( theObject ); + for ( ControllerInterface< ? > c : cs ) { + c.remove( ); + } + } + return cp5; + } + + public ControlP5Base setColor( CColor theColor , Object theObject ) { + if ( _myObjectToControllerMap.containsKey( theObject ) ) { + ArrayList< ControllerInterface< ? >> cs = _myObjectToControllerMap.get( theObject ); + for ( ControllerInterface< ? > c : cs ) { + c.setColor( theColor ); + } + } + return cp5; + } + + public ControlP5Base listenTo( String theFieldName , Object theObject ) { + String key = theObject.hashCode( ) + String.valueOf(theFieldName.hashCode( )); + FieldChangedListener value = new FieldChangedListener( cp5 ); + value.listenTo( theObject , theFieldName ); + _myFieldChangedListenerMap.put( key , value ); + return cp5; + } + + public ControlP5Base stopListeningTo( String theFieldName , Object theObject ) { + String key = theObject.hashCode( ) + String.valueOf(theFieldName.hashCode( )); + _myFieldChangedListenerMap.remove( key ); + return cp5; + } + + public ControlP5Base moveTo( ControllerGroup< ? > theController , Object theObject ) { + if ( _myObjectToControllerMap.containsKey( theObject ) ) { + ArrayList< ControllerInterface< ? >> cs = _myObjectToControllerMap.get( theObject ); + for ( ControllerInterface< ? > c : cs ) { + c.moveTo( theController ); + } + } + return cp5; + } + + /* Properties */ + + public ControllerProperties getProperties( ) { + return _myProperties; + } + + public void removeProperty( ControllerInterface< ? > theController ) { + _myProperties.remove( theController ); + } + + /** + * prints a list of public methods of requested class + * into the console. You can specify patterns that will + * print methods found with only these particular + * patterns in their name. + *

+ * printed Format: returnType methodName(parameter type) + */ + public static void printPublicMethodsFor( Class< ? > theClass , String ... thePattern ) { + Set< String > set = getPublicMethodsFor( theClass , true , thePattern ); + String str = ""; + + str += "/**\n"; + str += "* ControlP5 " + theClass.getSimpleName( ) + "\n"; + str += "*\n"; + str += "*\n"; + str += "* find a list of public methods available for the " + theClass.getSimpleName( ) + " Controller\n"; + str += "* at the bottom of this sketch.\n"; + str += "*\n"; + str += "* by Andreas Schlegel, 2012\n"; + str += "* www.sojamo.de/libraries/controlp5\n"; + str += "*\n"; + str += "*/\n\n"; + str += "/*\n"; + str += "a list of all methods available for the " + theClass.getSimpleName( ) + " Controller\n"; + str += "use ControlP5.printPublicMethodsFor(" + theClass.getSimpleName( ) + ".class);\n"; + str += "to print the following list into the console.\n\n"; + str += "You can find further details about class " + theClass.getSimpleName( ) + " in the javadoc.\n\n"; + str += "Format:\n"; + str += "ClassName : returnType methodName(parameter type)\n\n\n"; + for ( String s : set ) { + str += s + "\n"; + } + str += "\n\n*/\n\n"; + ControlP5Legacy.println( str ); + } + + public static void printPublicMethodsFor( Class< ? > theClass ) { + printPublicMethodsFor( theClass , "" ); + } + + public static Set< String > getPublicMethodsFor( Class< ? > theClass ) { + return getPublicMethodsFor( theClass , true , "" ); + } + + public static Set< String > getPublicMethodsFor( Class< ? > theClass , String ... thePattern ) { + return getPublicMethodsFor( theClass , true , thePattern ); + } + + public static Set< String > getPublicMethodsFor( Class< ? > theClass , boolean theFlag ) { + return getPublicMethodsFor( theClass , true , "" ); + } + + public static Set< String > getPublicMethodsFor( Class< ? > theClass , boolean isSuperclass , String ... thePattern ) { + Set< String > s = new TreeSet< String >( ); + + Class< ? > c = theClass; + while ( c != null ) { + for ( Method method : c.getDeclaredMethods( ) ) { + if ( !method.isAnnotationPresent( Deprecated.class ) && !method.isAnnotationPresent( ControlP5.Invisible.class ) && method.getModifiers( ) == Modifier.PUBLIC ) { + for ( String p : thePattern ) { + if ( p.length( ) > 0 ) { + if ( !method.getName( ).toLowerCase( ).contains( p.toLowerCase( ) ) ) { + continue; + } + } + String params = ""; + for ( Class< ? > t : method.getParameterTypes( ) ) { + params += t.getSimpleName( ) + ", "; + } + if ( params.length( ) > 0 ) { + params = params.substring( 0 , params.length( ) - 2 ); + } + s.add( c.getCanonicalName( ) + " : " + method.getReturnType( ).getSimpleName( ).replace( "Object" , theClass.getSimpleName( ) ) + " " + method.getName( ) + "(" + params + ") " ); + } + } + } + + if ( isSuperclass ) { + c = c.getSuperclass( ); + } else { + c = null; + } + } + return s; + } + + public int getKeyCode( ) { + return cp5.getWindow( ).keyCode; + } + + public char getKey( ) { + return cp5.getWindow( ).key; + } + + private char[] fromIntToChar( int ... theChar ) { + char[] n = new char[ theChar.length ]; + for ( int i = 0 ; i < n.length ; i++ ) { + if ( theChar[ i ] >= 'a' && theChar[ i ] <= 'z' ) { + theChar[ i ] -= 32; + } + n[ i ] = ( char ) theChar[ i ]; + } + return n; + } + + public ControlP5 removeKeyFor( ControlKey theKey , int ... theChar ) { + removeKeyFor( theKey , fromIntToChar( theChar ) ); + return cp5; + } + + public ControlP5 mapKeyFor( ControlKey theKey , Object ... os ) { + List< Integer > l = new ArrayList< Integer >( ); + for ( Object o : os ) { + if ( o instanceof Integer ) { + l.add(( Integer ) o); + } else if ( o instanceof Character ) { + char c = ( ( Character ) o ); + if ( c >= 'a' && c <= 'z' ) { + c -= 32; + } + l.add( ( int ) c ); + } + } + + char[] n = new char[ l.size( ) ]; + for ( int i = 0 ; i < l.size( ) ; i++ ) { + n[ i ] = ( char ) ( ( int ) l.get( i ) ); + } + + KeyCode kc = new KeyCode( n ); + if ( !keymap.containsKey( kc ) ) { + keymap.put( kc , new ArrayList< ControlKey >( ) ); + } + keymap.get( kc ).add( theKey ); + cp5.enableShortcuts( ); + return cp5; + } + + public ControlP5 removeKeyFor( ControlKey theKey , char ... theChar ) { + List< ControlKey > l = keymap.get( new KeyCode( theChar ) ); + if ( l != null ) { + l.remove( theKey ); + } + return cp5; + } + + public ControlP5 removeKeysFor( char ... theChar ) { + keymap.remove( new KeyCode( theChar ) ); + return cp5; + } + + public ControlP5 removeKeysFor( int ... theChar ) { + removeKeysFor( fromIntToChar( theChar ) ); + return cp5; + } + + protected int modifiers; + + public boolean isShiftDown( ) { + return ( modifiers & Event.SHIFT & ( cp5.isShortcuts( ) ? -1 : 1 ) ) != 0; + } + + public boolean isControlDown( ) { + return ( modifiers & Event.CTRL & ( cp5.isShortcuts( ) ? -1 : 1 ) ) != 0; + } + + public boolean isMetaDown( ) { + return ( modifiers & Event.META & ( cp5.isShortcuts( ) ? -1 : 1 ) ) != 0; + } + + public boolean isAltDown( ) { + return ( modifiers & Event.ALT & ( cp5.isShortcuts( ) ? -1 : 1 ) ) != 0; + } + + static class KeyCode { + + final char[] chars; + + KeyCode( char ... theChars ) { + chars = theChars; + Arrays.sort( chars ); + } + + public String toString( ) { + String s = ""; + for ( char c : chars ) { + s += c + "(" + ( ( int ) c ) + ") "; + } + return s; + } + + public int size( ) { + return chars.length; + } + + public char[] getChars( ) { + return chars; + } + + public char get( int theIndex ) { + if ( theIndex >= 0 && theIndex < size( ) ) { + return chars[ theIndex ]; + } + return 0; + } + + public boolean equals( Object obj ) { + if ( ! ( obj instanceof KeyCode ) ) { + return false; + } + + KeyCode k = ( KeyCode ) obj; + + if ( k.size( ) != size( ) ) { + return false; + } + + for ( int i = 0 ; i < size( ) ; i++ ) { + if ( get( i ) != k.get( i ) ) { + return false; + } + } + return true; + } + + boolean contains( char n ) { + for ( char c : chars ) { + if ( n == c ) { + return true; + } + } + return false; + } + + public int hashCode( ) { + int hashCode = 0; + int n = 1; + for ( char c : chars ) { + hashCode += c + Math.pow( c , n++ ); + } + return hashCode; + } + } + +} diff --git a/controlP5/ControlP5Constants.java b/controlP5/ControlP5Constants.java new file mode 100755 index 0000000..3db4da1 --- /dev/null +++ b/controlP5/ControlP5Constants.java @@ -0,0 +1,191 @@ +package main.java.src2.main.java.controlP5.controlP5; + +/** + * controlP5 is a processing gui library. + * + * 2006-2015 by Andreas Schlegel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place, Suite 330, + * Boston, MA 02111-1307 USA + * + * @author Andreas Schlegel (http://www.sojamo.de) + * @modified ##date## + * @version ##version## + * + */ + +import processing.core.PApplet; + +/** + * Constant variables used with ControlP5 are stored here. + */ +public interface ControlP5Constants { + + String eventMethod = "controlEvent"; + boolean VERBOSE = false; + float PI = ( float ) Math.PI; + float TWO_PI = PI * 2; + float HALF_PI = PI / 2; + int INVALID = -1; + int METHOD = 0; + int FIELD = 1; + int EVENT = 2; + int INTEGER = 1; + int FLOAT = 2; + int BOOLEAN = 3; + int STRING = 4; + int ARRAY = 5; + int BITFONT = 100; + Class< ? >[] acceptClassList = { int.class , float.class , boolean.class , String.class }; + Class< ? > controlEventClass = ControlEvent.class; + int UP = PApplet.UP; // KeyEvent.VK_UP; + int DOWN = PApplet.DOWN; // KeyEvent.VK_DOWN; + int LEFT = PApplet.LEFT; // KeyEvent.VK_LEFT; + int RIGHT = PApplet.RIGHT; // KeyEvent.VK_RIGHT; + int SHIFT = PApplet.SHIFT; // KeyEvent.VK_SHIFT; + int DELETE = PApplet.DELETE; // KeyEvent.VK_DELETE; + int BACKSPACE = PApplet.BACKSPACE; // KeyEvent.VK_BACK_SPACE; + int ENTER = PApplet.ENTER; // KeyEvent.VK_ENTER; + int ESCAPE = PApplet.ESC; // KeyEvent.VK_ESCAPE; + int ALT = PApplet.ALT; // KeyEvent.VK_ALT; + int CONTROL = PApplet.CONTROL;// KeyEvent.VK_CONTROL; + int COMMANDKEY = 157; // Event.VK_META; + int TAB = PApplet.TAB; // KeyEvent.VK_TAB; + char INCREASE = PApplet.UP; + char DECREASE = PApplet.DOWN; + char SWITCH_FORE = PApplet.LEFT; + char SWITCH_BACK = PApplet.RIGHT; + char SAVE = 'S'; + char RESET = 'R'; + char PRINT = ' '; + char HIDE = 'H'; + char LOAD = 'L'; + char MENU = 'M'; + char KEYCONTROL = 'K'; + int TOP = 101; // PApplet.TOP + int BOTTOM = 102; // PApplet.BOTTOM + int CENTER = 3; // PApplet.CENTER + int BASELINE = 0; // PApplet.BASELINE + int HORIZONTAL = 0; + int VERTICAL = 1; + int DEFAULT = 0; + int OVER = 1; + int ACTIVE = 2; + int HIGHLIGHT = 3; + int IMAGE = 1; + int SPRITE = 2; + int CUSTOM = 3; + int SWITCH = 100; + int MOVE = 0; + int RELEASE = 2; + int RELEASED = 2; + int PRESSED = 1; + int PRESS = 1; + int LINE = 1; + int ELLIPSE = 2; + int ARC = 3; + int INACTIVE = 0; + int WAIT = 1; + int TRANSITION_WAIT_FADEIN = 2; + int FADEIN = 3; + int IDLE = 4; + int FADEOUT = 5; + int DONE = 6; + int SINGLE_COLUMN = 0; + int SINGLE_ROW = 1; + int MULTIPLES = 2; + int LIST = 0; + int DROPDOWN = 1; + int CHECKBOX = 2; /* TODO */ + int TREE = 3; /* TODO */ + + @Deprecated + int ACTION_PRESSED = 1; // MouseEvent.PRESS + int ACTION_PRESS = 1; // MouseEvent.PRESS + + @Deprecated + int ACTION_RELEASED = 2; // MouseEvent.RELEASE + int ACTION_RELEASE = 2; // MouseEvent.RELEASE + + int ACTION_CLICK = 3; // MouseEvent.CLICK + int ACTION_DRAG = 4; // MouseEvent.DRAG + int ACTION_MOVE = 5; // MouseEvent.MOVE + int ACTION_ENTER = 6; // MouseEvent.ENTER + int ACTION_LEAVE = 7; // MouseEvent.EXIT + int ACTION_EXIT = 7; // MouseEvent.EXIT + int ACTION_WHEEL = 8; // MouseEvent.WHEEL + @Deprecated + int ACTION_RELEASEDOUTSIDE = 9; + int ACTION_RELEASE_OUTSIDE = 9; + int ACTION_START_DRAG = 10; + int ACTION_END_DRAG = 11; + int ACTION_DOUBLE_PRESS = 12; + int ACTION_BROADCAST = 100; + int LEFT_OUTSIDE = 10; + int RIGHT_OUTSIDE = 11; + int TOP_OUTSIDE = 12; + int BOTTOM_OUTSIDE = 13; + int CAPTIONLABEL = 0; + int VALUELABEL = 1; + int SINGLE = 0; + + @Deprecated + int ALL = 1; + int MULTI = 1; + + /* http://clrs.cc/ */ + int NAVY = 0xFF001F3F; + int BLUE = 0xFF0074D9; + int AQUA = 0xFF7FDBFF; + int TEAL = 0xFF39CCCC; + int OLIVE = 0xFF3D9970; + int GREEN = 0xFF2ECC40; + int LIME = 0xFF01FF70; + int YELLOW = 0xFFFFDC00; + int ORANGE = 0xFFFF851B; + int RED = 0xFFFF4136; + int MAROON = 0xFF85144B; + int FUCHSIA = 0xFFF012BE; + int PURPLE = 0xFFB10DC9; + int WHITE = 0xFFFFFFFF; + int SILVER = 0xFFDDDDDD; + int GRAY = 0xFFAAAAAA; + int BLACK = 0xFF111111; + + + /*fg, bg, active, caption, value ) */ + CColor THEME_RETRO = new CColor( 0xff00698c , 0xff003652 , 0xff08a2cf , 0xffffffff , 0xffffffff ); + CColor THEME_CP52014 = new CColor( 0xff0074D9 , 0xff002D5A, 0xff00aaff , 0xffffffff , 0xffffffff ); + CColor THEME_CP5BLUE = new CColor( 0xff016c9e , 0xff02344d , 0xff00b4ea , 0xffffffff , 0xffffffff ); + CColor THEME_RED = new CColor( 0xffaa0000 , 0xff660000 , 0xffff0000 , 0xffffffff , 0xffffffff ); + CColor THEME_GREY = new CColor( 0xffeeeeee, 0xffbbbbbb , 0xffffffff , 0xff555555 , 0xff555555 ); + CColor THEME_A = new CColor( 0xff00FFC8 , 0xff00D7FF , 0xffffff00 , 0xff00B0FF , 0xff00B0FF ); + + // other colors: #ff3838 red-salmon; #08ffb4 turquoise; #40afff light-blue; #f3eddb beige; + + int standard58 = 0; + int standard56 = 1; + int synt24 = 2; + int grixel = 3; + int J2D = 1; + int P2D = 2; + int P3D = 3; + + String JSON = "JSON"; + String SERIALIZED = "SERIALIZED"; + + String delimiter = " "; + String pathdelimiter = "/"; + +} diff --git a/controlP5/ControlP5Legacy.java b/controlP5/ControlP5Legacy.java new file mode 100644 index 0000000..afd6598 --- /dev/null +++ b/controlP5/ControlP5Legacy.java @@ -0,0 +1,705 @@ +package main.java.src2.main.java.controlP5.controlP5; + +/** + * controlP5 is a processing gui library. + * + * 2006-2015 by Andreas Schlegel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place, Suite 330, + * Boston, MA 02111-1307 USA + * + * @author Andreas Schlegel (http://www.sojamo.de) + * @modified ##date## + * @version ##version## + * + */ + +import java.util.ArrayList; + +import processing.core.PApplet; +import static main.java.src2.main.java.controlP5.controlP5.Controller.*; + +public class ControlP5Legacy { + + private ControlP5Base base; + public static boolean DEBUG = false; + + void init( ControlP5Base theControlP5 ) { + base = theControlP5; + } + + public Spacer addSpacer( final String theName ) { + return addSpacer( theName , 0 , 0 , 100 , 20 ); + } + + public Spacer addSpacer( final String theName , final int theX , final int theY , final int theW , final int theH ) { + ControllerGroup tab = ( ControllerGroup< ? > ) base.cp5.controlWindow.getTabs( ).get( 1 ); + Spacer myController = new Spacer( base.cp5 , tab , theName , theX , theY , theW , theH ); + base.cp5.register( null , "" , myController ); + return myController; + } + + public Background addBackground( final String theName ) { + return addBackground( null , "" , theName , 0 , 0 , 300 , base.cp5.papplet.height ); + } + + public Background addBackground( Object theObject , final String theIndex , String theName , int theX , int theY , int theW , int theHeight ) { + Background myController = new Background( base.cp5 , ( ControllerGroup< ? > ) base.cp5.controlWindow.getTabs( ).get( 1 ) , theName , theX , theY , theW , theHeight ); + base.cp5.register( theObject , theIndex , myController ); + return myController; + } + + public Button addButton( final Object theObject , String theIndex , final String theName , final float theValue , final int theX , final int theY , final int theW , final int theH ) { + Button myController = new Button( base.cp5 , ( ControllerGroup< ? > ) base.cp5.controlWindow.getTabs( ).get( 1 ) , theName , theValue , theX , theY , theW , theH ); + base.cp5.register( theObject , theIndex , myController ); + myController.registerProperty( "value" ); + myController.getProperty( "value" ).disable( ); + return myController; + } + + public Icon addIcon( final Object theObject , String theIndex , final String theName , final float theValue , final int theX , final int theY , final int theW , final int theH ) { + Icon myController = new Icon( base.cp5 , ( ControllerGroup< ? > ) base.cp5.controlWindow.getTabs( ).get( 1 ) , theName , theValue , theX , theY , theW , theH ); + base.cp5.register( theObject , theIndex , myController ); + myController.registerProperty( "value" ); + myController.getProperty( "value" ).disable( ); + return myController; + } + + public ButtonBar addButtonBar( final Object theObject , String theIndex , final String theName , final float theValue , final int theX , final int theY , final int theW , final int theH ) { + ButtonBar myController = new ButtonBar( base.cp5 , ( ControllerGroup< ? > ) base.cp5.controlWindow.getTabs( ).get( 1 ) , theName , theX , theY , theW , theH ); + base.cp5.register( theObject , theIndex , myController ); + myController.registerProperty( "value" ); + myController.getProperty( "value" ).disable( ); + return myController; + } + + public Bang addBang( final Object theObject , String theIndex , final String theName , final int theX , final int theY , final int theWidth , final int theHeight ) { + Bang myController = new Bang( base.cp5 , ( Tab ) base.cp5.controlWindow.getTabs( ).get( 1 ) , theName , theX , theY , theWidth , theHeight ); + base.cp5.register( theObject , theIndex , myController ); + myController.registerProperty( "value" ); + myController.getProperty( "value" ).disable( ); + return myController; + } + + public Toggle addToggle( final Object theObject , String theIndex , final String theName , final boolean theDefaultValue , final float theX , final float theY , final int theWidth , final int theHeight ) { + Toggle myController = new Toggle( base.cp5 , ( Tab ) base.cp5.controlWindow.getTabs( ).get( 1 ) , theName , (theDefaultValue) ? 1f : 0f , theX , theY , theWidth , theHeight ); + base.cp5.register( theObject , theIndex , myController ); + myController.registerProperty( "value" ); + return myController; + } + + public Tooltip addTooltip( ) { + println( "Tooltip is not available with this Version (" , ControlP5.VERSION , ") of ControlP5" ); + return null; + } + + public Matrix addMatrix( final Object theObject , final String theIndex , final String theName , final int theCellX , final int theCellY , final int theX , final int theY , final int theWidth , final int theHeight ) { + Matrix myController = new Matrix( base.cp5 , ( Tab ) base.cp5.controlWindow.getTabs( ).get( 1 ) , theName , theCellX , theCellY , theX , theY , theWidth , theHeight ); + base.cp5.register( theObject , theIndex , myController ); + myController.registerProperty( "cells" ).registerProperty( "interval" ); + return myController; + } + + public Matrix addMatrix( final String theName , final int theCellX , final int theCellY , final int theX , final int theY , final int theWidth , final int theHeight ) { + return addMatrix( null , "" , theName , theCellX , theCellY , theX , theY , theWidth , theHeight ); + } + + public Slider2D addSlider2D( Object theObject , final String theIndex , final String theName , float theMinX , float theMaxX , float theMinY , float theMaxY , float theDefaultValueX , float theDefaultValueY , int theX , int theY , int theW , int theH ) { + Slider2D myController = new Slider2D( base.cp5 , ( ControllerGroup< ? > ) base.cp5.controlWindow.getTabs( ).get( 1 ) , theName , theX , theY , theW , theH ); + base.cp5.register( theObject , theIndex , myController ); + myController.setMinX( theMinX ); + myController.setMaxX( theMaxX ); + myController.setMinY( theMinY ); + myController.setMaxY( theMaxY ); + myController.setArrayValue( new float[] { theDefaultValueX , theDefaultValueY } ); + myController.updateValue( ); + myController.registerProperty( "arrayValue" ).registerProperty( "minX" ).registerProperty( "maxX" ).registerProperty( "minY" ).registerProperty( "maxY" ); + return myController; + } + + public Slider addSlider( Object theObject , final String theIndex , final String theName , float theMin , float theMax , float theDefaultValue , int theX , int theY , int theW , int theH ) { + Slider myController = new Slider( base.cp5 , ( ControllerGroup< ? > ) base.cp5.controlWindow.getTabs( ).get( 1 ) , theName , theMin , theMax , theDefaultValue , theX , theY , theW , theH ); + base.cp5.register( theObject , theIndex , myController ); + myController.registerProperty( "value" ).registerProperty( "min" ).registerProperty( "max" ); + return myController; + } + + public Slider addSlider( String theName , float theMin , float theMax , float theDefaultValue , int theX , int theY , int theW , int theH ) { + return addSlider( null , "" , theName , theMin , theMax , theDefaultValue , theX , theY , theW , theH ); + } + + public Slider addSlider( final String theName , final float theMin , final float theMax , final int theX , final int theY , final int theWidth , final int theHeight ) { + return addSlider( null , "" , theName , theMin , theMax , theMin , theX , theY , theWidth , theHeight ); + } + + public Slider addSlider( Object theObject , final String theIndex , final String theName , float theMin , float theMax , int theX , int theY , int theW , int theH ) { + return addSlider( theObject , theIndex , theName , theMin , theMax , theMin , theX , theY , theW , theH ); + } + + public Range addRange( Object theObject , final String theIndex , String theName , float theMin , float theMax , float theDefaultMinValue , float theDefaultMaxValue , int theX , int theY , int theW , int theH ) { + Range myController = new Range( base.cp5 , ( ControllerGroup< ? > ) base.cp5.controlWindow.getTabs( ).get( 1 ) , theName , theMin , theMax , theDefaultMinValue , theDefaultMaxValue , theX , theY , theW , theH ); + base.cp5.register( theObject , theIndex , myController ); + myController.registerProperty( "lowValue" ).registerProperty( "highValue" ); + return myController; + } + + public Range addRange( String theName , float theMin , float theMax , float theDefaultMinValue , float theDefaultMaxValue , int theX , int theY , int theW , int theH ) { + return addRange( null , "" , theName , theMin , theMax , theDefaultMinValue , theDefaultMaxValue , theX , theY , theW , theH ); + } + + public Range addRange( final String theName , final float theMin , final float theMax , final int theX , final int theY , final int theWidth , final int theHeight ) { + return addRange( null , "" , theName , theMin , theMax , theMin , theMax , theX , theY , theWidth , theHeight ); + } + + public Range addRange( final Object theObject , final String theIndex , final String theName , final float theMin , final float theMax , final int theX , final int theY , final int theWidth , final int theHeight ) { + return addRange( theObject , theIndex , theName , theMin , theMax , theMin , theMax , theX , theY , theWidth , theHeight ); + } + + public Numberbox addNumberbox( final Object theObject , final String theIndex , final String theName , final float theDefaultValue , final int theX , final int theY , final int theWidth , final int theHeight ) { + Numberbox myController = new Numberbox( base.cp5 , ( Tab ) base.cp5.controlWindow.getTabs( ).get( 1 ) , theName , theDefaultValue , theX , theY , theWidth , theHeight ); + base.cp5.register( theObject , theIndex , myController ); + myController.registerProperty( "value" ); + return myController; + } + + public Numberbox addNumberbox( final String theName , final int theX , final int theY , final int theWidth , final int theHeight ) { + return addNumberbox( null , "" , theName , Float.NaN , theX , theY , theWidth , theHeight ); + } + + public Numberbox addNumberbox( final Object theObject , final String theIndex , final String theName , final int theX , final int theY , final int theWidth , final int theHeight ) { + return addNumberbox( theObject , theIndex , theName , Float.NaN , theX , theY , theWidth , theHeight ); + } + + public Numberbox addNumberbox( final String theName , final float theDefaultValue , final int theX , final int theY , final int theWidth , final int theHeight ) { + return addNumberbox( null , "" , theName , theDefaultValue , theX , theY , theWidth , theHeight ); + } + + public Knob addKnob( final Object theObject , final String theIndex , final String theName , final float theMin , final float theMax , final float theDefaultValue , final int theX , final int theY , final int theDiameter ) { + Knob myController = new Knob( base.cp5 , ( Tab ) base.cp5.controlWindow.getTabs( ).get( 1 ) , theName , theMin , theMax , theDefaultValue , theX , theY , theDiameter ); + base.cp5.register( theObject , theIndex , myController ); + myController.registerProperty( "value" ); + return myController; + } + + public Knob addKnob( final String theName , final float theMin , final float theMax , final int theX , final int theY , final int theDiameter ) { + return addKnob( null , "" , theName , theMin , theMax , theMin , theX , theY , theDiameter ); + } + + public Knob addKnob( final Object theObject , final String theIndex , final String theName , final float theMin , final float theMax , final int theX , final int theY , final int theDiameter ) { + return addKnob( theObject , theIndex , theName , theMin , theMax , theX , theY , theDiameter ); + } + + public Knob addKnob( final String theName , final float theMin , final float theMax , final float theDefaultValue , final int theX , final int theY , final int theDiameter ) { + return addKnob( null , "" , theName , theMin , theMax , theDefaultValue , theX , theY , theDiameter ); + } + + public MultiList addMultiList( final Object theObject , final String theIndex , final String theName , final int theX , final int theY , final int theWidth , final int theHeight ) { + MultiList myController = new MultiList( base.cp5 , ( Tab ) base.cp5.controlWindow.getTabs( ).get( 1 ) , theName , theX , theY , theWidth , theHeight ); + base.cp5.register( theObject , theIndex , myController ); + myController.registerProperty( "value" ); + return myController; + } + + public MultiList addMultiList( final String theName , final int theX , final int theY , final int theWidth , final int theHeight ) { + return addMultiList( null , "" , theName , theX , theY , theWidth , theHeight ); + } + + public Textlabel addLabel( String theIndex ) { + return addTextlabel( theIndex , theIndex , 0 , 0 ); + } + + public Textlabel addLabel( String theIndex , int theX , int theY ) { + return addTextlabel( theIndex , theIndex , theX , theY ); + } + + public Textlabel addTextlabel( final Object theObject , final String theIndex , final String theName , final String theText , final int theX , final int theY ) { + Textlabel myController = new Textlabel( base.cp5 , ( Tab ) base.cp5.controlWindow.getTabs( ).get( 1 ) , theName , theText , theX , theY ); + base.cp5.register( theObject , theIndex , myController ); + myController.registerProperty( "value" ).registerProperty( "stringValue" ); + return myController; + } + + public Textlabel addTextlabel( final String theName , final String theText , final int theX , final int theY ) { + return addTextlabel( null , "" , theName , theText , theX , theY ); + } + + public Textlabel addTextlabel( final Object theObject , final String theIndex , final String theName , final String theText ) { + return addTextlabel( theObject , theIndex , theName , theText , 0 , 0 ); + } + + public Textlabel addTextlabel( final String theName , final String theText ) { + return addTextlabel( null , "" , theName , theText , 0 , 0 ); + } + + public Textarea addTextarea( final String theName , final String theText , final int theX , final int theY , final int theW , final int theH ) { + Textarea myController = new Textarea( base.cp5 , ( Tab ) base.cp5.controlWindow.getTabs( ).get( 1 ) , theName , theText , theX , theY , theW , theH ); + base.cp5.register( null , "" , myController ); + myController.registerProperty( "text" ); + return myController; + } + + public Textfield addTextfield( final Object theObject , final String theIndex , final String theName , final int theX , final int theY , final int theW , final int theH ) { + Textfield myController = new Textfield( base.cp5 , ( Tab ) base.cp5.controlWindow.getTabs( ).get( 1 ) , theName , "" , theX , theY , theW , theH ); + base.cp5.register( theObject , theIndex , myController ); + myController.registerProperty( "text" ); + return myController; + } + + public Textfield addTextfield( final String theName , final int theX , final int theY , final int theW , final int theH ) { + return addTextfield( null , "" , theName , theX , theY , theW , theH ); + } + + public Textfield addTextfield( final Object theObject , final String theIndex , final String theName ) { + return addTextfield( theObject , theIndex , theName , 0 , 0 , 99 , 19 ); + } + + public Accordion addAccordion( String theName , int theX , int theY , int theWidth ) { + Accordion myController = new Accordion( base.cp5 , ( Tab ) base.cp5.controlWindow.getTabs( ).get( 1 ) , theName , theX , theY , theWidth ); + base.cp5.register( null , "" , myController ); + return myController; + } + + public Accordion addAccordion( final Object theObject , final String theIndex , final String theName ) { + Accordion myController = new Accordion( base.cp5 , ( Tab ) base.cp5.controlWindow.getTabs( ).get( 1 ) , theName , 0 , 0 , 200 ); + base.cp5.register( theObject , theIndex , myController ); + return myController; + } + + public RadioButton addRadioButton( final Object theObject , String theIndex , final String theName , final int theX , final int theY ) { + RadioButton myController = new RadioButton( base.cp5 , ( Tab ) base.cp5.controlWindow.getTabs( ).get( 1 ) , theName , theX , theY ); + base.cp5.register( theObject , theIndex , myController ); + myController.registerProperty( "arrayValue" ); + return myController; + } + + public RadioButton addRadioButton( final String theName , final int theX , final int theY ) { + return addRadioButton( null , "" , theName , theX , theY ); + } + + /** + * Use radio buttons for multiple choice options. + */ + public RadioButton addRadio( final String theName ) { + return addRadioButton( theName , 0 , 0 ); + } + + public RadioButton addRadio( final String theName , final int theX , final int theY ) { + RadioButton myController = new RadioButton( base.cp5 , ( Tab ) base.cp5.controlWindow.getTabs( ).get( 1 ) , theName , theX , theY ); + base.cp5.register( null , "" , myController ); + myController.registerProperty( "arrayValue" ); + return myController; + } + + public CheckBox addCheckBox( final Object theObject , final String theIndex , final String theName , final int theX , final int theY ) { + CheckBox myController = new CheckBox( base.cp5 , ( Tab ) base.cp5.controlWindow.getTabs( ).get( 1 ) , theName , theX , theY ); + base.cp5.register( theObject , theIndex , myController ); + myController.registerProperty( "arrayValue" ); + return myController; + } + + public CheckBox addCheckBox( final String theName , final int theX , final int theY ) { + return addCheckBox( null , "" , theName , theX , theY ); + } + + public ScrollableList addScrollableList( final Object theObject , String theIndex , final String theName ) { + return addScrollableList( theObject , theIndex , theName , 0 , 0 , 100 , 100 ); + } + + public ScrollableList addScrollableList( final Object theObject , String theIndex , final String theName , final int theX , final int theY , final int theW , final int theH ) { + ScrollableList myController = new ScrollableList( base.cp5 , ( Tab ) base.cp5.controlWindow.getTabs( ).get( 1 ) , theName , theX , theY , theW , theH ); + base.cp5.register( theObject , theIndex , myController ); + myController.registerProperty( "value" ); + return myController; + } + + public ScrollableList addScrollableList( final String theName , final int theX , final int theY , final int theW , final int theH ) { + return addScrollableList( null , "" , theName , theX , theY , theW , theH ); + } + + /** + * A list box is a list of items a user can choose from. + * When items exceed the dedicated area of a list box, a + * scrollbar is added to the right of the box. the Box + * can be navigated using mouse click, drag and the + * mouse-wheel. + */ + public ListBox addListBox( final String theName ) { + return addListBox( theName , 0 , 0 , 99 , 199 ); + } + + public ListBox addListBox( final Object theObject , String theIndex , final String theName , final int theX , final int theY , final int theW , final int theH ) { + ListBox myController = new ListBox( base.cp5 , ( Tab ) base.cp5.controlWindow.getTabs( ).get( 1 ) , theName , theX , theY , theW , theH ); + base.cp5.register( theObject , theIndex , myController ); + myController.registerProperty( "listBoxItems" ).registerProperty( "value" ); + return myController; + } + + public ListBox addListBox( final String theName , final int theX , final int theY , final int theW , final int theH ) { + return addListBox( null , "" , theName , theX , theY , theW , theH ); + } + + public DropdownList addDropdownList( final String theName ) { + return addDropdownList( theName , 0 , 0 , 99 , 99 ); + } + + public DropdownList addDropdownList( final Object theObject , final String theIndex , final String theName , final int theX , final int theY , final int theW , final int theH ) { + DropdownList myController = new DropdownList( base.cp5 , ( Tab ) base.cp5.controlWindow.getTabs( ).get( 1 ) , theName , theX , theY , theW , theH ); + base.cp5.register( theObject , theIndex , myController ); + myController.registerProperty( "listBoxItems" ).registerProperty( "value" ); + return myController; + } + + public DropdownList addDropdownList( final String theName , final int theX , final int theY , final int theW , final int theH ) { + return addDropdownList( null , "" , theName , theX , theY , theW , theH ); + } + + public ColorWheel addColorWheel( final Object theObject , final String theIndex , final String theName , final int theX , final int theY , final int theW ) { + ColorWheel myController = new ColorWheel( base.cp5 , ( Tab ) base.cp5.controlWindow.getTabs( ).get( 1 ) , theName , theX , theY , theW , theW ); + base.cp5.register( theObject , theIndex , myController ); + myController.registerProperty( "arrayValue" ); + return myController; + } + + public ColorWheel addColorWheel( final String theName , final int theX , final int theY , final int theW ) { + return addColorWheel( null , "" , theName , theX , theY , theW ); + } + + public ColorPicker addColorPicker( final String theName , final int theX , final int theY , final int theW , final int theH ) { + return addColorPicker( null , "" , theName , theX , theY , theW , theH ); + } + + public ColorPicker addColorPicker( final Object theObject , final String theIndex , final String theName , final int theX , final int theY , final int theW , final int theH ) { + ColorPicker myController = new ColorPicker( base.cp5 , ( Tab ) base.cp5.controlWindow.getTabs( ).get( 1 ) , theName , theX , theY , theW , theH ); + base.cp5.register( theObject , theIndex , myController ); + myController.registerProperty( "arrayValue" ); + return myController; + } + + public Chart addChart( String theName , int theX , int theY , int theW , int theH ) { + Chart myController = new Chart( base.cp5 , ( Tab ) base.cp5.controlWindow.getTabs( ).get( 1 ) , theName , theX , theY , theW , theH ); + base.cp5.register( null , "" , myController ); + return myController; + } + + public Group addGroup( Object theObject , final String theIndex , String theName , int theX , int theY , int theW ) { + Group myController = new Group( base.cp5 , ( ControllerGroup< ? > ) base.cp5.controlWindow.getTabs( ).get( 1 ) , theName , theX , theY , theW , 9 ); + base.cp5.register( theObject , theIndex , myController ); + return myController; + } + + public Group addGroup( Object theObject , String theIndex , String theName , int theX , int theY ) { + return addGroup( theObject , theIndex , theName , theX , theY , 99 ); + } + + public Group addGroup( String theName , int theX , int theY , int theW ) { + return addGroup( null , "" , theName , theX , theY , theW ); + } + + public Group addGroup( Object theObject , String theIndex , String theName ) { + return addGroup( theObject , theIndex , theName , 0 , 0 ); + } + + public Group addGroup( String theName , int theX , int theY ) { + return addGroup( null , "" , theName , theX , theY , 99 ); + } + + public Textlabel getTextlabel( String theText , int theX , int theY ) { + return new Textlabel( base.cp5 , theText , theX , theY ); + } + + public Textlabel getTextlabel( ) { + return getTextlabel( "" , 0 , 0 ); + } + + public Slider addSlider( Object theObject , final String theIndex , String theName ) { + return addSlider( theObject , theIndex , theName , 0 , 100 ); + } + + public Slider addSlider( String theName , float theMin , float theMax ) { + return addSlider( null , "" , theName , theMin , theMax ); + } + + public Slider addSlider( Object theObject , final String theIndex , String theName , float theMin , float theMax ) { + int x = ( int ) x( base.currentGroupPointer.autoPosition ); + int y = ( int ) y( base.currentGroupPointer.autoPosition ); + Slider s = addSlider( theObject , theIndex , theName , theMin , theMax , theMin , x , y , Slider.autoWidth , Slider.autoHeight ); + base.linebreak( s , false , Slider.autoWidth , Slider.autoHeight , Slider.autoSpacing ); + s.moveTo( base.currentGroupPointer ); + if ( base.autoDirection == ControlP5Constants.VERTICAL ) { + s.linebreak( ); + } + return s; + } + + public Button addButton( Object theObject , final String theIndex , String theName ) { + return addButton( theObject , theIndex , theName , 1 ); + } + + public Button addButton( String theName , float theValue ) { + return addButton( null , "" , theName , theValue ); + } + + public Button addButton( Object theObject , final String theIndex , String theName , float theValue ) { + int x = ( int ) x( base.currentGroupPointer.autoPosition ); + int y = ( int ) y( base.currentGroupPointer.autoPosition ); + Button b = addButton( theObject , theIndex , theName , theValue , x , y , Button.autoWidth , Button.autoHeight ); + base.linebreak( b , false , Button.autoWidth , Button.autoHeight , Button.autoSpacing ); + b.moveTo( base.currentGroupPointer ); + return b; + } + + public ButtonBar addButtonBar( Object theObject , final String theIndex , String theName , float theValue ) { + int x = ( int ) x( base.currentGroupPointer.autoPosition ); + int y = ( int ) y( base.currentGroupPointer.autoPosition ); + ButtonBar b = addButtonBar( theObject , theIndex , theName , theValue , x , y , Button.autoWidth , Button.autoHeight ); + base.linebreak( b , false , Button.autoWidth , Button.autoHeight , Button.autoSpacing ); + b.moveTo( base.currentGroupPointer ); + return b; + } + + public Icon addIcon( Object theObject , final String theIndex , String theName ) { + return addIcon( theObject , theIndex , theName , 1 ); + } + + public Icon addIcon( String theName , float theValue ) { + return addIcon( null , "" , theName , theValue ); + } + + public Icon addIcon( Object theObject , final String theIndex , String theName , float theValue ) { + int x = ( int ) x( base.currentGroupPointer.autoPosition ); + int y = ( int ) y( base.currentGroupPointer.autoPosition ); + Icon icon = addIcon( theObject , theIndex , theName , theValue , x , y , Icon.autoWidth , Icon.autoHeight ); + base.linebreak( icon , false , Icon.autoWidth , Icon.autoHeight , Icon.autoSpacing ); + icon.moveTo( base.currentGroupPointer ); + return icon; + } + + public Bang addBang( Object theObject , final String theIndex , String theName ) { + int x = ( int ) x( base.currentGroupPointer.autoPosition ); + int y = ( int ) y( base.currentGroupPointer.autoPosition ); + Bang b = addBang( theObject , theIndex , theName , x , y , Bang.autoWidth , Bang.autoHeight ); + base.linebreak( b , false , Bang.autoWidth , Bang.autoHeight , Bang.autoSpacing ); + b.moveTo( base.currentGroupPointer ); + return b; + } + + public Toggle addToggle( Object theObject , final String theIndex , String theName ) { + return addToggle( theObject , theIndex , theName , false ); + } + + public Toggle addToggle( Object theObject , final String theIndex , String theName , boolean theValue ) { + Toggle t = addToggle( theObject , theIndex , theName , theValue , x( base.currentGroupPointer.autoPosition ) , y( base.currentGroupPointer.autoPosition ) , Toggle.autoWidth , Toggle.autoHeight ); + base.linebreak( t , false , Toggle.autoWidth , Toggle.autoHeight , t.autoSpacing ); + t.moveTo( base.currentGroupPointer ); + return t; + } + + public Numberbox addNumberbox( Object theObject , final String theIndex , String theName ) { + int x = ( int ) x( base.currentGroupPointer.autoPosition ); + int y = ( int ) y( base.currentGroupPointer.autoPosition ); + Numberbox n = addNumberbox( theObject , theIndex , theName , x , y , Numberbox.autoWidth , Numberbox.autoHeight ); + base.linebreak( n , false , Numberbox.autoWidth , Numberbox.autoHeight , n.autoSpacing ); + n.moveTo( base.currentGroupPointer ); + return n; + } + + public Toggle addToggle( String theName , boolean theValue ) { + return addToggle( null , "" , theName , theValue ); + } + + public Knob addKnob( Object theObject , final String theIndex , String theName , int theMin , int theMax ) { + Knob n = addKnob( theObject , theIndex , theName , theMin , theMax , theMin , ( int ) x( base.currentGroupPointer.autoPosition ) , ( int ) y( base.currentGroupPointer.autoPosition ) , Knob.autoWidth ); + base.linebreak( n , false , Knob.autoWidth , Knob.autoHeight , n.autoSpacing ); + n.moveTo( base.currentGroupPointer ); + return n; + } + + public Knob addKnob( Object theObject , final String theIndex , String theName ) { + return addKnob( theObject , theIndex , theName , 0 , 100 ); + } + + public Knob addKnob( String theName , int theMin , int theMax ) { + return addKnob( null , "" , theName , theMin , theMax ); + } + + public ControlWindow addControlWindow( String theName ) { + ControlP5.logger( ).warning( "ControlWindow has been disabled currently, please have a look at the changlog.txt file inside the src folder." ); + return null; + } + + /** + * Adds Controllers by Object reference, currently + * supports Slider, Bang, Button, Knob, Numberbox, + * Toggle, Textlabel, Textfield, Range, Slider2D. For + * internal use rather than on application level. + */ + public < C > C addController( final Object theObject , final String theIndex , final String theName , final Class< C > theClass , int theX , int theY ) { + Controller< ? > c = null; + if ( theClass.equals( Slider.class ) ) { + c = addSlider( theObject , theIndex , theName , 0 , 100 , 0 , 0 , 0 , 99 , 9 ); + } else if ( theClass.equals( Bang.class ) ) { + c = addBang( theObject , theIndex , theName , 0 , 0 , 19 , 19 ); + } else if ( theClass.equals( Button.class ) ) { + c = addButton( theObject , theIndex , theName , 0 , 0 , 0 , 49 , 19 ); + } else if ( theClass.equals( Knob.class ) ) { + c = addKnob( theObject , theIndex , theName , 0 , 100 , 0 , 0 , 0 , 49 ); + } else if ( theClass.equals( Numberbox.class ) ) { + c = addNumberbox( theObject , theIndex , theName , 0 , 0 , 0 , 99 , 19 ); + } else if ( theClass.equals( Toggle.class ) ) { + c = addToggle( theObject , theIndex , theName , false , 0 , 0 , 49 , 19 ); + } else if ( theClass.equals( Textfield.class ) ) { + c = addTextfield( theObject , theIndex , theName , 0 , 0 , 99 , 19 ); + } else if ( theClass.equals( Range.class ) ) { + c = addRange( theObject , theIndex , theName , 0 , 100 , 0 , 100 , 0 , 0 , 99 , 9 ); + } else if ( theClass.equals( Slider2D.class ) ) { + c = addSlider2D( theObject , theIndex , theName , 0 , 100 , 0 , 100 , 0 , 0 , 0 , 0 , 99 , 99 ); + } else if ( theClass.equals( DropdownList.class ) ) { + c = addDropdownList( theObject , theIndex , theName , theX , theY , 199 , 99 ); + } else if ( theClass.equals( ListBox.class ) ) { + c = addListBox( theObject , theIndex , theName , theX , theY , 199 , 99 ); + } else if ( theClass.equals( ScrollableList.class ) ) { + c = addScrollableList( theObject , theIndex , theName , theX , theY , 199 , 99 ); + } else if ( theClass.equals( Textlabel.class ) ) { + c = addTextlabel( theName , "" ); + } + // TODO MultiList, Matrix + c.setPosition( theX , theY ); + return ( C ) c; + } + + /** + * Use with caution, only for internal use. + * + * @exclude + */ + @ControlP5.Invisible public < C > C addGroup( final Object theObject , final String theIndex , final String theName , final Class< C > theClass , int theX , int theY , int theW , int theH ) { + ControlGroup< ? > c = null; + if ( theClass.equals( RadioButton.class ) ) { + c = addRadioButton( theObject , theIndex , theName , theX , theY ); + } else if ( theClass.equals( CheckBox.class ) ) { + c = addCheckBox( theObject , theIndex , theName , theX , theY ); + } else if ( theClass.equals( ControlGroup.class ) ) { + c = addGroup( theObject , theIndex , theName , theX , theY ); + } else if ( theClass.equals( Group.class ) ) { + c = addGroup( theObject , theIndex , theName , theX , theY ); + } + c.setPosition( theX , theY ); + c.setWidth( theW ); + c.setHeight( theH ); + return ( C ) c; + } + + public < C > C addController( String theName , Class< C > theClass , int theX , int theY ) { + return addController( null , "" , theName , theClass , theX , theY ); + } + + static public void println( final Object ... strs ) { + for ( Object str : strs ) { + System.out.print( str + " " ); + } + System.out.println( ); + } + + static public void debug( final Object ... strs ) { + if ( DEBUG ) { + println( strs ); + } + } + + static public void printerr( final Object ... strs ) { + for ( Object str : strs ) { + System.err.print( str + " " ); + } + System.err.println( ); + } + + @Deprecated public Controller< ? > getController( String theName , Object theObject ) { + if ( base._myObjectToControllerMap.containsKey( theObject ) ) { + ArrayList< ControllerInterface< ? >> cs = base._myObjectToControllerMap.get( theObject ); + for ( ControllerInterface< ? > c : cs ) { + if ( c.getName( ).equals( theName ) ) { + return ( Controller< ? > ) c; + } + } + } + return null; + } + + @Deprecated public Tab addTab( PApplet theWindow , String theName ) { + return addTab( base.cp5.controlWindow , theName ); + } + + @Deprecated public Tab addTab( ControlWindow theWindow , String theName ) { + for ( int i = 0 ; i < theWindow.getTabs( ).size( ) ; i++ ) { + if ( theWindow.getTabs( ).get( i ).getName( ).equals( theName ) ) { + return ( Tab ) theWindow.getTabs( ).get( i ); + } + } + Tab myTab = new Tab( base.cp5 , theWindow , theName ); + theWindow.getTabs( ).add( myTab ); + return myTab; + } + + @Deprecated public ControlWindow addControlWindow( final String theName , final int theX , final int theY , final int theWidth , final int theHeight , String theRenderer , int theFrameRate ) { + return addControlWindow( theName ); + } + + @Deprecated public ControlWindow addControlWindow( final String theWindowName , final int theWidth , final int theHeight ) { + return addControlWindow( theWindowName , 100 , 100 , theWidth , theHeight , "" , 30 ); + } + + @Deprecated public ControlWindow addControlWindow( final String theWindowName , final int theX , final int theY , final int theWidth , final int theHeight ) { + return addControlWindow( theWindowName , theX , theY , theWidth , theHeight , "" , 30 ); + } + + @Deprecated public ControlWindow addControlWindow( final String theWindowName , final int theX , final int theY , final int theWidth , final int theHeight , final int theFrameRate ) { + return addControlWindow( theWindowName , theX , theY , theWidth , theHeight , "" , theFrameRate ); + } + + @Deprecated public Slider2D addSlider2D( String theName , int theX , int theY , int theW , int theH ) { + return addSlider2D( null , "" , theName , 0 , theW , 0 , theH , 0 , 0 , theX , theY , theW , theH ); + } + + @Deprecated public Slider2D addSlider2D( Object theObject , final String theIndex , final String theName , int theX , int theY , int theW , int theH ) { + return addSlider2D( theObject , theIndex , theName , 0 , theW , 0 , theH , 0 , 0 , theX , theY , theW , theH ); + } + + @Deprecated public Slider2D addSlider2D( String theName , float theMinX , float theMaxX , float theMinY , float theMaxY , float theDefaultValueX , float theDefaultValueY , int theX , int theY , int theW , int theH ) { + return addSlider2D( null , "" , theName , theMinX , theMaxX , theMinY , theMaxY , theDefaultValueX , theDefaultValueY , theX , theY , theW , theH ); + } + + @Deprecated public Button addButton( final String theName , final float theValue , final int theX , final int theY , final int theW , final int theH ) { + return addButton( null , "" , theName , theValue , theX , theY , theW , theH ); + } + + @Deprecated public Bang addBang( final String theName , final int theX , final int theY ) { + return addBang( null , "" , theName , theX , theY , 20 , 20 ); + } + + @Deprecated public Bang addBang( final String theName , final int theX , final int theY , final int theWidth , final int theHeight ) { + return addBang( null , "" , theName , theX , theY , theWidth , theHeight ); + } + + @Deprecated public Toggle addToggle( final String theName , final boolean theDefaultValue , final float theX , final float theY , final int theWidth , final int theHeight ) { + return addToggle( null , "" , theName , theDefaultValue , theX , theY , theWidth , theHeight ); + } + + @Deprecated public Toggle addToggle( final String theName , final float theX , final float theY , final int theWidth , final int theHeight ) { + return addToggle( null , "" , theName , false , theX , theY , theWidth , theHeight ); + } + + @Deprecated public Toggle addToggle( final Object theObject , final String theIndex , final String theName , final float theX , final float theY , final int theWidth , final int theHeight ) { + return addToggle( theObject , theIndex , theName , false , theX , theY , theWidth , theHeight ); + } +} diff --git a/controlP5/ControlTimer.java b/controlP5/ControlTimer.java new file mode 100755 index 0000000..39406cb --- /dev/null +++ b/controlP5/ControlTimer.java @@ -0,0 +1,150 @@ +package main.java.src2.main.java.controlP5.controlP5; + +/** + * controlP5 is a processing gui library. + * + * 2006-2015 by Andreas Schlegel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place, Suite 330, + * Boston, MA 02111-1307 USA + * + * @author Andreas Schlegel (http://www.sojamo.de) + * @modified ##date## + * @version ##version## + * + */ + +/** + * control timer is a timer that can be used for example as a stop watch or a duration timer. + * + * @example controllers/ControlP5timer + */ +public class ControlTimer { + + long millisOffset; + + int ms, s, m, h, d; + + float _mySpeed = 1; + + int current, previous; + + /** + * create a new control timer, a timer that counts up in time. + */ + public ControlTimer() { + reset(); + } + + /** + * return a string representation of the current status of the timer. + * + * @return String + */ + public String toString() { + update(); + return (((h < 10) ? "0" + h : String.valueOf(h)) + " : " + ((m < 10) ? "0" + m : String.valueOf(m)) + " : " + ((s < 10) ? "0" + s : String.valueOf(s)) // + + // " : " + // + + // ((ms<100) ? "0" + ms: "" +ms) + ); + } + + /** + * called to update the timer. + */ + public void update() { + current = (int) time(); + if (current > previous + 10) { + ms = (int) (current * _mySpeed); + s = (int) (((current * _mySpeed) / 1000)); + m = s / 60; + h = m / 60; + d = h / 24; + ms %= 1000; + s %= 60; + m %= 60; + h %= 24; + previous = current; + } + + } + + /** + * get the time in milliseconds since the timer was started. + * + * @return long + */ + public long time() { + return (System.currentTimeMillis() - millisOffset); + } + + /** + * reset the timer. + */ + public void reset() { + millisOffset = System.currentTimeMillis(); + current = previous = 0; + s = 0; // Values from 0 - 59 + m = 0; // Values from 0 - 59 + h = 0; // Values from 0 - 23 + update(); + } + + /** + * set the speed of time, for slow motion or high speed. + * + * @param theSpeed int + */ + public void setSpeedOfTime(float theSpeed) { + _mySpeed = theSpeed; + update(); + } + + /** + * Get the milliseconds of the timer. + */ + public int millis() { + return ms; + } + + /** + * Seconds position of the timer. + */ + public int second() { + return s; + } + + /** + * Minutes position of the timer. + */ + public int minute() { + return m; + } + + /** + * Hour position of the timer in international format (0-23). + */ + public int hour() { + return h; + } + + /** + * day position of the timer. + */ + public int day() { + return d; + } + +} diff --git a/controlP5/ControlWindow.java b/controlP5/ControlWindow.java new file mode 100755 index 0000000..206d936 --- /dev/null +++ b/controlP5/ControlWindow.java @@ -0,0 +1,978 @@ +package main.java.src2.main.java.controlP5.controlP5; + +/** + * controlP5 is a processing gui library. + * + * 2006-2015 by Andreas Schlegel + * + * This library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser + * General Public License as published by the Free Software + * Foundation; either version 2.1 of the License, or (at + * your option) any later version. This library is + * distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU Lesser General Public License for more + * details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, write to + * the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * @author Andreas Schlegel (http://www.sojamo.de) + * @modified ##date## + * @version ##version## + * + */ + +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.CopyOnWriteArrayList; + +import processing.core.PApplet; +import processing.core.PConstants; +import processing.core.PGraphics; +import processing.event.KeyEvent; +import processing.event.MouseEvent; +import main.java.src2.main.java.controlP5.controlP5.ControlP5Base.KeyCode; + +// TODO ! add mouse-button mask for left, center, right; also see Controller #mouse-button ^1 + +/** + * @example controllers/ControlP5window + */ +public final class ControlWindow { + + private ControlP5 cp5; + private Controller< ? > isControllerActive; + public int background = 0x00000000; + private CColor color = new CColor( ); + private final String _myName = "main"; + private PApplet _myApplet; + private ControllerList _myTabs; + boolean isVisible = true; + private boolean isInit = false; + private boolean isRemove = false; + private CDrawable _myDrawable; + boolean isAutoDraw; + private boolean isUpdate; + private List< Canvas > _myCanvas; + private boolean isDrawBackground = true; + private boolean isUndecorated = false; + private float[] autoPosition = new float[]{ 10 , 30 , 0 }; + private float tempAutoPositionHeight = 0; + private boolean rendererNotification = false; + private float[] positionOfTabs = new float[]{ 0 , 0 , 0 }; + private int _myFrameCount = 0; + private boolean isMouse = true; + private Pointer _myPointer; + private int mouseWheelMoved = 0; + private final List< ControllerInterface< ? >> mouseoverlist; + private boolean isMouseOver; + int mouseX; + int mouseY; + int pmouseX; + int pmouseY; + private boolean mousePressed; + long mousePressedTime; + long pmousePressedTime; + boolean mouselock; + char key; + int keyCode; + private final int numKeys = 1024; + private boolean[] keys = new boolean[ numKeys ]; + private int numOfActiveKeys = 0; + private boolean focused = true; + + /** + * @exclude + */ + public ControlWindow( final ControlP5 theControlP5 , final PApplet theApplet ) { + mouseoverlist = new ArrayList< ControllerInterface< ? >>( ); + cp5 = theControlP5; + _myApplet = theApplet; + isAutoDraw = true; + init( ); + } + + private void init() { + + _myPointer = new Pointer( ); + _myCanvas = new ArrayList< Canvas >( ); + _myTabs = new ControllerList( ); + _myTabs.add( new Tab( cp5 , this , "global" ) ); + _myTabs.add( new Tab( cp5 , this , "default" ) ); + activateTab( ( Tab ) _myTabs.get( 1 ) ); + + /* register a post event that will be called by + * processing after the draw method has been + * finished. */ + + // processing pre 2.0 will not draw automatically if + // in P3D mode. in earlier versions of + // controlP5 this had been checked here and the user + // had been informed to draw controlP5 + // manually by adding cp5.draw() to the sketch's + // draw function. with processing 2.0 and this + // version of controlP5 this notification does no + // longer exist. + + if (!isInit) { + _myApplet.registerMethod( "pre" , this ); + _myApplet.registerMethod( "draw" , this ); + if ( !cp5.isAndroid ) { + _myApplet.registerMethod( "keyEvent" , this ); + _myApplet.registerMethod( "mouseEvent" , this ); + } + } + + mousePressedTime = System.currentTimeMillis( ); + pmousePressedTime = System.currentTimeMillis( ); + + isInit = true; + } + + public Tab getCurrentTab( ) { + for ( int i = 1 ; i < _myTabs.size( ) ; i++ ) { + if ( ( ( Tab ) _myTabs.get( i ) ).isActive( ) ) { + return ( Tab ) _myTabs.get( i ); + } + } + return null; + } + + public ControlWindow activateTab( String theTab ) { + + for ( int i = 1 ; i < _myTabs.size( ) ; i++ ) { + if ( _myTabs.get( i ).getName( ).equals( theTab ) ) { + if ( ! ( ( Tab ) _myTabs.get( i ) ).isActive ) { + resetMouseOver( ); + } + activateTab( ( Tab ) _myTabs.get( i ) ); + } + } + return this; + } + + public ControlWindow removeTab( Tab theTab ) { + _myTabs.remove( theTab ); + return this; + } + + public Tab add( Tab theTab ) { + _myTabs.add( theTab ); + return theTab; + } + + public Tab addTab( String theTab ) { + return getTab( theTab ); + } + + ControlWindow activateTab(Tab theTab) { + for ( int i = 1 ; i < _myTabs.size( ) ; i++ ) { + if ( _myTabs.get( i ) == theTab ) { + if ( ! ( ( Tab ) _myTabs.get( i ) ).isActive ) { + resetMouseOver( ); + } + ( ( Tab ) _myTabs.get( i ) ).setActive( true ); + } else { + ( ( Tab ) _myTabs.get( i ) ).setActive( false ); + } + } + return this; + } + + public ControllerList getTabs( ) { + return _myTabs; + } + + public Tab getTab( String theTabName ) { + return cp5.getTab( this , theTabName ); + } + + /** + * Sets the position of the tab bar which is set to 0,0 + * by default. to move the tabs to y-position 100, use + * cp5.getWindow().setPositionOfTabs(0,100); + * + */ + + public ControlWindow setPositionOfTabs( int theX , int theY ) { + positionOfTabs[0] = theX; + positionOfTabs[1] = theY; + return this; + } + + + public float[] getPositionOfTabs( ) { + return positionOfTabs; + } + + void setAllignmentOfTabs( int theValue , int theWidth ) { + // TODO + } + + void setAllignmentOfTabs( int theValue , int theWidth , int theHeight ) { + // TODO + } + + void setAllignmentOfTabs( int theValue ) { + // TODO + } + + public void remove( ) { + for ( int i = _myTabs.size( ) - 1 ; i >= 0 ; i-- ) { + _myTabs.get( i ).remove( ); + } + _myTabs.clear( ); + _myTabs.clearDrawable( ); + } + + /** + * clear the control window, delete all controllers from + * a control window. + */ + public ControlWindow clear( ) { + remove( ); + return this; + } + + void updateFont(ControlFont theControlFont) { + for ( int i = 0 ; i < _myTabs.size( ) ; i++ ) { + ( ( Tab ) _myTabs.get( i ) ).updateFont( theControlFont ); + } + } + + /** + * @exclude + */ + @ControlP5.Invisible public void updateEvents( ) { + handleMouseOver( ); + handleMouseWheelMoved( ); + if ( _myTabs.size( ) <= 0 ) { + return; + } + _myTabs.get( 0 ).updateEvents( ); + for ( int i = 1 ; i < _myTabs.size( ) ; i++ ) { + _myTabs.get( i ).continuousUpdateEvents( ); + if ( ( ( Tab ) _myTabs.get( i ) ).isActive( ) && _myTabs.get( i ).isVisible( ) ) { + _myTabs.get( i ).updateEvents( ); + } + } + } + + /** + * returns true if the mouse is inside a controller. !!! + * doesnt work for groups yet. + */ + public boolean isMouseOver( ) { + // TODO doesnt work for all groups yet, only ListBox + // and DropdownList. + if ( _myFrameCount + 1 < _myApplet.frameCount ) { + resetMouseOver( ); + } + return isVisible && isMouseOver; + } + + public boolean isMouseOver( ControllerInterface< ? > theController ) { + return mouseoverlist.contains( theController ); + } + + public void resetMouseOver( ) { + isMouseOver = false; + for ( int i = mouseoverlist.size( ) - 1 ; i >= 0 ; i-- ) { + mouseoverlist.get( i ).setMouseOver( false ); + } + mouseoverlist.clear( ); + } + + public ControllerInterface< ? > getFirstFromMouseOverList( ) { + if ( getMouseOverList( ).isEmpty( ) ) { + return null; + } else { + return getMouseOverList( ).get( 0 ); + } + } + + /** + * A list of controllers that are registered with a + * mouseover. + */ + public List< ControllerInterface< ? >> getMouseOverList( ) { + return mouseoverlist; + } + + private ControlWindow handleMouseOver( ) { + for ( int i = mouseoverlist.size( ) - 1 ; i >= 0 ; i-- ) { + if ( !mouseoverlist.get( i ).isMouseOver( ) || !isVisible ) { + mouseoverlist.remove( i ); + } + } + isMouseOver = mouseoverlist.size( ) > 0; + return this; + } + + public ControlWindow removeMouseOverFor( ControllerInterface< ? > theController ) { + mouseoverlist.remove( theController ); + return this; + } + + ControlWindow setMouseOverController(ControllerInterface theController) { + if ( !mouseoverlist.contains( theController ) && isVisible && theController.isVisible( ) ) { + mouseoverlist.add( theController ); + } + isMouseOver = true; + return this; + } + + /** + * updates all controllers inside the control window if + * update is enabled. + * + * @exclude + */ + public void update( ) { + _myTabs.get( 0 ).update( ); + for ( int i = 1 ; i < _myTabs.size( ) ; i++ ) { + ( ( Tab ) _myTabs.get( i ) ).update( ); + } + } + + /** + * enable or disable the update function of a control + * window. + */ + public void setUpdate( boolean theFlag ) { + isUpdate = theFlag; + for ( int i = 0 ; i < _myTabs.size( ) ; i++ ) { + _myTabs.get( i ).setUpdate( theFlag ); + } + } + + /** + * check the update status of a control window. + */ + public boolean isUpdate( ) { + return isUpdate; + } + + public ControlWindow addCanvas( Canvas theCanvas ) { + _myCanvas.add( theCanvas ); + theCanvas.setControlWindow( this ); + theCanvas.setup( _myApplet.g ); + return this; + } + + public ControlWindow removeCanvas( Canvas theCanvas ) { + _myCanvas.remove( theCanvas ); + return this; + } + + private boolean isReset = false; + + public ControlWindow pre( ) { + + if ( _myFrameCount + 1 < _myApplet.frameCount ) { + if ( isReset ) { + resetMouseOver( ); + isReset = false; + } + } else { + isReset = true; + } + + if ( papplet( ).focused != focused ) { + clearKeys( ); + mousePressed = false; + focused = papplet( ).focused; + } + + return this; + } + + boolean pmouseReleased; // Android + + boolean pmousePressed; // Android + + /** + * when in Android mode, call mouseEvent(int, int, + * boolean). + */ + public void mouseEvent( int theX , int theY , boolean pressed ) { + + mouseX = theX - cp5.pgx - cp5.ox; + mouseY = theY - cp5.pgy - cp5.oy; + + if ( pressed && !pmousePressed ) { + updateEvents( ); + mousePressedEvent( ); + pmousePressedTime = mousePressedTime; + mousePressedTime = System.currentTimeMillis( ); + pmousePressed = true; + pmouseReleased = false; + } else if ( !pressed && !pmouseReleased ) { + updateEvents( ); + mouseReleasedEvent( ); + for ( ControllerInterface c : mouseoverlist ) { + if ( c instanceof Controller ) { + final Controller c1 = ( ( Controller ) c ); + c1.onLeave( ); + c1.onRelease( ); + cp5.getControlBroadcaster( ).invokeAction( new CallbackEvent( c1 , ControlP5.ACTION_LEAVE ) ); + c1.callListener( ControlP5.ACTION_LEAVE ); + cp5.getControlBroadcaster( ).invokeAction( new CallbackEvent( c1 , ControlP5.ACTION_RELEASE ) ); + c1.callListener( ControlP5.ACTION_RELEASE ); + } else if ( c instanceof ControllerGroup ) { + ( ( ControllerGroup ) c ).mouseReleased( ); + } + } + resetMouseOver( ); + pmousePressed = false; + pmouseReleased = true; + + } + } + + /** + * @exclude + */ + public void mouseEvent( MouseEvent theMouseEvent ) { + if ( isMouse ) { + mouseX = theMouseEvent.getX( ) - cp5.pgx - cp5.ox; + mouseY = theMouseEvent.getY( ) - cp5.pgy - cp5.oy; + if ( theMouseEvent.getAction( ) == MouseEvent.PRESS ) { + mousePressedEvent( ); + } + if ( theMouseEvent.getAction( ) == MouseEvent.RELEASE ) { + mouseReleasedEvent( ); + } + if ( theMouseEvent.getAction( ) == MouseEvent.WHEEL ) { + + setMouseWheelRotation( theMouseEvent.getCount( ) ); + + } + } + } + + public void keyEvent( KeyEvent theKeyEvent ) { + + if ( theKeyEvent.getAction( ) == KeyEvent.PRESS ) { + keys[ theKeyEvent.getKeyCode( ) ] = true; + numOfActiveKeys++; + cp5.modifiers = theKeyEvent.getModifiers( ); + key = theKeyEvent.getKey( ); + keyCode = theKeyEvent.getKeyCode( ); + } + + if ( theKeyEvent.getAction( ) == KeyEvent.RELEASE ) { + keys[ theKeyEvent.getKeyCode( ) ] = false; + numOfActiveKeys--; + cp5.modifiers = theKeyEvent.getModifiers( ); + } + + if ( theKeyEvent.getAction( ) == KeyEvent.PRESS && cp5.isShortcuts( ) ) { + int n = 0; + for ( boolean b : keys ) { + n += b ? 1 : 0; + } + char[] c = new char[ n ]; + n = 0; + for ( int i = 0 ; i < keys.length ; i++ ) { + if ( keys[ i ] ) { + c[ n++ ] = ( ( char ) i ); + } + } + KeyCode code = new KeyCode( c ); + + if ( cp5.keymap.containsKey( code ) ) { + for ( ControlKey ck : cp5.keymap.get( code ) ) { + ck.keyEvent( ); + } + } + } + + handleKeyEvent( theKeyEvent ); + } + + public void clearKeys( ) { + keys = new boolean[ numKeys ]; + numOfActiveKeys = 0; + } + + // TODO + public void draw( PGraphics pg , int theX , int theY ) { + + } + + /** + * @exclude draw content. + */ + public void draw( ) { + _myFrameCount = _myApplet.frameCount; + draw( cp5.pg ); + } + + public void draw( PGraphics pg ) { + pg.pushMatrix( ); + pg.translate( cp5.ox , cp5.oy ); + if (!cp5.blockDraw) { + if ( cp5.isAndroid ) { + mouseEvent( cp5.papplet.mouseX , cp5.papplet.mouseY , cp5.papplet.mousePressed ); + } else { + updateEvents( ); + } + if ( isVisible ) { + if ( cp5.isGraphics ) { + pg.beginDraw( ); + if ( ( ( background >> 24 ) & 0xff ) != 0 ) { + pg.background( background ); + } + } + + // TODO save stroke, noStroke, fill, noFill, strokeWeight parameters and restore after drawing controlP5 elements. + + int myRectMode = pg.rectMode; + int myEllipseMode = pg.ellipseMode; + int myImageMode = pg.imageMode; + pg.pushStyle( ); + pg.rectMode( PConstants.CORNER ); + pg.ellipseMode( PConstants.CORNER ); + pg.imageMode( PConstants.CORNER ); + pg.noStroke( ); + + if ( _myDrawable != null ) { + _myDrawable.draw( pg ); + } + + for ( int i = 0 ; i < _myCanvas.size( ) ; i++ ) { + if ( ( _myCanvas.get( i ) ).mode( ) == Canvas.PRE ) { + ( _myCanvas.get( i ) ).update( _myApplet ); + ( _myCanvas.get( i ) ).draw( pg ); + } + } + + pg.noStroke( ); + pg.noFill( ); + int myOffsetX = ( int ) getPositionOfTabs( )[0]; + int myOffsetY = ( int ) getPositionOfTabs( )[1]; + int myHeight = 0; + + if ( _myTabs.size( ) > 0 ) { + for ( int i = 1 ; i < _myTabs.size( ) ; i++ ) { + if ( _myTabs.get( i ).isVisible( ) ) { + if ( myHeight < ( ( Tab ) _myTabs.get( i ) ).height( ) ) { + myHeight = ( ( Tab ) _myTabs.get( i ) ).height( ); + } + + // conflicts with Android, getWidth not found TODO + + // if (myOffsetX > + // (papplet().getWidth()) - + // ((Tab) + // _myTabs.get(i)).width()) { + // myOffsetY += myHeight + 1; + // myOffsetX = (int) + // getPositionOfTabs().x; + // myHeight = 0; + // } + + ( ( Tab ) _myTabs.get( i ) ).setOffset( myOffsetX , myOffsetY ); + + if ( ( ( Tab ) _myTabs.get( i ) ).isActive( ) ) { + _myTabs.get( i ).draw( pg ); + } + + if ( ( ( Tab ) _myTabs.get( i ) ).updateLabel( ) ) { + ( ( Tab ) _myTabs.get( i ) ).drawLabel( pg ); + } + myOffsetX += ( ( Tab ) _myTabs.get( i ) ).width( ); + } + } + _myTabs.get( 0 ).draw( pg ); + } + for ( int i = 0 ; i < _myCanvas.size( ) ; i++ ) { + if ( ( _myCanvas.get( i ) ).mode( ) == Canvas.POST ) { + ( _myCanvas.get( i ) ).draw( pg ); + } + } + + pmouseX = mouseX; + pmouseY = mouseY; + + /* draw Tooltip here. */ + + cp5.getTooltip( ).draw( this ); + pg.rectMode( myRectMode ); + pg.ellipseMode( myEllipseMode ); + pg.imageMode( myImageMode ); + pg.popStyle( ); + + if ( cp5.isGraphics ) { + pg.endDraw( ); + cp5.papplet.image( pg , cp5.pgx , cp5.pgy ); + } + } + } + pg.popMatrix( ); + } + + /** + * Adds a custom context to a ControlWindow. Use a + * custom class which implements the CDrawable interface + * + * @see CDrawable + * @param theDrawable CDrawable + */ + public ControlWindow setContext( CDrawable theDrawable ) { + _myDrawable = theDrawable; + return this; + } + + /** + * returns the name of the control window. + */ + public String name( ) { + return _myName; + } + + private void mousePressedEvent( ) { + if ( isVisible ) { + mousePressed = true; + pmousePressedTime = mousePressedTime; + mousePressedTime = System.currentTimeMillis( ); + for ( int i = 0 ; i < _myTabs.size( ) ; i++ ) { + if ( _myTabs.get( i ).setMousePressed( true ) ) { + mouselock = true; + return; + } + } + } + } + + private void mouseReleasedEvent( ) { + if ( isVisible ) { + mousePressed = false; + mouselock = false; + for ( int i = 0 ; i < _myTabs.size( ) ; i++ ) { + _myTabs.get( i ).setMousePressed( false ); + } + } + } + + void setMouseWheelRotation( int theRotation ) { + if ( isMouseOver( ) ) { + mouseWheelMoved = theRotation; + } + } + + @SuppressWarnings( "unchecked" ) private void handleMouseWheelMoved( ) { + if ( mouseWheelMoved != 0 ) { + List< ControllerInterface< ? >> mouselist = new CopyOnWriteArrayList< ControllerInterface< ? >>( mouseoverlist ); + for ( ControllerInterface< ? > c : mouselist ) { + if ( c.isVisible( ) ) { + if ( c instanceof Controller ) { + ( ( Controller ) c ).onScroll( mouseWheelMoved ); + cp5.getControlBroadcaster( ).invokeAction( new CallbackEvent( ( Controller ) c , ControlP5.ACTION_WHEEL ) ); + ( ( Controller ) c ).callListener( ControlP5.ACTION_WHEEL ); + } + if ( c instanceof ControllerGroup ) { + ( ( ControllerGroup ) c ).onScroll( mouseWheelMoved ); + } + if ( c instanceof Slider ) { + ( ( Slider ) c ).scrolled( mouseWheelMoved ); + } else if ( c instanceof Knob ) { + ( ( Knob ) c ).scrolled( mouseWheelMoved ); + } else if ( c instanceof Numberbox ) { + ( ( Numberbox ) c ).scrolled( mouseWheelMoved ); + } else if ( c instanceof Textarea ) { + ( ( Textarea ) c ).scrolled( mouseWheelMoved ); + } else if ( c instanceof ColorWheel ) { + ( ( ColorWheel ) c ).scrolled( mouseWheelMoved ); + } + break; + } + } + } + mouseWheelMoved = 0; + } + + public boolean isMousePressed( ) { + return mousePressed; + } + + /** + * @exclude + * @param theKeyEvent KeyEvent + */ + public void handleKeyEvent( KeyEvent theKeyEvent ) { + for ( int i = 0 ; i < _myTabs.size( ) ; i++ ) { + _myTabs.get( i ).keyEvent( theKeyEvent ); + } + } + + /** + * set the color for the controller while active. + */ + public ControlWindow setColorActive( int theColor ) { + color.setActive( theColor ); + for ( int i = 0 ; i < getTabs( ).size( ) ; i++ ) { + ( ( Tab ) getTabs( ).get( i ) ).setColorActive( theColor ); + } + return this; + } + + /** + * set the foreground color of the controller. + */ + public ControlWindow setColorForeground( int theColor ) { + color.setForeground( theColor ); + for ( int i = 0 ; i < getTabs( ).size( ) ; i++ ) { + ( ( Tab ) getTabs( ).get( i ) ).setColorForeground( theColor ); + } + return this; + } + + /** + * set the background color of the controller. + */ + public ControlWindow setColorBackground( int theColor ) { + color.setBackground( theColor ); + for ( int i = 0 ; i < getTabs( ).size( ) ; i++ ) { + ( ( Tab ) getTabs( ).get( i ) ).setColorBackground( theColor ); + } + return this; + } + + /** + * set the color of the text label of the controller. + */ + public ControlWindow setColorLabel( int theColor ) { + color.setCaptionLabel( theColor ); + for ( int i = 0 ; i < getTabs( ).size( ) ; i++ ) { + ( ( Tab ) getTabs( ).get( i ) ).setColorLabel( theColor ); + } + return this; + } + + /** + * set the color of the values. + */ + public ControlWindow setColorValue( int theColor ) { + color.setValueLabel( theColor ); + for ( int i = 0 ; i < getTabs( ).size( ) ; i++ ) { + ( ( Tab ) getTabs( ).get( i ) ).setColorValue( theColor ); + } + return this; + } + + /** + * set the background color of the control window. + */ + public ControlWindow setBackground( int theValue ) { + background = theValue; + return this; + } + + /** + * get the papplet instance of the ControlWindow. + */ + public PApplet papplet( ) { + return _myApplet; + } + + /** + * sets the frame rate of the control window. + * + * @param theFrameRate + * @return ControlWindow + */ + public ControlWindow frameRate( int theFrameRate ) { + _myApplet.frameRate( theFrameRate ); + return this; + } + + public ControlWindow show( ) { + isVisible = true; + return this; + } + + /** + * by default the background of a controlWindow is + * filled with a background color every frame. to enable + * or disable the background from drawing, use + * setDrawBackgorund(true/false). + * + * @param theFlag + * @return ControlWindow + */ + public ControlWindow setDrawBackground( boolean theFlag ) { + isDrawBackground = theFlag; + return this; + } + + public boolean isDrawBackground( ) { + return isDrawBackground; + } + + public boolean isVisible( ) { + return isVisible; + } + + private boolean isControllerActive(Controller theController) { + if ( isControllerActive == null ) { + return false; + } + return isControllerActive.equals( theController ); + } + + private ControlWindow setControllerActive(Controller theController) { + isControllerActive = theController; + return this; + } + + public ControlWindow toggleUndecorated( ) { + setUndecorated( !isUndecorated( ) ); + return this; + } + + public ControlWindow setUndecorated( boolean theFlag ) { + if ( theFlag != isUndecorated( ) ) { + isUndecorated = theFlag; + //_myApplet.frame.removeNotify( ); + //_myApplet.frame.setUndecorated( isUndecorated ); + _myApplet.setSize( _myApplet.width , _myApplet.height ); + //_myApplet.setBounds( 0 , 0 , _myApplet.width , _myApplet.height ); + //_myApplet.frame.setSize( _myApplet.width , _myApplet.height ); + //_myApplet.frame.addNotify( ); + } + return this; + } + + public boolean isUndecorated( ) { + return isUndecorated; + } + + public ControlWindow setPosition( int theX , int theY ) { + return setLocation( theX , theY ); + } + + public ControlWindow setLocation( int theX , int theY ) { + //_myApplet.frame.setLocation( theX , theY ); + return this; + } + + public Pointer getPointer( ) { + return _myPointer; + } + + public ControlWindow disablePointer( ) { + _myPointer.disable( ); + return this; + } + + public ControlWindow enablePointer( ) { + _myPointer.enable( ); + return this; + } + + /** + * A pointer by default is linked to the mouse and + * stores the x and y position as well as the pressed + * and released state. The pointer can be accessed by + * its getter method {@link ControlWindow#getPointer()}. + * Then use + * {@link ControlWindow#set(int, int)} to + * alter its position or invoke { + * {@link ControlWindow#pressed()} or + * {@link ControlWindow#released()} to change + * its state. To disable the mouse and enable the + * Pointer use {@link ControlWindow#enable()} + * and {@link ControlWindow#disable()} to + * default back to the mouse as input parameter. + */ + // TODO offset against pgx and pgy + public class Pointer { + + public Pointer setX( int theX ) { + mouseX = theX; + return this; + } + + public Pointer setY( int theY ) { + mouseY = theY; + return this; + } + + public int getY( ) { + return mouseY; + } + + public int getX( ) { + return mouseX; + } + + public int getPreviousX( ) { + return pmouseX; + } + + public int getPreviousY( ) { + return pmouseY; + } + + public Pointer set( int theX , int theY ) { + setX( theX ); + setY( theY ); + return this; + } + + // TODO mousePressed/mouseReleased are handled wrongly, released is called when moved, for now do not use, instead use set(x,y), pressed(), released() + public Pointer set( int theX , int theY , boolean pressed ) { + setX( theX ); + setY( theY ); + if ( pressed ) { + if ( !mousePressed ) { + pressed( ); + } + } else { + if ( mousePressed ) { + released( ); + } + } + return this; + } + + public Pointer pressed( ) { + mousePressedEvent( ); + return this; + } + + public Pointer released( ) { + mouseReleasedEvent( ); + return this; + } + + public void enable( ) { + isMouse = false; + } + + public void disable( ) { + isMouse = true; + } + + public boolean isEnabled( ) { + return !isMouse; + } + } + + /** + * hide the controllers and tabs of the ControlWindow. + */ + public ControlWindow hide( ) { + isVisible = false; + isMouseOver = false; + return this; + } + +} diff --git a/controlP5/ControlWindowCanvas.java b/controlP5/ControlWindowCanvas.java new file mode 100755 index 0000000..c83bb62 --- /dev/null +++ b/controlP5/ControlWindowCanvas.java @@ -0,0 +1,34 @@ + +package main.java.src2.main.java.controlP5.controlP5; + +/** + * controlP5 is a processing gui library. + * + * 2006-2015 by Andreas Schlegel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place, Suite 330, + * Boston, MA 02111-1307 USA + * + * @author Andreas Schlegel (http://www.sojamo.de) + * @modified ##date## + * @version ##version## + * + */ + +@Deprecated +public abstract class ControlWindowCanvas extends Canvas { + + // Wrapper class. + +} diff --git a/controlP5/Controller.java b/controlP5/Controller.java new file mode 100755 index 0000000..2bb9f92 --- /dev/null +++ b/controlP5/Controller.java @@ -0,0 +1,2232 @@ +package main.java.src2.main.java.controlP5.controlP5; + +/** + * controlP5 is a processing gui library. + * + * 2006-2015 by Andreas Schlegel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place, Suite 330, + * Boston, MA 02111-1307 USA + * + * @author Andreas Schlegel (http://www.sojamo.de) + * @modified ##date## + * @version ##version## + * + */ + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +import main.java.src2.main.java.controlP5.controlP5.events.ReleasedOutsideListener; +import processing.core.PApplet; +import processing.core.PFont; +import processing.core.PGraphics; +import processing.core.PImage; +import processing.event.KeyEvent; + +/** + *

+ * Controller is an abstract class that is extended by any available controller within controlP5. this is the full + * documentation list for all methods available for a controller. An event triggered by a controller will be forwarded + * to the main program. If a void controlEvent(ControlEvent theEvent) {} method is available, this method will be + * called. + *

+ *

+ * A Controller can notify the main program in 2 different ways: + *

+ *
    + *
  • (1) add method controlEvent(ControlEvent theEvent) to your sketch. ControlP5 will automatically detect this + * method and will used it to forward any controlEvent triggered by a controller - you can disable forwarding by using + * setBroadcast(false) {@link Controller#setBroadcast(boolean)}
  • + *
  • (2) each controller requires a unique name when being create. In case an existing name is used for a newly + * created Controller, the existing one will be overwritten. each unique name can be used to automatically link a + * controller to either a method or a field within your program.
  • + *
+ * + * @see Bang + * @see Button + * @see Knob + * @see Matrix + * @see MultiList + * @see Numberbox + * @see RadioButton + * @see ListBox + * @see Slider + * @see Textarea + * @see Textfield + * @see Textlabel + * @see Toggle + * @see ControlGroup + * @see ControlBehavior + * @see ControlEvent + * + * @example use/ControlP5basics + */ +public abstract class Controller< T > implements ControllerInterface< T > , CDrawable , ControlP5Constants { + + protected float[] position = new float[ 2 ]; + protected float[] positionBuffer = new float[ 2 ]; + protected float[] absolutePosition = new float[ 2 ]; + protected ControllerInterface< ? > _myParent; + protected final String _myName; + protected ControlWindow _myControlWindow; + protected boolean isMousePressed = false; + protected ControlP5 cp5; + private int width; + private int height; + protected int _myId = -1; + protected float _myValue = Float.NaN; + protected float _myDefaultValue = Float.NaN; + protected String _myStringValue = ""; + protected float[] _myArrayValue; + protected Label _myCaptionLabel; + protected Label _myValueLabel; + protected boolean isLabelVisible = true; + protected boolean isMoveable = true; + protected boolean isBroadcast = true; + protected boolean isVisible = true; + protected boolean isActive = false; + protected boolean isLock = false; + protected boolean isUserInteraction = true; + protected boolean isInit = false; + protected List< ControlListener > _myControlListener; + protected Map< Integer , List< CallbackListener >> _myControlListenerLUT; + protected CColor color = new CColor( ); + protected float _myMin; + protected float _myMax; + protected float _myUnit; + protected String target; + protected Object targetObject; + protected ControlBehavior _myBehavior; + protected boolean isBehavior; + protected List< Controller< ? >> subelements; + protected int _myBroadcastType = ControlP5Constants.FLOAT; + protected boolean isUpdate = false; + protected int _myDecimalPoints = 2; + public static int autoWidth = 49; + public static int autoHeight = 19; + public static float[] autoSpacing = new float[] { 10 , 10 }; + protected boolean[] availableImages = new boolean[ 4 ]; + protected PImage[] images = new PImage[ 4 ]; + protected ControllerView< T > _myControllerView; + protected ControllerView< T > _myDebugView; + protected int _myDisplayMode = ControlP5Constants.DEFAULT; + protected int _myPickingColor = 0xffffff00; + protected boolean mouseover; + protected String _myAddress = ""; + protected List< ControllerPlug > _myControllerPlugList; + protected boolean tooltipEnabled; + protected boolean listening; + protected boolean isInside = false; + private T me; + protected boolean isDragged; + + /** + * TODO add distribution options for MOVE, RELEASE, and PRESSED. setDecimalPoints: setDcimalPoints(6) does only show + * 2 digits after the point + */ + + /** + * Convenience constructor to extend Controller. + * + * @example use/ControlP5extendController + * @param theControlP5 + * @param theName + */ + public Controller( ControlP5 theControlP5 , String theName ) { + this( theControlP5 , theControlP5.getDefaultTab( ) , theName , 0 , 0 , autoWidth , autoHeight ); + theControlP5.register( theControlP5.papplet , theName , this ); + } + + protected Controller( final ControlP5 theControlP5 , final ControllerGroup< ? > theParent , final String theName , final float theX , final float theY , final int theWidth , final int theHeight ) { + cp5 = theControlP5; + me = ( T ) this; + if ( cp5 == null ) { + isBroadcast = false; + } + _myName = theName; + + set( position , theX , theY ); + set( positionBuffer , theX , theY ); + + setParent( theParent ); + if ( theParent != null ) { + color.set( theParent.color ); + } else { + color.set(ControlP5.color); + } + width = theWidth; + height = theHeight; + + _myCaptionLabel = new Label( cp5 , theName ); + _myCaptionLabel.setColor( color.getCaptionLabel( ) ); + _myValueLabel = new Label( cp5 , "-" ); + _myValueLabel.setColor( color.getCaptionLabel( ) ); + + _myControllerPlugList = new ArrayList< ControllerPlug >( ); + _myControlListener = new ArrayList< ControlListener >( ); + subelements = new ArrayList< Controller< ? >>( ); + _myArrayValue = new float[ 0 ]; + _myDebugView = new DebugView( ); + setView( _myDebugView ); + } + + List< Controller< ? >> getSubelements( ) { + return subelements; + } + + /** + * {@inheritDoc} + */ + @ControlP5.Layout public String getAddress( ) { + return _myAddress; + } + + @Override @ControlP5.Invisible @ControlP5.Layout public T setAddress( String theAddress ) { + if ( _myAddress.length( ) == 0 ) { + _myAddress = theAddress; + } + return me; + } + + protected Controller( final ControlP5 theControlP5 , final String theName , final float theX , final float theY , final int theWidth , final int theHeight ) { + this( theControlP5 , theControlP5.getDefaultTab( ) , theName , theX , theY , theWidth , theHeight ); + } + + protected Controller( final String theName , final int theX , final int theY ) { + _myName = theName; + set( position , theX , theY ); + } + + @ControlP5.Invisible public void init( ) { + + _myDefaultValue = _myValue; + + // plug to a method or field inside the main + // papplet. + // forwarding a ControlEvent to the controlEvent() + // method inside + // the main papplet is done by the + // controlbroadcaster. + cp5.getControlBroadcaster( ).plug( cp5.papplet , this , _myName ); + initControllerValue( ); + isInit = cp5.isAutoInitialization; + setValue( _myDefaultValue ); + isInit = true; + updateDisplayMode( ControlP5Constants.DEFAULT ); + } + + protected final void initControllerValue( ) { + + // this is painful. deciding if the value has been + // set by parameter or by reading the + // current value of the corresponding field is + // very painful here due to too many ifs and thens. + // therefore this is done manually here - + // very ugly though. + + boolean go = false; + + if ( getClass( ).equals( Numberbox.class ) ) { + go = _myDefaultValue == 0; + } else { + go = _myDefaultValue == getMin( ) || Float.isNaN( getValue( ) ); + } + if ( go ) { + if ( _myControllerPlugList.size( ) == 1 ) { + if ( getControllerPlugList( ).get( 0 ).getValue( ) == null ) { + setDefaultValue( getMin( ) ); + } else { + float myInitValue = 0; + if ( getControllerPlugList( ).get( 0 ).getValue( ) instanceof Boolean ) { + final boolean myBoolean = Boolean.parseBoolean(getControllerPlugList().get(0).getValue().toString()); + myInitValue = (myBoolean) ? 1f : 0f; + + } else if ( getControllerPlugList( ).get( 0 ).getValue( ) instanceof Float ) { + myInitValue = ( new Float( getControllerPlugList( ).get( 0 ).getValue( ).toString( ) ) ).floatValue( ); + + } else if ( getControllerPlugList( ).get( 0 ).getValue( ) instanceof Integer ) { + myInitValue = (Integer.valueOf(getControllerPlugList().get(0).getValue().toString())).intValue( ); + + } else if ( getControllerPlugList( ).get( 0 ).getValue( ) instanceof String ) { + _myStringValue = getControllerPlugList( ).get( 0 ).getValue( ).toString( ); + } + setDefaultValue( myInitValue ); + } + } else { + if ( Float.isNaN( getDefaultValue( ) ) ) { + setDefaultValue( getMin( ) ); + } + } + } + _myValue = _myDefaultValue; + } + + protected void updateFont( ControlFont theControlFont ) { + setFont( theControlFont ); + } + + /** + * with setBehavior you can add a ControlBehavior to a controller. A ControlBehavior can be used to e.g. + * automatically change state, function, position, etc. + * + * @example ControlP5behavior + * @param theBehavior ControlBehavior + * @return Controller + */ + public T setBehavior( final ControlBehavior theBehavior ) { + isBehavior = true; + _myBehavior = theBehavior; + _myBehavior.init( this ); + return me; + } + + /** + * @return Controller + */ + public T removeBehavior( ) { + isBehavior = false; + _myBehavior = null; + return me; + } + + /** + * @return ControlBehavior + */ + public ControlBehavior getBehavior( ) { + return _myBehavior; + } + + /** + * @return float + */ + @ControlP5.Layout public float getDefaultValue( ) { + return _myDefaultValue; + } + + /** + * set the default value. + * + * @param theValue float + * @return Controller + */ + @ControlP5.Layout public T setDefaultValue( final float theValue ) { + _myDefaultValue = theValue; + return me; + } + + /** + * enable or prevent the controller to be moveable. By default a controller is moveable. + * + * @param theValue boolean + * @return Controller + */ + @ControlP5.Layout public T setMoveable( final boolean theValue ) { + isMoveable = theValue; + return me; + } + + /** + * checks if a controller is moveable. + * + * @return boolean + */ + @ControlP5.Layout public boolean isMoveable( ) { + return isMoveable; + } + + /** + * show or hide the labels of a controller. + * + * @param theValue boolean + * @return Controller + */ + @ControlP5.Layout public T setLabelVisible( final boolean theValue ) { + isLabelVisible = theValue; + return me; + } + + /** + * @return boolean + */ + @ControlP5.Layout public boolean isLabelVisible( ) { + return isLabelVisible; + } + + /** + * Use setBroadcast to enable and disable the broadcasting of changes in a controller's value. By default any value + * changes are forwarded to function controlEvent inside your program. use setBroadcast(false) to disable + * forwarding. + * + * @param theFlag boolean + * @return Controller + */ + @ControlP5.Layout public T setBroadcast( final boolean theFlag ) { + isBroadcast = theFlag; + return me; + } + + /** + * check if broadcasting is enabled or disabled for a controller. Every event relevant for a value change will be + * broadcasted to any of the value-listeners. By default broadcasting for a controller is enabled. + * + * @return boolean + */ + @ControlP5.Layout public boolean isBroadcast( ) { + return isBroadcast; + } + + /** + * get the position of a controller. e.g. Controller.getPosition().x; {@inheritDoc} + */ + @ControlP5.Layout public float[] getPosition( ) { + return position; + } + + /** + * {@inheritDoc} + */ + @Override @ControlP5.Layout public T setPosition( float[] thePos ) { + set( position , x( thePos ) , y( thePos ) ); + set( positionBuffer , x( thePos ) , y( thePos ) ); + return me; + } + + /** + * set the position of a controller. The position of a controller is relative. + * + * @param theX float + * @param theY float + * @return Controller + */ + @Override public T setPosition( final float theX , final float theY ) { + set( position , theX , theY ); + set( positionBuffer , theX , theY ); + return me; + } + + public float[] getAbsolutePosition( ) { + return absolutePosition; + } + + /** + * {@inheritDoc} + */ + @Override @ControlP5.Invisible public T setAbsolutePosition( float[] thePos ) { + // TODO + // doesnt work properly yet. + // absolute position should not be changed from the + // outside anyway. + set( absolutePosition , x( thePos ) , y( thePos ) ); + return me; + } + + /** + * {@inheritDoc} + */ + @ControlP5.Invisible public T updateAbsolutePosition( ) { + return me; + } + + /** + * continuousUpdateEvents is used for internal updates of a controller. this method is final and can't be + * overridden. + * + * @exclude + */ + @ControlP5.Invisible public final void continuousUpdateEvents( ) { + if ( isBehavior ) { + if ( _myBehavior.isActive( ) && !isMousePressed ) { + _myBehavior.update( ); + } + } + } + + /** + * updateEvents is used for internal updates of a controller. this method is final and can't be overwritten. + */ + @ControlP5.Invisible public final T updateEvents( ) { + if ( isInside ) { + boolean moved = ( ( _myControlWindow.mouseX - _myControlWindow.pmouseX ) != 0 || ( _myControlWindow.mouseY - _myControlWindow.pmouseY ) != 0 ); + if ( isMousePressed ) { + if ( moved ) { + if ( !isDragged ) { + onStartDrag( ); + callListener( ControlP5Constants.ACTION_START_DRAG ); + } + onDrag( ); + isDragged = true; + callListener( ControlP5Constants.ACTION_DRAG ); + } + } else { + if ( moved && this.equals( _myControlWindow.getFirstFromMouseOverList( ) ) ) { + onMove( ); + cp5.getControlBroadcaster( ).invokeAction( new CallbackEvent( this , ControlP5Constants.ACTION_MOVE ) ); + callListener( ControlP5Constants.ACTION_MOVE ); + } + } + } + + if ( isVisible && ( isMousePressed == _myControlWindow.mouselock ) ) { + if ( isMousePressed && cp5.isAltDown( ) && isMoveable ) { + if ( !cp5.isMoveable ) { + set( positionBuffer , x( positionBuffer ) + _myControlWindow.mouseX - _myControlWindow.pmouseX , y( positionBuffer ) + _myControlWindow.mouseY - _myControlWindow.pmouseY ); + if ( cp5.isShiftDown( ) ) { + set( position , ( ( int ) ( x( positionBuffer ) ) / 10 ) * 10 , ( ( int ) ( y( positionBuffer ) ) / 10 ) * 10 ); + } else { + set( position , positionBuffer ); + } + } + } else { + if ( !isLock ) { + if ( isInside ) { + setMouseOver( true ); + } + + if ( inside( ) ) { + if ( cp5.getMouseOverList( ).isEmpty( ) ) { + if ( !isInside ) { + onEnter( ); + setIsInside( true ); + callListener( ControlP5Constants.ACTION_ENTER ); + } + setIsInside( true ); + } + } else { + if ( isInside && !isMousePressed ) { + onLeave( ); + setMouseOver( false ); + setIsInside( false ); + callListener( ControlP5Constants.ACTION_LEAVE ); + } + if ( !isInside && mouseover ) { + + setMouseOver( false ); + + // here the mouseOver is set to false when the mouse + // is released outside a controller. the mouseoverlist is not + // updated when the mouse is still pressed but has left the + // controller - updating the list here currently conflicts + // with callbacks called from inside setMouseOver() + // + // Note: the mouseoverlist is only updated for ControllerGroups + // when the mouse is pressed but is hovering other controllers while + // mouse is dragged. + } + } + } + } + } + return me; + } + + public Pointer getPointer( ) { + return new Pointer( ) { + + public int x( ) { + return ( int ) ( _myControlWindow.mouseX - Controller.x( _myParent.getAbsolutePosition( ) ) - Controller.x( position ) ); + } + + public int y( ) { + return ( int ) ( _myControlWindow.mouseY - Controller.y( _myParent.getAbsolutePosition( ) ) - Controller.y( position ) ); + } + + public int px( ) { + return ( int ) ( _myControlWindow.pmouseX - Controller.x( _myParent.getAbsolutePosition( ) ) - Controller.x( position ) ); + } + + public int py( ) { + return ( int ) ( _myControlWindow.pmouseY - Controller.y( _myParent.getAbsolutePosition( ) ) - Controller.y( position ) ); + } + + public int dx( ) { + return x( ) - px( ); + } + + public int dy( ) { + return y( ) - py( ); + } + + public long pt( ) { + return _myControlWindow.pmousePressedTime; + } + + public long dt( ) { + return _myControlWindow.mousePressedTime - _myControlWindow.pmousePressedTime; + } + + public long t( ) { + return _myControlWindow.mousePressedTime; + } + + public String toString( ) { + return String.format( "{ x: %d y: %d px: %d py: %d dx: %d dy: %d}" , x( ) , y( ) , px( ) , py( ) , dx( ) , dy( ) ); + } + }; + } + + @ControlP5.Invisible public final boolean setMousePressed( final boolean theStatus ) { + if ( !isVisible && !isUserInteraction ) { + return false; + } + if (theStatus) { + if ( inside() ) { + isMousePressed = true; + if ( !cp5.isAltDown( ) ) { + mousePressed( ); + onPress( ); + cp5.getControlBroadcaster( ).invokeAction( new CallbackEvent( this , ControlP5Constants.ACTION_PRESS ) ); + callListener( ControlP5Constants.ACTION_PRESS ); + if ( getPointer( ).dt( ) < 500 ) { + onDoublePress( ); + callListener( ControlP5Constants.ACTION_DOUBLE_PRESS ); + } + } + return true; + } + } else { + if ( isMousePressed && inside( ) ) { + isMousePressed = false; + if ( !cp5.isAltDown( ) ) { + + mouseReleased( ); + onRelease( ); + cp5.getControlBroadcaster( ).invokeAction( new CallbackEvent( this , ControlP5Constants.ACTION_RELEASE ) ); + callListener( ControlP5Constants.ACTION_RELEASE ); + if ( isDragged ) { + /* first release, then stopDrag */ + onEndDrag( ); + callListener( ControlP5Constants.ACTION_END_DRAG ); + } else { + onClick( ); + cp5.getControlBroadcaster( ).invokeAction( new CallbackEvent( this , ControlP5Constants.ACTION_CLICK ) ); + callListener( ControlP5Constants.ACTION_CLICK ); + } + + isDragged = false; + + } + } + if ( !inside( ) ) { + setIsInside( false ); + if ( isMousePressed ) { + isMousePressed = false; + mouseReleasedOutside( ); + onReleaseOutside( ); + cp5.getControlBroadcaster( ).invokeAction( new CallbackEvent( this , ControlP5Constants.ACTION_RELEASE_OUTSIDE ) ); + callListener( ControlP5Constants.ACTION_RELEASE_OUTSIDE ); + } + if ( this instanceof ReleasedOutsideListener) { + mouseReleasedOutside( ); + onReleaseOutside( ); + callListener( ControlP5Constants.ACTION_RELEASE_OUTSIDE ); + } + } + } + return false; + } + + /** + * enables a controller to listen to changes made to the variable linked to the controller. Use true to enable and + * false to disable a controller from listening to changes. + * + * @param theFlag + * @return Controller + */ + public T listen( boolean theValue ) { + if ( theValue == listening ) { + return me; + } + listening = theValue; + if ( listening ) { + cp5.listenTo( _myName , cp5.getObjectForController( this ) ); + } else { + cp5.stopListeningTo( _myName , cp5.getObjectForController( this ) ); + } + return me; + } + + /** + * returns true or false for the current listening status. by default it is set to false + * + * @see Controller#listen(boolean) + * + * @return boolean + */ + public boolean isListening( ) { + return listening; + } + + /** + * check if the mouse is within this particular controller. + * + * @return boolean + */ + public boolean isMouseOver( ) { + return mouseover; + } + + public T setMouseOver( boolean theFlag ) { + if ( mouseover == theFlag ) { + return me; + } + mouseover = theFlag; + if ( mouseover ) { + _myControlWindow.setMouseOverController( this ); + cp5.getControlBroadcaster( ).invokeAction( new CallbackEvent( this , ControlP5Constants.ACTION_ENTER ) ); + cp5.getTooltip( ).activate( this ); + } else { + cp5.getControlBroadcaster( ).invokeAction( new CallbackEvent( this , ControlP5Constants.ACTION_LEAVE ) ); + _myControlWindow.removeMouseOverFor( this ); + cp5.getTooltip( ).deactivate( ); + setIsInside( false ); /* added after issue 6 has been reported */ + } + return me; + } + + /** + * @see ControllerInterface.updateInternalEvents + */ + @ControlP5.Invisible public T updateInternalEvents( final PApplet theApplet ) { + return me; + } + + /** + * the default draw function for each controller extending superclass Controller. This draw function will take care + * of default matrix operations and will call the display function of the current ControllerView object active for + * this particular controller. + * + * @exclude + * @see ControllerView + * @param theApplet PApplet + */ + @ControlP5.Invisible @Override public void draw( final PGraphics theGraphics ) { + + theGraphics.pushMatrix( ); + theGraphics.translate( x( position ) , y( position ) ); + _myControllerView.display( theGraphics , me ); + // theGraphics.pushMatrix( ); + // _myDebugView.display( theGraphics , me ); + // theGraphics.popMatrix( ); + theGraphics.popMatrix( ); + + } + + /** + * @param theElement ControllerInterface + * @return Controller + */ + @ControlP5.Invisible public T add( final ControllerInterface< ? > theElement ) { + ControlP5.logger( ).warning( " add() not supported." ); + return me; + } + + /** + * @param theElement ControllerInterface + * @return Controller + */ + @ControlP5.Invisible public T remove( final ControllerInterface< ? > theElement ) { + ControlP5.logger( ).warning( "remove() not supported." ); + return me; + } + + /** + * removes a controller from controlP5. + */ + public void remove( ) { + _myControlWindow.removeMouseOverFor( this ); + if ( _myParent != null ) { + _myParent.remove( this ); + } + if ( cp5 != null ) { + cp5.remove( this ); + } + } + + @Override public T bringToFront( ) { + return bringToFront( this ); + } + + @Override public T bringToFront( ControllerInterface< ? > theController ) { + if ( _myParent instanceof Tab ) { + moveTo( ( Tab ) _myParent ); + } else { + _myParent.bringToFront( theController ); + } + if ( theController != this ) { + if ( getSubelements( ).contains( theController ) ) { + if ( theController instanceof Controller< ? > ) { + getSubelements( ).remove( theController ); + getSubelements( ).add( ( Controller< ? > ) theController ); + } + } + } + return me; + } + + /** + * returns the index name of the controller. + * + * @return String + */ + public String getName( ) { + return _myName; + } + + /** + * moves the controller to another tab. The tab is defined by parameter theTabName. if controlP5 can't find a tab + * with given name, controlP5 will create this tab and add it to the main window. + * + * @param theTabName String + * @return Controller + */ + public final T moveTo( final String theTabName ) { + setTab( theTabName ); + for ( Controller< ? > c : getSubelements( ) ) { + c.moveTo( theTabName ); + } + return me; + } + + /** + * moves the controller to another tab. + * + * @param theTab + * @return Controller + */ + public final T moveTo( final Tab theTab ) { + setTab( theTab.getWindow( ) , theTab.getName( ) ); + for ( Controller< ? > c : getSubelements( ) ) { + c.moveTo( theTab ); + } + return me; + } + + /** + * moves the controller to the default tab inside the main window. + * + * @param theApplet + * @return Controller + */ + public final T moveTo( final PApplet theApplet ) { + setTab( "default" ); + for ( Controller< ? > c : getSubelements( ) ) { + c.moveTo( theApplet ); + } + return me; + } + + /** + * moves the controller to a tab inside the main window. + * + * @param theApplet + * @param theTabName + */ + public final T moveTo( final PApplet theApplet , final String theTabName ) { + setTab( theTabName ); + for ( Controller< ? > c : getSubelements( ) ) { + c.moveTo( theApplet , theTabName ); + } + return me; + } + + /** + * moves the controller to the default tab of a control window - other than the main window. + * + * @param theControlWindow + */ + public final T moveTo( final ControlWindow theControlWindow ) { + setTab( theControlWindow , "default" ); + for ( Controller< ? > c : getSubelements( ) ) { + c.moveTo( theControlWindow ); + } + return me; + } + + /** + * + * @param theControlWindow + * @param theTabName + * @return Controller + */ + public final T moveTo( final ControlWindow theControlWindow , final String theTabName ) { + setTab( theControlWindow , theTabName ); + for ( Controller< ? > c : getSubelements( ) ) { + c.moveTo( theControlWindow , theTabName ); + } + return me; + } + + /** + * {@inheritDoc} + */ + public final T moveTo( final ControllerGroup< ? > theGroup , final Tab theTab , ControlWindow theControlWindow ) { + for ( Controller< ? > c : getSubelements( ) ) { + c.moveTo( theGroup , theTab , theControlWindow ); + } + + if ( theGroup != null ) { + setGroup( theGroup ); + return me; + } + + if ( theControlWindow == null ) { + theControlWindow = cp5.controlWindow; + } + + setTab( theControlWindow , theTab.getName( ) ); + return me; + } + + /** + * + * @param theGroup + * @return Controller + */ + public final T moveTo( final ControlGroup< ? > theGroup ) { + if ( theGroup != null ) { + setGroup( theGroup ); + } + return me; + } + + /** + * {@inheritDoc} + */ + public final T moveTo( final ControllerGroup< ? > theGroup ) { + if ( theGroup != null ) { + setGroup( theGroup ); + } + return me; + } + + /** + * sets the tab of the controller. + * + * @param theName String + * @return Controller + */ + public final T setTab( final String theName ) { + setParent( cp5.getTab( theName ) ); + for ( Controller< ? > c : getSubelements( ) ) { + c.setTab( theName ); + } + return me; + } + + /** + * + */ + public final T setTab( final ControlWindow theWindow , final String theName ) { + setParent( cp5.getTab( theWindow , theName ) ); + for ( Controller< ? > c : getSubelements( ) ) { + c.setTab( theWindow , theName ); + } + return me; + } + + /** + * sets the group of the controller. + * + * @param theName String + * @return Controller + */ + public final T setGroup( final String theName ) { + setParent( cp5.getGroup( theName ) ); + for ( Controller< ? > c : getSubelements( ) ) { + c.setGroup( theName ); + } + return me; + } + + public final T setGroup( final ControllerGroup< ? > theGroup ) { + setParent( theGroup ); + for ( Controller< ? > c : getSubelements( ) ) { + c.setGroup( theGroup ); + } + return me; + } + + /** + * get the instance of the tab the controller belongs to. + * + * @return Tab + */ + public Tab getTab( ) { + if ( _myParent instanceof Tab ) { + return ( Tab ) _myParent; + } + return _myParent.getTab( ); + } + + /** + * set the parent of a parent of a controller. this method is only meant for internal use. this method is final and + * can't be overwritten. + * + * @param theParent ControllerInterface + * @return Controller + */ + @ControlP5.Invisible public final T setParent( final ControllerInterface< ? > theParent ) { + if ( _myParent != null ) { + _myParent.remove( this ); + } + set( absolutePosition , x( position ) , y( position ) ); + if ( theParent != null ) { + _myParent = theParent; + _myParent.add( this ); + set( absolutePosition , x( absolutePosition ) + x( _myParent.getPosition( ) ) , y( absolutePosition ) + y( _myParent.getPosition( ) ) ); + _myControlWindow = _myParent.getWindow( ); + } + setMouseOver( false ); + return me; + } + + /** + * returns the parent of a controller. + * + * @return ControllerInterface + */ + + @ControlP5.Invisible @Override @ControlP5.Layout public ControllerInterface< ? > getParent( ) { + return _myParent; + } + + /** + * returns the control window of the controller + * + * @return ControlWindow + */ + public ControlWindow getWindow( ) { + return _myControlWindow; + } + + /** + * checks if the mouse is within the area of a controller. + * + * @return boolean + */ + protected boolean inside( ) { + /* constrain the bounds of the controller to the dimensions of the cp5 area, required since PGraphics as render + * area has been introduced. */ + float x0 = PApplet.max( 0 , x( position ) + x( _myParent.getAbsolutePosition( ) ) ); + float x1 = PApplet.min( cp5.pgw , x( position ) + x( _myParent.getAbsolutePosition( ) ) + getWidth( ) ); + float y0 = PApplet.max( 0 , y( position ) + y( _myParent.getAbsolutePosition( ) ) ); + float y1 = PApplet.min( cp5.pgh , y( position ) + y( _myParent.getAbsolutePosition( ) ) + getHeight( ) ); + return ( _myControlWindow.mouseX > x0 && _myControlWindow.mouseX < x1 && _myControlWindow.mouseY > y0 && _myControlWindow.mouseY < y1 ); + } + + /** + * returns true or false and indicates if the mouse is inside the area of a controller. + * + * @return boolean + */ + public boolean isInside( ) { + return isInside; + } + + /** + * checks if a controller is active. + * + * @return boolean + */ + @ControlP5.Layout public boolean isActive( ) { + return isActive; + } + + /** + * returns true or false if the mouse has is pressed. + * + * @return boolean + */ + public boolean isMousePressed( ) { + return isMousePressed; + } + + public T addListenerFor( int theAction , CallbackListener theListener ) { + if ( _myControlListenerLUT == null ) { + _myControlListenerLUT = new HashMap< Integer , List< CallbackListener >>( ); + } + if ( _myControlListenerLUT.get( theAction ) == null ) { + _myControlListenerLUT.put( theAction , new ArrayList( ) ); + } + _myControlListenerLUT.get( theAction ).add( theListener ); + return me; + } + + public T removeListenerFor( int theAction , CallbackListener theListener ) { + if ( _myControlListenerLUT == null ) { + return me; + } + if ( _myControlListenerLUT.get( theAction ) == null ) { + return me; + } + _myControlListenerLUT.get( theAction ).remove( theListener ); + return me; + } + + public T removeListenersFor( int theAction ) { + if ( _myControlListenerLUT == null ) { + return me; + } + if ( _myControlListenerLUT.get( theAction ) == null ) { + return me; + } + _myControlListenerLUT.get( theAction ).clear( ); + return me; + } + + protected void callListener( int theAction ) { + if ( _myControlListenerLUT != null ) { + List< CallbackListener > l = _myControlListenerLUT.get( theAction ); + if ( l != null ) { + CallbackEvent event = new CallbackEvent( this , theAction ); + for ( CallbackListener cl : l ) { + cl.controlEvent( event ); + } + } + } + } + + public T onDraw( ControllerView< T > theView ) { + return setView( theView ); + } + + public T onEnter( CallbackListener theListener ) { + return addListenerFor( ControlP5Constants.ACTION_ENTER , theListener ); + } + + public T onLeave( CallbackListener theListener ) { + return addListenerFor( ControlP5Constants.ACTION_LEAVE , theListener ); + } + + public T onDrag( CallbackListener theListener ) { + return addListenerFor( ControlP5Constants.ACTION_DRAG , theListener ); + } + + public T onStartDrag( CallbackListener theListener ) { + return addListenerFor( ControlP5Constants.ACTION_START_DRAG , theListener ); + } + + public T onEndDrag( CallbackListener theListener ) { + return addListenerFor( ControlP5Constants.ACTION_END_DRAG , theListener ); + } + + public T onWheel( CallbackListener theListener ) { + return addListenerFor( ControlP5Constants.ACTION_WHEEL , theListener ); + } + + public T onMove( CallbackListener theListener ) { + return addListenerFor( ControlP5Constants.ACTION_MOVE , theListener ); + } + + public T onClick( CallbackListener theListener ) { + return addListenerFor( ControlP5Constants.ACTION_CLICK , theListener ); + } + + public T onPress( CallbackListener theListener ) { + return addListenerFor( ControlP5Constants.ACTION_PRESS , theListener ); + } + + public T onDoublePress( CallbackListener theListener ) { + return addListenerFor( ControlP5Constants.ACTION_DOUBLE_PRESS , theListener ); + } + + public T onRelease( CallbackListener theListener ) { + return addListenerFor( ControlP5Constants.ACTION_RELEASE , theListener ); + } + + public T onReleaseOutside( CallbackListener theListener ) { + return addListenerFor( ControlP5Constants.ACTION_RELEASE_OUTSIDE , theListener ); + } + + public T onChange( CallbackListener theListener ) { + return addListenerFor( ControlP5Constants.ACTION_BROADCAST , theListener ); + } + + protected void onEnter( ) { + } + + protected void onLeave( ) { + } + + protected void onDrag( ) { + } + + protected void onStartDrag( ) { + } + + protected void onEndDrag( ) { + } + + protected void onWheel( ) { + } + + protected void onMove( ) { + } + + protected void onClick( ) { + } + + protected void onPress( ) { + } + + protected void onDoublePress( ) { + } + + protected void onRelease( ) { + } + + protected void onScroll( int theAmount ) { + } + + protected void onReleaseOutside( ) { + } + + protected void mousePressed( ) { + this.setActive(); + } + + protected void mouseReleased( ) { + } + + protected void mouseReleasedOutside( ) { + } + + public void setActive(){ + ( (ControllerGroup) _myParent).setActiveController(this); + } + + protected void setIsInside( boolean theFlag ) { + isInside = theFlag; + } + + protected boolean getIsInside( ) { + return isInside; + } + + /** + * + * @param KeyEvent theEvent + */ + public void keyEvent( final KeyEvent theEvent ) { + } + + /** + * set the id of a controller. + * + * @param int theId + * @return Controller + */ + @ControlP5.Layout public T setId( final int theId ) { + _myId = theId; + return me; + } + + /** + * returns the id of a controller, by default the id is -1. Any int can be given to a controller as its ID, + * controlP5 does not recognize duplicates, this has to be managed on the user site. + * + * @return int + */ + @ControlP5.Layout public int getId( ) { + return _myId; + } + + protected ControllerPlug getControllerPlug( int theIndex ) { + return _myControllerPlugList.get( theIndex ); + } + + /** + * + * @return List + */ + public List< ControllerPlug > getControllerPlugList( ) { + return _myControllerPlugList; + } + + protected boolean checkControllerPlug( ControllerPlug thePlug ) { + for ( ControllerPlug cp : _myControllerPlugList ) { + if ( cp.getObject( ).equals( thePlug.getObject( ) ) && cp.getName( ).equals( thePlug.getName( ) ) ) { + return true; + } + } + return false; + } + + protected void addControllerPlug( final ControllerPlug thePlug ) { + if ( checkControllerPlug( thePlug ) ) + return; + _myControllerPlugList.add( thePlug ); + } + + protected void removeControllerPlug( final ControllerPlug thePlug ) { + _myControllerPlugList.remove( thePlug ); + } + + /** + * plugs the controller to a list of objects + * + * @param theObject + * @return Controller + */ + public T plugTo( final Object[] theObjects ) { + for ( Object o : theObjects ) { + plugTo( o , _myName ); + } + return me; + } + + /** + * + * @param theObjects + * @param theName + * @return Controller + */ + public T plugTo( final Object[] theObjects , String theName ) { + for ( Object o : theObjects ) { + plugTo( o , theName ); + } + return me; + } + + /** + * @param theObject + * @return Controller + */ + public T plugTo( Object theObject ) { + return plugTo( theObject , _myName ); + } + + public T plugTo( Object theObject , String theName ) { + if ( ( theObject instanceof PApplet ) ) { + unplugFrom( theObject ); + } + cp5.getControlBroadcaster( ).plug( theObject , this , theName ); + cp5.getControlBroadcaster( ).plug( theObject , this , cp5.getControlBroadcaster( ).getEventMethod( ) ); + return me; + } + + /** + * unplugs the controller from a list of objects + * + * @param theObjects + * @return + */ + public T unplugFrom( final Object[] theObjects ) { + for ( Object o : theObjects ) { + unplugFrom( o ); + } + return me; + } + + /** + * unplugs the Controller for a single object + * + * @param theObject + * @return Controller + */ + public T unplugFrom( final Object theObject ) { + for ( Iterator< ControllerPlug > i = _myControllerPlugList.iterator( ) ; i.hasNext( ) ; ) { + if ( i.next( ).getObject( ).equals( theObject ) ) { + i.remove( ); + } + } + return me; + } + + /** + * @param theValue float + */ + @ControlP5.Layout public T setValue( float theValue ) { + _myValue = theValue; + broadcast( ControlP5Constants.FLOAT ); + return me; + } + + public T setValueSelf( float theValue ) { + boolean broadcast = isBroadcast( ); + setBroadcast( false ); + _myValue = theValue; + broadcast( ControlP5Constants.FLOAT ); + setBroadcast( broadcast ); + return me; + } + + /** + * @see Controller#getStringValue() + * @see Controller#getArrayValue() + * @return float + */ + @ControlP5.Layout public float getValue( ) { + return _myValue; + } + + /** + * @param theValue + * @return Controller + */ + @ControlP5.Layout public T setStringValue( String theValue ) { + _myStringValue = theValue; + return me; + } + + /** + * @see Controller#getValue() + * @see Controller#getArrayValue() + * + * @return String + */ + @ControlP5.Layout public String getStringValue( ) { + return _myStringValue; + } + + /** + * returns the current float array value of a controller. + * + * @see Controller#getValue() + * @see Controller#getStringValue() + * + * @return float[] + */ + @ControlP5.Layout public float[] getArrayValue( ) { + return _myArrayValue; + } + + /** + * @param theIndex + * @return float + */ + public float getArrayValue( int theIndex ) { + if ( theIndex >= 0 && theIndex < _myArrayValue.length ) { + return _myArrayValue[ theIndex ]; + } else { + return Float.NaN; + } + } + + /** + * + * @param theArray + * @return Controller + */ + @ControlP5.Layout public T setArrayValue( float[] theArray ) { + _myArrayValue = theArray; + return me; + } + + /** + * + * @param theIndex + * @param theValue + * @return Controller + */ + public T setArrayValue( int theIndex , float theValue ) { + if ( theIndex >= 0 && theIndex < _myArrayValue.length ) { + _myArrayValue[ theIndex ] = theValue; + } + return me; + } + + /** + * sets the value of the controller without sending the broadcast event. this function is final. + * + * @param theValue float + * @return Controller + */ + public final T changeValue( float theValue ) { + boolean br = this.isBroadcast; + this.isBroadcast = false; + setValue( theValue ); + this.isBroadcast = br; + return me; + } + + /** + * updates the value of the controller without having to set the value explicitly. update does not visually update + * the controller. the updating status can be set with setUpdate(true/false) and checked with isUpdate(). + * + * @see Controller#setUpdate(boolean) + * @see Controller#isUpdate() + * @return Controller + */ + public T update( ) { + return me; + } + + /** + * disables the update function for a controller. + * + * @see Controller#update() + * @see Controller#isUpdate() + * + * @param theFlag boolean + * @return Controller + */ + @Override public T setUpdate( final boolean theFlag ) { + isUpdate = theFlag; + return me; + } + + /** + * enables the update function for a controller. + * + * @see Controller#update() + * @see Controller#setUpdate(boolean) + * + * @return boolean + */ + public boolean isUpdate( ) { + return isUpdate; + } + + @ControlP5.Invisible public int getPickingColor( ) { + return _myPickingColor; + } + + /** + * {@inheritDoc} + */ + @Override @ControlP5.Layout public CColor getColor( ) { + return color; + } + + /** + * sets the content of the caption label of a controller. + * + * @param theLabel + * @return Controller + */ + @ControlP5.Layout public T setCaptionLabel( final String theLabel ) { + _myCaptionLabel.set( theLabel ); + return me; + } + + /** + * set or change the value of the value label of a controller. (this is cheating, but maybe useful for some cases.) + * + * @param theLabel + * @return Controller + */ + @ControlP5.Layout public T setValueLabel( final String theLabel ) { + _myValueLabel.set( theLabel ); + return me; + } + + /** + * returns the controller's caption label text. + * + * @return String + */ + @ControlP5.Invisible public String getLabel( ) { + return _myCaptionLabel.getText( ); + } + + /** + * @see ControlListener + * @param theListener ControlListener + * @return Controller + */ + public T addListener( final ControlListener theListener ) { + _myControlListener.add( theListener ); + return me; + } + + /** + * @see ControlListener + * @param theListener ControlListener + * @return Controller + */ + public T removeListener( final ControlListener theListener ) { + _myControlListener.remove( theListener ); + return me; + } + + /** + * @return int + */ + public int listenerSize( ) { + return _myControlListener.size( ); + } + + /** + * @see CallbackListener + * @param theListener + * @return Controller + */ + public T addCallback( CallbackListener theListener ) { + cp5.addCallback( theListener , this ); + return me; + } + + /** + * @see CallbackListener + * @param theListener + * @return Controller + */ + public T removeCallback( CallbackListener theListener ) { + cp5.removeCallback( theListener ); + return me; + } + + /** + * @return Controller + */ + public T removeCallback( ) { + cp5.removeCallback( this ); + return me; + } + + protected void broadcast( ) { + broadcast( _myBroadcastType ); + } + + protected void broadcast( int theType ) { + theType = _myBroadcastType; + final ControlEvent myEvent = new ControlEvent( this ); + for ( ControlListener cl : _myControlListener ) { + cl.controlEvent( myEvent ); + } + if ( isBroadcast && isInit ) { + cp5.getControlBroadcaster( ).broadcast( myEvent , theType ); + cp5.getControlBroadcaster( ).invokeAction( new CallbackEvent( this , ControlP5Constants.ACTION_BROADCAST ) ); + callListener( ControlP5Constants.ACTION_BROADCAST ); + } + isInit = true; + } + + /** + * @return boolean + */ + @ControlP5.Layout @Override public boolean isVisible( ) { + if ( getParent( ) != null ) { + if (!getParent().isVisible()) { + return false; + } + } + return isVisible; + } + + /** + * @param theFlag boolean + * @return Controller + */ + @ControlP5.Layout public T setVisible( final boolean theFlag ) { + isVisible = theFlag; + if (!theFlag) { + isActive = false; + } + return me; + } + + /** + * @return Controller + */ + @Override public T hide( ) { + setMouseOver( false ); + isVisible = false; + isActive = false; + return me; + } + + /** + * @return Controller + */ + @Override public T show( ) { + isVisible = true; + return me; + } + + /** + * {@inheritDoc} + */ + @Override public T setColor( CColor theColor ) { + color.set( theColor ); + setColorCaptionLabel( theColor.getCaptionLabel( ) ); + setColorValueLabel( theColor.getValueLabel( ) ); + return me; + } + + /** + * {@inheritDoc} + */ + @Override @ControlP5.Layout public T setColorActive( final int theColor ) { + color.setActive( theColor ); + return me; + } + + /** + * {@inheritDoc} + */ + @Override @ControlP5.Layout public T setColorForeground( final int theColor ) { + color.setForeground( theColor ); + return me; + } + + /** + * {@inheritDoc} + */ + @Override @ControlP5.Layout public T setColorBackground( final int theColor ) { + color.setBackground( theColor ); + return me; + } + + /** + * {@inheritDoc} + * + * @param theColor + * @return Controller + */ + @ControlP5.Layout public T setColorCaptionLabel( final int theColor ) { + color.setCaptionLabel( theColor ); + _myCaptionLabel.setColor( color.getCaptionLabel( ) ); + return me; + } + + /** + * @param theColor + * @return Controller + */ + @ControlP5.Layout public T setColorValueLabel( final int theColor ) { + color.setValueLabel( theColor ); + if ( _myValueLabel != null ) { + _myValueLabel.setColor( color.getValueLabel( ) ); + } + return me; + } + + /** + * by default controllers use simple shapes, to replace these shapes with images, use setImages(). This can be handy + * for buttons, toggles, bangs, for more complex controllers such as sliders, range, dropdownlist this is not + * advisable. + * + * @param theImageDefault + * @param theImageOver + * @param theImageActive + * @return Controller + */ + public T setImages( PImage theImageDefault , PImage theImageOver , PImage theImageActive ) { + setImage( theImageDefault , ControlP5Constants.DEFAULT ); + setImage( theImageOver , ControlP5Constants.OVER ); + setImage( theImageActive , ControlP5Constants.ACTIVE ); + setImage( theImageActive , ControlP5Constants.HIGHLIGHT ); + return me; + } + + public T setImages( PImage theImageDefault , PImage theImageOver , PImage theImageActive , PImage theImageHighlight ) { + setImage( theImageDefault , ControlP5Constants.DEFAULT ); + setImage( theImageOver , ControlP5Constants.OVER ); + setImage( theImageActive , ControlP5Constants.ACTIVE ); + setImage( theImageHighlight , ControlP5Constants.HIGHLIGHT ); + return me; + } + + public T setImages( PImage ... imgs ) { + if ( imgs.length < 3 || imgs.length > 4 ) { + return me; + } + setImage( imgs[ 0 ] , ControlP5Constants.DEFAULT ); + setImage( imgs[ 1 ] , ControlP5Constants.OVER ); + setImage( imgs[ 2 ] , ControlP5Constants.ACTIVE ); + setImage( imgs.length == 3 ? imgs[ 2 ] : imgs[ 3 ] , ControlP5Constants.HIGHLIGHT ); + return me; + } + + public T setImage( PImage theImage ) { + return setImage( theImage , ControlP5Constants.DEFAULT ); + } + + /** + * @param theImage + * @param theState use Controller.DEFAULT (background) Controller.OVER (foreground) Controller.ACTIVE (active) + */ + public T setImage( PImage theImage , int theState ) { + if ( theImage != null ) { + images[ theState ] = theImage; + availableImages[ theState ] = true; + updateDisplayMode( ControlP5Constants.IMAGE ); + } + return me; + } + + public T updateSize( ) { + if ( images[ ControlP5Constants.DEFAULT ] != null ) { + setSize( images[ ControlP5Constants.DEFAULT ] ); + } + return me; + } + + /** + * auto-updates the size of a controller according to the dimensions of the PImage. + * + * @param theImage + * @return Controller + */ + public T setSize( PImage theImage ) { + if ( theImage != null ) { + setSize( theImage.width , theImage.height ); + } + return me; + } + + /** + * @param theWidth + * @param theHeight + * @return Controller + */ + public T setSize( int theWidth , int theHeight ) { + setWidth( theWidth ); + setHeight( theHeight ); + return me; + } + + protected T updateDisplayMode( int theMode ) { + if ( theMode != ControlP5Constants.DEFAULT ) { + ControlP5.logger( ).warning( "Image-based or custom displays are not yet implemented for this type of controller. (" + this.getClass( ).getName( ) + ")" ); + } + return me; + } + + /** + * use setDisplay to customize your controller look. A new controller-display class required to implement interface + * ControllerView. By default the display mode will be set to CUSTOM when setting a new display. + * + * @see ControllerView + * @param theView + * @return Controller + */ + public T setView( ControllerView< T > theView ) { + setView( theView , ControlP5Constants.CUSTOM ); + return me; + } + + public void setView( ControllerView< T > theView , int theMode ) { + _myDisplayMode = theMode; + _myControllerView = theView; + } + + public ControllerView< T > getView( ) { + return _myControllerView; + } + + /** + * @see Label + * @return Label + */ + @ControlP5.Layout public Label getCaptionLabel( ) { + return _myCaptionLabel; + } + + /** + * @return Label + */ + @ControlP5.Layout public Label getValueLabel( ) { + return _myValueLabel; + } + + /** + * returns the maximum value of the controller. + * + * @return float + */ + @ControlP5.Layout public float getMax( ) { + return _myMax; + } + + /** + * returns the minimum value of the controller. + * + * @return float + */ + @ControlP5.Layout public float getMin( ) { + return _myMin; + } + + /** + * sets the minimum value of the Controller. + * + * @param theValue float + * @return Controller + */ + @ControlP5.Layout public T setMin( float theValue ) { + _myMin = theValue; + changeValue( getValue( ) ); + return me; + } + + /** + * sets the maximum value of the Controller. + * + * @param theValue float + * @return Controller + */ + @ControlP5.Layout public T setMax( float theValue ) { + _myMax = theValue; + changeValue( getValue( ) ); + return me; + } + + /** + * @param theWidth + * @return Controller + */ + @ControlP5.Layout public T setWidth( int theWidth ) { + width = theWidth; + return me; + } + + /** + * @param theHeight + * @return Controller + */ + @ControlP5.Layout public T setHeight( int theHeight ) { + height = theHeight; + return me; + } + + /** + * @return int + */ + @ControlP5.Layout public int getWidth( ) { + return width; + } + + /** + * @return int + */ + @ControlP5.Layout public int getHeight( ) { + return height; + } + + /** + * sets the decimal precision of a controller's float value displayed. the precision does not apply to the returned + * float value. + * + * @param theValue + * @return Controller + */ + @ControlP5.Layout public T setDecimalPrecision( int theValue ) { + _myDecimalPoints = theValue; + // TODO transfer color values of existing label + int[] t = _myValueLabel.getAlign( ); + _myValueLabel = new Label( cp5 , ((adjustValue(_myMax)).length() > (adjustValue(_myMin)).length()) ? adjustValue(_myMax) : adjustValue(_myMin)); + _myValueLabel.align( t ); + _myValueLabel.setColor( color.getValueLabel( ) ); + _myValueLabel.set(adjustValue(getValue())); + return me; + } + + /** + * @return int + */ + @ControlP5.Layout public int getDecimalPrecision( ) { + return _myDecimalPoints; + } + + /** + * @param theValue float + * @return String + */ + protected String adjustValue( final float theValue ) { + return adjustValue( theValue , _myDecimalPoints ); + } + + /** + * @param theValue + * @param theFloatPrecision + * @return String + */ + protected String adjustValue( final float theValue , final int theFloatPrecision ) { + + int myFloatNumberLength = theFloatPrecision + 1; + if ( getControllerPlugList( ).size( ) > 0 ) { + for ( ControllerPlug cp : getControllerPlugList( ) ) { + if (cp.getClassType() == int.class) { + myFloatNumberLength = 0; + break; + } + } + } + String myLabelValue = String.valueOf(theValue); + int myIndex = myLabelValue.indexOf( '.' ); + if ( myIndex > 0 ) { + + if ( theFloatPrecision == 0 ) { + myIndex--; + } + myLabelValue = myLabelValue.substring( 0 , Math.min( myLabelValue.length( ) , myIndex + myFloatNumberLength )); + + final int n = ( myLabelValue.length( ) - myIndex ); + if ( n < myFloatNumberLength ) { + for ( int i = 0 ; i < myFloatNumberLength - n ; i++ ) { + myLabelValue += "0"; + } + } + } else { + myLabelValue += "."; + for ( int i = 0 ; i < myFloatNumberLength ; i++ ) { + myLabelValue += "0"; + } + } + + return myLabelValue; + } + + public T align( int theCaptionX , int theCaptionY , int theValueX , int theValueY ) { + getCaptionLabel( ).align( theCaptionX , theCaptionY ); + getCaptionLabel( ).align( theValueX , theValueY ); + return me; + } + + /** + * @return ControlWindow + */ + public ControlWindow getControlWindow( ) { + return _myControlWindow; + } + + /** + * disables the controller to be moved, or changed or controlled by the user. + * + * @return Controller + */ + public T lock( ) { + isLock = true; + return me; + } + + /** + * enables the controller to be moved, changed and controlled by the user. + * + * @return Controller + */ + public T unlock( ) { + isLock = false; + return me; + } + + /** + * @return boolean + */ + @ControlP5.Layout public boolean isLock( ) { + return isLock; + } + + /** + * sets the lock status of the controller + * + * @param theValue + * @return Controller + */ + @ControlP5.Layout public T setLock( boolean theValue ) { + isLock = theValue; + return me; + } + + /** + * @exclude TODO + */ + @ControlP5.Invisible public T setUserInteraction( boolean theValue ) { + isUserInteraction = theValue; + return me; + } + + /** + * @exclude + * @return boolean + */ + @ControlP5.Invisible public boolean isUserInteraction( ) { + return isUserInteraction; + } + + /** + * adds a tooltip to a controller, by default the tooltip is disabled. A Tooltip is made visible when entering a + * controller with the mouse, when the mouse is moved inside the controller, the tooltip will hide. + * + * @param theText + * @return Controller + */ + public T registerTooltip( String theText ) { + cp5.getTooltip( ).register( this , theText ); + return me; + } + + /** + * @see Controller#registerTooltip(String) + * @return Controller + */ + public T unregisterTooltip( ) { + cp5.getTooltip( ).unregister( this ); + return me; + } + + protected T setTooltipEnabled( boolean theValue ) { + tooltipEnabled = theValue; + return me; + } + + protected boolean isTooltipEnabled( ) { + return tooltipEnabled; + } + + /** + * @return Controller + */ + public T linebreak( ) { + cp5.linebreak( this , true , autoWidth , autoHeight , autoSpacing ); + return me; + } + + class DebugView implements ControllerView< T > { + + public void display( PGraphics theGraphics , T theController ) { + if ( inside( ) ) { + theGraphics.fill( 255 , 0 , 0 , 50 ); + theGraphics.stroke( 255 , 0 , 0 ); + } else { + theGraphics.fill( 255 , 50 ); + theGraphics.stroke( 255 ); + } + + theGraphics.pushMatrix( ); + theGraphics.rect( 0 , 0 , width , height ); + theGraphics.popMatrix( ); + } + } + + /** + * {@inheritDoc} + */ + @Override public ControllerProperty getProperty( String thePropertyName ) { + return cp5.getProperties( ).getProperty( this , thePropertyName ); + } + + /** + * {@inheritDoc} + */ + @Override public ControllerProperty getProperty( String theSetter , String theGetter ) { + return cp5.getProperties( ).getProperty( this , theSetter , theGetter ); + } + + /** + * {@inheritDoc} + */ + @Override public T registerProperty( String thePropertyName ) { + cp5.getProperties( ).register( this , thePropertyName ); + return me; + } + + /** + * {@inheritDoc} + */ + @Override public T registerProperty( String theSetter , String theGetter ) { + cp5.getProperties( ).register( this , theSetter , theGetter ); + return me; + } + + /** + * {@inheritDoc} + */ + @Override public T removeProperty( String thePropertyName ) { + cp5.getProperties( ).remove( this , thePropertyName ); + return me; + } + + /** + * {@inheritDoc} + */ + @Override public T removeProperty( String theSetter , String theGetter ) { + cp5.getProperties( ).remove( this , theSetter , theGetter ); + return me; + } + + /** + * @exclude {@inheritDoc} + */ + @Override public String toString( ) { + return getName( ) + " [" + getClass( ).getSimpleName( ) + "]"; + } + + /** + * @exclude + * @return String + */ + public String getInfo( ) { + return "[ type:\tController" + "\nname:\t" + _myName + "\n" + "label:\t" + _myCaptionLabel.getText( ) + "\n" + "id:\t" + _myId + "\n" + "value:\t" + getValue( ) + "\n" + "arrayvalue:\t" + CP.arrayToString( _myArrayValue ) + "\n" + "position:\t" + + position + "\n" + "absolute:\t" + absolutePosition + "\n" + "width:\t" + getWidth( ) + "\n" + "height:\t" + getHeight( ) + "\n" + "color:\t" + getColor( ) + "\n" + "visible:\t" + isVisible + "\n" + "moveable:\t" + isMoveable + " ]"; + } + + /** + * convenience method to fill a float array in favor of theArray[0] = 1.2; etc. + * takes a float array and fills it (starting from index 0) with arguments starting from index 1. + */ + static public float[] set( float[] theArray , float ... theValues ) { + if ( theValues.length > theArray.length ) { + System.arraycopy( theValues , 0 , theArray , 0 , theArray.length ); + } else { + System.arraycopy( theValues , 0 , theArray , 0 , theValues.length ); + } + return theArray; + } + + /** + * returns the first element of the float array. + */ + static public float x( float[] theArray ) { + if ( theArray.length > 0 ) { + return theArray[ 0 ]; + } + return 0; + } + + /** + * returns the second element of the float array. + */ + static public float y( float[] theArray ) { + if ( theArray.length > 1 ) { + return theArray[ 1 ]; + } + return 0; + } + + @Override public T setLabel( String theString ) { + getCaptionLabel( ).setText( theString ); + return me; + } + + @Override public T setColorLabel( int theColor ) { + getCaptionLabel( ).setColor( theColor ); + return me; + } + + @Override public T setColorValue( int theColor ) { + getValueLabel( ).setColor( theColor ); + return me; + } + + @Override public T setFont( PFont thePFont ) { + getValueLabel( ).setFont( thePFont ); + getCaptionLabel( ).setFont( thePFont ); + return me; + } + + @Override public T setFont( ControlFont theFont ) { + getValueLabel( ).setFont( theFont ); + getCaptionLabel( ).setFont( theFont ); + return me; + } + +} diff --git a/controlP5/ControllerAutomator.java b/controlP5/ControllerAutomator.java new file mode 100755 index 0000000..15059a0 --- /dev/null +++ b/controlP5/ControllerAutomator.java @@ -0,0 +1,352 @@ +package main.java.src2.main.java.controlP5.controlP5; + +/** + * controlP5 is a processing gui library. + * + * 2006-2015 by Andreas Schlegel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place, Suite 330, + * Boston, MA 02111-1307 USA + * + * @author Andreas Schlegel (http://www.sojamo.de) + * @modified ##date## + * @version ##version## + * + */ + +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Set; + +/** + * Used to convert Annotations into individual controllers this method of creating controllers is + * derived from cp5magic by Karsten Schmidt http://hg.postspectacular.com/cp5magic/wiki/Home + */ + +class ControllerAutomator { + + static Map< Set< Class< ? >> , Class< ? extends Controller< ? >>> mapping = new HashMap< Set< Class< ? >> , Class< ? extends Controller< ? >>>( ); + + static { + mapping.put( makeKey( boolean.class ) , Toggle.class ); + mapping.put( makeKey( int.class ) , Slider.class ); + mapping.put( makeKey( float.class ) , Slider.class ); + mapping.put( makeKey( String.class ) , Textfield.class ); + } + + static Map< String , Class< ? extends ControllerInterface< ? >>> types = new HashMap< String , Class< ? extends ControllerInterface< ? >>>( ); + + static { + types.put( "slider" , Slider.class ); + types.put( "knob" , Knob.class ); + types.put( "numberbox" , Numberbox.class ); + types.put( "toggle" , Toggle.class ); + types.put( "bang" , Bang.class ); + types.put( "toggle" , Toggle.class ); + types.put( "textfield" , Textfield.class ); + types.put( "label" , Textlabel.class ); + types.put( "textlabel" , Textlabel.class ); + types.put( "list" , ListBox.class ); + types.put( "dropdown" , DropdownList.class ); + types.put( "scrollable" , ScrollableList.class ); + } + + static Set< Class< ? >> makeKey( Class< ? > ... cs ) { + Set< Class< ? >> set = new HashSet< Class< ? >>( ); + Collections.addAll(set, cs); + return set; + } + + private final ControlP5 cp5; + + ControllerAutomator( ControlP5 c ) { + cp5 = c; + } + + private Object[] getParameters( Class< ? >[] cs , String v ) { + + if ( cs[ 0 ] == int.class ) { + return new Object[] { i( v , 0 ) }; + } else if ( cs[ 0 ] == float.class ) { + return new Object[] { Float.parseFloat( v ) }; + } else if ( cs[ 0 ] == String.class ) { + return new Object[] { v }; + } else if ( cs[ 0 ] == boolean.class ) { + return new Object[] { Boolean.parseBoolean( v ) }; + } + return new Object[ 0 ]; + } + + /** + * analyzes an object and adds fields with ControlElement annotations to controlP5. + * + */ + void addControllersFor( final String theAddressSpace , final Object t ) { + System.out.println("OKOK"); + if ( t instanceof List< ? > ) { + return; + } + + Class< ? > c = t.getClass( ); + + Field[] fs = c.getFields( ); + + Method[] ms = c.getMethods( ); + + Map< ControllerInterface , Integer > controllersIndexed = new HashMap< ControllerInterface , Integer >( ); + + for ( Method m : ms ) { + + int zindex = 0; + + if ( m.isAnnotationPresent( ControlElement.class ) ) { + + ControlElement ce = m.getAnnotation( ControlElement.class ); + + Map< String , String > params = new HashMap< String , String >( ); + + Class< ? extends ControllerInterface< ? >> type = null; + + for ( String s : ce.properties( ) ) { + String[] a = s.split( "=" ); + if ( a[ 0 ].startsWith( "type" ) ) { + type = types.get( a[ 1 ].toLowerCase( ) ); + } else if ( a[ 0 ].equals( "z-index" ) ) { + zindex = i( a[ 1 ] , 0 ); + } else { + params.put( "set" + capitalize( a[ 0 ] ) , a[ 1 ] ); + } + } + + if ( type == null ) { + type = mapping.get( makeKey( m.getParameterTypes( ) ) ); + } + if ( type != null ) { + + ControllerInterface< ? > cntr = null; + + if ( params.containsKey( "setItems" ) ) { + + if ( type.equals( ListBox.class ) ) { + + cntr = cp5.addScrollableList( t , theAddressSpace , m.getName( ) , ce.x( ) , ce.y( ) , 100 , 100 ); + ( ( ScrollableList ) cntr ).addItems( params.get( "setItems" ).split( "," ) ); + ( ( ScrollableList ) cntr ).setOpen( true ); + ( ( ScrollableList ) cntr ).setType(ScrollableList.LIST); + + } else if ( type.equals( DropdownList.class ) ) { + + cntr = cp5.addScrollableList( t , theAddressSpace , m.getName( ) , ce.x( ) , ce.y( ) , 100 , 100 ); + ( ( ScrollableList ) cntr ).addItems( params.get( "setItems" ).split( "," ) ); + ( ( ScrollableList ) cntr ).setOpen( false ); + ( ( ScrollableList ) cntr ).setType(ScrollableList.DROPDOWN); + + } else if ( type.equals( ScrollableList.class ) ) { + + cntr = cp5.addScrollableList( t , theAddressSpace , m.getName( ) , ce.x( ) , ce.y( ) , 100 , 100 ); + ( ( ScrollableList ) cntr ).addItems( params.get( "setItems" ).split( "," ) ); + + } + + } else { + cntr = cp5.addController( t , theAddressSpace , m.getName( ) , type , ce.x( ) , ce.y( ) ); + } + + controllersIndexed.put( cntr , zindex ); + + if ( ce.label( ).length( ) > 0 ) { + cntr.setCaptionLabel( ce.label( ) ); + } + + for ( Iterator< String > i = params.keySet( ).iterator( ) ; i.hasNext( ) ; ) { + String k = i.next( ); + String v = params.get( k ); + for ( Method method : cntr.getClass( ).getMethods( ) ) { + if ( method.getName( ).equals( k ) ) { + try { + Object[] os = getParameters( method.getParameterTypes( ) , v ); + method.setAccessible( true ); + method.invoke( cntr , os ); + } catch ( Exception e ) { + /* TODO is thrown when running ControlP5annotation example */ + // ControlP5.logger.severe( e.toString( ) ); + } + } + } + } + } + } + } + + for ( Field f : fs ) { + + int zindex = 0; + + if ( f.isAnnotationPresent( ControlElement.class ) ) { + + ControlElement ce = f.getAnnotation( ControlElement.class ); + + Map< String , String > params = new HashMap< String , String >( ); + + Class< ? extends ControllerInterface< ? >> type = null; + + for ( String s : ce.properties( ) ) { + String[] a = s.split( "=" ); + if ( a[ 0 ].startsWith( "type" ) ) { + type = types.get( a[ 1 ].toLowerCase( ) ); + } else if ( a[ 0 ].equals( "z-index" ) ) { + zindex = i( a[ 1 ] , 0 ); + } else { + params.put( "set" + capitalize( a[ 0 ] ) , a[ 1 ] ); + } + } + + ControllerInterface< ? > cntr = null; + + f.setAccessible( true ); + + if ( f.getType( ) == float.class || f.getType( ) == int.class ) { + + if ( type == Knob.class ) { + + cntr = cp5.addKnob( t , theAddressSpace , f.getName( ) ); + + } else if ( type == Numberbox.class ) { + + cntr = cp5.addNumberbox( t , theAddressSpace , f.getName( ) ); + + } else { + cntr = cp5.addSlider( t , theAddressSpace , f.getName( ) ); + + } + try { + if ( f.getType( ) == float.class ) { + cntr.setValue( f.getFloat( t ) ); + } else { + cntr.setValue( f.getInt( t ) ); + } + } catch ( Exception e ) { + ControlP5.logger.severe( e.toString( ) ); + } + } else if ( f.getType( ) == String.class ) { + if ( type == Textlabel.class ) { + String s = ""; + try { + s = String.valueOf(f.get(t)); + if ( f.get( t ) == null ) { + s = ce.label( ); + } + } catch ( Exception e ) { + } + cntr = cp5.addTextlabel( t , theAddressSpace , f.getName( ) , s ); + } else { + cntr = cp5.addTextfield( t , theAddressSpace , f.getName( ) ); + } + } else if ( f.getType( ) == boolean.class ) { + cntr = cp5.addToggle( t , theAddressSpace , f.getName( ) ); + try { + cntr.setValue( f.getBoolean( t ) ? 1 : 0 ); + } catch ( Exception e ) { + ControlP5.logger.severe( e.toString( ) ); + } + } + + if ( cntr != null ) { + + controllersIndexed.put( cntr , zindex ); + + if ( ce.label( ).length( ) > 0 ) { + cntr.setCaptionLabel( ce.label( ) ); + } + cntr.setPosition( ce.x( ) , ce.y( ) ); + + for ( Iterator< String > i = params.keySet( ).iterator( ) ; i.hasNext( ) ; ) { + String k = i.next( ); + String v = params.get( k ); + for ( Method method : cntr.getClass( ).getMethods( ) ) { + if ( method.getName( ).equals( k ) ) { + try { + Object[] os = getParameters( method.getParameterTypes( ) , v ); + method.setAccessible( true ); + method.invoke( cntr , os ); + } catch ( Exception e ) { + ControlP5.logger.severe( e.toString( ) ); + } + } + } + } + } + } + } + + /* */ + for ( Entry< ControllerInterface , Integer > entry : entriesSortedByValues( controllersIndexed ) ) { + entry.getKey( ).bringToFront( ); + } + } + + private static < K , V extends Comparable< ? super V >> List< Entry< K , V >> entriesSortedByValues( Map< K , V > map ) { + + List< Entry< K , V >> sortedEntries = new ArrayList< Entry< K , V >>( map.entrySet( ) ); + + Collections.sort( sortedEntries , new Comparator< Entry< K , V >>( ) { + @Override + public int compare( Entry< K , V > e1 , Entry< K , V > e2 ) { + return e1.getValue( ).compareTo( e2.getValue( ) ); + } + } ); + + return sortedEntries; + } + + /** + * capitalizes a string. + * + * @param theString + * @return String + */ + static String capitalize( String theString ) { + final StringBuilder result = new StringBuilder( theString.length( ) ); + String[] words = theString.split( "\\s" ); + for ( int i = 0 , l = words.length ; i < l ; ++i ) { + if ( i > 0 ) + result.append( " " ); + result.append( Character.toUpperCase( words[ i ].charAt( 0 ) ) ).append( words[ i ].substring( 1 ) ); + } + return result.toString( ); + } + + private int i( String o , int theDefault ) { + return isNumeric( o ) ? Integer.parseInt( o ) : isHex( o ) ? o.length( ) == 6 ? ( int ) Long.parseLong( "FF" + o , 16 ) : ( int ) Long.parseLong( o , 16 ) : theDefault; + } + + private boolean isNumeric( String str ) { + return str.matches( "(-|\\+)?\\d+(\\.\\d+)?" ); + } + + private boolean isHex( String str ) { + // (?:0[xX])?[0-9a-fA-F]+ (This will match with or without 0x prefix) + // System.out.println( "isHex? " + str + " " + str.matches( "[\\dA-Fa-f]+" ) ); + return str.matches( "[\\dA-Fa-f]+" ); + } +} diff --git a/controlP5/ControllerDisplay.java b/controlP5/ControllerDisplay.java new file mode 100755 index 0000000..8a81a9a --- /dev/null +++ b/controlP5/ControllerDisplay.java @@ -0,0 +1,52 @@ +package main.java.src2.main.java.controlP5.controlP5; + +/** + * controlP5 is a processing gui library. + * + * 2006-2015 by Andreas Schlegel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place, Suite 330, + * Boston, MA 02111-1307 USA + * + * @author Andreas Schlegel (http://www.sojamo.de) + * @modified ##date## + * @version ##version## + * + */ + +import processing.core.PApplet; + +/** + * The interface ControllerDisplay can be used to define custom displays for + * controllers. + * + * @see controlP5.draw(processing.core.PApplet) + * @see controlP5.setDisplay(ControllerDisplay) + * + */ +@SuppressWarnings("unchecked") +@Deprecated +public interface ControllerDisplay extends ControllerView { + + /** + * draws your custom controllers. display() will be called by a controller's + * draw() function and will pass a reference of PApplet as well as the + * Controller itself to your custom display class. + * + * @param theApplet + * @param theController + */ + void display(PApplet theApplet, Controller theController); + +} diff --git a/controlP5/ControllerGroup.java b/controlP5/ControllerGroup.java new file mode 100755 index 0000000..5dd9e83 --- /dev/null +++ b/controlP5/ControllerGroup.java @@ -0,0 +1,987 @@ +package main.java.src2.main.java.controlP5.controlP5; + +/** + * controlP5 is a processing gui library. + * + * 2006-2015 by Andreas Schlegel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place, Suite 330, + * Boston, MA 02111-1307 USA + * + * @author Andreas Schlegel (http://www.sojamo.de) + * @modified ##date## + * @version ##version## + * + **/ + +import java.util.ArrayList; +import java.util.List; + +import processing.core.PApplet; +import processing.core.PFont; +import processing.core.PGraphics; +import processing.event.KeyEvent; + +/** + * ControllerGroup is an abstract class and is extended by class ControlGroup, Tab, or the ListBox. + * + */ +public abstract class ControllerGroup< T > implements ControllerInterface< T > , ControlP5Constants , ControlListener { + + protected float[] position = new float[ 2 ]; + protected float[] positionBuffer = new float[ 2 ]; + protected float[] absolutePosition = new float[ 2 ]; + protected ControllerList controllers; + + /* the controller that receives KeyEvents*/ + protected Controller activeController; + protected List< ControlListener > _myControlListener; + // protected ControlWindow _myControlWindow; + protected ControlP5 cp5; + protected ControllerGroup< ? > _myParent; + protected String _myName; + protected int _myId = -1; + protected CColor color = new CColor( ); + protected boolean isMousePressed = false; + // only applies to the area of the title bar of a group + protected boolean isInside = false; + // applies to the area including controllers, currently only supported for listbox + protected boolean isInsideGroup = false; + protected boolean isVisible = true; + protected boolean isOpen = true; + protected boolean isBarVisible = true; + protected boolean isArrowVisible = true; + protected Button _myCloseButton; + protected boolean isMoveable = true; + protected Label _myLabel; + protected Label _myValueLabel; + protected int _myWidth = 99; + protected int _myHeight = 9; + protected boolean isUpdate; + protected List< Canvas > _myCanvas; + protected float _myValue; + protected String _myStringValue; + protected float[] _myArrayValue; + protected boolean isCollapse = true; + protected int _myPickingColor = 0x6600ffff; + protected float[] autoPosition = new float[] { 10 , 30 }; + protected float tempAutoPositionHeight = 0; + protected float autoPositionOffsetX = 10; + private String _myAddress = ""; + private boolean mouseover; + protected final T me; + + /** + * Convenience constructor to extend ControllerGroup. + */ + public ControllerGroup( ControlP5 theControlP5 , String theName ) { + this( theControlP5 , theControlP5.getDefaultTab( ) , theName , 0 , 0 ); + theControlP5.register( theControlP5.papplet , theName , this ); + } + + public ControllerGroup( ControlP5 theControlP5 , ControllerGroup< ? > theParent , String theName , float theX , float theY ) { + position = new float[] { theX , theY }; + cp5 = theControlP5; + me = ( T ) this; + color.set( ( theParent == null ) ? ControlP5.color : theParent.color ); + _myName = theName; + controllers = new ControllerList( ); + _myCanvas = new ArrayList< Canvas >( ); + _myControlListener = new ArrayList< ControlListener >( ); + _myLabel = new Label( cp5 , _myName ); + _myLabel.setText( _myName ); + _myLabel.setColor( color.getCaptionLabel( ) ); + _myLabel.align( ControlP5Constants.LEFT , ControlP5Constants.TOP ); + setParent( ( theParent == null ) ? this : theParent ); + } + + protected ControllerGroup( int theX , int theY ) { + position = new float[] { theX , theY }; + me = ( T ) this; + controllers = new ControllerList( ); + _myCanvas = new ArrayList< Canvas >( ); + } + + @ControlP5.Invisible public void init( ) { + } + + @ControlP5.Invisible @Override public ControllerInterface< ? > getParent( ) { + return _myParent; + } + + void setParent( ControllerGroup< ? > theParent ) { + + if ( _myParent != null && _myParent != this ) { + _myParent.remove( this ); + } + + _myParent = theParent; + + if ( _myParent != this ) { + _myParent.add( this ); + } + + set( absolutePosition , x( position ) , y( position ) ); + set( absolutePosition , x( absolutePosition ) + x( _myParent.absolutePosition ) , y( absolutePosition ) + y( _myParent.absolutePosition ) ); + set( positionBuffer , x( position ) , y( position ) ); + + if ( cp5.getWindow( ) != null ) { + setMouseOver( false ); + } + } + + public final T setGroup( ControllerGroup< ? > theGroup ) { + setParent( theGroup ); + return me; + } + + public final T setGroup( String theName ) { + setParent( cp5.getGroup( theName ) ); + return me; + } + + public final T moveTo( ControllerGroup< ? > theGroup , Tab theTab , ControlWindow theControlWindow ) { + if ( theGroup != null ) { + setGroup( theGroup ); + return me; + } + + if ( theControlWindow == null ) { + theControlWindow = cp5.controlWindow; + } + + setTab( theControlWindow , theTab.getName( ) ); + return me; + } + + public final T moveTo( ControllerGroup< ? > theGroup ) { + moveTo( theGroup , null , null ); + return me; + } + + public final T moveTo( Tab theTab ) { + moveTo( null , theTab , theTab.getWindow( ) ); + return me; + } + + public T moveTo( PApplet thePApplet ) { + moveTo( cp5.controlWindow ); + return me; + } + + public T moveTo( ControlWindow theControlWindow ) { + moveTo( null , theControlWindow.getTab( "default" ) , theControlWindow ); + return me; + } + + public final T moveTo( String theTabName ) { + moveTo( null , cp5.controlWindow.getTab( theTabName ) , cp5.controlWindow ); + return me; + } + + public final T moveTo( String theTabName , ControlWindow theControlWindow ) { + moveTo( null , theControlWindow.getTab( theTabName ) , theControlWindow ); + return me; + } + + public final T moveTo( ControlWindow theControlWindow , String theTabName ) { + moveTo( null , theControlWindow.getTab( theTabName ) , theControlWindow ); + return me; + } + + public final T moveTo( Tab theTab , ControlWindow theControlWindow ) { + moveTo( null , theTab , theControlWindow ); + return me; + } + + public final T setTab( String theName ) { + setParent( cp5.getTab( theName ) ); + return me; + } + + public final T setTab( ControlWindow theWindow , String theName ) { + setParent( cp5.getTab( theWindow , theName ) ); + return me; + } + + public final T setTab( Tab theTab ) { + setParent( theTab ); + return me; + } + + public Tab getTab( ) { + if ( this instanceof Tab ) { + return ( Tab ) this; + } + if ( _myParent instanceof Tab ) { + return ( Tab ) _myParent; + } + return _myParent.getTab( ); + } + + protected void updateFont( ControlFont theControlFont ) { + _myLabel.updateFont( theControlFont ); + if ( _myValueLabel != null ) { + _myValueLabel.updateFont( theControlFont ); + } + for ( int i = 0 ; i < controllers.size( ) ; i++ ) { + if ( controllers.get( i ) instanceof Controller< ? > ) { + ( ( Controller< ? > ) controllers.get( i ) ).updateFont( theControlFont ); + } else { + ( ( ControllerGroup< ? > ) controllers.get( i ) ).updateFont( theControlFont ); + } + } + } + + @ControlP5.Invisible public float[] getAbsolutePosition( ) { + return new float[] { x( absolutePosition ) , y( absolutePosition ) }; + } + + @ControlP5.Invisible public T setAbsolutePosition( float[] thePos ) { + set( absolutePosition , x( thePos ) , y( thePos ) ); + return me; + } + + public float[] getPosition( ) { + return new float[] { x( position ) , y( position ) }; + } + + public T setPosition( float theX , float theY ) { + set( position , ( int ) theX , ( int ) theY ); + set( positionBuffer , x( position ) , y( position ) ); + updateAbsolutePosition( ); + return me; + } + + public T setPosition( float[] thePosition ) { + setPosition( x( thePosition ) , y( thePosition ) ); + return me; + } + + public T updateAbsolutePosition( ) { + set( absolutePosition , x( position ) , y( position ) ); + set( absolutePosition , x( absolutePosition ) + x( _myParent.getAbsolutePosition( ) ) , y( absolutePosition ) + y( _myParent.getAbsolutePosition( ) ) ); + for ( int i = 0 ; i < controllers.size( ) ; i++ ) { + controllers.get( i ).updateAbsolutePosition( ); + } + return me; + } + + @ControlP5.Invisible public void continuousUpdateEvents( ) { + if ( controllers.size( ) <= 0 ) { + return; + } + for ( int i = controllers.size( ) - 1 ; i >= 0 ; i-- ) { + controllers.get( i ).continuousUpdateEvents( ); + } + } + + public T update( ) { + if ( controllers.size( ) <= 0 ) { + return me; + } + for ( int i = controllers.size( ) - 1 ; i >= 0 ; i-- ) { + if ( controllers.get( i ).isUpdate( ) ) { + controllers.get( i ).update( ); + } + } + return me; + } + + /** + * enables or disables the update function of a controller. + */ + @Override public T setUpdate( boolean theFlag ) { + isUpdate = theFlag; + for ( int i = 0 ; i < controllers.size( ) ; i++ ) { + controllers.get( i ).setUpdate( theFlag ); + } + return me; + } + + /** + * checks the update status of a controller. + */ + public boolean isUpdate( ) { + return isUpdate; + } + + @ControlP5.Invisible public T updateEvents( ) { + if ( isOpen ) { + for ( int i = controllers.size( ) - 1 ; i >= 0 ; i-- ) { + controllers.get( i ).updateEvents( ); + } + } + if ( isVisible ) { + if ( ( isMousePressed == cp5.getWindow( ).mouselock ) ) { + if ( isMousePressed && cp5.isAltDown( ) && isMoveable ) { + if ( !cp5.isMoveable ) { + set( positionBuffer , x( positionBuffer ) + cp5.getWindow( ).mouseX - cp5.getWindow( ).pmouseX , y( positionBuffer ) + cp5.getWindow( ).mouseY - cp5.getWindow( ).pmouseY ); + if ( cp5.isShiftDown( ) ) { + set( position , ( ( ( int ) ( x( positionBuffer ) ) / 10 ) * 10 ) , ( ( ( int ) ( y( positionBuffer ) ) / 10 ) * 10 ) ); + } else { + set( position , x( positionBuffer ) , y( positionBuffer ) ); + } + updateAbsolutePosition( ); + } + } else { + if ( isInside ) { + setMouseOver( true ); + } + if ( inside( ) ) { + if ( !isInside ) { + isInside = true; + onEnter( ); + setMouseOver( true ); + } + } else { + if ( isInside && !isMousePressed ) { + onLeave( ); + isInside = false; + setMouseOver( false ); + } + } + } + } + } + return me; + } + + @ControlP5.Invisible public T updateInternalEvents( PApplet theApplet ) { + return me; + } + + public boolean isMouseOver( ) { + mouseover = isInside || isInsideGroup || !isBarVisible; + return mouseover; + } + + public T setMouseOver( boolean theFlag ) { + + mouseover = isBarVisible && theFlag; + + if ( !mouseover ) { + isInside = false; + isInsideGroup = false; + cp5.getWindow( ).removeMouseOverFor( this ); + for ( int i = controllers.size( ) - 1 ; i >= 0 ; i-- ) { + controllers.get( i ).setMouseOver( false ); + } + } else { + // TODO since inside can be either isInside or isInsideGroup, there are 2 options here, + // which i am not sure how to handle them yet. + cp5.getWindow( ).setMouseOverController( this ); + } + return me; + } + + @ControlP5.Invisible public final void draw( PGraphics theGraphics ) { + if ( isVisible ) { + theGraphics.pushMatrix( ); + theGraphics.translate( x( position ) , y( position ) ); + preDraw( theGraphics ); + drawControllers( cp5.papplet , theGraphics ); + postDraw( theGraphics ); + if ( _myValueLabel != null ) { + _myValueLabel.draw( theGraphics , 2 , 2 , this ); + } + theGraphics.popMatrix( ); + } + } + + protected void drawControllers( PApplet theApplet , PGraphics theGraphics ) { + if ( isOpen ) { + + for ( Canvas cc : _myCanvas ) { + if ( cc.mode( ) == Canvas.PRE ) { + cc.draw( theGraphics ); + } + } + for ( ControllerInterface< ? > ci : controllers.get( ) ) { + if ( ci.isVisible( ) ) { + ci.updateInternalEvents( theApplet ); + ci.draw( theGraphics ); + } + } + + for ( CDrawable cd : controllers.getDrawables( ) ) { + cd.draw( theGraphics ); + } + + for ( Canvas cc : _myCanvas ) { + if ( cc.mode( ) == Canvas.POST ) { + cc.draw( theGraphics ); + } + } + } + } + + protected void preDraw( PGraphics theGraphics ) { + } + + protected void postDraw( PGraphics theGraphics ) { + } + + /** + * Adds a canvas to a controllerGroup such as a tab or group. Use processing's draw methods to + * add visual content. + */ + public Canvas addCanvas( Canvas theCanvas ) { + _myCanvas.add( theCanvas ); + // TODO theCanvas.setup( cp5.papplet ); + return theCanvas; + } + + /** + * Removes a canvas from a controller group. + */ + public T removeCanvas( Canvas theCanvas ) { + _myCanvas.remove( theCanvas ); + return me; + } + + /** + * Adds a controller to the group, but use Controller.setGroup() instead. + */ + public T add( ControllerInterface< ? > theElement ) { + controllers.add( theElement ); + return me; + } + + @Override public T bringToFront( ) { + return bringToFront( this ); + } + + @Override public T bringToFront( ControllerInterface< ? > theController ) { + if ( _myParent instanceof Tab ) { + moveTo( ( Tab ) _myParent ); + } else { + _myParent.bringToFront( theController ); + } + if ( theController != this ) { + if ( controllers.get( ).contains( theController ) ) { + controllers.remove( theController ); + controllers.add( theController ); + } + } + return me; + } + + /** + * Removes a controller from the group, but use Controller.setGroup() instead. + */ + + public T remove( ControllerInterface< ? > theElement ) { + if ( theElement != null ) { + theElement.setMouseOver( false ); + } + controllers.remove( theElement ); + return me; + } + + @ControlP5.Invisible public T addDrawable( CDrawable theElement ) { + controllers.addDrawable( theElement ); + return me; + } + + public T remove( CDrawable theElement ) { + controllers.removeDrawable( theElement ); + return me; + } + + /** + * removes the group from controlP5. + */ + public void remove( ) { + cp5.getWindow( ).removeMouseOverFor( this ); + if ( _myParent != null ) { + _myParent.remove( this ); + } + if ( cp5 != null ) { + cp5.remove( this ); + } + + for ( int i = controllers.size( ) - 1 ; i >= 0 ; i-- ) { + controllers.get( i ).remove( ); + } + controllers.clear( ); + controllers.clearDrawable( ); + controllers = new ControllerList( ); + if ( this instanceof Tab ) { + cp5.getWindow( ).removeTab( ( Tab ) this ); + } + } + + public String getName( ) { + return _myName; + } + + public String getAddress( ) { + return _myAddress; + } + + @Override public T setAddress( String theAddress ) { + if ( _myAddress.length( ) == 0 ) { + _myAddress = theAddress; + } + return me; + } + + public ControlWindow getWindow( ) { + return cp5.getWindow( ); + } + + @ControlP5.Invisible public void keyEvent( KeyEvent theEvent ) { + //for ( int i = 0 ; i < controllers.size( ) ; i++ ) { + // ( ( ControllerInterface< ? > ) controllers.get( i ) ).keyEvent( theEvent ); + //} + if ( activeController != null ){ + activeController.keyEvent(theEvent); + } + } + + public ControllerGroup setActiveController(Controller theController){ + activeController = theController; + return this; + } + + public Controller getActiveController(){ + return activeController; + } + + + + public boolean setMousePressed( boolean theStatus ) { + if ( !isVisible ) { + return false; + } + for ( int i = controllers.size( ) - 1 ; i >= 0 ; i-- ) { + if ( controllers.get( i ).setMousePressed( theStatus ) ) { + return true; + } + } + if (theStatus) { + if ( isInside ) { + isMousePressed = true; + mousePressed( ); + return true; + } + } else { + if (isMousePressed) { + isMousePressed = false; + mouseReleased( ); + } + } + return false; + } + + protected void mousePressed( ) { + } + + protected void mouseReleased( ) { + } + + protected void onEnter( ) { + } + + protected void onLeave( ) { + } + + protected void onScroll( int theAmount ) { + } + + public T setId( int theId ) { + _myId = theId; + return me; + } + + public int getId( ) { + return _myId; + } + + public T setColor( CColor theColor ) { + for ( ControllerInterface< ? > ci : controllers.get( ) ) { + ci.setColor( theColor ); + } + return me; + } + + public T setColorActive( int theColor ) { + color.setActive( theColor ); + for ( ControllerInterface< ? > ci : controllers.get( ) ) { + ci.setColorActive( theColor ); + } + return me; + } + + public T setColorForeground( int theColor ) { + color.setForeground( theColor ); + for ( ControllerInterface< ? > ci : controllers.get( ) ) { + ci.setColorForeground( theColor ); + } + return me; + } + + public T setColorBackground( int theColor ) { + color.setBackground( theColor ); + for ( ControllerInterface< ? > ci : controllers.get( ) ) { + ci.setColorBackground( theColor ); + } + return me; + } + + public T setColorLabel( int theColor ) { + color.setCaptionLabel( theColor ); + if ( _myLabel != null ) { + _myLabel.setColor( color.getCaptionLabel( ) ); + } + for ( ControllerInterface< ? > ci : controllers.get( ) ) { + ci.setColorLabel( theColor ); + } + return me; + } + + public T setColorValue( int theColor ) { + color.setValueLabel( theColor ); + if ( _myValueLabel != null ) { + _myValueLabel.setColor( color.getValueLabel( ) ); + } + for ( ControllerInterface< ? > ci : controllers.get( ) ) { + ci.setColorValue( theColor ); + } + return me; + } + + public T setLabel( String theLabel ) { + _myLabel.set( theLabel ); + return me; + } + + public boolean isVisible( ) { + if ( _myParent != null && _myParent != this ) { + if (!getParent().isVisible()) { + return false; + } + } + return isVisible; + } + + public T setVisible( boolean theFlag ) { + isVisible = theFlag; + return me; + } + + public T hide( ) { + isVisible = false; + return me; + } + + public T show( ) { + isVisible = true; + return me; + } + + /** + * set the moveable status of the group, when false, the group can't be moved. + */ + public T setMoveable( boolean theFlag ) { + isMoveable = theFlag; + return me; + } + + public boolean isMoveable( ) { + return isMoveable; + } + + public T setOpen( boolean theFlag ) { + isOpen = theFlag; + return me; + } + + public boolean isOpen( ) { + return isOpen; + } + + public T open( ) { + setOpen( true ); + return me; + } + + public T close( ) { + setOpen( false ); + return me; + } + + /** + * TODO redesign or deprecate remove the close button. + */ + @ControlP5.Invisible public T removeCloseButton( ) { + if ( _myCloseButton == null ) { + _myCloseButton.remove( ); + } + _myCloseButton = null; + return me; + } + + public T setTitle( String theTitle ) { + getCaptionLabel( ).set( theTitle ); + return me; + } + + public T hideBar( ) { + isBarVisible = false; + return me; + } + + public T showBar( ) { + isBarVisible = true; + return me; + } + + public boolean isBarVisible( ) { + return isBarVisible; + } + + public T hideArrow( ) { + isArrowVisible = false; + return me; + } + + public T showArrow( ) { + isArrowVisible = true; + return me; + } + + /** + * TODO redesign or deprecate add a close button to the controlbar of this controlGroup. + */ + @ControlP5.Invisible public T addCloseButton( ) { + if ( _myCloseButton == null ) { + _myCloseButton = new Button( cp5 , this , getName( ) + "close" , 1 , _myWidth + 1 , -10 , 12 , 9 ); + _myCloseButton.setCaptionLabel( "X" ); + _myCloseButton.addListener( this ); + } + return me; + } + + @ControlP5.Invisible public int getPickingColor( ) { + return _myPickingColor; + } + + public CColor getColor( ) { + return color; + } + + public T setValue( float theValue ) { + _myValue = theValue; + return me; + } + + public float getValue( ) { + return _myValue; + } + + public String getStringValue( ) { + return _myStringValue; + } + + public T setStringValue( String theValue ) { + _myStringValue = theValue; + return me; + } + + public float[] getArrayValue( ) { + return _myArrayValue; + } + + public float getArrayValue( int theIndex ) { + if ( theIndex >= 0 && theIndex < _myArrayValue.length ) { + return _myArrayValue[ theIndex ]; + } else { + return Float.NaN; + } + } + + public T setArrayValue( int theIndex , float theValue ) { + if ( theIndex >= 0 && theIndex < _myArrayValue.length ) { + _myArrayValue[ theIndex ] = theValue; + } + return me; + } + + public T setArrayValue( float[] theArray ) { + _myArrayValue = theArray; + return me; + } + + public Controller< ? > getController( String theController ) { + return cp5.getController( theController ); + } + + public T setCaptionLabel( String theValue ) { + getCaptionLabel( ).set( theValue ); + return me; + } + + public Label getCaptionLabel( ) { + return _myLabel; + } + + public Label getValueLabel( ) { + return _myValueLabel; + } + + public T enableCollapse( ) { + isCollapse = true; + return me; + } + + public T disableCollapse( ) { + isCollapse = false; + return me; + } + + public boolean isCollapse( ) { + return isCollapse; + } + + public int getWidth( ) { + return _myWidth; + } + + public int getHeight( ) { + return _myHeight; + } + + public T setWidth( int theWidth ) { + _myWidth = theWidth; + return me; + } + + public T setHeight( int theHeight ) { + _myHeight = theHeight; + return me; + } + + public T setSize( int theWidth , int theHeight ) { + setWidth( theWidth ); + // setHeight(theHeight) will set the Height of the bar therefore will not be used here. + return me; + } + + protected boolean inside( ) { + return ( cp5.getWindow( ).mouseX > x( position ) + x( _myParent.absolutePosition ) && cp5.getWindow( ).mouseX < x( position ) + x( _myParent.absolutePosition ) + _myWidth + && cp5.getWindow( ).mouseY > y( position ) + y( _myParent.absolutePosition ) - _myHeight && cp5.getWindow( ).mouseY < y( position ) + y( _myParent.absolutePosition ) ); + } + + public ControllerProperty getProperty( String thePropertyName ) { + return cp5.getProperties( ).getProperty( this , thePropertyName ); + } + + public ControllerProperty getProperty( String theSetter , String theGetter ) { + return cp5.getProperties( ).getProperty( this , theSetter , theGetter ); + } + + public T registerProperty( String thePropertyName ) { + cp5.getProperties( ).register( this , thePropertyName ); + return me; + } + + public T registerProperty( String theSetter , String theGetter ) { + cp5.getProperties( ).register( this , theSetter , theGetter ); + return me; + } + + public T removeProperty( String thePropertyName ) { + cp5.getProperties( ).remove( this , thePropertyName ); + return me; + } + + public T removeProperty( String theSetter , String theGetter ) { + cp5.getProperties( ).remove( this , theSetter , theGetter ); + return me; + } + + public void controlEvent( ControlEvent theEvent ) { + } + + public T addListener( final ControlListener theListener ) { + _myControlListener.add( theListener ); + return me; + } + + public T removeListener( final ControlListener theListener ) { + _myControlListener.remove( theListener ); + return me; + } + + public int listenerSize( ) { + return _myControlListener.size( ); + } + + @Override public String toString( ) { + return getName( ) + " [" + getClass( ).getSimpleName( ) + "]"; + } + + public String getInfo( ) { + return "type:\tControllerGroup" + "\nname:\t" + _myName + "\n" + "label:\t" + _myLabel.getText( ) + "\n" + "id:\t" + _myId + "\n" + "value:\t" + _myValue + "\n" + "arrayvalue:\t" + CP.arrayToString( _myArrayValue ) + "\n" + "position:\t" + + position + "\n" + "absolute:\t" + absolutePosition + "\n" + "width:\t" + getWidth( ) + "\n" + "height:\t" + getHeight( ) + "\n" + "color:\t" + getColor( ) + "\n" + "visible:\t" + isVisible + "\n" + "moveable:\t" + isMoveable + "\n"; + } + + /** + * convenience method to fill a float array in favor of theArray[0] = 1.2; etc. + * takes a float array and fills it (starting from index 0) with arguments starting from index 1. + */ + static public float[] set( float[] theArray , float ... theValues ) { + if ( theValues.length > theArray.length ) { + System.arraycopy( theValues , 0 , theArray , 0 , theArray.length ); + } else { + System.arraycopy( theValues , 0 , theArray , 0 , theValues.length ); + } + return theArray; + } + + /** + * returns the first element of the float array. + */ + static public float x( float[] theArray ) { + if ( theArray.length > 0 ) { + return theArray[ 0 ]; + } + return 0; + } + + /** + * returns the second element of the float array. + */ + static public float y( float[] theArray ) { + if ( theArray.length > 1 ) { + return theArray[ 1 ]; + } + return 0; + } + + @Override public T setFont( PFont thePFont ) { + getValueLabel( ).setFont( thePFont ); + getCaptionLabel( ).setFont( thePFont ); + return me; + } + + @Override public T setFont( ControlFont theFont ) { + getValueLabel( ).setFont( theFont ); + getCaptionLabel( ).setFont( theFont ); + return me; + } + +} diff --git a/controlP5/ControllerInterface.java b/controlP5/ControllerInterface.java new file mode 100755 index 0000000..c7dcbaa --- /dev/null +++ b/controlP5/ControllerInterface.java @@ -0,0 +1,185 @@ +package main.java.src2.main.java.controlP5.controlP5; + +/** + * controlP5 is a processing gui library. + * + * 2006-2015 by Andreas Schlegel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place, Suite 330, + * Boston, MA 02111-1307 USA + * + * @author Andreas Schlegel (http://www.sojamo.de) + * @modified ##date## + * @version ##version## + * + */ + +import processing.core.PApplet; +import processing.core.PFont; +import processing.core.PGraphics; +import processing.event.KeyEvent; + +/** + * + * The ControllerInterface is inherited by all ControllerGroup and Controller classes. + * + */ +public interface ControllerInterface< T > { + + @ControlP5.Invisible + void init( ); + + int getWidth( ); + + int getHeight( ); + + T setValue( float theValue ); + + float getValue( ); + + T setStringValue( String theValue ); + + String getStringValue( ); + + float[] getArrayValue( ); + + float getArrayValue( int theIndex ); + + T setArrayValue( int theIndex , float theValue ); + + T setArrayValue( float[] theArray ); + + int getId( ); + + float[] getPosition( ); + + @ControlP5.Invisible + T setPosition(float theX , float theY ); + + @ControlP5.Invisible + T setPosition(float[] thePosition ); + + float[] getAbsolutePosition( ); + + T setAbsolutePosition( float[] thePosition ); + + T updateAbsolutePosition( ); + + ControllerInterface< ? > getParent( ); + + T update( ); + + T setUpdate( boolean theFlag ); + + T bringToFront( ); + + T bringToFront( ControllerInterface< ? > theController ); + + boolean isUpdate( ); + + @ControlP5.Invisible + T updateEvents( ); + + @ControlP5.Invisible + void continuousUpdateEvents( ); + + /** + * 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. + * + * + */ + @ControlP5.Invisible + T updateInternalEvents(PApplet theApplet ); + + @ControlP5.Invisible + void draw(PGraphics theGraphics ); + + T add( ControllerInterface< ? > theElement ); + + T remove( ControllerInterface< ? > theElement ); + + void remove( ); + + String getName( ); + + String getAddress( ); + + ControlWindow getWindow( ); + + Tab getTab( ); + + boolean setMousePressed( boolean theStatus ); + + @ControlP5.Invisible + void keyEvent(KeyEvent theEvent ); + + @ControlP5.Invisible + T setAddress(String theAddress ); + + T setId( int theValue ); + + T setLabel( String theString ); + + T setColorActive( int theColor ); + + T setColorForeground( int theColor ); + + T setColorBackground( int theColor ); + + T setColorLabel( int theColor ); + + T setColorValue( int theColor ); + + T setColor( CColor theColor ); + + CColor getColor( ); + + T show( ); + + T hide( ); + + boolean isVisible( ); + + T moveTo( ControllerGroup< ? > theGroup , Tab theTab , ControlWindow theWindow ); + + T moveTo( ControllerGroup< ? > theGroup ); + + @ControlP5.Invisible + int getPickingColor( ); + + ControllerProperty getProperty( String thePropertyName ); + + ControllerProperty getProperty( String theSetter , String theGetter ); + + T registerProperty( String thePropertyName ); + + T registerProperty( String theSetter , String theGetter ); + + T removeProperty( String thePropertyName ); + + T removeProperty( String theSetter , String theGetter ); + + boolean isMouseOver( ); + + T setMouseOver( boolean theFlag ); + + T setFont( PFont theFont ); + + T setFont( ControlFont theFont ); + + T addListener( ControlListener theListener ); + + T setCaptionLabel( String theValue ); +} diff --git a/controlP5/ControllerLayout.java b/controlP5/ControllerLayout.java new file mode 100755 index 0000000..b6d7116 --- /dev/null +++ b/controlP5/ControllerLayout.java @@ -0,0 +1,180 @@ +package main.java.src2.main.java.controlP5.controlP5; + +/** + * controlP5 is a processing gui library. + * + * 2006-2015 by Andreas Schlegel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place, Suite 330, + * Boston, MA 02111-1307 USA + * + * @author Andreas Schlegel (http://www.sojamo.de) + * @modified ##date## + * @version ##version## + * + */ + +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.logging.Logger; + + +class ControllerLayout { + + private final ControlP5 cp5; + + public static final Logger logger = Logger.getLogger( ControllerLayout.class.getName( ) ); + + static { + Map< Class< ? > , Class< ? >> datatypes = new HashMap< Class< ? > , Class< ? >>( ); + datatypes.put( Integer.class , int.class ); + datatypes.put( Float.class , float.class ); + datatypes.put( Boolean.class , boolean.class ); + datatypes.put( Character.class , char.class ); + datatypes.put( Long.class , long.class ); + datatypes.put( Double.class , double.class ); + datatypes.put( Byte.class , byte.class ); + datatypes.put( CColor.class , CColor.class ); + } + + ControllerLayout( ControlP5 theControlP5 ) { + cp5 = theControlP5; + } + + public void save( String theLayoutPath ) { + theLayoutPath = cp5.checkPropertiesPath( theLayoutPath ); + Class< ? >[] classes = new Class< ? >[] { RadioButton.class , ListBox.class , ColorPicker.class , DropdownList.class }; + HashSet< ControllerLayoutElement > layoutelements = new HashSet< ControllerLayoutElement >( ); + for ( ControllerInterface< ? > c : cp5.getList( ) ) { + if ( !Arrays.asList( classes ).contains( c.getParent( ).getClass( ) ) ) { + layoutelements.add( new ControllerLayoutElement( c ) ); + System.out.print( c.getAddress( ) ); + System.out.print( " (" + c.getName( ) + ") " ); + System.out.print( "\tpos:" + Controller.x( c.getPosition( ) ) + "," + Controller.y( c.getPosition( ) ) ); + System.out.print( "\tdim:" + c.getWidth( ) + "," + c.getHeight( ) ); + System.out.print( "\tparent:" + c.getParent( ) ); + System.out.println( "\tclass:" + c.getClass( ).getSimpleName( ) ); + } + } + try { + FileOutputStream fos = new FileOutputStream( theLayoutPath ); + ObjectOutputStream oos = new ObjectOutputStream( fos ); + + logger.info( "Saving layout-items to " + theLayoutPath ); + oos.writeInt( layoutelements.size( ) ); + + for ( ControllerLayoutElement ce : layoutelements ) { + oos.writeObject( ce ); + } + oos.flush( ); + oos.close( ); + fos.close( ); + + } catch ( Exception e ) { + logger.warning( "Exception during serialization: " + e ); + } + } + + protected boolean isClassAssignableFromSuperclass( Class< ? > theClass , Class< ? > theSuper ) { + Class< ? > _mySuper = theClass.getSuperclass( ); + while ( _mySuper.getSuperclass( ) != null ) { + if ( _mySuper.isAssignableFrom( theSuper ) ) { + return true; + } + _mySuper = _mySuper.getSuperclass( ); + } + return false; + } + + public void load( String theLayoutPath ) { + theLayoutPath = cp5.checkPropertiesPath( theLayoutPath ); + ArrayList< ControllerLayoutElement > list = new ArrayList< ControllerLayoutElement >( ); + try { + FileInputStream fis = new FileInputStream( theLayoutPath ); + ObjectInputStream ois = new ObjectInputStream( fis ); + int size = ois.readInt( ); + logger.info( "loading " + size + " layout-items." + fis.getFD( ) ); + + for ( int i = 0 ; i < size ; i++ ) { + try { + ControllerLayoutElement ce = ( ControllerLayoutElement ) ois.readObject( ); + list.add( ce ); + } catch ( Exception e ) { + logger.warning( "skipping a property, " + e ); + } + } + ois.close( ); + } catch ( Exception e ) { + logger.warning( "Exception during deserialization: " + e ); + } + + for ( ControllerLayoutElement ce : list ) { + /* ControllerInterface ci = cp5.getController(ce.getName()); + * if (ci == null) { + * try { + * if (isClassAssignableFromSuperclass(ce.getType(), ControllerGroup.class)) { + * ControllerGroup c = (ControllerGroup) cp5.addGroup(null, "", ce.getName(), ce.getType(), ce.getX(), ce.getY(), ce.getWidth(), + * ce.getHeight()); + * c.setWidth(ce.getWidth()); + * c.setHeight(ce.getHeight()); + * if (c instanceof ListBox) { + * System.out.println("found listbox or dropdownlist!"); + * ((ListBox) c).setHeight(200); + * ((ListBox) c).setBarHeight(ce.getHeight()); + * } + * } else { + * Controller c = (Controller) cp5.addController(ce.getName(), ce.getType(), ce.getX(), ce.getY()); + * c.setWidth(ce.getWidth()); + * c.setHeight(ce.getHeight()); + * } + * } catch (Exception e) { + * + * } + * } + * ci = cp5.get(ce.getName()); + * if (ci != null) { + * ci.setAddress(ce.getAddress()); + * System.out.println("name:" + ce.getName() + "\tparent:" + ce.getParent() + "\telement:" + ci + "\ttype:" + ce.getType() + "\t" + + * ce.getHeight()); + * } else { + * System.out.println("could not create " + ce.getName() + "," + ce.getType()); + * } + * // if(cp5.get(ce.getName()) instanceof DropdownList) { + * // DropdownList dl = (DropdownList)(cp5.get(ce.getName())); + * // dl.setHeight(200); + * // } */ + } + + for ( ControllerLayoutElement ce : list ) { + /* ControllerInterface ci = cp5.get(ce.getName()); + * if (ci != null) { + * ControllerGroup g = cp5.getGroup(ce.getParent()); + * if (g == null) { + * g = cp5.getTab(ce.getParent()); + * } + * if (g != null) { + * ci.moveTo(g); + * } + * } */ + } + } + +} diff --git a/controlP5/ControllerLayoutElement.java b/controlP5/ControllerLayoutElement.java new file mode 100755 index 0000000..86bfbfb --- /dev/null +++ b/controlP5/ControllerLayoutElement.java @@ -0,0 +1,52 @@ +package main.java.src2.main.java.controlP5.controlP5; + +/** + * controlP5 is a processing gui library. + * + * 2006-2015 by Andreas Schlegel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place, Suite 330, + * Boston, MA 02111-1307 USA + * + * @author Andreas Schlegel (http://www.sojamo.de) + * @modified ##date## + * @version ##version## + * + */ + +import java.io.Serializable; +import java.util.HashMap; +import java.util.Map; + +class ControllerLayoutElement implements Serializable, Cloneable { + + private static final long serialVersionUID = -5006855922546529005L; + + private final transient ControllerInterface controller; + + private final Class type; + + private final Map values; + + ControllerLayoutElement(ControllerInterface theController) { + controller = theController; + type = theController.getClass(); + values = new HashMap(); + } + + private void cascade(Object theObject) { + + } + +} \ No newline at end of file diff --git a/controlP5/ControllerList.java b/controlP5/ControllerList.java new file mode 100755 index 0000000..52ae011 --- /dev/null +++ b/controlP5/ControllerList.java @@ -0,0 +1,97 @@ +package main.java.src2.main.java.controlP5.controlP5; + +/** + * controlP5 is a processing gui library. + * + * 2006-2015 by Andreas Schlegel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place, Suite 330, + * Boston, MA 02111-1307 USA + * + * @author Andreas Schlegel (http://www.sojamo.de) + * @modified ##date## + * @version ##version## + * + */ + +import java.util.List; +import java.util.Vector; + +/** + * Stores objects of type ControllerInterface and CDrawable, mainly for internal use. + */ +public class ControllerList { + + protected List< ControllerInterface< ? >> controllers; + + protected List< CDrawable > drawables; + + public ControllerList( ) { + controllers = new Vector< ControllerInterface< ? >>( ); + drawables = new Vector< CDrawable >( ); + } + + public void add( ControllerInterface< ? > theController ) { + if (!controllers.contains(theController)) { + controllers.add( theController ); + } + } + + protected void remove( ControllerInterface< ? > theController ) { + controllers.remove( theController ); + } + + protected void addDrawable( CDrawable theController ) { + if (!drawables.contains(theController)) { + drawables.add( theController ); + } + } + + protected void removeDrawable( CDrawable theController ) { + drawables.remove( theController ); + } + + public ControllerInterface< ? > get( int theIndex ) { + return controllers.get( theIndex ); + } + + public List< ControllerInterface< ? >> get( ) { + return controllers; + } + + public CDrawable getDrawable( int theIndex ) { + return drawables.get( theIndex ); + } + + public List< CDrawable > getDrawables( ) { + return drawables; + } + + public int sizeDrawable( ) { + return drawables.size( ); + } + + public int size( ) { + return controllers.size( ); + } + + protected void clear( ) { + controllers.clear( ); + } + + protected void clearDrawable( ) { + drawables.clear( ); + } + +} diff --git a/controlP5/ControllerPlug.java b/controlP5/ControllerPlug.java new file mode 100755 index 0000000..6ae6be4 --- /dev/null +++ b/controlP5/ControllerPlug.java @@ -0,0 +1,273 @@ +package main.java.src2.main.java.controlP5.controlP5; + +/** + * controlP5 is a processing gui library. + * + * 2006-2015 by Andreas Schlegel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place, Suite 330, + * Boston, MA 02111-1307 USA + * + * @author Andreas Schlegel (http://www.sojamo.de) + * @modified ##date## + * @version ##version## + * + */ + +import java.lang.reflect.Method; +import java.lang.reflect.Field; +import java.security.AccessControlException; + +/** + * The ControllerPlug is used to do all the reflection procedures to link a controller to a variable + * or function inside your main application. + * + * @example use/ControlP5plugTo + */ +public class ControllerPlug { + + private Object _myObject; + private String _myName; + private Method _myMethod; + private Field _myField; + private int _myType = ControlP5Constants.INVALID; + private Class< ? > _myParameterClass; + private int _myParameterType = -1; + private Object _myValue = null; + private Class< ? >[] _myAcceptClassList; + private Class< ? > _myEventMethodParameter = ControlEvent.class; + + public ControllerPlug( final Object theObject , final String theName , final int theType , final int theParameterType , Class< ? >[] theAcceptClassList ) { + set( theObject , theName , theType , theParameterType , theAcceptClassList ); + } + + ControllerPlug( Class< ? > param , final Object theObject , final String theName , final int theType , final int theParameterType ) { + setEventMethodParameter( param ); + set( theObject , theName , theType , theParameterType , null ); + } + + void setEventMethodParameter( Class< ? > theClass ) { + _myEventMethodParameter = theClass; + } + + protected void set( Object theObject ) { + set( theObject , getName( ) , getType( ) , getParameterType( ) , getAcceptClassList( ) ); + } + + public void set( final Object theObject , final String theName , final int theType , final int theParameterType , final Class< ? >[] theAcceptClassList ) { + _myObject = theObject; + _myName = theName; + _myType = theType; + _myParameterType = theParameterType; + _myAcceptClassList = theAcceptClassList; + Class< ? > myClass = theObject.getClass( ); + + /* check for methods */ + if ( _myType == ControlP5Constants.METHOD ) { + try { + Method[] myMethods = myClass.getMethods( ); + for ( int i = 0 ; i < myMethods.length ; i++ ) { + if ( ( myMethods[ i ].getName( ) ).equals( theName ) ) { + if ( myMethods[ i ].getParameterTypes( ).length == 1 ) { + for ( int j = 0 ; j < _myAcceptClassList.length ; j++ ) { + if ( myMethods[ i ].getParameterTypes( )[ 0 ] == _myAcceptClassList[ j ] ) { + _myParameterClass = myMethods[ i ].getParameterTypes( )[ 0 ]; + break; + } + } + } else if ( myMethods[ i ].getParameterTypes( ).length == 0 ) { + _myParameterClass = null; + break; + } + break; + } + } + Class< ? >[] myArgs = ( _myParameterClass == null ) ? new Class[] { } : new Class[] { _myParameterClass }; + _myMethod = myClass.getMethod( _myName , myArgs ); + _myMethod.setAccessible( true ); + } catch ( SecurityException e ) { + printSecurityWarning( e ); + } catch ( NoSuchMethodException e ) { + if ( _myParameterClass != CallbackEvent.class ) { + ControlP5.logger( ).warning( " plug() failed. If function " + theName + " does exist, make it public. " + e ); + } + } + + /* check for controlEvent */ + } else if ( _myType == ControlP5Constants.EVENT ) { + try { + + _myMethod = _myObject.getClass( ).getMethod( _myName , _myEventMethodParameter); + _myMethod.setAccessible( true ); + _myParameterClass = _myEventMethodParameter; + } catch ( SecurityException e ) { + printSecurityWarning( e ); + } catch ( NoSuchMethodException e ) { + if ( _myEventMethodParameter != CallbackEvent.class ) { + ControlP5.logger( ).warning( " plug() failed " + _myParameterClass + ". If function " + theName + " does exist, make it public. " + e ); + } + } + /* check for fields */ + } else if ( _myType == ControlP5Constants.FIELD ) { + + Field[] myFields = ControlBroadcaster.getFieldsFor( myClass ); + + for ( int i = 0 ; i < myFields.length ; i++ ) { + if ( myFields[ i ].getName( ).equals( _myName ) ) { + _myParameterClass = myFields[ i ].getType( ); + } + } + if ( _myParameterClass != null ) { + /** + * note. when running in applet mode. for some reason setAccessible(true) works for + * methods but not for fields. theAccessControlException is thrown. therefore, make + * fields in your code public. + */ + + try { + _myField = myClass.getDeclaredField( _myName ); + try { + _myField.setAccessible( true ); + } catch ( java.security.AccessControlException e ) { + printSecurityWarning( e ); + } + try { + _myValue = ( _myField.get( theObject ) ); + } catch ( Exception ex ) { + printSecurityWarning( ex ); + } + } catch ( NoSuchFieldException e ) { + ControlP5.logger( ).warning( e.toString( ) ); + } + } + } + } + + private void printSecurityWarning( Exception e ) { + // AccessControlException required for applets. + if ( e.getClass( ).equals( AccessControlException.class ) ) { + ControlP5.isApplet = true; + ControlP5.logger( ).warning( "You are probably running in applet mode.\n" + "make sure fields and methods in your code are public.\n" + e ); + } + } + + protected Object getValue( ) { + return _myValue; + } + + protected Object getObject( ) { + return _myObject; + } + + protected String getName( ) { + return _myName; + } + + protected int getType( ) { + return _myType; + } + + protected int getParameterType( ) { + return _myParameterType; + } + + protected Class< ? >[] getAcceptClassList( ) { + return _myAcceptClassList; + } + + protected Class< ? > getClassType( ) { + return _myParameterClass; + } + + protected boolean checkType( int theType ) { + return _myType == theType; + } + + protected boolean checkName( String theName ) { + return ( _myName.equals( theName ) ); + } + + private Object get( float theValue ) { + if ( _myParameterClass == float.class ) { + return new Float( theValue ); + } else if ( _myParameterClass == int.class ) { + return Integer.valueOf((int) theValue); + } else if ( _myParameterClass == boolean.class ) { + return ( theValue > 0.5 ) ? Boolean.TRUE : Boolean.FALSE; + } else { + return null; + } + } + + protected Object getFieldParameter( float theValue ) { + return get( theValue ); + } + + protected Object[] getMethodParameter( float theValue ) { + return new Object[] { get( theValue ) }; + } + + protected Method getMethod( ) { + return _myMethod; + } + + protected Field getField( ) { + return _myField; + } + + static public boolean checkPlug( Object theObject , String thePlugName , Class< ? >[] theArgs ) { + try { + theObject.getClass( ).getMethod( thePlugName , theArgs ); + return true; + } catch ( Exception e ) { + return false; + } + } + + @Deprecated + protected Class< ? > classType( ) { + return _myParameterClass; + } + + @Deprecated + protected Object value( ) { + return _myValue; + } + + @Deprecated + protected Object object( ) { + return _myObject; + } + + @Deprecated + protected String name( ) { + return _myName; + } + + @Deprecated + protected int type( ) { + return _myType; + } + + @Deprecated + protected int parameterType( ) { + return _myParameterType; + } + + @Deprecated + protected Class< ? >[] acceptClassList( ) { + return _myAcceptClassList; + } + +} diff --git a/controlP5/ControllerProperties.java b/controlP5/ControllerProperties.java new file mode 100755 index 0000000..733040a --- /dev/null +++ b/controlP5/ControllerProperties.java @@ -0,0 +1,921 @@ +package main.java.src2.main.java.controlP5.controlP5; + +/** + * controlP5 is a processing gui library. + * + * 2006-2015 by Andreas Schlegel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place, Suite 330, + * Boston, MA 02111-1307 USA + * + * @author Andreas Schlegel (http://www.sojamo.de) + * @modified ##date## + * @version ##version## + * + */ + +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.io.StringReader; +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Set; +import java.util.logging.Logger; + +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; + +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; +import org.xml.sax.InputSource; +import org.xml.sax.SAXException; + +import processing.core.PApplet; +import processing.data.JSONArray; +import processing.data.JSONObject; + +/** + * Values of controllers can be stored inside properties files which can be saved to file or memory. + * + * @example controllers/ControlP5properties + */ +public class ControllerProperties { + + public final static int OPEN = 0; + public final static int CLOSE = 1; + public static String defaultName = "controlP5"; + + + PropertiesStorageFormat format; + + /** + * all ControllerProperties will be stored inside Map allProperties. ControllerProperties need to be unique or will + * otherwise be overwritten. + * + * A hashSet containing names of PropertiesSets is assigned to each ControllerProperty. HashSets are used instead of + * ArrayList to only allow unique elements. + */ + + private final Map< ControllerProperty , HashSet< String >> allProperties; + + /** + * A set of unique property-set names. + */ + private final Set< String > allSets; + final ControlP5 controlP5; + private final String _myDefaultSetName = "default"; + public static final Logger logger = Logger.getLogger( ControllerProperties.class.getName( ) ); + private final Map< String , Set< ControllerProperty >> _mySnapshots; + + public ControllerProperties( ControlP5 theControlP5 ) { + controlP5 = theControlP5; + // setFormat( new SerializedFormat( ) ); + setFormat( new JSONFormat( ) ); + allProperties = new HashMap< ControllerProperty , HashSet< String >>( ); + allSets = new HashSet< String >( ); + addSet( _myDefaultSetName ); + _mySnapshots = new LinkedHashMap< String , Set< ControllerProperty >>( ); + } + + public Map< ControllerProperty , HashSet< String >> get( ) { + return allProperties; + } + + /** + * adds a property based on names of setter and getter methods of a controller. + * + * @param thePropertySetter + * @param thePropertyGetter + */ + public ControllerProperty register( ControllerInterface< ? > theController , String thePropertySetter , String thePropertyGetter ) { + ControllerProperty p = new ControllerProperty( theController , thePropertySetter , thePropertyGetter ); + if ( !allProperties.containsKey( p ) ) { + // register a new property with the main properties container + allProperties.put( p , new HashSet< String >( ) ); + // register the property wit the default properties set + allProperties.get( p ).add( _myDefaultSetName ); + } + return p; + } + + /** + * registering a property with only one parameter assumes that there is a setter and getter function present for the + * Controller. register("value") for example would create a property reference to setValue and getValue. Notice that + * the first letter of value is being capitalized. + * + * @param theProperty + * @return + */ + public ControllerProperties register( ControllerInterface< ? > theController , String theProperty ) { + theProperty = Character.toUpperCase( theProperty.charAt( 0 ) ) + theProperty.substring( 1 ); + register( theController , "set" + theProperty , "get" + theProperty ); + return this; + } + + public ControllerProperties remove( ControllerInterface< ? > theController , String theSetter , String theGetter ) { + ControllerProperty cp = new ControllerProperty( theController , theSetter , theGetter ); + allProperties.remove( cp ); + return this; + } + + public ControllerProperties remove( ControllerInterface< ? > theController ) { + ArrayList< ControllerProperty > list = new ArrayList< ControllerProperty >( allProperties.keySet( ) ); + for ( ControllerProperty cp : list ) { + if ( cp.getController( ).equals( theController ) ) { + allProperties.remove( cp ); + } + } + return this; + } + + public ControllerProperties remove( ControllerInterface< ? > theController , String theProperty ) { + return remove( theController , "set" + theProperty , "get" + theProperty ); + } + + public List< ControllerProperty > get( ControllerInterface< ? > theController ) { + List< ControllerProperty > props = new ArrayList< ControllerProperty >( ); + List< ControllerProperty > list = new ArrayList< ControllerProperty >( allProperties.keySet( ) ); + for ( ControllerProperty cp : list ) { + if ( cp.getController( ).equals( theController ) ) { + props.add( cp ); + } + } + return props; + } + + public ControllerProperty getProperty( ControllerInterface< ? > theController , String theSetter , String theGetter ) { + ControllerProperty cp = new ControllerProperty( theController , theSetter , theGetter ); + Iterator< ControllerProperty > iter = allProperties.keySet( ).iterator( ); + while ( iter.hasNext( ) ) { + ControllerProperty p = iter.next( ); + if ( p.equals( cp ) ) { + return p; + } + } + // in case the property has not been registered before, it will be + // registered here automatically - you don't need to call + // Controller.registerProperty() but can use Controller.getProperty() + // instead. + return register( theController , theSetter , theGetter ); + } + + public ControllerProperty getProperty( ControllerInterface< ? > theController , String theProperty ) { + theProperty = Character.toUpperCase( theProperty.charAt( 0 ) ) + theProperty.substring( 1 ); + return getProperty( theController , "set" + theProperty , "get" + theProperty ); + } + + public HashSet< ControllerProperty > getPropertySet( ControllerInterface< ? > theController ) { + HashSet< ControllerProperty > set = new HashSet< ControllerProperty >( ); + Iterator< ControllerProperty > iter = allProperties.keySet( ).iterator( ); + while ( iter.hasNext( ) ) { + ControllerProperty p = iter.next( ); + if ( p.getController( ).equals( theController ) ) { + set.add( p ); + } + } + return set; + } + + public ControllerProperties addSet( String theSet ) { + allSets.add( theSet ); + return this; + } + + /** + * Moves a ControllerProperty from one set to another. + */ + public ControllerProperties move( ControllerProperty theProperty , String fromSet , String toSet ) { + if ( !exists( theProperty ) ) { + return this; + } + if ( allProperties.containsKey( theProperty ) ) { + allProperties.get( theProperty ).remove( fromSet ); + addSet( toSet ); + allProperties.get( theProperty ).add( toSet ); + } + return this; + } + + public ControllerProperties move( ControllerInterface< ? > theController , String fromSet , String toSet ) { + HashSet< ControllerProperty > set = getPropertySet( theController ); + for ( ControllerProperty cp : set ) { + move( cp , fromSet , toSet ); + } + return this; + } + + /** + * copies a ControllerProperty from one set to other(s); + */ + public ControllerProperties copy( ControllerProperty theProperty , String ... theSet ) { + if ( !exists( theProperty ) ) { + return this; + } + for ( String s : theSet ) { + allProperties.get( theProperty ).add( s ); + if ( !allSets.contains( s ) ) { + addSet( s ); + } + } + return this; + } + + public ControllerProperties copy( ControllerInterface< ? > theController , String ... theSet ) { + HashSet< ControllerProperty > set = getPropertySet( theController ); + for ( ControllerProperty cp : set ) { + copy( cp , theSet ); + } + return this; + } + + /** + * removes a ControllerProperty from one or multiple sets. + */ + public ControllerProperties remove( ControllerProperty theProperty , String ... theSet ) { + if ( !exists( theProperty ) ) { + return this; + } + for ( String s : theSet ) { + allProperties.get( theProperty ).remove( s ); + } + return this; + } + + public ControllerProperties remove( ControllerInterface< ? > theController , String ... theSet ) { + HashSet< ControllerProperty > set = getPropertySet( theController ); + for ( ControllerProperty cp : set ) { + remove( cp , theSet ); + } + return this; + } + + /** + * stores a ControllerProperty in one particular set only. + */ + public ControllerProperties only( ControllerProperty theProperty , String theSet ) { + // clear all the set-references for a particular property + allProperties.get( theProperty ).clear( ); + // add theSet to the empty collection of sets for this particular + // property + allProperties.get( theProperty ).add( theSet ); + return this; + } + + ControllerProperties only( ControllerInterface< ? > theController , String ... theSet ) { + return this; + } + + private boolean exists( ControllerProperty theProperty ) { + return allProperties.containsKey( theProperty ); + } + + public ControllerProperties print( ) { + for ( Entry< ControllerProperty , HashSet< String >> entry : allProperties.entrySet( ) ) { + System.out.println( entry.getKey( ) + "\t" + entry.getValue( ) ); + } + return this; + } + + /** + * deletes a ControllerProperty from all Sets including the default set. + */ + public ControllerProperties delete( ControllerProperty theProperty ) { + if ( !exists( theProperty ) ) { + return this; + } + allProperties.remove( theProperty ); + return this; + } + + private boolean updatePropertyValue( ControllerProperty theProperty ) { + Method method; + try { + method = theProperty.getController( ).getClass( ).getMethod( theProperty.getGetter( ) ); + Object value = method.invoke( theProperty.getController( ) ); + theProperty.setType( method.getReturnType( ) ); + theProperty.setValue( value ); + if ( checkSerializable( value ) ) { + return true; + } + } catch ( Exception e ) { + logger.severe(String.valueOf(e)); + } + return false; + } + + private boolean checkSerializable( Object theProperty ) { + try { + ByteArrayOutputStream out = new ByteArrayOutputStream( ); + ObjectOutputStream stream = new ObjectOutputStream( out ); + stream.writeObject( theProperty ); + stream.close( ); + return true; + } catch ( Exception e ) { + return false; + } + } + + /** + * logs all registered properties in memory. Here, clones of properties are stored inside a map and can be accessed + * by key using the getLog method. + * + * @see ControllerProperties#getSnapshot(String) + * @param theKey + * @return ControllerProperties + */ + public ControllerProperties setSnapshot( String theKey ) { + Set< ControllerProperty > l = new HashSet< ControllerProperty >( ); + for ( ControllerProperty cp : allProperties.keySet( ) ) { + updatePropertyValue( cp ); + try { + l.add( ( ControllerProperty ) cp.clone( ) ); + } catch ( CloneNotSupportedException e ) { + // TODO Auto-generated catch block + } + } + _mySnapshots.put( theKey , l ); + return this; + } + + /** + * convenience method, setSnapshot(String) also works here since it will override existing log with the same key. + */ + public ControllerProperties updateSnapshot( String theKey ) { + return setSnapshot( theKey ); + } + + /** + * removes a snapshot by key. + */ + public ControllerProperties removeSnapshot( String theKey ) { + _mySnapshots.remove( theKey ); + return this; + } + + ControllerProperties setSnapshot( String theKey , String ... theSets ) { + return this; + } + + /** + * saves a snapshot into your sketch's sketch folder. + */ + public ControllerProperties saveSnapshot( String theKey ) { + saveSnapshotAs( controlP5.papplet.sketchPath( theKey ) , theKey ); + return this; + } + + /** + * saves a snapshot to the file with path given by the first parameter (thePropertiesPath). + */ + public ControllerProperties saveSnapshotAs( String thePropertiesPath , String theKey ) { + Set< ControllerProperty > log = _mySnapshots.get( theKey ); + if ( log == null ) { + return this; + } + thePropertiesPath = getPathWithExtension( format , controlP5.checkPropertiesPath( thePropertiesPath ) ); + + format.compile( log , thePropertiesPath ); + + return this; + } + + private String getPathWithExtension( PropertiesStorageFormat theFormat , String thePropertiesPath ) { + return ( thePropertiesPath.endsWith( "." + theFormat.getExtension( ) ) ) ? thePropertiesPath : thePropertiesPath + "." + theFormat.getExtension( ); + } + + /** + * restores properties previously stored as snapshot in memory. + * + * @see ControllerProperties#setSnapshot(String) + */ + public ControllerProperties getSnapshot( String theKey ) { + Set< ControllerProperty > l = _mySnapshots.get( theKey ); + if ( l != null ) { + for ( ControllerProperty cp : l ) { + ControllerInterface< ? > ci = controlP5.getController( cp.getAddress( ) ); + ci = ( ci == null ) ? controlP5.getGroup( cp.getAddress( ) ) : ci; + ControlP5.invoke(ci, cp.getSetter( ) , cp.getValue( ) ); + } + } + return this; + } + + /** + * properties stored in memory can be accessed by index, getSnapshotIndices() returns the index of the snapshot + * list. + */ + public ArrayList< String > getSnapshotIndices( ) { + return new ArrayList< String >( _mySnapshots.keySet( ) ); + } + + /** + * load properties from the default properties file 'controlP5.properties' + */ + public boolean load( ) { + return load( controlP5.papplet.sketchPath( defaultName + "." + format.getExtension( ) ) ); + } + + public boolean load( String thePropertiesPath ) { + return format.load( getPathWithExtension( format , controlP5.checkPropertiesPath( thePropertiesPath ) ) ); + } + + /** + * use ControllerProperties.SERIALIZED, ControllerProperties.XML or ControllerProperties.JSON as parameter. + */ + public void setFormat( PropertiesStorageFormat theFormat ) { + format = theFormat; + } + + public void setFormat( String theFormat ) { + if ( theFormat.equals( ControlP5.JSON ) ) { + setFormat( new JSONFormat( ) ); + } else if ( theFormat.equals( ControlP5.SERIALIZED ) ) { + setFormat( new SerializedFormat( ) ); + } else { + System.out.println( "sorry format " + theFormat + " does not exist." ); + } + } + + /** + * saves all registered properties into the default 'controlP5.properties' file into your sketch folder. + */ + public boolean save( ) { + System.out.println( "save properties using format " + format + " (" + format.getExtension( ) + ") " + controlP5.papplet.sketchPath( defaultName ) ); + format.compile( allProperties.keySet( ) , getPathWithExtension( format , controlP5.papplet.sketchPath( defaultName ) ) ); + return true; + } + + /** + * saves all registered properties into a file specified by parameter thePropertiesPath. + */ + public boolean saveAs( final String thePropertiesPath ) { + format.compile( allProperties.keySet( ) , getPathWithExtension( format , controlP5.checkPropertiesPath( thePropertiesPath ) ) ); + return true; + } + + /** + * saves a list of properties sets into a file specified by parameter thePropertiesPath. + */ + public boolean saveAs( String thePropertiesPath , String ... theSets ) { + thePropertiesPath = controlP5.checkPropertiesPath( thePropertiesPath ); + HashSet< ControllerProperty > sets = new HashSet< ControllerProperty >( ); + Iterator< ControllerProperty > iter = allProperties.keySet( ).iterator( ); + while ( iter.hasNext( ) ) { + ControllerProperty p = iter.next( ); + if ( allProperties.containsKey( p ) ) { + HashSet< String > set = allProperties.get( p ); + for ( String str : set ) { + for ( String s : theSets ) { + if ( str.equals( s ) ) { + sets.add( p ); + } + } + } + } + } + format.compile( sets , getPathWithExtension( format , thePropertiesPath ) ); + return true; + } + + /** + * @exclude {@inheritDoc} + */ + public String toString( ) { + String s = ""; + s += this.getClass( ).getName( ) + "\n"; + s += "total num of properties:\t" + allProperties.size( ) + "\n"; + for ( ControllerProperty c : allProperties.keySet( ) ) { + s += "\t" + c + "\n"; + } + s += "total num of sets:\t\t" + allSets.size( ) + "\n"; + for ( String set : allSets ) { + s += "\t" + set + "\n"; + } + return s; + } + + interface PropertiesStorageFormat { + + void compile( Set< ControllerProperty > theProperties , String thePropertiesPath ); + + boolean load( String thePropertiesPath ); + + String getExtension( ); + + } + + class XMLFormat implements PropertiesStorageFormat { + public void compile( Set< ControllerProperty > theProperties , String thePropertiesPath ) { + System.out.println( "Dont use the XMLFormat yet, it is not fully implemented with 0.5.9, use SERIALIZED instead." ); + System.out.println( "Compiling with XMLFormat" ); + StringBuffer xml = new StringBuffer( ); + xml.append( "\n" ); + xml.append( "\n" ); + for ( ControllerProperty cp : theProperties ) { + if ( cp.isActive( ) ) { + updatePropertyValue( cp ); + xml.append( getXML( cp ) ); + } + } + xml.append( "" ); + controlP5.papplet.saveStrings( thePropertiesPath , PApplet.split( xml.toString( ) , "\n" ) ); + System.out.println( "saving xml, " + thePropertiesPath ); + } + + public String getExtension( ) { + return "xml"; + } + + public boolean load( String thePropertiesPath ) { + String s; + try { + s = PApplet.join( controlP5.papplet.loadStrings( thePropertiesPath ) , "\n" ); + } catch ( Exception e ) { + logger.warning( thePropertiesPath + ", file not found." ); + return false; + } + System.out.println( "loading xml \n" + s ); + try { + DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance( ); + DocumentBuilder db = dbf.newDocumentBuilder( ); + InputSource is = new InputSource( ); + is.setCharacterStream( new StringReader( s ) ); + Document doc = db.parse( is ); + doc.getDocumentElement( ).normalize( ); + NodeList nodeLst = doc.getElementsByTagName( "property" ); + for ( int i = 0 ; i < nodeLst.getLength( ) ; i++ ) { + Node node = nodeLst.item( i ); + if ( node.getNodeType( ) == Node.ELEMENT_NODE ) { + Element fstElmnt = ( Element ) node; + String myAddress = getElement( fstElmnt , "address" ); + String mySetter = getElement( fstElmnt , "setter" ); + String myType = getElement( fstElmnt , "type" ); + String myValue = getElement( fstElmnt , "value" ); + // String myClass = getElement(fstElmnt, "class"); + // String myGetter = getElement(fstElmnt, "getter"); + try { + System.out.print( "setting controller " + myAddress + " " ); + ControllerInterface< ? > ci = controlP5.getController( myAddress ); + ci = ( ci == null ) ? controlP5.getGroup( myAddress ) : ci; + System.out.println( ci ); + Method method; + try { + Class< ? > c = getClass( myType ); + System.out.println( myType + " / " + c ); + method = ci.getClass( ).getMethod( mySetter , c); + method.setAccessible( true ); + method.invoke( ci , getValue( myValue , myType , c )); + } catch ( Exception e ) { + logger.severe( e.toString( ) ); + } + } catch ( Exception e ) { + logger.warning( "skipping a property, " + e ); + } + } + + } + } catch ( SAXException e ) { + logger.warning( "SAXException, " + e ); + return false; + } catch ( IOException e ) { + logger.warning( "IOException, " + e ); + return false; + } catch ( ParserConfigurationException e ) { + logger.warning( "ParserConfigurationException, " + e ); + return false; + } + return true; + } + + private Object getValue( String theValue , String theType , Class< ? > theClass ) { + if ( theClass == int.class ) { + return Integer.parseInt( theValue ); + } else if ( theClass == float.class ) { + return Float.parseFloat( theValue ); + } else if ( theClass == boolean.class ) { + return Boolean.parseBoolean( theValue ); + } else if ( theClass.isArray( ) ) { + System.out.println( "this is an array: " + theType + ", " + theValue + ", " + theClass ); + int dim = 0; + while ( true ) { + if ( theType.charAt( dim ) != '[' || dim >= theType.length( ) ) { + break; + } + dim++; + } + } else { + System.out.println( "is array? " + theClass.isArray( ) ); + } + return theValue; + } + + private Class< ? > getClass( String theType ) { + if ( theType.equals( "int" ) ) { + return int.class; + } else if ( theType.equals( "float" ) ) { + return float.class; + } else if ( theType.equals( "String" ) ) { + return String.class; + } + try { + return Class.forName( theType ); + } catch ( ClassNotFoundException e ) { + logger.warning( "ClassNotFoundException, " + e ); + } + return null; + } + + private String getElement( Element theElement , String theName ) { + NodeList fstNmElmntLst = theElement.getElementsByTagName( theName ); + Element fstNmElmnt = ( Element ) fstNmElmntLst.item( 0 ); + NodeList fstNm = fstNmElmnt.getChildNodes( ); + return fstNm.item( 0 ).getNodeValue( ); + } + + public String getXML( ControllerProperty theProperty ) { + // Mapping Between JSON and Java Entities + // http://code.google.com/p/json-simple/wiki/MappingBetweenJSONAndJavaEntities + String s = "\t\n"; + s += "\t\t
" + theProperty.getAddress( ) + "
\n"; + s += "\t\t" + CP.formatGetClass( theProperty.getController( ).getClass( ) ) + "\n"; + s += "\t\t" + theProperty.getSetter( ) + "\n"; + s += "\t\t" + theProperty.getGetter( ) + "\n"; + s += "\t\t" + CP.formatGetClass( theProperty.getType( ) ) + "\n"; + s += "\t\t" + cdata( OPEN , theProperty.getValue( ).getClass( ) ) + ( theProperty.getValue( ).getClass( ).isArray( ) ? CP.arrayToString( theProperty.getValue( ) ) : theProperty.getValue( ) ) + + cdata( CLOSE , theProperty.getValue( ).getClass( ) ) + "\n"; + s += "\t
\n"; + return s; + } + + private String cdata( int a , Class< ? > c ) { + if ( c == String.class || c.isArray( ) ) { + return ( a == OPEN ? "" ); + } + return ""; + } + } + + public class JSONFormat implements PropertiesStorageFormat { + + public void compile( Set< ControllerProperty > theProperties , String thePropertiesPath ) { + long t = System.currentTimeMillis( ); + JSONObject json = new JSONObject( ); + for ( ControllerProperty cp : theProperties ) { + + if ( cp.isActive( ) ) { + if ( updatePropertyValue( cp ) ) { + cp.setId( cp.getController( ).getId( ) ); + + if ( !json.keys( ).contains( cp.getAddress( ) ) ) { + json.setJSONObject( cp.getAddress( ) , new JSONObject( ) ); + } + JSONObject item = json.getJSONObject( cp.getAddress( ) ); + String key = cp.getSetter( ); + key = Character.toLowerCase( key.charAt( 3 ) ) + key.substring( 4 ); + if ( cp.getValue( ) instanceof Number ) { + if ( cp.getValue( ) instanceof Integer ) { + item.setInt( key , ControlP5.i( cp.getValue( ) ) ); + } else if ( cp.getValue( ) instanceof Float ) { + item.setFloat( key , ControlP5.f( cp.getValue( ) ) ); + } else if ( cp.getValue( ) instanceof Double ) { + item.setDouble( key , ControlP5.d( cp.getValue( ) ) ); + } + } else if ( cp.getValue( ) instanceof Boolean ) { + item.setBoolean( key , ControlP5.b( cp.getValue( ) ) ); + } else { + + if ( cp.getValue( ).getClass( ).isArray( ) ) { + JSONArray arr = new JSONArray( ); + if ( cp.getValue( ) instanceof int[] ) { + for ( Object o : ( int[] ) cp.getValue( ) ) { + arr.append( ControlP5.i( o ) ); + } + } else if ( cp.getValue( ) instanceof float[] ) { + for ( Object o : ( float[] ) cp.getValue( ) ) { + arr.append( ControlP5.f( o ) ); + } + } + item.setJSONArray( key , arr ); + } else { + item.setString( key , cp.getValue( ).toString( ) ); + } + } + } + } + } + json.save( new File( getPathWithExtension( this , thePropertiesPath ) ) , "" ); + } + + public String getExtension( ) { + return "json"; + } + + public boolean load( String thePropertiesPath ) { + JSONReader reader = new JSONReader( controlP5.papplet ); + Map< ? , ? > entries = ControlP5.toMap( reader.parse( thePropertiesPath ) ); + for ( Map.Entry entry : entries.entrySet( ) ) { + String name = entry.getKey( ).toString( ); + Controller c = controlP5.getController( name ); + Map< ? , ? > values = ControlP5.toMap( entry.getValue( ) ); + for ( Map.Entry value : values.entrySet( ) ) { + String i0 = value.getKey( ).toString( ); + String member = "set" + Character.toUpperCase( i0.charAt( 0 ) ) + i0.substring( 1 ); + Object i1 = value.getValue( ); + if ( i1 instanceof Number ) { + ControlP5.invoke( c , member , ControlP5.f( value.getValue( ) ) ); + } else if ( i1 instanceof String ) { + ControlP5.invoke( c , member , ControlP5.s( value.getValue( ) ) ); + } else if ( i1 instanceof float[] ) { + ControlP5.invoke( c , member , i1); + } else { + if ( i1 instanceof List ) { + List l = ( List ) i1; + float[] arr = new float[ l.size( ) ]; + for ( int i = 0 ; i < l.size( ) ; i++ ) { + arr[ i ] = ControlP5.f( l.get( i ) ); + } + ControlP5.invoke( c , member , arr ); + } else { + ControlP5.invoke( c , member , value.getValue( ) ); + } + + } + } + } + return false; + } + } + + private class JSONReader { + + private final PApplet papplet; + + public JSONReader( Object o ) { + if ( o instanceof PApplet ) { + papplet = ( PApplet ) o; + } else { + papplet = null; + System.out.println( "Sorry, argument is not of instance PApplet" ); + } + } + + public Object parse( String s ) { + if ( s.indexOf( "{" ) >= 0 ) { + return get( JSONObject.parse( s ) , new LinkedHashMap( ) ); + } else { + return get( papplet.loadJSONObject( s ) , new LinkedHashMap( ) ); + } + } + + Object get( Object o , Object m ) { + if ( o instanceof JSONObject ) { + if ( m instanceof Map ) { + Set set = ( ( JSONObject ) o ).keys( ); + for ( Object o1 : set ) { + Object o2 = ControlP5.invoke( o , "opt" , o1.toString( ) ); + if ( o2 instanceof JSONObject ) { + Map m1 = new LinkedHashMap( ); + ( ( Map ) m ).put( o1.toString( ) , m1 ); + get( o2 , m1 ); + } else if ( o2 instanceof JSONArray ) { + List l1 = new ArrayList( ); + ( ( Map ) m ).put( o1.toString( ) , l1 ); + get( o2 , l1 ); + } else { + ( ( Map ) m ).put( o1.toString( ) , o2 ); + } + } + } + } else if ( o instanceof JSONArray ) { + if ( m instanceof List ) { + List l = ( ( List ) m ); + int n = 0; + Object o3 = ControlP5.invoke( o , "opt" , n ); + while ( o3 != null ) { + if ( o3 instanceof JSONArray ) { + List l1 = new ArrayList( ); + l.add( l1 ); + get( o3 , l1 ); + } else if ( o3 instanceof JSONObject ) { + Map l1 = new LinkedHashMap( ); + l.add( l1 ); + get( o3 , l1 ); + } else { + l.add( o3 ); + } + o3 = ControlP5.invoke( o , "opt" , ++n ); + } + } else { + System.err.println( "JSONReader type mismatch." ); + } + } + return m; + } + + } + + public class SerializedFormat implements PropertiesStorageFormat { + + public boolean load( String thePropertiesPath ) { + try { + FileInputStream fis = new FileInputStream( thePropertiesPath ); + ObjectInputStream ois = new ObjectInputStream( fis ); + int size = ois.readInt( ); + logger.info( "loading " + size + " property-items. " ); + + for ( int i = 0 ; i < size ; i++ ) { + try { + ControllerProperty cp = ( ControllerProperty ) ois.readObject( ); + ControllerInterface< ? > ci = controlP5.getController( cp.getAddress( ) ); + ci = ( ci == null ) ? controlP5.getGroup( cp.getAddress( ) ) : ci; + ci.setId( cp.getId( ) ); + Method method; + try { + method = ci.getClass( ).getMethod( cp.getSetter( ) , cp.getType( )); + method.setAccessible( true ); + method.invoke( ci , cp.getValue( )); + } catch ( Exception e ) { + logger.severe( e.toString( ) ); + } + + } catch ( Exception e ) { + logger.warning( "skipping a property, " + e ); + } + } + ois.close( ); + } catch ( Exception e ) { + logger.warning( "Exception during deserialization: " + e ); + return false; + } + return true; + } + + public String getExtension( ) { + return "ser"; + } + + public void compile( Set< ControllerProperty > theProperties , String thePropertiesPath ) { + int active = 0; + int total = 0; + HashSet< ControllerProperty > propertiesToBeSaved = new HashSet< ControllerProperty >( ); + for ( ControllerProperty cp : theProperties ) { + if ( cp.isActive( ) ) { + if ( updatePropertyValue( cp ) ) { + active++; + cp.setId( cp.getController( ).getId( ) ); + propertiesToBeSaved.add( cp ); + } + } + total++; + } + + int ignored = total - active; + + try { + FileOutputStream fos = new FileOutputStream( thePropertiesPath ); + ObjectOutputStream oos = new ObjectOutputStream( fos ); + + logger.info( "Saving property-items to " + thePropertiesPath ); + oos.writeInt( active ); + + for ( ControllerProperty cp : propertiesToBeSaved ) { + if ( cp.isActive( ) ) { + oos.writeObject( cp ); + } + } + logger.info( active + " items saved, " + ( ignored ) + " items ignored. Done saving properties." ); + oos.flush( ); + oos.close( ); + fos.close( ); + } catch ( Exception e ) { + logger.warning( "Exception during serialization: " + e ); + } + } + } +} diff --git a/controlP5/ControllerProperty.java b/controlP5/ControllerProperty.java new file mode 100755 index 0000000..ea6a8b1 --- /dev/null +++ b/controlP5/ControllerProperty.java @@ -0,0 +1,173 @@ +package main.java.src2.main.java.controlP5.controlP5; + +/** + * controlP5 is a processing gui library. + * + * 2006-2015 by Andreas Schlegel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place, Suite 330, + * Boston, MA 02111-1307 USA + * + * @author Andreas Schlegel (http://www.sojamo.de) + * @modified ##date## + * @version ##version## + * + */ + +import java.io.Serializable; + +/** + * A controller property saves the value, address, getter and setter of a registered controller. + * + * @example controllers/ControlP5properties + */ + +public class ControllerProperty implements Serializable , Cloneable { + + private static final long serialVersionUID = 4506431150330867327L; + private String setter; + private String getter; + private Class< ? > type; + private Object value; + private String address; + private int id; + private transient boolean active; + private transient ControllerInterface< ? > controller; + + ControllerProperty( ControllerInterface< ? > theController , String theSetter , String theGetter ) { + setController( theController ); + setAddress( theController.getAddress( ) ); + setSetter( theSetter ); + setGetter( theGetter ); + setActive( true ); + setId( theController.getId( ) ); + } + + @Override protected Object clone( ) throws CloneNotSupportedException { + ControllerProperty clone = ( ControllerProperty ) super.clone( ); + clone.setSetter( getSetter( ) ); + clone.setGetter( getGetter( ) ); + clone.setType( getType( ) ); + clone.setValue( getValue( ) ); + clone.setAddress( getAddress( ) ); + clone.setActive( isActive( ) ); + clone.setController( getController( ) ); + clone.setId( getId( ) ); + return clone; + } + + /** + * @exclude {@inheritDoc} + */ + @Override public boolean equals( Object o ) { + + if ( this == o ) { + return true; + } + if ( o == null || getClass( ) != o.getClass( ) ) { + return false; + } + + ControllerProperty p = ( ControllerProperty ) o; + return address.equals(p.address) && setter.equals(p.setter) && getter.equals(p.getter); + } + + /** + * @exclude {@inheritDoc} + */ + @Override public int hashCode( ) { + int result = 17; + result = 37 * result + ( address != null ? address.hashCode( ) : 0 ); + result = 37 * result + ( setter != null ? setter.hashCode( ) : 0 ); + result = 37 * result + ( getter != null ? getter.hashCode( ) : 0 ); + return result; + } + + public void disable( ) { + active = false; + } + + public void enable( ) { + active = true; + } + + @Override public String toString( ) { + return address + " " + setter + ", " + getter; + } + + void setAddress( String theAddress ) { + address = theAddress; + } + + String getAddress( ) { + return address; + } + + ControllerInterface< ? > getController( ) { + return controller; + } + + void setController( ControllerInterface< ? > theController ) { + controller = theController; + } + + Object getValue( ) { + return value; + } + + void setValue( Object theValue ) { + value = theValue; + } + + Class< ? > getType( ) { + return type; + } + + void setType( Class< ? > theType ) { + type = theType; + } + + boolean isActive( ) { + return active; + } + + void setActive( boolean theValue ) { + active = theValue; + } + + String getGetter( ) { + return getter; + } + + void setGetter( String theValue ) { + getter = theValue; + } + + String getSetter( ) { + return setter; + } + + void setSetter( String theValue ) { + setter = theValue; + } + + int getId( ) { + return id; + } + + void setId( int theValue ) { + id = theValue; + } + +} diff --git a/controlP5/ControllerStyle.java b/controlP5/ControllerStyle.java new file mode 100755 index 0000000..75c2193 --- /dev/null +++ b/controlP5/ControllerStyle.java @@ -0,0 +1,153 @@ +package main.java.src2.main.java.controlP5.controlP5; + +/** + * controlP5 is a processing gui library. + * + * 2006-2015 by Andreas Schlegel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place, Suite 330, + * Boston, MA 02111-1307 USA + * + * @author Andreas Schlegel (http://www.sojamo.de) + * @modified ##date## + * @version ##version## + * + */ + +import java.io.Serializable; + + +/** + * Labels use the ControllerStyle class to store margin and padding information. + * + * @see Label#getStyle() + * + * @example extra/ControlP5style + */ +public class ControllerStyle implements Serializable { + + private static final long serialVersionUID = 3250201688970310633L; + + public int paddingTop = 0; + public int paddingRight = 0; + public int paddingBottom = 0; + public int paddingLeft = 0; + public int marginTop = 0; + public int marginRight = 0; + public int marginBottom = 0; + public int marginLeft = 0; + public int background; + public int backgroundWidth = -1; + public int backgroundHeight = -1; + public int color; + + public ControllerStyle margin( int theValue ) { + marginTop = theValue; + marginRight = theValue; + marginBottom = theValue; + marginLeft = theValue; + return this; + } + + public ControllerStyle padding( int theValue ) { + paddingTop = theValue; + paddingRight = theValue; + paddingBottom = theValue; + paddingLeft = theValue; + return this; + } + + public ControllerStyle setPadding( int theTop , int theRight , int theBottom , int theLeft ) { + padding( theTop , theRight , theBottom , theLeft ); + return this; + } + + public ControllerStyle setPaddingTop( int theValue ) { + paddingTop = theValue; + return this; + } + + public ControllerStyle setPaddingBottom( int theValue ) { + paddingBottom = theValue; + return this; + } + + public ControllerStyle setPaddingRight( int theValue ) { + paddingRight = theValue; + return this; + } + + public ControllerStyle setPaddingLeft( int theValue ) { + paddingLeft = theValue; + return this; + } + + public ControllerStyle margin( int theTop , int theRight , int theBottom , int theLeft ) { + marginTop = theTop; + marginRight = theRight; + marginBottom = theBottom; + marginLeft = theLeft; + return this; + } + + public ControllerStyle setMargin( int theTop , int theRight , int theBottom , int theLeft ) { + margin( theTop , theRight , theBottom , theLeft ); + return this; + } + + public ControllerStyle setMarginTop( int theValue ) { + marginTop = theValue; + return this; + } + + public ControllerStyle setMarginBottom( int theValue ) { + marginBottom = theValue; + return this; + } + + public ControllerStyle setMarginRight( int theValue ) { + marginRight = theValue; + return this; + } + + public ControllerStyle setMarginLeft( int theValue ) { + marginLeft = theValue; + return this; + } + + public ControllerStyle padding( int theTop , int theRight , int theBottom , int theLeft ) { + paddingTop = theTop; + paddingRight = theRight; + paddingBottom = theBottom; + paddingLeft = theLeft; + return this; + } + + public ControllerStyle moveMargin( int theTop , int theRight , int theBottom , int theLeft ) { + marginTop += theTop; + marginRight += theRight; + marginBottom += theBottom; + marginLeft += theLeft; + return this; + } + + public ControllerStyle movePadding( int theTop , int theRight , int theBottom , int theLeft ) { + paddingTop += theTop; + paddingRight += theRight; + paddingBottom += theBottom; + paddingLeft += theLeft; + return this; + } + +} diff --git a/controlP5/ControllerView.java b/controlP5/ControllerView.java new file mode 100755 index 0000000..d14d9dd --- /dev/null +++ b/controlP5/ControllerView.java @@ -0,0 +1,50 @@ +package main.java.src2.main.java.controlP5.controlP5; + +/** + * controlP5 is a processing gui library. + * + * 2006-2015 by Andreas Schlegel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place, Suite 330, + * Boston, MA 02111-1307 USA + * + * @author Andreas Schlegel (http://www.sojamo.de) + * @modified ##date## + * @version ##version## + * + */ + +import processing.core.PGraphics; + +/** + * The interface ControllerView can be used to define custom displays for controllers. + * + * @see controlP5.draw(processing.core.PApplet) + * @see controlP5.setView(ControlleView) + * + * @example use/ControlP5customDisplay + */ +public interface ControllerView< T > { + + /** + * draws your custom controllers. display() will be called by a controller's draw() function and + * will pass a reference of PApplet as well as the Controller itself to your custom display + * class. + * + * @param theApplet + * @param theController + */ + void display( PGraphics theGraphics , T theController ); + +} diff --git a/controlP5/DropdownList.java b/controlP5/DropdownList.java new file mode 100755 index 0000000..466582d --- /dev/null +++ b/controlP5/DropdownList.java @@ -0,0 +1,466 @@ +package main.java.src2.main.java.controlP5.controlP5; + +import static main.java.src2.main.java.controlP5.controlP5.ControlP5.b; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import processing.core.PApplet; +import processing.core.PGraphics; +import processing.event.KeyEvent; + +/** + * controlP5 is a processing gui library. + * + * 2006-2015 by Andreas Schlegel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place, Suite 330, + * Boston, MA 02111-1307 USA + * + * @author Andreas Schlegel (http://www.sojamo.de) + * @modified ##date## + * @version ##version## + * + */ + +public class DropdownList extends Controller< DropdownList > implements ControlListener { + + private int _myType = DROPDOWN; + protected int _myBackgroundColor = 0x00ffffff; + protected int itemHeight = 13; + protected int barHeight = 10; + private float scrollSensitivity = 1; + private boolean isOpen = true; + protected List< Map< String , Object > > items; + protected int itemRange = 5; + protected int itemHover = -1; + private int itemIndexOffset = 0; + private final int itemSpacing = 1; + private int _myDirection = PApplet.DOWN; + private boolean isBarVisible = true; + static public final int LIST = ControlP5.LIST; + static public final int DROPDOWN = ControlP5.DROPDOWN; + static public final int CHECKBOX = ControlP5.CHECKBOX; /* TODO */ + static public final int TREE = ControlP5.TREE; /* TODO */ + + public DropdownList( ControlP5 theControlP5 , String theName ) { + this( theControlP5 , theControlP5.getDefaultTab( ) , theName , 0 , 0 , 99 , 199 ); + theControlP5.register( theControlP5.papplet , theName , this ); + } + + protected DropdownList( ControlP5 theControlP5 , ControllerGroup< ? > theGroup , String theName , int theX , int theY , int theW , int theH ) { + super( theControlP5 , theGroup , theName , theX , theY , theW , theH ); + items = new ArrayList< Map< String , Object > >( ); + updateHeight( ); + getValueLabel( ).align( PApplet.LEFT , PApplet.CENTER ); + } + + public boolean isOpen( ) { + return isOpen; + } + + public DropdownList open( ) { + return setOpen( true ); + } + + public DropdownList close( ) { + return setOpen( false ); + } + + public DropdownList setOpen( boolean b ) { + isOpen = b; + return this; + } + + @Override public int getHeight( ) { + return isOpen ? super.getHeight( ) : barHeight; + } + + public DropdownList setType( int theType ) { + _myType = theType; + return this; + } + + public void setDirection( int theDirection ) { + _myDirection = ( theDirection == PApplet.UP ) ? PApplet.UP : PApplet.DOWN; + } + + @Override protected boolean inside( ) { + /* constrain the bounds of the controller to the + * dimensions of the cp5 area, required since + * PGraphics as render area has been introduced. */ + float x0 = PApplet.max( 0 , x( position ) + x( _myParent.getAbsolutePosition( ) ) ); + float x1 = PApplet.min( cp5.pgw , x( position ) + x( _myParent.getAbsolutePosition( ) ) + getWidth( ) ); + float y0 = PApplet.max( 0 , y( position ) + y( _myParent.getAbsolutePosition( ) ) ); + float y1 = PApplet.min( cp5.pgh , y( position ) + y( _myParent.getAbsolutePosition( ) ) + getHeight( ) ); + if ( y1 < y0 ) { + float ty = y0; + y0 = y1; + y1 = ty; + } + return ( _myControlWindow.mouseX > x0 && _myControlWindow.mouseX < x1 && _myControlWindow.mouseY > ( y1 < y0 ? y1 : y0 ) && _myControlWindow.mouseY < ( y0 < y1 ? y1 : y0 ) ); + } + + @Override protected void onRelease( ) { + if ( !isDragged ) { + if ( getPointer( ).y( ) >= 0 && getPointer( ).y( ) <= barHeight ) { + setOpen( !isOpen( ) ); + } else if ( isOpen ) { + + double n = Math.floor( ( getPointer( ).y( ) - barHeight ) / itemHeight ); + + // n += itemRange; /* UP */ + int index = ( int ) n + itemIndexOffset; + + if (index < items.size()) { + Map m = items.get( index ); + + switch ( _myType ) { + case ( LIST ): + setValue( index ); + for ( Object o : items ) { + ( ( Map ) o ).put( "state" , false ); + } + m.put( "state" , !ControlP5.b( m.get( "state" ) ) ); + break; + case ( DROPDOWN ): + setValue( index ); + setOpen( false ); + getCaptionLabel( ).setText( ( m.get( "text" ).toString( ) ) ); + break; + case ( CHECKBOX ): + m.put( "state" , !ControlP5.b( m.get( "state" ) ) ); + break; + } + } + + } + } + } + + @Override protected void onDrag( ) { + scroll( getPointer( ).dy( ) ); + } + + @Override protected void onScroll( int theValue ) { + scroll( theValue ); + } + + private void scroll( int theValue ) { + if ( isOpen ) { + itemIndexOffset += theValue; + itemIndexOffset = ( int ) ( Math.floor( Math.max( 0 , Math.min( itemIndexOffset , items.size( ) - itemRange ) ) ) ); + itemHover = -2; + } + } + + @Override protected void onLeave( ) { + itemHover = -1; + } + + private void updateHover( ) { + if ( getPointer( ).y( ) > barHeight ) { + double n = Math.floor( ( getPointer( ).y( ) - barHeight ) / itemHeight ); + itemHover = ( int ) ( itemIndexOffset + n ); + } else { + itemHover = -1; + } + } + + @Override protected void onEnter( ) { + updateHover( ); + } + + @Override protected void onMove( ) { + updateHover( ); + } + + @Override protected void onEndDrag( ) { + updateHover( ); + } + + private int updateHeight( ) { + itemRange = ( PApplet.abs( getHeight( ) ) - ( isBarVisible( ) ? barHeight : 0 ) ) / itemHeight; + return itemHeight * ( items.size( ) < itemRange ? items.size( ) : itemRange ); + } + + public DropdownList setItemHeight( int theHeight ) { + itemHeight = theHeight; + updateHeight( ); + return this; + } + + public DropdownList setBarHeight( int theHeight ) { + barHeight = theHeight; + updateHeight( ); + return this; + } + + public int getBarHeight( ) { + return barHeight; + } + + public DropdownList setScrollSensitivity( float theSensitivity ) { + scrollSensitivity = theSensitivity; + return this; + } + + public DropdownList setBarVisible( boolean b ) { + isBarVisible = b; + updateHeight( ); + return this; + } + + public boolean isBarVisible( ) { + return isBarVisible; + } + + private Map< String , Object > getDefaultItemMap( String theName , Object theValue ) { + Map< String , Object > item = new HashMap< String , Object >( ); + item.put( "name" , theName ); + item.put( "text" , theName ); + item.put( "value" , theValue ); + item.put( "color" , getColor( ) ); + item.put( "view" , new CDrawable( ) { + @Override public void draw( PGraphics theGraphics ) { + } + + } ); + item.put( "state" , false ); + return item; + } + + public DropdownList addItem( String theName , Object theValue ) { + Map< String , Object > item = getDefaultItemMap( theName , theValue ); + items.add( item ); + return this; + } + + public DropdownList addItems( String[] theItems ) { + addItems( Arrays.asList( theItems ) ); + return this; + } + + public DropdownList addItems( List< String > theItems ) { + for ( int i = 0 ; i < theItems.size( ) ; i++ ) { + addItem(theItems.get( i ), i ); + } + return this; + } + + public DropdownList addItems( Map< String , Object > theItems ) { + for ( Map.Entry< String , Object > item : theItems.entrySet( ) ) { + addItem( item.getKey( ) , item.getValue( ) ); + } + return this; + } + + public DropdownList setItems( String[] theItems ) { + setItems( Arrays.asList( theItems ) ); + return this; + } + + public DropdownList setItems( List< String > theItems ) { + items.clear( ); + return addItems( theItems ); + } + + public DropdownList setItems( Map< String , Object > theItems ) { + items.clear( ); + return addItems( theItems ); + } + + public DropdownList removeItems( List< String > theItems ) { + for ( String s : theItems ) { + removeItem( s ); + } + return this; + } + + public DropdownList removeItem( String theName ) { + if ( theName != null ) { + + List l = new ArrayList( ); + for ( Map m : items ) { + if ( theName.equals( m.get( "name" ) ) ) { + l.add( m ); + } + } + items.removeAll( l ); + } + return this; + } + + public void updateItemIndexOffset( ) { + int m1 = items.size( ) > itemRange ? ( itemIndexOffset + itemRange ) : items.size( ); + int n = ( m1 - items.size( ) ); + if ( n >= 0 ) { + itemIndexOffset -= n; + } + } + + public Map< String , Object > getItem( int theIndex ) { + return items.get( theIndex ); + } + + public Map< String , Object > getItem( String theName ) { + if ( theName != null ) { + for ( Map< String , Object > o : items ) { + if ( theName.equals( o.get( "name" ) ) ) { + return o; + } + } + } + return Collections.EMPTY_MAP; + } + + public List getItems( ) { + return Collections.unmodifiableList( items ); + } + + public DropdownList clear( ) { + for ( int i = items.size( ) - 1 ; i >= 0 ; i-- ) { + items.remove( i ); + } + items.clear( ); + itemIndexOffset = 0; + return this; + } + + @Override public void controlEvent( ControlEvent theEvent ) { + // TODO Auto-generated method stub + } + + public DropdownList setBackgroundColor( int theColor ) { + _myBackgroundColor = theColor; + return this; + } + + public int getBackgroundColor( ) { + return _myBackgroundColor; + } + + @Override @ControlP5.Invisible public DropdownList updateDisplayMode( int theMode ) { + _myDisplayMode = theMode; + switch ( theMode ) { + case ( DEFAULT ): + _myControllerView = new DropdownListView( ); + break; + case ( IMAGE ): + case ( SPRITE ): + case ( CUSTOM ): + default: + break; + } + return this; + } + + static public class DropdownListView implements ControllerView< DropdownList > { + + public void display( PGraphics g , DropdownList c ) { + + // setHeight( -200 ); /* UP */ + + g.noStroke( ); + + if ( c.isBarVisible( ) ) { + boolean b = c.itemHover == -1 && c.isInside && !c.isDragged; + g.fill( b ? c.getColor( ).getForeground( ) : c.getColor( ).getBackground( ) ); + g.rect( 0 , 0 , c.getWidth( ) , c.barHeight ); + g.pushMatrix( ); + g.translate( c.getWidth( ) - 8 , c.barHeight / 2 - 2 ); + g.fill( c.getColor( ).getCaptionLabel( ) ); + if ( c.isOpen( ) ) { + g.triangle( -3 , 0 , 3 , 0 , 0 , 3 ); + } else { + g.triangle( -3 , 3 , 3 , 3 , 0 , 0 ); + } + g.popMatrix( ); + + c.getCaptionLabel( ).draw( g , 4 , c.barHeight / 2 ); + } + + if ( c.isOpen( ) ) { + int bar = ( c.isBarVisible( ) ? c.barHeight : 0 ); + int h = ( ( c.updateHeight( ) ) ); + g.pushMatrix( ); + // g.translate( 0 , - ( h + bar + + // c.itemSpacing ) ); /* UP */ + g.fill( c.getBackgroundColor( ) ); + g.rect( 0 , bar , c.getWidth( ) , h ); + g.pushMatrix( ); + g.translate( 0 , ( bar == 0 ? 0 : ( c.barHeight + c.itemSpacing ) ) ); + /* draw visible items */ + c.updateItemIndexOffset( ); + int m0 = c.itemIndexOffset; + int m1 = c.items.size( ) > c.itemRange ? ( c.itemIndexOffset + c.itemRange ) : c.items.size( ); + for ( int i = m0 ; i < m1 ; i++ ) { + Map< String , Object > item = c.items.get( i ); + CColor color = ( CColor ) item.get( "color" ); + g.fill( ( b( item.get( "state" ) ) ) ? color.getActive( ) : ( i == c.itemHover ) ? ( c.isMousePressed ? color.getActive( ) : color.getForeground( ) ) : color.getBackground( ) ); + g.rect( 0 , 0 , c.getWidth( ) , c.itemHeight - 1 ); + c.getValueLabel( ).set( item.get( "text" ).toString( ) ).draw( g , 4 , c.itemHeight / 2 ); + g.translate( 0 , c.itemHeight ); + } + g.popMatrix( ); + + if ( c.isInside ) { + int m = c.items.size( ) - c.itemRange; + if ( m > 0 ) { + g.fill( c.getColor( ).getCaptionLabel( ) ); + g.pushMatrix( ); + int s = 4; /* spacing */ + int s2 = s / 2; + g.translate( c.getWidth( ) - s , c.barHeight ); + int len = ( int ) PApplet.map( ( float ) Math.log( m * 10 ) , 0 , 10 , h , 0 ); + int pos = ( int ) ( PApplet.map( c.itemIndexOffset , 0 , m , s2 , h - len - s2 ) ); + g.rect( 0 , pos , s2 , len ); + g.popMatrix( ); + } + } + g.popMatrix( ); + } + + } + + } + + public void keyEvent( KeyEvent theKeyEvent ) { + if ( isInside && theKeyEvent.getAction( ) == KeyEvent.PRESS ) { + switch ( theKeyEvent.getKeyCode( ) ) { + case (UP): + scroll( theKeyEvent.isAltDown( ) ? -itemIndexOffset : theKeyEvent.isShiftDown( ) ? -10 : -1 ); + updateHover( ); + break; + case (DOWN): + scroll( theKeyEvent.isAltDown( ) ? items.size( ) - itemRange : theKeyEvent.isShiftDown( ) ? 10 : 1 ); + updateHover( ); + break; + case (LEFT): + break; + case (RIGHT): + break; + case (ENTER): + onRelease( ); + break; + } + } + } + /* TODO keycontrol: arrows, return dragging moving items + * sorting custom view custom event types */ +} \ No newline at end of file diff --git a/controlP5/FieldChangedListener.java b/controlP5/FieldChangedListener.java new file mode 100755 index 0000000..f3654fc --- /dev/null +++ b/controlP5/FieldChangedListener.java @@ -0,0 +1,134 @@ +package main.java.src2.main.java.controlP5.controlP5; + +/** + * controlP5 is a processing gui library. + * + * 2006-2015 by Andreas Schlegel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place, Suite 330, + * Boston, MA 02111-1307 USA + * + * @author Andreas Schlegel (http://www.sojamo.de) + * @modified ##date## + * @version ##version## + * + */ + +import java.lang.reflect.Field; + +/** + * the FieldChangedListener is used to observe changes of variables that are + * linked to a controller. The FieldChangedListener is for primarily for + * internal use. + * + * @see Controller#listen(boolean) + */ +class FieldChangedListener { + + private FieldValue value; + + private final ControlP5 controlP5; + + public FieldChangedListener(ControlP5 theControlP5) { + controlP5 = theControlP5; + } + + /** + * Assigns a listener to a specific field of an object. + * + * this can be done in a more elegant way using generics. + * + * @param theObject + * @param theFieldName + */ + public void listenTo(final Object theObject, final String theFieldName) { + try { + Class c = theObject.getClass(); + final Field field = c.getDeclaredField(theFieldName); + field.setAccessible(true); + if (field.getType().isAssignableFrom(Float.TYPE)) { + value = new FieldValue() { + float then; + + public void check() { + try { + float now = (Float) field.get(theObject); + if (now != then) { + controlP5.getController(theFieldName, theObject).setValue(now); + then = now; + } + } catch (IllegalAccessException e) { + } + } + }; + } else if (field.getType().isAssignableFrom(Integer.TYPE)) { + value = new FieldValue() { + int then; + + public void check() { + try { + int now = (Integer) field.get(theObject); + if (now != then) { + controlP5.getController(theFieldName, theObject).setValue(now); + then = now; + } + } catch (IllegalAccessException e) { + } + } + }; + } else if (field.getType().isAssignableFrom(Boolean.TYPE)) { + value = new FieldValue() { + boolean then; + + public void check() { + try { + boolean now = (Boolean) field.get(theObject); + if (now != then) { + controlP5.getController(theFieldName, theObject).setValue(now ? 1 : 0); + then = now; + } + } catch (IllegalAccessException e) { + } + } + }; + } else if (field.getType().isAssignableFrom(String.class)) { + + value = new FieldValue() { + String then; + + public void check() { + try { + String now = (String) field.get(theObject); + if (!now.equals(then)) { + controlP5.getController(theFieldName, theObject).setStringValue(now); + then = now; + } + } catch (IllegalAccessException e) { + } + } + }; + } + } catch (Exception e) { + System.out.println(e); + } + } + + void update() { + value.check(); + } +} + +interface FieldValue { + void check(); +} diff --git a/controlP5/FrameRate.java b/controlP5/FrameRate.java new file mode 100755 index 0000000..f2ca384 --- /dev/null +++ b/controlP5/FrameRate.java @@ -0,0 +1,58 @@ +package main.java.src2.main.java.controlP5.controlP5; + +/** + * controlP5 is a processing gui library. + * + * 2006-2015 by Andreas Schlegel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place, Suite 330, + * Boston, MA 02111-1307 USA + * + * @author Andreas Schlegel (http://www.sojamo.de) + * @modified ##date## + * @version ##version## + * + */ + +import processing.core.PApplet; +import processing.core.PGraphics; + +public class FrameRate extends Textlabel { + + private int _myInterval = 10; + + private float _myIntervalSum = 0; + + private int cnt = 0; + + protected FrameRate( final ControlP5 theControlP5 , final Tab theParent , final String theValue , final int theX , final int theY ) { + super( theControlP5 , theParent , "framerate" , "-" , theX , theY ); + } + + public FrameRate setInterval( int theValue ) { + _myInterval = theValue; + return this; + } + + @Override + public void draw( PGraphics theGraphics ) { + if ( ( cnt++ ) % _myInterval == 0 ) { + setText(String.valueOf(PApplet.round(_myIntervalSum / _myInterval))); + _myIntervalSum = 0; + } + _myIntervalSum += cp5.papplet.frameRate; + super.draw( theGraphics ); + } + +} diff --git a/controlP5/Group.java b/controlP5/Group.java new file mode 100755 index 0000000..ca7797e --- /dev/null +++ b/controlP5/Group.java @@ -0,0 +1,43 @@ +package main.java.src2.main.java.controlP5.controlP5; + +/** + * controlP5 is a processing gui library. + * + * 2006-2015 by Andreas Schlegel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place, Suite 330, + * Boston, MA 02111-1307 USA + * + * @author Andreas Schlegel (http://www.sojamo.de) + * @modified ##date## + * @version ##version## + * + */ +public class Group extends ControlGroup< Group > { + + /** + * Convenience constructor to extend Group. + * + * @example use/ControlP5extendController + */ + public Group( ControlP5 theControlP5 , String theName ) { + this( theControlP5 , theControlP5.getDefaultTab( ) , theName , 0 , 0 , 99 , 9 ); + theControlP5.register( theControlP5.papplet , theName , this ); + } + + public Group( ControlP5 theControlP5 , ControllerGroup< ? > theParent , String theName , int theX , int theY , int theW , int theH ) { + super( theControlP5 , theParent , theName , theX , theY , theW , theH ); + } + +} diff --git a/controlP5/Icon.java b/controlP5/Icon.java new file mode 100644 index 0000000..b77ef01 --- /dev/null +++ b/controlP5/Icon.java @@ -0,0 +1,405 @@ +package main.java.src2.main.java.controlP5.controlP5; + +/** + * controlP5 is a processing gui library. + * + * 2006-2015 by Andreas Schlegel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place, Suite 330, + * Boston, MA 02111-1307 USA + * + * @author Andreas Schlegel (http://www.sojamo.de) + * @modified ##date## + * @version ##version## + * + */ + +import processing.core.PApplet; +import processing.core.PFont; +import processing.core.PGraphics; + +public class Icon extends Controller< Icon > { + + protected boolean isPressed; + protected boolean isOn = false; + public static int autoWidth = 69; + public static int autoHeight = 19; + protected int activateBy = ControlP5Constants.RELEASE; + protected boolean isSwitch = false; + protected int roundedCorners = 0; + protected boolean isFill = true; + protected boolean isStroke = false; + protected float scl = 1; + protected int[] fontIcons = new int[] { -1 , -1 , -1 , -1 }; + protected boolean isHideBackground = true; + protected float strokeWeight = 1; + protected float scalePressed = 1.0f; + protected float scaleReleased = 1.0f; + + public Icon( ControlP5 theControlP5 , String theName ) { + this( theControlP5 , theControlP5.getDefaultTab( ) , theName , 0 , 0 , 0 , autoWidth , autoHeight ); + theControlP5.register( theControlP5.papplet , theName , this ); + } + + protected Icon( ControlP5 theControlP5 , ControllerGroup< ? > theParent , String theName , float theDefaultValue , int theX , int theY , int theWidth , int theHeight ) { + super( theControlP5 , theParent , theName , theX , theY , theWidth , theHeight ); + _myValue = theDefaultValue; + _myCaptionLabel.align( ControlP5Constants.CENTER , ControlP5Constants.CENTER ); + } + + @Override protected void onEnter( ) { + isActive = true; + } + + @Override protected void onLeave( ) { + isActive = false; + setIsInside( false ); + } + + /** + * @exclude + */ + @Override @ControlP5.Invisible public void mousePressed( ) { + isActive = getIsInside( ); + isPressed = true; + if ( activateBy == ControlP5Constants.PRESSED ) { + activate( ); + } + scl = scalePressed; + } + + /** + * @exclude + */ + @Override @ControlP5.Invisible public void mouseReleased( ) { + isPressed = false; + if ( activateBy == ControlP5Constants.RELEASE ) { + activate( ); + } + isActive = false; + scl = scaleReleased; + } + + /** + * A Icon can be activated by a mouse PRESSED or mouse + * RELEASE. Default value is RELEASE. + */ + public Icon activateBy( int theValue ) { + if ( theValue == ControlP5Constants.PRESS ) { + activateBy = ControlP5Constants.PRESS; + } else { + activateBy = ControlP5Constants.RELEASE; + } + return this; + } + + protected void activate( ) { + if ( isActive ) { + isActive = false; + isOn = !isOn; + setValue( _myValue ); + } + } + + @Override @ControlP5.Invisible public void mouseReleasedOutside( ) { + mouseReleased( ); + } + + @Override public Icon setValue( float theValue ) { + _myValue = theValue; + broadcast( ControlP5Constants.FLOAT ); + return this; + } + + @Override public Icon update( ) { + return setValue( _myValue ); + } + + /** + * Turns an icon into a switch. + */ + public Icon setSwitch( boolean theFlag ) { + isSwitch = theFlag; + if ( isSwitch ) { + _myBroadcastType = ControlP5Constants.BOOLEAN; + } else { + _myBroadcastType = ControlP5Constants.FLOAT; + } + return this; + } + + /** + * If the Icon acts as a switch, setOn will turn on + * the switch. Use + * {@link Icon#setSwitch(boolean) setSwitch} + * to turn a Icon into a Switch. + */ + public Icon setOn( ) { + if ( isSwitch ) { + isOn = false; + isActive = true; + activate( ); + } + return this; + } + + /** + * If the Icon acts as a switch, setOff will turn off + * the switch. Use + * {@link Icon#setSwitch(boolean) setSwitch} + * to turn a Icon into a Switch. + */ + public Icon setOff( ) { + if ( isSwitch ) { + isOn = true; + isActive = true; + activate( ); + } + return this; + } + + public boolean isOn( ) { + return isOn; + } + + public boolean isSwitch( ) { + return isSwitch; + } + + public boolean isPressed( ) { + return isPressed; + } + + /** + * Returns true or false and indicates the switch state + * of the Icon. {@link setSwitch(boolean) setSwitch} + * should have been set before. + */ + public boolean getBooleanValue( ) { + return isOn; + } + + public Icon setRoundedCorners( int theRadius ) { + roundedCorners = theRadius; + return this; + } + + public Icon setFontIconSize( int theSize ) { + _myCaptionLabel.setSize( theSize ); + return this; + } + + public Icon setFont( PFont thePFont ) { + _myCaptionLabel.setFont( thePFont ); + return this; + } + + public Icon setFont( PFont thePFont , int theSize ) { + _myCaptionLabel.setFont( thePFont ); + setFontIconSize( theSize ); + return this; + } + + public Icon setFontIndex( int theIndex ) { + _myCaptionLabel.set(String.valueOf((char) theIndex)); + return this; + } + + public Icon setStroke( boolean theBoolean ) { + isStroke = theBoolean; + return this; + } + + public Icon setStrokeWeight( float theStrokeWeight ) { + strokeWeight = theStrokeWeight; + return this; + } + + public Icon setFill( boolean theBoolean ) { + isFill = theBoolean; + return this; + } + + public Icon setFontIcons( int theStateOff , int theStateOn ) { + setFontIcon( theStateOn , ControlP5Constants.ACTIVE ); + setFontIcon( theStateOff , ControlP5Constants.DEFAULT ); + return this; + } + + public Icon setFontIconOn( int theStateOn ) { + setFontIcon( theStateOn , ControlP5Constants.ACTIVE ); + return this; + } + + public Icon setFontIconOff( int theStateOff ) { + setFontIcon( theStateOff , ControlP5Constants.DEFAULT ); + return this; + } + + public Icon setFontIcons( int ... theIds ) { + if ( theIds.length < 3 || theIds.length > 4 ) { + return this; + } + setFontIcon( theIds[ 0 ] , ControlP5Constants.DEFAULT ); + setFontIcon( theIds[ 1 ] , ControlP5Constants.OVER ); + setFontIcon( theIds[ 2 ] , ControlP5Constants.ACTIVE ); + setFontIcon( theIds.length == 3 ? theIds[ 2 ] : theIds[ 3 ] , ControlP5Constants.HIGHLIGHT ); + return this; + } + + public Icon setFontIcon( int theId ) { + return setFontIcon( theId , ControlP5Constants.DEFAULT ); + } + + public int getFontIcon( int theState ) { + if ( theState >= 0 && theState < 4 ) { + return fontIcons[ theState ]; + } else { + return fontIcons[ ControlP5Constants.DEFAULT ]; + } + } + + /** + * @param theImage + * @param theState use Controller.DEFAULT (background) Controller.OVER (foreground) Controller.ACTIVE (active) + */ + public Icon setFontIcon( int theId , int theState ) { + fontIcons[ theState ] = theId; + updateDisplayMode( ControlP5Constants.DEFAULT ); + return this; + } + + public Icon hideBackground( ) { + isHideBackground = true; + return this; + } + + public Icon showBackground( ) { + isHideBackground = false; + return this; + } + + public Icon setScale( float theScalePressed , float theScaleReleased ) { + scalePressed = theScalePressed; + scaleReleased = theScaleReleased; + return this; + } + + @Override @ControlP5.Invisible public Icon updateDisplayMode( int theMode ) { + return updateViewMode( theMode ); + } + + /** + * @exclude + */ + @ControlP5.Invisible public Icon updateViewMode( int theMode ) { + _myDisplayMode = theMode; + switch ( theMode ) { + case ( ControlP5Constants.DEFAULT ): + _myControllerView = new IconView( ); + break; + case ( ControlP5Constants.IMAGE ): + _myControllerView = new IconImageView( ); + break; + case ( ControlP5Constants.CUSTOM ): + default: + break; + + } + return this; + } + + private class IconView implements ControllerView< Icon > { + + public void display( PGraphics theGraphics , Icon theController ) { + + if ( !isHideBackground ) { + if ( isStroke ) { + theGraphics.stroke( color.getBackground( ) ); + theGraphics.strokeWeight( strokeWeight ); + } else { + theGraphics.noStroke( ); + } + + if ( isFill ) { + theGraphics.fill( color.getBackground( ) ); + } else { + theGraphics.noFill( ); + } + } + + float w_half = getWidth( ) / 2; + float h_half = getHeight( ) / 2; + theGraphics.translate( w_half , h_half ); + theGraphics.scale( scl ); + + if ( !isHideBackground ) { + if ( roundedCorners == 0 ) { + theGraphics.rect( -w_half , -h_half , getWidth( ) , getHeight( ) ); + } else if ( roundedCorners == -1 ) { + theGraphics.ellipseMode(PApplet.CORNER); + theGraphics.ellipse( -w_half , -h_half , getWidth( ) , getHeight( ) ); + } else { + theGraphics.rect( -w_half , -h_half , getWidth( ) , getHeight( ) , roundedCorners , roundedCorners , roundedCorners , roundedCorners ); + } + } + + if ( isSwitch ) { + if ( !isOn ) { + setFontIndex( getFontIcon( ControlP5Constants.ACTIVE ) ); + } else { + setFontIndex( getFontIcon( ControlP5Constants.DEFAULT ) ); + } + } else { + setFontIndex( getFontIcon( ControlP5Constants.DEFAULT ) ); + } + _myCaptionLabel.setColor( isOn && isSwitch || isPressed && !isSwitch ? color.getActive( ) : color.getForeground( ) ); + _myCaptionLabel.draw( theGraphics , -( int ) w_half , -( int ) ( h_half * 1.05f ) , theController ); + + } + } + + private class IconImageView implements ControllerView< Icon > { + + public void display( PGraphics theGraphics , Icon theController ) { + + float w_half = getWidth( ) / 2; + float h_half = getHeight( ) / 2; + theGraphics.translate( w_half , h_half ); + theGraphics.scale( scl ); + + if ( isOn && isSwitch ) { + theGraphics.image( (availableImages[ControlP5Constants.HIGHLIGHT]) ? images[ ControlP5Constants.HIGHLIGHT ] : images[ ControlP5Constants.DEFAULT ] , -w_half , -h_half ); + return; + } + if ( getIsInside( ) ) { + if ( isPressed ) { + theGraphics.image( (availableImages[ControlP5Constants.ACTIVE]) ? images[ ControlP5Constants.ACTIVE ] : images[ ControlP5Constants.DEFAULT ] , -w_half , -h_half ); + } else { + theGraphics.image( (availableImages[ControlP5Constants.OVER]) ? images[ ControlP5Constants.OVER ] : images[ ControlP5Constants.DEFAULT ] , -w_half , -h_half ); + } + } else { + theGraphics.image( images[ ControlP5Constants.DEFAULT ] , -w_half , -h_half ); + } + } + } + + @Override public String getInfo( ) { + return "type:\tIcon\n" + super.getInfo( ); + } + + @Override public String toString( ) { + return super.toString( ) + " [ " + getValue( ) + " ] " + "Icon" + " (" + this.getClass( ).getSuperclass( ) + ")"; + } +} diff --git a/controlP5/Knob.java b/controlP5/Knob.java new file mode 100755 index 0000000..2c8f36f --- /dev/null +++ b/controlP5/Knob.java @@ -0,0 +1,568 @@ +package main.java.src2.main.java.controlP5.controlP5; + +/** + * controlP5 is a processing gui library. + * + * 2006-2015 by Andreas Schlegel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place, Suite 330, + * Boston, MA 02111-1307 USA + * + * @author Andreas Schlegel (http://www.sojamo.de) + * @modified ##date## + * @version ##version## + * + */ + +import processing.core.PApplet; +import processing.core.PGraphics; + +/** + * A knob is a circular slider which can be used with a limited and unlimited range. Knobs come in 3 + * designs LINE, ARC and ELLIPSE and can be controller with both the mouse and the mouse wheel. + * + * @example controllers/ControlP5knob + */ +public class Knob extends Controller< Knob > { + + protected float _myDiameter; + protected float _myRadius; + protected float myAngle; + protected float startAngle; + protected float angleRange; + protected float resolution = 200.0f; // sensitivity. + protected int _myTickMarksNum = 8; + protected boolean isShowTickMarks; + protected boolean isSnapToTickMarks; + protected int myTickMarkLength = 2; + protected float myTickMarkWeight = 1; + protected boolean isShowAngleRange = true; + protected float currentValue; + protected float previousValue; + protected float modifiedValue; + protected boolean isConstrained; + protected int _myDragDirection = HORIZONTAL; + protected int viewStyle = LINE; + public static int autoWidth = 39; + public static int autoHeight = 39; + protected float[] autoSpacing = new float[] { 10 , 20 }; + + private float scrollSensitivity = 1.0f / resolution; + + /** + * Convenience constructor to extend Knob. + * + * @example use/ControlP5extendController + * @param theControlP5 + * @param theName + */ + public Knob( ControlP5 theControlP5 , String theName ) { + this( theControlP5 , theControlP5.getDefaultTab( ) , theName , 0 , 100 , 0 , 0 , 0 , autoWidth ); + theControlP5.register( theControlP5.papplet , theName , this ); + } + + /** + * @exclude + */ + public Knob( ControlP5 theControlP5 , ControllerGroup< ? > theParent , String theName , float theMin , float theMax , float theDefaultValue , int theX , int theY , int theWidth ) { + super( theControlP5 , theParent , theName , theX , theY , theWidth , theWidth ); + _myValue = theDefaultValue; + setMin( theMin ); + setMax( theMax ); + _myDiameter = theWidth; + _myRadius = _myDiameter / 2; + _myUnit = ( _myMax - _myMin ) / TWO_PI; + startAngle = HALF_PI + PI * 0.25f; + angleRange = PI + HALF_PI; + myAngle = startAngle; + isConstrained = true; + getCaptionLabel( ).align( CENTER , BOTTOM_OUTSIDE ); + setViewStyle( ARC ); + } + + @Override public Knob setSize( int theWidth , int theHeight ) { + return setRadius( theWidth / 2 ); + } + + public Knob setRadius( float theValue ) { + _myRadius = theValue; + _myDiameter = _myRadius * 2; + setWidth( ( int ) _myDiameter ); + setHeight( ( int ) _myDiameter ); + return this; + } + + public float getRadius( ) { + return _myRadius; + } + + /** + * The start angle is a value between 0 and TWO_PI. By default the start angle is set to HALF_PI + * + PI * 0.25f + */ + public Knob setStartAngle( float theAngle ) { + startAngle = theAngle; + setInternalValue( modifiedValue ); + return this; + } + + /** + * get the start angle, 0 is at 3 o'clock. + */ + public float getStartAngle( ) { + return startAngle; + } + + /** + * set the range in between which the know operates. By default the range is PI + HALF_PI + */ + public Knob setAngleRange( float theRange ) { + angleRange = theRange; + setInternalValue( modifiedValue ); + return this; + } + + public float getAngleRange( ) { + return angleRange; + } + + public float getAngle( ) { + return myAngle; + } + + public boolean isShowAngleRange( ) { + return isShowAngleRange; + } + + public Knob setShowAngleRange( boolean theValue ) { + isShowAngleRange = theValue; + return this; + } + + /** + * Sets the drag direction, when controlling a knob, parameter is either Controller.HORIZONTAL + * or Controller.VERTICAL. + * + * @param theValue + * must be Controller.HORIZONTAL or Controller.VERTICAL + * @return Knob + */ + public Knob setDragDirection( int theValue ) { + if ( theValue == HORIZONTAL ) { + _myDragDirection = HORIZONTAL; + } else { + _myDragDirection = VERTICAL; + } + return this; + } + + /** + * Gets the drag direction which is either Controller.HORIZONTAL or Controller.VERTICAL. + * + * @return int returns Controller.HORIZONTAL or Controller.VERTICAL + */ + public int getDragDirection( ) { + return _myDragDirection; + } + + /** + * resolution is a sensitivity value when dragging a knob. the higher the value, the more + * sensitive the dragging. + */ + public Knob setResolution( float theValue ) { + resolution = theValue; + return this; + } + + public float getResolution( ) { + return resolution; + } + + public Knob setNumberOfTickMarks( int theNumber ) { + _myTickMarksNum = theNumber; + showTickMarks( ); + return this; + } + + public int getNumberOfTickMarks( ) { + return _myTickMarksNum; + } + + public Knob showTickMarks( ) { + isShowTickMarks = true; + return this; + } + + public Knob hideTickMarks( ) { + isShowTickMarks = false; + return this; + } + + public boolean isShowTickMarks( ) { + return isShowTickMarks; + } + + public Knob snapToTickMarks( boolean theFlag ) { + isSnapToTickMarks = theFlag; + update( ); + return this; + } + + public Knob setTickMarkLength( int theLength ) { + myTickMarkLength = theLength; + return this; + } + + public int getTickMarkLength( ) { + return myTickMarkLength; + } + + public Knob setTickMarkWeight( float theWeight ) { + myTickMarkWeight = theWeight; + return this; + } + + public float getTickMarkWeight( ) { + return myTickMarkWeight; + } + + public Knob setConstrained( boolean theValue ) { + isConstrained = theValue; + setShowAngleRange(isConstrained); + return this; + } + + public boolean isConstrained( ) { + return isConstrained; + } + + /** + * @exclude + */ + @Override @ControlP5.Invisible public Knob updateInternalEvents( PApplet theApplet ) { + if ( isMousePressed && !cp5.isAltDown( ) ) { + if ( isActive ) { + float c = ( _myDragDirection == HORIZONTAL ) ? _myControlWindow.mouseX - _myControlWindow.pmouseX : _myControlWindow.mouseY - _myControlWindow.pmouseY; + currentValue += ( c ) / resolution; + if ( isConstrained ) { + currentValue = PApplet.constrain( currentValue , 0 , 1 ); + } + setInternalValue( currentValue ); + } + } + return this; + } + + protected void onEnter( ) { + isActive = true; + } + + protected void onLeave( ) { + isActive = false; + } + + /** + * @exclude {@inheritDoc} + */ + @Override @ControlP5.Invisible public void mousePressed( ) { + float x = x(_myParent.getAbsolutePosition( )) + x(position) + _myRadius; + float y = y(_myParent.getAbsolutePosition( )) + y(position) + _myRadius; + if ( PApplet.dist( x , y , _myControlWindow.mouseX , _myControlWindow.mouseY ) < _myRadius ) { + isActive = true; + if ( PApplet.dist( x , y , _myControlWindow.mouseX , _myControlWindow.mouseY ) > ( _myRadius * 0.6 ) ) { + myAngle = ( PApplet.atan2( _myControlWindow.mouseY - y , _myControlWindow.mouseX - x ) - startAngle ); + if ( myAngle < 0 ) { + myAngle = TWO_PI + myAngle; + } + if ( isConstrained ) { + myAngle %= TWO_PI; + } + currentValue = PApplet.map( myAngle , 0 , angleRange , 0 , 1 ); + setInternalValue( currentValue ); + + } + } + } + + /** + * @exclude {@inheritDoc} + */ + @Override @ControlP5.Invisible public void mouseReleasedOutside( ) { + isActive = false; + } + + @Override public Knob setMin( float theValue ) { + _myMin = theValue; + return this; + } + + @Override public Knob setMax( float theValue ) { + _myMax = theValue; + return this; + } + + public Knob setRange( float theMin , float theMax ) { + setMin( theMin ); + setMax( theMax ); + update( ); + return this; + } + + protected void setInternalValue( float theValue ) { + modifiedValue = ( isSnapToTickMarks ) ? PApplet.round( ( theValue * _myTickMarksNum ) ) / ( ( float ) _myTickMarksNum ) : theValue; + currentValue = theValue; + myAngle = PApplet.map( isSnapToTickMarks ? modifiedValue : currentValue , 0 , 1 , startAngle , startAngle + angleRange ); + + if ( isSnapToTickMarks ) { + if ( previousValue != modifiedValue && isSnapToTickMarks ) { + broadcast( FLOAT ); + _myValueLabel.set( adjustValue( getValue( ) ) ); + previousValue = modifiedValue; + return; + } + } + if ( previousValue != currentValue ) { + broadcast( FLOAT ); + _myValueLabel.set( adjustValue( getValue( ) ) ); + previousValue = modifiedValue; + } + } + + @Override public Knob setValue( float theValue ) { + theValue = PApplet.map( theValue , _myMin , _myMax , 0 , 1 ); + if ( isConstrained ) { + theValue = PApplet.constrain( theValue , 0 , 1 ); + } + _myValueLabel.set( adjustValue( getValue( ) ) ); + setInternalValue( theValue ); + return this; + } + + @Override public float getValue( ) { + _myValue = PApplet.map( _myTickMarksNum > 0 ? modifiedValue : currentValue , 0 , 1 , _myMin , _myMax ); + return _myValue; + } + + /** + * Assigns a random value to the controller. + */ + public Knob shuffle( ) { + float r = ( float ) Math.random( ); + setValue( PApplet.map( r , 0 , 1 , getMin( ) , getMax( ) ) ); + return this; + } + + /** + * Sets the sensitivity for the scroll behavior when using the mouse wheel or the scroll + * function of a multi-touch track pad. The smaller the value (closer to 0) the higher the + * sensitivity. + * + * @param theValue + * @return Knob + */ + public Knob setScrollSensitivity( float theValue ) { + scrollSensitivity = theValue; + return this; + } + + /** + * Changes the value of the knob when hovering and using the mouse wheel or the scroll function + * of a multi-touch track pad. + */ + @ControlP5.Invisible public Knob scrolled( int theRotationValue ) { + float f = getValue( ); + float steps = isSnapToTickMarks ? ( 1.0f / getNumberOfTickMarks( ) ) : scrollSensitivity; + f += ( getMax( ) - getMin( ) ) * ( -theRotationValue * steps ); + setValue( f ); + return this; + } + + /** + * @exclude + */ + @Override @ControlP5.Invisible public Knob update( ) { + setValue( _myValue ); + return this; + } + + /** + * set the display style of a knob. takes parameters Knob.LINE, Knob.ELLIPSE or Knob.ARC. + * default style is Knob.LINE + * + * @param theStyle + * use Knob.LINE, Knob.ELLIPSE or Knob.ARC + * @return Knob + */ + public Knob setViewStyle( int theStyle ) { + viewStyle = theStyle; + return this; + } + + public int getViewStyle( ) { + return viewStyle; + } + + /** + * @exclude {@inheritDoc} + */ + @Override @ControlP5.Invisible public Knob updateDisplayMode( int theMode ) { + _myDisplayMode = theMode; + switch ( theMode ) { + case ( DEFAULT ): + _myControllerView = new KnobView( ); + break; + case ( SPRITE ): + case ( IMAGE ): + _myControllerView = new KnobView( ); + break; + case ( CUSTOM ): + default: + break; + } + return this; + } + + class KnobView implements ControllerView< Knob > { + + public void display( PGraphics theGraphics , Knob theController ) { + theGraphics.translate( ( int ) getRadius( ) , ( int ) getRadius( ) ); + + theGraphics.pushMatrix( ); + theGraphics.ellipseMode( PApplet.CENTER ); + theGraphics.noStroke( ); + theGraphics.fill( getColor( ).getBackground( ) ); + theGraphics.ellipse( 0 , 0 , getRadius( ) * 2 , getRadius( ) * 2 ); + theGraphics.popMatrix( ); + int c = isActive( ) ? getColor( ).getActive( ) : getColor( ).getForeground( ); + theGraphics.pushMatrix( ); + if ( getViewStyle( ) == LINE) { + theGraphics.rotate( getAngle( ) ); + theGraphics.stroke( c ); + theGraphics.strokeWeight( getTickMarkWeight( ) ); + theGraphics.line( 0 , 0 , getRadius( ) , 0 ); + } else if ( getViewStyle( ) == ELLIPSE) { + theGraphics.rotate( getAngle( ) ); + theGraphics.fill( c ); + theGraphics.ellipse( getRadius( ) * 0.75f , 0 , getRadius( ) * 0.2f , getRadius( ) * 0.2f ); + } else if ( getViewStyle( ) == ARC) { + theGraphics.fill( c ); + theGraphics.arc( 0 , 0 , getRadius( ) * 1.8f , getRadius( ) * 1.8f , getStartAngle( ) , getAngle( ) + ( ( getStartAngle( ) == getAngle( ) ) ? 0.06f : 0f ) ); + theGraphics.fill( theGraphics.red( getColor( ).getBackground( ) ) , theGraphics.green( getColor( ).getBackground( ) ) , theGraphics.blue( getColor( ).getBackground( ) ) , 255 ); + theGraphics.ellipse( 0 , 0 , getRadius( ) * 1.2f , getRadius( ) * 1.2f ); + } + theGraphics.popMatrix( ); + + theGraphics.pushMatrix( ); + theGraphics.rotate( getStartAngle( ) ); + + if ( isShowTickMarks( ) ) { + float step = getAngleRange( ) / getNumberOfTickMarks( ); + theGraphics.stroke( getColor( ).getForeground( ) ); + theGraphics.strokeWeight( getTickMarkWeight( ) ); + for ( int i = 0 ; i <= getNumberOfTickMarks( ) ; i++ ) { + theGraphics.line( getRadius( ) + 2 , 0 , getRadius( ) + getTickMarkLength( ) + 2 , 0 ); + theGraphics.rotate( step ); + } + } else { + if ( isShowAngleRange( ) ) { + theGraphics.stroke( getColor( ).getForeground( ) ); + theGraphics.strokeWeight( getTickMarkWeight( ) ); + theGraphics.line( getRadius( ) + 2 , 0 , getRadius( ) + getTickMarkLength( ) + 2 , 0 ); + theGraphics.rotate( getAngleRange( ) ); + theGraphics.line( getRadius( ) + 2 , 0 , getRadius( ) + getTickMarkLength( ) + 2 , 0 ); + } + } + theGraphics.noStroke( ); + theGraphics.popMatrix( ); + + theGraphics.pushMatrix( ); + theGraphics.translate( -getWidth( ) / 2 , -getHeight( ) / 2 ); + if ( isLabelVisible ) { + _myCaptionLabel.draw( theGraphics , 0 , 0 , theController ); + _myValueLabel.align(CENTER, CENTER); + _myValueLabel.draw( theGraphics , 0 , 0 , theController ); + } + theGraphics.popMatrix( ); + + } + } + + /** + * @exclude + * @deprecated + */ + @Deprecated public Knob setOffsetAngle( float theValue ) { + return setStartAngle( theValue ); + } + + /** + * @exclude + * @deprecated + */ + @Deprecated public float value( ) { + return getValue( ); + } + + /** + * @exclude + * @deprecated + */ + @Deprecated public Knob setDisplayStyle( int theStyle ) { + viewStyle = theStyle; + return this; + } + + /** + * @exclude + * @deprecated + */ + @Deprecated public int getDisplayStyle( ) { + return viewStyle; + } + + /** + * @exclude + * @deprecated + */ + @Deprecated @ControlP5.Invisible public Knob setSensitivity( float theValue ) { + scrollSensitivity = theValue; + return this; + } + + /** + * @exclude + * @deprecated + */ + @Deprecated public Knob showTickMarks( boolean theFlag ) { + isShowTickMarks = theFlag; + return this; + } + +} +/* settings for: + * + * TODO tickmarks: distance from edge + * + * TODO only start-end marks if isLimited and tickmarks are off. + * + * TODO arc: add setter for distance to center + distance to edge currently percental. + * + * TODO enable/disable drag and click control (for endless, click should be disabled). + * + * TODO dragging: add another option to control the knob. currently only linear dragging is + * implemented, add circular dragging (as before) as well */ + +/* (non-Javadoc) + * + * @see main.java.src2.main.java.controlP5.controlp5.Controller#updateInternalEvents(processing.core.PApplet) */ diff --git a/controlP5/Label.java b/controlP5/Label.java new file mode 100755 index 0000000..f1fa7d2 --- /dev/null +++ b/controlP5/Label.java @@ -0,0 +1,542 @@ +package main.java.src2.main.java.controlP5.controlP5; + +/** + * controlP5 is a processing gui library. + * + * 2006-2015 by Andreas Schlegel + * + * This library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser + * General Public License as published by the Free Software + * Foundation; either version 2.1 of the License, or (at + * your option) any later version. This library is + * distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU Lesser General Public License for more + * details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, write to + * the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * @author Andreas Schlegel (http://www.sojamo.de) + * @modified ##date## + * @version ##version## + * + */ + +import processing.core.PFont; +import processing.core.PGraphics; + +/** + * A custom label using controlP5's BitFonts or PFont based + * ControlFonts. + * + * + * @see ControlFont + * @example controllers/ControlP5Textlabel + * + */ +public class Label implements CDrawable { + + public static boolean isToUpperCaseDefault = true; + protected int _myLetterSpacing = 0; + protected boolean isMultiline; + protected boolean isFixedSize; + protected ControllerStyle _myControllerStyle = new ControllerStyle( ); + protected boolean isVisible = true; + protected int _myColor = 0xffffffff; + protected boolean isColorBackground; + protected boolean isToUpperCase = isToUpperCaseDefault; + protected boolean changed; + protected int _myColorBackground = 0xffffffff; + protected int _myHeight = -1; + protected int _myWidth = -1; + protected String _myText = ""; + protected ControlFont _myFontLabel; + protected int _myLineHeight = 0; + protected int alignX = ControlP5.LEFT; + protected int alignY = ControlP5.LEFT; + protected int textAlign = ControlP5.LEFT; + public static int paddingX = 4; + public static int paddingY = 4; + public int _myPaddingX = paddingX; + public int _myPaddingY = paddingY; + protected Labeltype _myLabeltype; + protected int _myTextHeight = 1; + protected float offsetYratio = 0; + private ControlP5 cp5; + + private Label( Label theLabel ) { + _myText = theLabel.getText( ); + isToUpperCase = theLabel.isToUpperCase( ); + _myLetterSpacing = theLabel.getLetterSpacing( ); + _myLineHeight = theLabel.getLineHeight( ); + _myFontLabel = theLabel.getFont( ); + _myLabeltype = theLabel.getLabeltype( ); + } + + public Label( ControlP5 theControlP5 , String theValue ) { + init( theControlP5 , theValue , 0 , 0 , _myColor ); + } + + public Label( ControlP5 theControlP5 , String theValue , int theWidth , int theHeight , int theColor ) { + init( theControlP5 , theValue , theWidth , theHeight , theColor ); + } + + private void init( ControlP5 theControlP5 , String theValue , int theWidth , int theHeight , int theColor ) { + cp5 = theControlP5; + _myWidth = theWidth; + _myHeight = theHeight; + _myText = theValue; + _myColor = theColor; + setLabeltype( new SinglelineLabel( ) ); + setFont( cp5.controlFont ); + setLabeltype( new SinglelineLabel( ) ); + set( _myText ); + _myControllerStyle = new ControllerStyle( ); + } + + Label setLabeltype( Labeltype theType ) { + _myLabeltype = theType; + return this; + } + + Labeltype getLabeltype( ) { + return _myLabeltype; + } + + public Label align( int[] a ) { + alignX = a[ 0 ]; + alignY = a[ 1 ]; + return this; + } + + public Label align( int theX , int theY ) { + alignX = theX; + alignY = theY; + return this; + } + + public Label alignX( int theX ) { + alignX = theX; + return this; + } + + public Label alignY( int theY ) { + alignY = theY; + return this; + } + + public int[] getAlign( ) { + return new int[] { alignX , alignY }; + } + + public Label setPadding( int thePaddingX , int thePaddingY ) { + _myPaddingX = thePaddingX; + _myPaddingY = thePaddingY; + return this; + } + + public Label setPaddingX( int thePaddingX ) { + _myPaddingX = thePaddingX; + return this; + } + + public Label setPaddingY( int thePaddingY ) { + _myPaddingY = thePaddingY; + return this; + } + + public void draw( PGraphics theGraphics , int theX , int theY , ControllerInterface< ? > theController ) { + if ( isVisible ) { + getLabeltype( ).draw( this , theGraphics , theX , theY , theController ); + } + } + + public void draw( PGraphics theGraphics , int theX , int theY , int theW , int theH ) { + if ( isVisible ) { + getLabeltype( ).draw( this , theGraphics , theX , theY , theW , theH ); + } + } + + @Override public void draw( PGraphics theGraphics ) { + if ( isVisible ) { + _myFontLabel.adjust( theGraphics , this ); + draw( theGraphics , 0 , 0 ); + } + } + + public void draw( PGraphics theGraphics , int theX , int theY ) { + if ( isVisible ) { + theGraphics.pushMatrix( ); + theGraphics.translate( _myControllerStyle.marginLeft , _myControllerStyle.marginTop ); + theGraphics.translate( theX , theY ); + + if ( isColorBackground ) { + + float ww = getStyle( ).paddingRight + getStyle( ).paddingLeft; + if ( getStyle( ).backgroundWidth > -1 ) { + ww += _myControllerStyle.backgroundWidth; + } else { + ww += _myFontLabel.getWidth( ); + } + float hh = getStyle( ).paddingBottom + getStyle( ).paddingTop; + if ( getStyle( ).backgroundHeight > -1 ) { + hh += getStyle( ).backgroundHeight; + } else { + hh += _myFontLabel.getHeight( ); + } + theGraphics.fill( _myColorBackground ); + theGraphics.rect( 0 , 1 , ww , hh ); + } + theGraphics.translate( _myControllerStyle.paddingLeft , _myControllerStyle.paddingTop ); + _myFontLabel.draw( theGraphics , this ); + theGraphics.popMatrix( ); + } + } + + public Label hide( ) { + return setVisible( false ); + } + + public Label show( ) { + return setVisible( true ); + } + + public Label setVisible( boolean theValue ) { + isVisible = theValue; + return this; + } + + public Label updateFont( ControlFont theFont ) { + return setFont( theFont ); + } + + public Label set( String theValue ) { + return setText( theValue ); + } + + public Label setText( String theValue ) { + _myText = theValue; + setChanged( true ); + return this; + } + + public Label setFixedSize( boolean theValue ) { + isFixedSize = theValue; + return this; + } + + public boolean isFixedSize( ) { + return !isMultiline && isFixedSize; + } + + public String getText( ) { + return _myText; + } + + public String getTextFormatted( ) { + return getLabeltype( ).getTextFormatted( ); + } + + public ControllerStyle getStyle( ) { + return _myControllerStyle; + } + + public Label setWidth( int theWidth ) { + _myWidth = theWidth; + setChanged( true ); + return this; + } + + public Label setHeight( int theHeight ) { + _myHeight = theHeight; + setChanged( true ); + return this; + } + + public int getWidth( ) { + return _myLabeltype.getWidth( ); + } + + public int getHeight( ) { + return _myLabeltype.getHeight( ); + } + + public int getOverflow( ) { + return getLabeltype( ).getOverflow( ); + } + + public Label setMultiline( boolean theValue ) { + isMultiline = theValue; + _myLabeltype = ( isMultiline ) ? new MultilineLabel( ) : new SinglelineLabel( ); + return this; + } + + public Label toUpperCase( boolean theValue ) { + isToUpperCase = theValue; + setChanged( true ); + return this; + } + + public ControlFont getFont( ) { + return _myFontLabel; + } + + public Label setFont( int theBitFontIndex ) { + ControlP5.logger.warning( "BitFont is now of type PFont, use setFont(PFont) instead." ); + return this; + } + + public Label setFont( PFont thePFont ) { + return setFont( new ControlFont( thePFont ) ); + } + + public Label setFont( ControlFont theFont ) { + setLineHeight( theFont.getSize( ) ); + _myFontLabel = new ControlFont( theFont.getFont( ) , theFont.getSize( ) ); + _myFontLabel.init( this ); + setChanged( true ); + return this; + } + + public Label setSize( int theSize ) { + _myFontLabel.setSize( theSize ); + return this; + } + + protected boolean isChanged( ) { + return changed; + } + + protected Label setChanged( boolean theValue ) { + changed = theValue; + return this; + } + + Label setTextHeight( int theHeight ) { + _myTextHeight = theHeight; + return this; + } + + public int getTextHeight( ) { + return _myFontLabel.getTextHeight( ); + } + + public int getLineHeight( ) { + return _myLineHeight; + } + + public Label setOffsetY( int theValue ) { + return this; + } + + public Label setOffsetYratio( float theValue ) { + offsetYratio = theValue; + setChanged( true ); + return this; + } + + public float getOffsetYratio( ) { + return offsetYratio; + } + + public Label setLineHeight( int theValue ) { + _myLineHeight = theValue; + setChanged( true ); + return this; + } + + public Label setColor( int theValue , boolean theFlag ) { + setColor( theValue ); + setFixedSize( theFlag ); + return this; + } + + public Label setColor( int theColor ) { + _myColor = theColor; + setChanged( true ); + return this; + } + + public int getColor( ) { + return _myColor; + } + + public Label setColorBackground( int theColor ) { + enableColorBackground( ); + _myColorBackground = theColor; + return this; + } + + public Label disableColorBackground( ) { + isColorBackground = false; + return this; + } + + public Label enableColorBackground( ) { + isColorBackground = true; + return this; + } + + public int getLetterSpacing( ) { + return _myLetterSpacing; + } + + public Label setLetterSpacing( int theValue ) { + _myLetterSpacing = theValue; + setChanged( true ); + return this; + } + + public boolean isMultiline( ) { + return isMultiline; + } + + public boolean isVisible( ) { + return isVisible; + } + + public boolean isToUpperCase( ) { + return isToUpperCase; + } + + protected Label copy( ) { + return new Label( this ); + } + + + public static void setUpperCaseDefault( boolean theValue ) { + isToUpperCaseDefault = theValue; + } + + interface Labeltype { + + void draw( Label theLabel , PGraphics theGraphics , int theX , int theY , ControllerInterface< ? > theController ); + + void draw( Label theLabel , PGraphics theGraphics , int theX , int theY , int theW , int theH ); + + int getWidth( ); + + int getHeight( ); + + int getOverflow( ); + + String getTextFormatted( ); + } + + class SinglelineTextfield extends SinglelineLabel { + + public String getTextFormatted( ) { + return _myText; + } + } + + class SinglelineLabel implements Labeltype { + + private void align( PGraphics theGraphics , int theAlignX , int theAlignY , int theW , int theH ) { + int x = 0; + int y = 0; + switch ( theAlignX ) { + case ( ControlP5.CENTER ): + x = ( theW - _myFontLabel.getWidth( ) ) / 2; + break; + case ( ControlP5.LEFT ): + x = _myPaddingX; + break; + case ( ControlP5.RIGHT ): + x = theW - _myFontLabel.getWidth( ) - _myPaddingX; + break; + case ( ControlP5.LEFT_OUTSIDE ): + x = -_myFontLabel.getWidth( ) - _myPaddingX; + break; + case ( ControlP5.RIGHT_OUTSIDE ): + x = theW + _myPaddingX; + break; + } + switch ( theAlignY ) { + case ( ControlP5.CENTER ): + y = theH / 2 + _myFontLabel.getTop( ) - _myFontLabel.getCenter( ); + break; + case ( ControlP5.TOP ): + y = 0; + break; + case ( ControlP5.BOTTOM ): + y = theH - _myFontLabel.getHeight( ) - 1; + break; + case ( ControlP5.BASELINE ): + y = theH + _myFontLabel.getTop( ) - 1; + break; + case ( ControlP5.BOTTOM_OUTSIDE ): + y = theH + _myPaddingY; + break; + case ( ControlP5.TOP_OUTSIDE ): + y = -_myFontLabel.getHeight( ) - _myPaddingY; + break; + } + theGraphics.translate( x , y ); + } + + @Override public void draw( Label theLabel , PGraphics theGraphics , int theX , int theY , int theW , int theH ) { + _myFontLabel.adjust( theGraphics , theLabel ); + theGraphics.pushMatrix( ); + align( theGraphics , alignX , alignY , theW , theH ); + theLabel.draw( theGraphics , theX , theY ); + theGraphics.popMatrix( ); + } + + @Override public void draw( Label theLabel , PGraphics theGraphics , int theX , int theY , ControllerInterface< ? > theController ) { + draw( theLabel , theGraphics , theX , theY , theController.getWidth( ) , theController.getHeight( ) ); + } + + @Override public int getWidth( ) { + return isFixedSize ? _myWidth : _myFontLabel.getWidth( ); + } + + @Override public int getHeight( ) { + return _myFontLabel.getHeight( ); + } + + @Override public int getOverflow( ) { + return -1; + } + + @Override public String getTextFormatted( ) { + return ( isToUpperCase ? _myText.toUpperCase( ) : _myText ); + } + } + + class MultilineLabel implements Labeltype { + + @Override public void draw( Label theLabel , PGraphics theGraphics , int theX , int theY , int theW , int theH ) { + _myFontLabel.adjust( theGraphics , theLabel ); + theLabel.draw( theGraphics , theX , theY ); + } + + @Override public void draw( Label theLabel , PGraphics theGraphics , int theX , int theY , ControllerInterface< ? > theController ) { + _myFontLabel.adjust( theGraphics , theLabel ); + theLabel.draw( theGraphics , theX , theY ); + } + + @Override public int getWidth( ) { + return _myWidth; + } + + @Override public int getHeight( ) { + return _myHeight; + } + + @Override public int getOverflow( ) { + return _myFontLabel.getOverflow( ); + } + + @Override public String getTextFormatted( ) { + return ( isToUpperCase ? _myText.toUpperCase( ) : _myText ); + } + + } + +} diff --git a/controlP5/ListBox.java b/controlP5/ListBox.java new file mode 100755 index 0000000..242d2f1 --- /dev/null +++ b/controlP5/ListBox.java @@ -0,0 +1,469 @@ +package main.java.src2.main.java.controlP5.controlP5; + +/** + * controlP5 is a processing gui library. + * + * 2006-2015 by Andreas Schlegel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place, Suite 330, + * Boston, MA 02111-1307 USA + * + * @author Andreas Schlegel (http://www.sojamo.de) + * @modified ##date## + * @version ##version## + * + */ + +import static main.java.src2.main.java.controlP5.controlP5.ControlP5.b; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import processing.core.PApplet; +import processing.core.PGraphics; +import processing.event.KeyEvent; + +/** + * A ListBox is a list of vertically aligned items which can be scrolled if required. + * + * @see ListBox + * @example controllers/ControlP5listBox + */ +public class ListBox extends Controller< ListBox > implements ControlListener { + + private int _myType = LIST; + protected int _myBackgroundColor = 0x00ffffff; + protected int itemHeight = 13; + protected int barHeight = 10; + private float scrollSensitivity = 1; + private boolean isOpen = true; + protected List< Map< String , Object > > items; + protected int itemRange = 5; + protected int itemHover = -1; + private int itemIndexOffset = 0; + private final int itemSpacing = 1; + private int _myDirection = PApplet.DOWN; + private boolean isBarVisible = true; + static public final int LIST = ControlP5.LIST; + static public final int DROPDOWN = ControlP5.DROPDOWN; + static public final int CHECKBOX = ControlP5.CHECKBOX; /* TODO */ + static public final int TREE = ControlP5.TREE; /* TODO */ + + public ListBox( ControlP5 theControlP5 , String theName ) { + this( theControlP5 , theControlP5.getDefaultTab( ) , theName , 0 , 0 , 99 , 199 ); + theControlP5.register( theControlP5.papplet , theName , this ); + } + + protected ListBox( ControlP5 theControlP5 , ControllerGroup< ? > theGroup , String theName , int theX , int theY , int theW , int theH ) { + super( theControlP5 , theGroup , theName , theX , theY , theW , theH ); + items = new ArrayList< Map< String , Object > >( ); + updateHeight( ); + } + + public boolean isOpen( ) { + return isOpen; + } + + public ListBox open( ) { + return setOpen( true ); + } + + public ListBox close( ) { + return setOpen( false ); + } + + public ListBox setOpen( boolean b ) { + isOpen = b; + return this; + } + + @Override public int getHeight( ) { + return isOpen ? super.getHeight( ) : barHeight; + } + + public ListBox setType( int theType ) { + _myType = theType; + return this; + } + + public void setDirection( int theDirection ) { + _myDirection = ( theDirection == PApplet.UP ) ? PApplet.UP : PApplet.DOWN; + } + + @Override protected boolean inside( ) { + /* constrain the bounds of the controller to the + * dimensions of the cp5 area, required since + * PGraphics as render area has been introduced. */ + float x0 = PApplet.max( 0 , x( position ) + x( _myParent.getAbsolutePosition( ) ) ); + float x1 = PApplet.min( cp5.pgw , x( position ) + x( _myParent.getAbsolutePosition( ) ) + getWidth( ) ); + float y0 = PApplet.max( 0 , y( position ) + y( _myParent.getAbsolutePosition( ) ) ); + float y1 = PApplet.min( cp5.pgh , y( position ) + y( _myParent.getAbsolutePosition( ) ) + getHeight( ) ); + if ( y1 < y0 ) { + float ty = y0; + y0 = y1; + y1 = ty; + } + return ( _myControlWindow.mouseX > x0 && _myControlWindow.mouseX < x1 && _myControlWindow.mouseY > ( y1 < y0 ? y1 : y0 ) && _myControlWindow.mouseY < ( y0 < y1 ? y1 : y0 ) ); + } + + @Override protected void onRelease( ) { + if ( !isDragged ) { + if ( getPointer( ).y( ) >= 0 && getPointer( ).y( ) <= barHeight ) { + setOpen( !isOpen( ) ); + } else if ( isOpen ) { + + double n = Math.floor( ( getPointer( ).y( ) - barHeight ) / itemHeight ); + + // n += itemRange; /* UP */ + int index = ( int ) n + itemIndexOffset; + + Map m = items.get( index ); + + switch ( _myType ) { + case ( LIST ): + setValue( index ); + for ( Object o : items ) { + ( ( Map ) o ).put( "state" , false ); + } + m.put( "state" , !ControlP5.b( m.get( "state" ) ) ); + break; + case ( DROPDOWN ): + setValue( index ); + setOpen( false ); + getCaptionLabel( ).setText( ( m.get( "text" ).toString( ) ) ); + break; + case ( CHECKBOX ): + m.put( "state" , !ControlP5.b( m.get( "state" ) ) ); + break; + } + + } + } + } + + @Override protected void onDrag( ) { + scroll( getPointer( ).dy( ) ); + } + + @Override protected void onScroll( int theValue ) { + scroll( theValue ); + } + + private void scroll( int theValue ) { + if ( isOpen ) { + itemIndexOffset += theValue; + itemIndexOffset = ( int ) ( Math.floor( Math.max( 0 , Math.min( itemIndexOffset , items.size( ) - itemRange ) ) ) ); + itemHover = -2; + } + } + + @Override protected void onLeave( ) { + itemHover = -1; + } + + private void updateHover( ) { + if ( getPointer( ).y( ) > barHeight ) { + double n = Math.floor( ( getPointer( ).y( ) - barHeight ) / itemHeight ); + itemHover = ( int ) ( itemIndexOffset + n ); + } else { + itemHover = -1; + } + } + + @Override protected void onEnter( ) { + updateHover( ); + } + + @Override protected void onMove( ) { + updateHover( ); + } + + @Override protected void onEndDrag( ) { + updateHover( ); + } + + private int updateHeight( ) { + itemRange = ( PApplet.abs( getHeight( ) ) - ( isBarVisible( ) ? barHeight : 0 ) ) / itemHeight; + return itemHeight * ( items.size( ) < itemRange ? items.size( ) : itemRange ); + } + + public ListBox setItemHeight( int theHeight ) { + itemHeight = theHeight; + updateHeight( ); + return this; + } + + public ListBox setBarHeight( int theHeight ) { + barHeight = theHeight; + updateHeight( ); + return this; + } + + public int getBarHeight( ) { + return barHeight; + } + + public ListBox setScrollSensitivity( float theSensitivity ) { + scrollSensitivity = theSensitivity; + return this; + } + + public ListBox setBarVisible( boolean b ) { + isBarVisible = b; + updateHeight( ); + return this; + } + + public boolean isBarVisible( ) { + return isBarVisible; + } + + private Map< String , Object > getDefaultItemMap( String theName , Object theValue ) { + Map< String , Object > item = new HashMap< String , Object >( ); + item.put( "name" , theName ); + item.put( "text" , theName ); + item.put( "value" , theValue ); + item.put( "color" , getColor( ) ); + item.put( "view" , new CDrawable( ) { + @Override public void draw( PGraphics theGraphics ) { + } + + } ); + item.put( "state" , false ); + return item; + } + + public ListBox addItem( String theName , Object theValue ) { + Map< String , Object > item = getDefaultItemMap( theName , theValue ); + items.add( item ); + return this; + } + + public ListBox addItems( String[] theItems ) { + addItems( Arrays.asList( theItems ) ); + return this; + } + + public ListBox addItems( List< String > theItems ) { + for ( int i = 0 ; i < theItems.size( ) ; i++ ) { + addItem(theItems.get( i ), i ); + } + return this; + } + + public ListBox addItems( Map< String , Object > theItems ) { + for ( Map.Entry< String , Object > item : theItems.entrySet( ) ) { + addItem( item.getKey( ) , item.getValue( ) ); + } + return this; + } + + public ListBox setItems( String[] theItems ) { + setItems( Arrays.asList( theItems ) ); + return this; + } + + public ListBox setItems( List< String > theItems ) { + items.clear( ); + return addItems( theItems ); + } + + public ListBox setItems( Map< String , Object > theItems ) { + items.clear( ); + return addItems( theItems ); + } + + public ListBox removeItems( List< String > theItems ) { + for ( String s : theItems ) { + removeItem( s ); + } + return this; + } + + public ListBox removeItem( String theName ) { + if ( theName != null ) { + + List l = new ArrayList( ); + for ( Map m : items ) { + if ( theName.equals( m.get( "name" ) ) ) { + l.add( m ); + } + } + items.removeAll( l ); + } + return this; + } + + public void updateItemIndexOffset( ) { + int m1 = items.size( ) > itemRange ? ( itemIndexOffset + itemRange ) : items.size( ); + int n = ( m1 - items.size( ) ); + if ( n >= 0 ) { + itemIndexOffset -= n; + } + } + + public Map< String , Object > getItem( int theIndex ) { + return items.get( theIndex ); + } + + public Map< String , Object > getItem( String theName ) { + if ( theName != null ) { + for ( Map< String , Object > o : items ) { + if ( theName.equals( o.get( "name" ) ) ) { + return o; + } + } + } + return Collections.EMPTY_MAP; + } + + public List getItems( ) { + return Collections.unmodifiableList( items ); + } + + public ListBox clear( ) { + for ( int i = items.size( ) - 1 ; i >= 0 ; i-- ) { + items.remove( i ); + } + items.clear( ); + itemIndexOffset = 0; + return this; + } + + @Override public void controlEvent( ControlEvent theEvent ) { + // TODO Auto-generated method stub + } + + public ListBox setBackgroundColor( int theColor ) { + _myBackgroundColor = theColor; + return this; + } + + public int getBackgroundColor( ) { + return _myBackgroundColor; + } + + @Override @ControlP5.Invisible public ListBox updateDisplayMode( int theMode ) { + _myDisplayMode = theMode; + switch ( theMode ) { + case ( DEFAULT ): + _myControllerView = new ListBoxView( ); + break; + case ( IMAGE ): + case ( SPRITE ): + case ( CUSTOM ): + default: + break; + } + return this; + } + + static public class ListBoxView implements ControllerView< ListBox > { + + public void display( PGraphics g , ListBox c ) { + + // setHeight( -200 ); /* UP */ + + g.noStroke( ); + + if ( c.isBarVisible( ) ) { + boolean b = c.itemHover == -1 && c.isInside && !c.isDragged; + g.fill( b ? c.getColor( ).getForeground( ) : c.getColor( ).getBackground( ) ); + g.rect( 0 , 0 , c.getWidth( ) , c.barHeight ); + g.pushMatrix( ); + g.translate( c.getWidth( ) - 8 , c.barHeight / 2 - 2 ); + g.fill( c.getColor( ).getCaptionLabel( ) ); + if ( c.isOpen( ) ) { + g.triangle( -3 , 0 , 3 , 0 , 0 , 3 ); + } else { + g.triangle( -3 , 3 , 3 , 3 , 0 , 0 ); + } + g.popMatrix( ); + + c.getCaptionLabel( ).align( PApplet.LEFT , PApplet.CENTER ).draw( g , 4 , c.barHeight / 2 ); + } + + if ( c.isOpen( ) ) { + int bar = ( c.isBarVisible( ) ? c.barHeight : 0 ); + int h = ( ( c.updateHeight( ) ) ); + g.pushMatrix( ); + // g.translate( 0 , - ( h + bar + + // c.itemSpacing ) ); /* UP */ + g.fill( c.getBackgroundColor( ) ); + g.rect( 0 , bar , c.getWidth( ) , h ); + g.pushMatrix( ); + g.translate( 0 , ( bar == 0 ? 0 : ( c.barHeight + c.itemSpacing ) ) ); + /* draw visible items */ + c.updateItemIndexOffset( ); + int m0 = c.itemIndexOffset; + int m1 = c.items.size( ) > c.itemRange ? ( c.itemIndexOffset + c.itemRange ) : c.items.size( ); + for ( int i = m0 ; i < m1 ; i++ ) { + Map< String , Object > item = c.items.get( i ); + CColor color = ( CColor ) item.get( "color" ); + g.fill( ( ControlP5.b( item.get( "state" ) ) ) ? color.getActive( ) : ( i == c.itemHover ) ? ( c.isMousePressed ? color.getActive( ) : color.getForeground( ) ) : color.getBackground( ) ); + g.rect( 0 , 0 , c.getWidth( ) , c.itemHeight - 1 ); + c.getValueLabel( ).align( PApplet.LEFT , PApplet.CENTER ).set( item.get( "text" ).toString( ) ).draw( g , 4 , c.itemHeight / 2 ); + g.translate( 0 , c.itemHeight ); + } + g.popMatrix( ); + + if ( c.isInside ) { + int m = c.items.size( ) - c.itemRange; + if ( m > 0 ) { + g.fill( c.getColor( ).getCaptionLabel( ) ); + g.pushMatrix( ); + int s = 4; /* spacing */ + int s2 = s / 2; + g.translate( c.getWidth( ) - s , c.barHeight ); + int len = ( int ) PApplet.map( ( float ) Math.log( m * 10 ) , 0 , 10 , h , 0 ); + int pos = ( int ) ( PApplet.map( c.itemIndexOffset , 0 , m , s2 , h - len - s2 ) ); + g.rect( 0 , pos , s2 , len ); + g.popMatrix( ); + } + } + g.popMatrix( ); + } + + } + + } + + public void keyEvent( KeyEvent theKeyEvent ) { + if ( isInside && theKeyEvent.getAction( ) == KeyEvent.PRESS ) { + switch ( theKeyEvent.getKeyCode( ) ) { + case (UP): + scroll( theKeyEvent.isAltDown( ) ? -itemIndexOffset : theKeyEvent.isShiftDown( ) ? -10 : -1 ); + updateHover( ); + break; + case (DOWN): + scroll( theKeyEvent.isAltDown( ) ? items.size( ) - itemRange : theKeyEvent.isShiftDown( ) ? 10 : 1 ); + updateHover( ); + break; + case (LEFT): + break; + case (RIGHT): + break; + case (ENTER): + onRelease( ); + break; + } + } + } + /* TODO keycontrol: arrows, return dragging moving items + * sorting custom view custom event types */ +} diff --git a/controlP5/Matrix.java b/controlP5/Matrix.java new file mode 100755 index 0000000..f2628ff --- /dev/null +++ b/controlP5/Matrix.java @@ -0,0 +1,422 @@ +package main.java.src2.main.java.controlP5.controlP5; + +/** + * controlP5 is a processing gui library. + * + * 2006-2015 by Andreas Schlegel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place, Suite 330, + * Boston, MA 02111-1307 USA + * + * @author Andreas Schlegel (http://www.sojamo.de) + * @modified ##date## + * @version ##version## + * + */ + +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; + +import processing.core.PApplet; +import processing.core.PGraphics; + +/** + * A matrix is a 2d array with a pointer that traverses through the matrix in a timed interval. if + * an item of a matrix-column is active, the x and y position of the corresponding cell will trigger + * an event and notify the program. see the ControlP5matrix example for more information. + * + * @example controllers/ControlP5matrix + */ +public class Matrix extends Controller< Matrix > { + + protected int cnt; + protected int[][] _myCells; + protected int stepX; + protected int stepY; + protected int cellX; + protected int cellY; + protected boolean isPressed; + protected int _myCellX; + protected int _myCellY; + protected int sum; + protected int _myInterval = 100; + protected int currentX = -1; + protected int currentY = -1; + protected int _myMode = SINGLE_ROW; + private Thread t; + protected int gapX = 1; + protected int gapY = 1; + private Object _myPlug; + private String _myPlugName; + private boolean playing = true; + private int bg = 0x00000000; + + /** + * Convenience constructor to extend Matrix. + * + * @example use/ControlP5extendController + * @param theControlP5 + * @param theName + */ + public Matrix( ControlP5 theControlP5 , String theName ) { + this( theControlP5 , theControlP5.getDefaultTab( ) , theName , 10 , 10 , 0 , 0 , 100 , 100 ); + theControlP5.register( theControlP5.papplet , theName , this ); + } + + public Matrix( ControlP5 theControlP5 , ControllerGroup< ? > theParent , String theName , int theCellX , int theCellY , int theX , int theY , int theWidth , int theHeight ) { + super( theControlP5 , theParent , theName , theX , theY , theWidth , theHeight ); + _myInterval = 100; + setGrid( theCellX , theCellY ); + + _myPlug = cp5.papplet; + _myPlugName = getName( ); + _myCaptionLabel.align(LEFT, BOTTOM_OUTSIDE); + _myCaptionLabel.setPadding( 0 , 4 ); + runThread( ); + } + + public Matrix setGrid( int theCellX , int theCellY ) { + _myCellX = theCellX; + _myCellY = theCellY; + sum = _myCellX * _myCellY; + stepX = getWidth( ) / _myCellX; + stepY = getHeight( ) / _myCellY; + _myCells = new int[ _myCellX ][ _myCellY ]; + for ( int x = 0 ; x < _myCellX ; x++ ) { + for ( int y = 0 ; y < _myCellY ; y++ ) { + _myCells[ x ][ y ] = 0; + } + } + return this; + } + + /** + * set the speed of intervals in millis iterating through the matrix. + * + * @param theInterval int + * @return Matrix + */ + + public Matrix setInterval( int theInterval ) { + _myInterval = theInterval; + return this; + } + + public int getInterval( ) { + return _myInterval; + } + + @ControlP5.Invisible public Matrix updateInternalEvents( PApplet theApplet ) { + setIsInside( inside( ) ); + + if ( getIsInside( ) ) { + if ( isPressed ) { + int tX = ( int ) ( ( theApplet.mouseX - x( position ) ) / stepX ); + int tY = ( int ) ( ( theApplet.mouseY - y( position ) ) / stepY ); + + if ( tX != currentX || tY != currentY ) { + tX = PApplet.min( PApplet.max( 0 , tX ) , _myCellX ); + tY = PApplet.min( PApplet.max( 0 , tY ) , _myCellY ); + boolean isMarkerActive = _myCells[tX][tY] == 1; + switch ( _myMode ) { + default: + case ( SINGLE_COLUMN ): + for ( int i = 0 ; i < _myCellY ; i++ ) { + _myCells[ tX ][ i ] = 0; + } + _myCells[ tX ][ tY ] = ( !isMarkerActive ) ? 1 : _myCells[ tX ][ tY ]; + break; + case ( SINGLE_ROW ): + for ( int i = 0 ; i < _myCellY ; i++ ) { + _myCells[ tX ][ i ] = 0; + } + _myCells[ tX ][ tY ] = ( !isMarkerActive ) ? 1 : _myCells[ tX ][ tY ]; + break; + case ( MULTIPLES ): + _myCells[ tX ][ tY ] = ( _myCells[ tX ][ tY ] == 1 ) ? 0 : 1; + break; + } + currentX = tX; + currentY = tY; + } + } + } + return this; + } + + protected void onEnter( ) { + isActive = true; + } + + protected void onLeave( ) { + isActive = false; + } + + @ControlP5.Invisible public void mousePressed( ) { + isActive = getIsInside( ); + if ( getIsInside( ) ) { + isPressed = true; + } + } + + protected void mouseReleasedOutside( ) { + mouseReleased( ); + } + + @ControlP5.Invisible public void mouseReleased( ) { + if ( isActive ) { + isActive = false; + } + isPressed = false; + currentX = -1; + currentY = -1; + } + + @Override public Matrix setValue( float theValue ) { + _myValue = theValue; + broadcast( FLOAT ); + return this; + } + + public Matrix play( ) { + playing = true; + return this; + } + + public boolean isPlaying( ) { + return playing; + } + + public Matrix pause( ) { + playing = false; + return this; + } + + public Matrix stop( ) { + playing = false; + cnt = 0; + return this; + } + + public Matrix trigger( int theColumn ) { + + if ( theColumn < 0 || theColumn >= _myCells.length ) { + return this; + } + + for ( int i = 0 ; i < _myCellY ; i++ ) { + if ( _myCells[ theColumn ][ i ] == 1 ) { + _myValue = 0; + _myValue = ( theColumn << 0 ) + ( i << 8 ); + setValue( _myValue ); + /* TODO remove printStack and replace with Logger */ + try { + Method method = _myPlug.getClass( ).getMethod( _myPlugName , int.class , int.class ); + method.setAccessible( true ); + method.invoke( _myPlug , theColumn , i ); + } catch ( SecurityException ex ) { + ex.printStackTrace( ); + } catch ( NoSuchMethodException ex ) { + //ex.printStackTrace( ); + } catch ( IllegalArgumentException ex ) { + ex.printStackTrace( ); + } catch ( IllegalAccessException ex ) { + ex.printStackTrace( ); + } catch ( InvocationTargetException ex ) { + ex.printStackTrace( ); + } + } + } + return this; + } + + @Override public Matrix update( ) { + return setValue( _myValue ); + } + + public Matrix setGap( int theX , int theY ) { + gapX = theX; + gapY = theY; + return this; + } + + public Matrix plugTo( Object theObject ) { + _myPlug = theObject; + return this; + } + + public Matrix plugTo( Object theObject , String thePlugName ) { + _myPlug = theObject; + _myPlugName = thePlugName; + return this; + } + + /** + * set the state of a particular cell inside a matrix. use true or false for parameter theValue + * + * @param theX + * @param theY + * @param theValue + * @return Matrix + */ + public Matrix set( int theX , int theY , boolean theValue ) { + _myCells[ theX ][ theY ] = (theValue) ? 1 : 0; + return this; + } + + public boolean get( int theX , int theY ) { + return _myCells[theX][theY] == 1; + } + + public Matrix clear( ) { + for ( int x = 0 ; x < _myCells.length ; x++ ) { + for ( int y = 0 ; y < _myCells[ x ].length ; y++ ) { + _myCells[ x ][ y ] = 0; + } + } + return this; + } + + public static int getX( int thePosition ) { + return ( ( thePosition >> 0 ) & 0xff ); + } + + public static int getY( int thePosition ) { + return ( ( thePosition >> 8 ) & 0xff ); + } + + public static int getX( float thePosition ) { + return ( ( ( int ) thePosition >> 0 ) & 0xff ); + } + + public static int getY( float thePosition ) { + return ( ( ( int ) thePosition >> 8 ) & 0xff ); + } + + public Matrix setCells( int[][] theCells ) { + setGrid( theCells.length , theCells[ 0 ].length ); + _myCells = theCells; + return this; + } + + public int[][] getCells( ) { + return _myCells; + } + + private void triggerEventFromThread( ) { + if ( playing ) { + cnt += 1; + cnt %= _myCellX; + trigger( cnt ); + } + } + + private void runThread( ) { + if ( t == null ) { + t = new Thread( getName( ) ) { + + public void run( ) { + while ( true ) { + triggerEventFromThread( ); + try { + Thread.sleep( _myInterval ); + } catch ( InterruptedException e ) { + // throw new RuntimeException(e); + } + } + } + }; + t.start( ); + } + } + + @Override public void remove( ) { + if ( t != null ) { + t.interrupt( ); + } + super.remove( ); + } + + /** + * use setMode to change the cell-activation which by default is ControlP5.SINGLE_ROW, 1 active + * cell per row, but can be changed to ControlP5.SINGLE_COLUMN or ControlP5.MULTIPLES + * + * @param theMode return Matrix + */ + public Matrix setMode( int theMode ) { + _myMode = theMode; + return this; + } + + public int getMode( ) { + return _myMode; + } + + public Matrix setBackground( int c ) { + bg = 0x00000000; + if ( ( c >> 24 & 0xff ) > 0 ) { + bg = ( c >> 24 ) << 24 | ( c >> 16 ) << 16 | ( c >> 8 ) << 8 | ( c >> 0 ) << 0; + } + return this; + } + + @Override @ControlP5.Invisible public Matrix updateDisplayMode( int theMode ) { + _myDisplayMode = theMode; + switch ( theMode ) { + case ( DEFAULT ): + _myControllerView = new MatrixView( ); + break; + case ( IMAGE ): + case ( SPRITE ): + case ( CUSTOM ): + default: + break; + } + return this; + } + + class MatrixView implements ControllerView< Matrix > { + + public void display( PGraphics theGraphics , Matrix theController ) { + theGraphics.noStroke( ); + theGraphics.fill( bg ); + theGraphics.rect( 0 , 0 , getWidth( ) , getHeight( ) ); + + float gx = gapX / 2; + float gy = gapY / 2; + for ( int x = 0 ; x < _myCellX ; x++ ) { + for ( int y = 0 ; y < _myCellY ; y++ ) { + + theGraphics.fill( _myCells[ x ][ y ] == 1 ? color.getActive( ) : color.getBackground( ) ); + theGraphics.rect( x * stepX + gx , y * stepY + gy , stepX - gapX , stepY - gapY ); + } + } + if ( isInside( ) ) { + // TODO + // int x = (int) ((theGraphics.mouseX - position.x) / stepX); + // int y = (int) ((theGraphics.mouseY - position.y) / stepY); + // if (x >= 0 && x < _myCellX && y >= 0 && y < _myCellY) { + // theGraphics.fill(_myCells[x][y] == 1 ? color.getActive() : + // color.getForeground()); + // theGraphics.rect(x * stepX, y * stepY, stepX - gapX, stepY - gapY); + // } + } + theGraphics.fill( color.getActive( ) ); + theGraphics.rect( cnt * stepX , 0 , 1 , getHeight( ) - gapY ); + if ( isLabelVisible ) { + _myCaptionLabel.draw( theGraphics , 0 , 0 , theController ); + } + } + } +} diff --git a/controlP5/MultiList.java b/controlP5/MultiList.java new file mode 100755 index 0000000..db192ea --- /dev/null +++ b/controlP5/MultiList.java @@ -0,0 +1,270 @@ +package main.java.src2.main.java.controlP5.controlP5; + +/** + * controlP5 is a processing gui library. + * + * 2006-2015 by Andreas Schlegel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place, Suite 330, + * Boston, MA 02111-1307 USA + * + * @author Andreas Schlegel (http://www.sojamo.de) + * @modified ##date## + * @version ##version## + * + */ + +import processing.core.PApplet; +import processing.core.PGraphics; + +/** + * A Multilist is a multi-menu-tree controller. see the example for more information and how to use. + * + * @example controllers/ControlP5multiList + * + * TODO is currently broken, is this due to replacing PVector with float[]? + * + */ +public class MultiList extends Controller< MultiList > implements MultiListInterface , ControlListener { + + /* TODO reflection does not work properly. TODO add an option to remove MultiListButtons */ + + protected Tab _myTab; + protected boolean isVisible = true; + private int cnt; + protected boolean isOccupied; + protected boolean isUpdateLocation = false; + protected MultiListInterface mostRecent; + protected int[] _myRect = new int[ 4 ]; + protected int _myDirection = ControlP5Constants.RIGHT; + public int closeDelay = 30; + protected int _myDefaultButtonHeight = 10; + protected boolean isUpperCase = true; + + /** + * Convenience constructor to extend MultiList. + * + * @example use/ControlP5extendController + * @param theControlP5 + * @param theName + */ + public MultiList( ControlP5 theControlP5 , String theName ) { + this( theControlP5 , theControlP5.getDefaultTab( ) , theName , 0 , 0 , 99 , 19 ); + theControlP5.register( theControlP5.papplet , theName , this ); + } + + public MultiList( ControlP5 theControlP5 , Tab theParent , String theName , int theX , int theY , int theWidth , int theHeight ) { + super( theControlP5 , theParent , theName , theX , theY , theWidth , 0 ); + _myDefaultButtonHeight = theHeight; + setup( ); + } + + public MultiList toUpperCase( boolean theValue ) { + isUpperCase = theValue; + for ( Controller c : getSubelements( ) ) { + c.getCaptionLabel( ).toUpperCase( isUpperCase ); + } + return this; + } + + @ControlP5.Invisible public void setup( ) { + mostRecent = this; + isVisible = true; + updateRect( Controller.x( position ) , Controller.y( position ) , getWidth( ) , _myDefaultButtonHeight ); + } + + protected void updateRect( float theX , float theY , float theW , float theH ) { + _myRect = new int[] { ( int ) theX , ( int ) theY , ( int ) theW , ( int ) theH }; + } + + public int getDirection( ) { + return _myDirection; + } + + /** + * TODO does not work. + * + * @param theDirection + */ + void setDirection( int theDirection ) { + _myDirection = ( theDirection == ControlP5Constants.LEFT ) ? ControlP5Constants.LEFT : ControlP5Constants.RIGHT; + for ( int i = 0 ; i < getSubelements( ).size( ) ; i++ ) { + ( ( MultiListButton ) getSubelements( ).get( i ) ).setDirection( _myDirection ); + } + } + + /** + * @param theX + * float + * @param theY + * float + */ + @ControlP5.Invisible public void updateLocation( float theX , float theY ) { + Controller.set( position , theX , theY ); + updateRect( Controller.x( position ) , Controller.y( position ) , getWidth( ) , _myDefaultButtonHeight ); + for ( int i = 0 ; i < getSubelements( ).size( ) ; i++ ) { + ( ( MultiListInterface ) getSubelements( ).get( i ) ).updateLocation( theX , theY ); + } + + } + + /** + * removes the multilist. + */ + public void remove( ) { + super.remove( ); + for ( int i = 0 ; i < getSubelements( ).size( ) ; i++ ) { + getSubelements( ).get( i ).removeListener( this ); + getSubelements( ).get( i ).remove( ); + } + } + + /** + * adds multilist buttons to the multilist. + * + * @param theName + * String + * @param theValue + * int + * @return MultiListButton + */ + public MultiListButton add( String theName , int theValue ) { + int x = ( int ) Controller.x( position ); + int yy = 0; + for ( Controller< ? > c : getSubelements( ) ) { + yy += c.getHeight( ) + 1; + } + int y = ( int ) Controller.y( position ) + yy;// (_myDefaultButtonHeight + 1) * _myChildren.size(); + MultiListButton b = new MultiListButton( cp5 , theName , theValue , x , y , getWidth( ) , _myDefaultButtonHeight , this , this ); + b.toUpperCase( isUpperCase ); + b.isMoveable = false; + cp5.register( null , "" , b ); + b.addListener( this ); + getSubelements( ).add( b ); + b.show( ); + updateRect( Controller.x( position ) , Controller.y( position ) , getWidth( ) , ( _myDefaultButtonHeight + 1 ) * getSubelements( ).size( ) ); + return b; + } + + /** + * @param theEvent + */ + @Override @ControlP5.Invisible public void controlEvent( ControlEvent theEvent ) { + if ( theEvent.getController( ) instanceof MultiListButton ) { + _myValue = theEvent.getController( ).getValue( ); + ControlEvent myEvent = new ControlEvent( this ); + cp5.getControlBroadcaster( ).broadcast( myEvent , ControlP5Constants.FLOAT); + } + } + + /** + * {@inheritDoc} + */ + @Override @ControlP5.Invisible public void draw( PGraphics theGraphics ) { + super.draw( theGraphics ); + // TODO update( theGraphics ); + } + + /** + * + * @param theApplet + * @return boolean + */ + @ControlP5.Invisible public boolean update( PApplet theApplet ) { + if ( !isOccupied ) { + cnt++; + if ( cnt == closeDelay ) { + close( ); + } + } + + if ( isUpdateLocation ) { + updateLocation( ( _myControlWindow.mouseX - _myControlWindow.pmouseX ) , ( _myControlWindow.mouseY - _myControlWindow.pmouseY ) ); + isUpdateLocation = theApplet.mousePressed; + } + + if ( isOccupied ) { + if ( theApplet.keyPressed && theApplet.mousePressed ) { + if ( theApplet.keyCode == PApplet.ALT ) { + isUpdateLocation = true; + return true; + } + } + } + return false; + } + + /** + * + * @param theFlag + * boolean + */ + @ControlP5.Invisible public void occupied( boolean theFlag ) { + isOccupied = theFlag; + cnt = 0; + } + + /** + * @return boolean + */ + @ControlP5.Invisible public boolean observe( ) { + return CP.inside( _myRect , _myControlWindow.mouseX , _myControlWindow.mouseY ); + } + + /** + * @param theInterface + * MultiListInterface + */ + public void close( MultiListInterface theInterface ) { + for ( int i = 0 ; i < getSubelements( ).size( ) ; i++ ) { + if ( theInterface != getSubelements( ).get( i )) { + ( ( MultiListInterface ) getSubelements( ).get( i ) ).close( ); + } + } + + } + + /** + * {@inheritDoc} + */ + @Override public void close( ) { + for ( int i = 0 ; i < getSubelements( ).size( ) ; i++ ) { + ( ( MultiListInterface ) getSubelements( ).get( i ) ).close( ); + } + } + + /** + * {@inheritDoc} + */ + @Override public void open( ) { + for ( int i = 0 ; i < getSubelements( ).size( ) ; i++ ) { + ( ( MultiListInterface ) getSubelements( ).get( i ) ).open( ); + } + } + + /** + * {@inheritDoc} + */ + @Override public MultiList setValue( float theValue ) { + return this; + } + + /** + * {@inheritDoc} + */ + @Override public MultiList update( ) { + return setValue( _myValue ); + } + +} diff --git a/controlP5/MultiListButton.java b/controlP5/MultiListButton.java new file mode 100755 index 0000000..21733d9 --- /dev/null +++ b/controlP5/MultiListButton.java @@ -0,0 +1,223 @@ +package main.java.src2.main.java.controlP5.controlP5; + +/** + * controlP5 is a processing gui library. + * + * 2006-2015 by Andreas Schlegel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place, Suite 330, + * Boston, MA 02111-1307 USA + * + * @author Andreas Schlegel (http://www.sojamo.de) + * @modified ##date## + * @version ##version## + * + */ + +/** + * Used by MultiList. + * + * @example controllers/ControlP5multiList + * @nosuperclasses Controller Controller + */ +public class MultiListButton extends Button implements MultiListInterface { + + // private MultiListInterface parent; + + private final Controller parent; + private final MultiList root; + private int[] _myRect = new int[ 4 ]; + protected int _myDirection = RIGHT; + private boolean isUpperCase = true; + + /** + * + * @param theProperties ControllerProperties + * @param theParent MultiListInterface + * @param theRoot MultiList + */ + protected MultiListButton( ControlP5 theControlP5 , String theName , float theValue , int theX , int theY , int theWidth , int theHeight , Controller theParent , MultiList theRoot ) { + super( theControlP5 , ( ControllerGroup< ? > ) theRoot.getParent( ) , theName , theValue , theX , theY , theWidth , theHeight ); + parent = theParent; + root = theRoot; + updateRect( x( position ) , y( position ) , getWidth( ) , getHeight( ) ); + _myCaptionLabel.align( LEFT , CENTER ); + } + + public MultiListButton toUpperCase( boolean theValue ) { + isUpperCase = theValue; + for ( Controller< ? > c : getSubelements( ) ) { + c.getCaptionLabel( ).toUpperCase( isUpperCase ); + } + _myCaptionLabel.toUpperCase( isUpperCase ); + return this; + } + + public void remove( ) { + int myYoffset = 0; + for ( int i = 0 ; i < parent.getSubelements( ).size( ) ; i++ ) { + if ( parent.getSubelements( ).get( i ) == this ) { + myYoffset = getHeight( ) + 1; + } + ( ( MultiListButton ) parent.getSubelements( ).get( i ) ).updateLocation( 0 , -myYoffset ); + } + + if ( _myParent != null ) { + removeListener( root ); + _myParent.remove( this ); + } + if ( cp5 != null ) { + removeListener( root ); + cp5.remove( this ); + } + for ( int i = 0 ; i < getSubelements( ).size( ) ; i++ ) { + getSubelements( ).get( i ).remove( ); + } + } + + public int getDirection( ) { + return _myDirection; + } + + protected void setDirection( int theDirection ) { + _myDirection = theDirection; + } + + public void updateRect( float theX , float theY , float theW , float theH ) { + _myRect = new int[] { ( int ) theX , ( int ) theY , ( int ) theW , ( int ) theH }; + } + + public void updateLocation( float theX , float theY ) { + set( position , theX , theY ); + updateRect( x( position ) , y( position ) , getWidth( ) , getHeight( ) ); + for ( int i = 0 ; i < getSubelements( ).size( ) ; i++ ) { + ( ( MultiListInterface ) getSubelements( ).get( i ) ).updateLocation( theX , theY ); + } + } + + /** + * set the width of a multlist button. + * + * @param theWidth int + */ + public MultiListButton setWidth( int theWidth ) { + // negative direction + int dif = ( _myDirection == LEFT ) ? theWidth - getWidth( ) : 0; + super.setWidth( theWidth ); + updateLocation( -dif , 0 ); + return this; + } + + /** + * set the height of a multlist button. + * + * @param theHeight int + */ + public MultiListButton setHeight( int theHeight ) { + int difHeight = getHeight( ); + super.setHeight( theHeight ); + difHeight = getHeight( ) - difHeight; + int myYoffset = 0; + for ( int i = 0 ; i < parent.getSubelements( ).size( ) ; i++ ) { + if ( parent.getSubelements( ).get( i ) instanceof MultiListInterface ) { + ( ( MultiListInterface ) parent.getSubelements( ).get( i ) ).updateLocation( 0 , myYoffset ); + if ( ( parent.getSubelements( ).get( i ) ) == this ) { + myYoffset = difHeight; + } + } + } + updateLocation( 0 , 0 ); + return this; + } + + /** + * add a new button to the sublist of this multilist button. + * + * @param theName String + * @param theValue int + * @return MultiListButton + */ + public MultiListButton add( String theName , float theValue ) { + int myHeight = - ( getHeight( ) + 1 ); + for ( int i = 0 ; i < getSubelements( ).size( ) ; i++ ) { + myHeight += ( getSubelements( ).get( i ) ).getHeight( ) + 1; + } + // negative direction, this is static now, make it dynamic depending on + // the + // location of the list. + int xx = ( ( int ) x( position ) + ( getWidth( ) + 1 ) ); + MultiListButton b = new MultiListButton( cp5 , theName , theValue , xx , ( int ) y( position ) + ( getHeight( ) + 1 ) + myHeight , getWidth( ), getHeight( ), this , root ); + b.isMoveable = false; + b.toUpperCase( isUpperCase ); + b.hide( ); + cp5.register( null , "" , b ); + b.addListener( root ); + getSubelements( ).add( b ); + updateRect( xx , y( position ) , getWidth( ) , ( getHeight( ) + 1 ) + myHeight ); + return b; + } + + protected void onEnter( ) { + if ( !root.isUpdateLocation ) { + isActive = true; + root.occupied( true ); + root.mostRecent = this; + if ( parent instanceof MultiListInterface ) { + ( ( MultiListInterface ) parent ).close( this ); + } + open( ); + } + } + + protected void onLeave( ) { + if ( parent instanceof MultiListInterface ) { + if ( ! ( ( MultiListInterface ) parent ).observe( ) && !root.isUpdateLocation && root.mostRecent == this ) { + isActive = false; + root.occupied( false ); + } + } + } + + public void mouseReleasedOutside( ) { + // !!! other than in the Button class, calling mouseReleased here + // conflicts with mouseReleased(); + } + + public boolean observe( ) { + return CP.inside( _myRect , _myControlWindow.mouseX , _myControlWindow.mouseY ); + } + + public void close( MultiListInterface theInterface ) { + for ( int i = 0 ; i < getSubelements( ).size( ) ; i++ ) { + if ( theInterface != getSubelements( ).get( i )) { + ( ( MultiListInterface ) getSubelements( ).get( i ) ).close( ); + } + } + + } + + public void close( ) { + for ( int i = 0 ; i < getSubelements( ).size( ) ; i++ ) { + ( ( MultiListButton ) getSubelements( ).get( i ) ).close( ); + ( ( MultiListButton ) getSubelements( ).get( i ) ).hide( ); + } + } + + public void open( ) { + for ( int i = 0 ; i < getSubelements( ).size( ) ; i++ ) { + ( ( MultiListButton ) getSubelements( ).get( i ) ).show( ); + } + } + +} diff --git a/controlP5/MultiListInterface.java b/controlP5/MultiListInterface.java new file mode 100755 index 0000000..eaaa1f9 --- /dev/null +++ b/controlP5/MultiListInterface.java @@ -0,0 +1,48 @@ +package main.java.src2.main.java.controlP5.controlP5; + +/** + * controlP5 is a processing gui library. + * + * 2006-2015 by Andreas Schlegel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place, Suite 330, + * Boston, MA 02111-1307 USA + * + * @author Andreas Schlegel (http://www.sojamo.de) + * @modified ##date## + * @version ##version## + * + */ + +import processing.core.PGraphics; + +interface MultiListInterface { + + void close( ); + + void open( ); + + void close( MultiListInterface theInterface ); + + boolean observe( ); + + void updateLocation( float theX , float theY ); + + void draw( PGraphics theGraphics ); + + int getDirection( ); + + MultiListInterface toUpperCase( boolean theValue ); + +} diff --git a/controlP5/MultilineTextfield.java b/controlP5/MultilineTextfield.java new file mode 100644 index 0000000..37eb17e --- /dev/null +++ b/controlP5/MultilineTextfield.java @@ -0,0 +1,26 @@ +package main.java.src2.main.java.controlP5.controlP5; + +import processing.event.KeyEvent; + +public class MultilineTextfield extends Textfield { + + public MultilineTextfield(ControlP5 theControlP5, String theName) { + super(theControlP5, theName); + } + + @Override + public void keyEvent(KeyEvent theKeyEvent) { + if (isUserInteraction && isTexfieldActive && isActive && theKeyEvent.getAction() == KeyEvent.PRESS) { + if (ignorelist.contains(cp5.getKeyCode())) { + return; + } + if (cp5.getKeyCode() == ENTER) { + // Append a new line character to the text buffer + _myTextBuffer.insert(_myTextBufferIndex, '\n'); + setIndex(_myTextBufferIndex + 1); + } else { + super.keyEvent(theKeyEvent); + } + } + } +} diff --git a/controlP5/Numberbox.java b/controlP5/Numberbox.java new file mode 100755 index 0000000..dfca762 --- /dev/null +++ b/controlP5/Numberbox.java @@ -0,0 +1,302 @@ +package main.java.src2.main.java.controlP5.controlP5; + +/** + * controlP5 is a processing gui library. + * + * 2006-2015 by Andreas Schlegel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place, Suite 330, + * Boston, MA 02111-1307 USA + * + * @author Andreas Schlegel (http://www.sojamo.de) + * @modified ##date## + * @version ##version## + * + */ + +import processing.core.PApplet; +import processing.core.PGraphics; + +/** + * Click and drag the mouse inside a numberbox and move up and down to change the value of a + * numberbox. By default the value changes when dragging the mouse up and down. use + * setDirection(Controller.HORIZONTAL) to change the mouse control to left and right. + * + * Why do I get -1000000 as initial value when creating a numberbox without a default value? the + * value of a numberbox defaults back to its minValue, which is -1000000. either use a default value + * or link a variable to the numberbox - this is done by giving a float or int variable the same + * name as the numberbox. + * + * Use setMultiplier(float) to change the sensitivity of values increasing/decreasing, by default + * the multiplier is 1. + * + * + * @example controllers/ControlP5numberbox + * @nosuperclasses Controller Controller + */ +public class Numberbox extends Controller< Numberbox > { + + protected int cnt; + protected boolean isActive; + public static int LEFT = 0; + public static int UP = 1; + public static int RIGHT = 2; + public static int DOWN = 3; + protected int _myNumberCount = VERTICAL; + protected float _myMultiplier = 1; + public static int autoWidth = 69; + public static int autoHeight = 19; + protected float[] autoSpacing = new float[] { 10 , 20 }; + protected float scrollSensitivity = 0.1f; + + /** + * Convenience constructor to extend Numberbox. + * + * @example use/ControlP5extendController + * @param theControlP5 + * @param theName + */ + public Numberbox( ControlP5 theControlP5 , String theName ) { + this( theControlP5 , theControlP5.getDefaultTab( ) , theName , 0 , 0 , 0 , autoWidth , autoHeight ); + theControlP5.register( theControlP5.papplet , theName , this ); + } + + /** + * + * @param theControlP5 ControlP5 + * @param theParent Tab + * @param theName String + * @param theDefaultValue float + * @param theX int + * @param theY int + * @param theWidth int + * @param theHeight int + */ + public Numberbox( ControlP5 theControlP5 , Tab theParent , String theName , float theDefaultValue , int theX , int theY , int theWidth , int theHeight ) { + super( theControlP5 , theParent , theName , theX , theY , theWidth , theHeight ); + _myMin = -Float.MAX_VALUE; + _myMax = Float.MAX_VALUE; + _myValue = theDefaultValue; + _myValueLabel = new Label( cp5 , String.valueOf(_myValue), theWidth , 12 , color.getValueLabel( ) ); + if ( Float.isNaN( _myValue ) ) { + _myValue = 0; + } + } + + /* (non-Javadoc) + * + * @see ControllerInterfalce.updateInternalEvents */ + @ControlP5.Invisible + public Numberbox updateInternalEvents( PApplet theApplet ) { + if ( isActive ) { + if ( !cp5.isAltDown( ) ) { + if ( _myNumberCount == VERTICAL ) { + setValue( _myValue + ( _myControlWindow.mouseY - _myControlWindow.pmouseY ) * _myMultiplier ); + } else { + setValue( _myValue + ( _myControlWindow.mouseX - _myControlWindow.pmouseX ) * _myMultiplier ); + } + } + } + return this; + } + + /* (non-Javadoc) + * + * @see main.java.src2.main.java.controlP5.controlp5.Controller#mousePressed() */ + @Override + @ControlP5.Invisible + public void mousePressed( ) { + isActive = true; + } + + /* (non-Javadoc) + * + * @see main.java.src2.main.java.controlP5.controlp5.Controller#mouseReleased() */ + @Override + @ControlP5.Invisible + public void mouseReleased( ) { + isActive = false; + } + + /* (non-Javadoc) + * + * @see main.java.src2.main.java.controlP5.controlp5.Controller#mouseReleasedOutside() */ + @Override + @ControlP5.Invisible + public void mouseReleasedOutside( ) { + mouseReleased( ); + } + + /** + * + * @param theMultiplier + * @return Numberbox + */ + public Numberbox setMultiplier( float theMultiplier ) { + _myMultiplier = theMultiplier; + return this; + } + + /** + * + * @return float + */ + public float getMultiplier( ) { + return _myMultiplier; + } + + /** + * set the value of the numberbox. + * + * @param theValue float + * @return Numberbox + */ + @Override + public Numberbox setValue( float theValue ) { + _myValue = theValue; + _myValue = Math.max( _myMin , Math.min( _myMax , _myValue ) ); + broadcast( FLOAT ); + _myValueLabel.set( adjustValue( _myValue ) ); + return this; + } + + /** + * assigns a random value to the controller. + * + * @return Numberbox + */ + public Numberbox shuffle( ) { + float r = ( float ) Math.random( ); + if ( getMax( ) != Float.MAX_VALUE && getMin( ) != -Float.MAX_VALUE ) { + setValue( PApplet.map( r , 0 , 1 , getMin( ) , getMax( ) ) ); + } + return this; + } + + public Numberbox setRange( float theMin , float theMax ) { + setMin( theMin ); + setMax( theMax ); + setValue( getValue( ) ); + return this; + } + + /** + * sets the sensitivity for the scroll behavior when using the mouse wheel or the scroll + * function of a multi-touch track pad. The smaller the value (closer to 0) the higher the + * sensitivity. + * + * @param theValue + * @return Numberbox + */ + public Numberbox setScrollSensitivity( float theValue ) { + scrollSensitivity = theValue; + return this; + } + + /** + * changes the value of the numberbox when hovering and using the mouse wheel or the scroll + * function of a multi-touch track pad. + * + * @param theRotationValue + * @return Numberbox + */ + @ControlP5.Invisible + public Numberbox scrolled( int theRotationValue ) { + float f = getValue( ); + f += ( _myMultiplier == 1 ) ? ( theRotationValue * scrollSensitivity ) : theRotationValue * _myMultiplier; + setValue( f ); + return this; + } + + /** + * set the direction for changing the numberbox value when dragging the mouse. by default this + * is up/down (VERTICAL), use setDirection(Controller.HORIZONTAL) to change to left/right or + * back with setDirection(Controller.VERTICAL). + * + * @param theValue + */ + public Numberbox setDirection( int theValue ) { + if ( theValue == HORIZONTAL || theValue == VERTICAL ) { + _myNumberCount = theValue; + } else { + _myNumberCount = VERTICAL; + } + return this; + } + + /* (non-Javadoc) + * + * @see main.java.src2.main.java.controlP5.controlp5.Controller#update() */ + @Override + public Numberbox update( ) { + return setValue( _myValue ); + } + + /** + * {@inheritDoc} + */ + @Override + public Numberbox linebreak( ) { + cp5.linebreak( this , true , autoWidth , autoHeight , autoSpacing ); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + @ControlP5.Invisible + public Numberbox updateDisplayMode( int theMode ) { + _myDisplayMode = theMode; + switch ( theMode ) { + case ( DEFAULT ): + _myControllerView = new NumberboxView( ); + case ( SPRITE ): + case ( IMAGE ): + case ( CUSTOM ): + default: + break; + } + return this; + } + + class NumberboxView implements ControllerView< Numberbox > { + + NumberboxView( ) { + _myValueLabel.align( LEFT , CENTER ).setPadding( 0 , Label.paddingY ); + _myCaptionLabel.align( LEFT , BOTTOM_OUTSIDE ).setPadding( 0 , Label.paddingY ); + } + + public void display( PGraphics theGraphics , Numberbox theController ) { + theGraphics.fill( color.getBackground( ) ); + theGraphics.rect( 0 , 0 , getWidth() , getHeight() ); + theGraphics.fill( ( isActive ) ? color.getActive( ) : color.getForeground( ) ); + int h = getHeight() / 2; + theGraphics.triangle( 0 , h - 6 , 6 , h , 0 , h + 6 ); + _myValueLabel.draw( theGraphics , 10 , 0 , theController ); + _myCaptionLabel.draw( theGraphics , 0 , 0 , theController ); + } + } + + /** + * @see Numberbox#setScrollSensitivity(float) + * + * @param theValue + * @return + */ + @Deprecated + public Numberbox setSensitivity( float theValue ) { + return setScrollSensitivity( theValue ); + } +} diff --git a/controlP5/Pad.java b/controlP5/Pad.java new file mode 100755 index 0000000..ea78e2c --- /dev/null +++ b/controlP5/Pad.java @@ -0,0 +1,31 @@ +package main.java.src2.main.java.controlP5.controlP5; + +/** + * controlP5 is a processing gui library. + * + * 2006-2015 by Andreas Schlegel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place, Suite 330, + * Boston, MA 02111-1307 USA + * + * @author Andreas Schlegel (http://www.sojamo.de) + * @modified ##date## + * @version ##version## + * + */ + +class Pad { + // pad for placing controllers, like matrix but without the grid + // a sequencer +} diff --git a/controlP5/Pointer.java b/controlP5/Pointer.java new file mode 100755 index 0000000..dcb9d4a --- /dev/null +++ b/controlP5/Pointer.java @@ -0,0 +1,47 @@ +package main.java.src2.main.java.controlP5.controlP5; + +/** + * controlP5 is a processing gui library. + * + * 2006-2015 by Andreas Schlegel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place, Suite 330, + * Boston, MA 02111-1307 USA + * + * @author Andreas Schlegel (http://www.sojamo.de) + * @modified ##date## + * @version ##version## + * + */ + +public interface Pointer { + + int x(); + + int y(); + + int px(); + + int py(); + + int dx(); + + int dy(); + + long pt(); + + long dt(); + + long t(); +} diff --git a/controlP5/Println.java b/controlP5/Println.java new file mode 100755 index 0000000..2726ab1 --- /dev/null +++ b/controlP5/Println.java @@ -0,0 +1,108 @@ + +package main.java.src2.main.java.controlP5.controlP5; + +/** + * controlP5 is a processing gui library. + * + * 2006-2015 by Andreas Schlegel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place, Suite 330, + * Boston, MA 02111-1307 USA + * + * @author Andreas Schlegel (http://www.sojamo.de) + * @modified ##date## + * @version ##version## + * + */ + +import java.io.IOException; +import java.io.PipedInputStream; +import java.io.PipedOutputStream; +import java.io.PrintStream; + +public class Println { + + int max = -1; + + final Textarea c; + + String buffer = ""; + + boolean paused; + + + public Println(Textarea theTextarea) { + c = theTextarea; + run(); + } + + + public Println setMax(int theMax) { + max = theMax; + return this; + } + + + private void run() { + try { + final PipedInputStream pi = new PipedInputStream(); + final PipedOutputStream po = new PipedOutputStream(pi); + System.setOut(new PrintStream(po, true)); + + (new Thread() { + + public void run() { + final byte[] buf = new byte[1024]; + try { + while (true) { + final int len = pi.read(buf); + if (len == -1) { + break; + } + if (!paused) { + if (!c._myScrollbar.isMousePressed) { + c.append(buffer + new String(buf, 0, len), max); + buffer = ""; + c.scroll(1); + } + else { + buffer += new String(buf, 0, len); + } + } + } + } catch (IOException e) { + } + } + }).start(); + } catch (IOException e) { + System.out.println("Problems setting up console"); + } + } + + + public void clear() { + c.clear(); + } + + + public void pause() { + paused = true; + } + + + public void play() { + paused = false; + } + +} diff --git a/controlP5/Radio.java b/controlP5/Radio.java new file mode 100755 index 0000000..1c6bc4d --- /dev/null +++ b/controlP5/Radio.java @@ -0,0 +1,39 @@ +package main.java.src2.main.java.controlP5.controlP5; + +/** + * controlP5 is a processing gui library. + * + * 2006-2015 by Andreas Schlegel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place, Suite 330, + * Boston, MA 02111-1307 USA + * + * @author Andreas Schlegel (http://www.sojamo.de) + * @modified ##date## + * @version ##version## + * + */ + +/* + * Backwards compatibility, cp5magic for example uses it. + * But if possible, upgrade to RadioButton + */ + +public class Radio extends RadioButton { + + public Radio( ControlP5 theControlP5 , ControllerGroup< ? > theParent , String theName , int theX , int theY ) { + super( theControlP5 , theParent , theName , theX , theY ); + } + +} diff --git a/controlP5/RadioButton.java b/controlP5/RadioButton.java new file mode 100755 index 0000000..a474e81 --- /dev/null +++ b/controlP5/RadioButton.java @@ -0,0 +1,643 @@ +package main.java.src2.main.java.controlP5.controlP5; + +/** + * controlP5 is a processing gui library. + * + * 2006-2015 by Andreas Schlegel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place, Suite 330, + * Boston, MA 02111-1307 USA + * + * @author Andreas Schlegel (http://www.sojamo.de) + * @modified ##date## + * @version ##version## + * + */ + +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.List; + +import processing.core.PImage; + +/** + * A radioButton is a list of toggles that can be turned on or off. radioButton is of type + * ControllerGroup, therefore a controllerPlug can't be set. this means that an event from a + * radioButton can't be forwarded to a method other than controlEvent in a sketch. + * + * a radioButton has 2 sets of values. radioButton.getValue() returns the value of the active + * radioButton item. radioButton.getArrayValue() returns a float array that represents the active + * (1) and inactive (0) items of a radioButton. + * + * ControlP5 CheckBox Toggle + * + * @example controllers/ControlP5radioButton + * + * @nosuperclasses Controller Controller + */ +public class RadioButton extends ControlGroup< RadioButton > { + + protected List< Toggle > _myRadioToggles; + protected int spacingRow = 1; + protected int spacingColumn = 1; + protected int itemsPerRow = -1; + protected boolean isMultipleChoice; + protected int itemHeight = 9; + protected int itemWidth = 9; + protected boolean[] availableImages = new boolean[ 3 ]; + protected PImage[] images = new PImage[ 3 ]; + protected boolean noneSelectedAllowed = true; + private Object _myPlug; + private String _myPlugName; + protected int alignX = RIGHT_OUTSIDE; + protected int alignY = CENTER; + protected int _myPaddingX = Label.paddingX; + protected int _myPaddingY = 0; + + /** + * Convenience constructor to extend RadioButton. + * + * @example use/ControlP5extendController + * @param theControlP5 + * @param theName + */ + public RadioButton( ControlP5 theControlP5 , String theName ) { + this( theControlP5 , theControlP5.getDefaultTab( ) , theName , 0 , 0 ); + theControlP5.register( theControlP5.papplet , theName , this ); + } + + /** + * @exclude + * @param theControlP5 + * @param theParent + * @param theName + * @param theX + * @param theY + */ + public RadioButton( final ControlP5 theControlP5 , final ControllerGroup< ? > theParent , final String theName , final int theX , final int theY ) { + super( theControlP5 , theParent , theName , theX , theY , 99 , 9 ); + isBarVisible = false; + isCollapse = false; + _myRadioToggles = new ArrayList< Toggle >( ); + setItemsPerRow( 1 ); + _myPlug = cp5.papplet; + _myPlugName = getName( ); + if ( !ControllerPlug.checkPlug( _myPlug , _myPlugName , new Class[] { int.class } ) ) { + _myPlug = null; + } + } + + /** + * @param theName + * @param theValue + * @return + */ + public RadioButton addItem( final String theName , final float theValue ) { + Toggle t = cp5.addToggle( theName , 0 , 0 , itemWidth , itemHeight ); + t.getCaptionLabel( ).align( alignX , alignY ).setPadding( _myPaddingX , _myPaddingY ); + t.setMode(DEFAULT); + t.setImages( images[ 0 ] , images[ 1 ] , images[ 2 ] ); + t.setSize( images[ 0 ] ); + addItem( t , theValue ); + return this; + } + + /** + * @param theToggle + * @param theValue + * @return + */ + public RadioButton addItem( final Toggle theToggle , final float theValue ) { + theToggle.setGroup( this ); + theToggle.isMoveable = false; + theToggle.setInternalValue( theValue ); + theToggle.isBroadcast = false; + _myRadioToggles.add( theToggle ); + updateLayout( ); + getColor( ).copyTo( theToggle ); + theToggle.addListener( this ); + updateValues( false ); + cp5.removeProperty( theToggle ); + return this; + } + + /** + * @param theName + */ + public RadioButton removeItem( final String theName ) { + int n = _myRadioToggles.size( ); + for ( int i = n-1 ; i >= 0 ; i-- ) { + if ( ( _myRadioToggles.get( i ) ).getName( ).equals( theName ) ) { + ( _myRadioToggles.get( i ) ).removeListener( this ); + _myRadioToggles.get( i ).remove(); + _myRadioToggles.remove( i ); + } + } + updateValues( false ); + updateLayout( ); + return this; + } + + private void updateAlign( ) { + for ( Toggle t : _myRadioToggles ) { + t.getCaptionLabel( ).align( alignX , alignY ); + } + } + + public RadioButton align( int[] a ) { + return align( a[ 0 ] , a[ 1 ] ); + } + + public RadioButton align( int theX , int theY ) { + alignX = theX; + alignY = theY; + updateAlign( ); + return this; + } + + public RadioButton alignX( int theX ) { + return align( theX , alignY ); + } + + public RadioButton alignY( int theY ) { + return align( alignX , theY ); + } + + public int[] getAlign( ) { + return new int[] { alignX , alignY }; + } + + public RadioButton setLabelPadding( int thePaddingX , int thePaddingY ) { + _myPaddingX = thePaddingX; + _myPaddingY = thePaddingY; + for ( Toggle t : _myRadioToggles ) { + t.getCaptionLabel( ).setPadding( thePaddingX , thePaddingY ); + } + return this; + } + + /** + * + * @param theDefaultImage + * @param theOverImage + * @param theActiveImage + * @return RadioButton + */ + public RadioButton setImages( PImage theDefaultImage , PImage theOverImage , PImage theActiveImage ) { + setImage( theDefaultImage , DEFAULT ); + setImage( theOverImage , OVER ); + setImage( theActiveImage , ACTIVE ); + return this; + } + + /** + * @param theImage + */ + public RadioButton setImage( PImage theImage ) { + return setImage( theImage , DEFAULT ); + } + + /** + * @param theImage + * @param theState + * use Controller.DEFAULT (background), or Controller.OVER (foreground), or + * Controller.ACTIVE (active) + * @return + */ + public RadioButton setImage( PImage theImage , int theState ) { + if ( theImage != null ) { + images[ theState ] = theImage; + availableImages[ theState ] = true; + for ( int i = 0 ; i < _myRadioToggles.size( ) ; i++ ) { + _myRadioToggles.get( i ).setImage( theImage , theState ); + } + } + return this; + } + + public RadioButton setSize( PImage theImage ) { + return setSize( theImage.width , theImage.height ); + } + + public RadioButton setSize( int theWidth , int theHeight ) { + setItemWidth( theWidth ); + setItemHeight( theHeight ); + return this; + } + + /** + * set the height of a radioButton/checkBox item. by default the height is 11px. in order to + * recognize a custom height, the itemHeight has to be set before adding items to a + * radioButton/checkBox. + * + * @param theItemHeight + */ + public RadioButton setItemHeight( int theItemHeight ) { + itemHeight = theItemHeight; + for ( Toggle t : _myRadioToggles ) { + t.setHeight( theItemHeight ); + } + updateLayout( ); + return this; + } + + /** + * set the width of a radioButton/checkBox item. by default the width is 11px. in order to + * recognize a custom width, the itemWidth has to be set before adding items to a + * radioButton/checkBox. + * + * @param theItemWidth + */ + public RadioButton setItemWidth( int theItemWidth ) { + itemWidth = theItemWidth; + for ( Toggle t : _myRadioToggles ) { + t.setWidth( theItemWidth ); + } + updateLayout( ); + return this; + } + + /** + * Gets a radio button item by index. + * + * @param theIndex + * @return Toggle + */ + public Toggle getItem( int theIndex ) { + return _myRadioToggles.get( theIndex ); + } + + public Toggle getItem( String theName ) { + for ( Toggle t : _myRadioToggles ) { + if ( theName.equals( t.getName( ) ) ) { + return t; + } + } + return null; + } + + public List< Toggle > getItems( ) { + return _myRadioToggles; + } + + /** + * Gets the state of an item - this can be true (for on) or false (for off) - by index. + * + * @param theIndex + * @return boolean + */ + public boolean getState( int theIndex ) { + if ( theIndex < _myRadioToggles.size( ) && theIndex >= 0 ) { + return _myRadioToggles.get( theIndex ).getState( ); + } + return false; + } + + /** + * Gets the state of an item - this can be true (for on) or false (for off) - by name. + * + * @param theName + * @return + */ + public boolean getState( String theName ) { + int n = _myRadioToggles.size( ); + for ( int i = 0 ; i < n ; i++ ) { + Toggle t = _myRadioToggles.get( i ); + if ( theName.equals( t.getName( ) ) ) { + return t.getState( ); + } + } + return false; + } + + /** + * @exclude + */ + public void updateLayout( ) { + int nn = 0; + int xx = 0; + int yy = 0; + int n = _myRadioToggles.size( ); + for ( int i = 0 ; i < n ; i++ ) { + Toggle t = _myRadioToggles.get( i ); + set( t.position , xx , yy ); + + xx += t.getWidth( ) + spacingColumn; + nn++; + if ( nn == itemsPerRow ) { + nn = 0; + _myWidth = xx; + yy += t.getHeight( ) + spacingRow; + xx = 0; + } else { + _myWidth = xx; + } + } + } + + /** + * Items of a radioButton or a checkBox are organized in columns and rows. SetItemsPerRow sets + * the limit of items per row. items exceeding the limit will be pushed to the next row. + * + * @param theValue + */ + public RadioButton setItemsPerRow( final int theValue ) { + itemsPerRow = theValue; + updateLayout( ); + return this; + } + + /** + * Sets the spacing in pixels between columns. + * + * @param theSpacing + */ + public RadioButton setSpacingColumn( final int theSpacing ) { + spacingColumn = theSpacing; + updateLayout( ); + return this; + } + + /** + * Sets the spacing in pixels between rows. + * + * @param theSpacing + */ + public RadioButton setSpacingRow( final int theSpacing ) { + spacingRow = theSpacing; + updateLayout( ); + return this; + } + + public RadioButton deactivateAll( ) { + if ( !isMultipleChoice && !noneSelectedAllowed ) { + return this; + } + int n = _myRadioToggles.size( ); + for ( int i = 0 ; i < n ; i++ ) { + _myRadioToggles.get( i ).deactivate( ); + } + _myValue = -1; + updateValues( true ); + return this; + } + + /** + * Deactivates all active RadioButton items and only activates the item corresponding to + * theIndex. + * TODO does not trigger function or value when called by code, fix! + * + * @param theIndex + */ + public RadioButton activate( int theIndex ) { + int n = _myRadioToggles.size( ); + if ( theIndex < n ) { + for ( int i = 0 ; i < n ; i++ ) { + _myRadioToggles.get( i ).deactivate( ); + } + _myRadioToggles.get( theIndex ).activate( ); + _myValue = _myRadioToggles.get( theIndex ).internalValue( ); + updateValues( true ); + } + return this; + } + + /** + * @param theIndex + */ + public RadioButton deactivate( int theIndex ) { + if ( !isMultipleChoice && !noneSelectedAllowed ) { + return this; + } + if ( theIndex < _myRadioToggles.size( ) ) { + Toggle t = _myRadioToggles.get( theIndex ); + if ( t.isActive ) { + t.deactivate( ); + _myValue = -1; + updateValues( true ); + } + } + return this; + } + + /** + * Actives an item of the Radio button by name. + * + * @param theName + */ + public RadioButton activate( String theName ) { + int n = _myRadioToggles.size( ); + for ( int i = 0 ; i < n ; i++ ) { + Toggle t = _myRadioToggles.get( i ); + if ( theName.equals( t.getName( ) ) ) { + activate( i ); + return this; + } + } + return this; + } + + /** + * Deactivates a RadioButton by name and sets the value of the RadioButton to the default value + * -1. + * + * @param theName + */ + public RadioButton deactivate( String theName ) { + int n = _myRadioToggles.size( ); + for ( int i = 0 ; i < n ; i++ ) { + Toggle t = _myRadioToggles.get( i ); + if ( theName.equals( t.getName( ) ) ) { + t.deactivate( ); + _myValue = -1; + updateValues( true ); + return this; + } + } + return this; + } + + /** + * @exclude + * @param theIndex + */ + public RadioButton toggle( int theIndex ) { + // TODO + // boolean itemState = ((Toggle) + // _myRadioToggles.get(theIndex)).getState(); + // if (theIndex < _myRadioToggles.size()) { + // Toggle t = ((Toggle) _myRadioToggles.get(theIndex)); + // if (t.isActive) { + // t.deactivate(); + // _myValue = -1; + // updateValues(true); + // } + // } + ControlP5.logger( ).info( "toggle() not yet implemented, working on it." ); + return this; + } + + /** + * {@inheritDoc} + * + * @exclude + */ + @ControlP5.Invisible @Override public void controlEvent( ControlEvent theEvent ) { + if ( !isMultipleChoice ) { + if ( !noneSelectedAllowed && theEvent.getController( ).getValue( ) < 1 ) { + if ( theEvent.getController( ) instanceof Toggle ) { + Toggle t = ( ( Toggle ) theEvent.getController( ) ); + boolean b = t.isBroadcast( ); + t.setBroadcast( false ); + t.setState( true ); + t.setBroadcast( b ); + return; + } + } + _myValue = -1; + int n = _myRadioToggles.size( ); + for ( int i = 0 ; i < n ; i++ ) { + Toggle t = _myRadioToggles.get( i ); + if ( !t.equals( theEvent.getController( ) ) ) { + t.deactivate( ); + } else { + if ( t.isOn ) { + _myValue = t.internalValue( ); + } + } + } + } + if ( _myPlug != null ) { + try { + Method method = _myPlug.getClass( ).getMethod( _myPlugName , int.class ); + method.invoke( _myPlug , ( int ) _myValue ); + } catch ( SecurityException ex ) { + ex.printStackTrace( ); + } catch ( NoSuchMethodException ex ) { + ex.printStackTrace( ); + } catch ( IllegalArgumentException ex ) { + ex.printStackTrace( ); + } catch ( IllegalAccessException ex ) { + ex.printStackTrace( ); + } catch ( InvocationTargetException ex ) { + ex.printStackTrace( ); + } + } + updateValues( true ); + } + + public RadioButton plugTo( Object theObject ) { + _myPlug = theObject; + if ( !ControllerPlug.checkPlug( _myPlug , _myPlugName , new Class[] { int.class } ) ) { + _myPlug = null; + } + return this; + } + + public RadioButton plugTo( Object theObject , String thePlugName ) { + _myPlug = theObject; + _myPlugName = thePlugName; + if ( !ControllerPlug.checkPlug( _myPlug , _myPlugName , new Class[] { int.class } ) ) { + _myPlug = null; + } + return this; + } + + protected void updateValues( boolean theBroadcastFlag ) { + int n = _myRadioToggles.size( ); + _myArrayValue = new float[ n ]; + for ( int i = 0 ; i < n ; i++ ) { + Toggle t = _myRadioToggles.get( i ); + _myArrayValue[ i ] = t.getValue( ); + } + if ( theBroadcastFlag ) { + ControlEvent myEvent = new ControlEvent( this ); + cp5.getControlBroadcaster( ).broadcast( myEvent , FLOAT); + } + + } + + /** + * In order to always have 1 item selected, use setNoneSelectedAllowed(false), by default this + * is true. setNoneSelectedAllowed does not apply when in multipleChoice mode. + * + * @param theValue + */ + public RadioButton setNoneSelectedAllowed( boolean theValue ) { + noneSelectedAllowed = theValue; + return this; + } + + /** + * Sets the value for all RadioButton items according to the values of the array passed on. 0 + * will turn off an item, any other value will turn it on. + */ + @Override public RadioButton setArrayValue( float[] theArray ) { + for ( int i = 0 ; i < theArray.length ; i++ ) { + if ( _myArrayValue[ i ] != theArray[ i ] ) { + if ( theArray[ i ] == 0 ) { + deactivate( i ); + } else { + activate( i ); + } + } + } + super.setArrayValue( theArray ); + return this; + } + + public RadioButton setColorLabels( int theColor ) { + for ( Toggle t : _myRadioToggles ) { + t.getCaptionLabel( ).setColor( theColor ); + } + return this; + } + + public RadioButton hideLabels( ) { + for ( Toggle t : _myRadioToggles ) { + t.getCaptionLabel( ).setVisible( false ); + } + return this; + } + + public RadioButton showLabels( ) { + for ( Toggle t : _myRadioToggles ) { + t.getCaptionLabel( ).setVisible( true ); + } + return this; + } + + public RadioButton toUpperCase( boolean theValue ) { + for ( Toggle t : _myRadioToggles ) { + t.getCaptionLabel( ).toUpperCase( theValue ); + } + return this; + } + + /** + * @exclude {@inheritDoc} + */ + @Override public String getInfo( ) { + return "type:\tRadioButton\n" + super.getInfo( ); + } + + /** + * @deprecated + * @exclude + */ + @Deprecated public RadioButton add( final String theName , final float theValue ) { + return addItem( theName , theValue ); + } +} diff --git a/controlP5/Range.java b/controlP5/Range.java new file mode 100755 index 0000000..3904cba --- /dev/null +++ b/controlP5/Range.java @@ -0,0 +1,519 @@ +package main.java.src2.main.java.controlP5.controlP5; + +/** + * controlP5 is a processing gui library. + * + * 2006-2015 by Andreas Schlegel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place, Suite 330, + * Boston, MA 02111-1307 USA + * + * @author Andreas Schlegel (http://www.sojamo.de) + * @modified ##date## + * @version ##version## + * + */ + +import java.util.ArrayList; +import java.util.logging.Level; + +import processing.core.PApplet; +import processing.core.PFont; +import processing.core.PGraphics; + +/** + * A range slider works just like a slider but can be adjusted on both ends. + * + * @see Slider + * @example controllers/ControlP5range + * @nosuperclasses Controller Controller + */ +public class Range extends Controller< Range > { + + /* TODO if range value is int, value labels do initialize as floats. first click makes them + * display as ints without decimal point */ + protected static final int HORIZONTAL = 0; + protected static final int VERTICAL = 1; + protected int _myDirection; + protected float _myValuePosition; + protected boolean isDragging; + protected boolean isDraggable = true; + protected boolean isFirstClick; + protected Label _myHighValueLabel; + protected float _myValueRange; + protected boolean isMinHandle; + protected boolean isMaxHandle; + protected boolean isMoveHandle; + protected float distanceHandle; + protected int handleSize = 10; + protected int minHandle = 0; + protected int maxHandle = 0; + protected int mr = 0; + protected final ArrayList< TickMark > _myTickMarks = new ArrayList< TickMark >( ); + protected boolean isShowTickMarks; + protected boolean isSnapToTickMarks; + public static int autoWidth = 99; + public static int autoHeight = 9; + public static float[] autoSpacing = new float[]{ 0 , 5 , 0 }; + public int alignValueLabel = ControlP5Constants.CENTER; + protected int _myColorTickMark = 0xffffffff; + private int mode = -1; + + /** + * Convenience constructor to extend Range. + * + * @example use/ControlP5extendController + * @param theControlP5 + * @param theName + */ + public Range( ControlP5 theControlP5 , String theName ) { + this( theControlP5 , theControlP5.getDefaultTab( ) , theName , 0 , 100 , 0 , 100 , 0 , 0 , 99 , 9 ); + theControlP5.register( theControlP5.papplet , theName , this ); + } + + /** + * + * @param theControlP5 ControlP5 + * @param theParent ControllerGroup + * @param theName String + * @param theMin float + * @param theMax float + * @param theDefaultValue float + * @param theX int + * @param theY int + * @param theWidth int + * @param theHeight int + */ + @ControlP5.Invisible public Range( ControlP5 theControlP5 , ControllerGroup< ? > theParent , String theName , float theMin , float theMax , float theDefaultMinValue , float theDefaultMaxValue , int theX , int theY , int theWidth , int theHeight ) { + super( theControlP5 , theParent , theName , theX , theY , theWidth , theHeight ); + + _myArrayValue = new float[] { theDefaultMinValue , theDefaultMaxValue }; + + _myMin = theMin; + _myMax = theMax; + _myValueRange = _myMax - _myMin; + + minHandle = ( int ) PApplet.map( theDefaultMinValue , _myMin , _myMax , handleSize , getWidth( ) - handleSize ); + maxHandle = ( int ) PApplet.map( theDefaultMaxValue , _myMin , _myMax , handleSize , getWidth( ) - handleSize ); + mr = maxHandle - minHandle; + + _myCaptionLabel = new Label( cp5 , theName ).setColor( color.getCaptionLabel( ) ).align( ControlP5Constants.RIGHT_OUTSIDE , ControlP5Constants.CENTER ); + _myValueLabel = new Label( cp5 , adjustValue(_myMin)).setColor( color.getValueLabel( ) ).set(adjustValue(theDefaultMinValue)).align( ControlP5Constants.LEFT , ControlP5Constants.CENTER ); + _myHighValueLabel = new Label( cp5 , adjustValue( _myMax ) ).setColor( color.getValueLabel( ) ).set(adjustValue(theDefaultMaxValue)).align( ControlP5Constants.RIGHT , ControlP5Constants.CENTER ); + + _myValue = theDefaultMinValue; + + _myDirection = HORIZONTAL; + + update( ); + + } + + @Override public Range setColorValueLabel( int theColor ) { + _myValueLabel.setColor( theColor ); + _myHighValueLabel.setColor( theColor ); + return this; + } + + @Override public Range setColorCaptionLabel( int theColor ) { + _myCaptionLabel.setColor( theColor ); + return this; + } + + public Range setHighValueLabel( final String theLabel ) { + _myHighValueLabel.set( theLabel ); + return this; + } + + public Range setLowValueLabel( final String theLabel ) { + _myValueLabel.set( theLabel ); + return this; + } + + @ControlP5.Invisible public Range setSliderMode( int theMode ) { + return this; + } + + public Range setHandleSize( int theSize ) { + handleSize = theSize; + setLowValue( _myArrayValue[ 0 ] , false ); + setHighValue( _myArrayValue[ 1 ] , false ); + mr = maxHandle - minHandle; + return this; + } + + @ControlP5.Invisible public Range updateInternalEvents( PApplet theApplet ) { + if ( isVisible ) { + int c = _myControlWindow.mouseX - _myControlWindow.pmouseX; + if ( c == 0 ) { + return this; + } + if ( isMousePressed && !cp5.isAltDown( ) ) { + switch ( mode ) { + case ( ControlP5Constants.LEFT ): + minHandle = PApplet.max( handleSize , PApplet.min( maxHandle , minHandle + c ) ); + break; + case ( ControlP5Constants.RIGHT ): + maxHandle = PApplet.max( minHandle , PApplet.min( getWidth( ) - handleSize , maxHandle + c ) ); + break; + case ( ControlP5Constants.CENTER ): + minHandle = PApplet.max( handleSize , PApplet.min( getWidth( ) - mr - handleSize , minHandle + c ) ); + maxHandle = PApplet.max( minHandle , PApplet.min( getWidth( ) - handleSize , minHandle + mr ) ); + break; + } + update( ); + } + } + return this; + } + + @Override @ControlP5.Invisible + public void mousePressed( ) { + + final float posX = Controller.x( _myParent.getAbsolutePosition( ) ) + Controller.x( position ); + final float posY = Controller.y( _myParent.getAbsolutePosition( ) ) + Controller.y( position ); + + if ( _myControlWindow.mouseY < posY || _myControlWindow.mouseY > posY + getHeight( ) ) { + mode = -1; + isMinHandle = isMaxHandle = false; + return; + } + + int x0 = ( int ) ( posX + minHandle ); + int x1 = ( int ) ( posX + maxHandle ); + + if ( _myControlWindow.mouseX >= x0 - handleSize && _myControlWindow.mouseX < x0 ) { + mode = ControlP5Constants.LEFT; + isMinHandle = true; + } else if ( _myControlWindow.mouseX >= x1 && _myControlWindow.mouseX < x1 + handleSize ) { + mode = ControlP5Constants.RIGHT; + isMaxHandle = true; + } else if ( _myControlWindow.mouseX > x0 && _myControlWindow.mouseX < x1 && isDraggable ) { + mode = ControlP5Constants.CENTER; + } + } + + /** + * set the value of the range-slider. to set the low and high value, use setLowValue and + * setHighValue or setRangeValues + * + * @see #setLowValue(float) + * @see #setHighValue(float) + * @see #setRangeValues(float, float) + * + * @param theValue float + * @return Range + */ + @Override @ControlP5.Invisible public Range setValue( float theValue ) { + _myValue = theValue; + broadcast( ControlP5Constants.ARRAY ); + return this; + } + + /** + * @exclude + */ + @Override @ControlP5.Invisible public Range update( ) { + _myArrayValue[ 0 ] = PApplet.map( minHandle , handleSize , getWidth( ) - handleSize , _myMin , _myMax ); + _myArrayValue[ 1 ] = PApplet.map( maxHandle , handleSize , getWidth( ) - handleSize , _myMin , _myMax ); + mr = maxHandle - minHandle; + _myHighValueLabel.set( adjustValue( _myArrayValue[ 1 ] ) ); + _myValueLabel.set( adjustValue( _myArrayValue[ 0 ] ) ); + return setValue( _myValue ); + } + + @ControlP5.Invisible public Range setDraggable( boolean theFlag ) { + isDraggable = theFlag; + isDragging = theFlag && isDragging; + return this; + } + + public float[] getArrayValue( ) { + return _myArrayValue; + } + + @Override public Range setArrayValue( float[] theArray ) { + setLowValue( theArray[ 0 ] , false ); + setHighValue( theArray[ 1 ] , false ); + return update( ); + } + + @Override public Range setMin( float theValue ) { + _myMin = theValue; + _myValueRange = _myMax - _myMin; + return setLowValue( _myArrayValue[ 0 ] ); + } + + @Override public Range setMax( float theValue ) { + _myMax = theValue; + _myValueRange = _myMax - _myMin; + return setHighValue( _myArrayValue[ 1 ] ); + } + + public float getLowValue( ) { + return _myArrayValue[ 0 ]; + } + + public float getHighValue( ) { + return _myArrayValue[ 1 ]; + } + + @Override public Range setWidth( int theValue ) { + super.setWidth( theValue ); + return this; + } + + @Override public Range setHeight( int theValue ) { + super.setHeight( theValue ); + return this; + } + + @Override @ControlP5.Invisible public void mouseReleased( ) { + isDragging = isMinHandle = isMaxHandle = isMoveHandle = false; + mode = -1; + } + + @Override @ControlP5.Invisible public void mouseReleasedOutside( ) { + mouseReleased( ); + } + + @Override @ControlP5.Invisible public void onLeave( ) { + isMinHandle = false; + isMaxHandle = false; + } + + protected void setTickMarks( ) { + System.out.println( "Range Tickmarks not yet supported" ); + } + + public Range setColorTickMark( int theColor ) { + _myColorTickMark = theColor; + return this; + } + + public Range showTickMarks( boolean theFlag ) { + isShowTickMarks = theFlag; + return this; + } + + public Range snapToTickMarks( boolean theFlag ) { + isSnapToTickMarks = theFlag; + System.out.println( "Range Tickmarks not yet supported" ); + return this; + } + + @ControlP5.Invisible public TickMark getTickMark( ) { + System.out.println( "Range Tickmarks not yet supported" ); + return null; + } + + public ArrayList< TickMark > getTickMarks( ) { + return _myTickMarks; + } + + public Range setNumberOfTickMarks( int theNumber ) { + System.out.println( "Range Tickmarks not yet supported" ); + _myTickMarks.clear( ); + if ( theNumber > 0 ) { + for ( int i = 0 ; i < theNumber ; i++ ) { + _myTickMarks.add( new TickMark( this ) ); + } + showTickMarks( true ); + snapToTickMarks( true ); + } else { + showTickMarks( false ); + snapToTickMarks( false ); + } + _myUnit = ( _myMax - _myMin ) / ( ( getWidth( ) > getHeight( ) ) ? getWidth( ) - 1 : getHeight( ) - 1 ); + setLowValue( _myArrayValue[ 0 ] , false ); + setHighValue( _myArrayValue[ 1 ] , false ); + return update( ); + } + + public Range setRange( float theMinValue , float theMaxValue ) { + setMin( theMinValue ); + setMax( theMaxValue ); + return this; + } + + public Range setRangeValues( float theLowValue , float theHighValue ) { + return setArrayValue( new float[] { theLowValue , theHighValue } ); + } + + private Range setLowValue( float theValue , boolean isUpdate ) { + _myArrayValue[ 0 ] = PApplet.max( _myMin , snapValue( theValue ) ); + minHandle = ( int ) PApplet.map( _myArrayValue[ 0 ] , _myMin , _myMax , handleSize , getWidth( ) - handleSize ); + return ( isUpdate ) ? update( ) : this; + } + + public Range setLowValue( float theValue ) { + return setLowValue( theValue , true ); + } + + private Range setHighValue( float theValue , boolean isUpdate ) { + _myArrayValue[ 1 ] = PApplet.min( _myMax , snapValue( theValue ) ); + maxHandle = ( int ) PApplet.map( _myArrayValue[ 1 ] , _myMin , _myMax , handleSize , getWidth( ) - handleSize ); + return ( isUpdate ) ? update( ) : this; + } + + public Range setHighValue( float theValue ) { + return setHighValue( theValue , true ); + } + + protected float snapValue( float theValue ) { + if ( isMousePressed ) { + return theValue; + } + if ( isSnapToTickMarks ) { + _myValuePosition = ( ( theValue - _myMin ) / _myUnit ); + float n = PApplet.round( PApplet.map( _myValuePosition , 0 , ( _myDirection == HORIZONTAL ) ? getWidth( ) : getHeight( ) , 0 , _myTickMarks.size( ) - 1 ) ); + theValue = PApplet.map( n , 0 , _myTickMarks.size( ) - 1 , _myMin , _myMax ); + } + return theValue; + } + + @Override @ControlP5.Invisible public Range updateDisplayMode( int theMode ) { + _myDisplayMode = theMode; + switch ( theMode ) { + case ( ControlP5Constants.DEFAULT ): + _myControllerView = new RangeView( ); + break; + case ( ControlP5Constants.SPRITE ): + _myControllerView = new RangeSpriteView( ); + break; + case ( ControlP5Constants.IMAGE ): + _myControllerView = new RangeImageView( ); + break; + case ( ControlP5Constants.CUSTOM ): + default: + break; + } + return this; + } + + class RangeSpriteView implements ControllerView< Range > { + + public void display( PGraphics theGraphics , Range theController ) { + + ControlP5.logger( ).log( Level.INFO , "RangeSpriteDisplay not available." ); + + } + + } + + class RangeView implements ControllerView< Range > { + + public void display( PGraphics theGraphics , Range theController ) { + + int high = mode; + + final float posX = Controller.x( _myParent.getAbsolutePosition( ) ) + Controller.x( position ); + int x0 = ( int ) ( posX + minHandle ); + int x1 = ( int ) ( posX + maxHandle ); + + if ( isInside( ) && high < 0 ) { + if ( _myControlWindow.mouseX >= x0 - handleSize && _myControlWindow.mouseX < x0 ) { + high = ControlP5Constants.LEFT; + } else if ( _myControlWindow.mouseX >= x1 && _myControlWindow.mouseX < x1 + handleSize ) { + high = ControlP5Constants.RIGHT; + } else if ( _myControlWindow.mouseX > x0 && _myControlWindow.mouseX < x1 && isDraggable ) { + high = ControlP5Constants.CENTER; + } + } + + theGraphics.pushMatrix( ); + + theGraphics.fill( color.getBackground( ) ); + + theGraphics.noStroke( ); + + theGraphics.rect( 0 , 0 , getWidth( ) , getHeight( ) ); + + theGraphics.fill( high == ControlP5Constants.CENTER ? color.getActive( ) : color.getForeground( ) ); + + if ( isShowTickMarks ) { + int n = handleSize / 2; + theGraphics.rect( minHandle - n , 0 , mr + handleSize , getHeight( ) ); + theGraphics.fill( ( isMinHandle || high == ControlP5Constants.LEFT ) ? color.getActive( ) : color.getForeground( ) ); + theGraphics.triangle( minHandle - handleSize , 0 , minHandle , 0 , minHandle - n , getHeight( ) ); + theGraphics.fill( ( isMaxHandle || high == ControlP5Constants.RIGHT ) ? color.getActive( ) : color.getForeground( ) ); + theGraphics.triangle( maxHandle , 0 , maxHandle + handleSize , 0 , maxHandle + n , getHeight( ) ); + } else { + theGraphics.rect( minHandle , 0 , mr , getHeight( ) ); + theGraphics.fill( ( isMinHandle || high == ControlP5Constants.LEFT ) ? color.getActive( ) : color.getForeground( ) ); + theGraphics.rect( ( minHandle - handleSize ) , 0 , handleSize , getHeight( ) ); + theGraphics.fill( ( isMaxHandle || high == ControlP5Constants.RIGHT ) ? color.getActive( ) : color.getForeground( ) ); + theGraphics.rect( maxHandle , 0 , handleSize , getHeight( ) ); + + } + + if ( isLabelVisible ) { + _myCaptionLabel.draw( theGraphics , 0 , 0 , theController ); + _myValueLabel.draw( theGraphics , 0 , 0 , theController ); + _myHighValueLabel.draw( theGraphics , 0 , 0 , theController ); + } + + theGraphics.popMatrix( ); + + if ( isShowTickMarks ) { + theGraphics.pushMatrix( ); + float x = ( getWidth( ) - handleSize ) / ( getTickMarks( ).size( ) - 1 ); + theGraphics.translate( handleSize / 2 , getHeight( ) ); + theGraphics.fill( _myColorTickMark ); + for ( TickMark tm : getTickMarks( ) ) { + tm.draw( theGraphics ); + theGraphics.translate( x , 0 ); + } + theGraphics.popMatrix( ); + } + } + } + + class RangeImageView implements ControllerView< Range > { + + public void display( PGraphics theGraphics , Range theController ) { + + ControlP5.logger( ).log( Level.INFO , "RangeImageDisplay not implemented." ); + + } + + } + + @Override public Range setFont( PFont thePFont ) { + _myHighValueLabel.setFont( thePFont ); + return super.setFont( thePFont ); + } + + @Override public Range setFont( ControlFont theFont ) { + _myHighValueLabel.setFont( theFont ); + return super.setFont( theFont ); + } + + @Override @ControlP5.Invisible public String toString( ) { + return "type:\tRange\n" + super.toString( ); + } + + @Deprecated public float lowValue( ) { + return getLowValue( ); + } + + @Deprecated public float highValue( ) { + return getHighValue( ); + } + + @Deprecated public float[] arrayValue( ) { + return _myArrayValue; + } + +} diff --git a/controlP5/ScrollableList.java b/controlP5/ScrollableList.java new file mode 100644 index 0000000..3953d9f --- /dev/null +++ b/controlP5/ScrollableList.java @@ -0,0 +1,483 @@ +package main.java.src2.main.java.controlP5.controlP5; + +/** + * controlP5 is a processing gui library. + * + * 2006-2015 by Andreas Schlegel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place, Suite 330, + * Boston, MA 02111-1307 USA + * + * @author Andreas Schlegel (http://www.sojamo.de) + * @modified ##date## + * @version ##version## + * + */ + +import static main.java.src2.main.java.controlP5.controlP5.ControlP5.b; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import processing.core.PApplet; +import processing.core.PGraphics; +import processing.event.KeyEvent; + +/** + * A ScrollableList is a list of vertically aligned items + * which can be scrolled if required. + * + * @example controllers/ControlP5scrollableList + */ +public class ScrollableList extends Controller< ScrollableList > implements ControlListener { + + private int _myType = DROPDOWN; + protected int _myBackgroundColor = 0x00ffffff; + protected int itemHeight = 13; + protected int barHeight = 10; + private float scrollSensitivity = 1; + private boolean isOpen = true; + protected List< Map< String , Object > > items; + protected int itemRange = 5; + protected int itemHover = -1; + private int itemIndexOffset = 0; + private final int itemSpacing = 1; + private int _myDirection = PApplet.DOWN; + private boolean isBarVisible = true; + static public final int LIST = ControlP5.LIST; + static public final int DROPDOWN = ControlP5.DROPDOWN; + static public final int CHECKBOX = ControlP5.CHECKBOX; /* TODO */ + static public final int TREE = ControlP5.TREE; /* TODO */ + + public ScrollableList( ControlP5 theControlP5 , String theName ) { + this( theControlP5 , theControlP5.getDefaultTab( ) , theName , 0 , 0 , 99 , 199 ); + theControlP5.register( theControlP5.papplet , theName , this ); + } + + protected ScrollableList( ControlP5 theControlP5 , ControllerGroup< ? > theGroup , String theName , int theX , int theY , int theW , int theH ) { + super( theControlP5 , theGroup , theName , theX , theY , theW , theH ); + items = new ArrayList< Map< String , Object > >( ); + updateHeight( ); + getValueLabel( ).align( PApplet.LEFT , PApplet.CENTER ); + } + + public boolean isOpen( ) { + return isOpen; + } + + public ScrollableList open( ) { + return setOpen( true ); + } + + public ScrollableList close( ) { + return setOpen( false ); + } + + public ScrollableList setOpen( boolean b ) { + isOpen = b; + return this; + } + + @Override public int getHeight( ) { + return isOpen ? super.getHeight( ) : barHeight; + } + + public ScrollableList setType( int theType ) { + _myType = theType; + return this; + } + + public void setDirection( int theDirection ) { + _myDirection = ( theDirection == PApplet.UP ) ? PApplet.UP : PApplet.DOWN; + } + + @Override protected boolean inside( ) { + /* constrain the bounds of the controller to the + * dimensions of the cp5 area, required since + * PGraphics as render area has been introduced. */ + float x0 = PApplet.max( 0 , x( position ) + x( _myParent.getAbsolutePosition( ) ) ); + float x1 = PApplet.min( cp5.pgw , x( position ) + x( _myParent.getAbsolutePosition( ) ) + getWidth( ) ); + float y0 = PApplet.max( 0 , y( position ) + y( _myParent.getAbsolutePosition( ) ) ); + float y1 = PApplet.min( cp5.pgh , y( position ) + y( _myParent.getAbsolutePosition( ) ) + getHeight( ) ); + if ( y1 < y0 ) { + float ty = y0; + y0 = y1; + y1 = ty; + } + return ( _myControlWindow.mouseX > x0 && _myControlWindow.mouseX < x1 && _myControlWindow.mouseY > ( y1 < y0 ? y1 : y0 ) && _myControlWindow.mouseY < ( y0 < y1 ? y1 : y0 ) ); + } + + @Override protected void onRelease( ) { + if ( !isDragged ) { + if ( getPointer( ).y( ) >= 0 && getPointer( ).y( ) <= barHeight ) { + setOpen( !isOpen( ) ); + } else if ( isOpen ) { + + double n = Math.floor( ( getPointer( ).y( ) - barHeight ) / itemHeight ); + + // n += itemRange; /* UP */ + int index = ( int ) n + itemIndexOffset; + updateIndex( index ); + } + } + } + + private void updateIndex( int theIndex ) { + if ( theIndex >= items.size( ) ) { + return; + } + + Map m = items.get( theIndex ); + + switch ( _myType ) { + case ( LIST ): + super.setValue( theIndex ); + for ( Object o : items ) { + ( ( Map ) o ).put( "state" , false ); + } + m.put( "state" , !ControlP5.b( m.get( "state" ) ) ); + break; + case ( DROPDOWN ): + super.setValue( theIndex ); + setOpen( false ); + getCaptionLabel( ).setText( ( m.get( "text" ).toString( ) ) ); + break; + case ( CHECKBOX ): + m.put( "state" , !ControlP5.b( m.get( "state" ) ) ); + break; + } + + } + + public ScrollableList setValue( float theValue ) { + updateIndex( ( int ) ( theValue ) ); + return this; + } + + @Override protected void onDrag( ) { + scroll( getPointer( ).dy( ) ); + } + + @Override protected void onScroll( int theValue ) { + scroll( theValue ); + } + + private void scroll( int theValue ) { + if ( isOpen ) { + itemIndexOffset += theValue; + itemIndexOffset = ( int ) ( Math.floor( Math.max( 0 , Math.min( itemIndexOffset , items.size( ) - itemRange ) ) ) ); + itemHover = -2; + } + } + + @Override protected void onLeave( ) { + itemHover = -1; + } + + private void updateHover( ) { + if ( getPointer( ).y( ) > barHeight ) { + double n = Math.floor( ( getPointer( ).y( ) - barHeight ) / itemHeight ); + itemHover = ( int ) ( itemIndexOffset + n ); + } else { + itemHover = -1; + } + } + + @Override protected void onEnter( ) { + updateHover( ); + } + + @Override protected void onMove( ) { + updateHover( ); + } + + @Override protected void onEndDrag( ) { + updateHover( ); + } + + private int updateHeight( ) { + itemRange = ( PApplet.abs( getHeight( ) ) - ( isBarVisible( ) ? barHeight : 0 ) ) / itemHeight; + return itemHeight * ( items.size( ) < itemRange ? items.size( ) : itemRange ); + } + + public ScrollableList setItemHeight( int theHeight ) { + itemHeight = theHeight; + updateHeight( ); + return this; + } + + public ScrollableList setBarHeight( int theHeight ) { + barHeight = theHeight; + updateHeight( ); + return this; + } + + public int getBarHeight( ) { + return barHeight; + } + + public ScrollableList setScrollSensitivity( float theSensitivity ) { + scrollSensitivity = theSensitivity; + return this; + } + + public ScrollableList setBarVisible( boolean b ) { + isBarVisible = b; + updateHeight( ); + return this; + } + + public boolean isBarVisible( ) { + return isBarVisible; + } + + private Map< String , Object > getDefaultItemMap( String theName , Object theValue ) { + Map< String , Object > item = new HashMap< String , Object >( ); + item.put( "name" , theName ); + item.put( "text" , theName ); + item.put( "value" , theValue ); + item.put( "color" , getColor( ) ); + item.put( "view" , new CDrawable( ) { + @Override public void draw( PGraphics theGraphics ) { + } + + } ); + item.put( "state" , false ); + return item; + } + + public ScrollableList addItem( String theName , Object theValue ) { + Map< String , Object > item = getDefaultItemMap( theName , theValue ); + items.add( item ); + return this; + } + + public ScrollableList addItems( String[] theItems ) { + addItems( Arrays.asList( theItems ) ); + return this; + } + + public ScrollableList addItems( List< String > theItems ) { + for ( int i = 0 ; i < theItems.size( ) ; i++ ) { + addItem(theItems.get( i ), i ); + } + return this; + } + + public ScrollableList addItems( Map< String , Object > theItems ) { + for ( Map.Entry< String , Object > item : theItems.entrySet( ) ) { + addItem( item.getKey( ) , item.getValue( ) ); + } + return this; + } + + public ScrollableList setItems( String[] theItems ) { + setItems( Arrays.asList( theItems ) ); + return this; + } + + public ScrollableList setItems( List< String > theItems ) { + items.clear( ); + return addItems( theItems ); + } + + public ScrollableList setItems( Map< String , Object > theItems ) { + items.clear( ); + return addItems( theItems ); + } + + public ScrollableList removeItems( List< String > theItems ) { + for ( String s : theItems ) { + removeItem( s ); + } + return this; + } + + public ScrollableList removeItem( String theName ) { + if ( theName != null ) { + + List l = new ArrayList( ); + for ( Map m : items ) { + if ( theName.equals( m.get( "name" ) ) ) { + l.add( m ); + } + } + items.removeAll( l ); + } + return this; + } + + public void updateItemIndexOffset( ) { + int m1 = items.size( ) > itemRange ? ( itemIndexOffset + itemRange ) : items.size( ); + int n = ( m1 - items.size( ) ); + if ( n >= 0 ) { + itemIndexOffset -= n; + } + } + + public Map< String , Object > getItem( int theIndex ) { + return items.get( theIndex ); + } + + public Map< String , Object > getItem( String theName ) { + if ( theName != null ) { + for ( Map< String , Object > o : items ) { + if ( theName.equals( o.get( "name" ) ) ) { + return o; + } + } + } + return Collections.EMPTY_MAP; + } + + public List getItems( ) { + return Collections.unmodifiableList( items ); + } + + public ScrollableList clear( ) { + for ( int i = items.size( ) - 1 ; i >= 0 ; i-- ) { + items.remove( i ); + } + items.clear( ); + itemIndexOffset = 0; + return this; + } + + @Override public void controlEvent( ControlEvent theEvent ) { + // TODO Auto-generated method stub + } + + public ScrollableList setBackgroundColor( int theColor ) { + _myBackgroundColor = theColor; + return this; + } + + public int getBackgroundColor( ) { + return _myBackgroundColor; + } + + @Override @ControlP5.Invisible public ScrollableList updateDisplayMode( int theMode ) { + _myDisplayMode = theMode; + switch ( theMode ) { + case ( DEFAULT ): + _myControllerView = new ScrollableListView( ); + break; + case ( IMAGE ): + case ( SPRITE ): + case ( CUSTOM ): + default: + break; + } + return this; + } + + static public class ScrollableListView implements ControllerView< ScrollableList > { + + public void display( PGraphics g , ScrollableList c ) { + + // setHeight( -200 ); /* UP */ + + g.noStroke( ); + + if ( c.isBarVisible( ) ) { + boolean b = c.itemHover == -1 && c.isInside && !c.isDragged; + g.fill( b ? c.getColor( ).getForeground( ) : c.getColor( ).getBackground( ) ); + g.rect( 0 , 0 , c.getWidth( ) , c.barHeight ); + g.pushMatrix( ); + g.translate( c.getWidth( ) - 8 , c.barHeight / 2 - 2 ); + g.fill( c.getColor( ).getCaptionLabel( ) ); + if ( c.isOpen( ) ) { + g.triangle( -3 , 0 , 3 , 0 , 0 , 3 ); + } else { + g.triangle( -3 , 3 , 3 , 3 , 0 , 0 ); + } + g.popMatrix( ); + + c.getCaptionLabel( ).draw( g , 4 , c.barHeight / 2 ); + + } + + if ( c.isOpen( ) ) { + int bar = ( c.isBarVisible( ) ? c.barHeight : 0 ); + int h = ( ( c.updateHeight( ) ) ); + g.pushMatrix( ); + // g.translate( 0 , - ( h + bar + + // c.itemSpacing ) ); /* UP */ + g.fill( c.getBackgroundColor( ) ); + g.rect( 0 , bar , c.getWidth( ) , h ); + g.pushMatrix( ); + g.translate( 0 , ( bar == 0 ? 0 : ( c.barHeight + c.itemSpacing ) ) ); + /* draw visible items */ + c.updateItemIndexOffset( ); + int m0 = c.itemIndexOffset; + int m1 = c.items.size( ) > c.itemRange ? ( c.itemIndexOffset + c.itemRange ) : c.items.size( ); + for ( int i = m0 ; i < m1 ; i++ ) { + Map< String , Object > item = c.items.get( i ); + CColor color = ( CColor ) item.get( "color" ); + g.fill( ( ControlP5.b( item.get( "state" ) ) ) ? color.getActive( ) : ( i == c.itemHover ) ? ( c.isMousePressed ? color.getActive( ) : color.getForeground( ) ) : color.getBackground( ) ); + g.rect( 0 , 0 , c.getWidth( ) , c.itemHeight - 1 ); + c.getValueLabel( ).set( item.get( "text" ).toString( ) ).draw( g , 4 , c.itemHeight / 2 ); + g.translate( 0 , c.itemHeight ); + } + g.popMatrix( ); + + if ( c.isInside ) { + int m = c.items.size( ) - c.itemRange; + if ( m > 0 ) { + g.fill( c.getColor( ).getCaptionLabel( ) ); + g.pushMatrix( ); + int s = 4; /* spacing */ + int s2 = s / 2; + g.translate( c.getWidth( ) - s , c.barHeight ); + int len = ( int ) PApplet.map( ( float ) Math.log( m * 10 ) , 0 , 10 , h , 0 ); + int pos = ( int ) ( PApplet.map( c.itemIndexOffset , 0 , m , s2 , h - len - s2 ) ); + g.rect( 0 , pos , s2 , len ); + g.popMatrix( ); + } + } + g.popMatrix( ); + } + + } + + } + + public void keyEvent( KeyEvent theKeyEvent ) { + if ( isInside && theKeyEvent.getAction( ) == KeyEvent.PRESS ) { + switch ( theKeyEvent.getKeyCode( ) ) { + case (UP): + scroll( theKeyEvent.isAltDown( ) ? -itemIndexOffset : theKeyEvent.isShiftDown( ) ? -10 : -1 ); + updateHover( ); + break; + case (DOWN): + scroll( theKeyEvent.isAltDown( ) ? items.size( ) - itemRange : theKeyEvent.isShiftDown( ) ? 10 : 1 ); + updateHover( ); + break; + case (LEFT): + break; + case (RIGHT): + break; + case (ENTER): + onRelease( ); + break; + } + } + } + /* TODO keycontrol: arrows, return dragging moving items + * sorting custom view custom event types */ +} diff --git a/controlP5/Slider.java b/controlP5/Slider.java new file mode 100755 index 0000000..80f202d --- /dev/null +++ b/controlP5/Slider.java @@ -0,0 +1,648 @@ +package main.java.src2.main.java.controlP5.controlP5; + +/** + * controlP5 is a processing gui library. + * + * 2006-2015 by Andreas Schlegel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place, Suite 330, + * Boston, MA 02111-1307 USA + * + * @author Andreas Schlegel (http://www.sojamo.de) + * @modified ##date## + * @version ##version## + * + */ + +import java.util.ArrayList; + +import processing.core.PApplet; +import processing.core.PGraphics; + +/** + * A slider is either used horizontally or vertically. when adding a slider to controlP5, the width + * is compared against the height. if the width is bigger, you get a horizontal slider, is the + * height bigger, you get a vertical slider. a slider can have a fixed slider handle (one end of the + * slider is fixed to the left or bottom side of the controller), or a flexible slider handle (a + * handle you can drag). + * + * + * @example controllers/ControlP5slider + */ +public class Slider extends Controller< Slider > { + + public final static int FIX = 1; + public final static int FLEXIBLE = 0; + protected int _mySliderMode = FIX; + protected float _myValuePosition; + protected int _myHandleSize = 0; + protected int _myDefaultHandleSize = 10; + protected int triggerId = PRESSED; + protected ArrayList< TickMark > _myTickMarks = new ArrayList< TickMark >( ); + protected boolean isShowTickMarks; + protected boolean isSnapToTickMarks; + protected static int autoWidth = 99; + protected static int autoHeight = 9; + protected float scrollSensitivity = 0.1f; + protected int _myColorTickMark = 0xffffffff; + private SliderView _myView; + protected float _myMinReal = 0; + protected float _myMaxReal = 1; + protected float _myInternalValue = 0; + + /** + * Convenience constructor to extend Slider. + * + * @example use/ControlP5extendController + * @param theControlP5 + * @param theName + */ + public Slider( ControlP5 theControlP5 , String theName ) { + this( theControlP5 , theControlP5.getDefaultTab( ) , theName , 0 , 100 , 0 , 0 , 0 , autoWidth , autoHeight ); + theControlP5.register( theControlP5.papplet , theName , this ); + } + + public Slider( ControlP5 theControlP5 , ControllerGroup< ? > theParent , String theName , float theMin , float theMax , float theDefaultValue , int theX , int theY , int theWidth , int theHeight ) { + super( theControlP5 , theParent , theName , theX , theY , theWidth , theHeight ); + + _myMin = 0; + _myMax = 1; + + // with _myMinReal and _myMaxReal the range of values can now range + // from big to small (e.g. 255 to 0) as well as from small to big (e.g. 0 to 255) + _myMinReal = theMin; + _myMaxReal = theMax; + + _myValue = PApplet.map( theDefaultValue , _myMinReal , _myMaxReal , 0 , 1 ); + + _myCaptionLabel = new Label( cp5 , theName ).setColor( color.getCaptionLabel( ) ); + _myValueLabel = new Label( cp5 , String.valueOf(getValue())).setColor( color.getValueLabel( ) ); + setSliderMode( FIX ); + + } + + @ControlP5.Invisible @Override public void init( ) { + // need to override init here since _myValue will only be a + // normalized value here but _myDefaultValue needs to be absolute. + // by normalizing _myValue the range of values can be from 'big-to-small' + // as well as from 'small-to-big' + // in order not to break anything, init() will be overwritten here. + + _myDefaultValue = getValue( ); + cp5.getControlBroadcaster( ).plug( cp5.papplet , this , _myName ); + initControllerValue( ); + isInit = cp5.isAutoInitialization; + setValue( _myDefaultValue ); + isInit = true; + updateDisplayMode( DEFAULT ); + + } + + /** + * use the slider mode to set the mode of the slider bar, which can be Slider.FLEXIBLE or + * Slider.FIX + * + * @param theMode + * int + */ + public Slider setSliderMode( int theMode ) { + _myView = ( getWidth( ) > getHeight( ) ) ? new SliderViewH( ) : new SliderViewV( ); + _myControllerView = ( getWidth( ) > getHeight( ) ) ? new SliderViewH( ) : new SliderViewV( ); + _mySliderMode = theMode; + if ( _mySliderMode == FLEXIBLE ) { + _myHandleSize = ( _myDefaultHandleSize >= getHeight( ) / 2 ) ? _myDefaultHandleSize / 2 : _myDefaultHandleSize; + } else { + _myHandleSize = 0; + } + _myView.updateUnit( ); + setValue( PApplet.map( _myValue , 0 , 1 , _myMinReal , _myMaxReal ) ); + return this; + } + + public int getSliderMode( ) { + return _mySliderMode; + } + + /** + * sets the size of the Slider handle, by default it is set to either the width or height of the + * slider. + * + * @param theSize + */ + public Slider setHandleSize( int theSize ) { + _myDefaultHandleSize = theSize; + setSliderMode( _mySliderMode ); + return this; + } + + public int getHandleSize( ) { + return _myHandleSize; + } + + /** + * @see ControllerInterface.updateInternalEvents + * + */ + @ControlP5.Invisible public Slider updateInternalEvents( PApplet theApplet ) { + if ( isVisible ) { + if ( isMousePressed && !cp5.isAltDown( ) ) { + _myView.updateInternalEvents( theApplet ); + } + } + return this; + } + + /** + * the trigger event is set to Slider.PRESSED by default but can be changed to Slider.RELEASE so + * that events are triggered when the slider is released. + * + * @param theEventID + */ + public Slider setTriggerEvent( int theEventID ) { + triggerId = theEventID; + return this; + } + + /** + * returns the current trigger event which is either Slider.PRESSED or Slider.RELEASE + * + * @return int + */ + public int getTriggerEvent( ) { + return triggerId; + } + + @Override protected void mouseReleasedOutside( ) { + mouseReleased( ); + } + + @Override protected void mouseReleased( ) { + if ( triggerId == RELEASE ) { + _myView.update( ); + broadcast( FLOAT ); + } + } + + protected Slider snapValue( float theValue ) { + if ( isSnapToTickMarks ) { + _myValuePosition = ( ( _myValue - _myMin ) / _myUnit ); + _myView.setSnapValue( ); + } + return this; + } + + public float getValuePosition( ) { + return _myValuePosition; + } + + /** + * set the value of the slider. + * + * @param theValue + * float + */ + @Override public Slider setValue( float theValue ) { + if ( isMousePressed && theValue == getValue( ) ) { + return this; + } + _myInternalValue = theValue; + _myValue = PApplet.map( theValue , _myMinReal , _myMaxReal , 0 , 1 ); + snapValue( _myValue ); + _myValue = ( _myValue <= _myMin ) ? _myMin : _myValue; + _myValue = ( _myValue >= _myMax ) ? _myMax : _myValue; + _myValuePosition = ( ( _myValue - _myMin ) / _myUnit ); + _myValueLabel.set( adjustValue( getValue( ) ) ); + if ( triggerId == PRESSED ) { + broadcast( FLOAT ); + } + return this; + } + + @Override public float getValue( ) { + return PApplet.map( _myValue , 0 , 1 , _myMinReal , _myMaxReal ); + } + + /** + * assigns a random value to the slider. + */ + public Slider shuffle( ) { + float r = ( float ) Math.random( ); + setValue( PApplet.map( r , 0 , 1 , _myMinReal , _myMaxReal ) ); + return this; + } + + /** + * sets the sensitivity for the scroll behavior when using the mouse wheel or the scroll + * function of a multi-touch track pad. The smaller the value (closer to 0) the higher the + * sensitivity. by default this value is set to 0.1 + * + * @param theValue + * @return Slider + */ + public Slider setScrollSensitivity( float theValue ) { + scrollSensitivity = theValue; + return this; + } + + /** + * changes the value of the slider when hovering and using the mouse wheel or the scroll + * function of a multi-touch track pad. + * + * @param theRotationValue + * @return Slider + */ + @ControlP5.Invisible public Slider scrolled( int theRotationValue ) { + if ( isVisible ) { + float f = _myValue; + float steps = isSnapToTickMarks ? ( 1.0f / getNumberOfTickMarks( ) ) : scrollSensitivity * 0.1f; + f += ( _myMax - _myMin ) * ( -theRotationValue * steps ); + setValue( PApplet.map( f , 0 , 1 , _myMinReal , _myMaxReal ) ); + if ( triggerId == RELEASE ) { + broadcast( FLOAT ); + } + } + return this; + } + + @Override public Slider update( ) { + return setValue( PApplet.map( _myValue , 0 , 1 , _myMinReal , _myMaxReal ) ); + } + + /** + * sets the minimum value of the slider. + * + * @param theValue + * float + */ + @Override public Slider setMin( float theValue ) { + float f = getValue( ); + _myMinReal = theValue; + _myValue = PApplet.map( f , _myMinReal , _myMaxReal , 0 , 1 ); + setSliderMode( _mySliderMode ); + return this; + } + + /** + * set the maximum value of the slider. + * + * @param theValue + * float + */ + @Override public Slider setMax( float theValue ) { + float f = getValue( ); + _myMaxReal = theValue; + _myValue = PApplet.map( f , _myMinReal , _myMaxReal , 0 , 1 ); + setSliderMode( _mySliderMode ); + return this; + } + + @Override public float getMin( ) { + return _myMinReal; + } + + @Override public float getMax( ) { + return _myMaxReal; + } + + public Slider setRange( float theMin , float theMax ) { + float f = _myInternalValue; + _myMinReal = theMin; + _myMaxReal = theMax; + _myValue = PApplet.map( f , _myMinReal , _myMaxReal , 0 , 1 ); + setSliderMode( _mySliderMode ); + return this; + } + + /** + * set the width of the slider. + * + * @param theValue + * int + */ + @Override public Slider setWidth( int theValue ) { + super.setWidth( theValue ); + setSliderMode( _mySliderMode ); + return this; + } + + /** + * set the height of the slider. + * + * @param theValue + * int + */ + @Override public Slider setHeight( int theValue ) { + super.setHeight( theValue ); + setSliderMode( _mySliderMode ); + return this; + } + + @Override public Slider setSize( int theWidth , int theHeight ) { + super.setWidth( theWidth ); + setHeight( theHeight ); + _myView = ( getWidth( ) > getHeight( ) ) ? new SliderViewH( ) : new SliderViewV( ); + return this; + } + + /* TODO new implementations follow: http://www.ibm.com/developerworks/java/library/j-dynui/ take + * interface builder as reference */ + protected Slider setTickMarks( ) { + return this; + } + + /** + * sets the number of tickmarks for a slider, by default tick marks are turned off. + * + * @param theNumber + */ + public Slider setNumberOfTickMarks( int theNumber ) { + _myTickMarks.clear( ); + if ( theNumber > 0 ) { + for ( int i = 0 ; i < theNumber ; i++ ) { + _myTickMarks.add( new TickMark( this ) ); + } + showTickMarks( true ); + snapToTickMarks( true ); + setHandleSize( 20 ); + } else { + showTickMarks( false ); + snapToTickMarks( false ); + setHandleSize( _myDefaultHandleSize ); + } + setValue( PApplet.map( _myValue , 0 , 1 , _myMinReal , _myMaxReal ) ); + return this; + } + + /** + * returns the amount of tickmarks available for a slider + * + * @return int + */ + public int getNumberOfTickMarks( ) { + return _myTickMarks.size( ); + } + + /** + * shows or hides tickmarks for a slider + * + * @param theFlag + * @return Slider + */ + public Slider showTickMarks( boolean theFlag ) { + isShowTickMarks = theFlag; + return this; + } + + /** + * enables or disables snap to tick marks. + * + * @param theFlag + * @return Slider + */ + public Slider snapToTickMarks( boolean theFlag ) { + isSnapToTickMarks = theFlag; + return this; + } + + /** + * returns an instance of a tickmark by index. + * + * @see TickMark + * @param theIndex + * @return + */ + public TickMark getTickMark( int theIndex ) { + if ( theIndex >= 0 && theIndex < _myTickMarks.size( ) ) { + return _myTickMarks.get( theIndex ); + } else { + return null; + } + } + + /** + * returns an ArrayList of available tick marks for a slider. + * + * @return ArrayList + */ + public ArrayList< TickMark > getTickMarks( ) { + return _myTickMarks; + } + + /** + * {@inheritDoc} + */ + @Override @ControlP5.Invisible public Slider linebreak( ) { + cp5.linebreak( this , true , autoWidth , autoHeight , autoSpacing ); + return this; + } + + /** + * sets the color of tick marks if enabled. by default the color is set to white. + * + * @param theColor + * @return Slider + */ + public Slider setColorTickMark( int theColor ) { + _myColorTickMark = theColor; + return this; + } + + public int getDirection( ) { + return ( _myView instanceof SliderViewH ) ? HORIZONTAL : VERTICAL; + } + + /** + * {@inheritDoc} + */ + @Override @ControlP5.Invisible public Slider updateDisplayMode( int theMode ) { + _myDisplayMode = theMode; + switch ( theMode ) { + case ( DEFAULT ): + _myControllerView = ( getWidth( ) > getHeight( ) ) ? new SliderViewH( ) : new SliderViewV( ); + break; + case ( IMAGE ): + // TODO + break; + case ( SPRITE ): + // TODO + break; + case ( CUSTOM ): + default: + break; + } + return this; + } + + private abstract class SliderView implements ControllerView< Slider > { + + abstract void updateInternalEvents( PApplet theApplet ); + + abstract void update( ); + + abstract void updateUnit( ); + + abstract void setSnapValue( ); + + } + + private class SliderViewV extends SliderView { + + SliderViewV( ) { + _myCaptionLabel.align( LEFT , BOTTOM_OUTSIDE ).setPadding( 0 , Label.paddingY ); + _myValueLabel.set(adjustValue(getValue())).align( RIGHT_OUTSIDE , TOP ); + } + + void setSnapValue( ) { + float n = PApplet.round( PApplet.map( _myValuePosition , 0 , getHeight( ) , 0 , _myTickMarks.size( ) - 1 ) ); + _myValue = PApplet.map( n , 0 , _myTickMarks.size( ) - 1 , _myMin , _myMax ); + } + + void updateUnit( ) { + _myUnit = ( _myMax - _myMin ) / ( getHeight( ) - _myHandleSize ); + } + + void update( ) { + float f = _myMin + ( - ( _myControlWindow.mouseY - ( y( _myParent.getAbsolutePosition( ) ) + y( position ) ) - getHeight( ) ) ) * _myUnit; + setValue( PApplet.map( f , 0 , 1 , _myMinReal , _myMaxReal ) ); + } + + void updateInternalEvents( PApplet theApplet ) { + float f = _myMin + ( - ( _myControlWindow.mouseY - ( y( _myParent.getAbsolutePosition( ) ) + y( position ) ) - getHeight( ) ) ) * _myUnit; + setValue( PApplet.map( f , 0 , 1 , _myMinReal , _myMaxReal ) ); + } + + public void display( PGraphics theGraphics , Slider theController ) { + theGraphics.fill( getColor( ).getBackground( ) ); + theGraphics.noStroke( ); + if ( ( getColor( ).getBackground( ) >> 24 & 0xff ) > 0 ) { + theGraphics.rect( 0 , 0 , getWidth( ) , getHeight( ) ); + } + theGraphics.fill( getIsInside( ) ? getColor( ).getActive( ) : getColor( ).getForeground( ) ); + if ( getSliderMode( ) == FIX ) { + theGraphics.rect( 0 , getHeight( ) , getWidth( ) , -getValuePosition( ) ); + } else { + if ( isShowTickMarks ) { + theGraphics.triangle( getWidth( ) , getHeight( ) - getValuePosition( ) , getWidth( ) , getHeight( ) - getValuePosition( ) - getHandleSize( ) , 0 , getHeight( ) - getValuePosition( ) - getHandleSize( ) / 2 ); + } else { + theGraphics.rect( 0 , getHeight( ) - getValuePosition( ) - getHandleSize( ) , getWidth( ) , getHandleSize( ) ); + } + } + + if ( isLabelVisible ) { + getCaptionLabel( ).draw( theGraphics , 0 , 0 , theController ); + theGraphics.pushMatrix( ); + theGraphics.translate( 0 , ( int ) PApplet.map( _myValue , _myMax , _myMin , 0 , getHeight( ) - _myValueLabel.getHeight( ) ) ); + getValueLabel( ).draw( theGraphics , 0 , 0 , theController ); + theGraphics.popMatrix( ); + } + + if ( isShowTickMarks ) { + theGraphics.pushMatrix( ); + theGraphics.pushStyle( ); + theGraphics.translate( -4 , ( getSliderMode( ) == FIX ) ? 0 : getHandleSize( ) / 2 ); + theGraphics.fill( _myColorTickMark ); + float x = ( getHeight( ) - ( ( getSliderMode( ) == FIX ) ? 0 : getHandleSize( ) ) ) / ( getTickMarks( ).size( ) - 1 ); + for ( TickMark tm : getTickMarks( ) ) { + tm.draw( theGraphics , getDirection( ) ); + theGraphics.translate( 0 , x ); + } + theGraphics.popStyle( ); + theGraphics.popMatrix( ); + } + } + } + + private class SliderViewH extends SliderView { + + SliderViewH( ) { + _myCaptionLabel.align( RIGHT_OUTSIDE , CENTER ); + _myValueLabel.set(adjustValue(getValue())).align( LEFT , CENTER ); + } + + void setSnapValue( ) { + float n = PApplet.round( PApplet.map( _myValuePosition , 0 , getWidth( ) , 0 , _myTickMarks.size( ) - 1 ) ); + _myValue = PApplet.map( n , 0 , _myTickMarks.size( ) - 1 , _myMin , _myMax ); + } + + void updateUnit( ) { + _myUnit = ( _myMax - _myMin ) / ( getWidth( ) - _myHandleSize ); + } + + void update( ) { + float f = _myMin + ( _myControlWindow.mouseX - ( x( _myParent.getAbsolutePosition( ) ) + x( position ) ) ) * _myUnit; + setValue( PApplet.map( f , 0 , 1 , _myMinReal , _myMaxReal ) ); + } + + void updateInternalEvents( PApplet theApplet ) { + float f = _myMin + ( _myControlWindow.mouseX - ( x( _myParent.getAbsolutePosition( ) ) + x( position ) ) ) * _myUnit; + setValue( PApplet.map( f , 0 , 1 , _myMinReal , _myMaxReal ) ); + } + + public void display( PGraphics theGraphics , Slider theController ) { + theGraphics.fill( getColor( ).getBackground( ) ); + theGraphics.noStroke( ); + if ( ( getColor( ).getBackground( ) >> 24 & 0xff ) > 0 ) { + theGraphics.rect( 0 , 0 , getWidth( ) , getHeight( ) ); + } + theGraphics.fill( getIsInside( ) ? getColor( ).getActive( ) : getColor( ).getForeground( ) ); + if ( getSliderMode( ) == FIX ) { + theGraphics.rect( 0 , 0 , getValuePosition( ) , getHeight( ) ); + } else { + if ( isShowTickMarks ) { + theGraphics.triangle( getValuePosition( ) , 0 , getValuePosition( ) + getHandleSize( ) , 0 , getValuePosition( ) + _myHandleSize / 2 , getHeight( ) ); + } else { + theGraphics.rect( getValuePosition( ) , 0 , getHandleSize( ) , getHeight( ) ); + } + + } + theGraphics.fill( 255 ); + + if ( isLabelVisible ) { + getValueLabel( ).draw( theGraphics , 0 , 0 , theController ); + getCaptionLabel( ).draw( theGraphics , 0 , 0 , theController ); + } + + if ( isShowTickMarks ) { + theGraphics.pushMatrix( ); + // theGraphics.pushStyle( ); + theGraphics.translate( ( getSliderMode( ) == FIX ) ? 0 : getHandleSize( ) / 2 , getHeight( ) ); + theGraphics.fill( _myColorTickMark ); + theGraphics.noStroke( ); + float x = ( getWidth( ) - ( ( getSliderMode( ) == FIX ) ? 0 : getHandleSize( ) ) ) / ( getTickMarks( ).size( ) - 1 ); + for ( TickMark tm : getTickMarks( ) ) { + tm.draw( theGraphics , getDirection( ) ); + theGraphics.translate( x , 0 ); + } + // theGraphics.popStyle( ); + theGraphics.popMatrix( ); + } + } + } + + @Deprecated public void setSliderBarSize( int theSize ) { + _myDefaultHandleSize = theSize; + setSliderMode( _mySliderMode ); + } + + /** + * @see Slider#setScrollSensitivity(float) + * + * @param theValue + * @return Slider + */ + @Deprecated public Slider setSensitivity( float theValue ) { + return setScrollSensitivity( theValue ); + } + +} diff --git a/controlP5/Slider2D.java b/controlP5/Slider2D.java new file mode 100755 index 0000000..7168440 --- /dev/null +++ b/controlP5/Slider2D.java @@ -0,0 +1,287 @@ +package main.java.src2.main.java.controlP5.controlP5; + +/** + * controlP5 is a processing gui library. + * + * 2006-2015 by Andreas Schlegel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place, Suite 330, + * Boston, MA 02111-1307 USA + * + * @author Andreas Schlegel (http://www.sojamo.de) + * @modified ##date## + * @version ##version## + * + */ + +import processing.core.PApplet; +import processing.core.PGraphics; + +/** + * The Slider2D allows to control a handle within a 2D area. This controller returns an arrayValue + * with the current xy position of its handle. + * + * @author andreas schlegel + * + * @example controllers/ControlP5slider2D + * + */ +public class Slider2D extends Controller< Slider2D > { + + protected int cursorWidth = 6 , cursorHeight = 6; + protected float cursorX , cursorY; + protected float _myMinX , _myMinY; + protected float _myMaxX , _myMaxY; + public boolean isCrosshairs = true; + + private String _myValueLabelSeparator = ","; + + /** + * Convenience constructor to extend Slider2D. + * + * @example use/ControlP5extendController + * @param theControlP5 + * @param theName + */ + public Slider2D( ControlP5 theControlP5 , String theName ) { + this( theControlP5 , theControlP5.getDefaultTab( ) , theName , 0 , 0 , 99 , 9 ); + theControlP5.register( theControlP5.papplet , theName , this ); + } + + protected Slider2D( ControlP5 theControlP5 , ControllerGroup< ? > theParent , String theName , int theX , int theY , int theWidth , int theHeight ) { + super( theControlP5 , theParent , theName , theX , theY , theWidth , theHeight ); + _myArrayValue = new float[] { 0.0f , 0.0f }; + _myMinX = 0; + _myMinY = 0; + _myMaxX = theWidth; + _myMaxY = theHeight; + getCaptionLabel( ).setPadding( 0 , Label.paddingY ).align( LEFT , BOTTOM_OUTSIDE ); + getValueLabel( ).setPadding( 0 , Label.paddingY ).align( RIGHT , BOTTOM_OUTSIDE ); + } + + /* (non-Javadoc) + * + * @see main.java.src2.main.java.controlP5.controlp5.Controller#updateInternalEvents(processing.core.PApplet) */ + @ControlP5.Invisible public Slider2D updateInternalEvents( PApplet theApplet ) { + if ( isInside( ) ) { + if ( !cp5.isAltDown( ) ) { + float tX = PApplet.constrain( _myControlWindow.mouseX - ( x( _myParent.getAbsolutePosition( ) ) + x( position ) ) , 0 , getWidth( ) - cursorWidth ); + float tY = PApplet.constrain( _myControlWindow.mouseY - ( y( _myParent.getAbsolutePosition( ) ) + y( position ) ) , 0 , getHeight( ) - cursorHeight ); + if ( isMousePressed ) { + cursorX = tX; + cursorY = tY; + updateValue( ); + } + } + } + return this; + } + + Slider2D updateValue( ) { + return setValue( 0 ); + } + + public Slider2D setMinMax( float theMinX , float theMinY , float theMaxX , float theMaxY ) { + _myMinX = theMinX; + _myMinY = theMinY; + _myMaxX = theMaxX; + _myMaxY = theMaxY; + return setValue( _myArrayValue[ 0 ] , _myArrayValue[ 1 ] ); + } + + /** + * sets the minimum value for the x-axis + * + * @param theMinX + * @return Slider2D + */ + public Slider2D setMinX( float theMinX ) { + _myMinX = theMinX; + return updateValue( ); + } + + /** + * sets the minimum value for the y-axis + * + * @param theMinY + * @return Slider2D + */ + public Slider2D setMinY( float theMinY ) { + _myMinY = theMinY; + return updateValue( ); + } + + /** + * sets the maximum value for the x-axis + * + * @param theMaxX + * @return Slider2D + */ + public Slider2D setMaxX( float theMaxX ) { + _myMaxX = theMaxX; + return updateValue( ); + } + + /** + * sets the maximum value for the y-axis + * + * @param theMaxY + * @return Slider2D + */ + public Slider2D setMaxY( float theMaxY ) { + _myMaxY = theMaxY; + return updateValue( ); + } + + public float getMinX( ) { + return _myMinX; + } + + public float getMinY( ) { + return _myMinY; + } + + public float getMaxX( ) { + return _myMaxX; + } + + public float getMaxY( ) { + return _myMaxY; + } + + public float getCursorX( ) { + return cursorX; + } + + public float getCursorY( ) { + return cursorY; + } + + public float getCursorWidth( ) { + return cursorWidth; + } + + public float getCursorHeight( ) { + return cursorHeight; + } + + public Slider2D disableCrosshair( ) { + isCrosshairs = false; + return this; + } + + public Slider2D enableCrosshair( ) { + isCrosshairs = true; + return this; + } + + /* (non-Javadoc) TODO see https://forum.processing.org/topic/controlp5-slider2d-questions + * + * @see main.java.src2.main.java.controlP5.controlp5.Controller#setArrayValue(float[]) */ + @Override public Slider2D setArrayValue( float[] theArray ) { + _myArrayValue = theArray; + float rX = ( getWidth( ) - cursorWidth ) / ( _myMaxX - _myMinX ); + float rY = ( getHeight( ) - cursorHeight ) / ( _myMaxY - _myMinY ); + cursorX = PApplet.constrain( theArray[ 0 ] * rX , 0 , getWidth( ) - cursorWidth ); + cursorY = PApplet.constrain( theArray[ 1 ] * rY , 0 , getHeight( ) - cursorHeight ); + return updateValue( ); + } + + public float[] getArrayValue( ) { + return _myArrayValue; + } + + public Slider2D setCursorX( float theValue ) { + return setArrayValue( new float[] { theValue , getArrayValue( )[ 1 ] } ); + } + + public Slider2D setCursorY( float theValue ) { + return setArrayValue( new float[] { getArrayValue( )[ 0 ] , theValue } ); + } + + /* (non-Javadoc) + * + * @see main.java.src2.main.java.controlP5.controlp5.Controller#setValue(float) */ + public Slider2D setValue( float theValue ) { + _myArrayValue[ 0 ] = cursorX / ( ( float ) ( getWidth( ) - cursorWidth ) / ( float ) getWidth( ) ); + _myArrayValue[ 1 ] = cursorY / ( ( float ) ( getHeight( ) - cursorHeight ) / ( float ) getHeight( ) ); + _myArrayValue[ 0 ] = PApplet.map( _myArrayValue[ 0 ] , 0 , getWidth( ) , _myMinX , _myMaxX ); + _myArrayValue[ 1 ] = PApplet.map( _myArrayValue[ 1 ] , 0 , getHeight( ) , _myMinY , _myMaxY ); + _myValueLabel.set( adjustValue( _myArrayValue[ 0 ] , 0 ) + _myValueLabelSeparator + adjustValue( _myArrayValue[ 1 ] , 0 ) ); + broadcast( FLOAT ); + return this; + } + + public Slider2D setValue( float theValue1 , float theValue2 ) { + cursorX = PApplet.map( theValue1 , _myMinX , _myMaxX , 0 , getWidth( ) - cursorWidth ); + cursorY = PApplet.map( theValue2 , _myMinY , _myMaxY , 0 , getHeight( ) - cursorHeight ); + return setValue( 0 ); + } + + /** + * assigns a random value to the controller. + */ + public Slider2D shuffle( ) { + float rX = ( float ) Math.random( ); + float rY = ( float ) Math.random( ); + _myArrayValue[ 0 ] = rX * getWidth( ); + _myArrayValue[ 0 ] = rY * getHeight( ); + return setValue( 0 ); + } + + public void setValueLabelSeparator( String theSeparator ) { + _myValueLabelSeparator = theSeparator; + } + + /** + * {@inheritDoc} + */ + @Override @ControlP5.Invisible public Slider2D updateDisplayMode( int theMode ) { + _myDisplayMode = theMode; + switch ( theMode ) { + case ( DEFAULT ): + _myControllerView = new Slider2DView( ); + break; + case ( IMAGE ): + case ( SPRITE ): + case ( CUSTOM ): + default: + break; + } + return this; + } + + class Slider2DView implements ControllerView< Slider2D > { + + public void display( PGraphics theGraphics , Slider2D theController ) { + + theGraphics.noStroke( ); + + theGraphics.fill( theController.getColor( ).getBackground( ) ); + theGraphics.rect( 0 , 0 , getWidth( ) , getHeight( ) ); + + theGraphics.fill( theController.isInside ? theController.getColor( ).getActive( ) : theController.getColor( ).getForeground( ) ); + theGraphics.rect( ( int ) getCursorX( ) , ( int ) getCursorY( ) , ( int ) getCursorWidth( ) , ( int ) getCursorHeight( ) ); + + if ( isCrosshairs ) { + theGraphics.rect( 0 , ( int ) ( getCursorY( ) + getCursorHeight( ) / 2 ) , getWidth( ), 1 ); + theGraphics.rect( ( int ) ( getCursorX( ) + getCursorWidth( ) / 2 ) , 0 , 1 , getHeight( )); + } + + getCaptionLabel( ).draw( theGraphics , 0 , 0 , theController ); + getValueLabel( ).draw( theGraphics , 0 , 0 , theController ); + } + + } +} diff --git a/controlP5/Spacer.java b/controlP5/Spacer.java new file mode 100644 index 0000000..077c3ca --- /dev/null +++ b/controlP5/Spacer.java @@ -0,0 +1,67 @@ +package main.java.src2.main.java.controlP5.controlP5; + +/** + * controlP5 is a processing gui library. + * + * 2006-2015 by Andreas Schlegel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place, Suite 330, + * Boston, MA 02111-1307 USA + * + * @author Andreas Schlegel (http://www.sojamo.de) + * @modified ##date## + * @version ##version## + * + */ + +import processing.core.PGraphics; + +public class Spacer extends Controller< Spacer > { + + private int _myWeight = 1; + + public Spacer( ControlP5 theControlP5 , String theName ) { + this( theControlP5 , theControlP5.getDefaultTab( ) , theName , 0 , 0 , 20 , 20 ); + theControlP5.register( theControlP5.papplet , theName , this ); + } + + protected Spacer( ControlP5 theControlP5 , ControllerGroup< ? > theParent , String theName , float theX , float theY , int theWidth , int theHeight ) { + super( theControlP5 , theParent , theName , theX , theY , theWidth , theHeight ); + _myControllerView = new SpacerView( ); + } + + public Spacer setWeight( int theWeight ) { + _myWeight = theWeight; + return this; + } + + public Spacer setColor( int theColor ) { + getColor( ).setForeground( theColor ); + return this; + } + + private class SpacerView implements ControllerView< Spacer > { + + public void display( PGraphics g , Spacer c ) { + g.fill( c.getColor( ).getForeground( ) ); + g.noStroke( ); + if ( c.getWidth( ) >= c.getHeight( ) ) { + g.rect( 0 , ( c.getHeight( ) / 2 ) - _myWeight / 2 , c.getWidth( ) , _myWeight ); + } else { + g.rect( ( c.getWidth( ) / 2 ) - _myWeight / 2 , 0 , _myWeight , c.getHeight( ) ); + } + } + } + +} diff --git a/controlP5/TODO b/controlP5/TODO new file mode 100755 index 0000000..af03f11 --- /dev/null +++ b/controlP5/TODO @@ -0,0 +1,92 @@ +2014-09-08 Andreas Schlegel + * add glyphicons reference to controlp5.Icon.java http://glyphicons.com + * add useiconic to controlp5.Icon.java https://useiconic.com/open + +2014-05-29 Andreas Schlegel + * distinguish between left,center, right mouse click events http://forum.processing.org/two/discussion/5422/controlp5-mousepressed-only-if-mousebutton-left- + +2014-04-22 Andreas Schlegel + * javascript version on hold; it is unclear which project processing.js or p5.js will become the default js framework for processing + +2013-09-09 Andreas Schlegel + * javascript version + * textinput on android + * color picker used for clicks-and-strokes + * rendering into pgraphics + * add colorwheel + * add ControlFrame with customizable render access + * spacer / separator + +2011-03-24 Andreas Schlegel + * finish info to toString conversion + * implement plugTo for ControllerGroups + * BitFontRenderer addBitFont is broken, see the ControlP5bitFont example, + the font is cut off at the bottom, probably something wrong with + the label's PImage height. + +2010-08-07 Andreas Schlegel + * fix ControlWindowCanvas.pre(), doesnt work anymore. + +2010-07-25 Andreas Schlegel + * Android support, current version conflicts with android java (ControlWindow, PAppletWindow, using Toolkit when loading bit-font, KeyEvents, etc.) + * CColor: alpha handling + * Chart: finish. a chart graph controller to display line, bar, pie and histogram charts. + +2010-04-02 Andreas Schlegel + * BitFontRenderer: \n is recognized as a not-supported-character. fix! + * general: processingjs port + * Knob: implement new version of knob + * Textfield: implement new version of textfield + * TextArea: implement new version of TextArea + * Label: implement modifications so that text rendering for P3D works properly + * picking: use an image and color-coding for picking controllers instead mouse-coordinates against rectangular boxes. + + + +* fileChooser conflicts with mouse event. +http://processing.org/discourse/yabb2/YaBB.pl?num=1247162607/0#0 + + +* alt-tab causes problems with dragging functionality. +http://processing.org/discourse/yabb2/YaBB.pl?num=1242718131/0#0 + +* Multilist, pop out to the left. +* ScrollList, slider on the left option. +* ScrollList: collapse/and hide. add option to hide the scroll-list area but only keep the scrollbar. +* add CheckBoxList +* tab issues as addressed in this post: +http://processing.org/discourse/yabb_beta/YaBB.cgi?board=LibraryProblems;action=display;num=1237538493;start=2#2 + - moveTo does not work for only a String which would stanbd for the name of a tab + - controlP5.window(this).activateTab("myTab"); + controlP5.tab("myTab").mousePressed(); +* ControlGroup, set Width of bar. the + - toggle is not updated visually. +* Text -Field, -Label, -Area: customize font +* textarea: when changing the font of the valueLabel, the scrollbar is not updated / does not show even it is required. current hack is: myTextarea.setHeight(myTextarea.valueLabel().height()); +* textarea: automatically updating the scrollbar whensetting text with setText() see email from martin froehlich 16.january 2009 +* save and load does not work for some controllers. +* loading and saving +* multilist, range, matrix dont load from xml file. +* colorstyle does not save and load. +* labels dont save properly, background color is not saved. +* matrix needs to be redone. develop whole new concept for matrix / synthesizer. +* multitouch support +* controlWindow: add feedback when closing window. see email from henri 5 january 2009 +* controllerStyle: see email from johnny rodgers 30 november 2008 +* range: see email from hartmut bohnacker 27 november 2008 +* textfield: see email from henri 14 october 2008 +* save and open file dialog: see email from henri 12 october 2008 +* ControlBroadcaster suggestions: see email from aaron mayers 2 october 2008 +* pushmatrix / popMatrix : see email from florian 6 june 2008 +Lib.pre() { /*other code */ pushMatrix(); } +PApplet.draw() { ... } +Lib.draw() { popMatrix(); /* the lib code, untransformed */ } + + + +DONE +* (done) add setArrayValue to Controller class. +* (done, implemented with TickMark) Slider: snap +* (done) add id() method to ControlEvent +* (done, fixed) fix save/load. saving twice and loading again results in empty. +* (done) add setTitle to ControlWindow http://processing.org/discourse/yabb2/YaBB.pl?num=1245762312/0#0 +* (done, now ListBox) redo ScrollList so that it becomes a controller? change the button management of a scrollList. diff --git a/controlP5/Tab.java b/controlP5/Tab.java new file mode 100755 index 0000000..42cb775 --- /dev/null +++ b/controlP5/Tab.java @@ -0,0 +1,228 @@ +package main.java.src2.main.java.controlP5.controlP5; + +/** + * controlP5 is a processing gui library. + * + * 2006-2015 by Andreas Schlegel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place, Suite 330, + * Boston, MA 02111-1307 USA + * + * @author Andreas Schlegel (http://www.sojamo.de) + * @modified ##date## + * @version ##version## + * + */ + +import processing.core.PGraphics; + +/** + * Tabs are used to organize controllers. Tabs are arranged horizontally from the top-left corner by + * default, Tab extends ControllerGroup, for more available methods see the ControllerGroup + * documentation. Reposition tabs with {@link ControlWindow#setPositionOfTabs(int, int)} + * + * @example controllers/ControlP5tab + * @nosuperclasses ControllerGroup ControllerGroup + */ +public class Tab extends ControllerGroup< Tab > { + + protected int _myOffsetX = -1000; + protected int _myOffsetY = -1000; + protected boolean isActive = false; + private boolean isAlwaysActive = false; + protected boolean isEventActive = false; + protected float _myValue = 0; + protected String _myStringValue = ""; + public static int padding = 4; + public boolean autoWidth = true; + + /** + * + * @param theControlP5 ControlP5 + * @param theControlWindow ControlWindow + * @param theName String + */ + public Tab( ControlP5 theControlP5 , ControlWindow theControlWindow , String theName ) { + super( theControlP5 , null , theName , 0 , 0 ); + position = new float[ 2 ]; + absolutePosition = new float[ 2 ]; + isMoveable = false; + isEventActive = theControlP5.isTabEventsActive; + _myHeight = 16; + _myWidth = _myLabel.getWidth( ) + padding * 2; + _myLabel.align( LEFT , CENTER ).setPadding( 0 , 0 ); + } + + protected void setOffset( int theValueX , int theValueY ) { + _myOffsetX = theValueX; + _myOffsetY = theValueY; + } + + protected int height( ) { + return _myHeight; + } + + protected boolean updateLabel( ) { + isInside = inside( ); + return cp5.getWindow( ).getTabs( ).size( ) > 2; + } + + protected void drawLabel( PGraphics theGraphics ) { + if ( autoWidth ) { + _myWidth = _myLabel.getWidth( ) + padding * 2; + } + theGraphics.pushMatrix( ); + theGraphics.pushStyle( ); + theGraphics.noStroke( ); + theGraphics.fill( isInside ? color.getForeground( ) : color.getBackground( ) ); + if ( isActive ) { + theGraphics.fill( color.getActive( ) ); + } + theGraphics.translate( _myOffsetX , _myOffsetY ); + theGraphics.rect( 0 , 0 , _myWidth - 1 , _myHeight ); + _myLabel.draw( theGraphics , padding , 0 , this ); + theGraphics.popStyle( ); + theGraphics.popMatrix( ); + } + + /** + * set the label of the group. TODO overwriting COntrollerGroup.setLabel to set the Width of a + * tab after renaming. this should be temporary and fixed in the future. + * + * @param theLabel String + * @return Tab + */ + public Tab setLabel( String theLabel ) { + _myLabel.set( theLabel ); + return this; + } + + protected int width( ) { + return _myWidth; + } + + /** + * @param theWidth + * @return + */ + public Tab setWidth( int theWidth ) { + _myWidth = theWidth + padding; + autoWidth = false; + return this; + } + + public Tab setHeight( int theHeight ) { + _myHeight = theHeight; + return this; + } + + protected boolean inside( ) { + return ( cp5.getWindow( ).mouseX > _myOffsetX && cp5.getWindow( ).mouseX < _myOffsetX + _myWidth && cp5.getWindow( ).mouseY > _myOffsetY && cp5.getWindow( ).mouseY < _myOffsetY + _myHeight ); + } + + /** + * {@inheritDoc} + */ + @ControlP5.Invisible public void mousePressed( ) { + cp5.getWindow( ).activateTab( this ); + if ( isEventActive ) { + cp5.getControlBroadcaster( ).broadcast( new ControlEvent( this ) , METHOD); + } + } + + /** + * Activates a tab. + * + * @param theFlag boolean + */ + public Tab setActive( boolean theFlag ) { + isActive = theFlag; + return this; + } + + public Tab setAlwaysActive( boolean theFlag ) { + isAlwaysActive = theFlag; + return this; + } + + /** + * checks if a tab is active. + * + * @return boolean + */ + public boolean isActive( ) { + return isAlwaysActive || isActive; + } + + public boolean isAlwaysActive( ) { + return isAlwaysActive; + } + + @Override public Tab bringToFront( ) { + cp5.getWindow( ).activateTab( this ); + return this; + } + + /** + * {@inheritDoc} + */ + @Override public Tab moveTo( ControlWindow theWindow ) { + cp5.getWindow( ).removeTab( this ); + setTab( theWindow , getName( ) ); + return this; + } + + /** + * activates or deactivates the Event status of a tab, When activated a tab will send a + * controlEvent to the main application. By default this is disabled. + * + * @param theFlag boolean + * @return Tab + */ + public Tab activateEvent( boolean theFlag ) { + isEventActive = theFlag; + return this; + } + + /** + * {@inheritDoc} + */ + @Override public String getStringValue( ) { + return _myStringValue; + } + + /** + * {@inheritDoc} + */ + @Override public float getValue( ) { + return _myValue; + } + + /** + * {@inheritDoc} + */ + @Override public Tab setValue( float theValue ) { + _myValue = theValue; + return this; + } + + @Deprecated public float value( ) { + return _myValue; + } + + @Deprecated public String stringValue( ) { + return _myStringValue; + } + +} diff --git a/controlP5/Textarea.java b/controlP5/Textarea.java new file mode 100755 index 0000000..4e749eb --- /dev/null +++ b/controlP5/Textarea.java @@ -0,0 +1,447 @@ +package main.java.src2.main.java.controlP5.controlP5; + +/** + * controlP5 is a processing gui library. + * + * 2006-2015 by Andreas Schlegel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place, Suite 330, + * Boston, MA 02111-1307 USA + * + * @author Andreas Schlegel (http://www.sojamo.de) + * @modified ##date## + * @version ##version## + * + */ + +import java.util.Arrays; +import java.util.List; + +import processing.core.PApplet; +import processing.core.PFont; +import processing.core.PGraphics; + +/** + * a textarea can be used to leave notes, it uses the controlP5 BitFont to render text. Scrollbars + * will automatically be added when text extends the visible area. Textarea extends ControllerGroup, + * for more methods available see the ControllerGroup documentation. + * + * @example controllers/ControlP5textarea + */ +public class Textarea extends ControllerGroup< Textarea > implements ControlListener { + + protected String _myText; + protected Slider _myScrollbar; + protected int _myColorBackground = 0x000000; + protected boolean isColorBackground = false; + protected float _myScrollValue = 0; + protected boolean isScrollbarVisible = true; + protected int _myBottomOffset = 4; + private final int _myScrollbarWidth = 5; + + /** + * Convenience constructor to extend Textarea. + * + * @example use/ControlP5extendController + * @param theControlP5 + * @param theName + */ + public Textarea( ControlP5 theControlP5 , String theName ) { + this( theControlP5 , theControlP5.getDefaultTab( ) , theName , "" , 0 , 0 , 199 , 99 ); + theControlP5.register( theControlP5.papplet , theName , this ); + } + + /** + * + * @param theControlP5 + * ControlP5 + * @param theGroup + * ControllerGroup + * @param theName + * String + * @param theText + * String + * @param theX + * int + * @param theY + * int + * @param theW + * int + * @param theH + * int + */ + protected Textarea( ControlP5 theControlP5 , ControllerGroup< ? > theGroup , String theName , String theText , int theX , int theY , int theW , int theH ) { + super( theControlP5 , theGroup , theName , theX , theY ); + _myWidth = theW; + _myHeight = theH; + _myText = theText; + setup( ); + } + + /** + * + * @param theText + * String + * @param theX + * int + * @param theY + * int + */ + public Textarea( String theText , int theX , int theY ) { + super( theX , theY ); + _myText = theText; + setup( ); + } + + private void setup( ) { + _myValueLabel = new Label( cp5 , _myText ); + + _myValueLabel.setFont( cp5.controlFont == cp5.defaultFont ? cp5.defaultFontForText : cp5.controlFont ); + + _myValueLabel.setWidth(_myWidth); + _myValueLabel.setHeight(_myHeight); + _myValueLabel.setMultiline( true ); + _myValueLabel.toUpperCase( false ); + _myValueLabel.setColor( color.getValueLabel( ) ); + + _myScrollbar = new Slider( cp5 , _myParent , getName( ) + "Scroller" , 0 , 1 , 1 , _myWidth - 5 , 0 , 5 , _myHeight ); + _myScrollbar.init( ); + _myScrollbar.setBroadcast( false ); + _myScrollbar.setSliderMode( Slider.FLEXIBLE ); + _myScrollbar.isMoveable = false; + _myScrollbar.isLabelVisible = false; + _myScrollbar.setParent( this ); + _myScrollbar.addListener( this ); + add( _myScrollbar ); + setWidth( _myWidth ); + setHeight( _myHeight ); + _myScrollbar.color.set( color ); + _myScrollbar.setColorBackground( 0x00000000 ); + _myScrollbar.setHandleSize( 40 ); + } + + /** + * + * @param theEvent + * ControlEvent + */ + public void controlEvent( ControlEvent theEvent ) { + _myScrollValue = - ( 1 - theEvent.getValue( ) ); + scroll( ); + } + + public Textarea hideScrollbar( ) { + isScrollbarVisible = false; + _myScrollbar.hide( ); + return this; + } + + public Textarea showScrollbar( ) { + isScrollbarVisible = true; + boolean isScrollbar = _myHeight < ( _myValueLabel.getTextHeight( ) + _myValueLabel.getLineHeight( ) ); + if ( isScrollbar ) { + _myScrollbar.show( ); + } + return this; + } + + public boolean isScrollable( ) { + return _myScrollbar.isVisible( ); + } + + @Override public Textarea setColorBackground( int theColor ) { + _myColorBackground = theColor; + isColorBackground = true; + return this; + } + + public Textarea disableColorBackground( ) { + isColorBackground = false; + return this; + } + + public Textarea enableColorBackground( ) { + isColorBackground = true; + return this; + } + + /** + * scroll the Textarea remotely. values must range from 0 to 1. + * + * @param theValue + */ + public Textarea scroll( float theValue ) { + _myScrollbar.setValue( 1 - theValue ); + return this; + } + + /** + * private update method for the scrollbar. + */ + private void scroll( ) { + _myScrollValue = PApplet.min( PApplet.max( -1 , _myScrollValue ) , 0 ); + + float myLen = _myValueLabel.getTextHeight( ) + _myValueLabel.getLineHeight( ); + float myOffset = 0; + boolean isScrollbar = _myHeight < myLen; + if ( isScrollbar ) { + myOffset = _myScrollValue * ( myLen - _myHeight + _myBottomOffset ); + } + isScrollbar = isScrollbarVisible && isScrollbar; + _myScrollbar.setVisible( isScrollbar ); + _myValueLabel.setOffsetYratio( _myScrollValue ); + } + + @ControlP5.Invisible public void scrolled( int theStep ) { + if ( _myScrollbar.isVisible( ) ) { + int lines = ( _myValueLabel.getTextHeight( ) / _myValueLabel.getLineHeight( ) ); + float step = 1.0f / lines; + scroll( ( 1 - getScrollPosition( ) ) + ( theStep * step ) ); + } + } + + @ControlP5.Invisible public float getScrollPosition( ) { + return _myScrollbar.getValue( ); + } + + /** + * set the width of the textarea. + * + * @param theValue + * int + */ + @Override public Textarea setWidth( int theValue ) { + theValue = ( theValue < 10 ) ? 10 : theValue; + _myWidth = theValue; + _myValueLabel.setWidth( _myWidth - _myScrollbarWidth - 10 ); + return this; + } + + /** + * set the height of the textarea. + * + * @param theValue + * int + */ + @Override public Textarea setHeight( int theValue ) { + theValue = ( theValue < 10 ) ? 10 : theValue; + _myHeight = theValue; + _myValueLabel.setHeight( _myHeight - 2 ); + _myScrollbar.setHeight( theValue ); + return this; + } + + public Textarea setSize( int theWidth , int theHeight ) { + setWidth( theWidth ); + setHeight( theHeight ); + return this; + } + + /** + * set the lineheight of the textarea. + * + * @param theLineHeight + * int + */ + public Textarea setLineHeight( int theLineHeight ) { + _myValueLabel.setLineHeight( theLineHeight ); + scroll( ); + return this; + } + + /** + * set the text color of the textarea. + * + * @param theColor + * int + */ + public Textarea setColor( int theColor ) { + _myValueLabel.setColor( theColor , true ); + return this; + } + + /** + * returns the instance of the textarea's label. + * + * @return + */ + public Label getValueLabel( ) { + return _myValueLabel; + } + + /** + * set the text of the textarea. + * + * @param theText + * String + */ + public Textarea setText( String theText ) { + _myValueLabel.set( theText ); + _myScrollValue = ( float ) ( _myHeight ) / ( float ) ( _myValueLabel.getTextHeight( ) ); + _myScrollbar.setHeight( _myHeight + _myValueLabel.getStyle( ).paddingTop + _myValueLabel.getStyle( ).paddingBottom ); + return this; + } + + public Textarea clear( ) { + return setText( "" ); + } + + public Textarea append( String theText ) { + return setText( getText( ) + theText ); + } + + public Textarea append( String theText , int max ) { + String str = getText( ) + theText; + + if ( max == -1 ) { + return setText( str ); + } + + List< String > strs = Arrays.asList( str.split( "\n" ) ); + return setText( CP.join( strs.subList( Math.max( 0 , strs.size( ) - max ) , strs.size( ) ) , "\n" ) ); + } + + /** + * returns the text content of the textarea. + * + * @return String + */ + public String getText( ) { + return getStringValue( ); + } + + @Override protected void preDraw( PGraphics theGraphics ) { + if ( isScrollbarVisible ) { + _myScrollbar.setVisible( _myValueLabel.getOverflow( ) > 1 ); + } + if ( _myScrollbar.isVisible( ) || isColorBackground ) { + float x = _myWidth - _myScrollbarWidth + _myValueLabel.getStyle( ).paddingLeft + _myValueLabel.getStyle( ).paddingRight; + float y = y( _myScrollbar.getPosition( ) ); + set( _myScrollbar.getPosition( ) , x , y ); + if ( !isColorBackground ) { + theGraphics.noFill( ); + } else { + int a = _myColorBackground >> 24 & 0xff; + theGraphics.fill( _myColorBackground , a > 0 ? a : 255 ); + } + int ww = _myWidth + _myValueLabel.getStyle( ).paddingLeft + _myValueLabel.getStyle( ).paddingRight; + int hh = _myHeight + _myValueLabel.getStyle( ).paddingTop + _myValueLabel.getStyle( ).paddingBottom; + theGraphics.rect( 0 , 0 , ww , hh ); + } + } + + // !!! add padding to the box. + // padding and margin doesnt work nicely with textarea yet! + protected boolean inside( ) { + return ( cp5.getWindow( ).mouseX > x( position ) + x( _myParent.absolutePosition ) && cp5.getWindow( ).mouseX < x( position ) + x( _myParent.absolutePosition ) + _myWidth + && cp5.getWindow( ).mouseY > y( position ) + y( _myParent.absolutePosition ) && cp5.getWindow( ).mouseY < y( position ) + y( _myParent.absolutePosition ) + _myHeight ); + } + + public String getStringValue( ) { + return _myValueLabel.getText( ); + } + + public Textarea setFont( ControlFont theFont ) { + getValueLabel( ).setFont( theFont ); + return this; + } + + public Textarea setFont( PFont thePFont ) { + getValueLabel( ).setFont( thePFont ); + return this; + } + + public Textarea setFont( int theFontIndex ) { + getValueLabel( ).setFont( theFontIndex ); + return this; + } + + /** + * @param theColor + * @return Textarea + */ + public Textarea setScrollBackground( int theColor ) { + _myScrollbar.setColorBackground( theColor ); + return this; + } + + /** + * @param theColor + * @return Textarea + */ + public Textarea setScrollForeground( int theColor ) { + _myScrollbar.setColorForeground( theColor ); + return this; + } + + /** + * @param theColor + * @return Textarea + */ + public Textarea setScrollActive( int theColor ) { + _myScrollbar.setColorActive( theColor ); + return this; + } + + /** + * @param theColor + * @return Textarea + */ + public Textarea setBorderColor( int theColor ) { + color.setBackground( theColor ); + return this; + } + + /** + * {@inheritDoc} + */ + @Override public float getValue( ) { + return 0; + } + + @Deprecated public float value( ) { + return 0; + } + + @Deprecated public String stringValue( ) { + return getStringValue( ); + } + + @Deprecated public Label valueLabel( ) { + return getValueLabel( ); + } + + /** + * @exclude + * @deprecated + * @return + */ + @Deprecated public boolean isScrollbarVisible( ) { + return isScrollbarVisible; + } + + /** + * @deprecated + * @exclude + * @return + */ + @Deprecated public String text( ) { + return getText( ); + } +} + +// @todo linebreaking algorithm. +// http://www.leverkruid.eu/GKPLinebreaking/index.html +// found at http://www.texone.org/?p=43 + diff --git a/controlP5/Textfield.java b/controlP5/Textfield.java new file mode 100755 index 0000000..5c7e830 --- /dev/null +++ b/controlP5/Textfield.java @@ -0,0 +1,484 @@ +package main.java.src2.main.java.controlP5.controlP5; + +/** + * controlP5 is a processing gui library. + * + * 2006-2015 by Andreas Schlegel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place, Suite 330, + * Boston, MA 02111-1307 USA + * + * @author Andreas Schlegel (http://www.sojamo.de) + * @modified ##date## + * @version ##version## + * + */ + +import java.util.Arrays; +import java.util.HashMap; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; + +import main.java.src2.main.java.controlP5.controlP5.events.ReleasedOutsideListener; +import processing.core.PApplet; +import processing.core.PGraphics; +import processing.event.Event; +import processing.event.KeyEvent; + + +/** + * A singleline input textfield, use arrow keys to go back and forth, use backspace to delete + * characters. Using the up and down arrows lets you cycle through the history of the textfield. + * + * This is the best you can get. Font handling, font switching, measuring, left align, right align, + * etc. was giving me a big headache. not perfect, i think this is a good compromise. + * + * @example controllers/ControlP5textfield + * @nosuperclasses Controller Controller + */ +public class Textfield extends Controller< Textfield > implements ReleasedOutsideListener { + + /* TODO textspacing does not work properly for bitfonts sometimes first row of pixels in a + * bitfont texture gets cut off */ + + protected boolean isTexfieldActive; + protected boolean isKeepFocus; + protected StringBuffer _myTextBuffer = new StringBuffer( ); + protected int _myTextBufferIndex = 0; + protected int _myTextBufferOverflow = 0; + protected int _myTextBufferIndexPosition = 0; + public static int cursorWidth = 1; + protected Map< Integer , TextfieldCommand > keyMapping; + protected InputFilter _myInputFilter = InputFilter.BITFONT; + protected List< Integer > ignorelist; + protected LinkedList< String > _myHistory; + protected int _myHistoryIndex; + protected int len = 0; + protected int offset = 2; + protected int margin = 2; + protected boolean isPasswordMode; + protected boolean autoclear = true; + protected int _myColorCursor = 0x88ffffff; + protected PGraphics buffer; + + public enum InputFilter { + INTEGER(Arrays.asList( '0' , '1' , '2' , '3' , '4' , '5' , '6' , '7' , '8' , '9' )), FLOAT(Arrays.asList( '0' , '1' , '2' , '3' , '4' , '5' , '6' , '7' , '8' , '9' , '.' )), BITFONT(Arrays.asList( '\n' , '\r' , ' ' , '!' , '"' , '#' , '$' , '%' , + '&' , '\'' , '(' , ')' , '*' , '+' , ',' , '-' , '.' , '/' , '0' , '1' , '2' , '3' , '4' , '5' , '6' , '7' , '8' , '9' , ':' , ';' , '<' , '=' , '>' , '?' , '@' , 'A' , 'B' , 'C' , 'D' , 'E' , 'F' , 'G' , 'H' , 'I' , 'J' , 'K' , 'L' , 'M' , + 'N' , 'O' , 'P' , 'Q' , 'R' , 'S' , 'T' , 'U' , 'V' , 'W' , 'X' , 'Y' , 'Z' , '[' , '\\' , ']' , '^' , '_' , '`' , 'a' , 'b' , 'c' , 'd' , 'e' , 'f' , 'g' , 'h' , 'i' , 'j' , 'k' , 'l' , 'm' , 'n' , 'o' , 'p' , 'q' , 'r' , 's' , 't' , 'u' , + 'v' , 'w' , 'x' , 'y' , 'z' , '{' , '|' , '}' , '~' )), DEFAULT(new LinkedList< Character >( )); + + final List< Character > allowed; + + InputFilter( List< Character > theList ) { + allowed = theList; + } + + private boolean apply(char theCharater) { + if ( allowed.isEmpty( ) ) { + return true; + } else { + return allowed.contains( theCharater ); + } + } + + } + + /** + * Convenience constructor to extend Textfield. + * + * @example use/ControlP5extendController + * @param theControlP5 + * @param theName + */ + public Textfield( ControlP5 theControlP5 , String theName ) { + this( theControlP5 , theControlP5.getDefaultTab( ) , theName , "" , 0 , 0 , 199 , 19 ); + theControlP5.register( theControlP5.papplet , theName , this ); + } + + public Textfield( ControlP5 theControlP5 , ControllerGroup< ? > theParent , String theName , String theDefaultValue , int theX , int theY , int theWidth , int theHeight ) { + super( theControlP5 , theParent , theName , theX , theY , theWidth , theHeight ); + + _myCaptionLabel = new Label( cp5 , theName , 0 , 0 , color.getCaptionLabel( ) ); + _myValueLabel.setFont( cp5.controlFont == cp5.defaultFont ? cp5.defaultFontForText : cp5.controlFont ); + _myCaptionLabel.align(LEFT, BOTTOM_OUTSIDE); + _myCaptionLabel.setPaddingX( 0 ); + + _myBroadcastType = STRING; + _myValueLabel.setFixedSize( true ); + _myValueLabel.set( "" ); + _myValueLabel.setWidth( getWidth( ) - margin * 2 ); + _myValueLabel.setPadding( 0 , 0 ); + _myValueLabel.align( LEFT , CENTER ); + _myValueLabel.setColor( color.getValueLabel( ) ); + _myValueLabel.toUpperCase( false ); + + _myValueLabel.setLabeltype( _myValueLabel.new SinglelineTextfield( ) ); + + _myHistory = new LinkedList< String >( ); + _myHistory.addFirst( "" ); + + setSize( getWidth( ) , getHeight( ) ); + + keyMapping = new HashMap< Integer , TextfieldCommand >( ); + keyMapping.put( ENTER , new Enter( ) ); + keyMapping.put( DEFAULT , new InsertCharacter( ) ); + keyMapping.put( DELETE , new DeleteCharacter( ) ); + keyMapping.put( BACKSPACE , new DeleteCharacter( ) ); + keyMapping.put( LEFT , new MoveLeft( ) ); + keyMapping.put( RIGHT , new MoveRight( ) ); + keyMapping.put( UP , new MoveUp( ) ); + keyMapping.put( DOWN , new MoveDown( ) ); + + ignorelist = new LinkedList< Integer >( ); + ignorelist.add( SHIFT ); + ignorelist.add( ALT ); + ignorelist.add( CONTROL ); + ignorelist.add( TAB ); + ignorelist.add( COMMANDKEY ); + + setInputFilter( DEFAULT ); + + } + + @Override public Textfield setWidth( int theWidth ) { + _myValueLabel.setWidth( theWidth ); + return super.setWidth( theWidth ); + } + + @Override public Textfield setHeight( int theHeight ) { + _myValueLabel.setHeight( theHeight ); + return super.setHeight( theHeight ); + } + + public Textfield setFocus( boolean theValue ) { + isTexfieldActive = isActive = theValue; + return this; + } + + /** + * check if the textfield is active and in focus. + * + * @return boolean + */ + public boolean isFocus( ) { + return isTexfieldActive; + } + + public Textfield keepFocus( boolean theValue ) { + isKeepFocus = theValue; + if ( isKeepFocus ) { + setFocus( true ); + } + return this; + } + +// public Textfield setFont( PFont thePFont ) { +// getValueLabel( ).setFont( thePFont ); +// return this; +// } +// +// public Textfield setFont( ControlFont theFont ) { +// getValueLabel( ).setFont( theFont ); +// return this; +// } + + public Textfield setFont( int theFont ) { + getValueLabel( ).setFont( theFont ); + return this; + } + + public Textfield setPasswordMode( boolean theFlag ) { + isPasswordMode = theFlag; + return this; + } + + public Textfield setInputFilter( int theInputType ) { + switch ( theInputType ) { + case ( INTEGER ): + _myInputFilter = InputFilter.INTEGER; + break; + case ( FLOAT ): + _myInputFilter = InputFilter.FLOAT; + break; + case ( BITFONT ): + _myInputFilter = InputFilter.BITFONT; + break; + default: + _myInputFilter = InputFilter.DEFAULT; + break; + } + return this; + } + + @Override public Textfield setValue( float theValue ) { + // use setText(String) instead + return this; + } + + @Override protected void updateFont( ControlFont theControlFont ) { + super.updateFont( theControlFont ); + } + + public Textfield setValue( String theText ) { + _myTextBuffer = new StringBuffer( theText ); + setIndex( _myTextBuffer.length( ) ); + return this; + } + + public Textfield setText( String theText ) { + return setValue( theText ); + } + + public Textfield clear( ) { + // create a new text buffer + _myTextBuffer = new StringBuffer( ); + // reset the buffer index + setIndex( 0 ); + return this; + } + + public Textfield setAutoClear( boolean theValue ) { + autoclear = theValue; + return this; + } + + public boolean isAutoClear( ) { + return autoclear; + } + + @Override protected void mousePressed( ) { + super.mousePressed(); + + if ( isActive ) { + // TODO System.out.println("adjust cursor"); + } + int x = ( int ) ( getControlWindow( ).mouseX - x( getAbsolutePosition( ) ) ); + int y = ( int ) ( getControlWindow( ).mouseY - y( getAbsolutePosition( ) ) ); + + // TODO System.out.println(x + ":" + y); + setFocus( true ); + + + } + + @Override public void mouseReleasedOutside( ) { + if (!isKeepFocus) { + isTexfieldActive = isActive = false; + } + } + + public int getIndex( ) { + return _myTextBufferIndex; + } + + public String getText( ) { + return _myTextBuffer.toString( ); + } + + public String[] getTextList( ) { + String[] s = new String[ _myHistory.size( ) ]; + _myHistory.toArray( s ); + return s; + } + + public Map getKeyMapping() { + return keyMapping; + } + + public Textfield setColor(int theColor ) { + getValueLabel( ).setColor( theColor ); + return this; + } + + public Textfield setColorCursor( int theColor ) { + _myColorCursor = theColor; + return this; + } + + @Override public Textfield setSize( int theWidth , int theHeight ) { + super.setSize( theWidth , theHeight ); + buffer = cp5.papplet.createGraphics( getWidth( ) , getHeight( ) ); + return this; + } + + @Override public void draw( PGraphics theGraphics ) { + + theGraphics.pushStyle( ); + theGraphics.fill( color.getBackground( ) ); + theGraphics.pushMatrix( ); + theGraphics.translate( x( position ) , y( position ) ); + theGraphics.rect( 0 , 0 , getWidth( ) , getHeight( ) ); + theGraphics.noStroke( ); + + theGraphics.fill( _myColorCursor ); + theGraphics.pushMatrix( ); + theGraphics.pushStyle( ); + + buffer.beginDraw( ); + buffer.background( 0 , 0 ); + final String text = passCheck( getText( ) ); + final int textWidth = ControlFont.getWidthFor( text.substring( 0 , _myTextBufferIndex ) , _myValueLabel , buffer ); + final int dif = PApplet.max( textWidth - _myValueLabel.getWidth( ) , 0 ); + final int _myTextBufferIndexPosition = ControlFont.getWidthFor( text.substring( 0 , _myTextBufferIndex ) , _myValueLabel , buffer ); + _myValueLabel.setText( text ); + _myValueLabel.draw( buffer , -dif , 0 , this ); + buffer.noStroke( ); + if ( isTexfieldActive ) { + if ( !cp5.papplet.keyPressed ) { + buffer.fill( _myColorCursor , PApplet.abs( PApplet.sin( cp5.papplet.frameCount * 0.05f )) * 255 ); + } else { + buffer.fill( _myColorCursor ); + } + buffer.rect( PApplet.max( 1 , PApplet.min( _myTextBufferIndexPosition , _myValueLabel.getWidth( ) - 3 ) ) , 0 , 1 , getHeight( ) ); + } + buffer.endDraw( ); + theGraphics.image( buffer , 0 , 0 ); + + theGraphics.popStyle( ); + theGraphics.popMatrix( ); + + theGraphics.fill( isTexfieldActive ? color.getActive( ) : color.getForeground( ) ); + theGraphics.rect( 0 , 0 , getWidth( ) , 1 ); + theGraphics.rect( 0 , getHeight( ) - 1 , getWidth( ) , 1 ); + theGraphics.rect( -1 , 0 , 1 , getHeight( ) ); + theGraphics.rect( getWidth( ) , 0 , 1 , getHeight( ) ); + _myCaptionLabel.draw( theGraphics , 0 , 0 , this ); + theGraphics.popMatrix( ); + theGraphics.popStyle( ); + } + + private String passCheck( String label ) { + if ( !isPasswordMode ) { + return label; + } + String newlabel = ""; + for ( int i = 0 ; i < label.length( ) ; i++ ) { + newlabel += "*"; + } + return newlabel; + } + + public void keyEvent( KeyEvent theKeyEvent ) { + if ( isUserInteraction && isTexfieldActive && isActive && theKeyEvent.getAction( ) == KeyEvent.PRESS ) { + if ( ignorelist.contains( cp5.getKeyCode( ) ) ) { + return; + } + if ( keyMapping.containsKey( cp5.getKeyCode( ) ) ) { + keyMapping.get( cp5.getKeyCode( ) ).execute( ); + } else { + keyMapping.get( DEFAULT ).execute( ); + } + } + } + + /** + * make the controller execute a return event. submit the current content of the texfield. + * + */ + public Textfield submit( ) { + keyMapping.get( ENTER ).execute( ); + return this; + } + + + + protected Textfield setIndex( int theIndex ) { + _myTextBufferIndex = theIndex; + return this; + } + + + + class InsertCharacter implements TextfieldCommand { + + public void execute( ) { + if ( ( int ) ( cp5.getKey( ) ) == 65535 ) { + return; + } + + if ( _myInputFilter.apply( cp5.getKey( ) ) ) { + _myTextBuffer.insert( _myTextBufferIndex , cp5.getKey( )); + setIndex( _myTextBufferIndex + 1 ); + } + } + } + + class Enter implements TextfieldCommand { + + public void execute( ) { + setStringValue( _myTextBuffer.toString( ) ); + broadcast( ); + // update current buffer with the last item inside the input history + _myHistory.set( _myHistory.size( ) - 1 , _myTextBuffer.toString( ) ); + // set the history index to our last item + _myHistoryIndex = _myHistory.size( ); + // add a new and empty buffer to the history + _myHistory.add( "" ); + if ( autoclear ) { + clear( ); + } + } + } + + class DeleteCharacter implements TextfieldCommand { + + public void execute( ) { + if ( _myTextBuffer.length( ) > 0 && _myTextBufferIndex > 0 ) { + _myTextBuffer.deleteCharAt( _myTextBufferIndex - 1 ); + setIndex( _myTextBufferIndex - 1 ); + } + } + } + + class MoveLeft implements TextfieldCommand { + + public void execute( ) { + setIndex( ( ( cp5.modifiers & Event.META ) > 0 ) ? 0 : PApplet.max( 0 , _myTextBufferIndex - 1 ) ); + } + } + + class MoveRight implements TextfieldCommand { + + public void execute( ) { + setIndex( ( ( cp5.modifiers & Event.META ) > 0 ) ? _myTextBuffer.length( ) : PApplet.min( _myTextBuffer.length( ) , _myTextBufferIndex + 1 ) ); + } + } + + class MoveUp implements TextfieldCommand { + + public void execute( ) { + if ( _myHistoryIndex == 0 ) { + return; + } + _myHistoryIndex = PApplet.max( 0 , --_myHistoryIndex ); + _myTextBuffer = new StringBuffer( _myHistory.get( _myHistoryIndex ) ); + setIndex( _myTextBuffer.length( ) ); + } + } + + class MoveDown implements TextfieldCommand { + + public void execute( ) { + if ( _myHistoryIndex >= _myHistory.size( ) - 1 ) { + return; + } + + _myHistoryIndex = PApplet.min( _myHistory.size( ) - 1 , ++_myHistoryIndex ); + _myTextBuffer = new StringBuffer( _myHistory.get( _myHistoryIndex ) ); + setIndex( _myTextBuffer.length( ) ); + } + } + +} \ No newline at end of file diff --git a/controlP5/TextfieldCommand.java b/controlP5/TextfieldCommand.java new file mode 100644 index 0000000..4961a85 --- /dev/null +++ b/controlP5/TextfieldCommand.java @@ -0,0 +1,5 @@ +package main.java.src2.main.java.controlP5.controlP5; + +public interface TextfieldCommand { + void execute( ); +} \ No newline at end of file diff --git a/controlP5/Textlabel.java b/controlP5/Textlabel.java new file mode 100755 index 0000000..add7f19 --- /dev/null +++ b/controlP5/Textlabel.java @@ -0,0 +1,243 @@ +package main.java.src2.main.java.controlP5.controlP5; + +/** + * controlP5 is a processing gui library. + * + * 2006-2015 by Andreas Schlegel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place, Suite 330, + * Boston, MA 02111-1307 USA + * + * @author Andreas Schlegel (http://www.sojamo.de) + * @modified ##date## + * @version ##version## + * + */ + +import java.util.Arrays; +import java.util.List; + +import processing.core.PApplet; +import processing.core.PFont; +import processing.core.PGraphics; + +/** + * @example controllers/ControlP5textlabel + * @nosuperclasses Controller Controller Textarea + */ +public class Textlabel extends Controller< Textlabel > { + + protected int _myLetterSpacing = 0; + + private boolean disabled; + + /** + * + * @param theControlP5 ControlP5 + * @param theParent Tab + * @param theName String + * @param theValue String + * @param theX int + * @param theY int + */ + protected Textlabel( final ControlP5 theControlP5 , final Tab theParent , final String theName , final String theValue , final int theX , final int theY ) { + super( theControlP5 , theParent , theName , theX , theY , 200 , 20 ); + _myStringValue = theValue; + setup( ); + } + + /** + * + * @param theValue String + * @param theX int + * @param theY int + */ + protected Textlabel( final String theValue , final int theX , final int theY ) { + super( "" , theX , theY ); + _myStringValue = theValue; + setup( ); + } + + protected Textlabel( final String theValue , final int theX , final int theY , final int theW , final int theH , final int theColor ) { + super( "" , theX , theY ); + + _myStringValue = theValue; + _myValueLabel = new Label( cp5 , _myStringValue , theW , theH , theColor ); + _myValueLabel.setFont( cp5.controlFont == cp5.defaultFont ? cp5.defaultFontForText : cp5.controlFont ); + _myValueLabel.setMultiline( false ); + _myValueLabel.toUpperCase( false ); + } + + public Textlabel( ControlP5 theControlP5 , final String theValue , final int theX , final int theY ) { + super( "" , theX , theY ); + + cp5 = theControlP5; + _myStringValue = theValue; + _myValueLabel = new Label( cp5 , _myStringValue , 10 , 10 , 0xffffffff ); + _myValueLabel.setFont( cp5.controlFont == cp5.defaultFont ? cp5.defaultFontForText : cp5.controlFont ); + _myValueLabel.set( _myStringValue ); + _myValueLabel.setMultiline( false ); + _myValueLabel.toUpperCase( false ); + } + + public Textlabel( ControlP5 theControlP5 , final String theValue , final int theX , final int theY , final int theW , final int theH ) { + super( "" , theX , theY ); + cp5 = theControlP5; + _myStringValue = theValue; + _myValueLabel = new Label( cp5 , _myStringValue , theW , theH , 0xffffffff ); + _myValueLabel.setFont( cp5.controlFont == cp5.defaultFont ? cp5.defaultFontForText : cp5.controlFont ); + _myValueLabel.setMultiline( false ); + _myValueLabel.toUpperCase( false ); + } + + protected void setup( ) { + _myValueLabel = new Label( cp5 , _myStringValue ); + _myValueLabel.setFont( cp5.controlFont == cp5.defaultFont ? cp5.defaultFontForText : cp5.controlFont ); + _myValueLabel.setMultiline( false ); + _myValueLabel.toUpperCase( false ); + } + + @Override public Textlabel setWidth( int theValue ) { + _myValueLabel.setWidth( theValue ); + return this; + } + + public Textlabel setHeight( int theValue ) { + _myValueLabel.setHeight( theValue ); + return this; + } + + public void draw( final PApplet theApplet ) { + draw( theApplet.g ); + } + + @Override public void draw( final PGraphics theGraphics ) { + if ( !disabled ) { + theGraphics.pushMatrix( ); + theGraphics.translate( x( position ) , y( position ) ); + _myValueLabel.draw( theGraphics , 0 , 0 , this ); + theGraphics.popMatrix( ); + } + } + + public void draw( ) { + draw( cp5.pg ); + } + + public void draw( int theX , int theY ) { + cp5.papplet.pushMatrix( ); + cp5.papplet.translate( theX , theY ); + draw( cp5.pg ); + cp5.papplet.popMatrix( ); + } + + public Textlabel setValue( float theValue ) { + return this; + } + + public Textlabel setText( final String theText ) { + return setValue( theText ); + } + + public Textlabel setLineHeight( int theValue ) { + _myValueLabel.setLineHeight( theValue ); + return this; + } + + public int getLineHeight( ) { + return _myValueLabel.getLineHeight( ); + } + + public ControllerStyle getStyle() { + return _myValueLabel.getStyle( ); + } + + public Textlabel append( String theText , int max ) { + String str = _myStringValue + theText; + + if ( max == -1 ) { + return setText( str ); + } + + List< String > strs = Arrays.asList( str.split( "\n" ) ); + return setText( CP.join( strs.subList( Math.max( 0 , strs.size( ) - max ) , strs.size( ) ) , "\n" ) ); + } + + @Override public Textlabel setStringValue( String theValue ) { + return setValue( theValue ); + } + + public Textlabel setMultiline( final boolean theFlag ) { + _myValueLabel.setMultiline( true ); + return this; + } + + /** + * set the text of the textlabel. + * + * @param theText String + */ + public Textlabel setValue( final String theText ) { + _myStringValue = theText; + _myValueLabel.set( theText ); + setWidth( _myValueLabel.getWidth( ) ); + setHeight( _myValueLabel.getHeight( ) ); + return this; + } + + public Textlabel setColor( int theColor ) { + _myValueLabel.setColor( theColor , true ); + return this; + } + + /** + * set the letter spacing of the font. + * + * @param theValue int + * @return Textlabel + */ + public Textlabel setLetterSpacing( final int theValue ) { + _myLetterSpacing = theValue; + _myValueLabel.setLetterSpacing( _myLetterSpacing ); + return this; + } + + public Textlabel setFont( ControlFont theControlFont ) { + getValueLabel( ).setFont( theControlFont ); + return this; + } + + public Textlabel setFont( PFont thePFont ) { + getValueLabel( ).setFont( thePFont ); + return this; + } + + protected boolean inside( ) { + return ( _myControlWindow.mouseX > x( position ) + x( _myParent.getAbsolutePosition( ) ) && _myControlWindow.mouseX < x( position ) + x( _myParent.getAbsolutePosition( ) ) + _myValueLabel.getWidth( ) + && _myControlWindow.mouseY > y( position ) + y( _myParent.getAbsolutePosition( ) ) && _myControlWindow.mouseY < y( position ) + y( _myParent.getAbsolutePosition( ) ) + _myValueLabel.getHeight( ) ); + } + + public Label get( ) { + return _myValueLabel; + } + + private void printConstructorError( String theValue ) { + ControlP5 + .logger( ) + .severe( + "The Textlabel constructor you are using has been deprecated, please use constructor\nnew Textlabel(ControlP5,String,int,int) or\nnew Textlabel(ControlP5,String,int,int,int,int) or\nnew Textlabel(ControlP5,String,int,int,int,int,int,int)\ninstead. The Textlabel with value '" + + theValue + "' is disabled and will not be rendered." ); + } + +} diff --git a/controlP5/TickMark.java b/controlP5/TickMark.java new file mode 100755 index 0000000..a688efc --- /dev/null +++ b/controlP5/TickMark.java @@ -0,0 +1,93 @@ +package main.java.src2.main.java.controlP5.controlP5; + +/** + * controlP5 is a processing gui library. + * + * 2006-2015 by Andreas Schlegel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place, Suite 330, + * Boston, MA 02111-1307 USA + * + * @author Andreas Schlegel (http://www.sojamo.de) + * @modified ##date## + * @version ##version## + * + */ +import processing.core.PGraphics; + +/** + * Tickmarks are used by the Slider and Knob controller. + */ +public class TickMark implements CDrawable { + + protected Controller< ? > _myParent; + + protected int _myLen = 4; + + protected Label _myLabel; + + protected boolean isLabel; + + public TickMark( Controller< ? > theController ) { + _myParent = theController; + } + + public void draw( PGraphics theGraphics ) { + draw( theGraphics , ControlP5Constants.HORIZONTAL ); + } + + public void draw( PGraphics theGraphics , int theDirection ) { + theGraphics.pushMatrix( ); + switch ( theDirection ) { + case ( ControlP5Constants.HORIZONTAL ): + theGraphics.translate( 0 , _myLen ); + theGraphics.rect( 0 , 0 , 1 , _myLen ); + if ( isLabel ) { + _myLabel.draw( theGraphics , 0 , _myLen + 4 , _myParent ); + } + break; + case ( ControlP5Constants.VERTICAL ): + theGraphics.translate( -_myLen , 0 ); + theGraphics.rect( 0 , 0 , _myLen , 1 ); + if ( isLabel ) { + _myLabel.draw( theGraphics , -_myLabel.getWidth( ) , 0 , _myParent ); + } + break; + } + + theGraphics.popMatrix( ); + } + + public void setLength( int theLength ) { + _myLen = theLength; + } + + public Label setLabel( String theLabeltext ) { + if ( _myLabel == null ) { + _myLabel = new Label( _myParent.cp5 , theLabeltext ); + isLabel = true; + } else { + _myLabel.set( theLabeltext ); + } + return _myLabel; + } + + public Label getLabel( ) { + if ( _myLabel == null ) { + setLabel( "?" ); + } + return _myLabel; + } + +} diff --git a/controlP5/Toggle.java b/controlP5/Toggle.java new file mode 100755 index 0000000..28f4d1e --- /dev/null +++ b/controlP5/Toggle.java @@ -0,0 +1,266 @@ +package main.java.src2.main.java.controlP5.controlP5; + +/** + * controlP5 is a processing gui library. + * + * 2006-2015 by Andreas Schlegel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place, Suite 330, + * Boston, MA 02111-1307 USA + * + * @author Andreas Schlegel (http://www.sojamo.de) + * @modified ##date## + * @version ##version## + * + */ + +import processing.core.PGraphics; +import processing.core.PImage; + +/** + * a toggle can have two states, true and false, where true has the value 1 and false is 0. + * + * @example controllers/ControlP5toggle + * @nosuperclasses Controller Controller + */ +public class Toggle extends Controller< Toggle > { + + protected int cnt; + protected boolean isOn = false; + protected float internalValue = -1; + public static int autoWidth = 39; + public static int autoHeight = 19; + protected float[] autoSpacing = new float[] { 10 , 20 }; + + /** + * Convenience constructor to extend Toggle. + * + * @example use/ControlP5extendController + * @param theControlP5 + * @param theName + */ + public Toggle( ControlP5 theControlP5 , String theName ) { + this( theControlP5 , theControlP5.getDefaultTab( ) , theName , 0 , 0 , 0 , autoWidth , autoHeight ); + theControlP5.register( theControlP5.papplet , theName , this ); + } + + public Toggle( ControlP5 theControlP5 , Tab theParent , String theName , float theValue , float theX , float theY , int theWidth , int theHeight ) { + super( theControlP5 , theParent , theName , theX , theY , theWidth , theHeight ); + _myValue = theValue; + _myCaptionLabel.align( LEFT , BOTTOM_OUTSIDE ).setPadding( 0 , Label.paddingY ); + } + + /** + * + * @param theApplet PApplet + */ + @ControlP5.Invisible public void draw( PGraphics theGraphics ) { + theGraphics.pushMatrix( ); + theGraphics.translate( x( position ) , y( position ) ); + _myControllerView.display( theGraphics , this ); + theGraphics.popMatrix( ); + } + + protected void onEnter( ) { + isActive = true; + } + + protected void onLeave( ) { + isActive = false; + } + + /** + * {@inheritDoc} + */ + @ControlP5.Invisible public void mousePressed( ) { + setState( !isOn ); + isActive = false; + } + + /** + * {@inheritDoc} + */ + @Override public Toggle setValue( float theValue ) { + setState(theValue != 0); + return this; + } + + /** + * @param theValue + */ + public Toggle setValue( boolean theValue ) { + setValue( (theValue) ? 1 : 0 ); + return this; + } + + public boolean getBooleanValue( ) { + return getState( ); + } + + /** + * {@inheritDoc} + */ + @Override public Toggle update( ) { + return setValue( _myValue ); + } + + /** + * sets the state of the toggle, this can be true or false. + * + * @param theFlag boolean + */ + public Toggle setState( boolean theFlag ) { + isOn = theFlag; + _myValue = (!isOn) ? 0 : 1; + broadcast( FLOAT ); + return this; + } + + public boolean getState( ) { + return isOn; + } + + protected void deactivate( ) { + isOn = false; + _myValue = (!isOn) ? 0 : 1; + } + + protected void activate( ) { + isOn = true; + _myValue = (!isOn) ? 0 : 1; + } + + /** + * switch the state of a toggle. + */ + public Toggle toggle( ) { + setState(!isOn); + return this; + } + + /** + * set the visual mode of a Toggle. use setMode(ControlP5.DEFAULT) or setMode(ControlP5.SWITCH) + * + * @param theMode + */ + public Toggle setMode( int theMode ) { + updateDisplayMode( theMode ); + return this; + } + + public int getMode( ) { + return _myDisplayMode; + } + + /** + * by default a toggle returns 0 (for off) and 1 (for on). the internal value variable can be + * used to store an additional value for a toggle event. + * + * @param theInternalValue + */ + @ControlP5.Invisible public void setInternalValue( float theInternalValue ) { + internalValue = theInternalValue; + } + + @ControlP5.Invisible public float internalValue( ) { + return internalValue; + } + + /** + * {@inheritDoc} + */ + @Override public Toggle linebreak( ) { + cp5.linebreak( this , true , autoWidth , autoHeight , autoSpacing ); + return this; + } + + @Override public Toggle setImages( PImage ... theImages ) { + setImage( theImages[ 0 ] , DEFAULT ); + setImage( theImages[ 1 ] , ACTIVE ); + updateDisplayMode( IMAGE ); + return this; + } + + /** + * {@inheritDoc} + */ + @Override @ControlP5.Invisible public Toggle updateDisplayMode( int theState ) { + _myDisplayMode = theState; + switch ( theState ) { + case ( DEFAULT ): + _myControllerView = new ToggleView( ); + break; + case ( IMAGE ): + _myControllerView = new ToggleImageView( ); + break; + case ( SWITCH ): + _myControllerView = new ToggleSwitchView( ); + break; + case ( CUSTOM ): + default: + break; + } + return this; + } + + class ToggleView implements ControllerView< Toggle > { + + public void display( PGraphics theGraphics , Toggle theController ) { + if ( isActive ) { + theGraphics.fill( isOn ? color.getActive( ) : color.getForeground( ) ); + } else { + theGraphics.fill( isOn ? color.getActive( ) : color.getBackground( ) ); + } + + theGraphics.rect( 0 , 0 , getWidth( ) , getHeight( ) ); + + if ( isLabelVisible ) { + _myCaptionLabel.draw( theGraphics , 0 , 0 , theController ); + } + + } + } + + class ToggleImageView implements ControllerView< Toggle > { + + public void display( PGraphics theGraphics , Toggle theController ) { + + if ( isOn ) { + theGraphics.image( (availableImages[ACTIVE]) ? images[ ACTIVE ] : images[ DEFAULT ] , 0 , 0 ); + } else { + theGraphics.image( images[ DEFAULT ] , 0 , 0 ); + } + } + } + + class ToggleSwitchView implements ControllerView< Toggle > { + + public void display( PGraphics theGraphics , Toggle theController ) { + + theGraphics.fill( color.getBackground( ) ); + theGraphics.rect( 0 , 0 , getWidth( ) , getHeight( ) ); + theGraphics.fill( color.getActive( ) ); + + if ( isOn ) { + theGraphics.rect( 0 , 0 , getWidth( ) / 2 , getHeight( ) ); + } else { + theGraphics.rect( ( getWidth( ) % 2 == 0 ? 0 : 1 ) + getWidth( ) / 2 , 0 , getWidth( ) / 2 , getHeight( ) ); + } + + if ( isLabelVisible ) { + _myCaptionLabel.draw( theGraphics , 0 , 0 , theController ); + } + } + } +} diff --git a/controlP5/Tooltip.java b/controlP5/Tooltip.java new file mode 100755 index 0000000..2fec224 --- /dev/null +++ b/controlP5/Tooltip.java @@ -0,0 +1,390 @@ +package main.java.src2.main.java.controlP5.controlP5; + +/** + * controlP5 is a processing gui library. + * + * 2006-2015 by Andreas Schlegel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 + * of the License, or (at your option) any later version. + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place, Suite 330, + * Boston, MA 02111-1307 USA + * + * @author Andreas Schlegel (http://www.sojamo.de) + * @modified ##date## + * @version ##version## + * + */ + +import java.util.HashMap; +import java.util.Map; + +import processing.core.PApplet; +import processing.core.PGraphics; + +/** + * A tooltip can be registered for individual controllers + * and is activated on rollover. + * + * @example controllers/ControlP5tooltip + * + */ +public class Tooltip { + + private ControllerView< ? > _myView; + private final float[] position = new float[3]; + private float[] currentPosition = new float[3]; + private float[] previousPosition = new float[3]; + private float[] offset = new float[3]; + private Controller< ? > _myController; + private long startTime = 0; + private long _myDelayInMillis = 500; + private int _myMode = ControlP5.INACTIVE; + private int _myHeight = 20; + private int _myBackgroundColor = 0xffffffb4; + private int _myMaxAlpha = 255; + private final int _myAlpha = 0; + private final Map< Controller< ? > , String > map; + private Label _myLabel; + private boolean enabled = true; + private int _myBorder; + private final ControlP5 cp5; + private final int _myAlignH = ControlP5.RIGHT; + private int _myColor = 0x00000000; + + Tooltip( ControlP5 theControlP5 ) { + cp5 = theControlP5; + position[0] = -1000; + position[1] = -1000; + currentPosition = new float[3]; + previousPosition = new float[3]; + offset = new float[] { 0 , 24 , 0 }; + map = new HashMap< Controller< ? > , String >( ); + _myLabel = new Label( cp5 , "tooltip" ); + _myLabel.setColor( _myColor ); + _myLabel.setPadding( 0 , 0 ); + setView( new TooltipView( ) ); + setBorder( 4 ); + } + + /** + * sets the border of the tooltip, the default border is + * 4px. + * + * @param theValue + * @return Tooltip + */ + public Tooltip setBorder( int theValue ) { + _myBorder = theValue; + _myLabel.getStyle( ).setMargin( _myBorder , _myBorder , _myBorder , _myBorder ); + return this; + } + + /** + * returns the value of the border + * + * @return + */ + public int getBorder( ) { + return _myBorder; + } + + /** + * sets the transparency of the default background, + * default value is 200 + * + * @param theValue + * @return Tooltip + */ + public Tooltip setAlpha( int theValue ) { + _myMaxAlpha = theValue; + return this; + } + + private void updateText( String theText ) { + int n = 1; + for ( char c : theText.toCharArray( ) ) { + if ( c == '\n' ) { + n++; + } + } + if ( _myLabel.getHeight( ) != _myLabel.getLineHeight( ) * n ) { + _myLabel.setHeight( _myLabel.getLineHeight( ) * n ); + } + _myLabel.set( theText ); + } + + /** + * TODO see below + * @param theWindow + */ + void draw( ControlWindow theWindow ) { + // TODO re-implement Tooltip + } + + private boolean moved( ) { + return PApplet.abs( PApplet.dist( previousPosition[0] , previousPosition[1] , currentPosition[0] , currentPosition[1] ) ) > 1; + } + + /** + * A tooltip is activated when entered by the mouse, + * after a given delay time the Tooltip starts to fade + * in. Use setDelay(long) to adjust the default delay + * time of 1000 millis. + * + * @param theMillis + * @return Tooltip + */ + public Tooltip setDelay( long theMillis ) { + _myDelayInMillis = theMillis; + return this; + } + + /** + * a Tooltip is activated when the mouse enters a + * controller. + * + * @param theController + */ + protected void activate( Controller< ? > theController ) { + if ( map.containsKey( theController ) ) { + startTime = System.nanoTime( ); + _myController = theController; + currentPosition[0] = theController.getControlWindow( ).mouseX; + currentPosition[1] = theController.getControlWindow( ).mouseY; + updateText( map.get( _myController ) ); + _myMode = ControlP5.WAIT; + } + } + + protected void deactivate( ) { + deactivate( 1 ); + } + + protected void deactivate( int theNum ) { + if ( theNum == 0 ) { + if ( _myMode >= ControlP5.IDLE ) { + if ( _myMode < ControlP5.FADEOUT ) + startTime = System.nanoTime( ); + _myMode = ControlP5.FADEOUT; + } + } else { + _myMode = ( _myMode >= ControlP5.IDLE ) ? ControlP5.FADEOUT : ControlP5.DONE; + } + } + + /** + * A custom view can be set for a Tooltip. The default + * view class can be found at the bottom of the Tooltip + * source. + * + * @see ControllerView + * @param theDisplay + * @return Tooltip + */ + public Tooltip setView( ControllerView< ? > theDisplay ) { + _myView = theDisplay; + return this; + } + + /** + * registers a controller with the Tooltip, when + * activating the tooltip for a particular controller, + * the registered text (second parameter) will be + * displayed. + * + * @param theController + * @param theText + * @return Tooltip + */ + public Tooltip register( Controller< ? > theController , String theText ) { + map.put( theController , theText ); + theController.registerProperty( "setTooltipEnabled" , "isTooltipEnabled" ); + return this; + } + + public Tooltip register( String theControllerName , String theText ) { + Controller< ? > c = cp5.getController( theControllerName ); + if ( c == null ) { + return this; + } + map.put( c , theText ); + c.registerProperty( "setTooltipEnabled" , "isTooltipEnabled" ); + return this; + } + + /** + * removes a controller from the tooltip + * + * @param theController + * @return Tooltip + */ + public Tooltip unregister( Controller< ? > theController ) { + map.remove( theController ); + theController.removeProperty( "setTooltipEnabled" , "isTooltipEnabled" ); + return this; + } + + public Tooltip unregister( String theControllerName ) { + Controller< ? > c = cp5.getController( theControllerName ); + if ( c == null ) { + return this; + } + return unregister( c ); + } + + /** + * with the default display, the width of the tooltip is + * set automatically, therefore setWidth() does not have + * any effect without changing the default display to a + * custom ControllerView. + * + * @see ControllerView + * @see Tooltip#setDisplay(ControllerView) + * @return Tooltip + */ + public Tooltip setWidth( int theWidth ) { + // TODO + // _myWidth = theWidth; + return this; + } + + public int getWidth( ) { + return _myLabel.getWidth( ); + } + + /** + * @see Tooltip#setWidth(int) + * @param theHeight + * @return Tooltip + */ + public Tooltip setHeight( int theHeight ) { + ControlP5.logger( ).warning( "Tooltip.setHeight is disabled with this version" ); + _myHeight = theHeight; + return this; + } + + /** + * adds an offset to the position of the controller + * relative to the mouse cursor's position. default + * offset is (10,20) + * + * @param theX + * @param theY + * @return Tooltip + */ + public Tooltip setPositionOffset( float theX , float theY ) { + offset[0] = theX; + offset[1] = theY; + return this; + } + + /** + * disables the Tooltip on a global level, when + * disabled, tooltip will not respond to any registered + * controller. to disable a tooltip for aparticular + * controller, used unregister(Controller) + * + * @see Tooltip#unregister(Controller) + * @return Tooltip + */ + public Tooltip disable( ) { + enabled = false; + return this; + } + + /** + * in case the tooltip is disabled, use enable() to turn + * the tooltip back on. + * + * @return Tooltip + */ + public Tooltip enable( ) { + enabled = true; + return this; + } + + /** + * check if the tooltip is enabled or disabled + * + * @return boolean + */ + public boolean isEnabled( ) { + return enabled; + } + + /** + * sets the Label to a custom label and replaces the + * default label. + * + * @param theLabel + * @return Tooltip + */ + public Tooltip setLabel( Label theLabel ) { + _myLabel = theLabel; + return this; + } + + /** + * returns the current Label + * + * @return Label + */ + public Label getLabel( ) { + return _myLabel; + } + + /** + * sets the background color of the tooltip, the default + * color is a dark grey + * + * @param theColor + * @return Tooltip + */ + public Tooltip setColorBackground( int theColor ) { + _myBackgroundColor = theColor; + return this; + } + + /** + * sets the text color of the tooltip's label, the + * default color is a white + * + * @param theColor + * @return Tooltip + */ + public Tooltip setColorLabel( int theColor ) { + _myColor = theColor; + _myLabel.setColor( theColor ); + return this; + } + + class TooltipView implements ControllerView< Controller< ? >> { + + public void display( PGraphics theGraphics , Controller< ? > theController ) { + _myHeight = _myLabel.getHeight( ); + theGraphics.fill( _myBackgroundColor , _myAlpha ); + theGraphics.rect( 0 , 0 , getWidth( ) + _myBorder * 2 , _myHeight + _myBorder * 2 ); + theGraphics.pushMatrix( ); + if ( _myAlignH == ControlP5.RIGHT ) { + theGraphics.translate( 6 , 0 ); + } else { + theGraphics.translate( getWidth( ) - 6 , 0 ); + } + theGraphics.triangle( 0 , 0 , 4 , -4 , 8 , 0 ); + theGraphics.popMatrix( ); + int a = ( int ) ( PApplet.map( _myAlpha , 0 , _myMaxAlpha , 0 , 255 ) ); + _myLabel.setColor( a << 24 | ( _myColor >> 16 ) << 16 | ( _myColor >> 8 ) << 8 | ( _myColor >> 0 ) << 0 ); + _myLabel.draw( theGraphics , 0 , 0 , theController ); + } + } +} diff --git a/controlP5/changeLog.txt b/controlP5/changeLog.txt new file mode 100755 index 0000000..779d142 --- /dev/null +++ b/controlP5/changeLog.txt @@ -0,0 +1,867 @@ +2016-14-04 Andreas Schlegel + + mostly bug fixes, see github issues + removed all PVector references, variables, and functions using processing.core.PVector + +2015-08-02 Andreas Schlegel + + changes see github change log + +2015-03-29 Andreas Schlegel + + * src controlP5.ScrollabelList: + fixing ArrayOutOfBounds error as reported on github under issue 3 https://github.com/sojamo/controlp5/issues/3 + +2014-09-08 Andreas Schlegel + + * src main.java.src2.main.java.controlP5.controlp5.Icon: + adding Icon class, acts like a button; can be used with images and font-icons + from "Font Awesome". + + * src main.java.src2.main.java.controlP5.controlp5.controlp5.Button: + when theButton acts as a switch (setSwitch(true)), the corresponding + method inside a sketch should use type boolean as argument instead of float; + a java.lang.IllegalArgumentException will be thrown in case of a float argument + + +2014-08-28 Andreas Schlegel + + * src main.java.src2.main.java.controlP5.controlp5.controlp5.Background: + adding Background class, a convenience class for grouping controllers with + the top bar disabled by default. + + +2014-07-21 Andreas Schlegel + + * src main.java.src2.main.java.controlP5.controlp5.Textfield: + making use of a graphics buffer now, simplifies cursor position calculation and + prevents from throwing an ArrayIndexOutOfBoundsException which could occasionally + happen with previous versions. + + +2014-07-17 Andreas Schlegel + * version 2.2.1 + + * removing PVector dependencies + + * removing all deprecated methods + + * src main.java.src2.main.java.controlP5.controlp5.ListBox, main.java.src2.main.java.controlP5.controlp5.controlp5.DropdownList: + Due to changes to and deprecation of DropdownList and ListBox, both share the same + source code as ScrollableList. Consequently some functionality got lost though this + should be marginal. In case of any issues occuring due to these changes, please + inform the author. In any case use ScrollableList instead of DropdownList and ListBox. + The major benefit of using a ScrollableList is that an item is now of type Map and + therefore is not limited (as it was the case before) to the implementation of a + ListBoxItem and hence is more flexible as data container. + Do note that ListBox, DropdownList and ScrollableList do extend Controller, + not ControllerGroup + + +2014-04-27 Andreas Schlegel + * version 2.1.6 + + * preparing for next release. + + * src main.java.src2.main.java.controlP5.controlp5.ListBox, main.java.src2.main.java.controlP5.controlp5.controlp5.DropdownList: + deprecated, use ScrollableList instead. + + * src main.java.src2.main.java.controlP5.controlp5.controlp5.ControlP5Legacy: + repository of functions only kept for backwards compatibility but it is not encouraged + to use the anymore. Use ControlP5Base instead. + + * src main.java.src2.main.java.controlP5.controlp5.Controller: + adding onEnter, onLeave, onDrag, onStartDrag, onEndDrag, onWheel, onMove, onClick, + onPress, onDoublePress, onRelease, onReleaseOutside, onChange to register callbacks + for specific events. This is not implemented for classes extending ControllerGroup. + + +2013-01-23 Andreas Schlegel + + * version 2.1.5 + + * src main.java.src2.main.java.controlP5.controlp5.controlp5.ControllerProperties: + removing XML format. adding JSON format, JSON format will be the default format instead of the Java Serialization format. + + +2012-09-22 Andreas Schlegel + + * version 2.1.3 + + * src main.java.src2.main.java.controlP5.controlp5.ListBox: + now extends Controller instead of ControlGroup. + + +2012-09-09 Andreas Schlegel + + * version 2.1.0 + + * starting processingjs implementation. + - many controllers will be included: + completed: Bang, Button, CheckBox, ColorPalette, Group, Knob, Label, ListBox, DropdownList, Numberbox, RadioButton, + Range, Slider, Slider2D, Tab, Textfield, Toggle + under construction: Canvas, Chart, ColorPicker, ControllerView, FrameRate, Matrix, Textarea + pending: ButtonBar, Pointer, TickMark, Tooltip + some will be missed: MutiList, Textlabel + and more will be missed: CColor, ControlBehavior, ControllerProperties, ControllerStyle, ControlTimer, ControlWindow + - the BitFont from the Java version will not be ported over to js and the default fontsize will be set to 10 + - The automatic binding of functions and variables with the js version did not work as smooth as expected. Currently + only automatic function detection and binding is available. But then why not variables? See my request here: + https://processing-js.lighthouseapp.com/projects/41284/tickets/1972-feature-request-access-sketch-global-variables-from-library + + * src main.java.src2.main.java.controlP5.controlp5.controlp5.Slider2D: + changed size of cursor, changed color handling + + * src main.java.src2.main.java.controlP5.controlp5.controlp5.Button: + alignment of caption label changed to CENTER,CENTER + + * adding PGraphics support instead of only rendering into PApplet directly + + * fixing Annotation issue addressed here https://forum.processing.org/topic/controlp5-annotations-24-8-2012#25080000002597047 + + + +2012-12-23 Andreas Schlegel + + * version 2.0.4 + + * src main.java.src2.main.java.controlP5.controlp5.Textfield.java,main.java.src2.main.java.controlP5.controlp5.ListBox.java, + main.java.src2.main.java.controlP5.controlp5.controlp5.DropdownList.java,main.java.src2.main.java.controlP5.controlp5.ControlWindow.java + main.java.src2.main.java.controlP5.controlp5.ControlP5Base.java: + adjusting to processing's KeyEvent final variable name changes + see issue 69 https://code.google.com/p/controlp5/issues/detail?id=69 (thanks jeff) + + * src main.java.src2.main.java.controlP5.controlp5.Textfield.java: + reimplemented password mode (thanks jeff) + + + +2012-10-19 Andreas Schlegel + + * version 2.0.3 + + * src main.java.src2.main.java.controlP5.controlp5.Controller.java: + Automatic (PApplet) field recognition for Slider, Knob, Numberbox, Toggle adjusted. + + +2012-09-17 Andreas Schlegel + + * version 2.0.2 + + * major changes to controlP5's font handling. the BitFontRenderer has been removed and the BitFont class + has been introduced. BitFont extends PFont and is the replacement for rendering controlP5's bitfont as + a pfont. this makes font handling way more easier and stable. if this has caused any font rendering + flaws, let me know. + + * src controlP5.BitFontRenderer.java: + removed + + * src main.java.src2.main.java.controlP5.controlp5.BitFont.java: + added, see above. + + + +2012-09-07 Andreas Schlegel + + * version 2.0.1 + + * processing 2.0, time to make some changes, major revision in progress. + The goal should be to make 2.0+ desktop and android compatible, for that java.awt dependencies + will be removed. + starting to remove deprecated methods, fields and classes + + * removing all java.awt dependencies. + with each ControlP5 instance there will only be 1 ControlWindow since separate windows/frames have + been removed due to their java.awt dependency. There will be an example of how to make your own + separate Frame when in desktop mode. + + * versions starting with 2.0.1 will not be backwards compatible with 1.5.1 and earlier + from this version onwards Android is supported + + + * src main.java.src2.main.java.controlP5.controlp5.Println.java: + new class added + a console logger that captures the System.out stream and displays it using a Textarea + + + * src main.java.src2.main.java.controlP5.controlp5.controlp5.FrameRate.java: + new class added + a Textlabel that displays the current or average framerate based on update interval + + + * src controlP5.BitFontRenderer.java: + using Base64 encoded bitfont source instead of loading gif textures + + + * src main.java.src2.main.java.controlP5.controlp5.controlp5.Knob.java: + adding value label, ARC is default view now. + + + * src main.java.src2.main.java.controlP5.controlp5.controlp5.Matrix.java: + adding play(), pause(), stop(), isPlaying(), trigger(int) + + + * src main.java.src2.main.java.controlP5.controlp5.Controller.java: + all ControllerSprite references (previously deprecated) have been removed + + + * src controlP5.ControllerSprite.java: + removed + + + * src controlP5.ControlP5IOHandler.java: + obsolete, removed, all static method transfered to main.java.src2.main.java.controlP5.controlp5.controlp5.CP.java which will handle static method + + + * src controlP5.ControlWindowKeyListener.java: + obsolete, removed + + + * src controlP5.PAppletWindow.java: + obsolete, removed, currently there is no support for separate frames other than the main window due to removing java.awt dependencies + + + * src main.java.src2.main.java.controlP5.controlp5.ControlWindow.java: + removed mouseWheelMoved(MouseWheelEvent e) due to removal of java.awt dependencies + how to use an extra window, see example extra/ControlP5frame + + + * src controlP5.ControlWindowKeyHandler.java: + obsolete, removed, now handled by controlP5/ControlWindow.java + + + * src controlP5.CRect.java: + obsolete, removed, was only used by MultiList and MultiListButton - replaced with int array. + + + * src controlP5.ControlCanvas.java: + obsolete, removed, use main.java.src2.main.java.controlP5.controlp5.Canvas.java instead. + + +2012-09-07 Andreas Schlegel + + * version 1.5.1 + + * This version will be the last version that is stable and fully compatible with processing 1.5.1 + due to major changes in the processing 2.0 version, future releases of controlp5 will only be + compatible with the processing 2.0 and higher versions. + The next controlp5 release will continue with version 2.0.1 + + + +2012-08-25 Andreas Schlegel + + * version 0.7.6 + + * src main.java.src2.main.java.controlP5.controlp5.Textfield.java: + fixing special character issue with e.g. �,�,�,�, etc. + backspace, left arrow, right arrow now respond when pressed longer + added isFocus() + implemented issue 56 http://code.google.com/p/controlp5/issues/detail?id=56 , thanks jeff + + * src main.java.src2.main.java.controlP5.controlp5.controlp5.ControllerAutomator.java: + fixed annotation mapping for methods + added list support for methods + + * src main.java.src2.main.java.controlP5.controlp5.CColor.java: + removing alpha masking + + * src main.java.src2.main.java.controlP5.controlp5.controlp5.MultiList.java: + Conflict with moving a Multilist from one to another tab + removed field _myChildren. MultiListButtons are now store in the Controller's sublements filed. + + * src main.java.src2.main.java.controlP5.controlp5.controlp5.ControllerInterface.java: + adding getArrayValue(int), setArrayValue(int, float), setArrayValue(float[]); + + * src main.java.src2.main.java.controlP5.controlp5.controlp5.ControlP5.java: + adding setBroadcast(boolean) to disable/enable broadcasting of value changes. + + + +2012-05-30 Andreas Schlegel + + * version 0.7.5 + + * src main.java.src2.main.java.controlP5.controlp5.Controller.java: + adding empty methods onPress(), onClick(), onRelease(), onReleaseOutside(), + onScroll(int),onMove(),onDrag() for input access when extending a controller. + + * adding convenience constructor to Controllers, convenient when extending a Controller. + + * adding example use/ControlP5extendController + + + +2012-05-18 Andreas Schlegel + + * version 0.7.3 + + * src main.java.src2.main.java.controlP5.controlp5.ControlEvent.java: + adding getArrayValue(int), returns a float value for a given index, does not check for ArrayIndexOutOfBounds + + * src main.java.src2.main.java.controlP5.controlp5.Slider.java: + issue 47 http://code.google.com/p/controlp5/issues/detail?id=47 fixed + + * src main.java.src2.main.java.controlP5.controlp5.controlp5.CheckBox.java, main.java.src2.main.java.controlP5.controlp5.RadioButton.java: + issue 41 http://code.google.com/p/controlp5/issues/detail?id=41 fixed + + * src main.java.src2.main.java.controlP5.controlp5.controlp5.Chart.java: + implemented + + * src main.java.src2.main.java.controlP5.controlp5.ControlFont.java: + issue 46 http://code.google.com/p/controlp5/issues/detail?id=46 fixed + + * src main.java.src2.main.java.controlP5.controlp5.ControlWindow.java: + sketches using controlP5 running in the browser as Applet did not work anymore, fixed + + * src main.java.src2.main.java.controlP5.controlp5.ColorPicker.java: + missing implementation reported in http://forum.processing.org/topic/controlp5-how-to-receive-colorpicker-controlevents fixed + ColorPicker example has been modified accordingly + + * src main.java.src2.main.java.controlP5.controlp5.Textfield.java: + issue 44 http://code.google.com/p/controlp5/issues/detail?id=44 fixed + + * src controlP5.ControlWindowKeyHandler.java: + issue 49 http://code.google.com/p/controlp5/issues/detail?id=49 fixed, keys boolean array size increased to 525 due to windows key issue + + + +2012-01-15 Andreas Schlegel + + * version 0.7.0 + + * src main.java.src2.main.java.controlP5.controlp5.controlp5.ControllerInterface.java, main.java.src2.main.java.controlP5.controlp5.Controller.java,main.java.src2.main.java.controlP5.controlp5.ControllerGroup.java: + adding generic type declaration for object specific method chaining (fluent interface) + + * src main.java.src2.main.java.controlP5.controlp5.RadioButton.java: + changed return type for methods addItem from Toggle to RadioButton + changed return type for methods setImage from PImage to RadioButton + + + + +2011-10-14 Andreas Schlegel + + * version 0.6.9 + + * src main.java.src2.main.java.controlP5.controlp5.controlp5.Textarea.java: + included isScrollable() to adapt to ListBox + + +2011-10-13 Andreas Schlegel + + * version 0.6.8 + + * src main.java.src2.main.java.controlP5.controlp5.ControllerGroup.java, main.java.src2.main.java.controlP5.controlp5.Controller.java: + making addition to isVisible() to check if the parent element is invisible + in which case the child element will return false as well although the visible + state might be true. this fixes an issue with mousewheel scroll being active + for an invisible child controller. The mouseoverlist handling was updated as well. + + * src main.java.src2.main.java.controlP5.controlp5.Slider.java: + Slider will only broadcast when there is a change in value when pressed + + * src main.java.src2.main.java.controlP5.controlp5.ControlWindow.java: + mouseWheelMoved() now only updates the first item in the mouseoverlist + and then exits the loop + + +2011-10-12 Andreas Schlegel + + * version 0.6.7 + + * examples reorganized and grouped into 3 categories, + controllers, use, extra + + +2011-10-07 Andreas Schlegel + + * version 0.6.6 + + * src controlP5/Textarea.java: + scrollbar pixel offset fixed, setPosition update fixed. + + +2011-09-22 Andreas Schlegel + + * version 0.6.5 + + * src controlP5/ControlWindow.java: + adding removeMouseOverFor() to remove controllers from the mouseoverlist. + Called when a controller or group is removed. Necessary when a controller/group is removed + when clicked or hovered by the mouse. + + +2011-09-20 Andreas Schlegel + + * version 0.6.4 + + * src controlP5/Textfield.java: + adding support for PFont + + * javadoc, new design + + + +2011-08-27 Andreas Schlegel + + * version 0.6.3 + + * src controlP5/ListBox.java, controlP5/DropdownList.java: + adding mouseover support. + + * src controlP5/ControlP5.java: + adding enableMouseWheel(), disableMouseWheel(), isMouseWheel() + by default the mouse wheel is active for Slider, Knob, Numberbox, + ListBox and DropdownList. The MouseWheelListener is handled + by each ControlWindow individually. + + * src controlP5/ControlWindow.java: + adding getFrame() to access the frame object of a ControlWindow. + + +2011-08-25 Andreas Schlegel + + * version 0.6.2 + + * src controlP5/ControlP5.java: + removing static from the papplet field, this had consequences for some internal + calls to papplet but do not affect any publicly available methods or constructors + except the Label class which requires a controlP5 instances as it's constructor's + first parameter. + + * src controlP5/ControlP5.java: + field keyHandler is now non-static + + * src controlP5/Label.java: + adding a ControlP5 parameter to all Label constructors due to changes made + to field controlP5.papplet + + * src controlP5/Textlabel.java: + Constructors with the first parameter of type Component have been deprecated + and replaced with constructors using a reference to ControlP5 as first parameter. + if this affects your programs, please make changes accordingly. + + +2011-08-20 Andreas Schlegel + + * version 0.6.1 + + * ongoing internal code refactoring, adding getter and setter methods for + existing methods (which are deprecated accordingly) + + * reference cleanup + + * preparing for release + + * src controlP5/ControllerSprite.java: + deprecated + + * src controlP5/ControlCanvas.java: + deprecated, use ControlWindowCanvas instead + + * Names of controllers now follows the OSC address pattern specs, + use controlP5.printControllerMap() to see the changed address space. + This has been added to controlP5 since controllers now can be directly + linked to custom objects and not only to the instance of the main program. + http://opensoundcontrol.org/spec-1_0-examples + (OSC Address Parts not included) + + + +2011-06-25 Andreas Schlegel + + * version 0.6.0 + + * adding Annotation support, very much inspired by cp5magic by Karsten Schmidt (toxi) + see the ControlP5annotation example for further details + + * src controlP5/ControllerAutomator.java: + for internal use only, handles the reflection for the annotation implementation + + * src controlP5/FieldChangedListener.java: + for internal use only, listens for changes of variables linked to controllers + (needs to be anabled, disabled by default) + + * src controlP5/ScrollList.java: + ScrollList removed, use ListBox. + + * src controlP5/ControllerGroup.java: + moveTo(Tab) changed according to issue http://code.google.com/p/controlp5/issues/detail?id=15 + + * src controlP5/ListBox.java,controlP5/DropdownList.java: + adding mousewheel support. + + * src controlP5/CallbackEvent.java, controlP5/CallbackListener.java: + adding new callback event and listener for controller actions such as enter, leave, pressed, released, releasedoutside. + how to use see the ControlP5callback example + + * src controlP5/Radio.java: + removed, has been deprecated. Use RadioButton or CheckBox instead. + + * src controlP5/ControlWindow.Pointer.java: + adding a pointer class which can be used as replacement for mouse activity. To make use of the Pointer, + disable the mouse first and then set coordinates and events such as released and pressed from your program to + control controllers. see example ControlP5pointer + + +2011-05-08 Andreas Schlegel + + * version 0.5.9 + + * src controlP5/ControllerInterface.java: + adding method float[] arrayValue() + + * src controlP5/ListBox.java: + adding addItems(String[]), which allows to add a string array to a ListBox or a DropdownList + automatically resulting in a list of listBoxItems + + * src controlP5/ControlEvent.java: + adding method isFrom(String) and isFrom(ControllerInterface) to identify the origin of a Control Event + +2011-05-08 Andreas Schlegel + + * version 0.5.8 + + * src controlP5/ListBox.java: + Scrollbar (when visible) is now included inside the dimensions of a listbox (and its derivatives). + + * src controlP5/Textfield.java: + Frame which surrounds a textfield is back again after being removed in version 0.5.7. + + * src controlP5/ListBox.java, controlP5/DropdownList.java: + 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. + + * shuffle + +2011-02-14 Andreas Schlegel + + * version 0.5.7 + + * src controlP5/Controller.java, controlP5/ControllerGroup.java: + toString now prints out Type, name and value instead of all details including position, etc. + detailed information can now be accessed through method info(). + + * src controlP5/Controller.java, controlP5/ControllerGroup.java: + adding method info() print out details such as position, visibility, label, id, etc. of + a Controller or ControllerGroup. + + * src controlP5/ListBox.java: + adding ControlListeners to ListBox, will also be inherited + by DropdownList. + + * src controlP5/ControlWindowKeyHandler.java: + Key combination ALT-L and ALT-S have been removed. + ControlP5 setups cant be saved at this point anymore. But + ControllerProperties have been introduced instead to save + properties for single controllers - how to use ControllerProperties + see the examples and source code of controlP5/ControllerProperties.java + and controlP5/ControllerProperty.java + + * src controlP5/Textfield.java: + Introducing a new text-cursor. Frame which surrounds a textfield has been removed. + + * src controlP5/Slider.java, Slider2D.java, + controlP5/Knob.java, controlP5/Numberbox.java: + adding shuffle() command, when called, a random value will be set + for the controller. + + * src controlP5/Knob.java: + Caption Label was missing, now back. + + * controlP5/Slider2D.java: + absolute, relative positioning issue resolved. + see http://forum.processing.org/topic/three-problems-i-m-having-with-controlp5 + + * src controlP5/ControlP5IOHandler.java: + Loading and saving controllers in xml format has been removed due + to incompletness. Alternatively ControllerProperties are introduced + with this release, see below for more details. + + * src controlP5/ControlWindow.java: + Adding setPositionOfTabs() to change the origin of the tab bar. + Use controlP5.window().setPositionOfTabs(PVector) or + controlP5.window().setPositionOfTabs(int,int) + + * src controlP5/ControlP5Base.java: + Adding saveProperties(String) and loadProperties(String) to + save and load serialized controller properties inside a file. + The range of controllers implementing save/load properties is yet + limited to Slider, Knob, Numberbox, Toggle, Checkbox, + RadioButton, Textlabel, Matrix,Range, textarea, ListBox, Dropdown, + colorPicker. Properties are currently saved in the java serialization + format but xml and possibily json alternatives are being worked out. + + * src controlP5/ControllerProperty.java: + Adding controller property. Controllers can register properties which + can be saved in a serialized format. + + * src controlP5/Matrix.java: + Adding setMode(int), please refer to to the documentation which + constants to use - cells can be activated by row, column, many-per-row-and-colum + + * src controlP5/CColor.java: + Fields changed from protected to private, use setter and getter + to change color values. CColor is serializable so that instances can + be saved as properties. + + * src controlP5/Accordion.java: + Adding new class Accordion, an Accordion allows similar behavior + as a common UI accordion, here it combines ControlGroups where + one or no group can be active at a time. + + * src controlP5/CVector3f.java: + Removed. Replaced with processing.core.PVector. + + * src controlP5/ControlP5.java: + Removing setFilePath(), setUrlPath(), urlPath(), filePath() + + * src controlP5/ControlP5XMLElement.java, + ControlP5/ControlP5XMLParseException: + removed. + + * src controlP5/ControlP5.java: + Adding convenience method window() which returns the controlWindow + of the sketch, before one had to use window(PApplet) + + +2010-11-07 Andreas Schlegel + + * version 0.5.6 + + * src/controlP5/ListBox.java: + adding updateListBoxItems() to update color changes. + adding scoll() calls to color related methods to update color + changes for currently active listBox buttons. + + * src/controlP5/ListBox.java: + adding item(Controller) to access a ListBoxItem by it's Button reference. + + * src/controlP5/ControlWindow.java: + use isMouseOver(Controller), getMouseOverList() to check + if the mouse is inside a specific controller. This does not work for + groups, only for controllers. + + + + +2010-10-07 Andreas Schlegel + + * version 0.5.5 + + * src/controlP5/ControlP5.java: + enableShortcuts() and disableShortcuts() were interchanged, fixed now. + + + +2010-09-30 Andreas Schlegel + + * version 0.5.4 + + * src/controlP5/RadioButton.java: + adding setNoneSelectedAllowed(true/false) default is true. + http://forum.processing.org/topic/controlp5-radiobutton-strange-behaviour + + * src/controlP5/DropdownList.java: + renaming PulldownMenu to DropdownList. + + * src/controlP5/Range.java + setMin() and setMax() bug fixed. + + * src/controlP5/ControlBroadcaster.java: + adding addListner(), removeListener(), getListener() + any object that implements ControlListener can register with the ControlBroadcaster to + receive ControlEvents broadcasted. + + * src/controlP5/BitFontRenderer.java: + fixed ArrayIndexOutOfBoundsException + only characters between ASCII 32 and 127 are supported. + + * src/controlP5/ControlP5.java: + disabled clear() call (called from within dispose()) when in applet mode. + Reason: all controllers will be cleared due to dispose call + when switching tabs. Fix required. + + * src/controlP5/Button.java: + colorForeground and colorActive are reveresed due to adding an active state to buttons + when clicked. Rollovers no display colorForeground, clicked buttons will display + colorActive. This also affects ListBoxItems. + + +2010-08-18 Andreas Schlegel + + * version 0.5.3 + + * src/controlP5/ListBox.java: + adding clear(). clears a ListBox in order to re-filling list. + + * src/controlP5/ListBox.java: + changing behavior of a ListBox-Button. + a ListBox-button is clicked, it will call the Button's onLeave() + and setIsInside(false) function to solve problem addressed here: + http://forum.processing.org/topic/controlp5-listbox-loses-mouseclicks + + * src/controlP5/ListBox.java: + adding actAsPulldownMenu() to enable/disable pulldown + functionality for a ListBox. + + * src/controlP5/PulldownMenu.java: + new Controller, extends ListBox, acts as a pulldown-menu. + + +2010-08-03 Andreas Schlegel + * version 0.5.2 + * Slider2D: a new Controller, 2D slider control. + * Button, Bang, Toggle, : setImage() defines an image for DEFAULT,OVER,ACTIVE,HIGHLIGHT mode. + * Button, Bang, Toggle, : setImages() defines an image for DEFAULT,OVER,ACTIVE,HIGHLIGHT mode. + * Button: adding setSwitch() in order to use a button as a switch (makes toggle obsolete) + * Button: adding booleanValue() returns true or false, useful in case a button is set to be a switch. + * Button: adding setOn() setOff(), useful when button is a switch. + * Toggle: changing default look to ControlP5.SWITCH, an on/off look for toggles. use toggle.setMode(ControlP5.DEFAULT) to reset to the old default look. + * ControllerDisplay: adding interface ControllerDisplay to enable custom displays for a controller. + * Controller: setImage, allows to replace the default look of a controller with an image (PImage). + * Controller: setDisplay allows custom displays for controller. the custom display is called from within a controller's draw function. A custom Display implements interface ControllerDisplay + * Controller: adding lock(), unlock(), isLock(), setMoveable(), isMoveable(), isUserInteraction(), setUserInteraction() + * Controller: adding plugTo(), unplugFrom() (if this causes any problems or error message, please report) + * ControlP5: adding java.util.logging.Logger for logging error, debug, info messages - wrapped in ControlP5.error(), ControlP5.warning(), ControlP5.info(), ControlP5.debug() + * ControlP5: added registerDispose() + * ControlP5: adding setMoveable() and isMoveable() to disable/enable controllers to be moved around. + * ControlP5: adding disableShortcuts(), enableShortcuts() instead of disableKeys() and enableKeys() + * ControlP5: deprecating lock(), unlock(), disableKeys(), enableKeys() + * ControlWindow: adding begin() and end(). this allows to move controllers automatically to the main window or a separate controlWindow. + * Toggle: adding setValue(boolean) + * Matrix: mouseReleasedOutside error fixed. + * ControlWindow: window is now properly removed when closed, thanks henri. + * TextLabel: adding setControlFont() + * Knob: all new. + +2010-04-04 Andreas Schlegel + * version 0.5.1 + * ControlP5: lock() and unlock() are working again. + * ControlEvent: added function id() to make access to the id of controller, group, tab, etc. easier + * ControlEvent: added function type() for easier distinguishing between the type of Controller the event was triggered from, returns ControlEvent.UNDEFINED, ControlEvent.CONTROLLER, ControlEvent.TAB, ControlEvent.GROUP + * ListBoxItem: adding ListBoxItem to make changes to each item of a listBox especially the color settings of a listBoxItem. + * CColor: now with getter and setter functions, supports changing the value of the alpha channel. + * ControlWindow: adding begin() and end(). this allows to move controllers automatically to the main window or a separate controlWindow. + * ControllerGroup: adding enableCollapse(), disableCollapse(), isCollapse() to enable/disable the collapsing and opening of a controllerGroup e.g. listBox. + +2010-03-26 Andreas Schlegel + * version 0.5.0 + * making transition to 1.5+, no more java 1.4 support. + * compiling against processing 1.1 + * ControlP5: added disableKeys() and enableKeys(), suggested in the discourse. disables and enables keyEvents such as hide/show with ALT-h. + * Toggle: when inactive, the color refers to colorBackground instead of colorForeground now. + * ControlFont: smooth related functions have been disabled and deprecated due to processing 1.1 changes. + * Slider: use alignValueLabel() to position the value label of a slider on TOP, CENTER, or BOTTOM + * example ControlP5quick: new, ControlP5quick shows how to quickly add Controllers with auto-arrangement. + +2010-02-16 Andreas Schlegel + * version 0.4.7 + * Slider: adding TickMarks and replacing steps with snapToTickMarks(). + * ControlWindow: adding setUndecorated(), isUndecorated(), toggleUndecorated() + * ControllerSprite: sprites are now clone-able and state management has been improved, thanks to c.a. church. http://processing.org/discourse/yabb2/YaBB.pl?num=1265905257 + * Controller: adding getSprite() + * BitFontRenderer: adding warning for character that are not supported by the BitFontRenderer. + +2010-02-06 Andreas Schlegel + * version 0.4.6 + * ControlWindow: imageMode was not set back to CENTER/CORNER correctly, now fixed. + +0.4.5 + * ControllerGroup: adding moveTo(String). will move ControllerGroups such as e.g. Textarea to another tab. + +0.4.4 + * ControlWindow: imageMode CENTER/CORNER issue fixed. + +0.4.3 + * Controller.isInside is private now. use setIsInside(true/false) and getIsInside() to access this boolean field. + * trying to solve the problem of overlapping described here: + http://processing.org/discourse/yabb2/YaBB.pl?num=1259885420/0#0 + yet not successful, but loops managing the mouseEvents have been reversed from i++ to i-- + * CheckBox,RadioButton: adding activateAll, activate, deactivate, getState to CheckBox and RadioButton to be able to control individual items by code. + * CheckBox: adding toggle() to CheckBox to be able to toggle individual items of a checkBox. + * CheckBox,RadioButton: adding setItemHeight(), setItemWidth() to radioButton and checkBox + * Toggle: adding toggle() + +0.4.2 +- + +0.4.1 + * Controller: added changeValue() to change the float value of a controller without broadcasting its change as a event. + * Numberbox: added setMultiplier() and multiplier() to customize the value sensitivity. + * Toggle: setLabelVisible() is now working. + * ControlWindow: adding setTitle, showCoordinates, hideCoordinates to ControlWindow. only applies to controlWindows of type PAppletWindow (external window). + * adding Matrix.set + * Controller: Controller.isInside() is public now + * added ControlFont. does not support textarea and textfield yet. + +(note: take a look at subversion changelog generator http://ch.tudelft.nl/~arthur/svn2cl/) + +0.3.15 + * Texfield: textfield scrolls to the left if text is larger than display area. + * Knob: knob setValue issue solved. + + * BitFontRenderer: removed getWidth(String theText, int theFontIndex) + is now getWidth(String theText, Label theLabel); + removed getWidth(String theText, int theFontIndex, int theLength)) + is now getWidth(String theText, Label theLabel, int theLength)); + + +0.3.14 + * ScrollList: adding void hideScrollbar() + adding void showScrollbar() + adding void showScrollbar() + adding void scroll(float) + adding boolean isScrollbarVisible() + + * Textarea: adding void hideScrollbar() + adding void showScrollbar() + adding void showScrollbar() + adding void scroll(float) + adding boolean isScrollbarVisible() + + * Textfield: textinput now works from a controlWindow + + * Label: adding adjust() to fix the cutting off of Labels when changing fonts. + use e.g. mySlider.captionLabel().setFont(ControlP5.grixel).adjust(); + +0.3.13 + * Textfield: adding setAutoClear(true/false) prevents the textfield to be cleared after pressing RETURN. + adding clear(), clears the current textline + adding keepFocus(true/false) + adding getTextList() + adding setAutoClear(true/false) + adding isAutoClear() + adding submit() + +0.3.12 + * Radio: if deactiveAll is set before the first button is added, the first button will not trigger an event. + * ControlGroup: added method getBackgroundHeight() to get the height of a group's background that has been set before. + * Textfield: fixed bug with clearing the variable myTextline too early. + +0.3.11 + * Textfield: added method setText to Textfield + * Range: made corrections to Range, _myUnit was not set properly. now fixed. Range remains experimental. + +0.3.10 + * fixed little issues with setColor, again. + * removed decimal point when setDecimalPrecision(0) + +0.3.9 + * Range: defaultValue for min shows correct value now. + * Radio: added deactivateAll() + * TextLabel: added setWidth, setHeight + * setColor -Label(), -Active(), -Value(), -Foreground(), -Background(): issues resolved and tested for slider, range, button, knob, sliderlist, multilist, toggle, radio + * Controller: added method setDecimalPrecision(int theNum) to set the decimal precision for floats when displayed as valueLabel. the precision does not apply to the returned float value. + Controller.captionLabel().set("txt") is fixed. + * ControlP5: controlP5.setAutoDraw(true/false) issue is fixed. + * ControlWindow: controlWindow.post() has been deleted. + * Knob: issue with minimum value has been resolved. + +how to move a textlabel that has been created with "new" to a tab other than the default: +Tab myTab = controlP5.addTab("new"); +Textlabel myTextlabel = new Textlabel(this,"a single textlabel.",20,100,400,200,0xffff0000,ControlP5.synt24); +myTab.addDrawable(myTextlabel); + diff --git a/controlP5/events/ReleasedOutsideListener.java b/controlP5/events/ReleasedOutsideListener.java new file mode 100644 index 0000000..eceda20 --- /dev/null +++ b/controlP5/events/ReleasedOutsideListener.java @@ -0,0 +1,6 @@ +package main.java.src2.main.java.controlP5.controlP5.events; + +public interface ReleasedOutsideListener { + void mouseReleasedOutside( ) ; + +} diff --git a/controlP5/layout/ControllerFactory.java b/controlP5/layout/ControllerFactory.java new file mode 100644 index 0000000..73f0eb1 --- /dev/null +++ b/controlP5/layout/ControllerFactory.java @@ -0,0 +1,132 @@ +package main.java.src2.main.java.controlP5.controlP5.layout; + +import controlP5.*; +import main.java.src2.main.java.controlP5.controlP5.layout.lang.XMLParser; +import processing.core.PApplet; + +import java.lang.reflect.Constructor; +import java.util.*; + +public class ControllerFactory { + private final PApplet applet; + private final ControlP5 cp5; + private final Map> controlMap; + + + public ControllerFactory(PApplet applet, ControlP5 cp5) { + this.applet = applet; + this.cp5 = cp5; + + + controlMap = new HashMap<>(); +// controlMap.put("Accordion", Accordion.class); +// controlMap.put("Background", Background.class); +// controlMap.put("Canvas", Canvas.class); +// controlMap.put("ChartData", ChartData.class); +// controlMap.put("ChartDataSet", ChartDataSet.class); +// controlMap.put("CheckBox", CheckBox.class); +// controlMap.put("ColorPicker", ColorPicker.class); +// controlMap.put("Group", Group.class); +// controlMap.put("Label", Label.class); +// controlMap.put("RadioButton", RadioButton.class); +// controlMap.put("Textarea", Textarea.class); +// controlMap.put("TickMark", TickMark.class); +// controlMap.put("Tooltip", Tooltip.class); + controlMap.put("Bang", Bang.class); + controlMap.put("Button", Button.class); + controlMap.put("ButtonBar", ButtonBar.class); + controlMap.put("Chart", Chart.class); + controlMap.put("ColorWheel", ColorWheel.class); + controlMap.put("Icon", Icon.class); + controlMap.put("Knob", Knob.class); + controlMap.put("ListBox", ListBox.class); + controlMap.put("Matrix", Matrix.class); + controlMap.put("MultiList", MultiList.class); + controlMap.put("MultilineTextfield", MultilineTextfield.class); + controlMap.put("Numberbox", Numberbox.class); + controlMap.put("Range", Range.class); + controlMap.put("ScrollableList", ScrollableList.class); + controlMap.put("Slider", Slider.class); + controlMap.put("Slider2D", Slider2D.class); + controlMap.put("Spacer", Spacer.class); + controlMap.put("Textfield", Textfield.class); + controlMap.put("Textlabel", Textlabel.class); + controlMap.put("Toggle", Toggle.class); + + } + + /* creates a controller based on the controlName */ + public Controller createController(String controlName) { + Class controllerClass = controlMap.get(controlName); + if (controllerClass == null) { + throw new IllegalArgumentException("Invalid control name: " + controlName); + } + + try { + //instantiate the controller + Constructor constructor = controllerClass.getConstructor(ControlP5.class,String.class); + return constructor.newInstance(cp5,""); + } catch (Exception e) { + throw new RuntimeException("Failed to create control: " + controlName, e); + } + } + + public Group createGroup(String groupName) { + return new Group(cp5, groupName); + }; + + public void configure(Controller controller, String attrName, XMLParser.ValueContext attrValueContext) { + // eg. turn things like '23px' or '35%' into pixels value + int attrValue = getValue(attrValueContext); + + switch (attrName) { + case "x": + controller.setPosition(attrValue, controller.getPosition()[1]); + break; + case "y": + controller.setPosition(controller.getPosition()[0], attrValue); + break; + case "width": + controller.setWidth(attrValue); + break; + case "height": + controller.setHeight(attrValue); + break; + case "color": + // Assuming color value is given as a hex string + break; +// case "label": +// controller.setLabel(attrValue); +// break; +// case "visible": +// controller.setVisible(Boolean.parseBoolean(attrValue)); +// break; +// case "captionLabel": +// controller.getCaptionLabel().setText(attrValue); +// break; +// case "valueLabel": +// controller.getValueLabel().setText(attrValue); +// break; + default: + System.out.println("Unknown attribute: " + attrName); + } + } + + private int getValue(XMLParser.ValueContext ctx) { + String unit = ctx.UNIT().getText(); + String value = ctx.NUMBER().getText(); + + switch (unit) { + case "px": + return Integer.parseInt(value); + case "%": + //get tabs + ControllerList _myTabs = cp5.getWindow().getTabs(); + + return (int) (Float.parseFloat(value) / 100.0f * _myTabs.get(0).getWidth()); + + default: + throw new IllegalArgumentException("Unknown unit: " + unit); + } + } +} diff --git a/controlP5/layout/LayoutBuilder.java b/controlP5/layout/LayoutBuilder.java new file mode 100644 index 0000000..790007d --- /dev/null +++ b/controlP5/layout/LayoutBuilder.java @@ -0,0 +1,165 @@ +package main.java.src2.main.java.controlP5.controlP5.layout; + + +import main.java.src2.main.java.controlP5.controlP5.ControlP5; +import main.java.src2.main.java.controlP5.controlP5.layout.lang.XMLBaseVisitor; +import main.java.src2.main.java.controlP5.controlP5.layout.lang.XMLLexer; +import main.java.src2.main.java.controlP5.controlP5.layout.lang.XMLParser; +import org.antlr.v4.runtime.*; +import org.antlr.v4.runtime.tree.*; +import org.antlr.v4.runtime.tree.ParseTreeWalker; +import processing.core.PApplet; +import java.util.ArrayDeque; +import java.util.Deque; +import java.util.HashMap; + + +public class LayoutBuilder { + private final ControlP5 _cp5; + private final PApplet _pApplet; + private final Deque contextStack = new ArrayDeque<>(); + + public LayoutBuilder(PApplet pApplet, ControlP5 cp5) { + _cp5 = cp5; + _pApplet = pApplet; + + + } + + public void parseXML(String xml) throws Exception { + ANTLRInputStream input = new ANTLRInputStream(xml); + XMLLexer lexer = new XMLLexer(input); + CommonTokenStream tokens = new CommonTokenStream(lexer); + XMLParser parser = new XMLParser(tokens); + ParseTree tree = parser.document(); + + //create walker + ParseTreeWalker walker = new ParseTreeWalker(); + XMLVisitor visitor = new XMLVisitor(_pApplet, _cp5); + visitor.visit(tree); + + + } + + private class XMLVisitor extends XMLBaseVisitor { + + private final ControlP5 _cp5; + private final PApplet _pApplet; + + public XMLVisitor(PApplet pApplet, ControlP5 cp5) { + _cp5 = cp5; + _pApplet = pApplet; + } + + + //visit first node + @Override + public Object visitDocument(XMLParser.DocumentContext ctx) { + // get width and height from the papplet + int parentWidth = _pApplet.width; + int parentHeight = _pApplet.height; + + + //visit children + for (int i = 0; i < ctx.children.size(); i++) { + contextStack.push(new ElementProps(parentWidth, parentHeight)); + visit(ctx.children.get(i)); + contextStack.pop(); + } + + return null; + + } + + @Override + public Object visitElement(XMLParser.ElementContext ctx) { + //parent props + ElementProps parentProps = contextStack.peek(); + Tag tag = (Tag) visitStartTag(ctx.startTag()); + System.out.println("im a " + tag.getName() + " and my parent has " + parentProps.width + " " + parentProps.height); + + + + //visit children + for (int i = 0; i < ctx.children.size(); i++) { + contextStack.push(new ElementProps(parentProps.width/2, parentProps.height/2)); + visit(ctx.children.get(i)); + contextStack.pop(); + } + + + return null; + } + + @Override + public Object visitStartTag(XMLParser.StartTagContext ctx) { + HashMap> attributes = new HashMap<>(); + for (int i = 0; i < ctx.attribute().size() ; i++) { + Attribute attribute = (Attribute) visitAttribute(ctx.attribute(i)); + attributes.put(attribute.getName(), attribute); + } + + Tag tag = new Tag(ctx.Name().getText(), attributes); + return tag; + } + + @Override + public Object visitAttribute(XMLParser.AttributeContext ctx) { + if(ctx.value().STRING() != null){ + String name = ctx.Name().getText(); + String value = ctx.value().STRING().getText(); + return new Attribute(name, value); + }else if(ctx.value().NUMBER() != null) { + String name = ctx.Name().getText(); + int value = Integer.parseInt(ctx.value().NUMBER().getText()); + + return new Attribute(name, value); + } + return null; + } + + + } + + private class ElementProps { + int width; + int height; + + public ElementProps(int width, int height) { + this.width = width; + this.height = height; + } + } + + private class Tag { + private String name; + private HashMap> attributes; + + public Tag(String name, HashMap> attributes) { + this.name = name; + this.attributes = attributes; + } + public String getName() { + return name; + } + public HashMap> getAttributes() { + return attributes; + } + } + + private class Attribute { + private String name; + private T value; + + public Attribute(String name, T value) { + this.name = name; + this.value = value; + } + public String getName() { + return name; + } + public T getValue() { + return value; + } + } +} diff --git a/controlP5/layout/XML.g4 b/controlP5/layout/XML.g4 new file mode 100644 index 0000000..08e98a6 --- /dev/null +++ b/controlP5/layout/XML.g4 @@ -0,0 +1,35 @@ +grammar XML; + +document : '' element+ '' ; + +element : startTag (content )? endTag + | SELF_CLOSING + ; + +startTag : OPEN Name attribute* CLOSE ; + +endTag : OPEN_SLASH Name CLOSE ; + +SELF_CLOSING : OPEN Name SLASH_CLOSE ; + +attribute : Name EQUALS value ; + +content : element | STRING ; + +value: STRING + | NUMBER UNIT; + +UNIT: 'px' | '%'; +WS : [ \t\r\n]+ -> skip; +OPEN : '<' ; +OPEN_SLASH: '' ; +SLASH_CLOSE: '/>' ; +EQUALS : '=' ; + +Name : ALPHA (ALPHA | DIGIT | '.' | '-' | '_')* ; +STRING : '"' ( ~'"' )* '"' | '\'' ( ~'\'' )* '\'' ; +NUMBER : DIGIT+ ; + +fragment DIGIT : [0-9] ; +fragment ALPHA : [a-zA-Z] ; diff --git a/controlP5/layout/lang/XML.interp b/controlP5/layout/lang/XML.interp new file mode 100644 index 0000000..b98a8de --- /dev/null +++ b/controlP5/layout/lang/XML.interp @@ -0,0 +1,44 @@ +token literal names: +null +'' +'' +null +null +null +'<' +'' +'/>' +'=' +null +null +null + +token symbolic names: +null +null +null +SELF_CLOSING +UNIT +WS +OPEN +OPEN_SLASH +CLOSE +SLASH_CLOSE +EQUALS +Name +STRING +NUMBER + +rule names: +document +element +startTag +endTag +attribute +content +value + + +atn: +[4, 1, 13, 59, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 1, 0, 1, 0, 4, 0, 17, 8, 0, 11, 0, 12, 0, 18, 1, 0, 1, 0, 1, 1, 1, 1, 3, 1, 25, 8, 1, 1, 1, 1, 1, 1, 1, 3, 1, 30, 8, 1, 1, 2, 1, 2, 1, 2, 5, 2, 35, 8, 2, 10, 2, 12, 2, 38, 9, 2, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 3, 5, 52, 8, 5, 1, 6, 1, 6, 1, 6, 3, 6, 57, 8, 6, 1, 6, 0, 0, 7, 0, 2, 4, 6, 8, 10, 12, 0, 0, 57, 0, 14, 1, 0, 0, 0, 2, 29, 1, 0, 0, 0, 4, 31, 1, 0, 0, 0, 6, 41, 1, 0, 0, 0, 8, 45, 1, 0, 0, 0, 10, 51, 1, 0, 0, 0, 12, 56, 1, 0, 0, 0, 14, 16, 5, 1, 0, 0, 15, 17, 3, 2, 1, 0, 16, 15, 1, 0, 0, 0, 17, 18, 1, 0, 0, 0, 18, 16, 1, 0, 0, 0, 18, 19, 1, 0, 0, 0, 19, 20, 1, 0, 0, 0, 20, 21, 5, 2, 0, 0, 21, 1, 1, 0, 0, 0, 22, 24, 3, 4, 2, 0, 23, 25, 3, 10, 5, 0, 24, 23, 1, 0, 0, 0, 24, 25, 1, 0, 0, 0, 25, 26, 1, 0, 0, 0, 26, 27, 3, 6, 3, 0, 27, 30, 1, 0, 0, 0, 28, 30, 5, 3, 0, 0, 29, 22, 1, 0, 0, 0, 29, 28, 1, 0, 0, 0, 30, 3, 1, 0, 0, 0, 31, 32, 5, 6, 0, 0, 32, 36, 5, 11, 0, 0, 33, 35, 3, 8, 4, 0, 34, 33, 1, 0, 0, 0, 35, 38, 1, 0, 0, 0, 36, 34, 1, 0, 0, 0, 36, 37, 1, 0, 0, 0, 37, 39, 1, 0, 0, 0, 38, 36, 1, 0, 0, 0, 39, 40, 5, 8, 0, 0, 40, 5, 1, 0, 0, 0, 41, 42, 5, 7, 0, 0, 42, 43, 5, 11, 0, 0, 43, 44, 5, 8, 0, 0, 44, 7, 1, 0, 0, 0, 45, 46, 5, 11, 0, 0, 46, 47, 5, 10, 0, 0, 47, 48, 3, 12, 6, 0, 48, 9, 1, 0, 0, 0, 49, 52, 3, 2, 1, 0, 50, 52, 5, 12, 0, 0, 51, 49, 1, 0, 0, 0, 51, 50, 1, 0, 0, 0, 52, 11, 1, 0, 0, 0, 53, 57, 5, 12, 0, 0, 54, 55, 5, 13, 0, 0, 55, 57, 5, 4, 0, 0, 56, 53, 1, 0, 0, 0, 56, 54, 1, 0, 0, 0, 57, 13, 1, 0, 0, 0, 6, 18, 24, 29, 36, 51, 56] \ No newline at end of file diff --git a/controlP5/layout/lang/XML.tokens b/controlP5/layout/lang/XML.tokens new file mode 100644 index 0000000..30d639a --- /dev/null +++ b/controlP5/layout/lang/XML.tokens @@ -0,0 +1,20 @@ +T__0=1 +T__1=2 +SELF_CLOSING=3 +UNIT=4 +WS=5 +OPEN=6 +OPEN_SLASH=7 +CLOSE=8 +SLASH_CLOSE=9 +EQUALS=10 +Name=11 +STRING=12 +NUMBER=13 +''=1 +''=2 +'<'=6 +''=8 +'/>'=9 +'='=10 diff --git a/controlP5/layout/lang/XMLBaseListener.java b/controlP5/layout/lang/XMLBaseListener.java new file mode 100644 index 0000000..5a60161 --- /dev/null +++ b/controlP5/layout/lang/XMLBaseListener.java @@ -0,0 +1,124 @@ +// Generated from XML.g4 by ANTLR 4.13.0 +package main.java.src2.main.java.controlP5.controlP5.layout.lang; + +import org.antlr.v4.runtime.ParserRuleContext; +import org.antlr.v4.runtime.tree.ErrorNode; +import org.antlr.v4.runtime.tree.TerminalNode; + +/** + * This class provides an empty implementation of {@link XMLListener}, + * which can be extended to create a listener which only needs to handle a subset + * of the available methods. + */ +@SuppressWarnings("CheckReturnValue") +public class XMLBaseListener implements XMLListener { + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterDocument(XMLParser.DocumentContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitDocument(XMLParser.DocumentContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterElement(XMLParser.ElementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitElement(XMLParser.ElementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterStartTag(XMLParser.StartTagContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitStartTag(XMLParser.StartTagContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterEndTag(XMLParser.EndTagContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitEndTag(XMLParser.EndTagContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAttribute(XMLParser.AttributeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAttribute(XMLParser.AttributeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterContent(XMLParser.ContentContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitContent(XMLParser.ContentContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterValue(XMLParser.ValueContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitValue(XMLParser.ValueContext ctx) { } + + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterEveryRule(ParserRuleContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitEveryRule(ParserRuleContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void visitTerminal(TerminalNode node) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void visitErrorNode(ErrorNode node) { } +} \ No newline at end of file diff --git a/controlP5/layout/lang/XMLBaseVisitor.java b/controlP5/layout/lang/XMLBaseVisitor.java new file mode 100644 index 0000000..fac4180 --- /dev/null +++ b/controlP5/layout/lang/XMLBaseVisitor.java @@ -0,0 +1,64 @@ +// Generated from XML.g4 by ANTLR 4.13.0 +package main.java.src2.main.java.controlP5.controlP5.layout.lang; +import org.antlr.v4.runtime.tree.AbstractParseTreeVisitor; + +/** + * This class provides an empty implementation of {@link XMLVisitor}, + * which can be extended to create a visitor which only needs to handle a subset + * of the available methods. + * + * @param The return type of the visit operation. Use {@link Void} for + * operations with no return type. + */ +@SuppressWarnings("CheckReturnValue") +public class XMLBaseVisitor extends AbstractParseTreeVisitor implements XMLVisitor { + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitDocument(XMLParser.DocumentContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitElement(XMLParser.ElementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitStartTag(XMLParser.StartTagContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitEndTag(XMLParser.EndTagContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitAttribute(XMLParser.AttributeContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitContent(XMLParser.ContentContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitValue(XMLParser.ValueContext ctx) { return visitChildren(ctx); } +} \ No newline at end of file diff --git a/controlP5/layout/lang/XMLLexer.interp b/controlP5/layout/lang/XMLLexer.interp new file mode 100644 index 0000000..5848fd8 --- /dev/null +++ b/controlP5/layout/lang/XMLLexer.interp @@ -0,0 +1,58 @@ +token literal names: +null +'' +'' +null +null +null +'<' +'' +'/>' +'=' +null +null +null + +token symbolic names: +null +null +null +SELF_CLOSING +UNIT +WS +OPEN +OPEN_SLASH +CLOSE +SLASH_CLOSE +EQUALS +Name +STRING +NUMBER + +rule names: +T__0 +T__1 +SELF_CLOSING +UNIT +WS +OPEN +OPEN_SLASH +CLOSE +SLASH_CLOSE +EQUALS +Name +STRING +NUMBER +DIGIT +ALPHA + +channel names: +DEFAULT_TOKEN_CHANNEL +HIDDEN + +mode names: +DEFAULT_MODE + +atn: +[4, 0, 13, 114, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 3, 3, 58, 8, 3, 1, 4, 4, 4, 61, 8, 4, 11, 4, 12, 4, 62, 1, 4, 1, 4, 1, 5, 1, 5, 1, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 10, 5, 10, 83, 8, 10, 10, 10, 12, 10, 86, 9, 10, 1, 11, 1, 11, 5, 11, 90, 8, 11, 10, 11, 12, 11, 93, 9, 11, 1, 11, 1, 11, 1, 11, 5, 11, 98, 8, 11, 10, 11, 12, 11, 101, 9, 11, 1, 11, 3, 11, 104, 8, 11, 1, 12, 4, 12, 107, 8, 12, 11, 12, 12, 12, 108, 1, 13, 1, 13, 1, 14, 1, 14, 0, 0, 15, 1, 1, 3, 2, 5, 3, 7, 4, 9, 5, 11, 6, 13, 7, 15, 8, 17, 9, 19, 10, 21, 11, 23, 12, 25, 13, 27, 0, 29, 0, 1, 0, 6, 3, 0, 9, 10, 13, 13, 32, 32, 2, 0, 45, 46, 95, 95, 1, 0, 34, 34, 1, 0, 39, 39, 1, 0, 48, 57, 2, 0, 65, 90, 97, 122, 120, 0, 1, 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 9, 1, 0, 0, 0, 0, 11, 1, 0, 0, 0, 0, 13, 1, 0, 0, 0, 0, 15, 1, 0, 0, 0, 0, 17, 1, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 21, 1, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 25, 1, 0, 0, 0, 1, 31, 1, 0, 0, 0, 3, 40, 1, 0, 0, 0, 5, 50, 1, 0, 0, 0, 7, 57, 1, 0, 0, 0, 9, 60, 1, 0, 0, 0, 11, 66, 1, 0, 0, 0, 13, 68, 1, 0, 0, 0, 15, 71, 1, 0, 0, 0, 17, 73, 1, 0, 0, 0, 19, 76, 1, 0, 0, 0, 21, 78, 1, 0, 0, 0, 23, 103, 1, 0, 0, 0, 25, 106, 1, 0, 0, 0, 27, 110, 1, 0, 0, 0, 29, 112, 1, 0, 0, 0, 31, 32, 5, 60, 0, 0, 32, 33, 5, 87, 0, 0, 33, 34, 5, 105, 0, 0, 34, 35, 5, 110, 0, 0, 35, 36, 5, 100, 0, 0, 36, 37, 5, 111, 0, 0, 37, 38, 5, 119, 0, 0, 38, 39, 5, 62, 0, 0, 39, 2, 1, 0, 0, 0, 40, 41, 5, 60, 0, 0, 41, 42, 5, 47, 0, 0, 42, 43, 5, 87, 0, 0, 43, 44, 5, 105, 0, 0, 44, 45, 5, 110, 0, 0, 45, 46, 5, 100, 0, 0, 46, 47, 5, 111, 0, 0, 47, 48, 5, 119, 0, 0, 48, 49, 5, 62, 0, 0, 49, 4, 1, 0, 0, 0, 50, 51, 3, 11, 5, 0, 51, 52, 3, 21, 10, 0, 52, 53, 3, 17, 8, 0, 53, 6, 1, 0, 0, 0, 54, 55, 5, 112, 0, 0, 55, 58, 5, 120, 0, 0, 56, 58, 5, 37, 0, 0, 57, 54, 1, 0, 0, 0, 57, 56, 1, 0, 0, 0, 58, 8, 1, 0, 0, 0, 59, 61, 7, 0, 0, 0, 60, 59, 1, 0, 0, 0, 61, 62, 1, 0, 0, 0, 62, 60, 1, 0, 0, 0, 62, 63, 1, 0, 0, 0, 63, 64, 1, 0, 0, 0, 64, 65, 6, 4, 0, 0, 65, 10, 1, 0, 0, 0, 66, 67, 5, 60, 0, 0, 67, 12, 1, 0, 0, 0, 68, 69, 5, 60, 0, 0, 69, 70, 5, 47, 0, 0, 70, 14, 1, 0, 0, 0, 71, 72, 5, 62, 0, 0, 72, 16, 1, 0, 0, 0, 73, 74, 5, 47, 0, 0, 74, 75, 5, 62, 0, 0, 75, 18, 1, 0, 0, 0, 76, 77, 5, 61, 0, 0, 77, 20, 1, 0, 0, 0, 78, 84, 3, 29, 14, 0, 79, 83, 3, 29, 14, 0, 80, 83, 3, 27, 13, 0, 81, 83, 7, 1, 0, 0, 82, 79, 1, 0, 0, 0, 82, 80, 1, 0, 0, 0, 82, 81, 1, 0, 0, 0, 83, 86, 1, 0, 0, 0, 84, 82, 1, 0, 0, 0, 84, 85, 1, 0, 0, 0, 85, 22, 1, 0, 0, 0, 86, 84, 1, 0, 0, 0, 87, 91, 5, 34, 0, 0, 88, 90, 8, 2, 0, 0, 89, 88, 1, 0, 0, 0, 90, 93, 1, 0, 0, 0, 91, 89, 1, 0, 0, 0, 91, 92, 1, 0, 0, 0, 92, 94, 1, 0, 0, 0, 93, 91, 1, 0, 0, 0, 94, 104, 5, 34, 0, 0, 95, 99, 5, 39, 0, 0, 96, 98, 8, 3, 0, 0, 97, 96, 1, 0, 0, 0, 98, 101, 1, 0, 0, 0, 99, 97, 1, 0, 0, 0, 99, 100, 1, 0, 0, 0, 100, 102, 1, 0, 0, 0, 101, 99, 1, 0, 0, 0, 102, 104, 5, 39, 0, 0, 103, 87, 1, 0, 0, 0, 103, 95, 1, 0, 0, 0, 104, 24, 1, 0, 0, 0, 105, 107, 3, 27, 13, 0, 106, 105, 1, 0, 0, 0, 107, 108, 1, 0, 0, 0, 108, 106, 1, 0, 0, 0, 108, 109, 1, 0, 0, 0, 109, 26, 1, 0, 0, 0, 110, 111, 7, 4, 0, 0, 111, 28, 1, 0, 0, 0, 112, 113, 7, 5, 0, 0, 113, 30, 1, 0, 0, 0, 9, 0, 57, 62, 82, 84, 91, 99, 103, 108, 1, 6, 0, 0] \ No newline at end of file diff --git a/controlP5/layout/lang/XMLLexer.java b/controlP5/layout/lang/XMLLexer.java new file mode 100644 index 0000000..6b3730f --- /dev/null +++ b/controlP5/layout/lang/XMLLexer.java @@ -0,0 +1,185 @@ +// Generated from XML.g4 by ANTLR 4.13.0 +package main.java.src2.main.java.controlP5.controlP5.layout.lang; +import org.antlr.v4.runtime.Lexer; +import org.antlr.v4.runtime.CharStream; +import org.antlr.v4.runtime.Token; +import org.antlr.v4.runtime.TokenStream; +import org.antlr.v4.runtime.*; +import org.antlr.v4.runtime.atn.*; +import org.antlr.v4.runtime.dfa.DFA; +import org.antlr.v4.runtime.misc.*; + +@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast", "CheckReturnValue"}) +public class XMLLexer extends Lexer { + static { RuntimeMetaData.checkVersion("4.13.0", RuntimeMetaData.VERSION); } + + protected static final DFA[] _decisionToDFA; + protected static final PredictionContextCache _sharedContextCache = + new PredictionContextCache(); + public static final int + T__0=1, T__1=2, SELF_CLOSING=3, UNIT=4, WS=5, OPEN=6, OPEN_SLASH=7, CLOSE=8, + SLASH_CLOSE=9, EQUALS=10, Name=11, STRING=12, NUMBER=13; + public static String[] channelNames = { + "DEFAULT_TOKEN_CHANNEL", "HIDDEN" + }; + + public static String[] modeNames = { + "DEFAULT_MODE" + }; + + private static String[] makeRuleNames() { + return new String[] { + "T__0", "T__1", "SELF_CLOSING", "UNIT", "WS", "OPEN", "OPEN_SLASH", "CLOSE", + "SLASH_CLOSE", "EQUALS", "Name", "STRING", "NUMBER", "DIGIT", "ALPHA" + }; + } + public static final String[] ruleNames = makeRuleNames(); + + private static String[] makeLiteralNames() { + return new String[] { + null, "''", "''", null, null, null, "'<'", "''", + "'/>'", "'='" + }; + } + private static final String[] _LITERAL_NAMES = makeLiteralNames(); + private static String[] makeSymbolicNames() { + return new String[] { + null, null, null, "SELF_CLOSING", "UNIT", "WS", "OPEN", "OPEN_SLASH", + "CLOSE", "SLASH_CLOSE", "EQUALS", "Name", "STRING", "NUMBER" + }; + } + private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames(); + public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES); + + /** + * @deprecated Use {@link #VOCABULARY} instead. + */ + @Deprecated + public static final String[] tokenNames; + static { + tokenNames = new String[_SYMBOLIC_NAMES.length]; + for (int i = 0; i < tokenNames.length; i++) { + tokenNames[i] = VOCABULARY.getLiteralName(i); + if (tokenNames[i] == null) { + tokenNames[i] = VOCABULARY.getSymbolicName(i); + } + + if (tokenNames[i] == null) { + tokenNames[i] = ""; + } + } + } + + @Override + @Deprecated + public String[] getTokenNames() { + return tokenNames; + } + + @Override + + public Vocabulary getVocabulary() { + return VOCABULARY; + } + + + public XMLLexer(CharStream input) { + super(input); + _interp = new LexerATNSimulator(this,_ATN,_decisionToDFA,_sharedContextCache); + } + + @Override + public String getGrammarFileName() { return "XML.g4"; } + + @Override + public String[] getRuleNames() { return ruleNames; } + + @Override + public String getSerializedATN() { return _serializedATN; } + + @Override + public String[] getChannelNames() { return channelNames; } + + @Override + public String[] getModeNames() { return modeNames; } + + @Override + public ATN getATN() { return _ATN; } + + public static final String _serializedATN = + "\u0004\u0000\rr\u0006\uffff\uffff\u0002\u0000\u0007\u0000\u0002\u0001"+ + "\u0007\u0001\u0002\u0002\u0007\u0002\u0002\u0003\u0007\u0003\u0002\u0004"+ + "\u0007\u0004\u0002\u0005\u0007\u0005\u0002\u0006\u0007\u0006\u0002\u0007"+ + "\u0007\u0007\u0002\b\u0007\b\u0002\t\u0007\t\u0002\n\u0007\n\u0002\u000b"+ + "\u0007\u000b\u0002\f\u0007\f\u0002\r\u0007\r\u0002\u000e\u0007\u000e\u0001"+ + "\u0000\u0001\u0000\u0001\u0000\u0001\u0000\u0001\u0000\u0001\u0000\u0001"+ + "\u0000\u0001\u0000\u0001\u0000\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0002\u0001\u0002\u0001\u0002\u0001\u0002\u0001\u0003\u0001"+ + "\u0003\u0001\u0003\u0003\u0003:\b\u0003\u0001\u0004\u0004\u0004=\b\u0004"+ + "\u000b\u0004\f\u0004>\u0001\u0004\u0001\u0004\u0001\u0005\u0001\u0005"+ + "\u0001\u0006\u0001\u0006\u0001\u0006\u0001\u0007\u0001\u0007\u0001\b\u0001"+ + "\b\u0001\b\u0001\t\u0001\t\u0001\n\u0001\n\u0001\n\u0001\n\u0005\nS\b"+ + "\n\n\n\f\nV\t\n\u0001\u000b\u0001\u000b\u0005\u000bZ\b\u000b\n\u000b\f"+ + "\u000b]\t\u000b\u0001\u000b\u0001\u000b\u0001\u000b\u0005\u000bb\b\u000b"+ + "\n\u000b\f\u000be\t\u000b\u0001\u000b\u0003\u000bh\b\u000b\u0001\f\u0004"+ + "\fk\b\f\u000b\f\f\fl\u0001\r\u0001\r\u0001\u000e\u0001\u000e\u0000\u0000"+ + "\u000f\u0001\u0001\u0003\u0002\u0005\u0003\u0007\u0004\t\u0005\u000b\u0006"+ + "\r\u0007\u000f\b\u0011\t\u0013\n\u0015\u000b\u0017\f\u0019\r\u001b\u0000"+ + "\u001d\u0000\u0001\u0000\u0006\u0003\u0000\t\n\r\r \u0002\u0000-.__\u0001"+ + "\u0000\"\"\u0001\u0000\'\'\u0001\u000009\u0002\u0000AZazx\u0000\u0001"+ + "\u0001\u0000\u0000\u0000\u0000\u0003\u0001\u0000\u0000\u0000\u0000\u0005"+ + "\u0001\u0000\u0000\u0000\u0000\u0007\u0001\u0000\u0000\u0000\u0000\t\u0001"+ + "\u0000\u0000\u0000\u0000\u000b\u0001\u0000\u0000\u0000\u0000\r\u0001\u0000"+ + "\u0000\u0000\u0000\u000f\u0001\u0000\u0000\u0000\u0000\u0011\u0001\u0000"+ + "\u0000\u0000\u0000\u0013\u0001\u0000\u0000\u0000\u0000\u0015\u0001\u0000"+ + "\u0000\u0000\u0000\u0017\u0001\u0000\u0000\u0000\u0000\u0019\u0001\u0000"+ + "\u0000\u0000\u0001\u001f\u0001\u0000\u0000\u0000\u0003(\u0001\u0000\u0000"+ + "\u0000\u00052\u0001\u0000\u0000\u0000\u00079\u0001\u0000\u0000\u0000\t"+ + "<\u0001\u0000\u0000\u0000\u000bB\u0001\u0000\u0000\u0000\rD\u0001\u0000"+ + "\u0000\u0000\u000fG\u0001\u0000\u0000\u0000\u0011I\u0001\u0000\u0000\u0000"+ + "\u0013L\u0001\u0000\u0000\u0000\u0015N\u0001\u0000\u0000\u0000\u0017g"+ + "\u0001\u0000\u0000\u0000\u0019j\u0001\u0000\u0000\u0000\u001bn\u0001\u0000"+ + "\u0000\u0000\u001dp\u0001\u0000\u0000\u0000\u001f \u0005<\u0000\u0000"+ + " !\u0005W\u0000\u0000!\"\u0005i\u0000\u0000\"#\u0005n\u0000\u0000#$\u0005"+ + "d\u0000\u0000$%\u0005o\u0000\u0000%&\u0005w\u0000\u0000&\'\u0005>\u0000"+ + "\u0000\'\u0002\u0001\u0000\u0000\u0000()\u0005<\u0000\u0000)*\u0005/\u0000"+ + "\u0000*+\u0005W\u0000\u0000+,\u0005i\u0000\u0000,-\u0005n\u0000\u0000"+ + "-.\u0005d\u0000\u0000./\u0005o\u0000\u0000/0\u0005w\u0000\u000001\u0005"+ + ">\u0000\u00001\u0004\u0001\u0000\u0000\u000023\u0003\u000b\u0005\u0000"+ + "34\u0003\u0015\n\u000045\u0003\u0011\b\u00005\u0006\u0001\u0000\u0000"+ + "\u000067\u0005p\u0000\u00007:\u0005x\u0000\u00008:\u0005%\u0000\u0000"+ + "96\u0001\u0000\u0000\u000098\u0001\u0000\u0000\u0000:\b\u0001\u0000\u0000"+ + "\u0000;=\u0007\u0000\u0000\u0000<;\u0001\u0000\u0000\u0000=>\u0001\u0000"+ + "\u0000\u0000><\u0001\u0000\u0000\u0000>?\u0001\u0000\u0000\u0000?@\u0001"+ + "\u0000\u0000\u0000@A\u0006\u0004\u0000\u0000A\n\u0001\u0000\u0000\u0000"+ + "BC\u0005<\u0000\u0000C\f\u0001\u0000\u0000\u0000DE\u0005<\u0000\u0000"+ + "EF\u0005/\u0000\u0000F\u000e\u0001\u0000\u0000\u0000GH\u0005>\u0000\u0000"+ + "H\u0010\u0001\u0000\u0000\u0000IJ\u0005/\u0000\u0000JK\u0005>\u0000\u0000"+ + "K\u0012\u0001\u0000\u0000\u0000LM\u0005=\u0000\u0000M\u0014\u0001\u0000"+ + "\u0000\u0000NT\u0003\u001d\u000e\u0000OS\u0003\u001d\u000e\u0000PS\u0003"+ + "\u001b\r\u0000QS\u0007\u0001\u0000\u0000RO\u0001\u0000\u0000\u0000RP\u0001"+ + "\u0000\u0000\u0000RQ\u0001\u0000\u0000\u0000SV\u0001\u0000\u0000\u0000"+ + "TR\u0001\u0000\u0000\u0000TU\u0001\u0000\u0000\u0000U\u0016\u0001\u0000"+ + "\u0000\u0000VT\u0001\u0000\u0000\u0000W[\u0005\"\u0000\u0000XZ\b\u0002"+ + "\u0000\u0000YX\u0001\u0000\u0000\u0000Z]\u0001\u0000\u0000\u0000[Y\u0001"+ + "\u0000\u0000\u0000[\\\u0001\u0000\u0000\u0000\\^\u0001\u0000\u0000\u0000"+ + "][\u0001\u0000\u0000\u0000^h\u0005\"\u0000\u0000_c\u0005\'\u0000\u0000"+ + "`b\b\u0003\u0000\u0000a`\u0001\u0000\u0000\u0000be\u0001\u0000\u0000\u0000"+ + "ca\u0001\u0000\u0000\u0000cd\u0001\u0000\u0000\u0000df\u0001\u0000\u0000"+ + "\u0000ec\u0001\u0000\u0000\u0000fh\u0005\'\u0000\u0000gW\u0001\u0000\u0000"+ + "\u0000g_\u0001\u0000\u0000\u0000h\u0018\u0001\u0000\u0000\u0000ik\u0003"+ + "\u001b\r\u0000ji\u0001\u0000\u0000\u0000kl\u0001\u0000\u0000\u0000lj\u0001"+ + "\u0000\u0000\u0000lm\u0001\u0000\u0000\u0000m\u001a\u0001\u0000\u0000"+ + "\u0000no\u0007\u0004\u0000\u0000o\u001c\u0001\u0000\u0000\u0000pq\u0007"+ + "\u0005\u0000\u0000q\u001e\u0001\u0000\u0000\u0000\t\u00009>RT[cgl\u0001"+ + "\u0006\u0000\u0000"; + public static final ATN _ATN = + new ATNDeserializer().deserialize(_serializedATN.toCharArray()); + static { + _decisionToDFA = new DFA[_ATN.getNumberOfDecisions()]; + for (int i = 0; i < _ATN.getNumberOfDecisions(); i++) { + _decisionToDFA[i] = new DFA(_ATN.getDecisionState(i), i); + } + } +} \ No newline at end of file diff --git a/controlP5/layout/lang/XMLLexer.tokens b/controlP5/layout/lang/XMLLexer.tokens new file mode 100644 index 0000000..30d639a --- /dev/null +++ b/controlP5/layout/lang/XMLLexer.tokens @@ -0,0 +1,20 @@ +T__0=1 +T__1=2 +SELF_CLOSING=3 +UNIT=4 +WS=5 +OPEN=6 +OPEN_SLASH=7 +CLOSE=8 +SLASH_CLOSE=9 +EQUALS=10 +Name=11 +STRING=12 +NUMBER=13 +''=1 +''=2 +'<'=6 +''=8 +'/>'=9 +'='=10 diff --git a/controlP5/layout/lang/XMLListener.java b/controlP5/layout/lang/XMLListener.java new file mode 100644 index 0000000..eba2d07 --- /dev/null +++ b/controlP5/layout/lang/XMLListener.java @@ -0,0 +1,80 @@ +// Generated from XML.g4 by ANTLR 4.13.0 +package main.java.src2.main.java.controlP5.controlP5.layout.lang; +import org.antlr.v4.runtime.tree.ParseTreeListener; + +/** + * This interface defines a complete listener for a parse tree produced by + * {@link XMLParser}. + */ +public interface XMLListener extends ParseTreeListener { + /** + * Enter a parse tree produced by {@link XMLParser#document}. + * @param ctx the parse tree + */ + void enterDocument(XMLParser.DocumentContext ctx); + /** + * Exit a parse tree produced by {@link XMLParser#document}. + * @param ctx the parse tree + */ + void exitDocument(XMLParser.DocumentContext ctx); + /** + * Enter a parse tree produced by {@link XMLParser#element}. + * @param ctx the parse tree + */ + void enterElement(XMLParser.ElementContext ctx); + /** + * Exit a parse tree produced by {@link XMLParser#element}. + * @param ctx the parse tree + */ + void exitElement(XMLParser.ElementContext ctx); + /** + * Enter a parse tree produced by {@link XMLParser#startTag}. + * @param ctx the parse tree + */ + void enterStartTag(XMLParser.StartTagContext ctx); + /** + * Exit a parse tree produced by {@link XMLParser#startTag}. + * @param ctx the parse tree + */ + void exitStartTag(XMLParser.StartTagContext ctx); + /** + * Enter a parse tree produced by {@link XMLParser#endTag}. + * @param ctx the parse tree + */ + void enterEndTag(XMLParser.EndTagContext ctx); + /** + * Exit a parse tree produced by {@link XMLParser#endTag}. + * @param ctx the parse tree + */ + void exitEndTag(XMLParser.EndTagContext ctx); + /** + * Enter a parse tree produced by {@link XMLParser#attribute}. + * @param ctx the parse tree + */ + void enterAttribute(XMLParser.AttributeContext ctx); + /** + * Exit a parse tree produced by {@link XMLParser#attribute}. + * @param ctx the parse tree + */ + void exitAttribute(XMLParser.AttributeContext ctx); + /** + * Enter a parse tree produced by {@link XMLParser#content}. + * @param ctx the parse tree + */ + void enterContent(XMLParser.ContentContext ctx); + /** + * Exit a parse tree produced by {@link XMLParser#content}. + * @param ctx the parse tree + */ + void exitContent(XMLParser.ContentContext ctx); + /** + * Enter a parse tree produced by {@link XMLParser#value}. + * @param ctx the parse tree + */ + void enterValue(XMLParser.ValueContext ctx); + /** + * Exit a parse tree produced by {@link XMLParser#value}. + * @param ctx the parse tree + */ + void exitValue(XMLParser.ValueContext ctx); +} \ No newline at end of file diff --git a/controlP5/layout/lang/XMLParser.java b/controlP5/layout/lang/XMLParser.java new file mode 100644 index 0000000..8adabd8 --- /dev/null +++ b/controlP5/layout/lang/XMLParser.java @@ -0,0 +1,578 @@ +// Generated from XML.g4 by ANTLR 4.13.0 +package main.java.src2.main.java.controlP5.controlP5.layout.lang; +import org.antlr.v4.runtime.atn.*; +import org.antlr.v4.runtime.dfa.DFA; +import org.antlr.v4.runtime.*; +import org.antlr.v4.runtime.tree.*; +import java.util.List; + +@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast", "CheckReturnValue"}) +public class XMLParser extends Parser { + static { RuntimeMetaData.checkVersion("4.13.0", RuntimeMetaData.VERSION); } + + protected static final DFA[] _decisionToDFA; + protected static final PredictionContextCache _sharedContextCache = + new PredictionContextCache(); + public static final int + T__0=1, T__1=2, SELF_CLOSING=3, UNIT=4, WS=5, OPEN=6, OPEN_SLASH=7, CLOSE=8, + SLASH_CLOSE=9, EQUALS=10, Name=11, STRING=12, NUMBER=13; + public static final int + RULE_document = 0, RULE_element = 1, RULE_startTag = 2, RULE_endTag = 3, + RULE_attribute = 4, RULE_content = 5, RULE_value = 6; + private static String[] makeRuleNames() { + return new String[] { + "document", "element", "startTag", "endTag", "attribute", "content", + "value" + }; + } + public static final String[] ruleNames = makeRuleNames(); + + private static String[] makeLiteralNames() { + return new String[] { + null, "''", "''", null, null, null, "'<'", "''", + "'/>'", "'='" + }; + } + private static final String[] _LITERAL_NAMES = makeLiteralNames(); + private static String[] makeSymbolicNames() { + return new String[] { + null, null, null, "SELF_CLOSING", "UNIT", "WS", "OPEN", "OPEN_SLASH", + "CLOSE", "SLASH_CLOSE", "EQUALS", "Name", "STRING", "NUMBER" + }; + } + private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames(); + public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES); + + /** + * @deprecated Use {@link #VOCABULARY} instead. + */ + @Deprecated + public static final String[] tokenNames; + static { + tokenNames = new String[_SYMBOLIC_NAMES.length]; + for (int i = 0; i < tokenNames.length; i++) { + tokenNames[i] = VOCABULARY.getLiteralName(i); + if (tokenNames[i] == null) { + tokenNames[i] = VOCABULARY.getSymbolicName(i); + } + + if (tokenNames[i] == null) { + tokenNames[i] = ""; + } + } + } + + @Override + @Deprecated + public String[] getTokenNames() { + return tokenNames; + } + + @Override + + public Vocabulary getVocabulary() { + return VOCABULARY; + } + + @Override + public String getGrammarFileName() { return "XML.g4"; } + + @Override + public String[] getRuleNames() { return ruleNames; } + + @Override + public String getSerializedATN() { return _serializedATN; } + + @Override + public ATN getATN() { return _ATN; } + + public XMLParser(TokenStream input) { + super(input); + _interp = new ParserATNSimulator(this,_ATN,_decisionToDFA,_sharedContextCache); + } + + @SuppressWarnings("CheckReturnValue") + public static class DocumentContext extends ParserRuleContext { + public List element() { + return getRuleContexts(ElementContext.class); + } + public ElementContext element(int i) { + return getRuleContext(ElementContext.class,i); + } + public DocumentContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_document; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof XMLListener ) ((XMLListener)listener).enterDocument(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof XMLListener ) ((XMLListener)listener).exitDocument(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof XMLVisitor ) return ((XMLVisitor)visitor).visitDocument(this); + else return visitor.visitChildren(this); + } + } + + public final DocumentContext document() throws RecognitionException { + DocumentContext _localctx = new DocumentContext(_ctx, getState()); + enterRule(_localctx, 0, RULE_document); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(14); + match(T__0); + setState(16); + _errHandler.sync(this); + _la = _input.LA(1); + do { + { + { + setState(15); + element(); + } + } + setState(18); + _errHandler.sync(this); + _la = _input.LA(1); + } while ( _la==SELF_CLOSING || _la==OPEN ); + setState(20); + match(T__1); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class ElementContext extends ParserRuleContext { + public StartTagContext startTag() { + return getRuleContext(StartTagContext.class,0); + } + public EndTagContext endTag() { + return getRuleContext(EndTagContext.class,0); + } + public ContentContext content() { + return getRuleContext(ContentContext.class,0); + } + public TerminalNode SELF_CLOSING() { return getToken(XMLParser.SELF_CLOSING, 0); } + public ElementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_element; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof XMLListener ) ((XMLListener)listener).enterElement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof XMLListener ) ((XMLListener)listener).exitElement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof XMLVisitor ) return ((XMLVisitor)visitor).visitElement(this); + else return visitor.visitChildren(this); + } + } + + public final ElementContext element() throws RecognitionException { + ElementContext _localctx = new ElementContext(_ctx, getState()); + enterRule(_localctx, 2, RULE_element); + int _la; + try { + setState(29); + _errHandler.sync(this); + switch (_input.LA(1)) { + case OPEN: + enterOuterAlt(_localctx, 1); + { + setState(22); + startTag(); + setState(24); + _errHandler.sync(this); + _la = _input.LA(1); + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & 4168L) != 0)) { + { + setState(23); + content(); + } + } + + setState(26); + endTag(); + } + break; + case SELF_CLOSING: + enterOuterAlt(_localctx, 2); + { + setState(28); + match(SELF_CLOSING); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class StartTagContext extends ParserRuleContext { + public TerminalNode OPEN() { return getToken(XMLParser.OPEN, 0); } + public TerminalNode Name() { return getToken(XMLParser.Name, 0); } + public TerminalNode CLOSE() { return getToken(XMLParser.CLOSE, 0); } + public List attribute() { + return getRuleContexts(AttributeContext.class); + } + public AttributeContext attribute(int i) { + return getRuleContext(AttributeContext.class,i); + } + public StartTagContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_startTag; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof XMLListener ) ((XMLListener)listener).enterStartTag(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof XMLListener ) ((XMLListener)listener).exitStartTag(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof XMLVisitor ) return ((XMLVisitor)visitor).visitStartTag(this); + else return visitor.visitChildren(this); + } + } + + public final StartTagContext startTag() throws RecognitionException { + StartTagContext _localctx = new StartTagContext(_ctx, getState()); + enterRule(_localctx, 4, RULE_startTag); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(31); + match(OPEN); + setState(32); + match(Name); + setState(36); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==Name) { + { + { + setState(33); + attribute(); + } + } + setState(38); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(39); + match(CLOSE); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class EndTagContext extends ParserRuleContext { + public TerminalNode OPEN_SLASH() { return getToken(XMLParser.OPEN_SLASH, 0); } + public TerminalNode Name() { return getToken(XMLParser.Name, 0); } + public TerminalNode CLOSE() { return getToken(XMLParser.CLOSE, 0); } + public EndTagContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_endTag; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof XMLListener ) ((XMLListener)listener).enterEndTag(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof XMLListener ) ((XMLListener)listener).exitEndTag(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof XMLVisitor ) return ((XMLVisitor)visitor).visitEndTag(this); + else return visitor.visitChildren(this); + } + } + + public final EndTagContext endTag() throws RecognitionException { + EndTagContext _localctx = new EndTagContext(_ctx, getState()); + enterRule(_localctx, 6, RULE_endTag); + try { + enterOuterAlt(_localctx, 1); + { + setState(41); + match(OPEN_SLASH); + setState(42); + match(Name); + setState(43); + match(CLOSE); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class AttributeContext extends ParserRuleContext { + public TerminalNode Name() { return getToken(XMLParser.Name, 0); } + public TerminalNode EQUALS() { return getToken(XMLParser.EQUALS, 0); } + public ValueContext value() { + return getRuleContext(ValueContext.class,0); + } + public AttributeContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_attribute; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof XMLListener ) ((XMLListener)listener).enterAttribute(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof XMLListener ) ((XMLListener)listener).exitAttribute(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof XMLVisitor ) return ((XMLVisitor)visitor).visitAttribute(this); + else return visitor.visitChildren(this); + } + } + + public final AttributeContext attribute() throws RecognitionException { + AttributeContext _localctx = new AttributeContext(_ctx, getState()); + enterRule(_localctx, 8, RULE_attribute); + try { + enterOuterAlt(_localctx, 1); + { + setState(45); + match(Name); + setState(46); + match(EQUALS); + setState(47); + value(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class ContentContext extends ParserRuleContext { + public ElementContext element() { + return getRuleContext(ElementContext.class,0); + } + public TerminalNode STRING() { return getToken(XMLParser.STRING, 0); } + public ContentContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_content; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof XMLListener ) ((XMLListener)listener).enterContent(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof XMLListener ) ((XMLListener)listener).exitContent(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof XMLVisitor ) return ((XMLVisitor)visitor).visitContent(this); + else return visitor.visitChildren(this); + } + } + + public final ContentContext content() throws RecognitionException { + ContentContext _localctx = new ContentContext(_ctx, getState()); + enterRule(_localctx, 10, RULE_content); + try { + setState(51); + _errHandler.sync(this); + switch (_input.LA(1)) { + case SELF_CLOSING: + case OPEN: + enterOuterAlt(_localctx, 1); + { + setState(49); + element(); + } + break; + case STRING: + enterOuterAlt(_localctx, 2); + { + setState(50); + match(STRING); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class ValueContext extends ParserRuleContext { + public TerminalNode STRING() { return getToken(XMLParser.STRING, 0); } + public TerminalNode NUMBER() { return getToken(XMLParser.NUMBER, 0); } + public TerminalNode UNIT() { return getToken(XMLParser.UNIT, 0); } + public ValueContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_value; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof XMLListener ) ((XMLListener)listener).enterValue(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof XMLListener ) ((XMLListener)listener).exitValue(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof XMLVisitor ) return ((XMLVisitor)visitor).visitValue(this); + else return visitor.visitChildren(this); + } + } + + public final ValueContext value() throws RecognitionException { + ValueContext _localctx = new ValueContext(_ctx, getState()); + enterRule(_localctx, 12, RULE_value); + try { + setState(56); + _errHandler.sync(this); + switch (_input.LA(1)) { + case STRING: + enterOuterAlt(_localctx, 1); + { + setState(53); + match(STRING); + } + break; + case NUMBER: + enterOuterAlt(_localctx, 2); + { + setState(54); + match(NUMBER); + setState(55); + match(UNIT); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static final String _serializedATN = + "\u0004\u0001\r;\u0002\u0000\u0007\u0000\u0002\u0001\u0007\u0001\u0002"+ + "\u0002\u0007\u0002\u0002\u0003\u0007\u0003\u0002\u0004\u0007\u0004\u0002"+ + "\u0005\u0007\u0005\u0002\u0006\u0007\u0006\u0001\u0000\u0001\u0000\u0004"+ + "\u0000\u0011\b\u0000\u000b\u0000\f\u0000\u0012\u0001\u0000\u0001\u0000"+ + "\u0001\u0001\u0001\u0001\u0003\u0001\u0019\b\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0003\u0001\u001e\b\u0001\u0001\u0002\u0001\u0002\u0001\u0002"+ + "\u0005\u0002#\b\u0002\n\u0002\f\u0002&\t\u0002\u0001\u0002\u0001\u0002"+ + "\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0004\u0001\u0004"+ + "\u0001\u0004\u0001\u0004\u0001\u0005\u0001\u0005\u0003\u00054\b\u0005"+ + "\u0001\u0006\u0001\u0006\u0001\u0006\u0003\u00069\b\u0006\u0001\u0006"+ + "\u0000\u0000\u0007\u0000\u0002\u0004\u0006\b\n\f\u0000\u00009\u0000\u000e"+ + "\u0001\u0000\u0000\u0000\u0002\u001d\u0001\u0000\u0000\u0000\u0004\u001f"+ + "\u0001\u0000\u0000\u0000\u0006)\u0001\u0000\u0000\u0000\b-\u0001\u0000"+ + "\u0000\u0000\n3\u0001\u0000\u0000\u0000\f8\u0001\u0000\u0000\u0000\u000e"+ + "\u0010\u0005\u0001\u0000\u0000\u000f\u0011\u0003\u0002\u0001\u0000\u0010"+ + "\u000f\u0001\u0000\u0000\u0000\u0011\u0012\u0001\u0000\u0000\u0000\u0012"+ + "\u0010\u0001\u0000\u0000\u0000\u0012\u0013\u0001\u0000\u0000\u0000\u0013"+ + "\u0014\u0001\u0000\u0000\u0000\u0014\u0015\u0005\u0002\u0000\u0000\u0015"+ + "\u0001\u0001\u0000\u0000\u0000\u0016\u0018\u0003\u0004\u0002\u0000\u0017"+ + "\u0019\u0003\n\u0005\u0000\u0018\u0017\u0001\u0000\u0000\u0000\u0018\u0019"+ + "\u0001\u0000\u0000\u0000\u0019\u001a\u0001\u0000\u0000\u0000\u001a\u001b"+ + "\u0003\u0006\u0003\u0000\u001b\u001e\u0001\u0000\u0000\u0000\u001c\u001e"+ + "\u0005\u0003\u0000\u0000\u001d\u0016\u0001\u0000\u0000\u0000\u001d\u001c"+ + "\u0001\u0000\u0000\u0000\u001e\u0003\u0001\u0000\u0000\u0000\u001f \u0005"+ + "\u0006\u0000\u0000 $\u0005\u000b\u0000\u0000!#\u0003\b\u0004\u0000\"!"+ + "\u0001\u0000\u0000\u0000#&\u0001\u0000\u0000\u0000$\"\u0001\u0000\u0000"+ + "\u0000$%\u0001\u0000\u0000\u0000%\'\u0001\u0000\u0000\u0000&$\u0001\u0000"+ + "\u0000\u0000\'(\u0005\b\u0000\u0000(\u0005\u0001\u0000\u0000\u0000)*\u0005"+ + "\u0007\u0000\u0000*+\u0005\u000b\u0000\u0000+,\u0005\b\u0000\u0000,\u0007"+ + "\u0001\u0000\u0000\u0000-.\u0005\u000b\u0000\u0000./\u0005\n\u0000\u0000"+ + "/0\u0003\f\u0006\u00000\t\u0001\u0000\u0000\u000014\u0003\u0002\u0001"+ + "\u000024\u0005\f\u0000\u000031\u0001\u0000\u0000\u000032\u0001\u0000\u0000"+ + "\u00004\u000b\u0001\u0000\u0000\u000059\u0005\f\u0000\u000067\u0005\r"+ + "\u0000\u000079\u0005\u0004\u0000\u000085\u0001\u0000\u0000\u000086\u0001"+ + "\u0000\u0000\u00009\r\u0001\u0000\u0000\u0000\u0006\u0012\u0018\u001d"+ + "$38"; + public static final ATN _ATN = + new ATNDeserializer().deserialize(_serializedATN.toCharArray()); + static { + _decisionToDFA = new DFA[_ATN.getNumberOfDecisions()]; + for (int i = 0; i < _ATN.getNumberOfDecisions(); i++) { + _decisionToDFA[i] = new DFA(_ATN.getDecisionState(i), i); + } + } +} \ No newline at end of file diff --git a/controlP5/layout/lang/XMLVisitor.java b/controlP5/layout/lang/XMLVisitor.java new file mode 100644 index 0000000..6305671 --- /dev/null +++ b/controlP5/layout/lang/XMLVisitor.java @@ -0,0 +1,55 @@ +// Generated from XML.g4 by ANTLR 4.13.0 +package main.java.src2.main.java.controlP5.controlP5.layout.lang; +import org.antlr.v4.runtime.tree.ParseTreeVisitor; + +/** + * This interface defines a complete generic visitor for a parse tree produced + * by {@link XMLParser}. + * + * @param The return type of the visit operation. Use {@link Void} for + * operations with no return type. + */ +public interface XMLVisitor extends ParseTreeVisitor { + /** + * Visit a parse tree produced by {@link XMLParser#document}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitDocument(XMLParser.DocumentContext ctx); + /** + * Visit a parse tree produced by {@link XMLParser#element}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitElement(XMLParser.ElementContext ctx); + /** + * Visit a parse tree produced by {@link XMLParser#startTag}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitStartTag(XMLParser.StartTagContext ctx); + /** + * Visit a parse tree produced by {@link XMLParser#endTag}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitEndTag(XMLParser.EndTagContext ctx); + /** + * Visit a parse tree produced by {@link XMLParser#attribute}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitAttribute(XMLParser.AttributeContext ctx); + /** + * Visit a parse tree produced by {@link XMLParser#content}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitContent(XMLParser.ContentContext ctx); + /** + * Visit a parse tree produced by {@link XMLParser#value}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitValue(XMLParser.ValueContext ctx); +} \ No newline at end of file diff --git a/controlP5/package.html b/controlP5/package.html new file mode 100755 index 0000000..132bc08 --- /dev/null +++ b/controlP5/package.html @@ -0,0 +1,16 @@ + + + +controlP5 documentation + + + +

ControlP5

+

ControlP5 (www.sojamo.de/libraries/controlP5) is a library written by Andreas Schlegel for the programming environment processing. ControlP5 is a GUI and controller library for processing that can be used in authoring, application mode. Controllers including Sliders, Buttons, Toggles, Knobs, Textfields, RadioButtons, Checkboxes amongst others can be easily added to a processing sketch and can be arranged in separate control windows, or can be organized in tabs or groups. The controlP5 source code repository is available on github at github.com/sojamo/controlp5. +

+

Javascript

+

Currently there is no javascript version of ControlP5, though I had started implementing a slimmed down version for processing.js but since it is currently unclear which javascript version, processing.js or p5.js, will become the default js version of processing, controlP5.js is on hold.

+ + + diff --git a/controlp5.iml b/controlp5.iml new file mode 100644 index 0000000..abe781f --- /dev/null +++ b/controlp5.iml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/examples/controllers/ControlP5ButtonBar/ControlP5ButtonBar.pde b/examples/controllers/ControlP5ButtonBar/ControlP5ButtonBar.pde index 8b9f07a..7eef9e4 100644 --- a/examples/controllers/ControlP5ButtonBar/ControlP5ButtonBar.pde +++ b/examples/controllers/ControlP5ButtonBar/ControlP5ButtonBar.pde @@ -53,150 +53,150 @@ Format: ClassName : returnType methodName(parameter type) -controlP5.ButtonBar : ButtonBar addItem(String, Object) -controlP5.ButtonBar : ButtonBar addItems(List) -controlP5.ButtonBar : ButtonBar addItems(Map) -controlP5.ButtonBar : ButtonBar addItems(String[]) -controlP5.ButtonBar : ButtonBar clear() -controlP5.ButtonBar : ButtonBar removeItem(String) -controlP5.ButtonBar : ButtonBar removeItems(List) -controlP5.ButtonBar : ButtonBar setItems(List) -controlP5.ButtonBar : ButtonBar setItems(Map) -controlP5.ButtonBar : ButtonBar setItems(String[]) -controlP5.ButtonBar : List getItems() -controlP5.ButtonBar : Map getItem(String) -controlP5.ButtonBar : int hover() -controlP5.ButtonBar : void changeItem(String, String, Object) -controlP5.ButtonBar : void onClick() -controlP5.Controller : ButtonBar addCallback(CallbackListener) -controlP5.Controller : ButtonBar addListener(ControlListener) -controlP5.Controller : ButtonBar addListenerFor(int, CallbackListener) -controlP5.Controller : ButtonBar align(int, int, int, int) -controlP5.Controller : ButtonBar bringToFront() -controlP5.Controller : ButtonBar bringToFront(ControllerInterface) -controlP5.Controller : ButtonBar hide() -controlP5.Controller : ButtonBar linebreak() -controlP5.Controller : ButtonBar listen(boolean) -controlP5.Controller : ButtonBar lock() -controlP5.Controller : ButtonBar onChange(CallbackListener) -controlP5.Controller : ButtonBar onClick(CallbackListener) -controlP5.Controller : ButtonBar onDoublePress(CallbackListener) -controlP5.Controller : ButtonBar onDrag(CallbackListener) -controlP5.Controller : ButtonBar onDraw(ControllerView) -controlP5.Controller : ButtonBar onEndDrag(CallbackListener) -controlP5.Controller : ButtonBar onEnter(CallbackListener) -controlP5.Controller : ButtonBar onLeave(CallbackListener) -controlP5.Controller : ButtonBar onMove(CallbackListener) -controlP5.Controller : ButtonBar onPress(CallbackListener) -controlP5.Controller : ButtonBar onRelease(CallbackListener) -controlP5.Controller : ButtonBar onReleaseOutside(CallbackListener) -controlP5.Controller : ButtonBar onStartDrag(CallbackListener) -controlP5.Controller : ButtonBar onWheel(CallbackListener) -controlP5.Controller : ButtonBar plugTo(Object) -controlP5.Controller : ButtonBar plugTo(Object, String) -controlP5.Controller : ButtonBar plugTo(Object[]) -controlP5.Controller : ButtonBar plugTo(Object[], String) -controlP5.Controller : ButtonBar registerProperty(String) -controlP5.Controller : ButtonBar registerProperty(String, String) -controlP5.Controller : ButtonBar registerTooltip(String) -controlP5.Controller : ButtonBar removeBehavior() -controlP5.Controller : ButtonBar removeCallback() -controlP5.Controller : ButtonBar removeCallback(CallbackListener) -controlP5.Controller : ButtonBar removeListener(ControlListener) -controlP5.Controller : ButtonBar removeListenerFor(int, CallbackListener) -controlP5.Controller : ButtonBar removeListenersFor(int) -controlP5.Controller : ButtonBar removeProperty(String) -controlP5.Controller : ButtonBar removeProperty(String, String) -controlP5.Controller : ButtonBar setArrayValue(float[]) -controlP5.Controller : ButtonBar setArrayValue(int, float) -controlP5.Controller : ButtonBar setBehavior(ControlBehavior) -controlP5.Controller : ButtonBar setBroadcast(boolean) -controlP5.Controller : ButtonBar setCaptionLabel(String) -controlP5.Controller : ButtonBar setColor(CColor) -controlP5.Controller : ButtonBar setColorActive(int) -controlP5.Controller : ButtonBar setColorBackground(int) -controlP5.Controller : ButtonBar setColorCaptionLabel(int) -controlP5.Controller : ButtonBar setColorForeground(int) -controlP5.Controller : ButtonBar setColorLabel(int) -controlP5.Controller : ButtonBar setColorValue(int) -controlP5.Controller : ButtonBar setColorValueLabel(int) -controlP5.Controller : ButtonBar setDecimalPrecision(int) -controlP5.Controller : ButtonBar setDefaultValue(float) -controlP5.Controller : ButtonBar setHeight(int) -controlP5.Controller : ButtonBar setId(int) -controlP5.Controller : ButtonBar setImage(PImage) -controlP5.Controller : ButtonBar setImage(PImage, int) -controlP5.Controller : ButtonBar setImages(PImage, PImage, PImage) -controlP5.Controller : ButtonBar setImages(PImage, PImage, PImage, PImage) -controlP5.Controller : ButtonBar setLabel(String) -controlP5.Controller : ButtonBar setLabelVisible(boolean) -controlP5.Controller : ButtonBar setLock(boolean) -controlP5.Controller : ButtonBar setMax(float) -controlP5.Controller : ButtonBar setMin(float) -controlP5.Controller : ButtonBar setMouseOver(boolean) -controlP5.Controller : ButtonBar setMoveable(boolean) -controlP5.Controller : ButtonBar setPosition(float, float) -controlP5.Controller : ButtonBar setPosition(float[]) -controlP5.Controller : ButtonBar setSize(PImage) -controlP5.Controller : ButtonBar setSize(int, int) -controlP5.Controller : ButtonBar setStringValue(String) -controlP5.Controller : ButtonBar setUpdate(boolean) -controlP5.Controller : ButtonBar setValue(float) -controlP5.Controller : ButtonBar setValueLabel(String) -controlP5.Controller : ButtonBar setValueSelf(float) -controlP5.Controller : ButtonBar setView(ControllerView) -controlP5.Controller : ButtonBar setVisible(boolean) -controlP5.Controller : ButtonBar setWidth(int) -controlP5.Controller : ButtonBar show() -controlP5.Controller : ButtonBar unlock() -controlP5.Controller : ButtonBar unplugFrom(Object) -controlP5.Controller : ButtonBar unplugFrom(Object[]) -controlP5.Controller : ButtonBar unregisterTooltip() -controlP5.Controller : ButtonBar update() -controlP5.Controller : ButtonBar updateSize() -controlP5.Controller : CColor getColor() -controlP5.Controller : ControlBehavior getBehavior() -controlP5.Controller : ControlWindow getControlWindow() -controlP5.Controller : ControlWindow getWindow() -controlP5.Controller : ControllerProperty getProperty(String) -controlP5.Controller : ControllerProperty getProperty(String, String) -controlP5.Controller : ControllerView getView() -controlP5.Controller : Label getCaptionLabel() -controlP5.Controller : Label getValueLabel() -controlP5.Controller : List getControllerPlugList() -controlP5.Controller : Pointer getPointer() -controlP5.Controller : String getAddress() -controlP5.Controller : String getInfo() -controlP5.Controller : String getName() -controlP5.Controller : String getStringValue() -controlP5.Controller : String toString() -controlP5.Controller : Tab getTab() -controlP5.Controller : boolean isActive() -controlP5.Controller : boolean isBroadcast() -controlP5.Controller : boolean isInside() -controlP5.Controller : boolean isLabelVisible() -controlP5.Controller : boolean isListening() -controlP5.Controller : boolean isLock() -controlP5.Controller : boolean isMouseOver() -controlP5.Controller : boolean isMousePressed() -controlP5.Controller : boolean isMoveable() -controlP5.Controller : boolean isUpdate() -controlP5.Controller : boolean isVisible() -controlP5.Controller : float getArrayValue(int) -controlP5.Controller : float getDefaultValue() -controlP5.Controller : float getMax() -controlP5.Controller : float getMin() -controlP5.Controller : float getValue() -controlP5.Controller : float[] getAbsolutePosition() -controlP5.Controller : float[] getArrayValue() -controlP5.Controller : float[] getPosition() -controlP5.Controller : int getDecimalPrecision() -controlP5.Controller : int getHeight() -controlP5.Controller : int getId() -controlP5.Controller : int getWidth() -controlP5.Controller : int listenerSize() -controlP5.Controller : void remove() -controlP5.Controller : void setView(ControllerView, int) +main.java.controlp5.ButtonBar : ButtonBar addItem(String, Object) +main.java.controlp5.ButtonBar : ButtonBar addItems(List) +main.java.controlp5.ButtonBar : ButtonBar addItems(Map) +main.java.controlp5.ButtonBar : ButtonBar addItems(String[]) +main.java.controlp5.ButtonBar : ButtonBar clear() +main.java.controlp5.ButtonBar : ButtonBar removeItem(String) +main.java.controlp5.ButtonBar : ButtonBar removeItems(List) +main.java.controlp5.ButtonBar : ButtonBar setItems(List) +main.java.controlp5.ButtonBar : ButtonBar setItems(Map) +main.java.controlp5.ButtonBar : ButtonBar setItems(String[]) +main.java.controlp5.ButtonBar : List getItems() +main.java.controlp5.ButtonBar : Map getItem(String) +main.java.controlp5.ButtonBar : int hover() +main.java.controlp5.ButtonBar : void changeItem(String, String, Object) +main.java.controlp5.ButtonBar : void onClick() +main.java.controlp5.Controller : ButtonBar addCallback(CallbackListener) +main.java.controlp5.Controller : ButtonBar addListener(ControlListener) +main.java.controlp5.Controller : ButtonBar addListenerFor(int, CallbackListener) +main.java.controlp5.Controller : ButtonBar align(int, int, int, int) +main.java.controlp5.Controller : ButtonBar bringToFront() +main.java.controlp5.Controller : ButtonBar bringToFront(ControllerInterface) +main.java.controlp5.Controller : ButtonBar hide() +main.java.controlp5.Controller : ButtonBar linebreak() +main.java.controlp5.Controller : ButtonBar listen(boolean) +main.java.controlp5.Controller : ButtonBar lock() +main.java.controlp5.Controller : ButtonBar onChange(CallbackListener) +main.java.controlp5.Controller : ButtonBar onClick(CallbackListener) +main.java.controlp5.Controller : ButtonBar onDoublePress(CallbackListener) +main.java.controlp5.Controller : ButtonBar onDrag(CallbackListener) +main.java.controlp5.Controller : ButtonBar onDraw(ControllerView) +main.java.controlp5.Controller : ButtonBar onEndDrag(CallbackListener) +main.java.controlp5.Controller : ButtonBar onEnter(CallbackListener) +main.java.controlp5.Controller : ButtonBar onLeave(CallbackListener) +main.java.controlp5.Controller : ButtonBar onMove(CallbackListener) +main.java.controlp5.Controller : ButtonBar onPress(CallbackListener) +main.java.controlp5.Controller : ButtonBar onRelease(CallbackListener) +main.java.controlp5.Controller : ButtonBar onReleaseOutside(CallbackListener) +main.java.controlp5.Controller : ButtonBar onStartDrag(CallbackListener) +main.java.controlp5.Controller : ButtonBar onWheel(CallbackListener) +main.java.controlp5.Controller : ButtonBar plugTo(Object) +main.java.controlp5.Controller : ButtonBar plugTo(Object, String) +main.java.controlp5.Controller : ButtonBar plugTo(Object[]) +main.java.controlp5.Controller : ButtonBar plugTo(Object[], String) +main.java.controlp5.Controller : ButtonBar registerProperty(String) +main.java.controlp5.Controller : ButtonBar registerProperty(String, String) +main.java.controlp5.Controller : ButtonBar registerTooltip(String) +main.java.controlp5.Controller : ButtonBar removeBehavior() +main.java.controlp5.Controller : ButtonBar removeCallback() +main.java.controlp5.Controller : ButtonBar removeCallback(CallbackListener) +main.java.controlp5.Controller : ButtonBar removeListener(ControlListener) +main.java.controlp5.Controller : ButtonBar removeListenerFor(int, CallbackListener) +main.java.controlp5.Controller : ButtonBar removeListenersFor(int) +main.java.controlp5.Controller : ButtonBar removeProperty(String) +main.java.controlp5.Controller : ButtonBar removeProperty(String, String) +main.java.controlp5.Controller : ButtonBar setArrayValue(float[]) +main.java.controlp5.Controller : ButtonBar setArrayValue(int, float) +main.java.controlp5.Controller : ButtonBar setBehavior(ControlBehavior) +main.java.controlp5.Controller : ButtonBar setBroadcast(boolean) +main.java.controlp5.Controller : ButtonBar setCaptionLabel(String) +main.java.controlp5.Controller : ButtonBar setColor(CColor) +main.java.controlp5.Controller : ButtonBar setColorActive(int) +main.java.controlp5.Controller : ButtonBar setColorBackground(int) +main.java.controlp5.Controller : ButtonBar setColorCaptionLabel(int) +main.java.controlp5.Controller : ButtonBar setColorForeground(int) +main.java.controlp5.Controller : ButtonBar setColorLabel(int) +main.java.controlp5.Controller : ButtonBar setColorValue(int) +main.java.controlp5.Controller : ButtonBar setColorValueLabel(int) +main.java.controlp5.Controller : ButtonBar setDecimalPrecision(int) +main.java.controlp5.Controller : ButtonBar setDefaultValue(float) +main.java.controlp5.Controller : ButtonBar setHeight(int) +main.java.controlp5.Controller : ButtonBar setId(int) +main.java.controlp5.Controller : ButtonBar setImage(PImage) +main.java.controlp5.Controller : ButtonBar setImage(PImage, int) +main.java.controlp5.Controller : ButtonBar setImages(PImage, PImage, PImage) +main.java.controlp5.Controller : ButtonBar setImages(PImage, PImage, PImage, PImage) +main.java.controlp5.Controller : ButtonBar setLabel(String) +main.java.controlp5.Controller : ButtonBar setLabelVisible(boolean) +main.java.controlp5.Controller : ButtonBar setLock(boolean) +main.java.controlp5.Controller : ButtonBar setMax(float) +main.java.controlp5.Controller : ButtonBar setMin(float) +main.java.controlp5.Controller : ButtonBar setMouseOver(boolean) +main.java.controlp5.Controller : ButtonBar setMoveable(boolean) +main.java.controlp5.Controller : ButtonBar setPosition(float, float) +main.java.controlp5.Controller : ButtonBar setPosition(float[]) +main.java.controlp5.Controller : ButtonBar setSize(PImage) +main.java.controlp5.Controller : ButtonBar setSize(int, int) +main.java.controlp5.Controller : ButtonBar setStringValue(String) +main.java.controlp5.Controller : ButtonBar setUpdate(boolean) +main.java.controlp5.Controller : ButtonBar setValue(float) +main.java.controlp5.Controller : ButtonBar setValueLabel(String) +main.java.controlp5.Controller : ButtonBar setValueSelf(float) +main.java.controlp5.Controller : ButtonBar setView(ControllerView) +main.java.controlp5.Controller : ButtonBar setVisible(boolean) +main.java.controlp5.Controller : ButtonBar setWidth(int) +main.java.controlp5.Controller : ButtonBar show() +main.java.controlp5.Controller : ButtonBar unlock() +main.java.controlp5.Controller : ButtonBar unplugFrom(Object) +main.java.controlp5.Controller : ButtonBar unplugFrom(Object[]) +main.java.controlp5.Controller : ButtonBar unregisterTooltip() +main.java.controlp5.Controller : ButtonBar update() +main.java.controlp5.Controller : ButtonBar updateSize() +main.java.controlp5.Controller : CColor getColor() +main.java.controlp5.Controller : ControlBehavior getBehavior() +main.java.controlp5.Controller : ControlWindow getControlWindow() +main.java.controlp5.Controller : ControlWindow getWindow() +main.java.controlp5.Controller : ControllerProperty getProperty(String) +main.java.controlp5.Controller : ControllerProperty getProperty(String, String) +main.java.controlp5.Controller : ControllerView getView() +main.java.controlp5.Controller : Label getCaptionLabel() +main.java.controlp5.Controller : Label getValueLabel() +main.java.controlp5.Controller : List getControllerPlugList() +main.java.controlp5.Controller : Pointer getPointer() +main.java.controlp5.Controller : String getAddress() +main.java.controlp5.Controller : String getInfo() +main.java.controlp5.Controller : String getName() +main.java.controlp5.Controller : String getStringValue() +main.java.controlp5.Controller : String toString() +main.java.controlp5.Controller : Tab getTab() +main.java.controlp5.Controller : boolean isActive() +main.java.controlp5.Controller : boolean isBroadcast() +main.java.controlp5.Controller : boolean isInside() +main.java.controlp5.Controller : boolean isLabelVisible() +main.java.controlp5.Controller : boolean isListening() +main.java.controlp5.Controller : boolean isLock() +main.java.controlp5.Controller : boolean isMouseOver() +main.java.controlp5.Controller : boolean isMousePressed() +main.java.controlp5.Controller : boolean isMoveable() +main.java.controlp5.Controller : boolean isUpdate() +main.java.controlp5.Controller : boolean isVisible() +main.java.controlp5.Controller : float getArrayValue(int) +main.java.controlp5.Controller : float getDefaultValue() +main.java.controlp5.Controller : float getMax() +main.java.controlp5.Controller : float getMin() +main.java.controlp5.Controller : float getValue() +main.java.controlp5.Controller : float[] getAbsolutePosition() +main.java.controlp5.Controller : float[] getArrayValue() +main.java.controlp5.Controller : float[] getPosition() +main.java.controlp5.Controller : int getDecimalPrecision() +main.java.controlp5.Controller : int getHeight() +main.java.controlp5.Controller : int getId() +main.java.controlp5.Controller : int getWidth() +main.java.controlp5.Controller : int listenerSize() +main.java.controlp5.Controller : void remove() +main.java.controlp5.Controller : void setView(ControllerView, int) java.lang.Object : String toString() java.lang.Object : boolean equals(Object) diff --git a/examples/controllers/ControlP5ColorWheel/ControlP5ColorWheel.pde b/examples/controllers/ControlP5ColorWheel/ControlP5ColorWheel.pde index b802311..5889574 100644 --- a/examples/controllers/ControlP5ColorWheel/ControlP5ColorWheel.pde +++ b/examples/controllers/ControlP5ColorWheel/ControlP5ColorWheel.pde @@ -41,158 +41,158 @@ Format: ClassName : returnType methodName(parameter type) -controlP5.ColorWheel : ColorWheel scrolled(int) -controlP5.ColorWheel : ColorWheel setAlpha(int) -controlP5.ColorWheel : ColorWheel setHSL(double, double, double) -controlP5.ColorWheel : ColorWheel setRGB(int) -controlP5.ColorWheel : double[] RGBtoHSL(int) -controlP5.ColorWheel : double[] RGBtoHSL(int, int, int) -controlP5.ColorWheel : int HSLtoRGB(double, double, double) -controlP5.ColorWheel : int HSLtoRGB(double[]) -controlP5.ColorWheel : int HSVtoRGB(double, double, double) -controlP5.ColorWheel : int HSVtoRGB(double[]) -controlP5.ColorWheel : int a() -controlP5.ColorWheel : int b() -controlP5.ColorWheel : int g() -controlP5.ColorWheel : int getRGB() -controlP5.ColorWheel : int r() -controlP5.ColorWheel : void onDrag() -controlP5.ColorWheel : void onEndDrag() -controlP5.ColorWheel : void onPress() -controlP5.ColorWheel : void onRelease() -controlP5.ColorWheel : void onStartDrag() -controlP5.ColorWheel : void setHue(double) -controlP5.ColorWheel : void setLightness(double) -controlP5.ColorWheel : void setSaturation(double) -controlP5.Controller : CColor getColor() -controlP5.Controller : ColorWheel addCallback(CallbackListener) -controlP5.Controller : ColorWheel addListener(ControlListener) -controlP5.Controller : ColorWheel addListenerFor(int, CallbackListener) -controlP5.Controller : ColorWheel align(int, int, int, int) -controlP5.Controller : ColorWheel bringToFront() -controlP5.Controller : ColorWheel bringToFront(ControllerInterface) -controlP5.Controller : ColorWheel hide() -controlP5.Controller : ColorWheel linebreak() -controlP5.Controller : ColorWheel listen(boolean) -controlP5.Controller : ColorWheel lock() -controlP5.Controller : ColorWheel onChange(CallbackListener) -controlP5.Controller : ColorWheel onClick(CallbackListener) -controlP5.Controller : ColorWheel onDoublePress(CallbackListener) -controlP5.Controller : ColorWheel onDrag(CallbackListener) -controlP5.Controller : ColorWheel onDraw(ControllerView) -controlP5.Controller : ColorWheel onEndDrag(CallbackListener) -controlP5.Controller : ColorWheel onEnter(CallbackListener) -controlP5.Controller : ColorWheel onLeave(CallbackListener) -controlP5.Controller : ColorWheel onMove(CallbackListener) -controlP5.Controller : ColorWheel onPress(CallbackListener) -controlP5.Controller : ColorWheel onRelease(CallbackListener) -controlP5.Controller : ColorWheel onReleaseOutside(CallbackListener) -controlP5.Controller : ColorWheel onStartDrag(CallbackListener) -controlP5.Controller : ColorWheel onWheel(CallbackListener) -controlP5.Controller : ColorWheel plugTo(Object) -controlP5.Controller : ColorWheel plugTo(Object, String) -controlP5.Controller : ColorWheel plugTo(Object[]) -controlP5.Controller : ColorWheel plugTo(Object[], String) -controlP5.Controller : ColorWheel registerProperty(String) -controlP5.Controller : ColorWheel registerProperty(String, String) -controlP5.Controller : ColorWheel registerTooltip(String) -controlP5.Controller : ColorWheel removeBehavior() -controlP5.Controller : ColorWheel removeCallback() -controlP5.Controller : ColorWheel removeCallback(CallbackListener) -controlP5.Controller : ColorWheel removeListener(ControlListener) -controlP5.Controller : ColorWheel removeListenerFor(int, CallbackListener) -controlP5.Controller : ColorWheel removeListenersFor(int) -controlP5.Controller : ColorWheel removeProperty(String) -controlP5.Controller : ColorWheel removeProperty(String, String) -controlP5.Controller : ColorWheel setArrayValue(float[]) -controlP5.Controller : ColorWheel setArrayValue(int, float) -controlP5.Controller : ColorWheel setBehavior(ControlBehavior) -controlP5.Controller : ColorWheel setBroadcast(boolean) -controlP5.Controller : ColorWheel setCaptionLabel(String) -controlP5.Controller : ColorWheel setColor(CColor) -controlP5.Controller : ColorWheel setColorActive(int) -controlP5.Controller : ColorWheel setColorBackground(int) -controlP5.Controller : ColorWheel setColorCaptionLabel(int) -controlP5.Controller : ColorWheel setColorForeground(int) -controlP5.Controller : ColorWheel setColorLabel(int) -controlP5.Controller : ColorWheel setColorValue(int) -controlP5.Controller : ColorWheel setColorValueLabel(int) -controlP5.Controller : ColorWheel setDecimalPrecision(int) -controlP5.Controller : ColorWheel setDefaultValue(float) -controlP5.Controller : ColorWheel setHeight(int) -controlP5.Controller : ColorWheel setId(int) -controlP5.Controller : ColorWheel setImage(PImage) -controlP5.Controller : ColorWheel setImage(PImage, int) -controlP5.Controller : ColorWheel setImages(PImage, PImage, PImage) -controlP5.Controller : ColorWheel setImages(PImage, PImage, PImage, PImage) -controlP5.Controller : ColorWheel setLabel(String) -controlP5.Controller : ColorWheel setLabelVisible(boolean) -controlP5.Controller : ColorWheel setLock(boolean) -controlP5.Controller : ColorWheel setMax(float) -controlP5.Controller : ColorWheel setMin(float) -controlP5.Controller : ColorWheel setMouseOver(boolean) -controlP5.Controller : ColorWheel setMoveable(boolean) -controlP5.Controller : ColorWheel setPosition(float, float) -controlP5.Controller : ColorWheel setPosition(float[]) -controlP5.Controller : ColorWheel setSize(PImage) -controlP5.Controller : ColorWheel setSize(int, int) -controlP5.Controller : ColorWheel setStringValue(String) -controlP5.Controller : ColorWheel setUpdate(boolean) -controlP5.Controller : ColorWheel setValue(float) -controlP5.Controller : ColorWheel setValueLabel(String) -controlP5.Controller : ColorWheel setValueSelf(float) -controlP5.Controller : ColorWheel setView(ControllerView) -controlP5.Controller : ColorWheel setVisible(boolean) -controlP5.Controller : ColorWheel setWidth(int) -controlP5.Controller : ColorWheel show() -controlP5.Controller : ColorWheel unlock() -controlP5.Controller : ColorWheel unplugFrom(Object) -controlP5.Controller : ColorWheel unplugFrom(Object[]) -controlP5.Controller : ColorWheel unregisterTooltip() -controlP5.Controller : ColorWheel update() -controlP5.Controller : ColorWheel updateSize() -controlP5.Controller : ControlBehavior getBehavior() -controlP5.Controller : ControlWindow getControlWindow() -controlP5.Controller : ControlWindow getWindow() -controlP5.Controller : ControllerProperty getProperty(String) -controlP5.Controller : ControllerProperty getProperty(String, String) -controlP5.Controller : ControllerView getView() -controlP5.Controller : Label getCaptionLabel() -controlP5.Controller : Label getValueLabel() -controlP5.Controller : List getControllerPlugList() -controlP5.Controller : Pointer getPointer() -controlP5.Controller : String getAddress() -controlP5.Controller : String getInfo() -controlP5.Controller : String getName() -controlP5.Controller : String getStringValue() -controlP5.Controller : String toString() -controlP5.Controller : Tab getTab() -controlP5.Controller : boolean isActive() -controlP5.Controller : boolean isBroadcast() -controlP5.Controller : boolean isInside() -controlP5.Controller : boolean isLabelVisible() -controlP5.Controller : boolean isListening() -controlP5.Controller : boolean isLock() -controlP5.Controller : boolean isMouseOver() -controlP5.Controller : boolean isMousePressed() -controlP5.Controller : boolean isMoveable() -controlP5.Controller : boolean isUpdate() -controlP5.Controller : boolean isVisible() -controlP5.Controller : float getArrayValue(int) -controlP5.Controller : float getDefaultValue() -controlP5.Controller : float getMax() -controlP5.Controller : float getMin() -controlP5.Controller : float getValue() -controlP5.Controller : float[] getAbsolutePosition() -controlP5.Controller : float[] getArrayValue() -controlP5.Controller : float[] getPosition() -controlP5.Controller : int getDecimalPrecision() -controlP5.Controller : int getHeight() -controlP5.Controller : int getId() -controlP5.Controller : int getWidth() -controlP5.Controller : int listenerSize() -controlP5.Controller : void remove() -controlP5.Controller : void setView(ControllerView, int) +main.java.controlp5.ColorWheel : ColorWheel scrolled(int) +main.java.controlp5.ColorWheel : ColorWheel setAlpha(int) +main.java.controlp5.ColorWheel : ColorWheel setHSL(double, double, double) +main.java.controlp5.ColorWheel : ColorWheel setRGB(int) +main.java.controlp5.ColorWheel : double[] RGBtoHSL(int) +main.java.controlp5.ColorWheel : double[] RGBtoHSL(int, int, int) +main.java.controlp5.ColorWheel : int HSLtoRGB(double, double, double) +main.java.controlp5.ColorWheel : int HSLtoRGB(double[]) +main.java.controlp5.ColorWheel : int HSVtoRGB(double, double, double) +main.java.controlp5.ColorWheel : int HSVtoRGB(double[]) +main.java.controlp5.ColorWheel : int a() +main.java.controlp5.ColorWheel : int b() +main.java.controlp5.ColorWheel : int g() +main.java.controlp5.ColorWheel : int getRGB() +main.java.controlp5.ColorWheel : int r() +main.java.controlp5.ColorWheel : void onDrag() +main.java.controlp5.ColorWheel : void onEndDrag() +main.java.controlp5.ColorWheel : void onPress() +main.java.controlp5.ColorWheel : void onRelease() +main.java.controlp5.ColorWheel : void onStartDrag() +main.java.controlp5.ColorWheel : void setHue(double) +main.java.controlp5.ColorWheel : void setLightness(double) +main.java.controlp5.ColorWheel : void setSaturation(double) +main.java.controlp5.Controller : CColor getColor() +main.java.controlp5.Controller : ColorWheel addCallback(CallbackListener) +main.java.controlp5.Controller : ColorWheel addListener(ControlListener) +main.java.controlp5.Controller : ColorWheel addListenerFor(int, CallbackListener) +main.java.controlp5.Controller : ColorWheel align(int, int, int, int) +main.java.controlp5.Controller : ColorWheel bringToFront() +main.java.controlp5.Controller : ColorWheel bringToFront(ControllerInterface) +main.java.controlp5.Controller : ColorWheel hide() +main.java.controlp5.Controller : ColorWheel linebreak() +main.java.controlp5.Controller : ColorWheel listen(boolean) +main.java.controlp5.Controller : ColorWheel lock() +main.java.controlp5.Controller : ColorWheel onChange(CallbackListener) +main.java.controlp5.Controller : ColorWheel onClick(CallbackListener) +main.java.controlp5.Controller : ColorWheel onDoublePress(CallbackListener) +main.java.controlp5.Controller : ColorWheel onDrag(CallbackListener) +main.java.controlp5.Controller : ColorWheel onDraw(ControllerView) +main.java.controlp5.Controller : ColorWheel onEndDrag(CallbackListener) +main.java.controlp5.Controller : ColorWheel onEnter(CallbackListener) +main.java.controlp5.Controller : ColorWheel onLeave(CallbackListener) +main.java.controlp5.Controller : ColorWheel onMove(CallbackListener) +main.java.controlp5.Controller : ColorWheel onPress(CallbackListener) +main.java.controlp5.Controller : ColorWheel onRelease(CallbackListener) +main.java.controlp5.Controller : ColorWheel onReleaseOutside(CallbackListener) +main.java.controlp5.Controller : ColorWheel onStartDrag(CallbackListener) +main.java.controlp5.Controller : ColorWheel onWheel(CallbackListener) +main.java.controlp5.Controller : ColorWheel plugTo(Object) +main.java.controlp5.Controller : ColorWheel plugTo(Object, String) +main.java.controlp5.Controller : ColorWheel plugTo(Object[]) +main.java.controlp5.Controller : ColorWheel plugTo(Object[], String) +main.java.controlp5.Controller : ColorWheel registerProperty(String) +main.java.controlp5.Controller : ColorWheel registerProperty(String, String) +main.java.controlp5.Controller : ColorWheel registerTooltip(String) +main.java.controlp5.Controller : ColorWheel removeBehavior() +main.java.controlp5.Controller : ColorWheel removeCallback() +main.java.controlp5.Controller : ColorWheel removeCallback(CallbackListener) +main.java.controlp5.Controller : ColorWheel removeListener(ControlListener) +main.java.controlp5.Controller : ColorWheel removeListenerFor(int, CallbackListener) +main.java.controlp5.Controller : ColorWheel removeListenersFor(int) +main.java.controlp5.Controller : ColorWheel removeProperty(String) +main.java.controlp5.Controller : ColorWheel removeProperty(String, String) +main.java.controlp5.Controller : ColorWheel setArrayValue(float[]) +main.java.controlp5.Controller : ColorWheel setArrayValue(int, float) +main.java.controlp5.Controller : ColorWheel setBehavior(ControlBehavior) +main.java.controlp5.Controller : ColorWheel setBroadcast(boolean) +main.java.controlp5.Controller : ColorWheel setCaptionLabel(String) +main.java.controlp5.Controller : ColorWheel setColor(CColor) +main.java.controlp5.Controller : ColorWheel setColorActive(int) +main.java.controlp5.Controller : ColorWheel setColorBackground(int) +main.java.controlp5.Controller : ColorWheel setColorCaptionLabel(int) +main.java.controlp5.Controller : ColorWheel setColorForeground(int) +main.java.controlp5.Controller : ColorWheel setColorLabel(int) +main.java.controlp5.Controller : ColorWheel setColorValue(int) +main.java.controlp5.Controller : ColorWheel setColorValueLabel(int) +main.java.controlp5.Controller : ColorWheel setDecimalPrecision(int) +main.java.controlp5.Controller : ColorWheel setDefaultValue(float) +main.java.controlp5.Controller : ColorWheel setHeight(int) +main.java.controlp5.Controller : ColorWheel setId(int) +main.java.controlp5.Controller : ColorWheel setImage(PImage) +main.java.controlp5.Controller : ColorWheel setImage(PImage, int) +main.java.controlp5.Controller : ColorWheel setImages(PImage, PImage, PImage) +main.java.controlp5.Controller : ColorWheel setImages(PImage, PImage, PImage, PImage) +main.java.controlp5.Controller : ColorWheel setLabel(String) +main.java.controlp5.Controller : ColorWheel setLabelVisible(boolean) +main.java.controlp5.Controller : ColorWheel setLock(boolean) +main.java.controlp5.Controller : ColorWheel setMax(float) +main.java.controlp5.Controller : ColorWheel setMin(float) +main.java.controlp5.Controller : ColorWheel setMouseOver(boolean) +main.java.controlp5.Controller : ColorWheel setMoveable(boolean) +main.java.controlp5.Controller : ColorWheel setPosition(float, float) +main.java.controlp5.Controller : ColorWheel setPosition(float[]) +main.java.controlp5.Controller : ColorWheel setSize(PImage) +main.java.controlp5.Controller : ColorWheel setSize(int, int) +main.java.controlp5.Controller : ColorWheel setStringValue(String) +main.java.controlp5.Controller : ColorWheel setUpdate(boolean) +main.java.controlp5.Controller : ColorWheel setValue(float) +main.java.controlp5.Controller : ColorWheel setValueLabel(String) +main.java.controlp5.Controller : ColorWheel setValueSelf(float) +main.java.controlp5.Controller : ColorWheel setView(ControllerView) +main.java.controlp5.Controller : ColorWheel setVisible(boolean) +main.java.controlp5.Controller : ColorWheel setWidth(int) +main.java.controlp5.Controller : ColorWheel show() +main.java.controlp5.Controller : ColorWheel unlock() +main.java.controlp5.Controller : ColorWheel unplugFrom(Object) +main.java.controlp5.Controller : ColorWheel unplugFrom(Object[]) +main.java.controlp5.Controller : ColorWheel unregisterTooltip() +main.java.controlp5.Controller : ColorWheel update() +main.java.controlp5.Controller : ColorWheel updateSize() +main.java.controlp5.Controller : ControlBehavior getBehavior() +main.java.controlp5.Controller : ControlWindow getControlWindow() +main.java.controlp5.Controller : ControlWindow getWindow() +main.java.controlp5.Controller : ControllerProperty getProperty(String) +main.java.controlp5.Controller : ControllerProperty getProperty(String, String) +main.java.controlp5.Controller : ControllerView getView() +main.java.controlp5.Controller : Label getCaptionLabel() +main.java.controlp5.Controller : Label getValueLabel() +main.java.controlp5.Controller : List getControllerPlugList() +main.java.controlp5.Controller : Pointer getPointer() +main.java.controlp5.Controller : String getAddress() +main.java.controlp5.Controller : String getInfo() +main.java.controlp5.Controller : String getName() +main.java.controlp5.Controller : String getStringValue() +main.java.controlp5.Controller : String toString() +main.java.controlp5.Controller : Tab getTab() +main.java.controlp5.Controller : boolean isActive() +main.java.controlp5.Controller : boolean isBroadcast() +main.java.controlp5.Controller : boolean isInside() +main.java.controlp5.Controller : boolean isLabelVisible() +main.java.controlp5.Controller : boolean isListening() +main.java.controlp5.Controller : boolean isLock() +main.java.controlp5.Controller : boolean isMouseOver() +main.java.controlp5.Controller : boolean isMousePressed() +main.java.controlp5.Controller : boolean isMoveable() +main.java.controlp5.Controller : boolean isUpdate() +main.java.controlp5.Controller : boolean isVisible() +main.java.controlp5.Controller : float getArrayValue(int) +main.java.controlp5.Controller : float getDefaultValue() +main.java.controlp5.Controller : float getMax() +main.java.controlp5.Controller : float getMin() +main.java.controlp5.Controller : float getValue() +main.java.controlp5.Controller : float[] getAbsolutePosition() +main.java.controlp5.Controller : float[] getArrayValue() +main.java.controlp5.Controller : float[] getPosition() +main.java.controlp5.Controller : int getDecimalPrecision() +main.java.controlp5.Controller : int getHeight() +main.java.controlp5.Controller : int getId() +main.java.controlp5.Controller : int getWidth() +main.java.controlp5.Controller : int listenerSize() +main.java.controlp5.Controller : void remove() +main.java.controlp5.Controller : void setView(ControllerView, int) java.lang.Object : String toString() java.lang.Object : boolean equals(Object) diff --git a/examples/controllers/ControlP5accordion/ControlP5accordion.pde b/examples/controllers/ControlP5accordion/ControlP5accordion.pde index 81d395d..2e3d67c 100644 --- a/examples/controllers/ControlP5accordion/ControlP5accordion.pde +++ b/examples/controllers/ControlP5accordion/ControlP5accordion.pde @@ -168,114 +168,114 @@ Format: ClassName : returnType methodName(parameter type) -controlP5.Accordion : Accordion addItem(ControlGroup) -controlP5.Accordion : Accordion close() -controlP5.Accordion : Accordion open() -controlP5.Accordion : Accordion remove(ControllerInterface) -controlP5.Accordion : Accordion removeItem(ControlGroup) -controlP5.Accordion : Accordion setCollapseMode(int) -controlP5.Accordion : Accordion setItemHeight(int) -controlP5.Accordion : Accordion setMinItemHeight(int) -controlP5.Accordion : Accordion setWidth(int) -controlP5.Accordion : Accordion updateItems() -controlP5.Accordion : int getItemHeight() -controlP5.Accordion : int getMinItemHeight() -controlP5.ControlGroup : Accordion activateEvent(boolean) -controlP5.ControlGroup : Accordion addListener(ControlListener) -controlP5.ControlGroup : Accordion removeListener(ControlListener) -controlP5.ControlGroup : Accordion setBackgroundColor(int) -controlP5.ControlGroup : Accordion setBackgroundHeight(int) -controlP5.ControlGroup : Accordion setBarHeight(int) -controlP5.ControlGroup : Accordion setSize(int, int) -controlP5.ControlGroup : Accordion updateInternalEvents(PApplet) -controlP5.ControlGroup : String getInfo() -controlP5.ControlGroup : String toString() -controlP5.ControlGroup : int getBackgroundHeight() -controlP5.ControlGroup : int getBarHeight() -controlP5.ControlGroup : int listenerSize() -controlP5.ControllerGroup : Accordion add(ControllerInterface) -controlP5.ControllerGroup : Accordion addListener(ControlListener) -controlP5.ControllerGroup : Accordion bringToFront() -controlP5.ControllerGroup : Accordion bringToFront(ControllerInterface) -controlP5.ControllerGroup : Accordion close() -controlP5.ControllerGroup : Accordion disableCollapse() -controlP5.ControllerGroup : Accordion enableCollapse() -controlP5.ControllerGroup : Accordion hide() -controlP5.ControllerGroup : Accordion hideArrow() -controlP5.ControllerGroup : Accordion hideBar() -controlP5.ControllerGroup : Accordion moveTo(ControlWindow) -controlP5.ControllerGroup : Accordion moveTo(PApplet) -controlP5.ControllerGroup : Accordion open() -controlP5.ControllerGroup : Accordion registerProperty(String) -controlP5.ControllerGroup : Accordion registerProperty(String, String) -controlP5.ControllerGroup : Accordion remove(CDrawable) -controlP5.ControllerGroup : Accordion remove(ControllerInterface) -controlP5.ControllerGroup : Accordion removeCanvas(Canvas) -controlP5.ControllerGroup : Accordion removeListener(ControlListener) -controlP5.ControllerGroup : Accordion removeProperty(String) -controlP5.ControllerGroup : Accordion removeProperty(String, String) -controlP5.ControllerGroup : Accordion setAddress(String) -controlP5.ControllerGroup : Accordion setArrayValue(float[]) -controlP5.ControllerGroup : Accordion setArrayValue(int, float) -controlP5.ControllerGroup : Accordion setCaptionLabel(String) -controlP5.ControllerGroup : Accordion setColor(CColor) -controlP5.ControllerGroup : Accordion setColorActive(int) -controlP5.ControllerGroup : Accordion setColorBackground(int) -controlP5.ControllerGroup : Accordion setColorForeground(int) -controlP5.ControllerGroup : Accordion setColorLabel(int) -controlP5.ControllerGroup : Accordion setColorValue(int) -controlP5.ControllerGroup : Accordion setHeight(int) -controlP5.ControllerGroup : Accordion setId(int) -controlP5.ControllerGroup : Accordion setLabel(String) -controlP5.ControllerGroup : Accordion setMouseOver(boolean) -controlP5.ControllerGroup : Accordion setMoveable(boolean) -controlP5.ControllerGroup : Accordion setOpen(boolean) -controlP5.ControllerGroup : Accordion setPosition(float, float) -controlP5.ControllerGroup : Accordion setPosition(float[]) -controlP5.ControllerGroup : Accordion setSize(int, int) -controlP5.ControllerGroup : Accordion setStringValue(String) -controlP5.ControllerGroup : Accordion setTitle(String) -controlP5.ControllerGroup : Accordion setUpdate(boolean) -controlP5.ControllerGroup : Accordion setValue(float) -controlP5.ControllerGroup : Accordion setVisible(boolean) -controlP5.ControllerGroup : Accordion setWidth(int) -controlP5.ControllerGroup : Accordion show() -controlP5.ControllerGroup : Accordion showArrow() -controlP5.ControllerGroup : Accordion showBar() -controlP5.ControllerGroup : Accordion update() -controlP5.ControllerGroup : Accordion updateAbsolutePosition() -controlP5.ControllerGroup : CColor getColor() -controlP5.ControllerGroup : Canvas addCanvas(Canvas) -controlP5.ControllerGroup : ControlWindow getWindow() -controlP5.ControllerGroup : Controller getController(String) -controlP5.ControllerGroup : ControllerProperty getProperty(String) -controlP5.ControllerGroup : ControllerProperty getProperty(String, String) -controlP5.ControllerGroup : Label getCaptionLabel() -controlP5.ControllerGroup : Label getValueLabel() -controlP5.ControllerGroup : String getAddress() -controlP5.ControllerGroup : String getInfo() -controlP5.ControllerGroup : String getName() -controlP5.ControllerGroup : String getStringValue() -controlP5.ControllerGroup : String toString() -controlP5.ControllerGroup : Tab getTab() -controlP5.ControllerGroup : boolean isBarVisible() -controlP5.ControllerGroup : boolean isCollapse() -controlP5.ControllerGroup : boolean isMouseOver() -controlP5.ControllerGroup : boolean isMoveable() -controlP5.ControllerGroup : boolean isOpen() -controlP5.ControllerGroup : boolean isUpdate() -controlP5.ControllerGroup : boolean isVisible() -controlP5.ControllerGroup : boolean setMousePressed(boolean) -controlP5.ControllerGroup : float getArrayValue(int) -controlP5.ControllerGroup : float getValue() -controlP5.ControllerGroup : float[] getArrayValue() -controlP5.ControllerGroup : float[] getPosition() -controlP5.ControllerGroup : int getHeight() -controlP5.ControllerGroup : int getId() -controlP5.ControllerGroup : int getWidth() -controlP5.ControllerGroup : int listenerSize() -controlP5.ControllerGroup : void controlEvent(ControlEvent) -controlP5.ControllerGroup : void remove() +main.java.controlp5.Accordion : Accordion addItem(ControlGroup) +main.java.controlp5.Accordion : Accordion close() +main.java.controlp5.Accordion : Accordion open() +main.java.controlp5.Accordion : Accordion remove(ControllerInterface) +main.java.controlp5.Accordion : Accordion removeItem(ControlGroup) +main.java.controlp5.Accordion : Accordion setCollapseMode(int) +main.java.controlp5.Accordion : Accordion setItemHeight(int) +main.java.controlp5.Accordion : Accordion setMinItemHeight(int) +main.java.controlp5.Accordion : Accordion setWidth(int) +main.java.controlp5.Accordion : Accordion updateItems() +main.java.controlp5.Accordion : int getItemHeight() +main.java.controlp5.Accordion : int getMinItemHeight() +main.java.controlp5.ControlGroup : Accordion activateEvent(boolean) +main.java.controlp5.ControlGroup : Accordion addListener(ControlListener) +main.java.controlp5.ControlGroup : Accordion removeListener(ControlListener) +main.java.controlp5.ControlGroup : Accordion setBackgroundColor(int) +main.java.controlp5.ControlGroup : Accordion setBackgroundHeight(int) +main.java.controlp5.ControlGroup : Accordion setBarHeight(int) +main.java.controlp5.ControlGroup : Accordion setSize(int, int) +main.java.controlp5.ControlGroup : Accordion updateInternalEvents(PApplet) +main.java.controlp5.ControlGroup : String getInfo() +main.java.controlp5.ControlGroup : String toString() +main.java.controlp5.ControlGroup : int getBackgroundHeight() +main.java.controlp5.ControlGroup : int getBarHeight() +main.java.controlp5.ControlGroup : int listenerSize() +main.java.controlp5.ControllerGroup : Accordion add(ControllerInterface) +main.java.controlp5.ControllerGroup : Accordion addListener(ControlListener) +main.java.controlp5.ControllerGroup : Accordion bringToFront() +main.java.controlp5.ControllerGroup : Accordion bringToFront(ControllerInterface) +main.java.controlp5.ControllerGroup : Accordion close() +main.java.controlp5.ControllerGroup : Accordion disableCollapse() +main.java.controlp5.ControllerGroup : Accordion enableCollapse() +main.java.controlp5.ControllerGroup : Accordion hide() +main.java.controlp5.ControllerGroup : Accordion hideArrow() +main.java.controlp5.ControllerGroup : Accordion hideBar() +main.java.controlp5.ControllerGroup : Accordion moveTo(ControlWindow) +main.java.controlp5.ControllerGroup : Accordion moveTo(PApplet) +main.java.controlp5.ControllerGroup : Accordion open() +main.java.controlp5.ControllerGroup : Accordion registerProperty(String) +main.java.controlp5.ControllerGroup : Accordion registerProperty(String, String) +main.java.controlp5.ControllerGroup : Accordion remove(CDrawable) +main.java.controlp5.ControllerGroup : Accordion remove(ControllerInterface) +main.java.controlp5.ControllerGroup : Accordion removeCanvas(Canvas) +main.java.controlp5.ControllerGroup : Accordion removeListener(ControlListener) +main.java.controlp5.ControllerGroup : Accordion removeProperty(String) +main.java.controlp5.ControllerGroup : Accordion removeProperty(String, String) +main.java.controlp5.ControllerGroup : Accordion setAddress(String) +main.java.controlp5.ControllerGroup : Accordion setArrayValue(float[]) +main.java.controlp5.ControllerGroup : Accordion setArrayValue(int, float) +main.java.controlp5.ControllerGroup : Accordion setCaptionLabel(String) +main.java.controlp5.ControllerGroup : Accordion setColor(CColor) +main.java.controlp5.ControllerGroup : Accordion setColorActive(int) +main.java.controlp5.ControllerGroup : Accordion setColorBackground(int) +main.java.controlp5.ControllerGroup : Accordion setColorForeground(int) +main.java.controlp5.ControllerGroup : Accordion setColorLabel(int) +main.java.controlp5.ControllerGroup : Accordion setColorValue(int) +main.java.controlp5.ControllerGroup : Accordion setHeight(int) +main.java.controlp5.ControllerGroup : Accordion setId(int) +main.java.controlp5.ControllerGroup : Accordion setLabel(String) +main.java.controlp5.ControllerGroup : Accordion setMouseOver(boolean) +main.java.controlp5.ControllerGroup : Accordion setMoveable(boolean) +main.java.controlp5.ControllerGroup : Accordion setOpen(boolean) +main.java.controlp5.ControllerGroup : Accordion setPosition(float, float) +main.java.controlp5.ControllerGroup : Accordion setPosition(float[]) +main.java.controlp5.ControllerGroup : Accordion setSize(int, int) +main.java.controlp5.ControllerGroup : Accordion setStringValue(String) +main.java.controlp5.ControllerGroup : Accordion setTitle(String) +main.java.controlp5.ControllerGroup : Accordion setUpdate(boolean) +main.java.controlp5.ControllerGroup : Accordion setValue(float) +main.java.controlp5.ControllerGroup : Accordion setVisible(boolean) +main.java.controlp5.ControllerGroup : Accordion setWidth(int) +main.java.controlp5.ControllerGroup : Accordion show() +main.java.controlp5.ControllerGroup : Accordion showArrow() +main.java.controlp5.ControllerGroup : Accordion showBar() +main.java.controlp5.ControllerGroup : Accordion update() +main.java.controlp5.ControllerGroup : Accordion updateAbsolutePosition() +main.java.controlp5.ControllerGroup : CColor getColor() +main.java.controlp5.ControllerGroup : Canvas addCanvas(Canvas) +main.java.controlp5.ControllerGroup : ControlWindow getWindow() +main.java.controlp5.ControllerGroup : Controller getController(String) +main.java.controlp5.ControllerGroup : ControllerProperty getProperty(String) +main.java.controlp5.ControllerGroup : ControllerProperty getProperty(String, String) +main.java.controlp5.ControllerGroup : Label getCaptionLabel() +main.java.controlp5.ControllerGroup : Label getValueLabel() +main.java.controlp5.ControllerGroup : String getAddress() +main.java.controlp5.ControllerGroup : String getInfo() +main.java.controlp5.ControllerGroup : String getName() +main.java.controlp5.ControllerGroup : String getStringValue() +main.java.controlp5.ControllerGroup : String toString() +main.java.controlp5.ControllerGroup : Tab getTab() +main.java.controlp5.ControllerGroup : boolean isBarVisible() +main.java.controlp5.ControllerGroup : boolean isCollapse() +main.java.controlp5.ControllerGroup : boolean isMouseOver() +main.java.controlp5.ControllerGroup : boolean isMoveable() +main.java.controlp5.ControllerGroup : boolean isOpen() +main.java.controlp5.ControllerGroup : boolean isUpdate() +main.java.controlp5.ControllerGroup : boolean isVisible() +main.java.controlp5.ControllerGroup : boolean setMousePressed(boolean) +main.java.controlp5.ControllerGroup : float getArrayValue(int) +main.java.controlp5.ControllerGroup : float getValue() +main.java.controlp5.ControllerGroup : float[] getArrayValue() +main.java.controlp5.ControllerGroup : float[] getPosition() +main.java.controlp5.ControllerGroup : int getHeight() +main.java.controlp5.ControllerGroup : int getId() +main.java.controlp5.ControllerGroup : int getWidth() +main.java.controlp5.ControllerGroup : int listenerSize() +main.java.controlp5.ControllerGroup : void controlEvent(ControlEvent) +main.java.controlp5.ControllerGroup : void remove() java.lang.Object : String toString() java.lang.Object : boolean equals(Object) diff --git a/examples/controllers/ControlP5background/ControlP5background.pde b/examples/controllers/ControlP5background/ControlP5background.pde index 11a974c..18428ee 100644 --- a/examples/controllers/ControlP5background/ControlP5background.pde +++ b/examples/controllers/ControlP5background/ControlP5background.pde @@ -82,102 +82,102 @@ Format: ClassName : returnType methodName(parameter type) -controlP5.ControlGroup : Background activateEvent(boolean) -controlP5.ControlGroup : Background addListener(ControlListener) -controlP5.ControlGroup : Background removeListener(ControlListener) -controlP5.ControlGroup : Background setBackgroundColor(int) -controlP5.ControlGroup : Background setBackgroundHeight(int) -controlP5.ControlGroup : Background setBarHeight(int) -controlP5.ControlGroup : Background setSize(int, int) -controlP5.ControlGroup : Background updateInternalEvents(PApplet) -controlP5.ControlGroup : String getInfo() -controlP5.ControlGroup : String toString() -controlP5.ControlGroup : int getBackgroundHeight() -controlP5.ControlGroup : int getBarHeight() -controlP5.ControlGroup : int listenerSize() -controlP5.ControllerGroup : Background add(ControllerInterface) -controlP5.ControllerGroup : Background addListener(ControlListener) -controlP5.ControllerGroup : Background bringToFront() -controlP5.ControllerGroup : Background bringToFront(ControllerInterface) -controlP5.ControllerGroup : Background close() -controlP5.ControllerGroup : Background disableCollapse() -controlP5.ControllerGroup : Background enableCollapse() -controlP5.ControllerGroup : Background hide() -controlP5.ControllerGroup : Background hideArrow() -controlP5.ControllerGroup : Background hideBar() -controlP5.ControllerGroup : Background moveTo(ControlWindow) -controlP5.ControllerGroup : Background moveTo(PApplet) -controlP5.ControllerGroup : Background open() -controlP5.ControllerGroup : Background registerProperty(String) -controlP5.ControllerGroup : Background registerProperty(String, String) -controlP5.ControllerGroup : Background remove(CDrawable) -controlP5.ControllerGroup : Background remove(ControllerInterface) -controlP5.ControllerGroup : Background removeCanvas(Canvas) -controlP5.ControllerGroup : Background removeListener(ControlListener) -controlP5.ControllerGroup : Background removeProperty(String) -controlP5.ControllerGroup : Background removeProperty(String, String) -controlP5.ControllerGroup : Background setAddress(String) -controlP5.ControllerGroup : Background setArrayValue(float[]) -controlP5.ControllerGroup : Background setArrayValue(int, float) -controlP5.ControllerGroup : Background setCaptionLabel(String) -controlP5.ControllerGroup : Background setColor(CColor) -controlP5.ControllerGroup : Background setColorActive(int) -controlP5.ControllerGroup : Background setColorBackground(int) -controlP5.ControllerGroup : Background setColorForeground(int) -controlP5.ControllerGroup : Background setColorLabel(int) -controlP5.ControllerGroup : Background setColorValue(int) -controlP5.ControllerGroup : Background setHeight(int) -controlP5.ControllerGroup : Background setId(int) -controlP5.ControllerGroup : Background setLabel(String) -controlP5.ControllerGroup : Background setMouseOver(boolean) -controlP5.ControllerGroup : Background setMoveable(boolean) -controlP5.ControllerGroup : Background setOpen(boolean) -controlP5.ControllerGroup : Background setPosition(float, float) -controlP5.ControllerGroup : Background setPosition(float[]) -controlP5.ControllerGroup : Background setSize(int, int) -controlP5.ControllerGroup : Background setStringValue(String) -controlP5.ControllerGroup : Background setTitle(String) -controlP5.ControllerGroup : Background setUpdate(boolean) -controlP5.ControllerGroup : Background setValue(float) -controlP5.ControllerGroup : Background setVisible(boolean) -controlP5.ControllerGroup : Background setWidth(int) -controlP5.ControllerGroup : Background show() -controlP5.ControllerGroup : Background showArrow() -controlP5.ControllerGroup : Background showBar() -controlP5.ControllerGroup : Background update() -controlP5.ControllerGroup : Background updateAbsolutePosition() -controlP5.ControllerGroup : CColor getColor() -controlP5.ControllerGroup : Canvas addCanvas(Canvas) -controlP5.ControllerGroup : ControlWindow getWindow() -controlP5.ControllerGroup : Controller getController(String) -controlP5.ControllerGroup : ControllerProperty getProperty(String) -controlP5.ControllerGroup : ControllerProperty getProperty(String, String) -controlP5.ControllerGroup : Label getCaptionLabel() -controlP5.ControllerGroup : Label getValueLabel() -controlP5.ControllerGroup : String getAddress() -controlP5.ControllerGroup : String getInfo() -controlP5.ControllerGroup : String getName() -controlP5.ControllerGroup : String getStringValue() -controlP5.ControllerGroup : String toString() -controlP5.ControllerGroup : Tab getTab() -controlP5.ControllerGroup : boolean isBarVisible() -controlP5.ControllerGroup : boolean isCollapse() -controlP5.ControllerGroup : boolean isMouseOver() -controlP5.ControllerGroup : boolean isMoveable() -controlP5.ControllerGroup : boolean isOpen() -controlP5.ControllerGroup : boolean isUpdate() -controlP5.ControllerGroup : boolean isVisible() -controlP5.ControllerGroup : boolean setMousePressed(boolean) -controlP5.ControllerGroup : float getArrayValue(int) -controlP5.ControllerGroup : float getValue() -controlP5.ControllerGroup : float[] getArrayValue() -controlP5.ControllerGroup : float[] getPosition() -controlP5.ControllerGroup : int getHeight() -controlP5.ControllerGroup : int getId() -controlP5.ControllerGroup : int getWidth() -controlP5.ControllerGroup : int listenerSize() -controlP5.ControllerGroup : void controlEvent(ControlEvent) -controlP5.ControllerGroup : void remove() +main.java.controlp5.ControlGroup : Background activateEvent(boolean) +main.java.controlp5.ControlGroup : Background addListener(ControlListener) +main.java.controlp5.ControlGroup : Background removeListener(ControlListener) +main.java.controlp5.ControlGroup : Background setBackgroundColor(int) +main.java.controlp5.ControlGroup : Background setBackgroundHeight(int) +main.java.controlp5.ControlGroup : Background setBarHeight(int) +main.java.controlp5.ControlGroup : Background setSize(int, int) +main.java.controlp5.ControlGroup : Background updateInternalEvents(PApplet) +main.java.controlp5.ControlGroup : String getInfo() +main.java.controlp5.ControlGroup : String toString() +main.java.controlp5.ControlGroup : int getBackgroundHeight() +main.java.controlp5.ControlGroup : int getBarHeight() +main.java.controlp5.ControlGroup : int listenerSize() +main.java.controlp5.ControllerGroup : Background add(ControllerInterface) +main.java.controlp5.ControllerGroup : Background addListener(ControlListener) +main.java.controlp5.ControllerGroup : Background bringToFront() +main.java.controlp5.ControllerGroup : Background bringToFront(ControllerInterface) +main.java.controlp5.ControllerGroup : Background close() +main.java.controlp5.ControllerGroup : Background disableCollapse() +main.java.controlp5.ControllerGroup : Background enableCollapse() +main.java.controlp5.ControllerGroup : Background hide() +main.java.controlp5.ControllerGroup : Background hideArrow() +main.java.controlp5.ControllerGroup : Background hideBar() +main.java.controlp5.ControllerGroup : Background moveTo(ControlWindow) +main.java.controlp5.ControllerGroup : Background moveTo(PApplet) +main.java.controlp5.ControllerGroup : Background open() +main.java.controlp5.ControllerGroup : Background registerProperty(String) +main.java.controlp5.ControllerGroup : Background registerProperty(String, String) +main.java.controlp5.ControllerGroup : Background remove(CDrawable) +main.java.controlp5.ControllerGroup : Background remove(ControllerInterface) +main.java.controlp5.ControllerGroup : Background removeCanvas(Canvas) +main.java.controlp5.ControllerGroup : Background removeListener(ControlListener) +main.java.controlp5.ControllerGroup : Background removeProperty(String) +main.java.controlp5.ControllerGroup : Background removeProperty(String, String) +main.java.controlp5.ControllerGroup : Background setAddress(String) +main.java.controlp5.ControllerGroup : Background setArrayValue(float[]) +main.java.controlp5.ControllerGroup : Background setArrayValue(int, float) +main.java.controlp5.ControllerGroup : Background setCaptionLabel(String) +main.java.controlp5.ControllerGroup : Background setColor(CColor) +main.java.controlp5.ControllerGroup : Background setColorActive(int) +main.java.controlp5.ControllerGroup : Background setColorBackground(int) +main.java.controlp5.ControllerGroup : Background setColorForeground(int) +main.java.controlp5.ControllerGroup : Background setColorLabel(int) +main.java.controlp5.ControllerGroup : Background setColorValue(int) +main.java.controlp5.ControllerGroup : Background setHeight(int) +main.java.controlp5.ControllerGroup : Background setId(int) +main.java.controlp5.ControllerGroup : Background setLabel(String) +main.java.controlp5.ControllerGroup : Background setMouseOver(boolean) +main.java.controlp5.ControllerGroup : Background setMoveable(boolean) +main.java.controlp5.ControllerGroup : Background setOpen(boolean) +main.java.controlp5.ControllerGroup : Background setPosition(float, float) +main.java.controlp5.ControllerGroup : Background setPosition(float[]) +main.java.controlp5.ControllerGroup : Background setSize(int, int) +main.java.controlp5.ControllerGroup : Background setStringValue(String) +main.java.controlp5.ControllerGroup : Background setTitle(String) +main.java.controlp5.ControllerGroup : Background setUpdate(boolean) +main.java.controlp5.ControllerGroup : Background setValue(float) +main.java.controlp5.ControllerGroup : Background setVisible(boolean) +main.java.controlp5.ControllerGroup : Background setWidth(int) +main.java.controlp5.ControllerGroup : Background show() +main.java.controlp5.ControllerGroup : Background showArrow() +main.java.controlp5.ControllerGroup : Background showBar() +main.java.controlp5.ControllerGroup : Background update() +main.java.controlp5.ControllerGroup : Background updateAbsolutePosition() +main.java.controlp5.ControllerGroup : CColor getColor() +main.java.controlp5.ControllerGroup : Canvas addCanvas(Canvas) +main.java.controlp5.ControllerGroup : ControlWindow getWindow() +main.java.controlp5.ControllerGroup : Controller getController(String) +main.java.controlp5.ControllerGroup : ControllerProperty getProperty(String) +main.java.controlp5.ControllerGroup : ControllerProperty getProperty(String, String) +main.java.controlp5.ControllerGroup : Label getCaptionLabel() +main.java.controlp5.ControllerGroup : Label getValueLabel() +main.java.controlp5.ControllerGroup : String getAddress() +main.java.controlp5.ControllerGroup : String getInfo() +main.java.controlp5.ControllerGroup : String getName() +main.java.controlp5.ControllerGroup : String getStringValue() +main.java.controlp5.ControllerGroup : String toString() +main.java.controlp5.ControllerGroup : Tab getTab() +main.java.controlp5.ControllerGroup : boolean isBarVisible() +main.java.controlp5.ControllerGroup : boolean isCollapse() +main.java.controlp5.ControllerGroup : boolean isMouseOver() +main.java.controlp5.ControllerGroup : boolean isMoveable() +main.java.controlp5.ControllerGroup : boolean isOpen() +main.java.controlp5.ControllerGroup : boolean isUpdate() +main.java.controlp5.ControllerGroup : boolean isVisible() +main.java.controlp5.ControllerGroup : boolean setMousePressed(boolean) +main.java.controlp5.ControllerGroup : float getArrayValue(int) +main.java.controlp5.ControllerGroup : float getValue() +main.java.controlp5.ControllerGroup : float[] getArrayValue() +main.java.controlp5.ControllerGroup : float[] getPosition() +main.java.controlp5.ControllerGroup : int getHeight() +main.java.controlp5.ControllerGroup : int getId() +main.java.controlp5.ControllerGroup : int getWidth() +main.java.controlp5.ControllerGroup : int listenerSize() +main.java.controlp5.ControllerGroup : void controlEvent(ControlEvent) +main.java.controlp5.ControllerGroup : void remove() java.lang.Object : String toString() java.lang.Object : boolean equals(Object) diff --git a/examples/controllers/ControlP5bang/ControlP5bang.pde b/examples/controllers/ControlP5bang/ControlP5bang.pde index c84e786..0eea9eb 100644 --- a/examples/controllers/ControlP5bang/ControlP5bang.pde +++ b/examples/controllers/ControlP5bang/ControlP5bang.pde @@ -86,141 +86,141 @@ Format: ClassName : returnType methodName(parameter type) -controlP5.Bang : Bang setTriggerEvent(int) -controlP5.Bang : Bang setValue(float) -controlP5.Bang : Bang update() -controlP5.Bang : String getInfo() -controlP5.Bang : String toString() -controlP5.Bang : int getTriggerEvent() -controlP5.Controller : Bang addCallback(CallbackListener) -controlP5.Controller : Bang addListener(ControlListener) -controlP5.Controller : Bang addListenerFor(int, CallbackListener) -controlP5.Controller : Bang align(int, int, int, int) -controlP5.Controller : Bang bringToFront() -controlP5.Controller : Bang bringToFront(ControllerInterface) -controlP5.Controller : Bang hide() -controlP5.Controller : Bang linebreak() -controlP5.Controller : Bang listen(boolean) -controlP5.Controller : Bang lock() -controlP5.Controller : Bang onChange(CallbackListener) -controlP5.Controller : Bang onClick(CallbackListener) -controlP5.Controller : Bang onDoublePress(CallbackListener) -controlP5.Controller : Bang onDrag(CallbackListener) -controlP5.Controller : Bang onDraw(ControllerView) -controlP5.Controller : Bang onEndDrag(CallbackListener) -controlP5.Controller : Bang onEnter(CallbackListener) -controlP5.Controller : Bang onLeave(CallbackListener) -controlP5.Controller : Bang onMove(CallbackListener) -controlP5.Controller : Bang onPress(CallbackListener) -controlP5.Controller : Bang onRelease(CallbackListener) -controlP5.Controller : Bang onReleaseOutside(CallbackListener) -controlP5.Controller : Bang onStartDrag(CallbackListener) -controlP5.Controller : Bang onWheel(CallbackListener) -controlP5.Controller : Bang plugTo(Object) -controlP5.Controller : Bang plugTo(Object, String) -controlP5.Controller : Bang plugTo(Object[]) -controlP5.Controller : Bang plugTo(Object[], String) -controlP5.Controller : Bang registerProperty(String) -controlP5.Controller : Bang registerProperty(String, String) -controlP5.Controller : Bang registerTooltip(String) -controlP5.Controller : Bang removeBehavior() -controlP5.Controller : Bang removeCallback() -controlP5.Controller : Bang removeCallback(CallbackListener) -controlP5.Controller : Bang removeListener(ControlListener) -controlP5.Controller : Bang removeListenerFor(int, CallbackListener) -controlP5.Controller : Bang removeListenersFor(int) -controlP5.Controller : Bang removeProperty(String) -controlP5.Controller : Bang removeProperty(String, String) -controlP5.Controller : Bang setArrayValue(float[]) -controlP5.Controller : Bang setArrayValue(int, float) -controlP5.Controller : Bang setBehavior(ControlBehavior) -controlP5.Controller : Bang setBroadcast(boolean) -controlP5.Controller : Bang setCaptionLabel(String) -controlP5.Controller : Bang setColor(CColor) -controlP5.Controller : Bang setColorActive(int) -controlP5.Controller : Bang setColorBackground(int) -controlP5.Controller : Bang setColorCaptionLabel(int) -controlP5.Controller : Bang setColorForeground(int) -controlP5.Controller : Bang setColorLabel(int) -controlP5.Controller : Bang setColorValue(int) -controlP5.Controller : Bang setColorValueLabel(int) -controlP5.Controller : Bang setDecimalPrecision(int) -controlP5.Controller : Bang setDefaultValue(float) -controlP5.Controller : Bang setHeight(int) -controlP5.Controller : Bang setId(int) -controlP5.Controller : Bang setImage(PImage) -controlP5.Controller : Bang setImage(PImage, int) -controlP5.Controller : Bang setImages(PImage, PImage, PImage) -controlP5.Controller : Bang setImages(PImage, PImage, PImage, PImage) -controlP5.Controller : Bang setLabel(String) -controlP5.Controller : Bang setLabelVisible(boolean) -controlP5.Controller : Bang setLock(boolean) -controlP5.Controller : Bang setMax(float) -controlP5.Controller : Bang setMin(float) -controlP5.Controller : Bang setMouseOver(boolean) -controlP5.Controller : Bang setMoveable(boolean) -controlP5.Controller : Bang setPosition(float, float) -controlP5.Controller : Bang setPosition(float[]) -controlP5.Controller : Bang setSize(PImage) -controlP5.Controller : Bang setSize(int, int) -controlP5.Controller : Bang setStringValue(String) -controlP5.Controller : Bang setUpdate(boolean) -controlP5.Controller : Bang setValue(float) -controlP5.Controller : Bang setValueLabel(String) -controlP5.Controller : Bang setValueSelf(float) -controlP5.Controller : Bang setView(ControllerView) -controlP5.Controller : Bang setVisible(boolean) -controlP5.Controller : Bang setWidth(int) -controlP5.Controller : Bang show() -controlP5.Controller : Bang unlock() -controlP5.Controller : Bang unplugFrom(Object) -controlP5.Controller : Bang unplugFrom(Object[]) -controlP5.Controller : Bang unregisterTooltip() -controlP5.Controller : Bang update() -controlP5.Controller : Bang updateSize() -controlP5.Controller : CColor getColor() -controlP5.Controller : ControlBehavior getBehavior() -controlP5.Controller : ControlWindow getControlWindow() -controlP5.Controller : ControlWindow getWindow() -controlP5.Controller : ControllerProperty getProperty(String) -controlP5.Controller : ControllerProperty getProperty(String, String) -controlP5.Controller : ControllerView getView() -controlP5.Controller : Label getCaptionLabel() -controlP5.Controller : Label getValueLabel() -controlP5.Controller : List getControllerPlugList() -controlP5.Controller : Pointer getPointer() -controlP5.Controller : String getAddress() -controlP5.Controller : String getInfo() -controlP5.Controller : String getName() -controlP5.Controller : String getStringValue() -controlP5.Controller : String toString() -controlP5.Controller : Tab getTab() -controlP5.Controller : boolean isActive() -controlP5.Controller : boolean isBroadcast() -controlP5.Controller : boolean isInside() -controlP5.Controller : boolean isLabelVisible() -controlP5.Controller : boolean isListening() -controlP5.Controller : boolean isLock() -controlP5.Controller : boolean isMouseOver() -controlP5.Controller : boolean isMousePressed() -controlP5.Controller : boolean isMoveable() -controlP5.Controller : boolean isUpdate() -controlP5.Controller : boolean isVisible() -controlP5.Controller : float getArrayValue(int) -controlP5.Controller : float getDefaultValue() -controlP5.Controller : float getMax() -controlP5.Controller : float getMin() -controlP5.Controller : float getValue() -controlP5.Controller : float[] getAbsolutePosition() -controlP5.Controller : float[] getArrayValue() -controlP5.Controller : float[] getPosition() -controlP5.Controller : int getDecimalPrecision() -controlP5.Controller : int getHeight() -controlP5.Controller : int getId() -controlP5.Controller : int getWidth() -controlP5.Controller : int listenerSize() -controlP5.Controller : void remove() -controlP5.Controller : void setView(ControllerView, int) +main.java.controlp5.Bang : Bang setTriggerEvent(int) +main.java.controlp5.Bang : Bang setValue(float) +main.java.controlp5.Bang : Bang update() +main.java.controlp5.Bang : String getInfo() +main.java.controlp5.Bang : String toString() +main.java.controlp5.Bang : int getTriggerEvent() +main.java.controlp5.Controller : Bang addCallback(CallbackListener) +main.java.controlp5.Controller : Bang addListener(ControlListener) +main.java.controlp5.Controller : Bang addListenerFor(int, CallbackListener) +main.java.controlp5.Controller : Bang align(int, int, int, int) +main.java.controlp5.Controller : Bang bringToFront() +main.java.controlp5.Controller : Bang bringToFront(ControllerInterface) +main.java.controlp5.Controller : Bang hide() +main.java.controlp5.Controller : Bang linebreak() +main.java.controlp5.Controller : Bang listen(boolean) +main.java.controlp5.Controller : Bang lock() +main.java.controlp5.Controller : Bang onChange(CallbackListener) +main.java.controlp5.Controller : Bang onClick(CallbackListener) +main.java.controlp5.Controller : Bang onDoublePress(CallbackListener) +main.java.controlp5.Controller : Bang onDrag(CallbackListener) +main.java.controlp5.Controller : Bang onDraw(ControllerView) +main.java.controlp5.Controller : Bang onEndDrag(CallbackListener) +main.java.controlp5.Controller : Bang onEnter(CallbackListener) +main.java.controlp5.Controller : Bang onLeave(CallbackListener) +main.java.controlp5.Controller : Bang onMove(CallbackListener) +main.java.controlp5.Controller : Bang onPress(CallbackListener) +main.java.controlp5.Controller : Bang onRelease(CallbackListener) +main.java.controlp5.Controller : Bang onReleaseOutside(CallbackListener) +main.java.controlp5.Controller : Bang onStartDrag(CallbackListener) +main.java.controlp5.Controller : Bang onWheel(CallbackListener) +main.java.controlp5.Controller : Bang plugTo(Object) +main.java.controlp5.Controller : Bang plugTo(Object, String) +main.java.controlp5.Controller : Bang plugTo(Object[]) +main.java.controlp5.Controller : Bang plugTo(Object[], String) +main.java.controlp5.Controller : Bang registerProperty(String) +main.java.controlp5.Controller : Bang registerProperty(String, String) +main.java.controlp5.Controller : Bang registerTooltip(String) +main.java.controlp5.Controller : Bang removeBehavior() +main.java.controlp5.Controller : Bang removeCallback() +main.java.controlp5.Controller : Bang removeCallback(CallbackListener) +main.java.controlp5.Controller : Bang removeListener(ControlListener) +main.java.controlp5.Controller : Bang removeListenerFor(int, CallbackListener) +main.java.controlp5.Controller : Bang removeListenersFor(int) +main.java.controlp5.Controller : Bang removeProperty(String) +main.java.controlp5.Controller : Bang removeProperty(String, String) +main.java.controlp5.Controller : Bang setArrayValue(float[]) +main.java.controlp5.Controller : Bang setArrayValue(int, float) +main.java.controlp5.Controller : Bang setBehavior(ControlBehavior) +main.java.controlp5.Controller : Bang setBroadcast(boolean) +main.java.controlp5.Controller : Bang setCaptionLabel(String) +main.java.controlp5.Controller : Bang setColor(CColor) +main.java.controlp5.Controller : Bang setColorActive(int) +main.java.controlp5.Controller : Bang setColorBackground(int) +main.java.controlp5.Controller : Bang setColorCaptionLabel(int) +main.java.controlp5.Controller : Bang setColorForeground(int) +main.java.controlp5.Controller : Bang setColorLabel(int) +main.java.controlp5.Controller : Bang setColorValue(int) +main.java.controlp5.Controller : Bang setColorValueLabel(int) +main.java.controlp5.Controller : Bang setDecimalPrecision(int) +main.java.controlp5.Controller : Bang setDefaultValue(float) +main.java.controlp5.Controller : Bang setHeight(int) +main.java.controlp5.Controller : Bang setId(int) +main.java.controlp5.Controller : Bang setImage(PImage) +main.java.controlp5.Controller : Bang setImage(PImage, int) +main.java.controlp5.Controller : Bang setImages(PImage, PImage, PImage) +main.java.controlp5.Controller : Bang setImages(PImage, PImage, PImage, PImage) +main.java.controlp5.Controller : Bang setLabel(String) +main.java.controlp5.Controller : Bang setLabelVisible(boolean) +main.java.controlp5.Controller : Bang setLock(boolean) +main.java.controlp5.Controller : Bang setMax(float) +main.java.controlp5.Controller : Bang setMin(float) +main.java.controlp5.Controller : Bang setMouseOver(boolean) +main.java.controlp5.Controller : Bang setMoveable(boolean) +main.java.controlp5.Controller : Bang setPosition(float, float) +main.java.controlp5.Controller : Bang setPosition(float[]) +main.java.controlp5.Controller : Bang setSize(PImage) +main.java.controlp5.Controller : Bang setSize(int, int) +main.java.controlp5.Controller : Bang setStringValue(String) +main.java.controlp5.Controller : Bang setUpdate(boolean) +main.java.controlp5.Controller : Bang setValue(float) +main.java.controlp5.Controller : Bang setValueLabel(String) +main.java.controlp5.Controller : Bang setValueSelf(float) +main.java.controlp5.Controller : Bang setView(ControllerView) +main.java.controlp5.Controller : Bang setVisible(boolean) +main.java.controlp5.Controller : Bang setWidth(int) +main.java.controlp5.Controller : Bang show() +main.java.controlp5.Controller : Bang unlock() +main.java.controlp5.Controller : Bang unplugFrom(Object) +main.java.controlp5.Controller : Bang unplugFrom(Object[]) +main.java.controlp5.Controller : Bang unregisterTooltip() +main.java.controlp5.Controller : Bang update() +main.java.controlp5.Controller : Bang updateSize() +main.java.controlp5.Controller : CColor getColor() +main.java.controlp5.Controller : ControlBehavior getBehavior() +main.java.controlp5.Controller : ControlWindow getControlWindow() +main.java.controlp5.Controller : ControlWindow getWindow() +main.java.controlp5.Controller : ControllerProperty getProperty(String) +main.java.controlp5.Controller : ControllerProperty getProperty(String, String) +main.java.controlp5.Controller : ControllerView getView() +main.java.controlp5.Controller : Label getCaptionLabel() +main.java.controlp5.Controller : Label getValueLabel() +main.java.controlp5.Controller : List getControllerPlugList() +main.java.controlp5.Controller : Pointer getPointer() +main.java.controlp5.Controller : String getAddress() +main.java.controlp5.Controller : String getInfo() +main.java.controlp5.Controller : String getName() +main.java.controlp5.Controller : String getStringValue() +main.java.controlp5.Controller : String toString() +main.java.controlp5.Controller : Tab getTab() +main.java.controlp5.Controller : boolean isActive() +main.java.controlp5.Controller : boolean isBroadcast() +main.java.controlp5.Controller : boolean isInside() +main.java.controlp5.Controller : boolean isLabelVisible() +main.java.controlp5.Controller : boolean isListening() +main.java.controlp5.Controller : boolean isLock() +main.java.controlp5.Controller : boolean isMouseOver() +main.java.controlp5.Controller : boolean isMousePressed() +main.java.controlp5.Controller : boolean isMoveable() +main.java.controlp5.Controller : boolean isUpdate() +main.java.controlp5.Controller : boolean isVisible() +main.java.controlp5.Controller : float getArrayValue(int) +main.java.controlp5.Controller : float getDefaultValue() +main.java.controlp5.Controller : float getMax() +main.java.controlp5.Controller : float getMin() +main.java.controlp5.Controller : float getValue() +main.java.controlp5.Controller : float[] getAbsolutePosition() +main.java.controlp5.Controller : float[] getArrayValue() +main.java.controlp5.Controller : float[] getPosition() +main.java.controlp5.Controller : int getDecimalPrecision() +main.java.controlp5.Controller : int getHeight() +main.java.controlp5.Controller : int getId() +main.java.controlp5.Controller : int getWidth() +main.java.controlp5.Controller : int listenerSize() +main.java.controlp5.Controller : void remove() +main.java.controlp5.Controller : void setView(ControllerView, int) java.lang.Object : String toString() java.lang.Object : boolean equals(Object) diff --git a/examples/controllers/ControlP5button/ControlP5button.pde b/examples/controllers/ControlP5button/ControlP5button.pde index 08f1d3f..7116978 100644 --- a/examples/controllers/ControlP5button/ControlP5button.pde +++ b/examples/controllers/ControlP5button/ControlP5button.pde @@ -116,147 +116,147 @@ Format: ClassName : returnType methodName(parameter type) -controlP5.Button : Button activateBy(int) -controlP5.Button : Button setOff() -controlP5.Button : Button setOn() -controlP5.Button : Button setSwitch(boolean) -controlP5.Button : Button setValue(float) -controlP5.Button : Button update() -controlP5.Button : String getInfo() -controlP5.Button : String toString() -controlP5.Button : boolean getBooleanValue() -controlP5.Button : boolean isOn() -controlP5.Button : boolean isPressed() -controlP5.Button : boolean isSwitch() -controlP5.Controller : Button addCallback(CallbackListener) -controlP5.Controller : Button addListener(ControlListener) -controlP5.Controller : Button addListenerFor(int, CallbackListener) -controlP5.Controller : Button align(int, int, int, int) -controlP5.Controller : Button bringToFront() -controlP5.Controller : Button bringToFront(ControllerInterface) -controlP5.Controller : Button hide() -controlP5.Controller : Button linebreak() -controlP5.Controller : Button listen(boolean) -controlP5.Controller : Button lock() -controlP5.Controller : Button onChange(CallbackListener) -controlP5.Controller : Button onClick(CallbackListener) -controlP5.Controller : Button onDoublePress(CallbackListener) -controlP5.Controller : Button onDrag(CallbackListener) -controlP5.Controller : Button onDraw(ControllerView) -controlP5.Controller : Button onEndDrag(CallbackListener) -controlP5.Controller : Button onEnter(CallbackListener) -controlP5.Controller : Button onLeave(CallbackListener) -controlP5.Controller : Button onMove(CallbackListener) -controlP5.Controller : Button onPress(CallbackListener) -controlP5.Controller : Button onRelease(CallbackListener) -controlP5.Controller : Button onReleaseOutside(CallbackListener) -controlP5.Controller : Button onStartDrag(CallbackListener) -controlP5.Controller : Button onWheel(CallbackListener) -controlP5.Controller : Button plugTo(Object) -controlP5.Controller : Button plugTo(Object, String) -controlP5.Controller : Button plugTo(Object[]) -controlP5.Controller : Button plugTo(Object[], String) -controlP5.Controller : Button registerProperty(String) -controlP5.Controller : Button registerProperty(String, String) -controlP5.Controller : Button registerTooltip(String) -controlP5.Controller : Button removeBehavior() -controlP5.Controller : Button removeCallback() -controlP5.Controller : Button removeCallback(CallbackListener) -controlP5.Controller : Button removeListener(ControlListener) -controlP5.Controller : Button removeListenerFor(int, CallbackListener) -controlP5.Controller : Button removeListenersFor(int) -controlP5.Controller : Button removeProperty(String) -controlP5.Controller : Button removeProperty(String, String) -controlP5.Controller : Button setArrayValue(float[]) -controlP5.Controller : Button setArrayValue(int, float) -controlP5.Controller : Button setBehavior(ControlBehavior) -controlP5.Controller : Button setBroadcast(boolean) -controlP5.Controller : Button setCaptionLabel(String) -controlP5.Controller : Button setColor(CColor) -controlP5.Controller : Button setColorActive(int) -controlP5.Controller : Button setColorBackground(int) -controlP5.Controller : Button setColorCaptionLabel(int) -controlP5.Controller : Button setColorForeground(int) -controlP5.Controller : Button setColorLabel(int) -controlP5.Controller : Button setColorValue(int) -controlP5.Controller : Button setColorValueLabel(int) -controlP5.Controller : Button setDecimalPrecision(int) -controlP5.Controller : Button setDefaultValue(float) -controlP5.Controller : Button setHeight(int) -controlP5.Controller : Button setId(int) -controlP5.Controller : Button setImage(PImage) -controlP5.Controller : Button setImage(PImage, int) -controlP5.Controller : Button setImages(PImage, PImage, PImage) -controlP5.Controller : Button setImages(PImage, PImage, PImage, PImage) -controlP5.Controller : Button setLabel(String) -controlP5.Controller : Button setLabelVisible(boolean) -controlP5.Controller : Button setLock(boolean) -controlP5.Controller : Button setMax(float) -controlP5.Controller : Button setMin(float) -controlP5.Controller : Button setMouseOver(boolean) -controlP5.Controller : Button setMoveable(boolean) -controlP5.Controller : Button setPosition(float, float) -controlP5.Controller : Button setPosition(float[]) -controlP5.Controller : Button setSize(PImage) -controlP5.Controller : Button setSize(int, int) -controlP5.Controller : Button setStringValue(String) -controlP5.Controller : Button setUpdate(boolean) -controlP5.Controller : Button setValue(float) -controlP5.Controller : Button setValueLabel(String) -controlP5.Controller : Button setValueSelf(float) -controlP5.Controller : Button setView(ControllerView) -controlP5.Controller : Button setVisible(boolean) -controlP5.Controller : Button setWidth(int) -controlP5.Controller : Button show() -controlP5.Controller : Button unlock() -controlP5.Controller : Button unplugFrom(Object) -controlP5.Controller : Button unplugFrom(Object[]) -controlP5.Controller : Button unregisterTooltip() -controlP5.Controller : Button update() -controlP5.Controller : Button updateSize() -controlP5.Controller : CColor getColor() -controlP5.Controller : ControlBehavior getBehavior() -controlP5.Controller : ControlWindow getControlWindow() -controlP5.Controller : ControlWindow getWindow() -controlP5.Controller : ControllerProperty getProperty(String) -controlP5.Controller : ControllerProperty getProperty(String, String) -controlP5.Controller : ControllerView getView() -controlP5.Controller : Label getCaptionLabel() -controlP5.Controller : Label getValueLabel() -controlP5.Controller : List getControllerPlugList() -controlP5.Controller : Pointer getPointer() -controlP5.Controller : String getAddress() -controlP5.Controller : String getInfo() -controlP5.Controller : String getName() -controlP5.Controller : String getStringValue() -controlP5.Controller : String toString() -controlP5.Controller : Tab getTab() -controlP5.Controller : boolean isActive() -controlP5.Controller : boolean isBroadcast() -controlP5.Controller : boolean isInside() -controlP5.Controller : boolean isLabelVisible() -controlP5.Controller : boolean isListening() -controlP5.Controller : boolean isLock() -controlP5.Controller : boolean isMouseOver() -controlP5.Controller : boolean isMousePressed() -controlP5.Controller : boolean isMoveable() -controlP5.Controller : boolean isUpdate() -controlP5.Controller : boolean isVisible() -controlP5.Controller : float getArrayValue(int) -controlP5.Controller : float getDefaultValue() -controlP5.Controller : float getMax() -controlP5.Controller : float getMin() -controlP5.Controller : float getValue() -controlP5.Controller : float[] getAbsolutePosition() -controlP5.Controller : float[] getArrayValue() -controlP5.Controller : float[] getPosition() -controlP5.Controller : int getDecimalPrecision() -controlP5.Controller : int getHeight() -controlP5.Controller : int getId() -controlP5.Controller : int getWidth() -controlP5.Controller : int listenerSize() -controlP5.Controller : void remove() -controlP5.Controller : void setView(ControllerView, int) +main.java.controlp5.Button : Button activateBy(int) +main.java.controlp5.Button : Button setOff() +main.java.controlp5.Button : Button setOn() +main.java.controlp5.Button : Button setSwitch(boolean) +main.java.controlp5.Button : Button setValue(float) +main.java.controlp5.Button : Button update() +main.java.controlp5.Button : String getInfo() +main.java.controlp5.Button : String toString() +main.java.controlp5.Button : boolean getBooleanValue() +main.java.controlp5.Button : boolean isOn() +main.java.controlp5.Button : boolean isPressed() +main.java.controlp5.Button : boolean isSwitch() +main.java.controlp5.Controller : Button addCallback(CallbackListener) +main.java.controlp5.Controller : Button addListener(ControlListener) +main.java.controlp5.Controller : Button addListenerFor(int, CallbackListener) +main.java.controlp5.Controller : Button align(int, int, int, int) +main.java.controlp5.Controller : Button bringToFront() +main.java.controlp5.Controller : Button bringToFront(ControllerInterface) +main.java.controlp5.Controller : Button hide() +main.java.controlp5.Controller : Button linebreak() +main.java.controlp5.Controller : Button listen(boolean) +main.java.controlp5.Controller : Button lock() +main.java.controlp5.Controller : Button onChange(CallbackListener) +main.java.controlp5.Controller : Button onClick(CallbackListener) +main.java.controlp5.Controller : Button onDoublePress(CallbackListener) +main.java.controlp5.Controller : Button onDrag(CallbackListener) +main.java.controlp5.Controller : Button onDraw(ControllerView) +main.java.controlp5.Controller : Button onEndDrag(CallbackListener) +main.java.controlp5.Controller : Button onEnter(CallbackListener) +main.java.controlp5.Controller : Button onLeave(CallbackListener) +main.java.controlp5.Controller : Button onMove(CallbackListener) +main.java.controlp5.Controller : Button onPress(CallbackListener) +main.java.controlp5.Controller : Button onRelease(CallbackListener) +main.java.controlp5.Controller : Button onReleaseOutside(CallbackListener) +main.java.controlp5.Controller : Button onStartDrag(CallbackListener) +main.java.controlp5.Controller : Button onWheel(CallbackListener) +main.java.controlp5.Controller : Button plugTo(Object) +main.java.controlp5.Controller : Button plugTo(Object, String) +main.java.controlp5.Controller : Button plugTo(Object[]) +main.java.controlp5.Controller : Button plugTo(Object[], String) +main.java.controlp5.Controller : Button registerProperty(String) +main.java.controlp5.Controller : Button registerProperty(String, String) +main.java.controlp5.Controller : Button registerTooltip(String) +main.java.controlp5.Controller : Button removeBehavior() +main.java.controlp5.Controller : Button removeCallback() +main.java.controlp5.Controller : Button removeCallback(CallbackListener) +main.java.controlp5.Controller : Button removeListener(ControlListener) +main.java.controlp5.Controller : Button removeListenerFor(int, CallbackListener) +main.java.controlp5.Controller : Button removeListenersFor(int) +main.java.controlp5.Controller : Button removeProperty(String) +main.java.controlp5.Controller : Button removeProperty(String, String) +main.java.controlp5.Controller : Button setArrayValue(float[]) +main.java.controlp5.Controller : Button setArrayValue(int, float) +main.java.controlp5.Controller : Button setBehavior(ControlBehavior) +main.java.controlp5.Controller : Button setBroadcast(boolean) +main.java.controlp5.Controller : Button setCaptionLabel(String) +main.java.controlp5.Controller : Button setColor(CColor) +main.java.controlp5.Controller : Button setColorActive(int) +main.java.controlp5.Controller : Button setColorBackground(int) +main.java.controlp5.Controller : Button setColorCaptionLabel(int) +main.java.controlp5.Controller : Button setColorForeground(int) +main.java.controlp5.Controller : Button setColorLabel(int) +main.java.controlp5.Controller : Button setColorValue(int) +main.java.controlp5.Controller : Button setColorValueLabel(int) +main.java.controlp5.Controller : Button setDecimalPrecision(int) +main.java.controlp5.Controller : Button setDefaultValue(float) +main.java.controlp5.Controller : Button setHeight(int) +main.java.controlp5.Controller : Button setId(int) +main.java.controlp5.Controller : Button setImage(PImage) +main.java.controlp5.Controller : Button setImage(PImage, int) +main.java.controlp5.Controller : Button setImages(PImage, PImage, PImage) +main.java.controlp5.Controller : Button setImages(PImage, PImage, PImage, PImage) +main.java.controlp5.Controller : Button setLabel(String) +main.java.controlp5.Controller : Button setLabelVisible(boolean) +main.java.controlp5.Controller : Button setLock(boolean) +main.java.controlp5.Controller : Button setMax(float) +main.java.controlp5.Controller : Button setMin(float) +main.java.controlp5.Controller : Button setMouseOver(boolean) +main.java.controlp5.Controller : Button setMoveable(boolean) +main.java.controlp5.Controller : Button setPosition(float, float) +main.java.controlp5.Controller : Button setPosition(float[]) +main.java.controlp5.Controller : Button setSize(PImage) +main.java.controlp5.Controller : Button setSize(int, int) +main.java.controlp5.Controller : Button setStringValue(String) +main.java.controlp5.Controller : Button setUpdate(boolean) +main.java.controlp5.Controller : Button setValue(float) +main.java.controlp5.Controller : Button setValueLabel(String) +main.java.controlp5.Controller : Button setValueSelf(float) +main.java.controlp5.Controller : Button setView(ControllerView) +main.java.controlp5.Controller : Button setVisible(boolean) +main.java.controlp5.Controller : Button setWidth(int) +main.java.controlp5.Controller : Button show() +main.java.controlp5.Controller : Button unlock() +main.java.controlp5.Controller : Button unplugFrom(Object) +main.java.controlp5.Controller : Button unplugFrom(Object[]) +main.java.controlp5.Controller : Button unregisterTooltip() +main.java.controlp5.Controller : Button update() +main.java.controlp5.Controller : Button updateSize() +main.java.controlp5.Controller : CColor getColor() +main.java.controlp5.Controller : ControlBehavior getBehavior() +main.java.controlp5.Controller : ControlWindow getControlWindow() +main.java.controlp5.Controller : ControlWindow getWindow() +main.java.controlp5.Controller : ControllerProperty getProperty(String) +main.java.controlp5.Controller : ControllerProperty getProperty(String, String) +main.java.controlp5.Controller : ControllerView getView() +main.java.controlp5.Controller : Label getCaptionLabel() +main.java.controlp5.Controller : Label getValueLabel() +main.java.controlp5.Controller : List getControllerPlugList() +main.java.controlp5.Controller : Pointer getPointer() +main.java.controlp5.Controller : String getAddress() +main.java.controlp5.Controller : String getInfo() +main.java.controlp5.Controller : String getName() +main.java.controlp5.Controller : String getStringValue() +main.java.controlp5.Controller : String toString() +main.java.controlp5.Controller : Tab getTab() +main.java.controlp5.Controller : boolean isActive() +main.java.controlp5.Controller : boolean isBroadcast() +main.java.controlp5.Controller : boolean isInside() +main.java.controlp5.Controller : boolean isLabelVisible() +main.java.controlp5.Controller : boolean isListening() +main.java.controlp5.Controller : boolean isLock() +main.java.controlp5.Controller : boolean isMouseOver() +main.java.controlp5.Controller : boolean isMousePressed() +main.java.controlp5.Controller : boolean isMoveable() +main.java.controlp5.Controller : boolean isUpdate() +main.java.controlp5.Controller : boolean isVisible() +main.java.controlp5.Controller : float getArrayValue(int) +main.java.controlp5.Controller : float getDefaultValue() +main.java.controlp5.Controller : float getMax() +main.java.controlp5.Controller : float getMin() +main.java.controlp5.Controller : float getValue() +main.java.controlp5.Controller : float[] getAbsolutePosition() +main.java.controlp5.Controller : float[] getArrayValue() +main.java.controlp5.Controller : float[] getPosition() +main.java.controlp5.Controller : int getDecimalPrecision() +main.java.controlp5.Controller : int getHeight() +main.java.controlp5.Controller : int getId() +main.java.controlp5.Controller : int getWidth() +main.java.controlp5.Controller : int listenerSize() +main.java.controlp5.Controller : void remove() +main.java.controlp5.Controller : void setView(ControllerView, int) java.lang.Object : String toString() java.lang.Object : boolean equals(Object) diff --git a/examples/controllers/ControlP5canvas/ControlP5canvas.pde b/examples/controllers/ControlP5canvas/ControlP5canvas.pde index 7bfa71b..69e8043 100644 --- a/examples/controllers/ControlP5canvas/ControlP5canvas.pde +++ b/examples/controllers/ControlP5canvas/ControlP5canvas.pde @@ -76,9 +76,9 @@ Format: ClassName : returnType methodName(parameter type) -controlP5.Canvas : void moveTo(ControlWindow) -controlP5.Canvas : void setup(PGraphics) -controlP5.Canvas : void update(PApplet) +main.java.controlp5.Canvas : void moveTo(ControlWindow) +main.java.controlp5.Canvas : void setup(PGraphics) +main.java.controlp5.Canvas : void update(PApplet) java.lang.Object : String toString() java.lang.Object : boolean equals(Object) diff --git a/examples/controllers/ControlP5chart/ControlP5chart.pde b/examples/controllers/ControlP5chart/ControlP5chart.pde index 7d97672..c91a5f3 100644 --- a/examples/controllers/ControlP5chart/ControlP5chart.pde +++ b/examples/controllers/ControlP5chart/ControlP5chart.pde @@ -61,178 +61,178 @@ Format: ClassName : returnType methodName(parameter type) -controlP5.Chart : Chart addData(ChartData) -controlP5.Chart : Chart addData(ChartDataSet, float) -controlP5.Chart : Chart addData(String, ChartData) -controlP5.Chart : Chart addData(String, float) -controlP5.Chart : Chart addData(float) -controlP5.Chart : Chart addDataSet(String) -controlP5.Chart : Chart addFirst(String, float) -controlP5.Chart : Chart addFirst(float) -controlP5.Chart : Chart addLast(String, float) -controlP5.Chart : Chart addLast(float) -controlP5.Chart : Chart push(String, float) -controlP5.Chart : Chart push(float) -controlP5.Chart : Chart removeData(ChartData) -controlP5.Chart : Chart removeData(String, ChartData) -controlP5.Chart : Chart removeData(String, int) -controlP5.Chart : Chart removeData(int) -controlP5.Chart : Chart removeDataSet(String) -controlP5.Chart : Chart removeFirst() -controlP5.Chart : Chart removeFirst(String) -controlP5.Chart : Chart removeLast() -controlP5.Chart : Chart removeLast(String) -controlP5.Chart : Chart setData(String, int, ChartData) -controlP5.Chart : Chart setData(int, ChartData) -controlP5.Chart : Chart setDataSet(ChartDataSet) -controlP5.Chart : Chart setDataSet(String, ChartDataSet) -controlP5.Chart : Chart setRange(float, float) -controlP5.Chart : Chart setResolution(int) -controlP5.Chart : Chart setStrokeWeight(float) -controlP5.Chart : Chart setValue(float) -controlP5.Chart : Chart setView(int) -controlP5.Chart : Chart unshift(String, float) -controlP5.Chart : Chart unshift(float) -controlP5.Chart : ChartData getData(String, int) -controlP5.Chart : ChartDataSet getDataSet(String) -controlP5.Chart : LinkedHashMap getDataSet() -controlP5.Chart : String getInfo() -controlP5.Chart : String toString() -controlP5.Chart : float getStrokeWeight() -controlP5.Chart : float[] getValuesFrom(String) -controlP5.Chart : int getResolution() -controlP5.Chart : int size() -controlP5.Chart : void onEnter() -controlP5.Chart : void onLeave() -controlP5.Controller : CColor getColor() -controlP5.Controller : Chart addCallback(CallbackListener) -controlP5.Controller : Chart addListener(ControlListener) -controlP5.Controller : Chart addListenerFor(int, CallbackListener) -controlP5.Controller : Chart align(int, int, int, int) -controlP5.Controller : Chart bringToFront() -controlP5.Controller : Chart bringToFront(ControllerInterface) -controlP5.Controller : Chart hide() -controlP5.Controller : Chart linebreak() -controlP5.Controller : Chart listen(boolean) -controlP5.Controller : Chart lock() -controlP5.Controller : Chart onChange(CallbackListener) -controlP5.Controller : Chart onClick(CallbackListener) -controlP5.Controller : Chart onDoublePress(CallbackListener) -controlP5.Controller : Chart onDrag(CallbackListener) -controlP5.Controller : Chart onDraw(ControllerView) -controlP5.Controller : Chart onEndDrag(CallbackListener) -controlP5.Controller : Chart onEnter(CallbackListener) -controlP5.Controller : Chart onLeave(CallbackListener) -controlP5.Controller : Chart onMove(CallbackListener) -controlP5.Controller : Chart onPress(CallbackListener) -controlP5.Controller : Chart onRelease(CallbackListener) -controlP5.Controller : Chart onReleaseOutside(CallbackListener) -controlP5.Controller : Chart onStartDrag(CallbackListener) -controlP5.Controller : Chart onWheel(CallbackListener) -controlP5.Controller : Chart plugTo(Object) -controlP5.Controller : Chart plugTo(Object, String) -controlP5.Controller : Chart plugTo(Object[]) -controlP5.Controller : Chart plugTo(Object[], String) -controlP5.Controller : Chart registerProperty(String) -controlP5.Controller : Chart registerProperty(String, String) -controlP5.Controller : Chart registerTooltip(String) -controlP5.Controller : Chart removeBehavior() -controlP5.Controller : Chart removeCallback() -controlP5.Controller : Chart removeCallback(CallbackListener) -controlP5.Controller : Chart removeListener(ControlListener) -controlP5.Controller : Chart removeListenerFor(int, CallbackListener) -controlP5.Controller : Chart removeListenersFor(int) -controlP5.Controller : Chart removeProperty(String) -controlP5.Controller : Chart removeProperty(String, String) -controlP5.Controller : Chart setArrayValue(float[]) -controlP5.Controller : Chart setArrayValue(int, float) -controlP5.Controller : Chart setBehavior(ControlBehavior) -controlP5.Controller : Chart setBroadcast(boolean) -controlP5.Controller : Chart setCaptionLabel(String) -controlP5.Controller : Chart setColor(CColor) -controlP5.Controller : Chart setColorActive(int) -controlP5.Controller : Chart setColorBackground(int) -controlP5.Controller : Chart setColorCaptionLabel(int) -controlP5.Controller : Chart setColorForeground(int) -controlP5.Controller : Chart setColorLabel(int) -controlP5.Controller : Chart setColorValue(int) -controlP5.Controller : Chart setColorValueLabel(int) -controlP5.Controller : Chart setDecimalPrecision(int) -controlP5.Controller : Chart setDefaultValue(float) -controlP5.Controller : Chart setHeight(int) -controlP5.Controller : Chart setId(int) -controlP5.Controller : Chart setImage(PImage) -controlP5.Controller : Chart setImage(PImage, int) -controlP5.Controller : Chart setImages(PImage, PImage, PImage) -controlP5.Controller : Chart setImages(PImage, PImage, PImage, PImage) -controlP5.Controller : Chart setLabel(String) -controlP5.Controller : Chart setLabelVisible(boolean) -controlP5.Controller : Chart setLock(boolean) -controlP5.Controller : Chart setMax(float) -controlP5.Controller : Chart setMin(float) -controlP5.Controller : Chart setMouseOver(boolean) -controlP5.Controller : Chart setMoveable(boolean) -controlP5.Controller : Chart setPosition(float, float) -controlP5.Controller : Chart setPosition(float[]) -controlP5.Controller : Chart setSize(PImage) -controlP5.Controller : Chart setSize(int, int) -controlP5.Controller : Chart setStringValue(String) -controlP5.Controller : Chart setUpdate(boolean) -controlP5.Controller : Chart setValue(float) -controlP5.Controller : Chart setValueLabel(String) -controlP5.Controller : Chart setValueSelf(float) -controlP5.Controller : Chart setView(ControllerView) -controlP5.Controller : Chart setVisible(boolean) -controlP5.Controller : Chart setWidth(int) -controlP5.Controller : Chart show() -controlP5.Controller : Chart unlock() -controlP5.Controller : Chart unplugFrom(Object) -controlP5.Controller : Chart unplugFrom(Object[]) -controlP5.Controller : Chart unregisterTooltip() -controlP5.Controller : Chart update() -controlP5.Controller : Chart updateSize() -controlP5.Controller : ControlBehavior getBehavior() -controlP5.Controller : ControlWindow getControlWindow() -controlP5.Controller : ControlWindow getWindow() -controlP5.Controller : ControllerProperty getProperty(String) -controlP5.Controller : ControllerProperty getProperty(String, String) -controlP5.Controller : ControllerView getView() -controlP5.Controller : Label getCaptionLabel() -controlP5.Controller : Label getValueLabel() -controlP5.Controller : List getControllerPlugList() -controlP5.Controller : Pointer getPointer() -controlP5.Controller : String getAddress() -controlP5.Controller : String getInfo() -controlP5.Controller : String getName() -controlP5.Controller : String getStringValue() -controlP5.Controller : String toString() -controlP5.Controller : Tab getTab() -controlP5.Controller : boolean isActive() -controlP5.Controller : boolean isBroadcast() -controlP5.Controller : boolean isInside() -controlP5.Controller : boolean isLabelVisible() -controlP5.Controller : boolean isListening() -controlP5.Controller : boolean isLock() -controlP5.Controller : boolean isMouseOver() -controlP5.Controller : boolean isMousePressed() -controlP5.Controller : boolean isMoveable() -controlP5.Controller : boolean isUpdate() -controlP5.Controller : boolean isVisible() -controlP5.Controller : float getArrayValue(int) -controlP5.Controller : float getDefaultValue() -controlP5.Controller : float getMax() -controlP5.Controller : float getMin() -controlP5.Controller : float getValue() -controlP5.Controller : float[] getAbsolutePosition() -controlP5.Controller : float[] getArrayValue() -controlP5.Controller : float[] getPosition() -controlP5.Controller : int getDecimalPrecision() -controlP5.Controller : int getHeight() -controlP5.Controller : int getId() -controlP5.Controller : int getWidth() -controlP5.Controller : int listenerSize() -controlP5.Controller : void remove() -controlP5.Controller : void setView(ControllerView, int) +main.java.controlp5.Chart : Chart addData(ChartData) +main.java.controlp5.Chart : Chart addData(ChartDataSet, float) +main.java.controlp5.Chart : Chart addData(String, ChartData) +main.java.controlp5.Chart : Chart addData(String, float) +main.java.controlp5.Chart : Chart addData(float) +main.java.controlp5.Chart : Chart addDataSet(String) +main.java.controlp5.Chart : Chart addFirst(String, float) +main.java.controlp5.Chart : Chart addFirst(float) +main.java.controlp5.Chart : Chart addLast(String, float) +main.java.controlp5.Chart : Chart addLast(float) +main.java.controlp5.Chart : Chart push(String, float) +main.java.controlp5.Chart : Chart push(float) +main.java.controlp5.Chart : Chart removeData(ChartData) +main.java.controlp5.Chart : Chart removeData(String, ChartData) +main.java.controlp5.Chart : Chart removeData(String, int) +main.java.controlp5.Chart : Chart removeData(int) +main.java.controlp5.Chart : Chart removeDataSet(String) +main.java.controlp5.Chart : Chart removeFirst() +main.java.controlp5.Chart : Chart removeFirst(String) +main.java.controlp5.Chart : Chart removeLast() +main.java.controlp5.Chart : Chart removeLast(String) +main.java.controlp5.Chart : Chart setData(String, int, ChartData) +main.java.controlp5.Chart : Chart setData(int, ChartData) +main.java.controlp5.Chart : Chart setDataSet(ChartDataSet) +main.java.controlp5.Chart : Chart setDataSet(String, ChartDataSet) +main.java.controlp5.Chart : Chart setRange(float, float) +main.java.controlp5.Chart : Chart setResolution(int) +main.java.controlp5.Chart : Chart setStrokeWeight(float) +main.java.controlp5.Chart : Chart setValue(float) +main.java.controlp5.Chart : Chart setView(int) +main.java.controlp5.Chart : Chart unshift(String, float) +main.java.controlp5.Chart : Chart unshift(float) +main.java.controlp5.Chart : ChartData getData(String, int) +main.java.controlp5.Chart : ChartDataSet getDataSet(String) +main.java.controlp5.Chart : LinkedHashMap getDataSet() +main.java.controlp5.Chart : String getInfo() +main.java.controlp5.Chart : String toString() +main.java.controlp5.Chart : float getStrokeWeight() +main.java.controlp5.Chart : float[] getValuesFrom(String) +main.java.controlp5.Chart : int getResolution() +main.java.controlp5.Chart : int size() +main.java.controlp5.Chart : void onEnter() +main.java.controlp5.Chart : void onLeave() +main.java.controlp5.Controller : CColor getColor() +main.java.controlp5.Controller : Chart addCallback(CallbackListener) +main.java.controlp5.Controller : Chart addListener(ControlListener) +main.java.controlp5.Controller : Chart addListenerFor(int, CallbackListener) +main.java.controlp5.Controller : Chart align(int, int, int, int) +main.java.controlp5.Controller : Chart bringToFront() +main.java.controlp5.Controller : Chart bringToFront(ControllerInterface) +main.java.controlp5.Controller : Chart hide() +main.java.controlp5.Controller : Chart linebreak() +main.java.controlp5.Controller : Chart listen(boolean) +main.java.controlp5.Controller : Chart lock() +main.java.controlp5.Controller : Chart onChange(CallbackListener) +main.java.controlp5.Controller : Chart onClick(CallbackListener) +main.java.controlp5.Controller : Chart onDoublePress(CallbackListener) +main.java.controlp5.Controller : Chart onDrag(CallbackListener) +main.java.controlp5.Controller : Chart onDraw(ControllerView) +main.java.controlp5.Controller : Chart onEndDrag(CallbackListener) +main.java.controlp5.Controller : Chart onEnter(CallbackListener) +main.java.controlp5.Controller : Chart onLeave(CallbackListener) +main.java.controlp5.Controller : Chart onMove(CallbackListener) +main.java.controlp5.Controller : Chart onPress(CallbackListener) +main.java.controlp5.Controller : Chart onRelease(CallbackListener) +main.java.controlp5.Controller : Chart onReleaseOutside(CallbackListener) +main.java.controlp5.Controller : Chart onStartDrag(CallbackListener) +main.java.controlp5.Controller : Chart onWheel(CallbackListener) +main.java.controlp5.Controller : Chart plugTo(Object) +main.java.controlp5.Controller : Chart plugTo(Object, String) +main.java.controlp5.Controller : Chart plugTo(Object[]) +main.java.controlp5.Controller : Chart plugTo(Object[], String) +main.java.controlp5.Controller : Chart registerProperty(String) +main.java.controlp5.Controller : Chart registerProperty(String, String) +main.java.controlp5.Controller : Chart registerTooltip(String) +main.java.controlp5.Controller : Chart removeBehavior() +main.java.controlp5.Controller : Chart removeCallback() +main.java.controlp5.Controller : Chart removeCallback(CallbackListener) +main.java.controlp5.Controller : Chart removeListener(ControlListener) +main.java.controlp5.Controller : Chart removeListenerFor(int, CallbackListener) +main.java.controlp5.Controller : Chart removeListenersFor(int) +main.java.controlp5.Controller : Chart removeProperty(String) +main.java.controlp5.Controller : Chart removeProperty(String, String) +main.java.controlp5.Controller : Chart setArrayValue(float[]) +main.java.controlp5.Controller : Chart setArrayValue(int, float) +main.java.controlp5.Controller : Chart setBehavior(ControlBehavior) +main.java.controlp5.Controller : Chart setBroadcast(boolean) +main.java.controlp5.Controller : Chart setCaptionLabel(String) +main.java.controlp5.Controller : Chart setColor(CColor) +main.java.controlp5.Controller : Chart setColorActive(int) +main.java.controlp5.Controller : Chart setColorBackground(int) +main.java.controlp5.Controller : Chart setColorCaptionLabel(int) +main.java.controlp5.Controller : Chart setColorForeground(int) +main.java.controlp5.Controller : Chart setColorLabel(int) +main.java.controlp5.Controller : Chart setColorValue(int) +main.java.controlp5.Controller : Chart setColorValueLabel(int) +main.java.controlp5.Controller : Chart setDecimalPrecision(int) +main.java.controlp5.Controller : Chart setDefaultValue(float) +main.java.controlp5.Controller : Chart setHeight(int) +main.java.controlp5.Controller : Chart setId(int) +main.java.controlp5.Controller : Chart setImage(PImage) +main.java.controlp5.Controller : Chart setImage(PImage, int) +main.java.controlp5.Controller : Chart setImages(PImage, PImage, PImage) +main.java.controlp5.Controller : Chart setImages(PImage, PImage, PImage, PImage) +main.java.controlp5.Controller : Chart setLabel(String) +main.java.controlp5.Controller : Chart setLabelVisible(boolean) +main.java.controlp5.Controller : Chart setLock(boolean) +main.java.controlp5.Controller : Chart setMax(float) +main.java.controlp5.Controller : Chart setMin(float) +main.java.controlp5.Controller : Chart setMouseOver(boolean) +main.java.controlp5.Controller : Chart setMoveable(boolean) +main.java.controlp5.Controller : Chart setPosition(float, float) +main.java.controlp5.Controller : Chart setPosition(float[]) +main.java.controlp5.Controller : Chart setSize(PImage) +main.java.controlp5.Controller : Chart setSize(int, int) +main.java.controlp5.Controller : Chart setStringValue(String) +main.java.controlp5.Controller : Chart setUpdate(boolean) +main.java.controlp5.Controller : Chart setValue(float) +main.java.controlp5.Controller : Chart setValueLabel(String) +main.java.controlp5.Controller : Chart setValueSelf(float) +main.java.controlp5.Controller : Chart setView(ControllerView) +main.java.controlp5.Controller : Chart setVisible(boolean) +main.java.controlp5.Controller : Chart setWidth(int) +main.java.controlp5.Controller : Chart show() +main.java.controlp5.Controller : Chart unlock() +main.java.controlp5.Controller : Chart unplugFrom(Object) +main.java.controlp5.Controller : Chart unplugFrom(Object[]) +main.java.controlp5.Controller : Chart unregisterTooltip() +main.java.controlp5.Controller : Chart update() +main.java.controlp5.Controller : Chart updateSize() +main.java.controlp5.Controller : ControlBehavior getBehavior() +main.java.controlp5.Controller : ControlWindow getControlWindow() +main.java.controlp5.Controller : ControlWindow getWindow() +main.java.controlp5.Controller : ControllerProperty getProperty(String) +main.java.controlp5.Controller : ControllerProperty getProperty(String, String) +main.java.controlp5.Controller : ControllerView getView() +main.java.controlp5.Controller : Label getCaptionLabel() +main.java.controlp5.Controller : Label getValueLabel() +main.java.controlp5.Controller : List getControllerPlugList() +main.java.controlp5.Controller : Pointer getPointer() +main.java.controlp5.Controller : String getAddress() +main.java.controlp5.Controller : String getInfo() +main.java.controlp5.Controller : String getName() +main.java.controlp5.Controller : String getStringValue() +main.java.controlp5.Controller : String toString() +main.java.controlp5.Controller : Tab getTab() +main.java.controlp5.Controller : boolean isActive() +main.java.controlp5.Controller : boolean isBroadcast() +main.java.controlp5.Controller : boolean isInside() +main.java.controlp5.Controller : boolean isLabelVisible() +main.java.controlp5.Controller : boolean isListening() +main.java.controlp5.Controller : boolean isLock() +main.java.controlp5.Controller : boolean isMouseOver() +main.java.controlp5.Controller : boolean isMousePressed() +main.java.controlp5.Controller : boolean isMoveable() +main.java.controlp5.Controller : boolean isUpdate() +main.java.controlp5.Controller : boolean isVisible() +main.java.controlp5.Controller : float getArrayValue(int) +main.java.controlp5.Controller : float getDefaultValue() +main.java.controlp5.Controller : float getMax() +main.java.controlp5.Controller : float getMin() +main.java.controlp5.Controller : float getValue() +main.java.controlp5.Controller : float[] getAbsolutePosition() +main.java.controlp5.Controller : float[] getArrayValue() +main.java.controlp5.Controller : float[] getPosition() +main.java.controlp5.Controller : int getDecimalPrecision() +main.java.controlp5.Controller : int getHeight() +main.java.controlp5.Controller : int getId() +main.java.controlp5.Controller : int getWidth() +main.java.controlp5.Controller : int listenerSize() +main.java.controlp5.Controller : void remove() +main.java.controlp5.Controller : void setView(ControllerView, int) java.lang.Object : String toString() java.lang.Object : boolean equals(Object) diff --git a/examples/controllers/ControlP5checkBox/ControlP5checkBox.pde b/examples/controllers/ControlP5checkBox/ControlP5checkBox.pde index e29e710..1914270 100644 --- a/examples/controllers/ControlP5checkBox/ControlP5checkBox.pde +++ b/examples/controllers/ControlP5checkBox/ControlP5checkBox.pde @@ -107,131 +107,131 @@ Format: ClassName : returnType methodName(parameter type) -controlP5.CheckBox : CheckBox addItem(String, float) -controlP5.CheckBox : CheckBox addItem(Toggle, float) -controlP5.CheckBox : CheckBox deactivateAll() -controlP5.CheckBox : CheckBox hideLabels() -controlP5.CheckBox : CheckBox plugTo(Object) -controlP5.CheckBox : CheckBox plugTo(Object, String) -controlP5.CheckBox : CheckBox removeItem(String) -controlP5.CheckBox : CheckBox setArrayValue(float[]) -controlP5.CheckBox : CheckBox setColorLabels(int) -controlP5.CheckBox : CheckBox setImage(PImage) -controlP5.CheckBox : CheckBox setImage(PImage, int) -controlP5.CheckBox : CheckBox setImages(PImage, PImage, PImage) -controlP5.CheckBox : CheckBox setItemHeight(int) -controlP5.CheckBox : CheckBox setItemWidth(int) -controlP5.CheckBox : CheckBox setItemsPerRow(int) -controlP5.CheckBox : CheckBox setNoneSelectedAllowed(boolean) -controlP5.CheckBox : CheckBox setSize(PImage) -controlP5.CheckBox : CheckBox setSize(int, int) -controlP5.CheckBox : CheckBox setSpacingColumn(int) -controlP5.CheckBox : CheckBox setSpacingRow(int) -controlP5.CheckBox : CheckBox showLabels() -controlP5.CheckBox : CheckBox toUpperCase(boolean) -controlP5.CheckBox : List getItems() -controlP5.CheckBox : String getInfo() -controlP5.CheckBox : String toString() -controlP5.CheckBox : Toggle getItem(int) -controlP5.CheckBox : boolean getState(String) -controlP5.CheckBox : boolean getState(int) -controlP5.CheckBox : void updateLayout() -controlP5.ControlGroup : CheckBox activateEvent(boolean) -controlP5.ControlGroup : CheckBox addListener(ControlListener) -controlP5.ControlGroup : CheckBox removeListener(ControlListener) -controlP5.ControlGroup : CheckBox setBackgroundColor(int) -controlP5.ControlGroup : CheckBox setBackgroundHeight(int) -controlP5.ControlGroup : CheckBox setBarHeight(int) -controlP5.ControlGroup : CheckBox setSize(int, int) -controlP5.ControlGroup : CheckBox updateInternalEvents(PApplet) -controlP5.ControlGroup : String getInfo() -controlP5.ControlGroup : String toString() -controlP5.ControlGroup : int getBackgroundHeight() -controlP5.ControlGroup : int getBarHeight() -controlP5.ControlGroup : int listenerSize() -controlP5.ControllerGroup : CColor getColor() -controlP5.ControllerGroup : Canvas addCanvas(Canvas) -controlP5.ControllerGroup : CheckBox add(ControllerInterface) -controlP5.ControllerGroup : CheckBox addListener(ControlListener) -controlP5.ControllerGroup : CheckBox bringToFront() -controlP5.ControllerGroup : CheckBox bringToFront(ControllerInterface) -controlP5.ControllerGroup : CheckBox close() -controlP5.ControllerGroup : CheckBox disableCollapse() -controlP5.ControllerGroup : CheckBox enableCollapse() -controlP5.ControllerGroup : CheckBox hide() -controlP5.ControllerGroup : CheckBox hideArrow() -controlP5.ControllerGroup : CheckBox hideBar() -controlP5.ControllerGroup : CheckBox moveTo(ControlWindow) -controlP5.ControllerGroup : CheckBox moveTo(PApplet) -controlP5.ControllerGroup : CheckBox open() -controlP5.ControllerGroup : CheckBox registerProperty(String) -controlP5.ControllerGroup : CheckBox registerProperty(String, String) -controlP5.ControllerGroup : CheckBox remove(CDrawable) -controlP5.ControllerGroup : CheckBox remove(ControllerInterface) -controlP5.ControllerGroup : CheckBox removeCanvas(Canvas) -controlP5.ControllerGroup : CheckBox removeListener(ControlListener) -controlP5.ControllerGroup : CheckBox removeProperty(String) -controlP5.ControllerGroup : CheckBox removeProperty(String, String) -controlP5.ControllerGroup : CheckBox setAddress(String) -controlP5.ControllerGroup : CheckBox setArrayValue(float[]) -controlP5.ControllerGroup : CheckBox setArrayValue(int, float) -controlP5.ControllerGroup : CheckBox setCaptionLabel(String) -controlP5.ControllerGroup : CheckBox setColor(CColor) -controlP5.ControllerGroup : CheckBox setColorActive(int) -controlP5.ControllerGroup : CheckBox setColorBackground(int) -controlP5.ControllerGroup : CheckBox setColorForeground(int) -controlP5.ControllerGroup : CheckBox setColorLabel(int) -controlP5.ControllerGroup : CheckBox setColorValue(int) -controlP5.ControllerGroup : CheckBox setHeight(int) -controlP5.ControllerGroup : CheckBox setId(int) -controlP5.ControllerGroup : CheckBox setLabel(String) -controlP5.ControllerGroup : CheckBox setMouseOver(boolean) -controlP5.ControllerGroup : CheckBox setMoveable(boolean) -controlP5.ControllerGroup : CheckBox setOpen(boolean) -controlP5.ControllerGroup : CheckBox setPosition(float, float) -controlP5.ControllerGroup : CheckBox setPosition(float[]) -controlP5.ControllerGroup : CheckBox setSize(int, int) -controlP5.ControllerGroup : CheckBox setStringValue(String) -controlP5.ControllerGroup : CheckBox setTitle(String) -controlP5.ControllerGroup : CheckBox setUpdate(boolean) -controlP5.ControllerGroup : CheckBox setValue(float) -controlP5.ControllerGroup : CheckBox setVisible(boolean) -controlP5.ControllerGroup : CheckBox setWidth(int) -controlP5.ControllerGroup : CheckBox show() -controlP5.ControllerGroup : CheckBox showArrow() -controlP5.ControllerGroup : CheckBox showBar() -controlP5.ControllerGroup : CheckBox update() -controlP5.ControllerGroup : CheckBox updateAbsolutePosition() -controlP5.ControllerGroup : ControlWindow getWindow() -controlP5.ControllerGroup : Controller getController(String) -controlP5.ControllerGroup : ControllerProperty getProperty(String) -controlP5.ControllerGroup : ControllerProperty getProperty(String, String) -controlP5.ControllerGroup : Label getCaptionLabel() -controlP5.ControllerGroup : Label getValueLabel() -controlP5.ControllerGroup : String getAddress() -controlP5.ControllerGroup : String getInfo() -controlP5.ControllerGroup : String getName() -controlP5.ControllerGroup : String getStringValue() -controlP5.ControllerGroup : String toString() -controlP5.ControllerGroup : Tab getTab() -controlP5.ControllerGroup : boolean isBarVisible() -controlP5.ControllerGroup : boolean isCollapse() -controlP5.ControllerGroup : boolean isMouseOver() -controlP5.ControllerGroup : boolean isMoveable() -controlP5.ControllerGroup : boolean isOpen() -controlP5.ControllerGroup : boolean isUpdate() -controlP5.ControllerGroup : boolean isVisible() -controlP5.ControllerGroup : boolean setMousePressed(boolean) -controlP5.ControllerGroup : float getArrayValue(int) -controlP5.ControllerGroup : float getValue() -controlP5.ControllerGroup : float[] getArrayValue() -controlP5.ControllerGroup : float[] getPosition() -controlP5.ControllerGroup : int getHeight() -controlP5.ControllerGroup : int getId() -controlP5.ControllerGroup : int getWidth() -controlP5.ControllerGroup : int listenerSize() -controlP5.ControllerGroup : void controlEvent(ControlEvent) -controlP5.ControllerGroup : void remove() +main.java.controlp5.CheckBox : CheckBox addItem(String, float) +main.java.controlp5.CheckBox : CheckBox addItem(Toggle, float) +main.java.controlp5.CheckBox : CheckBox deactivateAll() +main.java.controlp5.CheckBox : CheckBox hideLabels() +main.java.controlp5.CheckBox : CheckBox plugTo(Object) +main.java.controlp5.CheckBox : CheckBox plugTo(Object, String) +main.java.controlp5.CheckBox : CheckBox removeItem(String) +main.java.controlp5.CheckBox : CheckBox setArrayValue(float[]) +main.java.controlp5.CheckBox : CheckBox setColorLabels(int) +main.java.controlp5.CheckBox : CheckBox setImage(PImage) +main.java.controlp5.CheckBox : CheckBox setImage(PImage, int) +main.java.controlp5.CheckBox : CheckBox setImages(PImage, PImage, PImage) +main.java.controlp5.CheckBox : CheckBox setItemHeight(int) +main.java.controlp5.CheckBox : CheckBox setItemWidth(int) +main.java.controlp5.CheckBox : CheckBox setItemsPerRow(int) +main.java.controlp5.CheckBox : CheckBox setNoneSelectedAllowed(boolean) +main.java.controlp5.CheckBox : CheckBox setSize(PImage) +main.java.controlp5.CheckBox : CheckBox setSize(int, int) +main.java.controlp5.CheckBox : CheckBox setSpacingColumn(int) +main.java.controlp5.CheckBox : CheckBox setSpacingRow(int) +main.java.controlp5.CheckBox : CheckBox showLabels() +main.java.controlp5.CheckBox : CheckBox toUpperCase(boolean) +main.java.controlp5.CheckBox : List getItems() +main.java.controlp5.CheckBox : String getInfo() +main.java.controlp5.CheckBox : String toString() +main.java.controlp5.CheckBox : Toggle getItem(int) +main.java.controlp5.CheckBox : boolean getState(String) +main.java.controlp5.CheckBox : boolean getState(int) +main.java.controlp5.CheckBox : void updateLayout() +main.java.controlp5.ControlGroup : CheckBox activateEvent(boolean) +main.java.controlp5.ControlGroup : CheckBox addListener(ControlListener) +main.java.controlp5.ControlGroup : CheckBox removeListener(ControlListener) +main.java.controlp5.ControlGroup : CheckBox setBackgroundColor(int) +main.java.controlp5.ControlGroup : CheckBox setBackgroundHeight(int) +main.java.controlp5.ControlGroup : CheckBox setBarHeight(int) +main.java.controlp5.ControlGroup : CheckBox setSize(int, int) +main.java.controlp5.ControlGroup : CheckBox updateInternalEvents(PApplet) +main.java.controlp5.ControlGroup : String getInfo() +main.java.controlp5.ControlGroup : String toString() +main.java.controlp5.ControlGroup : int getBackgroundHeight() +main.java.controlp5.ControlGroup : int getBarHeight() +main.java.controlp5.ControlGroup : int listenerSize() +main.java.controlp5.ControllerGroup : CColor getColor() +main.java.controlp5.ControllerGroup : Canvas addCanvas(Canvas) +main.java.controlp5.ControllerGroup : CheckBox add(ControllerInterface) +main.java.controlp5.ControllerGroup : CheckBox addListener(ControlListener) +main.java.controlp5.ControllerGroup : CheckBox bringToFront() +main.java.controlp5.ControllerGroup : CheckBox bringToFront(ControllerInterface) +main.java.controlp5.ControllerGroup : CheckBox close() +main.java.controlp5.ControllerGroup : CheckBox disableCollapse() +main.java.controlp5.ControllerGroup : CheckBox enableCollapse() +main.java.controlp5.ControllerGroup : CheckBox hide() +main.java.controlp5.ControllerGroup : CheckBox hideArrow() +main.java.controlp5.ControllerGroup : CheckBox hideBar() +main.java.controlp5.ControllerGroup : CheckBox moveTo(ControlWindow) +main.java.controlp5.ControllerGroup : CheckBox moveTo(PApplet) +main.java.controlp5.ControllerGroup : CheckBox open() +main.java.controlp5.ControllerGroup : CheckBox registerProperty(String) +main.java.controlp5.ControllerGroup : CheckBox registerProperty(String, String) +main.java.controlp5.ControllerGroup : CheckBox remove(CDrawable) +main.java.controlp5.ControllerGroup : CheckBox remove(ControllerInterface) +main.java.controlp5.ControllerGroup : CheckBox removeCanvas(Canvas) +main.java.controlp5.ControllerGroup : CheckBox removeListener(ControlListener) +main.java.controlp5.ControllerGroup : CheckBox removeProperty(String) +main.java.controlp5.ControllerGroup : CheckBox removeProperty(String, String) +main.java.controlp5.ControllerGroup : CheckBox setAddress(String) +main.java.controlp5.ControllerGroup : CheckBox setArrayValue(float[]) +main.java.controlp5.ControllerGroup : CheckBox setArrayValue(int, float) +main.java.controlp5.ControllerGroup : CheckBox setCaptionLabel(String) +main.java.controlp5.ControllerGroup : CheckBox setColor(CColor) +main.java.controlp5.ControllerGroup : CheckBox setColorActive(int) +main.java.controlp5.ControllerGroup : CheckBox setColorBackground(int) +main.java.controlp5.ControllerGroup : CheckBox setColorForeground(int) +main.java.controlp5.ControllerGroup : CheckBox setColorLabel(int) +main.java.controlp5.ControllerGroup : CheckBox setColorValue(int) +main.java.controlp5.ControllerGroup : CheckBox setHeight(int) +main.java.controlp5.ControllerGroup : CheckBox setId(int) +main.java.controlp5.ControllerGroup : CheckBox setLabel(String) +main.java.controlp5.ControllerGroup : CheckBox setMouseOver(boolean) +main.java.controlp5.ControllerGroup : CheckBox setMoveable(boolean) +main.java.controlp5.ControllerGroup : CheckBox setOpen(boolean) +main.java.controlp5.ControllerGroup : CheckBox setPosition(float, float) +main.java.controlp5.ControllerGroup : CheckBox setPosition(float[]) +main.java.controlp5.ControllerGroup : CheckBox setSize(int, int) +main.java.controlp5.ControllerGroup : CheckBox setStringValue(String) +main.java.controlp5.ControllerGroup : CheckBox setTitle(String) +main.java.controlp5.ControllerGroup : CheckBox setUpdate(boolean) +main.java.controlp5.ControllerGroup : CheckBox setValue(float) +main.java.controlp5.ControllerGroup : CheckBox setVisible(boolean) +main.java.controlp5.ControllerGroup : CheckBox setWidth(int) +main.java.controlp5.ControllerGroup : CheckBox show() +main.java.controlp5.ControllerGroup : CheckBox showArrow() +main.java.controlp5.ControllerGroup : CheckBox showBar() +main.java.controlp5.ControllerGroup : CheckBox update() +main.java.controlp5.ControllerGroup : CheckBox updateAbsolutePosition() +main.java.controlp5.ControllerGroup : ControlWindow getWindow() +main.java.controlp5.ControllerGroup : Controller getController(String) +main.java.controlp5.ControllerGroup : ControllerProperty getProperty(String) +main.java.controlp5.ControllerGroup : ControllerProperty getProperty(String, String) +main.java.controlp5.ControllerGroup : Label getCaptionLabel() +main.java.controlp5.ControllerGroup : Label getValueLabel() +main.java.controlp5.ControllerGroup : String getAddress() +main.java.controlp5.ControllerGroup : String getInfo() +main.java.controlp5.ControllerGroup : String getName() +main.java.controlp5.ControllerGroup : String getStringValue() +main.java.controlp5.ControllerGroup : String toString() +main.java.controlp5.ControllerGroup : Tab getTab() +main.java.controlp5.ControllerGroup : boolean isBarVisible() +main.java.controlp5.ControllerGroup : boolean isCollapse() +main.java.controlp5.ControllerGroup : boolean isMouseOver() +main.java.controlp5.ControllerGroup : boolean isMoveable() +main.java.controlp5.ControllerGroup : boolean isOpen() +main.java.controlp5.ControllerGroup : boolean isUpdate() +main.java.controlp5.ControllerGroup : boolean isVisible() +main.java.controlp5.ControllerGroup : boolean setMousePressed(boolean) +main.java.controlp5.ControllerGroup : float getArrayValue(int) +main.java.controlp5.ControllerGroup : float getValue() +main.java.controlp5.ControllerGroup : float[] getArrayValue() +main.java.controlp5.ControllerGroup : float[] getPosition() +main.java.controlp5.ControllerGroup : int getHeight() +main.java.controlp5.ControllerGroup : int getId() +main.java.controlp5.ControllerGroup : int getWidth() +main.java.controlp5.ControllerGroup : int listenerSize() +main.java.controlp5.ControllerGroup : void controlEvent(ControlEvent) +main.java.controlp5.ControllerGroup : void remove() java.lang.Object : String toString() java.lang.Object : boolean equals(Object) diff --git a/examples/controllers/ControlP5colorPicker/ControlP5colorPicker.pde b/examples/controllers/ControlP5colorPicker/ControlP5colorPicker.pde index 8545134..a4165e7 100644 --- a/examples/controllers/ControlP5colorPicker/ControlP5colorPicker.pde +++ b/examples/controllers/ControlP5colorPicker/ControlP5colorPicker.pde @@ -76,108 +76,108 @@ Format: ClassName : returnType methodName(parameter type) -controlP5.ColorPicker : ColorPicker plugTo(Object) -controlP5.ColorPicker : ColorPicker plugTo(Object, String) -controlP5.ColorPicker : ColorPicker setArrayValue(float[]) -controlP5.ColorPicker : ColorPicker setColorValue(int) -controlP5.ColorPicker : String getInfo() -controlP5.ColorPicker : int getColorValue() -controlP5.ControlGroup : ColorPicker activateEvent(boolean) -controlP5.ControlGroup : ColorPicker addListener(ControlListener) -controlP5.ControlGroup : ColorPicker removeListener(ControlListener) -controlP5.ControlGroup : ColorPicker setBackgroundColor(int) -controlP5.ControlGroup : ColorPicker setBackgroundHeight(int) -controlP5.ControlGroup : ColorPicker setBarHeight(int) -controlP5.ControlGroup : ColorPicker setSize(int, int) -controlP5.ControlGroup : ColorPicker updateInternalEvents(PApplet) -controlP5.ControlGroup : String getInfo() -controlP5.ControlGroup : String toString() -controlP5.ControlGroup : int getBackgroundHeight() -controlP5.ControlGroup : int getBarHeight() -controlP5.ControlGroup : int listenerSize() -controlP5.ControllerGroup : CColor getColor() -controlP5.ControllerGroup : Canvas addCanvas(Canvas) -controlP5.ControllerGroup : ColorPicker add(ControllerInterface) -controlP5.ControllerGroup : ColorPicker addListener(ControlListener) -controlP5.ControllerGroup : ColorPicker bringToFront() -controlP5.ControllerGroup : ColorPicker bringToFront(ControllerInterface) -controlP5.ControllerGroup : ColorPicker close() -controlP5.ControllerGroup : ColorPicker disableCollapse() -controlP5.ControllerGroup : ColorPicker enableCollapse() -controlP5.ControllerGroup : ColorPicker hide() -controlP5.ControllerGroup : ColorPicker hideArrow() -controlP5.ControllerGroup : ColorPicker hideBar() -controlP5.ControllerGroup : ColorPicker moveTo(ControlWindow) -controlP5.ControllerGroup : ColorPicker moveTo(PApplet) -controlP5.ControllerGroup : ColorPicker open() -controlP5.ControllerGroup : ColorPicker registerProperty(String) -controlP5.ControllerGroup : ColorPicker registerProperty(String, String) -controlP5.ControllerGroup : ColorPicker remove(CDrawable) -controlP5.ControllerGroup : ColorPicker remove(ControllerInterface) -controlP5.ControllerGroup : ColorPicker removeCanvas(Canvas) -controlP5.ControllerGroup : ColorPicker removeListener(ControlListener) -controlP5.ControllerGroup : ColorPicker removeProperty(String) -controlP5.ControllerGroup : ColorPicker removeProperty(String, String) -controlP5.ControllerGroup : ColorPicker setAddress(String) -controlP5.ControllerGroup : ColorPicker setArrayValue(float[]) -controlP5.ControllerGroup : ColorPicker setArrayValue(int, float) -controlP5.ControllerGroup : ColorPicker setCaptionLabel(String) -controlP5.ControllerGroup : ColorPicker setColor(CColor) -controlP5.ControllerGroup : ColorPicker setColorActive(int) -controlP5.ControllerGroup : ColorPicker setColorBackground(int) -controlP5.ControllerGroup : ColorPicker setColorForeground(int) -controlP5.ControllerGroup : ColorPicker setColorLabel(int) -controlP5.ControllerGroup : ColorPicker setColorValue(int) -controlP5.ControllerGroup : ColorPicker setHeight(int) -controlP5.ControllerGroup : ColorPicker setId(int) -controlP5.ControllerGroup : ColorPicker setLabel(String) -controlP5.ControllerGroup : ColorPicker setMouseOver(boolean) -controlP5.ControllerGroup : ColorPicker setMoveable(boolean) -controlP5.ControllerGroup : ColorPicker setOpen(boolean) -controlP5.ControllerGroup : ColorPicker setPosition(float, float) -controlP5.ControllerGroup : ColorPicker setPosition(float[]) -controlP5.ControllerGroup : ColorPicker setSize(int, int) -controlP5.ControllerGroup : ColorPicker setStringValue(String) -controlP5.ControllerGroup : ColorPicker setTitle(String) -controlP5.ControllerGroup : ColorPicker setUpdate(boolean) -controlP5.ControllerGroup : ColorPicker setValue(float) -controlP5.ControllerGroup : ColorPicker setVisible(boolean) -controlP5.ControllerGroup : ColorPicker setWidth(int) -controlP5.ControllerGroup : ColorPicker show() -controlP5.ControllerGroup : ColorPicker showArrow() -controlP5.ControllerGroup : ColorPicker showBar() -controlP5.ControllerGroup : ColorPicker update() -controlP5.ControllerGroup : ColorPicker updateAbsolutePosition() -controlP5.ControllerGroup : ControlWindow getWindow() -controlP5.ControllerGroup : Controller getController(String) -controlP5.ControllerGroup : ControllerProperty getProperty(String) -controlP5.ControllerGroup : ControllerProperty getProperty(String, String) -controlP5.ControllerGroup : Label getCaptionLabel() -controlP5.ControllerGroup : Label getValueLabel() -controlP5.ControllerGroup : String getAddress() -controlP5.ControllerGroup : String getInfo() -controlP5.ControllerGroup : String getName() -controlP5.ControllerGroup : String getStringValue() -controlP5.ControllerGroup : String toString() -controlP5.ControllerGroup : Tab getTab() -controlP5.ControllerGroup : boolean isBarVisible() -controlP5.ControllerGroup : boolean isCollapse() -controlP5.ControllerGroup : boolean isMouseOver() -controlP5.ControllerGroup : boolean isMoveable() -controlP5.ControllerGroup : boolean isOpen() -controlP5.ControllerGroup : boolean isUpdate() -controlP5.ControllerGroup : boolean isVisible() -controlP5.ControllerGroup : boolean setMousePressed(boolean) -controlP5.ControllerGroup : float getArrayValue(int) -controlP5.ControllerGroup : float getValue() -controlP5.ControllerGroup : float[] getArrayValue() -controlP5.ControllerGroup : float[] getPosition() -controlP5.ControllerGroup : int getHeight() -controlP5.ControllerGroup : int getId() -controlP5.ControllerGroup : int getWidth() -controlP5.ControllerGroup : int listenerSize() -controlP5.ControllerGroup : void controlEvent(ControlEvent) -controlP5.ControllerGroup : void remove() +main.java.controlp5.ColorPicker : ColorPicker plugTo(Object) +main.java.controlp5.ColorPicker : ColorPicker plugTo(Object, String) +main.java.controlp5.ColorPicker : ColorPicker setArrayValue(float[]) +main.java.controlp5.ColorPicker : ColorPicker setColorValue(int) +main.java.controlp5.ColorPicker : String getInfo() +main.java.controlp5.ColorPicker : int getColorValue() +main.java.controlp5.ControlGroup : ColorPicker activateEvent(boolean) +main.java.controlp5.ControlGroup : ColorPicker addListener(ControlListener) +main.java.controlp5.ControlGroup : ColorPicker removeListener(ControlListener) +main.java.controlp5.ControlGroup : ColorPicker setBackgroundColor(int) +main.java.controlp5.ControlGroup : ColorPicker setBackgroundHeight(int) +main.java.controlp5.ControlGroup : ColorPicker setBarHeight(int) +main.java.controlp5.ControlGroup : ColorPicker setSize(int, int) +main.java.controlp5.ControlGroup : ColorPicker updateInternalEvents(PApplet) +main.java.controlp5.ControlGroup : String getInfo() +main.java.controlp5.ControlGroup : String toString() +main.java.controlp5.ControlGroup : int getBackgroundHeight() +main.java.controlp5.ControlGroup : int getBarHeight() +main.java.controlp5.ControlGroup : int listenerSize() +main.java.controlp5.ControllerGroup : CColor getColor() +main.java.controlp5.ControllerGroup : Canvas addCanvas(Canvas) +main.java.controlp5.ControllerGroup : ColorPicker add(ControllerInterface) +main.java.controlp5.ControllerGroup : ColorPicker addListener(ControlListener) +main.java.controlp5.ControllerGroup : ColorPicker bringToFront() +main.java.controlp5.ControllerGroup : ColorPicker bringToFront(ControllerInterface) +main.java.controlp5.ControllerGroup : ColorPicker close() +main.java.controlp5.ControllerGroup : ColorPicker disableCollapse() +main.java.controlp5.ControllerGroup : ColorPicker enableCollapse() +main.java.controlp5.ControllerGroup : ColorPicker hide() +main.java.controlp5.ControllerGroup : ColorPicker hideArrow() +main.java.controlp5.ControllerGroup : ColorPicker hideBar() +main.java.controlp5.ControllerGroup : ColorPicker moveTo(ControlWindow) +main.java.controlp5.ControllerGroup : ColorPicker moveTo(PApplet) +main.java.controlp5.ControllerGroup : ColorPicker open() +main.java.controlp5.ControllerGroup : ColorPicker registerProperty(String) +main.java.controlp5.ControllerGroup : ColorPicker registerProperty(String, String) +main.java.controlp5.ControllerGroup : ColorPicker remove(CDrawable) +main.java.controlp5.ControllerGroup : ColorPicker remove(ControllerInterface) +main.java.controlp5.ControllerGroup : ColorPicker removeCanvas(Canvas) +main.java.controlp5.ControllerGroup : ColorPicker removeListener(ControlListener) +main.java.controlp5.ControllerGroup : ColorPicker removeProperty(String) +main.java.controlp5.ControllerGroup : ColorPicker removeProperty(String, String) +main.java.controlp5.ControllerGroup : ColorPicker setAddress(String) +main.java.controlp5.ControllerGroup : ColorPicker setArrayValue(float[]) +main.java.controlp5.ControllerGroup : ColorPicker setArrayValue(int, float) +main.java.controlp5.ControllerGroup : ColorPicker setCaptionLabel(String) +main.java.controlp5.ControllerGroup : ColorPicker setColor(CColor) +main.java.controlp5.ControllerGroup : ColorPicker setColorActive(int) +main.java.controlp5.ControllerGroup : ColorPicker setColorBackground(int) +main.java.controlp5.ControllerGroup : ColorPicker setColorForeground(int) +main.java.controlp5.ControllerGroup : ColorPicker setColorLabel(int) +main.java.controlp5.ControllerGroup : ColorPicker setColorValue(int) +main.java.controlp5.ControllerGroup : ColorPicker setHeight(int) +main.java.controlp5.ControllerGroup : ColorPicker setId(int) +main.java.controlp5.ControllerGroup : ColorPicker setLabel(String) +main.java.controlp5.ControllerGroup : ColorPicker setMouseOver(boolean) +main.java.controlp5.ControllerGroup : ColorPicker setMoveable(boolean) +main.java.controlp5.ControllerGroup : ColorPicker setOpen(boolean) +main.java.controlp5.ControllerGroup : ColorPicker setPosition(float, float) +main.java.controlp5.ControllerGroup : ColorPicker setPosition(float[]) +main.java.controlp5.ControllerGroup : ColorPicker setSize(int, int) +main.java.controlp5.ControllerGroup : ColorPicker setStringValue(String) +main.java.controlp5.ControllerGroup : ColorPicker setTitle(String) +main.java.controlp5.ControllerGroup : ColorPicker setUpdate(boolean) +main.java.controlp5.ControllerGroup : ColorPicker setValue(float) +main.java.controlp5.ControllerGroup : ColorPicker setVisible(boolean) +main.java.controlp5.ControllerGroup : ColorPicker setWidth(int) +main.java.controlp5.ControllerGroup : ColorPicker show() +main.java.controlp5.ControllerGroup : ColorPicker showArrow() +main.java.controlp5.ControllerGroup : ColorPicker showBar() +main.java.controlp5.ControllerGroup : ColorPicker update() +main.java.controlp5.ControllerGroup : ColorPicker updateAbsolutePosition() +main.java.controlp5.ControllerGroup : ControlWindow getWindow() +main.java.controlp5.ControllerGroup : Controller getController(String) +main.java.controlp5.ControllerGroup : ControllerProperty getProperty(String) +main.java.controlp5.ControllerGroup : ControllerProperty getProperty(String, String) +main.java.controlp5.ControllerGroup : Label getCaptionLabel() +main.java.controlp5.ControllerGroup : Label getValueLabel() +main.java.controlp5.ControllerGroup : String getAddress() +main.java.controlp5.ControllerGroup : String getInfo() +main.java.controlp5.ControllerGroup : String getName() +main.java.controlp5.ControllerGroup : String getStringValue() +main.java.controlp5.ControllerGroup : String toString() +main.java.controlp5.ControllerGroup : Tab getTab() +main.java.controlp5.ControllerGroup : boolean isBarVisible() +main.java.controlp5.ControllerGroup : boolean isCollapse() +main.java.controlp5.ControllerGroup : boolean isMouseOver() +main.java.controlp5.ControllerGroup : boolean isMoveable() +main.java.controlp5.ControllerGroup : boolean isOpen() +main.java.controlp5.ControllerGroup : boolean isUpdate() +main.java.controlp5.ControllerGroup : boolean isVisible() +main.java.controlp5.ControllerGroup : boolean setMousePressed(boolean) +main.java.controlp5.ControllerGroup : float getArrayValue(int) +main.java.controlp5.ControllerGroup : float getValue() +main.java.controlp5.ControllerGroup : float[] getArrayValue() +main.java.controlp5.ControllerGroup : float[] getPosition() +main.java.controlp5.ControllerGroup : int getHeight() +main.java.controlp5.ControllerGroup : int getId() +main.java.controlp5.ControllerGroup : int getWidth() +main.java.controlp5.ControllerGroup : int listenerSize() +main.java.controlp5.ControllerGroup : void controlEvent(ControlEvent) +main.java.controlp5.ControllerGroup : void remove() java.lang.Object : String toString() java.lang.Object : boolean equals(Object) diff --git a/examples/controllers/ControlP5controlTimer/ControlP5controlTimer.pde b/examples/controllers/ControlP5controlTimer/ControlP5controlTimer.pde index 7f4c583..0ac5a14 100644 --- a/examples/controllers/ControlP5controlTimer/ControlP5controlTimer.pde +++ b/examples/controllers/ControlP5controlTimer/ControlP5controlTimer.pde @@ -43,16 +43,16 @@ Format: ClassName : returnType methodName(parameter type) -controlP5.ControlTimer : String toString() -controlP5.ControlTimer : int day() -controlP5.ControlTimer : int hour() -controlP5.ControlTimer : int millis() -controlP5.ControlTimer : int minute() -controlP5.ControlTimer : int second() -controlP5.ControlTimer : long time() -controlP5.ControlTimer : void reset() -controlP5.ControlTimer : void setSpeedOfTime(float) -controlP5.ControlTimer : void update() +main.java.controlp5.ControlTimer : String toString() +main.java.controlp5.ControlTimer : int day() +main.java.controlp5.ControlTimer : int hour() +main.java.controlp5.ControlTimer : int millis() +main.java.controlp5.ControlTimer : int minute() +main.java.controlp5.ControlTimer : int second() +main.java.controlp5.ControlTimer : long time() +main.java.controlp5.ControlTimer : void reset() +main.java.controlp5.ControlTimer : void setSpeedOfTime(float) +main.java.controlp5.ControlTimer : void update() java.lang.Object : String toString() java.lang.Object : boolean equals(Object) diff --git a/examples/controllers/ControlP5controllerProperties/ControlP5controllerProperties.pde b/examples/controllers/ControlP5controllerProperties/ControlP5controllerProperties.pde index b6e293c..a04fa3b 100644 --- a/examples/controllers/ControlP5controllerProperties/ControlP5controllerProperties.pde +++ b/examples/controllers/ControlP5controllerProperties/ControlP5controllerProperties.pde @@ -125,36 +125,36 @@ 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(PropertiesStorageFormat) -controlP5.ControllerProperties : void setFormat(String) +main.java.controlp5.ControllerProperties : ArrayList getSnapshotIndices() +main.java.controlp5.ControllerProperties : ControllerProperties addSet(String) +main.java.controlp5.ControllerProperties : ControllerProperties delete(ControllerProperty) +main.java.controlp5.ControllerProperties : ControllerProperties getSnapshot(String) +main.java.controlp5.ControllerProperties : ControllerProperties move(ControllerInterface, String, String) +main.java.controlp5.ControllerProperties : ControllerProperties move(ControllerProperty, String, String) +main.java.controlp5.ControllerProperties : ControllerProperties only(ControllerProperty, String) +main.java.controlp5.ControllerProperties : ControllerProperties print() +main.java.controlp5.ControllerProperties : ControllerProperties register(ControllerInterface, String) +main.java.controlp5.ControllerProperties : ControllerProperties remove(ControllerInterface) +main.java.controlp5.ControllerProperties : ControllerProperties remove(ControllerInterface, String) +main.java.controlp5.ControllerProperties : ControllerProperties remove(ControllerInterface, String, String) +main.java.controlp5.ControllerProperties : ControllerProperties removeSnapshot(String) +main.java.controlp5.ControllerProperties : ControllerProperties saveSnapshot(String) +main.java.controlp5.ControllerProperties : ControllerProperties saveSnapshotAs(String, String) +main.java.controlp5.ControllerProperties : ControllerProperties setSnapshot(String) +main.java.controlp5.ControllerProperties : ControllerProperties updateSnapshot(String) +main.java.controlp5.ControllerProperties : ControllerProperty getProperty(ControllerInterface, String) +main.java.controlp5.ControllerProperties : ControllerProperty getProperty(ControllerInterface, String, String) +main.java.controlp5.ControllerProperties : ControllerProperty register(ControllerInterface, String, String) +main.java.controlp5.ControllerProperties : HashSet getPropertySet(ControllerInterface) +main.java.controlp5.ControllerProperties : List get(ControllerInterface) +main.java.controlp5.ControllerProperties : Map get() +main.java.controlp5.ControllerProperties : String toString() +main.java.controlp5.ControllerProperties : boolean load() +main.java.controlp5.ControllerProperties : boolean load(String) +main.java.controlp5.ControllerProperties : boolean save() +main.java.controlp5.ControllerProperties : boolean saveAs(String) +main.java.controlp5.ControllerProperties : void setFormat(PropertiesStorageFormat) +main.java.controlp5.ControllerProperties : void setFormat(String) java.lang.Object : String toString() java.lang.Object : boolean equals(Object) diff --git a/examples/controllers/ControlP5dropdownList/ControlP5dropdownList.pde b/examples/controllers/ControlP5dropdownList/ControlP5dropdownList.pde index 73e644a..02f60fa 100644 --- a/examples/controllers/ControlP5dropdownList/ControlP5dropdownList.pde +++ b/examples/controllers/ControlP5dropdownList/ControlP5dropdownList.pde @@ -141,166 +141,166 @@ Format: ClassName : returnType methodName(parameter type) -controlP5.Controller : CColor getColor() -controlP5.Controller : ControlBehavior getBehavior() -controlP5.Controller : ControlWindow getControlWindow() -controlP5.Controller : ControlWindow getWindow() -controlP5.Controller : ControllerProperty getProperty(String) -controlP5.Controller : ControllerProperty getProperty(String, String) -controlP5.Controller : ControllerView getView() -controlP5.Controller : DropdownList addCallback(CallbackListener) -controlP5.Controller : DropdownList addListener(ControlListener) -controlP5.Controller : DropdownList addListenerFor(int, CallbackListener) -controlP5.Controller : DropdownList align(int, int, int, int) -controlP5.Controller : DropdownList bringToFront() -controlP5.Controller : DropdownList bringToFront(ControllerInterface) -controlP5.Controller : DropdownList hide() -controlP5.Controller : DropdownList linebreak() -controlP5.Controller : DropdownList listen(boolean) -controlP5.Controller : DropdownList lock() -controlP5.Controller : DropdownList onChange(CallbackListener) -controlP5.Controller : DropdownList onClick(CallbackListener) -controlP5.Controller : DropdownList onDoublePress(CallbackListener) -controlP5.Controller : DropdownList onDrag(CallbackListener) -controlP5.Controller : DropdownList onDraw(ControllerView) -controlP5.Controller : DropdownList onEndDrag(CallbackListener) -controlP5.Controller : DropdownList onEnter(CallbackListener) -controlP5.Controller : DropdownList onLeave(CallbackListener) -controlP5.Controller : DropdownList onMove(CallbackListener) -controlP5.Controller : DropdownList onPress(CallbackListener) -controlP5.Controller : DropdownList onRelease(CallbackListener) -controlP5.Controller : DropdownList onReleaseOutside(CallbackListener) -controlP5.Controller : DropdownList onStartDrag(CallbackListener) -controlP5.Controller : DropdownList onWheel(CallbackListener) -controlP5.Controller : DropdownList plugTo(Object) -controlP5.Controller : DropdownList plugTo(Object, String) -controlP5.Controller : DropdownList plugTo(Object[]) -controlP5.Controller : DropdownList plugTo(Object[], String) -controlP5.Controller : DropdownList registerProperty(String) -controlP5.Controller : DropdownList registerProperty(String, String) -controlP5.Controller : DropdownList registerTooltip(String) -controlP5.Controller : DropdownList removeBehavior() -controlP5.Controller : DropdownList removeCallback() -controlP5.Controller : DropdownList removeCallback(CallbackListener) -controlP5.Controller : DropdownList removeListener(ControlListener) -controlP5.Controller : DropdownList removeListenerFor(int, CallbackListener) -controlP5.Controller : DropdownList removeListenersFor(int) -controlP5.Controller : DropdownList removeProperty(String) -controlP5.Controller : DropdownList removeProperty(String, String) -controlP5.Controller : DropdownList setArrayValue(float[]) -controlP5.Controller : DropdownList setArrayValue(int, float) -controlP5.Controller : DropdownList setBehavior(ControlBehavior) -controlP5.Controller : DropdownList setBroadcast(boolean) -controlP5.Controller : DropdownList setCaptionLabel(String) -controlP5.Controller : DropdownList setColor(CColor) -controlP5.Controller : DropdownList setColorActive(int) -controlP5.Controller : DropdownList setColorBackground(int) -controlP5.Controller : DropdownList setColorCaptionLabel(int) -controlP5.Controller : DropdownList setColorForeground(int) -controlP5.Controller : DropdownList setColorLabel(int) -controlP5.Controller : DropdownList setColorValue(int) -controlP5.Controller : DropdownList setColorValueLabel(int) -controlP5.Controller : DropdownList setDecimalPrecision(int) -controlP5.Controller : DropdownList setDefaultValue(float) -controlP5.Controller : DropdownList setHeight(int) -controlP5.Controller : DropdownList setId(int) -controlP5.Controller : DropdownList setImage(PImage) -controlP5.Controller : DropdownList setImage(PImage, int) -controlP5.Controller : DropdownList setImages(PImage, PImage, PImage) -controlP5.Controller : DropdownList setImages(PImage, PImage, PImage, PImage) -controlP5.Controller : DropdownList setLabel(String) -controlP5.Controller : DropdownList setLabelVisible(boolean) -controlP5.Controller : DropdownList setLock(boolean) -controlP5.Controller : DropdownList setMax(float) -controlP5.Controller : DropdownList setMin(float) -controlP5.Controller : DropdownList setMouseOver(boolean) -controlP5.Controller : DropdownList setMoveable(boolean) -controlP5.Controller : DropdownList setPosition(float, float) -controlP5.Controller : DropdownList setPosition(float[]) -controlP5.Controller : DropdownList setSize(PImage) -controlP5.Controller : DropdownList setSize(int, int) -controlP5.Controller : DropdownList setStringValue(String) -controlP5.Controller : DropdownList setUpdate(boolean) -controlP5.Controller : DropdownList setValue(float) -controlP5.Controller : DropdownList setValueLabel(String) -controlP5.Controller : DropdownList setValueSelf(float) -controlP5.Controller : DropdownList setView(ControllerView) -controlP5.Controller : DropdownList setVisible(boolean) -controlP5.Controller : DropdownList setWidth(int) -controlP5.Controller : DropdownList show() -controlP5.Controller : DropdownList unlock() -controlP5.Controller : DropdownList unplugFrom(Object) -controlP5.Controller : DropdownList unplugFrom(Object[]) -controlP5.Controller : DropdownList unregisterTooltip() -controlP5.Controller : DropdownList update() -controlP5.Controller : DropdownList updateSize() -controlP5.Controller : Label getCaptionLabel() -controlP5.Controller : Label getValueLabel() -controlP5.Controller : List getControllerPlugList() -controlP5.Controller : Pointer getPointer() -controlP5.Controller : String getAddress() -controlP5.Controller : String getInfo() -controlP5.Controller : String getName() -controlP5.Controller : String getStringValue() -controlP5.Controller : String toString() -controlP5.Controller : Tab getTab() -controlP5.Controller : boolean isActive() -controlP5.Controller : boolean isBroadcast() -controlP5.Controller : boolean isInside() -controlP5.Controller : boolean isLabelVisible() -controlP5.Controller : boolean isListening() -controlP5.Controller : boolean isLock() -controlP5.Controller : boolean isMouseOver() -controlP5.Controller : boolean isMousePressed() -controlP5.Controller : boolean isMoveable() -controlP5.Controller : boolean isUpdate() -controlP5.Controller : boolean isVisible() -controlP5.Controller : float getArrayValue(int) -controlP5.Controller : float getDefaultValue() -controlP5.Controller : float getMax() -controlP5.Controller : float getMin() -controlP5.Controller : float getValue() -controlP5.Controller : float[] getAbsolutePosition() -controlP5.Controller : float[] getArrayValue() -controlP5.Controller : float[] getPosition() -controlP5.Controller : int getDecimalPrecision() -controlP5.Controller : int getHeight() -controlP5.Controller : int getId() -controlP5.Controller : int getWidth() -controlP5.Controller : int listenerSize() -controlP5.Controller : void remove() -controlP5.Controller : void setView(ControllerView, int) -controlP5.DropdownList : DropdownList addItem(String, Object) -controlP5.DropdownList : DropdownList addItems(List) -controlP5.DropdownList : DropdownList addItems(Map) -controlP5.DropdownList : DropdownList addItems(String[]) -controlP5.DropdownList : DropdownList clear() -controlP5.DropdownList : DropdownList close() -controlP5.DropdownList : DropdownList open() -controlP5.DropdownList : DropdownList removeItem(String) -controlP5.DropdownList : DropdownList removeItems(List) -controlP5.DropdownList : DropdownList setBackgroundColor(int) -controlP5.DropdownList : DropdownList setBarHeight(int) -controlP5.DropdownList : DropdownList setBarVisible(boolean) -controlP5.DropdownList : DropdownList setItemHeight(int) -controlP5.DropdownList : DropdownList setItems(List) -controlP5.DropdownList : DropdownList setItems(Map) -controlP5.DropdownList : DropdownList setItems(String[]) -controlP5.DropdownList : DropdownList setOpen(boolean) -controlP5.DropdownList : DropdownList setScrollSensitivity(float) -controlP5.DropdownList : DropdownList setType(int) -controlP5.DropdownList : List getItems() -controlP5.DropdownList : Map getItem(String) -controlP5.DropdownList : Map getItem(int) -controlP5.DropdownList : boolean isBarVisible() -controlP5.DropdownList : boolean isOpen() -controlP5.DropdownList : int getBackgroundColor() -controlP5.DropdownList : int getBarHeight() -controlP5.DropdownList : int getHeight() -controlP5.DropdownList : void controlEvent(ControlEvent) -controlP5.DropdownList : void keyEvent(KeyEvent) -controlP5.DropdownList : void setDirection(int) -controlP5.DropdownList : void updateItemIndexOffset() +main.java.controlp5.Controller : CColor getColor() +main.java.controlp5.Controller : ControlBehavior getBehavior() +main.java.controlp5.Controller : ControlWindow getControlWindow() +main.java.controlp5.Controller : ControlWindow getWindow() +main.java.controlp5.Controller : ControllerProperty getProperty(String) +main.java.controlp5.Controller : ControllerProperty getProperty(String, String) +main.java.controlp5.Controller : ControllerView getView() +main.java.controlp5.Controller : DropdownList addCallback(CallbackListener) +main.java.controlp5.Controller : DropdownList addListener(ControlListener) +main.java.controlp5.Controller : DropdownList addListenerFor(int, CallbackListener) +main.java.controlp5.Controller : DropdownList align(int, int, int, int) +main.java.controlp5.Controller : DropdownList bringToFront() +main.java.controlp5.Controller : DropdownList bringToFront(ControllerInterface) +main.java.controlp5.Controller : DropdownList hide() +main.java.controlp5.Controller : DropdownList linebreak() +main.java.controlp5.Controller : DropdownList listen(boolean) +main.java.controlp5.Controller : DropdownList lock() +main.java.controlp5.Controller : DropdownList onChange(CallbackListener) +main.java.controlp5.Controller : DropdownList onClick(CallbackListener) +main.java.controlp5.Controller : DropdownList onDoublePress(CallbackListener) +main.java.controlp5.Controller : DropdownList onDrag(CallbackListener) +main.java.controlp5.Controller : DropdownList onDraw(ControllerView) +main.java.controlp5.Controller : DropdownList onEndDrag(CallbackListener) +main.java.controlp5.Controller : DropdownList onEnter(CallbackListener) +main.java.controlp5.Controller : DropdownList onLeave(CallbackListener) +main.java.controlp5.Controller : DropdownList onMove(CallbackListener) +main.java.controlp5.Controller : DropdownList onPress(CallbackListener) +main.java.controlp5.Controller : DropdownList onRelease(CallbackListener) +main.java.controlp5.Controller : DropdownList onReleaseOutside(CallbackListener) +main.java.controlp5.Controller : DropdownList onStartDrag(CallbackListener) +main.java.controlp5.Controller : DropdownList onWheel(CallbackListener) +main.java.controlp5.Controller : DropdownList plugTo(Object) +main.java.controlp5.Controller : DropdownList plugTo(Object, String) +main.java.controlp5.Controller : DropdownList plugTo(Object[]) +main.java.controlp5.Controller : DropdownList plugTo(Object[], String) +main.java.controlp5.Controller : DropdownList registerProperty(String) +main.java.controlp5.Controller : DropdownList registerProperty(String, String) +main.java.controlp5.Controller : DropdownList registerTooltip(String) +main.java.controlp5.Controller : DropdownList removeBehavior() +main.java.controlp5.Controller : DropdownList removeCallback() +main.java.controlp5.Controller : DropdownList removeCallback(CallbackListener) +main.java.controlp5.Controller : DropdownList removeListener(ControlListener) +main.java.controlp5.Controller : DropdownList removeListenerFor(int, CallbackListener) +main.java.controlp5.Controller : DropdownList removeListenersFor(int) +main.java.controlp5.Controller : DropdownList removeProperty(String) +main.java.controlp5.Controller : DropdownList removeProperty(String, String) +main.java.controlp5.Controller : DropdownList setArrayValue(float[]) +main.java.controlp5.Controller : DropdownList setArrayValue(int, float) +main.java.controlp5.Controller : DropdownList setBehavior(ControlBehavior) +main.java.controlp5.Controller : DropdownList setBroadcast(boolean) +main.java.controlp5.Controller : DropdownList setCaptionLabel(String) +main.java.controlp5.Controller : DropdownList setColor(CColor) +main.java.controlp5.Controller : DropdownList setColorActive(int) +main.java.controlp5.Controller : DropdownList setColorBackground(int) +main.java.controlp5.Controller : DropdownList setColorCaptionLabel(int) +main.java.controlp5.Controller : DropdownList setColorForeground(int) +main.java.controlp5.Controller : DropdownList setColorLabel(int) +main.java.controlp5.Controller : DropdownList setColorValue(int) +main.java.controlp5.Controller : DropdownList setColorValueLabel(int) +main.java.controlp5.Controller : DropdownList setDecimalPrecision(int) +main.java.controlp5.Controller : DropdownList setDefaultValue(float) +main.java.controlp5.Controller : DropdownList setHeight(int) +main.java.controlp5.Controller : DropdownList setId(int) +main.java.controlp5.Controller : DropdownList setImage(PImage) +main.java.controlp5.Controller : DropdownList setImage(PImage, int) +main.java.controlp5.Controller : DropdownList setImages(PImage, PImage, PImage) +main.java.controlp5.Controller : DropdownList setImages(PImage, PImage, PImage, PImage) +main.java.controlp5.Controller : DropdownList setLabel(String) +main.java.controlp5.Controller : DropdownList setLabelVisible(boolean) +main.java.controlp5.Controller : DropdownList setLock(boolean) +main.java.controlp5.Controller : DropdownList setMax(float) +main.java.controlp5.Controller : DropdownList setMin(float) +main.java.controlp5.Controller : DropdownList setMouseOver(boolean) +main.java.controlp5.Controller : DropdownList setMoveable(boolean) +main.java.controlp5.Controller : DropdownList setPosition(float, float) +main.java.controlp5.Controller : DropdownList setPosition(float[]) +main.java.controlp5.Controller : DropdownList setSize(PImage) +main.java.controlp5.Controller : DropdownList setSize(int, int) +main.java.controlp5.Controller : DropdownList setStringValue(String) +main.java.controlp5.Controller : DropdownList setUpdate(boolean) +main.java.controlp5.Controller : DropdownList setValue(float) +main.java.controlp5.Controller : DropdownList setValueLabel(String) +main.java.controlp5.Controller : DropdownList setValueSelf(float) +main.java.controlp5.Controller : DropdownList setView(ControllerView) +main.java.controlp5.Controller : DropdownList setVisible(boolean) +main.java.controlp5.Controller : DropdownList setWidth(int) +main.java.controlp5.Controller : DropdownList show() +main.java.controlp5.Controller : DropdownList unlock() +main.java.controlp5.Controller : DropdownList unplugFrom(Object) +main.java.controlp5.Controller : DropdownList unplugFrom(Object[]) +main.java.controlp5.Controller : DropdownList unregisterTooltip() +main.java.controlp5.Controller : DropdownList update() +main.java.controlp5.Controller : DropdownList updateSize() +main.java.controlp5.Controller : Label getCaptionLabel() +main.java.controlp5.Controller : Label getValueLabel() +main.java.controlp5.Controller : List getControllerPlugList() +main.java.controlp5.Controller : Pointer getPointer() +main.java.controlp5.Controller : String getAddress() +main.java.controlp5.Controller : String getInfo() +main.java.controlp5.Controller : String getName() +main.java.controlp5.Controller : String getStringValue() +main.java.controlp5.Controller : String toString() +main.java.controlp5.Controller : Tab getTab() +main.java.controlp5.Controller : boolean isActive() +main.java.controlp5.Controller : boolean isBroadcast() +main.java.controlp5.Controller : boolean isInside() +main.java.controlp5.Controller : boolean isLabelVisible() +main.java.controlp5.Controller : boolean isListening() +main.java.controlp5.Controller : boolean isLock() +main.java.controlp5.Controller : boolean isMouseOver() +main.java.controlp5.Controller : boolean isMousePressed() +main.java.controlp5.Controller : boolean isMoveable() +main.java.controlp5.Controller : boolean isUpdate() +main.java.controlp5.Controller : boolean isVisible() +main.java.controlp5.Controller : float getArrayValue(int) +main.java.controlp5.Controller : float getDefaultValue() +main.java.controlp5.Controller : float getMax() +main.java.controlp5.Controller : float getMin() +main.java.controlp5.Controller : float getValue() +main.java.controlp5.Controller : float[] getAbsolutePosition() +main.java.controlp5.Controller : float[] getArrayValue() +main.java.controlp5.Controller : float[] getPosition() +main.java.controlp5.Controller : int getDecimalPrecision() +main.java.controlp5.Controller : int getHeight() +main.java.controlp5.Controller : int getId() +main.java.controlp5.Controller : int getWidth() +main.java.controlp5.Controller : int listenerSize() +main.java.controlp5.Controller : void remove() +main.java.controlp5.Controller : void setView(ControllerView, int) +main.java.controlp5.DropdownList : DropdownList addItem(String, Object) +main.java.controlp5.DropdownList : DropdownList addItems(List) +main.java.controlp5.DropdownList : DropdownList addItems(Map) +main.java.controlp5.DropdownList : DropdownList addItems(String[]) +main.java.controlp5.DropdownList : DropdownList clear() +main.java.controlp5.DropdownList : DropdownList close() +main.java.controlp5.DropdownList : DropdownList open() +main.java.controlp5.DropdownList : DropdownList removeItem(String) +main.java.controlp5.DropdownList : DropdownList removeItems(List) +main.java.controlp5.DropdownList : DropdownList setBackgroundColor(int) +main.java.controlp5.DropdownList : DropdownList setBarHeight(int) +main.java.controlp5.DropdownList : DropdownList setBarVisible(boolean) +main.java.controlp5.DropdownList : DropdownList setItemHeight(int) +main.java.controlp5.DropdownList : DropdownList setItems(List) +main.java.controlp5.DropdownList : DropdownList setItems(Map) +main.java.controlp5.DropdownList : DropdownList setItems(String[]) +main.java.controlp5.DropdownList : DropdownList setOpen(boolean) +main.java.controlp5.DropdownList : DropdownList setScrollSensitivity(float) +main.java.controlp5.DropdownList : DropdownList setType(int) +main.java.controlp5.DropdownList : List getItems() +main.java.controlp5.DropdownList : Map getItem(String) +main.java.controlp5.DropdownList : Map getItem(int) +main.java.controlp5.DropdownList : boolean isBarVisible() +main.java.controlp5.DropdownList : boolean isOpen() +main.java.controlp5.DropdownList : int getBackgroundColor() +main.java.controlp5.DropdownList : int getBarHeight() +main.java.controlp5.DropdownList : int getHeight() +main.java.controlp5.DropdownList : void controlEvent(ControlEvent) +main.java.controlp5.DropdownList : void keyEvent(KeyEvent) +main.java.controlp5.DropdownList : void setDirection(int) +main.java.controlp5.DropdownList : void updateItemIndexOffset() java.lang.Object : String toString() java.lang.Object : boolean equals(Object) diff --git a/examples/controllers/ControlP5group/ControlP5group.pde b/examples/controllers/ControlP5group/ControlP5group.pde index bdece31..c245580 100644 --- a/examples/controllers/ControlP5group/ControlP5group.pde +++ b/examples/controllers/ControlP5group/ControlP5group.pde @@ -129,102 +129,102 @@ Format: ClassName : returnType methodName(parameter type) -controlP5.ControlGroup : Group activateEvent(boolean) -controlP5.ControlGroup : Group addListener(ControlListener) -controlP5.ControlGroup : Group removeListener(ControlListener) -controlP5.ControlGroup : Group setBackgroundColor(int) -controlP5.ControlGroup : Group setBackgroundHeight(int) -controlP5.ControlGroup : Group setBarHeight(int) -controlP5.ControlGroup : Group setSize(int, int) -controlP5.ControlGroup : Group updateInternalEvents(PApplet) -controlP5.ControlGroup : String getInfo() -controlP5.ControlGroup : String toString() -controlP5.ControlGroup : int getBackgroundHeight() -controlP5.ControlGroup : int getBarHeight() -controlP5.ControlGroup : int listenerSize() -controlP5.ControllerGroup : CColor getColor() -controlP5.ControllerGroup : Canvas addCanvas(Canvas) -controlP5.ControllerGroup : ControlWindow getWindow() -controlP5.ControllerGroup : Controller getController(String) -controlP5.ControllerGroup : ControllerProperty getProperty(String) -controlP5.ControllerGroup : ControllerProperty getProperty(String, String) -controlP5.ControllerGroup : Group add(ControllerInterface) -controlP5.ControllerGroup : Group addListener(ControlListener) -controlP5.ControllerGroup : Group bringToFront() -controlP5.ControllerGroup : Group bringToFront(ControllerInterface) -controlP5.ControllerGroup : Group close() -controlP5.ControllerGroup : Group disableCollapse() -controlP5.ControllerGroup : Group enableCollapse() -controlP5.ControllerGroup : Group hide() -controlP5.ControllerGroup : Group hideArrow() -controlP5.ControllerGroup : Group hideBar() -controlP5.ControllerGroup : Group moveTo(ControlWindow) -controlP5.ControllerGroup : Group moveTo(PApplet) -controlP5.ControllerGroup : Group open() -controlP5.ControllerGroup : Group registerProperty(String) -controlP5.ControllerGroup : Group registerProperty(String, String) -controlP5.ControllerGroup : Group remove(CDrawable) -controlP5.ControllerGroup : Group remove(ControllerInterface) -controlP5.ControllerGroup : Group removeCanvas(Canvas) -controlP5.ControllerGroup : Group removeListener(ControlListener) -controlP5.ControllerGroup : Group removeProperty(String) -controlP5.ControllerGroup : Group removeProperty(String, String) -controlP5.ControllerGroup : Group setAddress(String) -controlP5.ControllerGroup : Group setArrayValue(float[]) -controlP5.ControllerGroup : Group setArrayValue(int, float) -controlP5.ControllerGroup : Group setCaptionLabel(String) -controlP5.ControllerGroup : Group setColor(CColor) -controlP5.ControllerGroup : Group setColorActive(int) -controlP5.ControllerGroup : Group setColorBackground(int) -controlP5.ControllerGroup : Group setColorForeground(int) -controlP5.ControllerGroup : Group setColorLabel(int) -controlP5.ControllerGroup : Group setColorValue(int) -controlP5.ControllerGroup : Group setHeight(int) -controlP5.ControllerGroup : Group setId(int) -controlP5.ControllerGroup : Group setLabel(String) -controlP5.ControllerGroup : Group setMouseOver(boolean) -controlP5.ControllerGroup : Group setMoveable(boolean) -controlP5.ControllerGroup : Group setOpen(boolean) -controlP5.ControllerGroup : Group setPosition(float, float) -controlP5.ControllerGroup : Group setPosition(float[]) -controlP5.ControllerGroup : Group setSize(int, int) -controlP5.ControllerGroup : Group setStringValue(String) -controlP5.ControllerGroup : Group setTitle(String) -controlP5.ControllerGroup : Group setUpdate(boolean) -controlP5.ControllerGroup : Group setValue(float) -controlP5.ControllerGroup : Group setVisible(boolean) -controlP5.ControllerGroup : Group setWidth(int) -controlP5.ControllerGroup : Group show() -controlP5.ControllerGroup : Group showArrow() -controlP5.ControllerGroup : Group showBar() -controlP5.ControllerGroup : Group update() -controlP5.ControllerGroup : Group updateAbsolutePosition() -controlP5.ControllerGroup : Label getCaptionLabel() -controlP5.ControllerGroup : Label getValueLabel() -controlP5.ControllerGroup : String getAddress() -controlP5.ControllerGroup : String getInfo() -controlP5.ControllerGroup : String getName() -controlP5.ControllerGroup : String getStringValue() -controlP5.ControllerGroup : String toString() -controlP5.ControllerGroup : Tab getTab() -controlP5.ControllerGroup : boolean isBarVisible() -controlP5.ControllerGroup : boolean isCollapse() -controlP5.ControllerGroup : boolean isMouseOver() -controlP5.ControllerGroup : boolean isMoveable() -controlP5.ControllerGroup : boolean isOpen() -controlP5.ControllerGroup : boolean isUpdate() -controlP5.ControllerGroup : boolean isVisible() -controlP5.ControllerGroup : boolean setMousePressed(boolean) -controlP5.ControllerGroup : float getArrayValue(int) -controlP5.ControllerGroup : float getValue() -controlP5.ControllerGroup : float[] getArrayValue() -controlP5.ControllerGroup : float[] getPosition() -controlP5.ControllerGroup : int getHeight() -controlP5.ControllerGroup : int getId() -controlP5.ControllerGroup : int getWidth() -controlP5.ControllerGroup : int listenerSize() -controlP5.ControllerGroup : void controlEvent(ControlEvent) -controlP5.ControllerGroup : void remove() +main.java.controlp5.ControlGroup : Group activateEvent(boolean) +main.java.controlp5.ControlGroup : Group addListener(ControlListener) +main.java.controlp5.ControlGroup : Group removeListener(ControlListener) +main.java.controlp5.ControlGroup : Group setBackgroundColor(int) +main.java.controlp5.ControlGroup : Group setBackgroundHeight(int) +main.java.controlp5.ControlGroup : Group setBarHeight(int) +main.java.controlp5.ControlGroup : Group setSize(int, int) +main.java.controlp5.ControlGroup : Group updateInternalEvents(PApplet) +main.java.controlp5.ControlGroup : String getInfo() +main.java.controlp5.ControlGroup : String toString() +main.java.controlp5.ControlGroup : int getBackgroundHeight() +main.java.controlp5.ControlGroup : int getBarHeight() +main.java.controlp5.ControlGroup : int listenerSize() +main.java.controlp5.ControllerGroup : CColor getColor() +main.java.controlp5.ControllerGroup : Canvas addCanvas(Canvas) +main.java.controlp5.ControllerGroup : ControlWindow getWindow() +main.java.controlp5.ControllerGroup : Controller getController(String) +main.java.controlp5.ControllerGroup : ControllerProperty getProperty(String) +main.java.controlp5.ControllerGroup : ControllerProperty getProperty(String, String) +main.java.controlp5.ControllerGroup : Group add(ControllerInterface) +main.java.controlp5.ControllerGroup : Group addListener(ControlListener) +main.java.controlp5.ControllerGroup : Group bringToFront() +main.java.controlp5.ControllerGroup : Group bringToFront(ControllerInterface) +main.java.controlp5.ControllerGroup : Group close() +main.java.controlp5.ControllerGroup : Group disableCollapse() +main.java.controlp5.ControllerGroup : Group enableCollapse() +main.java.controlp5.ControllerGroup : Group hide() +main.java.controlp5.ControllerGroup : Group hideArrow() +main.java.controlp5.ControllerGroup : Group hideBar() +main.java.controlp5.ControllerGroup : Group moveTo(ControlWindow) +main.java.controlp5.ControllerGroup : Group moveTo(PApplet) +main.java.controlp5.ControllerGroup : Group open() +main.java.controlp5.ControllerGroup : Group registerProperty(String) +main.java.controlp5.ControllerGroup : Group registerProperty(String, String) +main.java.controlp5.ControllerGroup : Group remove(CDrawable) +main.java.controlp5.ControllerGroup : Group remove(ControllerInterface) +main.java.controlp5.ControllerGroup : Group removeCanvas(Canvas) +main.java.controlp5.ControllerGroup : Group removeListener(ControlListener) +main.java.controlp5.ControllerGroup : Group removeProperty(String) +main.java.controlp5.ControllerGroup : Group removeProperty(String, String) +main.java.controlp5.ControllerGroup : Group setAddress(String) +main.java.controlp5.ControllerGroup : Group setArrayValue(float[]) +main.java.controlp5.ControllerGroup : Group setArrayValue(int, float) +main.java.controlp5.ControllerGroup : Group setCaptionLabel(String) +main.java.controlp5.ControllerGroup : Group setColor(CColor) +main.java.controlp5.ControllerGroup : Group setColorActive(int) +main.java.controlp5.ControllerGroup : Group setColorBackground(int) +main.java.controlp5.ControllerGroup : Group setColorForeground(int) +main.java.controlp5.ControllerGroup : Group setColorLabel(int) +main.java.controlp5.ControllerGroup : Group setColorValue(int) +main.java.controlp5.ControllerGroup : Group setHeight(int) +main.java.controlp5.ControllerGroup : Group setId(int) +main.java.controlp5.ControllerGroup : Group setLabel(String) +main.java.controlp5.ControllerGroup : Group setMouseOver(boolean) +main.java.controlp5.ControllerGroup : Group setMoveable(boolean) +main.java.controlp5.ControllerGroup : Group setOpen(boolean) +main.java.controlp5.ControllerGroup : Group setPosition(float, float) +main.java.controlp5.ControllerGroup : Group setPosition(float[]) +main.java.controlp5.ControllerGroup : Group setSize(int, int) +main.java.controlp5.ControllerGroup : Group setStringValue(String) +main.java.controlp5.ControllerGroup : Group setTitle(String) +main.java.controlp5.ControllerGroup : Group setUpdate(boolean) +main.java.controlp5.ControllerGroup : Group setValue(float) +main.java.controlp5.ControllerGroup : Group setVisible(boolean) +main.java.controlp5.ControllerGroup : Group setWidth(int) +main.java.controlp5.ControllerGroup : Group show() +main.java.controlp5.ControllerGroup : Group showArrow() +main.java.controlp5.ControllerGroup : Group showBar() +main.java.controlp5.ControllerGroup : Group update() +main.java.controlp5.ControllerGroup : Group updateAbsolutePosition() +main.java.controlp5.ControllerGroup : Label getCaptionLabel() +main.java.controlp5.ControllerGroup : Label getValueLabel() +main.java.controlp5.ControllerGroup : String getAddress() +main.java.controlp5.ControllerGroup : String getInfo() +main.java.controlp5.ControllerGroup : String getName() +main.java.controlp5.ControllerGroup : String getStringValue() +main.java.controlp5.ControllerGroup : String toString() +main.java.controlp5.ControllerGroup : Tab getTab() +main.java.controlp5.ControllerGroup : boolean isBarVisible() +main.java.controlp5.ControllerGroup : boolean isCollapse() +main.java.controlp5.ControllerGroup : boolean isMouseOver() +main.java.controlp5.ControllerGroup : boolean isMoveable() +main.java.controlp5.ControllerGroup : boolean isOpen() +main.java.controlp5.ControllerGroup : boolean isUpdate() +main.java.controlp5.ControllerGroup : boolean isVisible() +main.java.controlp5.ControllerGroup : boolean setMousePressed(boolean) +main.java.controlp5.ControllerGroup : float getArrayValue(int) +main.java.controlp5.ControllerGroup : float getValue() +main.java.controlp5.ControllerGroup : float[] getArrayValue() +main.java.controlp5.ControllerGroup : float[] getPosition() +main.java.controlp5.ControllerGroup : int getHeight() +main.java.controlp5.ControllerGroup : int getId() +main.java.controlp5.ControllerGroup : int getWidth() +main.java.controlp5.ControllerGroup : int listenerSize() +main.java.controlp5.ControllerGroup : void controlEvent(ControlEvent) +main.java.controlp5.ControllerGroup : void remove() java.lang.Object : String toString() java.lang.Object : boolean equals(Object) diff --git a/examples/controllers/ControlP5icon/ControlP5icon.pde b/examples/controllers/ControlP5icon/ControlP5icon.pde index ad686a6..ce8d4ef 100644 --- a/examples/controllers/ControlP5icon/ControlP5icon.pde +++ b/examples/controllers/ControlP5icon/ControlP5icon.pde @@ -50,164 +50,164 @@ Format: ClassName : returnType methodName(parameter type) -controlP5.Controller : CColor getColor() -controlP5.Controller : ControlBehavior getBehavior() -controlP5.Controller : ControlWindow getControlWindow() -controlP5.Controller : ControlWindow getWindow() -controlP5.Controller : ControllerProperty getProperty(String) -controlP5.Controller : ControllerProperty getProperty(String, String) -controlP5.Controller : ControllerView getView() -controlP5.Controller : Icon addCallback(CallbackListener) -controlP5.Controller : Icon addListener(ControlListener) -controlP5.Controller : Icon addListenerFor(int, CallbackListener) -controlP5.Controller : Icon align(int, int, int, int) -controlP5.Controller : Icon bringToFront() -controlP5.Controller : Icon bringToFront(ControllerInterface) -controlP5.Controller : Icon hide() -controlP5.Controller : Icon linebreak() -controlP5.Controller : Icon listen(boolean) -controlP5.Controller : Icon lock() -controlP5.Controller : Icon onChange(CallbackListener) -controlP5.Controller : Icon onClick(CallbackListener) -controlP5.Controller : Icon onDoublePress(CallbackListener) -controlP5.Controller : Icon onDrag(CallbackListener) -controlP5.Controller : Icon onDraw(ControllerView) -controlP5.Controller : Icon onEndDrag(CallbackListener) -controlP5.Controller : Icon onEnter(CallbackListener) -controlP5.Controller : Icon onLeave(CallbackListener) -controlP5.Controller : Icon onMove(CallbackListener) -controlP5.Controller : Icon onPress(CallbackListener) -controlP5.Controller : Icon onRelease(CallbackListener) -controlP5.Controller : Icon onReleaseOutside(CallbackListener) -controlP5.Controller : Icon onStartDrag(CallbackListener) -controlP5.Controller : Icon onWheel(CallbackListener) -controlP5.Controller : Icon plugTo(Object) -controlP5.Controller : Icon plugTo(Object, String) -controlP5.Controller : Icon plugTo(Object[]) -controlP5.Controller : Icon plugTo(Object[], String) -controlP5.Controller : Icon registerProperty(String) -controlP5.Controller : Icon registerProperty(String, String) -controlP5.Controller : Icon registerTooltip(String) -controlP5.Controller : Icon removeBehavior() -controlP5.Controller : Icon removeCallback() -controlP5.Controller : Icon removeCallback(CallbackListener) -controlP5.Controller : Icon removeListener(ControlListener) -controlP5.Controller : Icon removeListenerFor(int, CallbackListener) -controlP5.Controller : Icon removeListenersFor(int) -controlP5.Controller : Icon removeProperty(String) -controlP5.Controller : Icon removeProperty(String, String) -controlP5.Controller : Icon setArrayValue(float[]) -controlP5.Controller : Icon setArrayValue(int, float) -controlP5.Controller : Icon setBehavior(ControlBehavior) -controlP5.Controller : Icon setBroadcast(boolean) -controlP5.Controller : Icon setCaptionLabel(String) -controlP5.Controller : Icon setColor(CColor) -controlP5.Controller : Icon setColorActive(int) -controlP5.Controller : Icon setColorBackground(int) -controlP5.Controller : Icon setColorCaptionLabel(int) -controlP5.Controller : Icon setColorForeground(int) -controlP5.Controller : Icon setColorLabel(int) -controlP5.Controller : Icon setColorValue(int) -controlP5.Controller : Icon setColorValueLabel(int) -controlP5.Controller : Icon setDecimalPrecision(int) -controlP5.Controller : Icon setDefaultValue(float) -controlP5.Controller : Icon setHeight(int) -controlP5.Controller : Icon setId(int) -controlP5.Controller : Icon setImage(PImage) -controlP5.Controller : Icon setImage(PImage, int) -controlP5.Controller : Icon setImages(PImage, PImage, PImage) -controlP5.Controller : Icon setImages(PImage, PImage, PImage, PImage) -controlP5.Controller : Icon setLabel(String) -controlP5.Controller : Icon setLabelVisible(boolean) -controlP5.Controller : Icon setLock(boolean) -controlP5.Controller : Icon setMax(float) -controlP5.Controller : Icon setMin(float) -controlP5.Controller : Icon setMouseOver(boolean) -controlP5.Controller : Icon setMoveable(boolean) -controlP5.Controller : Icon setPosition(float, float) -controlP5.Controller : Icon setPosition(float[]) -controlP5.Controller : Icon setSize(PImage) -controlP5.Controller : Icon setSize(int, int) -controlP5.Controller : Icon setStringValue(String) -controlP5.Controller : Icon setUpdate(boolean) -controlP5.Controller : Icon setValue(float) -controlP5.Controller : Icon setValueLabel(String) -controlP5.Controller : Icon setValueSelf(float) -controlP5.Controller : Icon setView(ControllerView) -controlP5.Controller : Icon setVisible(boolean) -controlP5.Controller : Icon setWidth(int) -controlP5.Controller : Icon show() -controlP5.Controller : Icon unlock() -controlP5.Controller : Icon unplugFrom(Object) -controlP5.Controller : Icon unplugFrom(Object[]) -controlP5.Controller : Icon unregisterTooltip() -controlP5.Controller : Icon update() -controlP5.Controller : Icon updateSize() -controlP5.Controller : Label getCaptionLabel() -controlP5.Controller : Label getValueLabel() -controlP5.Controller : List getControllerPlugList() -controlP5.Controller : Pointer getPointer() -controlP5.Controller : String getAddress() -controlP5.Controller : String getInfo() -controlP5.Controller : String getName() -controlP5.Controller : String getStringValue() -controlP5.Controller : String toString() -controlP5.Controller : Tab getTab() -controlP5.Controller : boolean isActive() -controlP5.Controller : boolean isBroadcast() -controlP5.Controller : boolean isInside() -controlP5.Controller : boolean isLabelVisible() -controlP5.Controller : boolean isListening() -controlP5.Controller : boolean isLock() -controlP5.Controller : boolean isMouseOver() -controlP5.Controller : boolean isMousePressed() -controlP5.Controller : boolean isMoveable() -controlP5.Controller : boolean isUpdate() -controlP5.Controller : boolean isVisible() -controlP5.Controller : float getArrayValue(int) -controlP5.Controller : float getDefaultValue() -controlP5.Controller : float getMax() -controlP5.Controller : float getMin() -controlP5.Controller : float getValue() -controlP5.Controller : float[] getAbsolutePosition() -controlP5.Controller : float[] getArrayValue() -controlP5.Controller : float[] getPosition() -controlP5.Controller : int getDecimalPrecision() -controlP5.Controller : int getHeight() -controlP5.Controller : int getId() -controlP5.Controller : int getWidth() -controlP5.Controller : int listenerSize() -controlP5.Controller : void remove() -controlP5.Controller : void setView(ControllerView, int) -controlP5.Icon : Icon activateBy(int) -controlP5.Icon : Icon hideBackground() -controlP5.Icon : Icon setFill(boolean) -controlP5.Icon : Icon setFont(PFont) -controlP5.Icon : Icon setFont(PFont, int) -controlP5.Icon : Icon setFontIcon(int) -controlP5.Icon : Icon setFontIcon(int, int) -controlP5.Icon : Icon setFontIconOff(int) -controlP5.Icon : Icon setFontIconOn(int) -controlP5.Icon : Icon setFontIconSize(int) -controlP5.Icon : Icon setFontIcons(int, int) -controlP5.Icon : Icon setFontIndex(int) -controlP5.Icon : Icon setOff() -controlP5.Icon : Icon setOn() -controlP5.Icon : Icon setRoundedCorners(int) -controlP5.Icon : Icon setScale(float, float) -controlP5.Icon : Icon setStroke(boolean) -controlP5.Icon : Icon setStrokeWeight(float) -controlP5.Icon : Icon setSwitch(boolean) -controlP5.Icon : Icon setValue(float) -controlP5.Icon : Icon showBackground() -controlP5.Icon : Icon update() -controlP5.Icon : String getInfo() -controlP5.Icon : String toString() -controlP5.Icon : boolean getBooleanValue() -controlP5.Icon : boolean isOn() -controlP5.Icon : boolean isPressed() -controlP5.Icon : boolean isSwitch() -controlP5.Icon : int getFontIcon(int) +main.java.controlp5.Controller : CColor getColor() +main.java.controlp5.Controller : ControlBehavior getBehavior() +main.java.controlp5.Controller : ControlWindow getControlWindow() +main.java.controlp5.Controller : ControlWindow getWindow() +main.java.controlp5.Controller : ControllerProperty getProperty(String) +main.java.controlp5.Controller : ControllerProperty getProperty(String, String) +main.java.controlp5.Controller : ControllerView getView() +main.java.controlp5.Controller : Icon addCallback(CallbackListener) +main.java.controlp5.Controller : Icon addListener(ControlListener) +main.java.controlp5.Controller : Icon addListenerFor(int, CallbackListener) +main.java.controlp5.Controller : Icon align(int, int, int, int) +main.java.controlp5.Controller : Icon bringToFront() +main.java.controlp5.Controller : Icon bringToFront(ControllerInterface) +main.java.controlp5.Controller : Icon hide() +main.java.controlp5.Controller : Icon linebreak() +main.java.controlp5.Controller : Icon listen(boolean) +main.java.controlp5.Controller : Icon lock() +main.java.controlp5.Controller : Icon onChange(CallbackListener) +main.java.controlp5.Controller : Icon onClick(CallbackListener) +main.java.controlp5.Controller : Icon onDoublePress(CallbackListener) +main.java.controlp5.Controller : Icon onDrag(CallbackListener) +main.java.controlp5.Controller : Icon onDraw(ControllerView) +main.java.controlp5.Controller : Icon onEndDrag(CallbackListener) +main.java.controlp5.Controller : Icon onEnter(CallbackListener) +main.java.controlp5.Controller : Icon onLeave(CallbackListener) +main.java.controlp5.Controller : Icon onMove(CallbackListener) +main.java.controlp5.Controller : Icon onPress(CallbackListener) +main.java.controlp5.Controller : Icon onRelease(CallbackListener) +main.java.controlp5.Controller : Icon onReleaseOutside(CallbackListener) +main.java.controlp5.Controller : Icon onStartDrag(CallbackListener) +main.java.controlp5.Controller : Icon onWheel(CallbackListener) +main.java.controlp5.Controller : Icon plugTo(Object) +main.java.controlp5.Controller : Icon plugTo(Object, String) +main.java.controlp5.Controller : Icon plugTo(Object[]) +main.java.controlp5.Controller : Icon plugTo(Object[], String) +main.java.controlp5.Controller : Icon registerProperty(String) +main.java.controlp5.Controller : Icon registerProperty(String, String) +main.java.controlp5.Controller : Icon registerTooltip(String) +main.java.controlp5.Controller : Icon removeBehavior() +main.java.controlp5.Controller : Icon removeCallback() +main.java.controlp5.Controller : Icon removeCallback(CallbackListener) +main.java.controlp5.Controller : Icon removeListener(ControlListener) +main.java.controlp5.Controller : Icon removeListenerFor(int, CallbackListener) +main.java.controlp5.Controller : Icon removeListenersFor(int) +main.java.controlp5.Controller : Icon removeProperty(String) +main.java.controlp5.Controller : Icon removeProperty(String, String) +main.java.controlp5.Controller : Icon setArrayValue(float[]) +main.java.controlp5.Controller : Icon setArrayValue(int, float) +main.java.controlp5.Controller : Icon setBehavior(ControlBehavior) +main.java.controlp5.Controller : Icon setBroadcast(boolean) +main.java.controlp5.Controller : Icon setCaptionLabel(String) +main.java.controlp5.Controller : Icon setColor(CColor) +main.java.controlp5.Controller : Icon setColorActive(int) +main.java.controlp5.Controller : Icon setColorBackground(int) +main.java.controlp5.Controller : Icon setColorCaptionLabel(int) +main.java.controlp5.Controller : Icon setColorForeground(int) +main.java.controlp5.Controller : Icon setColorLabel(int) +main.java.controlp5.Controller : Icon setColorValue(int) +main.java.controlp5.Controller : Icon setColorValueLabel(int) +main.java.controlp5.Controller : Icon setDecimalPrecision(int) +main.java.controlp5.Controller : Icon setDefaultValue(float) +main.java.controlp5.Controller : Icon setHeight(int) +main.java.controlp5.Controller : Icon setId(int) +main.java.controlp5.Controller : Icon setImage(PImage) +main.java.controlp5.Controller : Icon setImage(PImage, int) +main.java.controlp5.Controller : Icon setImages(PImage, PImage, PImage) +main.java.controlp5.Controller : Icon setImages(PImage, PImage, PImage, PImage) +main.java.controlp5.Controller : Icon setLabel(String) +main.java.controlp5.Controller : Icon setLabelVisible(boolean) +main.java.controlp5.Controller : Icon setLock(boolean) +main.java.controlp5.Controller : Icon setMax(float) +main.java.controlp5.Controller : Icon setMin(float) +main.java.controlp5.Controller : Icon setMouseOver(boolean) +main.java.controlp5.Controller : Icon setMoveable(boolean) +main.java.controlp5.Controller : Icon setPosition(float, float) +main.java.controlp5.Controller : Icon setPosition(float[]) +main.java.controlp5.Controller : Icon setSize(PImage) +main.java.controlp5.Controller : Icon setSize(int, int) +main.java.controlp5.Controller : Icon setStringValue(String) +main.java.controlp5.Controller : Icon setUpdate(boolean) +main.java.controlp5.Controller : Icon setValue(float) +main.java.controlp5.Controller : Icon setValueLabel(String) +main.java.controlp5.Controller : Icon setValueSelf(float) +main.java.controlp5.Controller : Icon setView(ControllerView) +main.java.controlp5.Controller : Icon setVisible(boolean) +main.java.controlp5.Controller : Icon setWidth(int) +main.java.controlp5.Controller : Icon show() +main.java.controlp5.Controller : Icon unlock() +main.java.controlp5.Controller : Icon unplugFrom(Object) +main.java.controlp5.Controller : Icon unplugFrom(Object[]) +main.java.controlp5.Controller : Icon unregisterTooltip() +main.java.controlp5.Controller : Icon update() +main.java.controlp5.Controller : Icon updateSize() +main.java.controlp5.Controller : Label getCaptionLabel() +main.java.controlp5.Controller : Label getValueLabel() +main.java.controlp5.Controller : List getControllerPlugList() +main.java.controlp5.Controller : Pointer getPointer() +main.java.controlp5.Controller : String getAddress() +main.java.controlp5.Controller : String getInfo() +main.java.controlp5.Controller : String getName() +main.java.controlp5.Controller : String getStringValue() +main.java.controlp5.Controller : String toString() +main.java.controlp5.Controller : Tab getTab() +main.java.controlp5.Controller : boolean isActive() +main.java.controlp5.Controller : boolean isBroadcast() +main.java.controlp5.Controller : boolean isInside() +main.java.controlp5.Controller : boolean isLabelVisible() +main.java.controlp5.Controller : boolean isListening() +main.java.controlp5.Controller : boolean isLock() +main.java.controlp5.Controller : boolean isMouseOver() +main.java.controlp5.Controller : boolean isMousePressed() +main.java.controlp5.Controller : boolean isMoveable() +main.java.controlp5.Controller : boolean isUpdate() +main.java.controlp5.Controller : boolean isVisible() +main.java.controlp5.Controller : float getArrayValue(int) +main.java.controlp5.Controller : float getDefaultValue() +main.java.controlp5.Controller : float getMax() +main.java.controlp5.Controller : float getMin() +main.java.controlp5.Controller : float getValue() +main.java.controlp5.Controller : float[] getAbsolutePosition() +main.java.controlp5.Controller : float[] getArrayValue() +main.java.controlp5.Controller : float[] getPosition() +main.java.controlp5.Controller : int getDecimalPrecision() +main.java.controlp5.Controller : int getHeight() +main.java.controlp5.Controller : int getId() +main.java.controlp5.Controller : int getWidth() +main.java.controlp5.Controller : int listenerSize() +main.java.controlp5.Controller : void remove() +main.java.controlp5.Controller : void setView(ControllerView, int) +main.java.controlp5.Icon : Icon activateBy(int) +main.java.controlp5.Icon : Icon hideBackground() +main.java.controlp5.Icon : Icon setFill(boolean) +main.java.controlp5.Icon : Icon setFont(PFont) +main.java.controlp5.Icon : Icon setFont(PFont, int) +main.java.controlp5.Icon : Icon setFontIcon(int) +main.java.controlp5.Icon : Icon setFontIcon(int, int) +main.java.controlp5.Icon : Icon setFontIconOff(int) +main.java.controlp5.Icon : Icon setFontIconOn(int) +main.java.controlp5.Icon : Icon setFontIconSize(int) +main.java.controlp5.Icon : Icon setFontIcons(int, int) +main.java.controlp5.Icon : Icon setFontIndex(int) +main.java.controlp5.Icon : Icon setOff() +main.java.controlp5.Icon : Icon setOn() +main.java.controlp5.Icon : Icon setRoundedCorners(int) +main.java.controlp5.Icon : Icon setScale(float, float) +main.java.controlp5.Icon : Icon setStroke(boolean) +main.java.controlp5.Icon : Icon setStrokeWeight(float) +main.java.controlp5.Icon : Icon setSwitch(boolean) +main.java.controlp5.Icon : Icon setValue(float) +main.java.controlp5.Icon : Icon showBackground() +main.java.controlp5.Icon : Icon update() +main.java.controlp5.Icon : String getInfo() +main.java.controlp5.Icon : String toString() +main.java.controlp5.Icon : boolean getBooleanValue() +main.java.controlp5.Icon : boolean isOn() +main.java.controlp5.Icon : boolean isPressed() +main.java.controlp5.Icon : boolean isSwitch() +main.java.controlp5.Icon : int getFontIcon(int) java.lang.Object : String toString() java.lang.Object : boolean equals(Object) diff --git a/examples/controllers/ControlP5knob/ControlP5knob.pde b/examples/controllers/ControlP5knob/ControlP5knob.pde index d7578f5..610823f 100644 --- a/examples/controllers/ControlP5knob/ControlP5knob.pde +++ b/examples/controllers/ControlP5knob/ControlP5knob.pde @@ -86,170 +86,170 @@ Format: ClassName : returnType methodName(parameter type) -controlP5.Controller : CColor getColor() -controlP5.Controller : ControlBehavior getBehavior() -controlP5.Controller : ControlWindow getControlWindow() -controlP5.Controller : ControlWindow getWindow() -controlP5.Controller : ControllerProperty getProperty(String) -controlP5.Controller : ControllerProperty getProperty(String, String) -controlP5.Controller : ControllerView getView() -controlP5.Controller : Knob addCallback(CallbackListener) -controlP5.Controller : Knob addListener(ControlListener) -controlP5.Controller : Knob addListenerFor(int, CallbackListener) -controlP5.Controller : Knob align(int, int, int, int) -controlP5.Controller : Knob bringToFront() -controlP5.Controller : Knob bringToFront(ControllerInterface) -controlP5.Controller : Knob hide() -controlP5.Controller : Knob linebreak() -controlP5.Controller : Knob listen(boolean) -controlP5.Controller : Knob lock() -controlP5.Controller : Knob onChange(CallbackListener) -controlP5.Controller : Knob onClick(CallbackListener) -controlP5.Controller : Knob onDoublePress(CallbackListener) -controlP5.Controller : Knob onDrag(CallbackListener) -controlP5.Controller : Knob onDraw(ControllerView) -controlP5.Controller : Knob onEndDrag(CallbackListener) -controlP5.Controller : Knob onEnter(CallbackListener) -controlP5.Controller : Knob onLeave(CallbackListener) -controlP5.Controller : Knob onMove(CallbackListener) -controlP5.Controller : Knob onPress(CallbackListener) -controlP5.Controller : Knob onRelease(CallbackListener) -controlP5.Controller : Knob onReleaseOutside(CallbackListener) -controlP5.Controller : Knob onStartDrag(CallbackListener) -controlP5.Controller : Knob onWheel(CallbackListener) -controlP5.Controller : Knob plugTo(Object) -controlP5.Controller : Knob plugTo(Object, String) -controlP5.Controller : Knob plugTo(Object[]) -controlP5.Controller : Knob plugTo(Object[], String) -controlP5.Controller : Knob registerProperty(String) -controlP5.Controller : Knob registerProperty(String, String) -controlP5.Controller : Knob registerTooltip(String) -controlP5.Controller : Knob removeBehavior() -controlP5.Controller : Knob removeCallback() -controlP5.Controller : Knob removeCallback(CallbackListener) -controlP5.Controller : Knob removeListener(ControlListener) -controlP5.Controller : Knob removeListenerFor(int, CallbackListener) -controlP5.Controller : Knob removeListenersFor(int) -controlP5.Controller : Knob removeProperty(String) -controlP5.Controller : Knob removeProperty(String, String) -controlP5.Controller : Knob setArrayValue(float[]) -controlP5.Controller : Knob setArrayValue(int, float) -controlP5.Controller : Knob setBehavior(ControlBehavior) -controlP5.Controller : Knob setBroadcast(boolean) -controlP5.Controller : Knob setCaptionLabel(String) -controlP5.Controller : Knob setColor(CColor) -controlP5.Controller : Knob setColorActive(int) -controlP5.Controller : Knob setColorBackground(int) -controlP5.Controller : Knob setColorCaptionLabel(int) -controlP5.Controller : Knob setColorForeground(int) -controlP5.Controller : Knob setColorLabel(int) -controlP5.Controller : Knob setColorValue(int) -controlP5.Controller : Knob setColorValueLabel(int) -controlP5.Controller : Knob setDecimalPrecision(int) -controlP5.Controller : Knob setDefaultValue(float) -controlP5.Controller : Knob setHeight(int) -controlP5.Controller : Knob setId(int) -controlP5.Controller : Knob setImage(PImage) -controlP5.Controller : Knob setImage(PImage, int) -controlP5.Controller : Knob setImages(PImage, PImage, PImage) -controlP5.Controller : Knob setImages(PImage, PImage, PImage, PImage) -controlP5.Controller : Knob setLabel(String) -controlP5.Controller : Knob setLabelVisible(boolean) -controlP5.Controller : Knob setLock(boolean) -controlP5.Controller : Knob setMax(float) -controlP5.Controller : Knob setMin(float) -controlP5.Controller : Knob setMouseOver(boolean) -controlP5.Controller : Knob setMoveable(boolean) -controlP5.Controller : Knob setPosition(float, float) -controlP5.Controller : Knob setPosition(float[]) -controlP5.Controller : Knob setSize(PImage) -controlP5.Controller : Knob setSize(int, int) -controlP5.Controller : Knob setStringValue(String) -controlP5.Controller : Knob setUpdate(boolean) -controlP5.Controller : Knob setValue(float) -controlP5.Controller : Knob setValueLabel(String) -controlP5.Controller : Knob setValueSelf(float) -controlP5.Controller : Knob setView(ControllerView) -controlP5.Controller : Knob setVisible(boolean) -controlP5.Controller : Knob setWidth(int) -controlP5.Controller : Knob show() -controlP5.Controller : Knob unlock() -controlP5.Controller : Knob unplugFrom(Object) -controlP5.Controller : Knob unplugFrom(Object[]) -controlP5.Controller : Knob unregisterTooltip() -controlP5.Controller : Knob update() -controlP5.Controller : Knob updateSize() -controlP5.Controller : Label getCaptionLabel() -controlP5.Controller : Label getValueLabel() -controlP5.Controller : List getControllerPlugList() -controlP5.Controller : Pointer getPointer() -controlP5.Controller : String getAddress() -controlP5.Controller : String getInfo() -controlP5.Controller : String getName() -controlP5.Controller : String getStringValue() -controlP5.Controller : String toString() -controlP5.Controller : Tab getTab() -controlP5.Controller : boolean isActive() -controlP5.Controller : boolean isBroadcast() -controlP5.Controller : boolean isInside() -controlP5.Controller : boolean isLabelVisible() -controlP5.Controller : boolean isListening() -controlP5.Controller : boolean isLock() -controlP5.Controller : boolean isMouseOver() -controlP5.Controller : boolean isMousePressed() -controlP5.Controller : boolean isMoveable() -controlP5.Controller : boolean isUpdate() -controlP5.Controller : boolean isVisible() -controlP5.Controller : float getArrayValue(int) -controlP5.Controller : float getDefaultValue() -controlP5.Controller : float getMax() -controlP5.Controller : float getMin() -controlP5.Controller : float getValue() -controlP5.Controller : float[] getAbsolutePosition() -controlP5.Controller : float[] getArrayValue() -controlP5.Controller : float[] getPosition() -controlP5.Controller : int getDecimalPrecision() -controlP5.Controller : int getHeight() -controlP5.Controller : int getId() -controlP5.Controller : int getWidth() -controlP5.Controller : int listenerSize() -controlP5.Controller : void remove() -controlP5.Controller : void setView(ControllerView, int) -controlP5.Knob : Knob hideTickMarks() -controlP5.Knob : Knob setAngleRange(float) -controlP5.Knob : Knob setConstrained(boolean) -controlP5.Knob : Knob setDragDirection(int) -controlP5.Knob : Knob setMax(float) -controlP5.Knob : Knob setMin(float) -controlP5.Knob : Knob setNumberOfTickMarks(int) -controlP5.Knob : Knob setRadius(float) -controlP5.Knob : Knob setRange(float, float) -controlP5.Knob : Knob setResolution(float) -controlP5.Knob : Knob setScrollSensitivity(float) -controlP5.Knob : Knob setShowAngleRange(boolean) -controlP5.Knob : Knob setSize(int, int) -controlP5.Knob : Knob setStartAngle(float) -controlP5.Knob : Knob setTickMarkLength(int) -controlP5.Knob : Knob setTickMarkWeight(float) -controlP5.Knob : Knob setValue(float) -controlP5.Knob : Knob setViewStyle(int) -controlP5.Knob : Knob showTickMarks() -controlP5.Knob : Knob shuffle() -controlP5.Knob : Knob snapToTickMarks(boolean) -controlP5.Knob : boolean isConstrained() -controlP5.Knob : boolean isShowAngleRange() -controlP5.Knob : boolean isShowTickMarks() -controlP5.Knob : float getAngle() -controlP5.Knob : float getAngleRange() -controlP5.Knob : float getRadius() -controlP5.Knob : float getResolution() -controlP5.Knob : float getStartAngle() -controlP5.Knob : float getTickMarkWeight() -controlP5.Knob : float getValue() -controlP5.Knob : int getDragDirection() -controlP5.Knob : int getNumberOfTickMarks() -controlP5.Knob : int getTickMarkLength() -controlP5.Knob : int getViewStyle() +main.java.controlp5.Controller : CColor getColor() +main.java.controlp5.Controller : ControlBehavior getBehavior() +main.java.controlp5.Controller : ControlWindow getControlWindow() +main.java.controlp5.Controller : ControlWindow getWindow() +main.java.controlp5.Controller : ControllerProperty getProperty(String) +main.java.controlp5.Controller : ControllerProperty getProperty(String, String) +main.java.controlp5.Controller : ControllerView getView() +main.java.controlp5.Controller : Knob addCallback(CallbackListener) +main.java.controlp5.Controller : Knob addListener(ControlListener) +main.java.controlp5.Controller : Knob addListenerFor(int, CallbackListener) +main.java.controlp5.Controller : Knob align(int, int, int, int) +main.java.controlp5.Controller : Knob bringToFront() +main.java.controlp5.Controller : Knob bringToFront(ControllerInterface) +main.java.controlp5.Controller : Knob hide() +main.java.controlp5.Controller : Knob linebreak() +main.java.controlp5.Controller : Knob listen(boolean) +main.java.controlp5.Controller : Knob lock() +main.java.controlp5.Controller : Knob onChange(CallbackListener) +main.java.controlp5.Controller : Knob onClick(CallbackListener) +main.java.controlp5.Controller : Knob onDoublePress(CallbackListener) +main.java.controlp5.Controller : Knob onDrag(CallbackListener) +main.java.controlp5.Controller : Knob onDraw(ControllerView) +main.java.controlp5.Controller : Knob onEndDrag(CallbackListener) +main.java.controlp5.Controller : Knob onEnter(CallbackListener) +main.java.controlp5.Controller : Knob onLeave(CallbackListener) +main.java.controlp5.Controller : Knob onMove(CallbackListener) +main.java.controlp5.Controller : Knob onPress(CallbackListener) +main.java.controlp5.Controller : Knob onRelease(CallbackListener) +main.java.controlp5.Controller : Knob onReleaseOutside(CallbackListener) +main.java.controlp5.Controller : Knob onStartDrag(CallbackListener) +main.java.controlp5.Controller : Knob onWheel(CallbackListener) +main.java.controlp5.Controller : Knob plugTo(Object) +main.java.controlp5.Controller : Knob plugTo(Object, String) +main.java.controlp5.Controller : Knob plugTo(Object[]) +main.java.controlp5.Controller : Knob plugTo(Object[], String) +main.java.controlp5.Controller : Knob registerProperty(String) +main.java.controlp5.Controller : Knob registerProperty(String, String) +main.java.controlp5.Controller : Knob registerTooltip(String) +main.java.controlp5.Controller : Knob removeBehavior() +main.java.controlp5.Controller : Knob removeCallback() +main.java.controlp5.Controller : Knob removeCallback(CallbackListener) +main.java.controlp5.Controller : Knob removeListener(ControlListener) +main.java.controlp5.Controller : Knob removeListenerFor(int, CallbackListener) +main.java.controlp5.Controller : Knob removeListenersFor(int) +main.java.controlp5.Controller : Knob removeProperty(String) +main.java.controlp5.Controller : Knob removeProperty(String, String) +main.java.controlp5.Controller : Knob setArrayValue(float[]) +main.java.controlp5.Controller : Knob setArrayValue(int, float) +main.java.controlp5.Controller : Knob setBehavior(ControlBehavior) +main.java.controlp5.Controller : Knob setBroadcast(boolean) +main.java.controlp5.Controller : Knob setCaptionLabel(String) +main.java.controlp5.Controller : Knob setColor(CColor) +main.java.controlp5.Controller : Knob setColorActive(int) +main.java.controlp5.Controller : Knob setColorBackground(int) +main.java.controlp5.Controller : Knob setColorCaptionLabel(int) +main.java.controlp5.Controller : Knob setColorForeground(int) +main.java.controlp5.Controller : Knob setColorLabel(int) +main.java.controlp5.Controller : Knob setColorValue(int) +main.java.controlp5.Controller : Knob setColorValueLabel(int) +main.java.controlp5.Controller : Knob setDecimalPrecision(int) +main.java.controlp5.Controller : Knob setDefaultValue(float) +main.java.controlp5.Controller : Knob setHeight(int) +main.java.controlp5.Controller : Knob setId(int) +main.java.controlp5.Controller : Knob setImage(PImage) +main.java.controlp5.Controller : Knob setImage(PImage, int) +main.java.controlp5.Controller : Knob setImages(PImage, PImage, PImage) +main.java.controlp5.Controller : Knob setImages(PImage, PImage, PImage, PImage) +main.java.controlp5.Controller : Knob setLabel(String) +main.java.controlp5.Controller : Knob setLabelVisible(boolean) +main.java.controlp5.Controller : Knob setLock(boolean) +main.java.controlp5.Controller : Knob setMax(float) +main.java.controlp5.Controller : Knob setMin(float) +main.java.controlp5.Controller : Knob setMouseOver(boolean) +main.java.controlp5.Controller : Knob setMoveable(boolean) +main.java.controlp5.Controller : Knob setPosition(float, float) +main.java.controlp5.Controller : Knob setPosition(float[]) +main.java.controlp5.Controller : Knob setSize(PImage) +main.java.controlp5.Controller : Knob setSize(int, int) +main.java.controlp5.Controller : Knob setStringValue(String) +main.java.controlp5.Controller : Knob setUpdate(boolean) +main.java.controlp5.Controller : Knob setValue(float) +main.java.controlp5.Controller : Knob setValueLabel(String) +main.java.controlp5.Controller : Knob setValueSelf(float) +main.java.controlp5.Controller : Knob setView(ControllerView) +main.java.controlp5.Controller : Knob setVisible(boolean) +main.java.controlp5.Controller : Knob setWidth(int) +main.java.controlp5.Controller : Knob show() +main.java.controlp5.Controller : Knob unlock() +main.java.controlp5.Controller : Knob unplugFrom(Object) +main.java.controlp5.Controller : Knob unplugFrom(Object[]) +main.java.controlp5.Controller : Knob unregisterTooltip() +main.java.controlp5.Controller : Knob update() +main.java.controlp5.Controller : Knob updateSize() +main.java.controlp5.Controller : Label getCaptionLabel() +main.java.controlp5.Controller : Label getValueLabel() +main.java.controlp5.Controller : List getControllerPlugList() +main.java.controlp5.Controller : Pointer getPointer() +main.java.controlp5.Controller : String getAddress() +main.java.controlp5.Controller : String getInfo() +main.java.controlp5.Controller : String getName() +main.java.controlp5.Controller : String getStringValue() +main.java.controlp5.Controller : String toString() +main.java.controlp5.Controller : Tab getTab() +main.java.controlp5.Controller : boolean isActive() +main.java.controlp5.Controller : boolean isBroadcast() +main.java.controlp5.Controller : boolean isInside() +main.java.controlp5.Controller : boolean isLabelVisible() +main.java.controlp5.Controller : boolean isListening() +main.java.controlp5.Controller : boolean isLock() +main.java.controlp5.Controller : boolean isMouseOver() +main.java.controlp5.Controller : boolean isMousePressed() +main.java.controlp5.Controller : boolean isMoveable() +main.java.controlp5.Controller : boolean isUpdate() +main.java.controlp5.Controller : boolean isVisible() +main.java.controlp5.Controller : float getArrayValue(int) +main.java.controlp5.Controller : float getDefaultValue() +main.java.controlp5.Controller : float getMax() +main.java.controlp5.Controller : float getMin() +main.java.controlp5.Controller : float getValue() +main.java.controlp5.Controller : float[] getAbsolutePosition() +main.java.controlp5.Controller : float[] getArrayValue() +main.java.controlp5.Controller : float[] getPosition() +main.java.controlp5.Controller : int getDecimalPrecision() +main.java.controlp5.Controller : int getHeight() +main.java.controlp5.Controller : int getId() +main.java.controlp5.Controller : int getWidth() +main.java.controlp5.Controller : int listenerSize() +main.java.controlp5.Controller : void remove() +main.java.controlp5.Controller : void setView(ControllerView, int) +main.java.controlp5.Knob : Knob hideTickMarks() +main.java.controlp5.Knob : Knob setAngleRange(float) +main.java.controlp5.Knob : Knob setConstrained(boolean) +main.java.controlp5.Knob : Knob setDragDirection(int) +main.java.controlp5.Knob : Knob setMax(float) +main.java.controlp5.Knob : Knob setMin(float) +main.java.controlp5.Knob : Knob setNumberOfTickMarks(int) +main.java.controlp5.Knob : Knob setRadius(float) +main.java.controlp5.Knob : Knob setRange(float, float) +main.java.controlp5.Knob : Knob setResolution(float) +main.java.controlp5.Knob : Knob setScrollSensitivity(float) +main.java.controlp5.Knob : Knob setShowAngleRange(boolean) +main.java.controlp5.Knob : Knob setSize(int, int) +main.java.controlp5.Knob : Knob setStartAngle(float) +main.java.controlp5.Knob : Knob setTickMarkLength(int) +main.java.controlp5.Knob : Knob setTickMarkWeight(float) +main.java.controlp5.Knob : Knob setValue(float) +main.java.controlp5.Knob : Knob setViewStyle(int) +main.java.controlp5.Knob : Knob showTickMarks() +main.java.controlp5.Knob : Knob shuffle() +main.java.controlp5.Knob : Knob snapToTickMarks(boolean) +main.java.controlp5.Knob : boolean isConstrained() +main.java.controlp5.Knob : boolean isShowAngleRange() +main.java.controlp5.Knob : boolean isShowTickMarks() +main.java.controlp5.Knob : float getAngle() +main.java.controlp5.Knob : float getAngleRange() +main.java.controlp5.Knob : float getRadius() +main.java.controlp5.Knob : float getResolution() +main.java.controlp5.Knob : float getStartAngle() +main.java.controlp5.Knob : float getTickMarkWeight() +main.java.controlp5.Knob : float getValue() +main.java.controlp5.Knob : int getDragDirection() +main.java.controlp5.Knob : int getNumberOfTickMarks() +main.java.controlp5.Knob : int getTickMarkLength() +main.java.controlp5.Knob : int getViewStyle() java.lang.Object : String toString() java.lang.Object : boolean equals(Object) diff --git a/examples/controllers/ControlP5listBox/ControlP5listBox.pde b/examples/controllers/ControlP5listBox/ControlP5listBox.pde index f3cc80a..d719cd7 100644 --- a/examples/controllers/ControlP5listBox/ControlP5listBox.pde +++ b/examples/controllers/ControlP5listBox/ControlP5listBox.pde @@ -149,166 +149,166 @@ Format: ClassName : returnType methodName(parameter type) -controlP5.Controller : CColor getColor() -controlP5.Controller : ControlBehavior getBehavior() -controlP5.Controller : ControlWindow getControlWindow() -controlP5.Controller : ControlWindow getWindow() -controlP5.Controller : ControllerProperty getProperty(String) -controlP5.Controller : ControllerProperty getProperty(String, String) -controlP5.Controller : ControllerView getView() -controlP5.Controller : Label getCaptionLabel() -controlP5.Controller : Label getValueLabel() -controlP5.Controller : List getControllerPlugList() -controlP5.Controller : ListBox addCallback(CallbackListener) -controlP5.Controller : ListBox addListener(ControlListener) -controlP5.Controller : ListBox addListenerFor(int, CallbackListener) -controlP5.Controller : ListBox align(int, int, int, int) -controlP5.Controller : ListBox bringToFront() -controlP5.Controller : ListBox bringToFront(ControllerInterface) -controlP5.Controller : ListBox hide() -controlP5.Controller : ListBox linebreak() -controlP5.Controller : ListBox listen(boolean) -controlP5.Controller : ListBox lock() -controlP5.Controller : ListBox onChange(CallbackListener) -controlP5.Controller : ListBox onClick(CallbackListener) -controlP5.Controller : ListBox onDoublePress(CallbackListener) -controlP5.Controller : ListBox onDrag(CallbackListener) -controlP5.Controller : ListBox onDraw(ControllerView) -controlP5.Controller : ListBox onEndDrag(CallbackListener) -controlP5.Controller : ListBox onEnter(CallbackListener) -controlP5.Controller : ListBox onLeave(CallbackListener) -controlP5.Controller : ListBox onMove(CallbackListener) -controlP5.Controller : ListBox onPress(CallbackListener) -controlP5.Controller : ListBox onRelease(CallbackListener) -controlP5.Controller : ListBox onReleaseOutside(CallbackListener) -controlP5.Controller : ListBox onStartDrag(CallbackListener) -controlP5.Controller : ListBox onWheel(CallbackListener) -controlP5.Controller : ListBox plugTo(Object) -controlP5.Controller : ListBox plugTo(Object, String) -controlP5.Controller : ListBox plugTo(Object[]) -controlP5.Controller : ListBox plugTo(Object[], String) -controlP5.Controller : ListBox registerProperty(String) -controlP5.Controller : ListBox registerProperty(String, String) -controlP5.Controller : ListBox registerTooltip(String) -controlP5.Controller : ListBox removeBehavior() -controlP5.Controller : ListBox removeCallback() -controlP5.Controller : ListBox removeCallback(CallbackListener) -controlP5.Controller : ListBox removeListener(ControlListener) -controlP5.Controller : ListBox removeListenerFor(int, CallbackListener) -controlP5.Controller : ListBox removeListenersFor(int) -controlP5.Controller : ListBox removeProperty(String) -controlP5.Controller : ListBox removeProperty(String, String) -controlP5.Controller : ListBox setArrayValue(float[]) -controlP5.Controller : ListBox setArrayValue(int, float) -controlP5.Controller : ListBox setBehavior(ControlBehavior) -controlP5.Controller : ListBox setBroadcast(boolean) -controlP5.Controller : ListBox setCaptionLabel(String) -controlP5.Controller : ListBox setColor(CColor) -controlP5.Controller : ListBox setColorActive(int) -controlP5.Controller : ListBox setColorBackground(int) -controlP5.Controller : ListBox setColorCaptionLabel(int) -controlP5.Controller : ListBox setColorForeground(int) -controlP5.Controller : ListBox setColorLabel(int) -controlP5.Controller : ListBox setColorValue(int) -controlP5.Controller : ListBox setColorValueLabel(int) -controlP5.Controller : ListBox setDecimalPrecision(int) -controlP5.Controller : ListBox setDefaultValue(float) -controlP5.Controller : ListBox setHeight(int) -controlP5.Controller : ListBox setId(int) -controlP5.Controller : ListBox setImage(PImage) -controlP5.Controller : ListBox setImage(PImage, int) -controlP5.Controller : ListBox setImages(PImage, PImage, PImage) -controlP5.Controller : ListBox setImages(PImage, PImage, PImage, PImage) -controlP5.Controller : ListBox setLabel(String) -controlP5.Controller : ListBox setLabelVisible(boolean) -controlP5.Controller : ListBox setLock(boolean) -controlP5.Controller : ListBox setMax(float) -controlP5.Controller : ListBox setMin(float) -controlP5.Controller : ListBox setMouseOver(boolean) -controlP5.Controller : ListBox setMoveable(boolean) -controlP5.Controller : ListBox setPosition(float, float) -controlP5.Controller : ListBox setPosition(float[]) -controlP5.Controller : ListBox setSize(PImage) -controlP5.Controller : ListBox setSize(int, int) -controlP5.Controller : ListBox setStringValue(String) -controlP5.Controller : ListBox setUpdate(boolean) -controlP5.Controller : ListBox setValue(float) -controlP5.Controller : ListBox setValueLabel(String) -controlP5.Controller : ListBox setValueSelf(float) -controlP5.Controller : ListBox setView(ControllerView) -controlP5.Controller : ListBox setVisible(boolean) -controlP5.Controller : ListBox setWidth(int) -controlP5.Controller : ListBox show() -controlP5.Controller : ListBox unlock() -controlP5.Controller : ListBox unplugFrom(Object) -controlP5.Controller : ListBox unplugFrom(Object[]) -controlP5.Controller : ListBox unregisterTooltip() -controlP5.Controller : ListBox update() -controlP5.Controller : ListBox updateSize() -controlP5.Controller : Pointer getPointer() -controlP5.Controller : String getAddress() -controlP5.Controller : String getInfo() -controlP5.Controller : String getName() -controlP5.Controller : String getStringValue() -controlP5.Controller : String toString() -controlP5.Controller : Tab getTab() -controlP5.Controller : boolean isActive() -controlP5.Controller : boolean isBroadcast() -controlP5.Controller : boolean isInside() -controlP5.Controller : boolean isLabelVisible() -controlP5.Controller : boolean isListening() -controlP5.Controller : boolean isLock() -controlP5.Controller : boolean isMouseOver() -controlP5.Controller : boolean isMousePressed() -controlP5.Controller : boolean isMoveable() -controlP5.Controller : boolean isUpdate() -controlP5.Controller : boolean isVisible() -controlP5.Controller : float getArrayValue(int) -controlP5.Controller : float getDefaultValue() -controlP5.Controller : float getMax() -controlP5.Controller : float getMin() -controlP5.Controller : float getValue() -controlP5.Controller : float[] getAbsolutePosition() -controlP5.Controller : float[] getArrayValue() -controlP5.Controller : float[] getPosition() -controlP5.Controller : int getDecimalPrecision() -controlP5.Controller : int getHeight() -controlP5.Controller : int getId() -controlP5.Controller : int getWidth() -controlP5.Controller : int listenerSize() -controlP5.Controller : void remove() -controlP5.Controller : void setView(ControllerView, int) -controlP5.ListBox : List getItems() -controlP5.ListBox : ListBox addItem(String, Object) -controlP5.ListBox : ListBox addItems(List) -controlP5.ListBox : ListBox addItems(Map) -controlP5.ListBox : ListBox addItems(String[]) -controlP5.ListBox : ListBox clear() -controlP5.ListBox : ListBox close() -controlP5.ListBox : ListBox open() -controlP5.ListBox : ListBox removeItem(String) -controlP5.ListBox : ListBox removeItems(List) -controlP5.ListBox : ListBox setBackgroundColor(int) -controlP5.ListBox : ListBox setBarHeight(int) -controlP5.ListBox : ListBox setBarVisible(boolean) -controlP5.ListBox : ListBox setItemHeight(int) -controlP5.ListBox : ListBox setItems(List) -controlP5.ListBox : ListBox setItems(Map) -controlP5.ListBox : ListBox setItems(String[]) -controlP5.ListBox : ListBox setOpen(boolean) -controlP5.ListBox : ListBox setScrollSensitivity(float) -controlP5.ListBox : ListBox setType(int) -controlP5.ListBox : Map getItem(String) -controlP5.ListBox : Map getItem(int) -controlP5.ListBox : boolean isBarVisible() -controlP5.ListBox : boolean isOpen() -controlP5.ListBox : int getBackgroundColor() -controlP5.ListBox : int getBarHeight() -controlP5.ListBox : int getHeight() -controlP5.ListBox : void controlEvent(ControlEvent) -controlP5.ListBox : void keyEvent(KeyEvent) -controlP5.ListBox : void setDirection(int) -controlP5.ListBox : void updateItemIndexOffset() +main.java.controlp5.Controller : CColor getColor() +main.java.controlp5.Controller : ControlBehavior getBehavior() +main.java.controlp5.Controller : ControlWindow getControlWindow() +main.java.controlp5.Controller : ControlWindow getWindow() +main.java.controlp5.Controller : ControllerProperty getProperty(String) +main.java.controlp5.Controller : ControllerProperty getProperty(String, String) +main.java.controlp5.Controller : ControllerView getView() +main.java.controlp5.Controller : Label getCaptionLabel() +main.java.controlp5.Controller : Label getValueLabel() +main.java.controlp5.Controller : List getControllerPlugList() +main.java.controlp5.Controller : ListBox addCallback(CallbackListener) +main.java.controlp5.Controller : ListBox addListener(ControlListener) +main.java.controlp5.Controller : ListBox addListenerFor(int, CallbackListener) +main.java.controlp5.Controller : ListBox align(int, int, int, int) +main.java.controlp5.Controller : ListBox bringToFront() +main.java.controlp5.Controller : ListBox bringToFront(ControllerInterface) +main.java.controlp5.Controller : ListBox hide() +main.java.controlp5.Controller : ListBox linebreak() +main.java.controlp5.Controller : ListBox listen(boolean) +main.java.controlp5.Controller : ListBox lock() +main.java.controlp5.Controller : ListBox onChange(CallbackListener) +main.java.controlp5.Controller : ListBox onClick(CallbackListener) +main.java.controlp5.Controller : ListBox onDoublePress(CallbackListener) +main.java.controlp5.Controller : ListBox onDrag(CallbackListener) +main.java.controlp5.Controller : ListBox onDraw(ControllerView) +main.java.controlp5.Controller : ListBox onEndDrag(CallbackListener) +main.java.controlp5.Controller : ListBox onEnter(CallbackListener) +main.java.controlp5.Controller : ListBox onLeave(CallbackListener) +main.java.controlp5.Controller : ListBox onMove(CallbackListener) +main.java.controlp5.Controller : ListBox onPress(CallbackListener) +main.java.controlp5.Controller : ListBox onRelease(CallbackListener) +main.java.controlp5.Controller : ListBox onReleaseOutside(CallbackListener) +main.java.controlp5.Controller : ListBox onStartDrag(CallbackListener) +main.java.controlp5.Controller : ListBox onWheel(CallbackListener) +main.java.controlp5.Controller : ListBox plugTo(Object) +main.java.controlp5.Controller : ListBox plugTo(Object, String) +main.java.controlp5.Controller : ListBox plugTo(Object[]) +main.java.controlp5.Controller : ListBox plugTo(Object[], String) +main.java.controlp5.Controller : ListBox registerProperty(String) +main.java.controlp5.Controller : ListBox registerProperty(String, String) +main.java.controlp5.Controller : ListBox registerTooltip(String) +main.java.controlp5.Controller : ListBox removeBehavior() +main.java.controlp5.Controller : ListBox removeCallback() +main.java.controlp5.Controller : ListBox removeCallback(CallbackListener) +main.java.controlp5.Controller : ListBox removeListener(ControlListener) +main.java.controlp5.Controller : ListBox removeListenerFor(int, CallbackListener) +main.java.controlp5.Controller : ListBox removeListenersFor(int) +main.java.controlp5.Controller : ListBox removeProperty(String) +main.java.controlp5.Controller : ListBox removeProperty(String, String) +main.java.controlp5.Controller : ListBox setArrayValue(float[]) +main.java.controlp5.Controller : ListBox setArrayValue(int, float) +main.java.controlp5.Controller : ListBox setBehavior(ControlBehavior) +main.java.controlp5.Controller : ListBox setBroadcast(boolean) +main.java.controlp5.Controller : ListBox setCaptionLabel(String) +main.java.controlp5.Controller : ListBox setColor(CColor) +main.java.controlp5.Controller : ListBox setColorActive(int) +main.java.controlp5.Controller : ListBox setColorBackground(int) +main.java.controlp5.Controller : ListBox setColorCaptionLabel(int) +main.java.controlp5.Controller : ListBox setColorForeground(int) +main.java.controlp5.Controller : ListBox setColorLabel(int) +main.java.controlp5.Controller : ListBox setColorValue(int) +main.java.controlp5.Controller : ListBox setColorValueLabel(int) +main.java.controlp5.Controller : ListBox setDecimalPrecision(int) +main.java.controlp5.Controller : ListBox setDefaultValue(float) +main.java.controlp5.Controller : ListBox setHeight(int) +main.java.controlp5.Controller : ListBox setId(int) +main.java.controlp5.Controller : ListBox setImage(PImage) +main.java.controlp5.Controller : ListBox setImage(PImage, int) +main.java.controlp5.Controller : ListBox setImages(PImage, PImage, PImage) +main.java.controlp5.Controller : ListBox setImages(PImage, PImage, PImage, PImage) +main.java.controlp5.Controller : ListBox setLabel(String) +main.java.controlp5.Controller : ListBox setLabelVisible(boolean) +main.java.controlp5.Controller : ListBox setLock(boolean) +main.java.controlp5.Controller : ListBox setMax(float) +main.java.controlp5.Controller : ListBox setMin(float) +main.java.controlp5.Controller : ListBox setMouseOver(boolean) +main.java.controlp5.Controller : ListBox setMoveable(boolean) +main.java.controlp5.Controller : ListBox setPosition(float, float) +main.java.controlp5.Controller : ListBox setPosition(float[]) +main.java.controlp5.Controller : ListBox setSize(PImage) +main.java.controlp5.Controller : ListBox setSize(int, int) +main.java.controlp5.Controller : ListBox setStringValue(String) +main.java.controlp5.Controller : ListBox setUpdate(boolean) +main.java.controlp5.Controller : ListBox setValue(float) +main.java.controlp5.Controller : ListBox setValueLabel(String) +main.java.controlp5.Controller : ListBox setValueSelf(float) +main.java.controlp5.Controller : ListBox setView(ControllerView) +main.java.controlp5.Controller : ListBox setVisible(boolean) +main.java.controlp5.Controller : ListBox setWidth(int) +main.java.controlp5.Controller : ListBox show() +main.java.controlp5.Controller : ListBox unlock() +main.java.controlp5.Controller : ListBox unplugFrom(Object) +main.java.controlp5.Controller : ListBox unplugFrom(Object[]) +main.java.controlp5.Controller : ListBox unregisterTooltip() +main.java.controlp5.Controller : ListBox update() +main.java.controlp5.Controller : ListBox updateSize() +main.java.controlp5.Controller : Pointer getPointer() +main.java.controlp5.Controller : String getAddress() +main.java.controlp5.Controller : String getInfo() +main.java.controlp5.Controller : String getName() +main.java.controlp5.Controller : String getStringValue() +main.java.controlp5.Controller : String toString() +main.java.controlp5.Controller : Tab getTab() +main.java.controlp5.Controller : boolean isActive() +main.java.controlp5.Controller : boolean isBroadcast() +main.java.controlp5.Controller : boolean isInside() +main.java.controlp5.Controller : boolean isLabelVisible() +main.java.controlp5.Controller : boolean isListening() +main.java.controlp5.Controller : boolean isLock() +main.java.controlp5.Controller : boolean isMouseOver() +main.java.controlp5.Controller : boolean isMousePressed() +main.java.controlp5.Controller : boolean isMoveable() +main.java.controlp5.Controller : boolean isUpdate() +main.java.controlp5.Controller : boolean isVisible() +main.java.controlp5.Controller : float getArrayValue(int) +main.java.controlp5.Controller : float getDefaultValue() +main.java.controlp5.Controller : float getMax() +main.java.controlp5.Controller : float getMin() +main.java.controlp5.Controller : float getValue() +main.java.controlp5.Controller : float[] getAbsolutePosition() +main.java.controlp5.Controller : float[] getArrayValue() +main.java.controlp5.Controller : float[] getPosition() +main.java.controlp5.Controller : int getDecimalPrecision() +main.java.controlp5.Controller : int getHeight() +main.java.controlp5.Controller : int getId() +main.java.controlp5.Controller : int getWidth() +main.java.controlp5.Controller : int listenerSize() +main.java.controlp5.Controller : void remove() +main.java.controlp5.Controller : void setView(ControllerView, int) +main.java.controlp5.ListBox : List getItems() +main.java.controlp5.ListBox : ListBox addItem(String, Object) +main.java.controlp5.ListBox : ListBox addItems(List) +main.java.controlp5.ListBox : ListBox addItems(Map) +main.java.controlp5.ListBox : ListBox addItems(String[]) +main.java.controlp5.ListBox : ListBox clear() +main.java.controlp5.ListBox : ListBox close() +main.java.controlp5.ListBox : ListBox open() +main.java.controlp5.ListBox : ListBox removeItem(String) +main.java.controlp5.ListBox : ListBox removeItems(List) +main.java.controlp5.ListBox : ListBox setBackgroundColor(int) +main.java.controlp5.ListBox : ListBox setBarHeight(int) +main.java.controlp5.ListBox : ListBox setBarVisible(boolean) +main.java.controlp5.ListBox : ListBox setItemHeight(int) +main.java.controlp5.ListBox : ListBox setItems(List) +main.java.controlp5.ListBox : ListBox setItems(Map) +main.java.controlp5.ListBox : ListBox setItems(String[]) +main.java.controlp5.ListBox : ListBox setOpen(boolean) +main.java.controlp5.ListBox : ListBox setScrollSensitivity(float) +main.java.controlp5.ListBox : ListBox setType(int) +main.java.controlp5.ListBox : Map getItem(String) +main.java.controlp5.ListBox : Map getItem(int) +main.java.controlp5.ListBox : boolean isBarVisible() +main.java.controlp5.ListBox : boolean isOpen() +main.java.controlp5.ListBox : int getBackgroundColor() +main.java.controlp5.ListBox : int getBarHeight() +main.java.controlp5.ListBox : int getHeight() +main.java.controlp5.ListBox : void controlEvent(ControlEvent) +main.java.controlp5.ListBox : void keyEvent(KeyEvent) +main.java.controlp5.ListBox : void setDirection(int) +main.java.controlp5.ListBox : void updateItemIndexOffset() java.lang.Object : String toString() java.lang.Object : boolean equals(Object) diff --git a/examples/controllers/ControlP5matrix/ControlP5matrix.pde b/examples/controllers/ControlP5matrix/ControlP5matrix.pde index cdd0628..1448763 100644 --- a/examples/controllers/ControlP5matrix/ControlP5matrix.pde +++ b/examples/controllers/ControlP5matrix/ControlP5matrix.pde @@ -135,157 +135,157 @@ Format: ClassName : returnType methodName(parameter type) -controlP5.Controller : CColor getColor() -controlP5.Controller : ControlBehavior getBehavior() -controlP5.Controller : ControlWindow getControlWindow() -controlP5.Controller : ControlWindow getWindow() -controlP5.Controller : ControllerProperty getProperty(String) -controlP5.Controller : ControllerProperty getProperty(String, String) -controlP5.Controller : ControllerView getView() -controlP5.Controller : Label getCaptionLabel() -controlP5.Controller : Label getValueLabel() -controlP5.Controller : List getControllerPlugList() -controlP5.Controller : Matrix addCallback(CallbackListener) -controlP5.Controller : Matrix addListener(ControlListener) -controlP5.Controller : Matrix addListenerFor(int, CallbackListener) -controlP5.Controller : Matrix align(int, int, int, int) -controlP5.Controller : Matrix bringToFront() -controlP5.Controller : Matrix bringToFront(ControllerInterface) -controlP5.Controller : Matrix hide() -controlP5.Controller : Matrix linebreak() -controlP5.Controller : Matrix listen(boolean) -controlP5.Controller : Matrix lock() -controlP5.Controller : Matrix onChange(CallbackListener) -controlP5.Controller : Matrix onClick(CallbackListener) -controlP5.Controller : Matrix onDoublePress(CallbackListener) -controlP5.Controller : Matrix onDrag(CallbackListener) -controlP5.Controller : Matrix onDraw(ControllerView) -controlP5.Controller : Matrix onEndDrag(CallbackListener) -controlP5.Controller : Matrix onEnter(CallbackListener) -controlP5.Controller : Matrix onLeave(CallbackListener) -controlP5.Controller : Matrix onMove(CallbackListener) -controlP5.Controller : Matrix onPress(CallbackListener) -controlP5.Controller : Matrix onRelease(CallbackListener) -controlP5.Controller : Matrix onReleaseOutside(CallbackListener) -controlP5.Controller : Matrix onStartDrag(CallbackListener) -controlP5.Controller : Matrix onWheel(CallbackListener) -controlP5.Controller : Matrix plugTo(Object) -controlP5.Controller : Matrix plugTo(Object, String) -controlP5.Controller : Matrix plugTo(Object[]) -controlP5.Controller : Matrix plugTo(Object[], String) -controlP5.Controller : Matrix registerProperty(String) -controlP5.Controller : Matrix registerProperty(String, String) -controlP5.Controller : Matrix registerTooltip(String) -controlP5.Controller : Matrix removeBehavior() -controlP5.Controller : Matrix removeCallback() -controlP5.Controller : Matrix removeCallback(CallbackListener) -controlP5.Controller : Matrix removeListener(ControlListener) -controlP5.Controller : Matrix removeListenerFor(int, CallbackListener) -controlP5.Controller : Matrix removeListenersFor(int) -controlP5.Controller : Matrix removeProperty(String) -controlP5.Controller : Matrix removeProperty(String, String) -controlP5.Controller : Matrix setArrayValue(float[]) -controlP5.Controller : Matrix setArrayValue(int, float) -controlP5.Controller : Matrix setBehavior(ControlBehavior) -controlP5.Controller : Matrix setBroadcast(boolean) -controlP5.Controller : Matrix setCaptionLabel(String) -controlP5.Controller : Matrix setColor(CColor) -controlP5.Controller : Matrix setColorActive(int) -controlP5.Controller : Matrix setColorBackground(int) -controlP5.Controller : Matrix setColorCaptionLabel(int) -controlP5.Controller : Matrix setColorForeground(int) -controlP5.Controller : Matrix setColorLabel(int) -controlP5.Controller : Matrix setColorValue(int) -controlP5.Controller : Matrix setColorValueLabel(int) -controlP5.Controller : Matrix setDecimalPrecision(int) -controlP5.Controller : Matrix setDefaultValue(float) -controlP5.Controller : Matrix setHeight(int) -controlP5.Controller : Matrix setId(int) -controlP5.Controller : Matrix setImage(PImage) -controlP5.Controller : Matrix setImage(PImage, int) -controlP5.Controller : Matrix setImages(PImage, PImage, PImage) -controlP5.Controller : Matrix setImages(PImage, PImage, PImage, PImage) -controlP5.Controller : Matrix setLabel(String) -controlP5.Controller : Matrix setLabelVisible(boolean) -controlP5.Controller : Matrix setLock(boolean) -controlP5.Controller : Matrix setMax(float) -controlP5.Controller : Matrix setMin(float) -controlP5.Controller : Matrix setMouseOver(boolean) -controlP5.Controller : Matrix setMoveable(boolean) -controlP5.Controller : Matrix setPosition(float, float) -controlP5.Controller : Matrix setPosition(float[]) -controlP5.Controller : Matrix setSize(PImage) -controlP5.Controller : Matrix setSize(int, int) -controlP5.Controller : Matrix setStringValue(String) -controlP5.Controller : Matrix setUpdate(boolean) -controlP5.Controller : Matrix setValue(float) -controlP5.Controller : Matrix setValueLabel(String) -controlP5.Controller : Matrix setValueSelf(float) -controlP5.Controller : Matrix setView(ControllerView) -controlP5.Controller : Matrix setVisible(boolean) -controlP5.Controller : Matrix setWidth(int) -controlP5.Controller : Matrix show() -controlP5.Controller : Matrix unlock() -controlP5.Controller : Matrix unplugFrom(Object) -controlP5.Controller : Matrix unplugFrom(Object[]) -controlP5.Controller : Matrix unregisterTooltip() -controlP5.Controller : Matrix update() -controlP5.Controller : Matrix updateSize() -controlP5.Controller : Pointer getPointer() -controlP5.Controller : String getAddress() -controlP5.Controller : String getInfo() -controlP5.Controller : String getName() -controlP5.Controller : String getStringValue() -controlP5.Controller : String toString() -controlP5.Controller : Tab getTab() -controlP5.Controller : boolean isActive() -controlP5.Controller : boolean isBroadcast() -controlP5.Controller : boolean isInside() -controlP5.Controller : boolean isLabelVisible() -controlP5.Controller : boolean isListening() -controlP5.Controller : boolean isLock() -controlP5.Controller : boolean isMouseOver() -controlP5.Controller : boolean isMousePressed() -controlP5.Controller : boolean isMoveable() -controlP5.Controller : boolean isUpdate() -controlP5.Controller : boolean isVisible() -controlP5.Controller : float getArrayValue(int) -controlP5.Controller : float getDefaultValue() -controlP5.Controller : float getMax() -controlP5.Controller : float getMin() -controlP5.Controller : float getValue() -controlP5.Controller : float[] getAbsolutePosition() -controlP5.Controller : float[] getArrayValue() -controlP5.Controller : float[] getPosition() -controlP5.Controller : int getDecimalPrecision() -controlP5.Controller : int getHeight() -controlP5.Controller : int getId() -controlP5.Controller : int getWidth() -controlP5.Controller : int listenerSize() -controlP5.Controller : void remove() -controlP5.Controller : void setView(ControllerView, int) -controlP5.Matrix : Matrix clear() -controlP5.Matrix : Matrix pause() -controlP5.Matrix : Matrix play() -controlP5.Matrix : Matrix plugTo(Object) -controlP5.Matrix : Matrix plugTo(Object, String) -controlP5.Matrix : Matrix set(int, int, boolean) -controlP5.Matrix : Matrix setBackground(int) -controlP5.Matrix : Matrix setCells(int[][]) -controlP5.Matrix : Matrix setGap(int, int) -controlP5.Matrix : Matrix setGrid(int, int) -controlP5.Matrix : Matrix setInterval(int) -controlP5.Matrix : Matrix setMode(int) -controlP5.Matrix : Matrix setValue(float) -controlP5.Matrix : Matrix stop() -controlP5.Matrix : Matrix trigger(int) -controlP5.Matrix : Matrix update() -controlP5.Matrix : boolean get(int, int) -controlP5.Matrix : boolean isPlaying() -controlP5.Matrix : int getInterval() -controlP5.Matrix : int getMode() -controlP5.Matrix : int[][] getCells() -controlP5.Matrix : void remove() +main.java.controlp5.Controller : CColor getColor() +main.java.controlp5.Controller : ControlBehavior getBehavior() +main.java.controlp5.Controller : ControlWindow getControlWindow() +main.java.controlp5.Controller : ControlWindow getWindow() +main.java.controlp5.Controller : ControllerProperty getProperty(String) +main.java.controlp5.Controller : ControllerProperty getProperty(String, String) +main.java.controlp5.Controller : ControllerView getView() +main.java.controlp5.Controller : Label getCaptionLabel() +main.java.controlp5.Controller : Label getValueLabel() +main.java.controlp5.Controller : List getControllerPlugList() +main.java.controlp5.Controller : Matrix addCallback(CallbackListener) +main.java.controlp5.Controller : Matrix addListener(ControlListener) +main.java.controlp5.Controller : Matrix addListenerFor(int, CallbackListener) +main.java.controlp5.Controller : Matrix align(int, int, int, int) +main.java.controlp5.Controller : Matrix bringToFront() +main.java.controlp5.Controller : Matrix bringToFront(ControllerInterface) +main.java.controlp5.Controller : Matrix hide() +main.java.controlp5.Controller : Matrix linebreak() +main.java.controlp5.Controller : Matrix listen(boolean) +main.java.controlp5.Controller : Matrix lock() +main.java.controlp5.Controller : Matrix onChange(CallbackListener) +main.java.controlp5.Controller : Matrix onClick(CallbackListener) +main.java.controlp5.Controller : Matrix onDoublePress(CallbackListener) +main.java.controlp5.Controller : Matrix onDrag(CallbackListener) +main.java.controlp5.Controller : Matrix onDraw(ControllerView) +main.java.controlp5.Controller : Matrix onEndDrag(CallbackListener) +main.java.controlp5.Controller : Matrix onEnter(CallbackListener) +main.java.controlp5.Controller : Matrix onLeave(CallbackListener) +main.java.controlp5.Controller : Matrix onMove(CallbackListener) +main.java.controlp5.Controller : Matrix onPress(CallbackListener) +main.java.controlp5.Controller : Matrix onRelease(CallbackListener) +main.java.controlp5.Controller : Matrix onReleaseOutside(CallbackListener) +main.java.controlp5.Controller : Matrix onStartDrag(CallbackListener) +main.java.controlp5.Controller : Matrix onWheel(CallbackListener) +main.java.controlp5.Controller : Matrix plugTo(Object) +main.java.controlp5.Controller : Matrix plugTo(Object, String) +main.java.controlp5.Controller : Matrix plugTo(Object[]) +main.java.controlp5.Controller : Matrix plugTo(Object[], String) +main.java.controlp5.Controller : Matrix registerProperty(String) +main.java.controlp5.Controller : Matrix registerProperty(String, String) +main.java.controlp5.Controller : Matrix registerTooltip(String) +main.java.controlp5.Controller : Matrix removeBehavior() +main.java.controlp5.Controller : Matrix removeCallback() +main.java.controlp5.Controller : Matrix removeCallback(CallbackListener) +main.java.controlp5.Controller : Matrix removeListener(ControlListener) +main.java.controlp5.Controller : Matrix removeListenerFor(int, CallbackListener) +main.java.controlp5.Controller : Matrix removeListenersFor(int) +main.java.controlp5.Controller : Matrix removeProperty(String) +main.java.controlp5.Controller : Matrix removeProperty(String, String) +main.java.controlp5.Controller : Matrix setArrayValue(float[]) +main.java.controlp5.Controller : Matrix setArrayValue(int, float) +main.java.controlp5.Controller : Matrix setBehavior(ControlBehavior) +main.java.controlp5.Controller : Matrix setBroadcast(boolean) +main.java.controlp5.Controller : Matrix setCaptionLabel(String) +main.java.controlp5.Controller : Matrix setColor(CColor) +main.java.controlp5.Controller : Matrix setColorActive(int) +main.java.controlp5.Controller : Matrix setColorBackground(int) +main.java.controlp5.Controller : Matrix setColorCaptionLabel(int) +main.java.controlp5.Controller : Matrix setColorForeground(int) +main.java.controlp5.Controller : Matrix setColorLabel(int) +main.java.controlp5.Controller : Matrix setColorValue(int) +main.java.controlp5.Controller : Matrix setColorValueLabel(int) +main.java.controlp5.Controller : Matrix setDecimalPrecision(int) +main.java.controlp5.Controller : Matrix setDefaultValue(float) +main.java.controlp5.Controller : Matrix setHeight(int) +main.java.controlp5.Controller : Matrix setId(int) +main.java.controlp5.Controller : Matrix setImage(PImage) +main.java.controlp5.Controller : Matrix setImage(PImage, int) +main.java.controlp5.Controller : Matrix setImages(PImage, PImage, PImage) +main.java.controlp5.Controller : Matrix setImages(PImage, PImage, PImage, PImage) +main.java.controlp5.Controller : Matrix setLabel(String) +main.java.controlp5.Controller : Matrix setLabelVisible(boolean) +main.java.controlp5.Controller : Matrix setLock(boolean) +main.java.controlp5.Controller : Matrix setMax(float) +main.java.controlp5.Controller : Matrix setMin(float) +main.java.controlp5.Controller : Matrix setMouseOver(boolean) +main.java.controlp5.Controller : Matrix setMoveable(boolean) +main.java.controlp5.Controller : Matrix setPosition(float, float) +main.java.controlp5.Controller : Matrix setPosition(float[]) +main.java.controlp5.Controller : Matrix setSize(PImage) +main.java.controlp5.Controller : Matrix setSize(int, int) +main.java.controlp5.Controller : Matrix setStringValue(String) +main.java.controlp5.Controller : Matrix setUpdate(boolean) +main.java.controlp5.Controller : Matrix setValue(float) +main.java.controlp5.Controller : Matrix setValueLabel(String) +main.java.controlp5.Controller : Matrix setValueSelf(float) +main.java.controlp5.Controller : Matrix setView(ControllerView) +main.java.controlp5.Controller : Matrix setVisible(boolean) +main.java.controlp5.Controller : Matrix setWidth(int) +main.java.controlp5.Controller : Matrix show() +main.java.controlp5.Controller : Matrix unlock() +main.java.controlp5.Controller : Matrix unplugFrom(Object) +main.java.controlp5.Controller : Matrix unplugFrom(Object[]) +main.java.controlp5.Controller : Matrix unregisterTooltip() +main.java.controlp5.Controller : Matrix update() +main.java.controlp5.Controller : Matrix updateSize() +main.java.controlp5.Controller : Pointer getPointer() +main.java.controlp5.Controller : String getAddress() +main.java.controlp5.Controller : String getInfo() +main.java.controlp5.Controller : String getName() +main.java.controlp5.Controller : String getStringValue() +main.java.controlp5.Controller : String toString() +main.java.controlp5.Controller : Tab getTab() +main.java.controlp5.Controller : boolean isActive() +main.java.controlp5.Controller : boolean isBroadcast() +main.java.controlp5.Controller : boolean isInside() +main.java.controlp5.Controller : boolean isLabelVisible() +main.java.controlp5.Controller : boolean isListening() +main.java.controlp5.Controller : boolean isLock() +main.java.controlp5.Controller : boolean isMouseOver() +main.java.controlp5.Controller : boolean isMousePressed() +main.java.controlp5.Controller : boolean isMoveable() +main.java.controlp5.Controller : boolean isUpdate() +main.java.controlp5.Controller : boolean isVisible() +main.java.controlp5.Controller : float getArrayValue(int) +main.java.controlp5.Controller : float getDefaultValue() +main.java.controlp5.Controller : float getMax() +main.java.controlp5.Controller : float getMin() +main.java.controlp5.Controller : float getValue() +main.java.controlp5.Controller : float[] getAbsolutePosition() +main.java.controlp5.Controller : float[] getArrayValue() +main.java.controlp5.Controller : float[] getPosition() +main.java.controlp5.Controller : int getDecimalPrecision() +main.java.controlp5.Controller : int getHeight() +main.java.controlp5.Controller : int getId() +main.java.controlp5.Controller : int getWidth() +main.java.controlp5.Controller : int listenerSize() +main.java.controlp5.Controller : void remove() +main.java.controlp5.Controller : void setView(ControllerView, int) +main.java.controlp5.Matrix : Matrix clear() +main.java.controlp5.Matrix : Matrix pause() +main.java.controlp5.Matrix : Matrix play() +main.java.controlp5.Matrix : Matrix plugTo(Object) +main.java.controlp5.Matrix : Matrix plugTo(Object, String) +main.java.controlp5.Matrix : Matrix set(int, int, boolean) +main.java.controlp5.Matrix : Matrix setBackground(int) +main.java.controlp5.Matrix : Matrix setCells(int[][]) +main.java.controlp5.Matrix : Matrix setGap(int, int) +main.java.controlp5.Matrix : Matrix setGrid(int, int) +main.java.controlp5.Matrix : Matrix setInterval(int) +main.java.controlp5.Matrix : Matrix setMode(int) +main.java.controlp5.Matrix : Matrix setValue(float) +main.java.controlp5.Matrix : Matrix stop() +main.java.controlp5.Matrix : Matrix trigger(int) +main.java.controlp5.Matrix : Matrix update() +main.java.controlp5.Matrix : boolean get(int, int) +main.java.controlp5.Matrix : boolean isPlaying() +main.java.controlp5.Matrix : int getInterval() +main.java.controlp5.Matrix : int getMode() +main.java.controlp5.Matrix : int[][] getCells() +main.java.controlp5.Matrix : void remove() java.lang.Object : String toString() java.lang.Object : boolean equals(Object) diff --git a/examples/controllers/ControlP5numberbox/ControlP5numberbox.pde b/examples/controllers/ControlP5numberbox/ControlP5numberbox.pde index cc84d09..82cc3a1 100644 --- a/examples/controllers/ControlP5numberbox/ControlP5numberbox.pde +++ b/examples/controllers/ControlP5numberbox/ControlP5numberbox.pde @@ -66,144 +66,144 @@ Format: ClassName : returnType methodName(parameter type) -controlP5.Controller : CColor getColor() -controlP5.Controller : ControlBehavior getBehavior() -controlP5.Controller : ControlWindow getControlWindow() -controlP5.Controller : ControlWindow getWindow() -controlP5.Controller : ControllerProperty getProperty(String) -controlP5.Controller : ControllerProperty getProperty(String, String) -controlP5.Controller : ControllerView getView() -controlP5.Controller : Label getCaptionLabel() -controlP5.Controller : Label getValueLabel() -controlP5.Controller : List getControllerPlugList() -controlP5.Controller : Numberbox addCallback(CallbackListener) -controlP5.Controller : Numberbox addListener(ControlListener) -controlP5.Controller : Numberbox addListenerFor(int, CallbackListener) -controlP5.Controller : Numberbox align(int, int, int, int) -controlP5.Controller : Numberbox bringToFront() -controlP5.Controller : Numberbox bringToFront(ControllerInterface) -controlP5.Controller : Numberbox hide() -controlP5.Controller : Numberbox linebreak() -controlP5.Controller : Numberbox listen(boolean) -controlP5.Controller : Numberbox lock() -controlP5.Controller : Numberbox onChange(CallbackListener) -controlP5.Controller : Numberbox onClick(CallbackListener) -controlP5.Controller : Numberbox onDoublePress(CallbackListener) -controlP5.Controller : Numberbox onDrag(CallbackListener) -controlP5.Controller : Numberbox onDraw(ControllerView) -controlP5.Controller : Numberbox onEndDrag(CallbackListener) -controlP5.Controller : Numberbox onEnter(CallbackListener) -controlP5.Controller : Numberbox onLeave(CallbackListener) -controlP5.Controller : Numberbox onMove(CallbackListener) -controlP5.Controller : Numberbox onPress(CallbackListener) -controlP5.Controller : Numberbox onRelease(CallbackListener) -controlP5.Controller : Numberbox onReleaseOutside(CallbackListener) -controlP5.Controller : Numberbox onStartDrag(CallbackListener) -controlP5.Controller : Numberbox onWheel(CallbackListener) -controlP5.Controller : Numberbox plugTo(Object) -controlP5.Controller : Numberbox plugTo(Object, String) -controlP5.Controller : Numberbox plugTo(Object[]) -controlP5.Controller : Numberbox plugTo(Object[], String) -controlP5.Controller : Numberbox registerProperty(String) -controlP5.Controller : Numberbox registerProperty(String, String) -controlP5.Controller : Numberbox registerTooltip(String) -controlP5.Controller : Numberbox removeBehavior() -controlP5.Controller : Numberbox removeCallback() -controlP5.Controller : Numberbox removeCallback(CallbackListener) -controlP5.Controller : Numberbox removeListener(ControlListener) -controlP5.Controller : Numberbox removeListenerFor(int, CallbackListener) -controlP5.Controller : Numberbox removeListenersFor(int) -controlP5.Controller : Numberbox removeProperty(String) -controlP5.Controller : Numberbox removeProperty(String, String) -controlP5.Controller : Numberbox setArrayValue(float[]) -controlP5.Controller : Numberbox setArrayValue(int, float) -controlP5.Controller : Numberbox setBehavior(ControlBehavior) -controlP5.Controller : Numberbox setBroadcast(boolean) -controlP5.Controller : Numberbox setCaptionLabel(String) -controlP5.Controller : Numberbox setColor(CColor) -controlP5.Controller : Numberbox setColorActive(int) -controlP5.Controller : Numberbox setColorBackground(int) -controlP5.Controller : Numberbox setColorCaptionLabel(int) -controlP5.Controller : Numberbox setColorForeground(int) -controlP5.Controller : Numberbox setColorLabel(int) -controlP5.Controller : Numberbox setColorValue(int) -controlP5.Controller : Numberbox setColorValueLabel(int) -controlP5.Controller : Numberbox setDecimalPrecision(int) -controlP5.Controller : Numberbox setDefaultValue(float) -controlP5.Controller : Numberbox setHeight(int) -controlP5.Controller : Numberbox setId(int) -controlP5.Controller : Numberbox setImage(PImage) -controlP5.Controller : Numberbox setImage(PImage, int) -controlP5.Controller : Numberbox setImages(PImage, PImage, PImage) -controlP5.Controller : Numberbox setImages(PImage, PImage, PImage, PImage) -controlP5.Controller : Numberbox setLabel(String) -controlP5.Controller : Numberbox setLabelVisible(boolean) -controlP5.Controller : Numberbox setLock(boolean) -controlP5.Controller : Numberbox setMax(float) -controlP5.Controller : Numberbox setMin(float) -controlP5.Controller : Numberbox setMouseOver(boolean) -controlP5.Controller : Numberbox setMoveable(boolean) -controlP5.Controller : Numberbox setPosition(float, float) -controlP5.Controller : Numberbox setPosition(float[]) -controlP5.Controller : Numberbox setSize(PImage) -controlP5.Controller : Numberbox setSize(int, int) -controlP5.Controller : Numberbox setStringValue(String) -controlP5.Controller : Numberbox setUpdate(boolean) -controlP5.Controller : Numberbox setValue(float) -controlP5.Controller : Numberbox setValueLabel(String) -controlP5.Controller : Numberbox setValueSelf(float) -controlP5.Controller : Numberbox setView(ControllerView) -controlP5.Controller : Numberbox setVisible(boolean) -controlP5.Controller : Numberbox setWidth(int) -controlP5.Controller : Numberbox show() -controlP5.Controller : Numberbox unlock() -controlP5.Controller : Numberbox unplugFrom(Object) -controlP5.Controller : Numberbox unplugFrom(Object[]) -controlP5.Controller : Numberbox unregisterTooltip() -controlP5.Controller : Numberbox update() -controlP5.Controller : Numberbox updateSize() -controlP5.Controller : Pointer getPointer() -controlP5.Controller : String getAddress() -controlP5.Controller : String getInfo() -controlP5.Controller : String getName() -controlP5.Controller : String getStringValue() -controlP5.Controller : String toString() -controlP5.Controller : Tab getTab() -controlP5.Controller : boolean isActive() -controlP5.Controller : boolean isBroadcast() -controlP5.Controller : boolean isInside() -controlP5.Controller : boolean isLabelVisible() -controlP5.Controller : boolean isListening() -controlP5.Controller : boolean isLock() -controlP5.Controller : boolean isMouseOver() -controlP5.Controller : boolean isMousePressed() -controlP5.Controller : boolean isMoveable() -controlP5.Controller : boolean isUpdate() -controlP5.Controller : boolean isVisible() -controlP5.Controller : float getArrayValue(int) -controlP5.Controller : float getDefaultValue() -controlP5.Controller : float getMax() -controlP5.Controller : float getMin() -controlP5.Controller : float getValue() -controlP5.Controller : float[] getAbsolutePosition() -controlP5.Controller : float[] getArrayValue() -controlP5.Controller : float[] getPosition() -controlP5.Controller : int getDecimalPrecision() -controlP5.Controller : int getHeight() -controlP5.Controller : int getId() -controlP5.Controller : int getWidth() -controlP5.Controller : int listenerSize() -controlP5.Controller : void remove() -controlP5.Controller : void setView(ControllerView, int) -controlP5.Numberbox : Numberbox linebreak() -controlP5.Numberbox : Numberbox setDirection(int) -controlP5.Numberbox : Numberbox setMultiplier(float) -controlP5.Numberbox : Numberbox setRange(float, float) -controlP5.Numberbox : Numberbox setScrollSensitivity(float) -controlP5.Numberbox : Numberbox setValue(float) -controlP5.Numberbox : Numberbox shuffle() -controlP5.Numberbox : Numberbox update() -controlP5.Numberbox : float getMultiplier() +main.java.controlp5.Controller : CColor getColor() +main.java.controlp5.Controller : ControlBehavior getBehavior() +main.java.controlp5.Controller : ControlWindow getControlWindow() +main.java.controlp5.Controller : ControlWindow getWindow() +main.java.controlp5.Controller : ControllerProperty getProperty(String) +main.java.controlp5.Controller : ControllerProperty getProperty(String, String) +main.java.controlp5.Controller : ControllerView getView() +main.java.controlp5.Controller : Label getCaptionLabel() +main.java.controlp5.Controller : Label getValueLabel() +main.java.controlp5.Controller : List getControllerPlugList() +main.java.controlp5.Controller : Numberbox addCallback(CallbackListener) +main.java.controlp5.Controller : Numberbox addListener(ControlListener) +main.java.controlp5.Controller : Numberbox addListenerFor(int, CallbackListener) +main.java.controlp5.Controller : Numberbox align(int, int, int, int) +main.java.controlp5.Controller : Numberbox bringToFront() +main.java.controlp5.Controller : Numberbox bringToFront(ControllerInterface) +main.java.controlp5.Controller : Numberbox hide() +main.java.controlp5.Controller : Numberbox linebreak() +main.java.controlp5.Controller : Numberbox listen(boolean) +main.java.controlp5.Controller : Numberbox lock() +main.java.controlp5.Controller : Numberbox onChange(CallbackListener) +main.java.controlp5.Controller : Numberbox onClick(CallbackListener) +main.java.controlp5.Controller : Numberbox onDoublePress(CallbackListener) +main.java.controlp5.Controller : Numberbox onDrag(CallbackListener) +main.java.controlp5.Controller : Numberbox onDraw(ControllerView) +main.java.controlp5.Controller : Numberbox onEndDrag(CallbackListener) +main.java.controlp5.Controller : Numberbox onEnter(CallbackListener) +main.java.controlp5.Controller : Numberbox onLeave(CallbackListener) +main.java.controlp5.Controller : Numberbox onMove(CallbackListener) +main.java.controlp5.Controller : Numberbox onPress(CallbackListener) +main.java.controlp5.Controller : Numberbox onRelease(CallbackListener) +main.java.controlp5.Controller : Numberbox onReleaseOutside(CallbackListener) +main.java.controlp5.Controller : Numberbox onStartDrag(CallbackListener) +main.java.controlp5.Controller : Numberbox onWheel(CallbackListener) +main.java.controlp5.Controller : Numberbox plugTo(Object) +main.java.controlp5.Controller : Numberbox plugTo(Object, String) +main.java.controlp5.Controller : Numberbox plugTo(Object[]) +main.java.controlp5.Controller : Numberbox plugTo(Object[], String) +main.java.controlp5.Controller : Numberbox registerProperty(String) +main.java.controlp5.Controller : Numberbox registerProperty(String, String) +main.java.controlp5.Controller : Numberbox registerTooltip(String) +main.java.controlp5.Controller : Numberbox removeBehavior() +main.java.controlp5.Controller : Numberbox removeCallback() +main.java.controlp5.Controller : Numberbox removeCallback(CallbackListener) +main.java.controlp5.Controller : Numberbox removeListener(ControlListener) +main.java.controlp5.Controller : Numberbox removeListenerFor(int, CallbackListener) +main.java.controlp5.Controller : Numberbox removeListenersFor(int) +main.java.controlp5.Controller : Numberbox removeProperty(String) +main.java.controlp5.Controller : Numberbox removeProperty(String, String) +main.java.controlp5.Controller : Numberbox setArrayValue(float[]) +main.java.controlp5.Controller : Numberbox setArrayValue(int, float) +main.java.controlp5.Controller : Numberbox setBehavior(ControlBehavior) +main.java.controlp5.Controller : Numberbox setBroadcast(boolean) +main.java.controlp5.Controller : Numberbox setCaptionLabel(String) +main.java.controlp5.Controller : Numberbox setColor(CColor) +main.java.controlp5.Controller : Numberbox setColorActive(int) +main.java.controlp5.Controller : Numberbox setColorBackground(int) +main.java.controlp5.Controller : Numberbox setColorCaptionLabel(int) +main.java.controlp5.Controller : Numberbox setColorForeground(int) +main.java.controlp5.Controller : Numberbox setColorLabel(int) +main.java.controlp5.Controller : Numberbox setColorValue(int) +main.java.controlp5.Controller : Numberbox setColorValueLabel(int) +main.java.controlp5.Controller : Numberbox setDecimalPrecision(int) +main.java.controlp5.Controller : Numberbox setDefaultValue(float) +main.java.controlp5.Controller : Numberbox setHeight(int) +main.java.controlp5.Controller : Numberbox setId(int) +main.java.controlp5.Controller : Numberbox setImage(PImage) +main.java.controlp5.Controller : Numberbox setImage(PImage, int) +main.java.controlp5.Controller : Numberbox setImages(PImage, PImage, PImage) +main.java.controlp5.Controller : Numberbox setImages(PImage, PImage, PImage, PImage) +main.java.controlp5.Controller : Numberbox setLabel(String) +main.java.controlp5.Controller : Numberbox setLabelVisible(boolean) +main.java.controlp5.Controller : Numberbox setLock(boolean) +main.java.controlp5.Controller : Numberbox setMax(float) +main.java.controlp5.Controller : Numberbox setMin(float) +main.java.controlp5.Controller : Numberbox setMouseOver(boolean) +main.java.controlp5.Controller : Numberbox setMoveable(boolean) +main.java.controlp5.Controller : Numberbox setPosition(float, float) +main.java.controlp5.Controller : Numberbox setPosition(float[]) +main.java.controlp5.Controller : Numberbox setSize(PImage) +main.java.controlp5.Controller : Numberbox setSize(int, int) +main.java.controlp5.Controller : Numberbox setStringValue(String) +main.java.controlp5.Controller : Numberbox setUpdate(boolean) +main.java.controlp5.Controller : Numberbox setValue(float) +main.java.controlp5.Controller : Numberbox setValueLabel(String) +main.java.controlp5.Controller : Numberbox setValueSelf(float) +main.java.controlp5.Controller : Numberbox setView(ControllerView) +main.java.controlp5.Controller : Numberbox setVisible(boolean) +main.java.controlp5.Controller : Numberbox setWidth(int) +main.java.controlp5.Controller : Numberbox show() +main.java.controlp5.Controller : Numberbox unlock() +main.java.controlp5.Controller : Numberbox unplugFrom(Object) +main.java.controlp5.Controller : Numberbox unplugFrom(Object[]) +main.java.controlp5.Controller : Numberbox unregisterTooltip() +main.java.controlp5.Controller : Numberbox update() +main.java.controlp5.Controller : Numberbox updateSize() +main.java.controlp5.Controller : Pointer getPointer() +main.java.controlp5.Controller : String getAddress() +main.java.controlp5.Controller : String getInfo() +main.java.controlp5.Controller : String getName() +main.java.controlp5.Controller : String getStringValue() +main.java.controlp5.Controller : String toString() +main.java.controlp5.Controller : Tab getTab() +main.java.controlp5.Controller : boolean isActive() +main.java.controlp5.Controller : boolean isBroadcast() +main.java.controlp5.Controller : boolean isInside() +main.java.controlp5.Controller : boolean isLabelVisible() +main.java.controlp5.Controller : boolean isListening() +main.java.controlp5.Controller : boolean isLock() +main.java.controlp5.Controller : boolean isMouseOver() +main.java.controlp5.Controller : boolean isMousePressed() +main.java.controlp5.Controller : boolean isMoveable() +main.java.controlp5.Controller : boolean isUpdate() +main.java.controlp5.Controller : boolean isVisible() +main.java.controlp5.Controller : float getArrayValue(int) +main.java.controlp5.Controller : float getDefaultValue() +main.java.controlp5.Controller : float getMax() +main.java.controlp5.Controller : float getMin() +main.java.controlp5.Controller : float getValue() +main.java.controlp5.Controller : float[] getAbsolutePosition() +main.java.controlp5.Controller : float[] getArrayValue() +main.java.controlp5.Controller : float[] getPosition() +main.java.controlp5.Controller : int getDecimalPrecision() +main.java.controlp5.Controller : int getHeight() +main.java.controlp5.Controller : int getId() +main.java.controlp5.Controller : int getWidth() +main.java.controlp5.Controller : int listenerSize() +main.java.controlp5.Controller : void remove() +main.java.controlp5.Controller : void setView(ControllerView, int) +main.java.controlp5.Numberbox : Numberbox linebreak() +main.java.controlp5.Numberbox : Numberbox setDirection(int) +main.java.controlp5.Numberbox : Numberbox setMultiplier(float) +main.java.controlp5.Numberbox : Numberbox setRange(float, float) +main.java.controlp5.Numberbox : Numberbox setScrollSensitivity(float) +main.java.controlp5.Numberbox : Numberbox setValue(float) +main.java.controlp5.Numberbox : Numberbox shuffle() +main.java.controlp5.Numberbox : Numberbox update() +main.java.controlp5.Numberbox : float getMultiplier() java.lang.Object : String toString() java.lang.Object : boolean equals(Object) diff --git a/examples/controllers/ControlP5radioButton/ControlP5radioButton.pde b/examples/controllers/ControlP5radioButton/ControlP5radioButton.pde index 9777072..2458f17 100644 --- a/examples/controllers/ControlP5radioButton/ControlP5radioButton.pde +++ b/examples/controllers/ControlP5radioButton/ControlP5radioButton.pde @@ -92,142 +92,142 @@ Format: ClassName : returnType methodName(parameter type) -controlP5.ControlGroup : RadioButton activateEvent(boolean) -controlP5.ControlGroup : RadioButton addListener(ControlListener) -controlP5.ControlGroup : RadioButton removeListener(ControlListener) -controlP5.ControlGroup : RadioButton setBackgroundColor(int) -controlP5.ControlGroup : RadioButton setBackgroundHeight(int) -controlP5.ControlGroup : RadioButton setBarHeight(int) -controlP5.ControlGroup : RadioButton setSize(int, int) -controlP5.ControlGroup : RadioButton updateInternalEvents(PApplet) -controlP5.ControlGroup : String getInfo() -controlP5.ControlGroup : String toString() -controlP5.ControlGroup : int getBackgroundHeight() -controlP5.ControlGroup : int getBarHeight() -controlP5.ControlGroup : int listenerSize() -controlP5.ControllerGroup : CColor getColor() -controlP5.ControllerGroup : Canvas addCanvas(Canvas) -controlP5.ControllerGroup : ControlWindow getWindow() -controlP5.ControllerGroup : Controller getController(String) -controlP5.ControllerGroup : ControllerProperty getProperty(String) -controlP5.ControllerGroup : ControllerProperty getProperty(String, String) -controlP5.ControllerGroup : Label getCaptionLabel() -controlP5.ControllerGroup : Label getValueLabel() -controlP5.ControllerGroup : RadioButton add(ControllerInterface) -controlP5.ControllerGroup : RadioButton addListener(ControlListener) -controlP5.ControllerGroup : RadioButton bringToFront() -controlP5.ControllerGroup : RadioButton bringToFront(ControllerInterface) -controlP5.ControllerGroup : RadioButton close() -controlP5.ControllerGroup : RadioButton disableCollapse() -controlP5.ControllerGroup : RadioButton enableCollapse() -controlP5.ControllerGroup : RadioButton hide() -controlP5.ControllerGroup : RadioButton hideArrow() -controlP5.ControllerGroup : RadioButton hideBar() -controlP5.ControllerGroup : RadioButton moveTo(ControlWindow) -controlP5.ControllerGroup : RadioButton moveTo(PApplet) -controlP5.ControllerGroup : RadioButton open() -controlP5.ControllerGroup : RadioButton registerProperty(String) -controlP5.ControllerGroup : RadioButton registerProperty(String, String) -controlP5.ControllerGroup : RadioButton remove(CDrawable) -controlP5.ControllerGroup : RadioButton remove(ControllerInterface) -controlP5.ControllerGroup : RadioButton removeCanvas(Canvas) -controlP5.ControllerGroup : RadioButton removeListener(ControlListener) -controlP5.ControllerGroup : RadioButton removeProperty(String) -controlP5.ControllerGroup : RadioButton removeProperty(String, String) -controlP5.ControllerGroup : RadioButton setAddress(String) -controlP5.ControllerGroup : RadioButton setArrayValue(float[]) -controlP5.ControllerGroup : RadioButton setArrayValue(int, float) -controlP5.ControllerGroup : RadioButton setCaptionLabel(String) -controlP5.ControllerGroup : RadioButton setColor(CColor) -controlP5.ControllerGroup : RadioButton setColorActive(int) -controlP5.ControllerGroup : RadioButton setColorBackground(int) -controlP5.ControllerGroup : RadioButton setColorForeground(int) -controlP5.ControllerGroup : RadioButton setColorLabel(int) -controlP5.ControllerGroup : RadioButton setColorValue(int) -controlP5.ControllerGroup : RadioButton setHeight(int) -controlP5.ControllerGroup : RadioButton setId(int) -controlP5.ControllerGroup : RadioButton setLabel(String) -controlP5.ControllerGroup : RadioButton setMouseOver(boolean) -controlP5.ControllerGroup : RadioButton setMoveable(boolean) -controlP5.ControllerGroup : RadioButton setOpen(boolean) -controlP5.ControllerGroup : RadioButton setPosition(float, float) -controlP5.ControllerGroup : RadioButton setPosition(float[]) -controlP5.ControllerGroup : RadioButton setSize(int, int) -controlP5.ControllerGroup : RadioButton setStringValue(String) -controlP5.ControllerGroup : RadioButton setTitle(String) -controlP5.ControllerGroup : RadioButton setUpdate(boolean) -controlP5.ControllerGroup : RadioButton setValue(float) -controlP5.ControllerGroup : RadioButton setVisible(boolean) -controlP5.ControllerGroup : RadioButton setWidth(int) -controlP5.ControllerGroup : RadioButton show() -controlP5.ControllerGroup : RadioButton showArrow() -controlP5.ControllerGroup : RadioButton showBar() -controlP5.ControllerGroup : RadioButton update() -controlP5.ControllerGroup : RadioButton updateAbsolutePosition() -controlP5.ControllerGroup : String getAddress() -controlP5.ControllerGroup : String getInfo() -controlP5.ControllerGroup : String getName() -controlP5.ControllerGroup : String getStringValue() -controlP5.ControllerGroup : String toString() -controlP5.ControllerGroup : Tab getTab() -controlP5.ControllerGroup : boolean isBarVisible() -controlP5.ControllerGroup : boolean isCollapse() -controlP5.ControllerGroup : boolean isMouseOver() -controlP5.ControllerGroup : boolean isMoveable() -controlP5.ControllerGroup : boolean isOpen() -controlP5.ControllerGroup : boolean isUpdate() -controlP5.ControllerGroup : boolean isVisible() -controlP5.ControllerGroup : boolean setMousePressed(boolean) -controlP5.ControllerGroup : float getArrayValue(int) -controlP5.ControllerGroup : float getValue() -controlP5.ControllerGroup : float[] getArrayValue() -controlP5.ControllerGroup : float[] getPosition() -controlP5.ControllerGroup : int getHeight() -controlP5.ControllerGroup : int getId() -controlP5.ControllerGroup : int getWidth() -controlP5.ControllerGroup : int listenerSize() -controlP5.ControllerGroup : void controlEvent(ControlEvent) -controlP5.ControllerGroup : void remove() -controlP5.RadioButton : List getItems() -controlP5.RadioButton : RadioButton activate(String) -controlP5.RadioButton : RadioButton activate(int) -controlP5.RadioButton : RadioButton addItem(String, float) -controlP5.RadioButton : RadioButton addItem(Toggle, float) -controlP5.RadioButton : RadioButton align(int, int) -controlP5.RadioButton : RadioButton align(int[]) -controlP5.RadioButton : RadioButton alignX(int) -controlP5.RadioButton : RadioButton alignY(int) -controlP5.RadioButton : RadioButton deactivate(String) -controlP5.RadioButton : RadioButton deactivate(int) -controlP5.RadioButton : RadioButton deactivateAll() -controlP5.RadioButton : RadioButton hideLabels() -controlP5.RadioButton : RadioButton plugTo(Object) -controlP5.RadioButton : RadioButton plugTo(Object, String) -controlP5.RadioButton : RadioButton removeItem(String) -controlP5.RadioButton : RadioButton setArrayValue(float[]) -controlP5.RadioButton : RadioButton setColorLabels(int) -controlP5.RadioButton : RadioButton setImage(PImage) -controlP5.RadioButton : RadioButton setImage(PImage, int) -controlP5.RadioButton : RadioButton setImages(PImage, PImage, PImage) -controlP5.RadioButton : RadioButton setItemHeight(int) -controlP5.RadioButton : RadioButton setItemWidth(int) -controlP5.RadioButton : RadioButton setItemsPerRow(int) -controlP5.RadioButton : RadioButton setLabelPadding(int, int) -controlP5.RadioButton : RadioButton setNoneSelectedAllowed(boolean) -controlP5.RadioButton : RadioButton setSize(PImage) -controlP5.RadioButton : RadioButton setSize(int, int) -controlP5.RadioButton : RadioButton setSpacingColumn(int) -controlP5.RadioButton : RadioButton setSpacingRow(int) -controlP5.RadioButton : RadioButton showLabels() -controlP5.RadioButton : RadioButton toUpperCase(boolean) -controlP5.RadioButton : RadioButton toggle(int) -controlP5.RadioButton : String getInfo() -controlP5.RadioButton : Toggle getItem(String) -controlP5.RadioButton : Toggle getItem(int) -controlP5.RadioButton : boolean getState(String) -controlP5.RadioButton : boolean getState(int) -controlP5.RadioButton : int[] getAlign() -controlP5.RadioButton : void updateLayout() +main.java.controlp5.ControlGroup : RadioButton activateEvent(boolean) +main.java.controlp5.ControlGroup : RadioButton addListener(ControlListener) +main.java.controlp5.ControlGroup : RadioButton removeListener(ControlListener) +main.java.controlp5.ControlGroup : RadioButton setBackgroundColor(int) +main.java.controlp5.ControlGroup : RadioButton setBackgroundHeight(int) +main.java.controlp5.ControlGroup : RadioButton setBarHeight(int) +main.java.controlp5.ControlGroup : RadioButton setSize(int, int) +main.java.controlp5.ControlGroup : RadioButton updateInternalEvents(PApplet) +main.java.controlp5.ControlGroup : String getInfo() +main.java.controlp5.ControlGroup : String toString() +main.java.controlp5.ControlGroup : int getBackgroundHeight() +main.java.controlp5.ControlGroup : int getBarHeight() +main.java.controlp5.ControlGroup : int listenerSize() +main.java.controlp5.ControllerGroup : CColor getColor() +main.java.controlp5.ControllerGroup : Canvas addCanvas(Canvas) +main.java.controlp5.ControllerGroup : ControlWindow getWindow() +main.java.controlp5.ControllerGroup : Controller getController(String) +main.java.controlp5.ControllerGroup : ControllerProperty getProperty(String) +main.java.controlp5.ControllerGroup : ControllerProperty getProperty(String, String) +main.java.controlp5.ControllerGroup : Label getCaptionLabel() +main.java.controlp5.ControllerGroup : Label getValueLabel() +main.java.controlp5.ControllerGroup : RadioButton add(ControllerInterface) +main.java.controlp5.ControllerGroup : RadioButton addListener(ControlListener) +main.java.controlp5.ControllerGroup : RadioButton bringToFront() +main.java.controlp5.ControllerGroup : RadioButton bringToFront(ControllerInterface) +main.java.controlp5.ControllerGroup : RadioButton close() +main.java.controlp5.ControllerGroup : RadioButton disableCollapse() +main.java.controlp5.ControllerGroup : RadioButton enableCollapse() +main.java.controlp5.ControllerGroup : RadioButton hide() +main.java.controlp5.ControllerGroup : RadioButton hideArrow() +main.java.controlp5.ControllerGroup : RadioButton hideBar() +main.java.controlp5.ControllerGroup : RadioButton moveTo(ControlWindow) +main.java.controlp5.ControllerGroup : RadioButton moveTo(PApplet) +main.java.controlp5.ControllerGroup : RadioButton open() +main.java.controlp5.ControllerGroup : RadioButton registerProperty(String) +main.java.controlp5.ControllerGroup : RadioButton registerProperty(String, String) +main.java.controlp5.ControllerGroup : RadioButton remove(CDrawable) +main.java.controlp5.ControllerGroup : RadioButton remove(ControllerInterface) +main.java.controlp5.ControllerGroup : RadioButton removeCanvas(Canvas) +main.java.controlp5.ControllerGroup : RadioButton removeListener(ControlListener) +main.java.controlp5.ControllerGroup : RadioButton removeProperty(String) +main.java.controlp5.ControllerGroup : RadioButton removeProperty(String, String) +main.java.controlp5.ControllerGroup : RadioButton setAddress(String) +main.java.controlp5.ControllerGroup : RadioButton setArrayValue(float[]) +main.java.controlp5.ControllerGroup : RadioButton setArrayValue(int, float) +main.java.controlp5.ControllerGroup : RadioButton setCaptionLabel(String) +main.java.controlp5.ControllerGroup : RadioButton setColor(CColor) +main.java.controlp5.ControllerGroup : RadioButton setColorActive(int) +main.java.controlp5.ControllerGroup : RadioButton setColorBackground(int) +main.java.controlp5.ControllerGroup : RadioButton setColorForeground(int) +main.java.controlp5.ControllerGroup : RadioButton setColorLabel(int) +main.java.controlp5.ControllerGroup : RadioButton setColorValue(int) +main.java.controlp5.ControllerGroup : RadioButton setHeight(int) +main.java.controlp5.ControllerGroup : RadioButton setId(int) +main.java.controlp5.ControllerGroup : RadioButton setLabel(String) +main.java.controlp5.ControllerGroup : RadioButton setMouseOver(boolean) +main.java.controlp5.ControllerGroup : RadioButton setMoveable(boolean) +main.java.controlp5.ControllerGroup : RadioButton setOpen(boolean) +main.java.controlp5.ControllerGroup : RadioButton setPosition(float, float) +main.java.controlp5.ControllerGroup : RadioButton setPosition(float[]) +main.java.controlp5.ControllerGroup : RadioButton setSize(int, int) +main.java.controlp5.ControllerGroup : RadioButton setStringValue(String) +main.java.controlp5.ControllerGroup : RadioButton setTitle(String) +main.java.controlp5.ControllerGroup : RadioButton setUpdate(boolean) +main.java.controlp5.ControllerGroup : RadioButton setValue(float) +main.java.controlp5.ControllerGroup : RadioButton setVisible(boolean) +main.java.controlp5.ControllerGroup : RadioButton setWidth(int) +main.java.controlp5.ControllerGroup : RadioButton show() +main.java.controlp5.ControllerGroup : RadioButton showArrow() +main.java.controlp5.ControllerGroup : RadioButton showBar() +main.java.controlp5.ControllerGroup : RadioButton update() +main.java.controlp5.ControllerGroup : RadioButton updateAbsolutePosition() +main.java.controlp5.ControllerGroup : String getAddress() +main.java.controlp5.ControllerGroup : String getInfo() +main.java.controlp5.ControllerGroup : String getName() +main.java.controlp5.ControllerGroup : String getStringValue() +main.java.controlp5.ControllerGroup : String toString() +main.java.controlp5.ControllerGroup : Tab getTab() +main.java.controlp5.ControllerGroup : boolean isBarVisible() +main.java.controlp5.ControllerGroup : boolean isCollapse() +main.java.controlp5.ControllerGroup : boolean isMouseOver() +main.java.controlp5.ControllerGroup : boolean isMoveable() +main.java.controlp5.ControllerGroup : boolean isOpen() +main.java.controlp5.ControllerGroup : boolean isUpdate() +main.java.controlp5.ControllerGroup : boolean isVisible() +main.java.controlp5.ControllerGroup : boolean setMousePressed(boolean) +main.java.controlp5.ControllerGroup : float getArrayValue(int) +main.java.controlp5.ControllerGroup : float getValue() +main.java.controlp5.ControllerGroup : float[] getArrayValue() +main.java.controlp5.ControllerGroup : float[] getPosition() +main.java.controlp5.ControllerGroup : int getHeight() +main.java.controlp5.ControllerGroup : int getId() +main.java.controlp5.ControllerGroup : int getWidth() +main.java.controlp5.ControllerGroup : int listenerSize() +main.java.controlp5.ControllerGroup : void controlEvent(ControlEvent) +main.java.controlp5.ControllerGroup : void remove() +main.java.controlp5.RadioButton : List getItems() +main.java.controlp5.RadioButton : RadioButton activate(String) +main.java.controlp5.RadioButton : RadioButton activate(int) +main.java.controlp5.RadioButton : RadioButton addItem(String, float) +main.java.controlp5.RadioButton : RadioButton addItem(Toggle, float) +main.java.controlp5.RadioButton : RadioButton align(int, int) +main.java.controlp5.RadioButton : RadioButton align(int[]) +main.java.controlp5.RadioButton : RadioButton alignX(int) +main.java.controlp5.RadioButton : RadioButton alignY(int) +main.java.controlp5.RadioButton : RadioButton deactivate(String) +main.java.controlp5.RadioButton : RadioButton deactivate(int) +main.java.controlp5.RadioButton : RadioButton deactivateAll() +main.java.controlp5.RadioButton : RadioButton hideLabels() +main.java.controlp5.RadioButton : RadioButton plugTo(Object) +main.java.controlp5.RadioButton : RadioButton plugTo(Object, String) +main.java.controlp5.RadioButton : RadioButton removeItem(String) +main.java.controlp5.RadioButton : RadioButton setArrayValue(float[]) +main.java.controlp5.RadioButton : RadioButton setColorLabels(int) +main.java.controlp5.RadioButton : RadioButton setImage(PImage) +main.java.controlp5.RadioButton : RadioButton setImage(PImage, int) +main.java.controlp5.RadioButton : RadioButton setImages(PImage, PImage, PImage) +main.java.controlp5.RadioButton : RadioButton setItemHeight(int) +main.java.controlp5.RadioButton : RadioButton setItemWidth(int) +main.java.controlp5.RadioButton : RadioButton setItemsPerRow(int) +main.java.controlp5.RadioButton : RadioButton setLabelPadding(int, int) +main.java.controlp5.RadioButton : RadioButton setNoneSelectedAllowed(boolean) +main.java.controlp5.RadioButton : RadioButton setSize(PImage) +main.java.controlp5.RadioButton : RadioButton setSize(int, int) +main.java.controlp5.RadioButton : RadioButton setSpacingColumn(int) +main.java.controlp5.RadioButton : RadioButton setSpacingRow(int) +main.java.controlp5.RadioButton : RadioButton showLabels() +main.java.controlp5.RadioButton : RadioButton toUpperCase(boolean) +main.java.controlp5.RadioButton : RadioButton toggle(int) +main.java.controlp5.RadioButton : String getInfo() +main.java.controlp5.RadioButton : Toggle getItem(String) +main.java.controlp5.RadioButton : Toggle getItem(int) +main.java.controlp5.RadioButton : boolean getState(String) +main.java.controlp5.RadioButton : boolean getState(int) +main.java.controlp5.RadioButton : int[] getAlign() +main.java.controlp5.RadioButton : void updateLayout() java.lang.Object : String toString() java.lang.Object : boolean equals(Object) diff --git a/examples/controllers/ControlP5range/ControlP5range.pde b/examples/controllers/ControlP5range/ControlP5range.pde index 9f4ee2a..206b264 100644 --- a/examples/controllers/ControlP5range/ControlP5range.pde +++ b/examples/controllers/ControlP5range/ControlP5range.pde @@ -83,157 +83,157 @@ Format: ClassName : returnType methodName(parameter type) -controlP5.Controller : CColor getColor() -controlP5.Controller : ControlBehavior getBehavior() -controlP5.Controller : ControlWindow getControlWindow() -controlP5.Controller : ControlWindow getWindow() -controlP5.Controller : ControllerProperty getProperty(String) -controlP5.Controller : ControllerProperty getProperty(String, String) -controlP5.Controller : ControllerView getView() -controlP5.Controller : Label getCaptionLabel() -controlP5.Controller : Label getValueLabel() -controlP5.Controller : List getControllerPlugList() -controlP5.Controller : Pointer getPointer() -controlP5.Controller : Range addCallback(CallbackListener) -controlP5.Controller : Range addListener(ControlListener) -controlP5.Controller : Range addListenerFor(int, CallbackListener) -controlP5.Controller : Range align(int, int, int, int) -controlP5.Controller : Range bringToFront() -controlP5.Controller : Range bringToFront(ControllerInterface) -controlP5.Controller : Range hide() -controlP5.Controller : Range linebreak() -controlP5.Controller : Range listen(boolean) -controlP5.Controller : Range lock() -controlP5.Controller : Range onChange(CallbackListener) -controlP5.Controller : Range onClick(CallbackListener) -controlP5.Controller : Range onDoublePress(CallbackListener) -controlP5.Controller : Range onDrag(CallbackListener) -controlP5.Controller : Range onDraw(ControllerView) -controlP5.Controller : Range onEndDrag(CallbackListener) -controlP5.Controller : Range onEnter(CallbackListener) -controlP5.Controller : Range onLeave(CallbackListener) -controlP5.Controller : Range onMove(CallbackListener) -controlP5.Controller : Range onPress(CallbackListener) -controlP5.Controller : Range onRelease(CallbackListener) -controlP5.Controller : Range onReleaseOutside(CallbackListener) -controlP5.Controller : Range onStartDrag(CallbackListener) -controlP5.Controller : Range onWheel(CallbackListener) -controlP5.Controller : Range plugTo(Object) -controlP5.Controller : Range plugTo(Object, String) -controlP5.Controller : Range plugTo(Object[]) -controlP5.Controller : Range plugTo(Object[], String) -controlP5.Controller : Range registerProperty(String) -controlP5.Controller : Range registerProperty(String, String) -controlP5.Controller : Range registerTooltip(String) -controlP5.Controller : Range removeBehavior() -controlP5.Controller : Range removeCallback() -controlP5.Controller : Range removeCallback(CallbackListener) -controlP5.Controller : Range removeListener(ControlListener) -controlP5.Controller : Range removeListenerFor(int, CallbackListener) -controlP5.Controller : Range removeListenersFor(int) -controlP5.Controller : Range removeProperty(String) -controlP5.Controller : Range removeProperty(String, String) -controlP5.Controller : Range setArrayValue(float[]) -controlP5.Controller : Range setArrayValue(int, float) -controlP5.Controller : Range setBehavior(ControlBehavior) -controlP5.Controller : Range setBroadcast(boolean) -controlP5.Controller : Range setCaptionLabel(String) -controlP5.Controller : Range setColor(CColor) -controlP5.Controller : Range setColorActive(int) -controlP5.Controller : Range setColorBackground(int) -controlP5.Controller : Range setColorCaptionLabel(int) -controlP5.Controller : Range setColorForeground(int) -controlP5.Controller : Range setColorLabel(int) -controlP5.Controller : Range setColorValue(int) -controlP5.Controller : Range setColorValueLabel(int) -controlP5.Controller : Range setDecimalPrecision(int) -controlP5.Controller : Range setDefaultValue(float) -controlP5.Controller : Range setHeight(int) -controlP5.Controller : Range setId(int) -controlP5.Controller : Range setImage(PImage) -controlP5.Controller : Range setImage(PImage, int) -controlP5.Controller : Range setImages(PImage, PImage, PImage) -controlP5.Controller : Range setImages(PImage, PImage, PImage, PImage) -controlP5.Controller : Range setLabel(String) -controlP5.Controller : Range setLabelVisible(boolean) -controlP5.Controller : Range setLock(boolean) -controlP5.Controller : Range setMax(float) -controlP5.Controller : Range setMin(float) -controlP5.Controller : Range setMouseOver(boolean) -controlP5.Controller : Range setMoveable(boolean) -controlP5.Controller : Range setPosition(float, float) -controlP5.Controller : Range setPosition(float[]) -controlP5.Controller : Range setSize(PImage) -controlP5.Controller : Range setSize(int, int) -controlP5.Controller : Range setStringValue(String) -controlP5.Controller : Range setUpdate(boolean) -controlP5.Controller : Range setValue(float) -controlP5.Controller : Range setValueLabel(String) -controlP5.Controller : Range setValueSelf(float) -controlP5.Controller : Range setView(ControllerView) -controlP5.Controller : Range setVisible(boolean) -controlP5.Controller : Range setWidth(int) -controlP5.Controller : Range show() -controlP5.Controller : Range unlock() -controlP5.Controller : Range unplugFrom(Object) -controlP5.Controller : Range unplugFrom(Object[]) -controlP5.Controller : Range unregisterTooltip() -controlP5.Controller : Range update() -controlP5.Controller : Range updateSize() -controlP5.Controller : String getAddress() -controlP5.Controller : String getInfo() -controlP5.Controller : String getName() -controlP5.Controller : String getStringValue() -controlP5.Controller : String toString() -controlP5.Controller : Tab getTab() -controlP5.Controller : boolean isActive() -controlP5.Controller : boolean isBroadcast() -controlP5.Controller : boolean isInside() -controlP5.Controller : boolean isLabelVisible() -controlP5.Controller : boolean isListening() -controlP5.Controller : boolean isLock() -controlP5.Controller : boolean isMouseOver() -controlP5.Controller : boolean isMousePressed() -controlP5.Controller : boolean isMoveable() -controlP5.Controller : boolean isUpdate() -controlP5.Controller : boolean isVisible() -controlP5.Controller : float getArrayValue(int) -controlP5.Controller : float getDefaultValue() -controlP5.Controller : float getMax() -controlP5.Controller : float getMin() -controlP5.Controller : float getValue() -controlP5.Controller : float[] getAbsolutePosition() -controlP5.Controller : float[] getArrayValue() -controlP5.Controller : float[] getPosition() -controlP5.Controller : int getDecimalPrecision() -controlP5.Controller : int getHeight() -controlP5.Controller : int getId() -controlP5.Controller : int getWidth() -controlP5.Controller : int listenerSize() -controlP5.Controller : void remove() -controlP5.Controller : void setView(ControllerView, int) -controlP5.Range : ArrayList getTickMarks() -controlP5.Range : Range setArrayValue(float[]) -controlP5.Range : Range setColorCaptionLabel(int) -controlP5.Range : Range setColorTickMark(int) -controlP5.Range : Range setColorValueLabel(int) -controlP5.Range : Range setHandleSize(int) -controlP5.Range : Range setHeight(int) -controlP5.Range : Range setHighValue(float) -controlP5.Range : Range setHighValueLabel(String) -controlP5.Range : Range setLowValue(float) -controlP5.Range : Range setLowValueLabel(String) -controlP5.Range : Range setMax(float) -controlP5.Range : Range setMin(float) -controlP5.Range : Range setNumberOfTickMarks(int) -controlP5.Range : Range setRange(float, float) -controlP5.Range : Range setRangeValues(float, float) -controlP5.Range : Range setWidth(int) -controlP5.Range : Range showTickMarks(boolean) -controlP5.Range : Range snapToTickMarks(boolean) -controlP5.Range : float getHighValue() -controlP5.Range : float getLowValue() -controlP5.Range : float[] getArrayValue() +main.java.controlp5.Controller : CColor getColor() +main.java.controlp5.Controller : ControlBehavior getBehavior() +main.java.controlp5.Controller : ControlWindow getControlWindow() +main.java.controlp5.Controller : ControlWindow getWindow() +main.java.controlp5.Controller : ControllerProperty getProperty(String) +main.java.controlp5.Controller : ControllerProperty getProperty(String, String) +main.java.controlp5.Controller : ControllerView getView() +main.java.controlp5.Controller : Label getCaptionLabel() +main.java.controlp5.Controller : Label getValueLabel() +main.java.controlp5.Controller : List getControllerPlugList() +main.java.controlp5.Controller : Pointer getPointer() +main.java.controlp5.Controller : Range addCallback(CallbackListener) +main.java.controlp5.Controller : Range addListener(ControlListener) +main.java.controlp5.Controller : Range addListenerFor(int, CallbackListener) +main.java.controlp5.Controller : Range align(int, int, int, int) +main.java.controlp5.Controller : Range bringToFront() +main.java.controlp5.Controller : Range bringToFront(ControllerInterface) +main.java.controlp5.Controller : Range hide() +main.java.controlp5.Controller : Range linebreak() +main.java.controlp5.Controller : Range listen(boolean) +main.java.controlp5.Controller : Range lock() +main.java.controlp5.Controller : Range onChange(CallbackListener) +main.java.controlp5.Controller : Range onClick(CallbackListener) +main.java.controlp5.Controller : Range onDoublePress(CallbackListener) +main.java.controlp5.Controller : Range onDrag(CallbackListener) +main.java.controlp5.Controller : Range onDraw(ControllerView) +main.java.controlp5.Controller : Range onEndDrag(CallbackListener) +main.java.controlp5.Controller : Range onEnter(CallbackListener) +main.java.controlp5.Controller : Range onLeave(CallbackListener) +main.java.controlp5.Controller : Range onMove(CallbackListener) +main.java.controlp5.Controller : Range onPress(CallbackListener) +main.java.controlp5.Controller : Range onRelease(CallbackListener) +main.java.controlp5.Controller : Range onReleaseOutside(CallbackListener) +main.java.controlp5.Controller : Range onStartDrag(CallbackListener) +main.java.controlp5.Controller : Range onWheel(CallbackListener) +main.java.controlp5.Controller : Range plugTo(Object) +main.java.controlp5.Controller : Range plugTo(Object, String) +main.java.controlp5.Controller : Range plugTo(Object[]) +main.java.controlp5.Controller : Range plugTo(Object[], String) +main.java.controlp5.Controller : Range registerProperty(String) +main.java.controlp5.Controller : Range registerProperty(String, String) +main.java.controlp5.Controller : Range registerTooltip(String) +main.java.controlp5.Controller : Range removeBehavior() +main.java.controlp5.Controller : Range removeCallback() +main.java.controlp5.Controller : Range removeCallback(CallbackListener) +main.java.controlp5.Controller : Range removeListener(ControlListener) +main.java.controlp5.Controller : Range removeListenerFor(int, CallbackListener) +main.java.controlp5.Controller : Range removeListenersFor(int) +main.java.controlp5.Controller : Range removeProperty(String) +main.java.controlp5.Controller : Range removeProperty(String, String) +main.java.controlp5.Controller : Range setArrayValue(float[]) +main.java.controlp5.Controller : Range setArrayValue(int, float) +main.java.controlp5.Controller : Range setBehavior(ControlBehavior) +main.java.controlp5.Controller : Range setBroadcast(boolean) +main.java.controlp5.Controller : Range setCaptionLabel(String) +main.java.controlp5.Controller : Range setColor(CColor) +main.java.controlp5.Controller : Range setColorActive(int) +main.java.controlp5.Controller : Range setColorBackground(int) +main.java.controlp5.Controller : Range setColorCaptionLabel(int) +main.java.controlp5.Controller : Range setColorForeground(int) +main.java.controlp5.Controller : Range setColorLabel(int) +main.java.controlp5.Controller : Range setColorValue(int) +main.java.controlp5.Controller : Range setColorValueLabel(int) +main.java.controlp5.Controller : Range setDecimalPrecision(int) +main.java.controlp5.Controller : Range setDefaultValue(float) +main.java.controlp5.Controller : Range setHeight(int) +main.java.controlp5.Controller : Range setId(int) +main.java.controlp5.Controller : Range setImage(PImage) +main.java.controlp5.Controller : Range setImage(PImage, int) +main.java.controlp5.Controller : Range setImages(PImage, PImage, PImage) +main.java.controlp5.Controller : Range setImages(PImage, PImage, PImage, PImage) +main.java.controlp5.Controller : Range setLabel(String) +main.java.controlp5.Controller : Range setLabelVisible(boolean) +main.java.controlp5.Controller : Range setLock(boolean) +main.java.controlp5.Controller : Range setMax(float) +main.java.controlp5.Controller : Range setMin(float) +main.java.controlp5.Controller : Range setMouseOver(boolean) +main.java.controlp5.Controller : Range setMoveable(boolean) +main.java.controlp5.Controller : Range setPosition(float, float) +main.java.controlp5.Controller : Range setPosition(float[]) +main.java.controlp5.Controller : Range setSize(PImage) +main.java.controlp5.Controller : Range setSize(int, int) +main.java.controlp5.Controller : Range setStringValue(String) +main.java.controlp5.Controller : Range setUpdate(boolean) +main.java.controlp5.Controller : Range setValue(float) +main.java.controlp5.Controller : Range setValueLabel(String) +main.java.controlp5.Controller : Range setValueSelf(float) +main.java.controlp5.Controller : Range setView(ControllerView) +main.java.controlp5.Controller : Range setVisible(boolean) +main.java.controlp5.Controller : Range setWidth(int) +main.java.controlp5.Controller : Range show() +main.java.controlp5.Controller : Range unlock() +main.java.controlp5.Controller : Range unplugFrom(Object) +main.java.controlp5.Controller : Range unplugFrom(Object[]) +main.java.controlp5.Controller : Range unregisterTooltip() +main.java.controlp5.Controller : Range update() +main.java.controlp5.Controller : Range updateSize() +main.java.controlp5.Controller : String getAddress() +main.java.controlp5.Controller : String getInfo() +main.java.controlp5.Controller : String getName() +main.java.controlp5.Controller : String getStringValue() +main.java.controlp5.Controller : String toString() +main.java.controlp5.Controller : Tab getTab() +main.java.controlp5.Controller : boolean isActive() +main.java.controlp5.Controller : boolean isBroadcast() +main.java.controlp5.Controller : boolean isInside() +main.java.controlp5.Controller : boolean isLabelVisible() +main.java.controlp5.Controller : boolean isListening() +main.java.controlp5.Controller : boolean isLock() +main.java.controlp5.Controller : boolean isMouseOver() +main.java.controlp5.Controller : boolean isMousePressed() +main.java.controlp5.Controller : boolean isMoveable() +main.java.controlp5.Controller : boolean isUpdate() +main.java.controlp5.Controller : boolean isVisible() +main.java.controlp5.Controller : float getArrayValue(int) +main.java.controlp5.Controller : float getDefaultValue() +main.java.controlp5.Controller : float getMax() +main.java.controlp5.Controller : float getMin() +main.java.controlp5.Controller : float getValue() +main.java.controlp5.Controller : float[] getAbsolutePosition() +main.java.controlp5.Controller : float[] getArrayValue() +main.java.controlp5.Controller : float[] getPosition() +main.java.controlp5.Controller : int getDecimalPrecision() +main.java.controlp5.Controller : int getHeight() +main.java.controlp5.Controller : int getId() +main.java.controlp5.Controller : int getWidth() +main.java.controlp5.Controller : int listenerSize() +main.java.controlp5.Controller : void remove() +main.java.controlp5.Controller : void setView(ControllerView, int) +main.java.controlp5.Range : ArrayList getTickMarks() +main.java.controlp5.Range : Range setArrayValue(float[]) +main.java.controlp5.Range : Range setColorCaptionLabel(int) +main.java.controlp5.Range : Range setColorTickMark(int) +main.java.controlp5.Range : Range setColorValueLabel(int) +main.java.controlp5.Range : Range setHandleSize(int) +main.java.controlp5.Range : Range setHeight(int) +main.java.controlp5.Range : Range setHighValue(float) +main.java.controlp5.Range : Range setHighValueLabel(String) +main.java.controlp5.Range : Range setLowValue(float) +main.java.controlp5.Range : Range setLowValueLabel(String) +main.java.controlp5.Range : Range setMax(float) +main.java.controlp5.Range : Range setMin(float) +main.java.controlp5.Range : Range setNumberOfTickMarks(int) +main.java.controlp5.Range : Range setRange(float, float) +main.java.controlp5.Range : Range setRangeValues(float, float) +main.java.controlp5.Range : Range setWidth(int) +main.java.controlp5.Range : Range showTickMarks(boolean) +main.java.controlp5.Range : Range snapToTickMarks(boolean) +main.java.controlp5.Range : float getHighValue() +main.java.controlp5.Range : float getLowValue() +main.java.controlp5.Range : float[] getArrayValue() java.lang.Object : String toString() java.lang.Object : boolean equals(Object) diff --git a/examples/controllers/ControlP5scrollableList/ControlP5scrollableList.pde b/examples/controllers/ControlP5scrollableList/ControlP5scrollableList.pde index 6f132a4..58555af 100644 --- a/examples/controllers/ControlP5scrollableList/ControlP5scrollableList.pde +++ b/examples/controllers/ControlP5scrollableList/ControlP5scrollableList.pde @@ -91,166 +91,166 @@ Format: ClassName : returnType methodName(parameter type) -controlP5.Controller : CColor getColor() -controlP5.Controller : ControlBehavior getBehavior() -controlP5.Controller : ControlWindow getControlWindow() -controlP5.Controller : ControlWindow getWindow() -controlP5.Controller : ControllerProperty getProperty(String) -controlP5.Controller : ControllerProperty getProperty(String, String) -controlP5.Controller : ControllerView getView() -controlP5.Controller : Label getCaptionLabel() -controlP5.Controller : Label getValueLabel() -controlP5.Controller : List getControllerPlugList() -controlP5.Controller : Pointer getPointer() -controlP5.Controller : ScrollableList addCallback(CallbackListener) -controlP5.Controller : ScrollableList addListener(ControlListener) -controlP5.Controller : ScrollableList addListenerFor(int, CallbackListener) -controlP5.Controller : ScrollableList align(int, int, int, int) -controlP5.Controller : ScrollableList bringToFront() -controlP5.Controller : ScrollableList bringToFront(ControllerInterface) -controlP5.Controller : ScrollableList hide() -controlP5.Controller : ScrollableList linebreak() -controlP5.Controller : ScrollableList listen(boolean) -controlP5.Controller : ScrollableList lock() -controlP5.Controller : ScrollableList onChange(CallbackListener) -controlP5.Controller : ScrollableList onClick(CallbackListener) -controlP5.Controller : ScrollableList onDoublePress(CallbackListener) -controlP5.Controller : ScrollableList onDrag(CallbackListener) -controlP5.Controller : ScrollableList onDraw(ControllerView) -controlP5.Controller : ScrollableList onEndDrag(CallbackListener) -controlP5.Controller : ScrollableList onEnter(CallbackListener) -controlP5.Controller : ScrollableList onLeave(CallbackListener) -controlP5.Controller : ScrollableList onMove(CallbackListener) -controlP5.Controller : ScrollableList onPress(CallbackListener) -controlP5.Controller : ScrollableList onRelease(CallbackListener) -controlP5.Controller : ScrollableList onReleaseOutside(CallbackListener) -controlP5.Controller : ScrollableList onStartDrag(CallbackListener) -controlP5.Controller : ScrollableList onWheel(CallbackListener) -controlP5.Controller : ScrollableList plugTo(Object) -controlP5.Controller : ScrollableList plugTo(Object, String) -controlP5.Controller : ScrollableList plugTo(Object[]) -controlP5.Controller : ScrollableList plugTo(Object[], String) -controlP5.Controller : ScrollableList registerProperty(String) -controlP5.Controller : ScrollableList registerProperty(String, String) -controlP5.Controller : ScrollableList registerTooltip(String) -controlP5.Controller : ScrollableList removeBehavior() -controlP5.Controller : ScrollableList removeCallback() -controlP5.Controller : ScrollableList removeCallback(CallbackListener) -controlP5.Controller : ScrollableList removeListener(ControlListener) -controlP5.Controller : ScrollableList removeListenerFor(int, CallbackListener) -controlP5.Controller : ScrollableList removeListenersFor(int) -controlP5.Controller : ScrollableList removeProperty(String) -controlP5.Controller : ScrollableList removeProperty(String, String) -controlP5.Controller : ScrollableList setArrayValue(float[]) -controlP5.Controller : ScrollableList setArrayValue(int, float) -controlP5.Controller : ScrollableList setBehavior(ControlBehavior) -controlP5.Controller : ScrollableList setBroadcast(boolean) -controlP5.Controller : ScrollableList setCaptionLabel(String) -controlP5.Controller : ScrollableList setColor(CColor) -controlP5.Controller : ScrollableList setColorActive(int) -controlP5.Controller : ScrollableList setColorBackground(int) -controlP5.Controller : ScrollableList setColorCaptionLabel(int) -controlP5.Controller : ScrollableList setColorForeground(int) -controlP5.Controller : ScrollableList setColorLabel(int) -controlP5.Controller : ScrollableList setColorValue(int) -controlP5.Controller : ScrollableList setColorValueLabel(int) -controlP5.Controller : ScrollableList setDecimalPrecision(int) -controlP5.Controller : ScrollableList setDefaultValue(float) -controlP5.Controller : ScrollableList setHeight(int) -controlP5.Controller : ScrollableList setId(int) -controlP5.Controller : ScrollableList setImage(PImage) -controlP5.Controller : ScrollableList setImage(PImage, int) -controlP5.Controller : ScrollableList setImages(PImage, PImage, PImage) -controlP5.Controller : ScrollableList setImages(PImage, PImage, PImage, PImage) -controlP5.Controller : ScrollableList setLabel(String) -controlP5.Controller : ScrollableList setLabelVisible(boolean) -controlP5.Controller : ScrollableList setLock(boolean) -controlP5.Controller : ScrollableList setMax(float) -controlP5.Controller : ScrollableList setMin(float) -controlP5.Controller : ScrollableList setMouseOver(boolean) -controlP5.Controller : ScrollableList setMoveable(boolean) -controlP5.Controller : ScrollableList setPosition(float, float) -controlP5.Controller : ScrollableList setPosition(float[]) -controlP5.Controller : ScrollableList setSize(PImage) -controlP5.Controller : ScrollableList setSize(int, int) -controlP5.Controller : ScrollableList setStringValue(String) -controlP5.Controller : ScrollableList setUpdate(boolean) -controlP5.Controller : ScrollableList setValue(float) -controlP5.Controller : ScrollableList setValueLabel(String) -controlP5.Controller : ScrollableList setValueSelf(float) -controlP5.Controller : ScrollableList setView(ControllerView) -controlP5.Controller : ScrollableList setVisible(boolean) -controlP5.Controller : ScrollableList setWidth(int) -controlP5.Controller : ScrollableList show() -controlP5.Controller : ScrollableList unlock() -controlP5.Controller : ScrollableList unplugFrom(Object) -controlP5.Controller : ScrollableList unplugFrom(Object[]) -controlP5.Controller : ScrollableList unregisterTooltip() -controlP5.Controller : ScrollableList update() -controlP5.Controller : ScrollableList updateSize() -controlP5.Controller : String getAddress() -controlP5.Controller : String getInfo() -controlP5.Controller : String getName() -controlP5.Controller : String getStringValue() -controlP5.Controller : String toString() -controlP5.Controller : Tab getTab() -controlP5.Controller : boolean isActive() -controlP5.Controller : boolean isBroadcast() -controlP5.Controller : boolean isInside() -controlP5.Controller : boolean isLabelVisible() -controlP5.Controller : boolean isListening() -controlP5.Controller : boolean isLock() -controlP5.Controller : boolean isMouseOver() -controlP5.Controller : boolean isMousePressed() -controlP5.Controller : boolean isMoveable() -controlP5.Controller : boolean isUpdate() -controlP5.Controller : boolean isVisible() -controlP5.Controller : float getArrayValue(int) -controlP5.Controller : float getDefaultValue() -controlP5.Controller : float getMax() -controlP5.Controller : float getMin() -controlP5.Controller : float getValue() -controlP5.Controller : float[] getAbsolutePosition() -controlP5.Controller : float[] getArrayValue() -controlP5.Controller : float[] getPosition() -controlP5.Controller : int getDecimalPrecision() -controlP5.Controller : int getHeight() -controlP5.Controller : int getId() -controlP5.Controller : int getWidth() -controlP5.Controller : int listenerSize() -controlP5.Controller : void remove() -controlP5.Controller : void setView(ControllerView, int) -controlP5.ScrollableList : List getItems() -controlP5.ScrollableList : Map getItem(String) -controlP5.ScrollableList : Map getItem(int) -controlP5.ScrollableList : ScrollableList addItem(String, Object) -controlP5.ScrollableList : ScrollableList addItems(List) -controlP5.ScrollableList : ScrollableList addItems(Map) -controlP5.ScrollableList : ScrollableList addItems(String[]) -controlP5.ScrollableList : ScrollableList clear() -controlP5.ScrollableList : ScrollableList close() -controlP5.ScrollableList : ScrollableList open() -controlP5.ScrollableList : ScrollableList removeItem(String) -controlP5.ScrollableList : ScrollableList removeItems(List) -controlP5.ScrollableList : ScrollableList setBackgroundColor(int) -controlP5.ScrollableList : ScrollableList setBarHeight(int) -controlP5.ScrollableList : ScrollableList setBarVisible(boolean) -controlP5.ScrollableList : ScrollableList setItemHeight(int) -controlP5.ScrollableList : ScrollableList setItems(List) -controlP5.ScrollableList : ScrollableList setItems(Map) -controlP5.ScrollableList : ScrollableList setItems(String[]) -controlP5.ScrollableList : ScrollableList setOpen(boolean) -controlP5.ScrollableList : ScrollableList setScrollSensitivity(float) -controlP5.ScrollableList : ScrollableList setType(int) -controlP5.ScrollableList : boolean isBarVisible() -controlP5.ScrollableList : boolean isOpen() -controlP5.ScrollableList : int getBackgroundColor() -controlP5.ScrollableList : int getBarHeight() -controlP5.ScrollableList : int getHeight() -controlP5.ScrollableList : void controlEvent(ControlEvent) -controlP5.ScrollableList : void keyEvent(KeyEvent) -controlP5.ScrollableList : void setDirection(int) -controlP5.ScrollableList : void updateItemIndexOffset() +main.java.controlp5.Controller : CColor getColor() +main.java.controlp5.Controller : ControlBehavior getBehavior() +main.java.controlp5.Controller : ControlWindow getControlWindow() +main.java.controlp5.Controller : ControlWindow getWindow() +main.java.controlp5.Controller : ControllerProperty getProperty(String) +main.java.controlp5.Controller : ControllerProperty getProperty(String, String) +main.java.controlp5.Controller : ControllerView getView() +main.java.controlp5.Controller : Label getCaptionLabel() +main.java.controlp5.Controller : Label getValueLabel() +main.java.controlp5.Controller : List getControllerPlugList() +main.java.controlp5.Controller : Pointer getPointer() +main.java.controlp5.Controller : ScrollableList addCallback(CallbackListener) +main.java.controlp5.Controller : ScrollableList addListener(ControlListener) +main.java.controlp5.Controller : ScrollableList addListenerFor(int, CallbackListener) +main.java.controlp5.Controller : ScrollableList align(int, int, int, int) +main.java.controlp5.Controller : ScrollableList bringToFront() +main.java.controlp5.Controller : ScrollableList bringToFront(ControllerInterface) +main.java.controlp5.Controller : ScrollableList hide() +main.java.controlp5.Controller : ScrollableList linebreak() +main.java.controlp5.Controller : ScrollableList listen(boolean) +main.java.controlp5.Controller : ScrollableList lock() +main.java.controlp5.Controller : ScrollableList onChange(CallbackListener) +main.java.controlp5.Controller : ScrollableList onClick(CallbackListener) +main.java.controlp5.Controller : ScrollableList onDoublePress(CallbackListener) +main.java.controlp5.Controller : ScrollableList onDrag(CallbackListener) +main.java.controlp5.Controller : ScrollableList onDraw(ControllerView) +main.java.controlp5.Controller : ScrollableList onEndDrag(CallbackListener) +main.java.controlp5.Controller : ScrollableList onEnter(CallbackListener) +main.java.controlp5.Controller : ScrollableList onLeave(CallbackListener) +main.java.controlp5.Controller : ScrollableList onMove(CallbackListener) +main.java.controlp5.Controller : ScrollableList onPress(CallbackListener) +main.java.controlp5.Controller : ScrollableList onRelease(CallbackListener) +main.java.controlp5.Controller : ScrollableList onReleaseOutside(CallbackListener) +main.java.controlp5.Controller : ScrollableList onStartDrag(CallbackListener) +main.java.controlp5.Controller : ScrollableList onWheel(CallbackListener) +main.java.controlp5.Controller : ScrollableList plugTo(Object) +main.java.controlp5.Controller : ScrollableList plugTo(Object, String) +main.java.controlp5.Controller : ScrollableList plugTo(Object[]) +main.java.controlp5.Controller : ScrollableList plugTo(Object[], String) +main.java.controlp5.Controller : ScrollableList registerProperty(String) +main.java.controlp5.Controller : ScrollableList registerProperty(String, String) +main.java.controlp5.Controller : ScrollableList registerTooltip(String) +main.java.controlp5.Controller : ScrollableList removeBehavior() +main.java.controlp5.Controller : ScrollableList removeCallback() +main.java.controlp5.Controller : ScrollableList removeCallback(CallbackListener) +main.java.controlp5.Controller : ScrollableList removeListener(ControlListener) +main.java.controlp5.Controller : ScrollableList removeListenerFor(int, CallbackListener) +main.java.controlp5.Controller : ScrollableList removeListenersFor(int) +main.java.controlp5.Controller : ScrollableList removeProperty(String) +main.java.controlp5.Controller : ScrollableList removeProperty(String, String) +main.java.controlp5.Controller : ScrollableList setArrayValue(float[]) +main.java.controlp5.Controller : ScrollableList setArrayValue(int, float) +main.java.controlp5.Controller : ScrollableList setBehavior(ControlBehavior) +main.java.controlp5.Controller : ScrollableList setBroadcast(boolean) +main.java.controlp5.Controller : ScrollableList setCaptionLabel(String) +main.java.controlp5.Controller : ScrollableList setColor(CColor) +main.java.controlp5.Controller : ScrollableList setColorActive(int) +main.java.controlp5.Controller : ScrollableList setColorBackground(int) +main.java.controlp5.Controller : ScrollableList setColorCaptionLabel(int) +main.java.controlp5.Controller : ScrollableList setColorForeground(int) +main.java.controlp5.Controller : ScrollableList setColorLabel(int) +main.java.controlp5.Controller : ScrollableList setColorValue(int) +main.java.controlp5.Controller : ScrollableList setColorValueLabel(int) +main.java.controlp5.Controller : ScrollableList setDecimalPrecision(int) +main.java.controlp5.Controller : ScrollableList setDefaultValue(float) +main.java.controlp5.Controller : ScrollableList setHeight(int) +main.java.controlp5.Controller : ScrollableList setId(int) +main.java.controlp5.Controller : ScrollableList setImage(PImage) +main.java.controlp5.Controller : ScrollableList setImage(PImage, int) +main.java.controlp5.Controller : ScrollableList setImages(PImage, PImage, PImage) +main.java.controlp5.Controller : ScrollableList setImages(PImage, PImage, PImage, PImage) +main.java.controlp5.Controller : ScrollableList setLabel(String) +main.java.controlp5.Controller : ScrollableList setLabelVisible(boolean) +main.java.controlp5.Controller : ScrollableList setLock(boolean) +main.java.controlp5.Controller : ScrollableList setMax(float) +main.java.controlp5.Controller : ScrollableList setMin(float) +main.java.controlp5.Controller : ScrollableList setMouseOver(boolean) +main.java.controlp5.Controller : ScrollableList setMoveable(boolean) +main.java.controlp5.Controller : ScrollableList setPosition(float, float) +main.java.controlp5.Controller : ScrollableList setPosition(float[]) +main.java.controlp5.Controller : ScrollableList setSize(PImage) +main.java.controlp5.Controller : ScrollableList setSize(int, int) +main.java.controlp5.Controller : ScrollableList setStringValue(String) +main.java.controlp5.Controller : ScrollableList setUpdate(boolean) +main.java.controlp5.Controller : ScrollableList setValue(float) +main.java.controlp5.Controller : ScrollableList setValueLabel(String) +main.java.controlp5.Controller : ScrollableList setValueSelf(float) +main.java.controlp5.Controller : ScrollableList setView(ControllerView) +main.java.controlp5.Controller : ScrollableList setVisible(boolean) +main.java.controlp5.Controller : ScrollableList setWidth(int) +main.java.controlp5.Controller : ScrollableList show() +main.java.controlp5.Controller : ScrollableList unlock() +main.java.controlp5.Controller : ScrollableList unplugFrom(Object) +main.java.controlp5.Controller : ScrollableList unplugFrom(Object[]) +main.java.controlp5.Controller : ScrollableList unregisterTooltip() +main.java.controlp5.Controller : ScrollableList update() +main.java.controlp5.Controller : ScrollableList updateSize() +main.java.controlp5.Controller : String getAddress() +main.java.controlp5.Controller : String getInfo() +main.java.controlp5.Controller : String getName() +main.java.controlp5.Controller : String getStringValue() +main.java.controlp5.Controller : String toString() +main.java.controlp5.Controller : Tab getTab() +main.java.controlp5.Controller : boolean isActive() +main.java.controlp5.Controller : boolean isBroadcast() +main.java.controlp5.Controller : boolean isInside() +main.java.controlp5.Controller : boolean isLabelVisible() +main.java.controlp5.Controller : boolean isListening() +main.java.controlp5.Controller : boolean isLock() +main.java.controlp5.Controller : boolean isMouseOver() +main.java.controlp5.Controller : boolean isMousePressed() +main.java.controlp5.Controller : boolean isMoveable() +main.java.controlp5.Controller : boolean isUpdate() +main.java.controlp5.Controller : boolean isVisible() +main.java.controlp5.Controller : float getArrayValue(int) +main.java.controlp5.Controller : float getDefaultValue() +main.java.controlp5.Controller : float getMax() +main.java.controlp5.Controller : float getMin() +main.java.controlp5.Controller : float getValue() +main.java.controlp5.Controller : float[] getAbsolutePosition() +main.java.controlp5.Controller : float[] getArrayValue() +main.java.controlp5.Controller : float[] getPosition() +main.java.controlp5.Controller : int getDecimalPrecision() +main.java.controlp5.Controller : int getHeight() +main.java.controlp5.Controller : int getId() +main.java.controlp5.Controller : int getWidth() +main.java.controlp5.Controller : int listenerSize() +main.java.controlp5.Controller : void remove() +main.java.controlp5.Controller : void setView(ControllerView, int) +main.java.controlp5.ScrollableList : List getItems() +main.java.controlp5.ScrollableList : Map getItem(String) +main.java.controlp5.ScrollableList : Map getItem(int) +main.java.controlp5.ScrollableList : ScrollableList addItem(String, Object) +main.java.controlp5.ScrollableList : ScrollableList addItems(List) +main.java.controlp5.ScrollableList : ScrollableList addItems(Map) +main.java.controlp5.ScrollableList : ScrollableList addItems(String[]) +main.java.controlp5.ScrollableList : ScrollableList clear() +main.java.controlp5.ScrollableList : ScrollableList close() +main.java.controlp5.ScrollableList : ScrollableList open() +main.java.controlp5.ScrollableList : ScrollableList removeItem(String) +main.java.controlp5.ScrollableList : ScrollableList removeItems(List) +main.java.controlp5.ScrollableList : ScrollableList setBackgroundColor(int) +main.java.controlp5.ScrollableList : ScrollableList setBarHeight(int) +main.java.controlp5.ScrollableList : ScrollableList setBarVisible(boolean) +main.java.controlp5.ScrollableList : ScrollableList setItemHeight(int) +main.java.controlp5.ScrollableList : ScrollableList setItems(List) +main.java.controlp5.ScrollableList : ScrollableList setItems(Map) +main.java.controlp5.ScrollableList : ScrollableList setItems(String[]) +main.java.controlp5.ScrollableList : ScrollableList setOpen(boolean) +main.java.controlp5.ScrollableList : ScrollableList setScrollSensitivity(float) +main.java.controlp5.ScrollableList : ScrollableList setType(int) +main.java.controlp5.ScrollableList : boolean isBarVisible() +main.java.controlp5.ScrollableList : boolean isOpen() +main.java.controlp5.ScrollableList : int getBackgroundColor() +main.java.controlp5.ScrollableList : int getBarHeight() +main.java.controlp5.ScrollableList : int getHeight() +main.java.controlp5.ScrollableList : void controlEvent(ControlEvent) +main.java.controlp5.ScrollableList : void keyEvent(KeyEvent) +main.java.controlp5.ScrollableList : void setDirection(int) +main.java.controlp5.ScrollableList : void updateItemIndexOffset() java.lang.Object : String toString() java.lang.Object : boolean equals(Object) diff --git a/examples/controllers/ControlP5slider/ControlP5slider.pde b/examples/controllers/ControlP5slider/ControlP5slider.pde index 32ca3e7..4ab6aaf 100644 --- a/examples/controllers/ControlP5slider/ControlP5slider.pde +++ b/examples/controllers/ControlP5slider/ControlP5slider.pde @@ -130,163 +130,163 @@ Format: ClassName : returnType methodName(parameter type) -controlP5.Controller : CColor getColor() -controlP5.Controller : ControlBehavior getBehavior() -controlP5.Controller : ControlWindow getControlWindow() -controlP5.Controller : ControlWindow getWindow() -controlP5.Controller : ControllerProperty getProperty(String) -controlP5.Controller : ControllerProperty getProperty(String, String) -controlP5.Controller : ControllerView getView() -controlP5.Controller : Label getCaptionLabel() -controlP5.Controller : Label getValueLabel() -controlP5.Controller : List getControllerPlugList() -controlP5.Controller : Pointer getPointer() -controlP5.Controller : Slider addCallback(CallbackListener) -controlP5.Controller : Slider addListener(ControlListener) -controlP5.Controller : Slider addListenerFor(int, CallbackListener) -controlP5.Controller : Slider align(int, int, int, int) -controlP5.Controller : Slider bringToFront() -controlP5.Controller : Slider bringToFront(ControllerInterface) -controlP5.Controller : Slider hide() -controlP5.Controller : Slider linebreak() -controlP5.Controller : Slider listen(boolean) -controlP5.Controller : Slider lock() -controlP5.Controller : Slider onChange(CallbackListener) -controlP5.Controller : Slider onClick(CallbackListener) -controlP5.Controller : Slider onDoublePress(CallbackListener) -controlP5.Controller : Slider onDrag(CallbackListener) -controlP5.Controller : Slider onDraw(ControllerView) -controlP5.Controller : Slider onEndDrag(CallbackListener) -controlP5.Controller : Slider onEnter(CallbackListener) -controlP5.Controller : Slider onLeave(CallbackListener) -controlP5.Controller : Slider onMove(CallbackListener) -controlP5.Controller : Slider onPress(CallbackListener) -controlP5.Controller : Slider onRelease(CallbackListener) -controlP5.Controller : Slider onReleaseOutside(CallbackListener) -controlP5.Controller : Slider onStartDrag(CallbackListener) -controlP5.Controller : Slider onWheel(CallbackListener) -controlP5.Controller : Slider plugTo(Object) -controlP5.Controller : Slider plugTo(Object, String) -controlP5.Controller : Slider plugTo(Object[]) -controlP5.Controller : Slider plugTo(Object[], String) -controlP5.Controller : Slider registerProperty(String) -controlP5.Controller : Slider registerProperty(String, String) -controlP5.Controller : Slider registerTooltip(String) -controlP5.Controller : Slider removeBehavior() -controlP5.Controller : Slider removeCallback() -controlP5.Controller : Slider removeCallback(CallbackListener) -controlP5.Controller : Slider removeListener(ControlListener) -controlP5.Controller : Slider removeListenerFor(int, CallbackListener) -controlP5.Controller : Slider removeListenersFor(int) -controlP5.Controller : Slider removeProperty(String) -controlP5.Controller : Slider removeProperty(String, String) -controlP5.Controller : Slider setArrayValue(float[]) -controlP5.Controller : Slider setArrayValue(int, float) -controlP5.Controller : Slider setBehavior(ControlBehavior) -controlP5.Controller : Slider setBroadcast(boolean) -controlP5.Controller : Slider setCaptionLabel(String) -controlP5.Controller : Slider setColor(CColor) -controlP5.Controller : Slider setColorActive(int) -controlP5.Controller : Slider setColorBackground(int) -controlP5.Controller : Slider setColorCaptionLabel(int) -controlP5.Controller : Slider setColorForeground(int) -controlP5.Controller : Slider setColorLabel(int) -controlP5.Controller : Slider setColorValue(int) -controlP5.Controller : Slider setColorValueLabel(int) -controlP5.Controller : Slider setDecimalPrecision(int) -controlP5.Controller : Slider setDefaultValue(float) -controlP5.Controller : Slider setHeight(int) -controlP5.Controller : Slider setId(int) -controlP5.Controller : Slider setImage(PImage) -controlP5.Controller : Slider setImage(PImage, int) -controlP5.Controller : Slider setImages(PImage, PImage, PImage) -controlP5.Controller : Slider setImages(PImage, PImage, PImage, PImage) -controlP5.Controller : Slider setLabel(String) -controlP5.Controller : Slider setLabelVisible(boolean) -controlP5.Controller : Slider setLock(boolean) -controlP5.Controller : Slider setMax(float) -controlP5.Controller : Slider setMin(float) -controlP5.Controller : Slider setMouseOver(boolean) -controlP5.Controller : Slider setMoveable(boolean) -controlP5.Controller : Slider setPosition(float, float) -controlP5.Controller : Slider setPosition(float[]) -controlP5.Controller : Slider setSize(PImage) -controlP5.Controller : Slider setSize(int, int) -controlP5.Controller : Slider setStringValue(String) -controlP5.Controller : Slider setUpdate(boolean) -controlP5.Controller : Slider setValue(float) -controlP5.Controller : Slider setValueLabel(String) -controlP5.Controller : Slider setValueSelf(float) -controlP5.Controller : Slider setView(ControllerView) -controlP5.Controller : Slider setVisible(boolean) -controlP5.Controller : Slider setWidth(int) -controlP5.Controller : Slider show() -controlP5.Controller : Slider unlock() -controlP5.Controller : Slider unplugFrom(Object) -controlP5.Controller : Slider unplugFrom(Object[]) -controlP5.Controller : Slider unregisterTooltip() -controlP5.Controller : Slider update() -controlP5.Controller : Slider updateSize() -controlP5.Controller : String getAddress() -controlP5.Controller : String getInfo() -controlP5.Controller : String getName() -controlP5.Controller : String getStringValue() -controlP5.Controller : String toString() -controlP5.Controller : Tab getTab() -controlP5.Controller : boolean isActive() -controlP5.Controller : boolean isBroadcast() -controlP5.Controller : boolean isInside() -controlP5.Controller : boolean isLabelVisible() -controlP5.Controller : boolean isListening() -controlP5.Controller : boolean isLock() -controlP5.Controller : boolean isMouseOver() -controlP5.Controller : boolean isMousePressed() -controlP5.Controller : boolean isMoveable() -controlP5.Controller : boolean isUpdate() -controlP5.Controller : boolean isVisible() -controlP5.Controller : float getArrayValue(int) -controlP5.Controller : float getDefaultValue() -controlP5.Controller : float getMax() -controlP5.Controller : float getMin() -controlP5.Controller : float getValue() -controlP5.Controller : float[] getAbsolutePosition() -controlP5.Controller : float[] getArrayValue() -controlP5.Controller : float[] getPosition() -controlP5.Controller : int getDecimalPrecision() -controlP5.Controller : int getHeight() -controlP5.Controller : int getId() -controlP5.Controller : int getWidth() -controlP5.Controller : int listenerSize() -controlP5.Controller : void remove() -controlP5.Controller : void setView(ControllerView, int) -controlP5.Slider : ArrayList getTickMarks() -controlP5.Slider : Slider setColorTickMark(int) -controlP5.Slider : Slider setHandleSize(int) -controlP5.Slider : Slider setHeight(int) -controlP5.Slider : Slider setMax(float) -controlP5.Slider : Slider setMin(float) -controlP5.Slider : Slider setNumberOfTickMarks(int) -controlP5.Slider : Slider setRange(float, float) -controlP5.Slider : Slider setScrollSensitivity(float) -controlP5.Slider : Slider setSize(int, int) -controlP5.Slider : Slider setSliderMode(int) -controlP5.Slider : Slider setTriggerEvent(int) -controlP5.Slider : Slider setValue(float) -controlP5.Slider : Slider setWidth(int) -controlP5.Slider : Slider showTickMarks(boolean) -controlP5.Slider : Slider shuffle() -controlP5.Slider : Slider snapToTickMarks(boolean) -controlP5.Slider : Slider update() -controlP5.Slider : TickMark getTickMark(int) -controlP5.Slider : float getMax() -controlP5.Slider : float getMin() -controlP5.Slider : float getValue() -controlP5.Slider : float getValuePosition() -controlP5.Slider : int getDirection() -controlP5.Slider : int getHandleSize() -controlP5.Slider : int getNumberOfTickMarks() -controlP5.Slider : int getSliderMode() -controlP5.Slider : int getTriggerEvent() +main.java.controlp5.Controller : CColor getColor() +main.java.controlp5.Controller : ControlBehavior getBehavior() +main.java.controlp5.Controller : ControlWindow getControlWindow() +main.java.controlp5.Controller : ControlWindow getWindow() +main.java.controlp5.Controller : ControllerProperty getProperty(String) +main.java.controlp5.Controller : ControllerProperty getProperty(String, String) +main.java.controlp5.Controller : ControllerView getView() +main.java.controlp5.Controller : Label getCaptionLabel() +main.java.controlp5.Controller : Label getValueLabel() +main.java.controlp5.Controller : List getControllerPlugList() +main.java.controlp5.Controller : Pointer getPointer() +main.java.controlp5.Controller : Slider addCallback(CallbackListener) +main.java.controlp5.Controller : Slider addListener(ControlListener) +main.java.controlp5.Controller : Slider addListenerFor(int, CallbackListener) +main.java.controlp5.Controller : Slider align(int, int, int, int) +main.java.controlp5.Controller : Slider bringToFront() +main.java.controlp5.Controller : Slider bringToFront(ControllerInterface) +main.java.controlp5.Controller : Slider hide() +main.java.controlp5.Controller : Slider linebreak() +main.java.controlp5.Controller : Slider listen(boolean) +main.java.controlp5.Controller : Slider lock() +main.java.controlp5.Controller : Slider onChange(CallbackListener) +main.java.controlp5.Controller : Slider onClick(CallbackListener) +main.java.controlp5.Controller : Slider onDoublePress(CallbackListener) +main.java.controlp5.Controller : Slider onDrag(CallbackListener) +main.java.controlp5.Controller : Slider onDraw(ControllerView) +main.java.controlp5.Controller : Slider onEndDrag(CallbackListener) +main.java.controlp5.Controller : Slider onEnter(CallbackListener) +main.java.controlp5.Controller : Slider onLeave(CallbackListener) +main.java.controlp5.Controller : Slider onMove(CallbackListener) +main.java.controlp5.Controller : Slider onPress(CallbackListener) +main.java.controlp5.Controller : Slider onRelease(CallbackListener) +main.java.controlp5.Controller : Slider onReleaseOutside(CallbackListener) +main.java.controlp5.Controller : Slider onStartDrag(CallbackListener) +main.java.controlp5.Controller : Slider onWheel(CallbackListener) +main.java.controlp5.Controller : Slider plugTo(Object) +main.java.controlp5.Controller : Slider plugTo(Object, String) +main.java.controlp5.Controller : Slider plugTo(Object[]) +main.java.controlp5.Controller : Slider plugTo(Object[], String) +main.java.controlp5.Controller : Slider registerProperty(String) +main.java.controlp5.Controller : Slider registerProperty(String, String) +main.java.controlp5.Controller : Slider registerTooltip(String) +main.java.controlp5.Controller : Slider removeBehavior() +main.java.controlp5.Controller : Slider removeCallback() +main.java.controlp5.Controller : Slider removeCallback(CallbackListener) +main.java.controlp5.Controller : Slider removeListener(ControlListener) +main.java.controlp5.Controller : Slider removeListenerFor(int, CallbackListener) +main.java.controlp5.Controller : Slider removeListenersFor(int) +main.java.controlp5.Controller : Slider removeProperty(String) +main.java.controlp5.Controller : Slider removeProperty(String, String) +main.java.controlp5.Controller : Slider setArrayValue(float[]) +main.java.controlp5.Controller : Slider setArrayValue(int, float) +main.java.controlp5.Controller : Slider setBehavior(ControlBehavior) +main.java.controlp5.Controller : Slider setBroadcast(boolean) +main.java.controlp5.Controller : Slider setCaptionLabel(String) +main.java.controlp5.Controller : Slider setColor(CColor) +main.java.controlp5.Controller : Slider setColorActive(int) +main.java.controlp5.Controller : Slider setColorBackground(int) +main.java.controlp5.Controller : Slider setColorCaptionLabel(int) +main.java.controlp5.Controller : Slider setColorForeground(int) +main.java.controlp5.Controller : Slider setColorLabel(int) +main.java.controlp5.Controller : Slider setColorValue(int) +main.java.controlp5.Controller : Slider setColorValueLabel(int) +main.java.controlp5.Controller : Slider setDecimalPrecision(int) +main.java.controlp5.Controller : Slider setDefaultValue(float) +main.java.controlp5.Controller : Slider setHeight(int) +main.java.controlp5.Controller : Slider setId(int) +main.java.controlp5.Controller : Slider setImage(PImage) +main.java.controlp5.Controller : Slider setImage(PImage, int) +main.java.controlp5.Controller : Slider setImages(PImage, PImage, PImage) +main.java.controlp5.Controller : Slider setImages(PImage, PImage, PImage, PImage) +main.java.controlp5.Controller : Slider setLabel(String) +main.java.controlp5.Controller : Slider setLabelVisible(boolean) +main.java.controlp5.Controller : Slider setLock(boolean) +main.java.controlp5.Controller : Slider setMax(float) +main.java.controlp5.Controller : Slider setMin(float) +main.java.controlp5.Controller : Slider setMouseOver(boolean) +main.java.controlp5.Controller : Slider setMoveable(boolean) +main.java.controlp5.Controller : Slider setPosition(float, float) +main.java.controlp5.Controller : Slider setPosition(float[]) +main.java.controlp5.Controller : Slider setSize(PImage) +main.java.controlp5.Controller : Slider setSize(int, int) +main.java.controlp5.Controller : Slider setStringValue(String) +main.java.controlp5.Controller : Slider setUpdate(boolean) +main.java.controlp5.Controller : Slider setValue(float) +main.java.controlp5.Controller : Slider setValueLabel(String) +main.java.controlp5.Controller : Slider setValueSelf(float) +main.java.controlp5.Controller : Slider setView(ControllerView) +main.java.controlp5.Controller : Slider setVisible(boolean) +main.java.controlp5.Controller : Slider setWidth(int) +main.java.controlp5.Controller : Slider show() +main.java.controlp5.Controller : Slider unlock() +main.java.controlp5.Controller : Slider unplugFrom(Object) +main.java.controlp5.Controller : Slider unplugFrom(Object[]) +main.java.controlp5.Controller : Slider unregisterTooltip() +main.java.controlp5.Controller : Slider update() +main.java.controlp5.Controller : Slider updateSize() +main.java.controlp5.Controller : String getAddress() +main.java.controlp5.Controller : String getInfo() +main.java.controlp5.Controller : String getName() +main.java.controlp5.Controller : String getStringValue() +main.java.controlp5.Controller : String toString() +main.java.controlp5.Controller : Tab getTab() +main.java.controlp5.Controller : boolean isActive() +main.java.controlp5.Controller : boolean isBroadcast() +main.java.controlp5.Controller : boolean isInside() +main.java.controlp5.Controller : boolean isLabelVisible() +main.java.controlp5.Controller : boolean isListening() +main.java.controlp5.Controller : boolean isLock() +main.java.controlp5.Controller : boolean isMouseOver() +main.java.controlp5.Controller : boolean isMousePressed() +main.java.controlp5.Controller : boolean isMoveable() +main.java.controlp5.Controller : boolean isUpdate() +main.java.controlp5.Controller : boolean isVisible() +main.java.controlp5.Controller : float getArrayValue(int) +main.java.controlp5.Controller : float getDefaultValue() +main.java.controlp5.Controller : float getMax() +main.java.controlp5.Controller : float getMin() +main.java.controlp5.Controller : float getValue() +main.java.controlp5.Controller : float[] getAbsolutePosition() +main.java.controlp5.Controller : float[] getArrayValue() +main.java.controlp5.Controller : float[] getPosition() +main.java.controlp5.Controller : int getDecimalPrecision() +main.java.controlp5.Controller : int getHeight() +main.java.controlp5.Controller : int getId() +main.java.controlp5.Controller : int getWidth() +main.java.controlp5.Controller : int listenerSize() +main.java.controlp5.Controller : void remove() +main.java.controlp5.Controller : void setView(ControllerView, int) +main.java.controlp5.Slider : ArrayList getTickMarks() +main.java.controlp5.Slider : Slider setColorTickMark(int) +main.java.controlp5.Slider : Slider setHandleSize(int) +main.java.controlp5.Slider : Slider setHeight(int) +main.java.controlp5.Slider : Slider setMax(float) +main.java.controlp5.Slider : Slider setMin(float) +main.java.controlp5.Slider : Slider setNumberOfTickMarks(int) +main.java.controlp5.Slider : Slider setRange(float, float) +main.java.controlp5.Slider : Slider setScrollSensitivity(float) +main.java.controlp5.Slider : Slider setSize(int, int) +main.java.controlp5.Slider : Slider setSliderMode(int) +main.java.controlp5.Slider : Slider setTriggerEvent(int) +main.java.controlp5.Slider : Slider setValue(float) +main.java.controlp5.Slider : Slider setWidth(int) +main.java.controlp5.Slider : Slider showTickMarks(boolean) +main.java.controlp5.Slider : Slider shuffle() +main.java.controlp5.Slider : Slider snapToTickMarks(boolean) +main.java.controlp5.Slider : Slider update() +main.java.controlp5.Slider : TickMark getTickMark(int) +main.java.controlp5.Slider : float getMax() +main.java.controlp5.Slider : float getMin() +main.java.controlp5.Slider : float getValue() +main.java.controlp5.Slider : float getValuePosition() +main.java.controlp5.Slider : int getDirection() +main.java.controlp5.Slider : int getHandleSize() +main.java.controlp5.Slider : int getNumberOfTickMarks() +main.java.controlp5.Slider : int getSliderMode() +main.java.controlp5.Slider : int getTriggerEvent() java.lang.Object : String toString() java.lang.Object : boolean equals(Object) diff --git a/examples/controllers/ControlP5slider2D/ControlP5slider2D.pde b/examples/controllers/ControlP5slider2D/ControlP5slider2D.pde index bf3062d..1054640 100644 --- a/examples/controllers/ControlP5slider2D/ControlP5slider2D.pde +++ b/examples/controllers/ControlP5slider2D/ControlP5slider2D.pde @@ -76,158 +76,158 @@ Format: ClassName : returnType methodName(parameter type) -controlP5.Controller : CColor getColor() -controlP5.Controller : ControlBehavior getBehavior() -controlP5.Controller : ControlWindow getControlWindow() -controlP5.Controller : ControlWindow getWindow() -controlP5.Controller : ControllerProperty getProperty(String) -controlP5.Controller : ControllerProperty getProperty(String, String) -controlP5.Controller : ControllerView getView() -controlP5.Controller : Label getCaptionLabel() -controlP5.Controller : Label getValueLabel() -controlP5.Controller : List getControllerPlugList() -controlP5.Controller : Pointer getPointer() -controlP5.Controller : Slider2D addCallback(CallbackListener) -controlP5.Controller : Slider2D addListener(ControlListener) -controlP5.Controller : Slider2D addListenerFor(int, CallbackListener) -controlP5.Controller : Slider2D align(int, int, int, int) -controlP5.Controller : Slider2D bringToFront() -controlP5.Controller : Slider2D bringToFront(ControllerInterface) -controlP5.Controller : Slider2D hide() -controlP5.Controller : Slider2D linebreak() -controlP5.Controller : Slider2D listen(boolean) -controlP5.Controller : Slider2D lock() -controlP5.Controller : Slider2D onChange(CallbackListener) -controlP5.Controller : Slider2D onClick(CallbackListener) -controlP5.Controller : Slider2D onDoublePress(CallbackListener) -controlP5.Controller : Slider2D onDrag(CallbackListener) -controlP5.Controller : Slider2D onDraw(ControllerView) -controlP5.Controller : Slider2D onEndDrag(CallbackListener) -controlP5.Controller : Slider2D onEnter(CallbackListener) -controlP5.Controller : Slider2D onLeave(CallbackListener) -controlP5.Controller : Slider2D onMove(CallbackListener) -controlP5.Controller : Slider2D onPress(CallbackListener) -controlP5.Controller : Slider2D onRelease(CallbackListener) -controlP5.Controller : Slider2D onReleaseOutside(CallbackListener) -controlP5.Controller : Slider2D onStartDrag(CallbackListener) -controlP5.Controller : Slider2D onWheel(CallbackListener) -controlP5.Controller : Slider2D plugTo(Object) -controlP5.Controller : Slider2D plugTo(Object, String) -controlP5.Controller : Slider2D plugTo(Object[]) -controlP5.Controller : Slider2D plugTo(Object[], String) -controlP5.Controller : Slider2D registerProperty(String) -controlP5.Controller : Slider2D registerProperty(String, String) -controlP5.Controller : Slider2D registerTooltip(String) -controlP5.Controller : Slider2D removeBehavior() -controlP5.Controller : Slider2D removeCallback() -controlP5.Controller : Slider2D removeCallback(CallbackListener) -controlP5.Controller : Slider2D removeListener(ControlListener) -controlP5.Controller : Slider2D removeListenerFor(int, CallbackListener) -controlP5.Controller : Slider2D removeListenersFor(int) -controlP5.Controller : Slider2D removeProperty(String) -controlP5.Controller : Slider2D removeProperty(String, String) -controlP5.Controller : Slider2D setArrayValue(float[]) -controlP5.Controller : Slider2D setArrayValue(int, float) -controlP5.Controller : Slider2D setBehavior(ControlBehavior) -controlP5.Controller : Slider2D setBroadcast(boolean) -controlP5.Controller : Slider2D setCaptionLabel(String) -controlP5.Controller : Slider2D setColor(CColor) -controlP5.Controller : Slider2D setColorActive(int) -controlP5.Controller : Slider2D setColorBackground(int) -controlP5.Controller : Slider2D setColorCaptionLabel(int) -controlP5.Controller : Slider2D setColorForeground(int) -controlP5.Controller : Slider2D setColorLabel(int) -controlP5.Controller : Slider2D setColorValue(int) -controlP5.Controller : Slider2D setColorValueLabel(int) -controlP5.Controller : Slider2D setDecimalPrecision(int) -controlP5.Controller : Slider2D setDefaultValue(float) -controlP5.Controller : Slider2D setHeight(int) -controlP5.Controller : Slider2D setId(int) -controlP5.Controller : Slider2D setImage(PImage) -controlP5.Controller : Slider2D setImage(PImage, int) -controlP5.Controller : Slider2D setImages(PImage, PImage, PImage) -controlP5.Controller : Slider2D setImages(PImage, PImage, PImage, PImage) -controlP5.Controller : Slider2D setLabel(String) -controlP5.Controller : Slider2D setLabelVisible(boolean) -controlP5.Controller : Slider2D setLock(boolean) -controlP5.Controller : Slider2D setMax(float) -controlP5.Controller : Slider2D setMin(float) -controlP5.Controller : Slider2D setMouseOver(boolean) -controlP5.Controller : Slider2D setMoveable(boolean) -controlP5.Controller : Slider2D setPosition(float, float) -controlP5.Controller : Slider2D setPosition(float[]) -controlP5.Controller : Slider2D setSize(PImage) -controlP5.Controller : Slider2D setSize(int, int) -controlP5.Controller : Slider2D setStringValue(String) -controlP5.Controller : Slider2D setUpdate(boolean) -controlP5.Controller : Slider2D setValue(float) -controlP5.Controller : Slider2D setValueLabel(String) -controlP5.Controller : Slider2D setValueSelf(float) -controlP5.Controller : Slider2D setView(ControllerView) -controlP5.Controller : Slider2D setVisible(boolean) -controlP5.Controller : Slider2D setWidth(int) -controlP5.Controller : Slider2D show() -controlP5.Controller : Slider2D unlock() -controlP5.Controller : Slider2D unplugFrom(Object) -controlP5.Controller : Slider2D unplugFrom(Object[]) -controlP5.Controller : Slider2D unregisterTooltip() -controlP5.Controller : Slider2D update() -controlP5.Controller : Slider2D updateSize() -controlP5.Controller : String getAddress() -controlP5.Controller : String getInfo() -controlP5.Controller : String getName() -controlP5.Controller : String getStringValue() -controlP5.Controller : String toString() -controlP5.Controller : Tab getTab() -controlP5.Controller : boolean isActive() -controlP5.Controller : boolean isBroadcast() -controlP5.Controller : boolean isInside() -controlP5.Controller : boolean isLabelVisible() -controlP5.Controller : boolean isListening() -controlP5.Controller : boolean isLock() -controlP5.Controller : boolean isMouseOver() -controlP5.Controller : boolean isMousePressed() -controlP5.Controller : boolean isMoveable() -controlP5.Controller : boolean isUpdate() -controlP5.Controller : boolean isVisible() -controlP5.Controller : float getArrayValue(int) -controlP5.Controller : float getDefaultValue() -controlP5.Controller : float getMax() -controlP5.Controller : float getMin() -controlP5.Controller : float getValue() -controlP5.Controller : float[] getAbsolutePosition() -controlP5.Controller : float[] getArrayValue() -controlP5.Controller : float[] getPosition() -controlP5.Controller : int getDecimalPrecision() -controlP5.Controller : int getHeight() -controlP5.Controller : int getId() -controlP5.Controller : int getWidth() -controlP5.Controller : int listenerSize() -controlP5.Controller : void remove() -controlP5.Controller : void setView(ControllerView, int) -controlP5.Slider2D : Slider2D disableCrosshair() -controlP5.Slider2D : Slider2D enableCrosshair() -controlP5.Slider2D : Slider2D setArrayValue(float[]) -controlP5.Slider2D : Slider2D setCursorX(float) -controlP5.Slider2D : Slider2D setCursorY(float) -controlP5.Slider2D : Slider2D setMaxX(float) -controlP5.Slider2D : Slider2D setMaxY(float) -controlP5.Slider2D : Slider2D setMinMax(float, float, float, float) -controlP5.Slider2D : Slider2D setMinX(float) -controlP5.Slider2D : Slider2D setMinY(float) -controlP5.Slider2D : Slider2D setValue(float) -controlP5.Slider2D : Slider2D setValue(float, float) -controlP5.Slider2D : Slider2D shuffle() -controlP5.Slider2D : float getCursorHeight() -controlP5.Slider2D : float getCursorWidth() -controlP5.Slider2D : float getCursorX() -controlP5.Slider2D : float getCursorY() -controlP5.Slider2D : float getMaxX() -controlP5.Slider2D : float getMaxY() -controlP5.Slider2D : float getMinX() -controlP5.Slider2D : float getMinY() -controlP5.Slider2D : float[] getArrayValue() -controlP5.Slider2D : void setValueLabelSeparator(String) +main.java.controlp5.Controller : CColor getColor() +main.java.controlp5.Controller : ControlBehavior getBehavior() +main.java.controlp5.Controller : ControlWindow getControlWindow() +main.java.controlp5.Controller : ControlWindow getWindow() +main.java.controlp5.Controller : ControllerProperty getProperty(String) +main.java.controlp5.Controller : ControllerProperty getProperty(String, String) +main.java.controlp5.Controller : ControllerView getView() +main.java.controlp5.Controller : Label getCaptionLabel() +main.java.controlp5.Controller : Label getValueLabel() +main.java.controlp5.Controller : List getControllerPlugList() +main.java.controlp5.Controller : Pointer getPointer() +main.java.controlp5.Controller : Slider2D addCallback(CallbackListener) +main.java.controlp5.Controller : Slider2D addListener(ControlListener) +main.java.controlp5.Controller : Slider2D addListenerFor(int, CallbackListener) +main.java.controlp5.Controller : Slider2D align(int, int, int, int) +main.java.controlp5.Controller : Slider2D bringToFront() +main.java.controlp5.Controller : Slider2D bringToFront(ControllerInterface) +main.java.controlp5.Controller : Slider2D hide() +main.java.controlp5.Controller : Slider2D linebreak() +main.java.controlp5.Controller : Slider2D listen(boolean) +main.java.controlp5.Controller : Slider2D lock() +main.java.controlp5.Controller : Slider2D onChange(CallbackListener) +main.java.controlp5.Controller : Slider2D onClick(CallbackListener) +main.java.controlp5.Controller : Slider2D onDoublePress(CallbackListener) +main.java.controlp5.Controller : Slider2D onDrag(CallbackListener) +main.java.controlp5.Controller : Slider2D onDraw(ControllerView) +main.java.controlp5.Controller : Slider2D onEndDrag(CallbackListener) +main.java.controlp5.Controller : Slider2D onEnter(CallbackListener) +main.java.controlp5.Controller : Slider2D onLeave(CallbackListener) +main.java.controlp5.Controller : Slider2D onMove(CallbackListener) +main.java.controlp5.Controller : Slider2D onPress(CallbackListener) +main.java.controlp5.Controller : Slider2D onRelease(CallbackListener) +main.java.controlp5.Controller : Slider2D onReleaseOutside(CallbackListener) +main.java.controlp5.Controller : Slider2D onStartDrag(CallbackListener) +main.java.controlp5.Controller : Slider2D onWheel(CallbackListener) +main.java.controlp5.Controller : Slider2D plugTo(Object) +main.java.controlp5.Controller : Slider2D plugTo(Object, String) +main.java.controlp5.Controller : Slider2D plugTo(Object[]) +main.java.controlp5.Controller : Slider2D plugTo(Object[], String) +main.java.controlp5.Controller : Slider2D registerProperty(String) +main.java.controlp5.Controller : Slider2D registerProperty(String, String) +main.java.controlp5.Controller : Slider2D registerTooltip(String) +main.java.controlp5.Controller : Slider2D removeBehavior() +main.java.controlp5.Controller : Slider2D removeCallback() +main.java.controlp5.Controller : Slider2D removeCallback(CallbackListener) +main.java.controlp5.Controller : Slider2D removeListener(ControlListener) +main.java.controlp5.Controller : Slider2D removeListenerFor(int, CallbackListener) +main.java.controlp5.Controller : Slider2D removeListenersFor(int) +main.java.controlp5.Controller : Slider2D removeProperty(String) +main.java.controlp5.Controller : Slider2D removeProperty(String, String) +main.java.controlp5.Controller : Slider2D setArrayValue(float[]) +main.java.controlp5.Controller : Slider2D setArrayValue(int, float) +main.java.controlp5.Controller : Slider2D setBehavior(ControlBehavior) +main.java.controlp5.Controller : Slider2D setBroadcast(boolean) +main.java.controlp5.Controller : Slider2D setCaptionLabel(String) +main.java.controlp5.Controller : Slider2D setColor(CColor) +main.java.controlp5.Controller : Slider2D setColorActive(int) +main.java.controlp5.Controller : Slider2D setColorBackground(int) +main.java.controlp5.Controller : Slider2D setColorCaptionLabel(int) +main.java.controlp5.Controller : Slider2D setColorForeground(int) +main.java.controlp5.Controller : Slider2D setColorLabel(int) +main.java.controlp5.Controller : Slider2D setColorValue(int) +main.java.controlp5.Controller : Slider2D setColorValueLabel(int) +main.java.controlp5.Controller : Slider2D setDecimalPrecision(int) +main.java.controlp5.Controller : Slider2D setDefaultValue(float) +main.java.controlp5.Controller : Slider2D setHeight(int) +main.java.controlp5.Controller : Slider2D setId(int) +main.java.controlp5.Controller : Slider2D setImage(PImage) +main.java.controlp5.Controller : Slider2D setImage(PImage, int) +main.java.controlp5.Controller : Slider2D setImages(PImage, PImage, PImage) +main.java.controlp5.Controller : Slider2D setImages(PImage, PImage, PImage, PImage) +main.java.controlp5.Controller : Slider2D setLabel(String) +main.java.controlp5.Controller : Slider2D setLabelVisible(boolean) +main.java.controlp5.Controller : Slider2D setLock(boolean) +main.java.controlp5.Controller : Slider2D setMax(float) +main.java.controlp5.Controller : Slider2D setMin(float) +main.java.controlp5.Controller : Slider2D setMouseOver(boolean) +main.java.controlp5.Controller : Slider2D setMoveable(boolean) +main.java.controlp5.Controller : Slider2D setPosition(float, float) +main.java.controlp5.Controller : Slider2D setPosition(float[]) +main.java.controlp5.Controller : Slider2D setSize(PImage) +main.java.controlp5.Controller : Slider2D setSize(int, int) +main.java.controlp5.Controller : Slider2D setStringValue(String) +main.java.controlp5.Controller : Slider2D setUpdate(boolean) +main.java.controlp5.Controller : Slider2D setValue(float) +main.java.controlp5.Controller : Slider2D setValueLabel(String) +main.java.controlp5.Controller : Slider2D setValueSelf(float) +main.java.controlp5.Controller : Slider2D setView(ControllerView) +main.java.controlp5.Controller : Slider2D setVisible(boolean) +main.java.controlp5.Controller : Slider2D setWidth(int) +main.java.controlp5.Controller : Slider2D show() +main.java.controlp5.Controller : Slider2D unlock() +main.java.controlp5.Controller : Slider2D unplugFrom(Object) +main.java.controlp5.Controller : Slider2D unplugFrom(Object[]) +main.java.controlp5.Controller : Slider2D unregisterTooltip() +main.java.controlp5.Controller : Slider2D update() +main.java.controlp5.Controller : Slider2D updateSize() +main.java.controlp5.Controller : String getAddress() +main.java.controlp5.Controller : String getInfo() +main.java.controlp5.Controller : String getName() +main.java.controlp5.Controller : String getStringValue() +main.java.controlp5.Controller : String toString() +main.java.controlp5.Controller : Tab getTab() +main.java.controlp5.Controller : boolean isActive() +main.java.controlp5.Controller : boolean isBroadcast() +main.java.controlp5.Controller : boolean isInside() +main.java.controlp5.Controller : boolean isLabelVisible() +main.java.controlp5.Controller : boolean isListening() +main.java.controlp5.Controller : boolean isLock() +main.java.controlp5.Controller : boolean isMouseOver() +main.java.controlp5.Controller : boolean isMousePressed() +main.java.controlp5.Controller : boolean isMoveable() +main.java.controlp5.Controller : boolean isUpdate() +main.java.controlp5.Controller : boolean isVisible() +main.java.controlp5.Controller : float getArrayValue(int) +main.java.controlp5.Controller : float getDefaultValue() +main.java.controlp5.Controller : float getMax() +main.java.controlp5.Controller : float getMin() +main.java.controlp5.Controller : float getValue() +main.java.controlp5.Controller : float[] getAbsolutePosition() +main.java.controlp5.Controller : float[] getArrayValue() +main.java.controlp5.Controller : float[] getPosition() +main.java.controlp5.Controller : int getDecimalPrecision() +main.java.controlp5.Controller : int getHeight() +main.java.controlp5.Controller : int getId() +main.java.controlp5.Controller : int getWidth() +main.java.controlp5.Controller : int listenerSize() +main.java.controlp5.Controller : void remove() +main.java.controlp5.Controller : void setView(ControllerView, int) +main.java.controlp5.Slider2D : Slider2D disableCrosshair() +main.java.controlp5.Slider2D : Slider2D enableCrosshair() +main.java.controlp5.Slider2D : Slider2D setArrayValue(float[]) +main.java.controlp5.Slider2D : Slider2D setCursorX(float) +main.java.controlp5.Slider2D : Slider2D setCursorY(float) +main.java.controlp5.Slider2D : Slider2D setMaxX(float) +main.java.controlp5.Slider2D : Slider2D setMaxY(float) +main.java.controlp5.Slider2D : Slider2D setMinMax(float, float, float, float) +main.java.controlp5.Slider2D : Slider2D setMinX(float) +main.java.controlp5.Slider2D : Slider2D setMinY(float) +main.java.controlp5.Slider2D : Slider2D setValue(float) +main.java.controlp5.Slider2D : Slider2D setValue(float, float) +main.java.controlp5.Slider2D : Slider2D shuffle() +main.java.controlp5.Slider2D : float getCursorHeight() +main.java.controlp5.Slider2D : float getCursorWidth() +main.java.controlp5.Slider2D : float getCursorX() +main.java.controlp5.Slider2D : float getCursorY() +main.java.controlp5.Slider2D : float getMaxX() +main.java.controlp5.Slider2D : float getMaxY() +main.java.controlp5.Slider2D : float getMinX() +main.java.controlp5.Slider2D : float getMinY() +main.java.controlp5.Slider2D : float[] getArrayValue() +main.java.controlp5.Slider2D : void setValueLabelSeparator(String) java.lang.Object : String toString() java.lang.Object : boolean equals(Object) diff --git a/examples/controllers/ControlP5tab/ControlP5tab.pde b/examples/controllers/ControlP5tab/ControlP5tab.pde index 15f1a10..7e87af9 100644 --- a/examples/controllers/ControlP5tab/ControlP5tab.pde +++ b/examples/controllers/ControlP5tab/ControlP5tab.pde @@ -130,102 +130,102 @@ Format: ClassName : returnType methodName(parameter type) -controlP5.ControllerGroup : CColor getColor() -controlP5.ControllerGroup : Canvas addCanvas(Canvas) -controlP5.ControllerGroup : ControlWindow getWindow() -controlP5.ControllerGroup : Controller getController(String) -controlP5.ControllerGroup : ControllerProperty getProperty(String) -controlP5.ControllerGroup : ControllerProperty getProperty(String, String) -controlP5.ControllerGroup : Label getCaptionLabel() -controlP5.ControllerGroup : Label getValueLabel() -controlP5.ControllerGroup : String getAddress() -controlP5.ControllerGroup : String getInfo() -controlP5.ControllerGroup : String getName() -controlP5.ControllerGroup : String getStringValue() -controlP5.ControllerGroup : String toString() -controlP5.ControllerGroup : Tab add(ControllerInterface) -controlP5.ControllerGroup : Tab addListener(ControlListener) -controlP5.ControllerGroup : Tab bringToFront() -controlP5.ControllerGroup : Tab bringToFront(ControllerInterface) -controlP5.ControllerGroup : Tab close() -controlP5.ControllerGroup : Tab disableCollapse() -controlP5.ControllerGroup : Tab enableCollapse() -controlP5.ControllerGroup : Tab getTab() -controlP5.ControllerGroup : Tab hide() -controlP5.ControllerGroup : Tab hideArrow() -controlP5.ControllerGroup : Tab hideBar() -controlP5.ControllerGroup : Tab moveTo(ControlWindow) -controlP5.ControllerGroup : Tab moveTo(PApplet) -controlP5.ControllerGroup : Tab open() -controlP5.ControllerGroup : Tab registerProperty(String) -controlP5.ControllerGroup : Tab registerProperty(String, String) -controlP5.ControllerGroup : Tab remove(CDrawable) -controlP5.ControllerGroup : Tab remove(ControllerInterface) -controlP5.ControllerGroup : Tab removeCanvas(Canvas) -controlP5.ControllerGroup : Tab removeListener(ControlListener) -controlP5.ControllerGroup : Tab removeProperty(String) -controlP5.ControllerGroup : Tab removeProperty(String, String) -controlP5.ControllerGroup : Tab setAddress(String) -controlP5.ControllerGroup : Tab setArrayValue(float[]) -controlP5.ControllerGroup : Tab setArrayValue(int, float) -controlP5.ControllerGroup : Tab setCaptionLabel(String) -controlP5.ControllerGroup : Tab setColor(CColor) -controlP5.ControllerGroup : Tab setColorActive(int) -controlP5.ControllerGroup : Tab setColorBackground(int) -controlP5.ControllerGroup : Tab setColorForeground(int) -controlP5.ControllerGroup : Tab setColorLabel(int) -controlP5.ControllerGroup : Tab setColorValue(int) -controlP5.ControllerGroup : Tab setHeight(int) -controlP5.ControllerGroup : Tab setId(int) -controlP5.ControllerGroup : Tab setLabel(String) -controlP5.ControllerGroup : Tab setMouseOver(boolean) -controlP5.ControllerGroup : Tab setMoveable(boolean) -controlP5.ControllerGroup : Tab setOpen(boolean) -controlP5.ControllerGroup : Tab setPosition(float, float) -controlP5.ControllerGroup : Tab setPosition(float[]) -controlP5.ControllerGroup : Tab setSize(int, int) -controlP5.ControllerGroup : Tab setStringValue(String) -controlP5.ControllerGroup : Tab setTitle(String) -controlP5.ControllerGroup : Tab setUpdate(boolean) -controlP5.ControllerGroup : Tab setValue(float) -controlP5.ControllerGroup : Tab setVisible(boolean) -controlP5.ControllerGroup : Tab setWidth(int) -controlP5.ControllerGroup : Tab show() -controlP5.ControllerGroup : Tab showArrow() -controlP5.ControllerGroup : Tab showBar() -controlP5.ControllerGroup : Tab update() -controlP5.ControllerGroup : Tab updateAbsolutePosition() -controlP5.ControllerGroup : boolean isBarVisible() -controlP5.ControllerGroup : boolean isCollapse() -controlP5.ControllerGroup : boolean isMouseOver() -controlP5.ControllerGroup : boolean isMoveable() -controlP5.ControllerGroup : boolean isOpen() -controlP5.ControllerGroup : boolean isUpdate() -controlP5.ControllerGroup : boolean isVisible() -controlP5.ControllerGroup : boolean setMousePressed(boolean) -controlP5.ControllerGroup : float getArrayValue(int) -controlP5.ControllerGroup : float getValue() -controlP5.ControllerGroup : float[] getArrayValue() -controlP5.ControllerGroup : float[] getPosition() -controlP5.ControllerGroup : int getHeight() -controlP5.ControllerGroup : int getId() -controlP5.ControllerGroup : int getWidth() -controlP5.ControllerGroup : int listenerSize() -controlP5.ControllerGroup : void controlEvent(ControlEvent) -controlP5.ControllerGroup : void remove() -controlP5.Tab : String getStringValue() -controlP5.Tab : Tab activateEvent(boolean) -controlP5.Tab : Tab bringToFront() -controlP5.Tab : Tab moveTo(ControlWindow) -controlP5.Tab : Tab setActive(boolean) -controlP5.Tab : Tab setAlwaysActive(boolean) -controlP5.Tab : Tab setHeight(int) -controlP5.Tab : Tab setLabel(String) -controlP5.Tab : Tab setValue(float) -controlP5.Tab : Tab setWidth(int) -controlP5.Tab : boolean isActive() -controlP5.Tab : boolean isAlwaysActive() -controlP5.Tab : float getValue() +main.java.controlp5.ControllerGroup : CColor getColor() +main.java.controlp5.ControllerGroup : Canvas addCanvas(Canvas) +main.java.controlp5.ControllerGroup : ControlWindow getWindow() +main.java.controlp5.ControllerGroup : Controller getController(String) +main.java.controlp5.ControllerGroup : ControllerProperty getProperty(String) +main.java.controlp5.ControllerGroup : ControllerProperty getProperty(String, String) +main.java.controlp5.ControllerGroup : Label getCaptionLabel() +main.java.controlp5.ControllerGroup : Label getValueLabel() +main.java.controlp5.ControllerGroup : String getAddress() +main.java.controlp5.ControllerGroup : String getInfo() +main.java.controlp5.ControllerGroup : String getName() +main.java.controlp5.ControllerGroup : String getStringValue() +main.java.controlp5.ControllerGroup : String toString() +main.java.controlp5.ControllerGroup : Tab add(ControllerInterface) +main.java.controlp5.ControllerGroup : Tab addListener(ControlListener) +main.java.controlp5.ControllerGroup : Tab bringToFront() +main.java.controlp5.ControllerGroup : Tab bringToFront(ControllerInterface) +main.java.controlp5.ControllerGroup : Tab close() +main.java.controlp5.ControllerGroup : Tab disableCollapse() +main.java.controlp5.ControllerGroup : Tab enableCollapse() +main.java.controlp5.ControllerGroup : Tab getTab() +main.java.controlp5.ControllerGroup : Tab hide() +main.java.controlp5.ControllerGroup : Tab hideArrow() +main.java.controlp5.ControllerGroup : Tab hideBar() +main.java.controlp5.ControllerGroup : Tab moveTo(ControlWindow) +main.java.controlp5.ControllerGroup : Tab moveTo(PApplet) +main.java.controlp5.ControllerGroup : Tab open() +main.java.controlp5.ControllerGroup : Tab registerProperty(String) +main.java.controlp5.ControllerGroup : Tab registerProperty(String, String) +main.java.controlp5.ControllerGroup : Tab remove(CDrawable) +main.java.controlp5.ControllerGroup : Tab remove(ControllerInterface) +main.java.controlp5.ControllerGroup : Tab removeCanvas(Canvas) +main.java.controlp5.ControllerGroup : Tab removeListener(ControlListener) +main.java.controlp5.ControllerGroup : Tab removeProperty(String) +main.java.controlp5.ControllerGroup : Tab removeProperty(String, String) +main.java.controlp5.ControllerGroup : Tab setAddress(String) +main.java.controlp5.ControllerGroup : Tab setArrayValue(float[]) +main.java.controlp5.ControllerGroup : Tab setArrayValue(int, float) +main.java.controlp5.ControllerGroup : Tab setCaptionLabel(String) +main.java.controlp5.ControllerGroup : Tab setColor(CColor) +main.java.controlp5.ControllerGroup : Tab setColorActive(int) +main.java.controlp5.ControllerGroup : Tab setColorBackground(int) +main.java.controlp5.ControllerGroup : Tab setColorForeground(int) +main.java.controlp5.ControllerGroup : Tab setColorLabel(int) +main.java.controlp5.ControllerGroup : Tab setColorValue(int) +main.java.controlp5.ControllerGroup : Tab setHeight(int) +main.java.controlp5.ControllerGroup : Tab setId(int) +main.java.controlp5.ControllerGroup : Tab setLabel(String) +main.java.controlp5.ControllerGroup : Tab setMouseOver(boolean) +main.java.controlp5.ControllerGroup : Tab setMoveable(boolean) +main.java.controlp5.ControllerGroup : Tab setOpen(boolean) +main.java.controlp5.ControllerGroup : Tab setPosition(float, float) +main.java.controlp5.ControllerGroup : Tab setPosition(float[]) +main.java.controlp5.ControllerGroup : Tab setSize(int, int) +main.java.controlp5.ControllerGroup : Tab setStringValue(String) +main.java.controlp5.ControllerGroup : Tab setTitle(String) +main.java.controlp5.ControllerGroup : Tab setUpdate(boolean) +main.java.controlp5.ControllerGroup : Tab setValue(float) +main.java.controlp5.ControllerGroup : Tab setVisible(boolean) +main.java.controlp5.ControllerGroup : Tab setWidth(int) +main.java.controlp5.ControllerGroup : Tab show() +main.java.controlp5.ControllerGroup : Tab showArrow() +main.java.controlp5.ControllerGroup : Tab showBar() +main.java.controlp5.ControllerGroup : Tab update() +main.java.controlp5.ControllerGroup : Tab updateAbsolutePosition() +main.java.controlp5.ControllerGroup : boolean isBarVisible() +main.java.controlp5.ControllerGroup : boolean isCollapse() +main.java.controlp5.ControllerGroup : boolean isMouseOver() +main.java.controlp5.ControllerGroup : boolean isMoveable() +main.java.controlp5.ControllerGroup : boolean isOpen() +main.java.controlp5.ControllerGroup : boolean isUpdate() +main.java.controlp5.ControllerGroup : boolean isVisible() +main.java.controlp5.ControllerGroup : boolean setMousePressed(boolean) +main.java.controlp5.ControllerGroup : float getArrayValue(int) +main.java.controlp5.ControllerGroup : float getValue() +main.java.controlp5.ControllerGroup : float[] getArrayValue() +main.java.controlp5.ControllerGroup : float[] getPosition() +main.java.controlp5.ControllerGroup : int getHeight() +main.java.controlp5.ControllerGroup : int getId() +main.java.controlp5.ControllerGroup : int getWidth() +main.java.controlp5.ControllerGroup : int listenerSize() +main.java.controlp5.ControllerGroup : void controlEvent(ControlEvent) +main.java.controlp5.ControllerGroup : void remove() +main.java.controlp5.Tab : String getStringValue() +main.java.controlp5.Tab : Tab activateEvent(boolean) +main.java.controlp5.Tab : Tab bringToFront() +main.java.controlp5.Tab : Tab moveTo(ControlWindow) +main.java.controlp5.Tab : Tab setActive(boolean) +main.java.controlp5.Tab : Tab setAlwaysActive(boolean) +main.java.controlp5.Tab : Tab setHeight(int) +main.java.controlp5.Tab : Tab setLabel(String) +main.java.controlp5.Tab : Tab setValue(float) +main.java.controlp5.Tab : Tab setWidth(int) +main.java.controlp5.Tab : boolean isActive() +main.java.controlp5.Tab : boolean isAlwaysActive() +main.java.controlp5.Tab : float getValue() java.lang.Object : String toString() java.lang.Object : boolean equals(Object) diff --git a/examples/controllers/ControlP5textarea/ControlP5textarea.pde b/examples/controllers/ControlP5textarea/ControlP5textarea.pde index 696846f..4544d76 100644 --- a/examples/controllers/ControlP5textarea/ControlP5textarea.pde +++ b/examples/controllers/ControlP5textarea/ControlP5textarea.pde @@ -108,117 +108,117 @@ Format: ClassName : returnType methodName(parameter type) -controlP5.ControllerGroup : CColor getColor() -controlP5.ControllerGroup : Canvas addCanvas(Canvas) -controlP5.ControllerGroup : ControlWindow getWindow() -controlP5.ControllerGroup : Controller getController(String) -controlP5.ControllerGroup : ControllerProperty getProperty(String) -controlP5.ControllerGroup : ControllerProperty getProperty(String, String) -controlP5.ControllerGroup : Label getCaptionLabel() -controlP5.ControllerGroup : Label getValueLabel() -controlP5.ControllerGroup : String getAddress() -controlP5.ControllerGroup : String getInfo() -controlP5.ControllerGroup : String getName() -controlP5.ControllerGroup : String getStringValue() -controlP5.ControllerGroup : String toString() -controlP5.ControllerGroup : Tab getTab() -controlP5.ControllerGroup : Textarea add(ControllerInterface) -controlP5.ControllerGroup : Textarea addListener(ControlListener) -controlP5.ControllerGroup : Textarea bringToFront() -controlP5.ControllerGroup : Textarea bringToFront(ControllerInterface) -controlP5.ControllerGroup : Textarea close() -controlP5.ControllerGroup : Textarea disableCollapse() -controlP5.ControllerGroup : Textarea enableCollapse() -controlP5.ControllerGroup : Textarea hide() -controlP5.ControllerGroup : Textarea hideArrow() -controlP5.ControllerGroup : Textarea hideBar() -controlP5.ControllerGroup : Textarea moveTo(ControlWindow) -controlP5.ControllerGroup : Textarea moveTo(PApplet) -controlP5.ControllerGroup : Textarea open() -controlP5.ControllerGroup : Textarea registerProperty(String) -controlP5.ControllerGroup : Textarea registerProperty(String, String) -controlP5.ControllerGroup : Textarea remove(CDrawable) -controlP5.ControllerGroup : Textarea remove(ControllerInterface) -controlP5.ControllerGroup : Textarea removeCanvas(Canvas) -controlP5.ControllerGroup : Textarea removeListener(ControlListener) -controlP5.ControllerGroup : Textarea removeProperty(String) -controlP5.ControllerGroup : Textarea removeProperty(String, String) -controlP5.ControllerGroup : Textarea setAddress(String) -controlP5.ControllerGroup : Textarea setArrayValue(float[]) -controlP5.ControllerGroup : Textarea setArrayValue(int, float) -controlP5.ControllerGroup : Textarea setCaptionLabel(String) -controlP5.ControllerGroup : Textarea setColor(CColor) -controlP5.ControllerGroup : Textarea setColorActive(int) -controlP5.ControllerGroup : Textarea setColorBackground(int) -controlP5.ControllerGroup : Textarea setColorForeground(int) -controlP5.ControllerGroup : Textarea setColorLabel(int) -controlP5.ControllerGroup : Textarea setColorValue(int) -controlP5.ControllerGroup : Textarea setHeight(int) -controlP5.ControllerGroup : Textarea setId(int) -controlP5.ControllerGroup : Textarea setLabel(String) -controlP5.ControllerGroup : Textarea setMouseOver(boolean) -controlP5.ControllerGroup : Textarea setMoveable(boolean) -controlP5.ControllerGroup : Textarea setOpen(boolean) -controlP5.ControllerGroup : Textarea setPosition(float, float) -controlP5.ControllerGroup : Textarea setPosition(float[]) -controlP5.ControllerGroup : Textarea setSize(int, int) -controlP5.ControllerGroup : Textarea setStringValue(String) -controlP5.ControllerGroup : Textarea setTitle(String) -controlP5.ControllerGroup : Textarea setUpdate(boolean) -controlP5.ControllerGroup : Textarea setValue(float) -controlP5.ControllerGroup : Textarea setVisible(boolean) -controlP5.ControllerGroup : Textarea setWidth(int) -controlP5.ControllerGroup : Textarea show() -controlP5.ControllerGroup : Textarea showArrow() -controlP5.ControllerGroup : Textarea showBar() -controlP5.ControllerGroup : Textarea update() -controlP5.ControllerGroup : Textarea updateAbsolutePosition() -controlP5.ControllerGroup : boolean isBarVisible() -controlP5.ControllerGroup : boolean isCollapse() -controlP5.ControllerGroup : boolean isMouseOver() -controlP5.ControllerGroup : boolean isMoveable() -controlP5.ControllerGroup : boolean isOpen() -controlP5.ControllerGroup : boolean isUpdate() -controlP5.ControllerGroup : boolean isVisible() -controlP5.ControllerGroup : boolean setMousePressed(boolean) -controlP5.ControllerGroup : float getArrayValue(int) -controlP5.ControllerGroup : float getValue() -controlP5.ControllerGroup : float[] getArrayValue() -controlP5.ControllerGroup : float[] getPosition() -controlP5.ControllerGroup : int getHeight() -controlP5.ControllerGroup : int getId() -controlP5.ControllerGroup : int getWidth() -controlP5.ControllerGroup : int listenerSize() -controlP5.ControllerGroup : void controlEvent(ControlEvent) -controlP5.ControllerGroup : void remove() -controlP5.Textarea : Label getValueLabel() -controlP5.Textarea : String getStringValue() -controlP5.Textarea : String getText() -controlP5.Textarea : Textarea append(String) -controlP5.Textarea : Textarea append(String, int) -controlP5.Textarea : Textarea clear() -controlP5.Textarea : Textarea disableColorBackground() -controlP5.Textarea : Textarea enableColorBackground() -controlP5.Textarea : Textarea hideScrollbar() -controlP5.Textarea : Textarea scroll(float) -controlP5.Textarea : Textarea setBorderColor(int) -controlP5.Textarea : Textarea setColor(int) -controlP5.Textarea : Textarea setColorBackground(int) -controlP5.Textarea : Textarea setFont(ControlFont) -controlP5.Textarea : Textarea setFont(PFont) -controlP5.Textarea : Textarea setFont(int) -controlP5.Textarea : Textarea setHeight(int) -controlP5.Textarea : Textarea setLineHeight(int) -controlP5.Textarea : Textarea setScrollActive(int) -controlP5.Textarea : Textarea setScrollBackground(int) -controlP5.Textarea : Textarea setScrollForeground(int) -controlP5.Textarea : Textarea setSize(int, int) -controlP5.Textarea : Textarea setText(String) -controlP5.Textarea : Textarea setWidth(int) -controlP5.Textarea : Textarea showScrollbar() -controlP5.Textarea : boolean isScrollable() -controlP5.Textarea : float getValue() -controlP5.Textarea : void controlEvent(ControlEvent) +main.java.controlp5.ControllerGroup : CColor getColor() +main.java.controlp5.ControllerGroup : Canvas addCanvas(Canvas) +main.java.controlp5.ControllerGroup : ControlWindow getWindow() +main.java.controlp5.ControllerGroup : Controller getController(String) +main.java.controlp5.ControllerGroup : ControllerProperty getProperty(String) +main.java.controlp5.ControllerGroup : ControllerProperty getProperty(String, String) +main.java.controlp5.ControllerGroup : Label getCaptionLabel() +main.java.controlp5.ControllerGroup : Label getValueLabel() +main.java.controlp5.ControllerGroup : String getAddress() +main.java.controlp5.ControllerGroup : String getInfo() +main.java.controlp5.ControllerGroup : String getName() +main.java.controlp5.ControllerGroup : String getStringValue() +main.java.controlp5.ControllerGroup : String toString() +main.java.controlp5.ControllerGroup : Tab getTab() +main.java.controlp5.ControllerGroup : Textarea add(ControllerInterface) +main.java.controlp5.ControllerGroup : Textarea addListener(ControlListener) +main.java.controlp5.ControllerGroup : Textarea bringToFront() +main.java.controlp5.ControllerGroup : Textarea bringToFront(ControllerInterface) +main.java.controlp5.ControllerGroup : Textarea close() +main.java.controlp5.ControllerGroup : Textarea disableCollapse() +main.java.controlp5.ControllerGroup : Textarea enableCollapse() +main.java.controlp5.ControllerGroup : Textarea hide() +main.java.controlp5.ControllerGroup : Textarea hideArrow() +main.java.controlp5.ControllerGroup : Textarea hideBar() +main.java.controlp5.ControllerGroup : Textarea moveTo(ControlWindow) +main.java.controlp5.ControllerGroup : Textarea moveTo(PApplet) +main.java.controlp5.ControllerGroup : Textarea open() +main.java.controlp5.ControllerGroup : Textarea registerProperty(String) +main.java.controlp5.ControllerGroup : Textarea registerProperty(String, String) +main.java.controlp5.ControllerGroup : Textarea remove(CDrawable) +main.java.controlp5.ControllerGroup : Textarea remove(ControllerInterface) +main.java.controlp5.ControllerGroup : Textarea removeCanvas(Canvas) +main.java.controlp5.ControllerGroup : Textarea removeListener(ControlListener) +main.java.controlp5.ControllerGroup : Textarea removeProperty(String) +main.java.controlp5.ControllerGroup : Textarea removeProperty(String, String) +main.java.controlp5.ControllerGroup : Textarea setAddress(String) +main.java.controlp5.ControllerGroup : Textarea setArrayValue(float[]) +main.java.controlp5.ControllerGroup : Textarea setArrayValue(int, float) +main.java.controlp5.ControllerGroup : Textarea setCaptionLabel(String) +main.java.controlp5.ControllerGroup : Textarea setColor(CColor) +main.java.controlp5.ControllerGroup : Textarea setColorActive(int) +main.java.controlp5.ControllerGroup : Textarea setColorBackground(int) +main.java.controlp5.ControllerGroup : Textarea setColorForeground(int) +main.java.controlp5.ControllerGroup : Textarea setColorLabel(int) +main.java.controlp5.ControllerGroup : Textarea setColorValue(int) +main.java.controlp5.ControllerGroup : Textarea setHeight(int) +main.java.controlp5.ControllerGroup : Textarea setId(int) +main.java.controlp5.ControllerGroup : Textarea setLabel(String) +main.java.controlp5.ControllerGroup : Textarea setMouseOver(boolean) +main.java.controlp5.ControllerGroup : Textarea setMoveable(boolean) +main.java.controlp5.ControllerGroup : Textarea setOpen(boolean) +main.java.controlp5.ControllerGroup : Textarea setPosition(float, float) +main.java.controlp5.ControllerGroup : Textarea setPosition(float[]) +main.java.controlp5.ControllerGroup : Textarea setSize(int, int) +main.java.controlp5.ControllerGroup : Textarea setStringValue(String) +main.java.controlp5.ControllerGroup : Textarea setTitle(String) +main.java.controlp5.ControllerGroup : Textarea setUpdate(boolean) +main.java.controlp5.ControllerGroup : Textarea setValue(float) +main.java.controlp5.ControllerGroup : Textarea setVisible(boolean) +main.java.controlp5.ControllerGroup : Textarea setWidth(int) +main.java.controlp5.ControllerGroup : Textarea show() +main.java.controlp5.ControllerGroup : Textarea showArrow() +main.java.controlp5.ControllerGroup : Textarea showBar() +main.java.controlp5.ControllerGroup : Textarea update() +main.java.controlp5.ControllerGroup : Textarea updateAbsolutePosition() +main.java.controlp5.ControllerGroup : boolean isBarVisible() +main.java.controlp5.ControllerGroup : boolean isCollapse() +main.java.controlp5.ControllerGroup : boolean isMouseOver() +main.java.controlp5.ControllerGroup : boolean isMoveable() +main.java.controlp5.ControllerGroup : boolean isOpen() +main.java.controlp5.ControllerGroup : boolean isUpdate() +main.java.controlp5.ControllerGroup : boolean isVisible() +main.java.controlp5.ControllerGroup : boolean setMousePressed(boolean) +main.java.controlp5.ControllerGroup : float getArrayValue(int) +main.java.controlp5.ControllerGroup : float getValue() +main.java.controlp5.ControllerGroup : float[] getArrayValue() +main.java.controlp5.ControllerGroup : float[] getPosition() +main.java.controlp5.ControllerGroup : int getHeight() +main.java.controlp5.ControllerGroup : int getId() +main.java.controlp5.ControllerGroup : int getWidth() +main.java.controlp5.ControllerGroup : int listenerSize() +main.java.controlp5.ControllerGroup : void controlEvent(ControlEvent) +main.java.controlp5.ControllerGroup : void remove() +main.java.controlp5.Textarea : Label getValueLabel() +main.java.controlp5.Textarea : String getStringValue() +main.java.controlp5.Textarea : String getText() +main.java.controlp5.Textarea : Textarea append(String) +main.java.controlp5.Textarea : Textarea append(String, int) +main.java.controlp5.Textarea : Textarea clear() +main.java.controlp5.Textarea : Textarea disableColorBackground() +main.java.controlp5.Textarea : Textarea enableColorBackground() +main.java.controlp5.Textarea : Textarea hideScrollbar() +main.java.controlp5.Textarea : Textarea scroll(float) +main.java.controlp5.Textarea : Textarea setBorderColor(int) +main.java.controlp5.Textarea : Textarea setColor(int) +main.java.controlp5.Textarea : Textarea setColorBackground(int) +main.java.controlp5.Textarea : Textarea setFont(ControlFont) +main.java.controlp5.Textarea : Textarea setFont(PFont) +main.java.controlp5.Textarea : Textarea setFont(int) +main.java.controlp5.Textarea : Textarea setHeight(int) +main.java.controlp5.Textarea : Textarea setLineHeight(int) +main.java.controlp5.Textarea : Textarea setScrollActive(int) +main.java.controlp5.Textarea : Textarea setScrollBackground(int) +main.java.controlp5.Textarea : Textarea setScrollForeground(int) +main.java.controlp5.Textarea : Textarea setSize(int, int) +main.java.controlp5.Textarea : Textarea setText(String) +main.java.controlp5.Textarea : Textarea setWidth(int) +main.java.controlp5.Textarea : Textarea showScrollbar() +main.java.controlp5.Textarea : boolean isScrollable() +main.java.controlp5.Textarea : float getValue() +main.java.controlp5.Textarea : void controlEvent(ControlEvent) java.lang.Object : String toString() java.lang.Object : boolean equals(Object) diff --git a/examples/controllers/ControlP5textfield/ControlP5textfield.pde b/examples/controllers/ControlP5textfield/ControlP5textfield.pde index 8de4528..d6e4dc5 100644 --- a/examples/controllers/ControlP5textfield/ControlP5textfield.pde +++ b/examples/controllers/ControlP5textfield/ControlP5textfield.pde @@ -93,160 +93,160 @@ Format: ClassName : returnType methodName(parameter type) -controlP5.Controller : CColor getColor() -controlP5.Controller : ControlBehavior getBehavior() -controlP5.Controller : ControlWindow getControlWindow() -controlP5.Controller : ControlWindow getWindow() -controlP5.Controller : ControllerProperty getProperty(String) -controlP5.Controller : ControllerProperty getProperty(String, String) -controlP5.Controller : ControllerView getView() -controlP5.Controller : Label getCaptionLabel() -controlP5.Controller : Label getValueLabel() -controlP5.Controller : List getControllerPlugList() -controlP5.Controller : Pointer getPointer() -controlP5.Controller : String getAddress() -controlP5.Controller : String getInfo() -controlP5.Controller : String getName() -controlP5.Controller : String getStringValue() -controlP5.Controller : String toString() -controlP5.Controller : Tab getTab() -controlP5.Controller : Textfield addCallback(CallbackListener) -controlP5.Controller : Textfield addListener(ControlListener) -controlP5.Controller : Textfield addListenerFor(int, CallbackListener) -controlP5.Controller : Textfield align(int, int, int, int) -controlP5.Controller : Textfield bringToFront() -controlP5.Controller : Textfield bringToFront(ControllerInterface) -controlP5.Controller : Textfield hide() -controlP5.Controller : Textfield linebreak() -controlP5.Controller : Textfield listen(boolean) -controlP5.Controller : Textfield lock() -controlP5.Controller : Textfield onChange(CallbackListener) -controlP5.Controller : Textfield onClick(CallbackListener) -controlP5.Controller : Textfield onDoublePress(CallbackListener) -controlP5.Controller : Textfield onDrag(CallbackListener) -controlP5.Controller : Textfield onDraw(ControllerView) -controlP5.Controller : Textfield onEndDrag(CallbackListener) -controlP5.Controller : Textfield onEnter(CallbackListener) -controlP5.Controller : Textfield onLeave(CallbackListener) -controlP5.Controller : Textfield onMove(CallbackListener) -controlP5.Controller : Textfield onPress(CallbackListener) -controlP5.Controller : Textfield onRelease(CallbackListener) -controlP5.Controller : Textfield onReleaseOutside(CallbackListener) -controlP5.Controller : Textfield onStartDrag(CallbackListener) -controlP5.Controller : Textfield onWheel(CallbackListener) -controlP5.Controller : Textfield plugTo(Object) -controlP5.Controller : Textfield plugTo(Object, String) -controlP5.Controller : Textfield plugTo(Object[]) -controlP5.Controller : Textfield plugTo(Object[], String) -controlP5.Controller : Textfield registerProperty(String) -controlP5.Controller : Textfield registerProperty(String, String) -controlP5.Controller : Textfield registerTooltip(String) -controlP5.Controller : Textfield removeBehavior() -controlP5.Controller : Textfield removeCallback() -controlP5.Controller : Textfield removeCallback(CallbackListener) -controlP5.Controller : Textfield removeListener(ControlListener) -controlP5.Controller : Textfield removeListenerFor(int, CallbackListener) -controlP5.Controller : Textfield removeListenersFor(int) -controlP5.Controller : Textfield removeProperty(String) -controlP5.Controller : Textfield removeProperty(String, String) -controlP5.Controller : Textfield setArrayValue(float[]) -controlP5.Controller : Textfield setArrayValue(int, float) -controlP5.Controller : Textfield setBehavior(ControlBehavior) -controlP5.Controller : Textfield setBroadcast(boolean) -controlP5.Controller : Textfield setCaptionLabel(String) -controlP5.Controller : Textfield setColor(CColor) -controlP5.Controller : Textfield setColorActive(int) -controlP5.Controller : Textfield setColorBackground(int) -controlP5.Controller : Textfield setColorCaptionLabel(int) -controlP5.Controller : Textfield setColorForeground(int) -controlP5.Controller : Textfield setColorLabel(int) -controlP5.Controller : Textfield setColorValue(int) -controlP5.Controller : Textfield setColorValueLabel(int) -controlP5.Controller : Textfield setDecimalPrecision(int) -controlP5.Controller : Textfield setDefaultValue(float) -controlP5.Controller : Textfield setHeight(int) -controlP5.Controller : Textfield setId(int) -controlP5.Controller : Textfield setImage(PImage) -controlP5.Controller : Textfield setImage(PImage, int) -controlP5.Controller : Textfield setImages(PImage, PImage, PImage) -controlP5.Controller : Textfield setImages(PImage, PImage, PImage, PImage) -controlP5.Controller : Textfield setLabel(String) -controlP5.Controller : Textfield setLabelVisible(boolean) -controlP5.Controller : Textfield setLock(boolean) -controlP5.Controller : Textfield setMax(float) -controlP5.Controller : Textfield setMin(float) -controlP5.Controller : Textfield setMouseOver(boolean) -controlP5.Controller : Textfield setMoveable(boolean) -controlP5.Controller : Textfield setPosition(float, float) -controlP5.Controller : Textfield setPosition(float[]) -controlP5.Controller : Textfield setSize(PImage) -controlP5.Controller : Textfield setSize(int, int) -controlP5.Controller : Textfield setStringValue(String) -controlP5.Controller : Textfield setUpdate(boolean) -controlP5.Controller : Textfield setValue(float) -controlP5.Controller : Textfield setValueLabel(String) -controlP5.Controller : Textfield setValueSelf(float) -controlP5.Controller : Textfield setView(ControllerView) -controlP5.Controller : Textfield setVisible(boolean) -controlP5.Controller : Textfield setWidth(int) -controlP5.Controller : Textfield show() -controlP5.Controller : Textfield unlock() -controlP5.Controller : Textfield unplugFrom(Object) -controlP5.Controller : Textfield unplugFrom(Object[]) -controlP5.Controller : Textfield unregisterTooltip() -controlP5.Controller : Textfield update() -controlP5.Controller : Textfield updateSize() -controlP5.Controller : boolean isActive() -controlP5.Controller : boolean isBroadcast() -controlP5.Controller : boolean isInside() -controlP5.Controller : boolean isLabelVisible() -controlP5.Controller : boolean isListening() -controlP5.Controller : boolean isLock() -controlP5.Controller : boolean isMouseOver() -controlP5.Controller : boolean isMousePressed() -controlP5.Controller : boolean isMoveable() -controlP5.Controller : boolean isUpdate() -controlP5.Controller : boolean isVisible() -controlP5.Controller : float getArrayValue(int) -controlP5.Controller : float getDefaultValue() -controlP5.Controller : float getMax() -controlP5.Controller : float getMin() -controlP5.Controller : float getValue() -controlP5.Controller : float[] getAbsolutePosition() -controlP5.Controller : float[] getArrayValue() -controlP5.Controller : float[] getPosition() -controlP5.Controller : int getDecimalPrecision() -controlP5.Controller : int getHeight() -controlP5.Controller : int getId() -controlP5.Controller : int getWidth() -controlP5.Controller : int listenerSize() -controlP5.Controller : void remove() -controlP5.Controller : void setView(ControllerView, int) -controlP5.Textfield : String getText() -controlP5.Textfield : String[] getTextList() -controlP5.Textfield : Textfield clear() -controlP5.Textfield : Textfield keepFocus(boolean) -controlP5.Textfield : Textfield setAutoClear(boolean) -controlP5.Textfield : Textfield setColor(int) -controlP5.Textfield : Textfield setColorCursor(int) -controlP5.Textfield : Textfield setFocus(boolean) -controlP5.Textfield : Textfield setFont(ControlFont) -controlP5.Textfield : Textfield setFont(PFont) -controlP5.Textfield : Textfield setFont(int) -controlP5.Textfield : Textfield setHeight(int) -controlP5.Textfield : Textfield setInputFilter(int) -controlP5.Textfield : Textfield setPasswordMode(boolean) -controlP5.Textfield : Textfield setSize(int, int) -controlP5.Textfield : Textfield setText(String) -controlP5.Textfield : Textfield setValue(String) -controlP5.Textfield : Textfield setValue(float) -controlP5.Textfield : Textfield setWidth(int) -controlP5.Textfield : Textfield submit() -controlP5.Textfield : boolean isAutoClear() -controlP5.Textfield : boolean isFocus() -controlP5.Textfield : int getIndex() -controlP5.Textfield : void draw(PGraphics) -controlP5.Textfield : void keyEvent(KeyEvent) +main.java.controlp5.Controller : CColor getColor() +main.java.controlp5.Controller : ControlBehavior getBehavior() +main.java.controlp5.Controller : ControlWindow getControlWindow() +main.java.controlp5.Controller : ControlWindow getWindow() +main.java.controlp5.Controller : ControllerProperty getProperty(String) +main.java.controlp5.Controller : ControllerProperty getProperty(String, String) +main.java.controlp5.Controller : ControllerView getView() +main.java.controlp5.Controller : Label getCaptionLabel() +main.java.controlp5.Controller : Label getValueLabel() +main.java.controlp5.Controller : List getControllerPlugList() +main.java.controlp5.Controller : Pointer getPointer() +main.java.controlp5.Controller : String getAddress() +main.java.controlp5.Controller : String getInfo() +main.java.controlp5.Controller : String getName() +main.java.controlp5.Controller : String getStringValue() +main.java.controlp5.Controller : String toString() +main.java.controlp5.Controller : Tab getTab() +main.java.controlp5.Controller : Textfield addCallback(CallbackListener) +main.java.controlp5.Controller : Textfield addListener(ControlListener) +main.java.controlp5.Controller : Textfield addListenerFor(int, CallbackListener) +main.java.controlp5.Controller : Textfield align(int, int, int, int) +main.java.controlp5.Controller : Textfield bringToFront() +main.java.controlp5.Controller : Textfield bringToFront(ControllerInterface) +main.java.controlp5.Controller : Textfield hide() +main.java.controlp5.Controller : Textfield linebreak() +main.java.controlp5.Controller : Textfield listen(boolean) +main.java.controlp5.Controller : Textfield lock() +main.java.controlp5.Controller : Textfield onChange(CallbackListener) +main.java.controlp5.Controller : Textfield onClick(CallbackListener) +main.java.controlp5.Controller : Textfield onDoublePress(CallbackListener) +main.java.controlp5.Controller : Textfield onDrag(CallbackListener) +main.java.controlp5.Controller : Textfield onDraw(ControllerView) +main.java.controlp5.Controller : Textfield onEndDrag(CallbackListener) +main.java.controlp5.Controller : Textfield onEnter(CallbackListener) +main.java.controlp5.Controller : Textfield onLeave(CallbackListener) +main.java.controlp5.Controller : Textfield onMove(CallbackListener) +main.java.controlp5.Controller : Textfield onPress(CallbackListener) +main.java.controlp5.Controller : Textfield onRelease(CallbackListener) +main.java.controlp5.Controller : Textfield onReleaseOutside(CallbackListener) +main.java.controlp5.Controller : Textfield onStartDrag(CallbackListener) +main.java.controlp5.Controller : Textfield onWheel(CallbackListener) +main.java.controlp5.Controller : Textfield plugTo(Object) +main.java.controlp5.Controller : Textfield plugTo(Object, String) +main.java.controlp5.Controller : Textfield plugTo(Object[]) +main.java.controlp5.Controller : Textfield plugTo(Object[], String) +main.java.controlp5.Controller : Textfield registerProperty(String) +main.java.controlp5.Controller : Textfield registerProperty(String, String) +main.java.controlp5.Controller : Textfield registerTooltip(String) +main.java.controlp5.Controller : Textfield removeBehavior() +main.java.controlp5.Controller : Textfield removeCallback() +main.java.controlp5.Controller : Textfield removeCallback(CallbackListener) +main.java.controlp5.Controller : Textfield removeListener(ControlListener) +main.java.controlp5.Controller : Textfield removeListenerFor(int, CallbackListener) +main.java.controlp5.Controller : Textfield removeListenersFor(int) +main.java.controlp5.Controller : Textfield removeProperty(String) +main.java.controlp5.Controller : Textfield removeProperty(String, String) +main.java.controlp5.Controller : Textfield setArrayValue(float[]) +main.java.controlp5.Controller : Textfield setArrayValue(int, float) +main.java.controlp5.Controller : Textfield setBehavior(ControlBehavior) +main.java.controlp5.Controller : Textfield setBroadcast(boolean) +main.java.controlp5.Controller : Textfield setCaptionLabel(String) +main.java.controlp5.Controller : Textfield setColor(CColor) +main.java.controlp5.Controller : Textfield setColorActive(int) +main.java.controlp5.Controller : Textfield setColorBackground(int) +main.java.controlp5.Controller : Textfield setColorCaptionLabel(int) +main.java.controlp5.Controller : Textfield setColorForeground(int) +main.java.controlp5.Controller : Textfield setColorLabel(int) +main.java.controlp5.Controller : Textfield setColorValue(int) +main.java.controlp5.Controller : Textfield setColorValueLabel(int) +main.java.controlp5.Controller : Textfield setDecimalPrecision(int) +main.java.controlp5.Controller : Textfield setDefaultValue(float) +main.java.controlp5.Controller : Textfield setHeight(int) +main.java.controlp5.Controller : Textfield setId(int) +main.java.controlp5.Controller : Textfield setImage(PImage) +main.java.controlp5.Controller : Textfield setImage(PImage, int) +main.java.controlp5.Controller : Textfield setImages(PImage, PImage, PImage) +main.java.controlp5.Controller : Textfield setImages(PImage, PImage, PImage, PImage) +main.java.controlp5.Controller : Textfield setLabel(String) +main.java.controlp5.Controller : Textfield setLabelVisible(boolean) +main.java.controlp5.Controller : Textfield setLock(boolean) +main.java.controlp5.Controller : Textfield setMax(float) +main.java.controlp5.Controller : Textfield setMin(float) +main.java.controlp5.Controller : Textfield setMouseOver(boolean) +main.java.controlp5.Controller : Textfield setMoveable(boolean) +main.java.controlp5.Controller : Textfield setPosition(float, float) +main.java.controlp5.Controller : Textfield setPosition(float[]) +main.java.controlp5.Controller : Textfield setSize(PImage) +main.java.controlp5.Controller : Textfield setSize(int, int) +main.java.controlp5.Controller : Textfield setStringValue(String) +main.java.controlp5.Controller : Textfield setUpdate(boolean) +main.java.controlp5.Controller : Textfield setValue(float) +main.java.controlp5.Controller : Textfield setValueLabel(String) +main.java.controlp5.Controller : Textfield setValueSelf(float) +main.java.controlp5.Controller : Textfield setView(ControllerView) +main.java.controlp5.Controller : Textfield setVisible(boolean) +main.java.controlp5.Controller : Textfield setWidth(int) +main.java.controlp5.Controller : Textfield show() +main.java.controlp5.Controller : Textfield unlock() +main.java.controlp5.Controller : Textfield unplugFrom(Object) +main.java.controlp5.Controller : Textfield unplugFrom(Object[]) +main.java.controlp5.Controller : Textfield unregisterTooltip() +main.java.controlp5.Controller : Textfield update() +main.java.controlp5.Controller : Textfield updateSize() +main.java.controlp5.Controller : boolean isActive() +main.java.controlp5.Controller : boolean isBroadcast() +main.java.controlp5.Controller : boolean isInside() +main.java.controlp5.Controller : boolean isLabelVisible() +main.java.controlp5.Controller : boolean isListening() +main.java.controlp5.Controller : boolean isLock() +main.java.controlp5.Controller : boolean isMouseOver() +main.java.controlp5.Controller : boolean isMousePressed() +main.java.controlp5.Controller : boolean isMoveable() +main.java.controlp5.Controller : boolean isUpdate() +main.java.controlp5.Controller : boolean isVisible() +main.java.controlp5.Controller : float getArrayValue(int) +main.java.controlp5.Controller : float getDefaultValue() +main.java.controlp5.Controller : float getMax() +main.java.controlp5.Controller : float getMin() +main.java.controlp5.Controller : float getValue() +main.java.controlp5.Controller : float[] getAbsolutePosition() +main.java.controlp5.Controller : float[] getArrayValue() +main.java.controlp5.Controller : float[] getPosition() +main.java.controlp5.Controller : int getDecimalPrecision() +main.java.controlp5.Controller : int getHeight() +main.java.controlp5.Controller : int getId() +main.java.controlp5.Controller : int getWidth() +main.java.controlp5.Controller : int listenerSize() +main.java.controlp5.Controller : void remove() +main.java.controlp5.Controller : void setView(ControllerView, int) +main.java.controlp5.Textfield : String getText() +main.java.controlp5.Textfield : String[] getTextList() +main.java.controlp5.Textfield : Textfield clear() +main.java.controlp5.Textfield : Textfield keepFocus(boolean) +main.java.controlp5.Textfield : Textfield setAutoClear(boolean) +main.java.controlp5.Textfield : Textfield setColor(int) +main.java.controlp5.Textfield : Textfield setColorCursor(int) +main.java.controlp5.Textfield : Textfield setFocus(boolean) +main.java.controlp5.Textfield : Textfield setFont(ControlFont) +main.java.controlp5.Textfield : Textfield setFont(PFont) +main.java.controlp5.Textfield : Textfield setFont(int) +main.java.controlp5.Textfield : Textfield setHeight(int) +main.java.controlp5.Textfield : Textfield setInputFilter(int) +main.java.controlp5.Textfield : Textfield setPasswordMode(boolean) +main.java.controlp5.Textfield : Textfield setSize(int, int) +main.java.controlp5.Textfield : Textfield setText(String) +main.java.controlp5.Textfield : Textfield setValue(String) +main.java.controlp5.Textfield : Textfield setValue(float) +main.java.controlp5.Textfield : Textfield setWidth(int) +main.java.controlp5.Textfield : Textfield submit() +main.java.controlp5.Textfield : boolean isAutoClear() +main.java.controlp5.Textfield : boolean isFocus() +main.java.controlp5.Textfield : int getIndex() +main.java.controlp5.Textfield : void draw(PGraphics) +main.java.controlp5.Textfield : void keyEvent(KeyEvent) java.lang.Object : String toString() java.lang.Object : boolean equals(Object) diff --git a/examples/controllers/ControlP5textlabel/ControlP5Textlabel.pde b/examples/controllers/ControlP5textlabel/ControlP5Textlabel.pde index 9ceaeac..861266d 100644 --- a/examples/controllers/ControlP5textlabel/ControlP5Textlabel.pde +++ b/examples/controllers/ControlP5textlabel/ControlP5Textlabel.pde @@ -52,155 +52,155 @@ Format: ClassName : returnType methodName(parameter type) -controlP5.Controller : CColor getColor() -controlP5.Controller : ControlBehavior getBehavior() -controlP5.Controller : ControlWindow getControlWindow() -controlP5.Controller : ControlWindow getWindow() -controlP5.Controller : ControllerProperty getProperty(String) -controlP5.Controller : ControllerProperty getProperty(String, String) -controlP5.Controller : ControllerView getView() -controlP5.Controller : Label getCaptionLabel() -controlP5.Controller : Label getValueLabel() -controlP5.Controller : List getControllerPlugList() -controlP5.Controller : Pointer getPointer() -controlP5.Controller : String getAddress() -controlP5.Controller : String getInfo() -controlP5.Controller : String getName() -controlP5.Controller : String getStringValue() -controlP5.Controller : String toString() -controlP5.Controller : Tab getTab() -controlP5.Controller : Textlabel addCallback(CallbackListener) -controlP5.Controller : Textlabel addListener(ControlListener) -controlP5.Controller : Textlabel addListenerFor(int, CallbackListener) -controlP5.Controller : Textlabel align(int, int, int, int) -controlP5.Controller : Textlabel bringToFront() -controlP5.Controller : Textlabel bringToFront(ControllerInterface) -controlP5.Controller : Textlabel hide() -controlP5.Controller : Textlabel linebreak() -controlP5.Controller : Textlabel listen(boolean) -controlP5.Controller : Textlabel lock() -controlP5.Controller : Textlabel onChange(CallbackListener) -controlP5.Controller : Textlabel onClick(CallbackListener) -controlP5.Controller : Textlabel onDoublePress(CallbackListener) -controlP5.Controller : Textlabel onDrag(CallbackListener) -controlP5.Controller : Textlabel onDraw(ControllerView) -controlP5.Controller : Textlabel onEndDrag(CallbackListener) -controlP5.Controller : Textlabel onEnter(CallbackListener) -controlP5.Controller : Textlabel onLeave(CallbackListener) -controlP5.Controller : Textlabel onMove(CallbackListener) -controlP5.Controller : Textlabel onPress(CallbackListener) -controlP5.Controller : Textlabel onRelease(CallbackListener) -controlP5.Controller : Textlabel onReleaseOutside(CallbackListener) -controlP5.Controller : Textlabel onStartDrag(CallbackListener) -controlP5.Controller : Textlabel onWheel(CallbackListener) -controlP5.Controller : Textlabel plugTo(Object) -controlP5.Controller : Textlabel plugTo(Object, String) -controlP5.Controller : Textlabel plugTo(Object[]) -controlP5.Controller : Textlabel plugTo(Object[], String) -controlP5.Controller : Textlabel registerProperty(String) -controlP5.Controller : Textlabel registerProperty(String, String) -controlP5.Controller : Textlabel registerTooltip(String) -controlP5.Controller : Textlabel removeBehavior() -controlP5.Controller : Textlabel removeCallback() -controlP5.Controller : Textlabel removeCallback(CallbackListener) -controlP5.Controller : Textlabel removeListener(ControlListener) -controlP5.Controller : Textlabel removeListenerFor(int, CallbackListener) -controlP5.Controller : Textlabel removeListenersFor(int) -controlP5.Controller : Textlabel removeProperty(String) -controlP5.Controller : Textlabel removeProperty(String, String) -controlP5.Controller : Textlabel setArrayValue(float[]) -controlP5.Controller : Textlabel setArrayValue(int, float) -controlP5.Controller : Textlabel setBehavior(ControlBehavior) -controlP5.Controller : Textlabel setBroadcast(boolean) -controlP5.Controller : Textlabel setCaptionLabel(String) -controlP5.Controller : Textlabel setColor(CColor) -controlP5.Controller : Textlabel setColorActive(int) -controlP5.Controller : Textlabel setColorBackground(int) -controlP5.Controller : Textlabel setColorCaptionLabel(int) -controlP5.Controller : Textlabel setColorForeground(int) -controlP5.Controller : Textlabel setColorLabel(int) -controlP5.Controller : Textlabel setColorValue(int) -controlP5.Controller : Textlabel setColorValueLabel(int) -controlP5.Controller : Textlabel setDecimalPrecision(int) -controlP5.Controller : Textlabel setDefaultValue(float) -controlP5.Controller : Textlabel setHeight(int) -controlP5.Controller : Textlabel setId(int) -controlP5.Controller : Textlabel setImage(PImage) -controlP5.Controller : Textlabel setImage(PImage, int) -controlP5.Controller : Textlabel setImages(PImage, PImage, PImage) -controlP5.Controller : Textlabel setImages(PImage, PImage, PImage, PImage) -controlP5.Controller : Textlabel setLabel(String) -controlP5.Controller : Textlabel setLabelVisible(boolean) -controlP5.Controller : Textlabel setLock(boolean) -controlP5.Controller : Textlabel setMax(float) -controlP5.Controller : Textlabel setMin(float) -controlP5.Controller : Textlabel setMouseOver(boolean) -controlP5.Controller : Textlabel setMoveable(boolean) -controlP5.Controller : Textlabel setPosition(float, float) -controlP5.Controller : Textlabel setPosition(float[]) -controlP5.Controller : Textlabel setSize(PImage) -controlP5.Controller : Textlabel setSize(int, int) -controlP5.Controller : Textlabel setStringValue(String) -controlP5.Controller : Textlabel setUpdate(boolean) -controlP5.Controller : Textlabel setValue(float) -controlP5.Controller : Textlabel setValueLabel(String) -controlP5.Controller : Textlabel setValueSelf(float) -controlP5.Controller : Textlabel setView(ControllerView) -controlP5.Controller : Textlabel setVisible(boolean) -controlP5.Controller : Textlabel setWidth(int) -controlP5.Controller : Textlabel show() -controlP5.Controller : Textlabel unlock() -controlP5.Controller : Textlabel unplugFrom(Object) -controlP5.Controller : Textlabel unplugFrom(Object[]) -controlP5.Controller : Textlabel unregisterTooltip() -controlP5.Controller : Textlabel update() -controlP5.Controller : Textlabel updateSize() -controlP5.Controller : boolean isActive() -controlP5.Controller : boolean isBroadcast() -controlP5.Controller : boolean isInside() -controlP5.Controller : boolean isLabelVisible() -controlP5.Controller : boolean isListening() -controlP5.Controller : boolean isLock() -controlP5.Controller : boolean isMouseOver() -controlP5.Controller : boolean isMousePressed() -controlP5.Controller : boolean isMoveable() -controlP5.Controller : boolean isUpdate() -controlP5.Controller : boolean isVisible() -controlP5.Controller : float getArrayValue(int) -controlP5.Controller : float getDefaultValue() -controlP5.Controller : float getMax() -controlP5.Controller : float getMin() -controlP5.Controller : float getValue() -controlP5.Controller : float[] getAbsolutePosition() -controlP5.Controller : float[] getArrayValue() -controlP5.Controller : float[] getPosition() -controlP5.Controller : int getDecimalPrecision() -controlP5.Controller : int getHeight() -controlP5.Controller : int getId() -controlP5.Controller : int getWidth() -controlP5.Controller : int listenerSize() -controlP5.Controller : void remove() -controlP5.Controller : void setView(ControllerView, int) -controlP5.Textlabel : ControllerStyle getStyle() -controlP5.Textlabel : Label get() -controlP5.Textlabel : Textlabel append(String, int) -controlP5.Textlabel : Textlabel setColor(int) -controlP5.Textlabel : Textlabel setFont(ControlFont) -controlP5.Textlabel : Textlabel setFont(PFont) -controlP5.Textlabel : Textlabel setHeight(int) -controlP5.Textlabel : Textlabel setLetterSpacing(int) -controlP5.Textlabel : Textlabel setLineHeight(int) -controlP5.Textlabel : Textlabel setMultiline(boolean) -controlP5.Textlabel : Textlabel setStringValue(String) -controlP5.Textlabel : Textlabel setText(String) -controlP5.Textlabel : Textlabel setValue(String) -controlP5.Textlabel : Textlabel setValue(float) -controlP5.Textlabel : Textlabel setWidth(int) -controlP5.Textlabel : int getLineHeight() -controlP5.Textlabel : void draw() -controlP5.Textlabel : void draw(PApplet) -controlP5.Textlabel : void draw(PGraphics) -controlP5.Textlabel : void draw(int, int) +main.java.controlp5.Controller : CColor getColor() +main.java.controlp5.Controller : ControlBehavior getBehavior() +main.java.controlp5.Controller : ControlWindow getControlWindow() +main.java.controlp5.Controller : ControlWindow getWindow() +main.java.controlp5.Controller : ControllerProperty getProperty(String) +main.java.controlp5.Controller : ControllerProperty getProperty(String, String) +main.java.controlp5.Controller : ControllerView getView() +main.java.controlp5.Controller : Label getCaptionLabel() +main.java.controlp5.Controller : Label getValueLabel() +main.java.controlp5.Controller : List getControllerPlugList() +main.java.controlp5.Controller : Pointer getPointer() +main.java.controlp5.Controller : String getAddress() +main.java.controlp5.Controller : String getInfo() +main.java.controlp5.Controller : String getName() +main.java.controlp5.Controller : String getStringValue() +main.java.controlp5.Controller : String toString() +main.java.controlp5.Controller : Tab getTab() +main.java.controlp5.Controller : Textlabel addCallback(CallbackListener) +main.java.controlp5.Controller : Textlabel addListener(ControlListener) +main.java.controlp5.Controller : Textlabel addListenerFor(int, CallbackListener) +main.java.controlp5.Controller : Textlabel align(int, int, int, int) +main.java.controlp5.Controller : Textlabel bringToFront() +main.java.controlp5.Controller : Textlabel bringToFront(ControllerInterface) +main.java.controlp5.Controller : Textlabel hide() +main.java.controlp5.Controller : Textlabel linebreak() +main.java.controlp5.Controller : Textlabel listen(boolean) +main.java.controlp5.Controller : Textlabel lock() +main.java.controlp5.Controller : Textlabel onChange(CallbackListener) +main.java.controlp5.Controller : Textlabel onClick(CallbackListener) +main.java.controlp5.Controller : Textlabel onDoublePress(CallbackListener) +main.java.controlp5.Controller : Textlabel onDrag(CallbackListener) +main.java.controlp5.Controller : Textlabel onDraw(ControllerView) +main.java.controlp5.Controller : Textlabel onEndDrag(CallbackListener) +main.java.controlp5.Controller : Textlabel onEnter(CallbackListener) +main.java.controlp5.Controller : Textlabel onLeave(CallbackListener) +main.java.controlp5.Controller : Textlabel onMove(CallbackListener) +main.java.controlp5.Controller : Textlabel onPress(CallbackListener) +main.java.controlp5.Controller : Textlabel onRelease(CallbackListener) +main.java.controlp5.Controller : Textlabel onReleaseOutside(CallbackListener) +main.java.controlp5.Controller : Textlabel onStartDrag(CallbackListener) +main.java.controlp5.Controller : Textlabel onWheel(CallbackListener) +main.java.controlp5.Controller : Textlabel plugTo(Object) +main.java.controlp5.Controller : Textlabel plugTo(Object, String) +main.java.controlp5.Controller : Textlabel plugTo(Object[]) +main.java.controlp5.Controller : Textlabel plugTo(Object[], String) +main.java.controlp5.Controller : Textlabel registerProperty(String) +main.java.controlp5.Controller : Textlabel registerProperty(String, String) +main.java.controlp5.Controller : Textlabel registerTooltip(String) +main.java.controlp5.Controller : Textlabel removeBehavior() +main.java.controlp5.Controller : Textlabel removeCallback() +main.java.controlp5.Controller : Textlabel removeCallback(CallbackListener) +main.java.controlp5.Controller : Textlabel removeListener(ControlListener) +main.java.controlp5.Controller : Textlabel removeListenerFor(int, CallbackListener) +main.java.controlp5.Controller : Textlabel removeListenersFor(int) +main.java.controlp5.Controller : Textlabel removeProperty(String) +main.java.controlp5.Controller : Textlabel removeProperty(String, String) +main.java.controlp5.Controller : Textlabel setArrayValue(float[]) +main.java.controlp5.Controller : Textlabel setArrayValue(int, float) +main.java.controlp5.Controller : Textlabel setBehavior(ControlBehavior) +main.java.controlp5.Controller : Textlabel setBroadcast(boolean) +main.java.controlp5.Controller : Textlabel setCaptionLabel(String) +main.java.controlp5.Controller : Textlabel setColor(CColor) +main.java.controlp5.Controller : Textlabel setColorActive(int) +main.java.controlp5.Controller : Textlabel setColorBackground(int) +main.java.controlp5.Controller : Textlabel setColorCaptionLabel(int) +main.java.controlp5.Controller : Textlabel setColorForeground(int) +main.java.controlp5.Controller : Textlabel setColorLabel(int) +main.java.controlp5.Controller : Textlabel setColorValue(int) +main.java.controlp5.Controller : Textlabel setColorValueLabel(int) +main.java.controlp5.Controller : Textlabel setDecimalPrecision(int) +main.java.controlp5.Controller : Textlabel setDefaultValue(float) +main.java.controlp5.Controller : Textlabel setHeight(int) +main.java.controlp5.Controller : Textlabel setId(int) +main.java.controlp5.Controller : Textlabel setImage(PImage) +main.java.controlp5.Controller : Textlabel setImage(PImage, int) +main.java.controlp5.Controller : Textlabel setImages(PImage, PImage, PImage) +main.java.controlp5.Controller : Textlabel setImages(PImage, PImage, PImage, PImage) +main.java.controlp5.Controller : Textlabel setLabel(String) +main.java.controlp5.Controller : Textlabel setLabelVisible(boolean) +main.java.controlp5.Controller : Textlabel setLock(boolean) +main.java.controlp5.Controller : Textlabel setMax(float) +main.java.controlp5.Controller : Textlabel setMin(float) +main.java.controlp5.Controller : Textlabel setMouseOver(boolean) +main.java.controlp5.Controller : Textlabel setMoveable(boolean) +main.java.controlp5.Controller : Textlabel setPosition(float, float) +main.java.controlp5.Controller : Textlabel setPosition(float[]) +main.java.controlp5.Controller : Textlabel setSize(PImage) +main.java.controlp5.Controller : Textlabel setSize(int, int) +main.java.controlp5.Controller : Textlabel setStringValue(String) +main.java.controlp5.Controller : Textlabel setUpdate(boolean) +main.java.controlp5.Controller : Textlabel setValue(float) +main.java.controlp5.Controller : Textlabel setValueLabel(String) +main.java.controlp5.Controller : Textlabel setValueSelf(float) +main.java.controlp5.Controller : Textlabel setView(ControllerView) +main.java.controlp5.Controller : Textlabel setVisible(boolean) +main.java.controlp5.Controller : Textlabel setWidth(int) +main.java.controlp5.Controller : Textlabel show() +main.java.controlp5.Controller : Textlabel unlock() +main.java.controlp5.Controller : Textlabel unplugFrom(Object) +main.java.controlp5.Controller : Textlabel unplugFrom(Object[]) +main.java.controlp5.Controller : Textlabel unregisterTooltip() +main.java.controlp5.Controller : Textlabel update() +main.java.controlp5.Controller : Textlabel updateSize() +main.java.controlp5.Controller : boolean isActive() +main.java.controlp5.Controller : boolean isBroadcast() +main.java.controlp5.Controller : boolean isInside() +main.java.controlp5.Controller : boolean isLabelVisible() +main.java.controlp5.Controller : boolean isListening() +main.java.controlp5.Controller : boolean isLock() +main.java.controlp5.Controller : boolean isMouseOver() +main.java.controlp5.Controller : boolean isMousePressed() +main.java.controlp5.Controller : boolean isMoveable() +main.java.controlp5.Controller : boolean isUpdate() +main.java.controlp5.Controller : boolean isVisible() +main.java.controlp5.Controller : float getArrayValue(int) +main.java.controlp5.Controller : float getDefaultValue() +main.java.controlp5.Controller : float getMax() +main.java.controlp5.Controller : float getMin() +main.java.controlp5.Controller : float getValue() +main.java.controlp5.Controller : float[] getAbsolutePosition() +main.java.controlp5.Controller : float[] getArrayValue() +main.java.controlp5.Controller : float[] getPosition() +main.java.controlp5.Controller : int getDecimalPrecision() +main.java.controlp5.Controller : int getHeight() +main.java.controlp5.Controller : int getId() +main.java.controlp5.Controller : int getWidth() +main.java.controlp5.Controller : int listenerSize() +main.java.controlp5.Controller : void remove() +main.java.controlp5.Controller : void setView(ControllerView, int) +main.java.controlp5.Textlabel : ControllerStyle getStyle() +main.java.controlp5.Textlabel : Label get() +main.java.controlp5.Textlabel : Textlabel append(String, int) +main.java.controlp5.Textlabel : Textlabel setColor(int) +main.java.controlp5.Textlabel : Textlabel setFont(ControlFont) +main.java.controlp5.Textlabel : Textlabel setFont(PFont) +main.java.controlp5.Textlabel : Textlabel setHeight(int) +main.java.controlp5.Textlabel : Textlabel setLetterSpacing(int) +main.java.controlp5.Textlabel : Textlabel setLineHeight(int) +main.java.controlp5.Textlabel : Textlabel setMultiline(boolean) +main.java.controlp5.Textlabel : Textlabel setStringValue(String) +main.java.controlp5.Textlabel : Textlabel setText(String) +main.java.controlp5.Textlabel : Textlabel setValue(String) +main.java.controlp5.Textlabel : Textlabel setValue(float) +main.java.controlp5.Textlabel : Textlabel setWidth(int) +main.java.controlp5.Textlabel : int getLineHeight() +main.java.controlp5.Textlabel : void draw() +main.java.controlp5.Textlabel : void draw(PApplet) +main.java.controlp5.Textlabel : void draw(PGraphics) +main.java.controlp5.Textlabel : void draw(int, int) java.lang.Object : String toString() java.lang.Object : boolean equals(Object) diff --git a/examples/controllers/ControlP5toggle/ControlP5toggle.pde b/examples/controllers/ControlP5toggle/ControlP5toggle.pde index 72f8d01..a14a061 100644 --- a/examples/controllers/ControlP5toggle/ControlP5toggle.pde +++ b/examples/controllers/ControlP5toggle/ControlP5toggle.pde @@ -90,145 +90,145 @@ Format: ClassName : returnType methodName(parameter type) -controlP5.Controller : CColor getColor() -controlP5.Controller : ControlBehavior getBehavior() -controlP5.Controller : ControlWindow getControlWindow() -controlP5.Controller : ControlWindow getWindow() -controlP5.Controller : ControllerProperty getProperty(String) -controlP5.Controller : ControllerProperty getProperty(String, String) -controlP5.Controller : ControllerView getView() -controlP5.Controller : Label getCaptionLabel() -controlP5.Controller : Label getValueLabel() -controlP5.Controller : List getControllerPlugList() -controlP5.Controller : Pointer getPointer() -controlP5.Controller : String getAddress() -controlP5.Controller : String getInfo() -controlP5.Controller : String getName() -controlP5.Controller : String getStringValue() -controlP5.Controller : String toString() -controlP5.Controller : Tab getTab() -controlP5.Controller : Toggle addCallback(CallbackListener) -controlP5.Controller : Toggle addListener(ControlListener) -controlP5.Controller : Toggle addListenerFor(int, CallbackListener) -controlP5.Controller : Toggle align(int, int, int, int) -controlP5.Controller : Toggle bringToFront() -controlP5.Controller : Toggle bringToFront(ControllerInterface) -controlP5.Controller : Toggle hide() -controlP5.Controller : Toggle linebreak() -controlP5.Controller : Toggle listen(boolean) -controlP5.Controller : Toggle lock() -controlP5.Controller : Toggle onChange(CallbackListener) -controlP5.Controller : Toggle onClick(CallbackListener) -controlP5.Controller : Toggle onDoublePress(CallbackListener) -controlP5.Controller : Toggle onDrag(CallbackListener) -controlP5.Controller : Toggle onDraw(ControllerView) -controlP5.Controller : Toggle onEndDrag(CallbackListener) -controlP5.Controller : Toggle onEnter(CallbackListener) -controlP5.Controller : Toggle onLeave(CallbackListener) -controlP5.Controller : Toggle onMove(CallbackListener) -controlP5.Controller : Toggle onPress(CallbackListener) -controlP5.Controller : Toggle onRelease(CallbackListener) -controlP5.Controller : Toggle onReleaseOutside(CallbackListener) -controlP5.Controller : Toggle onStartDrag(CallbackListener) -controlP5.Controller : Toggle onWheel(CallbackListener) -controlP5.Controller : Toggle plugTo(Object) -controlP5.Controller : Toggle plugTo(Object, String) -controlP5.Controller : Toggle plugTo(Object[]) -controlP5.Controller : Toggle plugTo(Object[], String) -controlP5.Controller : Toggle registerProperty(String) -controlP5.Controller : Toggle registerProperty(String, String) -controlP5.Controller : Toggle registerTooltip(String) -controlP5.Controller : Toggle removeBehavior() -controlP5.Controller : Toggle removeCallback() -controlP5.Controller : Toggle removeCallback(CallbackListener) -controlP5.Controller : Toggle removeListener(ControlListener) -controlP5.Controller : Toggle removeListenerFor(int, CallbackListener) -controlP5.Controller : Toggle removeListenersFor(int) -controlP5.Controller : Toggle removeProperty(String) -controlP5.Controller : Toggle removeProperty(String, String) -controlP5.Controller : Toggle setArrayValue(float[]) -controlP5.Controller : Toggle setArrayValue(int, float) -controlP5.Controller : Toggle setBehavior(ControlBehavior) -controlP5.Controller : Toggle setBroadcast(boolean) -controlP5.Controller : Toggle setCaptionLabel(String) -controlP5.Controller : Toggle setColor(CColor) -controlP5.Controller : Toggle setColorActive(int) -controlP5.Controller : Toggle setColorBackground(int) -controlP5.Controller : Toggle setColorCaptionLabel(int) -controlP5.Controller : Toggle setColorForeground(int) -controlP5.Controller : Toggle setColorLabel(int) -controlP5.Controller : Toggle setColorValue(int) -controlP5.Controller : Toggle setColorValueLabel(int) -controlP5.Controller : Toggle setDecimalPrecision(int) -controlP5.Controller : Toggle setDefaultValue(float) -controlP5.Controller : Toggle setHeight(int) -controlP5.Controller : Toggle setId(int) -controlP5.Controller : Toggle setImage(PImage) -controlP5.Controller : Toggle setImage(PImage, int) -controlP5.Controller : Toggle setImages(PImage, PImage, PImage) -controlP5.Controller : Toggle setImages(PImage, PImage, PImage, PImage) -controlP5.Controller : Toggle setLabel(String) -controlP5.Controller : Toggle setLabelVisible(boolean) -controlP5.Controller : Toggle setLock(boolean) -controlP5.Controller : Toggle setMax(float) -controlP5.Controller : Toggle setMin(float) -controlP5.Controller : Toggle setMouseOver(boolean) -controlP5.Controller : Toggle setMoveable(boolean) -controlP5.Controller : Toggle setPosition(float, float) -controlP5.Controller : Toggle setPosition(float[]) -controlP5.Controller : Toggle setSize(PImage) -controlP5.Controller : Toggle setSize(int, int) -controlP5.Controller : Toggle setStringValue(String) -controlP5.Controller : Toggle setUpdate(boolean) -controlP5.Controller : Toggle setValue(float) -controlP5.Controller : Toggle setValueLabel(String) -controlP5.Controller : Toggle setValueSelf(float) -controlP5.Controller : Toggle setView(ControllerView) -controlP5.Controller : Toggle setVisible(boolean) -controlP5.Controller : Toggle setWidth(int) -controlP5.Controller : Toggle show() -controlP5.Controller : Toggle unlock() -controlP5.Controller : Toggle unplugFrom(Object) -controlP5.Controller : Toggle unplugFrom(Object[]) -controlP5.Controller : Toggle unregisterTooltip() -controlP5.Controller : Toggle update() -controlP5.Controller : Toggle updateSize() -controlP5.Controller : boolean isActive() -controlP5.Controller : boolean isBroadcast() -controlP5.Controller : boolean isInside() -controlP5.Controller : boolean isLabelVisible() -controlP5.Controller : boolean isListening() -controlP5.Controller : boolean isLock() -controlP5.Controller : boolean isMouseOver() -controlP5.Controller : boolean isMousePressed() -controlP5.Controller : boolean isMoveable() -controlP5.Controller : boolean isUpdate() -controlP5.Controller : boolean isVisible() -controlP5.Controller : float getArrayValue(int) -controlP5.Controller : float getDefaultValue() -controlP5.Controller : float getMax() -controlP5.Controller : float getMin() -controlP5.Controller : float getValue() -controlP5.Controller : float[] getAbsolutePosition() -controlP5.Controller : float[] getArrayValue() -controlP5.Controller : float[] getPosition() -controlP5.Controller : int getDecimalPrecision() -controlP5.Controller : int getHeight() -controlP5.Controller : int getId() -controlP5.Controller : int getWidth() -controlP5.Controller : int listenerSize() -controlP5.Controller : void remove() -controlP5.Controller : void setView(ControllerView, int) -controlP5.Toggle : Toggle linebreak() -controlP5.Toggle : Toggle setMode(int) -controlP5.Toggle : Toggle setState(boolean) -controlP5.Toggle : Toggle setValue(boolean) -controlP5.Toggle : Toggle setValue(float) -controlP5.Toggle : Toggle toggle() -controlP5.Toggle : Toggle update() -controlP5.Toggle : boolean getBooleanValue() -controlP5.Toggle : boolean getState() -controlP5.Toggle : int getMode() +main.java.controlp5.Controller : CColor getColor() +main.java.controlp5.Controller : ControlBehavior getBehavior() +main.java.controlp5.Controller : ControlWindow getControlWindow() +main.java.controlp5.Controller : ControlWindow getWindow() +main.java.controlp5.Controller : ControllerProperty getProperty(String) +main.java.controlp5.Controller : ControllerProperty getProperty(String, String) +main.java.controlp5.Controller : ControllerView getView() +main.java.controlp5.Controller : Label getCaptionLabel() +main.java.controlp5.Controller : Label getValueLabel() +main.java.controlp5.Controller : List getControllerPlugList() +main.java.controlp5.Controller : Pointer getPointer() +main.java.controlp5.Controller : String getAddress() +main.java.controlp5.Controller : String getInfo() +main.java.controlp5.Controller : String getName() +main.java.controlp5.Controller : String getStringValue() +main.java.controlp5.Controller : String toString() +main.java.controlp5.Controller : Tab getTab() +main.java.controlp5.Controller : Toggle addCallback(CallbackListener) +main.java.controlp5.Controller : Toggle addListener(ControlListener) +main.java.controlp5.Controller : Toggle addListenerFor(int, CallbackListener) +main.java.controlp5.Controller : Toggle align(int, int, int, int) +main.java.controlp5.Controller : Toggle bringToFront() +main.java.controlp5.Controller : Toggle bringToFront(ControllerInterface) +main.java.controlp5.Controller : Toggle hide() +main.java.controlp5.Controller : Toggle linebreak() +main.java.controlp5.Controller : Toggle listen(boolean) +main.java.controlp5.Controller : Toggle lock() +main.java.controlp5.Controller : Toggle onChange(CallbackListener) +main.java.controlp5.Controller : Toggle onClick(CallbackListener) +main.java.controlp5.Controller : Toggle onDoublePress(CallbackListener) +main.java.controlp5.Controller : Toggle onDrag(CallbackListener) +main.java.controlp5.Controller : Toggle onDraw(ControllerView) +main.java.controlp5.Controller : Toggle onEndDrag(CallbackListener) +main.java.controlp5.Controller : Toggle onEnter(CallbackListener) +main.java.controlp5.Controller : Toggle onLeave(CallbackListener) +main.java.controlp5.Controller : Toggle onMove(CallbackListener) +main.java.controlp5.Controller : Toggle onPress(CallbackListener) +main.java.controlp5.Controller : Toggle onRelease(CallbackListener) +main.java.controlp5.Controller : Toggle onReleaseOutside(CallbackListener) +main.java.controlp5.Controller : Toggle onStartDrag(CallbackListener) +main.java.controlp5.Controller : Toggle onWheel(CallbackListener) +main.java.controlp5.Controller : Toggle plugTo(Object) +main.java.controlp5.Controller : Toggle plugTo(Object, String) +main.java.controlp5.Controller : Toggle plugTo(Object[]) +main.java.controlp5.Controller : Toggle plugTo(Object[], String) +main.java.controlp5.Controller : Toggle registerProperty(String) +main.java.controlp5.Controller : Toggle registerProperty(String, String) +main.java.controlp5.Controller : Toggle registerTooltip(String) +main.java.controlp5.Controller : Toggle removeBehavior() +main.java.controlp5.Controller : Toggle removeCallback() +main.java.controlp5.Controller : Toggle removeCallback(CallbackListener) +main.java.controlp5.Controller : Toggle removeListener(ControlListener) +main.java.controlp5.Controller : Toggle removeListenerFor(int, CallbackListener) +main.java.controlp5.Controller : Toggle removeListenersFor(int) +main.java.controlp5.Controller : Toggle removeProperty(String) +main.java.controlp5.Controller : Toggle removeProperty(String, String) +main.java.controlp5.Controller : Toggle setArrayValue(float[]) +main.java.controlp5.Controller : Toggle setArrayValue(int, float) +main.java.controlp5.Controller : Toggle setBehavior(ControlBehavior) +main.java.controlp5.Controller : Toggle setBroadcast(boolean) +main.java.controlp5.Controller : Toggle setCaptionLabel(String) +main.java.controlp5.Controller : Toggle setColor(CColor) +main.java.controlp5.Controller : Toggle setColorActive(int) +main.java.controlp5.Controller : Toggle setColorBackground(int) +main.java.controlp5.Controller : Toggle setColorCaptionLabel(int) +main.java.controlp5.Controller : Toggle setColorForeground(int) +main.java.controlp5.Controller : Toggle setColorLabel(int) +main.java.controlp5.Controller : Toggle setColorValue(int) +main.java.controlp5.Controller : Toggle setColorValueLabel(int) +main.java.controlp5.Controller : Toggle setDecimalPrecision(int) +main.java.controlp5.Controller : Toggle setDefaultValue(float) +main.java.controlp5.Controller : Toggle setHeight(int) +main.java.controlp5.Controller : Toggle setId(int) +main.java.controlp5.Controller : Toggle setImage(PImage) +main.java.controlp5.Controller : Toggle setImage(PImage, int) +main.java.controlp5.Controller : Toggle setImages(PImage, PImage, PImage) +main.java.controlp5.Controller : Toggle setImages(PImage, PImage, PImage, PImage) +main.java.controlp5.Controller : Toggle setLabel(String) +main.java.controlp5.Controller : Toggle setLabelVisible(boolean) +main.java.controlp5.Controller : Toggle setLock(boolean) +main.java.controlp5.Controller : Toggle setMax(float) +main.java.controlp5.Controller : Toggle setMin(float) +main.java.controlp5.Controller : Toggle setMouseOver(boolean) +main.java.controlp5.Controller : Toggle setMoveable(boolean) +main.java.controlp5.Controller : Toggle setPosition(float, float) +main.java.controlp5.Controller : Toggle setPosition(float[]) +main.java.controlp5.Controller : Toggle setSize(PImage) +main.java.controlp5.Controller : Toggle setSize(int, int) +main.java.controlp5.Controller : Toggle setStringValue(String) +main.java.controlp5.Controller : Toggle setUpdate(boolean) +main.java.controlp5.Controller : Toggle setValue(float) +main.java.controlp5.Controller : Toggle setValueLabel(String) +main.java.controlp5.Controller : Toggle setValueSelf(float) +main.java.controlp5.Controller : Toggle setView(ControllerView) +main.java.controlp5.Controller : Toggle setVisible(boolean) +main.java.controlp5.Controller : Toggle setWidth(int) +main.java.controlp5.Controller : Toggle show() +main.java.controlp5.Controller : Toggle unlock() +main.java.controlp5.Controller : Toggle unplugFrom(Object) +main.java.controlp5.Controller : Toggle unplugFrom(Object[]) +main.java.controlp5.Controller : Toggle unregisterTooltip() +main.java.controlp5.Controller : Toggle update() +main.java.controlp5.Controller : Toggle updateSize() +main.java.controlp5.Controller : boolean isActive() +main.java.controlp5.Controller : boolean isBroadcast() +main.java.controlp5.Controller : boolean isInside() +main.java.controlp5.Controller : boolean isLabelVisible() +main.java.controlp5.Controller : boolean isListening() +main.java.controlp5.Controller : boolean isLock() +main.java.controlp5.Controller : boolean isMouseOver() +main.java.controlp5.Controller : boolean isMousePressed() +main.java.controlp5.Controller : boolean isMoveable() +main.java.controlp5.Controller : boolean isUpdate() +main.java.controlp5.Controller : boolean isVisible() +main.java.controlp5.Controller : float getArrayValue(int) +main.java.controlp5.Controller : float getDefaultValue() +main.java.controlp5.Controller : float getMax() +main.java.controlp5.Controller : float getMin() +main.java.controlp5.Controller : float getValue() +main.java.controlp5.Controller : float[] getAbsolutePosition() +main.java.controlp5.Controller : float[] getArrayValue() +main.java.controlp5.Controller : float[] getPosition() +main.java.controlp5.Controller : int getDecimalPrecision() +main.java.controlp5.Controller : int getHeight() +main.java.controlp5.Controller : int getId() +main.java.controlp5.Controller : int getWidth() +main.java.controlp5.Controller : int listenerSize() +main.java.controlp5.Controller : void remove() +main.java.controlp5.Controller : void setView(ControllerView, int) +main.java.controlp5.Toggle : Toggle linebreak() +main.java.controlp5.Toggle : Toggle setMode(int) +main.java.controlp5.Toggle : Toggle setState(boolean) +main.java.controlp5.Toggle : Toggle setValue(boolean) +main.java.controlp5.Toggle : Toggle setValue(float) +main.java.controlp5.Toggle : Toggle toggle() +main.java.controlp5.Toggle : Toggle update() +main.java.controlp5.Toggle : boolean getBooleanValue() +main.java.controlp5.Toggle : boolean getState() +main.java.controlp5.Toggle : int getMode() java.lang.Object : String toString() java.lang.Object : boolean equals(Object) diff --git a/examples/controllers/ControlP5tooltip/ControlP5tooltip.pde b/examples/controllers/ControlP5tooltip/ControlP5tooltip.pde index 435b5a4..19a3193 100644 --- a/examples/controllers/ControlP5tooltip/ControlP5tooltip.pde +++ b/examples/controllers/ControlP5tooltip/ControlP5tooltip.pde @@ -86,26 +86,26 @@ Format: ClassName : returnType methodName(parameter type) -controlP5.Tooltip : Label getLabel() -controlP5.Tooltip : Tooltip disable() -controlP5.Tooltip : Tooltip enable() -controlP5.Tooltip : Tooltip register(Controller, String) -controlP5.Tooltip : Tooltip register(String, String) -controlP5.Tooltip : Tooltip setAlpha(int) -controlP5.Tooltip : Tooltip setBorder(int) -controlP5.Tooltip : Tooltip setColorBackground(int) -controlP5.Tooltip : Tooltip setColorLabel(int) -controlP5.Tooltip : Tooltip setDelay(long) -controlP5.Tooltip : Tooltip setHeight(int) -controlP5.Tooltip : Tooltip setLabel(Label) -controlP5.Tooltip : Tooltip setPositionOffset(float, float) -controlP5.Tooltip : Tooltip setView(ControllerView) -controlP5.Tooltip : Tooltip setWidth(int) -controlP5.Tooltip : Tooltip unregister(Controller) -controlP5.Tooltip : Tooltip unregister(String) -controlP5.Tooltip : boolean isEnabled() -controlP5.Tooltip : int getBorder() -controlP5.Tooltip : int getWidth() +main.java.controlp5.Tooltip : Label getLabel() +main.java.controlp5.Tooltip : Tooltip disable() +main.java.controlp5.Tooltip : Tooltip enable() +main.java.controlp5.Tooltip : Tooltip register(Controller, String) +main.java.controlp5.Tooltip : Tooltip register(String, String) +main.java.controlp5.Tooltip : Tooltip setAlpha(int) +main.java.controlp5.Tooltip : Tooltip setBorder(int) +main.java.controlp5.Tooltip : Tooltip setColorBackground(int) +main.java.controlp5.Tooltip : Tooltip setColorLabel(int) +main.java.controlp5.Tooltip : Tooltip setDelay(long) +main.java.controlp5.Tooltip : Tooltip setHeight(int) +main.java.controlp5.Tooltip : Tooltip setLabel(Label) +main.java.controlp5.Tooltip : Tooltip setPositionOffset(float, float) +main.java.controlp5.Tooltip : Tooltip setView(ControllerView) +main.java.controlp5.Tooltip : Tooltip setWidth(int) +main.java.controlp5.Tooltip : Tooltip unregister(Controller) +main.java.controlp5.Tooltip : Tooltip unregister(String) +main.java.controlp5.Tooltip : boolean isEnabled() +main.java.controlp5.Tooltip : int getBorder() +main.java.controlp5.Tooltip : int getWidth() java.lang.Object : String toString() java.lang.Object : boolean equals(Object) diff --git a/examples/examples.iml b/examples/examples.iml index 1eac1ca..d885c57 100644 --- a/examples/examples.iml +++ b/examples/examples.iml @@ -7,5 +7,6 @@ +
\ No newline at end of file diff --git a/examples/experimental/ControlP5MenuList/ControlP5MenuList.pde b/examples/experimental/ControlP5MenuList/ControlP5MenuList.pde index 651c1e2..023542e 100644 --- a/examples/experimental/ControlP5MenuList/ControlP5MenuList.pde +++ b/examples/experimental/ControlP5MenuList/ControlP5MenuList.pde @@ -11,7 +11,7 @@ */ import controlP5.*; -import static controlP5.ControlP5.*; +import static main.java.controlp5.ControlP5.*; import java.util.*; import java.util.Map.Entry; diff --git a/examples/extra/ControlP5chartsCombined/ControlP5chartsCombined.pde b/examples/extra/ControlP5chartsCombined/ControlP5chartsCombined.pde index d8a0e79..0c42315 100644 --- a/examples/extra/ControlP5chartsCombined/ControlP5chartsCombined.pde +++ b/examples/extra/ControlP5chartsCombined/ControlP5chartsCombined.pde @@ -70,178 +70,178 @@ Format: ClassName : returnType methodName(parameter type) -controlP5.Chart : Chart addData(ChartData) -controlP5.Chart : Chart addData(ChartDataSet, float) -controlP5.Chart : Chart addData(String, ChartData) -controlP5.Chart : Chart addData(String, float) -controlP5.Chart : Chart addData(float) -controlP5.Chart : Chart addDataSet(String) -controlP5.Chart : Chart addFirst(String, float) -controlP5.Chart : Chart addFirst(float) -controlP5.Chart : Chart addLast(String, float) -controlP5.Chart : Chart addLast(float) -controlP5.Chart : Chart push(String, float) -controlP5.Chart : Chart push(float) -controlP5.Chart : Chart removeData(ChartData) -controlP5.Chart : Chart removeData(String, ChartData) -controlP5.Chart : Chart removeData(String, int) -controlP5.Chart : Chart removeData(int) -controlP5.Chart : Chart removeDataSet(String) -controlP5.Chart : Chart removeFirst() -controlP5.Chart : Chart removeFirst(String) -controlP5.Chart : Chart removeLast() -controlP5.Chart : Chart removeLast(String) -controlP5.Chart : Chart setData(String, int, ChartData) -controlP5.Chart : Chart setData(int, ChartData) -controlP5.Chart : Chart setDataSet(ChartDataSet) -controlP5.Chart : Chart setDataSet(String, ChartDataSet) -controlP5.Chart : Chart setRange(float, float) -controlP5.Chart : Chart setResolution(int) -controlP5.Chart : Chart setStrokeWeight(float) -controlP5.Chart : Chart setValue(float) -controlP5.Chart : Chart setView(int) -controlP5.Chart : Chart unshift(String, float) -controlP5.Chart : Chart unshift(float) -controlP5.Chart : ChartData getData(String, int) -controlP5.Chart : ChartDataSet getDataSet(String) -controlP5.Chart : LinkedHashMap getDataSet() -controlP5.Chart : String getInfo() -controlP5.Chart : String toString() -controlP5.Chart : float getStrokeWeight() -controlP5.Chart : float[] getValuesFrom(String) -controlP5.Chart : int getResolution() -controlP5.Chart : int size() -controlP5.Chart : void onEnter() -controlP5.Chart : void onLeave() -controlP5.Controller : CColor getColor() -controlP5.Controller : Chart addCallback(CallbackListener) -controlP5.Controller : Chart addListener(ControlListener) -controlP5.Controller : Chart addListenerFor(int, CallbackListener) -controlP5.Controller : Chart align(int, int, int, int) -controlP5.Controller : Chart bringToFront() -controlP5.Controller : Chart bringToFront(ControllerInterface) -controlP5.Controller : Chart hide() -controlP5.Controller : Chart linebreak() -controlP5.Controller : Chart listen(boolean) -controlP5.Controller : Chart lock() -controlP5.Controller : Chart onChange(CallbackListener) -controlP5.Controller : Chart onClick(CallbackListener) -controlP5.Controller : Chart onDoublePress(CallbackListener) -controlP5.Controller : Chart onDrag(CallbackListener) -controlP5.Controller : Chart onDraw(ControllerView) -controlP5.Controller : Chart onEndDrag(CallbackListener) -controlP5.Controller : Chart onEnter(CallbackListener) -controlP5.Controller : Chart onLeave(CallbackListener) -controlP5.Controller : Chart onMove(CallbackListener) -controlP5.Controller : Chart onPress(CallbackListener) -controlP5.Controller : Chart onRelease(CallbackListener) -controlP5.Controller : Chart onReleaseOutside(CallbackListener) -controlP5.Controller : Chart onStartDrag(CallbackListener) -controlP5.Controller : Chart onWheel(CallbackListener) -controlP5.Controller : Chart plugTo(Object) -controlP5.Controller : Chart plugTo(Object, String) -controlP5.Controller : Chart plugTo(Object[]) -controlP5.Controller : Chart plugTo(Object[], String) -controlP5.Controller : Chart registerProperty(String) -controlP5.Controller : Chart registerProperty(String, String) -controlP5.Controller : Chart registerTooltip(String) -controlP5.Controller : Chart removeBehavior() -controlP5.Controller : Chart removeCallback() -controlP5.Controller : Chart removeCallback(CallbackListener) -controlP5.Controller : Chart removeListener(ControlListener) -controlP5.Controller : Chart removeListenerFor(int, CallbackListener) -controlP5.Controller : Chart removeListenersFor(int) -controlP5.Controller : Chart removeProperty(String) -controlP5.Controller : Chart removeProperty(String, String) -controlP5.Controller : Chart setArrayValue(float[]) -controlP5.Controller : Chart setArrayValue(int, float) -controlP5.Controller : Chart setBehavior(ControlBehavior) -controlP5.Controller : Chart setBroadcast(boolean) -controlP5.Controller : Chart setCaptionLabel(String) -controlP5.Controller : Chart setColor(CColor) -controlP5.Controller : Chart setColorActive(int) -controlP5.Controller : Chart setColorBackground(int) -controlP5.Controller : Chart setColorCaptionLabel(int) -controlP5.Controller : Chart setColorForeground(int) -controlP5.Controller : Chart setColorLabel(int) -controlP5.Controller : Chart setColorValue(int) -controlP5.Controller : Chart setColorValueLabel(int) -controlP5.Controller : Chart setDecimalPrecision(int) -controlP5.Controller : Chart setDefaultValue(float) -controlP5.Controller : Chart setHeight(int) -controlP5.Controller : Chart setId(int) -controlP5.Controller : Chart setImage(PImage) -controlP5.Controller : Chart setImage(PImage, int) -controlP5.Controller : Chart setImages(PImage, PImage, PImage) -controlP5.Controller : Chart setImages(PImage, PImage, PImage, PImage) -controlP5.Controller : Chart setLabel(String) -controlP5.Controller : Chart setLabelVisible(boolean) -controlP5.Controller : Chart setLock(boolean) -controlP5.Controller : Chart setMax(float) -controlP5.Controller : Chart setMin(float) -controlP5.Controller : Chart setMouseOver(boolean) -controlP5.Controller : Chart setMoveable(boolean) -controlP5.Controller : Chart setPosition(float, float) -controlP5.Controller : Chart setPosition(float[]) -controlP5.Controller : Chart setSize(PImage) -controlP5.Controller : Chart setSize(int, int) -controlP5.Controller : Chart setStringValue(String) -controlP5.Controller : Chart setUpdate(boolean) -controlP5.Controller : Chart setValue(float) -controlP5.Controller : Chart setValueLabel(String) -controlP5.Controller : Chart setValueSelf(float) -controlP5.Controller : Chart setView(ControllerView) -controlP5.Controller : Chart setVisible(boolean) -controlP5.Controller : Chart setWidth(int) -controlP5.Controller : Chart show() -controlP5.Controller : Chart unlock() -controlP5.Controller : Chart unplugFrom(Object) -controlP5.Controller : Chart unplugFrom(Object[]) -controlP5.Controller : Chart unregisterTooltip() -controlP5.Controller : Chart update() -controlP5.Controller : Chart updateSize() -controlP5.Controller : ControlBehavior getBehavior() -controlP5.Controller : ControlWindow getControlWindow() -controlP5.Controller : ControlWindow getWindow() -controlP5.Controller : ControllerProperty getProperty(String) -controlP5.Controller : ControllerProperty getProperty(String, String) -controlP5.Controller : ControllerView getView() -controlP5.Controller : Label getCaptionLabel() -controlP5.Controller : Label getValueLabel() -controlP5.Controller : List getControllerPlugList() -controlP5.Controller : Pointer getPointer() -controlP5.Controller : String getAddress() -controlP5.Controller : String getInfo() -controlP5.Controller : String getName() -controlP5.Controller : String getStringValue() -controlP5.Controller : String toString() -controlP5.Controller : Tab getTab() -controlP5.Controller : boolean isActive() -controlP5.Controller : boolean isBroadcast() -controlP5.Controller : boolean isInside() -controlP5.Controller : boolean isLabelVisible() -controlP5.Controller : boolean isListening() -controlP5.Controller : boolean isLock() -controlP5.Controller : boolean isMouseOver() -controlP5.Controller : boolean isMousePressed() -controlP5.Controller : boolean isMoveable() -controlP5.Controller : boolean isUpdate() -controlP5.Controller : boolean isVisible() -controlP5.Controller : float getArrayValue(int) -controlP5.Controller : float getDefaultValue() -controlP5.Controller : float getMax() -controlP5.Controller : float getMin() -controlP5.Controller : float getValue() -controlP5.Controller : float[] getAbsolutePosition() -controlP5.Controller : float[] getArrayValue() -controlP5.Controller : float[] getPosition() -controlP5.Controller : int getDecimalPrecision() -controlP5.Controller : int getHeight() -controlP5.Controller : int getId() -controlP5.Controller : int getWidth() -controlP5.Controller : int listenerSize() -controlP5.Controller : void remove() -controlP5.Controller : void setView(ControllerView, int) +main.java.controlp5.Chart : Chart addData(ChartData) +main.java.controlp5.Chart : Chart addData(ChartDataSet, float) +main.java.controlp5.Chart : Chart addData(String, ChartData) +main.java.controlp5.Chart : Chart addData(String, float) +main.java.controlp5.Chart : Chart addData(float) +main.java.controlp5.Chart : Chart addDataSet(String) +main.java.controlp5.Chart : Chart addFirst(String, float) +main.java.controlp5.Chart : Chart addFirst(float) +main.java.controlp5.Chart : Chart addLast(String, float) +main.java.controlp5.Chart : Chart addLast(float) +main.java.controlp5.Chart : Chart push(String, float) +main.java.controlp5.Chart : Chart push(float) +main.java.controlp5.Chart : Chart removeData(ChartData) +main.java.controlp5.Chart : Chart removeData(String, ChartData) +main.java.controlp5.Chart : Chart removeData(String, int) +main.java.controlp5.Chart : Chart removeData(int) +main.java.controlp5.Chart : Chart removeDataSet(String) +main.java.controlp5.Chart : Chart removeFirst() +main.java.controlp5.Chart : Chart removeFirst(String) +main.java.controlp5.Chart : Chart removeLast() +main.java.controlp5.Chart : Chart removeLast(String) +main.java.controlp5.Chart : Chart setData(String, int, ChartData) +main.java.controlp5.Chart : Chart setData(int, ChartData) +main.java.controlp5.Chart : Chart setDataSet(ChartDataSet) +main.java.controlp5.Chart : Chart setDataSet(String, ChartDataSet) +main.java.controlp5.Chart : Chart setRange(float, float) +main.java.controlp5.Chart : Chart setResolution(int) +main.java.controlp5.Chart : Chart setStrokeWeight(float) +main.java.controlp5.Chart : Chart setValue(float) +main.java.controlp5.Chart : Chart setView(int) +main.java.controlp5.Chart : Chart unshift(String, float) +main.java.controlp5.Chart : Chart unshift(float) +main.java.controlp5.Chart : ChartData getData(String, int) +main.java.controlp5.Chart : ChartDataSet getDataSet(String) +main.java.controlp5.Chart : LinkedHashMap getDataSet() +main.java.controlp5.Chart : String getInfo() +main.java.controlp5.Chart : String toString() +main.java.controlp5.Chart : float getStrokeWeight() +main.java.controlp5.Chart : float[] getValuesFrom(String) +main.java.controlp5.Chart : int getResolution() +main.java.controlp5.Chart : int size() +main.java.controlp5.Chart : void onEnter() +main.java.controlp5.Chart : void onLeave() +main.java.controlp5.Controller : CColor getColor() +main.java.controlp5.Controller : Chart addCallback(CallbackListener) +main.java.controlp5.Controller : Chart addListener(ControlListener) +main.java.controlp5.Controller : Chart addListenerFor(int, CallbackListener) +main.java.controlp5.Controller : Chart align(int, int, int, int) +main.java.controlp5.Controller : Chart bringToFront() +main.java.controlp5.Controller : Chart bringToFront(ControllerInterface) +main.java.controlp5.Controller : Chart hide() +main.java.controlp5.Controller : Chart linebreak() +main.java.controlp5.Controller : Chart listen(boolean) +main.java.controlp5.Controller : Chart lock() +main.java.controlp5.Controller : Chart onChange(CallbackListener) +main.java.controlp5.Controller : Chart onClick(CallbackListener) +main.java.controlp5.Controller : Chart onDoublePress(CallbackListener) +main.java.controlp5.Controller : Chart onDrag(CallbackListener) +main.java.controlp5.Controller : Chart onDraw(ControllerView) +main.java.controlp5.Controller : Chart onEndDrag(CallbackListener) +main.java.controlp5.Controller : Chart onEnter(CallbackListener) +main.java.controlp5.Controller : Chart onLeave(CallbackListener) +main.java.controlp5.Controller : Chart onMove(CallbackListener) +main.java.controlp5.Controller : Chart onPress(CallbackListener) +main.java.controlp5.Controller : Chart onRelease(CallbackListener) +main.java.controlp5.Controller : Chart onReleaseOutside(CallbackListener) +main.java.controlp5.Controller : Chart onStartDrag(CallbackListener) +main.java.controlp5.Controller : Chart onWheel(CallbackListener) +main.java.controlp5.Controller : Chart plugTo(Object) +main.java.controlp5.Controller : Chart plugTo(Object, String) +main.java.controlp5.Controller : Chart plugTo(Object[]) +main.java.controlp5.Controller : Chart plugTo(Object[], String) +main.java.controlp5.Controller : Chart registerProperty(String) +main.java.controlp5.Controller : Chart registerProperty(String, String) +main.java.controlp5.Controller : Chart registerTooltip(String) +main.java.controlp5.Controller : Chart removeBehavior() +main.java.controlp5.Controller : Chart removeCallback() +main.java.controlp5.Controller : Chart removeCallback(CallbackListener) +main.java.controlp5.Controller : Chart removeListener(ControlListener) +main.java.controlp5.Controller : Chart removeListenerFor(int, CallbackListener) +main.java.controlp5.Controller : Chart removeListenersFor(int) +main.java.controlp5.Controller : Chart removeProperty(String) +main.java.controlp5.Controller : Chart removeProperty(String, String) +main.java.controlp5.Controller : Chart setArrayValue(float[]) +main.java.controlp5.Controller : Chart setArrayValue(int, float) +main.java.controlp5.Controller : Chart setBehavior(ControlBehavior) +main.java.controlp5.Controller : Chart setBroadcast(boolean) +main.java.controlp5.Controller : Chart setCaptionLabel(String) +main.java.controlp5.Controller : Chart setColor(CColor) +main.java.controlp5.Controller : Chart setColorActive(int) +main.java.controlp5.Controller : Chart setColorBackground(int) +main.java.controlp5.Controller : Chart setColorCaptionLabel(int) +main.java.controlp5.Controller : Chart setColorForeground(int) +main.java.controlp5.Controller : Chart setColorLabel(int) +main.java.controlp5.Controller : Chart setColorValue(int) +main.java.controlp5.Controller : Chart setColorValueLabel(int) +main.java.controlp5.Controller : Chart setDecimalPrecision(int) +main.java.controlp5.Controller : Chart setDefaultValue(float) +main.java.controlp5.Controller : Chart setHeight(int) +main.java.controlp5.Controller : Chart setId(int) +main.java.controlp5.Controller : Chart setImage(PImage) +main.java.controlp5.Controller : Chart setImage(PImage, int) +main.java.controlp5.Controller : Chart setImages(PImage, PImage, PImage) +main.java.controlp5.Controller : Chart setImages(PImage, PImage, PImage, PImage) +main.java.controlp5.Controller : Chart setLabel(String) +main.java.controlp5.Controller : Chart setLabelVisible(boolean) +main.java.controlp5.Controller : Chart setLock(boolean) +main.java.controlp5.Controller : Chart setMax(float) +main.java.controlp5.Controller : Chart setMin(float) +main.java.controlp5.Controller : Chart setMouseOver(boolean) +main.java.controlp5.Controller : Chart setMoveable(boolean) +main.java.controlp5.Controller : Chart setPosition(float, float) +main.java.controlp5.Controller : Chart setPosition(float[]) +main.java.controlp5.Controller : Chart setSize(PImage) +main.java.controlp5.Controller : Chart setSize(int, int) +main.java.controlp5.Controller : Chart setStringValue(String) +main.java.controlp5.Controller : Chart setUpdate(boolean) +main.java.controlp5.Controller : Chart setValue(float) +main.java.controlp5.Controller : Chart setValueLabel(String) +main.java.controlp5.Controller : Chart setValueSelf(float) +main.java.controlp5.Controller : Chart setView(ControllerView) +main.java.controlp5.Controller : Chart setVisible(boolean) +main.java.controlp5.Controller : Chart setWidth(int) +main.java.controlp5.Controller : Chart show() +main.java.controlp5.Controller : Chart unlock() +main.java.controlp5.Controller : Chart unplugFrom(Object) +main.java.controlp5.Controller : Chart unplugFrom(Object[]) +main.java.controlp5.Controller : Chart unregisterTooltip() +main.java.controlp5.Controller : Chart update() +main.java.controlp5.Controller : Chart updateSize() +main.java.controlp5.Controller : ControlBehavior getBehavior() +main.java.controlp5.Controller : ControlWindow getControlWindow() +main.java.controlp5.Controller : ControlWindow getWindow() +main.java.controlp5.Controller : ControllerProperty getProperty(String) +main.java.controlp5.Controller : ControllerProperty getProperty(String, String) +main.java.controlp5.Controller : ControllerView getView() +main.java.controlp5.Controller : Label getCaptionLabel() +main.java.controlp5.Controller : Label getValueLabel() +main.java.controlp5.Controller : List getControllerPlugList() +main.java.controlp5.Controller : Pointer getPointer() +main.java.controlp5.Controller : String getAddress() +main.java.controlp5.Controller : String getInfo() +main.java.controlp5.Controller : String getName() +main.java.controlp5.Controller : String getStringValue() +main.java.controlp5.Controller : String toString() +main.java.controlp5.Controller : Tab getTab() +main.java.controlp5.Controller : boolean isActive() +main.java.controlp5.Controller : boolean isBroadcast() +main.java.controlp5.Controller : boolean isInside() +main.java.controlp5.Controller : boolean isLabelVisible() +main.java.controlp5.Controller : boolean isListening() +main.java.controlp5.Controller : boolean isLock() +main.java.controlp5.Controller : boolean isMouseOver() +main.java.controlp5.Controller : boolean isMousePressed() +main.java.controlp5.Controller : boolean isMoveable() +main.java.controlp5.Controller : boolean isUpdate() +main.java.controlp5.Controller : boolean isVisible() +main.java.controlp5.Controller : float getArrayValue(int) +main.java.controlp5.Controller : float getDefaultValue() +main.java.controlp5.Controller : float getMax() +main.java.controlp5.Controller : float getMin() +main.java.controlp5.Controller : float getValue() +main.java.controlp5.Controller : float[] getAbsolutePosition() +main.java.controlp5.Controller : float[] getArrayValue() +main.java.controlp5.Controller : float[] getPosition() +main.java.controlp5.Controller : int getDecimalPrecision() +main.java.controlp5.Controller : int getHeight() +main.java.controlp5.Controller : int getId() +main.java.controlp5.Controller : int getWidth() +main.java.controlp5.Controller : int listenerSize() +main.java.controlp5.Controller : void remove() +main.java.controlp5.Controller : void setView(ControllerView, int) java.lang.Object : String toString() java.lang.Object : boolean equals(Object) diff --git a/examples/extra/ControlP5frameRate/ControlP5frameRate.pde b/examples/extra/ControlP5frameRate/ControlP5frameRate.pde index 85aed00..1a640bd 100644 --- a/examples/extra/ControlP5frameRate/ControlP5frameRate.pde +++ b/examples/extra/ControlP5frameRate/ControlP5frameRate.pde @@ -38,157 +38,157 @@ Format: ClassName : returnType methodName(parameter type) -controlP5.Controller : CColor getColor() -controlP5.Controller : ControlBehavior getBehavior() -controlP5.Controller : ControlWindow getControlWindow() -controlP5.Controller : ControlWindow getWindow() -controlP5.Controller : ControllerProperty getProperty(String) -controlP5.Controller : ControllerProperty getProperty(String, String) -controlP5.Controller : ControllerView getView() -controlP5.Controller : FrameRate addCallback(CallbackListener) -controlP5.Controller : FrameRate addListener(ControlListener) -controlP5.Controller : FrameRate addListenerFor(int, CallbackListener) -controlP5.Controller : FrameRate align(int, int, int, int) -controlP5.Controller : FrameRate bringToFront() -controlP5.Controller : FrameRate bringToFront(ControllerInterface) -controlP5.Controller : FrameRate hide() -controlP5.Controller : FrameRate linebreak() -controlP5.Controller : FrameRate listen(boolean) -controlP5.Controller : FrameRate lock() -controlP5.Controller : FrameRate onChange(CallbackListener) -controlP5.Controller : FrameRate onClick(CallbackListener) -controlP5.Controller : FrameRate onDoublePress(CallbackListener) -controlP5.Controller : FrameRate onDrag(CallbackListener) -controlP5.Controller : FrameRate onDraw(ControllerView) -controlP5.Controller : FrameRate onEndDrag(CallbackListener) -controlP5.Controller : FrameRate onEnter(CallbackListener) -controlP5.Controller : FrameRate onLeave(CallbackListener) -controlP5.Controller : FrameRate onMove(CallbackListener) -controlP5.Controller : FrameRate onPress(CallbackListener) -controlP5.Controller : FrameRate onRelease(CallbackListener) -controlP5.Controller : FrameRate onReleaseOutside(CallbackListener) -controlP5.Controller : FrameRate onStartDrag(CallbackListener) -controlP5.Controller : FrameRate onWheel(CallbackListener) -controlP5.Controller : FrameRate plugTo(Object) -controlP5.Controller : FrameRate plugTo(Object, String) -controlP5.Controller : FrameRate plugTo(Object[]) -controlP5.Controller : FrameRate plugTo(Object[], String) -controlP5.Controller : FrameRate registerProperty(String) -controlP5.Controller : FrameRate registerProperty(String, String) -controlP5.Controller : FrameRate registerTooltip(String) -controlP5.Controller : FrameRate removeBehavior() -controlP5.Controller : FrameRate removeCallback() -controlP5.Controller : FrameRate removeCallback(CallbackListener) -controlP5.Controller : FrameRate removeListener(ControlListener) -controlP5.Controller : FrameRate removeListenerFor(int, CallbackListener) -controlP5.Controller : FrameRate removeListenersFor(int) -controlP5.Controller : FrameRate removeProperty(String) -controlP5.Controller : FrameRate removeProperty(String, String) -controlP5.Controller : FrameRate setArrayValue(float[]) -controlP5.Controller : FrameRate setArrayValue(int, float) -controlP5.Controller : FrameRate setBehavior(ControlBehavior) -controlP5.Controller : FrameRate setBroadcast(boolean) -controlP5.Controller : FrameRate setCaptionLabel(String) -controlP5.Controller : FrameRate setColor(CColor) -controlP5.Controller : FrameRate setColorActive(int) -controlP5.Controller : FrameRate setColorBackground(int) -controlP5.Controller : FrameRate setColorCaptionLabel(int) -controlP5.Controller : FrameRate setColorForeground(int) -controlP5.Controller : FrameRate setColorLabel(int) -controlP5.Controller : FrameRate setColorValue(int) -controlP5.Controller : FrameRate setColorValueLabel(int) -controlP5.Controller : FrameRate setDecimalPrecision(int) -controlP5.Controller : FrameRate setDefaultValue(float) -controlP5.Controller : FrameRate setHeight(int) -controlP5.Controller : FrameRate setId(int) -controlP5.Controller : FrameRate setImage(PImage) -controlP5.Controller : FrameRate setImage(PImage, int) -controlP5.Controller : FrameRate setImages(PImage, PImage, PImage) -controlP5.Controller : FrameRate setImages(PImage, PImage, PImage, PImage) -controlP5.Controller : FrameRate setLabel(String) -controlP5.Controller : FrameRate setLabelVisible(boolean) -controlP5.Controller : FrameRate setLock(boolean) -controlP5.Controller : FrameRate setMax(float) -controlP5.Controller : FrameRate setMin(float) -controlP5.Controller : FrameRate setMouseOver(boolean) -controlP5.Controller : FrameRate setMoveable(boolean) -controlP5.Controller : FrameRate setPosition(float, float) -controlP5.Controller : FrameRate setPosition(float[]) -controlP5.Controller : FrameRate setSize(PImage) -controlP5.Controller : FrameRate setSize(int, int) -controlP5.Controller : FrameRate setStringValue(String) -controlP5.Controller : FrameRate setUpdate(boolean) -controlP5.Controller : FrameRate setValue(float) -controlP5.Controller : FrameRate setValueLabel(String) -controlP5.Controller : FrameRate setValueSelf(float) -controlP5.Controller : FrameRate setView(ControllerView) -controlP5.Controller : FrameRate setVisible(boolean) -controlP5.Controller : FrameRate setWidth(int) -controlP5.Controller : FrameRate show() -controlP5.Controller : FrameRate unlock() -controlP5.Controller : FrameRate unplugFrom(Object) -controlP5.Controller : FrameRate unplugFrom(Object[]) -controlP5.Controller : FrameRate unregisterTooltip() -controlP5.Controller : FrameRate update() -controlP5.Controller : FrameRate updateSize() -controlP5.Controller : Label getCaptionLabel() -controlP5.Controller : Label getValueLabel() -controlP5.Controller : List getControllerPlugList() -controlP5.Controller : Pointer getPointer() -controlP5.Controller : String getAddress() -controlP5.Controller : String getInfo() -controlP5.Controller : String getName() -controlP5.Controller : String getStringValue() -controlP5.Controller : String toString() -controlP5.Controller : Tab getTab() -controlP5.Controller : boolean isActive() -controlP5.Controller : boolean isBroadcast() -controlP5.Controller : boolean isInside() -controlP5.Controller : boolean isLabelVisible() -controlP5.Controller : boolean isListening() -controlP5.Controller : boolean isLock() -controlP5.Controller : boolean isMouseOver() -controlP5.Controller : boolean isMousePressed() -controlP5.Controller : boolean isMoveable() -controlP5.Controller : boolean isUpdate() -controlP5.Controller : boolean isVisible() -controlP5.Controller : float getArrayValue(int) -controlP5.Controller : float getDefaultValue() -controlP5.Controller : float getMax() -controlP5.Controller : float getMin() -controlP5.Controller : float getValue() -controlP5.Controller : float[] getAbsolutePosition() -controlP5.Controller : float[] getArrayValue() -controlP5.Controller : float[] getPosition() -controlP5.Controller : int getDecimalPrecision() -controlP5.Controller : int getHeight() -controlP5.Controller : int getId() -controlP5.Controller : int getWidth() -controlP5.Controller : int listenerSize() -controlP5.Controller : void remove() -controlP5.Controller : void setView(ControllerView, int) -controlP5.FrameRate : FrameRate setInterval(int) -controlP5.FrameRate : void draw(PGraphics) -controlP5.Textlabel : ControllerStyle getStyle() -controlP5.Textlabel : Label get() -controlP5.Textlabel : Textlabel append(String, int) -controlP5.Textlabel : Textlabel setColor(int) -controlP5.Textlabel : Textlabel setFont(ControlFont) -controlP5.Textlabel : Textlabel setFont(PFont) -controlP5.Textlabel : Textlabel setHeight(int) -controlP5.Textlabel : Textlabel setLetterSpacing(int) -controlP5.Textlabel : Textlabel setLineHeight(int) -controlP5.Textlabel : Textlabel setMultiline(boolean) -controlP5.Textlabel : Textlabel setStringValue(String) -controlP5.Textlabel : Textlabel setText(String) -controlP5.Textlabel : Textlabel setValue(String) -controlP5.Textlabel : Textlabel setValue(float) -controlP5.Textlabel : Textlabel setWidth(int) -controlP5.Textlabel : int getLineHeight() -controlP5.Textlabel : void draw() -controlP5.Textlabel : void draw(PApplet) -controlP5.Textlabel : void draw(PGraphics) -controlP5.Textlabel : void draw(int, int) +main.java.controlp5.Controller : CColor getColor() +main.java.controlp5.Controller : ControlBehavior getBehavior() +main.java.controlp5.Controller : ControlWindow getControlWindow() +main.java.controlp5.Controller : ControlWindow getWindow() +main.java.controlp5.Controller : ControllerProperty getProperty(String) +main.java.controlp5.Controller : ControllerProperty getProperty(String, String) +main.java.controlp5.Controller : ControllerView getView() +main.java.controlp5.Controller : FrameRate addCallback(CallbackListener) +main.java.controlp5.Controller : FrameRate addListener(ControlListener) +main.java.controlp5.Controller : FrameRate addListenerFor(int, CallbackListener) +main.java.controlp5.Controller : FrameRate align(int, int, int, int) +main.java.controlp5.Controller : FrameRate bringToFront() +main.java.controlp5.Controller : FrameRate bringToFront(ControllerInterface) +main.java.controlp5.Controller : FrameRate hide() +main.java.controlp5.Controller : FrameRate linebreak() +main.java.controlp5.Controller : FrameRate listen(boolean) +main.java.controlp5.Controller : FrameRate lock() +main.java.controlp5.Controller : FrameRate onChange(CallbackListener) +main.java.controlp5.Controller : FrameRate onClick(CallbackListener) +main.java.controlp5.Controller : FrameRate onDoublePress(CallbackListener) +main.java.controlp5.Controller : FrameRate onDrag(CallbackListener) +main.java.controlp5.Controller : FrameRate onDraw(ControllerView) +main.java.controlp5.Controller : FrameRate onEndDrag(CallbackListener) +main.java.controlp5.Controller : FrameRate onEnter(CallbackListener) +main.java.controlp5.Controller : FrameRate onLeave(CallbackListener) +main.java.controlp5.Controller : FrameRate onMove(CallbackListener) +main.java.controlp5.Controller : FrameRate onPress(CallbackListener) +main.java.controlp5.Controller : FrameRate onRelease(CallbackListener) +main.java.controlp5.Controller : FrameRate onReleaseOutside(CallbackListener) +main.java.controlp5.Controller : FrameRate onStartDrag(CallbackListener) +main.java.controlp5.Controller : FrameRate onWheel(CallbackListener) +main.java.controlp5.Controller : FrameRate plugTo(Object) +main.java.controlp5.Controller : FrameRate plugTo(Object, String) +main.java.controlp5.Controller : FrameRate plugTo(Object[]) +main.java.controlp5.Controller : FrameRate plugTo(Object[], String) +main.java.controlp5.Controller : FrameRate registerProperty(String) +main.java.controlp5.Controller : FrameRate registerProperty(String, String) +main.java.controlp5.Controller : FrameRate registerTooltip(String) +main.java.controlp5.Controller : FrameRate removeBehavior() +main.java.controlp5.Controller : FrameRate removeCallback() +main.java.controlp5.Controller : FrameRate removeCallback(CallbackListener) +main.java.controlp5.Controller : FrameRate removeListener(ControlListener) +main.java.controlp5.Controller : FrameRate removeListenerFor(int, CallbackListener) +main.java.controlp5.Controller : FrameRate removeListenersFor(int) +main.java.controlp5.Controller : FrameRate removeProperty(String) +main.java.controlp5.Controller : FrameRate removeProperty(String, String) +main.java.controlp5.Controller : FrameRate setArrayValue(float[]) +main.java.controlp5.Controller : FrameRate setArrayValue(int, float) +main.java.controlp5.Controller : FrameRate setBehavior(ControlBehavior) +main.java.controlp5.Controller : FrameRate setBroadcast(boolean) +main.java.controlp5.Controller : FrameRate setCaptionLabel(String) +main.java.controlp5.Controller : FrameRate setColor(CColor) +main.java.controlp5.Controller : FrameRate setColorActive(int) +main.java.controlp5.Controller : FrameRate setColorBackground(int) +main.java.controlp5.Controller : FrameRate setColorCaptionLabel(int) +main.java.controlp5.Controller : FrameRate setColorForeground(int) +main.java.controlp5.Controller : FrameRate setColorLabel(int) +main.java.controlp5.Controller : FrameRate setColorValue(int) +main.java.controlp5.Controller : FrameRate setColorValueLabel(int) +main.java.controlp5.Controller : FrameRate setDecimalPrecision(int) +main.java.controlp5.Controller : FrameRate setDefaultValue(float) +main.java.controlp5.Controller : FrameRate setHeight(int) +main.java.controlp5.Controller : FrameRate setId(int) +main.java.controlp5.Controller : FrameRate setImage(PImage) +main.java.controlp5.Controller : FrameRate setImage(PImage, int) +main.java.controlp5.Controller : FrameRate setImages(PImage, PImage, PImage) +main.java.controlp5.Controller : FrameRate setImages(PImage, PImage, PImage, PImage) +main.java.controlp5.Controller : FrameRate setLabel(String) +main.java.controlp5.Controller : FrameRate setLabelVisible(boolean) +main.java.controlp5.Controller : FrameRate setLock(boolean) +main.java.controlp5.Controller : FrameRate setMax(float) +main.java.controlp5.Controller : FrameRate setMin(float) +main.java.controlp5.Controller : FrameRate setMouseOver(boolean) +main.java.controlp5.Controller : FrameRate setMoveable(boolean) +main.java.controlp5.Controller : FrameRate setPosition(float, float) +main.java.controlp5.Controller : FrameRate setPosition(float[]) +main.java.controlp5.Controller : FrameRate setSize(PImage) +main.java.controlp5.Controller : FrameRate setSize(int, int) +main.java.controlp5.Controller : FrameRate setStringValue(String) +main.java.controlp5.Controller : FrameRate setUpdate(boolean) +main.java.controlp5.Controller : FrameRate setValue(float) +main.java.controlp5.Controller : FrameRate setValueLabel(String) +main.java.controlp5.Controller : FrameRate setValueSelf(float) +main.java.controlp5.Controller : FrameRate setView(ControllerView) +main.java.controlp5.Controller : FrameRate setVisible(boolean) +main.java.controlp5.Controller : FrameRate setWidth(int) +main.java.controlp5.Controller : FrameRate show() +main.java.controlp5.Controller : FrameRate unlock() +main.java.controlp5.Controller : FrameRate unplugFrom(Object) +main.java.controlp5.Controller : FrameRate unplugFrom(Object[]) +main.java.controlp5.Controller : FrameRate unregisterTooltip() +main.java.controlp5.Controller : FrameRate update() +main.java.controlp5.Controller : FrameRate updateSize() +main.java.controlp5.Controller : Label getCaptionLabel() +main.java.controlp5.Controller : Label getValueLabel() +main.java.controlp5.Controller : List getControllerPlugList() +main.java.controlp5.Controller : Pointer getPointer() +main.java.controlp5.Controller : String getAddress() +main.java.controlp5.Controller : String getInfo() +main.java.controlp5.Controller : String getName() +main.java.controlp5.Controller : String getStringValue() +main.java.controlp5.Controller : String toString() +main.java.controlp5.Controller : Tab getTab() +main.java.controlp5.Controller : boolean isActive() +main.java.controlp5.Controller : boolean isBroadcast() +main.java.controlp5.Controller : boolean isInside() +main.java.controlp5.Controller : boolean isLabelVisible() +main.java.controlp5.Controller : boolean isListening() +main.java.controlp5.Controller : boolean isLock() +main.java.controlp5.Controller : boolean isMouseOver() +main.java.controlp5.Controller : boolean isMousePressed() +main.java.controlp5.Controller : boolean isMoveable() +main.java.controlp5.Controller : boolean isUpdate() +main.java.controlp5.Controller : boolean isVisible() +main.java.controlp5.Controller : float getArrayValue(int) +main.java.controlp5.Controller : float getDefaultValue() +main.java.controlp5.Controller : float getMax() +main.java.controlp5.Controller : float getMin() +main.java.controlp5.Controller : float getValue() +main.java.controlp5.Controller : float[] getAbsolutePosition() +main.java.controlp5.Controller : float[] getArrayValue() +main.java.controlp5.Controller : float[] getPosition() +main.java.controlp5.Controller : int getDecimalPrecision() +main.java.controlp5.Controller : int getHeight() +main.java.controlp5.Controller : int getId() +main.java.controlp5.Controller : int getWidth() +main.java.controlp5.Controller : int listenerSize() +main.java.controlp5.Controller : void remove() +main.java.controlp5.Controller : void setView(ControllerView, int) +main.java.controlp5.FrameRate : FrameRate setInterval(int) +main.java.controlp5.FrameRate : void draw(PGraphics) +main.java.controlp5.Textlabel : ControllerStyle getStyle() +main.java.controlp5.Textlabel : Label get() +main.java.controlp5.Textlabel : Textlabel append(String, int) +main.java.controlp5.Textlabel : Textlabel setColor(int) +main.java.controlp5.Textlabel : Textlabel setFont(ControlFont) +main.java.controlp5.Textlabel : Textlabel setFont(PFont) +main.java.controlp5.Textlabel : Textlabel setHeight(int) +main.java.controlp5.Textlabel : Textlabel setLetterSpacing(int) +main.java.controlp5.Textlabel : Textlabel setLineHeight(int) +main.java.controlp5.Textlabel : Textlabel setMultiline(boolean) +main.java.controlp5.Textlabel : Textlabel setStringValue(String) +main.java.controlp5.Textlabel : Textlabel setText(String) +main.java.controlp5.Textlabel : Textlabel setValue(String) +main.java.controlp5.Textlabel : Textlabel setValue(float) +main.java.controlp5.Textlabel : Textlabel setWidth(int) +main.java.controlp5.Textlabel : int getLineHeight() +main.java.controlp5.Textlabel : void draw() +main.java.controlp5.Textlabel : void draw(PApplet) +main.java.controlp5.Textlabel : void draw(PGraphics) +main.java.controlp5.Textlabel : void draw(int, int) java.lang.Object : String toString() java.lang.Object : boolean equals(Object) diff --git a/examples/extra/ControlP5propertiesSets/ControlP5propertiesSets.pde b/examples/extra/ControlP5propertiesSets/ControlP5propertiesSets.pde index 2c3d1a6..01f019b 100644 --- a/examples/extra/ControlP5propertiesSets/ControlP5propertiesSets.pde +++ b/examples/extra/ControlP5propertiesSets/ControlP5propertiesSets.pde @@ -108,26 +108,26 @@ void b4(float v) { Format: ClassName : returnType methodName(parameter type) -controlP5.ControllerProperties : ControllerProperties remove(ControllerInterface) -controlP5.ControllerProperties : ControllerProperties remove(ControllerInterface, String) -controlP5.ControllerProperties : ControllerProperties remove(ControllerInterface, String, String) -controlP5.ControllerProperties : ControllerProperty getProperty(ControllerInterface, String) -controlP5.ControllerProperties : ControllerProperty getProperty(ControllerInterface, String, String) -controlP5.ControllerProperties : ControllerProperty register(ControllerInterface, String) -controlP5.ControllerProperties : ControllerProperty register(ControllerInterface, String, String) -controlP5.ControllerProperties : HashSet addSet(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 : void delete(ControllerProperty) -controlP5.ControllerProperties : void move(ControllerInterface, String, String) -controlP5.ControllerProperties : void move(ControllerProperty, String, String) -controlP5.ControllerProperties : void only(ControllerProperty, String) -controlP5.ControllerProperties : void print() -controlP5.ControllerProperties : void setFormat(Format) +main.java.controlp5.ControllerProperties : ControllerProperties remove(ControllerInterface) +main.java.controlp5.ControllerProperties : ControllerProperties remove(ControllerInterface, String) +main.java.controlp5.ControllerProperties : ControllerProperties remove(ControllerInterface, String, String) +main.java.controlp5.ControllerProperties : ControllerProperty getProperty(ControllerInterface, String) +main.java.controlp5.ControllerProperties : ControllerProperty getProperty(ControllerInterface, String, String) +main.java.controlp5.ControllerProperties : ControllerProperty register(ControllerInterface, String) +main.java.controlp5.ControllerProperties : ControllerProperty register(ControllerInterface, String, String) +main.java.controlp5.ControllerProperties : HashSet addSet(String) +main.java.controlp5.ControllerProperties : HashSet getPropertySet(ControllerInterface) +main.java.controlp5.ControllerProperties : List get(ControllerInterface) +main.java.controlp5.ControllerProperties : Map get() +main.java.controlp5.ControllerProperties : String toString() +main.java.controlp5.ControllerProperties : boolean load() +main.java.controlp5.ControllerProperties : boolean load(String) +main.java.controlp5.ControllerProperties : void delete(ControllerProperty) +main.java.controlp5.ControllerProperties : void move(ControllerInterface, String, String) +main.java.controlp5.ControllerProperties : void move(ControllerProperty, String, String) +main.java.controlp5.ControllerProperties : void only(ControllerProperty, String) +main.java.controlp5.ControllerProperties : void print() +main.java.controlp5.ControllerProperties : void setFormat(Format) java.lang.Object : String toString() java.lang.Object : boolean equals(Object) */ diff --git a/examples/extra/ControlP5style/ControlP5style.pde b/examples/extra/ControlP5style/ControlP5style.pde index 01147c0..9a5baf0 100644 --- a/examples/extra/ControlP5style/ControlP5style.pde +++ b/examples/extra/ControlP5style/ControlP5style.pde @@ -86,22 +86,22 @@ ClassName : returnType methodName(parameter type) -controlP5.ControllerStyle : ControllerStyle margin(int) -controlP5.ControllerStyle : ControllerStyle margin(int, int, int, int) -controlP5.ControllerStyle : ControllerStyle moveMargin(int, int, int, int) -controlP5.ControllerStyle : ControllerStyle movePadding(int, int, int, int) -controlP5.ControllerStyle : ControllerStyle padding(int) -controlP5.ControllerStyle : ControllerStyle padding(int, int, int, int) -controlP5.ControllerStyle : ControllerStyle setMargin(int, int, int, int) -controlP5.ControllerStyle : ControllerStyle setMarginBottom(int) -controlP5.ControllerStyle : ControllerStyle setMarginLeft(int) -controlP5.ControllerStyle : ControllerStyle setMarginRight(int) -controlP5.ControllerStyle : ControllerStyle setMarginTop(int) -controlP5.ControllerStyle : ControllerStyle setPadding(int, int, int, int) -controlP5.ControllerStyle : ControllerStyle setPaddingBottom(int) -controlP5.ControllerStyle : ControllerStyle setPaddingLeft(int) -controlP5.ControllerStyle : ControllerStyle setPaddingRight(int) -controlP5.ControllerStyle : ControllerStyle setPaddingTop(int) +main.java.controlp5.ControllerStyle : ControllerStyle margin(int) +main.java.controlp5.ControllerStyle : ControllerStyle margin(int, int, int, int) +main.java.controlp5.ControllerStyle : ControllerStyle moveMargin(int, int, int, int) +main.java.controlp5.ControllerStyle : ControllerStyle movePadding(int, int, int, int) +main.java.controlp5.ControllerStyle : ControllerStyle padding(int) +main.java.controlp5.ControllerStyle : ControllerStyle padding(int, int, int, int) +main.java.controlp5.ControllerStyle : ControllerStyle setMargin(int, int, int, int) +main.java.controlp5.ControllerStyle : ControllerStyle setMarginBottom(int) +main.java.controlp5.ControllerStyle : ControllerStyle setMarginLeft(int) +main.java.controlp5.ControllerStyle : ControllerStyle setMarginRight(int) +main.java.controlp5.ControllerStyle : ControllerStyle setMarginTop(int) +main.java.controlp5.ControllerStyle : ControllerStyle setPadding(int, int, int, int) +main.java.controlp5.ControllerStyle : ControllerStyle setPaddingBottom(int) +main.java.controlp5.ControllerStyle : ControllerStyle setPaddingLeft(int) +main.java.controlp5.ControllerStyle : ControllerStyle setPaddingRight(int) +main.java.controlp5.ControllerStyle : ControllerStyle setPaddingTop(int) java.lang.Object : String toString() java.lang.Object : boolean equals(Object) diff --git a/examples/use/ControlP5behavior/ControlP5behavior.pde b/examples/use/ControlP5behavior/ControlP5behavior.pde index 6f76b82..4ae3779 100644 --- a/examples/use/ControlP5behavior/ControlP5behavior.pde +++ b/examples/use/ControlP5behavior/ControlP5behavior.pde @@ -113,10 +113,10 @@ Format: ClassName : returnType methodName(parameter type) -controlP5.ControlBehavior : Controller controller() -controlP5.ControlBehavior : boolean isActive() -controlP5.ControlBehavior : void setActive(boolean) -controlP5.ControlBehavior : void setValue(float) +main.java.controlp5.ControlBehavior : Controller controller() +main.java.controlp5.ControlBehavior : boolean isActive() +main.java.controlp5.ControlBehavior : void setActive(boolean) +main.java.controlp5.ControlBehavior : void setValue(float) java.lang.Object : String toString() java.lang.Object : boolean equals(Object) diff --git a/examples/use/ControlP5callback/ControlP5callback.pde b/examples/use/ControlP5callback/ControlP5callback.pde index 216797c..7c73a82 100644 --- a/examples/use/ControlP5callback/ControlP5callback.pde +++ b/examples/use/ControlP5callback/ControlP5callback.pde @@ -51,7 +51,7 @@ void setup() { // 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 + // see static variables starting with ACTION_ inside class main.java.controlp5.ControlP5Constants cb = new CallbackListener() { public void controlEvent(CallbackEvent theEvent) { @@ -166,8 +166,8 @@ a list of all methods available for the CallbackEvent Controller ClassName : returnType methodName(parameter type) - controlP5.CallbackEvent : Controller getController() - controlP5.CallbackEvent : int getAction() + main.java.controlp5.CallbackEvent : Controller getController() + main.java.controlp5.CallbackEvent : int getAction() java.lang.Object : String toString() java.lang.Object : boolean equals(Object) diff --git a/examples/use/ControlP5controlEvent/ControlP5controlEvent.pde b/examples/use/ControlP5controlEvent/ControlP5controlEvent.pde index 5f7a909..08b6d12 100644 --- a/examples/use/ControlP5controlEvent/ControlP5controlEvent.pde +++ b/examples/use/ControlP5controlEvent/ControlP5controlEvent.pde @@ -91,24 +91,24 @@ Format: ClassName : returnType methodName(parameter type) -controlP5.ControlEvent : ControlGroup getGroup() -controlP5.ControlEvent : Controller getController() -controlP5.ControlEvent : String getLabel() -controlP5.ControlEvent : String getName() -controlP5.ControlEvent : String getStringValue() -controlP5.ControlEvent : String toString() -controlP5.ControlEvent : Tab getTab() -controlP5.ControlEvent : boolean isAssignableFrom(Class) -controlP5.ControlEvent : boolean isController() -controlP5.ControlEvent : boolean isFrom(ControllerInterface) -controlP5.ControlEvent : boolean isFrom(String) -controlP5.ControlEvent : boolean isGroup() -controlP5.ControlEvent : boolean isTab() -controlP5.ControlEvent : float getArrayValue(int) -controlP5.ControlEvent : float getValue() -controlP5.ControlEvent : float[] getArrayValue() -controlP5.ControlEvent : int getId() -controlP5.ControlEvent : int getType() +main.java.controlp5.ControlEvent : ControlGroup getGroup() +main.java.controlp5.ControlEvent : Controller getController() +main.java.controlp5.ControlEvent : String getLabel() +main.java.controlp5.ControlEvent : String getName() +main.java.controlp5.ControlEvent : String getStringValue() +main.java.controlp5.ControlEvent : String toString() +main.java.controlp5.ControlEvent : Tab getTab() +main.java.controlp5.ControlEvent : boolean isAssignableFrom(Class) +main.java.controlp5.ControlEvent : boolean isController() +main.java.controlp5.ControlEvent : boolean isFrom(ControllerInterface) +main.java.controlp5.ControlEvent : boolean isFrom(String) +main.java.controlp5.ControlEvent : boolean isGroup() +main.java.controlp5.ControlEvent : boolean isTab() +main.java.controlp5.ControlEvent : float getArrayValue(int) +main.java.controlp5.ControlEvent : float getValue() +main.java.controlp5.ControlEvent : float[] getArrayValue() +main.java.controlp5.ControlEvent : int getId() +main.java.controlp5.ControlEvent : int getType() java.lang.Object : String toString() java.lang.Object : boolean equals(Object) diff --git a/examples/use/ControlP5controlFont/ControlP5controlFont.pde b/examples/use/ControlP5controlFont/ControlP5controlFont.pde index 35df35c..d2ba2cd 100644 --- a/examples/use/ControlP5controlFont/ControlP5controlFont.pde +++ b/examples/use/ControlP5controlFont/ControlP5controlFont.pde @@ -12,7 +12,7 @@ import controlP5.*; ControlP5 cp5; -controlP5.Button b; +main.java.controlp5.Button b; int buttonValue = 1; @@ -108,22 +108,22 @@ Format: ClassName : returnType methodName(parameter type) -controlP5.ControlFont : PFont getFont() -controlP5.ControlFont : int getBaseline() -controlP5.ControlFont : int getBottom() -controlP5.ControlFont : int getCenter() -controlP5.ControlFont : int getHeight() -controlP5.ControlFont : int getOffset(int) -controlP5.ControlFont : int getOverflow() -controlP5.ControlFont : int getSize() -controlP5.ControlFont : int getTextHeight() -controlP5.ControlFont : int getTop() -controlP5.ControlFont : int getWidth() -controlP5.ControlFont : void adjust(PGraphics, Label) -controlP5.ControlFont : void draw(ControlP5, Label) -controlP5.ControlFont : void draw(PGraphics, Label) -controlP5.ControlFont : void init(Label) -controlP5.ControlFont : void setSize(int) +main.java.controlp5.ControlFont : PFont getFont() +main.java.controlp5.ControlFont : int getBaseline() +main.java.controlp5.ControlFont : int getBottom() +main.java.controlp5.ControlFont : int getCenter() +main.java.controlp5.ControlFont : int getHeight() +main.java.controlp5.ControlFont : int getOffset(int) +main.java.controlp5.ControlFont : int getOverflow() +main.java.controlp5.ControlFont : int getSize() +main.java.controlp5.ControlFont : int getTextHeight() +main.java.controlp5.ControlFont : int getTop() +main.java.controlp5.ControlFont : int getWidth() +main.java.controlp5.ControlFont : void adjust(PGraphics, Label) +main.java.controlp5.ControlFont : void draw(ControlP5, Label) +main.java.controlp5.ControlFont : void draw(PGraphics, Label) +main.java.controlp5.ControlFont : void init(Label) +main.java.controlp5.ControlFont : void setSize(int) java.lang.Object : String toString() java.lang.Object : boolean equals(Object) diff --git a/examples/use/ControlP5customView/ControlP5customView.pde b/examples/use/ControlP5customView/ControlP5customView.pde index 4db2e6f..0e685b7 100644 --- a/examples/use/ControlP5customView/ControlP5customView.pde +++ b/examples/use/ControlP5customView/ControlP5customView.pde @@ -95,7 +95,7 @@ You can find further details about class ControllerView in the javadoc. Format: ClassName : returnType methodName(parameter type) -controlP5.ControllerView : void display(PApplet, T) +main.java.controlp5.ControllerView : void display(PApplet, T) */ diff --git a/examples/use/ControlP5mouseover/ControlP5mouseover.pde b/examples/use/ControlP5mouseover/ControlP5mouseover.pde index 89184ca..e4b797c 100644 --- a/examples/use/ControlP5mouseover/ControlP5mouseover.pde +++ b/examples/use/ControlP5mouseover/ControlP5mouseover.pde @@ -89,9 +89,9 @@ You can find further details about class ControlP5 in the javadoc. Format: ClassName : returnType methodName(parameter type) -controlP5.ControlP5 : List getMouseOverList() -controlP5.ControlP5 : boolean isMouseOver() -controlP5.ControlP5 : boolean isMouseOver(ControllerInterface) +main.java.controlp5.ControlP5 : List getMouseOverList() +main.java.controlp5.ControlP5 : boolean isMouseOver() +main.java.controlp5.ControlP5 : boolean isMouseOver(ControllerInterface) */ diff --git a/examples/use/ControlP5snapshot/ControlP5snapshot.pde b/examples/use/ControlP5snapshot/ControlP5snapshot.pde index 5ab7856..81c0ab7 100644 --- a/examples/use/ControlP5snapshot/ControlP5snapshot.pde +++ b/examples/use/ControlP5snapshot/ControlP5snapshot.pde @@ -126,35 +126,35 @@ 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) +main.java.controlp5.ControllerProperties : ArrayList getSnapshotIndices() +main.java.controlp5.ControllerProperties : ControllerProperties addSet(String) +main.java.controlp5.ControllerProperties : ControllerProperties delete(ControllerProperty) +main.java.controlp5.ControllerProperties : ControllerProperties getSnapshot(String) +main.java.controlp5.ControllerProperties : ControllerProperties move(ControllerInterface, String, String) +main.java.controlp5.ControllerProperties : ControllerProperties move(ControllerProperty, String, String) +main.java.controlp5.ControllerProperties : ControllerProperties only(ControllerProperty, String) +main.java.controlp5.ControllerProperties : ControllerProperties print() +main.java.controlp5.ControllerProperties : ControllerProperties register(ControllerInterface, String) +main.java.controlp5.ControllerProperties : ControllerProperties remove(ControllerInterface) +main.java.controlp5.ControllerProperties : ControllerProperties remove(ControllerInterface, String) +main.java.controlp5.ControllerProperties : ControllerProperties remove(ControllerInterface, String, String) +main.java.controlp5.ControllerProperties : ControllerProperties removeSnapshot(String) +main.java.controlp5.ControllerProperties : ControllerProperties saveSnapshot(String) +main.java.controlp5.ControllerProperties : ControllerProperties saveSnapshotAs(String, String) +main.java.controlp5.ControllerProperties : ControllerProperties setSnapshot(String) +main.java.controlp5.ControllerProperties : ControllerProperties updateSnapshot(String) +main.java.controlp5.ControllerProperties : ControllerProperty getProperty(ControllerInterface, String) +main.java.controlp5.ControllerProperties : ControllerProperty getProperty(ControllerInterface, String, String) +main.java.controlp5.ControllerProperties : ControllerProperty register(ControllerInterface, String, String) +main.java.controlp5.ControllerProperties : HashSet getPropertySet(ControllerInterface) +main.java.controlp5.ControllerProperties : List get(ControllerInterface) +main.java.controlp5.ControllerProperties : Map get() +main.java.controlp5.ControllerProperties : String toString() +main.java.controlp5.ControllerProperties : boolean load() +main.java.controlp5.ControllerProperties : boolean load(String) +main.java.controlp5.ControllerProperties : boolean save() +main.java.controlp5.ControllerProperties : boolean saveAs(String) +main.java.controlp5.ControllerProperties : void setFormat(Format) java.lang.Object : String toString() java.lang.Object : boolean equals(Object) diff --git a/gen/controlP5/layout/XML.interp b/gen/controlP5/layout/XML.interp new file mode 100644 index 0000000..93d44ff --- /dev/null +++ b/gen/controlP5/layout/XML.interp @@ -0,0 +1,37 @@ +token literal names: +null +null +null +null +'<' +'' +'/>' +'=' +null +null + +token symbolic names: +null +SELF_CLOSING +EMPTY +SPACE +OPEN +OPEN_SLASH +CLOSE +SLASH_CLOSE +EQUALS +Name +STRING + +rule names: +document +element +startTag +endTag +attribute +content + + +atn: +[4, 1, 10, 51, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 5, 1, 19, 8, 1, 10, 1, 12, 1, 22, 9, 1, 1, 1, 1, 1, 1, 1, 3, 1, 27, 8, 1, 1, 2, 1, 2, 1, 2, 5, 2, 32, 8, 2, 10, 2, 12, 2, 35, 9, 2, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 3, 5, 49, 8, 5, 1, 5, 0, 0, 6, 0, 2, 4, 6, 8, 10, 0, 0, 49, 0, 12, 1, 0, 0, 0, 2, 26, 1, 0, 0, 0, 4, 28, 1, 0, 0, 0, 6, 38, 1, 0, 0, 0, 8, 42, 1, 0, 0, 0, 10, 48, 1, 0, 0, 0, 12, 13, 3, 2, 1, 0, 13, 14, 5, 0, 0, 1, 14, 1, 1, 0, 0, 0, 15, 20, 3, 4, 2, 0, 16, 19, 3, 10, 5, 0, 17, 19, 5, 2, 0, 0, 18, 16, 1, 0, 0, 0, 18, 17, 1, 0, 0, 0, 19, 22, 1, 0, 0, 0, 20, 18, 1, 0, 0, 0, 20, 21, 1, 0, 0, 0, 21, 23, 1, 0, 0, 0, 22, 20, 1, 0, 0, 0, 23, 24, 3, 6, 3, 0, 24, 27, 1, 0, 0, 0, 25, 27, 5, 1, 0, 0, 26, 15, 1, 0, 0, 0, 26, 25, 1, 0, 0, 0, 27, 3, 1, 0, 0, 0, 28, 29, 5, 4, 0, 0, 29, 33, 5, 9, 0, 0, 30, 32, 3, 8, 4, 0, 31, 30, 1, 0, 0, 0, 32, 35, 1, 0, 0, 0, 33, 31, 1, 0, 0, 0, 33, 34, 1, 0, 0, 0, 34, 36, 1, 0, 0, 0, 35, 33, 1, 0, 0, 0, 36, 37, 5, 6, 0, 0, 37, 5, 1, 0, 0, 0, 38, 39, 5, 5, 0, 0, 39, 40, 5, 9, 0, 0, 40, 41, 5, 6, 0, 0, 41, 7, 1, 0, 0, 0, 42, 43, 5, 9, 0, 0, 43, 44, 5, 8, 0, 0, 44, 45, 5, 10, 0, 0, 45, 9, 1, 0, 0, 0, 46, 49, 3, 2, 1, 0, 47, 49, 5, 10, 0, 0, 48, 46, 1, 0, 0, 0, 48, 47, 1, 0, 0, 0, 49, 11, 1, 0, 0, 0, 5, 18, 20, 26, 33, 48] \ No newline at end of file diff --git a/gen/controlP5/layout/XML.tokens b/gen/controlP5/layout/XML.tokens new file mode 100644 index 0000000..1f60c67 --- /dev/null +++ b/gen/controlP5/layout/XML.tokens @@ -0,0 +1,15 @@ +SELF_CLOSING=1 +EMPTY=2 +SPACE=3 +OPEN=4 +OPEN_SLASH=5 +CLOSE=6 +SLASH_CLOSE=7 +EQUALS=8 +Name=9 +STRING=10 +'<'=4 +''=6 +'/>'=7 +'='=8 diff --git a/gen/controlP5/layout/XMLBaseListener.java b/gen/controlP5/layout/XMLBaseListener.java new file mode 100644 index 0000000..019ddfa --- /dev/null +++ b/gen/controlP5/layout/XMLBaseListener.java @@ -0,0 +1,112 @@ +// Generated from /Users/gabrielsalvador/Code/controlp5/src/main/java/controlP5/layout/XML.g4 by ANTLR 4.12.0 +package controlP5.layout; + +import org.antlr.v4.runtime.ParserRuleContext; +import org.antlr.v4.runtime.tree.ErrorNode; +import org.antlr.v4.runtime.tree.TerminalNode; + +/** + * This class provides an empty implementation of {@link XMLListener}, + * which can be extended to create a listener which only needs to handle a subset + * of the available methods. + */ +@SuppressWarnings("CheckReturnValue") +public class XMLBaseListener implements XMLListener { + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterDocument(XMLParser.DocumentContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitDocument(XMLParser.DocumentContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterElement(XMLParser.ElementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitElement(XMLParser.ElementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterStartTag(XMLParser.StartTagContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitStartTag(XMLParser.StartTagContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterEndTag(XMLParser.EndTagContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitEndTag(XMLParser.EndTagContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAttribute(XMLParser.AttributeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAttribute(XMLParser.AttributeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterContent(XMLParser.ContentContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitContent(XMLParser.ContentContext ctx) { } + + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterEveryRule(ParserRuleContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitEveryRule(ParserRuleContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void visitTerminal(TerminalNode node) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void visitErrorNode(ErrorNode node) { } +} \ No newline at end of file diff --git a/gen/controlP5/layout/XMLBaseVisitor.java b/gen/controlP5/layout/XMLBaseVisitor.java new file mode 100644 index 0000000..029c48f --- /dev/null +++ b/gen/controlP5/layout/XMLBaseVisitor.java @@ -0,0 +1,57 @@ +// Generated from /Users/gabrielsalvador/Code/controlp5/src/main/java/controlP5/layout/XML.g4 by ANTLR 4.12.0 +package controlP5.layout; +import org.antlr.v4.runtime.tree.AbstractParseTreeVisitor; + +/** + * This class provides an empty implementation of {@link XMLVisitor}, + * which can be extended to create a visitor which only needs to handle a subset + * of the available methods. + * + * @param The return type of the visit operation. Use {@link Void} for + * operations with no return type. + */ +@SuppressWarnings("CheckReturnValue") +public class XMLBaseVisitor extends AbstractParseTreeVisitor implements XMLVisitor { + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitDocument(XMLParser.DocumentContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitElement(XMLParser.ElementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitStartTag(XMLParser.StartTagContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitEndTag(XMLParser.EndTagContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitAttribute(XMLParser.AttributeContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitContent(XMLParser.ContentContext ctx) { return visitChildren(ctx); } +} \ No newline at end of file diff --git a/gen/controlP5/layout/XMLLexer.interp b/gen/controlP5/layout/XMLLexer.interp new file mode 100644 index 0000000..d3f8e8f --- /dev/null +++ b/gen/controlP5/layout/XMLLexer.interp @@ -0,0 +1,49 @@ +token literal names: +null +null +null +null +'<' +'' +'/>' +'=' +null +null + +token symbolic names: +null +SELF_CLOSING +EMPTY +SPACE +OPEN +OPEN_SLASH +CLOSE +SLASH_CLOSE +EQUALS +Name +STRING + +rule names: +SELF_CLOSING +EMPTY +SPACE +OPEN +OPEN_SLASH +CLOSE +SLASH_CLOSE +EQUALS +Name +STRING +DIGIT +ALPHA + +channel names: +DEFAULT_TOKEN_CHANNEL +HIDDEN + +mode names: +DEFAULT_MODE + +atn: +[4, 0, 10, 80, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 5, 1, 31, 8, 1, 10, 1, 12, 1, 34, 9, 1, 1, 2, 1, 2, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 5, 8, 54, 8, 8, 10, 8, 12, 8, 57, 9, 8, 1, 9, 1, 9, 5, 9, 61, 8, 9, 10, 9, 12, 9, 64, 9, 9, 1, 9, 1, 9, 1, 9, 5, 9, 69, 8, 9, 10, 9, 12, 9, 72, 9, 9, 1, 9, 3, 9, 75, 8, 9, 1, 10, 1, 10, 1, 11, 1, 11, 0, 0, 12, 1, 1, 3, 2, 5, 3, 7, 4, 9, 5, 11, 6, 13, 7, 15, 8, 17, 9, 19, 10, 21, 0, 23, 0, 1, 0, 6, 3, 0, 9, 10, 13, 13, 32, 32, 2, 0, 45, 46, 95, 95, 1, 0, 34, 34, 1, 0, 39, 39, 1, 0, 48, 57, 2, 0, 65, 90, 97, 122, 84, 0, 1, 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 9, 1, 0, 0, 0, 0, 11, 1, 0, 0, 0, 0, 13, 1, 0, 0, 0, 0, 15, 1, 0, 0, 0, 0, 17, 1, 0, 0, 0, 0, 19, 1, 0, 0, 0, 1, 25, 1, 0, 0, 0, 3, 32, 1, 0, 0, 0, 5, 35, 1, 0, 0, 0, 7, 37, 1, 0, 0, 0, 9, 39, 1, 0, 0, 0, 11, 42, 1, 0, 0, 0, 13, 44, 1, 0, 0, 0, 15, 47, 1, 0, 0, 0, 17, 49, 1, 0, 0, 0, 19, 74, 1, 0, 0, 0, 21, 76, 1, 0, 0, 0, 23, 78, 1, 0, 0, 0, 25, 26, 3, 7, 3, 0, 26, 27, 3, 17, 8, 0, 27, 28, 3, 13, 6, 0, 28, 2, 1, 0, 0, 0, 29, 31, 3, 5, 2, 0, 30, 29, 1, 0, 0, 0, 31, 34, 1, 0, 0, 0, 32, 30, 1, 0, 0, 0, 32, 33, 1, 0, 0, 0, 33, 4, 1, 0, 0, 0, 34, 32, 1, 0, 0, 0, 35, 36, 7, 0, 0, 0, 36, 6, 1, 0, 0, 0, 37, 38, 5, 60, 0, 0, 38, 8, 1, 0, 0, 0, 39, 40, 5, 60, 0, 0, 40, 41, 5, 47, 0, 0, 41, 10, 1, 0, 0, 0, 42, 43, 5, 62, 0, 0, 43, 12, 1, 0, 0, 0, 44, 45, 5, 47, 0, 0, 45, 46, 5, 62, 0, 0, 46, 14, 1, 0, 0, 0, 47, 48, 5, 61, 0, 0, 48, 16, 1, 0, 0, 0, 49, 55, 3, 23, 11, 0, 50, 54, 3, 23, 11, 0, 51, 54, 3, 21, 10, 0, 52, 54, 7, 1, 0, 0, 53, 50, 1, 0, 0, 0, 53, 51, 1, 0, 0, 0, 53, 52, 1, 0, 0, 0, 54, 57, 1, 0, 0, 0, 55, 53, 1, 0, 0, 0, 55, 56, 1, 0, 0, 0, 56, 18, 1, 0, 0, 0, 57, 55, 1, 0, 0, 0, 58, 62, 5, 34, 0, 0, 59, 61, 8, 2, 0, 0, 60, 59, 1, 0, 0, 0, 61, 64, 1, 0, 0, 0, 62, 60, 1, 0, 0, 0, 62, 63, 1, 0, 0, 0, 63, 65, 1, 0, 0, 0, 64, 62, 1, 0, 0, 0, 65, 75, 5, 34, 0, 0, 66, 70, 5, 39, 0, 0, 67, 69, 8, 3, 0, 0, 68, 67, 1, 0, 0, 0, 69, 72, 1, 0, 0, 0, 70, 68, 1, 0, 0, 0, 70, 71, 1, 0, 0, 0, 71, 73, 1, 0, 0, 0, 72, 70, 1, 0, 0, 0, 73, 75, 5, 39, 0, 0, 74, 58, 1, 0, 0, 0, 74, 66, 1, 0, 0, 0, 75, 20, 1, 0, 0, 0, 76, 77, 7, 4, 0, 0, 77, 22, 1, 0, 0, 0, 78, 79, 7, 5, 0, 0, 79, 24, 1, 0, 0, 0, 7, 0, 32, 53, 55, 62, 70, 74, 0] \ No newline at end of file diff --git a/gen/controlP5/layout/XMLLexer.java b/gen/controlP5/layout/XMLLexer.java new file mode 100644 index 0000000..978fbc3 --- /dev/null +++ b/gen/controlP5/layout/XMLLexer.java @@ -0,0 +1,166 @@ +// Generated from /Users/gabrielsalvador/Code/controlp5/src/main/java/controlP5/layout/XML.g4 by ANTLR 4.12.0 +package controlP5.layout; +import org.antlr.v4.runtime.Lexer; +import org.antlr.v4.runtime.CharStream; +import org.antlr.v4.runtime.Token; +import org.antlr.v4.runtime.TokenStream; +import org.antlr.v4.runtime.*; +import org.antlr.v4.runtime.atn.*; +import org.antlr.v4.runtime.dfa.DFA; +import org.antlr.v4.runtime.misc.*; + +@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast", "CheckReturnValue"}) +public class XMLLexer extends Lexer { + static { RuntimeMetaData.checkVersion("4.12.0", RuntimeMetaData.VERSION); } + + protected static final DFA[] _decisionToDFA; + protected static final PredictionContextCache _sharedContextCache = + new PredictionContextCache(); + public static final int + SELF_CLOSING=1, EMPTY=2, SPACE=3, OPEN=4, OPEN_SLASH=5, CLOSE=6, SLASH_CLOSE=7, + EQUALS=8, Name=9, STRING=10; + public static String[] channelNames = { + "DEFAULT_TOKEN_CHANNEL", "HIDDEN" + }; + + public static String[] modeNames = { + "DEFAULT_MODE" + }; + + private static String[] makeRuleNames() { + return new String[] { + "SELF_CLOSING", "EMPTY", "SPACE", "OPEN", "OPEN_SLASH", "CLOSE", "SLASH_CLOSE", + "EQUALS", "Name", "STRING", "DIGIT", "ALPHA" + }; + } + public static final String[] ruleNames = makeRuleNames(); + + private static String[] makeLiteralNames() { + return new String[] { + null, null, null, null, "'<'", "''", "'/>'", "'='" + }; + } + private static final String[] _LITERAL_NAMES = makeLiteralNames(); + private static String[] makeSymbolicNames() { + return new String[] { + null, "SELF_CLOSING", "EMPTY", "SPACE", "OPEN", "OPEN_SLASH", "CLOSE", + "SLASH_CLOSE", "EQUALS", "Name", "STRING" + }; + } + private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames(); + public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES); + + /** + * @deprecated Use {@link #VOCABULARY} instead. + */ + @Deprecated + public static final String[] tokenNames; + static { + tokenNames = new String[_SYMBOLIC_NAMES.length]; + for (int i = 0; i < tokenNames.length; i++) { + tokenNames[i] = VOCABULARY.getLiteralName(i); + if (tokenNames[i] == null) { + tokenNames[i] = VOCABULARY.getSymbolicName(i); + } + + if (tokenNames[i] == null) { + tokenNames[i] = ""; + } + } + } + + @Override + @Deprecated + public String[] getTokenNames() { + return tokenNames; + } + + @Override + + public Vocabulary getVocabulary() { + return VOCABULARY; + } + + + public XMLLexer(CharStream input) { + super(input); + _interp = new LexerATNSimulator(this,_ATN,_decisionToDFA,_sharedContextCache); + } + + @Override + public String getGrammarFileName() { return "XML.g4"; } + + @Override + public String[] getRuleNames() { return ruleNames; } + + @Override + public String getSerializedATN() { return _serializedATN; } + + @Override + public String[] getChannelNames() { return channelNames; } + + @Override + public String[] getModeNames() { return modeNames; } + + @Override + public ATN getATN() { return _ATN; } + + public static final String _serializedATN = + "\u0004\u0000\nP\u0006\uffff\uffff\u0002\u0000\u0007\u0000\u0002\u0001"+ + "\u0007\u0001\u0002\u0002\u0007\u0002\u0002\u0003\u0007\u0003\u0002\u0004"+ + "\u0007\u0004\u0002\u0005\u0007\u0005\u0002\u0006\u0007\u0006\u0002\u0007"+ + "\u0007\u0007\u0002\b\u0007\b\u0002\t\u0007\t\u0002\n\u0007\n\u0002\u000b"+ + "\u0007\u000b\u0001\u0000\u0001\u0000\u0001\u0000\u0001\u0000\u0001\u0001"+ + "\u0005\u0001\u001f\b\u0001\n\u0001\f\u0001\"\t\u0001\u0001\u0002\u0001"+ + "\u0002\u0001\u0003\u0001\u0003\u0001\u0004\u0001\u0004\u0001\u0004\u0001"+ + "\u0005\u0001\u0005\u0001\u0006\u0001\u0006\u0001\u0006\u0001\u0007\u0001"+ + "\u0007\u0001\b\u0001\b\u0001\b\u0001\b\u0005\b6\b\b\n\b\f\b9\t\b\u0001"+ + "\t\u0001\t\u0005\t=\b\t\n\t\f\t@\t\t\u0001\t\u0001\t\u0001\t\u0005\tE"+ + "\b\t\n\t\f\tH\t\t\u0001\t\u0003\tK\b\t\u0001\n\u0001\n\u0001\u000b\u0001"+ + "\u000b\u0000\u0000\f\u0001\u0001\u0003\u0002\u0005\u0003\u0007\u0004\t"+ + "\u0005\u000b\u0006\r\u0007\u000f\b\u0011\t\u0013\n\u0015\u0000\u0017\u0000"+ + "\u0001\u0000\u0006\u0003\u0000\t\n\r\r \u0002\u0000-.__\u0001\u0000\""+ + "\"\u0001\u0000\'\'\u0001\u000009\u0002\u0000AZazT\u0000\u0001\u0001\u0000"+ + "\u0000\u0000\u0000\u0003\u0001\u0000\u0000\u0000\u0000\u0005\u0001\u0000"+ + "\u0000\u0000\u0000\u0007\u0001\u0000\u0000\u0000\u0000\t\u0001\u0000\u0000"+ + "\u0000\u0000\u000b\u0001\u0000\u0000\u0000\u0000\r\u0001\u0000\u0000\u0000"+ + "\u0000\u000f\u0001\u0000\u0000\u0000\u0000\u0011\u0001\u0000\u0000\u0000"+ + "\u0000\u0013\u0001\u0000\u0000\u0000\u0001\u0019\u0001\u0000\u0000\u0000"+ + "\u0003 \u0001\u0000\u0000\u0000\u0005#\u0001\u0000\u0000\u0000\u0007%"+ + "\u0001\u0000\u0000\u0000\t\'\u0001\u0000\u0000\u0000\u000b*\u0001\u0000"+ + "\u0000\u0000\r,\u0001\u0000\u0000\u0000\u000f/\u0001\u0000\u0000\u0000"+ + "\u00111\u0001\u0000\u0000\u0000\u0013J\u0001\u0000\u0000\u0000\u0015L"+ + "\u0001\u0000\u0000\u0000\u0017N\u0001\u0000\u0000\u0000\u0019\u001a\u0003"+ + "\u0007\u0003\u0000\u001a\u001b\u0003\u0011\b\u0000\u001b\u001c\u0003\r"+ + "\u0006\u0000\u001c\u0002\u0001\u0000\u0000\u0000\u001d\u001f\u0003\u0005"+ + "\u0002\u0000\u001e\u001d\u0001\u0000\u0000\u0000\u001f\"\u0001\u0000\u0000"+ + "\u0000 \u001e\u0001\u0000\u0000\u0000 !\u0001\u0000\u0000\u0000!\u0004"+ + "\u0001\u0000\u0000\u0000\" \u0001\u0000\u0000\u0000#$\u0007\u0000\u0000"+ + "\u0000$\u0006\u0001\u0000\u0000\u0000%&\u0005<\u0000\u0000&\b\u0001\u0000"+ + "\u0000\u0000\'(\u0005<\u0000\u0000()\u0005/\u0000\u0000)\n\u0001\u0000"+ + "\u0000\u0000*+\u0005>\u0000\u0000+\f\u0001\u0000\u0000\u0000,-\u0005/"+ + "\u0000\u0000-.\u0005>\u0000\u0000.\u000e\u0001\u0000\u0000\u0000/0\u0005"+ + "=\u0000\u00000\u0010\u0001\u0000\u0000\u000017\u0003\u0017\u000b\u0000"+ + "26\u0003\u0017\u000b\u000036\u0003\u0015\n\u000046\u0007\u0001\u0000\u0000"+ + "52\u0001\u0000\u0000\u000053\u0001\u0000\u0000\u000054\u0001\u0000\u0000"+ + "\u000069\u0001\u0000\u0000\u000075\u0001\u0000\u0000\u000078\u0001\u0000"+ + "\u0000\u00008\u0012\u0001\u0000\u0000\u000097\u0001\u0000\u0000\u0000"+ + ":>\u0005\"\u0000\u0000;=\b\u0002\u0000\u0000<;\u0001\u0000\u0000\u0000"+ + "=@\u0001\u0000\u0000\u0000><\u0001\u0000\u0000\u0000>?\u0001\u0000\u0000"+ + "\u0000?A\u0001\u0000\u0000\u0000@>\u0001\u0000\u0000\u0000AK\u0005\"\u0000"+ + "\u0000BF\u0005\'\u0000\u0000CE\b\u0003\u0000\u0000DC\u0001\u0000\u0000"+ + "\u0000EH\u0001\u0000\u0000\u0000FD\u0001\u0000\u0000\u0000FG\u0001\u0000"+ + "\u0000\u0000GI\u0001\u0000\u0000\u0000HF\u0001\u0000\u0000\u0000IK\u0005"+ + "\'\u0000\u0000J:\u0001\u0000\u0000\u0000JB\u0001\u0000\u0000\u0000K\u0014"+ + "\u0001\u0000\u0000\u0000LM\u0007\u0004\u0000\u0000M\u0016\u0001\u0000"+ + "\u0000\u0000NO\u0007\u0005\u0000\u0000O\u0018\u0001\u0000\u0000\u0000"+ + "\u0007\u0000 57>FJ\u0000"; + public static final ATN _ATN = + new ATNDeserializer().deserialize(_serializedATN.toCharArray()); + static { + _decisionToDFA = new DFA[_ATN.getNumberOfDecisions()]; + for (int i = 0; i < _ATN.getNumberOfDecisions(); i++) { + _decisionToDFA[i] = new DFA(_ATN.getDecisionState(i), i); + } + } +} \ No newline at end of file diff --git a/gen/controlP5/layout/XMLLexer.tokens b/gen/controlP5/layout/XMLLexer.tokens new file mode 100644 index 0000000..1f60c67 --- /dev/null +++ b/gen/controlP5/layout/XMLLexer.tokens @@ -0,0 +1,15 @@ +SELF_CLOSING=1 +EMPTY=2 +SPACE=3 +OPEN=4 +OPEN_SLASH=5 +CLOSE=6 +SLASH_CLOSE=7 +EQUALS=8 +Name=9 +STRING=10 +'<'=4 +''=6 +'/>'=7 +'='=8 diff --git a/gen/controlP5/layout/XMLListener.java b/gen/controlP5/layout/XMLListener.java new file mode 100644 index 0000000..f7af6d9 --- /dev/null +++ b/gen/controlP5/layout/XMLListener.java @@ -0,0 +1,70 @@ +// Generated from /Users/gabrielsalvador/Code/controlp5/src/main/java/controlP5/layout/XML.g4 by ANTLR 4.12.0 +package controlP5.layout; +import org.antlr.v4.runtime.tree.ParseTreeListener; + +/** + * This interface defines a complete listener for a parse tree produced by + * {@link XMLParser}. + */ +public interface XMLListener extends ParseTreeListener { + /** + * Enter a parse tree produced by {@link XMLParser#document}. + * @param ctx the parse tree + */ + void enterDocument(XMLParser.DocumentContext ctx); + /** + * Exit a parse tree produced by {@link XMLParser#document}. + * @param ctx the parse tree + */ + void exitDocument(XMLParser.DocumentContext ctx); + /** + * Enter a parse tree produced by {@link XMLParser#element}. + * @param ctx the parse tree + */ + void enterElement(XMLParser.ElementContext ctx); + /** + * Exit a parse tree produced by {@link XMLParser#element}. + * @param ctx the parse tree + */ + void exitElement(XMLParser.ElementContext ctx); + /** + * Enter a parse tree produced by {@link XMLParser#startTag}. + * @param ctx the parse tree + */ + void enterStartTag(XMLParser.StartTagContext ctx); + /** + * Exit a parse tree produced by {@link XMLParser#startTag}. + * @param ctx the parse tree + */ + void exitStartTag(XMLParser.StartTagContext ctx); + /** + * Enter a parse tree produced by {@link XMLParser#endTag}. + * @param ctx the parse tree + */ + void enterEndTag(XMLParser.EndTagContext ctx); + /** + * Exit a parse tree produced by {@link XMLParser#endTag}. + * @param ctx the parse tree + */ + void exitEndTag(XMLParser.EndTagContext ctx); + /** + * Enter a parse tree produced by {@link XMLParser#attribute}. + * @param ctx the parse tree + */ + void enterAttribute(XMLParser.AttributeContext ctx); + /** + * Exit a parse tree produced by {@link XMLParser#attribute}. + * @param ctx the parse tree + */ + void exitAttribute(XMLParser.AttributeContext ctx); + /** + * Enter a parse tree produced by {@link XMLParser#content}. + * @param ctx the parse tree + */ + void enterContent(XMLParser.ContentContext ctx); + /** + * Exit a parse tree produced by {@link XMLParser#content}. + * @param ctx the parse tree + */ + void exitContent(XMLParser.ContentContext ctx); +} \ No newline at end of file diff --git a/gen/controlP5/layout/XMLParser.java b/gen/controlP5/layout/XMLParser.java new file mode 100644 index 0000000..a35d7b7 --- /dev/null +++ b/gen/controlP5/layout/XMLParser.java @@ -0,0 +1,520 @@ +// Generated from /Users/gabrielsalvador/Code/controlp5/src/main/java/controlP5/layout/XML.g4 by ANTLR 4.12.0 +package controlP5.layout; +import org.antlr.v4.runtime.atn.*; +import org.antlr.v4.runtime.dfa.DFA; +import org.antlr.v4.runtime.*; +import org.antlr.v4.runtime.misc.*; +import org.antlr.v4.runtime.tree.*; +import java.util.List; +import java.util.Iterator; +import java.util.ArrayList; + +@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast", "CheckReturnValue"}) +public class XMLParser extends Parser { + static { RuntimeMetaData.checkVersion("4.12.0", RuntimeMetaData.VERSION); } + + protected static final DFA[] _decisionToDFA; + protected static final PredictionContextCache _sharedContextCache = + new PredictionContextCache(); + public static final int + SELF_CLOSING=1, EMPTY=2, SPACE=3, OPEN=4, OPEN_SLASH=5, CLOSE=6, SLASH_CLOSE=7, + EQUALS=8, Name=9, STRING=10; + public static final int + RULE_document = 0, RULE_element = 1, RULE_startTag = 2, RULE_endTag = 3, + RULE_attribute = 4, RULE_content = 5; + private static String[] makeRuleNames() { + return new String[] { + "document", "element", "startTag", "endTag", "attribute", "content" + }; + } + public static final String[] ruleNames = makeRuleNames(); + + private static String[] makeLiteralNames() { + return new String[] { + null, null, null, null, "'<'", "''", "'/>'", "'='" + }; + } + private static final String[] _LITERAL_NAMES = makeLiteralNames(); + private static String[] makeSymbolicNames() { + return new String[] { + null, "SELF_CLOSING", "EMPTY", "SPACE", "OPEN", "OPEN_SLASH", "CLOSE", + "SLASH_CLOSE", "EQUALS", "Name", "STRING" + }; + } + private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames(); + public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES); + + /** + * @deprecated Use {@link #VOCABULARY} instead. + */ + @Deprecated + public static final String[] tokenNames; + static { + tokenNames = new String[_SYMBOLIC_NAMES.length]; + for (int i = 0; i < tokenNames.length; i++) { + tokenNames[i] = VOCABULARY.getLiteralName(i); + if (tokenNames[i] == null) { + tokenNames[i] = VOCABULARY.getSymbolicName(i); + } + + if (tokenNames[i] == null) { + tokenNames[i] = ""; + } + } + } + + @Override + @Deprecated + public String[] getTokenNames() { + return tokenNames; + } + + @Override + + public Vocabulary getVocabulary() { + return VOCABULARY; + } + + @Override + public String getGrammarFileName() { return "XML.g4"; } + + @Override + public String[] getRuleNames() { return ruleNames; } + + @Override + public String getSerializedATN() { return _serializedATN; } + + @Override + public ATN getATN() { return _ATN; } + + public XMLParser(TokenStream input) { + super(input); + _interp = new ParserATNSimulator(this,_ATN,_decisionToDFA,_sharedContextCache); + } + + @SuppressWarnings("CheckReturnValue") + public static class DocumentContext extends ParserRuleContext { + public ElementContext element() { + return getRuleContext(ElementContext.class,0); + } + public TerminalNode EOF() { return getToken(XMLParser.EOF, 0); } + public DocumentContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_document; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof XMLListener ) ((XMLListener)listener).enterDocument(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof XMLListener ) ((XMLListener)listener).exitDocument(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof XMLVisitor ) return ((XMLVisitor)visitor).visitDocument(this); + else return visitor.visitChildren(this); + } + } + + public final DocumentContext document() throws RecognitionException { + DocumentContext _localctx = new DocumentContext(_ctx, getState()); + enterRule(_localctx, 0, RULE_document); + try { + enterOuterAlt(_localctx, 1); + { + setState(12); + element(); + setState(13); + match(EOF); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class ElementContext extends ParserRuleContext { + public StartTagContext startTag() { + return getRuleContext(StartTagContext.class,0); + } + public EndTagContext endTag() { + return getRuleContext(EndTagContext.class,0); + } + public List content() { + return getRuleContexts(ContentContext.class); + } + public ContentContext content(int i) { + return getRuleContext(ContentContext.class,i); + } + public List EMPTY() { return getTokens(XMLParser.EMPTY); } + public TerminalNode EMPTY(int i) { + return getToken(XMLParser.EMPTY, i); + } + public TerminalNode SELF_CLOSING() { return getToken(XMLParser.SELF_CLOSING, 0); } + public ElementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_element; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof XMLListener ) ((XMLListener)listener).enterElement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof XMLListener ) ((XMLListener)listener).exitElement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof XMLVisitor ) return ((XMLVisitor)visitor).visitElement(this); + else return visitor.visitChildren(this); + } + } + + public final ElementContext element() throws RecognitionException { + ElementContext _localctx = new ElementContext(_ctx, getState()); + enterRule(_localctx, 2, RULE_element); + int _la; + try { + setState(26); + _errHandler.sync(this); + switch (_input.LA(1)) { + case OPEN: + enterOuterAlt(_localctx, 1); + { + setState(15); + startTag(); + setState(20); + _errHandler.sync(this); + _la = _input.LA(1); + while ((((_la) & ~0x3f) == 0 && ((1L << _la) & 1046L) != 0)) { + { + setState(18); + _errHandler.sync(this); + switch (_input.LA(1)) { + case SELF_CLOSING: + case OPEN: + case STRING: + { + setState(16); + content(); + } + break; + case EMPTY: + { + setState(17); + match(EMPTY); + } + break; + default: + throw new NoViableAltException(this); + } + } + setState(22); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(23); + endTag(); + } + break; + case SELF_CLOSING: + enterOuterAlt(_localctx, 2); + { + setState(25); + match(SELF_CLOSING); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class StartTagContext extends ParserRuleContext { + public TerminalNode OPEN() { return getToken(XMLParser.OPEN, 0); } + public TerminalNode Name() { return getToken(XMLParser.Name, 0); } + public TerminalNode CLOSE() { return getToken(XMLParser.CLOSE, 0); } + public List attribute() { + return getRuleContexts(AttributeContext.class); + } + public AttributeContext attribute(int i) { + return getRuleContext(AttributeContext.class,i); + } + public StartTagContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_startTag; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof XMLListener ) ((XMLListener)listener).enterStartTag(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof XMLListener ) ((XMLListener)listener).exitStartTag(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof XMLVisitor ) return ((XMLVisitor)visitor).visitStartTag(this); + else return visitor.visitChildren(this); + } + } + + public final StartTagContext startTag() throws RecognitionException { + StartTagContext _localctx = new StartTagContext(_ctx, getState()); + enterRule(_localctx, 4, RULE_startTag); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(28); + match(OPEN); + setState(29); + match(Name); + setState(33); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==Name) { + { + { + setState(30); + attribute(); + } + } + setState(35); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(36); + match(CLOSE); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class EndTagContext extends ParserRuleContext { + public TerminalNode OPEN_SLASH() { return getToken(XMLParser.OPEN_SLASH, 0); } + public TerminalNode Name() { return getToken(XMLParser.Name, 0); } + public TerminalNode CLOSE() { return getToken(XMLParser.CLOSE, 0); } + public EndTagContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_endTag; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof XMLListener ) ((XMLListener)listener).enterEndTag(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof XMLListener ) ((XMLListener)listener).exitEndTag(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof XMLVisitor ) return ((XMLVisitor)visitor).visitEndTag(this); + else return visitor.visitChildren(this); + } + } + + public final EndTagContext endTag() throws RecognitionException { + EndTagContext _localctx = new EndTagContext(_ctx, getState()); + enterRule(_localctx, 6, RULE_endTag); + try { + enterOuterAlt(_localctx, 1); + { + setState(38); + match(OPEN_SLASH); + setState(39); + match(Name); + setState(40); + match(CLOSE); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class AttributeContext extends ParserRuleContext { + public TerminalNode Name() { return getToken(XMLParser.Name, 0); } + public TerminalNode EQUALS() { return getToken(XMLParser.EQUALS, 0); } + public TerminalNode STRING() { return getToken(XMLParser.STRING, 0); } + public AttributeContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_attribute; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof XMLListener ) ((XMLListener)listener).enterAttribute(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof XMLListener ) ((XMLListener)listener).exitAttribute(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof XMLVisitor ) return ((XMLVisitor)visitor).visitAttribute(this); + else return visitor.visitChildren(this); + } + } + + public final AttributeContext attribute() throws RecognitionException { + AttributeContext _localctx = new AttributeContext(_ctx, getState()); + enterRule(_localctx, 8, RULE_attribute); + try { + enterOuterAlt(_localctx, 1); + { + setState(42); + match(Name); + setState(43); + match(EQUALS); + setState(44); + match(STRING); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class ContentContext extends ParserRuleContext { + public ElementContext element() { + return getRuleContext(ElementContext.class,0); + } + public TerminalNode STRING() { return getToken(XMLParser.STRING, 0); } + public ContentContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_content; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof XMLListener ) ((XMLListener)listener).enterContent(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof XMLListener ) ((XMLListener)listener).exitContent(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof XMLVisitor ) return ((XMLVisitor)visitor).visitContent(this); + else return visitor.visitChildren(this); + } + } + + public final ContentContext content() throws RecognitionException { + ContentContext _localctx = new ContentContext(_ctx, getState()); + enterRule(_localctx, 10, RULE_content); + try { + setState(48); + _errHandler.sync(this); + switch (_input.LA(1)) { + case SELF_CLOSING: + case OPEN: + enterOuterAlt(_localctx, 1); + { + setState(46); + element(); + } + break; + case STRING: + enterOuterAlt(_localctx, 2); + { + setState(47); + match(STRING); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static final String _serializedATN = + "\u0004\u0001\n3\u0002\u0000\u0007\u0000\u0002\u0001\u0007\u0001\u0002"+ + "\u0002\u0007\u0002\u0002\u0003\u0007\u0003\u0002\u0004\u0007\u0004\u0002"+ + "\u0005\u0007\u0005\u0001\u0000\u0001\u0000\u0001\u0000\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0005\u0001\u0013\b\u0001\n\u0001\f\u0001\u0016\t\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u001b\b\u0001\u0001\u0002"+ + "\u0001\u0002\u0001\u0002\u0005\u0002 \b\u0002\n\u0002\f\u0002#\t\u0002"+ + "\u0001\u0002\u0001\u0002\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003"+ + "\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0005\u0001\u0005"+ + "\u0003\u00051\b\u0005\u0001\u0005\u0000\u0000\u0006\u0000\u0002\u0004"+ + "\u0006\b\n\u0000\u00001\u0000\f\u0001\u0000\u0000\u0000\u0002\u001a\u0001"+ + "\u0000\u0000\u0000\u0004\u001c\u0001\u0000\u0000\u0000\u0006&\u0001\u0000"+ + "\u0000\u0000\b*\u0001\u0000\u0000\u0000\n0\u0001\u0000\u0000\u0000\f\r"+ + "\u0003\u0002\u0001\u0000\r\u000e\u0005\u0000\u0000\u0001\u000e\u0001\u0001"+ + "\u0000\u0000\u0000\u000f\u0014\u0003\u0004\u0002\u0000\u0010\u0013\u0003"+ + "\n\u0005\u0000\u0011\u0013\u0005\u0002\u0000\u0000\u0012\u0010\u0001\u0000"+ + "\u0000\u0000\u0012\u0011\u0001\u0000\u0000\u0000\u0013\u0016\u0001\u0000"+ + "\u0000\u0000\u0014\u0012\u0001\u0000\u0000\u0000\u0014\u0015\u0001\u0000"+ + "\u0000\u0000\u0015\u0017\u0001\u0000\u0000\u0000\u0016\u0014\u0001\u0000"+ + "\u0000\u0000\u0017\u0018\u0003\u0006\u0003\u0000\u0018\u001b\u0001\u0000"+ + "\u0000\u0000\u0019\u001b\u0005\u0001\u0000\u0000\u001a\u000f\u0001\u0000"+ + "\u0000\u0000\u001a\u0019\u0001\u0000\u0000\u0000\u001b\u0003\u0001\u0000"+ + "\u0000\u0000\u001c\u001d\u0005\u0004\u0000\u0000\u001d!\u0005\t\u0000"+ + "\u0000\u001e \u0003\b\u0004\u0000\u001f\u001e\u0001\u0000\u0000\u0000"+ + " #\u0001\u0000\u0000\u0000!\u001f\u0001\u0000\u0000\u0000!\"\u0001\u0000"+ + "\u0000\u0000\"$\u0001\u0000\u0000\u0000#!\u0001\u0000\u0000\u0000$%\u0005"+ + "\u0006\u0000\u0000%\u0005\u0001\u0000\u0000\u0000&\'\u0005\u0005\u0000"+ + "\u0000\'(\u0005\t\u0000\u0000()\u0005\u0006\u0000\u0000)\u0007\u0001\u0000"+ + "\u0000\u0000*+\u0005\t\u0000\u0000+,\u0005\b\u0000\u0000,-\u0005\n\u0000"+ + "\u0000-\t\u0001\u0000\u0000\u0000.1\u0003\u0002\u0001\u0000/1\u0005\n"+ + "\u0000\u00000.\u0001\u0000\u0000\u00000/\u0001\u0000\u0000\u00001\u000b"+ + "\u0001\u0000\u0000\u0000\u0005\u0012\u0014\u001a!0"; + public static final ATN _ATN = + new ATNDeserializer().deserialize(_serializedATN.toCharArray()); + static { + _decisionToDFA = new DFA[_ATN.getNumberOfDecisions()]; + for (int i = 0; i < _ATN.getNumberOfDecisions(); i++) { + _decisionToDFA[i] = new DFA(_ATN.getDecisionState(i), i); + } + } +} \ No newline at end of file diff --git a/gen/controlP5/layout/XMLVisitor.java b/gen/controlP5/layout/XMLVisitor.java new file mode 100644 index 0000000..8696cff --- /dev/null +++ b/gen/controlP5/layout/XMLVisitor.java @@ -0,0 +1,49 @@ +// Generated from /Users/gabrielsalvador/Code/controlp5/src/main/java/controlP5/layout/XML.g4 by ANTLR 4.12.0 +package controlP5.layout; +import org.antlr.v4.runtime.tree.ParseTreeVisitor; + +/** + * This interface defines a complete generic visitor for a parse tree produced + * by {@link XMLParser}. + * + * @param The return type of the visit operation. Use {@link Void} for + * operations with no return type. + */ +public interface XMLVisitor extends ParseTreeVisitor { + /** + * Visit a parse tree produced by {@link XMLParser#document}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitDocument(XMLParser.DocumentContext ctx); + /** + * Visit a parse tree produced by {@link XMLParser#element}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitElement(XMLParser.ElementContext ctx); + /** + * Visit a parse tree produced by {@link XMLParser#startTag}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitStartTag(XMLParser.StartTagContext ctx); + /** + * Visit a parse tree produced by {@link XMLParser#endTag}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitEndTag(XMLParser.EndTagContext ctx); + /** + * Visit a parse tree produced by {@link XMLParser#attribute}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitAttribute(XMLParser.AttributeContext ctx); + /** + * Visit a parse tree produced by {@link XMLParser#content}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitContent(XMLParser.ContentContext ctx); +} \ No newline at end of file diff --git a/pom.xml b/pom.xml index 0593aa7..f3b8991 100644 --- a/pom.xml +++ b/pom.xml @@ -28,11 +28,11 @@ - + diff --git a/resources/.DS_Store b/resources/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..0647067d3a4b3d9ddba218a9021dd0b97e5ff93a GIT binary patch literal 6148 zcmeH~F$w}f3`G;&V!>uh%V|7-HyA`u-~|K~8*xF)z$?L_2URHKLJSWDxSmLu%B!J&7q|#Dlq;CI0gn1_$q-1 Dp;i*E literal 0 HcmV?d00001 diff --git a/resources/addons/AddMethodList/AddMethodList.java b/resources/addons/AddMethodList/AddMethodList.java index d5f9e5b..cef84b7 100644 --- a/resources/addons/AddMethodList/AddMethodList.java +++ b/resources/addons/AddMethodList/AddMethodList.java @@ -3,7 +3,7 @@ import java.util.*; import java.text.*; import java.io.*; -import static controlP5.ControlP5Legacy.*; +import static main.java.controlp5.ControlP5Legacy.*; public class AddMethodList { diff --git a/resources/addons/addons.iml b/resources/addons/addons.iml index 2b9413b..a7b08d3 100644 --- a/resources/addons/addons.iml +++ b/resources/addons/addons.iml @@ -8,5 +8,6 @@ + \ No newline at end of file diff --git a/resources/resources.iml b/resources/resources.iml index d3b4689..224f004 100644 --- a/resources/resources.iml +++ b/resources/resources.iml @@ -2,10 +2,9 @@ - - - + + \ No newline at end of file diff --git a/src/main/java/.DS_Store b/src/main/java/.DS_Store index 77a675662e856af7408611563ed30052f7dd6c28..15e44e9bf449e33c7123032e931247deb833297b 100644 GIT binary patch delta 89 zcmZoMXfc=|#>CJzu~2NHo}wrt0|NsP3otMwGh}$?TPjG`-K|9}^--i$v%|A5hVJ{myk)ih?`WafG2{g~N#c4uY>07$;>T?a4$z`!Cf z)rVCZ5q?olNSC(sAQIU}2pj?^!b~AJ5uF$k1`-B3jRCQC)8OK|We~%W^~+r+;0}7l z)^Hcg)n8IjYn$OTqMFY5;M4*?inG}-q^mo1s;AfJHTsS9(k5?|Vmq!!c{^McttHL_ zr={D@vQHZob7YRQ*!CF>WrFWf3|V{PGmkg&yw1Ex=9ZMhNE_*jIkvw)ot>VvX0lTU zlh*#NsqCaRedFfALE0G2T)Vwk*$TE9e<`0G2<}x<1~j(d6)J7G@FF*G@JU5l8@KQ7 z=!uiht%-j#&DPY@ef_5g&YU#|hlU4721iHFogW(=zc7BWVh%gDyHyRvl;(KA!+cPu ztJTo=N;TW{S+yL~7jenoqZM=LkI+TxJv}rn?ba}6|h%QTD-Pvn%>1KXj&0?YF_=G!ZF z7}~5#^SdHa^yYF_45{d;?4vH`l9~OX=+5LGwv;PMF(IQAfK2X<`0Vi98EKg`lJpYe zjHWZWqP7??f#2sNScWawgV*pD-oZ!s1YhAh{3N|(oLnXoWSZO|v*ZDJOcsetJmQn* zD!;4sHC#GA5{aU~a%AjBk4*Fpg{X4_h$X{;>GeVG$zYnhIqKR{A)Wia3hLut-6lB^1P*#->8F Rpd>#6l7^&882G0Q{04d3?AibT diff --git a/src/main/java/controlP5/Accordion.java b/src/main/java/controlP5/Accordion.java index eb077c1..0dfc847 100755 --- a/src/main/java/controlP5/Accordion.java +++ b/src/main/java/controlP5/Accordion.java @@ -1,4 +1,4 @@ -package controlP5; +package main.java.controlp5; /** * controlP5 is a processing gui library. @@ -29,8 +29,8 @@ package controlP5; *

* An Accordion here is a list of ControlGroups which can be expanded and collapsed. * - * @see controlP5.ControllerGroup - * @see controlP5.ControlGroup + * @see ControllerGroup + * @see ControlGroup * @example controllers/ControlP5accordion */ @SuppressWarnings( "rawtypes" ) public class Accordion extends ControlGroup< Accordion > { @@ -77,7 +77,7 @@ package controlP5; * theGroup) overwrites it's super method. if you want to remove a ControlGroup only from the * accordion, use removeItem(ControlGroup). * - * @see controlP5.Accordion#removeItem(ControlGroup) + * @see Accordion#removeItem(ControlGroup) * @return ControllerInterface */ @Override public Accordion remove( ControllerInterface< ? > theGroup ) { diff --git a/src/main/java/controlP5/Background.java b/src/main/java/controlP5/Background.java index a454509..aa4646b 100644 --- a/src/main/java/controlP5/Background.java +++ b/src/main/java/controlP5/Background.java @@ -1,4 +1,4 @@ -package controlP5; +package main.java.controlp5; /** * controlP5 is a processing gui library. diff --git a/src/main/java/controlP5/Bang.java b/src/main/java/controlP5/Bang.java index ff8bfc1..527c27b 100755 --- a/src/main/java/controlP5/Bang.java +++ b/src/main/java/controlP5/Bang.java @@ -1,4 +1,4 @@ -package controlP5; +package main.java.controlp5; /** * controlP5 is a processing gui library. diff --git a/src/main/java/controlP5/BitFont.java b/src/main/java/controlP5/BitFont.java index 15bec01..be89f61 100755 --- a/src/main/java/controlP5/BitFont.java +++ b/src/main/java/controlP5/BitFont.java @@ -1,4 +1,4 @@ -package controlP5; +package main.java.controlp5; /** * controlP5 is a processing gui library. diff --git a/src/main/java/controlP5/Button.java b/src/main/java/controlP5/Button.java index f67b1d1..35850d6 100755 --- a/src/main/java/controlP5/Button.java +++ b/src/main/java/controlP5/Button.java @@ -1,4 +1,4 @@ -package controlP5; +package main.java.controlp5; /** * controlP5 is a processing gui library. @@ -168,7 +168,7 @@ public class Button extends Controller< Button > { /** * If the button acts as a switch, setOn will turn on * the switch. Use - * {@link controlP5.Button#setSwitch(boolean) setSwitch} + * {@link Button#setSwitch(boolean) setSwitch} * to turn a Button into a Switch. * * @return Button @@ -185,7 +185,7 @@ public class Button extends Controller< Button > { /** * If the button acts as a switch, setOff will turn off * the switch. Use - * {@link controlP5.Button#setSwitch(boolean) setSwitch} + * {@link Button#setSwitch(boolean) setSwitch} * to turn a Button into a Switch. * * @return Button @@ -222,7 +222,7 @@ public class Button extends Controller< Button > { * of the button. {@link setSwitch(boolean) setSwitch} * should have been set before. * - * @see controlP5.Button#setSwitch(boolean) + * @see Button#setSwitch(boolean) * @return boolean */ public boolean getBooleanValue( ) { diff --git a/src/main/java/controlP5/ButtonBar.java b/src/main/java/controlP5/ButtonBar.java index 85c0973..1ad3a0b 100644 --- a/src/main/java/controlP5/ButtonBar.java +++ b/src/main/java/controlP5/ButtonBar.java @@ -1,4 +1,4 @@ -package controlP5; +package main.java.controlp5; /** @@ -27,7 +27,7 @@ package controlP5; */ -import static controlP5.ControlP5.b; +import static main.java.controlp5.ControlP5.b; import java.util.ArrayList; import java.util.Arrays; @@ -35,7 +35,7 @@ import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; -import static controlP5.ControlP5.s; +import static main.java.controlp5.ControlP5.s; import processing.core.PGraphics; public class ButtonBar extends Controller< ButtonBar > { diff --git a/src/main/java/controlP5/CColor.java b/src/main/java/controlP5/CColor.java index 1720a14..7d78fb7 100755 --- a/src/main/java/controlP5/CColor.java +++ b/src/main/java/controlP5/CColor.java @@ -1,4 +1,4 @@ -package controlP5; +package main.java.controlp5; /** * controlP5 is a processing gui library. @@ -103,7 +103,7 @@ public class CColor implements Serializable { * @param theAlpha */ public CColor setAlpha( int theAlpha ) { - System.out.println( "controlP5.CColor.setAlpha: setting alpha values disabled for this version of controlP5." ); + System.out.println( "main.java.controlp5.CColor.setAlpha: setting alpha values disabled for this version of controlP5." ); return this; } diff --git a/src/main/java/controlP5/CDrawable.java b/src/main/java/controlP5/CDrawable.java index 9fbe46a..dc8f46b 100755 --- a/src/main/java/controlP5/CDrawable.java +++ b/src/main/java/controlP5/CDrawable.java @@ -1,4 +1,4 @@ -package controlP5; +package main.java.controlp5; /** * controlP5 is a processing gui library. diff --git a/src/main/java/controlP5/CP.java b/src/main/java/controlP5/CP.java index 1a867ff..9f4f6dc 100755 --- a/src/main/java/controlP5/CP.java +++ b/src/main/java/controlP5/CP.java @@ -1,4 +1,4 @@ -package controlP5; +package main.java.controlp5; /** * controlP5 is a processing gui library. diff --git a/src/main/java/controlP5/CallbackEvent.java b/src/main/java/controlP5/CallbackEvent.java index 7fde0b1..3845c4c 100755 --- a/src/main/java/controlP5/CallbackEvent.java +++ b/src/main/java/controlP5/CallbackEvent.java @@ -1,4 +1,4 @@ -package controlP5; +package main.java.controlp5; /** * controlP5 is a processing gui library. diff --git a/src/main/java/controlP5/CallbackListener.java b/src/main/java/controlP5/CallbackListener.java index f1399ef..0c2c3f1 100755 --- a/src/main/java/controlP5/CallbackListener.java +++ b/src/main/java/controlP5/CallbackListener.java @@ -1,4 +1,4 @@ -package controlP5; +package main.java.controlp5; /** * controlP5 is a processing gui library. @@ -32,7 +32,7 @@ package controlP5; *

* * @example use/ControlP5callback - * @see controlP5.ControlP5#addCallback(CallbackListener) + * @see ControlP5#addCallback(CallbackListener) */ public interface CallbackListener { diff --git a/src/main/java/controlP5/Canvas.java b/src/main/java/controlP5/Canvas.java index 0533214..37af835 100755 --- a/src/main/java/controlP5/Canvas.java +++ b/src/main/java/controlP5/Canvas.java @@ -1,4 +1,4 @@ -package controlP5; +package main.java.controlp5; /** * controlP5 is a processing gui library. diff --git a/src/main/java/controlP5/Chart.java b/src/main/java/controlP5/Chart.java index 7b77ee6..229d0b0 100755 --- a/src/main/java/controlP5/Chart.java +++ b/src/main/java/controlP5/Chart.java @@ -1,4 +1,4 @@ -package controlP5; +package main.java.controlp5; /** * controlP5 is a processing gui library. diff --git a/src/main/java/controlP5/ChartData.java b/src/main/java/controlP5/ChartData.java index 45dfafd..45933af 100755 --- a/src/main/java/controlP5/ChartData.java +++ b/src/main/java/controlP5/ChartData.java @@ -1,4 +1,4 @@ -package controlP5; +package main.java.controlp5; /** * controlP5 is a processing gui library. diff --git a/src/main/java/controlP5/ChartDataSet.java b/src/main/java/controlP5/ChartDataSet.java index 323ab33..51b7e8e 100755 --- a/src/main/java/controlP5/ChartDataSet.java +++ b/src/main/java/controlP5/ChartDataSet.java @@ -1,4 +1,4 @@ -package controlP5; +package main.java.controlp5; /** * controlP5 is a processing gui library. diff --git a/src/main/java/controlP5/CheckBox.java b/src/main/java/controlP5/CheckBox.java index 1d9accd..a6a680c 100755 --- a/src/main/java/controlP5/CheckBox.java +++ b/src/main/java/controlP5/CheckBox.java @@ -1,4 +1,4 @@ -package controlP5; +package main.java.controlp5; /** * controlP5 is a processing gui library. @@ -38,7 +38,7 @@ import processing.core.PImage; * * @example controllers/ControlP5checkBox * - * @see controlP5.Toggle + * @see Toggle * */ public class CheckBox extends ControlGroup< CheckBox > { @@ -246,7 +246,7 @@ public class CheckBox extends ControlGroup< CheckBox > { public CheckBox addItem( final String theName , final float theValue ) { Toggle t = cp5.addToggle( theName , 0 , 0 , itemWidth , itemHeight ); t.getCaptionLabel( ).align( RIGHT_OUTSIDE , CENTER ).setPadding( Label.paddingX , 0 ); - t.setMode( ControlP5.DEFAULT ); + t.setMode(DEFAULT); t.setImages( images[ 0 ] , images[ 1 ] , images[ 2 ] ); t.setSize( images[ 0 ] ); addItem( t , theValue ); @@ -561,7 +561,7 @@ public class CheckBox extends ControlGroup< CheckBox > { } if ( theBroadcastFlag ) { ControlEvent myEvent = new ControlEvent( this ); - cp5.getControlBroadcaster( ).broadcast( myEvent , ControlP5Constants.FLOAT ); + cp5.getControlBroadcaster( ).broadcast( myEvent , FLOAT); } } diff --git a/src/main/java/controlP5/ColorPalette.java b/src/main/java/controlP5/ColorPalette.java index 05fd20e..089eace 100644 --- a/src/main/java/controlP5/ColorPalette.java +++ b/src/main/java/controlP5/ColorPalette.java @@ -1,4 +1,4 @@ -package controlP5; +package main.java.controlp5; /** * controlP5 is a processing gui library. diff --git a/src/main/java/controlP5/ColorPicker.java b/src/main/java/controlP5/ColorPicker.java index 468c127..aad9ad8 100755 --- a/src/main/java/controlP5/ColorPicker.java +++ b/src/main/java/controlP5/ColorPicker.java @@ -1,4 +1,4 @@ -package controlP5; +package main.java.controlp5; /** * controlP5 is a processing gui library. @@ -167,7 +167,7 @@ public class ColorPicker extends ControlGroup< ColorPicker > { private ColorPicker broadcast( ) { ControlEvent ev = new ControlEvent( this ); setValue( getColorValue( ) ); - cp5.getControlBroadcaster( ).broadcast( ev , ControlP5Constants.EVENT ); + cp5.getControlBroadcaster( ).broadcast( ev , EVENT); if ( _myPlug != null ) { try { Method method = _myPlug.getClass( ).getMethod( _myPlugName , int.class ); diff --git a/src/main/java/controlP5/ColorWheel.java b/src/main/java/controlP5/ColorWheel.java index c7d1dee..691ff4a 100644 --- a/src/main/java/controlP5/ColorWheel.java +++ b/src/main/java/controlP5/ColorWheel.java @@ -1,4 +1,4 @@ -package controlP5; +package main.java.controlp5; /** * controlP5 is a processing gui library. diff --git a/src/main/java/controlP5/ControlBehavior.java b/src/main/java/controlP5/ControlBehavior.java index 25b5c5f..df64724 100755 --- a/src/main/java/controlP5/ControlBehavior.java +++ b/src/main/java/controlP5/ControlBehavior.java @@ -1,4 +1,4 @@ -package controlP5; +package main.java.controlp5; /** * controlP5 is a processing gui library. diff --git a/src/main/java/controlP5/ControlBroadcaster.java b/src/main/java/controlP5/ControlBroadcaster.java index 04da3ee..0b3db43 100755 --- a/src/main/java/controlP5/ControlBroadcaster.java +++ b/src/main/java/controlP5/ControlBroadcaster.java @@ -1,4 +1,4 @@ -package controlP5; +package main.java.controlp5; /** * controlP5 is a processing gui library. @@ -42,7 +42,7 @@ import java.util.Set; * through an instance of the ControlP5 class. Instead of accessing the ControlBroadcaster directly, * use the convenience methods available from the ControlP5 class. * - * @see controlP5.ControlP5#getControlBroadcaster() + * @see ControlP5#getControlBroadcaster() */ public class ControlBroadcaster { diff --git a/src/main/java/controlP5/ControlElement.java b/src/main/java/controlP5/ControlElement.java index 7da0d48..2000efe 100755 --- a/src/main/java/controlP5/ControlElement.java +++ b/src/main/java/controlP5/ControlElement.java @@ -1,4 +1,4 @@ -package controlP5; +package main.java.controlp5; /** * controlP5 is a processing gui library. diff --git a/src/main/java/controlP5/ControlEvent.java b/src/main/java/controlP5/ControlEvent.java index 4f4f16b..106320b 100755 --- a/src/main/java/controlP5/ControlEvent.java +++ b/src/main/java/controlP5/ControlEvent.java @@ -1,4 +1,4 @@ -package controlP5; +package main.java.controlp5; /** * controlP5 is a processing gui library. @@ -157,7 +157,7 @@ public class ControlEvent { /** * Checks if the ControlEvent was triggered by a tab * - * @see controlP5.Tab + * @see Tab * @return boolean */ public boolean isTab( ) { @@ -167,7 +167,7 @@ public class ControlEvent { /** * Checks if the ControlEvent was triggered by a controller * - * @see controlP5.Controller + * @see Controller * @return boolean */ public boolean isController( ) { @@ -177,7 +177,7 @@ public class ControlEvent { /** * Checks if the ControlEvent was triggered by a ControlGroup * - * @see controlP5.ControllerGroup + * @see ControllerGroup * @return boolean */ public boolean isGroup( ) { diff --git a/src/main/java/controlP5/ControlFont.java b/src/main/java/controlP5/ControlFont.java index 53d553b..2cbe34e 100755 --- a/src/main/java/controlP5/ControlFont.java +++ b/src/main/java/controlP5/ControlFont.java @@ -1,4 +1,4 @@ -package controlP5; +package main.java.controlp5; /** * controlP5 is a processing gui library. diff --git a/src/main/java/controlP5/ControlGroup.java b/src/main/java/controlP5/ControlGroup.java index 1d77774..9591cde 100755 --- a/src/main/java/controlP5/ControlGroup.java +++ b/src/main/java/controlP5/ControlGroup.java @@ -1,4 +1,4 @@ -package controlP5; +package main.java.controlp5; /** * controlP5 is a processing gui library. @@ -43,7 +43,7 @@ import processing.core.PGraphics; * {@link ControllerGroup} documentation. *

* - * @see controlP5.Group + * @see Group * @example controllers/ControlP5group */ public class ControlGroup< T > extends ControllerGroup< T > implements ControlListener { @@ -79,7 +79,7 @@ public class ControlGroup< T > extends ControllerGroup< T > implements ControlLi isOpen = !isOpen; if ( isEventActive ) { final ControlEvent myEvent = new ControlEvent( this ); - cp5.getControlBroadcaster( ).broadcast( myEvent , ControlP5Constants.METHOD ); + cp5.getControlBroadcaster( ).broadcast( myEvent , METHOD); for ( ControlListener cl : _myControlListener ) { cl.controlEvent( myEvent ); } diff --git a/src/main/java/controlP5/ControlKey.java b/src/main/java/controlP5/ControlKey.java index 81f930e..29fedb1 100755 --- a/src/main/java/controlP5/ControlKey.java +++ b/src/main/java/controlP5/ControlKey.java @@ -1,4 +1,4 @@ -package controlP5; +package main.java.controlp5; /** * controlP5 is a processing gui library. diff --git a/src/main/java/controlP5/ControlListener.java b/src/main/java/controlP5/ControlListener.java index ffc622e..e8d37cf 100755 --- a/src/main/java/controlP5/ControlListener.java +++ b/src/main/java/controlP5/ControlListener.java @@ -1,4 +1,4 @@ -package controlP5; +package main.java.controlp5; /** * controlP5 is a processing gui library. @@ -29,8 +29,8 @@ package controlP5; * ControlListener is an interface that can be implemented by a custom class to be notified when * controller values change. To add a ControlListener to a controller use Controller.addListner() * - * @see controlP5.Controller#addListener(ControlListener) - * @see controlP5.CallbackListener + * @see Controller#addListener(ControlListener) + * @see CallbackListener * * @example use/ControlP5listenerForSingleController */ @@ -41,8 +41,8 @@ public interface ControlListener { * value changes. Use the CallbackListener to get informed when actions such as pressed, * release, drag, etc are performed. * - * @see controlP5.CallbackListener - * @see controlP5.CallbackEvent + * @see CallbackListener + * @see CallbackEvent * @param theEvent * ControlEvent * @example ControlP5listener diff --git a/src/main/java/controlP5/ControlP5.java b/src/main/java/controlP5/ControlP5.java index 5f6ed0f..eeaa172 100755 --- a/src/main/java/controlP5/ControlP5.java +++ b/src/main/java/controlP5/ControlP5.java @@ -1,4 +1,4 @@ -package controlP5; +package main.java.controlp5; /** * controlP5 is a processing gui library. @@ -50,7 +50,7 @@ import processing.core.PFont; import processing.core.PGraphics; import processing.event.KeyEvent; import processing.event.MouseEvent; -import controlP5.ControlWindow.Pointer; +import main.java.controlp5.ControlWindow.Pointer; /** *

@@ -63,7 +63,7 @@ import controlP5.ControlWindow.Pointer; * ControlP5Base class. *

* - * @see controlP5.ControlP5Base + * @see ControlP5Base * @example use/ControlP5basics */ public class ControlP5 extends ControlP5Base { @@ -326,14 +326,14 @@ public class ControlP5 extends ControlP5Base { /** * - * @see controlP5.ControlBroadcaster + * @see ControlBroadcaster */ public ControlBroadcaster getControlBroadcaster( ) { return _myControlBroadcaster; } /** - * @see controlP5.ControlListener + * @see ControlListener */ public ControlP5 addListener( ControlListener ... theListeners ) { getControlBroadcaster( ).addListener( theListeners ); @@ -341,7 +341,7 @@ public class ControlP5 extends ControlP5Base { } /** - * @see controlP5.ControlListener + * @see ControlListener */ public ControlP5 removeListener( ControlListener ... theListeners ) { getControlBroadcaster( ).removeListener( theListeners ); @@ -349,7 +349,7 @@ public class ControlP5 extends ControlP5Base { } /** - * @see controlP5.ControlListener + * @see ControlListener */ public ControlP5 removeListener( ControlListener theListener ) { getControlBroadcaster( ).removeListener( theListener ); @@ -357,15 +357,15 @@ public class ControlP5 extends ControlP5Base { } /** - * @see controlP5.ControlListener + * @see ControlListener */ public ControlListener getListener( int theIndex ) { return getControlBroadcaster( ).getListener( theIndex ); } /** - * @see controlP5.CallbackEvent - * @see controlP5.CallbackListener + * @see CallbackEvent + * @see CallbackListener */ public ControlP5 addCallback( CallbackListener ... theListeners ) { getControlBroadcaster( ).addCallback( theListeners ); @@ -373,8 +373,8 @@ public class ControlP5 extends ControlP5Base { } /** - * @see controlP5.CallbackEvent - * @see controlP5.CallbackListener + * @see CallbackEvent + * @see CallbackListener */ public ControlP5 addCallback( CallbackListener theListener ) { getControlBroadcaster( ).addCallback( theListener ); @@ -382,8 +382,8 @@ public class ControlP5 extends ControlP5Base { } /** - * @see controlP5.CallbackEvent - * @see controlP5.CallbackListener + * @see CallbackEvent + * @see CallbackListener */ public ControlP5 addCallback( CallbackListener theListener , Controller< ? > ... theControllers ) { getControlBroadcaster( ).addCallback( theListener , theControllers ); @@ -391,8 +391,8 @@ public class ControlP5 extends ControlP5Base { } /** - * @see controlP5.CallbackEvent - * @see controlP5.CallbackListener + * @see CallbackEvent + * @see CallbackListener */ public ControlP5 removeCallback( CallbackListener ... theListeners ) { getControlBroadcaster( ).removeCallback( theListeners ); @@ -400,8 +400,8 @@ public class ControlP5 extends ControlP5Base { } /** - * @see controlP5.CallbackEvent - * @see controlP5.CallbackListener + * @see CallbackEvent + * @see CallbackListener */ public ControlP5 removeCallback( Controller< ? > ... theControllers ) { getControlBroadcaster( ).removeCallback( theControllers ); @@ -409,8 +409,8 @@ public class ControlP5 extends ControlP5Base { } /** - * @see controlP5.CallbackEvent - * @see controlP5.CallbackListener + * @see CallbackEvent + * @see CallbackListener */ public ControlP5 removeCallback( Controller< ? > theController ) { getControlBroadcaster( ).removeCallback( theController ); @@ -649,7 +649,7 @@ public class ControlP5 extends ControlP5Base { /** * @exclude - * @see controlP5.ControlP5#getAll(Class) + * @see ControlP5#getAll(Class) * @return List */ @ControlP5.Invisible public List< ControllerInterface< ? >> getList( ) { @@ -806,7 +806,7 @@ public class ControlP5 extends ControlP5Base { /** * adds a Canvas to the default sketch window. * - * @see controlP5.Canvas + * @see Canvas */ public ControlP5 addCanvas( Canvas theCanvas ) { getWindow( ).addCanvas( theCanvas ); @@ -910,7 +910,7 @@ public class ControlP5 extends ControlP5Base { * Saves the current values of controllers into a * default properties file * - * @see controlP5.ControllerProperties + * @see ControllerProperties */ public boolean saveProperties( ) { return _myProperties.save( ); @@ -920,7 +920,7 @@ public class ControlP5 extends ControlP5Base { * Saves the current values of controllers into a file, * the filepath is given by parameter theFilePath. * - * @see controlP5.ControllerProperties + * @see ControllerProperties */ public boolean saveProperties( String theFilePath ) { return _myProperties.saveAs( theFilePath ); @@ -934,7 +934,7 @@ public class ControlP5 extends ControlP5Base { * Loads properties from a default properties file and * changes values of controllers accordingly. * - * @see controlP5.ControllerProperties + * @see ControllerProperties * @return */ public boolean loadProperties( ) { @@ -1002,8 +1002,8 @@ public class ControlP5 extends ControlP5Base { /** * shows all controllers and tabs in your sketch. * - * @see controlP5.ControlP5#isVisible() - * @see controlP5.ControlP5#hide() + * @see ControlP5#isVisible() + * @see ControlP5#hide() */ public void show( ) { @@ -1019,8 +1019,8 @@ public class ControlP5 extends ControlP5Base { * returns true or false according to the current * visibility flag. * - * @see controlP5.ControlP5#show() - * @see controlP5.ControlP5#hide() + * @see ControlP5#show() + * @see ControlP5#hide() */ public boolean isVisible( ) { return controlWindow.isVisible( ); @@ -1039,8 +1039,8 @@ public class ControlP5 extends ControlP5Base { * hide all controllers and tabs inside your sketch * window. * - * @see controlP5.ControlP5#show() - * @see controlP5.ControlP5#isVisible() + * @see ControlP5#show() + * @see ControlP5#isVisible() */ public void hide( ) { controlWindow.hide( ); @@ -1049,8 +1049,8 @@ public class ControlP5 extends ControlP5Base { /** * forces all controllers to update. * - * @see controlP5.ControlP5#isUpdate() - * @see controlP5.ControlP5#setUpdate() + * @see ControlP5#isUpdate() + * @see ControlP5#setUpdate() */ public void update( ) { controlWindow.update( ); @@ -1060,8 +1060,8 @@ public class ControlP5 extends ControlP5Base { * checks if automatic updates are enabled. By default * this is true. * - * @see controlP5.ControlP5#update() - * @see controlP5.ControlP5#setUpdate(boolean) + * @see ControlP5#update() + * @see ControlP5#setUpdate(boolean) * @return */ public boolean isUpdate( ) { @@ -1072,8 +1072,8 @@ public class ControlP5 extends ControlP5Base { * changes the update behavior according to parameter * theFlag * - * @see controlP5.ControlP5#update() - * @see controlP5.ControlP5#isUpdate() + * @see ControlP5#update() + * @see ControlP5#isUpdate() * @param theFlag */ public void setUpdate( boolean theFlag ) { diff --git a/src/main/java/controlP5/ControlP5Base.java b/src/main/java/controlP5/ControlP5Base.java index f2caed7..0e2e4a2 100755 --- a/src/main/java/controlP5/ControlP5Base.java +++ b/src/main/java/controlP5/ControlP5Base.java @@ -1,4 +1,4 @@ -package controlP5; +package main.java.controlp5; /** * controlP5 is a processing gui library. @@ -39,7 +39,7 @@ import java.util.TreeSet; import processing.core.PApplet; import processing.event.Event; -import static controlP5.Controller.*; +import static main.java.controlp5.Controller.*; /** * The ControlP5Base supports the ControlP5 class and diff --git a/src/main/java/controlP5/ControlP5Constants.java b/src/main/java/controlP5/ControlP5Constants.java index e4f93d9..a48af46 100755 --- a/src/main/java/controlP5/ControlP5Constants.java +++ b/src/main/java/controlP5/ControlP5Constants.java @@ -1,4 +1,4 @@ -package controlP5; +package main.java.controlp5; /** * controlP5 is a processing gui library. diff --git a/src/main/java/controlP5/ControlP5Legacy.java b/src/main/java/controlP5/ControlP5Legacy.java index 63ecaa0..235fc97 100644 --- a/src/main/java/controlP5/ControlP5Legacy.java +++ b/src/main/java/controlP5/ControlP5Legacy.java @@ -1,4 +1,4 @@ -package controlP5; +package main.java.controlp5; /** * controlP5 is a processing gui library. @@ -28,7 +28,7 @@ package controlP5; import java.util.ArrayList; import processing.core.PApplet; -import static controlP5.Controller.*; +import static main.java.controlp5.Controller.*; public class ControlP5Legacy { diff --git a/src/main/java/controlP5/ControlTimer.java b/src/main/java/controlP5/ControlTimer.java index 5a93fb4..5af97bb 100755 --- a/src/main/java/controlP5/ControlTimer.java +++ b/src/main/java/controlP5/ControlTimer.java @@ -1,4 +1,4 @@ -package controlP5; +package main.java.controlp5; /** * controlP5 is a processing gui library. diff --git a/src/main/java/controlP5/ControlWindow.java b/src/main/java/controlP5/ControlWindow.java index 1172bbf..07dc421 100755 --- a/src/main/java/controlP5/ControlWindow.java +++ b/src/main/java/controlP5/ControlWindow.java @@ -1,4 +1,4 @@ -package controlP5; +package main.java.controlp5; /** * controlP5 is a processing gui library. @@ -36,7 +36,6 @@ import processing.core.PConstants; import processing.core.PGraphics; import processing.event.KeyEvent; import processing.event.MouseEvent; -import controlP5.ControlP5Base.KeyCode; // TODO ! add mouse-button mask for left, center, right; also see Controller #mouse-button ^1 @@ -484,7 +483,7 @@ public final class ControlWindow { c[ n++ ] = ( ( char ) i ); } } - KeyCode code = new KeyCode( c ); + ControlP5Base.KeyCode code = new ControlP5Base.KeyCode( c ); if ( cp5.keymap.containsKey( code ) ) { for ( ControlKey ck : cp5.keymap.get( code ) ) { @@ -622,7 +621,7 @@ public final class ControlWindow { * Adds a custom context to a ControlWindow. Use a * custom class which implements the CDrawable interface * - * @see controlP5.CDrawable + * @see CDrawable * @param theDrawable CDrawable */ public ControlWindow setContext( CDrawable theDrawable ) { @@ -883,13 +882,13 @@ public final class ControlWindow { * and released state. The pointer can be accessed by * its getter method {@link ControlWindow#getPointer()}. * Then use - * {@link controlP5.ControlWindow#set(int, int)} to + * {@link ControlWindow#set(int, int)} to * alter its position or invoke { - * {@link controlP5.ControlWindow#pressed()} or - * {@link controlP5.ControlWindow#released()} to change + * {@link ControlWindow#pressed()} or + * {@link ControlWindow#released()} to change * its state. To disable the mouse and enable the - * Pointer use {@link controlP5.ControlWindow#enable()} - * and {@link controlP5.ControlWindow#disable()} to + * Pointer use {@link ControlWindow#enable()} + * and {@link ControlWindow#disable()} to * default back to the mouse as input parameter. */ // TODO offset against pgx and pgy diff --git a/src/main/java/controlP5/ControlWindowCanvas.java b/src/main/java/controlP5/ControlWindowCanvas.java index 2a322aa..e0e8219 100755 --- a/src/main/java/controlP5/ControlWindowCanvas.java +++ b/src/main/java/controlP5/ControlWindowCanvas.java @@ -1,5 +1,5 @@ -package controlP5; +package main.java.controlp5; /** * controlP5 is a processing gui library. diff --git a/src/main/java/controlP5/Controller.java b/src/main/java/controlP5/Controller.java index 3f3a6c6..89d64c0 100755 --- a/src/main/java/controlP5/Controller.java +++ b/src/main/java/controlP5/Controller.java @@ -1,4 +1,4 @@ -package controlP5; +package main.java.controlp5; /** * controlP5 is a processing gui library. @@ -31,7 +31,7 @@ import java.util.Iterator; import java.util.List; import java.util.Map; -import controlP5.events.ReleasedOutsideListener; +import main.java.controlp5.events.ReleasedOutsideListener; import processing.core.PApplet; import processing.core.PFont; import processing.core.PGraphics; @@ -51,28 +51,28 @@ import processing.event.KeyEvent; *
    *
  • (1) add method controlEvent(ControlEvent theEvent) to your sketch. ControlP5 will automatically detect this * method and will used it to forward any controlEvent triggered by a controller - you can disable forwarding by using - * setBroadcast(false) {@link controlP5.Controller#setBroadcast(boolean)}
  • + * setBroadcast(false) {@link Controller#setBroadcast(boolean)} *
  • (2) each controller requires a unique name when being create. In case an existing name is used for a newly * created Controller, the existing one will be overwritten. each unique name can be used to automatically link a * controller to either a method or a field within your program.
  • *
* - * @see controlP5.Bang - * @see controlP5.Button - * @see controlP5.Knob - * @see controlP5.Matrix - * @see controlP5.MultiList - * @see controlP5.Numberbox - * @see controlP5.RadioButton - * @see controlP5.ListBox - * @see controlP5.Slider - * @see controlP5.Textarea - * @see controlP5.Textfield - * @see controlP5.Textlabel - * @see controlP5.Toggle - * @see controlP5.ControlGroup - * @see controlP5.ControlBehavior - * @see controlP5.ControlEvent + * @see Bang + * @see Button + * @see Knob + * @see Matrix + * @see MultiList + * @see Numberbox + * @see RadioButton + * @see ListBox + * @see Slider + * @see Textarea + * @see Textfield + * @see Textlabel + * @see Toggle + * @see ControlGroup + * @see ControlBehavior + * @see ControlEvent * * @example use/ControlP5basics */ @@ -663,7 +663,7 @@ public abstract class Controller< T > implements ControllerInterface< T > , CDra /** * returns true or false for the current listening status. by default it is set to false * - * @see controlP5.Controller#listen(boolean) + * @see Controller#listen(boolean) * * @return boolean */ @@ -711,7 +711,7 @@ public abstract class Controller< T > implements ControllerInterface< T > , CDra * this particular controller. * * @exclude - * @see controlP5.ControllerView + * @see ControllerView * @param theApplet PApplet */ @ControlP5.Invisible @Override public void draw( final PGraphics theGraphics ) { @@ -1532,7 +1532,7 @@ public abstract class Controller< T > implements ControllerInterface< T > , CDra } /** - * @see controlP5.ControlListener + * @see ControlListener * @param theListener ControlListener * @return Controller */ @@ -1542,7 +1542,7 @@ public abstract class Controller< T > implements ControllerInterface< T > , CDra } /** - * @see controlP5.ControlListener + * @see ControlListener * @param theListener ControlListener * @return Controller */ @@ -1800,7 +1800,7 @@ public abstract class Controller< T > implements ControllerInterface< T > , CDra * use setDisplay to customize your controller look. A new controller-display class required to implement interface * ControllerView. By default the display mode will be set to CUSTOM when setting a new display. * - * @see controlP5.ControllerView + * @see ControllerView * @param theView * @return Controller */ @@ -1819,7 +1819,7 @@ public abstract class Controller< T > implements ControllerInterface< T > , CDra } /** - * @see controlP5.Label + * @see Label * @return Label */ @ControlP5.Layout public Label getCaptionLabel( ) { @@ -2060,7 +2060,7 @@ public abstract class Controller< T > implements ControllerInterface< T > , CDra } /** - * @see controlP5.Controller#registerTooltip(String) + * @see Controller#registerTooltip(String) * @return Controller */ public T unregisterTooltip( ) { diff --git a/src/main/java/controlP5/ControllerAutomator.java b/src/main/java/controlP5/ControllerAutomator.java index 25b0863..d24410d 100755 --- a/src/main/java/controlP5/ControllerAutomator.java +++ b/src/main/java/controlP5/ControllerAutomator.java @@ -1,4 +1,4 @@ -package controlP5; +package main.java.controlp5; /** * controlP5 is a processing gui library. diff --git a/src/main/java/controlP5/ControllerDisplay.java b/src/main/java/controlP5/ControllerDisplay.java index 768ace2..3a35d65 100755 --- a/src/main/java/controlP5/ControllerDisplay.java +++ b/src/main/java/controlP5/ControllerDisplay.java @@ -1,4 +1,4 @@ -package controlP5; +package main.java.controlp5; /** * controlP5 is a processing gui library. diff --git a/src/main/java/controlP5/ControllerGroup.java b/src/main/java/controlP5/ControllerGroup.java index 53cee10..c7e332a 100755 --- a/src/main/java/controlP5/ControllerGroup.java +++ b/src/main/java/controlP5/ControllerGroup.java @@ -1,4 +1,4 @@ -package controlP5; +package main.java.controlp5; /** * controlP5 is a processing gui library. diff --git a/src/main/java/controlP5/ControllerInterface.java b/src/main/java/controlP5/ControllerInterface.java index 6a4a355..3c1c226 100755 --- a/src/main/java/controlP5/ControllerInterface.java +++ b/src/main/java/controlP5/ControllerInterface.java @@ -1,4 +1,4 @@ -package controlP5; +package main.java.controlp5; /** * controlP5 is a processing gui library. diff --git a/src/main/java/controlP5/ControllerLayout.java b/src/main/java/controlP5/ControllerLayout.java index 29eda66..b7d1eac 100755 --- a/src/main/java/controlP5/ControllerLayout.java +++ b/src/main/java/controlP5/ControllerLayout.java @@ -1,4 +1,4 @@ -package controlP5; +package main.java.controlp5; /** * controlP5 is a processing gui library. diff --git a/src/main/java/controlP5/ControllerLayoutElement.java b/src/main/java/controlP5/ControllerLayoutElement.java index d59b07f..34c6ea7 100755 --- a/src/main/java/controlP5/ControllerLayoutElement.java +++ b/src/main/java/controlP5/ControllerLayoutElement.java @@ -1,4 +1,4 @@ -package controlP5; +package main.java.controlp5; /** * controlP5 is a processing gui library. diff --git a/src/main/java/controlP5/ControllerList.java b/src/main/java/controlP5/ControllerList.java index ddc9f78..8d2d4b6 100755 --- a/src/main/java/controlP5/ControllerList.java +++ b/src/main/java/controlP5/ControllerList.java @@ -1,4 +1,4 @@ -package controlP5; +package main.java.controlp5; /** * controlP5 is a processing gui library. diff --git a/src/main/java/controlP5/ControllerPlug.java b/src/main/java/controlP5/ControllerPlug.java index 9c350b1..9846133 100755 --- a/src/main/java/controlP5/ControllerPlug.java +++ b/src/main/java/controlP5/ControllerPlug.java @@ -1,4 +1,4 @@ -package controlP5; +package main.java.controlp5; /** * controlP5 is a processing gui library. diff --git a/src/main/java/controlP5/ControllerProperties.java b/src/main/java/controlP5/ControllerProperties.java index bd80412..8a179a4 100755 --- a/src/main/java/controlP5/ControllerProperties.java +++ b/src/main/java/controlP5/ControllerProperties.java @@ -1,4 +1,4 @@ -package controlP5; +package main.java.controlp5; /** * controlP5 is a processing gui library. @@ -35,7 +35,6 @@ import java.io.ObjectOutputStream; import java.io.StringReader; import java.lang.reflect.Method; import java.util.ArrayList; -import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; @@ -348,7 +347,7 @@ public class ControllerProperties { * logs all registered properties in memory. Here, clones of properties are stored inside a map and can be accessed * by key using the getLog method. * - * @see controlP5.ControllerProperties#getSnapshot(String) + * @see ControllerProperties#getSnapshot(String) * @param theKey * @return ControllerProperties */ @@ -415,7 +414,7 @@ public class ControllerProperties { /** * restores properties previously stored as snapshot in memory. * - * @see controlP5.ControllerProperties#setSnapshot(String) + * @see ControllerProperties#setSnapshot(String) */ public ControllerProperties getSnapshot( String theKey ) { Set< ControllerProperty > l = _mySnapshots.get( theKey ); diff --git a/src/main/java/controlP5/ControllerProperty.java b/src/main/java/controlP5/ControllerProperty.java index f068fe6..ab85716 100755 --- a/src/main/java/controlP5/ControllerProperty.java +++ b/src/main/java/controlP5/ControllerProperty.java @@ -1,4 +1,4 @@ -package controlP5; +package main.java.controlp5; /** * controlP5 is a processing gui library. diff --git a/src/main/java/controlP5/ControllerStyle.java b/src/main/java/controlP5/ControllerStyle.java index b4b85f7..93d1fce 100755 --- a/src/main/java/controlP5/ControllerStyle.java +++ b/src/main/java/controlP5/ControllerStyle.java @@ -1,4 +1,4 @@ -package controlP5; +package main.java.controlp5; /** * controlP5 is a processing gui library. @@ -31,7 +31,7 @@ import java.io.Serializable; /** * Labels use the ControllerStyle class to store margin and padding information. * - * @see controlP5.Label#getStyle() + * @see Label#getStyle() * * @example extra/ControlP5style */ diff --git a/src/main/java/controlP5/ControllerView.java b/src/main/java/controlP5/ControllerView.java index ca0f9d7..827d1c4 100755 --- a/src/main/java/controlP5/ControllerView.java +++ b/src/main/java/controlP5/ControllerView.java @@ -1,4 +1,4 @@ -package controlP5; +package main.java.controlp5; /** * controlP5 is a processing gui library. diff --git a/src/main/java/controlP5/DropdownList.java b/src/main/java/controlP5/DropdownList.java index 9e276bf..6d29163 100755 --- a/src/main/java/controlP5/DropdownList.java +++ b/src/main/java/controlP5/DropdownList.java @@ -1,6 +1,6 @@ -package controlP5; +package main.java.controlp5; -import static controlP5.ControlP5.b; +import static main.java.controlp5.ControlP5.b; import java.util.ArrayList; import java.util.Arrays; @@ -412,7 +412,7 @@ public class DropdownList extends Controller< DropdownList > implements ControlL for ( int i = m0 ; i < m1 ; i++ ) { Map< String , Object > item = c.items.get( i ); CColor color = ( CColor ) item.get( "color" ); - g.fill( ( b( item.get( "state" ) ) ) ? color.getActive( ) : ( i == c.itemHover ) ? ( c.isMousePressed ? color.getActive( ) : color.getForeground( ) ) : color.getBackground( ) ); + g.fill( ( ControlP5.b( item.get( "state" ) ) ) ? color.getActive( ) : ( i == c.itemHover ) ? ( c.isMousePressed ? color.getActive( ) : color.getForeground( ) ) : color.getBackground( ) ); g.rect( 0 , 0 , c.getWidth( ) , c.itemHeight - 1 ); c.getValueLabel( ).set( item.get( "text" ).toString( ) ).draw( g , 4 , c.itemHeight / 2 ); g.translate( 0 , c.itemHeight ); @@ -443,19 +443,19 @@ public class DropdownList extends Controller< DropdownList > implements ControlL public void keyEvent( KeyEvent theKeyEvent ) { if ( isInside && theKeyEvent.getAction( ) == KeyEvent.PRESS ) { switch ( theKeyEvent.getKeyCode( ) ) { - case ( ControlP5.UP ): + case (UP): scroll( theKeyEvent.isAltDown( ) ? -itemIndexOffset : theKeyEvent.isShiftDown( ) ? -10 : -1 ); updateHover( ); break; - case ( ControlP5.DOWN ): + case (DOWN): scroll( theKeyEvent.isAltDown( ) ? items.size( ) - itemRange : theKeyEvent.isShiftDown( ) ? 10 : 1 ); updateHover( ); break; - case ( ControlP5.LEFT ): + case (LEFT): break; - case ( ControlP5.RIGHT ): + case (RIGHT): break; - case ( ControlP5.ENTER ): + case (ENTER): onRelease( ); break; } diff --git a/src/main/java/controlP5/FieldChangedListener.java b/src/main/java/controlP5/FieldChangedListener.java index 1ba3663..0e2f6b0 100755 --- a/src/main/java/controlP5/FieldChangedListener.java +++ b/src/main/java/controlP5/FieldChangedListener.java @@ -1,4 +1,4 @@ -package controlP5; +package main.java.controlp5; /** * controlP5 is a processing gui library. @@ -32,7 +32,7 @@ import java.lang.reflect.Field; * linked to a controller. The FieldChangedListener is for primarily for * internal use. * - * @see controlP5.Controller#listen(boolean) + * @see Controller#listen(boolean) */ class FieldChangedListener { diff --git a/src/main/java/controlP5/FrameRate.java b/src/main/java/controlP5/FrameRate.java index b816618..881f68d 100755 --- a/src/main/java/controlP5/FrameRate.java +++ b/src/main/java/controlP5/FrameRate.java @@ -1,4 +1,4 @@ -package controlP5; +package main.java.controlp5; /** * controlP5 is a processing gui library. diff --git a/src/main/java/controlP5/Group.java b/src/main/java/controlP5/Group.java index fb661d1..9680e68 100755 --- a/src/main/java/controlP5/Group.java +++ b/src/main/java/controlP5/Group.java @@ -1,4 +1,4 @@ -package controlP5; +package main.java.controlp5; /** * controlP5 is a processing gui library. diff --git a/src/main/java/controlP5/Icon.java b/src/main/java/controlP5/Icon.java index efb8781..ccaa6a3 100644 --- a/src/main/java/controlP5/Icon.java +++ b/src/main/java/controlP5/Icon.java @@ -1,4 +1,4 @@ -package controlP5; +package main.java.controlp5; /** * controlP5 is a processing gui library. @@ -142,7 +142,7 @@ public class Icon extends Controller< Icon > { /** * If the Icon acts as a switch, setOn will turn on * the switch. Use - * {@link controlP5.Icon#setSwitch(boolean) setSwitch} + * {@link Icon#setSwitch(boolean) setSwitch} * to turn a Icon into a Switch. */ public Icon setOn( ) { @@ -157,7 +157,7 @@ public class Icon extends Controller< Icon > { /** * If the Icon acts as a switch, setOff will turn off * the switch. Use - * {@link controlP5.Icon#setSwitch(boolean) setSwitch} + * {@link Icon#setSwitch(boolean) setSwitch} * to turn a Icon into a Switch. */ public Icon setOff( ) { diff --git a/src/main/java/controlP5/Knob.java b/src/main/java/controlP5/Knob.java index 880f1fe..2a766af 100755 --- a/src/main/java/controlP5/Knob.java +++ b/src/main/java/controlP5/Knob.java @@ -1,4 +1,4 @@ -package controlP5; +package main.java.controlp5; /** * controlP5 is a processing gui library. @@ -82,7 +82,7 @@ public class Knob extends Controller< Knob > { setMax( theMax ); _myDiameter = theWidth; _myRadius = _myDiameter / 2; - _myUnit = ( _myMax - _myMin ) / ControlP5Constants.TWO_PI; + _myUnit = ( _myMax - _myMin ) / TWO_PI; startAngle = HALF_PI + PI * 0.25f; angleRange = PI + HALF_PI; myAngle = startAngle; @@ -450,16 +450,16 @@ public class Knob extends Controller< Knob > { theGraphics.popMatrix( ); int c = isActive( ) ? getColor( ).getActive( ) : getColor( ).getForeground( ); theGraphics.pushMatrix( ); - if ( getViewStyle( ) == Controller.LINE ) { + if ( getViewStyle( ) == LINE) { theGraphics.rotate( getAngle( ) ); theGraphics.stroke( c ); theGraphics.strokeWeight( getTickMarkWeight( ) ); theGraphics.line( 0 , 0 , getRadius( ) , 0 ); - } else if ( getViewStyle( ) == Controller.ELLIPSE ) { + } else if ( getViewStyle( ) == ELLIPSE) { theGraphics.rotate( getAngle( ) ); theGraphics.fill( c ); theGraphics.ellipse( getRadius( ) * 0.75f , 0 , getRadius( ) * 0.2f , getRadius( ) * 0.2f ); - } else if ( getViewStyle( ) == Controller.ARC ) { + } else if ( getViewStyle( ) == ARC) { theGraphics.fill( c ); theGraphics.arc( 0 , 0 , getRadius( ) * 1.8f , getRadius( ) * 1.8f , getStartAngle( ) , getAngle( ) + ( ( getStartAngle( ) == getAngle( ) ) ? 0.06f : 0f ) ); theGraphics.fill( theGraphics.red( getColor( ).getBackground( ) ) , theGraphics.green( getColor( ).getBackground( ) ) , theGraphics.blue( getColor( ).getBackground( ) ) , 255 ); @@ -494,7 +494,7 @@ public class Knob extends Controller< Knob > { theGraphics.translate( -getWidth( ) / 2 , -getHeight( ) / 2 ); if ( isLabelVisible ) { _myCaptionLabel.draw( theGraphics , 0 , 0 , theController ); - _myValueLabel.align( ControlP5.CENTER , ControlP5.CENTER ); + _myValueLabel.align(CENTER, CENTER); _myValueLabel.draw( theGraphics , 0 , 0 , theController ); } theGraphics.popMatrix( ); @@ -569,4 +569,4 @@ public class Knob extends Controller< Knob > { /* (non-Javadoc) * - * @see controlP5.Controller#updateInternalEvents(processing.core.PApplet) */ + * @see main.java.controlp5.Controller#updateInternalEvents(processing.core.PApplet) */ diff --git a/src/main/java/controlP5/Label.java b/src/main/java/controlP5/Label.java index a7f75b8..9cb0e7b 100755 --- a/src/main/java/controlP5/Label.java +++ b/src/main/java/controlP5/Label.java @@ -1,4 +1,4 @@ -package controlP5; +package main.java.controlp5; /** * controlP5 is a processing gui library. @@ -35,7 +35,7 @@ import processing.core.PGraphics; * ControlFonts. * * - * @see controlP5.ControlFont + * @see ControlFont * @example controllers/ControlP5Textlabel * */ diff --git a/src/main/java/controlP5/ListBox.java b/src/main/java/controlP5/ListBox.java index 57c8a05..51e234f 100755 --- a/src/main/java/controlP5/ListBox.java +++ b/src/main/java/controlP5/ListBox.java @@ -1,4 +1,4 @@ -package controlP5; +package main.java.controlp5; /** * controlP5 is a processing gui library. @@ -25,7 +25,7 @@ package controlP5; * */ -import static controlP5.ControlP5.b; +import static main.java.controlp5.ControlP5.b; import java.util.ArrayList; import java.util.Arrays; @@ -41,7 +41,7 @@ import processing.event.KeyEvent; /** * A ListBox is a list of vertically aligned items which can be scrolled if required. * - * @see controlP5.ListBox + * @see ListBox * @example controllers/ControlP5listBox */ public class ListBox extends Controller< ListBox > implements ControlListener { @@ -415,7 +415,7 @@ public class ListBox extends Controller< ListBox > implements ControlListener { for ( int i = m0 ; i < m1 ; i++ ) { Map< String , Object > item = c.items.get( i ); CColor color = ( CColor ) item.get( "color" ); - g.fill( ( b( item.get( "state" ) ) ) ? color.getActive( ) : ( i == c.itemHover ) ? ( c.isMousePressed ? color.getActive( ) : color.getForeground( ) ) : color.getBackground( ) ); + g.fill( ( ControlP5.b( item.get( "state" ) ) ) ? color.getActive( ) : ( i == c.itemHover ) ? ( c.isMousePressed ? color.getActive( ) : color.getForeground( ) ) : color.getBackground( ) ); g.rect( 0 , 0 , c.getWidth( ) , c.itemHeight - 1 ); c.getValueLabel( ).align( PApplet.LEFT , PApplet.CENTER ).set( item.get( "text" ).toString( ) ).draw( g , 4 , c.itemHeight / 2 ); g.translate( 0 , c.itemHeight ); @@ -446,19 +446,19 @@ public class ListBox extends Controller< ListBox > implements ControlListener { public void keyEvent( KeyEvent theKeyEvent ) { if ( isInside && theKeyEvent.getAction( ) == KeyEvent.PRESS ) { switch ( theKeyEvent.getKeyCode( ) ) { - case ( ControlP5.UP ): + case (UP): scroll( theKeyEvent.isAltDown( ) ? -itemIndexOffset : theKeyEvent.isShiftDown( ) ? -10 : -1 ); updateHover( ); break; - case ( ControlP5.DOWN ): + case (DOWN): scroll( theKeyEvent.isAltDown( ) ? items.size( ) - itemRange : theKeyEvent.isShiftDown( ) ? 10 : 1 ); updateHover( ); break; - case ( ControlP5.LEFT ): + case (LEFT): break; - case ( ControlP5.RIGHT ): + case (RIGHT): break; - case ( ControlP5.ENTER ): + case (ENTER): onRelease( ); break; } diff --git a/src/main/java/controlP5/Matrix.java b/src/main/java/controlP5/Matrix.java index 57e58b4..31f3f8c 100755 --- a/src/main/java/controlP5/Matrix.java +++ b/src/main/java/controlP5/Matrix.java @@ -1,4 +1,4 @@ -package controlP5; +package main.java.controlp5; /** * controlP5 is a processing gui library. @@ -81,7 +81,7 @@ public class Matrix extends Controller< Matrix > { _myPlug = cp5.papplet; _myPlugName = getName( ); - _myCaptionLabel.align( ControlP5.LEFT , ControlP5.BOTTOM_OUTSIDE ); + _myCaptionLabel.align(LEFT, BOTTOM_OUTSIDE); _myCaptionLabel.setPadding( 0 , 4 ); runThread( ); } diff --git a/src/main/java/controlP5/MultiList.java b/src/main/java/controlP5/MultiList.java index e9c3237..6641592 100755 --- a/src/main/java/controlP5/MultiList.java +++ b/src/main/java/controlP5/MultiList.java @@ -1,4 +1,4 @@ -package controlP5; +package main.java.controlp5; /** * controlP5 is a processing gui library. @@ -47,7 +47,7 @@ public class MultiList extends Controller< MultiList > implements MultiListInter protected boolean isUpdateLocation = false; protected MultiListInterface mostRecent; protected int[] _myRect = new int[ 4 ]; - protected int _myDirection = ControlP5Constants.RIGHT; + protected int _myDirection = RIGHT; public int closeDelay = 30; protected int _myDefaultButtonHeight = 10; protected boolean isUpperCase = true; @@ -164,7 +164,7 @@ public class MultiList extends Controller< MultiList > implements MultiListInter if ( theEvent.getController( ) instanceof MultiListButton ) { _myValue = theEvent.getController( ).getValue( ); ControlEvent myEvent = new ControlEvent( this ); - cp5.getControlBroadcaster( ).broadcast( myEvent , ControlP5Constants.FLOAT ); + cp5.getControlBroadcaster( ).broadcast( myEvent , FLOAT); } } diff --git a/src/main/java/controlP5/MultiListButton.java b/src/main/java/controlP5/MultiListButton.java index 852189a..2ad286c 100755 --- a/src/main/java/controlP5/MultiListButton.java +++ b/src/main/java/controlP5/MultiListButton.java @@ -1,4 +1,4 @@ -package controlP5; +package main.java.controlp5; /** * controlP5 is a processing gui library. @@ -25,9 +25,6 @@ package controlP5; * */ -import java.util.ArrayList; -import java.util.List; - /** * Used by MultiList. * @@ -41,7 +38,7 @@ public class MultiListButton extends Button implements MultiListInterface { private Controller parent; private MultiList root; private int[] _myRect = new int[ 4 ]; - protected int _myDirection = ControlP5Constants.RIGHT; + protected int _myDirection = RIGHT; private boolean isUpperCase = true; /** diff --git a/src/main/java/controlP5/MultiListInterface.java b/src/main/java/controlP5/MultiListInterface.java index 3509731..78fcd1f 100755 --- a/src/main/java/controlP5/MultiListInterface.java +++ b/src/main/java/controlP5/MultiListInterface.java @@ -1,4 +1,4 @@ -package controlP5; +package main.java.controlp5; /** * controlP5 is a processing gui library. diff --git a/src/main/java/controlP5/MultilineTextfield.java b/src/main/java/controlP5/MultilineTextfield.java index 41eb2a9..54ee4f3 100644 --- a/src/main/java/controlP5/MultilineTextfield.java +++ b/src/main/java/controlP5/MultilineTextfield.java @@ -1,4 +1,4 @@ -package controlP5; +package main.java.controlp5; import processing.event.KeyEvent; diff --git a/src/main/java/controlP5/Numberbox.java b/src/main/java/controlP5/Numberbox.java index 313580b..ee763f1 100755 --- a/src/main/java/controlP5/Numberbox.java +++ b/src/main/java/controlP5/Numberbox.java @@ -1,4 +1,4 @@ -package controlP5; +package main.java.controlp5; /** * controlP5 is a processing gui library. @@ -113,7 +113,7 @@ public class Numberbox extends Controller< Numberbox > { /* (non-Javadoc) * - * @see controlP5.Controller#mousePressed() */ + * @see main.java.controlp5.Controller#mousePressed() */ @Override @ControlP5.Invisible public void mousePressed( ) { @@ -122,7 +122,7 @@ public class Numberbox extends Controller< Numberbox > { /* (non-Javadoc) * - * @see controlP5.Controller#mouseReleased() */ + * @see main.java.controlp5.Controller#mouseReleased() */ @Override @ControlP5.Invisible public void mouseReleased( ) { @@ -131,7 +131,7 @@ public class Numberbox extends Controller< Numberbox > { /* (non-Javadoc) * - * @see controlP5.Controller#mouseReleasedOutside() */ + * @see main.java.controlp5.Controller#mouseReleasedOutside() */ @Override @ControlP5.Invisible public void mouseReleasedOutside( ) { @@ -237,7 +237,7 @@ public class Numberbox extends Controller< Numberbox > { /* (non-Javadoc) * - * @see controlP5.Controller#update() */ + * @see main.java.controlp5.Controller#update() */ @Override public Numberbox update( ) { return setValue( _myValue ); @@ -290,7 +290,7 @@ public class Numberbox extends Controller< Numberbox > { } /** - * @see controlP5.Numberbox#setScrollSensitivity(float) + * @see Numberbox#setScrollSensitivity(float) * * @param theValue * @return diff --git a/src/main/java/controlP5/Pad.java b/src/main/java/controlP5/Pad.java index 382cd3d..e6233f7 100755 --- a/src/main/java/controlP5/Pad.java +++ b/src/main/java/controlP5/Pad.java @@ -1,4 +1,4 @@ -package controlP5; +package main.java.controlp5; /** * controlP5 is a processing gui library. diff --git a/src/main/java/controlP5/Pointer.java b/src/main/java/controlP5/Pointer.java index c8ba02b..e7740f6 100755 --- a/src/main/java/controlP5/Pointer.java +++ b/src/main/java/controlP5/Pointer.java @@ -1,4 +1,4 @@ -package controlP5; +package main.java.controlp5; /** * controlP5 is a processing gui library. diff --git a/src/main/java/controlP5/Println.java b/src/main/java/controlP5/Println.java index 787866e..ea3ef53 100755 --- a/src/main/java/controlP5/Println.java +++ b/src/main/java/controlP5/Println.java @@ -1,5 +1,5 @@ -package controlP5; +package main.java.controlp5; /** * controlP5 is a processing gui library. diff --git a/src/main/java/controlP5/Radio.java b/src/main/java/controlP5/Radio.java index 31c1c91..92cf28a 100755 --- a/src/main/java/controlP5/Radio.java +++ b/src/main/java/controlP5/Radio.java @@ -1,4 +1,4 @@ -package controlP5; +package main.java.controlp5; /** * controlP5 is a processing gui library. diff --git a/src/main/java/controlP5/RadioButton.java b/src/main/java/controlP5/RadioButton.java index e2aff5a..b1bd697 100755 --- a/src/main/java/controlP5/RadioButton.java +++ b/src/main/java/controlP5/RadioButton.java @@ -1,4 +1,4 @@ -package controlP5; +package main.java.controlp5; /** * controlP5 is a processing gui library. @@ -107,7 +107,7 @@ public class RadioButton extends ControlGroup< RadioButton > { public RadioButton addItem( final String theName , final float theValue ) { Toggle t = cp5.addToggle( theName , 0 , 0 , itemWidth , itemHeight ); t.getCaptionLabel( ).align( alignX , alignY ).setPadding( _myPaddingX , _myPaddingY ); - t.setMode( ControlP5.DEFAULT ); + t.setMode(DEFAULT); t.setImages( images[ 0 ] , images[ 1 ] , images[ 2 ] ); t.setSize( images[ 0 ] ); addItem( t , theValue ); @@ -564,7 +564,7 @@ public class RadioButton extends ControlGroup< RadioButton > { } if ( theBroadcastFlag ) { ControlEvent myEvent = new ControlEvent( this ); - cp5.getControlBroadcaster( ).broadcast( myEvent , ControlP5Constants.FLOAT ); + cp5.getControlBroadcaster( ).broadcast( myEvent , FLOAT); } } diff --git a/src/main/java/controlP5/Range.java b/src/main/java/controlP5/Range.java index 255e28c..81c1f49 100755 --- a/src/main/java/controlP5/Range.java +++ b/src/main/java/controlP5/Range.java @@ -1,4 +1,4 @@ -package controlP5; +package main.java.controlp5; /** * controlP5 is a processing gui library. @@ -31,7 +31,6 @@ import java.util.logging.Level; import processing.core.PApplet; import processing.core.PFont; import processing.core.PGraphics; -import controlP5.ControlP5.Invisible; /** * A range slider works just like a slider but can be adjusted on both ends. @@ -179,7 +178,8 @@ public class Range extends Controller< Range > { return this; } - @Override @Invisible public void mousePressed( ) { + @Override @ControlP5.Invisible + public void mousePressed( ) { final float posX = x( _myParent.getAbsolutePosition( ) ) + x( position ); final float posY = y( _myParent.getAbsolutePosition( ) ) + y( position ); diff --git a/src/main/java/controlP5/ScrollableList.java b/src/main/java/controlP5/ScrollableList.java index eba6931..fd219ac 100644 --- a/src/main/java/controlP5/ScrollableList.java +++ b/src/main/java/controlP5/ScrollableList.java @@ -1,4 +1,4 @@ -package controlP5; +package main.java.controlp5; /** * controlP5 is a processing gui library. @@ -25,7 +25,7 @@ package controlP5; * */ -import static controlP5.ControlP5.b; +import static main.java.controlp5.ControlP5.b; import java.util.ArrayList; import java.util.Arrays; @@ -460,19 +460,19 @@ public class ScrollableList extends Controller< ScrollableList > implements Cont public void keyEvent( KeyEvent theKeyEvent ) { if ( isInside && theKeyEvent.getAction( ) == KeyEvent.PRESS ) { switch ( theKeyEvent.getKeyCode( ) ) { - case ( ControlP5.UP ): + case (UP): scroll( theKeyEvent.isAltDown( ) ? -itemIndexOffset : theKeyEvent.isShiftDown( ) ? -10 : -1 ); updateHover( ); break; - case ( ControlP5.DOWN ): + case (DOWN): scroll( theKeyEvent.isAltDown( ) ? items.size( ) - itemRange : theKeyEvent.isShiftDown( ) ? 10 : 1 ); updateHover( ); break; - case ( ControlP5.LEFT ): + case (LEFT): break; - case ( ControlP5.RIGHT ): + case (RIGHT): break; - case ( ControlP5.ENTER ): + case (ENTER): onRelease( ); break; } diff --git a/src/main/java/controlP5/Slider.java b/src/main/java/controlP5/Slider.java index 4a55331..cea4232 100755 --- a/src/main/java/controlP5/Slider.java +++ b/src/main/java/controlP5/Slider.java @@ -1,4 +1,4 @@ -package controlP5; +package main.java.controlp5; /** * controlP5 is a processing gui library. @@ -636,7 +636,7 @@ public class Slider extends Controller< Slider > { } /** - * @see controlP5.Slider#setScrollSensitivity(float) + * @see Slider#setScrollSensitivity(float) * * @param theValue * @return Slider diff --git a/src/main/java/controlP5/Slider2D.java b/src/main/java/controlP5/Slider2D.java index 6980bc7..4312403 100755 --- a/src/main/java/controlP5/Slider2D.java +++ b/src/main/java/controlP5/Slider2D.java @@ -1,4 +1,4 @@ -package controlP5; +package main.java.controlp5; /** * controlP5 is a processing gui library. @@ -72,7 +72,7 @@ public class Slider2D extends Controller< Slider2D > { /* (non-Javadoc) * - * @see controlP5.Controller#updateInternalEvents(processing.core.PApplet) */ + * @see main.java.controlp5.Controller#updateInternalEvents(processing.core.PApplet) */ @ControlP5.Invisible public Slider2D updateInternalEvents( PApplet theApplet ) { if ( isInside( ) ) { if ( !cp5.isAltDown( ) ) { @@ -188,7 +188,7 @@ public class Slider2D extends Controller< Slider2D > { /* (non-Javadoc) TODO see https://forum.processing.org/topic/controlp5-slider2d-questions * - * @see controlP5.Controller#setArrayValue(float[]) */ + * @see main.java.controlp5.Controller#setArrayValue(float[]) */ @Override public Slider2D setArrayValue( float[] theArray ) { _myArrayValue = theArray; float rX = ( getWidth( ) - cursorWidth ) / ( float ) ( _myMaxX - _myMinX ); @@ -212,7 +212,7 @@ public class Slider2D extends Controller< Slider2D > { /* (non-Javadoc) * - * @see controlP5.Controller#setValue(float) */ + * @see main.java.controlp5.Controller#setValue(float) */ public Slider2D setValue( float theValue ) { _myArrayValue[ 0 ] = cursorX / ( ( float ) ( getWidth( ) - cursorWidth ) / ( float ) getWidth( ) ); _myArrayValue[ 1 ] = cursorY / ( ( float ) ( getHeight( ) - cursorHeight ) / ( float ) getHeight( ) ); diff --git a/src/main/java/controlP5/Spacer.java b/src/main/java/controlP5/Spacer.java index f7b384a..034a68c 100644 --- a/src/main/java/controlP5/Spacer.java +++ b/src/main/java/controlP5/Spacer.java @@ -1,4 +1,4 @@ -package controlP5; +package main.java.controlp5; /** * controlP5 is a processing gui library. diff --git a/src/main/java/controlP5/Tab.java b/src/main/java/controlP5/Tab.java index 9309e14..2460919 100755 --- a/src/main/java/controlP5/Tab.java +++ b/src/main/java/controlP5/Tab.java @@ -1,4 +1,4 @@ -package controlP5; +package main.java.controlp5; /** * controlP5 is a processing gui library. @@ -30,7 +30,7 @@ import processing.core.PGraphics; /** * Tabs are used to organize controllers. Tabs are arranged horizontally from the top-left corner by * default, Tab extends ControllerGroup, for more available methods see the ControllerGroup - * documentation. Reposition tabs with {@link controlP5.ControlWindow#setPositionOfTabs(int, int)} + * documentation. Reposition tabs with {@link ControlWindow#setPositionOfTabs(int, int)} * * @example controllers/ControlP5tab * @nosuperclasses ControllerGroup ControllerGroup @@ -137,7 +137,7 @@ public class Tab extends ControllerGroup< Tab > { @ControlP5.Invisible public void mousePressed( ) { cp5.getWindow( ).activateTab( this ); if ( isEventActive ) { - cp5.getControlBroadcaster( ).broadcast( new ControlEvent( this ) , ControlP5Constants.METHOD ); + cp5.getControlBroadcaster( ).broadcast( new ControlEvent( this ) , METHOD); } } diff --git a/src/main/java/controlP5/Textarea.java b/src/main/java/controlP5/Textarea.java index fb01036..e1d5930 100755 --- a/src/main/java/controlP5/Textarea.java +++ b/src/main/java/controlP5/Textarea.java @@ -1,4 +1,4 @@ -package controlP5; +package main.java.controlp5; /** * controlP5 is a processing gui library. diff --git a/src/main/java/controlP5/Textfield.java b/src/main/java/controlP5/Textfield.java index 8979dfc..61c7c07 100755 --- a/src/main/java/controlP5/Textfield.java +++ b/src/main/java/controlP5/Textfield.java @@ -1,4 +1,4 @@ -package controlP5; +package main.java.controlp5; /** * controlP5 is a processing gui library. @@ -31,10 +31,8 @@ import java.util.LinkedList; import java.util.List; import java.util.Map; -import controlP5.events.ReleasedOutsideListener; -import controlP5.textfield.TextfieldCommand; +import main.java.controlp5.events.ReleasedOutsideListener; import processing.core.PApplet; -import processing.core.PFont; import processing.core.PGraphics; import processing.event.Event; import processing.event.KeyEvent; @@ -114,7 +112,7 @@ public class Textfield extends Controller< Textfield > implements ReleasedOutsid _myCaptionLabel = new Label( cp5 , theName , 0 , 0 , color.getCaptionLabel( ) ); _myValueLabel.setFont( cp5.controlFont == cp5.defaultFont ? cp5.defaultFontForText : cp5.controlFont ); - _myCaptionLabel.align( ControlP5.LEFT , ControlP5.BOTTOM_OUTSIDE ); + _myCaptionLabel.align(LEFT, BOTTOM_OUTSIDE); _myCaptionLabel.setPaddingX( 0 ); _myBroadcastType = STRING; diff --git a/src/main/java/controlP5/TextfieldCommand.java b/src/main/java/controlP5/TextfieldCommand.java index 4cbdb3a..b8e586f 100644 --- a/src/main/java/controlP5/TextfieldCommand.java +++ b/src/main/java/controlP5/TextfieldCommand.java @@ -1,4 +1,4 @@ -package controlP5.textfield; +package main.java.controlp5; public interface TextfieldCommand { void execute( ); diff --git a/src/main/java/controlP5/Textlabel.java b/src/main/java/controlP5/Textlabel.java index f0742ba..89a0285 100755 --- a/src/main/java/controlP5/Textlabel.java +++ b/src/main/java/controlP5/Textlabel.java @@ -1,4 +1,4 @@ -package controlP5; +package main.java.controlp5; /** * controlP5 is a processing gui library. diff --git a/src/main/java/controlP5/TickMark.java b/src/main/java/controlP5/TickMark.java index 2ff66fb..b869aec 100755 --- a/src/main/java/controlP5/TickMark.java +++ b/src/main/java/controlP5/TickMark.java @@ -1,4 +1,4 @@ -package controlP5; +package main.java.controlp5; /** * controlP5 is a processing gui library. diff --git a/src/main/java/controlP5/Toggle.java b/src/main/java/controlP5/Toggle.java index 490791d..c55147b 100755 --- a/src/main/java/controlP5/Toggle.java +++ b/src/main/java/controlP5/Toggle.java @@ -1,4 +1,4 @@ -package controlP5; +package main.java.controlp5; /** * controlP5 is a processing gui library. diff --git a/src/main/java/controlP5/Tooltip.java b/src/main/java/controlP5/Tooltip.java index 041d2a1..7afeece 100755 --- a/src/main/java/controlP5/Tooltip.java +++ b/src/main/java/controlP5/Tooltip.java @@ -1,4 +1,4 @@ -package controlP5; +package main.java.controlp5; /** * controlP5 is a processing gui library. @@ -187,7 +187,7 @@ public class Tooltip { * view class can be found at the bottom of the Tooltip * source. * - * @see controlP5.ControllerView + * @see ControllerView * @param theDisplay * @return Tooltip */ @@ -248,8 +248,8 @@ public class Tooltip { * any effect without changing the default display to a * custom ControllerView. * - * @see controlP5.ControllerView - * @see controlP5.Tooltip#setDisplay(ControllerView) + * @see ControllerView + * @see Tooltip#setDisplay(ControllerView) * @return Tooltip */ public Tooltip setWidth( int theWidth ) { @@ -263,7 +263,7 @@ public class Tooltip { } /** - * @see controlP5.Tooltip#setWidth(int) + * @see Tooltip#setWidth(int) * @param theHeight * @return Tooltip */ @@ -294,7 +294,7 @@ public class Tooltip { * controller. to disable a tooltip for aparticular * controller, used unregister(Controller) * - * @see controlP5.Tooltip#unregister(Controller) + * @see Tooltip#unregister(Controller) * @return Tooltip */ public Tooltip disable( ) { diff --git a/src/main/java/controlP5/changeLog.txt b/src/main/java/controlP5/changeLog.txt index 5b318b4..6f52652 100755 --- a/src/main/java/controlP5/changeLog.txt +++ b/src/main/java/controlP5/changeLog.txt @@ -14,11 +14,11 @@ 2014-09-08 Andreas Schlegel - * src controlP5.Icon: + * src main.java.controlp5.Icon: adding Icon class, acts like a button; can be used with images and font-icons from "Font Awesome". - * src controlP5.Button: + * src main.java.controlp5.Button: when theButton acts as a switch (setSwitch(true)), the corresponding method inside a sketch should use type boolean as argument instead of float; a java.lang.IllegalArgumentException will be thrown in case of a float argument @@ -26,14 +26,14 @@ 2014-08-28 Andreas Schlegel - * src controlP5.Background: + * src main.java.controlp5.Background: adding Background class, a convenience class for grouping controllers with the top bar disabled by default. 2014-07-21 Andreas Schlegel - * src controlP5.Textfield: + * src main.java.controlp5.Textfield: making use of a graphics buffer now, simplifies cursor position calculation and prevents from throwing an ArrayIndexOutOfBoundsException which could occasionally happen with previous versions. @@ -46,7 +46,7 @@ * removing all deprecated methods - * src controlP5.ListBox, controlP5.DropdownList: + * src main.java.controlp5.ListBox, main.java.controlp5.DropdownList: Due to changes to and deprecation of DropdownList and ListBox, both share the same source code as ScrollableList. Consequently some functionality got lost though this should be marginal. In case of any issues occuring due to these changes, please @@ -63,14 +63,14 @@ * preparing for next release. - * src controlP5.ListBox, controlP5.DropdownList: + * src main.java.controlp5.ListBox, main.java.controlp5.DropdownList: deprecated, use ScrollableList instead. - * src controlP5.ControlP5Legacy: + * src main.java.controlp5.ControlP5Legacy: repository of functions only kept for backwards compatibility but it is not encouraged to use the anymore. Use ControlP5Base instead. - * src controlP5.Controller: + * src main.java.controlp5.Controller: adding onEnter, onLeave, onDrag, onStartDrag, onEndDrag, onWheel, onMove, onClick, onPress, onDoublePress, onRelease, onReleaseOutside, onChange to register callbacks for specific events. This is not implemented for classes extending ControllerGroup. @@ -80,7 +80,7 @@ * version 2.1.5 - * src controlP5.ControllerProperties: + * src main.java.controlp5.ControllerProperties: removing XML format. adding JSON format, JSON format will be the default format instead of the Java Serialization format. @@ -88,7 +88,7 @@ * version 2.1.3 - * src controlP5.ListBox: + * src main.java.controlp5.ListBox: now extends Controller instead of ControlGroup. @@ -109,10 +109,10 @@ only automatic function detection and binding is available. But then why not variables? See my request here: https://processing-js.lighthouseapp.com/projects/41284/tickets/1972-feature-request-access-sketch-global-variables-from-library - * src controlP5.Slider2D: + * src main.java.controlp5.Slider2D: changed size of cursor, changed color handling - * src controlP5.Button: + * src main.java.controlp5.Button: alignment of caption label changed to CENTER,CENTER * adding PGraphics support instead of only rendering into PApplet directly @@ -125,13 +125,13 @@ * version 2.0.4 - * src controlP5.Textfield.java,controlP5.ListBox.java, - controlP5.DropdownList.java,controlP5.ControlWindow.java - controlP5.ControlP5Base.java: + * src main.java.controlp5.Textfield.java,main.java.controlp5.ListBox.java, + main.java.controlp5.DropdownList.java,main.java.controlp5.ControlWindow.java + main.java.controlp5.ControlP5Base.java: adjusting to processing's KeyEvent final variable name changes see issue 69 https://code.google.com/p/controlp5/issues/detail?id=69 (thanks jeff) - * src controlP5.Textfield.java: + * src main.java.controlp5.Textfield.java: reimplemented password mode (thanks jeff) @@ -140,7 +140,7 @@ * version 2.0.3 - * src controlP5.Controller.java: + * src main.java.controlp5.Controller.java: Automatic (PApplet) field recognition for Slider, Knob, Numberbox, Toggle adjusted. @@ -156,7 +156,7 @@ * src controlP5.BitFontRenderer.java: removed - * src controlP5.BitFont.java: + * src main.java.controlp5.BitFont.java: added, see above. @@ -179,12 +179,12 @@ from this version onwards Android is supported - * src controlP5.Println.java: + * src main.java.controlp5.Println.java: new class added a console logger that captures the System.out stream and displays it using a Textarea - * src controlP5.FrameRate.java: + * src main.java.controlp5.FrameRate.java: new class added a Textlabel that displays the current or average framerate based on update interval @@ -193,15 +193,15 @@ using Base64 encoded bitfont source instead of loading gif textures - * src controlP5.Knob.java: + * src main.java.controlp5.Knob.java: adding value label, ARC is default view now. - * src controlP5.Matrix.java: + * src main.java.controlp5.Matrix.java: adding play(), pause(), stop(), isPlaying(), trigger(int) - * src controlP5.Controller.java: + * src main.java.controlp5.Controller.java: all ControllerSprite references (previously deprecated) have been removed @@ -210,7 +210,7 @@ * src controlP5.ControlP5IOHandler.java: - obsolete, removed, all static method transfered to controlP5.CP.java which will handle static method + obsolete, removed, all static method transfered to main.java.controlp5.CP.java which will handle static method * src controlP5.ControlWindowKeyListener.java: @@ -221,7 +221,7 @@ obsolete, removed, currently there is no support for separate frames other than the main window due to removing java.awt dependencies - * src controlP5.ControlWindow.java: + * src main.java.controlp5.ControlWindow.java: removed mouseWheelMoved(MouseWheelEvent e) due to removal of java.awt dependencies how to use an extra window, see example extra/ControlP5frame @@ -235,7 +235,7 @@ * src controlP5.ControlCanvas.java: - obsolete, removed, use controlP5.Canvas.java instead. + obsolete, removed, use main.java.controlp5.Canvas.java instead. 2012-09-07 Andreas Schlegel @@ -253,27 +253,27 @@ * version 0.7.6 - * src controlP5.Textfield.java: + * src main.java.controlp5.Textfield.java: fixing special character issue with e.g. �,�,�,�, etc. backspace, left arrow, right arrow now respond when pressed longer added isFocus() implemented issue 56 http://code.google.com/p/controlp5/issues/detail?id=56 , thanks jeff - * src controlP5.ControllerAutomator.java: + * src main.java.controlp5.ControllerAutomator.java: fixed annotation mapping for methods added list support for methods - * src controlP5.CColor.java: + * src main.java.controlp5.CColor.java: removing alpha masking - * src controlP5.MultiList.java: + * src main.java.controlp5.MultiList.java: Conflict with moving a Multilist from one to another tab removed field _myChildren. MultiListButtons are now store in the Controller's sublements filed. - * src controlP5.ControllerInterface.java: + * src main.java.controlp5.ControllerInterface.java: adding getArrayValue(int), setArrayValue(int, float), setArrayValue(float[]); - * src controlP5.ControlP5.java: + * src main.java.controlp5.ControlP5.java: adding setBroadcast(boolean) to disable/enable broadcasting of value changes. @@ -282,7 +282,7 @@ * version 0.7.5 - * src controlP5.Controller.java: + * src main.java.controlp5.Controller.java: adding empty methods onPress(), onClick(), onRelease(), onReleaseOutside(), onScroll(int),onMove(),onDrag() for input access when extending a controller. @@ -296,29 +296,29 @@ * version 0.7.3 - * src controlP5.ControlEvent.java: + * src main.java.controlp5.ControlEvent.java: adding getArrayValue(int), returns a float value for a given index, does not check for ArrayIndexOutOfBounds - * src controlP5.Slider.java: + * src main.java.controlp5.Slider.java: issue 47 http://code.google.com/p/controlp5/issues/detail?id=47 fixed - * src controlP5.CheckBox.java, controlP5.RadioButton.java: + * src main.java.controlp5.CheckBox.java, main.java.controlp5.RadioButton.java: issue 41 http://code.google.com/p/controlp5/issues/detail?id=41 fixed - * src controlP5.Chart.java: + * src main.java.controlp5.Chart.java: implemented - * src controlP5.ControlFont.java: + * src main.java.controlp5.ControlFont.java: issue 46 http://code.google.com/p/controlp5/issues/detail?id=46 fixed - * src controlP5.ControlWindow.java: + * src main.java.controlp5.ControlWindow.java: sketches using controlP5 running in the browser as Applet did not work anymore, fixed - * src controlP5.ColorPicker.java: + * src main.java.controlp5.ColorPicker.java: missing implementation reported in http://forum.processing.org/topic/controlp5-how-to-receive-colorpicker-controlevents fixed ColorPicker example has been modified accordingly - * src controlP5.Textfield.java: + * src main.java.controlp5.Textfield.java: issue 44 http://code.google.com/p/controlp5/issues/detail?id=44 fixed * src controlP5.ControlWindowKeyHandler.java: @@ -330,10 +330,10 @@ * version 0.7.0 - * src controlP5.ControllerInterface.java, controlP5.Controller.java,controlP5.ControllerGroup.java: + * src main.java.controlp5.ControllerInterface.java, main.java.controlp5.Controller.java,main.java.controlp5.ControllerGroup.java: adding generic type declaration for object specific method chaining (fluent interface) - * src controlP5.RadioButton.java: + * src main.java.controlp5.RadioButton.java: changed return type for methods addItem from Toggle to RadioButton changed return type for methods setImage from PImage to RadioButton @@ -344,7 +344,7 @@ * version 0.6.9 - * src controlP5.Textarea.java: + * src main.java.controlp5.Textarea.java: included isScrollable() to adapt to ListBox @@ -352,16 +352,16 @@ * version 0.6.8 - * src controlP5.ControllerGroup.java, controlP5.Controller.java: + * src main.java.controlp5.ControllerGroup.java, main.java.controlp5.Controller.java: making addition to isVisible() to check if the parent element is invisible in which case the child element will return false as well although the visible state might be true. this fixes an issue with mousewheel scroll being active for an invisible child controller. The mouseoverlist handling was updated as well. - * src controlP5.Slider.java: + * src main.java.controlp5.Slider.java: Slider will only broadcast when there is a change in value when pressed - * src controlP5.ControlWindow.java: + * src main.java.controlp5.ControlWindow.java: mouseWheelMoved() now only updates the first item in the mouseoverlist and then exits the loop diff --git a/src/main/java/controlP5/events/ReleasedOutsideListener.java b/src/main/java/controlP5/events/ReleasedOutsideListener.java index a5f05dd..cb9c2a9 100644 --- a/src/main/java/controlP5/events/ReleasedOutsideListener.java +++ b/src/main/java/controlP5/events/ReleasedOutsideListener.java @@ -1,4 +1,4 @@ -package controlP5.events; +package main.java.controlp5.events; public interface ReleasedOutsideListener { public void mouseReleasedOutside( ) ; diff --git a/src/main/java/controlP5/layout/ControllerFactory.java b/src/main/java/controlP5/layout/ControllerFactory.java index deb6f1e..5a0f182 100644 --- a/src/main/java/controlP5/layout/ControllerFactory.java +++ b/src/main/java/controlP5/layout/ControllerFactory.java @@ -1,12 +1,11 @@ -package controlP5.layout; +package main.java.controlp5.layout; import controlP5.*; -import controlP5.layout.lang.XMLParser; +import main.java.controlp5.layout.lang.XMLParser; import processing.core.PApplet; import java.lang.reflect.Constructor; import java.util.*; -import java.lang.reflect.*; public class ControllerFactory { private final PApplet applet; diff --git a/src/main/java/controlP5/layout/LayoutBuilder.java b/src/main/java/controlP5/layout/LayoutBuilder.java index ae53c30..c8c970d 100644 --- a/src/main/java/controlP5/layout/LayoutBuilder.java +++ b/src/main/java/controlP5/layout/LayoutBuilder.java @@ -1,10 +1,10 @@ -package controlP5.layout; +package main.java.controlp5.layout; -import controlP5.ControlP5; -import controlP5.layout.lang.XMLBaseVisitor; -import controlP5.layout.lang.XMLLexer; -import controlP5.layout.lang.XMLParser; +import main.java.controlp5.ControlP5; +import main.java.controlp5.layout.lang.XMLBaseVisitor; +import main.java.controlp5.layout.lang.XMLLexer; +import main.java.controlp5.layout.lang.XMLParser; import org.antlr.v4.runtime.*; import org.antlr.v4.runtime.tree.*; import org.antlr.v4.runtime.tree.ParseTreeWalker; diff --git a/src/main/java/controlP5/layout/lang/XMLBaseListener.java b/src/main/java/controlP5/layout/lang/XMLBaseListener.java index 00befed..cc1b35c 100644 --- a/src/main/java/controlP5/layout/lang/XMLBaseListener.java +++ b/src/main/java/controlP5/layout/lang/XMLBaseListener.java @@ -1,5 +1,5 @@ // Generated from XML.g4 by ANTLR 4.13.0 -package controlP5.layout.lang; +package main.java.controlp5.layout.lang; import org.antlr.v4.runtime.ParserRuleContext; import org.antlr.v4.runtime.tree.ErrorNode; diff --git a/src/main/java/controlP5/layout/lang/XMLBaseVisitor.java b/src/main/java/controlP5/layout/lang/XMLBaseVisitor.java index 07fbb5b..c858cfe 100644 --- a/src/main/java/controlP5/layout/lang/XMLBaseVisitor.java +++ b/src/main/java/controlP5/layout/lang/XMLBaseVisitor.java @@ -1,5 +1,5 @@ // Generated from XML.g4 by ANTLR 4.13.0 -package controlP5.layout.lang; +package main.java.controlp5.layout.lang; import org.antlr.v4.runtime.tree.AbstractParseTreeVisitor; /** diff --git a/src/main/java/controlP5/layout/lang/XMLLexer.java b/src/main/java/controlP5/layout/lang/XMLLexer.java index f634b64..80a4f8b 100644 --- a/src/main/java/controlP5/layout/lang/XMLLexer.java +++ b/src/main/java/controlP5/layout/lang/XMLLexer.java @@ -1,5 +1,5 @@ // Generated from XML.g4 by ANTLR 4.13.0 -package controlP5.layout.lang; +package main.java.controlp5.layout.lang; import org.antlr.v4.runtime.Lexer; import org.antlr.v4.runtime.CharStream; import org.antlr.v4.runtime.Token; diff --git a/src/main/java/controlP5/layout/lang/XMLListener.java b/src/main/java/controlP5/layout/lang/XMLListener.java index affbd5b..fab5eb9 100644 --- a/src/main/java/controlP5/layout/lang/XMLListener.java +++ b/src/main/java/controlP5/layout/lang/XMLListener.java @@ -1,5 +1,5 @@ // Generated from XML.g4 by ANTLR 4.13.0 -package controlP5.layout.lang; +package main.java.controlp5.layout.lang; import org.antlr.v4.runtime.tree.ParseTreeListener; /** diff --git a/src/main/java/controlP5/layout/lang/XMLParser.java b/src/main/java/controlP5/layout/lang/XMLParser.java index 0e79aa2..b8a3e5b 100644 --- a/src/main/java/controlP5/layout/lang/XMLParser.java +++ b/src/main/java/controlP5/layout/lang/XMLParser.java @@ -1,13 +1,10 @@ // Generated from XML.g4 by ANTLR 4.13.0 -package controlP5.layout.lang; +package main.java.controlp5.layout.lang; import org.antlr.v4.runtime.atn.*; import org.antlr.v4.runtime.dfa.DFA; import org.antlr.v4.runtime.*; -import org.antlr.v4.runtime.misc.*; import org.antlr.v4.runtime.tree.*; import java.util.List; -import java.util.Iterator; -import java.util.ArrayList; @SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast", "CheckReturnValue"}) public class XMLParser extends Parser { diff --git a/src/main/java/controlP5/layout/lang/XMLVisitor.java b/src/main/java/controlP5/layout/lang/XMLVisitor.java index 4b8fd76..04189a6 100644 --- a/src/main/java/controlP5/layout/lang/XMLVisitor.java +++ b/src/main/java/controlP5/layout/lang/XMLVisitor.java @@ -1,5 +1,5 @@ // Generated from XML.g4 by ANTLR 4.13.0 -package controlP5.layout.lang; +package main.java.controlp5.layout.lang; import org.antlr.v4.runtime.tree.ParseTreeVisitor; /** diff --git a/src/main/java/sketch/Sketch.java b/src/main/java/sketch/Sketch.java index 5541f71..4872537 100644 --- a/src/main/java/sketch/Sketch.java +++ b/src/main/java/sketch/Sketch.java @@ -1,13 +1,16 @@ -package sketch; +package main.java.sketch; -import controlP5.*; + +import main.java.controlp5.Button; +import main.java.controlp5.ControlP5; +import main.java.controlp5.MultilineTextfield; import processing.core.PApplet; public class Sketch extends PApplet { static public void main (String[] args){ - PApplet.main("sketch.Sketch"); + PApplet.main("main.java.sketch.Sketch"); } ControlP5 cp5; diff --git a/src/test/java/LayoutTests.java b/src/test/tests/LayoutTests.java similarity index 100% rename from src/test/java/LayoutTests.java rename to src/test/tests/LayoutTests.java diff --git a/target/classes/main/java/controlp5/Accordion.class b/target/classes/main/java/controlp5/Accordion.class new file mode 100644 index 0000000000000000000000000000000000000000..503df44e95ef5fcb93187302a43688257540b5ff GIT binary patch literal 7311 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 literal 0 HcmV?d00001 diff --git a/target/classes/main/java/controlp5/Background.class b/target/classes/main/java/controlp5/Background.class new file mode 100644 index 0000000000000000000000000000000000000000..a3fcfb029aaf267fe4fd407822650cbbf3bcfefe GIT binary patch literal 1115 zcma)5OK%cU7(Ewgr^QheJNRy)6@_Ul8(BfRC`KhAl@u+yF!2Htm^#dm>0qM&$_-6i z_yhb=#&d@jXi6rs;C`=jzUTb;`|CG=m)K7thPZ}=juos5WQWprOQ-UiEOk9M@I7Z# zF4d;e8{Zp`1XioIYX=7cp9_tM=w`VR<#sGTkEZog9JuXvKg8rC%= zb=-h1u(>SNq3nL`vnsbIpbhMvbtrv-jY4sO^j+uF>IRkg2llHtQ#x+rjzId%3g-Bl z=Xit~h58b#g5A}z0fT7>YuP_6flPsAUQZ;DsChm5Qw`g-j>f}|<-eC5hn951>q_TD z`nJ+9jEP`ipKtYqnvcT3-#4Lb-bpo2wx7C>J*Z#k5!Eq)(ewi$UVm-(yafhxOY_gxu`eHQU068E1srf3%y zb>++iUPVnNywU2?h=tv#s*^2m?02o#w%T-R?tG!9h#XHS#tQ^EJoTwj%TPO~eT{G4 z+}+zZ62^+LYG~&W<^)>XOy8W~R@+pz3DWJK428F^x}{8##wz|@wG7JY{8HaitePtf*;Sdk_{n0*@u&AS7}Aa zT6W$-gwfVWZGC0RgKDn!!jKWh{|X4hy)nvdwD4Z}VhTbWK5G@D7cxR0EX)LH$h>@JAE!e&I?Gk<2xpVj2JNKM>XTE(u{Q}??9x0F*dbTvvN^NR8T1wAb zuAR>nMpHAMwKz(K<7$@cL?9!mAf!S;l~2^PW@Y32v#_OQjb+n#!w{MBI*aTKpp-s6nlQ7%!)eAtvh2QLfa}wM|2J83MgLYXdGR zxU8ZPR~VZ73Sg)*ohjWlcMJyhf`>J$XhADOEeT`hw6&ZeNI4ABssOaB=)hH~*5qW# z-@KYB*m>P>9Fxk>^R|&%6fx-ty3noQnu<8C6R-?6Z)=4OQ>P?Bkxi&ohVqil&3U|T zsOUu>@zgD1%NBTpk}CRflR;TGokC7~%P`hkUewuXX@7b9mKCHJx+@7*nvI-cdmWZ% z^6Mm9ZN{{WC)-soGEvrWD)Ic45l2LECBbAZweQFp^QE19A70zM4Y zggvj1_Dim&zkaM0#OVs|GBj4!m0|Egss0`?npuW%e;WSc#)m|#v`Z5%?G7=t`SyXJ z4B;g+YiaJbO_Dy#l+{r&_*?_tqltOZcwf_b{3l?H^v;zQ`9fvf?;09Y)>Z#F$TG9>aM(EK3*)-!`29}|W0rKr9iU=1`{~iNL&uj{g$RAMaZQ6pv z2T)6PU^p5*M&|*NXHfZfs9X;90(LU5kT8X5vCd$Y)_U^DMED`CbF@dS>L<+mm{0%! literal 0 HcmV?d00001 diff --git a/target/classes/main/java/controlp5/Bang$BangView.class b/target/classes/main/java/controlp5/Bang$BangView.class new file mode 100644 index 0000000000000000000000000000000000000000..611c901d6999ca4b16c5a3d5b79ded1d7f11bf22 GIT binary patch literal 1875 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 literal 0 HcmV?d00001 diff --git a/target/classes/main/java/controlp5/BitFont.class b/target/classes/main/java/controlp5/BitFont.class new file mode 100644 index 0000000000000000000000000000000000000000..12284bf6d3a9dea0b53e0e46cee61deca758b9d9 GIT binary patch literal 7717 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 KXY!O+7JmUUYBA~n literal 0 HcmV?d00001 diff --git a/target/classes/main/java/controlp5/Button$ButtonImageView.class b/target/classes/main/java/controlp5/Button$ButtonImageView.class new file mode 100644 index 0000000000000000000000000000000000000000..9fd1b84cc50c271f23970e2b13a0b143d795593e GIT binary patch literal 1865 zcma)6-%}G;6#mX;vr9HBiD>bkPuKh7s>MczFR^T7VKXS+6H#G~aCH#I!Z30s@{-nBLSEI;bo|}Qv+Y-&8xvB~ zGVeK@H}Q>)3%E$Q(w_uD7tu4HK)*`RWgAx{Vn{@ruSM+c$<3=au3?OjW6ea<*=~BO z)`+0JRHz9X*D=W@2&n<@Uw&C{g@Nlukzi(S5PFpjg{fL7;HHTw8@Djcfn8ziq0`zE zE+hoMnoGSQ}T9XZ|7|+ z;5NbB5mBq@{6VY$z!8zvSBlf6`K4_4C)lhM#u1IaB{7ryuOV1L^Sx1^wi zk$T`d&4v>S>9;p^ITM7L0k@x?zADQQ?|B{KgwbyGI)@y4hGV~QWPdYu+~1x!EycjZ zkAw?dJyNYC%ncOm^knk56P5@55QEB`S9t9W{~+3%dBWJ>U~c!O*!7+GAY^g3>RoJl z!oMgXyS3CaCi&Z|D=eP1861SJwlg|DK@>}mL(zXr#EMsb&I zTiUR25BGT`Irm8h3OHkm_fAUhka>rZL)=NMONW>#C+4VeTmK8W#2Gghj$pU#)Iv6U zj2myIdyL{C+~nZfL(F!->94`*ZtxM7JE8j5p?a^-k#^{K=Vqp!Qsqt|!Y literal 0 HcmV?d00001 diff --git a/target/classes/main/java/controlp5/Button$ButtonView.class b/target/classes/main/java/controlp5/Button$ButtonView.class new file mode 100644 index 0000000000000000000000000000000000000000..30f1ac0b05d1736fa5e7898e0a865cbc27867f4d GIT binary patch literal 2041 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 literal 0 HcmV?d00001 diff --git a/target/classes/main/java/controlp5/ButtonBar$1.class b/target/classes/main/java/controlp5/ButtonBar$1.class new file mode 100644 index 0000000000000000000000000000000000000000..1a82380522b67426b13c91e27dbed67766b24321 GIT binary patch literal 772 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 literal 0 HcmV?d00001 diff --git a/target/classes/main/java/controlp5/CColor.class b/target/classes/main/java/controlp5/CColor.class new file mode 100644 index 0000000000000000000000000000000000000000..2c5251b7c2d90ec527f3478e997d48c35dc072db GIT binary patch literal 5296 zcmcgw|8rE;75}{5gtshjVObz424oeG%}Yo?0hL4)q97EM5=;QA^0IkJHY~ewzodeS z)uy)fOVw(vwYH?zZ*5bH)?J9Sw$m?8>vX2S_s9Mnou;32@5{bTc8Sb5qcgs9_S}2! z`Eoz!+!H?g-^ZT-*oHqYMgTz*4Hg=)$iOwHom8fC)ERd=li5rmmrajt@9gQxrn5N% z%aTI(ILTAPxoj~rXu#Mn`XLL8MOm-!&E{OaE^A9HShBW6>F!PzQsb`3ms(gR^5sh2 zdKQ7*fa76vQgeIgmMFkF%B2_uD36Q?YsaoWJz1)z6$J0l$S0B7J@ zMp$>Z0wiM%AZuX^5A)WE8Us5M3+?~h!}1miC~64$xHYg&ZvAr{`G$o@W_A5uBrcw{ z@TjaTri&WxB7NM#Igu_CxL5TVS^K7iCuh&{>v%D~g$Wbiw(vB*Gv|JL&*Td(Qya_{ znS@mu+^KBmVb)54aB-c}T_JqWfFnV42rxP-eYB%TWwS%P6BO)>lPj>u;tCXT1;~7S zFqL-(((Yh0 zkTd38sq_XzSr#WH+RP~DoaAzxjcTHCKlS{`xoBN}6ia&EquW(6*C zA1*p+;%E-My;rjJ1baFG6RUcIyd?vHWRd{r%@%V>cW+AYyTmI`K{wy`0IR~l4>_d- zWHe%(1Z2ulloO4joM05?tfDCA5=A+FD9R~AQ4SP}UguFh1?o3@KPjZyE6VP!D0@2T zN;F8zr58WqulH#`KzhV(`v^t}hETHvQ)sw^u+T^e5uwo%qC!`cutI242~9#*m#|vs zniAFsU01?7`vOl5;5B|bu!P?o2;pW#aSO+&TM@@jB={z8K{qA0;STJ=-MAfx$^DqS zo3vMW9Y5hO`iD2ju^r&2_!-y4_X$$*y`#;h@6))R52CQ(~=AHZAW_`vf^&x|7o z${r(e8C#EE#7(iA%eYmXj7HBc$IQ7hZj0S9D+<+!f)&Xgy~(WAGov+nrmuIW)(h9_ zg=_V~zTRG~7pc{Y)apfiy}Pwuv{o-#s~7e44p6U*gFaRkN#2M8xdWAFBjMeFA#on=JW5-K4VaFaQ z;Xym*lrUf~pFs((eF-CFWcoi)_bhlmz`r7Z`-sI2eC0M0(>D-5n>hU^5JxLHo9Jkx zzwJc#X7r$wI$IdkR`lUU&Sp0uN$wQ-{Wv*XX{<|}Z|gXXZH!ZDcH+y3v!#q&zrCi6 z@qT-48E5+KRSji4M$%Zu6IJn_V6?#TFBty`j+OT#%WM?!03O4G9FHDS`PijnuGHQH z-l0V9djjv0lbWBvd*p(O`z5&s#r=w0BX@4cuXP6TAMTd@qhCe_+v?%O`GR>GV4jjy zJ!!O(mr<`L8kk}ZbwA(Z#T)(*PsP4l#xqrYSVmK3f_?Z@)p_B{d13s9`Qz&*Q?z%U z#*$Di!8Hu5wcsP+@x@IGmWV$$in2~5=D-GOc$z*G*^r?(`hmCJ~bN< zh&GVt;JuJJ!!u{pn0tig&d}VWH23&bo8vUUkh!pDE?i^oNt%0#<|b(F>8m!!KNA)* z7xBzRYRo-DbI;P;^ECIuRh#2q9t)X^dgh`v=3b_`S7`24ntSc4&HWY^Jae6-QlyQ1 z==!F}=+|FY?i=br{c<*XU@-7OU1f8=@?>4*59=x$^OfJKtNgpV%HjFS@6}cQsIGEk zzVcLE z@iC{K%gU6VxYm1j6XZ*F(d!16xKnqRztX7m++%jzJ7{c}YWoyR?J{0s<9q3CGzO>I z{)E6GaiyLAPok5oN!Fai2C`wY;YrSl94X00CaKM-l5F(6Xg7$bx}99lE(QFV-TW_v z<=^-kURbzJ*XX)nhZ(PetOmb2yWIWY!Qqv1b8noEuUf`4fS L1f+jZ==|jW1XXzZ literal 0 HcmV?d00001 diff --git a/target/classes/main/java/controlp5/CDrawable.class b/target/classes/main/java/controlp5/CDrawable.class new file mode 100644 index 0000000000000000000000000000000000000000..96e78fd02aa9a0ab420d454566f7110b5bd90b1e GIT binary patch literal 167 zcmX|*u?_)27=-6P=MIH<0cslCP$>zGghZnMZ*ADiy4~y^-c8{FJe1f|XeN`)XbSRjnXTj#A* yA?O%N>y_AVJiCjQVKF%pdIx*+QmwU7g#I5pZHO6x(27?8iYskojYA$aLFWrY=PJwq literal 0 HcmV?d00001 diff --git a/target/classes/main/java/controlp5/CP.class b/target/classes/main/java/controlp5/CP.class new file mode 100644 index 0000000000000000000000000000000000000000..f1730af78052e5f53c3df9b2fff78f93f218fbdf GIT binary patch literal 9293 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 literal 0 HcmV?d00001 diff --git a/target/classes/main/java/controlp5/CallbackListener.class b/target/classes/main/java/controlp5/CallbackListener.class new file mode 100644 index 0000000000000000000000000000000000000000..3be2fad0371f8eed0973a6054d33ee2db668ae9f GIT binary patch literal 197 zcmX^0Z`VEs1_l!bPId++Mh2DK#LPVXti-ZJ{p9?-lA`>a0#kkG#GIU@#N=$B%;J*N zywoCg1{OvJ0kEQ+#JqHU|D>$c+Tk!KgB=b ziw~Okk@(=F5B@0QncbzXSkyF`oteG&+;h)8+wVWVd<8It8(AcfOhePrgOotwncR|< zrnELHi|fyfx-XELH7(Ph6G)aOR@3MeINXw^RS6>Nw&lBa)45!km)4f_GDstwQjg8a=l6IiZ#0~o2$|_)j7J< z{7usn80k(q>_?!7T-uJnXsPD7cHQtilXI=xu2EUK<4R}Ktb0|(G3Rd@I~M}Oe~G3Y z+D=3IBsS6o^`_%A4L`ul5Hmaq4E>21MY8dRE9rog8q|s{Fuuo-ew%|LU0{J-Hp(yi zvi|&@barHF1)|cp3mk;wlC|d89!;HQayX^}McM_E+Ky~_s`Njm5XdguZMSaRHr2p# zp()O(??W4-H4>b##vjek-4I5hbNENOPv98OW3lsb#_{9fyBuTqNpd~G(+pz;pV{(f zh;s5HGVg=@lj<(0Fv-kIIK{IP((Oi@4|=}t%0$bvthhh;Kvxk&`rVgC$*T@AH zc!S=u7Fi*#ltsO4+TaBR@M208J4zLCHL!_NN<%`|(2r}K!OTUKQsv2y$nWlUi(I#3 is5{+Kok;&aR52T|j?12Zw@da{v6gpa7q}io&HV(MWie9# literal 0 HcmV?d00001 diff --git a/target/classes/main/java/controlp5/Chart$ChartViewArea.class b/target/classes/main/java/controlp5/Chart$ChartViewArea.class new file mode 100644 index 0000000000000000000000000000000000000000..4dadbdea13b02622fcb762e8001eb8ef99679f4e GIT binary patch literal 2648 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 literal 0 HcmV?d00001 diff --git a/target/classes/main/java/controlp5/Chart$ChartViewLine.class b/target/classes/main/java/controlp5/Chart$ChartViewLine.class new file mode 100644 index 0000000000000000000000000000000000000000..1ae7083e12506e4936eabede7a6d6d3f05c46567 GIT binary patch literal 2926 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 V?+5tM`TdB(;j7d($(iF|{{zm7psN4? literal 0 HcmV?d00001 diff --git a/target/classes/main/java/controlp5/Chart.class b/target/classes/main/java/controlp5/Chart.class new file mode 100644 index 0000000000000000000000000000000000000000..8d00049273a65fe796530ccb78a26d6821cc6209 GIT binary patch literal 11920 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

q8#d)wL4+j$Z`kfe&9RqU|a7N2|SaBDsg88 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 ktNO8c%%tqnsK1_lbG`1=QQFO8@`> literal 0 HcmV?d00001 diff --git a/target/classes/main/java/controlp5/ColorPalette.class b/target/classes/main/java/controlp5/ColorPalette.class new file mode 100644 index 0000000000000000000000000000000000000000..d519113f30172a1fff58dd0c9d935720ed053ae8 GIT binary patch literal 951 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 literal 0 HcmV?d00001 diff --git a/target/classes/main/java/controlp5/ColorWheel$1.class b/target/classes/main/java/controlp5/ColorWheel$1.class new file mode 100644 index 0000000000000000000000000000000000000000..a2a23ecebea16380007b05eb625e64c7600e2310 GIT binary patch literal 218 zcmaKmO$x#=5QSgbYHAhi38V|x20>3y6kLc47p`L+`a?`4sUFUS2k=m0+KoFOyf-j> z!<+Z#`2w)Qm?L1wuCmsmkq;>fqg!j#Z7p)6j6GFEYQE%%7}6e4QkUXzZm4J(lB2oX zg0{6HhUxEO(V>2`(Sq{}LJWKc7=rs5 NA@-T{W}fm&<1eAMHeLV# literal 0 HcmV?d00001 diff --git a/target/classes/main/java/controlp5/ColorWheel$ColorWheelView.class b/target/classes/main/java/controlp5/ColorWheel$ColorWheelView.class new file mode 100644 index 0000000000000000000000000000000000000000..423e3ce2bd7ff47a4e5972016f080eb9570cab77 GIT binary patch literal 3853 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 GyZ;a6G9u{! literal 0 HcmV?d00001 diff --git a/target/classes/main/java/controlp5/ControlBehavior.class b/target/classes/main/java/controlp5/ControlBehavior.class new file mode 100644 index 0000000000000000000000000000000000000000..dd4f85ece0a3e4e2360d2ddbf39178bbe61ad07f GIT binary patch literal 1603 zcmah}T~8B16g|^!w;vXv1*!-lP{DQ)>KBSas)*@R14c|qc+sV7+9mC7({7vapN!E& zH1WY7;Eyt%>26`EwSDOB%t9zy`ZFqAk#Pz5GV^^Tsa=~gAT ze|&0`9RYRQv`i;25X@vtQA7|8BNoRs#0AoI-L!Jun6hm-O}p0E$nCnT*G5(En08Yj zVzze5j@dB;#F1pU9>+K)1jatp&pdR^AaJ2LgpY_V8Jvt`5>o=9j$Ug^%0dh&+z8`l z95c8jFh87x^|TD9D@(N^;o(R+1Tpmj-1^bk(UEepgdh3pi`^ zidY#%CzW*>D~97|T*_oe6+&$zL9THTl6&3YgcT^3J)w*UWq9XmyK$mB^fJoM^+rj_ z97$N1utH6*bm#L(Aoj*+G>tOhCjv9?+LmM1jgr|iY5tC7*^cg*wngt#zP?|^(Ck>* z9pLUr#t!UuvuqSh*~%%;gkERX<>V-f9LfN1QxJ+AYY5D87r-3%oK&tAd0Y67@f)uh zpSQW&Bu2XuAu7`qsel$RA_*0+Q y!+~Na=~QsEQy&KeKV|~?e=hqfu)()rTQZ!Ke&he?UiH6py&hhreMa&CHva;8-6L24 literal 0 HcmV?d00001 diff --git a/target/classes/main/java/controlp5/ControlBroadcaster$EmptyController.class b/target/classes/main/java/controlp5/ControlBroadcaster$EmptyController.class new file mode 100644 index 0000000000000000000000000000000000000000..945881ed0a37f0af15b018a2831b59e47908c6a9 GIT binary patch literal 1426 zcmbVLTTc@~6#mZkvZbtm2-FKA3e;YNq5`5t6i|{TRUa^o_%^f?SlsS5+pURD8gKEz z_*?YBVl?pw_@j(xwi`;?q-o41J7>^GY$33)LUhfvO>dnrpDOl;kuMa|r2(do z85lsEA-n^#KD$Wh8$pLbNcd_kVejX5JlC}MHyfr^k!~D=7*c5s6GEwUDTdR8h*ZK= z=!}6ej5DjK)udhVg?A$5)5T6#0G^K{fwMZ!890v%grWAiN5VT`SXbB;r|MHbh;A&r zf5Y{LBEF=ErwNm(LNEA1Trn_%SwhTnT8Rp)`>jf(y0Y?n zp++HV;2P$cvo5`ouo{w(Pi?3BY-#6MV!dp&-DTj-uEgv_kd(wR>_AK^{ z7M-%NO2ReOK5&NBzz|mdUmYXJX9OxRHJiJt*atF5oVE$$D*1MApX?pVvd3u+?3nwu z@ER^_d)|wmE56n%-s4f_*O@53<22l|+%{De65TIxL5U+61>2VHmL=+SS=Vu&knAxA zCrG*29d8-aJO@c0RvH;m50kAhe-SKzkmKD7?=)UxnQSO@1p3CdhDH9X2?D)^PVaD? z_XgkKbGU(8rV@>uiNyIAKn&UhN`VFTJfujX5U literal 0 HcmV?d00001 diff --git a/target/classes/main/java/controlp5/ControlBroadcaster.class b/target/classes/main/java/controlp5/ControlBroadcaster.class new file mode 100644 index 0000000000000000000000000000000000000000..667026fbfa0d48b4d01f4ba9d8cbbcb652436767 GIT binary patch literal 14169 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 literal 0 HcmV?d00001 diff --git a/target/classes/main/java/controlp5/ControlEvent.class b/target/classes/main/java/controlp5/ControlEvent.class new file mode 100644 index 0000000000000000000000000000000000000000..5c7fd3e2cf916b6f4b53b1378bcb55375d91381f GIT binary patch literal 5196 zcma)9X?I&k8Gc5KCCk@N?6?kY(jelbksP-!ApvT;X}rY2tzx&f<2DYVT+27kO=U^d zVrsU!Wh*;nX=&LCls$yDZd3~AaNsL^V?BK42k?Qf91hPr_eQ$Dl5NE&GozV#pZA$} zo4J4d-*0{g;3VFNA%I{6Ap>EwDD1svu9<@wGrKZ4vvkc$mlRq??5tfntq@Ek7g`ZT zYXmU^Z7>w#tEQbD)H3N@wp7Sv@}~yJozdAfD@*bA$5z+fnT%CXNTzm>;f|?n$tqki z)7G%)>M*bedlkZVao$`~P>V9#WniDo8g{V;Eep39=#hnpT|8IFmGfERa!7JWlJA>GJ-=2hjx~Z;SR(NyaR_7Iw(F@D%jZ-7oI)j zcps*mGmK}jbBKxN*YlRlosecwngMBgrHM;(M4Ckdm+*eao3+SPI83UI+*sQ~=23jW zz+?EJb4cwyg(Evl>RnoP$v_(PS&NXBR5`GXBo~JxxWd4y8OO2nSlP}jTZI@b1f#HN znM-k(p-$%b720b^mLE5e0ZrFp=JQsTTJQ4O&<*eUh<6oeFXas6CH^Gv=j_#d#*!$E zf+ZpnUz60+no6RntZ*4181vektd0k_i2{fv0pZ zUznaaJ2}N>LZNj|LZVbIFyRMwaaFZKjr5-$rn6SpN7E%cmsRLX>>@gxTu=y&=a#8v zPs+|()8*AAt3a1zIMbENrOnKOS+M1|I~ginwHfS(cS6?QA(i&hRjU?KtPVQ~vDQ+g zXRA&|xvRHt7g^`O}gE~ndFh?80_;(VrnSIU) zk2k$n`!+F^oMcSU5mVV^>q%1DCJk$(96iT&-lxy#?BqSXNMFyD%=F{u&AjWc7Q5(_ zvw__RSL2seS7ET}?b?-;*iyf5J!%YiYvD7p$~dvRH|FXUo}=y=pDkMVnbPn$6})rlcp6sK=wACPPL6o01`^ zAH2CTaz(P&MM$Bo=)K5erstB5rJbjae%ORpRyH)qRQ`vXRs|yMn90%|;Lh?A`I3&*@-ShRM z`)Bn2I9I~>1owWDvqkozr?>x2sQ%+O5$O-!M0IMM!)WpChr)b1Vd%nJ-kSevzXvzQk6DnDs=+pa-Kw{wjKVV(}Kea#?F}EEsdGtK>=P zBAjv&+63YExTAu%zv_c9JrHeG2);302p@?)1wXN^QGDG+IODp{aE?KQ1NZn3 zvgR?DQ4JFV-(Xyd5%@}Sy>mkU2BPkf{A`}`u!*`z8~V)8Q<6^}wqjf#&M`mEvkh>R zJhvM2Nc!cUYas9Nc!3P~zIJ)kyXd$d>Lm|U%|(0gO&4O2y~IhFCTYK}&sqzSS3JVu zs(<%26z=p3-)Jb@(@?nEFZ}C>ly6OEwAjOI|7U>>l;QooEv725*E=U7%d_!wqi>x4{4j;CWxb{E7v>9`>>y zc48OU7ksd<^4_UGyy=HMzb)+6u;y1PgIltDnP-p!HuPIq7vIE6*VPKHNv1P1E6DOk z*Ap^R!9oSat~F;oFY`~bso=wY4i9@c47rsciq~{fiAK4wlC6CVq1;#6o8_l7qy eBCjx|UtwJ|A?WT95`3%nvsevq<#o;lu=#&?2J!s> literal 0 HcmV?d00001 diff --git a/target/classes/main/java/controlp5/ControlFont.class b/target/classes/main/java/controlp5/ControlFont.class new file mode 100644 index 0000000000000000000000000000000000000000..7a1a2770e9d80e1b6c0559e418dd8bcb0f9230b1 GIT binary patch literal 7392 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 literal 0 HcmV?d00001 diff --git a/target/classes/main/java/controlp5/ControlKey.class b/target/classes/main/java/controlp5/ControlKey.class new file mode 100644 index 0000000000000000000000000000000000000000..0469aad63cb027ec643aa212047e68541cbb41ea GIT binary patch literal 146 zcmX^0Z`VEs1_l!bPId++Mh3au#LPVXti-ZJ{p9?-lA`>a0#kiw2+KRQlAVEtkwE|~ zos*cCuJ50em6}|_$iR`ETIpJrng?VuYiNcsGH?awmlh?bx@G31GBWTZ4A2AVWn*Lj Yssq}}z`zJJkClN9#A09vl1vO703B{4QUCw| literal 0 HcmV?d00001 diff --git a/target/classes/main/java/controlp5/ControlListener.class b/target/classes/main/java/controlp5/ControlListener.class new file mode 100644 index 0000000000000000000000000000000000000000..5f9e88ea608ebbc1c6e49d43adf32ec1738fd6d5 GIT binary patch literal 194 zcmX^0Z`VEs1_l!bPId++Mh4~F#LPVXti-ZJ{p9?-lA`>a0#kiw2+Jq4xFj_%wTPX8 zg^@u3tR^QhFJ0e1DJwO(gpq*8J`H4n&D)$qY%7+8_DW*8#_S8#r5QF5wVW=<+2 kg9w^kdLV1q7#SEDn1QZjU|p5HIUtz*?+!l{(1X)c?GbFViqZ+ZCEb4kRcSVh0>Kv(GnFe&~X^}H*1yZ zPjs|aS|McOrix0-EUk6aZaC;h)`sJv2QDF>Kz*SvDu<0r>BWrNR9eMbg!KGE-9Zk0 zHu5g|F+iB^2q)ws(UM1Da3jN5$tYo**%%_sbm-iZcZA~nKQ~{f6Rc`*E(v`#rRBlx zbwh?HqTzF8pcZ(-uZvKbyj`@6DTKMs;L^$lq5DeSZMUT6|96gq+t8Cc%5ZbPE-x9U z_|x0k^Mgp~i+ve4gL43u&tENgWG=huuz(|f+d1?lg(fzU1wx>74ld@ zRq({Xku(a~PHM#v>S6_cp@1nDMIY0cA*_sq6AGab-J{4{$S6@VP8p{zJ`h$%bbgZq!urO4Zob(jI8D=) zgsGO&^2g*KTa(XpNp{I6Qes2PelmNB1X*lofrs93a<jqT0gL|E77I@9E26)0Euk)`ee8duGtWRmgicj!|tbN{XN51k0 rbc@N8ca)d5Kl5c?Qk-pJ;SiU_GG`gAV3l`=CtkuDM;@!}<@osr!b6af literal 0 HcmV?d00001 diff --git a/target/classes/main/java/controlp5/ControlP5$3.class b/target/classes/main/java/controlp5/ControlP5$3.class new file mode 100644 index 0000000000000000000000000000000000000000..cdaea0079118137a56763ed2e5fdc6e95ce020dd GIT binary patch literal 852 zcmaJ<+iuf95IviiICj@*8ldIYdkRSk4N}QdP+y`VAyQhYC`i1Zjk9XDb=Q^cw(6(w z1w11Kka*w&_zENt;wuodj^WXkygM^Gd(Mo`eEaj|D}X0xJ1C%N!{WGx62tPTP`Z6A zE=1c8brOZaS*P8bMhBhxHbW^HtGND{p#5BI*F_nQ4VPmEoS~YM20|aT_lL*QPl)QN z(kj_uC^nh{2NlfPsB+Aq#;}-6&fsP3y;gb@UNWrbbu$HZ9o)c88}l3sxW%xVBk_;c zQSm^HCg<&a&_=UV;SZm~Ud(i1N2PDu7 zN2EI2S6aS2KOM^Gl}P)j^+R6-0}&~cXGP1{LNnzP*SEV2MZA^HUTyaGx^5r)*>g z9)M?DZ|OEKmRl3B3A_oezk_FzPq_V_B+}@f5h%h4)L_y110H_TGW;S3f2U%GkZ3Zo e2E`T%3nhBhq_}_V0fG^lXl56)9i=nLO~4%5OVSPX^3>q_w~I_nAlkW)g2Qdc?LJL0~ZoPRqD;lK?Tmb?FH zP?NzpaQl*nkxyC=vkr_8uQk?`bOx>70(B;p4^CP-;$1} z0$29;L^x0 z`9-5tj&U_ZvoYo}G#}$eh8AMn%upr9a)LgSSPr*nuVRuiyhcHLgQE5pbJ{ypwf9)l sKH$Fg5s$P_SRtO3CB`al)2V13;+NC literal 0 HcmV?d00001 diff --git a/target/classes/main/java/controlp5/ControlP5$Invisible.class b/target/classes/main/java/controlp5/ControlP5$Invisible.class new file mode 100644 index 0000000000000000000000000000000000000000..721f630dc47087ec74d1ed9071691b925bdaeae5 GIT binary patch literal 387 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 literal 0 HcmV?d00001 diff --git a/target/classes/main/java/controlp5/ControlP5Base$KeyCode.class b/target/classes/main/java/controlp5/ControlP5Base$KeyCode.class new file mode 100644 index 0000000000000000000000000000000000000000..a884bf668bf88446b47f09c7f6b99528b000ba37 GIT binary patch literal 2033 zcma)6%X3pz9RALIehv8U!#r-W^|$BLI;(he&^oXHo*9pruUrtJHN+wzTfw| zpWXX#1waPpf>59u&_d7=5a_;Wzig+gcI`s?)a*s4)Dj5fDz!>$OhAn%W;$S^!$2^E zO$Z4jF58t_+KnmIYpq7TIzN)md%M#k<95^8eZsktug^IGdZ}zTngYuCd=OpOY@j=Y z9)#D5F0?Au^sz?6zCtIhS#Pkm9zUN?%$VpCfPsF2$OgXYR-;n8FuqW!&N+=BEU5Ca zHH2-5616=)@6_f5hU3KtV@4AXnfx@PGDS?Lctl`(Jpa#*CI$pVT>3vM{dY)0e2FQg zn5k?jM2bKL)o3l-&9X;ZaJs(GC^^R~E@SrzexKxBAXKQ;oJPKCH=9n=z>5Mq|C2ib z!=Dxmu*V7~lr+dmkMr$Wp33u{H`?b_hH;Z=M5Sa9Og3&joUAv zDPN*P`3l|2*Em9ZzZZy6h8p_MT;t65s?8V(Lw zS|+Q11ncZgL{iJxV(H7+9^T>ac7}Izw~W2TMNPc7`g!U)6R9qwe%=7ew@{Vuuub_M zN4e&eA6!@i^x+s`3{OZeO!@#-jN?fhBd~E=BT!cP@z4#J2J!|b1-}e;_#qQ=OnmhF zxzdb)gub%GoySN(T9w;wIeBAx_(cSc<0)DswP~*MOqbCTdwcLtZNd6_Fh|i3K1Xla z7c2TU!qMb1lGhNFiK3Y$RU+|-=;8|HXM~hr(5w8~))#BNFBYCgfobKnRft}0pTP;g z&c`&dy~w3Lh4~hAbt&};%&8$3lttf>7IiG<0oam^Eo0x1e7FaTD*JL<+klfqkZ^v3 zq5Mv%{DCgzFKkurB1*FN5a~fxAjAC;Rdb;xSv$tRA_4N4LRu434pTTuj9u7=Q?x5C z{2u5XchSS9-GvbSf4U7mO%Z#Hzd<*tw!sIb7V)GOwe)wPYfG-4er%)B)st!>qIMw0 z&;JhY_o$sNMyaO=r)Eu0gX|#pV0v9fHyCXY)?qcL9hJ~d z4zFZ2HLF{?rCr0WVN1_s1JSEiK>oHbD&p!b94wXI%q{99_?zek!Q15h)E+1*r&8@D z*ghQKdPwbWBec&2E15X#gH>>dfTRjEj1YFgCzLb1$}dBJj0&+n1$%jVhS3V1#|+mX L<4nAOvoQY#XM1;9 literal 0 HcmV?d00001 diff --git a/target/classes/main/java/controlp5/ControlP5Base.class b/target/classes/main/java/controlp5/ControlP5Base.class new file mode 100644 index 0000000000000000000000000000000000000000..447f0cc0904c470e1e1eb5955788da659b435320 GIT binary patch literal 29010 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 literal 0 HcmV?d00001 diff --git a/target/classes/main/java/controlp5/ControlP5Constants.class b/target/classes/main/java/controlp5/ControlP5Constants.class new file mode 100644 index 0000000000000000000000000000000000000000..24a19ea0bb09842d4a7513ca8da258b9c02b8240 GIT binary patch literal 5100 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 dRG*$kDyIa$R8DEmIDBI@D5s1j=yt literal 0 HcmV?d00001 diff --git a/target/classes/main/java/controlp5/ControlTimer.class b/target/classes/main/java/controlp5/ControlTimer.class new file mode 100644 index 0000000000000000000000000000000000000000..9383af0e7a662c4b8e2f745349443a5fd34b895d GIT binary patch literal 2167 zcma)6ZBtuC7(Gh@m!uaOLK|9(mA=r18=F*HDs7Nzp->QtHi&|+m*fH$^Ja2WhdSdo zJI?6X5B>wk8NcX^&NS4~8Giu3#2?@{XVmj-uJo3s>W90#&)GfCK701;-Tm|DUjbai zyHRu?WFTy!6I}|iE&H~eDca?Y%;MUXllK(5#@({(O(=wtBg+wVBVr(G;s8vAp_1*E zGn$jHl)YM|SRKtwwnj^C$*C!HzgODMRUN0Gpr)gw_nJ5;TXoi)y5kAbXCf|0SEE|6 zJ;%Tyg@K2Kr|U0ClreE$M|Bb8c@r0KQ6cP6LoNKAEV^Xk1zBX|8?~BK_5{0Z;)-D1)tYnL ztu*Qaj+=NZQqJaq>U>?IQ~>m3SFOk&EwbraLFN#M$J+jY+=DfIap$Q3TQ#iFaT z-Y_wXIR&$%p~dxe-XB#b6rQXUSm?odx9r?(l-8WulD$?W5}&W+?c%asb0zk{u(#>f z6;96omwU1bJvqdGOBTe^xQ5J#ePBm$^#s>?jsS4evLstjz6`7K>>F# zw1ZRM;^;pUXCIkh5FcqFsdoI-llcBbfS+#1Pd|z8Pms^@e&7j1S`GP$0b^9-azKS$ zUximWH^F;0(Ek?>Lm6^+3=F*H{!fg`@ekEf62JRO-m@s>bDuRaO3CCKi$&l626rq8 z@3JwrK5rr$2;&oFB56U=vGHOPDH*2pFd@T4>PlpZrx@^4nUOcm4+B-F7Je literal 0 HcmV?d00001 diff --git a/target/classes/main/java/controlp5/ControlWindow$Pointer.class b/target/classes/main/java/controlp5/ControlWindow$Pointer.class new file mode 100644 index 0000000000000000000000000000000000000000..9db8e1a688c9e2a5e17102a8a74ce5ebe1a27bae GIT binary patch literal 2253 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 JS(OuW{vQ-bwle?# literal 0 HcmV?d00001 diff --git a/target/classes/main/java/controlp5/ControlWindowCanvas.class b/target/classes/main/java/controlp5/ControlWindowCanvas.class new file mode 100644 index 0000000000000000000000000000000000000000..e5022a885625e731d83c73cf710c1f8b57381893 GIT binary patch literal 416 zcma)2yH3L}6g|$Pflw$E2>}BV6O@50Fcl%8Af|``P?+7sf{PNnN}cjuOh^oT03U_8 z4j={?u;p`o&VAYU?fvByz!BDCc<>_xeT3)@*w9jDU7y_siwzCD)n5>1bQc= z$({=M`=dOC1F|hZ< z4M*8O>yHKEYtuG`x*%6{GyVOBL-#9=J6F?271F9wVC$;YmTHyLjJW%m*2YRpMsxFx ztQ$im^*$BJ1EH#Yd zCujWPU(p$zNo#aQe}F&A@!WlZEhIF|?Cv?|p8GuK?Oy)<@2`IVTt_Dc2_YF_jtN8< zQY}R{a(l`XC08>I+cKN&rQDh;H8pE)ks)I5>Ycf3Lp8r+xHK*#*C`*v zG+vQ0!|^I!W0)O7GboeHIA*F`(XchEuGF-A z0_Sl-Mv7w=7a1;(;ScU(INi|f)oRCVc5SU}c63`e4Tf+!Qz^tLsyU8%yh$uq|=C8?ezX z3GWNyWv7Qlq31bn3SDaN3-y)&T^7=Z9INhvgTKb{5$-UYa`DTS*6C>Kmfq4RiMxVr zo#SKSk#qtGI7D%mA^Ux5|3+$FP4%32+f~}Grn;KyXg|bJ!aW)HIW|xx#=#_tzBDw8 zvV5X6yV^#bVJ2P7ltw&gnk78o*mN>bozy<#*ml)k9FMRg<8zJ*zIbldH*HHd8dT@H zX|)s@mF08*-CfOB0w(ux7@dIh3kETt*`}dcGgYecWJx!) z``uPmv$m9KlPpsuv!*n+6-yVoXAFxI&v5Yt$a9N%D&F$|y|xb`wJCKv=F~VzC6Un+ zwN1Y|)9EAfWr%N@U8|-QbP?R-;38TO{UOU8qt>LsHX8Rdd)HJs+W3}s(Mjo7A29kBCJyDXj8}#j7Y2+Aql~jBWTac+SjNR6#_>7M zpOBHRn`0TT4>69^vjx*j~ng4f4*_8H!z=Y~4msjC4@e-Z|r@-0lW4U}u5V%3!#7?fex&m$f?l60CL@0%x)TzuJH#iOJ7JPm9BD$d z(vc#f0gfb-^r<67N!k+9As+rVRK?XmK`}ym~PXHEBiX(y!0Z|#9h%qR~nrW+t z+A~en9lPo|mb<9tL(4L}i8Z5KJJ>Ug=M1rG#q=k#45?!4q?`m1aRHKy1Z0L}0B>pb zf%>?7Xy{eKS~hL7y28+*OzlZHhi(B$89nG_xY8P(l1Jx4cu-=uAI$1~LJ4Nr3`rtULDpPH7%ASmnf;{*n9NycSdA#k5WI3n;E zUkuk$9CDPQQz?wFV9U}^8T>$u_80+txYTI(1d>VI(Aqpk7| z*SouD+D55%TsFL2t!$B}x9I4awWoO|pEsOQ-Y5*|HdQuzE5|VKE6|Di159m$vb?*S zTbVs;Q-TuqP2aV&6Nao({AUy7iobVdZi*^RR4YcaPlj9MGjvgG^Qv$${(z(&C4LmT zQ`PjNEzNC66yGrqY^_@JNW;-qEGe7Q`U~4Oy71!-w4vRl9jE5$#=6Omth-5hmh)wh z3$|@|c}w$sgU&5}CMHt!ScqU)1WP9QgF$adguVoBkoP88+cf7MDV=!-mVOW64b3`m zi~eI215v?kvIoK_0im zNt{N%ID-*Ug(7C5iu0Hk7f=uvu_Z1A6{JEYXBCuiAFBcL67pCh#=MrW&QhZmVoqxh jXl*^%GcwYR4YDHGB(%^f;9=l-gd&X+Ax7x#Zvo!{78hB& literal 0 HcmV?d00001 diff --git a/target/classes/main/java/controlp5/Controller.class b/target/classes/main/java/controlp5/Controller.class new file mode 100644 index 0000000000000000000000000000000000000000..7ecd8c3bff1b95307aab945a8c153b5f0e1fd86f GIT binary patch literal 48457 zcmd7534B$>^#^`t?tM#ME)WtHku9vk3%e{z07Y4h0)ik2xP{~aDItkjK-AWqYSpT( z+6Jv#RjfM-4-iFdU0SVmt9Em#tyR0a)M{P%f6vU^`{upemjr+P|380Q^6tB{oORBe zIdf*-(_cNfmxw01pBIoMCq}ME5sC^Lu)eaUZtOQIH&l+Ts;_HqtgmgDH10q@_C9kwUu>i#x8Ddtf^a5K4(rv#mJ=vAib|g z{iwg7SVLt)Lv0F7>NBsQvA!zR)P#y)Xk%*Z!kMb5oLM!{qf#0qDBhS_Q`6MU?5!JN z0XTNmH&Rv2As{=zw4x4ut*)#}m51{)Lvn(K(9jqSV_ppxRFol3!xrR>VA>>&@Mt6@ zfons3Q%!SCeVrh=at@b_@@O=dboEP)Xj#2F)yPF-JsQVFMU|_X>T6q?QwvRFE}Y=e z!88%=YMSQPw=|^|HiA#7YG~F9E}rbs6s1|Gtlv~o9iu}9b<3bPr?$Sb***JFg8E6C z=FxP5h~uccw6eA(g-#T1hkG=W3%a4eXqqaI(~&|qo$b*anhPvYLkrY&P;3dpNSZ-a zcyzSEdS2zKRPEB5rkYi?DK47l(R?mSFhLtqmFD%a9xde8g*8n_G}c#ES5-DObM@mq zTFmbYYMQK0j`wIOzm3;4&8%v!*`Rtp!K3B;GFsC#ufA#>w_fSdiTtX2P1EsBsYWI8 zN;Igij`ofcD3zQqX~6L+i*R>uc*96LcyK<#yE`rD!#Va}~c9)Gu7qRHO13 ztravpv{!8~7EXeuH8oe(H8*kR-|%Q1OSA~A4mh!7Q-dOLy+?J1?&BM(E1T8J29Hkj zTg*yT)vT|qU07dZx@+>NnOY!Q7^|9E=61#U$~CDbR?HPK+9;@3o581QFfN-sI)lz+ zj+!=oR<<3gs#G%x=Xi837qN;htf^Xuk*?UoP|o-0 z0#>dB%4Swqvx4*M%^rQ*&{|Q~RHOU3*rV^zB^Yp34KR%Z!x``MRUvhmN8hE(LGF6! zyRELqZZN1TJ^CJF5CaAaD%YpjGG67;)pQLYHL;0`k61Zp<(!c#=Wx*vJ!+*b&`A_6 ztZYoxp~Ccb?IsMPZEi9nG(h4y!sz{xpdsyOif>+75pQ7hZWJ^%4_vK$c`TbQWMd4V zKZXGg1F8mYf^Mc;+3wvYXks2v0lVAU0&Nv<_vj~dhZg>kl?^=nROgt>LItP_Vf#;| zyF9v^?m((G)BJ=G$KrF z8GMG$O08;Hv$Q6)F+o44XIP5Ago3pzMW|T07TT{odXAnK)JH|UQsdefsn(VyEl;#nZv253SaFQt8vg?KUHsvL@~ zq`!FdHoGV#?9Ew1;n|*t`@0_fm2GMd%$x87dDg3`tgShtlE)-V?e8A_gZ`<9lbPas zj+hfF6G`uR^gexn*|kN@MV842`*{$yv2*N6{oA9D=sy6#0;;WS!cSR@Xj#81)wrtubnfj_k3OT%p#iDWS}JSNSI-dNaO4W6?MsioqJ5|e!1HV1n!$#! zJr}|gk_#9kMRbA=5w0g90y9>mrfEUt0zod=u%b}JML|p?JWhp$bF908b1QrQk|)y+6#dyEpz`Li81b zVO+$J9Oj$ykxRM8Fi#8@2f>`I(h!VtK?IP^A!0E9NqVA;<&ap-eyg@~VssXMJd3VL zH73L;G{K*7o*2)Ph{NA8qLboaPfX-~c-F9qWx-7L#1wIeHcNA09t2Hl*DP@zED$mr z3TA96rh1~BM-yDxBT{QCH`LU#KQE?xVum;jmK>JTe=lfQdxq1mR-Our98b&@M`3n59eN9oMXUGGo;XIm-Ne1mhwCg3;-_Ohv5<{LR1aT9 z{Wwo77E84AY0Ss6n!4(GSnnb2;jb%|7l@@|SxlVZiRJ9<4QdB_zuV|~Ue%nyEmwNt zL~a&q$htlfTwdpidc~OfI@JU~PxC~hfOY8um6}u2*wj3y zv3|W;kR7`r)u;!5S^G0fmJi5aT0F7AfZ>%;jHMRNGN8GtvTEJz4R8t)Vxu^Nha3Fz zq3xa1L-Qu?t^$^pWj{UiR%PB?m{3^(WI9ctOP5x65Qa48%>jWsY zh4Mmizjz=fwtHfSNW;MnLoMh`R>S_m1Rotim<#`jj~MQQp4h{VDzvj z_No$v{&8?qD-ny}HjjGZF)k^nuQRXt?aw^%xOqFfuG$}dPkQ1hehXn7S&OwG*ZhSi zp5}KwvU)zYrI{CgT;Z3Vc$O;^1prK8OgtxOLKvAT9xhE|eKbvdf4sBVc)=4dDtXo_ zM;wb%)~;WB;$>dm^#b3uwVzYpm~p1K%5OaJTk$(gJG$YLdO;Po-(jY{w$nzt-rT}T zM}VIk^b&vY#H$RTTT^p=gGL$HEvZjnD8BBAH^d)-pFM&y_z7B&XIN`*ILi*Ti;uDD zjL)Au@n`Xt*2N{5!JBIu^6R3hfXVD_@lH&<>xsYeWEQH6L1%G}%WObMgGv0mC;q`C z7B{BWW0(bF9D?9Z|K*AISQ!%4sZ6U6#D_8QZ%=&0C4JfiHRd)}Hmt3wf(=hJv^1@q zUx~Qn=?U?H_}CMli2p)$n;R?ZnreXoPo8t;sAZ7&%oCsUGN^lI)dmLgN~KVIDZYw{ zeV&9Sb?B+-B~YwdheZU98__nB;-hG<0*t%CPSgj|@ubVt6*Sa07y_tJMm-smaTv(j zddz$rkMg}hRU$bp_LWvJdN4qz{-$BbXs9Fv1V za2Os4zjLdho*X72A~-A?QfwDShr{J)eaM8z6c6NnMtU;IQ(RXVp~abq046v&%9Epc z$rG;vLfD9C;+JEYN1yZ4cu!8?Vh1ATo+f&7lAH{TU@p`K0%rY;JL@~?)+?iO+}9zV zJXB6)_ZpLCWitmmdu1tCg?V3ID5uHkF*(DNhw3bbZzWz&Mx>CIesrYDc! z6^mPk7mVgCX58e293a;}6ITL991H*r{=Y0pUCw^V3-v?q_@WlIdLO)O8&XBJ=$ z2OAwGy6jFYPUL4!TrLENYP~JP=pV=EFIM7iV|vVHMu@n%*ulP?RvfkyYdpDD)?k=GZ`3fszzrED`Do-W)^QhDS1fE7 zMWd_x+j*TQ>m?>#4pL-T(Mb%Ah6kcz={7QNC$qt62Hw<-pEj`V*uqbzdvcRJ1Ku&f z`TJ4q9U}zJ#p=&DJ^3xJQ-V4(bM~$h@*H_?OrGb-^W_CFnRx~U%+&fywOYl5i_NG) zx!IH7=H;E!um*8UDKGZqchm|WK-6v~_k5`*FXL{V^)IWaxyQ3=EZ)ix!AJR|+ zALMnO{E@sKc3=a?*N$Dy#xX1EWug@@jyKAiViL=TVu^5jmyB^lcWN1yk)uE1Tl(P} zWb|^YCvTHmnL90T-4Ri3)3EKEkfFe~{U@HhgPn;;72Np7n7j+?$uR9c(yRu3Ru#%S zLmjm8*cH{HZ5@CLf2%X}~-76*`b-{^^MEdeW0mv34a|>bO4+P#}OU zf8oiec|K%ELWya9s(EdFHP6AnWS?O;xBZnTpW}!~!76|6mEXRAJz0c`@br==f9)^Y zgHSiNU*s#;hLXP#G}hL{0M9UW@;7&GmcR4l@BNv2iShyp<*S~2O}-AZ1O4$8Pte*t zOwHAumEkHDtb5wm0wg!E75}3r-;{p>!?X{X!Q!Y9dHT;qqg@BrKzWOy{6)~rJfw9V z=a_t_{Sbs6obqjYCMN&Z{tlx*WDDhAb+~nI}Kz z34xPoRGe6;A$R?yC%@vR#eP$}_*92HM>rCY1G~fP-h9~Wja2}2T+fMcyDn%41DINa zyqG%p#JtNeDL~v&H&~* zJ9c_jN4rwb8N@G{*Lv2DIar7G&dhPzvK-M;Q(KK7o->$+#vM#y$1B7}ui|J_X?r2gIyQvg=^lGWQDb-wBvmQxDyt|63t5LUkZB0{YGx94+>sObW=?wG1n9>pG z-x=XKBOUC%Mv<$Os;gG4%|$0`%F4p9JmHLzN5>rOVOUu?YJV&4j76M&Bw&aE%roTq zyyP5=J>7Q44iHnDq$-t4I+HwSGAHgt;n2*lJRLrcbBO008oa9EJw2z~bEfg$Phr(s zBxI$O_P};KGd$-o=Wy*&&aACjgMcvmci2{!&Jmt-q%%v|;ctMMstpHev$g__o#(#h zc+Ol0Yqkh>6S<>-BUa`aBfkBY&e06x7*>-xS!&{UD@vUCp0j}W3Ox*4#Ws})BStw3 zJ!g?~91vczeBo?3X_i*&?L!vc5*FU^91jUW+b9vt%PY<@&pE-tvMGkWj@0Sw$njo4 zMZ#I>oEUSk47$w0GDz?Cshu?hU)FMz2sv$F*DKDco>S?pV$E$?)ua;M+G@WcEABvx z#JIQvC}IrrdM%P19IQP0=ULww9oa3CU zCx?ZN^$n@U<{HkB8kI*N8GPF℞a^ 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 Q?kB_J?tl4A#_;(60|B8inE(I) literal 0 HcmV?d00001 diff --git a/target/classes/main/java/controlp5/ControllerAutomator$1.class b/target/classes/main/java/controlp5/ControllerAutomator$1.class new file mode 100644 index 0000000000000000000000000000000000000000..d47b46048e982414c5e0c02f7179cc84cc6abd4f GIT binary patch literal 1260 zcma)5TTc@~6#iyg*tTp1fg)Z|&?;RDtRTe11rlt)G!}iJ>HAP7WyyA@+1;A(pM3E} zgAayhf0XgebSVX@p~-g6oXdBu;*@{kj?aUZ^ZDph zG-HO*Eidrm9fnlNZj2#=tcje3F<1;!+PxclzH`7k#l0X7&loZ-5jVKs6%5lQyLJ=O zHF1wDSL%vvcX-H;d@+VRCM?{?Bty2T)uJvL3Z>g9b~T4-6im!mcz{_3yUo48(XdTP zOr+o0bSgc`7vXL$%Q4m-*&~ zMQznTy7h*;L(thnuNCmP8xrB|p*86{{};)wGAs^hS1)K_vRvi);kJ4J{i?cK1KR$i z^$98dxkK3vn_}Nn6`vi__Ej|*)SkVd>C4CqS_dLNk;f)hi0~boV8Ov_>VTl}@%z2GVz8XuSfQB)EGwe8eyKM+W^Bu zTGSMMw4Zc)Op-$JSO8R$l7nejjIs{cUt=4!v(zU8_{)+RX?dhi4r2&*eH&7-hKX|qX z6$l!rG%*NOg5x?Pv93mIQG22*olL~LPimZIKgFZTDQnY-&PY0uB)<0UlLSY%9%jRW zlbVV!7()z%Obo@a>~SsPW_P8dtD*#?FI=)<2B%zvPm4!Vsipu)8)4!o94(NTpxS-5 zwsbPqwW?`$?d$+ij50AA#|Vsdk@(u^{FQ3)>{=H@2OH@btLQmaP}a|hmUtpUzK=zX ziCWYN0^N~hDryZM#8L-sZHrpopsK&VI-z!rD7?#_r%0D%<(9M9xsmPw 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 K5wE|kfByky@jpBO literal 0 HcmV?d00001 diff --git a/target/classes/main/java/controlp5/ControllerDisplay.class b/target/classes/main/java/controlp5/ControllerDisplay.class new file mode 100644 index 0000000000000000000000000000000000000000..81b6ae6d387fb1c4794460ab8d28f0c89a395c27 GIT binary patch literal 342 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 BC-DFP literal 0 HcmV?d00001 diff --git a/target/classes/main/java/controlp5/ControllerList.class b/target/classes/main/java/controlp5/ControllerList.class new file mode 100644 index 0000000000000000000000000000000000000000..55ce9868724ea1a1b1571c64c7427c88afab8b97 GIT binary patch literal 2586 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 literal 0 HcmV?d00001 diff --git a/target/classes/main/java/controlp5/ControllerProperties$JSONFormat.class b/target/classes/main/java/controlp5/ControllerProperties$JSONFormat.class new file mode 100644 index 0000000000000000000000000000000000000000..59cd079ed059c020095452d045e82212ced5acf1 GIT binary patch literal 6843 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 F{{zj?XMg|z literal 0 HcmV?d00001 diff --git a/target/classes/main/java/controlp5/ControllerProperties$JSONReader.class b/target/classes/main/java/controlp5/ControllerProperties$JSONReader.class new file mode 100644 index 0000000000000000000000000000000000000000..78ca9a19e52ef99099569d65461fa39d24d373fc GIT binary patch literal 2952 zcma)7TW=Fr5dMyj?MwM*fCBBx5VKZpaeolF*ObJ!s0B+5_{KOZ&Ff9 zZ-m}x3vE@Ts8XvwRC(zGMG&A>TX;cgk@yk3^s%q-0CdjUj-3(^QnKfG&YYQVX12ilHH6nMp01)k!O9T3WP!TPBmzY!O6_jCt@gNEy|UF(|!HQID0Q7IhNpWi(*H zEZ_0*tgWTVr8!Cn>Uteix*6@abi&BGgeA1dh+s9t!jc>fsU(O%sc(FS*`+2MU^#)l}%eN?h`nHac^l0BqRvNx7G$svf9 zWFjwVep2K^B{s;|D8i{qnd)FM1PPrCl|>wm_Yk^dYyuI>J)(_g8RiA^RvoNy&5l)I zE4E44E~6VeW?7(9hBDpOEY&uN`t`H!_T=ScU>9DLuvz~36O2(n8GmoQl39PBydQ=D>4Rf zm|^iVy0o7P;?<2YbA$@N_t`bcTR-w-P39<51v>DmjMtosXGU!aZ%~iUMZay9rH)Hb z3%%l$#S!-ES&I9p7#xFC>|$1P2gflaVOWNa6I4~_)Ja{BVQWKTP)TEIYE%==Q6KCn z#hBNix+Rg4kp?v)R|m<-tadDr@UWO585wVi@xe9ADg*IIDbB=zJ)Y45X+4`(?c^{K zb4&2~N8=pnOb{u$%|R+jHT9C#H<~`CSqIf)DU$em&7_)2sFp5%=Y?)Dk{Q-Lx7U(^ z9-~QP3cJM&<^!izh}&v%g!;(wBjH_!;4|1X>&;+TS<0uvY@5psBkZOA^STVKbeqUQ zvGN3k@VZhYt|<`PN~_fMv#3)1|UEau8ba87yRO70%~f+8%q)nMvtCN-%=s=o2a~s>M7KO7_FBv->*z#(JzjPG5RhP=6EH_c@=7SH5T!C z2yj1wycTcKc|DmX!#Ig?TE*^doFdsfw4V>xV=NMHze~btNkEkeQ3UVhaanLX*CS#7 zvT3aN4)a6d>uCNB(Sd7do5q?;q0kjnho`Z=L`If51hy&>6mKAG3!w0YC3qq;cp`Wo zACNnNhmxYuLJvaDzw0jwjzFxS3J{rDSjOTzlcKND`U@e|=rPU0ddCHwe#_YAl?_jPCvIFI7F4NLJj z`pXJFy%B}Xjkp9dkK)ZCTO+h68>Howp>s|xIih%SS7*FUxLJwAsmJH1P;nWi-y%Y_ zT$-ucMKn<dug5=p1ODY3ai4cE#ygph$5=UZ79-_8f`N$VUwC#v70hWx_0OOz`xly;(Hn4lrP zq+PCeR-^JEmPpttVb?<(q~@W&$OF_ofXnp=%@UG~B%!9V`%tL8TsTh|cHsiPqSZ(C KTsV!d;rb6KP}=zb literal 0 HcmV?d00001 diff --git a/target/classes/main/java/controlp5/ControllerProperties$PropertiesStorageFormat.class b/target/classes/main/java/controlp5/ControllerProperties$PropertiesStorageFormat.class new file mode 100644 index 0000000000000000000000000000000000000000..54ba4a97d875ef13c16e3dedeb1fbab8c16fa813 GIT binary patch literal 511 zcma)3O-sW-5Pj3urj7Mm5$`>u7jw~5M1*2NC@KUzcw6HTwrqC8W+VF7Jop3rQQ|fg z#E(KRyYqHu-psuB{_*+--~@XCT7-*2NFC3_lZZ2;oi(aFjmL{fvAwmXWa}hX!|yP4 z#)_OL#umZ_=n%FW0wr`F-#pAXbA%u>MJW{%hS9Y7uANkI$}U;JCOdUj>O2|U5&Egj zwQ#ldCD*@7&ZaAk`I4M3A@3+79tj6uygz#169zfE%V)>Bl13BuqtV|P31Mn#oAIRC z>gYd_j^~Sdx+|^Oj+Lk?t^({3qLt?NG7}D$2;Bt;ZEqdW_L8rm>v7;w3q6nf2r;)} W9fRg=qd7OR4Q*BRhBQJ?GqW z&-u=G&*brg_dft&fhY^23{rznM>+fgC-oXuqJD$XXVgdSMB1_A$%XYTxl!D7+8jG+ zI%&&H&1^Rv%ZOWB%-Ay9={3><{&bI(nmJ#fcKLX%G=>mBP(w&Z1$2Q*cjvf~=&nC= z{RT6ttTtH*E4^4i*34e5VWPk>u8?KdFSFuiYa*FRx2GM`=nY{4DwUxl1*&S67ff;4 zN_00W^`itLdG*{5B?iK%QU)doO!f?Ln<5F?2qBEgIwF`NpmEz+Yl2?Vxz-@2VY-HQ z={OeE0yX0e0?!z?ySq(CU`o#GOxlXqt2w$|zuaAG)Now>=x%&+hgzDk;xW?+VFrQ$ zyhk7qw~ZLps@2r-I%+VR_KjrHOvD7{junhp1_gS z$s9WR=UQpAH#N_7VZM&{;spAYwsRf}99?s$CGNEV3pFg#aiYrKWH(7;#6iGkCAw^t zg_CqNpiv;CvXF;Msqx$_V|TK^ta0U|UuE$FI+mbWAn4UV+d_e34+rYDg*-qLT6CPE z4jbw=)6KD%W2RCeEW>FUPS??jGX$m|#tF5{1Zoz_O<=*82|J7t7Aaj>hUGd|U?t;D zgQq!mCdu0VKWw?G?%CROoTV^dPJ^wn3bbRDhI4eR#u|a+5AP96#B{ohs7dvdQdb39 zf+sIgiViw-bYgAJ^Om@gN(mfQf*5zw_31nv=c{-J=~KIz<|Z1}2^>)XsABR!=+tm$ zz8<{G`^-$b==R=&N)31O5_F?Vk(_3!&|ciDZs_}Xk9(D>1dHtOiVk3q%k4&=LQ3hS zRGqd7*}d4W<9>C3z$S-DCqJn}>{KfUbUc6u1uEQ?oC~A+iTsJU(KiGpR?|Xnsyb!# znXx(o@mu6WZ_esY*p3;SSAB||FqK4+M{J_zsSUrQ<6#%?UGYq+N6id`um=MHJT6du z2=YhaUc+}uT8B?yQP)-&wiD+@x0!F=*cpu12qVnQx7aa~&=Je6gt;=)yWVtG87_;3 zm)lVzzS>}S$ainjr&>dSaYA&g_EMFPYHdcPBH!9|lB;?>3iq0*F*uh-1f8xbLgz?) zxmFhCEji9O^tO|^@8>gk#yBH{H>&K&v$t` zFRxQKr_Dr){7hDi+Pz8k>jE>qx^3w zEeVf8Y=N}Z?y5U>IhZ$2+D;pBUX31S5QnSmr6!5QB<_wXQuHnrDr;Ve^FA(Gr{Siz z396T}{zetjlZ$jc+wVv}*iJW$bjD$PSB{GBJ1~^8KbXPK&;SIUfT*lgpQ8La_3^y|PxAMBd|OP3 zGCo7KbMAwv9fY=*Z)NyCfBlq!T!9~OJSiuIAL2)Rqr7X4b%!70CplYX+o%x&M0f}j zI_3=Gh!sN!chn8y=#_J`IA)RWZcH7*jE+IPJ3KRsSyjF)YQtQbl|_9P?~{wltIDf< zx8hFDz5gLJHTY}qg}4`sBmOLwW^rnR7SSF-Rq5;pccVO_sU;zWkZloMuJ&v%3||w9NXY8a(XLW zRfaBd{oOWDE_M&M(bvl;xS~kzW0b2K5tDcL?tsK)*oPr@g3Wl8`N%MaFW@CUeQvC~ z_~{FI7J~9@gk?J>%T+j0u12#w7iY*0td*VUlWTFAJRi5n3vioUhkY`NA!*=%T#rX( zH=d9to|Ij9hI-FS3opoCyd*c^Ww}vIlyOlh6K*cIKs8F!@l*Va=r}+${2aeP5NF_G z{1U%n7T2N|PvO_lh?6Pqs-GW)_uw~pnt2c6S^O5iBO=0l{vLne=_XV2k6iWPWlVK7 zh$<1zgUFN;s_!fXZ3 zh_(-(-G%7`l0&udh5h)FKo+|rglZOFSu@}xcJ^2KrpFffhpMlaTd+WG#S(cTTI5AITV9M#c?r&wmtvh9K$pB6NqGgf%I&yLUWuFKRTz{z@Sxm@ zhvn6HOkRWMi=5ZbRP6fZ%jRDeQz vH0*WdX1#)c3Lf`HZzlbbL)nTeAL5Zk_| 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 aF!BfaBfl%CUVs7jCk7f18}jGE;Qs-}5!UGd literal 0 HcmV?d00001 diff --git a/target/classes/main/java/controlp5/ControllerProperties.class b/target/classes/main/java/controlp5/ControllerProperties.class new file mode 100644 index 0000000000000000000000000000000000000000..f0d8553e0160bfef2c40213d5da7a905396ee03d GIT binary patch literal 17463 zcmc&*3wT^rwO(s7nVC#Z`br;6fi^7xnpaZ-v@{8YCZy1kq-jGN3RRgVr%mW&Cd^Dq zQ_%}oLAF5L6IR9wI6rCHG%@?>TcONt>y7KfjNX zbN1P1?X~{(-0SRl?EU-hC!!NPc|r0}j-R|1<&uwSPItH~T6unWQ@FA{7EQ)uk)9JP z>-AN{j<>{PJ$5|VWha;>Z?Kas;bdo9SF*EVbJC6`x?)kL&N+?Q(kM=oYfZ-D;SKhZ zSiC!&tZ7sXM8eSxm95EmS9C*7$;ct$JYZ2C1(^zadpg2N+tBM<9gg(cOl4WJ(pOV* zPLM1r@Y6Vp#?u6*326?NuRGsvPcr#xyP{pmMNBz!N>&GG5|h8fULWp_B=f+@WQ(TI zRHlg^>FzsC54YOM=5ROom^6}kdF3#RLNuKz&mi4$BGb%+f!A_kjh~KSIzDTFm$fc$ z)|dwAaGD{)&19;`5*Mhsrew9?Jj?vh&Ois_ zuwOR?jMRvn$6Is)K@GleM+e537R?!{yOM+HD8os>)dHqzY3Ulfq8sfFN5=V@w`z-O zL`Dm?(;5x;Bsycsgr81kIwmVk_XVkzP7&pv%G5HJT9!tWc6@!f-5$lwMiF*(KGjjZ zpH8!=ftElKX=#8vQ@&U)f=1#@yN_v#8!zoSa4sQnhDA$h8N8>b7r34@$~@QNsW(Rs z38_Ylny4A15P^WvD5Tus!q5^+Xt8L8$dCi|`l&Ug8dspH>+Onk*zq8(q=F!=rZzvF zZP6M!CnF^2pae5%?+nKmg9q=Nr6u)2T1y}D(}ykk2%U$Rlnx>Fm=CobvriiSIw>S|hV(FW=im+W1aP(f1AUpn$7 z%w9?73;m7C_0wz}Ft(=GSxMa%MJdJ=*urO*1<`?5h!**=$jt*o-f3cgHr_e)?!iLn?$Uj>p4&jo?$}e$1ke)Bj-Z zM!Qc%fr%-B)m$Acw$LTwasSH{G6tv~*2f|dqzj}%6*{-jr51gXE&~o-z#xn?$22vA z+)^_RHZP}7`{@dcuB6W(Yor}5H3i|TGn{C)H^bzRh2U40(`PNZnmz|pimKsE-8i;i zOP{ys3-m?!FPtWw&?QNZ70=QELz3im7JW&4$Y)>B8;&GI)msJI>zVrgEBciz6{Iax zkWV+zrGC1RXu=XD~*trp!T2AeN+jjnV0N479(YFPNKq>&r;CBRyCGy5y7TrzvfEO1zWlTsZ2aoD$yp5YF!;++- zEw79&l?4VY+C}$5@nX+Ro5v!Xk}12eKL(HKR1CAdiM9ztyDj=I?EypWu^yy?4OugE z?ubB#dhg&Exz?AZ9}w90hyot6=zCJY<+exca9q6k2Npdn-W;$|&x$|$>5&ZIM;a?` zkY{=HLwd|lKeFg?`f+B!??VLZhSS9)c}>y$cEu`NP@E#OZbt zA72Oou2!~kcUef^XUUL*3IN|bD`kO^>2{sZgSK7(mc=W8k z9$TRJheiLSw}EiNPRbZ|LhhA}C;+&Y-nHmo^d11lRI?|^&_;>{Rb#(z(U8QGiS3dy^f<`s0|6RFK2W>iUwlN|(!flc?pi^#{2C z+b5ogRa;xcm#_NSm6HjE5|qZoE5|5N+@g z79T0z0e_E0!6~*k#cAWHm%-*(vbDFTCl*iI9S(Ge8a&J5*;4K2Lp`awJCBR`Xg?og z@v%GyQXeD?$$rh>gMuw0WoW3eCmw6J6A8h)Jr=hsTNbNFH9;=rGC!AFT)}fua~@zG zQ!ug7PPTW-rg~Uen{wNcfl}m{XYp}dg;bLWZ?aQ@EQU8@FObH<&=@(eZS?gWcZ z@TfE{Q- zD6T!$-P09;_ZAzFlm{R^jFKO*-{-}M$8&{`dW%n!P-r1CIDHRPFuq{G5Y`&F3TmVQgV>A^^+MSS5ri^HM>ZzLA(5OtjwU?d=~bV6j?bX|Zq0QJ^}l}i^lEBz^)9N_C?4wgV-|m$QT%ulU0Y!5*fcCfQNq}|v@^CYM~t>%bZQX36uB*f zJOX8+IuDd@;*SL=B$?!Li$Bd*=yb2s4AWe#vw=}@&c`0DT<|L5} zM|Hx?L6?#c-Rm2dw>HQPGGSh8*M?{qDH#Htr)@}4MIBe0T`1}^KCWIfg>~&nYg|;b z2)rHTS^~yB>O7{ku33ta0|eewl*yV?&BW}37Sm`9maGPf^|20MG9FzfyScY}ogF_* z$_Hsc#@fS?)nSwrxHp5|WM>z0L}_-A$u0{qFWG6E&7)+$%zZJ$#*}rb3iAI`Ck1If z5bv4B3XSP46`01m#-U|5fMAt5cDfl8S3M}|=}glHxu<4gjKa|1Ts{WC4sW%kVr~Vk z$#DBdU};|8G8PXR?~gR%kt1V)l>!IMjJbz%79TBZjv;tDs$!*lmsXh0|A0bgDWW#& zJS?3u1i4NbfTtZ6aM1_k@Xu4v|rA414t zIy-B|#q1ABUo}~iPJK2~@<}HMqUB2BMckX<645-W9yWAH0+0FK%W)Mga5@{x>W8$H zS6Yck%`SFR9YP4WXq4eYB5!ApuU^X4KhIW^5-|@Au@AIVp$n5#BaP|gk)wwM)W)oV z8m@Au=E$n<>{E4!PlqW~f$QV3ZUijYGJ5jzm!)&#uANQI<>!YF1?HMjNF0)99vUDY zbTw}*8bKYrek?6G`Rv~|AsvemIl7`iyL`-!c}8Z-Rei_ISc~+oTaIvp^)4%P#oa2xrO~c&XLK>0<|}mJ0^- z*QNBpicxk#AJp#sIuO9;EqB8wql$&a>NZjiT7cLx;g!^Pd-=YRX3*2#<>x;!9eeOd z48TafFQs#x^W*^AD6dE)n#3RJV9m)AKYX9ff%avi zt3K`@>ss?*egTtfM>`}i}Zwy6F$HoeKZAmOnrVqO*Xu{;`ewD^|;GQJB$zbW&wTU_n_@vb#Mbu zGg^FhQ)9|k@|S2|pQAkKOyLux&H!9kYhk<9!?P9Z%7*Y>K>;;oOxfQ3N%8-^R*bc4o|NqFDMZ$Dcwc+ zrIRM^q{7m&oiwd%z+3rx+<_PV z3M7F~Q4@a^^n}k!bx)LwRgc|{0lkb5!-NwFLdH_pxtffD=?0A9{D2|yC{CvdBujQv z?V7Ukie0p*+A9P@-a%UI0T|`_&PX{(r{_>xYQmWwdXUO+2dS60g}lOrR|z{+QSAi> zo51*HK)i+O=_19|33^4Ba5wVT6sJr0>yGF*;VK93SM$yM4N$$sk!K0t$hSgSw_zke z{GJ@5sWsB|i*$Uuk?t0(B)zT1-Lw+=IIBEofL7g0=MGS~+&e(_0Cf#eq^Y#bJfGBq zk#aqn8j7cf1}M>1Dl+CM8OJHwm(vXTG%cemlx#(MJx8`i@Tz5NmBn{f6_)z`5vU`e=H&&;u0==i{@$>S{U+pKL_)8sq5>AJZK^rt`N9#?yJ5!FU{h zdl<$tKh4{n!W)0b@b(mB6y8qXO|G3ME!?9dP1(;y z#(v7Pw~#NV^`brTMweZbI}DdQ`Y0b^7xFBPz1T$)?=aZE1MCH)6@vXP`byJq9SHni zWfI7Z9+WE^MdXHZ9Yt8>q1-|Gn$p70%hRqqgZx zmY;4=|6N|1R?xk83#Um89RGrXgxh7q-9(w>AblN3KxTu)Ot~^h_(DE0%5Q8XTy5_k zdbSkN4-THjVK%rUoJ6tcPCA0VgE+mNs^~6!f4Q4Zp&hWyL50N`;Gl{MRG1RgEOW3} z<|uiY<8;d$r(0y~_z0TIgM1(5Dtxrf%A10ZezqIW1eF4@*&`6_V6(GR7Aq0&HvX;w zy&&0ETDFUB zzaBNhb^#T{k<+)*VsoSOH=_2pw$ha0V|TWd!XZ%1=oj@|j4XHO9u4y^0Q1u*YMuc^ zzXHs^rjv1mrkMGCCFHc*(%K}D3vMe&;^Rtjm#ID(9a$~@gm+kjy(HmoVJ8_X_j$? zJLwWR+-3CkL+DLpY)R{_yt(53`QDuQxl?kdcyFc!6;pDns(l$s3Hg*(U_Bw6!s?k;%{_3PUI}6ztb7GZ^j9nRIV+eIs5~tM9^q) z&}eZ~*TN6+!*F7eZajH|?^D3fdznvo8~zNj_z~mb51Fi0sZ`et#q4k;sOgfbQVFUw zlnZ;j4|@CE2)(@rPWIDmdLLE55LLkBQ>6~1QhJjxQt5D7>FBLebBgy%l(w`7Yi-Fa z(UyMpfH6R&Ei0w1BBQNGAr{WV8Et*bXshOc+M0a;ZQZFA^Q=oTs`z0)1PS0EQILu_ zpN_}hg=0cpYpA3CW z`7h{$`G@?N(Z~7Fhm`xp8Qw8K4`$rMyi5qw@l}=aIO{Zliy+G^C4;U~iXDiH9f*rn zwDr)%ST|+fD`7pduE(WLRs8YME@~c!n#ZwAk5O29b0g1SjgGx}vtYhqpZQ1pxFL2ISQe(6h1ei{pGjrgM&t-pzAwOqa>~6; zchjS(a$=C4U>cx(lb(`o(IEXo-C+|oK+p6K?RB~AB#HQ30Z8Yf6s)91p6Bp3n~vol z^Ak##X3eFuFVfGRG+`y5JnzwXgK`68x$f zMQe@22hlVKqiGr=70hyQ1_bo+3n;VNTYyR>Fr=Pq2I#l=^ZT4V^wI#m+*B@OxUmN4 zFU@7Jt~Uqh?`4Q_@04OYy?-m^dbjn{jOM%9V^Az)#O5x{*eAeoAZHs4h_KzM#vi@6 zEXC5qi&2==ArjOh5T6DIYrvtpCHUpbGR!=KYIrHF;xm;rvfnF$G(Y8^fz?9b`xO5i zBGlk_P`}`(m8M5zUnOgZa^9l_etLCC5cSJ{K-!PME?Ca;tOuhxWm;7M8)CO4vY)`FzaiMCWEB%s&D}bt_S&5Gtd?Rkj*l68&1$aRFM+zd=VR-6~Kc{H$>a zP}onXC~tyS3{g4dDxKl?UNT^mH{)Gm?3n<_b17KRU((UTha}8JQr5czN7CgKJ_l+a zYo3^Y>(FtRs|yh%9Dj3_tNc;uPSps(Fv-hZk{3FX7dn#T1gK&2PUuc_ zRwecTb5JGmP0baLsQS8e2OlpBVxbI27Ib(+7L#_{LyOUG+yGJgR- z)Vr4E@s}L?$gDkoudG7GL}(A{$YTBj>_gWu(&AGiun%22tCrYgm;>hGr>BPZs{o3G z`?_)`2%U-`1pewIgi9Z6fE%`wzr3G{Qqdmcg*<#(dPAsF&R1M2s&nwG;}?0p3Tt&N z66h)srdqt#kJEz8FQxQ_)az6J8dq+Xg0-o9FS>M@JHQogj|J4?txE^EQFZ~3&?G_M z3@wN2hTy!R+y}W;##VU|q1WWd<=L(G@){I0+gxf5Rkg&eD!7s?%@YiZ|6W$E6P!mkwzU z-cKjW4xe9MjDK%qv(5Yp{~7p6&$k9TM6{!crtPyZ)p{H5&N~#hy8k;-b7o44zkpzv zK4Z+{To|+vJTB!cM)h~|T1WX}$Qfo*GQb}hUU=+wEqI)P0t+Ec>8^S+gchfquH0mp zuMG0Kk)_N7ilPo5(;aZ9D{GS7E`B#_XfFa~p^eD4laEh#+||yR_o939h>Mmxx@j8~ zTF)6;w*e5L)mm1_?E`FYg;}{8|NT^p2kTQ0xD#Il_ zzpjsjF`eCY5O@sr$dB+*;&J={_{XrRCvkpspNr8}N9b05QG$TVc-R?-4x5RaR~;pO zUA!E`qizmjSXW?1l~KqSn46Ru3pt@iRCp9!bBV*I(T(ov!Yp)DLm1Wb5ZY8s^QJ98 zSI|#W1JZW{satks+VrB1CA{WX!dh@E2%}0@q=zkJ!sqZcv@V}VIr)MMB6o$ZB09e^vuw*N`+;72T_t%-OH%=L_Eu^K5p|~BTN@ zyEGp=^ym7A?&}}AND!$|kfUwmf?2o6>+nH~_+_*x{)Dvk3R(z%M!E49)Pt`A`qxlm zyiRd`gRbPi(zX01+Q4t%S9yP@Tlt@KJHJi4`5gt_S`@Zdf`V-AEs7)cyn(9#dNnO- zbL>NtEUFq}vYp=JSm7SydNQW7?nK(ge?@C72Osgis#;^Z4I=qkQ+pH2*0Zp&HnVn{ zhR8bd@0TX8w8q}2YKeO4dWeb$J8u-CtIm9HPlj+&6J z)ZS?>E_6eq*~C*>N9~!U>QBGlKlG$)LLq-buQYd%KRI%xxd&Ke^=ON@WWge3>7+du zjYRQ3FWloOAhgVrLlKXcuJGj2RURMh0Pg!d0ean&M{jz9%3`EwjnEAK8(L#Iv=2$? z0$7Zc6K@&o@Z!e^Voy3oO_O}KMpPvmx8vWVdHP~PfZu{a>Wtv3M^SpGqlu1Xr@6e` z$Nw0RIdA zrCFP+!YMvO6!K;F@Y+cpn8&^Rse9NXF`U(YTLmPv%zX4AB%J@7Cle9O*?TGYzD(%!e+M|nNW)=<{UEf4KmJZNWJh1iIbbKFsda9@AA9SO9>(Qe=z z7z&pkvYgzIHz$+Nxy5|8aP82z?q%)bOfg@ui|#Rnj*{)x#}x+prhb3wM9#H~2ds=e z+@C%N8?Z5sP6L~;S>cLx&Qxe$w%xI%rJ`LbDQxZQpQ^J+8aNkSv?j)y z^|^hm#+v?l2L2%CZ8T5WE@6t39s?ItM|amo|7hSM^lIC&jO!e+6(W7}n$k7{m*7%` zC{a!O0(~6k0x}-yn~;@5FbyOzz!#ZpK1WZh8R>j^j0O!1Nu=87xeoCv z16Nl^>kxMsxE9wb#A!QwtU$M0Rt0K2Yn4i#*BcD%#ErBhE^WEBF-Y1_$7saBO@cH* zr)eu&wuRTt25!L^2RYvxR9F>dpMdtTQD)p~;5OXO8BVDhJ&JH%Ufp3}0(&SduFxo~ zB*Cv!A0DY~64+@2dnE<}*Q3$K6=n?FiMvSGsw!x6t0dYni@W1U8@LDet|}ibFqV&f zxNK#qzd)|@veLYP`(&jU14B8<(ESD;@P>%UQ`ju_8?Zz!i507~GM-3t0s<7l*IW6tz=!+Z2W_JFYfZ9^da?WzgMb6#YjB3Oj z9p-MhUdd|nne}g;4eR+iZ5`=PGio9zg^g2A&fZ%-v}hM+HQUWo`HYoKTMP}^`-2g8 z#i63l2BW(DlVOLuVmFp)8=v*g!~n6s+mpFM*Xre%N`J}J*%qrE7!spalC2{`yZyGK z8N1*zkEJ+1P`I=y<9qXNs$3}Ki>|#?GiAQ>{HO9eQm&PGXxb|HAY(jf%2}S7@g=9E z;}^4Yy3wQlIzYn(QEC+}{oey?7{!V6ItBNgbrLu7grJb)!2e-a2`L6F66nm4cB1+*W+)r zF!dsM18?$)%i%2#l=R*v?2tG14trr7XWt-TZS`sm`n&YOBisl6DO;Jfhrs)PL1HRt zRzR%X(q2i-(q2=+_0kSkFe>dXvXXY3bfn!)zS2&TRPsA|3wf+ew6lLBxecQeBV=?F zdNGPV+)S>w;0BEGcNgx!xW}$bBk|cK_$Eo73h&WNgzfwM=Ml$W3HcdXhuKb=$rFf1 zPA7lG24a|E@Ta~&G<-TqI@9J4*f+rc3R1^$5ufJxH0M2S;?n}37Wnk8Oo*JOyT*h} zGQ(4d^I-16KEl6?2}xl$&)W&4J;=QpLMd}6v>U`n1Rui3^vMs~_y+YK491aQ z)yf&_llT`cB>dBzn?^b>>sb-FzoJ8$3LZR(NO*sBd`^!O`|9xpJx&(>cu$>17YP9O z6XXNv!Gl!QeoS(C(UOk#v=2RuJ@|xzS03P_ZvF`wNI zauWf@%9DN&gMh>5jjXdulo$4Q^Dc7fCU9`s9^=OmT7*j`zwrc1>qAjlRsi#Gt0xoSZoM* zl_l-*ITa-<@JiwP8e%IWQBgoMka7c%XblKILAktCMB`+)dGfJ<$$Ibmf>U{u@}0~y zvT=ott_Yp8$H?aKHQ4B_sJ`vQxH;9gofGuL@9_YhN1LHO6#y07DaQQCs{($sIpEI` z;`3`jJn0oD}3LaWeq^5yfdgVW~XRdJ(a%V zD!hCI#B5P&To;oT>FWVdAs4@vnDqn{(wl_%)*28`vQR~mytf4aS!j;g@jxKFm$m?5 zwJbCz?*jt)a7`e(T6nDt05aDM;HZ%$=Qk_sqF7XEy%x@8AC*q7`~Q zP7xZ@DJp23CNxUz8~2P#+pt@eTlIaj;c7H-*|IJ7ibi9_g`F5pQcS0~peYg>o#_~s zU6JoJ9NX&k1J-EH@%ZE6%hFq%!vZrybbG}5Y!F)b*`0K(h4W3~2N-Z&xX zByS|VjcbnUIvw7b6*R{?Q{GO^d|$qi5%d_xV;!U0vTP*b)29UGF#lkbAq1cz0_cD!{m#^vAH0qL}iV1 zkFG}LVikW2wPV!m5+f`MT4IC=#Ym?M8qLaDTTW%$>{>?K`pBqrg;PEGxMOyEmSewB zy^cEHL=n-7o@?0dj?q3e#}{+4)wSO8U%2Feu}0$!r|on#imp3NU?ppoZEhWQ>Sp(@ zLO)q^8b*7^Kt^Qqf>C$R>S=WLSl7|0SUl#S{__lM{ZJ0MKZsqL1#%GB;4rxweP&KMhf=HW zkJfoBCP+SGUgV1TkSiuau9yJ1Lhy2Z&Rd~$`3zOdbycn>fQ*j=?DL3zC3z67mVP6x zH1>#eHVHN`)=&pk z<~rVFrlOR~7v`eBQgL?(oxj>d8$hl~#1(bcXD;ZfS1W=1LY@|2A!v*-!9}3%8u;|@ zwT3f{DX*jlQf(r^))0B!Po?`sdLu{;~r(W`RP)gHCJHG%|*jRXW(!hEo(pwP5du2Wg^wOj9<@;-@1(7 zx{TktjNiHqpGH6`=YvwQkavG5pYZb?S1Q%;8m0pcv2jgjL=A6-gXIHYJ%G6*z+MXn z%Lc$c1lZ9Cuv$3S@Fzq`mS+V8PTfa~`_a4g@UN#Re%U-?!FVEimTomr`y%n{uLF*fQ%D%<# zsQa`)-wjbK`>HDYDlYpfF8eAj`zqcFr=~MCooOVPT7tb4Q%kWoBdGU8z}alHZPq3R(+Xdbu<*`A*`6DCZo(NUjG-bhQkQu6E}N2sMEnulAqSns7s2;N4; zk>(ddw>6Kf5i*XI>kDHgTh1(xc1py<`L}b}UJ**Z+J-ziT1ja9vj;&s-x>vj-%aCR siBR^<(F!?L+U>4?X6d|+DG&%*_XL1kv^)xqdyZvLboE9hlvAbh1n4nUdH?_b literal 0 HcmV?d00001 diff --git a/target/classes/main/java/controlp5/DropdownList$1.class b/target/classes/main/java/controlp5/DropdownList$1.class new file mode 100644 index 0000000000000000000000000000000000000000..598d173700a65d715b74de374db8f6ba71085e84 GIT binary patch literal 790 zcmaiyU2oGc6o%ikmS#%>>o&f}wlWo|9n!K%^eSjKEucvmAPx22P0i{ljU&h1e%CG# z5*Pac{29a_KpZ!GRA{1+;*ZzwdF*4KuRp$A19*Ym6)d6Rp&H;8YJ}a1P+52`E<~8< z%o?5M-LP+TKGK(2tP0yYB-HF!6|Dny$BXQdk7cZQ@B`El5E?UdDzdZi-SAu{mT50l zrtA@+((VjA+#zh;MD6vBxD>-w5}vge@7oy=sy#ho`)aH*`F1)PO7o!vtj9VL=|C9e z=D)P8yUWTV?;hyNfEg-)a_XQ76_aFaTEMg zJvE7Ztz438^S8e5u8lK!l_jZmTb)Qd)*}yFgyv1RH6I*c2TcZ^N!ynn#Wc0YR!&Yt zPUyDdzYlV14U?lerF^2OQ%X~-(vZVA``|dsr0J!iC}e>q*U&Nuw?U1Dt0OM0CI0JJ zWwpVhBc40O-+TTEwD%d_)y%WTZH+y^H>`7ezjR>(cX`JC8I9O+kJn08mvzUYe-Yp3 h5cCH@cz}l-TEU}P;A3oZU&Rw_<0+4PUUNA9egbpkzvTb` literal 0 HcmV?d00001 diff --git a/target/classes/main/java/controlp5/DropdownList$DropdownListView.class b/target/classes/main/java/controlp5/DropdownList$DropdownListView.class new file mode 100644 index 0000000000000000000000000000000000000000..e4368ed1db1c9b624977b93ab7556a896d03c077 GIT binary patch literal 3776 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 dlJlf~c)GD%DB>wM_LjgtZNZgh>MW3;Y@S=(95v z9UmN@{ZWo5Awn5C40fjb?QXuy+4Eg~|M~F~zzklrA%-ReaTU#I5zsbu(@t;bJ9^r1 zY~OXPt=V+ml-7E#s@oO0UNk*l+R`1J7HILSrZ+l8tKwUfewC(8D=-a@# zKz}g|YB5OKm2WL+`1^4~3spr2&Ioh_7JgN(tZh(1pr_7i|1MPTQqhebfv!kBe8954 zDUVu|eAl!qnFP+^ynacv}8@&^dAT`B~#@D1~91LqKZox66iZrKZ2Xe z6-kKW$>SJP$FCHO2y`F%D%ifPNH>9DTv2fqqXMm_?U!|Ho39{_Lcrv>ifc#;#L0;* zAPNa+xUOJA#SKgfBu|?cfrM@t(qlTOn9#-K=`)&YsG8fao)@#EcM3NZOslws8G%cU zARTBk#bhlyTGAEB*Yg);>^OZVf}kIwxQ#glcU0WPJ%OPUP=sMyJ^7F9^T~X}gk=Rr z>JnyIvZ7m$Llzf47;?)u9a{mbreUzKCZlw2{0H52Z$DCRnYs^AE7aXY#HGrtm7KHA z66!3Pwp`xcT$ApqzGj83;TXDA)?G6=N0+QD(-W9znB>NTA;ZotnH5|2w_UnzHmcHi z$C|aB_e^ie*Nt~e`c~vWQF69jL*~r@L4PBMlL5!XyI>oZJ==>Ix=QC^>gR$$=6|j!A08`0v9* z%17KSQwFvJ+VvWQHc^A3-Ke2m>yOvaseQxQulyRrW3DZX1QapPwKw!LfE=FiMEhU} z^ZNq#F+Pf literal 0 HcmV?d00001 diff --git a/target/classes/main/java/controlp5/FieldChangedListener$3.class b/target/classes/main/java/controlp5/FieldChangedListener$3.class new file mode 100644 index 0000000000000000000000000000000000000000..48c5503ad0787460db214a4f1341685af3712bf5 GIT binary patch literal 1697 zcmb7ETT|0O6#ljp0yPSva#ch{X(LjUi%RiEp^6rC1_x*K#cf#HU`UuGp#MhSe0Ij7 zmeQ&y`*%MX;JyrFS{mY`z!Lu2$R9@Z@v=4;i_hLk|twzP-V z!r%hE#VD!GBw0_b*~$!Rc_R;9$59*;I2w8c74^8ZP6L6?IT*0V7`mnVTNJ-OFK1({rqCQF=zN(pqrukY2J((oMW4Nl}nvQWy z2%KpI>7O;rOy*+MR-Qnip2N6m`zbsS1mh6J6s~Kyq2nf|1qKd45v6VQRS=VXDqUz; zv>AcH-J&hnwkk{eUc}=38&hotmg{I>=QK6uu;npq zvsqE*EB378zGius18Kfml$&w<)UvzfnW|ug2zna@91S@p-g(EgU7wG3Q3VxuRmUQh z1X}HAC_QxrhU+`!KnnB)hhr>nOW#*M2KkUqLf{t1Aj0pT`Bu6E! z68v}L4&`0$mMBBtKI3u~!WgMSGpnSQDl-y%&RJ|jcXUNgw{ zC*MKS-y=!u$!A7?6&I-#KSUVr5JQepLsSFMxW42aB~g?x4U@N9qlF^6@;|hloGbUq zPRm5ZNQVbcA G%HJR9$gna1 literal 0 HcmV?d00001 diff --git a/target/classes/main/java/controlp5/FieldChangedListener$4.class b/target/classes/main/java/controlp5/FieldChangedListener$4.class new file mode 100644 index 0000000000000000000000000000000000000000..90365ea47b89aa43707f43cf1dfde3b7c6c5693f GIT binary patch literal 1687 zcmb7EO;Zy=5PbuYg}53-5J3f0ln_3G3Mj@eh@eP7tDvyT+prAD!m^9I8}zqW<=L}U zfR+c#vp>r6?PQgth!h@nx@We#-<$59{`u?McL3vf*@6Z%8c3Kpg(iW_wzS>srrecT z%X35Db9N@ObGCBU^CjsP)q24WLggyIe_Ws`EZIT-7`+N7b<0I~%_drq6lmF%PX9&} zT%fC#^PF$qZA(1~YO%H6>4j&0LrUzG(=*A@jmrYzjk3i?4c@1wG z7ZoYqOdsVqc=X6XUk!AHTa>M9Cay=9N$}oo61})#;wA=|e)YC2oj{kj@29Yr^ zWMUX20_l^MNFXUKO9ia#7;C$bK6!Bm>zd{(jr3}Qna*O&z%3KEaYx`vJxYJAS#2gT z-a5(`n5({LT)d;1JeCCGki`Th4cs+x4^sj?$FR__X9E>h&{m~WW)IbrH0Dvaq&b1U z!}geW995Lgv`+5qdrR$vw&xmn_zw=cYh%dG|ENM$N@_YXSM?))ELA6e?y<^F%X{m* zW~yMjYN@=vru-GT=IF=cS<+dRz8&r3L-wW3CLFF?`}(7Ud1+a;i>?gIKEs}}O3K>e zgK@ogtom{&t*u456UR?3du88Jb9Tg_t6sp-D97YG>spQ%@JTPKu;i_qC}2^b+0i3w z#S<8)ZlGgRV9vW7a(PDvfeO&aXV?yb2ON@!UL(-j8qF{*IhnNN$kCF6lvWM=I`N3| zF|{Si$hSK)v=5OP-iMJH*~jTjS7INj%om*htbLwvZ6Xq|g=wxAbewL?AkQ8BqcP3@ zPpLQHBDGn)Mi?K_sI7CEJx1Td=>v5AKyP7)`qcyUe?Tua@fB%`RK;L)=m6udBT`pC zAyN3Op(ing`waGkL3?0u-9ZX(3GU+-0!(6;7G>JJ`%5x~0n9N05%pY5_ZjtOG)~SK aG-bT!+&5qzFDMh7P76#6m_(szQ~eF$oVQ5; literal 0 HcmV?d00001 diff --git a/target/classes/main/java/controlp5/FieldChangedListener.class b/target/classes/main/java/controlp5/FieldChangedListener.class new file mode 100644 index 0000000000000000000000000000000000000000..a7734e3455532ff5945c19829581ecd64b58a8c5 GIT binary patch literal 2390 zcmb7FT~ixX7=8`}mV~81_$blZMx-_gq@kr?ODGzkQ6!}(F$#Vzn?qRG?8ao%Y5kZ{ zFTC@{8J+P$ZoRb~OGlmY2l$V?(D6NIH_4_GE=XqfBP4b+0@ zLbrl|iXQYb#LAjsr4F_GT1vMqr)ry(`Bc{6W^wgEvr4>}GinaEc$FdO0k-BDF6BDe zt-1_b^XU-!5L6IS(GQhjNIEcyFm-S5kn0XZ?~-8|&N4%HEM5@sb1DWg#L!pb&Z?=^ zY78T>c&=qBH;Fln5e1_v#xTw>_{=%^BKtM2n_86@Wg-m8n2%=LsTx)(?Psp?eUpN6 z^Ck}yh$whY#q+qpaK7cC4aYE0<4#7`d97ybnVcaI+ZCxy;G&94A{B)~$v>>{AYR0z zf|pcG;c{EdS<}|27=irG)*XgnUzn|Iuc(M2PKg<{47n;<8hOiB?J~otKQY%LzN=uG zA<;>nPP$HA3n77|5b7$!VXULDoea~yVA~4gKXBFd?=;F^5REvi;u@|q^xW6XI#n=w zy7z)Wq=VGLR7vW<;g&4xmcvWDs^FEgDG#dq{69HAc5xr?wh% zB{J;P7WKSCp>VBC{e2gk3ht@c!dndo?HFp^im)&(BJuZ_r)Rv-k8R`?yrZHZUhs>j zwwu(A6xI*8e#9`@xxreKBVM4_Vbv~DHw@+si*MG;d%T(#JKyQeeVyKHUk0XATKi&DGDLik_LqTh6u75^ zoPbRkDUKk;(U^!~ABR_GH&FTZZE9s%fL1$rp)icMSA_1BzA|M z=g>{hX|k9>5J~LPzj4A78t>x+TE(vqiIoJyNBG#~WF;tcQ3A))Cm7gF&YWO)F%Ss^ zPH;X#j~5;zdV-gK!g%6OBz6*!!1T;h%sfHr7wma}xh7zt0k|mv84qx)30P_XmL(u6 z0pVBW`3QN)G|pG$dH?2PWRoYzJ)&rV@9_iHC_|C&GF_&?EsA{+D$;amE>RtCV-6cM zT5`x!1@~szwjK!zZ{*)l=~;G_na0MuCo^tmtvG zddJ|{mvJ1UgafLrK@q65<8mAl{)l$Q(EBgu6oeH_M5F)U!is`5g$_&!7DC=6Bau)j z@f%XV<86kPkRd7BS0v)sGDzW|DdJEc%CKlhu%tYe9%5m?(ngo8j8GVqk>~)|xCgfE cfG$)d>Qhu{ouo_?w2IGyyHE|?PsUyT2iy8qm;e9( literal 0 HcmV?d00001 diff --git a/target/classes/main/java/controlp5/FieldValue.class b/target/classes/main/java/controlp5/FieldValue.class new file mode 100644 index 0000000000000000000000000000000000000000..ceff382cd77a5ef3bdfd395d1c312d2491d2cdd1 GIT binary patch literal 153 zcmW+vIS#@w5S$GJ0~IX|H8i+^7a*lVqCiS-oK@mrY!nn0)y=q|Tk|y9#*n(`?|WT1_El+o&kAG0Vz9jlwLV>1wuzA2hV7LwT5n3i{2cqv ma^XA^mP7l{NSv#qdn69rZT}M!KpJu`EVDU85Jd@QnEn7l{w1sc literal 0 HcmV?d00001 diff --git a/target/classes/main/java/controlp5/FrameRate.class b/target/classes/main/java/controlp5/FrameRate.class new file mode 100644 index 0000000000000000000000000000000000000000..8d415c2261dbba9d150e3333d68b171ae9c0c796 GIT binary patch literal 1699 zcmb_c+foxj5IvKNo68Cq0YMbJp_>Ja3Wyp+1&v07qJb#B=nzI(-E6it8!tcLi+|t; z_^ef2EUoeb{3y%rO^lQTpM1&oboX?hK65%het!K9U;@iAgaqQxJXukm^i>QI0Wp@q z9%ve3I^swO9Ii;q$-I!SWTsqoe6MP|lbJ>J#<%5)vIX``TaM+=2uP#QE_JSPX<;(k zHoPcTvW1|!EuH6?qVHMG^ERG*K3$4K$6gH`Iy%v{3$h$f^MIxiNIt2&%{#vGUP;0! z@_ap|V?VkDI=01%^$LY^9PZU|fJ=wVj<2C#;K1L|X6u%{s=NgHFu)8QqGTgoieXRy z>^-96D2@>?(sh-yDllg3oG-n@)vTLM-~@&>oYZj&2K9HnYFX84L<-UGsm#JP*R_=| z5cR5cE*~*+={z?!x$%g=AtV2<@_iW7aT*zcm|tzsEzoW3yh2cPoYip-;{sYu`TXbt z<88-j_wp@~WSQDY9p^E{)Vh-bLv6+IM=Nn$#3c<`9n-kH%Tu?q37$)A2ekATc43S_ zoWKdDsvgT~GpH$CaDS>;+bT@twWAC=C!rp|NKRZ?tc z!E)5ydSyjJW-PR9l5DTki1zwHC? zHnK3*R7u+Pp#R?sKym7?9yLD8v}PoYKWlc3)z?l9+i@kSz;8wc2L3^}z}})S%P;4p z+Z;Yotk%7<%2`ZLN2}^-#z_mH(|ZD8g!n&#tPt;e@TJ8LA`#l!8xY9R={>X{f5;pe zO^H;vC(;w$Le%U^Y#?bSH?YqPZ=mOMP~ay0_99BZ20Ex!H;$tp!x%&wx5zuwD1|(3 z(+L>D9ZXRpwhEXhC~V!uJ%Y#90s)Ey)_t;~l=%R~Ca^1%&H0)+z(_uk83F@H1nyBv z9}AlHHqu&6HEPgBMFdN_S?nXV;bKeX@;Z7RN1oD1<~ow@2aKBE(6_vWgQ>%t7$WCB z4!m=|;P@uen;6~1nTHJ`=q?8*)^TASGb_x^$QG_KH{k%5WW@B{oP@67)G^Ya&gbv!jOft-Q7g-H|`mX5g>w2t@} z-g3hrmZ2YQw6+tgyTLFu5b+Cfz(;=kj`tZBYV}T53T?Jc6j3r@TDSp=VLmJFl?+D_ zLt)bkym*V@V=WUdt)M+_+ZR&fwL4mX&x1j$7fUY~w0G!N-z$;WX$v#38H|WWkuPE@ ztP{!56~iF~l4>bh-RF9X6ii^&!Y$lpC`vK#hOv+gLG1#;oBok-;|$7cD%}YP>wvqW zo!!BIl1qW=14qQ3ad5a3o#v(o^#_wSP_Z8xQEh&e3N9bnF>j+Pn0er?)=& zbF?lt9OneAnakO(T{?x~I6pAeY@Fcc{&$^qkDk*yb_F&bVF6Y81C=Bni&&yJLc)D4 z6S}f0#GCM0v?{)D#8;%%ZaB@=a=tuSE|iT^lodw~ibGvYphh>juJPX{@hQHY;@fzL w6&-DBCZ$7FRz+T0kI9jhiuYfQvtyRs|2=A3I<{-r3vraJvAtMaI!c35c%zIOy Hf{OG9MAI(| literal 0 HcmV?d00001 diff --git a/target/classes/main/java/controlp5/Icon$IconImageView.class b/target/classes/main/java/controlp5/Icon$IconImageView.class new file mode 100644 index 0000000000000000000000000000000000000000..8b94ddf788b68c1f0ca4aebeea72ef0034685b07 GIT binary patch literal 2089 zcma)7-*XdH6#mX;lWo!s4XscL1uLeQCPO-#`5f zU=*eXg>YiU5KjK4v2Ntey5qZbdvz>d46WHQHay>Od@lhNQ4KL28amoUl{rCL{*_mZ zWveQz4MJ>6IKrPM9L-c(oh0FtL)AE^Pw41`&LMtHc_eA^lq_dIAr;hb z8_sfmX7Q$F`h-YksG2|zUeItr$3gTG4z(+Q(6Ma!^J2-b1%YK5*r(&LjEeKtMN2H# z`~>=ORKqbHFJgeux9ZkS%ku=EYSvvVKYPJ7R%^oaILLPm$FmLJB1AK#lDuILj_Y_C zX+FX;Z32~K!V@}PL55MDY1oWbGfi+-M-C_1A-oxf(br{$Q#$g}*&)2S4dI(L=`83N z!D&JlizsYk(Y68sxC~_>h#J#z2Cp%*LJGtFzJ$y}Aavg3&*z6wha9Dh#7Te9f5@Mc{m%vzG&bY92XC=s+J;jP-n9m05K zcU4=IPPXrbp{j<9gyXH$<^Gi|ZCh^Gj%u+kE9vS_(iC0~T@N}c(y8m^G* zrc;%jNNC@=JG-4J>-1~ZR>_1Td)$YRWbE_$Se=ayoh=)T7~j z!ok)`5Qg_8@4xQ{zjB0$_7`hUce)V7D!2IsRc;pu{cV+DD2qNPmL0=ibD88Tm0fkT z41UgvRBfsyCKw#kd_ZEZzUG=%Nk|#v(tS#vLeR^OW4T4!;ErPzlRGAphD9DQty)IH z(gh4~i|zyA0w|S|gNbLR3Pp}T_LhSQs_+^}WOF|vo_&JkBVH+ZhyP=Y0j=R(wsmPE zfeJ41lVsP28R!qr7-iqn>|?|m=#JX=N}+j(&2cq1*sC^hBqx23@lpeWp*6ILiO_m= z6Zz)$aO|}DJ-R~wXl&#m^rjsd8C>sG*BcmrBs~pGZ9;^5Z*HQn6(8LmA8i@`5XCLD zx*e^yK_6(MN4J&0_l*P`ok5c6xPwmmjOXmxKC2hM;R;(S=J@PeNIb*5{FbR2 z`Ze?@3W%*|tm_V^5^P`XSlMGUac!^7{i$;-b~O~6Ke!S81?_V37xXkx{2%R-0yo@z zGsAhlmdp^#=AIzZI(i^P{7Xy>A2b^X~!SiF>;Ab~`RG#FY@YCQm HQXT&Q`7Pr2 literal 0 HcmV?d00001 diff --git a/target/classes/main/java/controlp5/Icon$IconView.class b/target/classes/main/java/controlp5/Icon$IconView.class new file mode 100644 index 0000000000000000000000000000000000000000..003ba25fa0dd8d298e49499f631a8606540441d2 GIT binary patch literal 2919 zcma)8=~EO(6#w<^!ob?-3Pu#X1p=%Qyb=sVgKLo0Rfrhy1c%*$9UNxXnc*wpULsw%pi&ES}AI_U%!6$`}J#n|Lf;p0qn(X1tEck zaaA{4#?(o*C2g6mZ5g?JEeW6M-A9Dus;28i5kZN9QV9iR0$U4dCCNY?|MctHlt5{R zZtCswIlww2Z#N2grVmaVn)9`{2zClc|71YZN3&EM(ZyC< z`EVCYcQy4hV~-?6P&vy?Ybn`BB_87nl@xrg{jkczqJ5@C-$3d%#f0GTT-#AW*%m znw`0vp}8E^8Hux;@&r4ijdrH7(-Vpn^NV1-B-vI|dERkM>&y?<_ zv&_^aMwl7VogS0Rl9kXgM%q-CF1mGmeYh=2?tT>viE$7^I>E7-(Wd!EC7TKYkJa1R zQBLAA2%oEl#;+vQoU2=AN*&e=f!czK-l3=IN=$Hw<+{^r6WX*)lwdq1F}>Kn&a|sf zQa!fdS&8SE%i!%IMEVyfifedY!3z>E;w6G@A=n4Olu=&ZT@lz+EGIv-$ibPB5w`rQ z#A}$L8f9#CN+8*oTGq(LYtf!e7ECtbk2gcJlcuZLBWhZsLBu2O4T(4L7Bx7dJ2^wW zBGC3A`vt9gJz$W%EwHUn?o00dK^aL9yr@+v-PBG@j1Oz}DRtN&PG!m>p!ch`&ijBF z;Tb8gy{PYdBeTQr*?_3%b7@K*S93uqtq-it z{eziGEU^CpZ$a^lc6qv?X?ht#(=-4IPhBp2-7dRs8lFroi=&{QrOdf0 z9R+2)&K@8K(LQU!PHQyq$U`}^cd{3{r%99MPr^{?-cXau_=xQ(_^!zO_k*Up6rp!b z;5tMs#*ZOA(Gi6BwI%L5-h&;YJrHe<|Ag}9JE-`Pb|KuL-%^r+NZ?(fCDVxFCf=h} zFrIx2p&w9=5@OwLUO@Q*D(8^$sdcm19QVoEJT~W1AME0Jw9G@HWw(F4Zx(C*BiZI3 zxASox2TF{YE}!fqvMmy?ua4w#I8f=%<*Oz~He$7mjx2IkSQ$f7s` zR@MD1-Y>xNm&`0Gd`g`|wNE*-sJX|B`4km>a(+>iHdpevI^Z8!@%rm-b)@p;vFq-R zJYM0RhrOPgsHI*WK~!{OjYwjfIEq%0!d}sX1ELo_;w1V+KL*7BJus(nS)9RDagIjk zdE68i@Vyws9WjKv;v)VK!(z1<5w&7e)QhZW6Jz3-7#HV+C2otH_(j+rw)Xn?39v;- z!u$BZ!`@wdNXQG3w?TY_ofP93`Tv-x2tJ{hcVlI1xF-B3PKQGAwuZ`8XBAxQqc26@ z-waFz5d{qjszQWwVv1NNVfRxXyY$aVnEpKU@AwT>dA$BV&>sWcpV`2|VTz6|ls3oj yAY52`i!ZU5AKk0D;69b&Gkoq@_=0SN@Fl+T)?4_R)=J_;=+*s()^BN#SlK`P7u9(H literal 0 HcmV?d00001 diff --git a/target/classes/main/java/controlp5/Icon.class b/target/classes/main/java/controlp5/Icon.class new file mode 100644 index 0000000000000000000000000000000000000000..da32ed995fd2aa3cc85274acd00c0ecf5b85013c GIT binary patch literal 8704 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 F{0|HpV~PL( literal 0 HcmV?d00001 diff --git a/target/classes/main/java/controlp5/Knob.class b/target/classes/main/java/controlp5/Knob.class new file mode 100644 index 0000000000000000000000000000000000000000..66253f510a61265df69fa6a8edafb629c9ace637 GIT binary patch literal 11145 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 literal 0 HcmV?d00001 diff --git a/target/classes/main/java/controlp5/Label$Labeltype.class b/target/classes/main/java/controlp5/Label$Labeltype.class new file mode 100644 index 0000000000000000000000000000000000000000..471921d5d6a27e6595f8ae14217c42bb4029e102 GIT binary patch literal 628 zcmcIiO;5r=5Pgf-LP14E6VG}85B7qmsuvQpNfS&kdS2SGl$5sFE~tOagFnC@WgJ$b z7rB^tnc3OQ$D8-&{p0lwKo5sDDgwtdnPl!%E~FdgnO1pPoV$S>Q+i^oeksUCRiI^Z zQkli>a6F|@3sfT|p9G>#u(pX86ehY z!8@io^Vs6(j-K@(S2L+KMFQnk3mmQ0hOvB0Yyk|A?*gz`>`ho4+Zy)>5_Z&MU%$nPC!>T|$Um%-loH39!aTYTI^J9Sp%@rb)AFsBb8a?49uB0hw}o9qp*+plbO}t8xBbEX1>u6eA^ieToSkaz$xF|2&{hB zwFi}v`zlhELMzRDUN^CTHv|&xz9;&{*# z>aGafI*r09dZ_bPXz}R6?(+O-lC%COP&*4)h#8|Ga(@H4oGg=eM`ka=eynq`0WpY2! zN2WZMP+aAy2_;D=MM7yssHy{BfzSpvNvO_kO<6yZ-M|-I`I2@F4X$nBN>s7y9HmcE zSM0*C%IB!|Q;LhmNk&`*?u?7SbTahZw$6#rPUcjx(Ic O_-)yteS_n@$>cMU=rZ52d5Q8CT@=RyV+*I$L$r&r{(#&={XS+j!nvTw~ zdaS_8D4GnMhE;;rQyLZ+H_aYN5MzMm^kqQ|`%dUOLRpP?6l)BuMT=n5a<(hh3+kpU z_n@6|r#);*#kS7CdTbEHxcOc)lVME81(H?n4dzE7rrtNf* zTeyyyD`rjC5`;SviOwRbco;e28;Gc$8VMth(mbxI?H%ZAX4@1UCNLZ5+cn#P90 zTyc80={okjLch?!MG8G)X6>omxQZ?|FjyARkq|C1Foa8q&RZooqZ*VXf4b)i>@aXS zh6S}5$GlCjxw@8*^GX8=#aUm-7krp8?9}8Z1?^Sxp0%8$X6a@#ZK=jq#hp?By9JkY zREbZOsQRvGQ1%$ui+!vfyO^-&t;~phJF_L%>fDHdQ4LrfE6Xc76^d> z^ewy1LIAIhtAggE3hViMrmws#FN+Vvwm@TNQGFo#qByW6^_dLCmt-E)}7G@EBfXwrVmBap~Dv!?4>8TO}< z{G5}v61LV>gO{Xp^mOpnNak`pMOm|0v{+j!|8=X?m+BdtdHCxfn1nPn>HWwnvyK!) zhEj{%5LbjaHgt7A2kCkq(P#J-!p;1Ta1CS;Q{>n9t1u0lUtI556H3_;eOsXc)Tnhy z)$~Vd`lB13;JSxNVNwn0JW>Pc7E+9KlyoNPN>V#%U%a;KS;(_!Ttsswob8V+V7D)6 zRer|_^T9+$XWGkpZl!$Xl1A%9f22+EJWkRm=+7Z3t^txkdW6(SI!4mijFU7DH^#%^ zY-xwKi4wax(;r>H0s6XtJ@If!z9m!Z%?wt^+9rHi`;zRe2~}$;D+S2UqH1?Max5M_ zwuny6MvaGJ2J0Bx7f>U|`ObL}7s*S!3|>Y`Ucmu*731<6^71+yc>@p1n|Mgx!lUvI z-j{drqr8Woz8q7>I}Ck>|0!yQeK)yNJuUkRP#De)8}P`FbTh zEhRiHB|I%9JS`H2U2B zg(Xf8-;-S8SDoJje(@ms<~Icp_4I@hTFnQE=xZ?8VOy|6%(qKxThv-*NBOP7S}d?8 zxT|EMComBTovissg=VOvc{j{p^RYlPaPPolX!2oGls217gdbI2g;BIjWY9-%xG`A5TQGXH@JRdPsJ z+4x7Ge4fPw@-7M4w@*kNN0*Y257_8gx80C& zT{JXTib2#A`dq}y*rhB0 literal 0 HcmV?d00001 diff --git a/target/classes/main/java/controlp5/Label.class b/target/classes/main/java/controlp5/Label.class new file mode 100644 index 0000000000000000000000000000000000000000..6a67b3a247b6ec9323c23cff6de22b60a7c39782 GIT binary patch literal 11334 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 literal 0 HcmV?d00001 diff --git a/target/classes/main/java/controlp5/ListBox$1.class b/target/classes/main/java/controlp5/ListBox$1.class new file mode 100644 index 0000000000000000000000000000000000000000..663fa051cb9b089cc8ce5f2155b4220987af2534 GIT binary patch literal 760 zcmaKq-%b-j6vn?pYZtbw6cqe}KsCK+F>xiKS8KSis3BR@1k?NJcBDhLJI(A=c`Yso z2^Tzok7Kwdoav$x6L*uHo%!ZFzcc6T{Jg%n1h9jb3z$R2Lp8uX)ClWip|bE;d>3J& zGi!7@>4ve&?K^$a+9uTONad|JY>Z2sk&k&Sc<=+%5fBfW9aKg1xFgl4-mWv5T5_VkdQi?Pb&r|Ebg&DSD!Io63t`@$%?VR`26p)B-Jj_*BtC;nKZpray-w^e^J-4ubw52#@iE ZLo0YX3w(w({#NlE8+gGppZ6S&pBqqgvh@G} literal 0 HcmV?d00001 diff --git a/target/classes/main/java/controlp5/ListBox$ListBoxView.class b/target/classes/main/java/controlp5/ListBox$ListBoxView.class new file mode 100644 index 0000000000000000000000000000000000000000..10e62ca8d34e1d2fee45ba402ea43d412109ef98 GIT binary patch literal 3785 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

w}s7)DD z^QRs5Eu`DG!QVSBUS>GF%y4*_Ve?{8{y1KA3wXimMf`-#L!BKgd7+A7o<78L^wQc5 zRhY7ma`CA<6DN7jvU&U@KP6dCzTw(NyAcaWN)Gwg&4r0jQtqTvLKSm08sd3Fe9GKm zo<-h@VtD`OFp$ zE&MfbBs+~<^1TJN-lP&+|6fKS{~ll-_XLY|0VDhN|<3-JwfRUgxUt0x+8CJZ?1I0nSWU|TD@Y>&|Sn{mbys(@c) z0!DkqNg!I}B0AL(ZR!M@phek42Z0!&n$t$`UT*#PWI55FUQX2Y zO-DL8ArPCFz&8Q49dpl0n|mJ2J;b#z@b4!WxR_4j5}MDYvrCIh42mzhgOxM^%^QK^qBP){onbEhJ%s;HWmQXMbH!O{vk z2i`7HO6m*Y6idTzlN$J2h&qYH7DwI|oq|-{A&%dsSq9w&0hhcZTEpi?^*Ui0|@)dZU+X-ko4wM34mU1;M=Nd%dS~`>0 zJ4V7{Hmjxh74&zINbo@gpQi7Xl%kjpl7DU!zYP;hLVJ#%x8q@h9S>84i=ymo? z1tD>*%Qw?t9%ps@U0KPt@b?tm7i_xe?6U?IUa2K?JLCe}A?eVT3e>%fU9&15!q)E* z-XtvOys2<2H{h+27VufLl$)T0v+*lpeP||LxL!=I!IvvQ4Q)hh>hvD)Tz$Wa}zhxyu|A z2Rhdl-Hei`l+8QfuvhTt!04-LfXYVd;4zaQwD7G|!0(1-TcLn9IPy-a;$4nSOq!{R zhp@U#vymwfCJMw1$nzrq$d*c<6~n3-)UK_3zC#h6juM%F%s&xD@J}7Mn89WMq2(%* zxNB;dvhXvFOiguTv!5yFWd6A)N-Q6TqIj=M#Tk@{-$vMeb~#Kgp}G=qn0FPabBHB) zmp^falX1zrxp zOnF#l%j+5+#Q1f630p SPo)C`|&IsXA7Zsyql literal 0 HcmV?d00001 diff --git a/target/classes/main/java/controlp5/Matrix$1.class b/target/classes/main/java/controlp5/Matrix$1.class new file mode 100644 index 0000000000000000000000000000000000000000..a0c982ac296776af9685d58950d6fbf79bab1474 GIT binary patch literal 869 zcmaJ<(M}UV6g?M8mu?rS)uKfd)QW9EN)vs;_(ITBTSC&NuV&az=<2fD>~0BufZxKi z2}a_BAK<6>;3tS@RtyhHCz+XhXYQPH?w$Mn*Vk_Vo?;`1DNI|)IG90Juym-rpz%%} zsfHT{Nfi2{XN`_ZBJa4;6l9a37gshJ*S8n7HkK3ID$e7=d0kL(Hllu4T$sH z3%ulopj2&N-gZe79BkG4Hm+gbLczgx6a|Y{a|vwax;mz)P0CuXPSRED=Lme$K?w_j z{M*A1tsv3Sk@5x7vRR4S4$4>*%*4LdBSEJ6y4JU_B)E4eGkp||M~NQn9J_jycwr!D zPNe={mW1C92U;-S_5!^-KHS$)Pwo3WDYipb`F$06#=khsnBr5(gcK{yEuyOEfVC+8 z%PE+S#?(4pt@Q^S`1$*ZZ_Lw+wE@H-SVO1 z8)m@qV`Rn$oCzrY#)00$lL+`TPjG_9R!?z!jd{?0kSdy}6Z zeE$Q0eR!`GF=#sC0tqAuy$goz4$T>tjUm%>L*H|1`-i5D(6_JlsHJFIR|v_lY6m^T zgzbg3BSuqbL933GKpKM38Rc~hw=#6HG-sJ1=NYqII~*rynf_u5?dZ_aDX>AhZ>jm7 zX$67J{-) z-k+CXwg_y+HbQ*Xb{t+Zc?q%$PYFDY9gL!4g=g$?SdH*=NEesd8EbYRDDC>Rf|fP639Q&oRbYaE>OTU zg{65OW^kI&ZU+UUWI07UuuBdHP~=_|I0J5JhwPbA z3vJJh+z8v6jy^JS-RE&Z$D0Cg;cX^iGeRw=iI;tY??OIPSd*!v`Fzu}a_Vw9mY;V+ z%bzt&YgBS8hIa%Eln8p+4r-2Zjc{X*fm0x8;6W8J7G|0k3A?%O5#fCDj^+Kt<`(JZJpLK z!`OGV5JIfN31~tJoULspWcE!PwPi@d>-O>AZxeTqi9KUiTq9icx$x74|F|?QZWWO1 z>{wHu|41@9{g2=nB<>wqD2rTYpYV`rePG(9A2qvhrQ$F4N znrr-@hQ-=hmd4p5#%pRI`weK|Tj*c&E`|z!CfNt{0jex-QeLnz$2<0qvT++F4OOmK zk|T7E$YdL6%ML7ozQe`_p3J7xa?`-}x>|SE8+cZVOXy2D^$8_rSv(NeMiSi#r5L=6 zo7zaSJE^vN?jnq`E@5AHVsCeHFn$M}%66cEv3qEHv^gS=UCDE-TJJ5bWSOkiH^)oL z@t9ir$`P(5OsajhEb(1W(!GcE>k0n6B=rrvdK=m@0C}D~LIs>q3!jq~%5|sGs7y+J z?KU5Z(W?QY`k#{j%#+7KjiffUT&*BIDUEm+J C7#GX{ literal 0 HcmV?d00001 diff --git a/target/classes/main/java/controlp5/Matrix.class b/target/classes/main/java/controlp5/Matrix.class new file mode 100644 index 0000000000000000000000000000000000000000..9d3c933fc9ab9c439e2c61233105eb007e71f648 GIT binary patch literal 10492 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 literal 0 HcmV?d00001 diff --git a/target/classes/main/java/controlp5/MultiList.class b/target/classes/main/java/controlp5/MultiList.class new file mode 100644 index 0000000000000000000000000000000000000000..60be1f2c1112df7e7aadbd071b36d2ddc7b6db7e GIT binary patch literal 7812 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 literal 0 HcmV?d00001 diff --git a/target/classes/main/java/controlp5/MultiListInterface.class b/target/classes/main/java/controlp5/MultiListInterface.class new file mode 100644 index 0000000000000000000000000000000000000000..153f83c7bf6056ef18cd84787cdab411fa2494bd GIT binary patch literal 430 zcma)&y-ve06orpVLrPmp`4bx>N>zz0FfoFHDg}XrVCd$$m*OhKmhF^xW8eXJD8#K{ zW9i~gwtPMvov-hYPXHG`3(J=5ZVCJp-gxtw z#DJRU5Aa7B=WLr&rD!(0J2Piy&Ntu8IX{1W`vD+^EfpSk75F%6P|MJFpy_6GPdn10 znY`&(dE;<0x*?98tS*clhT19J)SYRDSTI@5b*>n+HW^R4Nes=*Mb{lmH*@h&svdQy zSDWyx%b@BxGj9n)x5?38EVMwNqe-&FrDs3K00t>Cb2!N`@E@vF4CA(fI~;ccpiDkm%kK9}Z4r zlV=OrtVG&Xk-RuE#TA#)Cmc@^XK4K+C}Hl1W15A8if5Qs@SNiXW~kIFA}TY{{8Aml zqPF!06LXbpRJz4gLOI9r67y8PEu7Le!;-*iGg}^2iu7QS;}sGVxnG{9{$TRPS)+5o z;FH~CXin1LuM`f_!rIW%23cB@`HW_yG)tFy$>?)-b!tcTBY6D)5pCSr73FTwP>{N! z9k}`bri#29X!+_W^!x)mb#dL%GW*NgVF{bMo-bG#v7k%zo!7yP%l$A!414GX0)3gh zdg%L_v;@5L07^JAb_sUwIxNvw5(^5dMLm)v4Hn(7j1|%-0IOtUuC#_XZd&R>DeZUi zmhtKEXDFw5Prt@fr0C~A#cJdNZN4)slG;sg-vx%gVB{;tJUE5#ykzpLXBZ$kM(<<4 zdV#5}uoQhCFEG3H33cJfB^D%NFC^k&LJKsa4^5b$TPlVY8qPMt+m3e#Kts1%NuY?V ZTuB;lu}-)*D7psT*r<<`O;S8a{RX!|awY%( literal 0 HcmV?d00001 diff --git a/target/classes/main/java/controlp5/Numberbox$NumberboxView.class b/target/classes/main/java/controlp5/Numberbox$NumberboxView.class new file mode 100644 index 0000000000000000000000000000000000000000..87c07a985460b36fb1dab0fcd4fdb1ad4b77bc63 GIT binary patch literal 1996 zcmah~ZFdq!6n=&!Y=FT~s!>TWF^!h6D$$s}5mO@--4-=1mQ?$q!?J;mn_arQN$WZN zSo0tH3;Ma9l%CTM9zXk|+TPivq%V}hft|T?=XvgZ?w#3Jzy10Gz*X$3h%ubs6_!)p z5&NQSxK7}?c5k&@jYgZRH1GrA1bz~6OsGh3sF-BXM(w)0x7#wkmiz7EaMZNSZx|9m z*YX#a8RqI^_f=9zA+3UQWN?fj8-`^Ir&GSy+A)oQpw=wM3f38v;!-n-EM8NQ<9Hp% z846>;88VM{pEiZPXVyi_v>9ebMiVYpB=j`LNt|Mc*KgMDGcY}cJZ4nPaujfe;q)lJ z0rrHjt&T$(7j=DUEKeTu9A_oZWKXo)meYA4dEVeylq4zN3^pUXjOjebn=;oa%B3oL zf#o_Oqg-3!C_!VGFkIX97-mQER;zNAq`rttD#{$oxXh3rl}qGG!gb8xhA^IVJa^A& zhuV`CE4Zp+mE$eEOpAo zWmdO1ZvTlCtw`&K93M%m%%w&FM!CeVzXbK%3hr{;!zQ5xo<;p;6IwDPlXS8kpKvrl zT@Y`3f?8TH*8el(ims1VJ~~yl>FG{jdfUP&V^G_c-?PP2hHK;SN1_kU z9AT<>$gnW7q{A4Zqq$K0UogtK>b6Ocsk-Hu5zT$kk`m?Wt|9EEAkAn#FvjI+XSg^X z`0sZ_g&`eu&7+=~86z(hk$eYt6sbvt?~<(%P>bFXy+IhuV-@`8%|fD4#T#^HMX={l zYFqVxxr|KcC=4m++DMPC(rG#G*C{QVQi$i{XnIal!kJ7-2~%2-O0hh>RA#WqW}&kJ8te=@Y!3Tu9^bRG zVTz?F_+g6AAkd=JC?Obx5u;1s3feeDxF%Wih<&GG<#!~ZsEE^0rMoOfPnO*vS+*lt y=xwXem#&(UcHt$meSCT(cS7Q`T*%KuuGD~EL5KFl(1jH~cko1FkWZXgY~T-laPKDo literal 0 HcmV?d00001 diff --git a/target/classes/main/java/controlp5/Numberbox.class b/target/classes/main/java/controlp5/Numberbox.class new file mode 100644 index 0000000000000000000000000000000000000000..1418921a217cd6aeeef80bc1af44d9eefd600f3e GIT binary patch literal 6504 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 literal 0 HcmV?d00001 diff --git a/target/classes/main/java/controlp5/Radio.class b/target/classes/main/java/controlp5/Radio.class new file mode 100644 index 0000000000000000000000000000000000000000..955c915abb6d247395ff2cdc58e8eb4d37dfa88f GIT binary patch literal 797 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 T7~_yGa7Yf1FT<~ilXLzHR$&B6 literal 0 HcmV?d00001 diff --git a/target/classes/main/java/controlp5/Range$RangeImageView.class b/target/classes/main/java/controlp5/Range$RangeImageView.class new file mode 100644 index 0000000000000000000000000000000000000000..8e471eb3d74cd5fc25d6d7f680b8c2f298c9e796 GIT binary patch literal 1285 zcmaKsT~E_c7{~w5hLm*$CMqxT;y~1H;D!n+DIqZs49Nn-ncbIiG7jn5rR^|&EKNk? zh4I?2;f3)_7@yNtM@YxTdU{U({XK90?#G|6-vF#*vw$4(8iowqz%aq=*wU+?+2?lM z@x3VU-R?&HjqSC?a(vzI*lp30;vHc)I+fw_8ez6E@Fh#f2nrf>14S5wQcQN4S3f*H z6HdgKE$PW-z1s2ncg#r4gfhk#y_oRC0($ z{M0JoHtuMcG%$r}!c>M(oC}vQw12R7NSMh&DTOtHyM(2FBX(ujb?x_M&yUKo({)8h zc#$}%>6pX3h6MxnP$o=gL`)OUbFPG%IWT1MAnsT*3b-n(($cWRS!VSnPEF^LE*p4& zhXm~;Ns+K=HoAfDh%i*Gar{8kk6s6M_f$HebQnzAJ57mD;d zCYBTJf1-gp)>K3oc*3!BrB}>;nzGkZHs`te9g7#Z-zQ(r(})RrO3mXL^K$$rw-K+; O@q$;KH90KeCGZy_wntF=ELoTvN!=f_U~>)0$HhrEUn1J^K0sGr%=Gf(Yv z+jM*{3VgS_VZO1wj;O}hRyUB5XiM>qFdCi6u)0Q=YYu(O(lLgD2Hijr2B8$AT?U#5 zN2kJx7_%ik8Eq5twR&5}bxdd|8MuK-!a^2!Cn@Z3gWq-iPDccU`C7dhqkEBbO?4_c zMKgYC6>tl;HB1?p#tdOPBT$?RmoT!ozk5KK%|fXNYYcY?l>sGQ$*}9%@5`Pam02|D z+DEQv=$OZXhD8H+Q6|h}BuwkhbE$+zZD_{iK`dA+3b-k&-qx_hMP^A8SElnws|N1l z0YN)X3M6dSn%%&6L>MY%96u1|;p@Qeo=7LOt{9+7S0gNCrAsH_iXd^sV(m&03%uhW z3&KQGdSbtKb|iwgN-)A?(|2sQZ3j~A)58&EFv7}k=w(w{gkp3e{`IA-IlO7YILG#T zAgo=f(PiuMBnX9;?09z63%H5az_1c`XA9d;sbt$4-k!D14e2ev7dT>9DxLIr!VOgl z!PxUW5$w2j7z);DV!)RQj4~Tx41|ZEQb~Q^{K@C}S45ppm-%j+BXYdz%PU_&%io}V z=3Nded>!Q&&gI`ftiX0(jUUmrpUr5c1l8LlIQJy(*fs&-@7E+gi$ zn$@Odx(x)iI?@?J7?U(i7MOymgvxOh6GD0{W;pD?Qg&f>^#nddqCr+WU7!Nj6N2~j z?rYa=!(!W!f>PQ1Bn>-ixrV({j~Vr)xB)XX%oLb~*@Oj!94jD4n9^;yja^PE+2{xDBf`)C;VZW^bAx!kpUT-c+AsY>~zr1U@dsLJ2R34s*XD z(TxJPqlr*zI_qq`yIb$_0^AnDdNgaeLtuk!waT=ek_}>VufN-5srN8MlAxqtU_*;_uZld&3X(%K{Hb zuglo$PCeOYc*bNr4+?x$QYJBF1DA1>Dl_6z-<{gcd!$@$q^AF!%Ti9klU*bxC9rJa#yf9n!bT)vc6XyKd#|cg~ zw{C~oZRu{G&1vfJMWWf;@gP8#wq-N2Evz{Ob>V3QpJhnF z^ZZ@RJfKJM0-vY*T=+R&WQh4aZCn!BufDFLM;I4k0|N_(p`Jl`gZv%Fw6mxrHaN!z ztN7HlGEfol!N@?@gDZ-1&|(P{OG*Yy2l2qHhjGZ~yLA{Vrxp3 z5Vqzai;v*Od@w7zL-HJMW^+wx zsl;Wl%?mh#y9YAZQ8TOfFv26u@gbCr0NpI<1G@(C5C62LD7iw*DvwOl;sc)2Vf1Fn zJH{yYk?DsJoE5H`&`wTeR?UdsNX~#~Oj3QvovgrKPxpfVM)%^Js%$FP>=;2z)AIdx zhHxh5PmZPc{~Xtv0{Z@!SjOn_led2`*DUwesOq8&4*K{nje)+Bg}61o=F_>z_sZ7s zlf2DGu8I5LH#7KdAf6mpsbw?6jgS|@U>5u1Y|CW80*6MTD2K(@u?UWI9nf} z;wtt-(-6?GUPG7^VqG7Bb literal 0 HcmV?d00001 diff --git a/target/classes/main/java/controlp5/Range.class b/target/classes/main/java/controlp5/Range.class new file mode 100644 index 0000000000000000000000000000000000000000..dce170d88d67185a0c5dbc7a8998da9b763738e6 GIT binary patch literal 13726 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 C`x-s~ literal 0 HcmV?d00001 diff --git a/target/classes/main/java/controlp5/ScrollableList$1.class b/target/classes/main/java/controlp5/ScrollableList$1.class new file mode 100644 index 0000000000000000000000000000000000000000..a2dac7b9bc2274c1170057026ef066a4d34b085a GIT binary patch literal 802 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 Jn>^)}#a|F0F`obc literal 0 HcmV?d00001 diff --git a/target/classes/main/java/controlp5/Slider$SliderView.class b/target/classes/main/java/controlp5/Slider$SliderView.class new file mode 100644 index 0000000000000000000000000000000000000000..62c35c0cf96012bea2a8eed08458d2ad75eeefdf GIT binary patch literal 991 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 Jg4YqR{x8|tESvxU literal 0 HcmV?d00001 diff --git a/target/classes/main/java/controlp5/Slider.class b/target/classes/main/java/controlp5/Slider.class new file mode 100644 index 0000000000000000000000000000000000000000..75c9c7ca99ffd715b6606fb148c126f27920ac2f GIT binary patch literal 11615 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 literal 0 HcmV?d00001 diff --git a/target/classes/main/java/controlp5/Slider2D$Slider2DView.class b/target/classes/main/java/controlp5/Slider2D$Slider2DView.class new file mode 100644 index 0000000000000000000000000000000000000000..63582c5da50f2abd28d4c9e51b096409d603c5ec GIT binary patch literal 1973 zcmah~OLH4V5dKCo-e@(lgiRd$3W;$*vW#Uy!Xt8=I7*ZVlm{p%B;mDMjiqrmyQHdC9jbtyT}iHhB2*;0%Cm*2sJju)wj1 zC5HJ?xREPEicqgu_M?{ax^6S%D-)!=A!Mr^XowugD)JPoLb{A>nLfFCf&$**SVw_Sq+fA;niB(ipv!)j&%=M+_!eN?ql9>Wi?4vNjeuHeWQ}*Xk{fOIkfO zj2Skv&2dGW(nC|!j;{GC$2DCumwrikzTdW_@-^OdjvJ`-gRD*vx3GVkElQ8EKGl;u(Fm4?Mdm-BS?|FGyd zl{|f3(pBk-TiwSEq3&7@hcwew&$gVprKH~Xl@t29GvvqOzVJj88InO;9NpK2F{BfF z{8L03^z_3D3IMz(TPf@X4aq|b09Thyaj z^Sa6wWvQu44NU7g8=dir>k3tJEZ-Nz9v_%BHoXfmdK($;fn_rK0j4)OPTwT%llB2g zTjUX=)m+U#2V4CK#*eg%;UWD_k`Gt{Uy?iH$~}%lpxKX1|AQe(eBj&yb4zHhzE^N$=^1$nX89{eTMt;o?BJ z{8VFTw*!=(;aa|*;zAU8IpsD6uFLyer|UyT%f-;1q09H5X*#H0l literal 0 HcmV?d00001 diff --git a/target/classes/main/java/controlp5/Slider2D.class b/target/classes/main/java/controlp5/Slider2D.class new file mode 100644 index 0000000000000000000000000000000000000000..0f55d7b61d1a49671f3ccf907518ee40f6c73ca6 GIT binary patch literal 7504 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 literal 0 HcmV?d00001 diff --git a/target/classes/main/java/controlp5/Spacer$1.class b/target/classes/main/java/controlp5/Spacer$1.class new file mode 100644 index 0000000000000000000000000000000000000000..ef86dbc6971e3a0e767254079924d32e871edaab GIT binary patch literal 206 zcmZ{eK?=e!6h!B@)z((9YjNSiwL#Dmh=L1o(G$cNYD-K?Qazjt58$E1w5}bPnZ-Q# z|NVKs0IZS42ne$quQaRqgEL`tYmI6)tZ2B9cCm^P5%PXiT$k*0uBB)RX<_bG$bF?G zA^XwG4kJuZ*g&6n@FhuM-LgF*+ JO`h_~lP?K2F^~WN literal 0 HcmV?d00001 diff --git a/target/classes/main/java/controlp5/Spacer$SpacerView.class b/target/classes/main/java/controlp5/Spacer$SpacerView.class new file mode 100644 index 0000000000000000000000000000000000000000..e2ba1c68f64a9d447a27602473f9d11657365f2d GIT binary patch literal 1649 zcma)6TT|0O6#h0XO-X|kymCh@&RI@ErtJifR zuM#x*WXo1+Rb8z!_@C*9L0dG>gBimO84(_D(6ow__alu*I3r`06X6j&)yqzmD`PU^ zT-i&?ZB4IK9j={|aTD_llA`h}Bk2?+`XAMC`KDx~af_JPZgRzFj((hzfCU+gSYi;% zdc9^SFBz7jg^n?0+Gf`48tMcQcNwPI)hX+BnxWZVbNRDYS!3ug=%%*YI6lzqedWL) z&0xV&6{DosI+t5YKkq7r*)F&L*18!6R$&g7I7w66b_Y{06!nU!I1QV!v|sp(OUE7uA^n;ZB6jJyw=24biKOYJ2=w9^?tq2Ed{EF}@{^9{ z5ozzaV@eY$NaP UkMNlGLDC2`k_xo$kc@EfJG)Vb0RR91 literal 0 HcmV?d00001 diff --git a/target/classes/main/java/controlp5/Spacer.class b/target/classes/main/java/controlp5/Spacer.class new file mode 100644 index 0000000000000000000000000000000000000000..28e46adcfc39a930fb4603c998c74c4f6c8ee0a1 GIT binary patch literal 2197 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 S;AI5cxX<4dgCd;J9pEQ}lkQXi literal 0 HcmV?d00001 diff --git a/target/classes/main/java/controlp5/Textfield$Enter.class b/target/classes/main/java/controlp5/Textfield$Enter.class new file mode 100644 index 0000000000000000000000000000000000000000..a7c34a5c1065d8861c98903261f5e60475af24bb GIT binary patch literal 1291 zcmai!T~8BH5Qg9B2iumVR0ISS`6|#BrKsQsASxB4Qt$#&3^(SqU2w~Gmu$BN{3j+R z8e`OWX96`b#vkBcGBM8CR%wLPi|y{rdC#-&%-QLWUthlin8I2R9(Wb_RQSx7! zVeTX!=Zae1Vbq*%>drjD8;fUy2%}v=M8z3&5c-d74Q*Bx6o zcWNtaqZ3^Ux>cM*525>X86n_UwS9!nSo{QyIbobvaRC85SO*AmmSMKV6Qc3#nFvqMmKl0LWY-^GJ;VB zV=7{Zvs<^Ke?$adS%1OKxV34yVO+&!T;Z6l6UJic2E%oCrx=#jk}4)~mC$}{Eo~OG zeFCKexK4oNPpi0ro6Hx50->w1AAj&$l6G6g3}(4}QE{xip$R@a+LFz^qhcO+3I2L^ zkWZoMM=-14J|Wsvld?)BVX~v4*neR0EcYyB6}V^Z+-z;FQp#!ehR7M5>Bv}lVPu7^ z%ebEO$w?rLGzZt_hAURIeJx*cnAW!Li2UxV*sFs=>sH0iYfHL(Rrv43O~`{KsA<#G z?35wOWsP6wcjpiTJi7r9?tvl^Ilny89==+!z}XZ(&2ua>p~UzRDDef#XIJxpe_L1s zdWA)P?yjk@gohl-)08wm6)Z!ov%bMAcVIVh$SA%J(N@LTDtb3%R7GDcIZ(e<5%m=s zbqQB@yn2L*deCvLiYa&X5Vu~URi>+$+mvR#kYW?O0QHZ@*1~C=VgHHrP9|yKl-C#1*{AKyW`B6?Nivc5d(eopCYmfX=pzU9Hbh^H}9{67d{hR7P`?>4EgXitEP5?+u8iS z0f*PO;z1w!OT)`J}qrwf#jcOB<{MC;_2&FPllk3X62LVhetJAtjG38~(!Yt-g)9Fvnq4s%w z$7wqQ6_M0t#?J5MxZ65E3v9R~*`xZ7__-oQf6lZ^oU%{Xw>+G(0s%*Bdl^fT8Y}eR6+^Pb|5G2%`Eu4;J529#`OiQ{Cw5 zZhDRLUA@1c^(TIIXd6{5!8$H1qY^PFTlK7|EH3N36va3*2kz=q6^%NX=M%~G9@~$z zAIZ>WZKdDT^)p)EqSL_lD0jY8PiNnt_bo1$;U&K>^&e-8E2zT#68}wy{+qDMZwx%p zT1FLl)I=BD4e8{7X7fFaxZ?nhNZfec%e}J1U!6QXjx8|wRF)HElnEK(oI8Jl8deim~>6RP1gk~=!Swfxb_;i zUcsRqjXA0Ee{vKj5A~ILG_}X^a1QlOK90$!RD@X@qD7u^=GYyXj5R8wgl!VB@m(~0`v4#V1d#CVcHg0 zq>R8F+7VcytU!dm5QtJvV3~FWVw4xSOM3$M=$SyAo(rtd3xQSI7r0Mf3Ot~%1Rm1Y z0*~k$fyeZ%g5som^xRFj-XRcwji8=>p1IqvKxzle-aiMEdEV&5LfLl+J3eC3Ig5E` dgykmh*y5gjgvWfZ3^vwSs^2yS5=f3U{0W%o&=UXv literal 0 HcmV?d00001 diff --git a/target/classes/main/java/controlp5/Textfield$InsertCharacter.class b/target/classes/main/java/controlp5/Textfield$InsertCharacter.class new file mode 100644 index 0000000000000000000000000000000000000000..115e1f3ed261bdff25d4e3050d5399d45c15fe03 GIT binary patch literal 1270 zcmah|TTc^F5dNkuT__8!RS^&bv1+#n#S7kwh^(4ytd|6Y#1}nm53so1HruU%KVhPY z8lLnokRT>L_yhb)CgPm70lct2?4Fr9Gv9nOXXg9QuipS%!MzSd5Y-UV(S|r-tSlTa zzb0OZyj}4Ezv5OW^Yd~&Sazga%2-}a`hmGBd|?ODC&YtQr8Bo3kkHNLqkGG zCv-xpk-`<;O8)WEnzRFknsPiRm?lKC#zF_Wk<^gVaRh0?U?@0;*wx9yIGD{ko=h@_ zV>qs%N5={D9s;`O&4gBD@IY=f2$@k}cUQ4Gsbc_xgzo3%4a=+6gZqx#XvJuF2e@~8 z&dg*8!x~QO7{M8W5nA5CNJ5*aR$V3)%bLbBMd+-Kb2v}vVnXVrX6wt#>S=n5`#qiu ze8*d9-V{`jp(BS;Li)EL%PYxs0$B-+VO&FA#{@1Cdj5^XEpi$IK^Vwdrg2!p1Sh<# z^R)3Bwbx|ON;8tRjPRZnG+ZNOLc3#D%4Ok|2qW45fEf$iHM3HZgk;h2AbdyZEn`egHz6Mm{O48_2%21%c0FL+uDL+iFCU6(3opU<;80Ot=2jMCxl~Vi5D;?pl6W7^#gQaQKl_ilI z{S3-|fwtA~xyk=H`+#1fz;aL13sbno8v8fUcoG;vZ()5zR7K!vZX2|Xt{ogr_kBWa ztEu$^VZ!at=t#uK5v4cyCidGbgR=+BP-XKYDk)n4z+3#V}2h7uE pgQ}v#BwAE&vm8ex^#dlCFvD5|cQDImnxzO2p2_kMpLb{aegWx*L9qY; literal 0 HcmV?d00001 diff --git a/target/classes/main/java/controlp5/Textfield$MoveDown.class b/target/classes/main/java/controlp5/Textfield$MoveDown.class new file mode 100644 index 0000000000000000000000000000000000000000..c0acb6504c8dfab0849831ee68c7c2f50445e330 GIT binary patch literal 1203 zcmah|YflqV5IxhDZdtZa5h$VvLdCW!#RtBM4=AEdikd($m>6B!3oLARo82vf|Hhv{ z0>x-z{OmUqO?>x-JvFosKnC@Ufh>c33r z{U^Y`VOfT8MdKb}O~R(IR=ib}mA$6nI&KgmuJ9U?4@t633&qTD5fV*(a(20_TP4C! z@(8fh0+%Cam$)1qTu1S!T3!;)yuM_zrL$lcb#p;?40&!CL$X^5M*#1)cb1@tO;N0R z3>cmB^y2!gUTI*db9U7!iWx(`*1kU*qq4LFEpJ)E$(g$A3Vt#2XJRnOgBAhdCMXt@ z!^ZO$;I9o?wodTw4xgn(O`qQdrT3t0*L`mDKg>R$&+G&A_+Ge+dwgR5IvRIACZRR3 z_SnV|sHAs5JBa$r@fzZx(i?=f<@vBp?iblF^zzv*qHod9e`$M<;l+lZzeH;|`w^)< zFvn48^39_)T&`jKsbn04WZWk+q%S;#UlFHo$kKN_rysECXFUtal=(HXn5xH7oKws3 RHh^i|=T&8=05{zX@EbyYB*6dx literal 0 HcmV?d00001 diff --git a/target/classes/main/java/controlp5/Textfield$MoveLeft.class b/target/classes/main/java/controlp5/Textfield$MoveLeft.class new file mode 100644 index 0000000000000000000000000000000000000000..d486e43544da4f56e837fcf33ad971935dcb6529 GIT binary patch literal 978 zcmaizU2hUm5Qg6Y%7N{cB35eD+FG#!)o%U38%z@=nruRAlQ!+8S(bxt-4EPd2;TTp zy!F}yt*MDWz#pZ~p-8+bT6k;Bu;E#bZ=6_t z%di7K4g*N{P0K+`b~osb`~UCV!C zylS0DTcMshz7y{dlI6-#7C9^mY|A~eLPy2pWJ+0r zFatdCP@N#;K-#^SfeQz*Wxw0Cx?`4h5cEP@zI2pYZeqYKA zi8Xd}2HXQEpI44%lPCC@N0qaiyxZYeWwh$%S5Wm7;>)P!9<-QB$Sk<@N|YU q{TRt9B!k9s4|uP+1(O+@x}k) ztIsBg#s?C8^hc?4+6FWcc-XTub7sD8X3osdU*Glt+{U9c5=aW9bo8K?Fy&c}Z){oH zmSG2e90qQ)Y%I&2c-@h1Bfl7I%a_i^W=!afH=QUyOPHt~8&lEHhqQpEqaQjU+XithJ8jo3qd!1UxroJiXzFB>4O#E zM@;Z&6K;aCS+zdAQ3?L~d9Mg%mKIo77Ogb>8C3cL@u}@|htFR20qx^1%Of2x+{1m= z*uRa&vxhn8U99&=sR&d`y9~wOE(UgSTD<#!Y)3t}hl!6kbEtHrE2-75DC}Y8l_F0< xk!y;OzGIGlv=dMy4Bbtj!txLjs{)zd7zPPd1}nt>dA>{F0hgvwlqG|Qz#lA;3#R}8 literal 0 HcmV?d00001 diff --git a/target/classes/main/java/controlp5/Textfield$MoveUp.class b/target/classes/main/java/controlp5/Textfield$MoveUp.class new file mode 100644 index 0000000000000000000000000000000000000000..7949665eeff0b6a73db8e20712ea0745b076025c GIT binary patch literal 1157 zcmah|+fEZv6kWS59hgp`B6md;E4D=`Uhq}~p@!I`s0oPTiy5W|7?{p9GgAV;;*-BX z!o_G}d@=F3Hv)9_|?7h#|U++EuxQT~th#;yUrlAFKLb|G(c78+O z(({I6`>tcvCi077+g~+>RY}h~TjE)b5ck(jFFj5eDmNt*RJ5W^fvO<^jgV?6Te`iL zf3mV644S-sSWMuP>|Aa3Y~<(rs9N-SJj$7R3~RWEG@?Hm5Gy(r!R_WMi^uiq zif|Y86^oJ1vSaAhlJ1)F9D*@9oP?3)!r?3z2#VMiM%`z*WqmWY}g z-3R3kq3kwd?(rJu7|#~l5@3;NlxD=o2+(C&1DM+v^e1Kvh3gIWGpIVi%DRRn$mfB+br literal 0 HcmV?d00001 diff --git a/target/classes/main/java/controlp5/Textfield.class b/target/classes/main/java/controlp5/Textfield.class new file mode 100644 index 0000000000000000000000000000000000000000..edd22b927138f08fd37bb8aaf68553c916b51326 GIT binary patch literal 12586 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 JpuLdj{{VZyaWMb@ literal 0 HcmV?d00001 diff --git a/target/classes/main/java/controlp5/TextfieldCommand.class b/target/classes/main/java/controlp5/TextfieldCommand.class new file mode 100644 index 0000000000000000000000000000000000000000..f574e2c8d3b663f2a1683ebe3fb09a574ad3c306 GIT binary patch literal 157 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 literal 0 HcmV?d00001 diff --git a/target/classes/main/java/controlp5/TickMark.class b/target/classes/main/java/controlp5/TickMark.class new file mode 100644 index 0000000000000000000000000000000000000000..24196ac3e453ef0642b5becc05bbb8de5eb83c57 GIT binary patch literal 2239 zcmah~-%}e^7(F)$S&}T!0gG+<(Ui8hB&DH9ur?H0K`?EgC26grH>#Q^hyjuBjB8m@1m z#uxHRY`Cmr6z?f$cCBD;TV>kwK-R}}q>xtV6xV_m11;V0U*_T%$5jm((L2G+TUpeA z$+tBj-;$(Rg1qBd?$>6~%89gbOzL94`<%4wErluLEy0CmPp`3f&Td1;M>^)QK+2lM zM$8y3;#wjH_IF~Dg`1O>`$R`xfI11}ztnJ7VW_3l1$L#mU1qPu*6dx!^bTCkFSaCV z`ZAN6%`vL2QaLPR8|=9G$_^oW3btdd9PDpf?s`DjTc{Mx@`mZ!^4wUAcqO~Wy0lE- z_#~6N%PU#Ud=&cs4fd>h3^@9>Bt?tlIoz%(B_Kh{Q~=!{*k<*eBi-Zx!q zo++15wV^U5m9d;%>D7qAV=u?HWF0TbZohDz^^~p9``=Coy1j9nhK#Y6b_I>Wi(;*E z;1;b#Tgu#ZY~odELtJ3LgrIN-5&rW!N}Aj#hVKa$W&I+1z_?XZr)bRwZQ=1Gp1enNqRkq*nE_L$#YbzFIY z>9j0(hlya1JRItEH1?d~vmp^i9oIbBE4!FQw&~xbUxX?8mqn8ISqj%N&1>u?ZqT_| zd_^zza0}nyHV(0fAF<>MPX>}sggEztRb|V+*SgB%P pkV`z(`*9shZ_su7uH7fy7CZH!PZM-wUxP-#!%*GCDsmda&OZo_@(%z2 literal 0 HcmV?d00001 diff --git a/target/classes/main/java/controlp5/Toggle$ToggleImageView.class b/target/classes/main/java/controlp5/Toggle$ToggleImageView.class new file mode 100644 index 0000000000000000000000000000000000000000..8882c6f4acffa17153e8ec861461cd1035dcc1cf GIT binary patch literal 1373 zcmaJ=-%ry}6#j18QP&kVr=t8uMBD~41m+J$NDP7@nL+~DgFIbIGcJ~PX^X}`#W&x0 zHXUL({sLegi#imBi32X&@;-mX%a-Sc zzUMS6<>ffqs8A4u+zo>?G^BKNnb2{Gq0}yG%WE_odpv%v9q@)-7xrt0u5eET<1-9{ zwTsiL1`K3$m?pZ>!;p(wa=6Y)62869X8eazaX={l4v5)AuYp2n2OwdA?oV zh;pdsVT|Y)HE|PT1Z;sl^?7qoSVWSF*cgTi7m=;57V8GtJZ|DPCK&Wx5i}kChGC&i z&M9-Xlc&YHjsnA2J9CmVc5FXBrIA8sCbDta+qKEKnsDvshX*^hza{Ns$k#lJJ9X|0 zxlT4UdFl*P9azs_l`2Cf+_O)mF$}bNb^4L8-Gn_;LF>(sTQ8sSX4HX>d4}GW6NwIv zVWy*{=kH#%SZ7FYiiXR>L!T6H)mk8Jb)K~+O-6+y-iJ~Pa^aG62X&o{Yn5sX6T(vhkuX zHG2dziPhOm<^)4W$S2UgWJk84Ms4JY7WhFWf1-k4c!J+iOQUhI|1GVcjG3tA72G4K z3T7#97}~Cm;lH$@>d+|EY2KCSJ*W5N9+QAdB4C~vr2sNx>ML?5xYgbaGpb@Fl~vrQ U90d>XFnT}2g5)5KMwP0-KjzX>=>Px# literal 0 HcmV?d00001 diff --git a/target/classes/main/java/controlp5/Toggle$ToggleSwitchView.class b/target/classes/main/java/controlp5/Toggle$ToggleSwitchView.class new file mode 100644 index 0000000000000000000000000000000000000000..9a240bd726ba96f6bebe0764d5db3232edff9d96 GIT binary patch literal 1727 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 + + mostly bug fixes, see github issues + removed all PVector references, variables, and functions using processing.core.PVector + +2015-08-02 Andreas Schlegel + + changes see github change log + +2015-03-29 Andreas Schlegel + + * src controlP5.ScrollabelList: + fixing ArrayOutOfBounds error as reported on github under issue 3 https://github.com/sojamo/controlp5/issues/3 + +2014-09-08 Andreas Schlegel + + * src main.java.controlp5.Icon: + adding Icon class, acts like a button; can be used with images and font-icons + from "Font Awesome". + + * src main.java.controlp5.Button: + when theButton acts as a switch (setSwitch(true)), the corresponding + method inside a sketch should use type boolean as argument instead of float; + a java.lang.IllegalArgumentException will be thrown in case of a float argument + + +2014-08-28 Andreas Schlegel + + * src main.java.controlp5.Background: + adding Background class, a convenience class for grouping controllers with + the top bar disabled by default. + + +2014-07-21 Andreas Schlegel + + * src main.java.controlp5.Textfield: + making use of a graphics buffer now, simplifies cursor position calculation and + prevents from throwing an ArrayIndexOutOfBoundsException which could occasionally + happen with previous versions. + + +2014-07-17 Andreas Schlegel + * version 2.2.1 + + * removing PVector dependencies + + * removing all deprecated methods + + * src main.java.controlp5.ListBox, main.java.controlp5.DropdownList: + Due to changes to and deprecation of DropdownList and ListBox, both share the same + source code as ScrollableList. Consequently some functionality got lost though this + should be marginal. In case of any issues occuring due to these changes, please + inform the author. In any case use ScrollableList instead of DropdownList and ListBox. + The major benefit of using a ScrollableList is that an item is now of type Map and + therefore is not limited (as it was the case before) to the implementation of a + ListBoxItem and hence is more flexible as data container. + Do note that ListBox, DropdownList and ScrollableList do extend Controller, + not ControllerGroup + + +2014-04-27 Andreas Schlegel + * version 2.1.6 + + * preparing for next release. + + * src main.java.controlp5.ListBox, main.java.controlp5.DropdownList: + deprecated, use ScrollableList instead. + + * src main.java.controlp5.ControlP5Legacy: + repository of functions only kept for backwards compatibility but it is not encouraged + to use the anymore. Use ControlP5Base instead. + + * src main.java.controlp5.Controller: + adding onEnter, onLeave, onDrag, onStartDrag, onEndDrag, onWheel, onMove, onClick, + onPress, onDoublePress, onRelease, onReleaseOutside, onChange to register callbacks + for specific events. This is not implemented for classes extending ControllerGroup. + + +2013-01-23 Andreas Schlegel + + * version 2.1.5 + + * src main.java.controlp5.ControllerProperties: + removing XML format. adding JSON format, JSON format will be the default format instead of the Java Serialization format. + + +2012-09-22 Andreas Schlegel + + * version 2.1.3 + + * src main.java.controlp5.ListBox: + now extends Controller instead of ControlGroup. + + +2012-09-09 Andreas Schlegel + + * version 2.1.0 + + * starting processingjs implementation. + - many controllers will be included: + completed: Bang, Button, CheckBox, ColorPalette, Group, Knob, Label, ListBox, DropdownList, Numberbox, RadioButton, + Range, Slider, Slider2D, Tab, Textfield, Toggle + under construction: Canvas, Chart, ColorPicker, ControllerView, FrameRate, Matrix, Textarea + pending: ButtonBar, Pointer, TickMark, Tooltip + some will be missed: MutiList, Textlabel + and more will be missed: CColor, ControlBehavior, ControllerProperties, ControllerStyle, ControlTimer, ControlWindow + - the BitFont from the Java version will not be ported over to js and the default fontsize will be set to 10 + - The automatic binding of functions and variables with the js version did not work as smooth as expected. Currently + only automatic function detection and binding is available. But then why not variables? See my request here: + https://processing-js.lighthouseapp.com/projects/41284/tickets/1972-feature-request-access-sketch-global-variables-from-library + + * src main.java.controlp5.Slider2D: + changed size of cursor, changed color handling + + * src main.java.controlp5.Button: + alignment of caption label changed to CENTER,CENTER + + * adding PGraphics support instead of only rendering into PApplet directly + + * fixing Annotation issue addressed here https://forum.processing.org/topic/controlp5-annotations-24-8-2012#25080000002597047 + + + +2012-12-23 Andreas Schlegel + + * version 2.0.4 + + * src main.java.controlp5.Textfield.java,main.java.controlp5.ListBox.java, + main.java.controlp5.DropdownList.java,main.java.controlp5.ControlWindow.java + main.java.controlp5.ControlP5Base.java: + adjusting to processing's KeyEvent final variable name changes + see issue 69 https://code.google.com/p/controlp5/issues/detail?id=69 (thanks jeff) + + * src main.java.controlp5.Textfield.java: + reimplemented password mode (thanks jeff) + + + +2012-10-19 Andreas Schlegel + + * version 2.0.3 + + * src main.java.controlp5.Controller.java: + Automatic (PApplet) field recognition for Slider, Knob, Numberbox, Toggle adjusted. + + +2012-09-17 Andreas Schlegel + + * version 2.0.2 + + * major changes to controlP5's font handling. the BitFontRenderer has been removed and the BitFont class + has been introduced. BitFont extends PFont and is the replacement for rendering controlP5's bitfont as + a pfont. this makes font handling way more easier and stable. if this has caused any font rendering + flaws, let me know. + + * src controlP5.BitFontRenderer.java: + removed + + * src main.java.controlp5.BitFont.java: + added, see above. + + + +2012-09-07 Andreas Schlegel + + * version 2.0.1 + + * processing 2.0, time to make some changes, major revision in progress. + The goal should be to make 2.0+ desktop and android compatible, for that java.awt dependencies + will be removed. + starting to remove deprecated methods, fields and classes + + * removing all java.awt dependencies. + with each ControlP5 instance there will only be 1 ControlWindow since separate windows/frames have + been removed due to their java.awt dependency. There will be an example of how to make your own + separate Frame when in desktop mode. + + * versions starting with 2.0.1 will not be backwards compatible with 1.5.1 and earlier + from this version onwards Android is supported + + + * src main.java.controlp5.Println.java: + new class added + a console logger that captures the System.out stream and displays it using a Textarea + + + * src main.java.controlp5.FrameRate.java: + new class added + a Textlabel that displays the current or average framerate based on update interval + + + * src controlP5.BitFontRenderer.java: + using Base64 encoded bitfont source instead of loading gif textures + + + * src main.java.controlp5.Knob.java: + adding value label, ARC is default view now. + + + * src main.java.controlp5.Matrix.java: + adding play(), pause(), stop(), isPlaying(), trigger(int) + + + * src main.java.controlp5.Controller.java: + all ControllerSprite references (previously deprecated) have been removed + + + * src controlP5.ControllerSprite.java: + removed + + + * src controlP5.ControlP5IOHandler.java: + obsolete, removed, all static method transfered to main.java.controlp5.CP.java which will handle static method + + + * src controlP5.ControlWindowKeyListener.java: + obsolete, removed + + + * src controlP5.PAppletWindow.java: + obsolete, removed, currently there is no support for separate frames other than the main window due to removing java.awt dependencies + + + * src main.java.controlp5.ControlWindow.java: + removed mouseWheelMoved(MouseWheelEvent e) due to removal of java.awt dependencies + how to use an extra window, see example extra/ControlP5frame + + + * src controlP5.ControlWindowKeyHandler.java: + obsolete, removed, now handled by controlP5/ControlWindow.java + + + * src controlP5.CRect.java: + obsolete, removed, was only used by MultiList and MultiListButton - replaced with int array. + + + * src controlP5.ControlCanvas.java: + obsolete, removed, use main.java.controlp5.Canvas.java instead. + + +2012-09-07 Andreas Schlegel + + * version 1.5.1 + + * This version will be the last version that is stable and fully compatible with processing 1.5.1 + due to major changes in the processing 2.0 version, future releases of controlp5 will only be + compatible with the processing 2.0 and higher versions. + The next controlp5 release will continue with version 2.0.1 + + + +2012-08-25 Andreas Schlegel + + * version 0.7.6 + + * src main.java.controlp5.Textfield.java: + fixing special character issue with e.g. �,�,�,�, etc. + backspace, left arrow, right arrow now respond when pressed longer + added isFocus() + implemented issue 56 http://code.google.com/p/controlp5/issues/detail?id=56 , thanks jeff + + * src main.java.controlp5.ControllerAutomator.java: + fixed annotation mapping for methods + added list support for methods + + * src main.java.controlp5.CColor.java: + removing alpha masking + + * src main.java.controlp5.MultiList.java: + Conflict with moving a Multilist from one to another tab + removed field _myChildren. MultiListButtons are now store in the Controller's sublements filed. + + * src main.java.controlp5.ControllerInterface.java: + adding getArrayValue(int), setArrayValue(int, float), setArrayValue(float[]); + + * src main.java.controlp5.ControlP5.java: + adding setBroadcast(boolean) to disable/enable broadcasting of value changes. + + + +2012-05-30 Andreas Schlegel + + * version 0.7.5 + + * src main.java.controlp5.Controller.java: + adding empty methods onPress(), onClick(), onRelease(), onReleaseOutside(), + onScroll(int),onMove(),onDrag() for input access when extending a controller. + + * adding convenience constructor to Controllers, convenient when extending a Controller. + + * adding example use/ControlP5extendController + + + +2012-05-18 Andreas Schlegel + + * version 0.7.3 + + * src main.java.controlp5.ControlEvent.java: + adding getArrayValue(int), returns a float value for a given index, does not check for ArrayIndexOutOfBounds + + * src main.java.controlp5.Slider.java: + issue 47 http://code.google.com/p/controlp5/issues/detail?id=47 fixed + + * src main.java.controlp5.CheckBox.java, main.java.controlp5.RadioButton.java: + issue 41 http://code.google.com/p/controlp5/issues/detail?id=41 fixed + + * src main.java.controlp5.Chart.java: + implemented + + * src main.java.controlp5.ControlFont.java: + issue 46 http://code.google.com/p/controlp5/issues/detail?id=46 fixed + + * src main.java.controlp5.ControlWindow.java: + sketches using controlP5 running in the browser as Applet did not work anymore, fixed + + * src main.java.controlp5.ColorPicker.java: + missing implementation reported in http://forum.processing.org/topic/controlp5-how-to-receive-colorpicker-controlevents fixed + ColorPicker example has been modified accordingly + + * src main.java.controlp5.Textfield.java: + issue 44 http://code.google.com/p/controlp5/issues/detail?id=44 fixed + + * src controlP5.ControlWindowKeyHandler.java: + issue 49 http://code.google.com/p/controlp5/issues/detail?id=49 fixed, keys boolean array size increased to 525 due to windows key issue + + + +2012-01-15 Andreas Schlegel + + * version 0.7.0 + + * src main.java.controlp5.ControllerInterface.java, main.java.controlp5.Controller.java,main.java.controlp5.ControllerGroup.java: + adding generic type declaration for object specific method chaining (fluent interface) + + * src main.java.controlp5.RadioButton.java: + changed return type for methods addItem from Toggle to RadioButton + changed return type for methods setImage from PImage to RadioButton + + + + +2011-10-14 Andreas Schlegel + + * version 0.6.9 + + * src main.java.controlp5.Textarea.java: + included isScrollable() to adapt to ListBox + + +2011-10-13 Andreas Schlegel + + * version 0.6.8 + + * src main.java.controlp5.ControllerGroup.java, main.java.controlp5.Controller.java: + making addition to isVisible() to check if the parent element is invisible + in which case the child element will return false as well although the visible + state might be true. this fixes an issue with mousewheel scroll being active + for an invisible child controller. The mouseoverlist handling was updated as well. + + * src main.java.controlp5.Slider.java: + Slider will only broadcast when there is a change in value when pressed + + * src main.java.controlp5.ControlWindow.java: + mouseWheelMoved() now only updates the first item in the mouseoverlist + and then exits the loop + + +2011-10-12 Andreas Schlegel + + * version 0.6.7 + + * examples reorganized and grouped into 3 categories, + controllers, use, extra + + +2011-10-07 Andreas Schlegel + + * version 0.6.6 + + * src controlP5/Textarea.java: + scrollbar pixel offset fixed, setPosition update fixed. + + +2011-09-22 Andreas Schlegel + + * version 0.6.5 + + * src controlP5/ControlWindow.java: + adding removeMouseOverFor() to remove controllers from the mouseoverlist. + Called when a controller or group is removed. Necessary when a controller/group is removed + when clicked or hovered by the mouse. + + +2011-09-20 Andreas Schlegel + + * version 0.6.4 + + * src controlP5/Textfield.java: + adding support for PFont + + * javadoc, new design + + + +2011-08-27 Andreas Schlegel + + * version 0.6.3 + + * src controlP5/ListBox.java, controlP5/DropdownList.java: + adding mouseover support. + + * src controlP5/ControlP5.java: + adding enableMouseWheel(), disableMouseWheel(), isMouseWheel() + by default the mouse wheel is active for Slider, Knob, Numberbox, + ListBox and DropdownList. The MouseWheelListener is handled + by each ControlWindow individually. + + * src controlP5/ControlWindow.java: + adding getFrame() to access the frame object of a ControlWindow. + + +2011-08-25 Andreas Schlegel + + * version 0.6.2 + + * src controlP5/ControlP5.java: + removing static from the papplet field, this had consequences for some internal + calls to papplet but do not affect any publicly available methods or constructors + except the Label class which requires a controlP5 instances as it's constructor's + first parameter. + + * src controlP5/ControlP5.java: + field keyHandler is now non-static + + * src controlP5/Label.java: + adding a ControlP5 parameter to all Label constructors due to changes made + to field controlP5.papplet + + * src controlP5/Textlabel.java: + Constructors with the first parameter of type Component have been deprecated + and replaced with constructors using a reference to ControlP5 as first parameter. + if this affects your programs, please make changes accordingly. + + +2011-08-20 Andreas Schlegel + + * version 0.6.1 + + * ongoing internal code refactoring, adding getter and setter methods for + existing methods (which are deprecated accordingly) + + * reference cleanup + + * preparing for release + + * src controlP5/ControllerSprite.java: + deprecated + + * src controlP5/ControlCanvas.java: + deprecated, use ControlWindowCanvas instead + + * Names of controllers now follows the OSC address pattern specs, + use controlP5.printControllerMap() to see the changed address space. + This has been added to controlP5 since controllers now can be directly + linked to custom objects and not only to the instance of the main program. + http://opensoundcontrol.org/spec-1_0-examples + (OSC Address Parts not included) + + + +2011-06-25 Andreas Schlegel + + * version 0.6.0 + + * adding Annotation support, very much inspired by cp5magic by Karsten Schmidt (toxi) + see the ControlP5annotation example for further details + + * src controlP5/ControllerAutomator.java: + for internal use only, handles the reflection for the annotation implementation + + * src controlP5/FieldChangedListener.java: + for internal use only, listens for changes of variables linked to controllers + (needs to be anabled, disabled by default) + + * src controlP5/ScrollList.java: + ScrollList removed, use ListBox. + + * src controlP5/ControllerGroup.java: + moveTo(Tab) changed according to issue http://code.google.com/p/controlp5/issues/detail?id=15 + + * src controlP5/ListBox.java,controlP5/DropdownList.java: + adding mousewheel support. + + * src controlP5/CallbackEvent.java, controlP5/CallbackListener.java: + adding new callback event and listener for controller actions such as enter, leave, pressed, released, releasedoutside. + how to use see the ControlP5callback example + + * src controlP5/Radio.java: + removed, has been deprecated. Use RadioButton or CheckBox instead. + + * src controlP5/ControlWindow.Pointer.java: + adding a pointer class which can be used as replacement for mouse activity. To make use of the Pointer, + disable the mouse first and then set coordinates and events such as released and pressed from your program to + control controllers. see example ControlP5pointer + + +2011-05-08 Andreas Schlegel + + * version 0.5.9 + + * src controlP5/ControllerInterface.java: + adding method float[] arrayValue() + + * src controlP5/ListBox.java: + adding addItems(String[]), which allows to add a string array to a ListBox or a DropdownList + automatically resulting in a list of listBoxItems + + * src controlP5/ControlEvent.java: + adding method isFrom(String) and isFrom(ControllerInterface) to identify the origin of a Control Event + +2011-05-08 Andreas Schlegel + + * version 0.5.8 + + * src controlP5/ListBox.java: + Scrollbar (when visible) is now included inside the dimensions of a listbox (and its derivatives). + + * src controlP5/Textfield.java: + Frame which surrounds a textfield is back again after being removed in version 0.5.7. + + * src controlP5/ListBox.java, controlP5/DropdownList.java: + 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. + + * shuffle + +2011-02-14 Andreas Schlegel + + * version 0.5.7 + + * src controlP5/Controller.java, controlP5/ControllerGroup.java: + toString now prints out Type, name and value instead of all details including position, etc. + detailed information can now be accessed through method info(). + + * src controlP5/Controller.java, controlP5/ControllerGroup.java: + adding method info() print out details such as position, visibility, label, id, etc. of + a Controller or ControllerGroup. + + * src controlP5/ListBox.java: + adding ControlListeners to ListBox, will also be inherited + by DropdownList. + + * src controlP5/ControlWindowKeyHandler.java: + Key combination ALT-L and ALT-S have been removed. + ControlP5 setups cant be saved at this point anymore. But + ControllerProperties have been introduced instead to save + properties for single controllers - how to use ControllerProperties + see the examples and source code of controlP5/ControllerProperties.java + and controlP5/ControllerProperty.java + + * src controlP5/Textfield.java: + Introducing a new text-cursor. Frame which surrounds a textfield has been removed. + + * src controlP5/Slider.java, Slider2D.java, + controlP5/Knob.java, controlP5/Numberbox.java: + adding shuffle() command, when called, a random value will be set + for the controller. + + * src controlP5/Knob.java: + Caption Label was missing, now back. + + * controlP5/Slider2D.java: + absolute, relative positioning issue resolved. + see http://forum.processing.org/topic/three-problems-i-m-having-with-controlp5 + + * src controlP5/ControlP5IOHandler.java: + Loading and saving controllers in xml format has been removed due + to incompletness. Alternatively ControllerProperties are introduced + with this release, see below for more details. + + * src controlP5/ControlWindow.java: + Adding setPositionOfTabs() to change the origin of the tab bar. + Use controlP5.window().setPositionOfTabs(PVector) or + controlP5.window().setPositionOfTabs(int,int) + + * src controlP5/ControlP5Base.java: + Adding saveProperties(String) and loadProperties(String) to + save and load serialized controller properties inside a file. + The range of controllers implementing save/load properties is yet + limited to Slider, Knob, Numberbox, Toggle, Checkbox, + RadioButton, Textlabel, Matrix,Range, textarea, ListBox, Dropdown, + colorPicker. Properties are currently saved in the java serialization + format but xml and possibily json alternatives are being worked out. + + * src controlP5/ControllerProperty.java: + Adding controller property. Controllers can register properties which + can be saved in a serialized format. + + * src controlP5/Matrix.java: + Adding setMode(int), please refer to to the documentation which + constants to use - cells can be activated by row, column, many-per-row-and-colum + + * src controlP5/CColor.java: + Fields changed from protected to private, use setter and getter + to change color values. CColor is serializable so that instances can + be saved as properties. + + * src controlP5/Accordion.java: + Adding new class Accordion, an Accordion allows similar behavior + as a common UI accordion, here it combines ControlGroups where + one or no group can be active at a time. + + * src controlP5/CVector3f.java: + Removed. Replaced with processing.core.PVector. + + * src controlP5/ControlP5.java: + Removing setFilePath(), setUrlPath(), urlPath(), filePath() + + * src controlP5/ControlP5XMLElement.java, + ControlP5/ControlP5XMLParseException: + removed. + + * src controlP5/ControlP5.java: + Adding convenience method window() which returns the controlWindow + of the sketch, before one had to use window(PApplet) + + +2010-11-07 Andreas Schlegel + + * version 0.5.6 + + * src/controlP5/ListBox.java: + adding updateListBoxItems() to update color changes. + adding scoll() calls to color related methods to update color + changes for currently active listBox buttons. + + * src/controlP5/ListBox.java: + adding item(Controller) to access a ListBoxItem by it's Button reference. + + * src/controlP5/ControlWindow.java: + use isMouseOver(Controller), getMouseOverList() to check + if the mouse is inside a specific controller. This does not work for + groups, only for controllers. + + + + +2010-10-07 Andreas Schlegel + + * version 0.5.5 + + * src/controlP5/ControlP5.java: + enableShortcuts() and disableShortcuts() were interchanged, fixed now. + + + +2010-09-30 Andreas Schlegel + + * version 0.5.4 + + * src/controlP5/RadioButton.java: + adding setNoneSelectedAllowed(true/false) default is true. + http://forum.processing.org/topic/controlp5-radiobutton-strange-behaviour + + * src/controlP5/DropdownList.java: + renaming PulldownMenu to DropdownList. + + * src/controlP5/Range.java + setMin() and setMax() bug fixed. + + * src/controlP5/ControlBroadcaster.java: + adding addListner(), removeListener(), getListener() + any object that implements ControlListener can register with the ControlBroadcaster to + receive ControlEvents broadcasted. + + * src/controlP5/BitFontRenderer.java: + fixed ArrayIndexOutOfBoundsException + only characters between ASCII 32 and 127 are supported. + + * src/controlP5/ControlP5.java: + disabled clear() call (called from within dispose()) when in applet mode. + Reason: all controllers will be cleared due to dispose call + when switching tabs. Fix required. + + * src/controlP5/Button.java: + colorForeground and colorActive are reveresed due to adding an active state to buttons + when clicked. Rollovers no display colorForeground, clicked buttons will display + colorActive. This also affects ListBoxItems. + + +2010-08-18 Andreas Schlegel + + * version 0.5.3 + + * src/controlP5/ListBox.java: + adding clear(). clears a ListBox in order to re-filling list. + + * src/controlP5/ListBox.java: + changing behavior of a ListBox-Button. + a ListBox-button is clicked, it will call the Button's onLeave() + and setIsInside(false) function to solve problem addressed here: + http://forum.processing.org/topic/controlp5-listbox-loses-mouseclicks + + * src/controlP5/ListBox.java: + adding actAsPulldownMenu() to enable/disable pulldown + functionality for a ListBox. + + * src/controlP5/PulldownMenu.java: + new Controller, extends ListBox, acts as a pulldown-menu. + + +2010-08-03 Andreas Schlegel + * version 0.5.2 + * Slider2D: a new Controller, 2D slider control. + * Button, Bang, Toggle, : setImage() defines an image for DEFAULT,OVER,ACTIVE,HIGHLIGHT mode. + * Button, Bang, Toggle, : setImages() defines an image for DEFAULT,OVER,ACTIVE,HIGHLIGHT mode. + * Button: adding setSwitch() in order to use a button as a switch (makes toggle obsolete) + * Button: adding booleanValue() returns true or false, useful in case a button is set to be a switch. + * Button: adding setOn() setOff(), useful when button is a switch. + * Toggle: changing default look to ControlP5.SWITCH, an on/off look for toggles. use toggle.setMode(ControlP5.DEFAULT) to reset to the old default look. + * ControllerDisplay: adding interface ControllerDisplay to enable custom displays for a controller. + * Controller: setImage, allows to replace the default look of a controller with an image (PImage). + * Controller: setDisplay allows custom displays for controller. the custom display is called from within a controller's draw function. A custom Display implements interface ControllerDisplay + * Controller: adding lock(), unlock(), isLock(), setMoveable(), isMoveable(), isUserInteraction(), setUserInteraction() + * Controller: adding plugTo(), unplugFrom() (if this causes any problems or error message, please report) + * ControlP5: adding java.util.logging.Logger for logging error, debug, info messages - wrapped in ControlP5.error(), ControlP5.warning(), ControlP5.info(), ControlP5.debug() + * ControlP5: added registerDispose() + * ControlP5: adding setMoveable() and isMoveable() to disable/enable controllers to be moved around. + * ControlP5: adding disableShortcuts(), enableShortcuts() instead of disableKeys() and enableKeys() + * ControlP5: deprecating lock(), unlock(), disableKeys(), enableKeys() + * ControlWindow: adding begin() and end(). this allows to move controllers automatically to the main window or a separate controlWindow. + * Toggle: adding setValue(boolean) + * Matrix: mouseReleasedOutside error fixed. + * ControlWindow: window is now properly removed when closed, thanks henri. + * TextLabel: adding setControlFont() + * Knob: all new. + +2010-04-04 Andreas Schlegel + * version 0.5.1 + * ControlP5: lock() and unlock() are working again. + * ControlEvent: added function id() to make access to the id of controller, group, tab, etc. easier + * ControlEvent: added function type() for easier distinguishing between the type of Controller the event was triggered from, returns ControlEvent.UNDEFINED, ControlEvent.CONTROLLER, ControlEvent.TAB, ControlEvent.GROUP + * ListBoxItem: adding ListBoxItem to make changes to each item of a listBox especially the color settings of a listBoxItem. + * CColor: now with getter and setter functions, supports changing the value of the alpha channel. + * ControlWindow: adding begin() and end(). this allows to move controllers automatically to the main window or a separate controlWindow. + * ControllerGroup: adding enableCollapse(), disableCollapse(), isCollapse() to enable/disable the collapsing and opening of a controllerGroup e.g. listBox. + +2010-03-26 Andreas Schlegel + * version 0.5.0 + * making transition to 1.5+, no more java 1.4 support. + * compiling against processing 1.1 + * ControlP5: added disableKeys() and enableKeys(), suggested in the discourse. disables and enables keyEvents such as hide/show with ALT-h. + * Toggle: when inactive, the color refers to colorBackground instead of colorForeground now. + * ControlFont: smooth related functions have been disabled and deprecated due to processing 1.1 changes. + * Slider: use alignValueLabel() to position the value label of a slider on TOP, CENTER, or BOTTOM + * example ControlP5quick: new, ControlP5quick shows how to quickly add Controllers with auto-arrangement. + +2010-02-16 Andreas Schlegel + * version 0.4.7 + * Slider: adding TickMarks and replacing steps with snapToTickMarks(). + * ControlWindow: adding setUndecorated(), isUndecorated(), toggleUndecorated() + * ControllerSprite: sprites are now clone-able and state management has been improved, thanks to c.a. church. http://processing.org/discourse/yabb2/YaBB.pl?num=1265905257 + * Controller: adding getSprite() + * BitFontRenderer: adding warning for character that are not supported by the BitFontRenderer. + +2010-02-06 Andreas Schlegel + * version 0.4.6 + * ControlWindow: imageMode was not set back to CENTER/CORNER correctly, now fixed. + +0.4.5 + * ControllerGroup: adding moveTo(String). will move ControllerGroups such as e.g. Textarea to another tab. + +0.4.4 + * ControlWindow: imageMode CENTER/CORNER issue fixed. + +0.4.3 + * Controller.isInside is private now. use setIsInside(true/false) and getIsInside() to access this boolean field. + * trying to solve the problem of overlapping described here: + http://processing.org/discourse/yabb2/YaBB.pl?num=1259885420/0#0 + yet not successful, but loops managing the mouseEvents have been reversed from i++ to i-- + * CheckBox,RadioButton: adding activateAll, activate, deactivate, getState to CheckBox and RadioButton to be able to control individual items by code. + * CheckBox: adding toggle() to CheckBox to be able to toggle individual items of a checkBox. + * CheckBox,RadioButton: adding setItemHeight(), setItemWidth() to radioButton and checkBox + * Toggle: adding toggle() + +0.4.2 +- + +0.4.1 + * Controller: added changeValue() to change the float value of a controller without broadcasting its change as a event. + * Numberbox: added setMultiplier() and multiplier() to customize the value sensitivity. + * Toggle: setLabelVisible() is now working. + * ControlWindow: adding setTitle, showCoordinates, hideCoordinates to ControlWindow. only applies to controlWindows of type PAppletWindow (external window). + * adding Matrix.set + * Controller: Controller.isInside() is public now + * added ControlFont. does not support textarea and textfield yet. + +(note: take a look at subversion changelog generator http://ch.tudelft.nl/~arthur/svn2cl/) + +0.3.15 + * Texfield: textfield scrolls to the left if text is larger than display area. + * Knob: knob setValue issue solved. + + * BitFontRenderer: removed getWidth(String theText, int theFontIndex) + is now getWidth(String theText, Label theLabel); + removed getWidth(String theText, int theFontIndex, int theLength)) + is now getWidth(String theText, Label theLabel, int theLength)); + + +0.3.14 + * ScrollList: adding void hideScrollbar() + adding void showScrollbar() + adding void showScrollbar() + adding void scroll(float) + adding boolean isScrollbarVisible() + + * Textarea: adding void hideScrollbar() + adding void showScrollbar() + adding void showScrollbar() + adding void scroll(float) + adding boolean isScrollbarVisible() + + * Textfield: textinput now works from a controlWindow + + * Label: adding adjust() to fix the cutting off of Labels when changing fonts. + use e.g. mySlider.captionLabel().setFont(ControlP5.grixel).adjust(); + +0.3.13 + * Textfield: adding setAutoClear(true/false) prevents the textfield to be cleared after pressing RETURN. + adding clear(), clears the current textline + adding keepFocus(true/false) + adding getTextList() + adding setAutoClear(true/false) + adding isAutoClear() + adding submit() + +0.3.12 + * Radio: if deactiveAll is set before the first button is added, the first button will not trigger an event. + * ControlGroup: added method getBackgroundHeight() to get the height of a group's background that has been set before. + * Textfield: fixed bug with clearing the variable myTextline too early. + +0.3.11 + * Textfield: added method setText to Textfield + * Range: made corrections to Range, _myUnit was not set properly. now fixed. Range remains experimental. + +0.3.10 + * fixed little issues with setColor, again. + * removed decimal point when setDecimalPrecision(0) + +0.3.9 + * Range: defaultValue for min shows correct value now. + * Radio: added deactivateAll() + * TextLabel: added setWidth, setHeight + * setColor -Label(), -Active(), -Value(), -Foreground(), -Background(): issues resolved and tested for slider, range, button, knob, sliderlist, multilist, toggle, radio + * Controller: added method setDecimalPrecision(int theNum) to set the decimal precision for floats when displayed as valueLabel. the precision does not apply to the returned float value. + Controller.captionLabel().set("txt") is fixed. + * ControlP5: controlP5.setAutoDraw(true/false) issue is fixed. + * ControlWindow: controlWindow.post() has been deleted. + * Knob: issue with minimum value has been resolved. + +how to move a textlabel that has been created with "new" to a tab other than the default: +Tab myTab = controlP5.addTab("new"); +Textlabel myTextlabel = new Textlabel(this,"a single textlabel.",20,100,400,200,0xffff0000,ControlP5.synt24); +myTab.addDrawable(myTextlabel); + diff --git a/target/classes/main/java/controlp5/events/ReleasedOutsideListener.class b/target/classes/main/java/controlp5/events/ReleasedOutsideListener.class new file mode 100644 index 0000000000000000000000000000000000000000..9461228037fe8c9bde074bfd4a4b4cff6e06c093 GIT binary patch literal 191 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 literal 0 HcmV?d00001 diff --git a/target/classes/main/java/controlp5/layout/LayoutBuilder$ElementProps.class b/target/classes/main/java/controlp5/layout/LayoutBuilder$ElementProps.class new file mode 100644 index 0000000000000000000000000000000000000000..52ed0051a9af1baf53512af6a43b03659e9af4f5 GIT binary patch literal 662 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 C;#r3P literal 0 HcmV?d00001 diff --git a/target/classes/main/java/controlp5/layout/LayoutBuilder.class b/target/classes/main/java/controlp5/layout/LayoutBuilder.class new file mode 100644 index 0000000000000000000000000000000000000000..d0ba018b4cb45d9117d60f2ae219bbb74015c952 GIT binary patch literal 2711 zcmbVO?NS?M6n@?i*d(U%QCgdpmJb7jKv^tMB%xRus8Rz(h|p*im$1UZW;bp&NbgE# zq?s`@UVzu)H8?)+1_;T7l<~*=x$imWIp6#DzkmJ(U zqNzFCavj?&%&MmL&MvuX+FM?f40B(11j6!xe(G+yTJBh&JMB@GT*FkC^Vy=ubC8o2ug8m`zHOJ7L_#Cjx=p!cw7N>XaHu7aTjM7mEg=#hK z3L*l-wsW9rmTNld$&BihEZ4~E>e6~9y}4=?O4QfUwR{No@IY$TCvYcL)!oyLpUF2V z^?B6Vp5F5}Yw5IpsyiV(#DL^CC=iXMn_@^EYED(U$Np1+k>>C0eBQP)_OWhVfE~iH zWIjUmu3=t%ZkL>#?s1O^j5Rawc`#gn-_V?*L_dnS6fpiF0iN+FKvFyoV-hNTvv220 zdEKIKp2fzRI<=|P=<+$8bU7oD{`-umo7#kO>1PQx!`+T%9!u0yGC*eprdw!Q7xq#5 zYuhLqu1)G`Je4}n3Fxs_sOvZ+uZ_N@ENam#Z8nYhFcL@#w4X>60`u3nvtHli*p&#a zW*>P3w~PZzb4!jc@TxI=7n;I3_d}gV(G^pd-rI2OLNU2W#>v?KSCZMCviFIoGi_M< zdMUrBI~i@ytVE}IQ%b58 ztMi1W$qkwQ0;A2dv#~-*Cz&#}KLG9`le{uOq7GLkE>*h5v#G}HmNcFMlr-MT3>T8B zIZHCXj1p#SbA=j0h*Ey_(nd5YDyN88_T*#jw`K8z;{X}p)Ic-zBH=QceVdbN(gL%tCpoZDN`#J zbzId?s>LwhTKK_IZey${d$La@3na{huhhdj4& zy&o?_iC1tdTSn&@M10~5UGecV^#1PAJ?DIvKQnUnqZggz-OFYj!2>MucA&}yFOcGi z{IJXy!rQG7kB|G8=;JD-{zFbduA3Fy%Z`_Ef31Rt*@-gx*DDyxJ}x7g@K-RJjrhwL zOSDJY-(w=tQNa}9JxM4POlRZqKhVq3RmN;05D7#&-sAI~8rl(0!XwW8w8a2r53)H9 zu{RE54kK9Q=^Mm7^lz(ZF41q|OMFGdLB3kWE28efb9{|7wd})FtYMv27{xeVV}rU( zB1&GHwDTP8v4sp2(gpD?w&|4}YU(GqH(ddIhwr(QHc+`r`?OOB@f$Zjih$=Tpxc8L ru0Ft9&!|59;Jx}0yIkWG`x7DTQOq=Ha~%5|KXV*#7#v3&CVc+^Fn;kA literal 0 HcmV?d00001 diff --git a/target/classes/main/java/controlp5/layout/XML.g4 b/target/classes/main/java/controlp5/layout/XML.g4 new file mode 100644 index 0000000..08e98a6 --- /dev/null +++ b/target/classes/main/java/controlp5/layout/XML.g4 @@ -0,0 +1,35 @@ +grammar XML; + +document : '' element+ '' ; + +element : startTag (content )? endTag + | SELF_CLOSING + ; + +startTag : OPEN Name attribute* CLOSE ; + +endTag : OPEN_SLASH Name CLOSE ; + +SELF_CLOSING : OPEN Name SLASH_CLOSE ; + +attribute : Name EQUALS value ; + +content : element | STRING ; + +value: STRING + | NUMBER UNIT; + +UNIT: 'px' | '%'; +WS : [ \t\r\n]+ -> skip; +OPEN : '<' ; +OPEN_SLASH: '' ; +SLASH_CLOSE: '/>' ; +EQUALS : '=' ; + +Name : ALPHA (ALPHA | DIGIT | '.' | '-' | '_')* ; +STRING : '"' ( ~'"' )* '"' | '\'' ( ~'\'' )* '\'' ; +NUMBER : DIGIT+ ; + +fragment DIGIT : [0-9] ; +fragment ALPHA : [a-zA-Z] ; diff --git a/target/classes/main/java/controlp5/layout/lang/XML.interp b/target/classes/main/java/controlp5/layout/lang/XML.interp new file mode 100644 index 0000000..b98a8de --- /dev/null +++ b/target/classes/main/java/controlp5/layout/lang/XML.interp @@ -0,0 +1,44 @@ +token literal names: +null +'' +'' +null +null +null +'<' +'' +'/>' +'=' +null +null +null + +token symbolic names: +null +null +null +SELF_CLOSING +UNIT +WS +OPEN +OPEN_SLASH +CLOSE +SLASH_CLOSE +EQUALS +Name +STRING +NUMBER + +rule names: +document +element +startTag +endTag +attribute +content +value + + +atn: +[4, 1, 13, 59, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 1, 0, 1, 0, 4, 0, 17, 8, 0, 11, 0, 12, 0, 18, 1, 0, 1, 0, 1, 1, 1, 1, 3, 1, 25, 8, 1, 1, 1, 1, 1, 1, 1, 3, 1, 30, 8, 1, 1, 2, 1, 2, 1, 2, 5, 2, 35, 8, 2, 10, 2, 12, 2, 38, 9, 2, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 3, 5, 52, 8, 5, 1, 6, 1, 6, 1, 6, 3, 6, 57, 8, 6, 1, 6, 0, 0, 7, 0, 2, 4, 6, 8, 10, 12, 0, 0, 57, 0, 14, 1, 0, 0, 0, 2, 29, 1, 0, 0, 0, 4, 31, 1, 0, 0, 0, 6, 41, 1, 0, 0, 0, 8, 45, 1, 0, 0, 0, 10, 51, 1, 0, 0, 0, 12, 56, 1, 0, 0, 0, 14, 16, 5, 1, 0, 0, 15, 17, 3, 2, 1, 0, 16, 15, 1, 0, 0, 0, 17, 18, 1, 0, 0, 0, 18, 16, 1, 0, 0, 0, 18, 19, 1, 0, 0, 0, 19, 20, 1, 0, 0, 0, 20, 21, 5, 2, 0, 0, 21, 1, 1, 0, 0, 0, 22, 24, 3, 4, 2, 0, 23, 25, 3, 10, 5, 0, 24, 23, 1, 0, 0, 0, 24, 25, 1, 0, 0, 0, 25, 26, 1, 0, 0, 0, 26, 27, 3, 6, 3, 0, 27, 30, 1, 0, 0, 0, 28, 30, 5, 3, 0, 0, 29, 22, 1, 0, 0, 0, 29, 28, 1, 0, 0, 0, 30, 3, 1, 0, 0, 0, 31, 32, 5, 6, 0, 0, 32, 36, 5, 11, 0, 0, 33, 35, 3, 8, 4, 0, 34, 33, 1, 0, 0, 0, 35, 38, 1, 0, 0, 0, 36, 34, 1, 0, 0, 0, 36, 37, 1, 0, 0, 0, 37, 39, 1, 0, 0, 0, 38, 36, 1, 0, 0, 0, 39, 40, 5, 8, 0, 0, 40, 5, 1, 0, 0, 0, 41, 42, 5, 7, 0, 0, 42, 43, 5, 11, 0, 0, 43, 44, 5, 8, 0, 0, 44, 7, 1, 0, 0, 0, 45, 46, 5, 11, 0, 0, 46, 47, 5, 10, 0, 0, 47, 48, 3, 12, 6, 0, 48, 9, 1, 0, 0, 0, 49, 52, 3, 2, 1, 0, 50, 52, 5, 12, 0, 0, 51, 49, 1, 0, 0, 0, 51, 50, 1, 0, 0, 0, 52, 11, 1, 0, 0, 0, 53, 57, 5, 12, 0, 0, 54, 55, 5, 13, 0, 0, 55, 57, 5, 4, 0, 0, 56, 53, 1, 0, 0, 0, 56, 54, 1, 0, 0, 0, 57, 13, 1, 0, 0, 0, 6, 18, 24, 29, 36, 51, 56] \ No newline at end of file diff --git a/target/classes/main/java/controlp5/layout/lang/XML.tokens b/target/classes/main/java/controlp5/layout/lang/XML.tokens new file mode 100644 index 0000000..30d639a --- /dev/null +++ b/target/classes/main/java/controlp5/layout/lang/XML.tokens @@ -0,0 +1,20 @@ +T__0=1 +T__1=2 +SELF_CLOSING=3 +UNIT=4 +WS=5 +OPEN=6 +OPEN_SLASH=7 +CLOSE=8 +SLASH_CLOSE=9 +EQUALS=10 +Name=11 +STRING=12 +NUMBER=13 +''=1 +''=2 +'<'=6 +''=8 +'/>'=9 +'='=10 diff --git a/target/classes/main/java/controlp5/layout/lang/XMLBaseListener.class b/target/classes/main/java/controlp5/layout/lang/XMLBaseListener.class new file mode 100644 index 0000000000000000000000000000000000000000..c8cf48d8233c9d53a201266a667a2ed6bd566a6e GIT binary patch literal 3694 zcmbuCTT|0O6vxkUi$J-Eh>AB*z;clYa%~F;r6^b~0@Lxqm$d9)m^5*=n+}Yh$|q-h z@B{dv9M5i(nik?F<3n?@+x`Fd*OT3|>95~EegeP(9Ctwrv}(|nfOhC0(0^f64c#*A zbN#S*K}(!KN5-^GzD}SuIa$!)76H9%n6@rQmK>Wi$NI8}nk&cUHR;Fw{FYInd9%W) zO_>H=1g0a1d;x*BtaC;Q^yN*P9=PQqWv52b!k&S=Q!=cA!A#NiI@|bXvqE4lA7PFl zSeif&wK-+mPRT9f9f9>^6q6%^RVW+tWm(Juz2xc10%obiFA1do!-YVCUYguD7fr#K zvuF)*Ee@im3KFJburwFWhTE}1lsqgPUGa?Z@6%W+9>!~v`8f^3->Y}X9L9>8Z>@Auc6oIq@e zSnJJG1?l3fwh-BV-6E81d{&}*T>1(#&6DvoaXOH+$blG%Sv>|6qy`sI!0#2 ziG!`@-_8n@Rq=G48CCH!Znu*wl&xzkcw_rFDZ4r{^l+X_G9HwI@!E#*xT5l z!4ZL_=!C(IjVmkIgi+A&-3WI(z9`+ni0?;u?Z%dlkzj0}`VQn9-n2jhui|TfUg*JV zqBa0qeb~bHD!7eTAzs8!i|A_>4ocxr?MqK6qyutx+zx7sVTHwA7*bJ;gj(D~DS`WH ziwT9r0~l6O%!FDzloXHD7V`>=$M8f&u@Y+WR8ownE!Gtlqwq{cu^nphTvCjwE%p=^ z<1nG3I106RAt{n-i-N*p5~frXpF%CBCB=-|qNuQV39~8+Gt{D18D6O^9EHUk%&REe z5R2FNw@&QTMOac9%B3eoqqtFzf~>( literal 0 HcmV?d00001 diff --git a/target/classes/main/java/controlp5/layout/lang/XMLBaseVisitor.class b/target/classes/main/java/controlp5/layout/lang/XMLBaseVisitor.class new file mode 100644 index 0000000000000000000000000000000000000000..7ad3ad5df7d3f36544fc1f20634869fc6a8872dd GIT binary patch literal 3688 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 C;~{_m literal 0 HcmV?d00001 diff --git a/target/classes/main/java/controlp5/layout/lang/XMLLexer.interp b/target/classes/main/java/controlp5/layout/lang/XMLLexer.interp new file mode 100644 index 0000000..5848fd8 --- /dev/null +++ b/target/classes/main/java/controlp5/layout/lang/XMLLexer.interp @@ -0,0 +1,58 @@ +token literal names: +null +'' +'' +null +null +null +'<' +'' +'/>' +'=' +null +null +null + +token symbolic names: +null +null +null +SELF_CLOSING +UNIT +WS +OPEN +OPEN_SLASH +CLOSE +SLASH_CLOSE +EQUALS +Name +STRING +NUMBER + +rule names: +T__0 +T__1 +SELF_CLOSING +UNIT +WS +OPEN +OPEN_SLASH +CLOSE +SLASH_CLOSE +EQUALS +Name +STRING +NUMBER +DIGIT +ALPHA + +channel names: +DEFAULT_TOKEN_CHANNEL +HIDDEN + +mode names: +DEFAULT_MODE + +atn: +[4, 0, 13, 114, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 3, 3, 58, 8, 3, 1, 4, 4, 4, 61, 8, 4, 11, 4, 12, 4, 62, 1, 4, 1, 4, 1, 5, 1, 5, 1, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 10, 5, 10, 83, 8, 10, 10, 10, 12, 10, 86, 9, 10, 1, 11, 1, 11, 5, 11, 90, 8, 11, 10, 11, 12, 11, 93, 9, 11, 1, 11, 1, 11, 1, 11, 5, 11, 98, 8, 11, 10, 11, 12, 11, 101, 9, 11, 1, 11, 3, 11, 104, 8, 11, 1, 12, 4, 12, 107, 8, 12, 11, 12, 12, 12, 108, 1, 13, 1, 13, 1, 14, 1, 14, 0, 0, 15, 1, 1, 3, 2, 5, 3, 7, 4, 9, 5, 11, 6, 13, 7, 15, 8, 17, 9, 19, 10, 21, 11, 23, 12, 25, 13, 27, 0, 29, 0, 1, 0, 6, 3, 0, 9, 10, 13, 13, 32, 32, 2, 0, 45, 46, 95, 95, 1, 0, 34, 34, 1, 0, 39, 39, 1, 0, 48, 57, 2, 0, 65, 90, 97, 122, 120, 0, 1, 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 9, 1, 0, 0, 0, 0, 11, 1, 0, 0, 0, 0, 13, 1, 0, 0, 0, 0, 15, 1, 0, 0, 0, 0, 17, 1, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 21, 1, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 25, 1, 0, 0, 0, 1, 31, 1, 0, 0, 0, 3, 40, 1, 0, 0, 0, 5, 50, 1, 0, 0, 0, 7, 57, 1, 0, 0, 0, 9, 60, 1, 0, 0, 0, 11, 66, 1, 0, 0, 0, 13, 68, 1, 0, 0, 0, 15, 71, 1, 0, 0, 0, 17, 73, 1, 0, 0, 0, 19, 76, 1, 0, 0, 0, 21, 78, 1, 0, 0, 0, 23, 103, 1, 0, 0, 0, 25, 106, 1, 0, 0, 0, 27, 110, 1, 0, 0, 0, 29, 112, 1, 0, 0, 0, 31, 32, 5, 60, 0, 0, 32, 33, 5, 87, 0, 0, 33, 34, 5, 105, 0, 0, 34, 35, 5, 110, 0, 0, 35, 36, 5, 100, 0, 0, 36, 37, 5, 111, 0, 0, 37, 38, 5, 119, 0, 0, 38, 39, 5, 62, 0, 0, 39, 2, 1, 0, 0, 0, 40, 41, 5, 60, 0, 0, 41, 42, 5, 47, 0, 0, 42, 43, 5, 87, 0, 0, 43, 44, 5, 105, 0, 0, 44, 45, 5, 110, 0, 0, 45, 46, 5, 100, 0, 0, 46, 47, 5, 111, 0, 0, 47, 48, 5, 119, 0, 0, 48, 49, 5, 62, 0, 0, 49, 4, 1, 0, 0, 0, 50, 51, 3, 11, 5, 0, 51, 52, 3, 21, 10, 0, 52, 53, 3, 17, 8, 0, 53, 6, 1, 0, 0, 0, 54, 55, 5, 112, 0, 0, 55, 58, 5, 120, 0, 0, 56, 58, 5, 37, 0, 0, 57, 54, 1, 0, 0, 0, 57, 56, 1, 0, 0, 0, 58, 8, 1, 0, 0, 0, 59, 61, 7, 0, 0, 0, 60, 59, 1, 0, 0, 0, 61, 62, 1, 0, 0, 0, 62, 60, 1, 0, 0, 0, 62, 63, 1, 0, 0, 0, 63, 64, 1, 0, 0, 0, 64, 65, 6, 4, 0, 0, 65, 10, 1, 0, 0, 0, 66, 67, 5, 60, 0, 0, 67, 12, 1, 0, 0, 0, 68, 69, 5, 60, 0, 0, 69, 70, 5, 47, 0, 0, 70, 14, 1, 0, 0, 0, 71, 72, 5, 62, 0, 0, 72, 16, 1, 0, 0, 0, 73, 74, 5, 47, 0, 0, 74, 75, 5, 62, 0, 0, 75, 18, 1, 0, 0, 0, 76, 77, 5, 61, 0, 0, 77, 20, 1, 0, 0, 0, 78, 84, 3, 29, 14, 0, 79, 83, 3, 29, 14, 0, 80, 83, 3, 27, 13, 0, 81, 83, 7, 1, 0, 0, 82, 79, 1, 0, 0, 0, 82, 80, 1, 0, 0, 0, 82, 81, 1, 0, 0, 0, 83, 86, 1, 0, 0, 0, 84, 82, 1, 0, 0, 0, 84, 85, 1, 0, 0, 0, 85, 22, 1, 0, 0, 0, 86, 84, 1, 0, 0, 0, 87, 91, 5, 34, 0, 0, 88, 90, 8, 2, 0, 0, 89, 88, 1, 0, 0, 0, 90, 93, 1, 0, 0, 0, 91, 89, 1, 0, 0, 0, 91, 92, 1, 0, 0, 0, 92, 94, 1, 0, 0, 0, 93, 91, 1, 0, 0, 0, 94, 104, 5, 34, 0, 0, 95, 99, 5, 39, 0, 0, 96, 98, 8, 3, 0, 0, 97, 96, 1, 0, 0, 0, 98, 101, 1, 0, 0, 0, 99, 97, 1, 0, 0, 0, 99, 100, 1, 0, 0, 0, 100, 102, 1, 0, 0, 0, 101, 99, 1, 0, 0, 0, 102, 104, 5, 39, 0, 0, 103, 87, 1, 0, 0, 0, 103, 95, 1, 0, 0, 0, 104, 24, 1, 0, 0, 0, 105, 107, 3, 27, 13, 0, 106, 105, 1, 0, 0, 0, 107, 108, 1, 0, 0, 0, 108, 106, 1, 0, 0, 0, 108, 109, 1, 0, 0, 0, 109, 26, 1, 0, 0, 0, 110, 111, 7, 4, 0, 0, 111, 28, 1, 0, 0, 0, 112, 113, 7, 5, 0, 0, 113, 30, 1, 0, 0, 0, 9, 0, 57, 62, 82, 84, 91, 99, 103, 108, 1, 6, 0, 0] \ No newline at end of file diff --git a/target/classes/main/java/controlp5/layout/lang/XMLLexer.tokens b/target/classes/main/java/controlp5/layout/lang/XMLLexer.tokens new file mode 100644 index 0000000..30d639a --- /dev/null +++ b/target/classes/main/java/controlp5/layout/lang/XMLLexer.tokens @@ -0,0 +1,20 @@ +T__0=1 +T__1=2 +SELF_CLOSING=3 +UNIT=4 +WS=5 +OPEN=6 +OPEN_SLASH=7 +CLOSE=8 +SLASH_CLOSE=9 +EQUALS=10 +Name=11 +STRING=12 +NUMBER=13 +''=1 +''=2 +'<'=6 +''=8 +'/>'=9 +'='=10 diff --git a/target/classes/main/java/controlp5/layout/lang/XMLListener.class b/target/classes/main/java/controlp5/layout/lang/XMLListener.class new file mode 100644 index 0000000000000000000000000000000000000000..4e2322cf98dd46a6dd621ddff3de1fa0900b131e GIT binary patch literal 1633 zcmbW1S#Q%o6ot=}Wk}MbVc(ZRfQCYcB`wgh2$dpL3IeHB#p^VTB3I5BjmK5_Ydr7+ z_)&=K$=I6o$>t$GzB9g`k0(d>&);9a0SvIlF~_hxk&zY$@=%IVqOD2dAFCpkKa;^qQ_H(+3fWC(-LpE5{J~li?PpdoysrZ< z`$B#@=a)Oh$-5`=KepD%`>qi0PQIiyo&P-hw+9n!>*s%QRIf#~p^(|D9HjyA1ux?FF6Kn zfAB;7qN5+2`qdxh`0NWS6&SbE$%K3Na?f*~bIxP?VL$lV7t(06q}CQs~EPj+{*Y?#U0to?8}OBrL452+c#~)I&w~ARYO+bc6`qr z!x~Mzdi-@A%UBUuq5p42*5oUJTA}IZzz?}@8N*?95vw2@Q`XfiR6&SqYTwJj`~=L{kW@#*hCn$+4w~jrNn5%(tm9Q3uVIscOIE;*3LhZfr29hb7NAX?tsro*Y1;B=)IXMP+c>s(l5aX)!|E8W={<*sDRpWNDexC5Go^a( z>u(R5ErAPTucg@jWE`Wmp>U@Auu8On!NhS6EJ$2nHQi!Nx@nJ{Gt=(1l%YsKGz9dp zjT`ofJQqk7iagBt68DS+ZZ2@}Y+)yjLOF9ZSz+4bMDG`U zT5!0+$-l~X9tGgL^%=g9>i)N#MPC z_St#%=3M(7yiXL*|8D3%SITE-pL>eTe<_?zLF6I|e9eRq4MHRdrIpH;e#OO~xeX%7 za)q#w7LE^bIk*-=(15=HcKygS+{OpI%{hjTLfCDtUS<;7PZ45}lfe|BL_}y0)zGp< zBzi`^{3q5QW4Zhk>!siDN&+6Yq@Ue@+YoC)`Dhz~MZ_(S8a^i8zHcGcxV`g#4ql&i z@I4)z$8~TQ2V~(@r5{GH$q2R{V}%iHF@nnpJSlU%%9XcLQ<40Dy!dg-(Pk9MCO$!( q^gpFVpd;_(-oLTsai3o$@EQL<_je6^!8On46t8`W4F3e0$ovC8@_N$% literal 0 HcmV?d00001 diff --git a/target/classes/main/java/controlp5/layout/lang/XMLParser$ContentContext.class b/target/classes/main/java/controlp5/layout/lang/XMLParser$ContentContext.class new file mode 100644 index 0000000000000000000000000000000000000000..81f897f522345a4b072761e14deabbb35d910854 GIT binary patch literal 2410 zcmbtWZExFD6n<_};5uw?`+P%Ab9{sG-B+wAwN^-{z2I)>@^wr3n(F}#7}TU}{{ zkqlW^6)#=KEb;*FwdPfDXDy{_e$_Kv$Ri7|(H4Fw%9;w6C#$y^I$ zYL;X9o61{Ky7khohDCu&f;u#;zAqi=<*NkTxAVQ(ny zmL{mcXiHTErnaa*fm033kvoI#p7dJgp3R*?!)=@PuIX879c@ne_pQFb#snUpsW~;< zY~8Ex++ps>e0=&w`h!+IlR5JR#^mf|Uozj8bLbvePN(UcK0^|9sw3+Cy0b5j1k%M4 zH>U$ltBea=9^+uNrpKK@4YTX*s80kg{!2u$AYx-uB(?Uzw%LmkoK;N_63LkDw(K$D z>xmdeDyu$UE`jn~j~7J}g2z|_i=!%d*gICj+5|YYN~=}fq}ZmLR>v{@fyX>=*IFAV zmAyGhtPyUB=mIlMci^?WW;Kry-ah8|*96xe^ z1}YU5K3BQAiZo|Hu3Si`f58h+kbcZ%3K#jzs8`~1T;g00kHNrYt_0r38lMVcErQ6F z=X65kp0)pC$UYm}^Scn)*J+<7j#jRm{uQTw<}`Fa!x7?3WW-ki#F_9|1fe2%haYXl zUSk~Z^0dHvSdU;=IjVQ5><=+w7|_>4giOtcGAIjbntyr2Or=%S*Vh9qX?E5 z!SW;I8No6mIFrKT3da?WJT)~G$&V|Z-KKNWh0Si)5f76DV~&KXe~^ z$DZ4YLKR0r_l6sIPouu#5VqZ)b{ao;aZkn;W(00#UcT`lkR2JS8maO`EnpUwg*hAZ zSP;0CopV2G^+!Mgr`l5e*bk&3_XI8!8%YF-;9B7IdX-W-(^r1rHvFEdXaTm3B@_e- z;{<`~B%oeuL~+~oLKVdB@pU)uhsy6rH{Fa8|0JKrvIWP+yLeCFVm32@*{UD*!o;O(p4p;)K;}!R`JE*#AZ@{URo6V#UcB;+WlTFEk zD0?3oR*6J`g}taBx8y@#C$2EOtuE^efvK*CJOYy|L9#&#<8{UU8k{rcP{Vm%6Q_AU z0v32Upo|>0_;!_}(6gIP{srE7&c_@s@q0Fz_HdcccDe*EuJG+@vgTTX`JCSxa~FBq z0gJ?(d4a{3$iIp@Oi-)oGJ~Q4Z|oa{2z|*ISe>vuVb*5(>~A>rYvNC9T1brB)OM7> z&ZWzSFbiMcOG0#zH;L7u-NJ2y-QuW!%jJI=64NOCktlP9##0AXW4T9?j?O9ng_UPm zD!;_a=I?kv2dyoi>{qHSz%n``fjUEN4(?!^yt|2oSmxus|8sC=(m|IFe$MLPD|}7e zIzJr~!5Sl2e})1hSZ4(1a(G_mxWSRDW=0}WaL^xdv^I=n4K>`S{0Fp1D?`sb{4X}g dl*l)9`YjjbP{(&19X{o`?0f!K(i`8v{J-+mhmQaN literal 0 HcmV?d00001 diff --git a/target/classes/main/java/controlp5/layout/lang/XMLParser$ElementContext.class b/target/classes/main/java/controlp5/layout/lang/XMLParser$ElementContext.class new file mode 100644 index 0000000000000000000000000000000000000000..5025d436233eb493706b9a1ec106f231b07415ec GIT binary patch literal 2869 zcmbtWU2hvj6g^`HZyawDY9NqMpoCETk=AW#Xd1hrV3J~Rl2V(9H?(m^?l$Y)XuXco zpVC((B!miTktk{(s`AQ@LY&#%Z2b{~Eh1%Sc6RQWbLO5q}rS!WLt)5 z7w#EHMxo)@p6ghLD+SBA?{qvicC+x^R`s^wwxz3KLg4zy)0b+V;d*tWSthJJ_NI`4 zreRV?5>o=JqXTVNvL$UV#1WWjO7Bj`lF>jZQ}qS-e9M;6ZWk-rs^c~bhV5By;pl3? z?bx2#l7&D@S9DQ>E^uuOHunBYQ5t5(lHya2q^K=Q3G1fU>cOT8W_W_K0vIUVmS;FLTzy>Nzx4+L@}0PmV@ z({o605g+O}kB><3NR34VxBm~pE=TU{-IEQkm_img4S5~QxIm7lX39^nuer`tha3f_ zeP-pmrnT=Xi>wYwnjfy*?Rz6TNPkuHl;MJsh0y?wW0ZwK10L%Q{^v{pu4ajzxW=yJksTYp65H_5?~};q;a- zf%Mu&b@Tgjb*EO@zQvppZFpLH>Xup#4d#*@hU9YasG<){`^Y&k?Ix4qaic|r9Kz$U zV(-gifp{j%!K7bn$_WCOhAhzQwUdfvZP6rFSib@n{zXw_)F_w~Nv(0PWgLcSpH#&e z5J?z~hCHO=n`jV6oMyM0&~6IynlG&&nsi#l=Ag@ah(Q8*371D zcpaDfyj7~N4OZOxI9fy8EYSs~YEH*($W2ovaVENlFRHtaX|LEkU;W!ovaDwN%99bj z)x*s6lmRF7+L>o*f|rT2j)h;zZT5P|_HqC^nYyMcAi7Wfo5 zL)c}u>RW8$VT2g$>aSgdViBRw@OcT;R#53*5q&WTAY~3Kc9+!QunVP{AS< zEXD9B&o;xBvnINfJVhGMx)xf9lq{fvuSoxEMg&e&Bh{DM(%9ms7`FMpoW)5YI;W<*=rD9orVIr zo(enuvGN4gO08De_Jf`!z0eJ;lLuBX@ZqXac+%bTk5ny>JPHO(6Z2RQ zxSbdlbNzPYs!6_V-SM1oOJ_??H5F59l@APD6{yZ2(sqWS@>Ed3B8n#7!Mg$lMXf=s zTcBRDXTXVBTr5_te4t^MO}wvR^Xk+IV^jkl2vlZ(J#dCj=#$+FJ~VL+ACcXOUOQvA z`#;#(k#QoQ>>s{V-LO``C%A6lhKZZ_lnfJ_6!kXJ+hLc-3 zC|tKVvPF5C1S_@wyt(&%+umtEBZ<$?U|Jd<*?NElq5-kCf zr%czV7D>)dvF zo(x9;>%3dH02j0)d)J0`^! zlHxZK>5X1mQ?nK31VE3$L9#8CI$JDpVc_BO(bSUvHAxVUt_-dI~FUy zU?~O7Egh9M=C+L`u@j*!#}N~5MLfh;#9NOd#1f|)|CZpr=>$)hpgC)TO*|qCUDEzo z!73H3yv70*tWd#f3U8_$Kjz3?nR7~>p(tAC60J^@tfGcG=|5&fY$Cm~^^dk9zUE&k UZ1cAh&Avf{W1d?w{5`?k-`{{8MgRZ+ literal 0 HcmV?d00001 diff --git a/target/classes/main/java/controlp5/layout/lang/XMLParser$StartTagContext.class b/target/classes/main/java/controlp5/layout/lang/XMLParser$StartTagContext.class new file mode 100644 index 0000000000000000000000000000000000000000..2e71912d0f985696aee69dd927b5cb3b28e8b2bb GIT binary patch literal 2823 zcmbtWU31$+6g_J@k)0?XH4sQzprobPaay&drEP4|7L$U(`Jgr#UKK~31!E0vU{H7}ud8D{v>VZeVvTBk(QDXj*>9c1>r)+qKFX zCInWJ2fiN!zP-~6tSGWfLDw;bX@MDXc-V8|uet&k3Uzf3D($LccDva`Z6{ z`IKwLZ4C3AFO2uxY5qaRmQV6{+BfE4mLDTZ=!TSA}L@t%a% ztwTGAku_WpSV{oBZFlX!BgaL&uj3LvAjbo_7b6L5z7od)VQlU^wpu}X5=AU&DCt@^iGA2_D&Oj`Ay%m?1aJ4g-u;>zj==ft(pP zCWDf?YP%OrMuUdkcFmyY(`jqSpz;!2PL6=`YFXfJfqj`kSCM3gFa(6nzZ$!5-((3n z(oQL1h%ngaEWhm@czd?nraA*As7G_8=I&aD0_j4Lz&X`p(ox{*Dd5ND6?ZB-iWAm} z`c~lb=&^8$GwG35Yj54$j|7mFEg2FSH(M=hpV{6^#3&McJVlQyS5pn@`5atH2*y|f zbH`QsWItBw^_Re@l$uQ?h4o5vWw^UJ(ULcGgjFP>z(m9A`7P^#Eeki@zdWxE(*I+? zU5n`7p?L}`bi0KzpAzOSk0Hf%k}zkFF!LO_lTd#usJYNAf}#T|_?RF<-nS80jbLfT zsdVmpy!M@nCy#VOIse6@{ab;Z56${u8dk|frGtBfm8spwClTy2SNUCP?AtzKSfqaj zvP|`hRK=%}XM;#GyL{jv_@o^$RVHYJd~ZVHivg`O2cU#XYeldrS>OkYm}?S1}FLi<|9@02adZN zC}Z3>rd1JKbvJTEc~XQxzGZEj%}*(yG_|z^a&=lvV6owNvN`PS$iT99T&@%we#ds( zcHpS*WHA>$a0XQQvW=z6=KZa^_qG}Me$%x0-M5)IPscHdPkNL^bG&_j&+)pg&<-h8 zm;yQvm#UBH?aBjzY^lt}*~pG+S>Vz!0gg82(A2ab53HM5Twp!@1RVpWL`v)IZQ1># za5Kuov5>so>Bv4azCD$q#45Gao@21|;VUn|vr)CI+GdS) zZaH1g4u=8jytQH7oV4fWi{zT{mdVa@+wzA&M}Fd{CN7LF<%{YVvhAkFE2!?;gMp+m z_3;}Qr+IM~c;y2#5IBqX_&&$4E68%j)yk5d{TkUPoM&*J@4Q+UKcmFC9`8XJ6@Kwf zOvBHo;eScRUl`#pC-Jq4mInWI46cpB^X{hzCEp}G%TcRTPkw{huQ-j>7dS%vhP?Pa zqBs?AODG7yIxa?8X)th!y9F+@8ZqrUM^%;VQvS;kWn7Ry#uQ~oir(jcX$)&OnLFMx~9#{fTAqSH!jwBSzwixQ6TG`yfJyWlnGWUx3#p1N_YZ zPp1v=A#PHIs%bCDV2v59KE?twSY-xl89b?Se48V8<;F7k2SxGkSfI60CTpl+gYrKj hA~um)*?gW`5x4kL2Dka#iDq|E=UCvD9G{Od`wSkoA_f2e literal 0 HcmV?d00001 diff --git a/target/classes/main/java/controlp5/layout/lang/XMLParser.class b/target/classes/main/java/controlp5/layout/lang/XMLParser.class new file mode 100644 index 0000000000000000000000000000000000000000..baf8bd9a9801b89ad710800fbd794a4b28b4ba8b GIT binary patch literal 10532 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 S<~J}u%lt;>=b7Jxj6VWgQiIC? literal 0 HcmV?d00001 diff --git a/target/classes/main/java/controlp5/layout/lang/XMLVisitor.class b/target/classes/main/java/controlp5/layout/lang/XMLVisitor.class new file mode 100644 index 0000000000000000000000000000000000000000..3f4196e1f4fa30cd1f11e924ef1cf9f2a07e8031 GIT binary patch literal 2225 zcmbtVTW`}a82vmhrrp+!`~6;E9k6ieE_9+D7=kKrIL{z0UPE(8)JHiW`W6>2(D-5&>{qM_;FMfux z1_W*A%Uq(wxpiB~)!k1lm_lx9X@k&|XJ6T1n{~2o*^e zZvz!Zv)!KFr?3@wWS|-CFEnzPFgmJyQnm%N@`qlpG}4CF85NpdI}kcnlF`SB)Lj>H zGsf_?FZ+H!+b9mIGVOktM9?_wx3sB+(ynM*w)CVd)1y@z#}tjp>3$o7Z^q)D)uK&N zros9Idd6PK*xS@vc}KCv&N;AAOzJXCZcZjSv>VMdz0+g08wXXH9<6p`TF^Kwnob@H zKSmcDHcK`&neN`7Ue0*?y5ZKwBcnb()W{!c8&IwzCyLE5RxP>X`B?Yd|KMEeMHFIW zHwdKK@{5su8_)YLzbUWd9 wFmr#VyL8XYc%L2sYjE+99@7(ieF|IvR)EieFMvxx2lyKJ23Q3y16Qf=4=w1%TL1t6 literal 0 HcmV?d00001 diff --git a/target/classes/main/java/controlp5/package.html b/target/classes/main/java/controlp5/package.html new file mode 100755 index 0000000..132bc08 --- /dev/null +++ b/target/classes/main/java/controlp5/package.html @@ -0,0 +1,16 @@ + + + +controlP5 documentation + + + +

ControlP5

+

ControlP5 (www.sojamo.de/libraries/controlP5) is a library written by Andreas Schlegel for the programming environment processing. ControlP5 is a GUI and controller library for processing that can be used in authoring, application mode. Controllers including Sliders, Buttons, Toggles, Knobs, Textfields, RadioButtons, Checkboxes amongst others can be easily added to a processing sketch and can be arranged in separate control windows, or can be organized in tabs or groups. The controlP5 source code repository is available on github at github.com/sojamo/controlp5. +

+

Javascript

+

Currently there is no javascript version of ControlP5, though I had started implementing a slimmed down version for processing.js but since it is currently unclear which javascript version, processing.js or p5.js, will become the default js version of processing, controlP5.js is on hold.

+ + + diff --git a/target/classes/main/java/sketch/Sketch.class b/target/classes/main/java/sketch/Sketch.class new file mode 100644 index 0000000000000000000000000000000000000000..9ebfb53517f612d3b31ec09b187a55d1dc51988a GIT binary patch literal 1315 zcmah|YflqV5Iwi_-STRsyox+TXp6QARK+5SBqk(9NlKa!KW(=wEN;8acB{n1A7!Fo zBr$&W_xRa(?(U{kshaHG=b1AzXXbwY`Qnc~nqM zODpVew_1i~3j{ayrfzQu3}mv^Fv7$(6up^0QQj!|_G`^nkMk90l9bUnVu%a)B}QN@ zQ*{mQc{2(_>0xSOc4zyGIm981}Fmg<_Vc1bDW1iCPm~~1!Tqfvwr%}_a1Eps0BvCe1#i%NlF8AJ{ z-#*sc0+T%%{Z^`yKq~XHC&F&6=}EDUXq)VFEf8joHoJm=0GFMXfT*!}J&rEx>?%!P zzJ?*tU*4;k6Cbmbx^BAW3@F2HqCdS^*G}ngmq&F=c`FdDm>o;ip6ODEnA?R;qhp>8 z^AoLD*5x$eVp7FY89882h zBXVgi9~3Z1H$y!PL9Akp=j^bq`wa{@?6KUa_`&ZCgMZQ_*qq58nwS@eK(R~n9)1!5 zYq<*~51Go?Crn%*eVF@*iNy7D%#GAX>Sws|jTO4UvU{FA$I9NNy97yqG3GmtMNBZ- zX~*rHOYON`#4zsRKBHdc{{S1zRp22?9HpQ|{*K_6#8PWu)*(x|mmZlEV-t@!3T$<= VSs_|lT&c%Gj|`$K!(+$elV6ZM3pfA( literal 0 HcmV?d00001 diff --git a/target/test-classes/PACKAGE_NAME/LayoutTests.class b/target/test-classes/PACKAGE_NAME/LayoutTests.class new file mode 100644 index 0000000000000000000000000000000000000000..973e930e8e9fc87ebe701a1570ba567f71212f2e GIT binary patch literal 284 zcmX^0Z`VEs1_l!b0WJn624;2!79Ivx1~x_pfvm)`ME#t^ymWp4q^#8B5=I6#o6Nk- z5<5l)W)00Sb_Nbc28jSiXKzP$*LXiiUsrvf#LE2Al91Hml43>%7U%qwR7M7VpUk{e zztY^K)S{5Yq#U4#kWYScVoq3MQ6`8F6=W&N$OLMV^1)@GH6sI8aDHh~a;jS<$P@u2 z%k)4_Wl&^b2l@a67=aMz2O!A_