Package com.cburch.logisim.circuit

Source Code of com.cburch.logisim.circuit.SplitterFactory

/* Copyright (c) 2010, Carl Burch. License information is located in the
* com.cburch.logisim.Main source code and at www.cburch.com/logisim/. */

package com.cburch.logisim.circuit;

import java.awt.Graphics;
import java.awt.Color;
import java.awt.event.InputEvent;

import javax.swing.Icon;

import com.cburch.logisim.LogisimVersion;
import com.cburch.logisim.circuit.Strings;
import com.cburch.logisim.comp.AbstractComponentFactory;
import com.cburch.logisim.comp.Component;
import com.cburch.logisim.comp.ComponentDrawContext;
import com.cburch.logisim.data.Attribute;
import com.cburch.logisim.data.AttributeSet;
import com.cburch.logisim.data.Bounds;
import com.cburch.logisim.data.Location;
import com.cburch.logisim.instance.StdAttr;
import com.cburch.logisim.tools.key.BitWidthConfigurator;
import com.cburch.logisim.tools.key.IntegerConfigurator;
import com.cburch.logisim.tools.key.JoinedConfigurator;
import com.cburch.logisim.tools.key.KeyConfigurator;
import com.cburch.logisim.tools.key.ParallelConfigurator;
import com.cburch.logisim.util.Icons;
import com.cburch.logisim.util.StringGetter;

public class SplitterFactory extends AbstractComponentFactory {
  public static final SplitterFactory instance = new SplitterFactory();

  private static final Icon toolIcon = Icons.getIcon("splitter.gif");

  private SplitterFactory() { }

  @Override
  public String getName() { return "Splitter"; }

  @Override
  public StringGetter getDisplayGetter() {
    return Strings.getter("splitterComponent");
  }

  @Override
  public AttributeSet createAttributeSet() {
    return new SplitterAttributes();
  }
 
  @Override
  public Object getDefaultAttributeValue(Attribute<?> attr, LogisimVersion ver) {
    if (attr == SplitterAttributes.ATTR_APPEARANCE) {
      if (ver.compareTo(LogisimVersion.get(2, 6, 3, 202)) < 0) {
        return SplitterAttributes.APPEAR_LEGACY;
      } else {
        return SplitterAttributes.APPEAR_LEFT;
      }
    } else if (attr instanceof SplitterAttributes.BitOutAttribute) {
      SplitterAttributes.BitOutAttribute a;
      a = (SplitterAttributes.BitOutAttribute) attr;
      return a.getDefault();
    } else {
      return super.getDefaultAttributeValue(attr, ver);
    }
  }

  @Override
  public Component createComponent(Location loc, AttributeSet attrs) {
    return new Splitter(loc, attrs);
  }

  @Override
  public Bounds getOffsetBounds(AttributeSet attrsBase) {
    SplitterAttributes attrs = (SplitterAttributes) attrsBase;
    int fanout = attrs.fanout;
    SplitterParameters parms = attrs.getParameters();
    int xEnd0 = parms.getEnd0X();
    int yEnd0 = parms.getEnd0Y();
    Bounds bds = Bounds.create(0, 0, 1, 1);
    bds = bds.add(xEnd0, yEnd0);
    bds = bds.add(xEnd0 + (fanout - 1) * parms.getEndToEndDeltaX(),
        yEnd0 + (fanout - 1) * parms.getEndToEndDeltaY());
    return bds;
  }

  //
  // user interface methods
  //
  @Override
  public void drawGhost(ComponentDrawContext context,
      Color color, int x, int y, AttributeSet attrsBase) {
    SplitterAttributes attrs = (SplitterAttributes) attrsBase;
    context.getGraphics().setColor(color);
    Location loc = Location.create(x, y);
    if (attrs.appear == SplitterAttributes.APPEAR_LEGACY) {
      SplitterPainter.drawLegacy(context, attrs, loc);
    } else {
      SplitterPainter.drawLines(context, attrs, loc);
    }
  }

  @Override
  public void paintIcon(ComponentDrawContext c,
      int x, int y, AttributeSet attrs) {
    Graphics g = c.getGraphics();
    if (toolIcon != null) {
      toolIcon.paintIcon(c.getDestination(), g, x + 2, y + 2);
    }
  }

  @Override
  public Object getFeature(Object key, AttributeSet attrs) {
    if (key == FACING_ATTRIBUTE_KEY) {
      return StdAttr.FACING;
    } else if (key == KeyConfigurator.class) {
      KeyConfigurator altConfig = ParallelConfigurator.create(
          new BitWidthConfigurator(SplitterAttributes.ATTR_WIDTH),
          new IntegerConfigurator(SplitterAttributes.ATTR_FANOUT,
              1, 32, InputEvent.ALT_DOWN_MASK));
      return JoinedConfigurator.create(
        new IntegerConfigurator(SplitterAttributes.ATTR_FANOUT, 1, 32, 0),
        altConfig);
    }
    return super.getFeature(key, attrs);
  }
}
TOP

Related Classes of com.cburch.logisim.circuit.SplitterFactory

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.