mirror of
https://github.com/sojamo/controlp5
synced 2024-11-16 03:07:56 +01:00
229 lines
5.6 KiB
Java
Executable File
229 lines
5.6 KiB
Java
Executable File
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;
|
|
}
|
|
|
|
}
|