use of com.cburch.logisim.proj.Action in project logisim-evolution by reds-heig.
the class LayoutEditHandler method paste.
@Override
public void paste() {
Project proj = frame.getProject();
Selection sel = frame.getCanvas().getSelection();
selectSelectTool(proj);
Action action = SelectionActions.pasteMaybe(proj, sel);
if (action != null) {
proj.doAction(action);
}
}
use of com.cburch.logisim.proj.Action 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.proj.Action in project logisim-evolution by reds-heig.
the class AddTool method setFacing.
private void setFacing(Canvas canvas, Direction facing) {
ComponentFactory source = getFactory();
if (source == null)
return;
AttributeSet base = getBaseAttributes();
Object feature = source.getFeature(ComponentFactory.FACING_ATTRIBUTE_KEY, base);
@SuppressWarnings("unchecked") Attribute<Direction> attr = (Attribute<Direction>) feature;
if (attr != null) {
Action act = ToolAttributeAction.create(this, attr, facing);
canvas.getProject().doAction(act);
}
}
use of com.cburch.logisim.proj.Action in project logisim-evolution by reds-heig.
the class AddTool method keyPressed.
@Override
public void keyPressed(Canvas canvas, KeyEvent event) {
processKeyEvent(canvas, event, KeyConfigurationEvent.KEY_PRESSED);
if (!event.isConsumed() && event.getModifiersEx() == 0) {
int KeybEvent = event.getKeyCode();
String Component = getFactory().getDisplayName();
if (!GateKeyboardModifier.TookKeyboardStrokes(KeybEvent, null, attrs, canvas, null, false))
if (AutoLabler.LabelKeyboardHandler(KeybEvent, getAttributeSet(), Component, null, getFactory(), canvas.getCircuit(), null, false)) {
canvas.repaint();
} else
switch(KeybEvent) {
case KeyEvent.VK_UP:
setFacing(canvas, Direction.NORTH);
break;
case KeyEvent.VK_DOWN:
setFacing(canvas, Direction.SOUTH);
break;
case KeyEvent.VK_LEFT:
setFacing(canvas, Direction.WEST);
break;
case KeyEvent.VK_RIGHT:
setFacing(canvas, Direction.EAST);
break;
case KeyEvent.VK_R:
Direction current = getFacing();
if (current == Direction.NORTH)
setFacing(canvas, Direction.EAST);
else if (current == Direction.EAST)
setFacing(canvas, Direction.SOUTH);
else if (current == Direction.SOUTH)
setFacing(canvas, Direction.WEST);
else
setFacing(canvas, Direction.NORTH);
break;
case KeyEvent.VK_ESCAPE:
Project proj = canvas.getProject();
Library base = proj.getLogisimFile().getLibrary("Base");
Tool next = (base == null) ? null : base.getTool("Edit Tool");
if (next != null) {
proj.setTool(next);
Action act = SelectionActions.dropAll(canvas.getSelection());
if (act != null) {
proj.doAction(act);
}
}
break;
case KeyEvent.VK_BACK_SPACE:
if (lastAddition != null && canvas.getProject().getLastAction() == lastAddition) {
canvas.getProject().undoAction();
lastAddition = null;
}
}
}
}
use of com.cburch.logisim.proj.Action in project logisim-evolution by reds-heig.
the class EditTool method keyPressed.
@Override
public void keyPressed(Canvas canvas, KeyEvent e) {
switch(e.getKeyCode()) {
case KeyEvent.VK_BACK_SPACE:
case KeyEvent.VK_DELETE:
if (!canvas.getSelection().isEmpty()) {
Action act = SelectionActions.clear(canvas.getSelection());
canvas.getProject().doAction(act);
e.consume();
} else {
wiring.keyPressed(canvas, e);
}
break;
case KeyEvent.VK_INSERT:
Action act = SelectionActions.duplicate(canvas.getSelection());
canvas.getProject().doAction(act);
e.consume();
break;
case KeyEvent.VK_UP:
if (e.getModifiersEx() == 0)
attemptReface(canvas, Direction.NORTH, e);
else
select.keyPressed(canvas, e);
break;
case KeyEvent.VK_DOWN:
if (e.getModifiersEx() == 0)
attemptReface(canvas, Direction.SOUTH, e);
else
select.keyPressed(canvas, e);
break;
case KeyEvent.VK_LEFT:
if (e.getModifiersEx() == 0)
attemptReface(canvas, Direction.WEST, e);
else
select.keyPressed(canvas, e);
break;
case KeyEvent.VK_RIGHT:
if (e.getModifiersEx() == 0)
attemptReface(canvas, Direction.EAST, e);
else
select.keyPressed(canvas, e);
break;
case KeyEvent.VK_ALT:
updateLocation(canvas, e);
e.consume();
break;
default:
select.keyPressed(canvas, e);
}
}
Aggregations