Search in sources :

Example 51 with Circuit

use of com.cburch.logisim.circuit.Circuit in project logisim-evolution by reds-heig.

the class PokeTool method mousePressed.

@Override
public void mousePressed(Canvas canvas, Graphics g, MouseEvent e) {
    int x = e.getX();
    int y = e.getY();
    Location loc = Location.create(x, y);
    boolean dirty = false;
    canvas.setHighlightedWires(WireSet.EMPTY);
    if (pokeCaret != null && !pokeCaret.getBounds(g).contains(loc)) {
        dirty = true;
        removeCaret(true);
    }
    if (pokeCaret == null) {
        ComponentUserEvent event = new ComponentUserEvent(canvas, x, y);
        Circuit circ = canvas.getCircuit();
        for (Component c : circ.getAllContaining(loc, g)) {
            if (pokeCaret != null)
                break;
            if (c instanceof Wire) {
                Caret caret = new WireCaret(canvas, (Wire) c, x, y, canvas.getProject().getOptions().getAttributeSet());
                setPokedComponent(circ, c, caret);
                canvas.setHighlightedWires(circ.getWireSet((Wire) c));
            } else {
                Pokable p = (Pokable) c.getFeature(Pokable.class);
                if (p != null) {
                    Caret caret = p.getPokeCaret(event);
                    setPokedComponent(circ, c, caret);
                    AttributeSet attrs = c.getAttributeSet();
                    if (attrs != null && attrs.getAttributes().size() > 0) {
                        Project proj = canvas.getProject();
                        proj.getFrame().viewComponentAttributes(circ, c);
                    }
                }
            }
        }
    }
    if (pokeCaret != null) {
        dirty = true;
        pokeCaret.mousePressed(e);
    }
    if (dirty)
        canvas.getProject().repaintCanvas();
}
Also used : Project(com.cburch.logisim.proj.Project) AttributeSet(com.cburch.logisim.data.AttributeSet) ComponentUserEvent(com.cburch.logisim.comp.ComponentUserEvent) 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 52 with Circuit

use of com.cburch.logisim.circuit.Circuit in project logisim-evolution by reds-heig.

the class PokeTool method removeCaret.

private void removeCaret(boolean normal) {
    Circuit circ = pokedCircuit;
    Caret caret = pokeCaret;
    if (caret != null) {
        if (normal)
            caret.stopEditing();
        else
            caret.cancelEditing();
        circ.removeCircuitListener(listener);
        pokedCircuit = null;
        pokedComponent = null;
        pokeCaret = null;
    }
}
Also used : Circuit(com.cburch.logisim.circuit.Circuit)

Example 53 with Circuit

use of com.cburch.logisim.circuit.Circuit in project logisim-evolution by reds-heig.

the class SelectTool method mousePressed.

@Override
public void mousePressed(Canvas canvas, Graphics g, MouseEvent e) {
    Project proj = canvas.getProject();
    Selection sel = proj.getSelection();
    Circuit circuit = canvas.getCircuit();
    start = Location.create(e.getX(), e.getY());
    curDx = 0;
    curDy = 0;
    moveGesture = null;
    // if the user clicks into the selection,
    // selection is being modified
    Collection<Component> in_sel = sel.getComponentsContaining(start, g);
    if (!in_sel.isEmpty()) {
        if ((e.getModifiers() & InputEvent.SHIFT_MASK) == 0) {
            setState(proj, MOVING);
            proj.repaintCanvas();
            return;
        } else {
            Action act = SelectionActions.drop(sel, in_sel);
            if (act != null) {
                proj.doAction(act);
            }
        }
    }
    // if the user clicks into a component outside selection, user
    // wants to add/reset selection
    Collection<Component> clicked = circuit.getAllContaining(start, g);
    if (!clicked.isEmpty()) {
        if ((e.getModifiers() & InputEvent.SHIFT_MASK) == 0) {
            if (sel.getComponentsContaining(start).isEmpty()) {
                Action act = SelectionActions.dropAll(sel);
                if (act != null) {
                    proj.doAction(act);
                }
            }
        }
        for (Component comp : clicked) {
            if (!in_sel.contains(comp)) {
                sel.add(comp);
            }
        }
        setState(proj, MOVING);
        proj.repaintCanvas();
        return;
    }
    // selection (maybe with the shift key down).
    if ((e.getModifiers() & InputEvent.SHIFT_MASK) == 0) {
        Action act = SelectionActions.dropAll(sel);
        if (act != null) {
            proj.doAction(act);
        }
    }
    setState(proj, RECT_SELECT);
    proj.repaintCanvas();
}
Also used : Project(com.cburch.logisim.proj.Project) Action(com.cburch.logisim.proj.Action) Selection(com.cburch.logisim.gui.main.Selection) Circuit(com.cburch.logisim.circuit.Circuit) Component(com.cburch.logisim.comp.Component)

