content: /*
   *    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., 675 Mass Ave, Cambridge, MA 02139, USA.
   */
  
  /*
   *    VisualizeUtils.java
   *    Copyright (C) 2000 University of Waikato, Hamilton, New Zealand
   *
   */
  
  package weka.gui.visualize;
  
  import weka.core.Utils;
  import java.util.Properties;
  import java.io.FileInputStream;
  
  import java.awt.Color;
  import javax.swing.JOptionPane;
  
  
  /**
   * This class contains utility routines for visualization
   * 
   * @author Mark Hall (mhall@cs.waikato.ac.nz)
   * @version $Revision: 1.9 $
   */
  
  public class VisualizeUtils {
  
    /** The name of the properties file */
    protected static String PROPERTY_FILE = "weka/gui/visualize/Visualize.props";
  
    /** Contains the visualization properties */
    protected static Properties VISUALIZE_PROPERTIES;
  
    /** Default maximum precision for the display of numeric values */
    protected static int MAX_PRECISION = 10;
  
    static {
  
      
      try {
        VISUALIZE_PROPERTIES = Utils.readProperties(PROPERTY_FILE);
        String precision = 
  	VISUALIZE_PROPERTIES.getProperty("weka.gui.visualize.precision");
        if (precision == null) {
  	/*
  	System.err.println("Warning: no configuration property found in"
  			   +PROPERTY_FILE
  			   +" for weka.gui.visualize.precision. Using"
  			   +" default instead.");*/
        } else {
  	MAX_PRECISION = Integer.parseInt(precision);
  	// System.err.println("Setting numeric precision to: "+precision);
        }
      } catch (Exception ex) {
        JOptionPane.showMessageDialog(null,
         "VisualizeUtils: Could not read a visualization configuration file.\n"
         +"An example file is included in the Weka distribution.\n"
         +"This file should be named \"" + PROPERTY_FILE + "\"  and\n"
         +"should be placed either in your user home (which is set\n"
         +"to \"" + System.getProperties().getProperty("user.home") + "\")\n"
         +"or the directory that java was started from\n",
         "Plot2D",
         JOptionPane.ERROR_MESSAGE);
      }
    }
  
    /**
     * Parses a string containing either a named colour or r,g,b values.
     * @param colourDef the string containing the named colour (or r,g,b)
     * @param defaultColour the colour to return if parsing fails
     * @return the Color corresponding to the string.
     */
    public static Color processColour(String colourDef, Color defaultColour) {
      String colourDefBack = new String(colourDef);
      Color retC = defaultColour;
      if (colourDef.indexOf(",") >= 0) { 
        // Looks like property value is in R, G, B format
        try {
  	int index = colourDef.indexOf(",");
  	int R = Integer.parseInt(colourDef.substring(0,index));
  	colourDef = colourDef.substring(index+1,colourDef.length());
  	index = colourDef.indexOf(",");
  	int G = Integer.parseInt(colourDef.substring(0,index));
  	colourDef = colourDef.substring(index+1,colourDef.length());
  	int B = Integer.parseInt(colourDef);
  	//System.err.println(R+" "+G+" "+B);
  	retC = new Color(R,G,B);
        } catch (Exception ex) {
  	System.err.println("VisualizeUtils: Problem parsing colour property "
  			   +"value ("+colourDefBack+").");
        }
      } else {
        // assume that the string is the name of a default Color.color
        if (colourDef.compareTo("black") == 0) {
  	retC = Color.black;
        } else if (colourDef.compareTo("blue") == 0) {
  	retC = Color.blue;
        } else if (colourDef.compareTo("cyan") == 0) {
  	retC = Color.cyan;
        } else if (colourDef.compareTo("darkGray") == 0) {
  	retC = Color.darkGray;
        } else if (colourDef.compareTo("gray") == 0) {
  	retC = Color.gray;
        } else if (colourDef.compareTo("green") == 0) {
  	retC = Color.green;
        } else if (colourDef.compareTo("lightGray") == 0) {
  	retC = Color.lightGray;
        } else if (colourDef.compareTo("magenta") == 0) {
  	retC = Color.magenta;
        } else if (colourDef.compareTo("orange") == 0) {
  	retC = Color.orange;
        } else if (colourDef.compareTo("pink") == 0) {
  	retC = Color.pink;
        } else if (colourDef.compareTo("red") == 0) {
  	retC = Color.red;
        } else if (colourDef.compareTo("white") == 0) {
  	retC = Color.white;
        } else if (colourDef.compareTo("yellow") == 0) {
  	retC = Color.yellow;
        } else {
  	System.err.println("VisualizeUtils: colour property name not recognized "
  			   +"("+colourDefBack+").");
        }
      }
      return retC;
    }
  }
  