/**
* Copyright (C) 2009-2014 Cars and Tracks Development Project (CTDP).
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
package net.ctdp.rfdynhud.widgets.standard.speedo;
import java.io.IOException;
import net.ctdp.rfdynhud.gamedata.LiveGameData;
import net.ctdp.rfdynhud.gamedata.ProfileInfo.SpeedUnits;
import net.ctdp.rfdynhud.gamedata.VehicleScoringInfo;
import net.ctdp.rfdynhud.properties.BackgroundProperty;
import net.ctdp.rfdynhud.properties.IntProperty;
import net.ctdp.rfdynhud.properties.PropertiesContainer;
import net.ctdp.rfdynhud.properties.PropertyLoader;
import net.ctdp.rfdynhud.util.PropertyWriter;
import net.ctdp.rfdynhud.widgets.base.needlemeter.NeedleMeterWidget;
import net.ctdp.rfdynhud.widgets.standard._util.StandardWidgetSet;
/**
* The {@link SpeedoWidget} renders the current velocity as needle on a scale.
*
* @author Marvin Froehlich (CTDP)
*/
public class SpeedoWidget extends NeedleMeterWidget
{
private final IntProperty maxVelocity = new IntProperty( "maxVelocity", 340, 1, 1000 );
public SpeedoWidget()
{
super( StandardWidgetSet.INSTANCE, StandardWidgetSet.WIDGET_PACKAGE, 16.3125f, 21.75f );
getBorderProperty().setBorder( "" );
lastMarkerBig.setBooleanValue( true );
}
@Override
protected boolean hasText()
{
return ( false );
}
@Override
protected void initParentProperties()
{
super.initParentProperties();
markersBigStep.setIntValue( 100 );
markersSmallStep.setIntValue( 10 );
}
@Override
public void saveProperties( PropertyWriter writer ) throws IOException
{
super.saveProperties( writer );
writer.writeProperty( maxVelocity, "The maximum velocity in km/h." );
}
@Override
public void loadProperty( PropertyLoader loader )
{
super.loadProperty( loader );
if ( loader.loadProperty( maxVelocity ) );
}
/**
* {@inheritDoc}
*/
@Override
protected void addMaxValuePropertyToContainer( PropertiesContainer propsCont, boolean forceAll )
{
// We don't need this here!
}
@Override
protected boolean getSpecificPropertiesFirst( PropertiesContainer propsCont, boolean forceAll )
{
if ( !super.getSpecificPropertiesFirst( propsCont, forceAll ) )
propsCont.addGroup( "Misc" );
propsCont.addProperty( maxVelocity );
return ( true );
}
@Override
public void getProperties( PropertiesContainer propsCont, boolean forceAll )
{
super.getProperties( propsCont, forceAll );
}
@Override
protected String getInitialBackground()
{
return ( BackgroundProperty.IMAGE_INDICATOR + "standard/rev_meter_bg.png" );
}
@Override
protected int getMarkersBigStepLowerLimit()
{
return ( 20 );
}
@Override
protected int getMarkersSmallStepLowerLimit()
{
return ( 5 );
}
/*
@Override
protected FontProperty getValueFont()
{
return ( getFontProperty() );
}
@Override
protected ColorProperty getValueFontColor()
{
return ( getFontColorProperty() );
}
*/
@Override
protected float getMinDataValue( LiveGameData gameData, boolean isEditorMode )
{
return ( 0 );
}
@Override
protected float getMaxDataValue( LiveGameData gameData, boolean isEditorMode )
{
if ( gameData.getProfileInfo().getSpeedUnits() == SpeedUnits.MIH )
return ( maxVelocity.getFloatValue() * SpeedUnits.Convert.KMH_TO_MIH );
return ( maxVelocity.getFloatValue() );
}
@Override
protected float getValue( LiveGameData gameData, boolean isEditorMode )
{
VehicleScoringInfo vsi = gameData.getScoringInfo().getViewedVehicleScoringInfo();
if ( vsi.isPlayer() )
return ( gameData.getTelemetryData().getScalarVelocity() );
return ( vsi.getScalarVelocity() );
}
@Override
protected String getMarkerLabelForValue( LiveGameData gameData, boolean isEditorMode, float value )
{
return ( String.valueOf( (int)value ) );
}
}