/**
* Copyright (c) 2003-2009, Xith3D Project Group all rights reserved.
*
* Portions based on the Java3D interface, Copyright by Sun Microsystems.
* Many thanks to the developers of Java3D and Sun Microsystems for their
* innovation and design.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* Neither the name of the 'Xith3D Project Group' nor the names of its
* contributors may be used to endorse or promote products derived from this
* software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) A
* RISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE
*/
package org.xith3d.ui.hud.theming;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
import org.openmali.vecmath2.Colorf;
import org.xith3d.ui.hud.utils.HUDFont;
/**
* Reads the Theme-properties from the properties file
*
* @author Marvin Froehlich (aka Qudus)
*/
public class ThemeProperties
{
private static final String DEFAULT_FONT_NAME = "Monospace";
private static final String DEFAULT_FONT_STYLE = "";
private static final String DEFAULT_FONT_SIZE = "12";
private static final String DEFAULT_FONT_COLOR = "#000000";
private static final String DEFAULT_FONT_DISABLED_NAME = DEFAULT_FONT_NAME;
private static final String DEFAULT_FONT_DISABLED_STYLE = "ITALIC";
private static final String DEFAULT_FONT_DISABLED_SIZE = DEFAULT_FONT_SIZE;
private static final String DEFAULT_FONT_DISABLED_COLOR = "#7F7F7F";
protected String name = "UNNAMED";
protected HUDFont font = HUDFont.getFont( DEFAULT_FONT_NAME, HUDFont.FontStyle.PLAIN, 12 );
protected Colorf font_color = new Colorf( 0f, 0f, 0f );
protected HUDFont font_disabled = HUDFont.getFont( DEFAULT_FONT_NAME, HUDFont.FontStyle.ITALIC, 12 );
protected Colorf font_disabled_color = new Colorf( 0.5f, 0.5f, 0.5f );
protected HUDFont label_font = font;
protected Colorf label_font_color = font_color;
protected HUDFont label_font_disabled = font_disabled;
protected Colorf label_font_disabled_color = font_disabled_color;
protected HUDFont button_font = font;
protected Colorf button_font_color = font_color;
protected HUDFont button_font_disabled = font_disabled;
protected Colorf button_font_disabled_color = font_disabled_color;
protected boolean scrollbar_smoothscrolling = true;
protected int slider_size_height = 23;
protected int slider_handle_yoffset = 0;
protected boolean slider_smoothsliding = true;
protected int border_rounded_corners_size_bottom = 4;
protected int border_rounded_corners_size_right = 4;
protected int border_rounded_corners_size_top = 4;
protected int border_rounded_corners_size_left = 4;
protected int border_rounded_corners_size_ll_upper = 4;
protected int border_rounded_corners_size_ll_right = 4;
protected int border_rounded_corners_size_lr_left = 4;
protected int border_rounded_corners_size_lr_upper = 4;
protected int border_rounded_corners_size_ur_lower = 4;
protected int border_rounded_corners_size_ur_left = 4;
protected int border_rounded_corners_size_ul_right = 4;
protected int border_rounded_corners_size_ul_lower = 4;
protected int border_frame_size_bottom = 3;
protected int border_frame_size_right = 3;
protected int border_frame_size_top = 0;
protected int border_frame_size_left = 3;
protected int border_frame_size_ll_upper = 0;
protected int border_frame_size_ll_right = 0;
protected int border_frame_size_lr_left = 0;
protected int border_frame_size_lr_upper = 0;
protected int border_frame_size_ur_lower = 0;
protected int border_frame_size_ur_left = 0;
protected int border_frame_size_ul_right = 0;
protected int border_frame_size_ul_lower = 0;
protected int border_bevel_lowered_size_bottom = 2;
protected int border_bevel_lowered_size_right = 2;
protected int border_bevel_lowered_size_top = 2;
protected int border_bevel_lowered_size_left = 2;
protected int border_bevel_lowered_size_ll_upper = 0;
protected int border_bevel_lowered_size_ll_right = 0;
protected int border_bevel_lowered_size_lr_left = 0;
protected int border_bevel_lowered_size_lr_upper = 0;
protected int border_bevel_lowered_size_ur_lower = 0;
protected int border_bevel_lowered_size_ur_left = 0;
protected int border_bevel_lowered_size_ul_right = 0;
protected int border_bevel_lowered_size_ul_lower = 0;
protected int border_bevel_raised_size_bottom = 2;
protected int border_bevel_raised_size_right = 2;
protected int border_bevel_raised_size_top = 2;
protected int border_bevel_raised_size_left = 2;
protected int border_bevel_raised_size_ll_upper = 0;
protected int border_bevel_raised_size_ll_right = 0;
protected int border_bevel_raised_size_lr_left = 0;
protected int border_bevel_raised_size_lr_upper = 0;
protected int border_bevel_raised_size_ur_lower = 0;
protected int border_bevel_raised_size_ur_left = 0;
protected int border_bevel_raised_size_ul_right = 0;
protected int border_bevel_raised_size_ul_lower = 0;
protected int button_size_bottom = 10;
protected int button_size_right = 10;
protected int button_size_top = 10;
protected int button_size_left = 10;
protected int radiobutton_space_size = 5;
protected int checkbox_space_size = 5;
protected String progressbar_border_name = "bevel/lowered";
protected HUDFont progressbar_label_font = HUDFont.getFont( DEFAULT_FONT_NAME, HUDFont.FontStyle.BOLD, 12 );
protected Colorf progressbar_label_font_color = Colorf.BLACK;
protected int progressbar_bar_bottom_height = 0;
protected int progressbar_bar_right_width = 0;
protected int progressbar_bar_top_height = 0;
protected int progressbar_bar_left_width = 0;
protected String list_border_name = "bevel/lowered";
protected Colorf list_background_color = null;
protected Colorf list_background_color_disabled = null;
protected boolean use_texture_for_list_background = false;
protected int list_padding_bottom = 0;
protected int list_padding_right = 0;
protected int list_padding_top = 0;
protected int list_padding_left = 3;
protected Colorf list_selection_background = new Colorf( 0.29f, 0.58f, 0.84f, 0.0f );
protected Colorf list_selection_foreground = new Colorf( 1.0f, 1.0f, 1.0f );
protected String combobox_list_border_name = null;
protected Colorf combobox_list_hover_background = new Colorf( 0.29f, 0.58f, 0.84f, 0.0f );
protected Colorf combobox_list_hover_foreground = new Colorf( 1.0f, 1.0f, 1.0f );
protected Colorf textfield_background_color = new Colorf( 1.0f, 1.0f, 1.0f, 0.0f );
protected int textfield_border_size_bottom = 2;
protected int textfield_border_size_right = 2;
protected int textfield_border_size_top = 2;
protected int textfield_border_size_left = 2;
protected String textfield_caret_texture = "black";
protected int frame_title_height = 22;
protected int frame_title_closebutton_width = 20;
protected int frame_title_closebutton_height = 20;
protected HUDFont frame_title_font = HUDFont.getFont( DEFAULT_FONT_NAME, HUDFont.FontStyle.BOLD, 12 );
protected Colorf frame_title_font_color = new Colorf( 1f, 1f, 1f );
protected Colorf frame_contentpane_background_color = null;
protected String frame_contentpane_background_texture = null;
protected String cursor_pointer1_texture = null;
protected int cursor_pointer1_zero_x = 0;
protected int cursor_pointer1_zero_y = 0;
protected String cursor_pointer2_texture = null;
protected int cursor_pointer2_zero_x = 0;
protected int cursor_pointer2_zero_y = 0;
protected String cursor_crosshair_texture = null;
protected int cursor_crosshair_zero_x = 0;
protected int cursor_crosshair_zero_y = 0;
protected String cursor_text_texture = null;
protected int cursor_text_zero_x = 0;
protected int cursor_text_zero_y = 0;
protected String cursor_help_texture = null;
protected int cursor_help_zero_x = 0;
protected int cursor_help_zero_y = 0;
protected String cursor_wait_texture = null;
protected int cursor_wait_zero_x = 0;
protected int cursor_wait_zero_y = 0;
/**
* Parses the String and extrancts an int (font-style-contant)
*
* @param fontStyleString the font-style-contant as String
*/
private static HUDFont.FontStyle string2FontStyle( String fontStyleString )
{
fontStyleString = fontStyleString.toUpperCase();
HUDFont.FontStyle result = HUDFont.FontStyle.PLAIN;
if ( fontStyleString.indexOf( "BOLD" ) >= 0 )
{
if ( fontStyleString.indexOf( "ITALIC" ) >= 0 )
result = HUDFont.FontStyle.BOLD_ITALIC;
else
result = HUDFont.FontStyle.BOLD;
}
else if ( fontStyleString.indexOf( "ITALIC" ) >= 0 )
{
result = HUDFont.FontStyle.ITALIC;
}
return ( result );
}
/**
* Reads from a properties file of version 0.1.1
*
* @param themeProps the properties
*/
private void read_0_1_1( Properties themeProps )
{
this.name = themeProps.getProperty( "theme.name", "UNNAMED" );
String fontName = themeProps.getProperty( "font.name", DEFAULT_FONT_NAME );
String fontStyle = themeProps.getProperty( "font.style", DEFAULT_FONT_STYLE );
String fontSize = themeProps.getProperty( "font.size", DEFAULT_FONT_SIZE );
String font_color = themeProps.getProperty( "font.color", DEFAULT_FONT_COLOR );
this.font = HUDFont.getFont( fontName, string2FontStyle( fontStyle ), Integer.parseInt( fontSize ) );
this.font_color = Colorf.parseColor( font_color );
this.button_size_bottom = Integer.parseInt( themeProps.getProperty( "button.size.bottom", "10" ) );
this.button_size_right = Integer.parseInt( themeProps.getProperty( "button.size.right", "10" ) );
this.button_size_top = Integer.parseInt( themeProps.getProperty( "button.size.top", "10" ) );
this.button_size_left = Integer.parseInt( themeProps.getProperty( "button.size.left", "10" ) );
}
/**
* Reads from a properties file of version 0.1.2
*
* @param themeProps the properties
*/
private void read_0_1_2( Properties themeProps )
{
read_0_1_1( themeProps );
String scrollbar_smoothscrolling = themeProps.getProperty( "scrollbar.smoothscrolling", "true" );
this.scrollbar_smoothscrolling = Boolean.parseBoolean( scrollbar_smoothscrolling );
String radiobutton_space_size = themeProps.getProperty( "radiobutton.space.size", "5" );
this.radiobutton_space_size = Integer.parseInt( radiobutton_space_size );
String checkbox_space_size = themeProps.getProperty( "checkbox.space.size", "5" );
this.checkbox_space_size = Integer.parseInt( checkbox_space_size );
String frame_title_height = themeProps.getProperty( "frame.title.height", "22" );
String frame_title_closebutton_width = themeProps.getProperty( "frame.title.closebutton.width", "20" );
String frame_title_closebutton_height = themeProps.getProperty( "frame.title.closebutton.height", "20" );
this.frame_title_height = Integer.parseInt( frame_title_height );
this.frame_title_closebutton_width = Integer.parseInt( frame_title_closebutton_width );
this.frame_title_closebutton_height = Integer.parseInt( frame_title_closebutton_height );
String frame_title_font_name = themeProps.getProperty( "frame.title.font.name", "Verdana" );
String frame_title_font_style = themeProps.getProperty( "frame.title.font.style", "BOLD" );
String frame_title_font_size = themeProps.getProperty( "frame.title.font.size", "12" );
String frame_title_font_color = themeProps.getProperty( "frame.title.font.color", "#FFFFFF" );
this.frame_title_font = HUDFont.getFont( frame_title_font_name, string2FontStyle( frame_title_font_style ), Integer.parseInt( frame_title_font_size ) );
this.frame_title_font_color = Colorf.parseColor( frame_title_font_color );
String frame_contentpane_background_color = themeProps.getProperty( "frame.contentpane.background.color", null );
this.frame_contentpane_background_texture = themeProps.getProperty( "frame.contentpane.background.texture", null );
if ( ( frame_contentpane_background_color == null ) && ( frame_contentpane_background_texture == null ) )
{
this.frame_contentpane_background_color = Colorf.parseColor( "#EFEFEF" );
}
else if ( frame_contentpane_background_color != null )
{
this.frame_contentpane_background_color = Colorf.parseColor( frame_contentpane_background_color );
}
}
/**
* Reads from a properties file of version 0.1.3
*
* @param themeProps the properties
*/
private void read_0_1_3( Properties themeProps )
{
read_0_1_2( themeProps );
this.progressbar_border_name = themeProps.getProperty( "progressbar.border.name", "bevel/lowered" );
String progressbar_label_font_name = themeProps.getProperty( "progressbar.label.font.name", "Monospace" );
String progressbar_label_font_style = themeProps.getProperty( "progressbar.label.font.style", "" );
String progressbar_label_font_size = themeProps.getProperty( "progressbar.label.font.size", "12" );
String progressbar_label_font_color = themeProps.getProperty( "progressbar.label.font.color", "#000000" );
this.progressbar_label_font = HUDFont.getFont( progressbar_label_font_name, string2FontStyle( progressbar_label_font_style ), Integer.parseInt( progressbar_label_font_size ) );
this.font_color = Colorf.parseColor( progressbar_label_font_color );
this.progressbar_bar_bottom_height = Integer.parseInt( themeProps.getProperty( "progressbar.bar.bottom.height", "0" ) );
this.progressbar_bar_right_width = Integer.parseInt( themeProps.getProperty( "progressbar.bar.right.width", "0" ) );
this.progressbar_bar_top_height = Integer.parseInt( themeProps.getProperty( "progressbar.bar.top.height", "0" ) );
this.progressbar_bar_left_width = Integer.parseInt( themeProps.getProperty( "progressbar.bar.left.width", "0" ) );
}
/**
* Reads from a properties file of version 0.1.4
*
* @param themeProps the properties
*/
private void read_0_1_4( Properties themeProps )
{
read_0_1_3( themeProps );
this.border_rounded_corners_size_bottom = Integer.parseInt( themeProps.getProperty( "border.rounded_corners.size.bottom", "4" ) );
this.border_rounded_corners_size_right = Integer.parseInt( themeProps.getProperty( "border.rounded_corners.size.right", "4" ) );
this.border_rounded_corners_size_top = Integer.parseInt( themeProps.getProperty( "border.rounded_corners.size.top", "4" ) );
this.border_rounded_corners_size_left = Integer.parseInt( themeProps.getProperty( "border.rounded_corners.size.left", "4" ) );
this.border_rounded_corners_size_ll_upper = Integer.parseInt( themeProps.getProperty( "border.rounded_corners.size.ll.upper", "4" ) );
this.border_rounded_corners_size_ll_right = Integer.parseInt( themeProps.getProperty( "border.rounded_corners.size.ll.right", "4" ) );
this.border_rounded_corners_size_lr_left = Integer.parseInt( themeProps.getProperty( "border.rounded_corners.size.lr.left", "4" ) );
this.border_rounded_corners_size_lr_upper = Integer.parseInt( themeProps.getProperty( "border.rounded_corners.size.lr.upper", "4" ) );
this.border_rounded_corners_size_ur_lower = Integer.parseInt( themeProps.getProperty( "border.rounded_corners.size.ur.lower", "4" ) );
this.border_rounded_corners_size_ur_left = Integer.parseInt( themeProps.getProperty( "border.rounded_corners.size.ur.left", "4" ) );
this.border_rounded_corners_size_ul_right = Integer.parseInt( themeProps.getProperty( "border.rounded_corners.size.ul.right", "4" ) );
this.border_rounded_corners_size_ul_lower = Integer.parseInt( themeProps.getProperty( "border.rounded_corners.size.ul.lower", "4" ) );
this.border_bevel_lowered_size_bottom = Integer.parseInt( themeProps.getProperty( "border.bevel.lowered.size.bottom", "2" ) );
this.border_bevel_lowered_size_right = Integer.parseInt( themeProps.getProperty( "border.bevel.lowered.size.right", "2" ) );
this.border_bevel_lowered_size_top = Integer.parseInt( themeProps.getProperty( "border.bevel.lowered.size.top", "2" ) );
this.border_bevel_lowered_size_left = Integer.parseInt( themeProps.getProperty( "border.bevel.lowered.size.left", "2" ) );
this.border_bevel_lowered_size_ll_upper = Integer.parseInt( themeProps.getProperty( "border.bevel.lowered.size.ll.upper", "0" ) );
this.border_bevel_lowered_size_ll_right = Integer.parseInt( themeProps.getProperty( "border.bevel.lowered.size.ll.right", "0" ) );
this.border_bevel_lowered_size_lr_left = Integer.parseInt( themeProps.getProperty( "border.bevel.lowered.size.lr.left", "0" ) );
this.border_bevel_lowered_size_lr_upper = Integer.parseInt( themeProps.getProperty( "border.bevel.lowered.size.lr.upper", "0" ) );
this.border_bevel_lowered_size_ur_lower = Integer.parseInt( themeProps.getProperty( "border.bevel.lowered.size.ur.lower", "0" ) );
this.border_bevel_lowered_size_ur_left = Integer.parseInt( themeProps.getProperty( "border.bevel.lowered.size.ur.left", "0" ) );
this.border_bevel_lowered_size_ul_right = Integer.parseInt( themeProps.getProperty( "border.bevel.lowered.size.ul.right", "0" ) );
this.border_bevel_lowered_size_ul_lower = Integer.parseInt( themeProps.getProperty( "border.bevel.lowered.size.ul.lower", "0" ) );
this.border_bevel_raised_size_bottom = Integer.parseInt( themeProps.getProperty( "border.bevel.raised.size.bottom", "2" ) );
this.border_bevel_raised_size_right = Integer.parseInt( themeProps.getProperty( "border.bevel.raised.size.right", "2" ) );
this.border_bevel_raised_size_top = Integer.parseInt( themeProps.getProperty( "border.bevel.raised.size.top", "2" ) );
this.border_bevel_raised_size_left = Integer.parseInt( themeProps.getProperty( "border.bevel.raised.size.left", "2" ) );
this.border_bevel_raised_size_ll_upper = Integer.parseInt( themeProps.getProperty( "border.bevel.raised.size.ll.upper", "0" ) );
this.border_bevel_raised_size_ll_right = Integer.parseInt( themeProps.getProperty( "border.bevel.raised.size.ll.right", "00" ) );
this.border_bevel_raised_size_lr_left = Integer.parseInt( themeProps.getProperty( "border.bevel.raised.size.lr.left", "0" ) );
this.border_bevel_raised_size_lr_upper = Integer.parseInt( themeProps.getProperty( "border.bevel.raised.size.lr.upper", "0" ) );
this.border_bevel_raised_size_ur_lower = Integer.parseInt( themeProps.getProperty( "border.bevel.raised.size.ur.lower", "0" ) );
this.border_bevel_raised_size_ur_left = Integer.parseInt( themeProps.getProperty( "border.bevel.raised.size.ur.left", "0" ) );
this.border_bevel_raised_size_ul_right = Integer.parseInt( themeProps.getProperty( "border.bevel.raised.size.ul.right", "0" ) );
this.border_bevel_raised_size_ul_lower = Integer.parseInt( themeProps.getProperty( "border.bevel.raised.size.ul.lower", "0" ) );
this.border_frame_size_bottom = Integer.parseInt( themeProps.getProperty( "border.frame.size.bottom", "3" ) );
this.border_frame_size_right = Integer.parseInt( themeProps.getProperty( "border.frame.size.right", "3" ) );
this.border_frame_size_top = Integer.parseInt( themeProps.getProperty( "border.frame.size.top", "0" ) );
this.border_frame_size_left = Integer.parseInt( themeProps.getProperty( "border.frame.size.left", "3" ) );
this.border_frame_size_ll_upper = Integer.parseInt( themeProps.getProperty( "border.frame.size.ll.upper", "0" ) );
this.border_frame_size_ll_right = Integer.parseInt( themeProps.getProperty( "border.frame.size.ll.right", "0" ) );
this.border_frame_size_lr_left = Integer.parseInt( themeProps.getProperty( "border.frame.size.lr.left", "0" ) );
this.border_frame_size_lr_upper = Integer.parseInt( themeProps.getProperty( "border.frame.size.lr.upper", "0" ) );
this.border_frame_size_ur_lower = Integer.parseInt( themeProps.getProperty( "border.frame.size.ur.lower", "0" ) );
this.border_frame_size_ur_left = Integer.parseInt( themeProps.getProperty( "border.frame.size.ur.left", "0" ) );
this.border_frame_size_ul_right = Integer.parseInt( themeProps.getProperty( "border.frame.size.ul.right", "0" ) );
this.border_frame_size_ul_lower = Integer.parseInt( themeProps.getProperty( "border.frame.size.ul.lower", "0" ) );
this.list_border_name = themeProps.getProperty( "list.border.name", "bevel/lowered" );
String list_background = themeProps.getProperty( "list.background", null );
if ( list_background == null )
{
this.list_background_color = null;
this.use_texture_for_list_background = false;
}
else if ( list_background.equalsIgnoreCase( "texture" ) )
{
this.list_background_color = null;
this.use_texture_for_list_background = true;
}
else
{
this.list_background_color = Colorf.parseColor( list_background );
this.use_texture_for_list_background = false;
}
this.list_padding_bottom = Integer.parseInt( themeProps.getProperty( "list.padding.bottom", "0" ) );
this.list_padding_right = Integer.parseInt( themeProps.getProperty( "list.padding.right", "0" ) );
this.list_padding_top = Integer.parseInt( themeProps.getProperty( "list.padding.top", "0" ) );
this.list_padding_left = Integer.parseInt( themeProps.getProperty( "list.padding.left", "3" ) );
String list_selection_background = themeProps.getProperty( "list.selection.background", null );
String list_selection_foreground = themeProps.getProperty( "list.selection.foreground", null );
this.list_selection_background = ( list_selection_background != null ) ? Colorf.parseColor( list_selection_background ) : null;
this.list_selection_foreground = ( list_selection_foreground != null ) ? Colorf.parseColor( list_selection_foreground ) : null;
this.combobox_list_border_name = themeProps.getProperty( "combobox.list.border.name", "bevel/raised" );
String combobox_list_hover_background = themeProps.getProperty( "combobox.list.hover.background", null );
String combobox_list_hover_foreground = themeProps.getProperty( "combobox.list.hover.foreground", null );
this.combobox_list_hover_background = ( combobox_list_hover_background != null ) ? Colorf.parseColor( combobox_list_hover_background ) : null;
this.combobox_list_hover_foreground = ( combobox_list_hover_foreground != null ) ? Colorf.parseColor( combobox_list_hover_foreground ) : null;
String textfield_background_color = themeProps.getProperty( "textfield.background", null );
this.textfield_background_color = ( textfield_background_color != null ) ? Colorf.parseColor( textfield_background_color ) : null;
this.textfield_border_size_bottom = Integer.parseInt( themeProps.getProperty( "textfield.border.size.bottom", "2" ) );
this.textfield_border_size_right = Integer.parseInt( themeProps.getProperty( "textfield.border.size.right", "2" ) );
this.textfield_border_size_top = Integer.parseInt( themeProps.getProperty( "textfield.border.size.top", "2" ) );
this.textfield_border_size_left = Integer.parseInt( themeProps.getProperty( "textfield.border.size.left", "2" ) );
this.textfield_caret_texture = themeProps.getProperty( "textfield.caret.texture", "black" );
String slider_size_height = themeProps.getProperty( "slider.size.height", "23" );
String slider_handle_yoffset = themeProps.getProperty( "slider.handle.yoffset", "0" );
String slider_smoothsliding = themeProps.getProperty( "slider.smoothsliding", "true" );
this.slider_size_height = Integer.parseInt( slider_size_height );
this.slider_handle_yoffset = Integer.parseInt( slider_handle_yoffset );
this.slider_smoothsliding = Boolean.parseBoolean( slider_smoothsliding );
}
/**
* Reads from a properties file of version 0.1.5
*
* @param themeProps the properties
*/
private void read_0_1_5( Properties themeProps )
{
read_0_1_4( themeProps );
String fontName = themeProps.getProperty( "label.font.name", this.font.getName() );
String fontStyle = themeProps.getProperty( "label.font.style", String.valueOf( this.font.getStyle() ) );
String fontSize = themeProps.getProperty( "label.font.size", String.valueOf( this.font.getSize() ) );
this.label_font = HUDFont.getFont( fontName, string2FontStyle( fontStyle ), Integer.parseInt( fontSize ) );
String font_color = themeProps.getProperty( "label.font.color", null );
if ( font_color == null )
this.label_font_color = this.font_color;
else
this.label_font_color = Colorf.parseColor( font_color );
}
/**
* Reads from a properties file of version 0.1.6
*
* @param themeProps the properties
*/
private void read_0_1_6( Properties themeProps )
{
read_0_1_5( themeProps );
String fontName = themeProps.getProperty( "button.font.name", this.font.getName() );
String fontStyle = themeProps.getProperty( "button.font.style", String.valueOf( this.font.getStyle() ) );
String fontSize = themeProps.getProperty( "button.font.size", String.valueOf( this.font.getSize() ) );
String font_color = themeProps.getProperty( "button.font.color", null );
this.button_font = HUDFont.getFont( fontName, string2FontStyle( fontStyle ), Integer.parseInt( fontSize ) );
if ( font_color == null )
this.button_font_color = this.font_color;
else
this.button_font_color = Colorf.parseColor( font_color );
}
/**
* Reads from a properties file of version 0.1.7
*
* @param themeProps the properties
*/
private void read_0_1_7( Properties themeProps )
{
read_0_1_6( themeProps );
this.cursor_pointer1_texture = themeProps.getProperty( "cursor.pointer1.texture", null );
this.cursor_pointer1_zero_x = Integer.parseInt( themeProps.getProperty( "cursor.pointer1.zero.x", "0" ) );
this.cursor_pointer1_zero_y = Integer.parseInt( themeProps.getProperty( "cursor.pointer1.zero.y", "0" ) );
this.cursor_pointer2_texture = themeProps.getProperty( "cursor.pointer2.texture", null );
this.cursor_pointer2_zero_x = Integer.parseInt( themeProps.getProperty( "cursor.pointer2.zero.x", "0" ) );
this.cursor_pointer2_zero_y = Integer.parseInt( themeProps.getProperty( "cursor.pointer2.zero.y", "0" ) );
this.cursor_crosshair_texture = themeProps.getProperty( "cursor.crosshair.texture", null );
this.cursor_crosshair_zero_x = Integer.parseInt( themeProps.getProperty( "cursor.crosshair.zero.x", "0" ) );
this.cursor_crosshair_zero_y = Integer.parseInt( themeProps.getProperty( "cursor.crosshair.zero.y", "0" ) );
this.cursor_text_texture = themeProps.getProperty( "cursor.text.texture", null );
this.cursor_text_zero_x = Integer.parseInt( themeProps.getProperty( "cursor.text.zero.x", "0" ) );
this.cursor_text_zero_y = Integer.parseInt( themeProps.getProperty( "cursor.text.zero.y", "0" ) );
this.cursor_help_texture = themeProps.getProperty( "cursor.help.texture", null );
this.cursor_help_zero_x = Integer.parseInt( themeProps.getProperty( "cursor.help.zero.x", "0" ) );
this.cursor_help_zero_y = Integer.parseInt( themeProps.getProperty( "cursor.help.zero.y", "0" ) );
this.cursor_wait_texture = themeProps.getProperty( "cursor.wait.texture", null );
this.cursor_wait_zero_x = Integer.parseInt( themeProps.getProperty( "cursor.wait.zero.x", "0" ) );
this.cursor_wait_zero_y = Integer.parseInt( themeProps.getProperty( "cursor.wait.zero.y", "0" ) );
}
/**
* Reads from a properties file of version 0.1.8
*
* @param themeProps the properties
*/
private void read_0_1_8( Properties themeProps )
{
read_0_1_7( themeProps );
String fontName = themeProps.getProperty( "font.disabled.name", DEFAULT_FONT_DISABLED_NAME );
String fontStyle = themeProps.getProperty( "font.disabled.style", DEFAULT_FONT_DISABLED_STYLE );
String fontSize = themeProps.getProperty( "font.disabled.size", DEFAULT_FONT_DISABLED_SIZE );
String font_color = themeProps.getProperty( "font.disabled.color", DEFAULT_FONT_DISABLED_COLOR );
this.font_disabled = HUDFont.getFont( fontName, string2FontStyle( fontStyle ), Integer.parseInt( fontSize ) );
this.font_disabled_color = Colorf.parseColor( font_color );
String fontName2 = themeProps.getProperty( "label.font.disabled.name", this.font_disabled.getName() );
String fontStyle2 = themeProps.getProperty( "label.font.disabled.style", String.valueOf( this.font_disabled.getStyle() ) );
String fontSize2 = themeProps.getProperty( "label.font.disabled.size", String.valueOf( this.font_disabled.getSize() ) );
this.label_font_disabled = HUDFont.getFont( fontName2, string2FontStyle( fontStyle2 ), Integer.parseInt( fontSize2 ) );
String font_color2 = themeProps.getProperty( "label.font.disabled.color", null );
if ( font_color2 == null )
this.label_font_disabled_color = this.font_disabled_color;
else
this.label_font_disabled_color = Colorf.parseColor( font_color2 );
fontName2 = themeProps.getProperty( "button.font.disabled.name", this.font_disabled.getName() );
fontStyle2 = themeProps.getProperty( "button.font.disabled.style", String.valueOf( this.font_disabled.getStyle() ) );
fontSize2 = themeProps.getProperty( "button.font.disabled.size", String.valueOf( this.font_disabled.getSize() ) );
this.button_font_disabled = HUDFont.getFont( fontName2, string2FontStyle( fontStyle2 ), Integer.parseInt( fontSize2 ) );
font_color2 = themeProps.getProperty( "button.font.disabled.color", null );
if ( font_color2 == null )
this.button_font_disabled_color = this.font_disabled_color;
else
this.button_font_disabled_color = Colorf.parseColor( font_color2 );
}
private void read_2_0_0( Properties themeProps )
{
read_0_1_8( themeProps );
}
private static final long getVersionLong( int major, int minor, int revision )
{
return ( major * 1000000000L + minor * 1000000L + revision * 1000L );
}
protected ThemeProperties()
{
}
/**
* Creates a new ThemeProperties instance
* and reads the properties from a properties-file.
*
* @param in InputStream to the properties-file
*/
public ThemeProperties( InputStream in ) throws IOException
{
this();
Properties themeProps = new Properties();
themeProps.load( in );
String[] versionString = themeProps.getProperty( "propsfile.version", "0.0.1" ).split( "\\." );
long version = Long.parseLong( versionString[ 0 ] ) * 1000000000L + Long.parseLong( versionString[ 1 ] ) * 1000000L + Long.parseLong( versionString[ 2 ] ) * 1000L;
if ( version < 0L * 1000000000L + 1L * 1000000L + 1L * 1000L )
throw new IllegalArgumentException( "unsupported properties file" );
else if ( version <= getVersionLong( 0, 1, 1 ) )
read_0_1_1( themeProps );
else if ( version <= getVersionLong( 0, 1, 2 ) )
read_0_1_2( themeProps );
else if ( version <= getVersionLong( 0, 1, 3 ) )
read_0_1_3( themeProps );
else if ( version <= getVersionLong( 0, 1, 4 ) )
read_0_1_4( themeProps );
else if ( version <= getVersionLong( 0, 1, 5 ) )
read_0_1_5( themeProps );
else if ( version <= getVersionLong( 0, 1, 6 ) )
read_0_1_6( themeProps );
else if ( version <= getVersionLong( 0, 1, 7 ) )
read_0_1_7( themeProps );
else if ( version <= getVersionLong( 0, 1, 8 ) )
read_0_1_8( themeProps );
else if ( version <= getVersionLong( 2, 0, 0 ) )
read_2_0_0( themeProps );
else
throw new IllegalArgumentException( "unsupported properties file" );
}
}