Package com.cburch.logisim.gui.appear

Source Code of com.cburch.logisim.gui.appear.ClipboardActions

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

import java.util.ArrayList;
import java.util.Map;

import com.cburch.draw.model.CanvasModel;
import com.cburch.draw.model.CanvasObject;
import com.cburch.draw.util.ZOrder;
import com.cburch.logisim.circuit.appear.AppearanceAnchor;
import com.cburch.logisim.data.Direction;
import com.cburch.logisim.data.Location;
import com.cburch.logisim.proj.Action;
import com.cburch.logisim.proj.Project;
import static com.cburch.logisim.util.LocaleString.*;

public class ClipboardActions extends Action {

    public static Action cut(AppearanceCanvas canvas) {
        return new ClipboardActions(true, canvas);
    }

    public static Action copy(AppearanceCanvas canvas) {
        return new ClipboardActions(false, canvas);
    }

    private boolean remove;
    private AppearanceCanvas canvas;
    private CanvasModel canvasModel;
    private ClipboardContents oldClipboard;
    private Map<CanvasObject, Integer> affected;
    private ClipboardContents newClipboard;

    private ClipboardActions(boolean remove, AppearanceCanvas canvas) {
        this.remove = remove;
        this.canvas = canvas;
        this.canvasModel = canvas.getModel();

        ArrayList<CanvasObject> contents = new ArrayList<CanvasObject>();
        Direction anchorFacing = null;
        Location anchorLocation = null;
        ArrayList<CanvasObject> aff = new ArrayList<CanvasObject>();
        for (CanvasObject o : canvas.getSelection().getSelected()) {
            if (o.canRemove()) {
                aff.add(o);
                contents.add(o.clone());
            } else if (o instanceof AppearanceAnchor) {
                AppearanceAnchor anch = (AppearanceAnchor) o;
                anchorFacing = anch.getFacing();
                anchorLocation = anch.getLocation();
            }
        }
        contents.trimToSize();
        affected = ZOrder.getZIndex(aff, canvasModel);
        newClipboard = new ClipboardContents(contents, anchorLocation, anchorFacing);
    }

    @Override
    public String getName() {
        if (remove) {
            return getFromLocale("cutSelectionAction");
        } else {
            return getFromLocale("copySelectionAction");
        }
    }

    @Override
    public void doIt(Project proj) {
        oldClipboard = Clipboard.get();
        Clipboard.set(newClipboard);
        if (remove) {
            canvasModel.removeObjects(affected.keySet());
        }
    }

    @Override
    public void undo(Project proj) {
        if (remove) {
            canvasModel.addObjects(affected);
            canvas.getSelection().clearSelected();
            canvas.getSelection().setSelected(affected.keySet(), true);
        }
        Clipboard.set(oldClipboard);
    }

}
TOP

Related Classes of com.cburch.logisim.gui.appear.ClipboardActions

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.