Package com.cburch.logisim.instance

Source Code of com.cburch.logisim.instance.InstancePainter

/* 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.instance;

import java.awt.Graphics;

import com.cburch.logisim.circuit.Circuit;
import com.cburch.logisim.circuit.CircuitState;
import com.cburch.logisim.circuit.WireSet;
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.Direction;
import com.cburch.logisim.data.Location;
import com.cburch.logisim.data.Value;
import com.cburch.logisim.proj.Project;

public class InstancePainter implements InstanceState {
  private ComponentDrawContext context;
  private InstanceComponent comp;
  private InstanceFactory factory;
  private AttributeSet attrs;

  public InstancePainter(ComponentDrawContext context,
      InstanceComponent instance) {
    this.context = context;
    this.comp = instance;
  }
 
  void setInstance(InstanceComponent value) {
    this.comp = value;
  }
 
  void setFactory(InstanceFactory factory, AttributeSet attrs) {
    this.comp = null;
    this.factory = factory;
    this.attrs = attrs;
  }
 
  public InstanceFactory getFactory() {
    return comp == null ? factory : (InstanceFactory) comp.getFactory();
  }
 
  //
  // methods related to the context of the canvas
  //
  public WireSet getHighlightedWires() {
    return context.getHighlightedWires();
  }

  public boolean getShowState() {
    return context.getShowState();
  }

  public boolean isPrintView() {
    return context.isPrintView();
  }

  public boolean shouldDrawColor() {
    return context.shouldDrawColor();
  }

  public java.awt.Component getDestination() {
    return context.getDestination();
  }

  public Graphics getGraphics() {
    return context.getGraphics();
  }

  public Circuit getCircuit() {
    return context.getCircuit();
  }

  public Object getGateShape() {
    return context.getGateShape();
  }
 
  public boolean isCircuitRoot() {
    return !context.getCircuitState().isSubstate();
  }
 
  public long getTickCount() {
    return context.getCircuitState().getPropagator().getTickCount();
  }
 
  //
  // methods related to the circuit state
  //
  public Project getProject() {
    return context.getCircuitState().getProject();
  }
 
  public Value getPort(int portIndex) {
    InstanceComponent c = comp;
    CircuitState s = context.getCircuitState();
    if (c != null && s != null) {
      return s.getValue(c.getEnd(portIndex).getLocation());
    } else {
      return Value.UNKNOWN;
    }
  }
 
  public void setPort(int portIndex, Value value, int delay) {
    throw new UnsupportedOperationException("setValue on InstancePainter");
  }
 
  public InstanceData getData() {
    CircuitState circState = context.getCircuitState();
    if (circState == null || comp == null) {
      throw new UnsupportedOperationException("setData on InstancePainter");
    } else {
      return (InstanceData) circState.getData(comp);
    }
  }
 
  public void setData(InstanceData value) {
    CircuitState circState = context.getCircuitState();
    if (circState == null || comp == null) {
      throw new UnsupportedOperationException("setData on InstancePainter");
    } else {
      circState.setData(comp, value);
    }
  }
 
  //
  // methods related to the instance
  //
  public Instance getInstance() {
    InstanceComponent c = comp;
    return c == null ? null : c.getInstance();
  }
 
  public Location getLocation() {
    InstanceComponent c = comp;
    return c == null ? Location.create(0, 0) : c.getLocation();
  }
 
  public boolean isPortConnected(int index) {
    Circuit circ = context.getCircuit();
    Location loc = comp.getEnd(index).getLocation();
    return circ.isConnected(loc, comp);
  }
 
  public Bounds getOffsetBounds() {
    InstanceComponent c = comp;
    if (c == null) {
      return factory.getOffsetBounds(attrs);
    } else {
      Location loc = c.getLocation();
      return c.getBounds().translate(-loc.getX(), -loc.getY());
    }
  }
 
  public Bounds getBounds() {
    InstanceComponent c = comp;
    return c == null ? factory.getOffsetBounds(attrs) : c.getBounds();
  }
 
  public AttributeSet getAttributeSet() {
    InstanceComponent c = comp;
    return c == null ? attrs : c.getAttributeSet();
  }
 
  public <E> E getAttributeValue(Attribute<E> attr) {
    InstanceComponent c = comp;
    AttributeSet as = c == null ? attrs : c.getAttributeSet();
    return as.getValue(attr);
  }
 
  public void fireInvalidated() {
    comp.fireInvalidated();
  }

  //
  // helper methods for drawing common elements in components
  //
  public void drawBounds() {
    context.drawBounds(comp);
  }
 
  public void drawRectangle(Bounds bds, String label) {
    context.drawRectangle(bds.getX(), bds.getY(),
        bds.getWidth(), bds.getHeight(), label);
  }

  public void drawRectangle(int x, int y,
      int width, int height, String label) {
    context.drawRectangle(x, y, width, height, label);
  }

  public void drawDongle(int x, int y) {
    context.drawDongle(x, y);
  }

  public void drawPort(int i) {
    context.drawPin(comp, i);
  }

  public void drawPort(int i, String label, Direction dir) {
    context.drawPin(comp, i, label, dir);
  }

  public void drawPorts() {
    context.drawPins(comp);
  }

  public void drawClock(int i, Direction dir) {
    context.drawClock(comp, i, dir);
  }

  public void drawHandles() {
    context.drawHandles(comp);
  }
 
  public void drawHandle(Location loc) {
    context.drawHandle(loc);
  }

  public void drawHandle(int x, int y) {
    context.drawHandle(x, y);
  }
 
  public void drawLabel() {
    if (comp != null) {
      comp.drawLabel(context);
    }
  }
}
TOP

Related Classes of com.cburch.logisim.instance.InstancePainter

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.