Search in sources :

Example 6 with Entry

use of com.cburch.logisim.analyze.model.Entry in project logisim-evolution by reds-heig.

the class TableTabClip method paste.

public void paste() {
    Clipboard clip = table.getToolkit().getSystemClipboard();
    Transferable xfer;
    try {
        xfer = clip.getContents(this);
    } catch (IllegalStateException | ArrayIndexOutOfBoundsException t) {
        // I don't know - the above was observed to throw an odd
        // ArrayIndexOutOfBounds
        // exception on a Linux computer using Sun's Java 5 JVM
        JOptionPane.showMessageDialog(table.getRootPane(), Strings.get("clipPasteSupportedError"), Strings.get("clipPasteErrorTitle"), JOptionPane.ERROR_MESSAGE);
        return;
    }
    Entry[][] entries;
    if (xfer.isDataFlavorSupported(binaryFlavor)) {
        try {
            Data data = (Data) xfer.getTransferData(binaryFlavor);
            entries = new Entry[data.contents.length][];
            for (int i = 0; i < entries.length; i++) {
                Entry[] row = new Entry[data.contents[i].length];
                for (int j = 0; j < row.length; j++) {
                    row[j] = Entry.parse(data.contents[i][j]);
                }
                entries[i] = row;
            }
        } catch (UnsupportedFlavorException e) {
            return;
        } catch (IOException e) {
            return;
        }
    } else if (xfer.isDataFlavorSupported(DataFlavor.stringFlavor)) {
        try {
            String buf = (String) xfer.getTransferData(DataFlavor.stringFlavor);
            StringTokenizer lines = new StringTokenizer(buf, "\r\n");
            String first;
            if (!lines.hasMoreTokens())
                return;
            first = lines.nextToken();
            StringTokenizer toks = new StringTokenizer(first, "\t,");
            String[] headers = new String[toks.countTokens()];
            Entry[] firstEntries = new Entry[headers.length];
            boolean allParsed = true;
            for (int i = 0; toks.hasMoreTokens(); i++) {
                headers[i] = toks.nextToken();
                firstEntries[i] = Entry.parse(headers[i]);
                allParsed = allParsed && firstEntries[i] != null;
            }
            int rows = lines.countTokens();
            if (allParsed)
                rows++;
            entries = new Entry[rows][];
            int cur = 0;
            if (allParsed) {
                entries[0] = firstEntries;
                cur++;
            }
            while (lines.hasMoreTokens()) {
                toks = new StringTokenizer(lines.nextToken(), "\t");
                Entry[] ents = new Entry[toks.countTokens()];
                for (int i = 0; toks.hasMoreTokens(); i++) {
                    ents[i] = Entry.parse(toks.nextToken());
                }
                entries[cur] = ents;
                cur++;
            }
        } catch (UnsupportedFlavorException e) {
            return;
        } catch (IOException e) {
            return;
        }
    } else {
        JOptionPane.showMessageDialog(table.getRootPane(), Strings.get("clipPasteSupportedError"), Strings.get("clipPasteErrorTitle"), JOptionPane.ERROR_MESSAGE);
        return;
    }
    TableTabCaret caret = table.getCaret();
    int c0 = caret.getCursorCol();
    int c1 = caret.getMarkCol();
    int r0 = caret.getCursorRow();
    int r1 = caret.getMarkRow();
    if (r0 < 0 || r1 < 0 || c0 < 0 || c1 < 0)
        return;
    TruthTable model = table.getTruthTable();
    int rows = model.getRowCount();
    int inputs = model.getInputColumnCount();
    int outputs = model.getOutputColumnCount();
    if (c0 == c1 && r0 == r1) {
        if (r0 + entries.length > rows || c0 + entries[0].length > inputs + outputs) {
            JOptionPane.showMessageDialog(table.getRootPane(), Strings.get("clipPasteEndError"), Strings.get("clipPasteErrorTitle"), JOptionPane.ERROR_MESSAGE);
            return;
        }
    } else {
        if (r0 > r1) {
            int t = r0;
            r0 = r1;
            r1 = t;
        }
        if (c0 > c1) {
            int t = c0;
            c0 = c1;
            c1 = t;
        }
        if (r1 - r0 + 1 != entries.length || c1 - c0 + 1 != entries[0].length) {
            JOptionPane.showMessageDialog(table.getRootPane(), Strings.get("clipPasteSizeError"), Strings.get("clipPasteErrorTitle"), JOptionPane.ERROR_MESSAGE);
            return;
        }
    }
    for (int r = 0; r < entries.length; r++) {
        for (int c = 0; c < entries[0].length; c++) {
            if (c0 + c >= inputs) {
                model.setOutputEntry(r0 + r, c0 + c - inputs, entries[r][c]);
            }
        }
    }
}
Also used : Transferable(java.awt.datatransfer.Transferable) IOException(java.io.IOException) UnsupportedFlavorException(java.awt.datatransfer.UnsupportedFlavorException) Entry(com.cburch.logisim.analyze.model.Entry) StringTokenizer(java.util.StringTokenizer) TruthTable(com.cburch.logisim.analyze.model.TruthTable) Clipboard(java.awt.datatransfer.Clipboard)

Aggregations

Entry (com.cburch.logisim.analyze.model.Entry)6 TruthTable (com.cburch.logisim.analyze.model.TruthTable)3 Dimension (java.awt.Dimension)2 FontMetrics (java.awt.FontMetrics)2 Graphics2D (java.awt.Graphics2D)2 Implicant (com.cburch.logisim.analyze.model.Implicant)1 Value (com.cburch.logisim.data.Value)1 Instance (com.cburch.logisim.instance.Instance)1 InstanceState (com.cburch.logisim.instance.InstanceState)1 Rectangle (java.awt.Rectangle)1 Clipboard (java.awt.datatransfer.Clipboard)1 Transferable (java.awt.datatransfer.Transferable)1 UnsupportedFlavorException (java.awt.datatransfer.UnsupportedFlavorException)1 IOException (java.io.IOException)1 ArrayList (java.util.ArrayList)1 HashMap (java.util.HashMap)1 Map (java.util.Map)1 SortedMap (java.util.SortedMap)1 StringTokenizer (java.util.StringTokenizer)1 TreeMap (java.util.TreeMap)1