Example 54 with Circuit

use of com.cburch.logisim.circuit.Circuit in project logisim-evolution by reds-heig.

the class SelectTool method draw.

@Override
public void draw(Canvas canvas, ComponentDrawContext context) {
    Project proj = canvas.getProject();
    int dx = curDx;
    int dy = curDy;
    if (state == MOVING) {
        proj.getSelection().drawGhostsShifted(context, dx, dy);
        MoveGesture gesture = moveGesture;
        if (gesture != null && drawConnections && (dx != 0 || dy != 0)) {
            MoveResult result = gesture.findResult(dx, dy);
            if (result != null) {
                Collection<Wire> wiresToAdd = result.getWiresToAdd();
                Graphics g = context.getGraphics();
                GraphicsUtil.switchToWidth(g, 3);
                g.setColor(Color.GRAY);
                for (Wire w : wiresToAdd) {
                    Location loc0 = w.getEnd0();
                    Location loc1 = w.getEnd1();
                    g.drawLine(loc0.getX(), loc0.getY(), loc1.getX(), loc1.getY());
                }
                GraphicsUtil.switchToWidth(g, 1);
                g.setColor(COLOR_UNMATCHED);
                for (Location conn : result.getUnconnectedLocations()) {
                    int connX = conn.getX();
                    int connY = conn.getY();
                    g.fillOval(connX - 3, connY - 3, 6, 6);
                    g.fillOval(connX + dx - 3, connY + dy - 3, 6, 6);
                }
            }
        }
    } else if (state == RECT_SELECT) {
        int left = start.getX();
        int right = left + dx;
        if (left > right) {
            int i = left;
            left = right;
            right = i;
        }
        int top = start.getY();
        int bot = top + dy;
        if (top > bot) {
            int i = top;
            top = bot;
            bot = i;
        }
        Graphics gBase = context.getGraphics();
        int w = right - left - 1;
        int h = bot - top - 1;
        if (w > 2 && h > 2) {
            gBase.setColor(BACKGROUND_RECT_SELECT);
            gBase.fillRect(left + 1, top + 1, w - 1, h - 1);
        }
        Circuit circ = canvas.getCircuit();
        Bounds bds = Bounds.create(left, top, right - left, bot - top);
        for (Component c : circ.getAllWithin(bds)) {
            Location cloc = c.getLocation();
            Graphics gDup = gBase.create();
            context.setGraphics(gDup);
            c.getFactory().drawGhost(context, COLOR_RECT_SELECT, cloc.getX(), cloc.getY(), c.getAttributeSet());
            gDup.dispose();
        }
        gBase.setColor(COLOR_RECT_SELECT);
        GraphicsUtil.switchToWidth(gBase, 2);
        if (w < 0)
            w = 0;
        if (h < 0)
            h = 0;
        gBase.drawRect(left, top, w, h);
    }
}
Also used : Graphics(java.awt.Graphics) Project(com.cburch.logisim.proj.Project) Bounds(com.cburch.logisim.data.Bounds) MoveGesture(com.cburch.logisim.tools.move.MoveGesture) Circuit(com.cburch.logisim.circuit.Circuit) MoveResult(com.cburch.logisim.tools.move.MoveResult) Wire(com.cburch.logisim.circuit.Wire) Component(com.cburch.logisim.comp.Component) Location(com.cburch.logisim.data.Location)

Example 55 with Circuit

use of com.cburch.logisim.circuit.Circuit in project logisim-evolution by reds-heig.

the class SelectTool method mouseReleased.

