Search in sources :

Example 6 with Wire

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);
    }
}
Also used : Action(com.cburch.logisim.proj.Action) SetAttributeAction(com.cburch.logisim.tools.SetAttributeAction) CircuitException(com.cburch.logisim.circuit.CircuitException) AutoLabel(com.cburch.logisim.util.AutoLabel) Circuit(com.cburch.logisim.circuit.Circuit) SetAttributeAction(com.cburch.logisim.tools.SetAttributeAction) Wire(com.cburch.logisim.circuit.Wire) TreeSet(java.util.TreeSet) SubcircuitFactory(com.cburch.logisim.circuit.SubcircuitFactory) CircuitMutation(com.cburch.logisim.circuit.CircuitMutation) Component(com.cburch.logisim.comp.Component)

Example 7 with Wire

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);
    }
}
Also used : ComponentFactory(com.cburch.logisim.comp.ComponentFactory) Component(com.cburch.logisim.comp.Component) Wire(com.cburch.logisim.circuit.Wire)

Example 8 with Wire

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);
}
Also used : Selection(com.cburch.logisim.gui.main.Selection) ArrayList(java.util.ArrayList) Circuit(com.cburch.logisim.circuit.Circuit) Component(com.cburch.logisim.comp.Component) Wire(com.cburch.logisim.circuit.Wire) Location(com.cburch.logisim.data.Location)

Example 9 with Wire

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();
        }
    }
}
Also used : Selection(com.cburch.logisim.gui.main.Selection) Circuit(com.cburch.logisim.circuit.Circuit) Component(com.cburch.logisim.comp.Component) Wire(com.cburch.logisim.circuit.Wire) Direction(com.cburch.logisim.data.Direction)

Example 10 with Wire

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;
    }
}
Also used : Wire(com.cburch.logisim.circuit.Wire) Location(com.cburch.logisim.data.Location)

Aggregations

Wire (com.cburch.logisim.circuit.Wire)24 Location (com.cburch.logisim.data.Location)13 Component (com.cburch.logisim.comp.Component)12 Circuit (com.cburch.logisim.circuit.Circuit)8 ArrayList (java.util.ArrayList)7 ComponentFactory (com.cburch.logisim.comp.ComponentFactory)4 HashSet (java.util.HashSet)4 CircuitMutation (com.cburch.logisim.circuit.CircuitMutation)3 SubcircuitFactory (com.cburch.logisim.circuit.SubcircuitFactory)3 AttributeSet (com.cburch.logisim.data.AttributeSet)3 Direction (com.cburch.logisim.data.Direction)3 EndData (com.cburch.logisim.comp.EndData)2 Bounds (com.cburch.logisim.data.Bounds)2 Selection (com.cburch.logisim.gui.main.Selection)2 InstanceComponent (com.cburch.logisim.instance.InstanceComponent)2 Action (com.cburch.logisim.proj.Action)2 Project (com.cburch.logisim.proj.Project)2 Pin (com.cburch.logisim.std.wiring.Pin)2 StringGetter (com.cburch.logisim.util.StringGetter)2 Graphics (java.awt.Graphics)2