adds also a copy handler for the data editor, closes #719

This commit is contained in:
hneemann 2021-04-27 09:24:41 +02:00
parent f855750e5f
commit b20673c27e

View File

@ -25,6 +25,7 @@ import javax.swing.table.TableModel;
import java.awt.*;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.awt.event.ActionEvent;
import java.awt.event.WindowAdapter;
@ -42,7 +43,9 @@ public class DataEditor extends JDialog {
private static final Color MYGRAY = new Color(230, 230, 230);
private static File lastUsedFileName;
private final ValueFormatter addrFormat;
private final ValueFormatter dataFormat;
private final int addrBits;
private final int dataBits;
private final DataField localDataField;
private final JTable table;
private boolean ok = false;
@ -64,6 +67,8 @@ public class DataEditor extends JDialog {
super(SwingUtilities.windowForComponent(parent), Lang.get("key_Data"), modelIsRunning ? ModalityType.MODELESS : ModalityType.APPLICATION_MODAL);
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
this.addrBits = addrBits;
this.dataBits = dataBits;
this.dataFormat = dataFormat;
if (dataFormat.isSuitedForAddresses())
addrFormat = dataFormat;
else
@ -194,6 +199,17 @@ public class DataEditor extends JDialog {
}
}.setAcceleratorCTRLplus('V').enableAcceleratorIn(table);
new ToolTipAction(Lang.get("menu_copy")) {
@Override
public void actionPerformed(ActionEvent e) {
int[] rows = table.getSelectedRows();
if (rows.length > 0) {
Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
clipboard.setContents(new DataTransferable(((MyTableModel) table.getModel()).toString(rows)), null);
}
}
}.setAcceleratorCTRLplus('C').enableAcceleratorIn(table);
pack();
if (getWidth() < 150)
setSize(new Dimension(150, getHeight()));
@ -377,6 +393,20 @@ public class DataEditor extends JDialog {
fireEvent(new TableModelEvent(this, addr / cols));
}
}
public String toString(int[] rows) {
StringBuilder sb = new StringBuilder();
for (int r : rows) {
int offs = r * cols;
sb.append(addrFormat.formatToEdit(new Value(offs, addrBits)));
for (int c = 0; c < cols; c++) {
long val = dataField.getDataWord(offs + c);
sb.append("\t").append(dataFormat.formatToEdit(new Value(val, dataBits)));
}
sb.append(System.lineSeparator());
}
return sb.toString();
}
}
private static final class MyRenderer extends DefaultTableCellRenderer {
@ -499,4 +529,30 @@ public class DataEditor extends JDialog {
}
}
private static final class DataTransferable implements Transferable {
private final String data;
private DataTransferable(String data) {
this.data = data;
}
@Override
public DataFlavor[] getTransferDataFlavors() {
return new DataFlavor[]{DataFlavor.stringFlavor};
}
@Override
public boolean isDataFlavorSupported(DataFlavor flavor) {
return flavor == DataFlavor.stringFlavor;
}
@Override
public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException {
if (!isDataFlavorSupported(flavor))
throw new UnsupportedFlavorException(flavor);
return data;
}
}
}