mirror of
https://github.com/sojamo/controlp5
synced 2025-01-07 02:23:49 +01:00
Update CheckBox.java
synchronized ( _myRadioToggles )
This commit is contained in:
parent
1f7cb64986
commit
192dd048e2
@ -1,5 +1,3 @@
|
||||
package controlP5;
|
||||
|
||||
/**
|
||||
* controlP5 is a processing gui library.
|
||||
*
|
||||
@ -25,12 +23,15 @@ package controlP5;
|
||||
*
|
||||
*/
|
||||
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import processing.core.PImage;
|
||||
package controlP5;
|
||||
|
||||
import java.lang.reflect.Method;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.ArrayList;
|
||||
|
||||
import processing.core.PImage;
|
||||
import static processing.core.PApplet.min;
|
||||
|
||||
/**
|
||||
* A multiple-choice radioButton. items are added to a checkBox and can be organized in rows and
|
||||
@ -43,9 +44,23 @@ import processing.core.PImage;
|
||||
*/
|
||||
public class CheckBox extends ControlGroup< CheckBox > {
|
||||
|
||||
private Object _myPlug;
|
||||
final protected List< Toggle > _myRadioToggles = new ArrayList< >( );
|
||||
|
||||
private String _myPlugName;
|
||||
final protected PImage[] images = new PImage[ 3 ];
|
||||
final protected boolean[] availableImages = new boolean[ 3 ];
|
||||
|
||||
protected int spacingRow = 1;
|
||||
protected int spacingColumn = 1;
|
||||
protected int itemsPerRow = -1;
|
||||
|
||||
protected int itemHeight = 9;
|
||||
protected int itemWidth = 9;
|
||||
|
||||
protected boolean noneSelectedAllowed = true;
|
||||
protected boolean isMultipleChoice;
|
||||
|
||||
protected Object _myPlug;
|
||||
protected String _myPlugName;
|
||||
|
||||
/**
|
||||
* Convenience constructor to extend CheckBox.
|
||||
@ -56,7 +71,7 @@ public class CheckBox extends ControlGroup< CheckBox > {
|
||||
*/
|
||||
public CheckBox( ControlP5 theControlP5 , String theName ) {
|
||||
this( theControlP5 , theControlP5.getDefaultTab( ) , theName , 0 , 0 );
|
||||
theControlP5.register( theControlP5.papplet , theName , this );
|
||||
cp5.register( cp5.papplet , theName , this );
|
||||
}
|
||||
|
||||
/**
|
||||
@ -69,34 +84,29 @@ public class CheckBox extends ControlGroup< CheckBox > {
|
||||
* @param theX
|
||||
* @param theY
|
||||
*/
|
||||
public CheckBox( final ControlP5 theControlP5 , final ControllerGroup< ? > theParent , final String theName , final int theX , final int theY ) {
|
||||
public CheckBox( ControlP5 theControlP5 , ControllerGroup< ? extends ControllerGroup< ? > > theParent ,
|
||||
String theName , int theX , int theY ) {
|
||||
super( theControlP5 , theParent , theName , theX , theY , 99 , 9 );
|
||||
isBarVisible = false;
|
||||
isCollapse = false;
|
||||
_myRadioToggles = new ArrayList< Toggle >( );
|
||||
setItemsPerRow( 1 );
|
||||
isCollapse = isBarVisible = false;
|
||||
isMultipleChoice = true;
|
||||
_myPlug = cp5.papplet;
|
||||
_myPlugName = getName( );
|
||||
if ( !ControllerPlug.checkPlug( _myPlug , _myPlugName , new Class[] { float[].class } ) ) {
|
||||
_myPlug = null;
|
||||
}
|
||||
setItemsPerRow( 1 );
|
||||
if ( ControllerPlug.checkPlug( cp5.papplet , _myPlugName = getName( ) ,
|
||||
new Class[] { float[].class } ) ) _myPlug = cp5.papplet;
|
||||
}
|
||||
|
||||
public final CheckBox activateAll( ) {
|
||||
int n = _myRadioToggles.size( );
|
||||
for ( int i = 0 ; i < n ; i++ ) {
|
||||
_myRadioToggles.get( i ).activate( );
|
||||
public CheckBox activateAll( ) {
|
||||
if ( !_myRadioToggles.isEmpty( ) ) synchronized ( _myRadioToggles ) {
|
||||
for ( final Toggle tog : _myRadioToggles ) tog.activate( );
|
||||
updateValues( );
|
||||
}
|
||||
updateValues( );
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Activates a single checkbox item by index
|
||||
*/
|
||||
public final CheckBox activate( int theIndex ) {
|
||||
if ( theIndex < _myRadioToggles.size( ) ) {
|
||||
public CheckBox activate( int theIndex ) {
|
||||
if ( ( theIndex = Math.abs( theIndex ) ) < _myRadioToggles.size( ) ) {
|
||||
_myRadioToggles.get( theIndex ).activate( );
|
||||
updateValues( );
|
||||
}
|
||||
@ -104,10 +114,10 @@ public class CheckBox extends ControlGroup< CheckBox > {
|
||||
}
|
||||
|
||||
/**
|
||||
* deactivate a single checkbox item by index
|
||||
* Deactivates a single checkbox item by index
|
||||
*/
|
||||
public final CheckBox deactivate( int theIndex ) {
|
||||
if ( theIndex < _myRadioToggles.size( ) ) {
|
||||
public CheckBox deactivate( int theIndex ) {
|
||||
if ( ( theIndex = Math.abs( theIndex ) ) < _myRadioToggles.size( ) ) {
|
||||
_myRadioToggles.get( theIndex ).deactivate( );
|
||||
updateValues( );
|
||||
}
|
||||
@ -115,51 +125,40 @@ public class CheckBox extends ControlGroup< CheckBox > {
|
||||
}
|
||||
|
||||
/**
|
||||
* toggle a single checkbox item by index
|
||||
* Toggles a single checkbox item by index
|
||||
*/
|
||||
public final CheckBox toggle( int theIndex ) {
|
||||
if ( theIndex < _myRadioToggles.size( ) ) {
|
||||
Toggle t = _myRadioToggles.get( theIndex );
|
||||
if ( t.getState( ) == true ) {
|
||||
t.deactivate( );
|
||||
} else {
|
||||
t.activate( );
|
||||
}
|
||||
public CheckBox toggle( int theIndex ) {
|
||||
if ( ( theIndex = Math.abs( theIndex ) ) < _myRadioToggles.size( ) ) {
|
||||
final Toggle tog = _myRadioToggles.get( theIndex );
|
||||
if ( tog.getState( ) ) tog.deactivate( );
|
||||
else tog.activate( );
|
||||
updateValues( );
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* deactivate a single checkbox item by name
|
||||
* Toggles 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( ) == true ) {
|
||||
t.deactivate( );
|
||||
} else {
|
||||
t.activate( );
|
||||
}
|
||||
updateValues( );
|
||||
return;
|
||||
public CheckBox toggle( final String theName ) {
|
||||
if ( theName != null && !_myRadioToggles.isEmpty( ) ) synchronized ( _myRadioToggles ) {
|
||||
for ( final Toggle tog : _myRadioToggles ) if ( theName.equals( tog.getName( ) ) ) {
|
||||
if ( tog.getState( ) ) tog.deactivate( );
|
||||
else tog.activate( );
|
||||
return updateValues( );
|
||||
}
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* 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;
|
||||
public CheckBox activate( final String theName ) {
|
||||
if ( theName != null && !_myRadioToggles.isEmpty( ) ) synchronized ( _myRadioToggles ) {
|
||||
for ( final Toggle tog : _myRadioToggles ) if ( theName.equals( tog.getName( ) ) ) {
|
||||
tog.activate( );
|
||||
return updateValues( );
|
||||
}
|
||||
}
|
||||
return this;
|
||||
@ -168,40 +167,46 @@ public class CheckBox extends ControlGroup< CheckBox > {
|
||||
/**
|
||||
* 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;
|
||||
public CheckBox deactivate( final String theName ) {
|
||||
if ( theName != null && !_myRadioToggles.isEmpty( ) ) synchronized ( _myRadioToggles ) {
|
||||
for ( final Toggle tog : _myRadioToggles ) if ( theName.equals( tog.getName( ) ) ) {
|
||||
tog.deactivate( );
|
||||
return updateValues( );
|
||||
}
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
private final void updateValues( ) {
|
||||
@ControlP5.Invisible protected CheckBox updateValues( ) {
|
||||
_myValue = -1;
|
||||
updateValues( true );
|
||||
return updateValues( true );
|
||||
}
|
||||
|
||||
protected CheckBox updateValues( final boolean theBroadcastFlag ) {
|
||||
if ( _myRadioToggles.isEmpty( ) ) _myArrayValue = new float[ 0 ];
|
||||
else synchronized ( _myRadioToggles ) {
|
||||
int i = 0 , len = _myRadioToggles.size( );
|
||||
_myArrayValue = new float[ len ];
|
||||
for ( final Toggle tog : _myRadioToggles ) _myArrayValue[ i++ ] = tog.getValue( );
|
||||
}
|
||||
if ( theBroadcastFlag ) cp5.getControlBroadcaster( ).broadcast( new ControlEvent( this ) , FLOAT );
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* 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( );
|
||||
}
|
||||
@Override @SafeVarargs public final T setArrayValue( final float... theArray ) {
|
||||
if ( theArray != null && !_myRadioToggles.isEmpty( ) ) synchronized ( _myRadioToggles ) {
|
||||
final int len = min( theArray.length , _myArrayValue.length , _myRadioToggles.size( ) );
|
||||
for ( int i = 0 ; i < len ; ++i ) if ( theArray[ i ] != _myArrayValue[ i ] ) {
|
||||
if ( theArray[ i ] == 0 ) _myRadioToggles.get( i ).deactivate( );
|
||||
else _myRadioToggles.get( i ).activate( );
|
||||
}
|
||||
super.setArrayValue( theArray );
|
||||
}
|
||||
super.setArrayValue( theArray );
|
||||
return this;
|
||||
return me;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -211,46 +216,16 @@ public class CheckBox extends ControlGroup< CheckBox > {
|
||||
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 );
|
||||
final Toggle t = cp5.addToggle( theName , 0 , 0 , itemWidth , itemHeight );
|
||||
t.getCaptionLabel( ).align( RIGHT_OUTSIDE , CENTER ).setPadding( Label.paddingX , 0 );
|
||||
t.setMode( ControlP5.DEFAULT );
|
||||
t.setImages( images[ 0 ] , images[ 1 ] , images[ 2 ] );
|
||||
t.setSize( images[ 0 ] );
|
||||
addItem( t , theValue );
|
||||
return this;
|
||||
t.setMode( ControlP5.DEFAULT ).setImages( images );
|
||||
return addItem( t , theValue );
|
||||
}
|
||||
|
||||
/**
|
||||
@ -259,11 +234,11 @@ public class CheckBox extends ControlGroup< CheckBox > {
|
||||
* @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 );
|
||||
theToggle.isBroadcast = theToggle.isMoveable = false;
|
||||
theToggle.setGroup( this ).setInternalValue( theValue );
|
||||
synchronized ( _myRadioToggles ) {
|
||||
_myRadioToggles.add( theToggle );
|
||||
}
|
||||
updateLayout( );
|
||||
getColor( ).copyTo( theToggle );
|
||||
theToggle.addListener( this );
|
||||
@ -276,14 +251,16 @@ public class CheckBox extends ControlGroup< CheckBox > {
|
||||
* @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 );
|
||||
if ( theName != null && !_myRadioToggles.isEmpty( ) ) synchronized ( _myRadioToggles ) {
|
||||
for ( int i = _myRadioToggles.size( ) ; i-- != 0 ; ) {
|
||||
final Toggle tog = _myRadioToggles.get( i );
|
||||
if ( theName.equals( tog.getName( ) ) ) {
|
||||
tog.removeListener( this );
|
||||
_myRadioToggles.remove( i );
|
||||
}
|
||||
}
|
||||
updateValues( false );
|
||||
}
|
||||
updateValues( false );
|
||||
return this;
|
||||
}
|
||||
|
||||
@ -295,10 +272,7 @@ public class CheckBox extends ControlGroup< CheckBox > {
|
||||
* @return CheckBox
|
||||
*/
|
||||
public CheckBox setImages( PImage theDefaultImage , PImage theOverImage , PImage theActiveImage ) {
|
||||
setImage( theDefaultImage , DEFAULT );
|
||||
setImage( theOverImage , OVER );
|
||||
setImage( theActiveImage , ACTIVE );
|
||||
return this;
|
||||
return setImage( theDefaultImage ).setImage( theOverImage , OVER ).setImage( theActiveImage , ACTIVE );
|
||||
}
|
||||
|
||||
/**
|
||||
@ -315,13 +289,11 @@ public class CheckBox extends ControlGroup< CheckBox > {
|
||||
* Controller.ACTIVE (active)
|
||||
* @return
|
||||
*/
|
||||
public CheckBox setImage( PImage theImage , int theState ) {
|
||||
if ( theImage != null ) {
|
||||
public CheckBox setImage( final PImage theImage , final int theState ) {
|
||||
if ( theImage != null && !_myRadioToggles.isEmpty( ) ) synchronized ( _myRadioToggles ) {
|
||||
images[ theState ] = theImage;
|
||||
availableImages[ theState ] = true;
|
||||
for ( int i = 0 ; i < _myRadioToggles.size( ) ; i++ ) {
|
||||
_myRadioToggles.get( i ).setImage( theImage , theState );
|
||||
}
|
||||
for ( final Toggle tog : _myRadioToggles ) tog.setImage( theImage , theState );
|
||||
}
|
||||
return this;
|
||||
}
|
||||
@ -331,41 +303,37 @@ public class CheckBox extends ControlGroup< CheckBox > {
|
||||
}
|
||||
|
||||
public CheckBox setSize( int theWidth , int theHeight ) {
|
||||
setItemWidth( theWidth );
|
||||
setItemHeight( theHeight );
|
||||
return this;
|
||||
return setItemWidth( theWidth ).setItemHeight( theHeight );
|
||||
}
|
||||
|
||||
/**
|
||||
* 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.
|
||||
* Sets 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 ) {
|
||||
public CheckBox setItemHeight( final int theItemHeight ) {
|
||||
itemHeight = theItemHeight;
|
||||
for ( Toggle t : _myRadioToggles ) {
|
||||
t.setHeight( theItemHeight );
|
||||
if ( !_myRadioToggles.isEmpty( ) ) synchronized ( _myRadioToggles ) {
|
||||
for ( final Toggle tog : _myRadioToggles ) tog.setHeight( theItemHeight );
|
||||
}
|
||||
updateLayout( );
|
||||
return this;
|
||||
return updateLayout( );
|
||||
}
|
||||
|
||||
/**
|
||||
* 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.
|
||||
* Sets 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 ) {
|
||||
public CheckBox setItemWidth( final int theItemWidth ) {
|
||||
itemWidth = theItemWidth;
|
||||
for ( Toggle t : _myRadioToggles ) {
|
||||
t.setWidth( theItemWidth );
|
||||
if ( !_myRadioToggles.isEmpty( ) ) synchronized ( _myRadioToggles ) {
|
||||
for ( final Toggle tog : _myRadioToggles ) tog.setWidth( theItemWidth );
|
||||
}
|
||||
updateLayout( );
|
||||
return this;
|
||||
return updateLayout( );
|
||||
}
|
||||
|
||||
/**
|
||||
@ -389,10 +357,8 @@ public class CheckBox extends ControlGroup< CheckBox > {
|
||||
* @return boolean
|
||||
*/
|
||||
public boolean getState( int theIndex ) {
|
||||
if ( theIndex < _myRadioToggles.size( ) && theIndex >= 0 ) {
|
||||
return ( ( Toggle ) _myRadioToggles.get( theIndex ) ).getState( );
|
||||
}
|
||||
return false;
|
||||
return ( theIndex = Math.abs( theIndex ) ) < _myRadioToggles.size( ) ?
|
||||
_myRadioToggles.get( theIndex ).getState( ) : false;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -401,13 +367,10 @@ public class CheckBox extends ControlGroup< CheckBox > {
|
||||
* @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( );
|
||||
}
|
||||
public boolean getState( final String theName ) {
|
||||
if ( theName != null && !_myRadioToggles.isEmpty( ) ) synchronized ( _myRadioToggles ) {
|
||||
for ( final Toggle tog : _myRadioToggles )
|
||||
if ( theName.equals( tog.getName( ) ) ) return tog.getState( );
|
||||
}
|
||||
return false;
|
||||
}
|
||||
@ -415,38 +378,31 @@ public class CheckBox extends ControlGroup< CheckBox > {
|
||||
/**
|
||||
* @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;
|
||||
public CheckBox updateLayout( ) {
|
||||
if ( !_myRadioToggles.isEmpty( ) ) synchronized ( _myRadioToggles ) {
|
||||
int nn = 0 , xx = 0 , yy = 0;
|
||||
for ( final Toggle tog : _myRadioToggles ) {
|
||||
set( tog.position , xx , yy );
|
||||
_myWidth = xx += tog.getWidth( ) + spacingColumn;
|
||||
if ( ++nn == itemsPerRow ) {
|
||||
xx = nn = 0;
|
||||
yy += tog.getHeight( ) + spacingRow;
|
||||
}
|
||||
}
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* 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.
|
||||
* 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;
|
||||
return updateLayout( );
|
||||
}
|
||||
|
||||
/**
|
||||
@ -454,10 +410,9 @@ public class CheckBox extends ControlGroup< CheckBox > {
|
||||
*
|
||||
* @param theSpacing
|
||||
*/
|
||||
public CheckBox setSpacingColumn( final int theSpacing ) {
|
||||
spacingColumn = theSpacing;
|
||||
updateLayout( );
|
||||
return this;
|
||||
public CheckBox setSpacingColumn( final int theSpacingCol ) {
|
||||
spacingColumn = theSpacingCol;
|
||||
return updateLayout( );
|
||||
}
|
||||
|
||||
/**
|
||||
@ -465,23 +420,18 @@ public class CheckBox extends ControlGroup< CheckBox > {
|
||||
*
|
||||
* @param theSpacing
|
||||
*/
|
||||
public CheckBox setSpacingRow( final int theSpacing ) {
|
||||
spacingRow = theSpacing;
|
||||
updateLayout( );
|
||||
return this;
|
||||
public CheckBox setSpacingRow( final int theSpacingRow ) {
|
||||
spacingRow = theSpacingRow;
|
||||
return updateLayout( );
|
||||
}
|
||||
|
||||
public CheckBox deactivateAll( ) {
|
||||
if ( !isMultipleChoice && !noneSelectedAllowed ) {
|
||||
return this;
|
||||
}
|
||||
int n = _myRadioToggles.size( );
|
||||
for ( int i = 0 ; i < n ; i++ ) {
|
||||
( ( Toggle ) _myRadioToggles.get( i ) ).deactivate( );
|
||||
if ( !isMultipleChoice & !noneSelectedAllowed || _myRadioToggles.isEmpty( ) ) return this;
|
||||
synchronized ( _myRadioToggles ) {
|
||||
for ( final Toggle tog : _myRadioToggles ) tog.deactivate( );
|
||||
}
|
||||
_myValue = -1;
|
||||
updateValues( true );
|
||||
return this;
|
||||
return updateValues( true );
|
||||
}
|
||||
|
||||
/**
|
||||
@ -489,85 +439,45 @@ public class CheckBox extends ControlGroup< CheckBox > {
|
||||
*
|
||||
* @exclude
|
||||
*/
|
||||
@ControlP5.Invisible @Override public void controlEvent( ControlEvent theEvent ) {
|
||||
|
||||
@ControlP5.Invisible @Override public void controlEvent( final ControlEvent theEvent ) {
|
||||
if ( !isMultipleChoice ) {
|
||||
if ( noneSelectedAllowed == false && 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;
|
||||
}
|
||||
final Controller< ? > ctrl = theEvent.getController( );
|
||||
if ( !noneSelectedAllowed && ctrl.getValue( ) < 1 && ctrl instanceof Toggle ) {
|
||||
final Toggle tog = ( Toggle ) ctrl;
|
||||
final boolean b = tog.isBroadcast( );
|
||||
tog.setBroadcast( false ).setState( true ).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 ( !_myRadioToggles.isEmpty( ) ) synchronized ( _myRadioToggles ) {
|
||||
_myValue = -1;
|
||||
for ( final Toggle tog : _myRadioToggles )
|
||||
if ( !tog.equals( ctrl ) ) tog.deactivate( );
|
||||
else if ( tog.isOn( ) ) _myValue = t.internalValue( );
|
||||
}
|
||||
}
|
||||
updateValues( true );
|
||||
if ( _myPlug != null ) {
|
||||
try {
|
||||
Method method = _myPlug.getClass( ).getMethod( _myPlugName , float[].class );
|
||||
method.invoke( _myPlug , ( float[] ) 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( );
|
||||
}
|
||||
if ( _myPlug != null ) try {
|
||||
final Method method = _myPlug.getClass( ).getMethod( _myPlugName , float[].class );
|
||||
method.invoke( _myPlug , getArrayValue( ) );
|
||||
} catch ( SecurityException | IllegalArgumentException | ReflectiveOperationException ex ) {
|
||||
ex.printStackTrace( );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public CheckBox plugTo( Object theObject ) {
|
||||
_myPlug = theObject;
|
||||
if ( !ControllerPlug.checkPlug( _myPlug , _myPlugName , new Class[] { float[].class } ) ) {
|
||||
_myPlug = null;
|
||||
}
|
||||
public CheckBox plugTo( final Object theObject ) {
|
||||
_myPlug = ControllerPlug.checkPlug( theObject , _myPlugName , new Class[] { float[].class } )
|
||||
? theObject : null;
|
||||
return this;
|
||||
}
|
||||
|
||||
public CheckBox plugTo( Object theObject , String thePlugName ) {
|
||||
_myPlug = theObject;
|
||||
public CheckBox plugTo( final Object theObject , final String thePlugName ) {
|
||||
_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 = ( ( Toggle ) _myRadioToggles.get( i ) );
|
||||
_myArrayValue[ i ] = t.getValue( );
|
||||
}
|
||||
if ( theBroadcastFlag ) {
|
||||
ControlEvent myEvent = new ControlEvent( this );
|
||||
cp5.getControlBroadcaster( ).broadcast( myEvent , ControlP5Constants.FLOAT );
|
||||
}
|
||||
return plugTo( theObject );
|
||||
}
|
||||
|
||||
/**
|
||||
* In order to always have 1 item selected, use setNoneSelectedAllowed(false), by default this
|
||||
* is true. setNoneSelectedAllowed does not apply when in multipleChoice mode.
|
||||
* 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
|
||||
*/
|
||||
@ -576,30 +486,30 @@ public class CheckBox extends ControlGroup< CheckBox > {
|
||||
return this;
|
||||
}
|
||||
|
||||
public CheckBox setColorLabels( int theColor ) {
|
||||
for ( Toggle t : _myRadioToggles ) {
|
||||
t.getCaptionLabel( ).setColor( theColor );
|
||||
public CheckBox setColorLabels( final int theColor ) {
|
||||
if ( !_myRadioToggles.isEmpty( ) ) synchronized ( _myRadioToggles ) {
|
||||
for ( final Toggle tog : _myRadioToggles ) tog.getCaptionLabel( ).setColor( theColor );
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
public CheckBox hideLabels( ) {
|
||||
for ( Toggle t : _myRadioToggles ) {
|
||||
t.getCaptionLabel( ).setVisible( false );
|
||||
if ( !_myRadioToggles.isEmpty( ) ) synchronized ( _myRadioToggles ) {
|
||||
for ( final Toggle tog : _myRadioToggles ) tog.getCaptionLabel( ).setVisible( false );
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
public CheckBox showLabels( ) {
|
||||
for ( Toggle t : _myRadioToggles ) {
|
||||
t.getCaptionLabel( ).setVisible( true );
|
||||
if ( !_myRadioToggles.isEmpty( ) ) synchronized ( _myRadioToggles ) {
|
||||
for ( final Toggle tog : _myRadioToggles ) tog.getCaptionLabel( ).setVisible( true );
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
public CheckBox toUpperCase( boolean theValue ) {
|
||||
for ( Toggle t : _myRadioToggles ) {
|
||||
t.getCaptionLabel( ).toUpperCase( theValue );
|
||||
if ( !_myRadioToggles.isEmpty( ) ) synchronized ( _myRadioToggles ) {
|
||||
for ( final Toggle tog : _myRadioToggles ) tog.getCaptionLabel( ).toUpperCase( theValue );
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user