@Override
public void mouseReleased(Canvas canvas, Graphics g, MouseEvent e) {
    Project proj = canvas.getProject();
    if (state == MOVING) {
        setState(proj, IDLE);
        computeDxDy(proj, e, g);
        int dx = curDx;
        int dy = curDy;
        if (dx != 0 || dy != 0) {
            if (!proj.getLogisimFile().contains(canvas.getCircuit())) {
                canvas.setErrorMessage(Strings.getter("cannotModifyError"));
            } else if (proj.getSelection().hasConflictWhenMoved(dx, dy)) {
                canvas.setErrorMessage(Strings.getter("exclusiveError"));
            } else {
                boolean connect = shouldConnect(canvas, e.getModifiersEx());
                drawConnections = false;
                ReplacementMap repl;
                if (connect) {
                    MoveGesture gesture = moveGesture;
                    if (gesture == null) {
                        gesture = new MoveGesture(new MoveRequestHandler(canvas), canvas.getCircuit(), canvas.getSelection().getAnchoredComponents());
                    }
                    canvas.setErrorMessage(new ComputingMessage(dx, dy), COLOR_COMPUTING);
                    MoveResult result = gesture.forceRequest(dx, dy);
                    clearCanvasMessage(canvas, dx, dy);
                    repl = result.getReplacementMap();
                } else {
                    repl = null;
                }
                Selection sel = proj.getSelection();
                proj.doAction(SelectionActions.translate(sel, dx, dy, repl));
            }
        }
        moveGesture = null;
        proj.repaintCanvas();
    } else if (state == RECT_SELECT) {
        Bounds bds = Bounds.create(start).add(start.getX() + curDx, start.getY() + curDy);
        Circuit circuit = canvas.getCircuit();
        Selection sel = proj.getSelection();
        Collection<Component> in_sel = sel.getComponentsWithin(bds, g);
        for (Component comp : circuit.getAllWithin(bds, g)) {
            if (!in_sel.contains(comp))
                sel.add(comp);
        }
        Action act = SelectionActions.drop(sel, in_sel);
        if (act != null) {
            proj.doAction(act);
        }
        setState(proj, IDLE);
        proj.repaintCanvas();
    }
    if (e.getClickCount() >= 2) {
        Set<Component> comps = canvas.getProject().getSelection().getComponents();
        if (comps.size() == 1) {
            for (Component comp : comps) {
                if (comp.getAttributeSet().containsAttribute(StdAttr.LABEL)) {
                    String OldLabel = comp.getAttributeSet().getValue(StdAttr.LABEL);
                    SetAttributeAction act = new SetAttributeAction(canvas.getCircuit(), Strings.getter("changeComponentAttributesAction"));
                    AutoLabler.AskAndSetLabel(comp.getFactory().getDisplayName(), OldLabel, canvas.getCircuit(), comp, comp.getFactory(), comp.getAttributeSet(), act, true);
                    if (!act.isEmpty())
                        canvas.getProject().doAction(act);
                }
            }
        }
    }
}
Also used : Action(com.cburch.logisim.proj.Action) Selection(com.cburch.logisim.gui.main.Selection) Bounds(com.cburch.logisim.data.Bounds) Circuit(com.cburch.logisim.circuit.Circuit) Project(com.cburch.logisim.proj.Project) Collection(java.util.Collection) MoveGesture(com.cburch.logisim.tools.move.MoveGesture) MoveResult(com.cburch.logisim.tools.move.MoveResult) ReplacementMap(com.cburch.logisim.circuit.ReplacementMap) Component(com.cburch.logisim.comp.Component)

Aggregations

Circuit (com.cburch.logisim.circuit.Circuit)62 Component (com.cburch.logisim.comp.Component)19 SubcircuitFactory (com.cburch.logisim.circuit.SubcircuitFactory)12 Project (com.cburch.logisim.proj.Project)11 ArrayList (java.util.ArrayList)9 Wire (com.cburch.logisim.circuit.Wire)8 ComponentFactory (com.cburch.logisim.comp.ComponentFactory)8 Location (com.cburch.logisim.data.Location)8 Bounds (com.cburch.logisim.data.Bounds)6 LogisimFile (com.cburch.logisim.file.LogisimFile)6 AddTool (com.cburch.logisim.tools.AddTool)6 Tool (com.cburch.logisim.tools.Tool)6 CircuitState (com.cburch.logisim.circuit.CircuitState)5 AttributeSet (com.cburch.logisim.data.AttributeSet)5 Selection (com.cburch.logisim.gui.main.Selection)5 Action (com.cburch.logisim.proj.Action)4 CircuitMutation (com.cburch.logisim.circuit.CircuitMutation)3 ComponentDrawContext (com.cburch.logisim.comp.ComponentDrawContext)3 Graphics (java.awt.Graphics)3 CanvasObject (com.cburch.draw.model.CanvasObject)2