use of com.cburch.logisim.circuit.Wire in project logisim-evolution by reds-heig.
the class AttrTableSelectionModel method setValueRequested.
@Override
public void setValueRequested(Attribute<Object> attr, Object value) throws AttrTableSetException {
Selection selection = frame.getCanvas().getSelection();
Circuit circuit = frame.getCanvas().getCircuit();
if (selection.isEmpty() && circuit != null) {
AttrTableCircuitModel circuitModel = new AttrTableCircuitModel(project, circuit);
circuitModel.setValueRequested(attr, value);
} else {
SetAttributeAction act = new SetAttributeAction(circuit, Strings.getter("selectionAttributeAction"));
AutoLabel labler = null;
if (attr.equals(StdAttr.LABEL)) {
labler = new AutoLabel((String) value, circuit);
}
SortedSet<Component> comps = new TreeSet<Component>(new PositionComparator());
comps.addAll(selection.getComponents());
for (Component comp : comps) {
if (!(comp instanceof Wire)) {
if (comp.getFactory() instanceof SubcircuitFactory) {
SubcircuitFactory fac = (SubcircuitFactory) comp.getFactory();
if (attr.equals(CircuitAttributes.NAMED_CIRCUIT_BOX) || attr.equals(CircuitAttributes.NAME_ATTR)) {
try {
CircuitMutation mutation = new CircuitMutation(fac.getSubcircuit());
mutation.setForCircuit(attr, value);
Action action = mutation.toAction(null);
project.doAction(action);
} catch (CircuitException ex) {
JOptionPane.showMessageDialog(project.getFrame(), ex.getMessage());
}
return;
}
}
if (attr.equals(StdAttr.LABEL)) {
if (labler.hasNext(circuit)) {
if (comps.size() > 1) {
act.set(comp, attr, labler.GetNext(circuit, comp.getFactory()));
} else {
if (getAttributeSet().getValue(StdAttr.LABEL).equals((String) value))
return;
else
act.set(comp, attr, labler.GetCurrent(circuit, comp.getFactory()));
}
} else
act.set(comp, attr, "");
} else
act.set(comp, attr, value);
}
}
project.doAction(act);
}
}
use of com.cburch.logisim.circuit.Wire in project logisim-evolution by reds-heig.
the class AttrTableSelectionModel method getTitle.
@Override
public String getTitle() {
ComponentFactory wireFactory = null;
ComponentFactory factory = null;
int factoryCount = 0;
int totalCount = 0;
boolean variousFound = false;
Selection selection = frame.getCanvas().getSelection();
for (Component comp : selection.getComponents()) {
ComponentFactory fact = comp.getFactory();
if (fact.equals(factory)) {
factoryCount++;
} else if (comp instanceof Wire) {
wireFactory = fact;
if (factory == null) {
factoryCount++;
}
} else if (factory == null) {
factory = fact;
factoryCount = 1;
} else {
variousFound = true;
}
if (!(comp instanceof Wire)) {
totalCount++;
}
}
if (factory == null) {
factory = wireFactory;
}
if (variousFound) {
SetInstance(factory);
return Strings.get("selectionVarious", "" + totalCount);
} else if (factoryCount == 0) {
String circName = frame.getCanvas().getCircuit().getName();
SetInstance(frame.getCanvas().getCircuit().getSubcircuitFactory());
return Strings.get("circuitAttrTitle", circName);
} else if (factoryCount == 1) {
SetInstance(factory);
return Strings.get("selectionOne", factory.getDisplayName());
} else {
SetInstance(factory);
return Strings.get("selectionMultiple", factory.getDisplayName(), "" + factoryCount);
}
}
use of com.cburch.logisim.circuit.Wire in project logisim-evolution by reds-heig.
the class EditTool method mousePressed.
@Override
public void mousePressed(Canvas canvas, Graphics g, MouseEvent e) {
boolean wire = updateLocation(canvas, e);
Location oldWireLoc = wireLoc;
wireLoc = NULL_LOCATION;
lastX = Integer.MIN_VALUE;
if (wire) {
current = wiring;
Selection sel = canvas.getSelection();
Circuit circ = canvas.getCircuit();
Collection<Component> selected = sel.getAnchoredComponents();
ArrayList<Component> suppress = null;
for (Wire w : circ.getWires()) {
if (selected.contains(w)) {
if (w.contains(oldWireLoc)) {
if (suppress == null)
suppress = new ArrayList<Component>();
suppress.add(w);
}
}
}
sel.setSuppressHandles(suppress);
} else {
current = select;
}
pressX = e.getX();
pressY = e.getY();
current.mousePressed(canvas, g, e);
}
use of com.cburch.logisim.circuit.Wire in project logisim-evolution by reds-heig.
the class EditTool method attemptReface.
private void attemptReface(Canvas canvas, final Direction facing, KeyEvent e) {
if (e.getModifiersEx() == 0) {
final Circuit circuit = canvas.getCircuit();
final Selection sel = canvas.getSelection();
SetAttributeAction act = new SetAttributeAction(circuit, Strings.getter("selectionRefaceAction"));
for (Component comp : sel.getComponents()) {
if (!(comp instanceof Wire)) {
Attribute<Direction> attr = getFacingAttribute(comp);
if (attr != null) {
act.set(comp, attr, facing);
}
}
}
if (!act.isEmpty()) {
canvas.getProject().doAction(act);
e.consume();
}
}
}
use of com.cburch.logisim.circuit.Wire in project logisim-evolution by reds-heig.
the class Connector method processPath.
private static void processPath(ArrayList<Location> path, ConnectionData conn, AvoidanceMap avoid, ReplacementMap repl, Set<Location> unmarkable) {
Iterator<Location> pathIt = path.iterator();
Location loc0 = pathIt.next();
if (!loc0.equals(conn.getLocation())) {
Location pathLoc = conn.getWirePathStart();
boolean found = loc0.equals(pathLoc);
for (Wire w : conn.getWirePath()) {
Location nextLoc = w.getOtherEnd(pathLoc);
if (found) {
// existing wire will be removed
repl.remove(w);
avoid.unmarkWire(w, nextLoc, unmarkable);
} else if (w.contains(loc0)) {
// wires after this will be
// removed
found = true;
if (!loc0.equals(nextLoc)) {
avoid.unmarkWire(w, nextLoc, unmarkable);
Wire shortenedWire = Wire.create(pathLoc, loc0);
repl.replace(w, shortenedWire);
avoid.markWire(shortenedWire, 0, 0);
}
}
pathLoc = nextLoc;
}
}
while (pathIt.hasNext()) {
Location loc1 = pathIt.next();
Wire newWire = Wire.create(loc0, loc1);
repl.add(newWire);
avoid.markWire(newWire, 0, 0);
loc0 = loc1;
}
}
Aggregations