Palette.java :  » Math » migen » uk » ac » lkl » migen » mockup » shapebuilder » ui » Java Open Source

Java Open Source » Math » migen 
migen » uk » ac » lkl » migen » mockup » shapebuilder » ui » Palette.java
package uk.ac.lkl.migen.mockup.shapebuilder.ui;

import java.awt.Color;

import java.awt.event.*;
import java.util.*;
import javax.swing.*;

import org.apache.log4j.Logger;

import uk.ac.lkl.common.util.event.UpdateEvent;
import uk.ac.lkl.common.util.event.UpdateListener;

import uk.ac.lkl.migen.mockup.shapebuilder.model.shape.*;

public class Palette extends JPanel {

    private Logger logger = Logger.getLogger(Palette.class);

    private ButtonGroup buttonGroup;

    private HashMap<ButtonModel, Color> colorMap;

    private HashMap<Color, ButtonModel> modelMap;

    private ShapePlotter shapePlotter;

    public Palette(ShapePlotter shapePlotter) {
  this.shapePlotter = shapePlotter;
  buttonGroup = new ButtonGroup();
  colorMap = new HashMap<ButtonModel, Color>();
  modelMap = new HashMap<Color, ButtonModel>();

  // All canonical Java colors. Left here as a quick reference
  // addRadioButton("Blue", Color.BLUE);
  // addRadioButton("Red", Color.RED);
  // addRadioButton("Green", Color.GREEN);
  // addRadioButton("Blue", Color.BLUE);
  // addRadioButton("Yellow", Color.YELLOW);
  // addRadioButton("Magenta", Color.MAGENTA);
  // addRadioButton("Cyan", Color.CYAN);
  // addRadioButton("White", Color.WHITE);
  // addRadioButton("Grey", Color.DARK_GRAY);
  // addRadioButton("Black", Color.BLACK);
  // addRadioButton("Orange", Color.ORANGE); // (255, 200, 0)
  // addRadioButton("Pink", Color.PINK); // (255, 175, 175)

  // Colors for the 18-kids experiment
  addRadioButton("Blue", Color.BLUE);
  addRadioButton("Red", Color.RED);
  addRadioButton("Yellow", Color.YELLOW);
  addRadioButton("Pink", Color.PINK); // (255, 175, 175)
  addRadioButton("Orange", new Color((float) 0.9, (float) 0.6,
    (float) 0.0));
  addRadioButton("Grey", Color.DARK_GRAY);
  addChangeListener();
    }

    private void addChangeListener() {
  shapePlotter.addUpdateListener(new UpdateListener<ShapePlotter>() {

      public void objectUpdated(UpdateEvent<ShapePlotter> e) {
    ExpressedShape selectedShape = shapePlotter.getSelectedShape();
    if (selectedShape == null)
        return;
    Color color = selectedShape.getFillColor();
    ButtonModel model = modelMap.get(color);
    if (model != null)
        model.setSelected(true);
      }
  });
    }

    private void addRadioButton(String label, Color color) {
  JRadioButton button = new JRadioButton(label);
  button.getModel().addActionListener(new ActionListener() {

      public void actionPerformed(ActionEvent e) {
    ExpressedShape shape = shapePlotter.getSelectedShape();
    if (shape == null)
        return;
    ButtonModel model = buttonGroup.getSelection();

    // only allow setting of a color if the shape's current colour
    // is known to the palette. This allows special colours for
    // shapes.

    Color currentColor = shape.getFillColor();
    if (!modelMap.containsKey(currentColor))
        return;

    Color color = colorMap.get(model);
    shape.setFillColor(color);
    logger.info("Shape ID:" + shape.getId() + " color is now "
      + color + ".");
      }
  });
  add(button);
  buttonGroup.add(button);
  colorMap.put(button.getModel(), color);
  modelMap.put(color, button.getModel());
  button.getModel().setSelected(true);
    }

    public Color getSelectedColor() {
  ButtonModel model = buttonGroup.getSelection();
  Color color = colorMap.get(model);
  return color;
    }

}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.