ShapeManifest.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 » ShapeManifest.java
package uk.ac.lkl.migen.mockup.shapebuilder.ui;

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

import org.apache.log4j.Logger;

import uk.ac.lkl.migen.mockup.shapebuilder.model.*;
import uk.ac.lkl.migen.mockup.shapebuilder.model.shape.*;
import uk.ac.lkl.migen.mockup.shapebuilder.ui.drag.PlaceHolder;
import uk.ac.lkl.migen.mockup.shapebuilder.ui.drag.event.*;

public class ShapeManifest extends JPanel {

    Logger logger = Logger.getLogger(ShapeManifest.class);

    private Expressed expressed;

    @SuppressWarnings("unused")
    // todo: use this to detect duplicates?
    private HashMap<Expression, JLabel> labelMap;

    // hack so that when read in, can set expression panels for each placeholder
    private HashMap<String, PlaceHolder<ExpressionPanel>> placeHolderMap = new HashMap<String, PlaceHolder<ExpressionPanel>>();

    private class ManifestPlaceHolderListener implements
      PlaceHolderListener<ExpressionPanel> {

  private PlaceHolder<ExpressionPanel> placeholder;

  private String expressionHandle;

  public ManifestPlaceHolderListener(
    PlaceHolder<ExpressionPanel> placeholder,
    String expressionHandle) {
      this.placeholder = placeholder;
      this.expressionHandle = expressionHandle;
  }

  public void placeFilled(PlaceHolderEvent<ExpressionPanel> e) {
      ExpressionPanel expressionPanel = placeholder.getNestedComponent();
      Expression expression = expressionPanel.getExpression();
      logPlaceFilled(expression, e.getNestedComponent());
      expressed.setExpression(expressionHandle, expression);
  }

  private void logPlaceFilled(Expression expression, ExpressionPanel panel) {
      if (expressed instanceof ExpressedShape) {
    ExpressedShape shape = (ExpressedShape) expressed;
    logger.info("Expression ID:" + expression.getId() + " (name: "
      + expression.getName() + "," + " value: "
      + expression.getValue() + ")" + " in panel ID:"
      + panel.getId() + " is attached to shape ID:"
      + shape.getId() + ".");
      } else if (expressed instanceof ShapeGroup) {
    ShapeGroup group = (ShapeGroup) expressed;
    ExpressedShape shape = group.getRepresentativeShape();
    logger.info("Expression ID:" + expression.getId() + " (name: "
      + expression.getName() + "," + " value: "
      + expression.getValue() + ")" + " in panel ID:"
      + panel.getId()
      + " is attached to all the shapes related to"
      + " shape ID:" + shape.getId() + ".");
      }
  }

  public void placeEmptied(PlaceHolderEvent<ExpressionPanel> e) {
      expressed.setExpression(expressionHandle, null);
  }

  public void placeVacated(PlaceHolderEvent<ExpressionPanel> e) {

  }

    }

    public ShapeManifest(ShapePlotter shapePlotter, Expressed expressed) {
  this.expressed = expressed;
  labelMap = new HashMap<Expression, JLabel>();
  //int numExpressions = expressed.getNumParameters();
  setLayout(new GridBagLayout());
  GridBagConstraints c = new GridBagConstraints();
  c.fill = GridBagConstraints.BOTH;
  c.insets = new Insets(4, 4, 4, 4);

  // create placeholders first since swap buttons (when they were tried
  // out) needed access to two
  // consecutive instances

  ArrayList<PlaceHolder<ExpressionPanel>> placeHolders = new ArrayList<PlaceHolder<ExpressionPanel>>();

  Collection<String> namedExpressions = expressed.getParameterNames();

  for (String namedExpression : namedExpressions) {
      Expression expression = expressed
        .getParameterExpression(namedExpression);

      ExpressionPanel expressionPanel = expression == null ? null
        : new ExpressionPanel(expression, shapePlotter);
      PlaceHolder<ExpressionPanel> placeHolder = new PlaceHolder<ExpressionPanel>(
        expressionPanel, ExpressionPanel.class);
      placeHolders.add(placeHolder);
  }

  Collection<String> names = expressed.getParameterNames();
  int i = 0;
  for (String name : names) {
      JLabel label = new JLabel(name);
      c.gridx = 0;
      c.gridy = i;
      c.gridheight = 1;
      c.weightx = 0.0f;
      add(label, c);

      PlaceHolder<ExpressionPanel> placeHolder = placeHolders.get(i);
      placeHolder.addPlaceHolderListener(new ManifestPlaceHolderListener(
        placeHolder, name));
      placeHolder.setOverwriting(true);
      placeHolderMap.put(name, placeHolder);

      c.gridx = 1;
      c.gridy = i;
      c.gridheight = 1;
      c.weightx = 1.0f;
      add(placeHolder, c);

      // c.gridx = 0;
      // c.gridy = i * 2 + 1;
      // c.gridheight = 1;
      // c.weightx = 0.0f;
      // ExpressionPanelValueComponent valueComponent = new
      // BasicExpressionPanelValueComponent(true);
      // ExpressionEvaluator evaluator = new ExpressionEvaluator(
      // placeHolder, valueComponent);
      // add(evaluator, c);

      // 'swap' button
      // if (i < numExpressions - 1) {
      // c.gridx = 2;
      // c.gridy = i * 2;
      // c.gridheight = 4;
      // c.fill = GridBagConstraints.HORIZONTAL;
      // c.weightx = 0.0f;
      // c.anchor = GridBagConstraints.CENTER;
      // PlaceHolder<ExpressionPanel> nextPlaceHolder = placeHolders.get(i
      // + 1);
      // SwapButton swapButton = new SwapButton(placeHolder,
      // nextPlaceHolder);
      // add(swapButton, c);
      // }
      i++;
  }
  setBorder(BorderFactory.createEtchedBorder());
    }

    // hack so that can set these with appropriate expression panels when read
    // back in
    public PlaceHolder<ExpressionPanel> getPlaceHolder(String name) {
  return placeHolderMap.get(name);
    }
}
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.